CreationDecision · [`packages/experimental/creation-recommendations/src/types.ts`](../packages/experimental/creation-recommendations/src/types.ts) |
| `plugin:translator/request` | `@deepseek-ai/dsh-experimental-translator` | Provider-independent translation input, retained before dispatch. | TranslationRequestRecord · [`packages/experimental/translator/src/types.ts`](../packages/experimental/translator/src/types.ts) |
| `plugin:translator/result` | `@deepseek-ai/dsh-experimental-translator` | Successful translation, retained before it is returned to the consumer. | TranslationResultRecord · [`packages/experimental/translator/src/types.ts`](../packages/experimental/translator/src/types.ts) |
diff --git a/docs/experimental-persistence-catalog.zh.md b/docs/experimental-persistence-catalog.zh.md
index 32cb1d0533..383dcb8098 100644
--- a/docs/experimental-persistence-catalog.zh.md
+++ b/docs/experimental-persistence-catalog.zh.md
@@ -13,5 +13,6 @@
| 记录 | 所属包 | 用途 | 载荷与源码 |
|---|---|---|---|
+| `plugin:creation-recommendations/decision` | `@deepseek-ai/dsh-experimental-creation-recommendations` | New-plugin creation progress and explicit keep/undo decisions. | CreationDecision · [`packages/experimental/creation-recommendations/src/types.ts`](../packages/experimental/creation-recommendations/src/types.ts) |
| `plugin:translator/request` | `@deepseek-ai/dsh-experimental-translator` | Provider-independent translation input, retained before dispatch. | TranslationRequestRecord · [`packages/experimental/translator/src/types.ts`](../packages/experimental/translator/src/types.ts) |
| `plugin:translator/result` | `@deepseek-ai/dsh-experimental-translator` | Successful translation, retained before it is returned to the consumer. | TranslationResultRecord · [`packages/experimental/translator/src/types.ts`](../packages/experimental/translator/src/types.ts) |
diff --git a/docs/module-graph.md b/docs/module-graph.md
index ea1c6a6823..16c84e14fe 100644
--- a/docs/module-graph.md
+++ b/docs/module-graph.md
@@ -264,10 +264,12 @@ flowchart TD
pkg_experimental_client_ui_agent_team["experimental-client-ui-agent-team"]
pkg_experimental_client_ui_claude_code_mods["experimental-client-ui-claude-code-mods"]
pkg_experimental_client_ui_cot_translation["experimental-client-ui-cot-translation"]
+ pkg_experimental_client_ui_creation_recommendations["experimental-client-ui-creation-recommendations"]
pkg_experimental_client_ui_voice_input["experimental-client-ui-voice-input"]
pkg_experimental_computer_use_cua_driver_mcp["experimental-computer-use-cua-driver-mcp"]
pkg_experimental_computer_use_cua_driver_native["experimental-computer-use-cua-driver-native"]
pkg_experimental_cot_translation_bundle["experimental-cot-translation-bundle"]
+ pkg_experimental_creation_recommendations["experimental-creation-recommendations"]
pkg_experimental_cua_macos["experimental-cua-macos"]
pkg_experimental_inspector["experimental-inspector"]
pkg_experimental_inspector_profile["experimental-inspector-profile"]
@@ -929,6 +931,10 @@ flowchart TD
pkg_experimental_computer_use_cua_driver_native --> pkg_computer_use
pkg_experimental_computer_use_cua_driver_native --> pkg_system_prompt
pkg_experimental_computer_use_cua_driver_native --> pkg_tools
+ pkg_experimental_creation_recommendations --> pkg_llm
+ pkg_experimental_creation_recommendations --> pkg_session
+ pkg_experimental_creation_recommendations --> pkg_tools
+ pkg_experimental_creation_recommendations --> pkg_typert_protocol
pkg_experimental_cua_macos --> pkg_agent
pkg_experimental_cua_macos --> pkg_computer_use
pkg_experimental_cua_macos --> pkg_subprocess
@@ -1547,6 +1553,7 @@ flowchart TD
| [`experimental-badge-skill-bundle`](../packages/experimental/badge-skill-bundle) | `experimental` | — |
| [`experimental-client-ui-agent-team`](../packages/experimental/client-ui-agent-team) | `experimental` | — |
| [`experimental-client-ui-claude-code-mods`](../packages/experimental/client-ui-claude-code-mods) | `experimental` | — |
+| [`experimental-client-ui-creation-recommendations`](../packages/experimental/client-ui-creation-recommendations) | `experimental` | — |
| [`experimental-client-ui-voice-input`](../packages/experimental/client-ui-voice-input) | `experimental` | — |
| [`experimental-cot-translation-bundle`](../packages/experimental/cot-translation-bundle) | `experimental` | — |
| [`experimental-inspector`](../packages/experimental/inspector) | `experimental` | — |
@@ -1714,6 +1721,7 @@ flowchart TD
| [`experimental-browser-use-playwright-mcp`](../packages/experimental/browser-use-playwright-mcp) | `experimental` | [`agent`](../packages/core/agent), [`browser-use`](../packages/browser-use/browser-use), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools), [`working-directory`](../packages/session/working-directory) |
| [`experimental-browser-use-stagehand-native`](../packages/experimental/browser-use-stagehand-native) | `experimental` | [`agent`](../packages/core/agent), [`browser-use`](../packages/browser-use/browser-use), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools) |
| [`experimental-computer-use-cua-driver-native`](../packages/experimental/computer-use-cua-driver-native) | `experimental` | [`computer-use`](../packages/computer-use/computer-use), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools) |
+| [`experimental-creation-recommendations`](../packages/experimental/creation-recommendations) | `experimental` | [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`tools`](../packages/core/tools), [`typert-protocol`](../packages/typert/protocol) |
| [`experimental-cua-macos`](../packages/experimental/cua-macos) | `experimental` | [`agent`](../packages/core/agent), [`computer-use`](../packages/computer-use/computer-use), [`subprocess`](../packages/subprocess/subprocess), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools), [`user-questions`](../packages/interaction/user-questions) |
| [`experimental-tool-worktree`](../packages/experimental/tool-worktree) | `experimental` | [`experimental-worktree`](../packages/experimental/worktree), [`tools`](../packages/core/tools) |
| [`hooks-codex`](../packages/experimental/hooks-codex) | `experimental` | [`agent`](../packages/core/agent), [`hook-protocol`](../packages/experimental/hook-protocol), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`tools`](../packages/core/tools), [`working-directory`](../packages/session/working-directory) |
diff --git a/docs/module-graph.zh.md b/docs/module-graph.zh.md
index 1d66068c63..79a56b69e5 100644
--- a/docs/module-graph.zh.md
+++ b/docs/module-graph.zh.md
@@ -266,10 +266,12 @@ flowchart TD
pkg_experimental_client_ui_agent_team["experimental-client-ui-agent-team"]
pkg_experimental_client_ui_claude_code_mods["experimental-client-ui-claude-code-mods"]
pkg_experimental_client_ui_cot_translation["experimental-client-ui-cot-translation"]
+ pkg_experimental_client_ui_creation_recommendations["experimental-client-ui-creation-recommendations"]
pkg_experimental_client_ui_voice_input["experimental-client-ui-voice-input"]
pkg_experimental_computer_use_cua_driver_mcp["experimental-computer-use-cua-driver-mcp"]
pkg_experimental_computer_use_cua_driver_native["experimental-computer-use-cua-driver-native"]
pkg_experimental_cot_translation_bundle["experimental-cot-translation-bundle"]
+ pkg_experimental_creation_recommendations["experimental-creation-recommendations"]
pkg_experimental_cua_macos["experimental-cua-macos"]
pkg_experimental_inspector["experimental-inspector"]
pkg_experimental_inspector_profile["experimental-inspector-profile"]
@@ -931,6 +933,10 @@ flowchart TD
pkg_experimental_computer_use_cua_driver_native --> pkg_computer_use
pkg_experimental_computer_use_cua_driver_native --> pkg_system_prompt
pkg_experimental_computer_use_cua_driver_native --> pkg_tools
+ pkg_experimental_creation_recommendations --> pkg_llm
+ pkg_experimental_creation_recommendations --> pkg_session
+ pkg_experimental_creation_recommendations --> pkg_tools
+ pkg_experimental_creation_recommendations --> pkg_typert_protocol
pkg_experimental_cua_macos --> pkg_agent
pkg_experimental_cua_macos --> pkg_computer_use
pkg_experimental_cua_macos --> pkg_subprocess
@@ -1549,6 +1555,7 @@ flowchart TD
| [`experimental-badge-skill-bundle`](../packages/experimental/badge-skill-bundle) | `experimental` | — |
| [`experimental-client-ui-agent-team`](../packages/experimental/client-ui-agent-team) | `experimental` | — |
| [`experimental-client-ui-claude-code-mods`](../packages/experimental/client-ui-claude-code-mods) | `experimental` | — |
+| [`experimental-client-ui-creation-recommendations`](../packages/experimental/client-ui-creation-recommendations) | `experimental` | — |
| [`experimental-client-ui-voice-input`](../packages/experimental/client-ui-voice-input) | `experimental` | — |
| [`experimental-cot-translation-bundle`](../packages/experimental/cot-translation-bundle) | `experimental` | — |
| [`experimental-inspector`](../packages/experimental/inspector) | `experimental` | — |
@@ -1716,6 +1723,7 @@ flowchart TD
| [`experimental-browser-use-playwright-mcp`](../packages/experimental/browser-use-playwright-mcp) | `experimental` | [`agent`](../packages/core/agent), [`browser-use`](../packages/browser-use/browser-use), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools), [`working-directory`](../packages/session/working-directory) |
| [`experimental-browser-use-stagehand-native`](../packages/experimental/browser-use-stagehand-native) | `experimental` | [`agent`](../packages/core/agent), [`browser-use`](../packages/browser-use/browser-use), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools) |
| [`experimental-computer-use-cua-driver-native`](../packages/experimental/computer-use-cua-driver-native) | `experimental` | [`computer-use`](../packages/computer-use/computer-use), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools) |
+| [`experimental-creation-recommendations`](../packages/experimental/creation-recommendations) | `experimental` | [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`tools`](../packages/core/tools), [`typert-protocol`](../packages/typert/protocol) |
| [`experimental-cua-macos`](../packages/experimental/cua-macos) | `experimental` | [`agent`](../packages/core/agent), [`computer-use`](../packages/computer-use/computer-use), [`subprocess`](../packages/subprocess/subprocess), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools), [`user-questions`](../packages/interaction/user-questions) |
| [`experimental-tool-worktree`](../packages/experimental/tool-worktree) | `experimental` | [`experimental-worktree`](../packages/experimental/worktree), [`tools`](../packages/core/tools) |
| [`hooks-codex`](../packages/experimental/hooks-codex) | `experimental` | [`agent`](../packages/core/agent), [`hook-protocol`](../packages/experimental/hook-protocol), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`tools`](../packages/core/tools), [`working-directory`](../packages/session/working-directory) |
diff --git a/docs/subsystems/boot.md b/docs/subsystems/boot.md
index 530af09e92..0a3aff57fc 100644
--- a/docs/subsystems/boot.md
+++ b/docs/subsystems/boot.md
@@ -96,6 +96,27 @@ async edit( entry: Entry, change: (current: Record{expanded ? brief : brief.replace(/\s+/g, ' ').trim()}
+ {clamped && } + > +} + +/** Place one card after the complete answer. + * @param props - Completed turn and its session-bound proposals. + * @returns the first proposal, or null. + */ +// Each optional bundle owns its card and locale contracts; this small tail wrapper does not warrant a shared package. +/* jscpd:ignore-start */ +export function RecommendationTail({ turn, useRecommendations, ...props }: Pick{t('location')} · {t(slot)}
+ {decision?.application !== undefined && decision.application !== 'applied' + &&{t(decision.application)}
} + {error !== undefined &&{t(error)}
} + {offer && <> + {options && } + + >} + {decision?.phase === 'creating' && } + {installed && } + {decision?.bundleName !== undefined &&{t('sourceRetained')}
} +{t('creationMethod')}
+{t('creationCost')}
+{t('creationBackground')}
+{t(decision.application)}
} {error !== undefined &&{t(error)}
} diff --git a/packages/experimental/client-ui-creation-recommendations/src/client/definition.ts b/packages/experimental/client-ui-creation-recommendations/src/client/definition.ts index f91204f808..4eda577fc5 100644 --- a/packages/experimental/client-ui-creation-recommendations/src/client/definition.ts +++ b/packages/experimental/client-ui-creation-recommendations/src/client/definition.ts @@ -25,8 +25,10 @@ export function recommendationOf(event: { readonly type: string; readonly data: const value = record(card) && card.action === 'create_personalized_page' ? card.data : result.meta.creationRecommendation if (!record(value) || typeof value.callId !== 'string' || value.callId === '' || typeof value.title !== 'string' || value.title === '' || typeof value.brief !== 'string' || value.brief === '' - || value.slot !== 'sidebar-right' && value.slot !== 'page' && value.slot !== 'sidebar-left') return undefined - return { callId: value.callId as ToolCallId, title: value.title, brief: value.brief, slot: value.slot } + || value.slot !== 'sidebar-right' && value.slot !== 'page' && value.slot !== 'sidebar-left' + || value.initialContent !== undefined && typeof value.initialContent !== 'string') return undefined + return { callId: value.callId as ToolCallId, title: value.title, brief: value.brief, slot: value.slot, + ...value.initialContent === undefined ? {} : { initialContent: value.initialContent } } } /** Retain proposal data without rendering inside the tool sequence. */ diff --git a/packages/experimental/client-ui-creation-recommendations/src/client/locales.ts b/packages/experimental/client-ui-creation-recommendations/src/client/locales.ts index daca031238..46bd97c402 100644 --- a/packages/experimental/client-ui-creation-recommendations/src/client/locales.ts +++ b/packages/experimental/client-ui-creation-recommendations/src/client/locales.ts @@ -6,6 +6,7 @@ export const en = { creationCost: 'Creation may take a while and use a large number of tokens.', creationBackground: 'Click Create to start in the background. You can keep chatting here.', expandPlan: 'View full plan', collapsePlan: 'Collapse plan', + initialContent: 'Starts with', expandContent: 'View all content', collapseContent: 'Collapse content', 'sidebar-right': 'Right sidebar', page: 'Session tab', 'sidebar-left': 'Global page', custom: 'Write your own', 'sidebar-rightHint': 'View alongside this conversation', pageHint: 'Open beside Chat and Trajectory', @@ -15,7 +16,7 @@ export const en = { customPlaceholder: 'For example, a left sidebar entry that opens a full-page calendar', create: 'Create', starting: 'Starting…', dismiss: 'Not now', retry: 'Create again', keep: 'Keep', undo: 'Undo', scope: 'You can remove it at any time', - dismissed: 'Dismissed', expired: 'Expired', creating: 'Creating in the background', + dismissed: 'Dismissed', replaced: 'Replaced', creating: 'Creating in the background', cancel: 'Cancel creation', cancelling: 'Cancelling…', installing: 'Installing…', sourceRetained: 'Undo keeps the source files in the original workspace’s .dsh-created-plugins/ folder.', installed: 'Installed', kept: 'Kept', removed: 'Removed', @@ -44,6 +45,7 @@ export const zh: Record