Merge feat/creation-recommendations into plugin recommendation experiment
This commit is contained in:
commit
c6d9a964d3
193 files changed
+5786
-3181
No files matched your search
@@ -9,8 +9,8 @@
|
||||
en: 329c6ff947559b11
|
||||
zh: 5c4c1053236d319b
|
||||
/agent-note-plugin-market-discover-page-and-index-reader/decision:
|
||||
en: cc4d17a51dd479b7
|
||||
zh: 1fecf669b117f51c
|
||||
en: dd32bedaa763a4cb
|
||||
zh: 27b1a81bd744d8c1
|
||||
/agent-note-plugin-market-discover-page-and-index-reader/alternatives-considered:
|
||||
en: 62e7691dc8efd5c0
|
||||
zh: b13769634979b950
|
||||
|
||||
@@ -12,7 +12,7 @@ The plugin manager owns profile package operations and must not remount while an
|
||||
|
||||
## Decision
|
||||
|
||||
The feature ships as the experimental optional [custom plugin markets bundle](../../../../packages/experimental/plugin-market-bundle/README.md), off by default, which mounts both rows below; with it off, neither the service, the Discover tab, nor the `plugin_market` tool exists, and the Plugins page shows no tabs. A separate Host service, [`pluginMarket`](../../../../packages/boot/plugin-market/README.md), reads indexes. It requires `pluginManager` for read-only calls and never writes the profile. Its `indexes` configuration field is volatile: Settings writes only volatile fields, and the Loader commits a volatile-only change into the running reference without remounting any plugin. Other fields (`fetchTimeoutMs`, `maxBytes`, `cacheTtlMs`) are ordinary configuration.
|
||||
The feature ships as the experimental optional [custom plugin indexes bundle](../../../../packages/experimental/plugin-market-bundle/README.md), off by default, which mounts both rows below; with it off, neither the service, the Discover tab, nor the `plugin_market` tool exists, and the Plugins page shows no tabs. A separate Host service, [`pluginMarket`](../../../../packages/boot/plugin-market/README.md), reads indexes. It requires `pluginManager` for read-only calls and never writes the profile. Its `indexes` configuration field is volatile: Settings writes only volatile fields, and the Loader commits a volatile-only change into the running reference without remounting any plugin. Other fields (`fetchTimeoutMs`, `maxBytes`, `cacheTtlMs`) are ordinary configuration.
|
||||
|
||||
Index URLs use `http:` or `https:`, without credentials or fragment. `file:` is excluded because relative icon references would resolve to URLs a browser cannot load. `search` and `entry` accept only a configured URL, so the Host never fetches an address a client supplies. The Host fetches through the process proxy, refuses redirects, bounds the body, and validates with the shared format package; an invalid index affects only its own URL.
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ Status: implemented
|
||||
|
||||
## 决策
|
||||
|
||||
该功能以实验性的可选[自定义插件市场组合包](../../../../packages/experimental/plugin-market-bundle/README.zh.md)发布,默认关闭,并挂载下面两行;关闭时,服务、「发现」标签页和 `plugin_market` 工具都不存在,插件页也不显示标签页。由独立的 Host 服务 [`pluginMarket`](../../../../packages/boot/plugin-market/README.zh.md) 读取索引。它依赖 `pluginManager` 进行只读调用,从不写入 profile。它的 `indexes` 配置字段是 volatile 字段:Settings 只写入 volatile 字段,Loader 把只涉及 volatile 字段的变更提交到运行中的引用,不重新挂载任何插件。其他字段(`fetchTimeoutMs`、`maxBytes`、`cacheTtlMs`)是普通配置。
|
||||
该功能以实验性的可选[自定义插件索引组合包](../../../../packages/experimental/plugin-market-bundle/README.zh.md)发布,默认关闭,并挂载下面两行;关闭时,服务、「发现」标签页和 `plugin_market` 工具都不存在,插件页也不显示标签页。由独立的 Host 服务 [`pluginMarket`](../../../../packages/boot/plugin-market/README.zh.md) 读取索引。它依赖 `pluginManager` 进行只读调用,从不写入 profile。它的 `indexes` 配置字段是 volatile 字段:Settings 只写入 volatile 字段,Loader 把只涉及 volatile 字段的变更提交到运行中的引用,不重新挂载任何插件。其他字段(`fetchTimeoutMs`、`maxBytes`、`cacheTtlMs`)是普通配置。
|
||||
|
||||
索引 URL 使用 `http:` 或 `https:`,不含凭据或片段。排除 `file:`,因为相对图标引用会解析为浏览器无法加载的 URL。`search` 和 `entry` 只接受已配置的 URL,因此 Host 从不获取客户端提供的地址。Host 通过进程代理获取,拒绝重定向,限制响应体大小,并用共享的格式包校验;无效索引只影响它自己的 URL。
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/** The completed answer offers creation; choosing a location does not start it. */
|
||||
/** The completed answer offers creation through a propose_action card; choosing a location does not start it. */
|
||||
import { readFile } from 'node:fs/promises'
|
||||
import { join } from 'node:path'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
@@ -37,17 +37,17 @@ describe('creation recommendation after an explicit wish', () => {
|
||||
await input.fill(fixtureUserPrompts(await readFile(fixture, 'utf8'))[0]!)
|
||||
await input.press('Enter')
|
||||
await settled
|
||||
const card = page.locator('[data-creation-recommendation]')
|
||||
const card = page.locator('[data-action-card]')
|
||||
await card.waitFor({ state: 'visible' })
|
||||
expect(await card.count()).toBe(1)
|
||||
expect(await page.locator('[data-turn-tail] [data-creation-recommendation]').count()).toBe(1)
|
||||
expect(await page.locator('[data-turn-tail] [data-action-card]').count()).toBe(1)
|
||||
const answer = page.getByText('I can create a persistent counter with increment and reset controls. Choose its location below.', { exact: true })
|
||||
const answerBox = await answer.boundingBox()
|
||||
const cardBox = await card.boundingBox()
|
||||
expect(answerBox).not.toBeNull()
|
||||
expect(cardBox!.y).toBeGreaterThanOrEqual(answerBox!.y + answerBox!.height)
|
||||
expect(await card.getByRole('button', { name: 'Create', exact: true }).isEnabled()).toBe(true)
|
||||
await compareOrRefreshGolden(join(directory, 'offered.expected.md'), await captureStableAria(page, '[data-creation-recommendation]', scaffold.workspaceCwd), scaffold.mode)
|
||||
await compareOrRefreshGolden(join(directory, 'offered.expected.md'), await captureStableAria(page, '[data-action-card]', scaffold.workspaceCwd), scaffold.mode)
|
||||
const info = card.getByRole('button', { name: 'How creation works and token usage', exact: true })
|
||||
expect(await info.getAttribute('aria-expanded')).toBe('true')
|
||||
expect(await card.getByRole('note').innerText()).toContain('large number of tokens')
|
||||
@@ -66,11 +66,11 @@ describe('creation recommendation after an explicit wish', () => {
|
||||
expect(await card.getByRole('note').innerText()).toContain('keep chatting here')
|
||||
expect(await card.getByRole('button', { name: 'Create', exact: true }).isEnabled()).toBe(true)
|
||||
expect(await card.evaluate(element => element.scrollWidth <= element.clientWidth)).toBe(true)
|
||||
await compareOrRefreshGolden(join(directory, 'info.expected.md'), await captureStableAria(page, '[data-creation-recommendation]', scaffold.workspaceCwd), scaffold.mode)
|
||||
await compareOrRefreshGolden(join(directory, 'info.expected.md'), await captureStableAria(page, '[data-action-card]', scaffold.workspaceCwd), scaffold.mode)
|
||||
await info.press('Space')
|
||||
expect(await info.getAttribute('aria-expanded')).toBe('false')
|
||||
expect(await card.getByRole('note').count()).toBe(0)
|
||||
const expand = card.getByRole('button', { name: 'View full plan', exact: true })
|
||||
const expand = card.getByRole('button', { name: 'Show more', exact: true })
|
||||
const plan = page.locator(`[id="${await expand.getAttribute('aria-controls')}"]`)
|
||||
const compactHeight = await plan.evaluate(element => element.clientHeight)
|
||||
const previewText = await plan.innerText()
|
||||
@@ -82,8 +82,8 @@ describe('creation recommendation after an explicit wish', () => {
|
||||
await expand.click()
|
||||
expect(await plan.evaluate(element => element.clientHeight)).toBeGreaterThan(compactHeight)
|
||||
expect(await card.getByRole('button', { name: 'Create', exact: true }).isEnabled()).toBe(true)
|
||||
await compareOrRefreshGolden(join(directory, 'expanded.expected.md'), await captureStableAria(page, '[data-creation-recommendation]', scaffold.workspaceCwd), scaffold.mode)
|
||||
await card.getByRole('button', { name: 'Collapse plan', exact: true }).click()
|
||||
await compareOrRefreshGolden(join(directory, 'expanded.expected.md'), await captureStableAria(page, '[data-action-card]', scaffold.workspaceCwd), scaffold.mode)
|
||||
await card.getByRole('button', { name: 'Show less', exact: true }).click()
|
||||
const location = card.getByRole('button', { name: 'Add to: Right sidebar', exact: true })
|
||||
await location.click()
|
||||
expect(await page.getByRole('menuitem').count()).toBe(4)
|
||||
@@ -97,12 +97,12 @@ describe('creation recommendation after an explicit wish', () => {
|
||||
expect(await card.getByRole('button', { name: 'Create', exact: true }).isEnabled()).toBe(false)
|
||||
await custom.fill('A left sidebar entry that opens a full-page calendar')
|
||||
expect(await card.getByRole('button', { name: 'Create', exact: true }).isEnabled()).toBe(true)
|
||||
await compareOrRefreshGolden(join(directory, 'custom-location.expected.md'), await captureStableAria(page, '[data-creation-recommendation]', scaffold.workspaceCwd), scaffold.mode)
|
||||
await compareOrRefreshGolden(join(directory, 'custom-location.expected.md'), await captureStableAria(page, '[data-action-card]', scaffold.workspaceCwd), scaffold.mode)
|
||||
await card.getByRole('button', { name: 'Add to: Write your own', exact: true }).click()
|
||||
await page.getByRole('menuitem', { name: /Session tab/ }).click()
|
||||
expect(await card.getByRole('button', { name: 'Add to: Session tab', exact: true }).isVisible()).toBe(true)
|
||||
expect(await custom.count()).toBe(0)
|
||||
await compareOrRefreshGolden(join(directory, 'options.expected.md'), await captureStableAria(page, '[data-creation-recommendation]', scaffold.workspaceCwd), scaffold.mode)
|
||||
await compareOrRefreshGolden(join(directory, 'options.expected.md'), await captureStableAria(page, '[data-action-card]', scaffold.workspaceCwd), scaffold.mode)
|
||||
expect(await card.evaluate(element => element.scrollWidth <= element.clientWidth)).toBe(true)
|
||||
await card.getByRole('button', { name: 'Not now', exact: true }).click()
|
||||
await card.getByRole('status').getByText('Dismissed', { exact: true }).waitFor()
|
||||
@@ -111,9 +111,9 @@ describe('creation recommendation after an explicit wish', () => {
|
||||
await card.getByRole('status').getByText('Dismissed', { exact: true }).waitFor()
|
||||
acknowledgeReloadConnectionLoss(tripwire, warnings)
|
||||
expect(await card.getByRole('button', { name: 'Create', exact: true }).count()).toBe(0)
|
||||
expect(await card.getByRole('button', { name: 'View full plan', exact: true }).isVisible()).toBe(true)
|
||||
expect(await card.getByRole('button', { name: 'Show more', exact: true }).isVisible()).toBe(true)
|
||||
expect((await scaffold.ctx.pluginManager.listBundles()).some(bundle => bundle.name.startsWith('@dsh-local/view-'))).toBe(false)
|
||||
await compareOrRefreshGolden(join(directory, 'dismissed.expected.md'), await captureStableAria(page, '[data-creation-recommendation]', scaffold.workspaceCwd), scaffold.mode)
|
||||
await compareOrRefreshGolden(join(directory, 'dismissed.expected.md'), await captureStableAria(page, '[data-action-card]', scaffold.workspaceCwd), scaffold.mode)
|
||||
const statusSettled = scaffold.whenTurnSettled()
|
||||
await input.fill(fixtureUserPrompts(await readFile(fixture, 'utf8'))[1]!)
|
||||
await input.press('Enter')
|
||||
|
||||
@@ -33,10 +33,10 @@
|
||||
- status
|
||||
- switch "启用 语音输入"
|
||||
- listitem:
|
||||
- button "查看 自定义插件市场": 自定义插件市场
|
||||
- text: 实验性 在插件页添加「发现」标签页,从你添加的插件市场索引浏览和安装插件。
|
||||
- button "查看 自定义插件索引": 自定义插件索引
|
||||
- text: 实验性 在插件页添加「发现」标签页,从你添加的插件索引浏览和安装插件。
|
||||
- status
|
||||
- switch "启用 自定义插件市场"
|
||||
- switch "启用 自定义插件索引"
|
||||
- listitem:
|
||||
- button "查看 自动授权审查": 自动授权审查
|
||||
- text: 实验性 提供自动审查权限模式,由模型在每次工具调用前判断是否授权。
|
||||
|
||||
@@ -33,10 +33,10 @@
|
||||
- status
|
||||
- switch "启用 语音输入"
|
||||
- listitem:
|
||||
- button "查看 自定义插件市场": 自定义插件市场
|
||||
- text: 实验性 在插件页添加「发现」标签页,从你添加的插件市场索引浏览和安装插件。
|
||||
- button "查看 自定义插件索引": 自定义插件索引
|
||||
- text: 实验性 在插件页添加「发现」标签页,从你添加的插件索引浏览和安装插件。
|
||||
- status
|
||||
- switch "启用 自定义插件市场"
|
||||
- switch "启用 自定义插件索引"
|
||||
- listitem:
|
||||
- button "查看 自动授权审查": 自动授权审查
|
||||
- text: 实验性 提供自动审查权限模式,由模型在每次工具调用前判断是否授权。
|
||||
|
||||
@@ -33,10 +33,10 @@
|
||||
- status
|
||||
- switch "启用 语音输入"
|
||||
- listitem:
|
||||
- button "查看 自定义插件市场": 自定义插件市场
|
||||
- text: 实验性 在插件页添加「发现」标签页,从你添加的插件市场索引浏览和安装插件。
|
||||
- button "查看 自定义插件索引": 自定义插件索引
|
||||
- text: 实验性 在插件页添加「发现」标签页,从你添加的插件索引浏览和安装插件。
|
||||
- status
|
||||
- switch "启用 自定义插件市场"
|
||||
- switch "启用 自定义插件索引"
|
||||
- listitem:
|
||||
- button "查看 自动授权审查": 自动授权审查
|
||||
- text: 实验性 提供自动审查权限模式,由模型在每次工具调用前判断是否授权。
|
||||
|
||||
@@ -837,7 +837,7 @@ describe('web e2e: plugin manager', () => {
|
||||
expect(await panel.locator('[data-plugin-group="basic"] [data-plugin-item]').count()).toBe(4)
|
||||
expect(await panel.locator('[data-plugin-package="@deepseek-ai/dsh-experimental-inspector"]').count()).toBe(0)
|
||||
expect(await panel.getByRole('switch', { name: '启用 语音输入', exact: true }).getAttribute('aria-checked')).toBe('false')
|
||||
expect(await panel.getByRole('switch', { name: '启用 自定义插件市场', exact: true }).getAttribute('aria-checked')).toBe('false')
|
||||
expect(await panel.getByRole('switch', { name: '启用 自定义插件索引', exact: true }).getAttribute('aria-checked')).toBe('false')
|
||||
expect(await panel.getByRole('switch', { name: '启用 开发者工具', exact: true }).count()).toBe(0)
|
||||
expect(await panel.getByText(/Cordis|Chrome DevTools/).count()).toBe(0)
|
||||
await panel.getByRole('button', { name: '更多', exact: true }).click()
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
en: 41d772192075e133
|
||||
zh: 5ef3da69b4de1d8a
|
||||
/capability-seams-and-core-services:
|
||||
en: ea2f2da586173476
|
||||
zh: c8d5ca2a6bd5f244
|
||||
en: 02cd44eb5166d665
|
||||
zh: de0ee0e2ccd07a2a
|
||||
@@ -7,12 +7,10 @@ A service can be a core spine service, a swappable capability seam, a bundle/com
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
pkg_experimental_action_cards["experimental-action-cards"]
|
||||
svc_actionCards["ctx.actionCards<br/>Optional action cards"]
|
||||
pkg_experimental_creation_recommendations["experimental-creation-recommendations"]
|
||||
svc_creationRecommendations["ctx.creationRecommendations<br/>Explicit-need interface creation"]
|
||||
pkg_experimental_client_ui_creation_recommendations["experimental-client-ui-creation-recommendations"]
|
||||
pkg_experimental_plugin_recommendations["experimental-plugin-recommendations"]
|
||||
svc_pluginRecommendations["ctx.pluginRecommendations<br/>Explicit-need plugin recommendations"]
|
||||
pkg_experimental_client_ui_plugin_recommendations["experimental-client-ui-plugin-recommendations"]
|
||||
pkg_experimental_client_ui_action_cards["experimental-client-ui-action-cards"]
|
||||
pkg_headless["headless"]
|
||||
svc_headlessStartup["ctx.headlessStartup<br/>Headless invocation options"]
|
||||
pkg_experimental_client_ui_cot_translation["experimental-client-ui-cot-translation"]
|
||||
@@ -347,6 +345,7 @@ flowchart LR
|
||||
pkg_deepseek_account --> svc_deepseekAccount
|
||||
pkg_deepseek_account_platform --> svc_deepseekAccount
|
||||
pkg_deepseek_llm_api_extensions --> svc_deepseekLlmApiExtensions
|
||||
pkg_experimental_action_cards --> svc_actionCards
|
||||
pkg_experimental_agent_team --> svc_agentTeams
|
||||
pkg_experimental_api_speech_to_text --> svc_speechController
|
||||
pkg_experimental_browser_use_chrome_devtools_mcp --> svc_browserUse
|
||||
@@ -356,8 +355,6 @@ flowchart LR
|
||||
pkg_experimental_client_ui_cot_translation --> svc_cotTranslation
|
||||
pkg_experimental_computer_use_cua_driver_mcp --> svc_computerUse
|
||||
pkg_experimental_computer_use_cua_driver_native --> svc_computerUse
|
||||
pkg_experimental_creation_recommendations --> svc_creationRecommendations
|
||||
pkg_experimental_plugin_recommendations --> svc_pluginRecommendations
|
||||
pkg_experimental_ptc_runtime_python --> svc_ptcRuntime
|
||||
pkg_experimental_speech_to_text --> svc_speechToText
|
||||
pkg_experimental_speech_to_text_sensevoice --> svc_speechToText
|
||||
@@ -465,6 +462,8 @@ flowchart LR
|
||||
pkg_working_directory --> svc_workingDirectory
|
||||
pkg_workspace --> svc_workspaceRegistry
|
||||
pkg_workspace_changes --> svc_workspaceChanges
|
||||
svc_actionCards --> pkg_experimental_client_ui_action_cards
|
||||
svc_actionCards --> pkg_experimental_creation_recommendations
|
||||
svc_agentDefaultModel --> pkg_api_session_controller
|
||||
svc_agentDefaultModel --> pkg_headless
|
||||
svc_agentLoop --> pkg_base
|
||||
@@ -493,7 +492,6 @@ flowchart LR
|
||||
svc_connection --> pkg_api_gateway
|
||||
svc_connection --> pkg_host_frontend_static
|
||||
svc_cordisInspect --> pkg_tool_cordis
|
||||
svc_creationRecommendations --> pkg_experimental_client_ui_creation_recommendations
|
||||
svc_credentials --> pkg_api_settings_controller
|
||||
svc_credentials --> pkg_llm_deepseek
|
||||
svc_credentials --> pkg_llm_pi_ai
|
||||
@@ -524,7 +522,6 @@ flowchart LR
|
||||
svc_pluginManager --> pkg_ui_settings_plugin_inventory
|
||||
svc_pluginMarket --> pkg_client_ui_plugin_market
|
||||
svc_pluginMarket --> pkg_plugin_market
|
||||
svc_pluginRecommendations --> pkg_experimental_client_ui_plugin_recommendations
|
||||
svc_pluginRegistryProbe --> pkg_client_ui_plugin_manager
|
||||
svc_profileContext --> pkg_plugin_manager
|
||||
svc_ptcRuntime --> pkg_tool_executor_ptc
|
||||
@@ -629,8 +626,7 @@ flowchart LR
|
||||
|
||||
| ctx key | Role | Owner | Implementations | Direct consumers | Companion plugins | Note |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| `ctx.creationRecommendations` | `service` | [`experimental-creation-recommendations`](../packages/experimental/creation-recommendations) | - | [`experimental-client-ui-creation-recommendations`](../packages/experimental/client-ui-creation-recommendations) | - | Starts a Creator after a human choice and owns installation and removal of the new bundle. |
|
||||
| `ctx.pluginRecommendations` | `service` | [`experimental-plugin-recommendations`](../packages/experimental/plugin-recommendations) | - | [`experimental-client-ui-plugin-recommendations`](../packages/experimental/client-ui-plugin-recommendations) | - | Offers official catalog entries and records explicit user activation through the profile plugin manager. |
|
||||
| `ctx.actionCards` | `service` | [`experimental-action-cards`](../packages/experimental/action-cards) | - | [`experimental-creation-recommendations`](../packages/experimental/creation-recommendations), [`experimental-client-ui-action-cards`](../packages/experimental/client-ui-action-cards) | - | Owns the card tool, card state, user actions and status notices; card kinds register their actions and handlers. |
|
||||
| `ctx.headlessStartup` | `core` | [`headless`](../packages/bundle/headless) | - | [`headless`](../packages/bundle/headless) | - | Supplies parsed task and run options to the headless runner and its sandbox-policy configuration. |
|
||||
| `ctx.cotTranslation` | `service` | [`experimental-client-ui-cot-translation`](../packages/experimental/client-ui-cot-translation) | - | - | - | Serves reasoning translations, reuses saved results, and joins ordinary Session activation for uncached inactive Sessions. |
|
||||
| `ctx.translator` | `service` | [`experimental-translator`](../packages/experimental/translator) | - | [`experimental-client-ui-cot-translation`](../packages/experimental/client-ui-cot-translation) | - | Resolves Google or Bing requests and retains shared experimental records through the active Session writer. |
|
||||
|
||||
@@ -9,12 +9,10 @@
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
pkg_experimental_action_cards["experimental-action-cards"]
|
||||
svc_actionCards["ctx.actionCards<br/>Optional action cards"]
|
||||
pkg_experimental_creation_recommendations["experimental-creation-recommendations"]
|
||||
svc_creationRecommendations["ctx.creationRecommendations<br/>Explicit-need interface creation"]
|
||||
pkg_experimental_client_ui_creation_recommendations["experimental-client-ui-creation-recommendations"]
|
||||
pkg_experimental_plugin_recommendations["experimental-plugin-recommendations"]
|
||||
svc_pluginRecommendations["ctx.pluginRecommendations<br/>Explicit-need plugin recommendations"]
|
||||
pkg_experimental_client_ui_plugin_recommendations["experimental-client-ui-plugin-recommendations"]
|
||||
pkg_experimental_client_ui_action_cards["experimental-client-ui-action-cards"]
|
||||
pkg_headless["headless"]
|
||||
svc_headlessStartup["ctx.headlessStartup<br/>Headless invocation options"]
|
||||
pkg_experimental_client_ui_cot_translation["experimental-client-ui-cot-translation"]
|
||||
@@ -349,6 +347,7 @@ flowchart LR
|
||||
pkg_deepseek_account --> svc_deepseekAccount
|
||||
pkg_deepseek_account_platform --> svc_deepseekAccount
|
||||
pkg_deepseek_llm_api_extensions --> svc_deepseekLlmApiExtensions
|
||||
pkg_experimental_action_cards --> svc_actionCards
|
||||
pkg_experimental_agent_team --> svc_agentTeams
|
||||
pkg_experimental_api_speech_to_text --> svc_speechController
|
||||
pkg_experimental_browser_use_chrome_devtools_mcp --> svc_browserUse
|
||||
@@ -358,8 +357,6 @@ flowchart LR
|
||||
pkg_experimental_client_ui_cot_translation --> svc_cotTranslation
|
||||
pkg_experimental_computer_use_cua_driver_mcp --> svc_computerUse
|
||||
pkg_experimental_computer_use_cua_driver_native --> svc_computerUse
|
||||
pkg_experimental_creation_recommendations --> svc_creationRecommendations
|
||||
pkg_experimental_plugin_recommendations --> svc_pluginRecommendations
|
||||
pkg_experimental_ptc_runtime_python --> svc_ptcRuntime
|
||||
pkg_experimental_speech_to_text --> svc_speechToText
|
||||
pkg_experimental_speech_to_text_sensevoice --> svc_speechToText
|
||||
@@ -467,6 +464,8 @@ flowchart LR
|
||||
pkg_working_directory --> svc_workingDirectory
|
||||
pkg_workspace --> svc_workspaceRegistry
|
||||
pkg_workspace_changes --> svc_workspaceChanges
|
||||
svc_actionCards --> pkg_experimental_client_ui_action_cards
|
||||
svc_actionCards --> pkg_experimental_creation_recommendations
|
||||
svc_agentDefaultModel --> pkg_api_session_controller
|
||||
svc_agentDefaultModel --> pkg_headless
|
||||
svc_agentLoop --> pkg_base
|
||||
@@ -495,7 +494,6 @@ flowchart LR
|
||||
svc_connection --> pkg_api_gateway
|
||||
svc_connection --> pkg_host_frontend_static
|
||||
svc_cordisInspect --> pkg_tool_cordis
|
||||
svc_creationRecommendations --> pkg_experimental_client_ui_creation_recommendations
|
||||
svc_credentials --> pkg_api_settings_controller
|
||||
svc_credentials --> pkg_llm_deepseek
|
||||
svc_credentials --> pkg_llm_pi_ai
|
||||
@@ -526,7 +524,6 @@ flowchart LR
|
||||
svc_pluginManager --> pkg_ui_settings_plugin_inventory
|
||||
svc_pluginMarket --> pkg_client_ui_plugin_market
|
||||
svc_pluginMarket --> pkg_plugin_market
|
||||
svc_pluginRecommendations --> pkg_experimental_client_ui_plugin_recommendations
|
||||
svc_pluginRegistryProbe --> pkg_client_ui_plugin_manager
|
||||
svc_profileContext --> pkg_plugin_manager
|
||||
svc_ptcRuntime --> pkg_tool_executor_ptc
|
||||
@@ -631,8 +628,7 @@ flowchart LR
|
||||
|
||||
| ctx 键 | 角色 | 所属包 | 实现 | 直接消费方 | 配套插件 | 说明 |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| `ctx.creationRecommendations` | `service` | [`experimental-creation-recommendations`](../packages/experimental/creation-recommendations) | - | [`experimental-client-ui-creation-recommendations`](../packages/experimental/client-ui-creation-recommendations) | - | 经用户选择后启动 Creator,并负责新 Bundle 的安装和移除。 |
|
||||
| `ctx.pluginRecommendations` | `service` | [`experimental-plugin-recommendations`](../packages/experimental/plugin-recommendations) | - | [`experimental-client-ui-plugin-recommendations`](../packages/experimental/client-ui-plugin-recommendations) | - | 提供官方目录推荐,并通过配置插件管理器记录用户的显式启用。 |
|
||||
| `ctx.actionCards` | `service` | [`experimental-action-cards`](../packages/experimental/action-cards) | - | [`experimental-creation-recommendations`](../packages/experimental/creation-recommendations), [`experimental-client-ui-action-cards`](../packages/experimental/client-ui-action-cards) | - | 负责卡片工具、卡片状态、用户操作和状态通知;各卡片种类注册自己的动作和处理器。 |
|
||||
| `ctx.headlessStartup` | `core` | [`headless`](../packages/bundle/headless) | - | [`headless`](../packages/bundle/headless) | - | 将解析后的任务和运行选项提供给无界面运行器及其 sandbox-policy 配置。 |
|
||||
| `ctx.cotTranslation` | `service` | [`experimental-client-ui-cot-translation`](../packages/experimental/client-ui-cot-translation) | - | - | - | 为展开的思考内容提供有界的 Session 翻译请求,不改变模型可见历史。 |
|
||||
| `ctx.translator` | `service` | [`experimental-translator`](../packages/experimental/translator) | - | [`experimental-client-ui-cot-translation`](../packages/experimental/client-ui-cot-translation) | - | 解析 Google 或 Bing 请求,并可选保留统一的实验性 Session 记录。 |
|
||||
|
||||
+17
-15
@@ -843,6 +843,21 @@ export interface Config {
|
||||
```
|
||||
<!-- END GENERATED config-catalog:@deepseek-ai/dsh-deepseek-account-platform -->
|
||||
|
||||
<!-- BEGIN GENERATED config-catalog:@deepseek-ai/dsh-experimental-action-cards -->
|
||||
<a id="deepseek-aidsh-experimental-action-cards"></a>
|
||||
|
||||
## `@deepseek-ai/dsh-experimental-action-cards`
|
||||
|
||||
- `inject`: `tools` · `agents` · `sessionProjections` · `remoteAccess`
|
||||
- `refs`: `z` (`zod`)
|
||||
- `source`: [`packages/experimental/action-cards/src/index.ts:23`](../packages/experimental/action-cards/src/index.ts)
|
||||
|
||||
```ts config-catalog
|
||||
/** Validated card limits after schema defaults. */
|
||||
export type Config = z.infer<typeof Config>
|
||||
```
|
||||
<!-- END GENERATED config-catalog:@deepseek-ai/dsh-experimental-action-cards -->
|
||||
|
||||
<!-- BEGIN GENERATED config-catalog:@deepseek-ai/dsh-experimental-agent-team -->
|
||||
<a id="deepseek-aidsh-experimental-agent-team"></a>
|
||||
|
||||
@@ -1036,20 +1051,6 @@ export interface Config {
|
||||
```
|
||||
<!-- END GENERATED config-catalog:@deepseek-ai/dsh-experimental-computer-use-cua-driver-mcp -->
|
||||
|
||||
<!-- BEGIN GENERATED config-catalog:@deepseek-ai/dsh-experimental-creation-recommendations -->
|
||||
<a id="deepseek-aidsh-experimental-creation-recommendations"></a>
|
||||
|
||||
## `@deepseek-ai/dsh-experimental-creation-recommendations`
|
||||
|
||||
- `refs`: `z` (`zod`)
|
||||
- `source`: [`packages/experimental/creation-recommendations/src/index.ts:34`](../packages/experimental/creation-recommendations/src/index.ts)
|
||||
|
||||
```ts config-catalog
|
||||
/** Validated card limits after schema defaults. */
|
||||
export type Config = z.infer<typeof Config>
|
||||
```
|
||||
<!-- END GENERATED config-catalog:@deepseek-ai/dsh-experimental-creation-recommendations -->
|
||||
|
||||
<!-- BEGIN GENERATED config-catalog:@deepseek-ai/dsh-experimental-cua-macos -->
|
||||
<a id="deepseek-aidsh-experimental-cua-macos"></a>
|
||||
|
||||
@@ -4790,12 +4791,14 @@ These load from a `cordis.yml` entry with no `config:` block; they declare no co
|
||||
| `@deepseek-ai/dsh-deepseek-llm-api-extensions` | — | [`packages/llm/deepseek-llm-api-extensions/src/index.ts`](../packages/llm/deepseek-llm-api-extensions/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-deliverable-file-references` | `systemPrompt` | [`packages/deliverables/deliverable-file-references/src/index.ts`](../packages/deliverables/deliverable-file-references/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-auto-review` | `approval` · `llm` · `permissionPresets` · `sessions` · `tools` · `workingDirectory` | [`packages/experimental/auto-review/src/index.ts`](../packages/experimental/auto-review/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-client-ui-action-cards` | — | [`packages/experimental/client-ui-action-cards/src/index.ts`](../packages/experimental/client-ui-action-cards/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-client-ui-agent-team` | — | [`packages/experimental/client-ui-agent-team/src/index.ts`](../packages/experimental/client-ui-agent-team/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-client-ui-claude-code-mods` | — | [`packages/experimental/client-ui-claude-code-mods/src/index.ts`](../packages/experimental/client-ui-claude-code-mods/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-client-ui-creation-recommendations` | — | [`packages/experimental/client-ui-creation-recommendations/src/index.ts`](../packages/experimental/client-ui-creation-recommendations/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-client-ui-plugin-recommendations` | — | [`packages/experimental/client-ui-plugin-recommendations/src/index.ts`](../packages/experimental/client-ui-plugin-recommendations/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-client-ui-voice-input` | — | [`packages/experimental/client-ui-voice-input/src/index.ts`](../packages/experimental/client-ui-voice-input/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-computer-use-cua-driver-native` | `computerUse` · `tools` · `systemPrompt` | [`packages/experimental/computer-use-cua-driver-native/src/index.ts`](../packages/experimental/computer-use-cua-driver-native/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-creation-recommendations` | `tools` · `pluginManager` · `agents` · `subagents` · `profileContext` · `skills` · `actionCards` | [`packages/experimental/creation-recommendations/src/index.ts`](../packages/experimental/creation-recommendations/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-session-inspector` | — | [`packages/experimental/session-inspector/src/index.ts`](../packages/experimental/session-inspector/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-tool-worktree` | `tools` · `worktrees` | [`packages/experimental/tool-worktree/src/index.ts`](../packages/experimental/tool-worktree/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-fs-observation-policy` | — | [`packages/fs/fs-observation-policy/src/index.ts`](../packages/fs/fs-observation-policy/src/index.ts) |
|
||||
@@ -4930,7 +4933,6 @@ Imported as libraries by other packages; a `cordis.yml` cannot load them.
|
||||
| `@deepseek-ai/dsh-typert-generator` | — | [`packages/typert/generator/src/index.ts`](../packages/typert/generator/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-typert-protocol` | — | [`packages/typert/protocol/src/index.ts`](../packages/typert/protocol/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-typert-registry` | — | [`packages/typert/registry/src/index.ts`](../packages/typert/registry/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-util-action-block` | — | [`packages/util/action-block/src/index.ts`](../packages/util/action-block/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-util-code-language` | — | [`packages/util/code-language/src/index.ts`](../packages/util/code-language/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-util-crypto` | — | [`packages/util/crypto/src/index.ts`](../packages/util/crypto/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-util-file-drag` | — | [`packages/util/file-drag/src/index.ts`](../packages/util/file-drag/src/index.ts) |
|
||||
|
||||
+17
-15
@@ -845,6 +845,21 @@ export interface Config {
|
||||
```
|
||||
<!-- END GENERATED config-catalog:@deepseek-ai/dsh-deepseek-account-platform -->
|
||||
|
||||
<!-- BEGIN GENERATED config-catalog:@deepseek-ai/dsh-experimental-action-cards -->
|
||||
<a id="deepseek-aidsh-experimental-action-cards"></a>
|
||||
|
||||
## `@deepseek-ai/dsh-experimental-action-cards`
|
||||
|
||||
- `inject`: `tools` · `agents` · `sessionProjections` · `remoteAccess`
|
||||
- `refs`: `z` (`zod`)
|
||||
- `source`: [`packages/experimental/action-cards/src/index.ts:23`](../packages/experimental/action-cards/src/index.ts)
|
||||
|
||||
```ts config-catalog
|
||||
/** Validated card limits after schema defaults. */
|
||||
export type Config = z.infer<typeof Config>
|
||||
```
|
||||
<!-- END GENERATED config-catalog:@deepseek-ai/dsh-experimental-action-cards -->
|
||||
|
||||
<!-- BEGIN GENERATED config-catalog:@deepseek-ai/dsh-experimental-agent-team -->
|
||||
<a id="deepseek-aidsh-experimental-agent-team"></a>
|
||||
|
||||
@@ -1038,20 +1053,6 @@ export interface Config {
|
||||
```
|
||||
<!-- END GENERATED config-catalog:@deepseek-ai/dsh-experimental-computer-use-cua-driver-mcp -->
|
||||
|
||||
<!-- BEGIN GENERATED config-catalog:@deepseek-ai/dsh-experimental-creation-recommendations -->
|
||||
<a id="deepseek-aidsh-experimental-creation-recommendations"></a>
|
||||
|
||||
## `@deepseek-ai/dsh-experimental-creation-recommendations`
|
||||
|
||||
- `refs`: `z` (`zod`)
|
||||
- `source`: [`packages/experimental/creation-recommendations/src/index.ts:34`](../packages/experimental/creation-recommendations/src/index.ts)
|
||||
|
||||
```ts config-catalog
|
||||
/** Validated card limits after schema defaults. */
|
||||
export type Config = z.infer<typeof Config>
|
||||
```
|
||||
<!-- END GENERATED config-catalog:@deepseek-ai/dsh-experimental-creation-recommendations -->
|
||||
|
||||
<!-- BEGIN GENERATED config-catalog:@deepseek-ai/dsh-experimental-cua-macos -->
|
||||
<a id="deepseek-aidsh-experimental-cua-macos"></a>
|
||||
|
||||
@@ -4792,12 +4793,14 @@ export interface Config {
|
||||
| `@deepseek-ai/dsh-deepseek-llm-api-extensions` | — | [`packages/llm/deepseek-llm-api-extensions/src/index.ts`](../packages/llm/deepseek-llm-api-extensions/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-deliverable-file-references` | `systemPrompt` | [`packages/deliverables/deliverable-file-references/src/index.ts`](../packages/deliverables/deliverable-file-references/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-auto-review` | `approval` · `llm` · `permissionPresets` · `sessions` · `tools` · `workingDirectory` | [`packages/experimental/auto-review/src/index.ts`](../packages/experimental/auto-review/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-client-ui-action-cards` | — | [`packages/experimental/client-ui-action-cards/src/index.ts`](../packages/experimental/client-ui-action-cards/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-client-ui-agent-team` | — | [`packages/experimental/client-ui-agent-team/src/index.ts`](../packages/experimental/client-ui-agent-team/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-client-ui-claude-code-mods` | — | [`packages/experimental/client-ui-claude-code-mods/src/index.ts`](../packages/experimental/client-ui-claude-code-mods/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-client-ui-creation-recommendations` | — | [`packages/experimental/client-ui-creation-recommendations/src/index.ts`](../packages/experimental/client-ui-creation-recommendations/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-client-ui-plugin-recommendations` | — | [`packages/experimental/client-ui-plugin-recommendations/src/index.ts`](../packages/experimental/client-ui-plugin-recommendations/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-client-ui-voice-input` | — | [`packages/experimental/client-ui-voice-input/src/index.ts`](../packages/experimental/client-ui-voice-input/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-computer-use-cua-driver-native` | `computerUse` · `tools` · `systemPrompt` | [`packages/experimental/computer-use-cua-driver-native/src/index.ts`](../packages/experimental/computer-use-cua-driver-native/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-creation-recommendations` | `tools` · `pluginManager` · `agents` · `subagents` · `profileContext` · `skills` · `actionCards` | [`packages/experimental/creation-recommendations/src/index.ts`](../packages/experimental/creation-recommendations/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-session-inspector` | — | [`packages/experimental/session-inspector/src/index.ts`](../packages/experimental/session-inspector/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-experimental-tool-worktree` | `tools` · `worktrees` | [`packages/experimental/tool-worktree/src/index.ts`](../packages/experimental/tool-worktree/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-fs-observation-policy` | — | [`packages/fs/fs-observation-policy/src/index.ts`](../packages/fs/fs-observation-policy/src/index.ts) |
|
||||
@@ -4932,7 +4935,6 @@ export interface Config {
|
||||
| `@deepseek-ai/dsh-typert-generator` | — | [`packages/typert/generator/src/index.ts`](../packages/typert/generator/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-typert-protocol` | — | [`packages/typert/protocol/src/index.ts`](../packages/typert/protocol/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-typert-registry` | — | [`packages/typert/registry/src/index.ts`](../packages/typert/registry/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-util-action-block` | — | [`packages/util/action-block/src/index.ts`](../packages/util/action-block/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-util-code-language` | — | [`packages/util/code-language/src/index.ts`](../packages/util/code-language/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-util-crypto` | — | [`packages/util/crypto/src/index.ts`](../packages/util/crypto/src/index.ts) |
|
||||
| `@deepseek-ai/dsh-util-file-drag` | — | [`packages/util/file-drag/src/index.ts`](../packages/util/file-drag/src/index.ts) |
|
||||
|
||||
@@ -21,8 +21,8 @@
|
||||
en: 0894bd9f35430753
|
||||
zh: 2d28090e71134edd
|
||||
/cookbook-adding-a-workspace-package/5-add-optional-plugin-display-metadata:
|
||||
en: 1238eaea376391d1
|
||||
zh: c7e606f95d8980bf
|
||||
en: afa5e8169fb42ecc
|
||||
zh: 14b1b85354436766
|
||||
/cookbook-adding-a-workspace-package/6-verify:
|
||||
en: 80c7fb90b1175aae
|
||||
zh: 2ba37962dbc57299
|
||||
@@ -147,7 +147,7 @@ Export `<package name>/locale/en.json` for locale lookup; expose `<package name>
|
||||
|
||||
For an image on bundle cards, details, and component rows, a package-root plugin sets top-level `"icon": "./icon.svg"` in its exported manifest, or exports `./icon` when that field is omitted. A subpath plugin exports its own icon, such as `"./search/icon": "./search.svg"`. Include each image in `files`. A manifest `icon` is relative to the manifest's directory; absolute paths, URLs, paths outside that directory, and symlinks resolving outside it are rejected. An exported icon resolves through Node exports like locale resources and must remain inside its package. SVG, PNG, JPEG (`.jpg`/`.jpeg`), and WebP files are supported up to 256 KiB. Images must be self-contained; SVG is rendered as an image, not inline HTML. The Host returns a data URL without activating the plugin. Invalid declarations or unreadable files produce a metadata diagnostic while retaining valid text, without trying the export; missing or undecodable images use the panel's default artwork.
|
||||
|
||||
A bundle can also set `meta.detail` to a Markdown file path relative to the package root, such as `"docs/DETAIL.md"` in `locale/en.json` and `"docs/DETAIL.zh.md"` in `locale/zh.json`; it is read from these files at the package root. The path uses `/`, stays inside the package, ends in `.md` or `.markdown`, and has no package-field fallback; keep its images beside it, and list its top-level directory, such as `docs`, in `files` right after the locale resources, as `check-workspace-constraints` requires. The named file must exist in a subdirectory of the package; a root-level document is rejected because its neighboring images would not be published. A bundle's page in **Plugins**, and its market entry page when the [custom plugin markets bundle](../../packages/experimental/plugin-market-bundle/README.md) is on, show the file for the active UI language as the plugin's detail document. Without `meta.detail` they show the package README, and a market entry page then falls back to the declared repository's README; the [document order](../../packages/util/plugin-detail/README.md#document-order) defines the rules. Write it for users, and reference images by paths relative to the file.
|
||||
A bundle can also set `meta.detail` to a Markdown file path relative to the package root, such as `"docs/DETAIL.md"` in `locale/en.json` and `"docs/DETAIL.zh.md"` in `locale/zh.json`; it is read from these files at the package root. The path uses `/`, stays inside the package, ends in `.md` or `.markdown`, and has no package-field fallback; keep its images beside it, and list its top-level directory, such as `docs`, in `files` right after the locale resources, as `check-workspace-constraints` requires. The named file must exist in a subdirectory of the package; a root-level document is rejected because its neighboring images would not be published. A bundle's page in **Plugins**, and its index entry page when the [custom plugin indexes bundle](../../packages/experimental/plugin-market-bundle/README.md) is on, show the file for the active UI language as the plugin's detail document. Without `meta.detail` they show the package README, and an index entry page then falls back to the declared repository's README; the [document order](../../packages/util/plugin-detail/README.md#document-order) defines the rules. Write it for users, and reference images by paths relative to the file.
|
||||
|
||||
Installed bundle cards and details, component lists and configuration details, and Settings' plugin inventory display this metadata, including disabled and preset plugins. Reads do not activate plugins.
|
||||
|
||||
|
||||
@@ -147,7 +147,7 @@ Append-only, prefix-stable, replacing, or independent behavior, including the ex
|
||||
|
||||
要在组合包卡片、详情和组件行显示图片,包根插件在导出清单顶层设置 `"icon": "./icon.svg"`,或在省略该字段时导出 `./icon`。子路径插件导出自己的图标,例如 `"./search/icon": "./search.svg"`。将每张图片加入 `files`。清单 `icon` 相对于清单所在目录;绝对路径、URL、目录外路径,以及解析到目录外的符号链接均被拒绝。导出的图标像 locale 资源一样经 Node exports 解析,且必须位于所属包内。支持不超过 256 KiB 的 SVG、PNG、JPEG(`.jpg`/`.jpeg`)和 WebP 文件。图片必须自包含;SVG 作为图片渲染,不作为内联 HTML。Host 返回 data URL,不激活插件。声明无效或文件不可读时,显示元信息诊断并保留有效文本,不再尝试导出的图标;图片缺失或无法解码时使用面板的默认插画。
|
||||
|
||||
组合包还可以把 `meta.detail` 设为相对于包根目录的 Markdown 文件路径,例如在 `locale/en.json` 中设为 `"docs/DETAIL.md"`,在 `locale/zh.json` 中设为 `"docs/DETAIL.zh.md"`;读取时使用包根目录下的这些文件。路径使用 `/`,必须位于包内,以 `.md` 或 `.markdown` 结尾,且没有包字段回退;图片放在该文件旁边,并按 `check-workspace-constraints` 的要求,在 `files` 中紧接语言资源之后列出该文件的顶层目录,例如 `docs`。该文件必须位于包的子目录中且已存在;包根目录下的文档会被拒绝,因为其旁边的图片不会被发布。组合包在**插件**中的页面,以及启用[自定义插件市场组合包](../../packages/experimental/plugin-market-bundle/README.zh.md)时其市场条目页面,把当前界面语言对应的该文件作为插件的详细介绍文档显示。没有 `meta.detail` 时,它们显示包 README;市场条目页面在此之后还会回退到所声明仓库的 README;规则由[文档顺序](../../packages/util/plugin-detail/README.zh.md#document-order)定义。该文档面向用户编写,图片使用相对于该文件的路径引用。
|
||||
组合包还可以把 `meta.detail` 设为相对于包根目录的 Markdown 文件路径,例如在 `locale/en.json` 中设为 `"docs/DETAIL.md"`,在 `locale/zh.json` 中设为 `"docs/DETAIL.zh.md"`;读取时使用包根目录下的这些文件。路径使用 `/`,必须位于包内,以 `.md` 或 `.markdown` 结尾,且没有包字段回退;图片放在该文件旁边,并按 `check-workspace-constraints` 的要求,在 `files` 中紧接语言资源之后列出该文件的顶层目录,例如 `docs`。该文件必须位于包的子目录中且已存在;包根目录下的文档会被拒绝,因为其旁边的图片不会被发布。组合包在**插件**中的页面,以及启用[自定义插件索引组合包](../../packages/experimental/plugin-market-bundle/README.zh.md)时其索引条目页面,把当前界面语言对应的该文件作为插件的详细介绍文档显示。没有 `meta.detail` 时,它们显示包 README;索引条目页面在此之后还会回退到所声明仓库的 README;规则由[文档顺序](../../packages/util/plugin-detail/README.zh.md#document-order)定义。该文档面向用户编写,图片使用相对于该文件的路径引用。
|
||||
|
||||
已安装 bundle 的卡片和详情、组件列表与配置详情、设置中的插件清单都展示这些元信息,包括禁用插件和预设内插件。读取时不激活插件。
|
||||
|
||||
|
||||
@@ -12,12 +12,12 @@ This matrix shows which packages dispatch each harness-owned event and which pac
|
||||
| `agent-preset/selected` | `emit` | [`packages/preset/agent-preset-registry/src/types.ts:66`](../packages/preset/agent-preset-registry/src/types.ts) | [`agent-preset-registry`](../packages/preset/agent-preset-registry) (`emit`) | [`cua`](../packages/experimental/cua), `remotes` |
|
||||
| `agent/assistant-stream` | `emit` | [`packages/core/agent/src/runtime-types.ts:399`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`headless`](../packages/bundle/headless), `session-controller` |
|
||||
| `agent/created` | `serial` | [`packages/core/agent/src/runtime-types.ts:290`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`serial`) | `agent-team`, `browser-use-runtime`, `claude-code-mods`, `creation-recommendations`, [`cua`](../packages/experimental/cua), [`file-reference-local`](../packages/context/file-reference-local), [`goal`](../packages/goal/goal), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/experimental/hooks-claude-code), [`hooks-codex`](../packages/experimental/hooks-codex), [`loader-smoke`](../packages/test-support/loader-smoke), [`permission-presets`](../packages/interaction/permission-presets), `session-controller`, `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) |
|
||||
| `agent/disposed` | `emit` | [`packages/core/agent/src/runtime-types.ts:299`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`events.dispatch`) | [`agent-loop`](../packages/core/agent-loop), `claude-code-mods`, `creation-recommendations`, [`file-reference-local`](../packages/context/file-reference-local), [`goal-round-driver`](../packages/goal/goal-round-driver), `session-controller`, [`subagent`](../packages/subagent/subagent), `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) |
|
||||
| `agent/disposed` | `emit` | [`packages/core/agent/src/runtime-types.ts:299`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`events.dispatch`) | `action-cards`, [`agent-loop`](../packages/core/agent-loop), `claude-code-mods`, `creation-recommendations`, [`file-reference-local`](../packages/context/file-reference-local), [`goal-round-driver`](../packages/goal/goal-round-driver), `session-controller`, [`subagent`](../packages/subagent/subagent), `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) |
|
||||
| `agent/error` | `emit` | [`packages/core/agent/src/runtime-types.ts:429`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`acp`](../packages/acp/acp), [`deepseek-account`](../packages/credentials/deepseek-account), [`goal-round-driver`](../packages/goal/goal-round-driver), [`headless`](../packages/bundle/headless), `server`, `session-controller`, [`session-telemetry`](../packages/session/session-telemetry), [`subagent`](../packages/subagent/subagent) |
|
||||
| `agent/inbox/claimed` | `emit` | [`packages/core/agent/src/runtime-types.ts:328`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`acp`](../packages/acp/acp), [`goal-round-driver`](../packages/goal/goal-round-driver), [`subagent`](../packages/subagent/subagent), [`tool-jobs`](../packages/jobs/tool-jobs), [`user-questions`](../packages/interaction/user-questions) |
|
||||
| `agent/inbox/discarded` | `emit` | [`packages/core/agent/src/runtime-types.ts:336`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`goal-round-driver`](../packages/goal/goal-round-driver), [`subagent`](../packages/subagent/subagent), [`user-questions`](../packages/interaction/user-questions) |
|
||||
| `agent/inbox/inserted` | `emit` | [`packages/core/agent/src/runtime-types.ts:317`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`goal-round-driver`](../packages/goal/goal-round-driver), [`subagent`](../packages/subagent/subagent), [`tool-jobs`](../packages/jobs/tool-jobs) |
|
||||
| `agent/pre-step` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:350`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`agent`](../packages/core/agent), [`agent-instructions`](../packages/context/agent-instructions), `claude-code-mods`, [`compaction-basic`](../packages/compaction/compaction-basic), `creation-recommendations`, [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/experimental/hooks-claude-code), [`hooks-codex`](../packages/experimental/hooks-codex), [`plan-mode`](../packages/plan/plan-mode), `plugin-recommendations`, [`repeat-tool-reminder`](../packages/guard/repeat-tool-reminder), [`session-checkpoint-policy`](../packages/session/session-checkpoint-policy), `session-controller`, [`session-reference`](../packages/context/session-reference), [`time-context`](../packages/context/time-context), [`tmux-context`](../packages/context/tmux-context), [`tool-skill`](../packages/skill/tool-skill) |
|
||||
| `agent/pre-step` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:350`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | `action-cards`, [`agent`](../packages/core/agent), [`agent-instructions`](../packages/context/agent-instructions), `claude-code-mods`, [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/experimental/hooks-claude-code), [`hooks-codex`](../packages/experimental/hooks-codex), [`plan-mode`](../packages/plan/plan-mode), [`repeat-tool-reminder`](../packages/guard/repeat-tool-reminder), [`session-checkpoint-policy`](../packages/session/session-checkpoint-policy), `session-controller`, [`session-reference`](../packages/context/session-reference), [`time-context`](../packages/context/time-context), [`tmux-context`](../packages/context/tmux-context), [`tool-skill`](../packages/skill/tool-skill) |
|
||||
| `agent/request-error` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:389`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`compaction-basic`](../packages/compaction/compaction-basic), [`compaction-image-offload`](../packages/compaction/compaction-image-offload), [`llm-retry`](../packages/llm/llm-retry) |
|
||||
| `agent/status` | `emit` | [`packages/core/agent/src/runtime-types.ts:309`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`acp`](../packages/acp/acp), `agent-team`, [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), `server`, `session-controller` |
|
||||
| `agent/turn-stopping` | `serial` | [`packages/core/agent/src/runtime-types.ts:417`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`serial`) | [`hooks-claude-code`](../packages/experimental/hooks-claude-code), [`hooks-codex`](../packages/experimental/hooks-codex), [`workspace-changes`](../packages/deliverables/workspace-changes) |
|
||||
@@ -80,7 +80,7 @@ This matrix shows which packages dispatch each harness-owned event and which pac
|
||||
| `tools/post-execute` | `waterfall` | [`packages/core/tools/src/events.ts:41`](../packages/core/tools/src/events.ts) | [`tools`](../packages/core/tools) (`waterfall`) | `claude-code-mods`, [`hooks-claude-code`](../packages/experimental/hooks-claude-code), [`hooks-codex`](../packages/experimental/hooks-codex), [`repeat-tool-reminder`](../packages/guard/repeat-tool-reminder), [`spill-policy`](../packages/spill/spill-policy), [`tool-fs-search`](../packages/fs/tool-fs-search) |
|
||||
| `tools/pre-execute` | `waterfall` | [`packages/core/tools/src/events.ts:18`](../packages/core/tools/src/events.ts) | [`tools`](../packages/core/tools) (`waterfall`) | `auto-review`, [`hooks-claude-code`](../packages/experimental/hooks-claude-code), [`hooks-codex`](../packages/experimental/hooks-codex), [`tool-jobs`](../packages/jobs/tool-jobs), [`workspace-changes`](../packages/deliverables/workspace-changes) |
|
||||
| `tools/ptc-dispatch-log` | `waterfall` | [`packages/core/tool-executor-ptc/src/runtime-types.ts:46`](../packages/core/tool-executor-ptc/src/runtime-types.ts) | [`tool-executor-ptc`](../packages/core/tool-executor-ptc) (`waterfall`) | [`spill-policy`](../packages/spill/spill-policy) |
|
||||
| `tools/result` | `emit` | [`packages/core/tools/src/events.ts:49`](../packages/core/tools/src/events.ts) | [`tools`](../packages/core/tools) (`events.dispatch`) | [`agent-instructions`](../packages/context/agent-instructions), `claude-code-mods`, [`subagent`](../packages/subagent/subagent), [`tool-present`](../packages/deliverables/tool-present) |
|
||||
| `tools/result` | `emit` | [`packages/core/tools/src/events.ts:49`](../packages/core/tools/src/events.ts) | [`tools`](../packages/core/tools) (`events.dispatch`) | `action-cards`, [`agent-instructions`](../packages/context/agent-instructions), `claude-code-mods`, [`subagent`](../packages/subagent/subagent), [`tool-present`](../packages/deliverables/tool-present) |
|
||||
| `user-questions/request` | `waterfall` | [`packages/interaction/user-questions/src/types.ts:174`](../packages/interaction/user-questions/src/types.ts) | [`user-questions`](../packages/interaction/user-questions) (`waterfall`) | `remotes`, `server` |
|
||||
| `webserver/index-inject` | `emit` | [`packages/host/webserver/src/index.ts:44`](../packages/host/webserver/src/index.ts) | `webserver` (`emit`) | `connection`, `inspector`, `modules`, `remote-access`, `shortcuts`, `ui-sidebar-documentpreview`, `ui-theme` |
|
||||
| `workflow/agent-end` | `emit` | [`packages/workflow/workflow/src/index.ts:79`](../packages/workflow/workflow/src/index.ts) | [`workflow`](../packages/workflow/workflow) (`events.dispatch`) | [`tool-workflow`](../packages/workflow/tool-workflow) |
|
||||
|
||||
@@ -14,12 +14,12 @@
|
||||
| `agent-preset/selected` | `emit` | [`packages/preset/agent-preset-registry/src/types.ts:66`](../packages/preset/agent-preset-registry/src/types.ts) | [`agent-preset-registry`](../packages/preset/agent-preset-registry) (`emit`) | [`cua`](../packages/experimental/cua), `remotes` |
|
||||
| `agent/assistant-stream` | `emit` | [`packages/core/agent/src/runtime-types.ts:399`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`headless`](../packages/bundle/headless), `session-controller` |
|
||||
| `agent/created` | `serial` | [`packages/core/agent/src/runtime-types.ts:290`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`serial`) | `agent-team`, `browser-use-runtime`, `claude-code-mods`, `creation-recommendations`, [`cua`](../packages/experimental/cua), [`file-reference-local`](../packages/context/file-reference-local), [`goal`](../packages/goal/goal), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/experimental/hooks-claude-code), [`hooks-codex`](../packages/experimental/hooks-codex), [`loader-smoke`](../packages/test-support/loader-smoke), [`permission-presets`](../packages/interaction/permission-presets), `session-controller`, `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) |
|
||||
| `agent/disposed` | `emit` | [`packages/core/agent/src/runtime-types.ts:299`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`events.dispatch`) | [`agent-loop`](../packages/core/agent-loop), `claude-code-mods`, `creation-recommendations`, [`file-reference-local`](../packages/context/file-reference-local), [`goal-round-driver`](../packages/goal/goal-round-driver), `session-controller`, [`subagent`](../packages/subagent/subagent), `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) |
|
||||
| `agent/disposed` | `emit` | [`packages/core/agent/src/runtime-types.ts:299`](../packages/core/agent/src/runtime-types.ts) | [`agent`](../packages/core/agent) (`events.dispatch`) | `action-cards`, [`agent-loop`](../packages/core/agent-loop), `claude-code-mods`, `creation-recommendations`, [`file-reference-local`](../packages/context/file-reference-local), [`goal-round-driver`](../packages/goal/goal-round-driver), `session-controller`, [`subagent`](../packages/subagent/subagent), `tool-agent-team`, [`tool-subagent`](../packages/subagent/tool-subagent) |
|
||||
| `agent/error` | `emit` | [`packages/core/agent/src/runtime-types.ts:429`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`acp`](../packages/acp/acp), [`deepseek-account`](../packages/credentials/deepseek-account), [`goal-round-driver`](../packages/goal/goal-round-driver), [`headless`](../packages/bundle/headless), `server`, `session-controller`, [`session-telemetry`](../packages/session/session-telemetry), [`subagent`](../packages/subagent/subagent) |
|
||||
| `agent/inbox/claimed` | `emit` | [`packages/core/agent/src/runtime-types.ts:328`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`acp`](../packages/acp/acp), [`goal-round-driver`](../packages/goal/goal-round-driver), [`subagent`](../packages/subagent/subagent), [`tool-jobs`](../packages/jobs/tool-jobs), [`user-questions`](../packages/interaction/user-questions) |
|
||||
| `agent/inbox/discarded` | `emit` | [`packages/core/agent/src/runtime-types.ts:336`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`goal-round-driver`](../packages/goal/goal-round-driver), [`subagent`](../packages/subagent/subagent), [`user-questions`](../packages/interaction/user-questions) |
|
||||
| `agent/inbox/inserted` | `emit` | [`packages/core/agent/src/runtime-types.ts:317`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`goal-round-driver`](../packages/goal/goal-round-driver), [`subagent`](../packages/subagent/subagent), [`tool-jobs`](../packages/jobs/tool-jobs) |
|
||||
| `agent/pre-step` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:350`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`agent`](../packages/core/agent), [`agent-instructions`](../packages/context/agent-instructions), `claude-code-mods`, [`compaction-basic`](../packages/compaction/compaction-basic), `creation-recommendations`, [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/experimental/hooks-claude-code), [`hooks-codex`](../packages/experimental/hooks-codex), [`plan-mode`](../packages/plan/plan-mode), `plugin-recommendations`, [`repeat-tool-reminder`](../packages/guard/repeat-tool-reminder), [`session-checkpoint-policy`](../packages/session/session-checkpoint-policy), `session-controller`, [`session-reference`](../packages/context/session-reference), [`time-context`](../packages/context/time-context), [`tmux-context`](../packages/context/tmux-context), [`tool-skill`](../packages/skill/tool-skill) |
|
||||
| `agent/pre-step` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:350`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | `action-cards`, [`agent`](../packages/core/agent), [`agent-instructions`](../packages/context/agent-instructions), `claude-code-mods`, [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), [`hooks-claude-code`](../packages/experimental/hooks-claude-code), [`hooks-codex`](../packages/experimental/hooks-codex), [`plan-mode`](../packages/plan/plan-mode), [`repeat-tool-reminder`](../packages/guard/repeat-tool-reminder), [`session-checkpoint-policy`](../packages/session/session-checkpoint-policy), `session-controller`, [`session-reference`](../packages/context/session-reference), [`time-context`](../packages/context/time-context), [`tmux-context`](../packages/context/tmux-context), [`tool-skill`](../packages/skill/tool-skill) |
|
||||
| `agent/request-error` | `waterfall` | [`packages/core/agent/src/runtime-types.ts:389`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`waterfall`) | [`compaction-basic`](../packages/compaction/compaction-basic), [`compaction-image-offload`](../packages/compaction/compaction-image-offload), [`llm-retry`](../packages/llm/llm-retry) |
|
||||
| `agent/status` | `emit` | [`packages/core/agent/src/runtime-types.ts:309`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`emit`) | [`acp`](../packages/acp/acp), `agent-team`, [`compaction-basic`](../packages/compaction/compaction-basic), [`goal-round-driver`](../packages/goal/goal-round-driver), `server`, `session-controller` |
|
||||
| `agent/turn-stopping` | `serial` | [`packages/core/agent/src/runtime-types.ts:417`](../packages/core/agent/src/runtime-types.ts) | [`agent-loop`](../packages/core/agent-loop) (`serial`) | [`hooks-claude-code`](../packages/experimental/hooks-claude-code), [`hooks-codex`](../packages/experimental/hooks-codex), [`workspace-changes`](../packages/deliverables/workspace-changes) |
|
||||
@@ -82,7 +82,7 @@
|
||||
| `tools/post-execute` | `waterfall` | [`packages/core/tools/src/events.ts:41`](../packages/core/tools/src/events.ts) | [`tools`](../packages/core/tools) (`waterfall`) | `claude-code-mods`, [`hooks-claude-code`](../packages/experimental/hooks-claude-code), [`hooks-codex`](../packages/experimental/hooks-codex), [`repeat-tool-reminder`](../packages/guard/repeat-tool-reminder), [`spill-policy`](../packages/spill/spill-policy), [`tool-fs-search`](../packages/fs/tool-fs-search) |
|
||||
| `tools/pre-execute` | `waterfall` | [`packages/core/tools/src/events.ts:18`](../packages/core/tools/src/events.ts) | [`tools`](../packages/core/tools) (`waterfall`) | `auto-review`, [`hooks-claude-code`](../packages/experimental/hooks-claude-code), [`hooks-codex`](../packages/experimental/hooks-codex), [`tool-jobs`](../packages/jobs/tool-jobs), [`workspace-changes`](../packages/deliverables/workspace-changes) |
|
||||
| `tools/ptc-dispatch-log` | `waterfall` | [`packages/core/tool-executor-ptc/src/runtime-types.ts:46`](../packages/core/tool-executor-ptc/src/runtime-types.ts) | [`tool-executor-ptc`](../packages/core/tool-executor-ptc) (`waterfall`) | [`spill-policy`](../packages/spill/spill-policy) |
|
||||
| `tools/result` | `emit` | [`packages/core/tools/src/events.ts:49`](../packages/core/tools/src/events.ts) | [`tools`](../packages/core/tools) (`events.dispatch`) | [`agent-instructions`](../packages/context/agent-instructions), `claude-code-mods`, [`subagent`](../packages/subagent/subagent), [`tool-present`](../packages/deliverables/tool-present) |
|
||||
| `tools/result` | `emit` | [`packages/core/tools/src/events.ts:49`](../packages/core/tools/src/events.ts) | [`tools`](../packages/core/tools) (`events.dispatch`) | `action-cards`, [`agent-instructions`](../packages/context/agent-instructions), `claude-code-mods`, [`subagent`](../packages/subagent/subagent), [`tool-present`](../packages/deliverables/tool-present) |
|
||||
| `user-questions/request` | `waterfall` | [`packages/interaction/user-questions/src/types.ts:174`](../packages/interaction/user-questions/src/types.ts) | [`user-questions`](../packages/interaction/user-questions) (`waterfall`) | `remotes`, `server` |
|
||||
| `webserver/index-inject` | `emit` | [`packages/host/webserver/src/index.ts:44`](../packages/host/webserver/src/index.ts) | `webserver` (`emit`) | `connection`, `inspector`, `modules`, `remote-access`, `shortcuts`, `ui-sidebar-documentpreview`, `ui-theme` |
|
||||
| `workflow/agent-end` | `emit` | [`packages/workflow/workflow/src/index.ts:79`](../packages/workflow/workflow/src/index.ts) | [`workflow`](../packages/workflow/workflow) (`events.dispatch`) | [`tool-workflow`](../packages/workflow/tool-workflow) |
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
en: a11f106978c9dce7
|
||||
zh: a11f106978c9dce7
|
||||
/experimental-plugin-record-catalog:
|
||||
en: b0edc513d622b1c7
|
||||
zh: 057dc2a8e3b46e28
|
||||
en: 292d2b1448650f82
|
||||
zh: c4c7118a82026e12
|
||||
@@ -13,7 +13,6 @@ Shared Session event declarations and resolved schemas appear in the [Session pe
|
||||
|
||||
| Record | Owner | Purpose | Payload and source |
|
||||
|---|---|---|---|
|
||||
| `plugin:creation-recommendations/decision` | `@deepseek-ai/dsh-experimental-creation-recommendations` | New-plugin creation progress and explicit keep/undo decisions. | <code>CreationDecision</code> · [`packages/experimental/creation-recommendations/src/types.ts`](../packages/experimental/creation-recommendations/src/types.ts) |
|
||||
| `plugin:plugin-recommendations/decision` | `@deepseek-ai/dsh-experimental-plugin-recommendations` | Informational receipt of a profile change; profile files own the actual configuration. | <code>RecommendationDecision</code> · [`packages/experimental/plugin-recommendations/src/types.ts`](../packages/experimental/plugin-recommendations/src/types.ts) |
|
||||
| `plugin:action-cards/decision` | `@deepseek-ai/dsh-experimental-action-cards` | Dismissals and kind-defined progress of action cards. | <code>ActionCardDecision</code> · [`packages/experimental/action-cards/src/types.ts`](../packages/experimental/action-cards/src/types.ts) |
|
||||
| `plugin:translator/request` | `@deepseek-ai/dsh-experimental-translator` | Provider-independent translation input, retained before dispatch. | <code>TranslationRequestRecord</code> · [`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. | <code>TranslationResultRecord</code> · [`packages/experimental/translator/src/types.ts`](../packages/experimental/translator/src/types.ts) |
|
||||
@@ -13,7 +13,6 @@
|
||||
|
||||
| 记录 | 所属包 | 用途 | 载荷与源码 |
|
||||
|---|---|---|---|
|
||||
| `plugin:creation-recommendations/decision` | `@deepseek-ai/dsh-experimental-creation-recommendations` | New-plugin creation progress and explicit keep/undo decisions. | <code>CreationDecision</code> · [`packages/experimental/creation-recommendations/src/types.ts`](../packages/experimental/creation-recommendations/src/types.ts) |
|
||||
| `plugin:plugin-recommendations/decision` | `@deepseek-ai/dsh-experimental-plugin-recommendations` | Informational receipt of a profile change; profile files own the actual configuration. | <code>RecommendationDecision</code> · [`packages/experimental/plugin-recommendations/src/types.ts`](../packages/experimental/plugin-recommendations/src/types.ts) |
|
||||
| `plugin:action-cards/decision` | `@deepseek-ai/dsh-experimental-action-cards` | Dismissals and kind-defined progress of action cards. | <code>ActionCardDecision</code> · [`packages/experimental/action-cards/src/types.ts`](../packages/experimental/action-cards/src/types.ts) |
|
||||
| `plugin:translator/request` | `@deepseek-ai/dsh-experimental-translator` | Provider-independent translation input, retained before dispatch. | <code>TranslationRequestRecord</code> · [`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. | <code>TranslationResultRecord</code> · [`packages/experimental/translator/src/types.ts`](../packages/experimental/translator/src/types.ts) |
|
||||
@@ -22,7 +22,6 @@ flowchart TD
|
||||
pkg_plugin_detail["plugin-detail"]
|
||||
pkg_plugin_market_index["plugin-market-index"]
|
||||
pkg_timeout["timeout"]
|
||||
pkg_util_action_block["util-action-block"]
|
||||
pkg_util_code_language["util-code-language"]
|
||||
pkg_util_crypto["util-crypto"]
|
||||
pkg_util_file_drag["util-file-drag"]
|
||||
@@ -257,6 +256,7 @@ flowchart TD
|
||||
subgraph group_experimental["packages/experimental"]
|
||||
pkg_cua["cua"]
|
||||
pkg_cua_bundle["cua-bundle"]
|
||||
pkg_experimental_action_cards["experimental-action-cards"]
|
||||
pkg_experimental_agent_team["experimental-agent-team"]
|
||||
pkg_experimental_agent_team_profile["experimental-agent-team-profile"]
|
||||
pkg_experimental_api_speech_to_text["experimental-api-speech-to-text"]
|
||||
@@ -267,6 +267,7 @@ flowchart TD
|
||||
pkg_experimental_browser_use_runtime["experimental-browser-use-runtime"]
|
||||
pkg_experimental_browser_use_stagehand_native["experimental-browser-use-stagehand-native"]
|
||||
pkg_experimental_claude_code_mods["experimental-claude-code-mods"]
|
||||
pkg_experimental_client_ui_action_cards["experimental-client-ui-action-cards"]
|
||||
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"]
|
||||
@@ -934,6 +935,10 @@ flowchart TD
|
||||
pkg_workspace_changes --> pkg_session
|
||||
pkg_workspace_changes --> pkg_subprocess
|
||||
pkg_workspace_changes --> pkg_tools
|
||||
pkg_experimental_action_cards --> pkg_llm
|
||||
pkg_experimental_action_cards --> pkg_session
|
||||
pkg_experimental_action_cards --> pkg_tools
|
||||
pkg_experimental_action_cards --> pkg_typert_protocol
|
||||
pkg_experimental_browser_use_chrome_devtools_mcp --> pkg_agent
|
||||
pkg_experimental_browser_use_chrome_devtools_mcp --> pkg_browser_use
|
||||
pkg_experimental_browser_use_chrome_devtools_mcp --> pkg_system_prompt
|
||||
@@ -955,7 +960,6 @@ flowchart TD
|
||||
pkg_experimental_creation_recommendations --> pkg_session
|
||||
pkg_experimental_creation_recommendations --> pkg_skill
|
||||
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
|
||||
@@ -1487,7 +1491,6 @@ flowchart TD
|
||||
| [`plugin-detail`](../packages/util/plugin-detail) | `util` | — |
|
||||
| [`plugin-market-index`](../packages/util/plugin-market-index) | `util` | — |
|
||||
| [`timeout`](../packages/util/timeout) | `util` | — |
|
||||
| [`util-action-block`](../packages/util/action-block) | `util` | — |
|
||||
| [`util-code-language`](../packages/util/code-language) | `util` | — |
|
||||
| [`util-crypto`](../packages/util/crypto) | `util` | — |
|
||||
| [`util-file-drag`](../packages/util/file-drag) | `util` | — |
|
||||
@@ -1579,6 +1582,7 @@ flowchart TD
|
||||
| [`cua-bundle`](../packages/experimental/cua-bundle) | `experimental` | — |
|
||||
| [`experimental-agent-team-profile`](../packages/experimental/agent-team-profile) | `experimental` | — |
|
||||
| [`experimental-badge-skill-bundle`](../packages/experimental/badge-skill-bundle) | `experimental` | — |
|
||||
| [`experimental-client-ui-action-cards`](../packages/experimental/client-ui-action-cards) | `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` | — |
|
||||
@@ -1749,11 +1753,12 @@ flowchart TD
|
||||
| [`file-reference-local`](../packages/context/file-reference-local) | `context` | [`agent`](../packages/core/agent), [`file-reference`](../packages/context/file-reference), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools), [`working-directory`](../packages/session/working-directory) |
|
||||
| [`tool-present`](../packages/deliverables/tool-present) | `deliverables` | [`agent`](../packages/core/agent), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`tools`](../packages/core/tools), [`working-directory`](../packages/session/working-directory) |
|
||||
| [`workspace-changes`](../packages/deliverables/workspace-changes) | `deliverables` | [`agent`](../packages/core/agent), [`fs`](../packages/fs/fs), [`session`](../packages/core/session), [`subprocess`](../packages/subprocess/subprocess), [`tools`](../packages/core/tools) |
|
||||
| [`experimental-action-cards`](../packages/experimental/action-cards) | `experimental` | [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`tools`](../packages/core/tools), [`typert-protocol`](../packages/typert/protocol) |
|
||||
| [`experimental-browser-use-chrome-devtools-mcp`](../packages/experimental/browser-use-chrome-devtools-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-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), [`skill`](../packages/skill/skill), [`tools`](../packages/core/tools), [`typert-protocol`](../packages/typert/protocol) |
|
||||
| [`experimental-creation-recommendations`](../packages/experimental/creation-recommendations) | `experimental` | [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`skill`](../packages/skill/skill), [`tools`](../packages/core/tools) |
|
||||
| [`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) |
|
||||
|
||||
@@ -24,7 +24,6 @@ flowchart TD
|
||||
pkg_plugin_detail["plugin-detail"]
|
||||
pkg_plugin_market_index["plugin-market-index"]
|
||||
pkg_timeout["timeout"]
|
||||
pkg_util_action_block["util-action-block"]
|
||||
pkg_util_code_language["util-code-language"]
|
||||
pkg_util_crypto["util-crypto"]
|
||||
pkg_util_file_drag["util-file-drag"]
|
||||
@@ -259,6 +258,7 @@ flowchart TD
|
||||
subgraph group_experimental["packages/experimental"]
|
||||
pkg_cua["cua"]
|
||||
pkg_cua_bundle["cua-bundle"]
|
||||
pkg_experimental_action_cards["experimental-action-cards"]
|
||||
pkg_experimental_agent_team["experimental-agent-team"]
|
||||
pkg_experimental_agent_team_profile["experimental-agent-team-profile"]
|
||||
pkg_experimental_api_speech_to_text["experimental-api-speech-to-text"]
|
||||
@@ -269,6 +269,7 @@ flowchart TD
|
||||
pkg_experimental_browser_use_runtime["experimental-browser-use-runtime"]
|
||||
pkg_experimental_browser_use_stagehand_native["experimental-browser-use-stagehand-native"]
|
||||
pkg_experimental_claude_code_mods["experimental-claude-code-mods"]
|
||||
pkg_experimental_client_ui_action_cards["experimental-client-ui-action-cards"]
|
||||
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"]
|
||||
@@ -936,6 +937,10 @@ flowchart TD
|
||||
pkg_workspace_changes --> pkg_session
|
||||
pkg_workspace_changes --> pkg_subprocess
|
||||
pkg_workspace_changes --> pkg_tools
|
||||
pkg_experimental_action_cards --> pkg_llm
|
||||
pkg_experimental_action_cards --> pkg_session
|
||||
pkg_experimental_action_cards --> pkg_tools
|
||||
pkg_experimental_action_cards --> pkg_typert_protocol
|
||||
pkg_experimental_browser_use_chrome_devtools_mcp --> pkg_agent
|
||||
pkg_experimental_browser_use_chrome_devtools_mcp --> pkg_browser_use
|
||||
pkg_experimental_browser_use_chrome_devtools_mcp --> pkg_system_prompt
|
||||
@@ -957,7 +962,6 @@ flowchart TD
|
||||
pkg_experimental_creation_recommendations --> pkg_session
|
||||
pkg_experimental_creation_recommendations --> pkg_skill
|
||||
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
|
||||
@@ -1489,7 +1493,6 @@ flowchart TD
|
||||
| [`plugin-detail`](../packages/util/plugin-detail) | `util` | — |
|
||||
| [`plugin-market-index`](../packages/util/plugin-market-index) | `util` | — |
|
||||
| [`timeout`](../packages/util/timeout) | `util` | — |
|
||||
| [`util-action-block`](../packages/util/action-block) | `util` | — |
|
||||
| [`util-code-language`](../packages/util/code-language) | `util` | — |
|
||||
| [`util-crypto`](../packages/util/crypto) | `util` | — |
|
||||
| [`util-file-drag`](../packages/util/file-drag) | `util` | — |
|
||||
@@ -1581,6 +1584,7 @@ flowchart TD
|
||||
| [`cua-bundle`](../packages/experimental/cua-bundle) | `experimental` | — |
|
||||
| [`experimental-agent-team-profile`](../packages/experimental/agent-team-profile) | `experimental` | — |
|
||||
| [`experimental-badge-skill-bundle`](../packages/experimental/badge-skill-bundle) | `experimental` | — |
|
||||
| [`experimental-client-ui-action-cards`](../packages/experimental/client-ui-action-cards) | `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` | — |
|
||||
@@ -1751,11 +1755,12 @@ flowchart TD
|
||||
| [`file-reference-local`](../packages/context/file-reference-local) | `context` | [`agent`](../packages/core/agent), [`file-reference`](../packages/context/file-reference), [`system-prompt`](../packages/core/system-prompt), [`tools`](../packages/core/tools), [`working-directory`](../packages/session/working-directory) |
|
||||
| [`tool-present`](../packages/deliverables/tool-present) | `deliverables` | [`agent`](../packages/core/agent), [`fs`](../packages/fs/fs), [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`tools`](../packages/core/tools), [`working-directory`](../packages/session/working-directory) |
|
||||
| [`workspace-changes`](../packages/deliverables/workspace-changes) | `deliverables` | [`agent`](../packages/core/agent), [`fs`](../packages/fs/fs), [`session`](../packages/core/session), [`subprocess`](../packages/subprocess/subprocess), [`tools`](../packages/core/tools) |
|
||||
| [`experimental-action-cards`](../packages/experimental/action-cards) | `experimental` | [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`tools`](../packages/core/tools), [`typert-protocol`](../packages/typert/protocol) |
|
||||
| [`experimental-browser-use-chrome-devtools-mcp`](../packages/experimental/browser-use-chrome-devtools-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-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), [`skill`](../packages/skill/skill), [`tools`](../packages/core/tools), [`typert-protocol`](../packages/typert/protocol) |
|
||||
| [`experimental-creation-recommendations`](../packages/experimental/creation-recommendations) | `experimental` | [`llm`](../packages/llm/llm), [`session`](../packages/core/session), [`skill`](../packages/skill/skill), [`tools`](../packages/core/tools) |
|
||||
| [`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) |
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
en: 1387c4505dde2faf
|
||||
zh: 48570fa1c13d6910
|
||||
/session-persistence-event-catalog/persistence-type-fingerprints:
|
||||
en: 0d9185ced7a095f2
|
||||
zh: 61628c39b6418906
|
||||
en: 3e24343c4745793d
|
||||
zh: 90f808fd6b79c5a3
|
||||
/session-persistence-event-catalog/event-envelope:
|
||||
en: 981db6b1928eda50
|
||||
zh: d77bc66cf678099d
|
||||
@@ -309,8 +309,11 @@
|
||||
en: 3493ecf0993e5397
|
||||
zh: ec95688f593a4ed4
|
||||
/session-persistence-event-catalog/resolved-persistence-types/aborted:
|
||||
en: d716fb9ee9baa564
|
||||
zh: d716fb9ee9baa564
|
||||
en: 40049fd36471e4b2
|
||||
zh: 40049fd36471e4b2
|
||||
/session-persistence-event-catalog/resolved-persistence-types/action-cards:
|
||||
en: 629f821b50a38bc6
|
||||
zh: 629f821b50a38bc6
|
||||
/session-persistence-event-catalog/resolved-persistence-types/active:
|
||||
en: 6b343e390ae7d7a7
|
||||
zh: 6b343e390ae7d7a7
|
||||
@@ -642,20 +645,14 @@
|
||||
en: fb56d51ac7afdf53
|
||||
zh: fb56d51ac7afdf53
|
||||
/session-persistence-event-catalog/resolved-persistence-types/permission-preset:
|
||||
en: 67e59ed2d5acbb1d
|
||||
zh: 67e59ed2d5acbb1d
|
||||
/session-persistence-event-catalog/resolved-persistence-types/personalized-pages:
|
||||
en: 8421da87b88db1dc
|
||||
zh: 8421da87b88db1dc
|
||||
en: 94b174792f651370
|
||||
zh: 94b174792f651370
|
||||
/session-persistence-event-catalog/resolved-persistence-types/plan-mode:
|
||||
en: 5d6a48242bde2682
|
||||
zh: 5d6a48242bde2682
|
||||
/session-persistence-event-catalog/resolved-persistence-types/plan-mode~2:
|
||||
en: 1ef41ecb008898f1
|
||||
zh: 1ef41ecb008898f1
|
||||
/session-persistence-event-catalog/resolved-persistence-types/plugin-recommendations:
|
||||
en: 953c73f8b838c734
|
||||
zh: 953c73f8b838c734
|
||||
en: de774562ec890a6c
|
||||
zh: de774562ec890a6c
|
||||
/session-persistence-event-catalog/resolved-persistence-types/positive:
|
||||
en: e048b2b8f8165011
|
||||
zh: e048b2b8f8165011
|
||||
@@ -1011,11 +1008,11 @@
|
||||
en: a6a2e38fdd6d127a
|
||||
zh: 1fe82356d89f5769
|
||||
/session-persistence-event-catalog/resolved-persistence-types/deepseeksearchllmrequest:
|
||||
en: d3ed989823712710
|
||||
zh: 8f98432b8560448c
|
||||
en: 0e286bae74e78505
|
||||
zh: b1c9da5aa56d5a81
|
||||
/session-persistence-event-catalog/resolved-persistence-types/developermessage:
|
||||
en: 44638a016be3b863
|
||||
zh: 61cac5dae07451f6
|
||||
en: 3d8a393be23efcde
|
||||
zh: f95f337d816dbbe7
|
||||
/session-persistence-event-catalog/resolved-persistence-types/epochheader:
|
||||
en: c804cb9e2e31c5ec
|
||||
zh: 3ed7ac59cd1441b7
|
||||
@@ -1125,11 +1122,11 @@
|
||||
en: 6dbe099c62f7c226
|
||||
zh: 6fd788f63c038c91
|
||||
/session-persistence-event-catalog/resolved-persistence-types/llmretrystartedeventdata:
|
||||
en: fc8da0093ea48cf6
|
||||
zh: 501d022797f46b0b
|
||||
en: 3d2f7c88259b6446
|
||||
zh: 58bee68c335d6d4f
|
||||
/session-persistence-event-catalog/resolved-persistence-types/message:
|
||||
en: 9616fea1a2a1cc06
|
||||
zh: 54c0aa6b877a555d
|
||||
en: 76d13d39fe22f7bd
|
||||
zh: b1e19cfe90a6d6b6
|
||||
/session-persistence-event-catalog/resolved-persistence-types/messagefeedbackdelete:
|
||||
en: c582953270d4ca44
|
||||
zh: 966ccfe2e7660a2a
|
||||
@@ -1140,14 +1137,14 @@
|
||||
en: f58575a1fc96df42
|
||||
zh: 9f0c6ed9033e5c9d
|
||||
/session-persistence-event-catalog/resolved-persistence-types/messagefeedbackrating:
|
||||
en: 3e8fbe70be4868fa
|
||||
zh: f61cdd0e06abf32b
|
||||
en: 887549d6401dd116
|
||||
zh: 30198672b67dac6b
|
||||
/session-persistence-event-catalog/resolved-persistence-types/messagesource:
|
||||
en: ea2580124297a02f
|
||||
zh: 14724101d712a972
|
||||
en: 2f21414632f8d184
|
||||
zh: d85f66e001fd814c
|
||||
/session-persistence-event-catalog/resolved-persistence-types/message~2:
|
||||
en: 465a4d2a50d55ddf
|
||||
zh: a6189f8dab7e0915
|
||||
en: 87e95476b4985e5e
|
||||
zh: 0e0322e005b3e995
|
||||
/session-persistence-event-catalog/resolved-persistence-types/modelmessagesource:
|
||||
en: 5f9154ca34235ab9
|
||||
zh: a833105910ebfa82
|
||||
@@ -1209,11 +1206,11 @@
|
||||
en: 9a54c4478ad3b620
|
||||
zh: 02c4c1fd7e252770
|
||||
/session-persistence-event-catalog/resolved-persistence-types/sessiontitleeventdata:
|
||||
en: f71f1639f3b0b8df
|
||||
zh: 285a685b662a839c
|
||||
en: c0104327b481ae54
|
||||
zh: b4624d112bee37f1
|
||||
/session-persistence-event-catalog/resolved-persistence-types/sessiontitlellmrequesteventdata:
|
||||
en: 1bf3d05575f599cd
|
||||
zh: 0a0fbef3b82ba6c1
|
||||
en: 2e40681d575da503
|
||||
zh: 57cbccb16548e2da
|
||||
/session-persistence-event-catalog/resolved-persistence-types/sessiontitlemodelidentity:
|
||||
en: 9531468264499498
|
||||
zh: 9da23c0ad2776563
|
||||
@@ -1320,14 +1317,14 @@
|
||||
en: 4dc89c072fe5d0d1
|
||||
zh: 4ed2c9e9e8b4f7e2
|
||||
/session-persistence-event-catalog/resolved-persistence-types/turnendreason:
|
||||
en: 7107752e0cd59238
|
||||
zh: 20918b97de9546b6
|
||||
en: e39f2f99ea109af9
|
||||
zh: f95ec41c72738f3e
|
||||
/session-persistence-event-catalog/resolved-persistence-types/usermessage:
|
||||
en: 2e75ad3db454a3c2
|
||||
zh: d98f8dce4f22dd09
|
||||
en: 79b3ac6c731859aa
|
||||
zh: 81058fe7edf61bdb
|
||||
/session-persistence-event-catalog/resolved-persistence-types/usermessage~2:
|
||||
en: 3d011df94d798e59
|
||||
zh: 7f60a3ad49bb67af
|
||||
en: 8e699c0217638bbe
|
||||
zh: a2047db24c25217b
|
||||
/session-persistence-event-catalog/resolved-persistence-types/workflowagentoutcome:
|
||||
en: d0a3f9aab18c3de5
|
||||
zh: 76ac69a835ca4e29
|
||||
@@ -1506,11 +1503,11 @@
|
||||
en: 51af619ed8532a43
|
||||
zh: a5ad878c63d0e046
|
||||
/session-persistence-event-catalog/resolved-persistence-types/header-reason-startsseries:
|
||||
en: 296cff15ad21036b
|
||||
zh: 02f78c24ea20b443
|
||||
en: 8c523b44a081ffe0
|
||||
zh: d94ac2402fe80645
|
||||
/session-persistence-event-catalog/resolved-persistence-types/headerseq-message-step-turn:
|
||||
en: 0a601800a2d41825
|
||||
zh: d90a44d095a7b311
|
||||
en: 174b2c8332e397b2
|
||||
zh: 31b94e9a33b9bdac
|
||||
/session-persistence-event-catalog/resolved-persistence-types/height-width:
|
||||
en: a5df50710083ac25
|
||||
zh: aad3ccf6f6de70e4
|
||||
@@ -1527,17 +1524,38 @@
|
||||
en: 41f73c58a77dfa28
|
||||
zh: af77f4aee3cb4a40
|
||||
/session-persistence-event-catalog/resolved-persistence-types/inherited:
|
||||
en: f39e8c23d0cec7ac
|
||||
zh: fe2b72465dc7a5ea
|
||||
en: bbffa2689f69314f
|
||||
zh: c691059ad7b99d67
|
||||
/session-persistence-event-catalog/resolved-persistence-types/inserted-outcome-removedcount-start:
|
||||
en: 3444b8fb8211b9d9
|
||||
zh: a33d7fab1d46ec6b
|
||||
en: 1750502af87d698c
|
||||
zh: 382a3356f0a61546
|
||||
/session-persistence-event-catalog/resolved-persistence-types/interrupted-message-step-stream:
|
||||
en: 89fb3f919d181c86
|
||||
zh: 4380624236500687
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-aborted-reason:
|
||||
en: 48424cbed3fbc269
|
||||
zh: 2ce88c04ad002104
|
||||
en: 8bdd31bfea14a015
|
||||
zh: 203d7ebf5ea4d352
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-action-cards:
|
||||
en: 8d057f0bd0b88fc6
|
||||
zh: 500d1e3d54e6d7c4
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-action-cards-form-catalog:
|
||||
en: 14e9dd01c49f91e0
|
||||
zh: 4a7e4e4aeeb15982
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-action-cards-form-instructions:
|
||||
en: f59ec0c37dc8f9b6
|
||||
zh: debc915ed98581fb
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-action-cards-form-notice:
|
||||
en: ef0a456530698cca
|
||||
zh: 23f2ace5345eb847
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-action-cards-form-recall:
|
||||
en: 0b607f9577e3a3c5
|
||||
zh: 237ed72b7a4154df
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-action-cards-form-relay:
|
||||
en: 712bc9ad7c51a8fe
|
||||
zh: f230dc9c09bdbf3c
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-action-cards-form-snapshot:
|
||||
en: 4e030b06ef900819
|
||||
zh: 27532bbabe118206
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-blocked:
|
||||
en: 2fad818b19823c48
|
||||
zh: a6b33dee21c3fdc9
|
||||
@@ -1653,29 +1671,8 @@
|
||||
en: 509f9a91aedb2da1
|
||||
zh: db1071678bfb98d1
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-parent:
|
||||
en: 63ac7a79d1393ba5
|
||||
zh: 0439444742eca440
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-personalized-pages:
|
||||
en: e56080ddca3ed561
|
||||
zh: 1ef8c4fed849e62f
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-personalized-pages-form-catalog:
|
||||
en: cb35ec7e395d5b1a
|
||||
zh: 1a9303be8bb13e9e
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-personalized-pages-form-instructions:
|
||||
en: beb2c2100cc26478
|
||||
zh: d83a6b66fa82fde9
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-personalized-pages-form-notice:
|
||||
en: 3c17f776fad0526d
|
||||
zh: 03eff6f83a00c00e
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-personalized-pages-form-recall:
|
||||
en: 3ad9fa51a047db29
|
||||
zh: 76a8357b346b2c15
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-personalized-pages-form-relay:
|
||||
en: 4e2fe27c1b26e1e4
|
||||
zh: aa83cc37626df343
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-personalized-pages-form-snapshot:
|
||||
en: e85cd5f87250a2bd
|
||||
zh: 19d2978e92f1d153
|
||||
en: 7a3ac2238405913d
|
||||
zh: b249a4d6d0508d40
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-plan-mode:
|
||||
en: 9758304800b717df
|
||||
zh: dccf14f3a5d0d861
|
||||
@@ -1695,29 +1692,8 @@
|
||||
en: 82227ec9729e2a94
|
||||
zh: 72fbb89e9ec9123f
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-plan-mode-form-snapshot:
|
||||
en: a0ab8374805a2e02
|
||||
zh: a20cd57698eea330
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-plugin-recommendations:
|
||||
en: 198f080ea101928c
|
||||
zh: a60b134d1265262f
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-plugin-recommendations-form-catalog:
|
||||
en: e4adc5abdf070dd8
|
||||
zh: 2b3a88b0e76a8736
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-plugin-recommendations-form-instructions:
|
||||
en: b43eeade99c90a11
|
||||
zh: 14532ddc3467d380
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-plugin-recommendations-form-notice:
|
||||
en: c1a2319d53147dd2
|
||||
zh: 596efcce0c8d0aeb
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-plugin-recommendations-form-recall:
|
||||
en: 19f267b52248348d
|
||||
zh: 29c2a6b6f4fc7893
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-plugin-recommendations-form-relay:
|
||||
en: dce385a37c9a2fbf
|
||||
zh: 0bc7f39e6eeb9d4d
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-plugin-recommendations-form-snapshot:
|
||||
en: 4a116d06f0378748
|
||||
zh: 2f9480623fc8471a
|
||||
en: 4271e26aca9e9bf8
|
||||
zh: 288e9cd452a9eee3
|
||||
/session-persistence-event-catalog/resolved-persistence-types/kind-provider:
|
||||
en: c53129cf7214286c
|
||||
zh: 8c5183b6dabbf714
|
||||
@@ -1968,11 +1944,11 @@
|
||||
en: ea32b4165dbfb182
|
||||
zh: 57f48af06cfa201c
|
||||
/session-persistence-event-catalog/resolved-persistence-types/type-agent-preset-selected:
|
||||
en: b851e23abaece693
|
||||
zh: 4c55e2ff119428d4
|
||||
en: 6a59f1cd472759e9
|
||||
zh: 1db67f4f97207efc
|
||||
/session-persistence-event-catalog/resolved-persistence-types/type-agent-inbox-spliced:
|
||||
en: 64c0def070a70445
|
||||
zh: 4fc221ee094bb2fc
|
||||
en: 6c276128e62a5432
|
||||
zh: 4ff5e93d255caece
|
||||
/session-persistence-event-catalog/resolved-persistence-types/type-approval-asked:
|
||||
en: 9c77f18b0dad22f0
|
||||
zh: 8894cf2878fe90db
|
||||
@@ -2016,11 +1992,11 @@
|
||||
en: ba73fb10b7e2ffc9
|
||||
zh: 8d5c97e63e5f16da
|
||||
/session-persistence-event-catalog/resolved-persistence-types/type-deliverables-presented:
|
||||
en: ebb56353af91ff19
|
||||
zh: aa4c8df10cc08880
|
||||
en: 10d95ce64c285e64
|
||||
zh: 0ddb26f1fa16629c
|
||||
/session-persistence-event-catalog/resolved-persistence-types/type-developer-message:
|
||||
en: 115cc7cd4576f60c
|
||||
zh: 1b4f0e96d89fd5af
|
||||
en: 78d421c83506ebe9
|
||||
zh: 2e9399ba2d360627
|
||||
/session-persistence-event-catalog/resolved-persistence-types/type-disabled:
|
||||
en: 585627a50ece4e5f
|
||||
zh: 157837aee3da0ac3
|
||||
@@ -2094,11 +2070,11 @@
|
||||
en: acf7e21e4d21ebff
|
||||
zh: fb83a853634d204a
|
||||
/session-persistence-event-catalog/resolved-persistence-types/type-session-title:
|
||||
en: 9012569ec8e66dc2
|
||||
zh: 805a3864382fb712
|
||||
en: 26d99fabe31f7fa3
|
||||
zh: 0a44b5c8f7f6488c
|
||||
/session-persistence-event-catalog/resolved-persistence-types/type-session-title-llm-request:
|
||||
en: 49803548dc712268
|
||||
zh: 139ca36e0d929228
|
||||
en: bbbb345651600abf
|
||||
zh: e3b29e05fecb136a
|
||||
/session-persistence-event-catalog/resolved-persistence-types/type-step-end:
|
||||
en: 7fc233c4a569dae2
|
||||
zh: bc2b3fed4a397c00
|
||||
@@ -2175,11 +2151,11 @@
|
||||
en: 1b045de96172be4b
|
||||
zh: 8a15c6f35b576b37
|
||||
/session-persistence-event-catalog/resolved-persistence-types/type-usage:
|
||||
en: 5c53cca64aa3284a
|
||||
zh: 2bf4686d47619604
|
||||
en: ebb801c4444061fb
|
||||
zh: f2d6531de88ee16e
|
||||
/session-persistence-event-catalog/resolved-persistence-types/type-user-message:
|
||||
en: 58937dd9979806e2
|
||||
zh: 3d33634ed98214f4
|
||||
en: 536f875df13987d0
|
||||
zh: 857a381433a4217f
|
||||
/session-persistence-event-catalog/resolved-persistence-types/type-web-deepseek-search-llm-request:
|
||||
en: 99c8837344178a47
|
||||
zh: bf746f5678346596
|
||||
|
||||
+146
-246
@@ -23,7 +23,7 @@ The [format references](persistence-changes/historical-formats/README.md) cover
|
||||
| `JsonlHeaderLine` | header | `18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f` | [`HeaderLine`](#persistence-type-sha256-18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f) |
|
||||
| `SessionEventEnvelope` | envelope | `5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc` | [`union (3 variants)`](#persistence-type-sha256-5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc) |
|
||||
| `event:agent-preset/selected` | event | `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b` | [`{ type: "agent-preset/selected" }`](#persistence-type-sha256-a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b) |
|
||||
| `event:agent/inbox/spliced` | event | `dde4d210811d670552c70fa7a9864ae650cef357590ad60ef1778c9b7dd1d7bf` | [`{ type: "agent/inbox/spliced" }`](#persistence-type-sha256-dde4d210811d670552c70fa7a9864ae650cef357590ad60ef1778c9b7dd1d7bf) |
|
||||
| `event:agent/inbox/spliced` | event | `b36fd842cd004b532ce96fd5d6f5be28e017eda043131aa3cf5e69edc436108e` | [`{ type: "agent/inbox/spliced" }`](#persistence-type-sha256-b36fd842cd004b532ce96fd5d6f5be28e017eda043131aa3cf5e69edc436108e) |
|
||||
| `event:approval/asked` | event | `3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1` | [`{ type: "approval/asked" }`](#persistence-type-sha256-3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1) |
|
||||
| `event:approval/decided` | event | `bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3` | [`{ type: "approval/decided" }`](#persistence-type-sha256-bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3) |
|
||||
| `event:approval/policy` | event | `26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78` | [`{ type: "approval/policy" }`](#persistence-type-sha256-26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78) |
|
||||
@@ -36,7 +36,7 @@ The [format references](persistence-changes/historical-formats/README.md) cover
|
||||
| `event:compaction/start` | event | `db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965` | [`{ type: "compaction/start" }`](#persistence-type-sha256-db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965) |
|
||||
| `event:compaction/summary` | event | `e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602` | [`{ type: "compaction/summary" }`](#persistence-type-sha256-e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602) |
|
||||
| `event:deliverables/presented` | event | `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` | [`{ type: "deliverables/presented" }`](#persistence-type-sha256-13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176) |
|
||||
| `event:developer/message` | event | `1adeb5417a9565c55ad63138034d1c51daf6a75f8964c46352691a1d94188265` | [`{ type: "developer/message" }`](#persistence-type-sha256-1adeb5417a9565c55ad63138034d1c51daf6a75f8964c46352691a1d94188265) |
|
||||
| `event:developer/message` | event | `5ef58f2a1bdc576c1f12fa1f4da1920ece020b13c0f991a578cddcbeb28bc5be` | [`{ type: "developer/message" }`](#persistence-type-sha256-5ef58f2a1bdc576c1f12fa1f4da1920ece020b13c0f991a578cddcbeb28bc5be) |
|
||||
| `event:feedback/message-delete` | event | `3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796` | [`{ type: "feedback/message-delete" }`](#persistence-type-sha256-3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796) |
|
||||
| `event:feedback/message-put` | event | `b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf` | [`{ type: "feedback/message-put" }`](#persistence-type-sha256-b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf) |
|
||||
| `event:feedback/record` | event | `b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8` | [`{ type: "feedback/record" }`](#persistence-type-sha256-b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8) |
|
||||
@@ -58,7 +58,7 @@ The [format references](persistence-changes/historical-formats/README.md) cover
|
||||
| `event:session-log-deepseek/delivery-accepted` | event | `d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9` | [`{ type: "session-log-deepseek/delivery-accepted" }`](#persistence-type-sha256-d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9) |
|
||||
| `event:session/end-seed` | event | `5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e` | [`{ type: "session/end-seed" }`](#persistence-type-sha256-5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e) |
|
||||
| `event:session/title` | event | `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5` | [`{ type: "session/title" }`](#persistence-type-sha256-1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5) |
|
||||
| `event:session/title-llm-request` | event | `651a11c7869dfbe778ff23bf7e94567b141470b5dbad4a146f93189a4ff24646` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-651a11c7869dfbe778ff23bf7e94567b141470b5dbad4a146f93189a4ff24646) |
|
||||
| `event:session/title-llm-request` | event | `efa1a091017ce533e38b0ef3e14d11a5c102ff1793229b18dad719a4268d9adc` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-efa1a091017ce533e38b0ef3e14d11a5c102ff1793229b18dad719a4268d9adc) |
|
||||
| `event:step/end` | event | `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05` | [`{ type: "step/end" }`](#persistence-type-sha256-e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05) |
|
||||
| `event:step/start` | event | `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986` | [`{ type: "step/start" }`](#persistence-type-sha256-4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986) |
|
||||
| `event:subagent/catalog` | event | `53750b9abf61efb7992b0aadc3e247ec927449c63266df28230fd1139f5590ac` | [`{ type: "subagent/catalog" }`](#persistence-type-sha256-53750b9abf61efb7992b0aadc3e247ec927449c63266df28230fd1139f5590ac) |
|
||||
@@ -80,7 +80,7 @@ The [format references](persistence-changes/historical-formats/README.md) cover
|
||||
| `event:tool/result` | event | `7c9f44e90a0058f4cc532ae20dad0c10afa6eba22e70a6c79fc79490bad64397` | [`{ type: "tool/result" }`](#persistence-type-sha256-7c9f44e90a0058f4cc532ae20dad0c10afa6eba22e70a6c79fc79490bad64397) |
|
||||
| `event:turn/end` | event | `0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce` | [`{ type: "turn/end" }`](#persistence-type-sha256-0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce) |
|
||||
| `event:turn/start` | event | `aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8` | [`{ type: "turn/start" }`](#persistence-type-sha256-aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8) |
|
||||
| `event:user/message` | event | `1ca126460ab395a27ca1d236203c0a8b58eddcc316d681484691bced1b220045` | [`{ type: "user/message" }`](#persistence-type-sha256-1ca126460ab395a27ca1d236203c0a8b58eddcc316d681484691bced1b220045) |
|
||||
| `event:user/message` | event | `58b122df513aeaf7ddc5783dbb1fd844e2979bb273964e30ae351a8db6510019` | [`{ type: "user/message" }`](#persistence-type-sha256-58b122df513aeaf7ddc5783dbb1fd844e2979bb273964e30ae351a8db6510019) |
|
||||
| `event:web/deepseek-search-llm-request` | event | `0c556c9b9f2a96238a6b9bbb99e748206cbff2ed6203041c9571f04ae5802f52` | [`{ type: "web/deepseek-search-llm-request" }`](#persistence-type-sha256-0c556c9b9f2a96238a6b9bbb99e748206cbff2ed6203041c9571f04ae5802f52) |
|
||||
| `event:working-directory/change` | event | `124aa62078ca3311353b39cc3bf6c75da281338be6bbf672f8b361d828cddca3` | [`{ type: "working-directory/change" }`](#persistence-type-sha256-124aa62078ca3311353b39cc3bf6c75da281338be6bbf672f8b361d828cddca3) |
|
||||
| `event:workspace/changes` | event | `e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72` | [`{ type: "workspace/changes" }`](#persistence-type-sha256-e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72) |
|
||||
@@ -1347,6 +1347,14 @@ SHA-256: `1e0b0b66b6f0c53fc72e52289d06b4708d776f1ca9df4c86a22bff621d403cf0`
|
||||
|
||||
`"aborted"`
|
||||
|
||||
<a id="persistence-type-sha256-05205074b24d8340cfd7995f6cb64779c7f1241490954700115601e264178877"></a>
|
||||
|
||||
### `"action-cards"`
|
||||
|
||||
SHA-256: `05205074b24d8340cfd7995f6cb64779c7f1241490954700115601e264178877`
|
||||
|
||||
`"action-cards"`
|
||||
|
||||
<a id="persistence-type-sha256-c8e6f48878cc2a2f0dc59682280d81f407943fb503f32c64bf9ff3d9393c3eff"></a>
|
||||
|
||||
### `"active"`
|
||||
@@ -2241,14 +2249,6 @@ SHA-256: `ae63d9d1080ed8945031594d93f8d96651d7101b848719cc3e1475875cd3d649`
|
||||
|
||||
`"permission/preset"`
|
||||
|
||||
<a id="persistence-type-sha256-e1ba710db2f3e4e4d397b921fafedb5dd5ad5d16efc0393f0667160cb02f79e3"></a>
|
||||
|
||||
### `"personalized-pages"`
|
||||
|
||||
SHA-256: `e1ba710db2f3e4e4d397b921fafedb5dd5ad5d16efc0393f0667160cb02f79e3`
|
||||
|
||||
`"personalized-pages"`
|
||||
|
||||
<a id="persistence-type-sha256-0fe52387f65052702ed9d7cd59db826468936595d1b3eec207e7a823adc719db"></a>
|
||||
|
||||
### `"plan-mode"`
|
||||
@@ -2265,14 +2265,6 @@ SHA-256: `f634871d1e18b1eb199497ac8ab72d3964f48d03fbf611dc7521a1970cf429d9`
|
||||
|
||||
`"plan/mode"`
|
||||
|
||||
<a id="persistence-type-sha256-93a56a85fc8d91b52080b5b4f5f43d945cc337c048ad2076ece1dceabb7766cf"></a>
|
||||
|
||||
### `"plugin-recommendations"`
|
||||
|
||||
SHA-256: `93a56a85fc8d91b52080b5b4f5f43d945cc337c048ad2076ece1dceabb7766cf`
|
||||
|
||||
`"plugin-recommendations"`
|
||||
|
||||
<a id="persistence-type-sha256-df5d9709b7db2a72510dc52052a23f0c38f39730af1504bab8bccabc14fae528"></a>
|
||||
|
||||
### `"positive"`
|
||||
@@ -3381,7 +3373,7 @@ Sources: [`packages/web/web-search-deepseek/src/provider.ts:55`](../packages/web
|
||||
| `body` | required | [`{ max_tokens, messages, model, thinking?, … }`](#persistence-type-sha256-9c001ecb5e1d3c3894410db2a1e383842e5f8454fb52182338686158abc1b3ee) |
|
||||
| `endpoint` | required | `string` |
|
||||
|
||||
<a id="persistence-type-sha256-85610bad3515b96db938e2353ca7fe20de4d69dc89d73cc4ffacbde37f4ed39e"></a>
|
||||
<a id="persistence-type-sha256-7580e7d96dc8475fffe813a42af499665de3d4517fcdb3bc2337d0340e98d616"></a>
|
||||
|
||||
<a id="persistence-type-developermessage"></a>
|
||||
|
||||
@@ -3389,7 +3381,7 @@ Sources: [`packages/web/web-search-deepseek/src/provider.ts:55`](../packages/web
|
||||
|
||||
### `DeveloperMessage`
|
||||
|
||||
SHA-256: `85610bad3515b96db938e2353ca7fe20de4d69dc89d73cc4ffacbde37f4ed39e`
|
||||
SHA-256: `7580e7d96dc8475fffe813a42af499665de3d4517fcdb3bc2337d0340e98d616`
|
||||
|
||||
Sources: [`packages/llm/llm/src/message.ts:157`](../packages/llm/llm/src/message.ts)
|
||||
|
||||
@@ -3398,11 +3390,11 @@ Sources: [`packages/llm/llm/src/message.ts:157`](../packages/llm/llm/src/message
|
||||
| `content` | required | [`ContentBlock[]`](#persistence-type-sha256-b52f215a6cd691058a3413c12f161fa3b563a2f4895adb3df6f744ec4b0a6ef1) |
|
||||
| `id` | required | `string` |
|
||||
| `role` | required | `"developer"` |
|
||||
| `source` | required | [`MessageSource`](#persistence-type-sha256-576b520757158af672b4bc6c13ab8f9422f5a0a501bb36888fb4874fd6587226) |
|
||||
| `source` | required | [`MessageSource`](#persistence-type-sha256-7a5b68bd1a5118c827df9e2466acc5e4d16b83e3f97a2304d992958647592690) |
|
||||
|
||||
Source compatibility: `source` — `session-source-attribution` v1; `session.developer-message.source`; `kind`; `preserve`.
|
||||
|
||||
Attribution-only additions: `personalized-pages`, `plugin-recommendations`, `tmux-context`, `user-question-reply`, `working-directory`.
|
||||
Attribution-only additions: `action-cards`, `tmux-context`, `user-question-reply`, `working-directory`.
|
||||
|
||||
<a id="persistence-type-sha256-9a930283b91d493d6347146f2475bb107294b379415ca02162354f46a64164f7"></a>
|
||||
|
||||
@@ -4097,7 +4089,7 @@ Sources: [`packages/llm/llm-retry/src/types.ts:43`](../packages/llm/llm-retry/sr
|
||||
| `step` | required | `number` |
|
||||
| `turn` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-5e88c0eb7dd6462d2cc26b2daa67f68f68e9e2d404305157a9fe32f0d5b4a32f"></a>
|
||||
<a id="persistence-type-sha256-cda79b839d8cc0c7a7bd09dd067de04925f6e9037080d878b65aaa5a383f117c"></a>
|
||||
|
||||
<a id="persistence-type-message"></a>
|
||||
|
||||
@@ -4105,17 +4097,17 @@ Sources: [`packages/llm/llm-retry/src/types.ts:43`](../packages/llm/llm-retry/sr
|
||||
|
||||
### `Message`
|
||||
|
||||
SHA-256: `5e88c0eb7dd6462d2cc26b2daa67f68f68e9e2d404305157a9fe32f0d5b4a32f`
|
||||
SHA-256: `cda79b839d8cc0c7a7bd09dd067de04925f6e9037080d878b65aaa5a383f117c`
|
||||
|
||||
Sources: [`packages/llm/llm/src/message.ts:196`](../packages/llm/llm/src/message.ts)
|
||||
|
||||
One of:
|
||||
|
||||
- [`ToolResultMessage`](#persistence-type-sha256-4b259f7f8f0a44ad5e90b70a73553ced1df27012d126921d397ff403b6c86731)
|
||||
- [`DeveloperMessage`](#persistence-type-sha256-85610bad3515b96db938e2353ca7fe20de4d69dc89d73cc4ffacbde37f4ed39e)
|
||||
- [`UserMessage`](#persistence-type-sha256-3b087536721261863dfc1d0cf972211ecbefc91f0732e7c0e7eb9da7f3d887ad)
|
||||
- [`AssistantMessage`](#persistence-type-sha256-fa87537f4a9c1e25602990a8bf686b383e9e00352ec8946e16ae24ba7c1625be)
|
||||
- [`DeveloperMessage`](#persistence-type-sha256-7580e7d96dc8475fffe813a42af499665de3d4517fcdb3bc2337d0340e98d616)
|
||||
- [`UserMessage`](#persistence-type-sha256-b782058cef83caf3eb44a16adeef5657e4d5cdff2d50655aba418c4490670a69)
|
||||
- [`SystemMessage`](#persistence-type-sha256-09f3f8dc417f278257202714132f98ba7b52957d7b558c4a04456603890eb363)
|
||||
- [`AssistantMessage`](#persistence-type-sha256-fa87537f4a9c1e25602990a8bf686b383e9e00352ec8946e16ae24ba7c1625be)
|
||||
|
||||
<a id="persistence-type-sha256-7c6129b6961cf4b2a030f36c78d2b0a5be38617651a9b81322e054ee512bee06"></a>
|
||||
|
||||
@@ -4190,7 +4182,7 @@ One of:
|
||||
- `"negative"`
|
||||
- `"positive"`
|
||||
|
||||
<a id="persistence-type-sha256-576b520757158af672b4bc6c13ab8f9422f5a0a501bb36888fb4874fd6587226"></a>
|
||||
<a id="persistence-type-sha256-7a5b68bd1a5118c827df9e2466acc5e4d16b83e3f97a2304d992958647592690"></a>
|
||||
|
||||
<a id="persistence-type-messagesource"></a>
|
||||
|
||||
@@ -4198,12 +4190,19 @@ One of:
|
||||
|
||||
### `MessageSource`
|
||||
|
||||
SHA-256: `576b520757158af672b4bc6c13ab8f9422f5a0a501bb36888fb4874fd6587226`
|
||||
SHA-256: `7a5b68bd1a5118c827df9e2466acc5e4d16b83e3f97a2304d992958647592690`
|
||||
|
||||
Sources: [`packages/llm/llm/src/message.ts:136`](../packages/llm/llm/src/message.ts)
|
||||
|
||||
| kind | Form property | Other required fields | Full definition |
|
||||
|---|---|---|---|
|
||||
| `action-cards` | `"catalog"` | `through`: `number` | [`{ kind: "action-cards", form: "catalog" }`](#persistence-type-sha256-dd00cdccd0ba487b92362ef67db58cd264f48c1bfd368291424a1da9a899489a) |
|
||||
| `action-cards` | `"instructions"` | `through`: `number` | [`{ kind: "action-cards", form: "instructions" }`](#persistence-type-sha256-ba2a1a8f194b1bb21f270713398f6643e206e8ff5f7f26f6d36a88e3f0f0ab10) |
|
||||
| `action-cards` | `"notice"` | `summary`: `string`; `through`: `number` | [`{ kind: "action-cards", form: "notice" }`](#persistence-type-sha256-e7f4cbb3a57f4cbdb61ea41e95bcba626ad1fff6bb9b1e063b1d50a32da6e864) |
|
||||
| `action-cards` | `"recall"` | `through`: `number` | [`{ kind: "action-cards", form: "recall" }`](#persistence-type-sha256-b613f83572fe2fbf7259c72308cafd008f4fceea897749128a48bcd158f290aa) |
|
||||
| `action-cards` | `"relay"` | `through`: `number` | [`{ kind: "action-cards", form: "relay" }`](#persistence-type-sha256-45f005e6bbb7645248be792b715a74bc7fdf5a67f5381655d3a75dcc7aa2112e) |
|
||||
| `action-cards` | `"snapshot"` | `sections`: [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262); `through`: `number` | [`{ kind: "action-cards", form: "snapshot" }`](#persistence-type-sha256-3247e566f4340029325b70e4366b56fa9719977f1e39033b769a2ec221ab22a9) |
|
||||
| `action-cards` | not declared | `through`: `number` | [`{ kind: "action-cards" }`](#persistence-type-sha256-dde0cdf9d426768b649b5a9783d2144e7f900c35ef65229cd89036dbf411d1b0) |
|
||||
| `agent-instructions` | `"instructions"` | `changes`: [`AgentInstructionChange[]`](#persistence-type-sha256-2ab12a0e345658f9342816d773fe610f049982bcad82631f43b9205abe43e5ee) | [`AgentInstructionSource`](#persistence-type-sha256-6f22a9d02b9a1f1157f3b0e7bdccd7e7b12b085c4efdb709dfc74a465cd4e590) |
|
||||
| `agent-message` | `"relay"` | `senderSessionId`: `string` | [`AgentMessageSource`](#persistence-type-sha256-4a9bef9f27a942520cc2279ca7dd3082556e4bff543f66b5c0333e1bbed1cd86) |
|
||||
| `compact-checkpoint` | not declared | `compactionId`: `string` | [`CompactionCheckpointSource`](#persistence-type-sha256-31907de9563751822af6d9be02bafaf26faa098bbd1cb412524134d577cc1648) |
|
||||
@@ -4238,13 +4237,6 @@ Sources: [`packages/llm/llm/src/message.ts:136`](../packages/llm/llm/src/message
|
||||
| `model-selection` | `"relay"` | none | [`{ kind: "model-selection", form: "relay" }`](#persistence-type-sha256-a15a19ef63cf5d1b711db1d249821dab0cedcd3a9ad09137b47352c93841fd20) |
|
||||
| `model-selection` | `"snapshot"` | `sections`: [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) | [`{ kind: "model-selection", form: "snapshot" }`](#persistence-type-sha256-52c6113cb0e53f345324bf84f01928bea5d5df57ee80bc0dd65407b8bc5a3734) |
|
||||
| `model-selection` | not declared | none | [`{ kind: "model-selection" }`](#persistence-type-sha256-f7283223aacdc39b0adca728c8cbd4c090a20006a6fecec74421c30e943b489c) |
|
||||
| `personalized-pages` | `"catalog"` | `through`: `number` | [`{ kind: "personalized-pages", form: "catalog" }`](#persistence-type-sha256-9529cbfe9fc86799157ea4fdd84e2d7e2daeffa8843065d29ac40acc68087681) |
|
||||
| `personalized-pages` | `"instructions"` | `through`: `number` | [`{ kind: "personalized-pages", form: "instructions" }`](#persistence-type-sha256-062f94b162cfd50fccd0733645d262b6fce404349cd003b71d15daf5539f0c4e) |
|
||||
| `personalized-pages` | `"notice"` | `summary`: `string`; `through`: `number` | [`{ kind: "personalized-pages", form: "notice" }`](#persistence-type-sha256-f99e707d67fd708b9c282bad0428e8bc8c69777d93d283bf152f20fd9eb3e36f) |
|
||||
| `personalized-pages` | `"recall"` | `through`: `number` | [`{ kind: "personalized-pages", form: "recall" }`](#persistence-type-sha256-53bb37430d38c7256e3868155ca5a03f4d8a46f4b124b2d22152e3752c0cb574) |
|
||||
| `personalized-pages` | `"relay"` | `through`: `number` | [`{ kind: "personalized-pages", form: "relay" }`](#persistence-type-sha256-d2cc8a54a6f1abc97f638821bc36cdd559355e6d9ceb9ad69bd63587a5ec7c0a) |
|
||||
| `personalized-pages` | `"snapshot"` | `sections`: [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262); `through`: `number` | [`{ kind: "personalized-pages", form: "snapshot" }`](#persistence-type-sha256-66b2e4f3954442bc9a11c5aa3bfbea6a33d9ff3f7df42fa7e7b062411d394da4) |
|
||||
| `personalized-pages` | not declared | `through`: `number` | [`{ kind: "personalized-pages" }`](#persistence-type-sha256-5b25a1523822e01a21b6ca6054f583a61fdced38b3ddd22a37faeb5a6fe28448) |
|
||||
| `plan-mode` | `"catalog"` | none | [`{ kind: "plan-mode", form: "catalog" }`](#persistence-type-sha256-3b04790e08b35241ffa0d38f6d7e4f8788aa921341f6c0d7574a329397c59408) |
|
||||
| `plan-mode` | `"instructions"` | none | [`{ kind: "plan-mode", form: "instructions" }`](#persistence-type-sha256-408927267422a7b2beb6df354ff7c1406d929a5646554f48adf85eb8372f811c) |
|
||||
| `plan-mode` | `"notice"` | `summary`: `string` | [`{ kind: "plan-mode", form: "notice" }`](#persistence-type-sha256-baccc97ec34be6c4c78e95aa88c85c29820269479445e5b13f956cd64c5e286f) |
|
||||
@@ -4252,13 +4244,6 @@ Sources: [`packages/llm/llm/src/message.ts:136`](../packages/llm/llm/src/message
|
||||
| `plan-mode` | `"relay"` | none | [`{ kind: "plan-mode", form: "relay" }`](#persistence-type-sha256-deaae5cd30987d4f49398e8f9d994c125907e7f928300745fb1dbf15f145d0e7) |
|
||||
| `plan-mode` | `"snapshot"` | `sections`: [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) | [`{ kind: "plan-mode", form: "snapshot" }`](#persistence-type-sha256-8c1c4f72755a78ea163523a46565316e36e9b644382eb48e6635c71a6f412dd2) |
|
||||
| `plan-mode` | not declared | none | [`{ kind: "plan-mode" }`](#persistence-type-sha256-f4a66f654996c093aae700ea4c434ff2ee3569fea9c0e5813ccf6afdccabd163) |
|
||||
| `plugin-recommendations` | `"catalog"` | `through`: `number` | [`{ kind: "plugin-recommendations", form: "catalog" }`](#persistence-type-sha256-b03a3f57be0e20567f0d7127555a127326cc3af61f93b8a06fbcac8b762f93eb) |
|
||||
| `plugin-recommendations` | `"instructions"` | `through`: `number` | [`{ kind: "plugin-recommendations", form: "instructions" }`](#persistence-type-sha256-328eb9a6ac89d6d82a283b5850bb7aa7db102b8e2a5533deb2add13fdf38135c) |
|
||||
| `plugin-recommendations` | `"notice"` | `summary`: `string`; `through`: `number` | [`{ kind: "plugin-recommendations", form: "notice" }`](#persistence-type-sha256-5c98a6a7047c358964a874bd2cdb86ef1baaa5b3fa780d715a9c1a023e77bbea) |
|
||||
| `plugin-recommendations` | `"recall"` | `through`: `number` | [`{ kind: "plugin-recommendations", form: "recall" }`](#persistence-type-sha256-16a51dd31994f8d8ce7d574165d99dcde042e9bd3ef3d0b18454a18884aa33f9) |
|
||||
| `plugin-recommendations` | `"relay"` | `through`: `number` | [`{ kind: "plugin-recommendations", form: "relay" }`](#persistence-type-sha256-ca146eefc6285feedfbd3e6e7078ab446e258e1a9e6d289279cac0c6fa6a1be8) |
|
||||
| `plugin-recommendations` | `"snapshot"` | `sections`: [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262); `through`: `number` | [`{ kind: "plugin-recommendations", form: "snapshot" }`](#persistence-type-sha256-1af4d670721bd3274747840b17fd10e73026cedb3271732666951f9937ae9f8a) |
|
||||
| `plugin-recommendations` | not declared | `through`: `number` | [`{ kind: "plugin-recommendations" }`](#persistence-type-sha256-df948d3c80162763fe88eb1d98c7df5b248cb41d7b632140c0ccd5907c3328bb) |
|
||||
| `ptc-mode` | not declared | none | [`{ kind: "ptc-mode" }`](#persistence-type-sha256-dba54c09c6e7aafc9acbed7792ecc920d99f92d0784aeeed10af55f7fe0bc8cd) |
|
||||
| `repeat-tool-reminder` | `"catalog"` | none | [`{ kind: "repeat-tool-reminder", form: "catalog" }`](#persistence-type-sha256-d85590a5675c6e2fd8164e5792a6cceac714605b8ac228adae5ee668facb1490) |
|
||||
| `repeat-tool-reminder` | `"instructions"` | none | [`{ kind: "repeat-tool-reminder", form: "instructions" }`](#persistence-type-sha256-6f44f32be9bcd9a8bf075c3b575b06c8ed63446386e5b0995c7b73762e68ddae) |
|
||||
@@ -4330,13 +4315,13 @@ Sources: [`packages/llm/llm/src/message.ts:136`](../packages/llm/llm/src/message
|
||||
| `webhook` | `"notice"` | `deliveryId`: `string`; `provider`: `string`; `ruleId`: `string`; `source`: `string`; `summary`: `string` | [`{ kind: "webhook", form: "notice" }`](#persistence-type-sha256-9edc162949abf93bd5ff049191b345454ba104f583937ce5580fb50f067d2b94) |
|
||||
| `working-directory` | not declared | none | [`{ kind: "working-directory" }`](#persistence-type-sha256-2235d957bf4b7c6cf959231d480f0ba1f3a6d72d82981493fb6c7c963021d3d5) |
|
||||
|
||||
<a id="persistence-type-sha256-e49519b11e614a05cf292f011205ebb42b94d5d0b91a8532cd57fd4a745f5c8d"></a>
|
||||
<a id="persistence-type-sha256-78b9204976ab9faaf133c3488b73d1dfb6f1a4bb6c0903e3473cd41a5e1e39e1"></a>
|
||||
|
||||
### `Message[]`
|
||||
|
||||
SHA-256: `e49519b11e614a05cf292f011205ebb42b94d5d0b91a8532cd57fd4a745f5c8d`
|
||||
SHA-256: `78b9204976ab9faaf133c3488b73d1dfb6f1a4bb6c0903e3473cd41a5e1e39e1`
|
||||
|
||||
Array of [`Message`](#persistence-type-sha256-5e88c0eb7dd6462d2cc26b2daa67f68f68e9e2d404305157a9fe32f0d5b4a32f).
|
||||
Array of [`Message`](#persistence-type-sha256-cda79b839d8cc0c7a7bd09dd067de04925f6e9037080d878b65aaa5a383f117c).
|
||||
|
||||
<a id="persistence-type-sha256-719c51f67074f97034a6c94297fe1f4b5d3c8d392c57586dab732aa5398c7a91"></a>
|
||||
|
||||
@@ -4720,7 +4705,7 @@ Sources: [`packages/session/session-title/src/types.ts:41`](../packages/session/
|
||||
| `source` | required | [`SessionTitleSource`](#persistence-type-sha256-30d5a537b296685770b1241c4b4bbde19d5a31ff81aa23df73fab5e90b8fc65f) |
|
||||
| `title` | required | `string` |
|
||||
|
||||
<a id="persistence-type-sha256-70a6380591b15f2d138ae30bb073dd2d1b64fc27cc8b9355aea1186defa1905b"></a>
|
||||
<a id="persistence-type-sha256-a3e299483348f27a4787a36bb3f29cd86024c65336abc10bb3d687468302c4cf"></a>
|
||||
|
||||
<a id="persistence-type-packagessessionsession-title-llmsrcindextssessiontitlellmrequesteventdata"></a>
|
||||
|
||||
@@ -4728,7 +4713,7 @@ Sources: [`packages/session/session-title/src/types.ts:41`](../packages/session/
|
||||
|
||||
### `SessionTitleLlmRequestEventData`
|
||||
|
||||
SHA-256: `70a6380591b15f2d138ae30bb073dd2d1b64fc27cc8b9355aea1186defa1905b`
|
||||
SHA-256: `a3e299483348f27a4787a36bb3f29cd86024c65336abc10bb3d687468302c4cf`
|
||||
|
||||
Sources: [`packages/session/session-title-llm/src/index.ts:37`](../packages/session/session-title-llm/src/index.ts)
|
||||
|
||||
@@ -4736,7 +4721,7 @@ Sources: [`packages/session/session-title-llm/src/index.ts:37`](../packages/sess
|
||||
|---|---|---|
|
||||
| `maxTokens` | required | `number` |
|
||||
| `messageSeqs` | required | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
|
||||
| `messages` | required | [`Message[]`](#persistence-type-sha256-e49519b11e614a05cf292f011205ebb42b94d5d0b91a8532cd57fd4a745f5c8d) |
|
||||
| `messages` | required | [`Message[]`](#persistence-type-sha256-78b9204976ab9faaf133c3488b73d1dfb6f1a4bb6c0903e3473cd41a5e1e39e1) |
|
||||
| `reasoningEffort` | optional | `string` |
|
||||
| `route` | required | [`SessionTitleModelIdentity`](#persistence-type-sha256-07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235) |
|
||||
| `system` | required | `string` |
|
||||
@@ -5392,7 +5377,7 @@ Sources: [`packages/core/session/src/types.ts:234`](../packages/core/session/src
|
||||
| `interrupted` | not declared | none | [`{ kind: "interrupted" }`](#persistence-type-sha256-56b7c047694875a843ba020dfea3c8380d54ae4ff88ab349e72004dc21e07c23) |
|
||||
| `max-tokens` | not declared | none | [`{ kind: "max-tokens" }`](#persistence-type-sha256-ab7ec5f9eb2c6dfacca5da4c37cf7ba85d04172053ee6b1ebf1709ffcd99c1a7) |
|
||||
|
||||
<a id="persistence-type-sha256-3b087536721261863dfc1d0cf972211ecbefc91f0732e7c0e7eb9da7f3d887ad"></a>
|
||||
<a id="persistence-type-sha256-b782058cef83caf3eb44a16adeef5657e4d5cdff2d50655aba418c4490670a69"></a>
|
||||
|
||||
<a id="persistence-type-packagesllmllmsrcmessagetsusermessage"></a>
|
||||
|
||||
@@ -5400,7 +5385,7 @@ Sources: [`packages/core/session/src/types.ts:234`](../packages/core/session/src
|
||||
|
||||
### `UserMessage`
|
||||
|
||||
SHA-256: `3b087536721261863dfc1d0cf972211ecbefc91f0732e7c0e7eb9da7f3d887ad`
|
||||
SHA-256: `b782058cef83caf3eb44a16adeef5657e4d5cdff2d50655aba418c4490670a69`
|
||||
|
||||
Sources: [`packages/llm/llm/src/message.ts:162`](../packages/llm/llm/src/message.ts)
|
||||
|
||||
@@ -5409,19 +5394,19 @@ Sources: [`packages/llm/llm/src/message.ts:162`](../packages/llm/llm/src/message
|
||||
| `content` | required | [`ContentBlock[]`](#persistence-type-sha256-b52f215a6cd691058a3413c12f161fa3b563a2f4895adb3df6f744ec4b0a6ef1) |
|
||||
| `id` | required | `string` |
|
||||
| `role` | required | `"user"` |
|
||||
| `source` | required | [`MessageSource`](#persistence-type-sha256-576b520757158af672b4bc6c13ab8f9422f5a0a501bb36888fb4874fd6587226) |
|
||||
| `source` | required | [`MessageSource`](#persistence-type-sha256-7a5b68bd1a5118c827df9e2466acc5e4d16b83e3f97a2304d992958647592690) |
|
||||
|
||||
Source compatibility: `source` — `session-source-attribution` v1; `session.user-message.source`; `kind`; `preserve`.
|
||||
|
||||
Attribution-only additions: `personalized-pages`, `plugin-recommendations`, `tmux-context`, `user-question-reply`, `working-directory`.
|
||||
Attribution-only additions: `action-cards`, `tmux-context`, `user-question-reply`, `working-directory`.
|
||||
|
||||
<a id="persistence-type-sha256-2013e9f315078a163122032ea5717a84e4d395f96ecba00ad948e80dbd7fb332"></a>
|
||||
<a id="persistence-type-sha256-5d00abf938272f22eb47199e9d40801e8d8ec4c88e2b138b15aa2a5a5bf87520"></a>
|
||||
|
||||
### `UserMessage[]`
|
||||
|
||||
SHA-256: `2013e9f315078a163122032ea5717a84e4d395f96ecba00ad948e80dbd7fb332`
|
||||
SHA-256: `5d00abf938272f22eb47199e9d40801e8d8ec4c88e2b138b15aa2a5a5bf87520`
|
||||
|
||||
Array of [`UserMessage`](#persistence-type-sha256-3b087536721261863dfc1d0cf972211ecbefc91f0732e7c0e7eb9da7f3d887ad).
|
||||
Array of [`UserMessage`](#persistence-type-sha256-b782058cef83caf3eb44a16adeef5657e4d5cdff2d50655aba418c4490670a69).
|
||||
|
||||
<a id="persistence-type-sha256-c2deb7c9183735d4e0fffddf5c623f4e34daa1c8e96b111982e957dfcbbcf896"></a>
|
||||
|
||||
@@ -6306,18 +6291,18 @@ Sources: [`packages/core/session/src/types.ts:392`](../packages/core/session/src
|
||||
| `reason` | required | [`RequestHeaderReason`](#persistence-type-sha256-530da6c0267813bb4511af72883cc518834e624e3b3220a7062955fd57a788a6) |
|
||||
| `startsSeries` | optional | `true` |
|
||||
|
||||
<a id="persistence-type-sha256-4ccafbd2333db70abe447cd636db9eb428b5ae2eae36f7020351455fe314ffd4"></a>
|
||||
<a id="persistence-type-sha256-7404c6123fdaa591474a37979a5a8ae70d1387af7c9f09bfe568b218935a974d"></a>
|
||||
|
||||
### `{ headerSeq?, message, step, turn }`
|
||||
|
||||
SHA-256: `4ccafbd2333db70abe447cd636db9eb428b5ae2eae36f7020351455fe314ffd4`
|
||||
SHA-256: `7404c6123fdaa591474a37979a5a8ae70d1387af7c9f09bfe568b218935a974d`
|
||||
|
||||
Sources: [`packages/core/session/src/types.ts:313`](../packages/core/session/src/types.ts)
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `headerSeq` | optional | `number` |
|
||||
| `message` | required | [`DeveloperMessage`](#persistence-type-sha256-85610bad3515b96db938e2353ca7fe20de4d69dc89d73cc4ffacbde37f4ed39e) |
|
||||
| `message` | required | [`DeveloperMessage`](#persistence-type-sha256-7580e7d96dc8475fffe813a42af499665de3d4517fcdb3bc2337d0340e98d616) |
|
||||
| `step` | required | `number` |
|
||||
| `turn` | required | `number` |
|
||||
|
||||
@@ -6401,17 +6386,17 @@ Sources: [`packages/core/session/src/types.ts:429`](../packages/core/session/src
|
||||
|---|---|---|
|
||||
| `inherited` | optional | `true` |
|
||||
|
||||
<a id="persistence-type-sha256-d3e2c037628540edc7ac906a89631ebc1043f205168d002cce5d6a694053c7c4"></a>
|
||||
<a id="persistence-type-sha256-b2a948a5340a9341fa3bab99507c7090c5b0456de72ec28b5b157b8df3f1d640"></a>
|
||||
|
||||
### `{ inserted, outcome?, removedCount?, start, … }`
|
||||
|
||||
SHA-256: `d3e2c037628540edc7ac906a89631ebc1043f205168d002cce5d6a694053c7c4`
|
||||
SHA-256: `b2a948a5340a9341fa3bab99507c7090c5b0456de72ec28b5b157b8df3f1d640`
|
||||
|
||||
Sources: [`packages/core/agent/src/types.ts:110`](../packages/core/agent/src/types.ts)
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `inserted` | required | [`UserMessage[]`](#persistence-type-sha256-2013e9f315078a163122032ea5717a84e4d395f96ecba00ad948e80dbd7fb332) |
|
||||
| `inserted` | required | [`UserMessage[]`](#persistence-type-sha256-5d00abf938272f22eb47199e9d40801e8d8ec4c88e2b138b15aa2a5a5bf87520) |
|
||||
| `outcome` | optional | `"canceled"` |
|
||||
| `removedCount` | optional | `number` |
|
||||
| `start` | required | `number` |
|
||||
@@ -6447,6 +6432,91 @@ Sources: [`packages/core/session/src/types.ts:205`](../packages/core/session/src
|
||||
| `kind` | required | `"aborted"` |
|
||||
| `reason` | required | [`TurnEndCancelCause`](#persistence-type-sha256-1f8c126cfab3df812cd115cfc23e3256f0fa2383400f4ce91ecad313577e59b0) |
|
||||
|
||||
<a id="persistence-type-sha256-dde0cdf9d426768b649b5a9783d2144e7f900c35ef65229cd89036dbf411d1b0"></a>
|
||||
|
||||
### `{ kind: "action-cards" }`
|
||||
|
||||
SHA-256: `dde0cdf9d426768b649b5a9783d2144e7f900c35ef65229cd89036dbf411d1b0`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `kind` | required | `"action-cards"` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-dd00cdccd0ba487b92362ef67db58cd264f48c1bfd368291424a1da9a899489a"></a>
|
||||
|
||||
### `{ kind: "action-cards", form: "catalog" }`
|
||||
|
||||
SHA-256: `dd00cdccd0ba487b92362ef67db58cd264f48c1bfd368291424a1da9a899489a`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"catalog"` |
|
||||
| `kind` | required | `"action-cards"` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-ba2a1a8f194b1bb21f270713398f6643e206e8ff5f7f26f6d36a88e3f0f0ab10"></a>
|
||||
|
||||
### `{ kind: "action-cards", form: "instructions" }`
|
||||
|
||||
SHA-256: `ba2a1a8f194b1bb21f270713398f6643e206e8ff5f7f26f6d36a88e3f0f0ab10`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"instructions"` |
|
||||
| `kind` | required | `"action-cards"` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-e7f4cbb3a57f4cbdb61ea41e95bcba626ad1fff6bb9b1e063b1d50a32da6e864"></a>
|
||||
|
||||
### `{ kind: "action-cards", form: "notice" }`
|
||||
|
||||
SHA-256: `e7f4cbb3a57f4cbdb61ea41e95bcba626ad1fff6bb9b1e063b1d50a32da6e864`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"notice"` |
|
||||
| `kind` | required | `"action-cards"` |
|
||||
| `summary` | required | `string` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-b613f83572fe2fbf7259c72308cafd008f4fceea897749128a48bcd158f290aa"></a>
|
||||
|
||||
### `{ kind: "action-cards", form: "recall" }`
|
||||
|
||||
SHA-256: `b613f83572fe2fbf7259c72308cafd008f4fceea897749128a48bcd158f290aa`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"recall"` |
|
||||
| `kind` | required | `"action-cards"` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-45f005e6bbb7645248be792b715a74bc7fdf5a67f5381655d3a75dcc7aa2112e"></a>
|
||||
|
||||
### `{ kind: "action-cards", form: "relay" }`
|
||||
|
||||
SHA-256: `45f005e6bbb7645248be792b715a74bc7fdf5a67f5381655d3a75dcc7aa2112e`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"relay"` |
|
||||
| `kind` | required | `"action-cards"` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-3247e566f4340029325b70e4366b56fa9719977f1e39033b769a2ec221ab22a9"></a>
|
||||
|
||||
### `{ kind: "action-cards", form: "snapshot" }`
|
||||
|
||||
SHA-256: `3247e566f4340029325b70e4366b56fa9719977f1e39033b769a2ec221ab22a9`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"snapshot"` |
|
||||
| `kind` | required | `"action-cards"` |
|
||||
| `sections` | required | [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-023a355b2be0d688fb6e4df8388dadb942761d46cfe96d0f499aae9631a159d4"></a>
|
||||
|
||||
### `{ kind: "blocked" }`
|
||||
@@ -6892,91 +6962,6 @@ Sources: [`packages/core/session/src/types.ts:192`](../packages/core/session/src
|
||||
|---|---|---|
|
||||
| `kind` | required | `"parent"` |
|
||||
|
||||
<a id="persistence-type-sha256-5b25a1523822e01a21b6ca6054f583a61fdced38b3ddd22a37faeb5a6fe28448"></a>
|
||||
|
||||
### `{ kind: "personalized-pages" }`
|
||||
|
||||
SHA-256: `5b25a1523822e01a21b6ca6054f583a61fdced38b3ddd22a37faeb5a6fe28448`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `kind` | required | `"personalized-pages"` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-9529cbfe9fc86799157ea4fdd84e2d7e2daeffa8843065d29ac40acc68087681"></a>
|
||||
|
||||
### `{ kind: "personalized-pages", form: "catalog" }`
|
||||
|
||||
SHA-256: `9529cbfe9fc86799157ea4fdd84e2d7e2daeffa8843065d29ac40acc68087681`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"catalog"` |
|
||||
| `kind` | required | `"personalized-pages"` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-062f94b162cfd50fccd0733645d262b6fce404349cd003b71d15daf5539f0c4e"></a>
|
||||
|
||||
### `{ kind: "personalized-pages", form: "instructions" }`
|
||||
|
||||
SHA-256: `062f94b162cfd50fccd0733645d262b6fce404349cd003b71d15daf5539f0c4e`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"instructions"` |
|
||||
| `kind` | required | `"personalized-pages"` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-f99e707d67fd708b9c282bad0428e8bc8c69777d93d283bf152f20fd9eb3e36f"></a>
|
||||
|
||||
### `{ kind: "personalized-pages", form: "notice" }`
|
||||
|
||||
SHA-256: `f99e707d67fd708b9c282bad0428e8bc8c69777d93d283bf152f20fd9eb3e36f`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"notice"` |
|
||||
| `kind` | required | `"personalized-pages"` |
|
||||
| `summary` | required | `string` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-53bb37430d38c7256e3868155ca5a03f4d8a46f4b124b2d22152e3752c0cb574"></a>
|
||||
|
||||
### `{ kind: "personalized-pages", form: "recall" }`
|
||||
|
||||
SHA-256: `53bb37430d38c7256e3868155ca5a03f4d8a46f4b124b2d22152e3752c0cb574`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"recall"` |
|
||||
| `kind` | required | `"personalized-pages"` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-d2cc8a54a6f1abc97f638821bc36cdd559355e6d9ceb9ad69bd63587a5ec7c0a"></a>
|
||||
|
||||
### `{ kind: "personalized-pages", form: "relay" }`
|
||||
|
||||
SHA-256: `d2cc8a54a6f1abc97f638821bc36cdd559355e6d9ceb9ad69bd63587a5ec7c0a`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"relay"` |
|
||||
| `kind` | required | `"personalized-pages"` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-66b2e4f3954442bc9a11c5aa3bfbea6a33d9ff3f7df42fa7e7b062411d394da4"></a>
|
||||
|
||||
### `{ kind: "personalized-pages", form: "snapshot" }`
|
||||
|
||||
SHA-256: `66b2e4f3954442bc9a11c5aa3bfbea6a33d9ff3f7df42fa7e7b062411d394da4`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"snapshot"` |
|
||||
| `kind` | required | `"personalized-pages"` |
|
||||
| `sections` | required | [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-f4a66f654996c093aae700ea4c434ff2ee3569fea9c0e5813ccf6afdccabd163"></a>
|
||||
|
||||
### `{ kind: "plan-mode" }`
|
||||
@@ -7055,91 +7040,6 @@ SHA-256: `8c1c4f72755a78ea163523a46565316e36e9b644382eb48e6635c71a6f412dd2`
|
||||
| `kind` | required | `"plan-mode"` |
|
||||
| `sections` | required | [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) |
|
||||
|
||||
<a id="persistence-type-sha256-df948d3c80162763fe88eb1d98c7df5b248cb41d7b632140c0ccd5907c3328bb"></a>
|
||||
|
||||
### `{ kind: "plugin-recommendations" }`
|
||||
|
||||
SHA-256: `df948d3c80162763fe88eb1d98c7df5b248cb41d7b632140c0ccd5907c3328bb`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `kind` | required | `"plugin-recommendations"` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-b03a3f57be0e20567f0d7127555a127326cc3af61f93b8a06fbcac8b762f93eb"></a>
|
||||
|
||||
### `{ kind: "plugin-recommendations", form: "catalog" }`
|
||||
|
||||
SHA-256: `b03a3f57be0e20567f0d7127555a127326cc3af61f93b8a06fbcac8b762f93eb`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"catalog"` |
|
||||
| `kind` | required | `"plugin-recommendations"` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-328eb9a6ac89d6d82a283b5850bb7aa7db102b8e2a5533deb2add13fdf38135c"></a>
|
||||
|
||||
### `{ kind: "plugin-recommendations", form: "instructions" }`
|
||||
|
||||
SHA-256: `328eb9a6ac89d6d82a283b5850bb7aa7db102b8e2a5533deb2add13fdf38135c`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"instructions"` |
|
||||
| `kind` | required | `"plugin-recommendations"` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-5c98a6a7047c358964a874bd2cdb86ef1baaa5b3fa780d715a9c1a023e77bbea"></a>
|
||||
|
||||
### `{ kind: "plugin-recommendations", form: "notice" }`
|
||||
|
||||
SHA-256: `5c98a6a7047c358964a874bd2cdb86ef1baaa5b3fa780d715a9c1a023e77bbea`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"notice"` |
|
||||
| `kind` | required | `"plugin-recommendations"` |
|
||||
| `summary` | required | `string` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-16a51dd31994f8d8ce7d574165d99dcde042e9bd3ef3d0b18454a18884aa33f9"></a>
|
||||
|
||||
### `{ kind: "plugin-recommendations", form: "recall" }`
|
||||
|
||||
SHA-256: `16a51dd31994f8d8ce7d574165d99dcde042e9bd3ef3d0b18454a18884aa33f9`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"recall"` |
|
||||
| `kind` | required | `"plugin-recommendations"` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-ca146eefc6285feedfbd3e6e7078ab446e258e1a9e6d289279cac0c6fa6a1be8"></a>
|
||||
|
||||
### `{ kind: "plugin-recommendations", form: "relay" }`
|
||||
|
||||
SHA-256: `ca146eefc6285feedfbd3e6e7078ab446e258e1a9e6d289279cac0c6fa6a1be8`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"relay"` |
|
||||
| `kind` | required | `"plugin-recommendations"` |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-1af4d670721bd3274747840b17fd10e73026cedb3271732666951f9937ae9f8a"></a>
|
||||
|
||||
### `{ kind: "plugin-recommendations", form: "snapshot" }`
|
||||
|
||||
SHA-256: `1af4d670721bd3274747840b17fd10e73026cedb3271732666951f9937ae9f8a`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `form` | required | `"snapshot"` |
|
||||
| `kind` | required | `"plugin-recommendations"` |
|
||||
| `sections` | required | [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) |
|
||||
| `through` | required | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-b81e9de81a481b24e1e1f9adf038bfc59e57b4f35ce62f8f1e45284186f4f812"></a>
|
||||
|
||||
### `{ kind: "provider" }`
|
||||
@@ -8143,17 +8043,17 @@ SHA-256: `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b`
|
||||
| `time` | required | `number` |
|
||||
| `type` | required | `"agent-preset/selected"` |
|
||||
|
||||
<a id="persistence-type-sha256-dde4d210811d670552c70fa7a9864ae650cef357590ad60ef1778c9b7dd1d7bf"></a>
|
||||
<a id="persistence-type-sha256-b36fd842cd004b532ce96fd5d6f5be28e017eda043131aa3cf5e69edc436108e"></a>
|
||||
|
||||
<a id="persistence-type-eventagentinboxspliced"></a>
|
||||
|
||||
### `{ type: "agent/inbox/spliced" }`
|
||||
|
||||
SHA-256: `dde4d210811d670552c70fa7a9864ae650cef357590ad60ef1778c9b7dd1d7bf`
|
||||
SHA-256: `b36fd842cd004b532ce96fd5d6f5be28e017eda043131aa3cf5e69edc436108e`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `data` | required | [`{ inserted, outcome?, removedCount?, start, … }`](#persistence-type-sha256-d3e2c037628540edc7ac906a89631ebc1043f205168d002cce5d6a694053c7c4) |
|
||||
| `data` | required | [`{ inserted, outcome?, removedCount?, start, … }`](#persistence-type-sha256-b2a948a5340a9341fa3bab99507c7090c5b0456de72ec28b5b157b8df3f1d640) |
|
||||
| `ignorable` | optional | `true` |
|
||||
| `seq` | required | `number` |
|
||||
| `time` | required | `number` |
|
||||
@@ -8394,17 +8294,17 @@ SHA-256: `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176`
|
||||
| `time` | required | `number` |
|
||||
| `type` | required | `"deliverables/presented"` |
|
||||
|
||||
<a id="persistence-type-sha256-1adeb5417a9565c55ad63138034d1c51daf6a75f8964c46352691a1d94188265"></a>
|
||||
<a id="persistence-type-sha256-5ef58f2a1bdc576c1f12fa1f4da1920ece020b13c0f991a578cddcbeb28bc5be"></a>
|
||||
|
||||
<a id="persistence-type-eventdevelopermessage"></a>
|
||||
|
||||
### `{ type: "developer/message" }`
|
||||
|
||||
SHA-256: `1adeb5417a9565c55ad63138034d1c51daf6a75f8964c46352691a1d94188265`
|
||||
SHA-256: `5ef58f2a1bdc576c1f12fa1f4da1920ece020b13c0f991a578cddcbeb28bc5be`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `data` | required | [`{ headerSeq?, message, step, turn }`](#persistence-type-sha256-4ccafbd2333db70abe447cd636db9eb428b5ae2eae36f7020351455fe314ffd4) |
|
||||
| `data` | required | [`{ headerSeq?, message, step, turn }`](#persistence-type-sha256-7404c6123fdaa591474a37979a5a8ae70d1387af7c9f09bfe568b218935a974d) |
|
||||
| `ignorable` | optional | `true` |
|
||||
| `seq` | required | `number` |
|
||||
| `sourceEventSeqs` | optional | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
|
||||
@@ -8804,17 +8704,17 @@ SHA-256: `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5`
|
||||
| `time` | required | `number` |
|
||||
| `type` | required | `"session/title"` |
|
||||
|
||||
<a id="persistence-type-sha256-651a11c7869dfbe778ff23bf7e94567b141470b5dbad4a146f93189a4ff24646"></a>
|
||||
<a id="persistence-type-sha256-efa1a091017ce533e38b0ef3e14d11a5c102ff1793229b18dad719a4268d9adc"></a>
|
||||
|
||||
<a id="persistence-type-eventsessiontitle-llm-request"></a>
|
||||
|
||||
### `{ type: "session/title-llm-request" }`
|
||||
|
||||
SHA-256: `651a11c7869dfbe778ff23bf7e94567b141470b5dbad4a146f93189a4ff24646`
|
||||
SHA-256: `efa1a091017ce533e38b0ef3e14d11a5c102ff1793229b18dad719a4268d9adc`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `data` | required | [`SessionTitleLlmRequestEventData`](#persistence-type-sha256-70a6380591b15f2d138ae30bb073dd2d1b64fc27cc8b9355aea1186defa1905b) |
|
||||
| `data` | required | [`SessionTitleLlmRequestEventData`](#persistence-type-sha256-a3e299483348f27a4787a36bb3f29cd86024c65336abc10bb3d687468302c4cf) |
|
||||
| `ignorable` | optional | `true` |
|
||||
| `seq` | required | `number` |
|
||||
| `time` | required | `number` |
|
||||
@@ -9237,17 +9137,17 @@ Sources: [`packages/llm/llm/src/types.ts:476`](../packages/llm/llm/src/types.ts)
|
||||
| `type` | required | `"usage"` |
|
||||
| `usage` | required | [`TokenUsage`](#persistence-type-sha256-fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394) |
|
||||
|
||||
<a id="persistence-type-sha256-1ca126460ab395a27ca1d236203c0a8b58eddcc316d681484691bced1b220045"></a>
|
||||
<a id="persistence-type-sha256-58b122df513aeaf7ddc5783dbb1fd844e2979bb273964e30ae351a8db6510019"></a>
|
||||
|
||||
<a id="persistence-type-eventusermessage"></a>
|
||||
|
||||
### `{ type: "user/message" }`
|
||||
|
||||
SHA-256: `1ca126460ab395a27ca1d236203c0a8b58eddcc316d681484691bced1b220045`
|
||||
SHA-256: `58b122df513aeaf7ddc5783dbb1fd844e2979bb273964e30ae351a8db6510019`
|
||||
|
||||
| Property | Presence | Type |
|
||||
|---|---|---|
|
||||
| `data` | required | [`UserMessage`](#persistence-type-sha256-3b087536721261863dfc1d0cf972211ecbefc91f0732e7c0e7eb9da7f3d887ad) |
|
||||
| `data` | required | [`UserMessage`](#persistence-type-sha256-b782058cef83caf3eb44a16adeef5657e4d5cdff2d50655aba418c4490670a69) |
|
||||
| `ignorable` | optional | `true` |
|
||||
| `seq` | required | `number` |
|
||||
| `sourceEventSeqs` | optional | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
|
||||
|
||||
+146
-246
@@ -25,7 +25,7 @@
|
||||
| `JsonlHeaderLine` | header | `18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f` | [`HeaderLine`](#persistence-type-sha256-18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f) |
|
||||
| `SessionEventEnvelope` | envelope | `5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc` | [`union (3 variants)`](#persistence-type-sha256-5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc) |
|
||||
| `event:agent-preset/selected` | event | `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b` | [`{ type: "agent-preset/selected" }`](#persistence-type-sha256-a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b) |
|
||||
| `event:agent/inbox/spliced` | event | `dde4d210811d670552c70fa7a9864ae650cef357590ad60ef1778c9b7dd1d7bf` | [`{ type: "agent/inbox/spliced" }`](#persistence-type-sha256-dde4d210811d670552c70fa7a9864ae650cef357590ad60ef1778c9b7dd1d7bf) |
|
||||
| `event:agent/inbox/spliced` | event | `b36fd842cd004b532ce96fd5d6f5be28e017eda043131aa3cf5e69edc436108e` | [`{ type: "agent/inbox/spliced" }`](#persistence-type-sha256-b36fd842cd004b532ce96fd5d6f5be28e017eda043131aa3cf5e69edc436108e) |
|
||||
| `event:approval/asked` | event | `3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1` | [`{ type: "approval/asked" }`](#persistence-type-sha256-3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1) |
|
||||
| `event:approval/decided` | event | `bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3` | [`{ type: "approval/decided" }`](#persistence-type-sha256-bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3) |
|
||||
| `event:approval/policy` | event | `26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78` | [`{ type: "approval/policy" }`](#persistence-type-sha256-26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78) |
|
||||
@@ -38,7 +38,7 @@
|
||||
| `event:compaction/start` | event | `db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965` | [`{ type: "compaction/start" }`](#persistence-type-sha256-db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965) |
|
||||
| `event:compaction/summary` | event | `e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602` | [`{ type: "compaction/summary" }`](#persistence-type-sha256-e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602) |
|
||||
| `event:deliverables/presented` | event | `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176` | [`{ type: "deliverables/presented" }`](#persistence-type-sha256-13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176) |
|
||||
| `event:developer/message` | event | `1adeb5417a9565c55ad63138034d1c51daf6a75f8964c46352691a1d94188265` | [`{ type: "developer/message" }`](#persistence-type-sha256-1adeb5417a9565c55ad63138034d1c51daf6a75f8964c46352691a1d94188265) |
|
||||
| `event:developer/message` | event | `5ef58f2a1bdc576c1f12fa1f4da1920ece020b13c0f991a578cddcbeb28bc5be` | [`{ type: "developer/message" }`](#persistence-type-sha256-5ef58f2a1bdc576c1f12fa1f4da1920ece020b13c0f991a578cddcbeb28bc5be) |
|
||||
| `event:feedback/message-delete` | event | `3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796` | [`{ type: "feedback/message-delete" }`](#persistence-type-sha256-3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796) |
|
||||
| `event:feedback/message-put` | event | `b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf` | [`{ type: "feedback/message-put" }`](#persistence-type-sha256-b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf) |
|
||||
| `event:feedback/record` | event | `b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8` | [`{ type: "feedback/record" }`](#persistence-type-sha256-b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8) |
|
||||
@@ -60,7 +60,7 @@
|
||||
| `event:session-log-deepseek/delivery-accepted` | event | `d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9` | [`{ type: "session-log-deepseek/delivery-accepted" }`](#persistence-type-sha256-d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9) |
|
||||
| `event:session/end-seed` | event | `5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e` | [`{ type: "session/end-seed" }`](#persistence-type-sha256-5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e) |
|
||||
| `event:session/title` | event | `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5` | [`{ type: "session/title" }`](#persistence-type-sha256-1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5) |
|
||||
| `event:session/title-llm-request` | event | `651a11c7869dfbe778ff23bf7e94567b141470b5dbad4a146f93189a4ff24646` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-651a11c7869dfbe778ff23bf7e94567b141470b5dbad4a146f93189a4ff24646) |
|
||||
| `event:session/title-llm-request` | event | `efa1a091017ce533e38b0ef3e14d11a5c102ff1793229b18dad719a4268d9adc` | [`{ type: "session/title-llm-request" }`](#persistence-type-sha256-efa1a091017ce533e38b0ef3e14d11a5c102ff1793229b18dad719a4268d9adc) |
|
||||
| `event:step/end` | event | `e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05` | [`{ type: "step/end" }`](#persistence-type-sha256-e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05) |
|
||||
| `event:step/start` | event | `4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986` | [`{ type: "step/start" }`](#persistence-type-sha256-4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986) |
|
||||
| `event:subagent/catalog` | event | `53750b9abf61efb7992b0aadc3e247ec927449c63266df28230fd1139f5590ac` | [`{ type: "subagent/catalog" }`](#persistence-type-sha256-53750b9abf61efb7992b0aadc3e247ec927449c63266df28230fd1139f5590ac) |
|
||||
@@ -82,7 +82,7 @@
|
||||
| `event:tool/result` | event | `7c9f44e90a0058f4cc532ae20dad0c10afa6eba22e70a6c79fc79490bad64397` | [`{ type: "tool/result" }`](#persistence-type-sha256-7c9f44e90a0058f4cc532ae20dad0c10afa6eba22e70a6c79fc79490bad64397) |
|
||||
| `event:turn/end` | event | `0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce` | [`{ type: "turn/end" }`](#persistence-type-sha256-0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce) |
|
||||
| `event:turn/start` | event | `aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8` | [`{ type: "turn/start" }`](#persistence-type-sha256-aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8) |
|
||||
| `event:user/message` | event | `1ca126460ab395a27ca1d236203c0a8b58eddcc316d681484691bced1b220045` | [`{ type: "user/message" }`](#persistence-type-sha256-1ca126460ab395a27ca1d236203c0a8b58eddcc316d681484691bced1b220045) |
|
||||
| `event:user/message` | event | `58b122df513aeaf7ddc5783dbb1fd844e2979bb273964e30ae351a8db6510019` | [`{ type: "user/message" }`](#persistence-type-sha256-58b122df513aeaf7ddc5783dbb1fd844e2979bb273964e30ae351a8db6510019) |
|
||||
| `event:web/deepseek-search-llm-request` | event | `0c556c9b9f2a96238a6b9bbb99e748206cbff2ed6203041c9571f04ae5802f52` | [`{ type: "web/deepseek-search-llm-request" }`](#persistence-type-sha256-0c556c9b9f2a96238a6b9bbb99e748206cbff2ed6203041c9571f04ae5802f52) |
|
||||
| `event:working-directory/change` | event | `124aa62078ca3311353b39cc3bf6c75da281338be6bbf672f8b361d828cddca3` | [`{ type: "working-directory/change" }`](#persistence-type-sha256-124aa62078ca3311353b39cc3bf6c75da281338be6bbf672f8b361d828cddca3) |
|
||||
| `event:workspace/changes` | event | `e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72` | [`{ type: "workspace/changes" }`](#persistence-type-sha256-e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72) |
|
||||
@@ -1349,6 +1349,14 @@ SHA-256: `1e0b0b66b6f0c53fc72e52289d06b4708d776f1ca9df4c86a22bff621d403cf0`
|
||||
|
||||
`"aborted"`
|
||||
|
||||
<a id="persistence-type-sha256-05205074b24d8340cfd7995f6cb64779c7f1241490954700115601e264178877"></a>
|
||||
|
||||
### `"action-cards"`
|
||||
|
||||
SHA-256: `05205074b24d8340cfd7995f6cb64779c7f1241490954700115601e264178877`
|
||||
|
||||
`"action-cards"`
|
||||
|
||||
<a id="persistence-type-sha256-c8e6f48878cc2a2f0dc59682280d81f407943fb503f32c64bf9ff3d9393c3eff"></a>
|
||||
|
||||
### `"active"`
|
||||
@@ -2243,14 +2251,6 @@ SHA-256: `ae63d9d1080ed8945031594d93f8d96651d7101b848719cc3e1475875cd3d649`
|
||||
|
||||
`"permission/preset"`
|
||||
|
||||
<a id="persistence-type-sha256-e1ba710db2f3e4e4d397b921fafedb5dd5ad5d16efc0393f0667160cb02f79e3"></a>
|
||||
|
||||
### `"personalized-pages"`
|
||||
|
||||
SHA-256: `e1ba710db2f3e4e4d397b921fafedb5dd5ad5d16efc0393f0667160cb02f79e3`
|
||||
|
||||
`"personalized-pages"`
|
||||
|
||||
<a id="persistence-type-sha256-0fe52387f65052702ed9d7cd59db826468936595d1b3eec207e7a823adc719db"></a>
|
||||
|
||||
### `"plan-mode"`
|
||||
@@ -2267,14 +2267,6 @@ SHA-256: `f634871d1e18b1eb199497ac8ab72d3964f48d03fbf611dc7521a1970cf429d9`
|
||||
|
||||
`"plan/mode"`
|
||||
|
||||
<a id="persistence-type-sha256-93a56a85fc8d91b52080b5b4f5f43d945cc337c048ad2076ece1dceabb7766cf"></a>
|
||||
|
||||
### `"plugin-recommendations"`
|
||||
|
||||
SHA-256: `93a56a85fc8d91b52080b5b4f5f43d945cc337c048ad2076ece1dceabb7766cf`
|
||||
|
||||
`"plugin-recommendations"`
|
||||
|
||||
<a id="persistence-type-sha256-df5d9709b7db2a72510dc52052a23f0c38f39730af1504bab8bccabc14fae528"></a>
|
||||
|
||||
### `"positive"`
|
||||
@@ -3383,7 +3375,7 @@ SHA-256: `abd6ca62a5ab166553848324a23fef90eed7f59c8021bd63e7ea5bc6fd666b0c`
|
||||
| `body` | 必需 | [`{ max_tokens, messages, model, thinking?, … }`](#persistence-type-sha256-9c001ecb5e1d3c3894410db2a1e383842e5f8454fb52182338686158abc1b3ee) |
|
||||
| `endpoint` | 必需 | `string` |
|
||||
|
||||
<a id="persistence-type-sha256-85610bad3515b96db938e2353ca7fe20de4d69dc89d73cc4ffacbde37f4ed39e"></a>
|
||||
<a id="persistence-type-sha256-7580e7d96dc8475fffe813a42af499665de3d4517fcdb3bc2337d0340e98d616"></a>
|
||||
|
||||
<a id="persistence-type-developermessage"></a>
|
||||
|
||||
@@ -3391,7 +3383,7 @@ SHA-256: `abd6ca62a5ab166553848324a23fef90eed7f59c8021bd63e7ea5bc6fd666b0c`
|
||||
|
||||
### `DeveloperMessage`
|
||||
|
||||
SHA-256: `85610bad3515b96db938e2353ca7fe20de4d69dc89d73cc4ffacbde37f4ed39e`
|
||||
SHA-256: `7580e7d96dc8475fffe813a42af499665de3d4517fcdb3bc2337d0340e98d616`
|
||||
|
||||
来源:[`packages/llm/llm/src/message.ts:157`](../packages/llm/llm/src/message.ts)
|
||||
|
||||
@@ -3400,11 +3392,11 @@ SHA-256: `85610bad3515b96db938e2353ca7fe20de4d69dc89d73cc4ffacbde37f4ed39e`
|
||||
| `content` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-b52f215a6cd691058a3413c12f161fa3b563a2f4895adb3df6f744ec4b0a6ef1) |
|
||||
| `id` | 必需 | `string` |
|
||||
| `role` | 必需 | `"developer"` |
|
||||
| `source` | 必需 | [`MessageSource`](#persistence-type-sha256-576b520757158af672b4bc6c13ab8f9422f5a0a501bb36888fb4874fd6587226) |
|
||||
| `source` | 必需 | [`MessageSource`](#persistence-type-sha256-7a5b68bd1a5118c827df9e2466acc5e4d16b83e3f97a2304d992958647592690) |
|
||||
|
||||
消息源兼容策略:`source` — `session-source-attribution` v1; `session.developer-message.source`; `kind`; `preserve`.
|
||||
|
||||
仅表示归属的新增 kind:`personalized-pages`, `plugin-recommendations`, `tmux-context`, `user-question-reply`, `working-directory`.
|
||||
仅表示归属的新增 kind:`action-cards`, `tmux-context`, `user-question-reply`, `working-directory`.
|
||||
|
||||
<a id="persistence-type-sha256-9a930283b91d493d6347146f2475bb107294b379415ca02162354f46a64164f7"></a>
|
||||
|
||||
@@ -4099,7 +4091,7 @@ SHA-256: `6f72ece8f317cd080c4f20a93f1bf709965f5b81ac4669528f5a023191cfcf20`
|
||||
| `step` | 必需 | `number` |
|
||||
| `turn` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-5e88c0eb7dd6462d2cc26b2daa67f68f68e9e2d404305157a9fe32f0d5b4a32f"></a>
|
||||
<a id="persistence-type-sha256-cda79b839d8cc0c7a7bd09dd067de04925f6e9037080d878b65aaa5a383f117c"></a>
|
||||
|
||||
<a id="persistence-type-message"></a>
|
||||
|
||||
@@ -4107,17 +4099,17 @@ SHA-256: `6f72ece8f317cd080c4f20a93f1bf709965f5b81ac4669528f5a023191cfcf20`
|
||||
|
||||
### `Message`
|
||||
|
||||
SHA-256: `5e88c0eb7dd6462d2cc26b2daa67f68f68e9e2d404305157a9fe32f0d5b4a32f`
|
||||
SHA-256: `cda79b839d8cc0c7a7bd09dd067de04925f6e9037080d878b65aaa5a383f117c`
|
||||
|
||||
来源:[`packages/llm/llm/src/message.ts:196`](../packages/llm/llm/src/message.ts)
|
||||
|
||||
以下类型之一:
|
||||
|
||||
- [`ToolResultMessage`](#persistence-type-sha256-4b259f7f8f0a44ad5e90b70a73553ced1df27012d126921d397ff403b6c86731)
|
||||
- [`DeveloperMessage`](#persistence-type-sha256-85610bad3515b96db938e2353ca7fe20de4d69dc89d73cc4ffacbde37f4ed39e)
|
||||
- [`UserMessage`](#persistence-type-sha256-3b087536721261863dfc1d0cf972211ecbefc91f0732e7c0e7eb9da7f3d887ad)
|
||||
- [`AssistantMessage`](#persistence-type-sha256-fa87537f4a9c1e25602990a8bf686b383e9e00352ec8946e16ae24ba7c1625be)
|
||||
- [`DeveloperMessage`](#persistence-type-sha256-7580e7d96dc8475fffe813a42af499665de3d4517fcdb3bc2337d0340e98d616)
|
||||
- [`UserMessage`](#persistence-type-sha256-b782058cef83caf3eb44a16adeef5657e4d5cdff2d50655aba418c4490670a69)
|
||||
- [`SystemMessage`](#persistence-type-sha256-09f3f8dc417f278257202714132f98ba7b52957d7b558c4a04456603890eb363)
|
||||
- [`AssistantMessage`](#persistence-type-sha256-fa87537f4a9c1e25602990a8bf686b383e9e00352ec8946e16ae24ba7c1625be)
|
||||
|
||||
<a id="persistence-type-sha256-7c6129b6961cf4b2a030f36c78d2b0a5be38617651a9b81322e054ee512bee06"></a>
|
||||
|
||||
@@ -4192,7 +4184,7 @@ SHA-256: `390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2`
|
||||
- `"negative"`
|
||||
- `"positive"`
|
||||
|
||||
<a id="persistence-type-sha256-576b520757158af672b4bc6c13ab8f9422f5a0a501bb36888fb4874fd6587226"></a>
|
||||
<a id="persistence-type-sha256-7a5b68bd1a5118c827df9e2466acc5e4d16b83e3f97a2304d992958647592690"></a>
|
||||
|
||||
<a id="persistence-type-messagesource"></a>
|
||||
|
||||
@@ -4200,12 +4192,19 @@ SHA-256: `390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2`
|
||||
|
||||
### `MessageSource`
|
||||
|
||||
SHA-256: `576b520757158af672b4bc6c13ab8f9422f5a0a501bb36888fb4874fd6587226`
|
||||
SHA-256: `7a5b68bd1a5118c827df9e2466acc5e4d16b83e3f97a2304d992958647592690`
|
||||
|
||||
来源:[`packages/llm/llm/src/message.ts:136`](../packages/llm/llm/src/message.ts)
|
||||
|
||||
| kind | form 属性 | 其他必需字段 | 完整定义 |
|
||||
|---|---|---|---|
|
||||
| `action-cards` | `"catalog"` | `through`: `number` | [`{ kind: "action-cards", form: "catalog" }`](#persistence-type-sha256-dd00cdccd0ba487b92362ef67db58cd264f48c1bfd368291424a1da9a899489a) |
|
||||
| `action-cards` | `"instructions"` | `through`: `number` | [`{ kind: "action-cards", form: "instructions" }`](#persistence-type-sha256-ba2a1a8f194b1bb21f270713398f6643e206e8ff5f7f26f6d36a88e3f0f0ab10) |
|
||||
| `action-cards` | `"notice"` | `summary`: `string`; `through`: `number` | [`{ kind: "action-cards", form: "notice" }`](#persistence-type-sha256-e7f4cbb3a57f4cbdb61ea41e95bcba626ad1fff6bb9b1e063b1d50a32da6e864) |
|
||||
| `action-cards` | `"recall"` | `through`: `number` | [`{ kind: "action-cards", form: "recall" }`](#persistence-type-sha256-b613f83572fe2fbf7259c72308cafd008f4fceea897749128a48bcd158f290aa) |
|
||||
| `action-cards` | `"relay"` | `through`: `number` | [`{ kind: "action-cards", form: "relay" }`](#persistence-type-sha256-45f005e6bbb7645248be792b715a74bc7fdf5a67f5381655d3a75dcc7aa2112e) |
|
||||
| `action-cards` | `"snapshot"` | `sections`: [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262); `through`: `number` | [`{ kind: "action-cards", form: "snapshot" }`](#persistence-type-sha256-3247e566f4340029325b70e4366b56fa9719977f1e39033b769a2ec221ab22a9) |
|
||||
| `action-cards` | 未声明 | `through`: `number` | [`{ kind: "action-cards" }`](#persistence-type-sha256-dde0cdf9d426768b649b5a9783d2144e7f900c35ef65229cd89036dbf411d1b0) |
|
||||
| `agent-instructions` | `"instructions"` | `changes`: [`AgentInstructionChange[]`](#persistence-type-sha256-2ab12a0e345658f9342816d773fe610f049982bcad82631f43b9205abe43e5ee) | [`AgentInstructionSource`](#persistence-type-sha256-6f22a9d02b9a1f1157f3b0e7bdccd7e7b12b085c4efdb709dfc74a465cd4e590) |
|
||||
| `agent-message` | `"relay"` | `senderSessionId`: `string` | [`AgentMessageSource`](#persistence-type-sha256-4a9bef9f27a942520cc2279ca7dd3082556e4bff543f66b5c0333e1bbed1cd86) |
|
||||
| `compact-checkpoint` | 未声明 | `compactionId`: `string` | [`CompactionCheckpointSource`](#persistence-type-sha256-31907de9563751822af6d9be02bafaf26faa098bbd1cb412524134d577cc1648) |
|
||||
@@ -4240,13 +4239,6 @@ SHA-256: `576b520757158af672b4bc6c13ab8f9422f5a0a501bb36888fb4874fd6587226`
|
||||
| `model-selection` | `"relay"` | 无 | [`{ kind: "model-selection", form: "relay" }`](#persistence-type-sha256-a15a19ef63cf5d1b711db1d249821dab0cedcd3a9ad09137b47352c93841fd20) |
|
||||
| `model-selection` | `"snapshot"` | `sections`: [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) | [`{ kind: "model-selection", form: "snapshot" }`](#persistence-type-sha256-52c6113cb0e53f345324bf84f01928bea5d5df57ee80bc0dd65407b8bc5a3734) |
|
||||
| `model-selection` | 未声明 | 无 | [`{ kind: "model-selection" }`](#persistence-type-sha256-f7283223aacdc39b0adca728c8cbd4c090a20006a6fecec74421c30e943b489c) |
|
||||
| `personalized-pages` | `"catalog"` | `through`: `number` | [`{ kind: "personalized-pages", form: "catalog" }`](#persistence-type-sha256-9529cbfe9fc86799157ea4fdd84e2d7e2daeffa8843065d29ac40acc68087681) |
|
||||
| `personalized-pages` | `"instructions"` | `through`: `number` | [`{ kind: "personalized-pages", form: "instructions" }`](#persistence-type-sha256-062f94b162cfd50fccd0733645d262b6fce404349cd003b71d15daf5539f0c4e) |
|
||||
| `personalized-pages` | `"notice"` | `summary`: `string`; `through`: `number` | [`{ kind: "personalized-pages", form: "notice" }`](#persistence-type-sha256-f99e707d67fd708b9c282bad0428e8bc8c69777d93d283bf152f20fd9eb3e36f) |
|
||||
| `personalized-pages` | `"recall"` | `through`: `number` | [`{ kind: "personalized-pages", form: "recall" }`](#persistence-type-sha256-53bb37430d38c7256e3868155ca5a03f4d8a46f4b124b2d22152e3752c0cb574) |
|
||||
| `personalized-pages` | `"relay"` | `through`: `number` | [`{ kind: "personalized-pages", form: "relay" }`](#persistence-type-sha256-d2cc8a54a6f1abc97f638821bc36cdd559355e6d9ceb9ad69bd63587a5ec7c0a) |
|
||||
| `personalized-pages` | `"snapshot"` | `sections`: [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262); `through`: `number` | [`{ kind: "personalized-pages", form: "snapshot" }`](#persistence-type-sha256-66b2e4f3954442bc9a11c5aa3bfbea6a33d9ff3f7df42fa7e7b062411d394da4) |
|
||||
| `personalized-pages` | 未声明 | `through`: `number` | [`{ kind: "personalized-pages" }`](#persistence-type-sha256-5b25a1523822e01a21b6ca6054f583a61fdced38b3ddd22a37faeb5a6fe28448) |
|
||||
| `plan-mode` | `"catalog"` | 无 | [`{ kind: "plan-mode", form: "catalog" }`](#persistence-type-sha256-3b04790e08b35241ffa0d38f6d7e4f8788aa921341f6c0d7574a329397c59408) |
|
||||
| `plan-mode` | `"instructions"` | 无 | [`{ kind: "plan-mode", form: "instructions" }`](#persistence-type-sha256-408927267422a7b2beb6df354ff7c1406d929a5646554f48adf85eb8372f811c) |
|
||||
| `plan-mode` | `"notice"` | `summary`: `string` | [`{ kind: "plan-mode", form: "notice" }`](#persistence-type-sha256-baccc97ec34be6c4c78e95aa88c85c29820269479445e5b13f956cd64c5e286f) |
|
||||
@@ -4254,13 +4246,6 @@ SHA-256: `576b520757158af672b4bc6c13ab8f9422f5a0a501bb36888fb4874fd6587226`
|
||||
| `plan-mode` | `"relay"` | 无 | [`{ kind: "plan-mode", form: "relay" }`](#persistence-type-sha256-deaae5cd30987d4f49398e8f9d994c125907e7f928300745fb1dbf15f145d0e7) |
|
||||
| `plan-mode` | `"snapshot"` | `sections`: [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) | [`{ kind: "plan-mode", form: "snapshot" }`](#persistence-type-sha256-8c1c4f72755a78ea163523a46565316e36e9b644382eb48e6635c71a6f412dd2) |
|
||||
| `plan-mode` | 未声明 | 无 | [`{ kind: "plan-mode" }`](#persistence-type-sha256-f4a66f654996c093aae700ea4c434ff2ee3569fea9c0e5813ccf6afdccabd163) |
|
||||
| `plugin-recommendations` | `"catalog"` | `through`: `number` | [`{ kind: "plugin-recommendations", form: "catalog" }`](#persistence-type-sha256-b03a3f57be0e20567f0d7127555a127326cc3af61f93b8a06fbcac8b762f93eb) |
|
||||
| `plugin-recommendations` | `"instructions"` | `through`: `number` | [`{ kind: "plugin-recommendations", form: "instructions" }`](#persistence-type-sha256-328eb9a6ac89d6d82a283b5850bb7aa7db102b8e2a5533deb2add13fdf38135c) |
|
||||
| `plugin-recommendations` | `"notice"` | `summary`: `string`; `through`: `number` | [`{ kind: "plugin-recommendations", form: "notice" }`](#persistence-type-sha256-5c98a6a7047c358964a874bd2cdb86ef1baaa5b3fa780d715a9c1a023e77bbea) |
|
||||
| `plugin-recommendations` | `"recall"` | `through`: `number` | [`{ kind: "plugin-recommendations", form: "recall" }`](#persistence-type-sha256-16a51dd31994f8d8ce7d574165d99dcde042e9bd3ef3d0b18454a18884aa33f9) |
|
||||
| `plugin-recommendations` | `"relay"` | `through`: `number` | [`{ kind: "plugin-recommendations", form: "relay" }`](#persistence-type-sha256-ca146eefc6285feedfbd3e6e7078ab446e258e1a9e6d289279cac0c6fa6a1be8) |
|
||||
| `plugin-recommendations` | `"snapshot"` | `sections`: [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262); `through`: `number` | [`{ kind: "plugin-recommendations", form: "snapshot" }`](#persistence-type-sha256-1af4d670721bd3274747840b17fd10e73026cedb3271732666951f9937ae9f8a) |
|
||||
| `plugin-recommendations` | 未声明 | `through`: `number` | [`{ kind: "plugin-recommendations" }`](#persistence-type-sha256-df948d3c80162763fe88eb1d98c7df5b248cb41d7b632140c0ccd5907c3328bb) |
|
||||
| `ptc-mode` | 未声明 | 无 | [`{ kind: "ptc-mode" }`](#persistence-type-sha256-dba54c09c6e7aafc9acbed7792ecc920d99f92d0784aeeed10af55f7fe0bc8cd) |
|
||||
| `repeat-tool-reminder` | `"catalog"` | 无 | [`{ kind: "repeat-tool-reminder", form: "catalog" }`](#persistence-type-sha256-d85590a5675c6e2fd8164e5792a6cceac714605b8ac228adae5ee668facb1490) |
|
||||
| `repeat-tool-reminder` | `"instructions"` | 无 | [`{ kind: "repeat-tool-reminder", form: "instructions" }`](#persistence-type-sha256-6f44f32be9bcd9a8bf075c3b575b06c8ed63446386e5b0995c7b73762e68ddae) |
|
||||
@@ -4332,13 +4317,13 @@ SHA-256: `576b520757158af672b4bc6c13ab8f9422f5a0a501bb36888fb4874fd6587226`
|
||||
| `webhook` | `"notice"` | `deliveryId`: `string`; `provider`: `string`; `ruleId`: `string`; `source`: `string`; `summary`: `string` | [`{ kind: "webhook", form: "notice" }`](#persistence-type-sha256-9edc162949abf93bd5ff049191b345454ba104f583937ce5580fb50f067d2b94) |
|
||||
| `working-directory` | 未声明 | 无 | [`{ kind: "working-directory" }`](#persistence-type-sha256-2235d957bf4b7c6cf959231d480f0ba1f3a6d72d82981493fb6c7c963021d3d5) |
|
||||
|
||||
<a id="persistence-type-sha256-e49519b11e614a05cf292f011205ebb42b94d5d0b91a8532cd57fd4a745f5c8d"></a>
|
||||
<a id="persistence-type-sha256-78b9204976ab9faaf133c3488b73d1dfb6f1a4bb6c0903e3473cd41a5e1e39e1"></a>
|
||||
|
||||
### `Message[]`
|
||||
|
||||
SHA-256: `e49519b11e614a05cf292f011205ebb42b94d5d0b91a8532cd57fd4a745f5c8d`
|
||||
SHA-256: `78b9204976ab9faaf133c3488b73d1dfb6f1a4bb6c0903e3473cd41a5e1e39e1`
|
||||
|
||||
[`Message`](#persistence-type-sha256-5e88c0eb7dd6462d2cc26b2daa67f68f68e9e2d404305157a9fe32f0d5b4a32f) 的数组。
|
||||
[`Message`](#persistence-type-sha256-cda79b839d8cc0c7a7bd09dd067de04925f6e9037080d878b65aaa5a383f117c) 的数组。
|
||||
|
||||
<a id="persistence-type-sha256-719c51f67074f97034a6c94297fe1f4b5d3c8d392c57586dab732aa5398c7a91"></a>
|
||||
|
||||
@@ -4722,7 +4707,7 @@ SHA-256: `b56f6a885da3dc394c69a3e3cc5c0cfc4da15601b63fda4989eee8f40efc5be4`
|
||||
| `source` | 必需 | [`SessionTitleSource`](#persistence-type-sha256-30d5a537b296685770b1241c4b4bbde19d5a31ff81aa23df73fab5e90b8fc65f) |
|
||||
| `title` | 必需 | `string` |
|
||||
|
||||
<a id="persistence-type-sha256-70a6380591b15f2d138ae30bb073dd2d1b64fc27cc8b9355aea1186defa1905b"></a>
|
||||
<a id="persistence-type-sha256-a3e299483348f27a4787a36bb3f29cd86024c65336abc10bb3d687468302c4cf"></a>
|
||||
|
||||
<a id="persistence-type-packagessessionsession-title-llmsrcindextssessiontitlellmrequesteventdata"></a>
|
||||
|
||||
@@ -4730,7 +4715,7 @@ SHA-256: `b56f6a885da3dc394c69a3e3cc5c0cfc4da15601b63fda4989eee8f40efc5be4`
|
||||
|
||||
### `SessionTitleLlmRequestEventData`
|
||||
|
||||
SHA-256: `70a6380591b15f2d138ae30bb073dd2d1b64fc27cc8b9355aea1186defa1905b`
|
||||
SHA-256: `a3e299483348f27a4787a36bb3f29cd86024c65336abc10bb3d687468302c4cf`
|
||||
|
||||
来源:[`packages/session/session-title-llm/src/index.ts:37`](../packages/session/session-title-llm/src/index.ts)
|
||||
|
||||
@@ -4738,7 +4723,7 @@ SHA-256: `70a6380591b15f2d138ae30bb073dd2d1b64fc27cc8b9355aea1186defa1905b`
|
||||
|---|---|---|
|
||||
| `maxTokens` | 必需 | `number` |
|
||||
| `messageSeqs` | 必需 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
|
||||
| `messages` | 必需 | [`Message[]`](#persistence-type-sha256-e49519b11e614a05cf292f011205ebb42b94d5d0b91a8532cd57fd4a745f5c8d) |
|
||||
| `messages` | 必需 | [`Message[]`](#persistence-type-sha256-78b9204976ab9faaf133c3488b73d1dfb6f1a4bb6c0903e3473cd41a5e1e39e1) |
|
||||
| `reasoningEffort` | 可选 | `string` |
|
||||
| `route` | 必需 | [`SessionTitleModelIdentity`](#persistence-type-sha256-07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235) |
|
||||
| `system` | 必需 | `string` |
|
||||
@@ -5394,7 +5379,7 @@ SHA-256: `f1687f982fa3d41ef29e159feed154ecd13af4dd209acaee16038f223f2e9402`
|
||||
| `interrupted` | 未声明 | 无 | [`{ kind: "interrupted" }`](#persistence-type-sha256-56b7c047694875a843ba020dfea3c8380d54ae4ff88ab349e72004dc21e07c23) |
|
||||
| `max-tokens` | 未声明 | 无 | [`{ kind: "max-tokens" }`](#persistence-type-sha256-ab7ec5f9eb2c6dfacca5da4c37cf7ba85d04172053ee6b1ebf1709ffcd99c1a7) |
|
||||
|
||||
<a id="persistence-type-sha256-3b087536721261863dfc1d0cf972211ecbefc91f0732e7c0e7eb9da7f3d887ad"></a>
|
||||
<a id="persistence-type-sha256-b782058cef83caf3eb44a16adeef5657e4d5cdff2d50655aba418c4490670a69"></a>
|
||||
|
||||
<a id="persistence-type-packagesllmllmsrcmessagetsusermessage"></a>
|
||||
|
||||
@@ -5402,7 +5387,7 @@ SHA-256: `f1687f982fa3d41ef29e159feed154ecd13af4dd209acaee16038f223f2e9402`
|
||||
|
||||
### `UserMessage`
|
||||
|
||||
SHA-256: `3b087536721261863dfc1d0cf972211ecbefc91f0732e7c0e7eb9da7f3d887ad`
|
||||
SHA-256: `b782058cef83caf3eb44a16adeef5657e4d5cdff2d50655aba418c4490670a69`
|
||||
|
||||
来源:[`packages/llm/llm/src/message.ts:162`](../packages/llm/llm/src/message.ts)
|
||||
|
||||
@@ -5411,19 +5396,19 @@ SHA-256: `3b087536721261863dfc1d0cf972211ecbefc91f0732e7c0e7eb9da7f3d887ad`
|
||||
| `content` | 必需 | [`ContentBlock[]`](#persistence-type-sha256-b52f215a6cd691058a3413c12f161fa3b563a2f4895adb3df6f744ec4b0a6ef1) |
|
||||
| `id` | 必需 | `string` |
|
||||
| `role` | 必需 | `"user"` |
|
||||
| `source` | 必需 | [`MessageSource`](#persistence-type-sha256-576b520757158af672b4bc6c13ab8f9422f5a0a501bb36888fb4874fd6587226) |
|
||||
| `source` | 必需 | [`MessageSource`](#persistence-type-sha256-7a5b68bd1a5118c827df9e2466acc5e4d16b83e3f97a2304d992958647592690) |
|
||||
|
||||
消息源兼容策略:`source` — `session-source-attribution` v1; `session.user-message.source`; `kind`; `preserve`.
|
||||
|
||||
仅表示归属的新增 kind:`personalized-pages`, `plugin-recommendations`, `tmux-context`, `user-question-reply`, `working-directory`.
|
||||
仅表示归属的新增 kind:`action-cards`, `tmux-context`, `user-question-reply`, `working-directory`.
|
||||
|
||||
<a id="persistence-type-sha256-2013e9f315078a163122032ea5717a84e4d395f96ecba00ad948e80dbd7fb332"></a>
|
||||
<a id="persistence-type-sha256-5d00abf938272f22eb47199e9d40801e8d8ec4c88e2b138b15aa2a5a5bf87520"></a>
|
||||
|
||||
### `UserMessage[]`
|
||||
|
||||
SHA-256: `2013e9f315078a163122032ea5717a84e4d395f96ecba00ad948e80dbd7fb332`
|
||||
SHA-256: `5d00abf938272f22eb47199e9d40801e8d8ec4c88e2b138b15aa2a5a5bf87520`
|
||||
|
||||
[`UserMessage`](#persistence-type-sha256-3b087536721261863dfc1d0cf972211ecbefc91f0732e7c0e7eb9da7f3d887ad) 的数组。
|
||||
[`UserMessage`](#persistence-type-sha256-b782058cef83caf3eb44a16adeef5657e4d5cdff2d50655aba418c4490670a69) 的数组。
|
||||
|
||||
<a id="persistence-type-sha256-c2deb7c9183735d4e0fffddf5c623f4e34daa1c8e96b111982e957dfcbbcf896"></a>
|
||||
|
||||
@@ -6308,18 +6293,18 @@ SHA-256: `ad0c38a0adb82a94c925456df41586d9b5f9202fca18593eae2213d4445b4585`
|
||||
| `reason` | 必需 | [`RequestHeaderReason`](#persistence-type-sha256-530da6c0267813bb4511af72883cc518834e624e3b3220a7062955fd57a788a6) |
|
||||
| `startsSeries` | 可选 | `true` |
|
||||
|
||||
<a id="persistence-type-sha256-4ccafbd2333db70abe447cd636db9eb428b5ae2eae36f7020351455fe314ffd4"></a>
|
||||
<a id="persistence-type-sha256-7404c6123fdaa591474a37979a5a8ae70d1387af7c9f09bfe568b218935a974d"></a>
|
||||
|
||||
### `{ headerSeq?, message, step, turn }`
|
||||
|
||||
SHA-256: `4ccafbd2333db70abe447cd636db9eb428b5ae2eae36f7020351455fe314ffd4`
|
||||
SHA-256: `7404c6123fdaa591474a37979a5a8ae70d1387af7c9f09bfe568b218935a974d`
|
||||
|
||||
来源:[`packages/core/session/src/types.ts:313`](../packages/core/session/src/types.ts)
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `headerSeq` | 可选 | `number` |
|
||||
| `message` | 必需 | [`DeveloperMessage`](#persistence-type-sha256-85610bad3515b96db938e2353ca7fe20de4d69dc89d73cc4ffacbde37f4ed39e) |
|
||||
| `message` | 必需 | [`DeveloperMessage`](#persistence-type-sha256-7580e7d96dc8475fffe813a42af499665de3d4517fcdb3bc2337d0340e98d616) |
|
||||
| `step` | 必需 | `number` |
|
||||
| `turn` | 必需 | `number` |
|
||||
|
||||
@@ -6403,17 +6388,17 @@ SHA-256: `17d1afb770d9941936130996da00dc86782cfef731d8d6526162c301256a4ac3`
|
||||
|---|---|---|
|
||||
| `inherited` | 可选 | `true` |
|
||||
|
||||
<a id="persistence-type-sha256-d3e2c037628540edc7ac906a89631ebc1043f205168d002cce5d6a694053c7c4"></a>
|
||||
<a id="persistence-type-sha256-b2a948a5340a9341fa3bab99507c7090c5b0456de72ec28b5b157b8df3f1d640"></a>
|
||||
|
||||
### `{ inserted, outcome?, removedCount?, start, … }`
|
||||
|
||||
SHA-256: `d3e2c037628540edc7ac906a89631ebc1043f205168d002cce5d6a694053c7c4`
|
||||
SHA-256: `b2a948a5340a9341fa3bab99507c7090c5b0456de72ec28b5b157b8df3f1d640`
|
||||
|
||||
来源:[`packages/core/agent/src/types.ts:110`](../packages/core/agent/src/types.ts)
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `inserted` | 必需 | [`UserMessage[]`](#persistence-type-sha256-2013e9f315078a163122032ea5717a84e4d395f96ecba00ad948e80dbd7fb332) |
|
||||
| `inserted` | 必需 | [`UserMessage[]`](#persistence-type-sha256-5d00abf938272f22eb47199e9d40801e8d8ec4c88e2b138b15aa2a5a5bf87520) |
|
||||
| `outcome` | 可选 | `"canceled"` |
|
||||
| `removedCount` | 可选 | `number` |
|
||||
| `start` | 必需 | `number` |
|
||||
@@ -6449,6 +6434,91 @@ SHA-256: `0a30c3be336cdd4f8f34e66543a3d46d611c43986edd9b3ce6cbb9b721d3b5d3`
|
||||
| `kind` | 必需 | `"aborted"` |
|
||||
| `reason` | 必需 | [`TurnEndCancelCause`](#persistence-type-sha256-1f8c126cfab3df812cd115cfc23e3256f0fa2383400f4ce91ecad313577e59b0) |
|
||||
|
||||
<a id="persistence-type-sha256-dde0cdf9d426768b649b5a9783d2144e7f900c35ef65229cd89036dbf411d1b0"></a>
|
||||
|
||||
### `{ kind: "action-cards" }`
|
||||
|
||||
SHA-256: `dde0cdf9d426768b649b5a9783d2144e7f900c35ef65229cd89036dbf411d1b0`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `kind` | 必需 | `"action-cards"` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-dd00cdccd0ba487b92362ef67db58cd264f48c1bfd368291424a1da9a899489a"></a>
|
||||
|
||||
### `{ kind: "action-cards", form: "catalog" }`
|
||||
|
||||
SHA-256: `dd00cdccd0ba487b92362ef67db58cd264f48c1bfd368291424a1da9a899489a`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"catalog"` |
|
||||
| `kind` | 必需 | `"action-cards"` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-ba2a1a8f194b1bb21f270713398f6643e206e8ff5f7f26f6d36a88e3f0f0ab10"></a>
|
||||
|
||||
### `{ kind: "action-cards", form: "instructions" }`
|
||||
|
||||
SHA-256: `ba2a1a8f194b1bb21f270713398f6643e206e8ff5f7f26f6d36a88e3f0f0ab10`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"instructions"` |
|
||||
| `kind` | 必需 | `"action-cards"` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-e7f4cbb3a57f4cbdb61ea41e95bcba626ad1fff6bb9b1e063b1d50a32da6e864"></a>
|
||||
|
||||
### `{ kind: "action-cards", form: "notice" }`
|
||||
|
||||
SHA-256: `e7f4cbb3a57f4cbdb61ea41e95bcba626ad1fff6bb9b1e063b1d50a32da6e864`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"notice"` |
|
||||
| `kind` | 必需 | `"action-cards"` |
|
||||
| `summary` | 必需 | `string` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-b613f83572fe2fbf7259c72308cafd008f4fceea897749128a48bcd158f290aa"></a>
|
||||
|
||||
### `{ kind: "action-cards", form: "recall" }`
|
||||
|
||||
SHA-256: `b613f83572fe2fbf7259c72308cafd008f4fceea897749128a48bcd158f290aa`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"recall"` |
|
||||
| `kind` | 必需 | `"action-cards"` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-45f005e6bbb7645248be792b715a74bc7fdf5a67f5381655d3a75dcc7aa2112e"></a>
|
||||
|
||||
### `{ kind: "action-cards", form: "relay" }`
|
||||
|
||||
SHA-256: `45f005e6bbb7645248be792b715a74bc7fdf5a67f5381655d3a75dcc7aa2112e`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"relay"` |
|
||||
| `kind` | 必需 | `"action-cards"` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-3247e566f4340029325b70e4366b56fa9719977f1e39033b769a2ec221ab22a9"></a>
|
||||
|
||||
### `{ kind: "action-cards", form: "snapshot" }`
|
||||
|
||||
SHA-256: `3247e566f4340029325b70e4366b56fa9719977f1e39033b769a2ec221ab22a9`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"snapshot"` |
|
||||
| `kind` | 必需 | `"action-cards"` |
|
||||
| `sections` | 必需 | [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-023a355b2be0d688fb6e4df8388dadb942761d46cfe96d0f499aae9631a159d4"></a>
|
||||
|
||||
### `{ kind: "blocked" }`
|
||||
@@ -6894,91 +6964,6 @@ SHA-256: `6c03546143cdf6ae88f1745ac98c5139efa1588d1415249bbc5f3104d32ab800`
|
||||
|---|---|---|
|
||||
| `kind` | 必需 | `"parent"` |
|
||||
|
||||
<a id="persistence-type-sha256-5b25a1523822e01a21b6ca6054f583a61fdced38b3ddd22a37faeb5a6fe28448"></a>
|
||||
|
||||
### `{ kind: "personalized-pages" }`
|
||||
|
||||
SHA-256: `5b25a1523822e01a21b6ca6054f583a61fdced38b3ddd22a37faeb5a6fe28448`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `kind` | 必需 | `"personalized-pages"` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-9529cbfe9fc86799157ea4fdd84e2d7e2daeffa8843065d29ac40acc68087681"></a>
|
||||
|
||||
### `{ kind: "personalized-pages", form: "catalog" }`
|
||||
|
||||
SHA-256: `9529cbfe9fc86799157ea4fdd84e2d7e2daeffa8843065d29ac40acc68087681`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"catalog"` |
|
||||
| `kind` | 必需 | `"personalized-pages"` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-062f94b162cfd50fccd0733645d262b6fce404349cd003b71d15daf5539f0c4e"></a>
|
||||
|
||||
### `{ kind: "personalized-pages", form: "instructions" }`
|
||||
|
||||
SHA-256: `062f94b162cfd50fccd0733645d262b6fce404349cd003b71d15daf5539f0c4e`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"instructions"` |
|
||||
| `kind` | 必需 | `"personalized-pages"` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-f99e707d67fd708b9c282bad0428e8bc8c69777d93d283bf152f20fd9eb3e36f"></a>
|
||||
|
||||
### `{ kind: "personalized-pages", form: "notice" }`
|
||||
|
||||
SHA-256: `f99e707d67fd708b9c282bad0428e8bc8c69777d93d283bf152f20fd9eb3e36f`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"notice"` |
|
||||
| `kind` | 必需 | `"personalized-pages"` |
|
||||
| `summary` | 必需 | `string` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-53bb37430d38c7256e3868155ca5a03f4d8a46f4b124b2d22152e3752c0cb574"></a>
|
||||
|
||||
### `{ kind: "personalized-pages", form: "recall" }`
|
||||
|
||||
SHA-256: `53bb37430d38c7256e3868155ca5a03f4d8a46f4b124b2d22152e3752c0cb574`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"recall"` |
|
||||
| `kind` | 必需 | `"personalized-pages"` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-d2cc8a54a6f1abc97f638821bc36cdd559355e6d9ceb9ad69bd63587a5ec7c0a"></a>
|
||||
|
||||
### `{ kind: "personalized-pages", form: "relay" }`
|
||||
|
||||
SHA-256: `d2cc8a54a6f1abc97f638821bc36cdd559355e6d9ceb9ad69bd63587a5ec7c0a`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"relay"` |
|
||||
| `kind` | 必需 | `"personalized-pages"` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-66b2e4f3954442bc9a11c5aa3bfbea6a33d9ff3f7df42fa7e7b062411d394da4"></a>
|
||||
|
||||
### `{ kind: "personalized-pages", form: "snapshot" }`
|
||||
|
||||
SHA-256: `66b2e4f3954442bc9a11c5aa3bfbea6a33d9ff3f7df42fa7e7b062411d394da4`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"snapshot"` |
|
||||
| `kind` | 必需 | `"personalized-pages"` |
|
||||
| `sections` | 必需 | [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-f4a66f654996c093aae700ea4c434ff2ee3569fea9c0e5813ccf6afdccabd163"></a>
|
||||
|
||||
### `{ kind: "plan-mode" }`
|
||||
@@ -7057,91 +7042,6 @@ SHA-256: `8c1c4f72755a78ea163523a46565316e36e9b644382eb48e6635c71a6f412dd2`
|
||||
| `kind` | 必需 | `"plan-mode"` |
|
||||
| `sections` | 必需 | [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) |
|
||||
|
||||
<a id="persistence-type-sha256-df948d3c80162763fe88eb1d98c7df5b248cb41d7b632140c0ccd5907c3328bb"></a>
|
||||
|
||||
### `{ kind: "plugin-recommendations" }`
|
||||
|
||||
SHA-256: `df948d3c80162763fe88eb1d98c7df5b248cb41d7b632140c0ccd5907c3328bb`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `kind` | 必需 | `"plugin-recommendations"` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-b03a3f57be0e20567f0d7127555a127326cc3af61f93b8a06fbcac8b762f93eb"></a>
|
||||
|
||||
### `{ kind: "plugin-recommendations", form: "catalog" }`
|
||||
|
||||
SHA-256: `b03a3f57be0e20567f0d7127555a127326cc3af61f93b8a06fbcac8b762f93eb`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"catalog"` |
|
||||
| `kind` | 必需 | `"plugin-recommendations"` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-328eb9a6ac89d6d82a283b5850bb7aa7db102b8e2a5533deb2add13fdf38135c"></a>
|
||||
|
||||
### `{ kind: "plugin-recommendations", form: "instructions" }`
|
||||
|
||||
SHA-256: `328eb9a6ac89d6d82a283b5850bb7aa7db102b8e2a5533deb2add13fdf38135c`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"instructions"` |
|
||||
| `kind` | 必需 | `"plugin-recommendations"` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-5c98a6a7047c358964a874bd2cdb86ef1baaa5b3fa780d715a9c1a023e77bbea"></a>
|
||||
|
||||
### `{ kind: "plugin-recommendations", form: "notice" }`
|
||||
|
||||
SHA-256: `5c98a6a7047c358964a874bd2cdb86ef1baaa5b3fa780d715a9c1a023e77bbea`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"notice"` |
|
||||
| `kind` | 必需 | `"plugin-recommendations"` |
|
||||
| `summary` | 必需 | `string` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-16a51dd31994f8d8ce7d574165d99dcde042e9bd3ef3d0b18454a18884aa33f9"></a>
|
||||
|
||||
### `{ kind: "plugin-recommendations", form: "recall" }`
|
||||
|
||||
SHA-256: `16a51dd31994f8d8ce7d574165d99dcde042e9bd3ef3d0b18454a18884aa33f9`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"recall"` |
|
||||
| `kind` | 必需 | `"plugin-recommendations"` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-ca146eefc6285feedfbd3e6e7078ab446e258e1a9e6d289279cac0c6fa6a1be8"></a>
|
||||
|
||||
### `{ kind: "plugin-recommendations", form: "relay" }`
|
||||
|
||||
SHA-256: `ca146eefc6285feedfbd3e6e7078ab446e258e1a9e6d289279cac0c6fa6a1be8`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"relay"` |
|
||||
| `kind` | 必需 | `"plugin-recommendations"` |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-1af4d670721bd3274747840b17fd10e73026cedb3271732666951f9937ae9f8a"></a>
|
||||
|
||||
### `{ kind: "plugin-recommendations", form: "snapshot" }`
|
||||
|
||||
SHA-256: `1af4d670721bd3274747840b17fd10e73026cedb3271732666951f9937ae9f8a`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `form` | 必需 | `"snapshot"` |
|
||||
| `kind` | 必需 | `"plugin-recommendations"` |
|
||||
| `sections` | 必需 | [`ContextSnapshotSection[]`](#persistence-type-sha256-c748fb42c80a120038a8c587af80ec39924803c401364db11c8974d5bf6d0262) |
|
||||
| `through` | 必需 | `number` |
|
||||
|
||||
<a id="persistence-type-sha256-b81e9de81a481b24e1e1f9adf038bfc59e57b4f35ce62f8f1e45284186f4f812"></a>
|
||||
|
||||
### `{ kind: "provider" }`
|
||||
@@ -8145,17 +8045,17 @@ SHA-256: `a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b`
|
||||
| `time` | 必需 | `number` |
|
||||
| `type` | 必需 | `"agent-preset/selected"` |
|
||||
|
||||
<a id="persistence-type-sha256-dde4d210811d670552c70fa7a9864ae650cef357590ad60ef1778c9b7dd1d7bf"></a>
|
||||
<a id="persistence-type-sha256-b36fd842cd004b532ce96fd5d6f5be28e017eda043131aa3cf5e69edc436108e"></a>
|
||||
|
||||
<a id="persistence-type-eventagentinboxspliced"></a>
|
||||
|
||||
### `{ type: "agent/inbox/spliced" }`
|
||||
|
||||
SHA-256: `dde4d210811d670552c70fa7a9864ae650cef357590ad60ef1778c9b7dd1d7bf`
|
||||
SHA-256: `b36fd842cd004b532ce96fd5d6f5be28e017eda043131aa3cf5e69edc436108e`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `data` | 必需 | [`{ inserted, outcome?, removedCount?, start, … }`](#persistence-type-sha256-d3e2c037628540edc7ac906a89631ebc1043f205168d002cce5d6a694053c7c4) |
|
||||
| `data` | 必需 | [`{ inserted, outcome?, removedCount?, start, … }`](#persistence-type-sha256-b2a948a5340a9341fa3bab99507c7090c5b0456de72ec28b5b157b8df3f1d640) |
|
||||
| `ignorable` | 可选 | `true` |
|
||||
| `seq` | 必需 | `number` |
|
||||
| `time` | 必需 | `number` |
|
||||
@@ -8396,17 +8296,17 @@ SHA-256: `13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176`
|
||||
| `time` | 必需 | `number` |
|
||||
| `type` | 必需 | `"deliverables/presented"` |
|
||||
|
||||
<a id="persistence-type-sha256-1adeb5417a9565c55ad63138034d1c51daf6a75f8964c46352691a1d94188265"></a>
|
||||
<a id="persistence-type-sha256-5ef58f2a1bdc576c1f12fa1f4da1920ece020b13c0f991a578cddcbeb28bc5be"></a>
|
||||
|
||||
<a id="persistence-type-eventdevelopermessage"></a>
|
||||
|
||||
### `{ type: "developer/message" }`
|
||||
|
||||
SHA-256: `1adeb5417a9565c55ad63138034d1c51daf6a75f8964c46352691a1d94188265`
|
||||
SHA-256: `5ef58f2a1bdc576c1f12fa1f4da1920ece020b13c0f991a578cddcbeb28bc5be`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `data` | 必需 | [`{ headerSeq?, message, step, turn }`](#persistence-type-sha256-4ccafbd2333db70abe447cd636db9eb428b5ae2eae36f7020351455fe314ffd4) |
|
||||
| `data` | 必需 | [`{ headerSeq?, message, step, turn }`](#persistence-type-sha256-7404c6123fdaa591474a37979a5a8ae70d1387af7c9f09bfe568b218935a974d) |
|
||||
| `ignorable` | 可选 | `true` |
|
||||
| `seq` | 必需 | `number` |
|
||||
| `sourceEventSeqs` | 可选 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
|
||||
@@ -8806,17 +8706,17 @@ SHA-256: `1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5`
|
||||
| `time` | 必需 | `number` |
|
||||
| `type` | 必需 | `"session/title"` |
|
||||
|
||||
<a id="persistence-type-sha256-651a11c7869dfbe778ff23bf7e94567b141470b5dbad4a146f93189a4ff24646"></a>
|
||||
<a id="persistence-type-sha256-efa1a091017ce533e38b0ef3e14d11a5c102ff1793229b18dad719a4268d9adc"></a>
|
||||
|
||||
<a id="persistence-type-eventsessiontitle-llm-request"></a>
|
||||
|
||||
### `{ type: "session/title-llm-request" }`
|
||||
|
||||
SHA-256: `651a11c7869dfbe778ff23bf7e94567b141470b5dbad4a146f93189a4ff24646`
|
||||
SHA-256: `efa1a091017ce533e38b0ef3e14d11a5c102ff1793229b18dad719a4268d9adc`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `data` | 必需 | [`SessionTitleLlmRequestEventData`](#persistence-type-sha256-70a6380591b15f2d138ae30bb073dd2d1b64fc27cc8b9355aea1186defa1905b) |
|
||||
| `data` | 必需 | [`SessionTitleLlmRequestEventData`](#persistence-type-sha256-a3e299483348f27a4787a36bb3f29cd86024c65336abc10bb3d687468302c4cf) |
|
||||
| `ignorable` | 可选 | `true` |
|
||||
| `seq` | 必需 | `number` |
|
||||
| `time` | 必需 | `number` |
|
||||
@@ -9239,17 +9139,17 @@ SHA-256: `f1a96afe7503ac1817de769cd0ba13d9b80111c7034c50106b3344ecc14cc515`
|
||||
| `type` | 必需 | `"usage"` |
|
||||
| `usage` | 必需 | [`TokenUsage`](#persistence-type-sha256-fec5442b9ee4122e10514d81d5a43648003fe8bfb7ee2ba50c0cdbdd383ed394) |
|
||||
|
||||
<a id="persistence-type-sha256-1ca126460ab395a27ca1d236203c0a8b58eddcc316d681484691bced1b220045"></a>
|
||||
<a id="persistence-type-sha256-58b122df513aeaf7ddc5783dbb1fd844e2979bb273964e30ae351a8db6510019"></a>
|
||||
|
||||
<a id="persistence-type-eventusermessage"></a>
|
||||
|
||||
### `{ type: "user/message" }`
|
||||
|
||||
SHA-256: `1ca126460ab395a27ca1d236203c0a8b58eddcc316d681484691bced1b220045`
|
||||
SHA-256: `58b122df513aeaf7ddc5783dbb1fd844e2979bb273964e30ae351a8db6510019`
|
||||
|
||||
| 属性 | 存在性 | 类型 |
|
||||
|---|---|---|
|
||||
| `data` | 必需 | [`UserMessage`](#persistence-type-sha256-3b087536721261863dfc1d0cf972211ecbefc91f0732e7c0e7eb9da7f3d887ad) |
|
||||
| `data` | 必需 | [`UserMessage`](#persistence-type-sha256-b782058cef83caf3eb44a16adeef5657e4d5cdff2d50655aba418c4490670a69) |
|
||||
| `ignorable` | 可选 | `true` |
|
||||
| `seq` | 必需 | `number` |
|
||||
| `sourceEventSeqs` | 可选 | [`number[]`](#persistence-type-sha256-5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78) |
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
# Bilingual-pair consistency record for 2026-10-20-personalized-page-status.md (docs/i18n/README.md): per heading
|
||||
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
|
||||
# After editing either side, bring the other along and re-record with:
|
||||
# pnpm run verify-translation-pairing --write docs/persistence-changes/2026-10-20-personalized-page-status.md
|
||||
/:
|
||||
en: 3d5a424ae7d7e46b
|
||||
zh: c22a8e4a62d8cc1a
|
||||
/2026-10-20-personalized-page-status:
|
||||
en: 4637eef52bc5bc18
|
||||
zh: b8939b0ba5125f3e
|
||||
/2026-10-20-personalized-page-status/summary:
|
||||
en: 41feb53bf38c398d
|
||||
zh: 42434a929ae5b0b7
|
||||
/2026-10-20-personalized-page-status/table-of-contents:
|
||||
en: 6cf314a069ceb451
|
||||
zh: 9adff678e9ecab3b
|
||||
/2026-10-20-personalized-page-status/declaration:
|
||||
en: 6907136f28e48c90
|
||||
zh: 02f8298485f3d8e7
|
||||
/2026-10-20-personalized-page-status/compatibility:
|
||||
en: 1eebe3e816961372
|
||||
zh: 03dd60a8f730f2aa
|
||||
/2026-10-20-personalized-page-status/verification:
|
||||
en: 614782545bd37628
|
||||
zh: a26f0a46611dbab3
|
||||
/2026-10-20-personalized-page-status/dev-note:
|
||||
en: b75c8458928b72b9
|
||||
zh: 003ba4e17b4b5269
|
||||
@@ -1,60 +0,0 @@
|
||||
---
|
||||
description: "Records a persistence type transition and its compatibility acknowledgement."
|
||||
kind: persistence-change
|
||||
---
|
||||
|
||||
# 2026-10-20-personalized-page-status
|
||||
|
||||
English | [中文](2026-10-20-personalized-page-status.zh.md)
|
||||
|
||||
## Summary
|
||||
|
||||
Adds personalized-page status attribution to logged model context.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Declaration](#declaration)
|
||||
- [Compatibility](#compatibility)
|
||||
- [Verification](#verification)
|
||||
- [Dev Note](#dev-note)
|
||||
|
||||
<a id="declaration"></a>
|
||||
## Declaration
|
||||
|
||||
```yaml persistence-change
|
||||
schemaVersion: 1
|
||||
id: 2026-10-20-personalized-page-status
|
||||
baseline: false
|
||||
changes:
|
||||
- root: "event:agent/inbox/spliced"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "1b43047675face5df9ba7646bbbcd873907465dcedcf22ea824f9f088cea2840"
|
||||
decision: same-version
|
||||
- root: "event:developer/message"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "85d754f8957fcbbfb65bcb6dded47a816c409bb431de293ff3209b11fe093ded"
|
||||
decision: same-version
|
||||
- root: "event:session/title-llm-request"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "9d2c7e74894fb4dbf3af436b09d1e9ae4a631dbdf3c7ebbfb2b490b1279c94b3"
|
||||
decision: same-version
|
||||
- root: "event:user/message"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "c81b3891a886d2e40a09d04633ec88918289bb10eee9098ed19d33c1994aa4d8"
|
||||
decision: same-version
|
||||
```
|
||||
|
||||
<a id="compatibility"></a>
|
||||
## Compatibility
|
||||
|
||||
Existing messages and decision records are unchanged. Readers without this plugin preserve the new source kind and its JSON metadata and derive the recorded text as ordinary context. Only the producer uses the through sequence to suppress already delivered notices; it grants no authority and does not change replay interpretation.
|
||||
|
||||
<a id="verification"></a>
|
||||
## Verification
|
||||
|
||||
Focused creation, projection, status and card component tests: 68 passed; changed Host modules have 100% coverage. The web creation recording includes dismissal followed by a status question; Host protocol refresh and keyless replay each passed. Cards are replaced or suppressed and never expire; tests cover replacement by a later proposal, suppression while human input is queued, replay, stale clicks, background notices and started-task retries. A late request-preparation callback adds no context after the feature unloads.
|
||||
|
||||
<a id="dev-note"></a>
|
||||
## Dev Note
|
||||
|
||||
None.
|
||||
@@ -1,60 +0,0 @@
|
||||
---
|
||||
description: "记录持久化类型更改及其兼容性确认。"
|
||||
kind: persistence-change
|
||||
---
|
||||
|
||||
# 2026-10-20-personalized-page-status
|
||||
|
||||
[English](2026-10-20-personalized-page-status.md) | 中文
|
||||
|
||||
## 概述
|
||||
|
||||
为写入模型上下文的个性化页面状态新增来源标记。
|
||||
|
||||
## 目录
|
||||
|
||||
- [声明](#declaration)
|
||||
- [兼容性](#compatibility)
|
||||
- [验证](#verification)
|
||||
- [开发备注](#dev-note)
|
||||
|
||||
<a id="declaration"></a>
|
||||
## 声明
|
||||
|
||||
```yaml persistence-change
|
||||
schemaVersion: 1
|
||||
id: 2026-10-20-personalized-page-status
|
||||
baseline: false
|
||||
changes:
|
||||
- root: "event:agent/inbox/spliced"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "1b43047675face5df9ba7646bbbcd873907465dcedcf22ea824f9f088cea2840"
|
||||
decision: same-version
|
||||
- root: "event:developer/message"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "85d754f8957fcbbfb65bcb6dded47a816c409bb431de293ff3209b11fe093ded"
|
||||
decision: same-version
|
||||
- root: "event:session/title-llm-request"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "9d2c7e74894fb4dbf3af436b09d1e9ae4a631dbdf3c7ebbfb2b490b1279c94b3"
|
||||
decision: same-version
|
||||
- root: "event:user/message"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "c81b3891a886d2e40a09d04633ec88918289bb10eee9098ed19d33c1994aa4d8"
|
||||
decision: same-version
|
||||
```
|
||||
|
||||
<a id="compatibility"></a>
|
||||
## 兼容性
|
||||
|
||||
已有消息和操作记录不变。未加载本插件的读取器保留新来源种类及其 JSON 元数据,并将已记录文本作为普通上下文派生。只有写入方使用 through 序号抑制已送达通知;它不授予权限,也不改变回放解释。
|
||||
|
||||
<a id="verification"></a>
|
||||
## 验证
|
||||
|
||||
创建、投影、状态和卡片组件专项测试 68 项通过,修改的 Host 模块覆盖率为 100%。Web 创建录制包含忽略卡片后追问状态,Host 协议刷新和无密钥回放各通过一次。卡片只会被替换或标为未展示,不会失效;测试覆盖后来方案的替换、人工输入排队时不出卡、回放、旧卡点击、后台通知及已开始任务的重试。功能卸载后恢复的请求准备回调不再注入上下文。
|
||||
|
||||
<a id="dev-note"></a>
|
||||
## 开发备注
|
||||
|
||||
无。
|
||||
@@ -0,0 +1,28 @@
|
||||
# Bilingual-pair consistency record for 2026-10-22-action-card-status.md (docs/i18n/README.md): per heading
|
||||
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
|
||||
# After editing either side, bring the other along and re-record with:
|
||||
# pnpm run verify-translation-pairing --write docs/persistence-changes/2026-10-22-action-card-status.md
|
||||
/:
|
||||
en: 3d5a424ae7d7e46b
|
||||
zh: c22a8e4a62d8cc1a
|
||||
/2026-10-22-action-card-status:
|
||||
en: f580a2fb64e941db
|
||||
zh: 0e34217155210da6
|
||||
/2026-10-22-action-card-status/summary:
|
||||
en: 3da2594bf2891e0e
|
||||
zh: 5bc7d279d99400aa
|
||||
/2026-10-22-action-card-status/table-of-contents:
|
||||
en: 6cf314a069ceb451
|
||||
zh: 9adff678e9ecab3b
|
||||
/2026-10-22-action-card-status/declaration:
|
||||
en: 6907136f28e48c90
|
||||
zh: 02f8298485f3d8e7
|
||||
/2026-10-22-action-card-status/compatibility:
|
||||
en: fbf4d1ada55f35fe
|
||||
zh: bd5ce9a23c55fac6
|
||||
/2026-10-22-action-card-status/verification:
|
||||
en: 91043c4f0b19e7bc
|
||||
zh: ee1c541133475bb8
|
||||
/2026-10-22-action-card-status/dev-note:
|
||||
en: b75c8458928b72b9
|
||||
zh: 003ba4e17b4b5269
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
description: "Records a persistence type transition and its compatibility acknowledgement."
|
||||
kind: persistence-change
|
||||
---
|
||||
|
||||
# 2026-10-22-action-card-status
|
||||
|
||||
English | [中文](2026-10-22-action-card-status.zh.md)
|
||||
|
||||
## Summary
|
||||
|
||||
Adds action-card status attribution to logged model context.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Declaration](#declaration)
|
||||
- [Compatibility](#compatibility)
|
||||
- [Verification](#verification)
|
||||
- [Dev Note](#dev-note)
|
||||
|
||||
<a id="declaration"></a>
|
||||
## Declaration
|
||||
|
||||
```yaml persistence-change
|
||||
schemaVersion: 1
|
||||
id: 2026-10-22-action-card-status
|
||||
baseline: false
|
||||
changes:
|
||||
- root: "event:agent/inbox/spliced"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "b36fd842cd004b532ce96fd5d6f5be28e017eda043131aa3cf5e69edc436108e"
|
||||
decision: same-version
|
||||
- root: "event:developer/message"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "5ef58f2a1bdc576c1f12fa1f4da1920ece020b13c0f991a578cddcbeb28bc5be"
|
||||
decision: same-version
|
||||
- root: "event:session/title-llm-request"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "efa1a091017ce533e38b0ef3e14d11a5c102ff1793229b18dad719a4268d9adc"
|
||||
decision: same-version
|
||||
- root: "event:user/message"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "58b122df513aeaf7ddc5783dbb1fd844e2979bb273964e30ae351a8db6510019"
|
||||
decision: same-version
|
||||
```
|
||||
|
||||
<a id="compatibility"></a>
|
||||
## Compatibility
|
||||
|
||||
Existing messages and records are unchanged. Readers without the action-card plugin preserve the new action-cards source kind and its JSON metadata and derive the recorded text as ordinary context. Only the producer uses the through sequence, to acknowledge delivered decisions; it grants no authority and does not change replay interpretation.
|
||||
|
||||
<a id="verification"></a>
|
||||
## Verification
|
||||
|
||||
pnpm exec vitest run on the action-cards, creation-recommendations, client-ui-action-cards and client-ui-creation-recommendations tests: 120 tests passed with 100% coverage of their sources. The Web creation-recommendations replay logs the status notice of a dismissed card before the next answer.
|
||||
|
||||
<a id="dev-note"></a>
|
||||
## Dev Note
|
||||
|
||||
None.
|
||||
+25
-25
@@ -1,17 +1,17 @@
|
||||
{
|
||||
"formatVersion": 2,
|
||||
"roots": [
|
||||
{"key":"event:agent/inbox/spliced","kind":"event","event":"agent/inbox/spliced","surface":false,"digest":"1b43047675face5df9ba7646bbbcd873907465dcedcf22ea824f9f088cea2840"},
|
||||
{"key":"event:developer/message","kind":"event","event":"developer/message","surface":true,"digest":"85d754f8957fcbbfb65bcb6dded47a816c409bb431de293ff3209b11fe093ded"},
|
||||
{"key":"event:session/title-llm-request","kind":"event","event":"session/title-llm-request","surface":false,"digest":"9d2c7e74894fb4dbf3af436b09d1e9ae4a631dbdf3c7ebbfb2b490b1279c94b3"},
|
||||
{"key":"event:user/message","kind":"event","event":"user/message","surface":true,"digest":"c81b3891a886d2e40a09d04633ec88918289bb10eee9098ed19d33c1994aa4d8"}
|
||||
{"key":"event:agent/inbox/spliced","kind":"event","event":"agent/inbox/spliced","surface":false,"digest":"b36fd842cd004b532ce96fd5d6f5be28e017eda043131aa3cf5e69edc436108e"},
|
||||
{"key":"event:developer/message","kind":"event","event":"developer/message","surface":true,"digest":"5ef58f2a1bdc576c1f12fa1f4da1920ece020b13c0f991a578cddcbeb28bc5be"},
|
||||
{"key":"event:session/title-llm-request","kind":"event","event":"session/title-llm-request","surface":false,"digest":"efa1a091017ce533e38b0ef3e14d11a5c102ff1793229b18dad719a4268d9adc"},
|
||||
{"key":"event:user/message","kind":"event","event":"user/message","surface":true,"digest":"58b122df513aeaf7ddc5783dbb1fd844e2979bb273964e30ae351a8db6510019"}
|
||||
],
|
||||
"types": [],
|
||||
"nodes": {
|
||||
"0203243b72fc867a": {"kind":"object","properties":[{"name":"kind","type":"24b10f7cdae64928","optional":false}],"indices":[]},
|
||||
"022623b9ef98ec47": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"f68c335306535a00","optional":false}],"indices":[]},
|
||||
"02b2c23f2d94b028": {"kind":"object","properties":[{"name":"kind","type":"c5687b1313206a6f","optional":false}],"indices":[]},
|
||||
"062f94b162cfd50f": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"e1ba710db2f3e4e4","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"05205074b24d8340": {"kind":"literal","value":"action-cards"},
|
||||
"0657d3ca5ac4e7bf": {"kind":"primitive","type":"number"},
|
||||
"07e1a58c58b593f5": {"kind":"object","properties":[{"name":"model","type":"4cd48f3e5108bd6e","optional":false},{"name":"provider","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"09655b34d7f3cf1e": {"kind":"literal","value":"system-prompt"},
|
||||
@@ -26,7 +26,6 @@
|
||||
"16d0507cb94b4cfc": {"kind":"literal","value":"relay"},
|
||||
"1922cd79a70806c1": {"kind":"literal","value":"skill-invocation"},
|
||||
"1938c8c20f1cba7c": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"d9edf1862e4471d6","optional":false}],"indices":[]},
|
||||
"1b43047675face5d": {"kind":"object","properties":[{"name":"data","type":"6889dc45ee6d68d2","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"829a2fb3be6efd4b","optional":false}],"indices":[]},
|
||||
"1e709346005826eb": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"d9edf1862e4471d6","optional":false}],"indices":[]},
|
||||
"1f0133217eeeffd8": {"kind":"literal","value":"tool-call"},
|
||||
"1f1385dbc3e875c0": {"kind":"literal","value":"repeat-tool-reminder"},
|
||||
@@ -35,7 +34,6 @@
|
||||
"2235d957bf4b7c6c": {"kind":"object","properties":[{"name":"kind","type":"7b1ce60193fa8b69","optional":false}],"indices":[]},
|
||||
"224aa11d4d5f88c4": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"23af3759678a30de","optional":false}],"indices":[]},
|
||||
"23af3759678a30de": {"kind":"literal","value":"dsh-session-title-llm"},
|
||||
"243d11dd918e46de": {"kind":"object","properties":[{"name":"content","type":"b52f215a6cd69105","optional":false},{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"role","type":"589d0d91239681f8","optional":false},{"name":"source","type":"6a69bf7c4ddee5c6","optional":false,"compatibility":{"version":1,"policy":"session-source-attribution","binding":"session.developer-message.source","discriminator":"kind","unknownKinds":"preserve","attributionKinds":["personalized-pages","tmux-context","user-question-reply","working-directory"]}}],"indices":[]},
|
||||
"24b10f7cdae64928": {"kind":"literal","value":"runtime-context"},
|
||||
"24ce31aa528272e5": {"kind":"object","properties":[{"name":"kind","type":"99e7e7d7fed55ae6","optional":false}],"indices":[]},
|
||||
"260523b412c19ad8": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"2f3f201c8846e19c","optional":false}],"indices":[]},
|
||||
@@ -51,6 +49,7 @@
|
||||
"2f3f201c8846e19c": {"kind":"literal","value":"tool-goal"},
|
||||
"312aee2f0c42aabb": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"d9edf1862e4471d6","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"31907de956375182": {"kind":"object","properties":[{"name":"compactionId","type":"4cd48f3e5108bd6e","optional":false},{"name":"kind","type":"6b23ed9ce1b397e6","optional":false},{"name":"sourceCommandId","type":"4cd48f3e5108bd6e","optional":true}],"indices":[]},
|
||||
"3247e566f4340029": {"kind":"object","properties":[{"name":"form","type":"6f9e00383836275e","optional":false},{"name":"kind","type":"05205074b24d8340","optional":false},{"name":"sections","type":"c748fb42c80a1200","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"335e242de1fcc17b": {"kind":"union","types":["bcf0caf62d964b2f","e438a9d4fb883b3e"]},
|
||||
"383cf73ae4748e5b": {"kind":"literal","value":"recall"},
|
||||
"3b04790e08b35241": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"0fe52387f6505270","optional":false}],"indices":[]},
|
||||
@@ -62,6 +61,7 @@
|
||||
"3f74ba74acd10644": {"kind":"literal","value":"image/jpeg"},
|
||||
"408927267422a7b2": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"0fe52387f6505270","optional":false}],"indices":[]},
|
||||
"43e311235aa537df": {"kind":"object","properties":[{"name":"toolName","type":"4cd48f3e5108bd6e","optional":false},{"name":"type","type":"83d6916021eede8f","optional":false}],"indices":[]},
|
||||
"45f005e6bbb76452": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"05205074b24d8340","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"4991dfc415c9efeb": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"1f1385dbc3e875c0","optional":false}],"indices":[]},
|
||||
"49dab019d00e8c26": {"kind":"object","properties":[{"name":"form","type":"6f9e00383836275e","optional":false},{"name":"kind","type":"78a9be340090b735","optional":false},{"name":"sections","type":"c748fb42c80a1200","optional":false}],"indices":[]},
|
||||
"4a9bef9f27a94252": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"82470020b5bfcb1a","optional":false},{"name":"senderSessionId","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
@@ -73,29 +73,26 @@
|
||||
"4edec1b770e8ec4c": {"kind":"literal","value":"ptc-mode"},
|
||||
"4f91f187baeabef5": {"kind":"object","properties":[{"name":"capturedFormatVersion","type":"0657d3ca5ac4e7bf","optional":true},{"name":"capturedThroughSeq","type":"3bd652ebfa8726b3","optional":false},{"name":"compacted","type":"aa93010d0e521ad7","optional":false},{"name":"inputIndex","type":"0657d3ca5ac4e7bf","optional":false},{"name":"label","type":"4cd48f3e5108bd6e","optional":false},{"name":"omittedBytes","type":"0657d3ca5ac4e7bf","optional":false},{"name":"omittedMessages","type":"0657d3ca5ac4e7bf","optional":false},{"name":"originalMessages","type":"0657d3ca5ac4e7bf","optional":false},{"name":"retainedMessages","type":"0657d3ca5ac4e7bf","optional":false},{"name":"sessionId","type":"4cd48f3e5108bd6e","optional":false},{"name":"truncated","type":"aa93010d0e521ad7","optional":false}],"indices":[]},
|
||||
"52c6113cb0e53f34": {"kind":"object","properties":[{"name":"form","type":"6f9e00383836275e","optional":false},{"name":"kind","type":"9ac52f0f84fec2eb","optional":false},{"name":"sections","type":"c748fb42c80a1200","optional":false}],"indices":[]},
|
||||
"53bb37430d38c725": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"e1ba710db2f3e4e4","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"53cf1704ae0709c7": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"99e7e7d7fed55ae6","optional":false}],"indices":[]},
|
||||
"5654685d7557ec74": {"kind":"object","properties":[{"name":"form","type":"6f9e00383836275e","optional":false},{"name":"kind","type":"f68c335306535a00","optional":false},{"name":"sections","type":"c748fb42c80a1200","optional":false}],"indices":[]},
|
||||
"58015da1c1950a66": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"24b10f7cdae64928","optional":false}],"indices":[]},
|
||||
"587bb11da730e06a": {"kind":"literal","value":"session/title-llm-request"},
|
||||
"589d0d91239681f8": {"kind":"literal","value":"developer"},
|
||||
"58d643f2ec961461": {"kind":"object","properties":[{"name":"headerSeq","type":"0657d3ca5ac4e7bf","optional":true},{"name":"message","type":"243d11dd918e46de","optional":false},{"name":"step","type":"0657d3ca5ac4e7bf","optional":false},{"name":"turn","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"58b122df513aeaf7": {"kind":"object","properties":[{"name":"data","type":"b782058cef83caf3","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"sourceEventSeqs","type":"5d03ba38734809bc","optional":true},{"name":"surfaceOp","type":"335e242de1fcc17b","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"de25352d2dc41963","optional":false}],"indices":[]},
|
||||
"58f94390b982f8a5": {"kind":"literal","value":"image/png"},
|
||||
"5b25a1523822e01a": {"kind":"object","properties":[{"name":"kind","type":"e1ba710db2f3e4e4","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"5bb69b88517f6214": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"99e7e7d7fed55ae6","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"5bc66269cfaf614c": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"d9edf1862e4471d6","optional":false}],"indices":[]},
|
||||
"5cdbf342b7748d15": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"f68c335306535a00","optional":false}],"indices":[]},
|
||||
"5d00abf938272f22": {"kind":"array","element":"b782058cef83caf3"},
|
||||
"5d03ba38734809bc": {"kind":"array","element":"0657d3ca5ac4e7bf"},
|
||||
"5d7a64ed6aac5551": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"8067b0d232c350f1","optional":false}],"indices":[]},
|
||||
"5ef58f2a1bdc576c": {"kind":"object","properties":[{"name":"data","type":"7404c6123fdaa591","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"sourceEventSeqs","type":"5d03ba38734809bc","optional":true},{"name":"surfaceOp","type":"335e242de1fcc17b","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"1379f0b72275994d","optional":false}],"indices":[]},
|
||||
"6085488d223aeffd": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"2f3f201c8846e19c","optional":false}],"indices":[]},
|
||||
"6292bcbedaa97fea": {"kind":"object","properties":[{"name":"kind","type":"f68c335306535a00","optional":false}],"indices":[]},
|
||||
"62ecb62dc0fe1b5e": {"kind":"literal","value":"next-turn"},
|
||||
"65a8400e451e667e": {"kind":"object","properties":[{"name":"kind","type":"09655b34d7f3cf1e","optional":false}],"indices":[]},
|
||||
"66b2e4f3954442bc": {"kind":"object","properties":[{"name":"form","type":"6f9e00383836275e","optional":false},{"name":"kind","type":"e1ba710db2f3e4e4","optional":false},{"name":"sections","type":"c748fb42c80a1200","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"672c4aa2a9b736e3": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"1922cd79a70806c1","optional":false},{"name":"name","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"6889dc45ee6d68d2": {"kind":"object","properties":[{"name":"inserted","type":"a7241f5a94c73b54","optional":false},{"name":"outcome","type":"d4e4d575abeb4b72","optional":true},{"name":"removedCount","type":"0657d3ca5ac4e7bf","optional":true},{"name":"start","type":"0657d3ca5ac4e7bf","optional":false},{"name":"target","type":"96f4a9c81fc0f940","optional":false}],"indices":[]},
|
||||
"68f44f59e91c4139": {"kind":"literal","value":"user"},
|
||||
"6a69bf7c4ddee5c6": {"kind":"union","types":["0203243b72fc867a","022623b9ef98ec47","02b2c23f2d94b028","062f94b162cfd50f","0ed8d1108fe7a5e1","0eeb17e1df89b1eb","11638dc58a31496f","1938c8c20f1cba7c","1e709346005826eb","1fdad624334d3548","2152caf1a71e588e","2235d957bf4b7c6c","224aa11d4d5f88c4","24ce31aa528272e5","260523b412c19ad8","28936c614bd4e7e2","290f32bfd81ff85a","297fbd8067d7815a","2aad1179f9576314","312aee2f0c42aabb","31907de956375182","3b04790e08b35241","3b4f2c9ef2c1217e","3bdb8dc6989655b0","408927267422a7b2","4991dfc415c9efeb","49dab019d00e8c26","4a9bef9f27a94252","4e97c3d85c0fc817","52c6113cb0e53f34","53bb37430d38c725","53cf1704ae0709c7","5654685d7557ec74","58015da1c1950a66","5b25a1523822e01a","5bb69b88517f6214","5bc66269cfaf614c","5cdbf342b7748d15","5d7a64ed6aac5551","6085488d223aeffd","6292bcbedaa97fea","65a8400e451e667e","66b2e4f3954442bc","672c4aa2a9b736e3","6ccb6bc423fb3952","6dacb1584f2bfbe2","6ea608bdc8a7a63d","6f22a9d02b9a1f11","6f44f32be9bcd9a8","719c51f67074f970","7554565be416b034","756b5e23a5cb2c7f","7df62978a2b7de85","7eaef7a763ba5b94","7f959241c24128b4","80677c8c8b804189","825ca23416b1ea9d","8338ee303e2bd448","854db3efdfb0cd39","85fe96bf15d5c755","8620189c8e335827","87b1a33564b9a4d6","88841202942c7683","8a046b52331959aa","8c1c4f72755a78ea","8c627d7a45fa406c","8f324cea3916c051","8fcb0b44a575e998","9529cbfe9fc86799","96bfb916a727cd44","99135d8a39379779","99f0e98184709ad1","9edc162949abf93b","9f65c43e340bba31","a15a19ef63cf5d1b","a16e567c8cd2c55c","a2066bd52f61218b","a3c6f1ea38e9a61d","aa2bf9e82b9fdeb9","aae343bc3d663c83","ada310bf0bdb8fed","ade057f4fdc387ae","b062078e899958f9","b2a5c8c008a31e3d","b3681c026a0b98e9","b4ec0af39fd52ed9","b6f94c17dd9bbd7c","b70f3e81fe11b7a5","b79641a9d25e7566","ba4c40b4381e0dcd","baccc97ec34be6c4","c5228b7a55498d84","c55827fba7018198","cb1c8959e1726f82","cda2345a9be9d139","d2cc8a54a6f1abc9","d85590a5675c6e2f","d9c462b9f62fdd3e","db06ef35b27a3842","dba54c09c6e7aafc","dd5ee8762bd8a14b","dd6cc2bb2a8f2824","deaae5cd30987d4f","edbbfff1128099fd","ee577a0cc18664c9","f230c0b583e23b25","f29d63336e8266d8","f4a66f654996c093","f56c5b59ca016131","f6329fb30c7ea801","f6605d6c57933aea","f6afe41e3926f422","f7283223aacdc39b","f97f47b0eb87905e","f99e707d67fd708b","fc2ae6962f9f8801","fcf81d3c58c13593","fe1a7acdeed4d0f5"]},
|
||||
"6b23ed9ce1b397e6": {"kind":"literal","value":"compact-checkpoint"},
|
||||
"6ccb6bc423fb3952": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"f68c335306535a00","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"6dacb1584f2bfbe2": {"kind":"object","properties":[{"name":"clientTimeZone","type":"4cd48f3e5108bd6e","optional":true},{"name":"kind","type":"68f44f59e91c4139","optional":false},{"name":"principal","type":"deebfc7c62177ea8","optional":true},{"name":"rpcId","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
@@ -106,9 +103,13 @@
|
||||
"6f9e00383836275e": {"kind":"literal","value":"snapshot"},
|
||||
"719c51f67074f970": {"kind":"object","properties":[{"name":"kind","type":"2765e9119edf5816","optional":false},{"name":"model","type":"4cd48f3e5108bd6e","optional":false},{"name":"provider","type":"4cd48f3e5108bd6e","optional":false},{"name":"replayState","type":"bbc5696e3f13c758","optional":true}],"indices":[]},
|
||||
"7382c4fc95fe8c5d": {"kind":"literal","value":"remove"},
|
||||
"7404c6123fdaa591": {"kind":"object","properties":[{"name":"headerSeq","type":"0657d3ca5ac4e7bf","optional":true},{"name":"message","type":"7580e7d96dc8475f","optional":false},{"name":"step","type":"0657d3ca5ac4e7bf","optional":false},{"name":"turn","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"7554565be416b034": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"2f3f201c8846e19c","optional":false}],"indices":[]},
|
||||
"756b5e23a5cb2c7f": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"8067b0d232c350f1","optional":false}],"indices":[]},
|
||||
"7580e7d96dc8475f": {"kind":"object","properties":[{"name":"content","type":"b52f215a6cd69105","optional":false},{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"role","type":"589d0d91239681f8","optional":false},{"name":"source","type":"7a5b68bd1a5118c8","optional":false,"compatibility":{"version":1,"policy":"session-source-attribution","binding":"session.developer-message.source","discriminator":"kind","unknownKinds":"preserve","attributionKinds":["action-cards","tmux-context","user-question-reply","working-directory"]}}],"indices":[]},
|
||||
"78a9be340090b735": {"kind":"literal","value":"tmux-context"},
|
||||
"78b9204976ab9faa": {"kind":"array","element":"cda79b839d8cc0c7"},
|
||||
"7a5b68bd1a5118c8": {"kind":"union","types":["0203243b72fc867a","022623b9ef98ec47","02b2c23f2d94b028","0ed8d1108fe7a5e1","0eeb17e1df89b1eb","11638dc58a31496f","1938c8c20f1cba7c","1e709346005826eb","1fdad624334d3548","2152caf1a71e588e","2235d957bf4b7c6c","224aa11d4d5f88c4","24ce31aa528272e5","260523b412c19ad8","28936c614bd4e7e2","290f32bfd81ff85a","297fbd8067d7815a","2aad1179f9576314","312aee2f0c42aabb","31907de956375182","3247e566f4340029","3b04790e08b35241","3b4f2c9ef2c1217e","3bdb8dc6989655b0","408927267422a7b2","45f005e6bbb76452","4991dfc415c9efeb","49dab019d00e8c26","4a9bef9f27a94252","4e97c3d85c0fc817","52c6113cb0e53f34","53cf1704ae0709c7","5654685d7557ec74","58015da1c1950a66","5bb69b88517f6214","5bc66269cfaf614c","5cdbf342b7748d15","5d7a64ed6aac5551","6085488d223aeffd","6292bcbedaa97fea","65a8400e451e667e","672c4aa2a9b736e3","6ccb6bc423fb3952","6dacb1584f2bfbe2","6ea608bdc8a7a63d","6f22a9d02b9a1f11","6f44f32be9bcd9a8","719c51f67074f970","7554565be416b034","756b5e23a5cb2c7f","7df62978a2b7de85","7eaef7a763ba5b94","7f959241c24128b4","80677c8c8b804189","825ca23416b1ea9d","8338ee303e2bd448","854db3efdfb0cd39","85fe96bf15d5c755","8620189c8e335827","87b1a33564b9a4d6","88841202942c7683","8a046b52331959aa","8c1c4f72755a78ea","8c627d7a45fa406c","8f324cea3916c051","8fcb0b44a575e998","96bfb916a727cd44","99135d8a39379779","99f0e98184709ad1","9edc162949abf93b","9f65c43e340bba31","a15a19ef63cf5d1b","a16e567c8cd2c55c","a2066bd52f61218b","a3c6f1ea38e9a61d","aa2bf9e82b9fdeb9","aae343bc3d663c83","ada310bf0bdb8fed","ade057f4fdc387ae","b062078e899958f9","b2a5c8c008a31e3d","b3681c026a0b98e9","b4ec0af39fd52ed9","b613f83572fe2fbf","b6f94c17dd9bbd7c","b70f3e81fe11b7a5","b79641a9d25e7566","ba2a1a8f194b1bb2","ba4c40b4381e0dcd","baccc97ec34be6c4","c5228b7a55498d84","c55827fba7018198","cb1c8959e1726f82","cda2345a9be9d139","d85590a5675c6e2f","d9c462b9f62fdd3e","db06ef35b27a3842","dba54c09c6e7aafc","dd00cdccd0ba487b","dd5ee8762bd8a14b","dd6cc2bb2a8f2824","dde0cdf9d426768b","deaae5cd30987d4f","e7f4cbb3a57f4cbd","edbbfff1128099fd","ee577a0cc18664c9","f230c0b583e23b25","f29d63336e8266d8","f4a66f654996c093","f56c5b59ca016131","f6329fb30c7ea801","f6605d6c57933aea","f6afe41e3926f422","f7283223aacdc39b","f97f47b0eb87905e","fc2ae6962f9f8801","fcf81d3c58c13593","fe1a7acdeed4d0f5"]},
|
||||
"7b1ce60193fa8b69": {"kind":"literal","value":"working-directory"},
|
||||
"7df62978a2b7de85": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"78a9be340090b735","optional":false}],"indices":[]},
|
||||
"7eaef7a763ba5b94": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"23af3759678a30de","optional":false}],"indices":[]},
|
||||
@@ -127,7 +128,6 @@
|
||||
"83da72c6857601c7": {"kind":"object","properties":[{"name":"action","type":"904bf499d98be4a3","optional":false},{"name":"digest","type":"4cd48f3e5108bd6e","optional":true},{"name":"path","type":"4cd48f3e5108bd6e","optional":false},{"name":"scope","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"854db3efdfb0cd39": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"bb94f3217aa56c88","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"85d6d96ff8842974": {"kind":"literal","value":"answered"},
|
||||
"85d754f8957fcbbf": {"kind":"object","properties":[{"name":"data","type":"58d643f2ec961461","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"sourceEventSeqs","type":"5d03ba38734809bc","optional":true},{"name":"surfaceOp","type":"335e242de1fcc17b","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"1379f0b72275994d","optional":false}],"indices":[]},
|
||||
"85f9b505b7bdff1f": {"kind":"literal","value":"tool-addition"},
|
||||
"85fe96bf15d5c755": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"8067b0d232c350f1","optional":false}],"indices":[]},
|
||||
"8620189c8e335827": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"1f1385dbc3e875c0","optional":false}],"indices":[]},
|
||||
@@ -142,9 +142,7 @@
|
||||
"8f324cea3916c051": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"2f3f201c8846e19c","optional":false}],"indices":[]},
|
||||
"8fcb0b44a575e998": {"kind":"object","properties":[{"name":"kind","type":"a720757f704a2512","optional":false}],"indices":[]},
|
||||
"904bf499d98be4a3": {"kind":"union","types":["7382c4fc95fe8c5d","b765ee31033cea46","f6cb462f808309e3"]},
|
||||
"929c90ad641192d1": {"kind":"object","properties":[{"name":"maxTokens","type":"0657d3ca5ac4e7bf","optional":false},{"name":"messageSeqs","type":"5d03ba38734809bc","optional":false},{"name":"messages","type":"cf58fe6f97f6f8fc","optional":false},{"name":"reasoningEffort","type":"4cd48f3e5108bd6e","optional":true},{"name":"route","type":"07e1a58c58b593f5","optional":false},{"name":"system","type":"4cd48f3e5108bd6e","optional":false},{"name":"titleProvider","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"938f7c7357bc403e": {"kind":"primitive","type":"null"},
|
||||
"9529cbfe9fc86799": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"e1ba710db2f3e4e4","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"95a3ffccbf3c8afc": {"kind":"literal","value":"owner"},
|
||||
"95c0e88fcf0bafb2": {"kind":"literal","value":"assistant"},
|
||||
"9645cf93769a6dfb": {"kind":"literal","value":"user-question-reply"},
|
||||
@@ -154,7 +152,6 @@
|
||||
"99e7e7d7fed55ae6": {"kind":"literal","value":"tool-jobs"},
|
||||
"99f0e98184709ad1": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"bb94f3217aa56c88","optional":false}],"indices":[]},
|
||||
"9ac52f0f84fec2eb": {"kind":"literal","value":"model-selection"},
|
||||
"9d2c7e74894fb4db": {"kind":"object","properties":[{"name":"data","type":"929c90ad641192d1","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"587bb11da730e06a","optional":false}],"indices":[]},
|
||||
"9edc162949abf93b": {"kind":"object","properties":[{"name":"deliveryId","type":"4cd48f3e5108bd6e","optional":false},{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"db6c5246911d47a7","optional":false},{"name":"provider","type":"4cd48f3e5108bd6e","optional":false},{"name":"ruleId","type":"4cd48f3e5108bd6e","optional":false},{"name":"source","type":"4cd48f3e5108bd6e","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"9f65c43e340bba31": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"78a9be340090b735","optional":false}],"indices":[]},
|
||||
"a13d8f379222ece8": {"kind":"literal","value":"tool"},
|
||||
@@ -162,8 +159,8 @@
|
||||
"a16e567c8cd2c55c": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"d9edf1862e4471d6","optional":false}],"indices":[]},
|
||||
"a2066bd52f61218b": {"kind":"object","properties":[{"name":"kind","type":"2f3f201c8846e19c","optional":false}],"indices":[]},
|
||||
"a3c6f1ea38e9a61d": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"9ac52f0f84fec2eb","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"a3e299483348f27a": {"kind":"object","properties":[{"name":"maxTokens","type":"0657d3ca5ac4e7bf","optional":false},{"name":"messageSeqs","type":"5d03ba38734809bc","optional":false},{"name":"messages","type":"78b9204976ab9faa","optional":false},{"name":"reasoningEffort","type":"4cd48f3e5108bd6e","optional":true},{"name":"route","type":"07e1a58c58b593f5","optional":false},{"name":"system","type":"4cd48f3e5108bd6e","optional":false},{"name":"titleProvider","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"a720757f704a2512": {"kind":"literal","value":"tool-registry"},
|
||||
"a7241f5a94c73b54": {"kind":"array","element":"c1d5de6f6d47227a"},
|
||||
"a9059a81430b3207": {"kind":"literal","value":"hooks-claude-code"},
|
||||
"aa2bf9e82b9fdeb9": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"f68c335306535a00","optional":false}],"indices":[]},
|
||||
"aa93010d0e521ad7": {"kind":"primitive","type":"boolean"},
|
||||
@@ -175,32 +172,33 @@
|
||||
"b062078e899958f9": {"kind":"object","properties":[{"name":"kind","type":"1f1385dbc3e875c0","optional":false}],"indices":[]},
|
||||
"b0b0eb1b16490f6b": {"kind":"object","properties":[{"name":"attachmentId","type":"4cd48f3e5108bd6e","optional":false},{"name":"bytes","type":"0657d3ca5ac4e7bf","optional":false},{"name":"height","type":"0657d3ca5ac4e7bf","optional":false},{"name":"mediaType","type":"2f1e6a7ebace43d7","optional":false},{"name":"name","type":"4cd48f3e5108bd6e","optional":true},{"name":"originalDimensions","type":"0f46153645c29784","optional":true},{"name":"width","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"b2a5c8c008a31e3d": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"23af3759678a30de","optional":false}],"indices":[]},
|
||||
"b2a948a5340a9341": {"kind":"object","properties":[{"name":"inserted","type":"5d00abf938272f22","optional":false},{"name":"outcome","type":"d4e4d575abeb4b72","optional":true},{"name":"removedCount","type":"0657d3ca5ac4e7bf","optional":true},{"name":"start","type":"0657d3ca5ac4e7bf","optional":false},{"name":"target","type":"96f4a9c81fc0f940","optional":false}],"indices":[]},
|
||||
"b3681c026a0b98e9": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"78a9be340090b735","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"b36fd842cd004b53": {"kind":"object","properties":[{"name":"data","type":"b2a948a5340a9341","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"829a2fb3be6efd4b","optional":false}],"indices":[]},
|
||||
"b4ec0af39fd52ed9": {"kind":"object","properties":[{"name":"kind","type":"bb94f3217aa56c88","optional":false}],"indices":[]},
|
||||
"b52f215a6cd69105": {"kind":"array","element":"8064c03c87c357fd"},
|
||||
"b613f83572fe2fbf": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"05205074b24d8340","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"b6f94c17dd9bbd7c": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"bb94f3217aa56c88","optional":false}],"indices":[]},
|
||||
"b70f3e81fe11b7a5": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"a9059a81430b3207","optional":false}],"indices":[]},
|
||||
"b765ee31033cea46": {"kind":"literal","value":"set"},
|
||||
"b782058cef83caf3": {"kind":"object","properties":[{"name":"content","type":"b52f215a6cd69105","optional":false},{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"role","type":"68f44f59e91c4139","optional":false},{"name":"source","type":"7a5b68bd1a5118c8","optional":false,"compatibility":{"version":1,"policy":"session-source-attribution","binding":"session.user-message.source","discriminator":"kind","unknownKinds":"preserve","attributionKinds":["action-cards","tmux-context","user-question-reply","working-directory"]}}],"indices":[]},
|
||||
"b79641a9d25e7566": {"kind":"object","properties":[{"name":"kind","type":"8067b0d232c350f1","optional":false}],"indices":[]},
|
||||
"b815d7b91cdd9fc6": {"kind":"literal","value":"goal"},
|
||||
"ba2a1a8f194b1bb2": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"05205074b24d8340","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"ba4c40b4381e0dcd": {"kind":"object","properties":[{"name":"form","type":"6f9e00383836275e","optional":false},{"name":"kind","type":"23af3759678a30de","optional":false},{"name":"sections","type":"c748fb42c80a1200","optional":false}],"indices":[]},
|
||||
"baccc97ec34be6c4": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"0fe52387f6505270","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"bb94f3217aa56c88": {"kind":"literal","value":"hooks-codex"},
|
||||
"bbc5696e3f13c758": {"kind":"opaque","reason":"unknown"},
|
||||
"bcf0caf62d964b2f": {"kind":"object","properties":[{"name":"endSeq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"op","type":"f6cb462f808309e3","optional":false},{"name":"startSeq","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"bf16d2e98a7f1389": {"kind":"literal","value":"subagent-settled"},
|
||||
"c1d5de6f6d47227a": {"kind":"object","properties":[{"name":"content","type":"b52f215a6cd69105","optional":false},{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"role","type":"68f44f59e91c4139","optional":false},{"name":"source","type":"6a69bf7c4ddee5c6","optional":false,"compatibility":{"version":1,"policy":"session-source-attribution","binding":"session.user-message.source","discriminator":"kind","unknownKinds":"preserve","attributionKinds":["personalized-pages","tmux-context","user-question-reply","working-directory"]}}],"indices":[]},
|
||||
"c1f0f17b6493b85d": {"kind":"object","properties":[{"name":"arguments","type":"4cd48f3e5108bd6e","optional":false},{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"name","type":"4cd48f3e5108bd6e","optional":false},{"name":"type","type":"1f0133217eeeffd8","optional":false}],"indices":[]},
|
||||
"c5228b7a55498d84": {"kind":"object","properties":[{"name":"form","type":"6f9e00383836275e","optional":false},{"name":"kind","type":"99e7e7d7fed55ae6","optional":false},{"name":"sections","type":"c748fb42c80a1200","optional":false}],"indices":[]},
|
||||
"c55827fba7018198": {"kind":"object","properties":[{"name":"callId","type":"4cd48f3e5108bd6e","optional":false},{"name":"kind","type":"9645cf93769a6dfb","optional":false},{"name":"outcome","type":"85d6d96ff8842974","optional":false}],"indices":[]},
|
||||
"c5687b1313206a6f": {"kind":"literal","value":"cordis-host-runner"},
|
||||
"c748fb42c80a1200": {"kind":"array","element":"86e1e384495ee09a"},
|
||||
"c81b3891a886d2e4": {"kind":"object","properties":[{"name":"data","type":"c1d5de6f6d47227a","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"sourceEventSeqs","type":"5d03ba38734809bc","optional":true},{"name":"surfaceOp","type":"335e242de1fcc17b","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"de25352d2dc41963","optional":false}],"indices":[]},
|
||||
"cb1c8959e1726f82": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"24b10f7cdae64928","optional":false}],"indices":[]},
|
||||
"cda2345a9be9d139": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"24b10f7cdae64928","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"cea2baa72d20cb86": {"kind":"union","types":["09f3f8dc417f2782","243d11dd918e46de","4b259f7f8f0a44ad","c1d5de6f6d47227a","fa87537f4a9c1e25"]},
|
||||
"cf58fe6f97f6f8fc": {"kind":"array","element":"cea2baa72d20cb86"},
|
||||
"d2cc8a54a6f1abc9": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"e1ba710db2f3e4e4","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"cda79b839d8cc0c7": {"kind":"union","types":["09f3f8dc417f2782","4b259f7f8f0a44ad","7580e7d96dc8475f","b782058cef83caf3","fa87537f4a9c1e25"]},
|
||||
"d4e4d575abeb4b72": {"kind":"literal","value":"canceled"},
|
||||
"d85590a5675c6e2f": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"1f1385dbc3e875c0","optional":false}],"indices":[]},
|
||||
"d9c462b9f62fdd3e": {"kind":"object","properties":[{"name":"callId","type":"4cd48f3e5108bd6e","optional":false},{"name":"kind","type":"a13d8f379222ece8","optional":false}],"indices":[]},
|
||||
@@ -209,19 +207,22 @@
|
||||
"db06ef35b27a3842": {"kind":"object","properties":[{"name":"form","type":"6f9e00383836275e","optional":false},{"name":"kind","type":"1f1385dbc3e875c0","optional":false},{"name":"sections","type":"c748fb42c80a1200","optional":false}],"indices":[]},
|
||||
"db6c5246911d47a7": {"kind":"literal","value":"webhook"},
|
||||
"dba54c09c6e7aafc": {"kind":"object","properties":[{"name":"kind","type":"4edec1b770e8ec4c","optional":false}],"indices":[]},
|
||||
"dd00cdccd0ba487b": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"05205074b24d8340","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"dd5ee8762bd8a14b": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"99e7e7d7fed55ae6","optional":false}],"indices":[]},
|
||||
"dd6cc2bb2a8f2824": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"99e7e7d7fed55ae6","optional":false}],"indices":[]},
|
||||
"dde0cdf9d426768b": {"kind":"object","properties":[{"name":"kind","type":"05205074b24d8340","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"de25352d2dc41963": {"kind":"literal","value":"user/message"},
|
||||
"de30b1fa12c75f81": {"kind":"literal","value":"image/gif"},
|
||||
"deaae5cd30987d4f": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"0fe52387f6505270","optional":false}],"indices":[]},
|
||||
"deebfc7c62177ea8": {"kind":"object","properties":[{"name":"kind","type":"95a3ffccbf3c8afc","optional":false}],"indices":[]},
|
||||
"df843efd87c78cf8": {"kind":"array","element":"4f91f187baeabef5"},
|
||||
"e1ba710db2f3e4e4": {"kind":"literal","value":"personalized-pages"},
|
||||
"e438a9d4fb883b3e": {"kind":"literal","value":"append"},
|
||||
"e7f4cbb3a57f4cbd": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"05205074b24d8340","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"e8de0f457fed5b9f": {"kind":"literal","value":"notice"},
|
||||
"ebb768d85ec87fb6": {"kind":"literal","value":"image/webp"},
|
||||
"edbbfff1128099fd": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"a9059a81430b3207","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"ee577a0cc18664c9": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"8067b0d232c350f1","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"efa1a091017ce533": {"kind":"object","properties":[{"name":"data","type":"a3e299483348f27a","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"587bb11da730e06a","optional":false}],"indices":[]},
|
||||
"f19bee84bf3d2090": {"kind":"object","properties":[{"name":"attachmentId","type":"4cd48f3e5108bd6e","optional":false},{"name":"bytes","type":"0657d3ca5ac4e7bf","optional":false},{"name":"name","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"f230c0b583e23b25": {"kind":"object","properties":[{"name":"form","type":"6f9e00383836275e","optional":false},{"name":"kind","type":"8067b0d232c350f1","optional":false},{"name":"sections","type":"c748fb42c80a1200","optional":false}],"indices":[]},
|
||||
"f29d63336e8266d8": {"kind":"object","properties":[{"name":"kind","type":"d9edf1862e4471d6","optional":false}],"indices":[]},
|
||||
@@ -236,7 +237,6 @@
|
||||
"f7283223aacdc39b": {"kind":"object","properties":[{"name":"kind","type":"9ac52f0f84fec2eb","optional":false}],"indices":[]},
|
||||
"f88f1b7b6bb733f6": {"kind":"literal","value":1},
|
||||
"f97f47b0eb87905e": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"78a9be340090b735","optional":false}],"indices":[]},
|
||||
"f99e707d67fd708b": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"e1ba710db2f3e4e4","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"fa87537f4a9c1e25": {"kind":"object","properties":[{"name":"content","type":"b52f215a6cd69105","optional":false},{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"role","type":"95c0e88fcf0bafb2","optional":false},{"name":"source","type":"719c51f67074f970","optional":false}],"indices":[]},
|
||||
"fb8b6a2e53cb9cf4": {"kind":"literal","value":"image"},
|
||||
"fbd2c74b346a1595": {"kind":"literal","value":"agent-instructions"},
|
||||
@@ -0,0 +1,60 @@
|
||||
---
|
||||
description: "记录持久化类型更改及其兼容性确认。"
|
||||
kind: persistence-change
|
||||
---
|
||||
|
||||
# 2026-10-22-action-card-status
|
||||
|
||||
[English](2026-10-22-action-card-status.md) | 中文
|
||||
|
||||
## 概述
|
||||
|
||||
为写入日志的模型上下文新增操作卡片状态的来源标识。
|
||||
|
||||
## 目录
|
||||
|
||||
- [声明](#declaration)
|
||||
- [兼容性](#compatibility)
|
||||
- [验证](#verification)
|
||||
- [开发备注](#dev-note)
|
||||
|
||||
<a id="declaration"></a>
|
||||
## 声明
|
||||
|
||||
```yaml persistence-change
|
||||
schemaVersion: 1
|
||||
id: 2026-10-22-action-card-status
|
||||
baseline: false
|
||||
changes:
|
||||
- root: "event:agent/inbox/spliced"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "b36fd842cd004b532ce96fd5d6f5be28e017eda043131aa3cf5e69edc436108e"
|
||||
decision: same-version
|
||||
- root: "event:developer/message"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "5ef58f2a1bdc576c1f12fa1f4da1920ece020b13c0f991a578cddcbeb28bc5be"
|
||||
decision: same-version
|
||||
- root: "event:session/title-llm-request"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "efa1a091017ce533e38b0ef3e14d11a5c102ff1793229b18dad719a4268d9adc"
|
||||
decision: same-version
|
||||
- root: "event:user/message"
|
||||
previous: "2026-10-13-user-rpc-principal"
|
||||
after: "58b122df513aeaf7ddc5783dbb1fd844e2979bb273964e30ae351a8db6510019"
|
||||
decision: same-version
|
||||
```
|
||||
|
||||
<a id="compatibility"></a>
|
||||
## 兼容性
|
||||
|
||||
已有消息和记录不变。没有操作卡片插件的读取方保留新的 action-cards 来源类型及其 JSON 元数据,并把记录的文本当作普通上下文。只有写入方使用 through 序号确认已送达的决定;它不授予任何权限,也不改变回放的解释。
|
||||
|
||||
<a id="verification"></a>
|
||||
## 验证
|
||||
|
||||
对 action-cards、creation-recommendations、client-ui-action-cards 和 client-ui-creation-recommendations 的测试运行 pnpm exec vitest run:120 个测试通过,源码覆盖率 100%。Web creation-recommendations 回放在下一次回答之前记录了已忽略卡片的状态通知。
|
||||
|
||||
<a id="dev-note"></a>
|
||||
## 开发备注
|
||||
|
||||
无。
|
||||
Generated
+46
-62
@@ -5,7 +5,7 @@
|
||||
{"key":"JsonlHeaderLine","kind":"header","digest":"18ee62b8900a4c3d046700f05d7a4d49d6cab2a660a020c87481d1603dd8bd4f"},
|
||||
{"key":"SessionEventEnvelope","kind":"envelope","digest":"5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc"},
|
||||
{"key":"event:agent-preset/selected","kind":"event","event":"agent-preset/selected","surface":false,"digest":"a10c17474eaf2ddab7095a099e0fe3d046fc18e56c3e344fc8894c05ff9ef97b"},
|
||||
{"key":"event:agent/inbox/spliced","kind":"event","event":"agent/inbox/spliced","surface":false,"digest":"dde4d210811d670552c70fa7a9864ae650cef357590ad60ef1778c9b7dd1d7bf"},
|
||||
{"key":"event:agent/inbox/spliced","kind":"event","event":"agent/inbox/spliced","surface":false,"digest":"b36fd842cd004b532ce96fd5d6f5be28e017eda043131aa3cf5e69edc436108e"},
|
||||
{"key":"event:approval/asked","kind":"event","event":"approval/asked","surface":false,"digest":"3bfeb47b58606f4661904bc723da612782214c463d01e6d61cd6d6193d7374e1"},
|
||||
{"key":"event:approval/decided","kind":"event","event":"approval/decided","surface":false,"digest":"bb1ab3d08f49a9f3b265f844cd78d5c49813062a7b34b54904b426f85d0ff6e3"},
|
||||
{"key":"event:approval/policy","kind":"event","event":"approval/policy","surface":false,"digest":"26718e15e7e395bce9642dba5bbe09b3b1a4ce2213d20d566cd9207d7fc5fb78"},
|
||||
@@ -18,7 +18,7 @@
|
||||
{"key":"event:compaction/start","kind":"event","event":"compaction/start","surface":false,"digest":"db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965"},
|
||||
{"key":"event:compaction/summary","kind":"event","event":"compaction/summary","surface":false,"digest":"e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602"},
|
||||
{"key":"event:deliverables/presented","kind":"event","event":"deliverables/presented","surface":false,"digest":"13d3d180f977bf78081d487ffa0ecb75857349bcab29a5a3fb48189fca2a6176"},
|
||||
{"key":"event:developer/message","kind":"event","event":"developer/message","surface":true,"digest":"1adeb5417a9565c55ad63138034d1c51daf6a75f8964c46352691a1d94188265"},
|
||||
{"key":"event:developer/message","kind":"event","event":"developer/message","surface":true,"digest":"5ef58f2a1bdc576c1f12fa1f4da1920ece020b13c0f991a578cddcbeb28bc5be"},
|
||||
{"key":"event:feedback/message-delete","kind":"event","event":"feedback/message-delete","surface":false,"digest":"3ee93b06f3a125850337602bcdf155d2538c43a5c944ec55b1b3c365152d6796"},
|
||||
{"key":"event:feedback/message-put","kind":"event","event":"feedback/message-put","surface":false,"digest":"b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf"},
|
||||
{"key":"event:feedback/record","kind":"event","event":"feedback/record","surface":false,"digest":"b54940ff095c17e874c5be03815f4c2145a256cf3a1d34dae4ab2f7769dfffe8"},
|
||||
@@ -40,7 +40,7 @@
|
||||
{"key":"event:session-log-deepseek/delivery-accepted","kind":"event","event":"session-log-deepseek/delivery-accepted","surface":false,"digest":"d63b8b8ffad9c02fd80c43a17df4f240c1fe8118ecca9de34f9d5871838ab5b9"},
|
||||
{"key":"event:session/end-seed","kind":"event","event":"session/end-seed","surface":false,"digest":"5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e"},
|
||||
{"key":"event:session/title","kind":"event","event":"session/title","surface":false,"digest":"1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5"},
|
||||
{"key":"event:session/title-llm-request","kind":"event","event":"session/title-llm-request","surface":false,"digest":"651a11c7869dfbe778ff23bf7e94567b141470b5dbad4a146f93189a4ff24646"},
|
||||
{"key":"event:session/title-llm-request","kind":"event","event":"session/title-llm-request","surface":false,"digest":"efa1a091017ce533e38b0ef3e14d11a5c102ff1793229b18dad719a4268d9adc"},
|
||||
{"key":"event:step/end","kind":"event","event":"step/end","surface":false,"digest":"e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05"},
|
||||
{"key":"event:step/start","kind":"event","event":"step/start","surface":false,"digest":"4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986"},
|
||||
{"key":"event:subagent/catalog","kind":"event","event":"subagent/catalog","surface":false,"digest":"53750b9abf61efb7992b0aadc3e247ec927449c63266df28230fd1139f5590ac"},
|
||||
@@ -62,7 +62,7 @@
|
||||
{"key":"event:tool/result","kind":"event","event":"tool/result","surface":true,"digest":"7c9f44e90a0058f4cc532ae20dad0c10afa6eba22e70a6c79fc79490bad64397"},
|
||||
{"key":"event:turn/end","kind":"event","event":"turn/end","surface":false,"digest":"0f8512903d94f57a4748fa1a2092e64342856796684e6b8343db685b192745ce"},
|
||||
{"key":"event:turn/start","kind":"event","event":"turn/start","surface":false,"digest":"aa0957eca50aeb28bcd2e6930b95809926edacb550c8c340ba526ba6b861b3d8"},
|
||||
{"key":"event:user/message","kind":"event","event":"user/message","surface":true,"digest":"1ca126460ab395a27ca1d236203c0a8b58eddcc316d681484691bced1b220045"},
|
||||
{"key":"event:user/message","kind":"event","event":"user/message","surface":true,"digest":"58b122df513aeaf7ddc5783dbb1fd844e2979bb273964e30ae351a8db6510019"},
|
||||
{"key":"event:web/deepseek-search-llm-request","kind":"event","event":"web/deepseek-search-llm-request","surface":false,"digest":"0c556c9b9f2a96238a6b9bbb99e748206cbff2ed6203041c9571f04ae5802f52"},
|
||||
{"key":"event:working-directory/change","kind":"event","event":"working-directory/change","surface":false,"digest":"124aa62078ca3311353b39cc3bf6c75da281338be6bbf672f8b361d828cddca3"},
|
||||
{"key":"event:workspace/changes","kind":"event","event":"workspace/changes","surface":false,"digest":"e308ccf867a5398e316e0af8cb6ce238a8d33a63b9b384c8250a686786285f72"}
|
||||
@@ -74,9 +74,9 @@
|
||||
{"digest":"023a355b2be0d688fb6e4df8388dadb942761d46cfe96d0f499aae9631a159d4","names":[],"sources":["packages/core/session/src/types.ts:207"]},
|
||||
{"digest":"02b2c23f2d94b028c9588a8faace3fce1217405db346da3389368b495457bf79","names":[],"sources":["packages/extensions/cordis-host-runner/src/index.ts:14"]},
|
||||
{"digest":"0341d4c3dfcd53253cdc1e789d9130d3cd848b6f8b0706bf92f313a68b39ff23","names":[],"sources":[]},
|
||||
{"digest":"05205074b24d8340cfd7995f6cb64779c7f1241490954700115601e264178877","names":[],"sources":[]},
|
||||
{"digest":"05a2796621b1ee6c03ef7abe560b25116bb4da4d592312117242a78415a32b04","names":[],"sources":[]},
|
||||
{"digest":"05d2ae1e0c7f8770f83f9a09047afb39a335d8ac986df3193659aa1e581472cf","names":["packages/interaction/user-approval/src/index.ts#ApprovalPolicy"],"sources":["packages/interaction/user-approval/src/index.ts:68"]},
|
||||
{"digest":"062f94b162cfd50fccd0733645d262b6fce404349cd003b71d15daf5539f0c4e","names":[],"sources":[]},
|
||||
{"digest":"0657d3ca5ac4e7bf79b00bcf860b1c7159d01a9da137497221ec2f1776e365f7","names":["packages/core/session/src/types.ts#SessionSeq"],"sources":["packages/core/session/src/types.ts:33"]},
|
||||
{"digest":"07e1a58c58b593f507b8e7f25723bb0aa42baae6e00f5ecfddf28cb1e64d3235","names":["packages/session/session-title/src/types.ts#SessionTitleModelIdentity","packages/subagent/tool-subagent/src/model-selection.ts#AllowedModelRoute"],"sources":["packages/session/session-title/src/types.ts:20","packages/subagent/tool-subagent/src/model-selection.ts:9"]},
|
||||
{"digest":"07eccc9ea2f9b5439d76cc77d5e062936677d43f07a23da749819b0a22ee36b7","names":[],"sources":[]},
|
||||
@@ -118,7 +118,6 @@
|
||||
{"digest":"15495614ccfa9cbdeefb0ec2abd76406435f4c6ff3dae42acae8e09ef42025c9","names":[],"sources":[]},
|
||||
{"digest":"1571525adc95a24e5d25b5a6440df401cd7cdd881b745178e85f5a333435cd1b","names":[],"sources":[]},
|
||||
{"digest":"15d5dfdd822aa35e115afd74a8982825a493880457774e6850bc1520b50875e4","names":[],"sources":[]},
|
||||
{"digest":"16a51dd31994f8d8ce7d574165d99dcde042e9bd3ef3d0b18454a18884aa33f9","names":[],"sources":[]},
|
||||
{"digest":"16d0507cb94b4cfc84a87446b1ba7652d6ec1d65ee1684789e747e30d542800e","names":[],"sources":[]},
|
||||
{"digest":"17aae616ef020b8b9f011ec398ec935450fb06d3e2a0722c456f63aeaf5ff728","names":[],"sources":[]},
|
||||
{"digest":"17d1afb770d9941936130996da00dc86782cfef731d8d6526162c301256a4ac3","names":[],"sources":["packages/core/session/src/types.ts:429"]},
|
||||
@@ -132,13 +131,10 @@
|
||||
{"digest":"1a2718b00937b236a0d0910ef5dab2f9f8b65e4bde410cc21f15fbbf29f584d3","names":[],"sources":[]},
|
||||
{"digest":"1a3440e3577382704d42a6263aa463504eb74c566734a55e9503a63efcd02445","names":["packages/core/session/src/types.ts#SessionHeader"],"sources":["packages/core/session/src/types.ts:95"]},
|
||||
{"digest":"1ab2ef1296f157ba96998f179bb5daa9d21a82480da2901127aeab2730797c92","names":[],"sources":[]},
|
||||
{"digest":"1adeb5417a9565c55ad63138034d1c51daf6a75f8964c46352691a1d94188265","names":[],"sources":[]},
|
||||
{"digest":"1af4d670721bd3274747840b17fd10e73026cedb3271732666951f9937ae9f8a","names":[],"sources":[]},
|
||||
{"digest":"1b5649238876e28811e80f10ec67a00c197ad3babd4ecc61a22b09064b88c597","names":[],"sources":["packages/session/session-title/src/types.ts:29"]},
|
||||
{"digest":"1b912703e2d64f91c99c675b8f805b01076c8325b905c1218ad81ef0b24909d5","names":[],"sources":[]},
|
||||
{"digest":"1c2686c0682e7bc51d61117b2652bd4a80707e331aa276d6ef915ae32534a330","names":[],"sources":[]},
|
||||
{"digest":"1c5a58f4599bd4a9711712551ffe2442a5e5fcd0758bafe630cc4ead850bdaa7","names":[],"sources":[]},
|
||||
{"digest":"1ca126460ab395a27ca1d236203c0a8b58eddcc316d681484691bced1b220045","names":[],"sources":[]},
|
||||
{"digest":"1ccb56061942f5ccb0d30c9e4f2883b9d115ff906560029de637b61d3cde896d","names":[],"sources":["packages/core/session/src/types.ts:343"]},
|
||||
{"digest":"1cde1bedde79c5e8a56aee9c05c8e0a579cf5bc611deb85b93fa331a16ca978f","names":["packages/compaction/compaction-image-offload/src/projection.ts#ImageOffloadTarget"],"sources":["packages/compaction/compaction-image-offload/src/projection.ts:9"]},
|
||||
{"digest":"1d5f04a03ea75fc8eeece544129eba0f49f0c82046e9c404461920390135c7b2","names":[],"sources":[]},
|
||||
@@ -154,7 +150,6 @@
|
||||
{"digest":"1f1385dbc3e875c021e387c7096d671d606f22daec51b25c80348735b6bbfa10","names":[],"sources":[]},
|
||||
{"digest":"1f8c126cfab3df812cd115cfc23e3256f0fa2383400f4ce91ecad313577e59b0","names":["packages/core/session/src/types.ts#TurnEndCancelCause"],"sources":["packages/core/session/src/types.ts:197"]},
|
||||
{"digest":"1fdad624334d354820dfb3a26e28d0bc9fc1b62a33f87bab63f715b3f4391bfd","names":[],"sources":[]},
|
||||
{"digest":"2013e9f315078a163122032ea5717a84e4d395f96ecba00ad948e80dbd7fb332","names":[],"sources":[]},
|
||||
{"digest":"20a57544bbf204dacd1ae6beb2ab29444365c3c869f2afdf489dcdcbc3d9c8c5","names":[],"sources":["packages/plan/plan-mode/src/index.ts:53"]},
|
||||
{"digest":"2142e391b9ccb60d487afcf373ce74db98d952f69e8289eddb352a7e16e996c5","names":[],"sources":[]},
|
||||
{"digest":"2152caf1a71e588e4df2358a806dea24936c1c47131134f01a12939d12cdc0c0","names":["packages/experimental/agent-team/src/types.ts#TeamMessageSource"],"sources":["packages/experimental/agent-team/src/types.ts:138"]},
|
||||
@@ -194,8 +189,8 @@
|
||||
{"digest":"30d5a537b296685770b1241c4b4bbde19d5a31ff81aa23df73fab5e90b8fc65f","names":["packages/session/session-title/src/types.ts#SessionTitleSource"],"sources":["packages/session/session-title/src/types.ts:28"]},
|
||||
{"digest":"312aee2f0c42aabbae6cc60d92d596d8453c0aeb061c5868d1755a69ef49e69a","names":[],"sources":[]},
|
||||
{"digest":"31907de9563751822af6d9be02bafaf26faa098bbd1cb412524134d577cc1648","names":["packages/compaction/compaction/src/checkpoint.ts#CompactionCheckpointSource"],"sources":["packages/compaction/compaction/src/checkpoint.ts:22"]},
|
||||
{"digest":"3247e566f4340029325b70e4366b56fa9719977f1e39033b769a2ec221ab22a9","names":[],"sources":[]},
|
||||
{"digest":"326a9bfda27dda5882fb3cbe6e715df41dae2298fdae3d66437457268a665693","names":["packages/llm/llm/src/call-config.ts#LlmCallConfigAdapterDefaults"],"sources":["packages/llm/llm/src/call-config.ts:54"]},
|
||||
{"digest":"328eb9a6ac89d6d82a283b5850bb7aa7db102b8e2a5533deb2add13fdf38135c","names":[],"sources":[]},
|
||||
{"digest":"3305a4bb6b6c29b482ba91d59c60b47e8f98282d3dacc8c29e4a4c2712209bdd","names":[],"sources":[]},
|
||||
{"digest":"33341aac09312300de5a178e6cc6f6544a4876f7f710cfea55eda473c8d329ef","names":["packages/llm/llm/src/assistant-stream.ts#AssistantStreamRecord"],"sources":["packages/llm/llm/src/assistant-stream.ts:20"]},
|
||||
{"digest":"335e242de1fcc17b6ca920fc420d71bec2d76e53e37955c00948b65ab77f05c5","names":["packages/core/session/src/types.ts#SurfaceOp"],"sources":["packages/core/session/src/types.ts:464"]},
|
||||
@@ -213,7 +208,6 @@
|
||||
{"digest":"390eed1028aba02774f14408647acec10ec5516e97d4f15ecde2b9989d5a69f2","names":["packages/feedback/message-feedback/src/types.ts#MessageFeedbackRating"],"sources":["packages/feedback/message-feedback/src/types.ts:17"]},
|
||||
{"digest":"39cf2d3ff8bac81c62d49ac2ba38a095b18e80f3ad700819fa1f650a4e60197f","names":["packages/jobs/jobs/src/types.ts#JobToolCall"],"sources":["packages/jobs/jobs/src/types.ts:16"]},
|
||||
{"digest":"3b04790e08b35241ffa0d38f6d7e4f8788aa921341f6c0d7574a329397c59408","names":[],"sources":[]},
|
||||
{"digest":"3b087536721261863dfc1d0cf972211ecbefc91f0732e7c0e7eb9da7f3d887ad","names":["packages/llm/llm/src/message.ts#UserMessage"],"sources":["packages/llm/llm/src/message.ts:162"]},
|
||||
{"digest":"3b1be838223869fe0a08210db85bf773796ed3f2373ac16555dff227cade0c48","names":[],"sources":[]},
|
||||
{"digest":"3b4f2c9ef2c1217eac596c7b070173cb7896e2fae09e729bc7c56c801e56bb29","names":[],"sources":[]},
|
||||
{"digest":"3bc287e765d58dc3a22672a0495a6cfd561220dd38fbaecef80aa95b96caed79","names":[],"sources":[]},
|
||||
@@ -238,6 +232,7 @@
|
||||
{"digest":"44818000e56acb97afdb5045ce235eb55e3fb1ccabc9fc7d0750bb38f36a7f8e","names":[],"sources":[]},
|
||||
{"digest":"44c8c77aa9aa100b0d74d2deee85474b29faa6eee0ac0f662f7abe9931ddd7f2","names":[],"sources":[]},
|
||||
{"digest":"4513e088d43e6c68425be30451b9f961cc264fe7318ca62681c41d4d78615986","names":[],"sources":[]},
|
||||
{"digest":"45f005e6bbb7645248be792b715a74bc7fdf5a67f5381655d3a75dcc7aa2112e","names":[],"sources":[]},
|
||||
{"digest":"45f2a07ea94573123b6ae14db787a40062dec3834f36d8be92c523d40ba28448","names":[],"sources":["packages/interaction/user-approval/src/types.ts:44"]},
|
||||
{"digest":"477614bca595a9e7adb5a1870be446b9a8684f3ba8950259d6289f2d3b74f028","names":[],"sources":["packages/compaction/compaction-image-offload/src/projection.ts:25"]},
|
||||
{"digest":"47e5d84f1a93450a78c7f3954b43990d0f629af7c034a56313e5deb63e772c1b","names":[],"sources":[]},
|
||||
@@ -254,7 +249,6 @@
|
||||
{"digest":"4b259f7f8f0a44ad5e90b70a73553ced1df27012d126921d397ff403b6c86731","names":["packages/llm/llm/src/message.ts#ToolResultMessage"],"sources":["packages/llm/llm/src/message.ts:173"]},
|
||||
{"digest":"4b7ddaf3710b88ff9b8df66304f5f97bf03688fd19730eedc2e9535203c820ea","names":[],"sources":[]},
|
||||
{"digest":"4bb451330ff699f36b45539ceb0eb2606ead72084e2c5bb637c36cc80e2252db","names":[],"sources":["packages/core/session/src/types.ts:194"]},
|
||||
{"digest":"4ccafbd2333db70abe447cd636db9eb428b5ae2eae36f7020351455fe314ffd4","names":[],"sources":["packages/core/session/src/types.ts:313"]},
|
||||
{"digest":"4cd48f3e5108bd6ebedf7301c3638839b8b2b9db8dbd493974177fbdeb91a01b","names":["packages/api/session-controller/src/types.ts#SessionRequestId","packages/attachment/attachment/src/brand.ts#AttachmentId","packages/compaction/compaction/src/brand.ts#CompactionId","packages/core/session/src/types.ts#SessionId","packages/experimental/agent-team/src/types.ts#TeamId","packages/experimental/agent-team/src/types.ts#TeamMessageId","packages/experimental/agent-team/src/types.ts#TeamTaskId","packages/experimental/webhook/src/brand.ts#WebhookDeliveryId","packages/experimental/webhook/src/brand.ts#WebhookRuleId","packages/experimental/webhook/src/brand.ts#WebhookSourceId","packages/feedback/message-feedback/src/types.ts#MessageFeedbackVersion","packages/goal/goal/src/types.ts#GoalId","packages/interaction/commands/src/brand.ts#CommandId","packages/interaction/user-approval/src/types.ts#ApprovalRequestId","packages/jobs/jobs/src/brand.ts#JobId","packages/llm/llm-retry/src/brand.ts#RetryId","packages/llm/llm/src/brand.ts#MessageId","packages/llm/llm/src/brand.ts#ProviderRequestId","packages/llm/llm/src/brand.ts#ReasoningEffortId","packages/llm/llm/src/brand.ts#ToolCallId","packages/schedule/schedule/src/types.ts#ScheduleId","packages/session/session-title/src/index.ts#SessionTitleProviderId","packages/session/session-title/src/types.ts#SessionTitleProviderId","packages/workflow/workflow/src/types.ts#WorkflowRunId"],"sources":["packages/api/session-controller/src/types.ts:380","packages/attachment/attachment/src/brand.ts:6","packages/compaction/compaction/src/brand.ts:4","packages/core/session/src/types.ts:21","packages/experimental/agent-team/src/types.ts:21","packages/experimental/agent-team/src/types.ts:33","packages/experimental/agent-team/src/types.ts:9","packages/experimental/webhook/src/brand.ts:12","packages/experimental/webhook/src/brand.ts:6","packages/experimental/webhook/src/brand.ts:9","packages/feedback/message-feedback/src/types.ts:14","packages/goal/goal/src/types.ts:17","packages/interaction/commands/src/brand.ts:31","packages/interaction/user-approval/src/types.ts:17","packages/jobs/jobs/src/brand.ts:19","packages/llm/llm-retry/src/brand.ts:4","packages/llm/llm/src/brand.ts:16","packages/llm/llm/src/brand.ts:31","packages/llm/llm/src/brand.ts:43","packages/llm/llm/src/brand.ts:67","packages/schedule/schedule/src/types.ts:14","packages/session/session-title/src/index.ts:42","packages/session/session-title/src/types.ts:17","packages/workflow/workflow/src/types.ts:13"]},
|
||||
{"digest":"4e011753f8263f436efaabfbb3b4db53a98fc55342c5ded2daf7208b217be159","names":[],"sources":[]},
|
||||
{"digest":"4e44c9118152f6829634bfd508e47669ab0497caffa380c94b4be91f9390d35d","names":[],"sources":[]},
|
||||
@@ -274,7 +268,6 @@
|
||||
{"digest":"5302e763151277614b97e77f00e3b326694c6c1247b916a20503c344dc970777","names":[],"sources":["packages/core/session/src/types.ts:377"]},
|
||||
{"digest":"530da6c0267813bb4511af72883cc518834e624e3b3220a7062955fd57a788a6","names":["packages/core/session/src/types.ts#RequestHeaderReason"],"sources":["packages/core/session/src/types.ts:275"]},
|
||||
{"digest":"53750b9abf61efb7992b0aadc3e247ec927449c63266df28230fd1139f5590ac","names":[],"sources":[]},
|
||||
{"digest":"53bb37430d38c7256e3868155ca5a03f4d8a46f4b124b2d22152e3752c0cb574","names":[],"sources":[]},
|
||||
{"digest":"53cf1704ae0709c7678bcf070c83c619fc48ca1b5c173b74cfa8702f22a8e492","names":[],"sources":[]},
|
||||
{"digest":"54f9276a1617d7c12594722c89cfe864bcbe4517e9a6f9c98bab14f199a135e0","names":[],"sources":["packages/core/session/src/types.ts:357"]},
|
||||
{"digest":"557e148d30b79ee48645850832b30c717d7c3b64641deb5d6133b8b4e91ee0b8","names":[],"sources":[]},
|
||||
@@ -282,33 +275,32 @@
|
||||
{"digest":"56b7c047694875a843ba020dfea3c8380d54ae4ff88ab349e72004dc21e07c23","names":[],"sources":["packages/core/session/src/types.ts:223"]},
|
||||
{"digest":"570e85022434613394418ad33e77e9f1f7a05699b33d0b62eae0677a638c3833","names":[],"sources":[]},
|
||||
{"digest":"576a2de8355eb09850963ff5953420b172e274d9283666eb7d889097db120796","names":[],"sources":[]},
|
||||
{"digest":"576b520757158af672b4bc6c13ab8f9422f5a0a501bb36888fb4874fd6587226","names":["packages/llm/llm/src/message.ts#MessageSource"],"sources":["packages/llm/llm/src/message.ts:136"]},
|
||||
{"digest":"5776e5553ff2dfe3f5bc202dbb1e7c9f93e35a531aebb7764c23b2b6153b2ccc","names":[],"sources":[]},
|
||||
{"digest":"57f3f606ff8b6c84d9c443faace9d1dd10cca0354f37a4f515ef075f7c351b90","names":[],"sources":[]},
|
||||
{"digest":"58015da1c1950a66daf66ae24913d6a1fc6d1d9ac441b155f8847f7f8584ba8e","names":[],"sources":[]},
|
||||
{"digest":"5808e36c95355f0e745201b5db1b6bcec4ebf5adb75d3e82d7d59cc89635ab80","names":["packages/llm/llm/src/types.ts#FinishReason"],"sources":["packages/llm/llm/src/types.ts:165"]},
|
||||
{"digest":"587bb11da730e06aa52b62c087d217d6f8f22459b25f31cb9e1e1baf17944e5e","names":[],"sources":[]},
|
||||
{"digest":"589d0d91239681f89ee485459dc8c2f73ea47183b5534289d966637024a2c35d","names":[],"sources":[]},
|
||||
{"digest":"58b122df513aeaf7ddc5783dbb1fd844e2979bb273964e30ae351a8db6510019","names":[],"sources":[]},
|
||||
{"digest":"58f94390b982f8a5ac1f4f235ba612557f4a1dc4a995d8b1cec63ce7639decb0","names":[],"sources":[]},
|
||||
{"digest":"5abab3a27fd2736660ecddd94b28d6bbf114986dd894880153bd1be3ccacb563","names":[],"sources":[]},
|
||||
{"digest":"5b232a9b9bfcc0fc6794dab7865bcf203a65785c5de5aa647a51228bff628413","names":[],"sources":[]},
|
||||
{"digest":"5b25a1523822e01a21b6ca6054f583a61fdced38b3ddd22a37faeb5a6fe28448","names":[],"sources":[]},
|
||||
{"digest":"5b6fb1f226ff56402db08a6aae82af76100b14056271875f69ec526a1ae05d51","names":[],"sources":["packages/interaction/commands/src/types.ts:112"]},
|
||||
{"digest":"5bb69b88517f6214f2af4d1a6d2b771e271ad3ad695cc9c2c272069ae698c9bc","names":[],"sources":[]},
|
||||
{"digest":"5bc66269cfaf614c0ecda8ecb469f23101a7609793fc2b693ac23c4aecdb575e","names":[],"sources":[]},
|
||||
{"digest":"5bd310104cfe448e530beb11422d2f791e2e32e8e95fdc528a15f9ca693dae75","names":[],"sources":[]},
|
||||
{"digest":"5c45bf4c544a7211dcd8ba6ba7e5f1bc39b49e7a9df9d5cbdc8e87c22771b37b","names":[],"sources":[]},
|
||||
{"digest":"5c98a6a7047c358964a874bd2cdb86ef1baaa5b3fa780d715a9c1a023e77bbea","names":[],"sources":[]},
|
||||
{"digest":"5cb63db9fe57dc09c3a1c2b84c3edf73ff5b62960155d8436a2377a5c43ce32c","names":[],"sources":[]},
|
||||
{"digest":"5cdbf342b7748d152bc987b68f58e565e5bba4b227e076e2d2120d87662e45cd","names":[],"sources":[]},
|
||||
{"digest":"5d00abf938272f22eb47199e9d40801e8d8ec4c88e2b138b15aa2a5a5bf87520","names":[],"sources":[]},
|
||||
{"digest":"5d03ba38734809bcbd2a55221bd938b3b3fc34b49bb686c6113e9e4931e3aa78","names":[],"sources":[]},
|
||||
{"digest":"5d17f27a1ef9f7026c0232714adf7573961536d75f3303ca97973975f5af170e","names":[],"sources":[]},
|
||||
{"digest":"5d542ac7bdf13310c46e1a884dec9fb18ad8c6e153cff207e639cd7bf9d7e694","names":[],"sources":[]},
|
||||
{"digest":"5d7a64ed6aac5551ebf998dc25e1e7b48a144769913f89702840180e61dc3995","names":[],"sources":[]},
|
||||
{"digest":"5dd766ccd1702a1142ad8b4bd44f2242f8e8a6752669ad3de0a5d224329b1438","names":[],"sources":["packages/compaction/compaction/src/types.ts:82"]},
|
||||
{"digest":"5e6db6e24948d4a853c71cb9fabd252ad051ce93d4672c1266cf837c1c17b84e","names":[],"sources":[]},
|
||||
{"digest":"5e88c0eb7dd6462d2cc26b2daa67f68f68e9e2d404305157a9fe32f0d5b4a32f","names":["packages/llm/llm/src/message.ts#Message"],"sources":["packages/llm/llm/src/message.ts:196"]},
|
||||
{"digest":"5ebce1317eacd2c148456627a09668e927ee15c204f0643f5ea76b46b54a2647","names":[],"sources":[]},
|
||||
{"digest":"5ef58f2a1bdc576c1f12fa1f4da1920ece020b13c0f991a578cddcbeb28bc5be","names":[],"sources":[]},
|
||||
{"digest":"5f2117d1856a5ab43c28371faa978ebfaa48f8c7d734ea3fc94842210df83dca","names":["packages/llm/llm/src/types.ts#LlmFailure"],"sources":["packages/llm/llm/src/types.ts:41"]},
|
||||
{"digest":"5f26a6c20b37632f8f57729d171c671def4683d994ac6257a8dffcd855101627","names":[],"sources":[]},
|
||||
{"digest":"5f758f3de5f00c18968a7c6d347083aac5c9ae13f6a79c78f6611b23c4973564","names":["packages/subagent/subagent/src/descriptor.ts#OneShotSubagentDescriptorData"],"sources":["packages/subagent/subagent/src/descriptor.ts:61"]},
|
||||
@@ -320,10 +312,8 @@
|
||||
{"digest":"62e6a429ff3f390a46ac39fb468692032f42936ca0db19b53454184189401379","names":[],"sources":[]},
|
||||
{"digest":"62ecb62dc0fe1b5e70217f8a80c39256a40ee3a1917be14e5ca899d20c35f7fd","names":[],"sources":[]},
|
||||
{"digest":"6487b10ba7542f3c447b1e41a1c6a590b7bfafe0b9b66b49f34028da85bb970f","names":["packages/subagent/subagent/src/descriptor.ts#ContinuableSubagentDescriptorData"],"sources":["packages/subagent/subagent/src/descriptor.ts:72"]},
|
||||
{"digest":"651a11c7869dfbe778ff23bf7e94567b141470b5dbad4a146f93189a4ff24646","names":[],"sources":[]},
|
||||
{"digest":"6598cd6da253948d6b207c6374a45335804c79b576866d6215649c2d1bc85e25","names":["packages/experimental/agent-team/src/types.ts#TeamMemberSnapshot"],"sources":["packages/experimental/agent-team/src/types.ts:48"]},
|
||||
{"digest":"65a8400e451e667e5b6e34df72ceb81fca8c12330330fa72083ad40279b189ad","names":["packages/llm/llm/src/message.ts#SystemPromptMessageSource"],"sources":["packages/llm/llm/src/message.ts:35"]},
|
||||
{"digest":"66b2e4f3954442bc9a11c5aa3bfbea6a33d9ff3f7df42fa7e7b062411d394da4","names":[],"sources":[]},
|
||||
{"digest":"66ba70f6f068da443f969a0b947a013c3addd776b9b60a0a393759c19825e9a2","names":["packages/llm/llm/src/types.ts#ToolSchema"],"sources":["packages/llm/llm/src/types.ts:491"]},
|
||||
{"digest":"672c4aa2a9b736e3d6e5da6346d2e2ed5e3573f2d0baafa18e7407c9f3fee3db","names":["packages/skill/skill/src/index.ts#SkillInvocationSource"],"sources":["packages/skill/skill/src/index.ts:146"]},
|
||||
{"digest":"67d5f73ceae82f5265258142ad6cf172de2c1fef93ba551b7f0454e0a93bffe0","names":["packages/llm/llm/src/call-config.ts#LlmCallConfig"],"sources":["packages/llm/llm/src/call-config.ts:31"]},
|
||||
@@ -353,22 +343,25 @@
|
||||
{"digest":"6f611bed14b2106542480c4a230b4a83baf76dc0d8ac0cd13319a7cb8dae7675","names":[],"sources":[]},
|
||||
{"digest":"6f72ece8f317cd080c4f20a93f1bf709965f5b81ac4669528f5a023191cfcf20","names":["packages/llm/llm-retry/src/types.ts#LlmRetryStartedEventData"],"sources":["packages/llm/llm-retry/src/types.ts:43"]},
|
||||
{"digest":"6f9e00383836275e46c0a9915767f9bb561be5fc30aae490174908a93e99a912","names":[],"sources":[]},
|
||||
{"digest":"70a6380591b15f2d138ae30bb073dd2d1b64fc27cc8b9355aea1186defa1905b","names":["packages/session/session-title-llm/src/index.ts#SessionTitleLlmRequestEventData"],"sources":["packages/session/session-title-llm/src/index.ts:37"]},
|
||||
{"digest":"70b082fe78991edf13cf66e1b4d06cd2dcff9cacfd76f8cfb996bfb61939e7b2","names":[],"sources":[]},
|
||||
{"digest":"7180844e1066230c5e891f1b9ccd942423b0fe48aac6ded7eef2a285b288a732","names":[],"sources":[]},
|
||||
{"digest":"719c51f67074f97034a6c94297fe1f4b5d3c8d392c57586dab732aa5398c7a91","names":["packages/llm/llm/src/message.ts#ModelMessageSource"],"sources":["packages/llm/llm/src/message.ts:24"]},
|
||||
{"digest":"71bb3254ec8f1e491ce63b762a7b5f18709de23aa4e8abcc8b886f4b6ce051dd","names":[],"sources":["packages/llm/llm/src/assistant-stream.ts:28"]},
|
||||
{"digest":"72ec79127a9c0d0241b1106a74cc2b24c81ce467170f1c3c93f7b71a9496d227","names":[],"sources":[]},
|
||||
{"digest":"7382c4fc95fe8c5db65ca4d9da572b115d0dbb818b7f32c22ab040318ffbb4bc","names":[],"sources":[]},
|
||||
{"digest":"7404c6123fdaa591474a37979a5a8ae70d1387af7c9f09bfe568b218935a974d","names":[],"sources":["packages/core/session/src/types.ts:313"]},
|
||||
{"digest":"750a2b129d67704df675c06823c20c80b65cbae89d5aaa914fd5a72e3df395b5","names":["packages/jobs/jobs/src/types.ts#JobSettleCause"],"sources":["packages/jobs/jobs/src/types.ts:247"]},
|
||||
{"digest":"7554565be416b0342053ee6a46256c9dab07c487349b4a5f10bab1edc151c619","names":[],"sources":[]},
|
||||
{"digest":"756b5e23a5cb2c7f486f366a828f7461c88902af21125bd6810881f4ccbff6cc","names":[],"sources":[]},
|
||||
{"digest":"7580e7d96dc8475fffe813a42af499665de3d4517fcdb3bc2337d0340e98d616","names":["packages/llm/llm/src/message.ts#DeveloperMessage"],"sources":["packages/llm/llm/src/message.ts:157"]},
|
||||
{"digest":"7624ca28c61ca0eaa4f015140f3cea6e0c16cce2f2960fab5f531203d253903e","names":[],"sources":[]},
|
||||
{"digest":"763c8a20af487263a0080548274f7437ef4a86e0ba8769127d1ced10a72c664d","names":[],"sources":[]},
|
||||
{"digest":"76632533f67879dcb346fcae640540dbc89b2472b0bce88c59f7e48fc5c0e668","names":[],"sources":[]},
|
||||
{"digest":"78a9be340090b735a39980e7222ce730c972fbcf1de7c9e0aef2125884b7caee","names":[],"sources":[]},
|
||||
{"digest":"78b9204976ab9faaf133c3488b73d1dfb6f1a4bb6c0903e3473cd41a5e1e39e1","names":[],"sources":[]},
|
||||
{"digest":"79650cfa10aa3c52440328d85e8a25f0ffadc8d7efd784e3c0819d8bb74a1985","names":[],"sources":["packages/core/session/src/types.ts:214"]},
|
||||
{"digest":"79ddc907312f97cf9553d4841e8b3fc937097bd8d97900a790efad3c05255e99","names":[],"sources":["packages/todo/tool-todo/src/types.ts:33"]},
|
||||
{"digest":"7a5b68bd1a5118c827df9e2466acc5e4d16b83e3f97a2304d992958647592690","names":["packages/llm/llm/src/message.ts#MessageSource"],"sources":["packages/llm/llm/src/message.ts:136"]},
|
||||
{"digest":"7a651f3b672c52fb615f22c0ce9cb3cc5b22aad92e6bbeefb0808fd7b9233a50","names":[],"sources":[]},
|
||||
{"digest":"7af85bf70d4eafce63e739adae38ea85501e68df3a0e22f97f3a0be90fd9e4cb","names":[],"sources":[]},
|
||||
{"digest":"7b1ce60193fa8b69292e5843858d9cee7dc565dcb40d33c136e5d7e8b8d4296a","names":[],"sources":[]},
|
||||
@@ -399,7 +392,6 @@
|
||||
{"digest":"84ac8c1a66ffc697262e181f42e851259eae14038c113ca329fb4700ccdb1f7c","names":["packages/goal/goal/src/types.ts#GoalBlockReason"],"sources":["packages/goal/goal/src/types.ts:52"]},
|
||||
{"digest":"84bbfdce7d2eab5b0c53e72ff7406db856c8bfd621b965b72fd86598ba493bf7","names":[],"sources":[]},
|
||||
{"digest":"854db3efdfb0cd39d30953b28703e519c121f1115cebfffc40369fe86c406dd1","names":[],"sources":[]},
|
||||
{"digest":"85610bad3515b96db938e2353ca7fe20de4d69dc89d73cc4ffacbde37f4ed39e","names":["packages/llm/llm/src/message.ts#DeveloperMessage"],"sources":["packages/llm/llm/src/message.ts:157"]},
|
||||
{"digest":"85d6d96ff884297410ec0026bdacba835f10e56cbcc5a3b9d670739f4aa0494b","names":[],"sources":[]},
|
||||
{"digest":"85f9b505b7bdff1f61845c4cea8f36fd0fde1b62facbe87d8924d1d27e616f3a","names":[],"sources":[]},
|
||||
{"digest":"85fe96bf15d5c7559eec3bae4d6cf1a76fda9f5be05a29c2830cff560cab0c0d","names":[],"sources":[]},
|
||||
@@ -430,13 +422,11 @@
|
||||
{"digest":"930c1cd289def119d443e19dd90008916bf035f0a4d23e07241e7f050f2b89b7","names":["packages/interaction/user-approval/src/types.ts#ApprovalOutcome"],"sources":["packages/interaction/user-approval/src/types.ts:32"]},
|
||||
{"digest":"935c8d486292b13c87b57ca280eb8c58b5b2f5239be86fcd4334c33fdeb87682","names":[],"sources":[]},
|
||||
{"digest":"938f7c7357bc403ea3b281a9dd016939df7a0880fc8db12612585be574d0d615","names":[],"sources":[]},
|
||||
{"digest":"93a56a85fc8d91b52080b5b4f5f43d945cc337c048ad2076ece1dceabb7766cf","names":[],"sources":[]},
|
||||
{"digest":"93c33d9687613293f8c95d46c4d922fe9ceae83b84c384beff5c3315abe005f2","names":[],"sources":[]},
|
||||
{"digest":"93cbbc5a7fd0b1aa1ff1b9a6bb5ec52b073f48e5a5200365c45c0cd54059e1b9","names":[],"sources":["packages/interaction/user-approval/src/types.ts:55"]},
|
||||
{"digest":"93d38436347f67c9022aacbc4472e283d722bcab8eb73fc376aaf7b6a6b9fb35","names":[],"sources":[]},
|
||||
{"digest":"94c56aeb1564ad735eb773d88636b40761d063efa1610f1308004d32923f5378","names":[],"sources":[]},
|
||||
{"digest":"95080295115fbd83544520ba247b68a03790131f6a2eac323d388758cb542f65","names":[],"sources":["packages/llm/llm/src/types.ts:472"]},
|
||||
{"digest":"9529cbfe9fc86799157ea4fdd84e2d7e2daeffa8843065d29ac40acc68087681","names":[],"sources":[]},
|
||||
{"digest":"95a3ffccbf3c8afcf9a2f3b355f724da8e07e98dc47ee741166dde7f9ea058bd","names":[],"sources":[]},
|
||||
{"digest":"95c0e88fcf0bafb2087f912ad9e2369de6ae6530cc0c4c2772c96205b57f7f60","names":[],"sources":[]},
|
||||
{"digest":"9645cf93769a6dfb227bd400bd6cb9fa7bab9140f4a851e4ae92514ade6e3114","names":[],"sources":[]},
|
||||
@@ -474,6 +464,7 @@
|
||||
{"digest":"a2be0f0cb59f0d4a06557d45847d1938aced238baa77a6da416e590b8b958553","names":[],"sources":[]},
|
||||
{"digest":"a3a259a1aa5401af786ce08c4a8419681d3000d73467991b5fc563389bc4ebd2","names":[],"sources":[]},
|
||||
{"digest":"a3c6f1ea38e9a61d7a9706057ba65aabe02dfe6d9dd90d4736aa62325d874531","names":[],"sources":[]},
|
||||
{"digest":"a3e299483348f27a4787a36bb3f29cd86024c65336abc10bb3d687468302c4cf","names":["packages/session/session-title-llm/src/index.ts#SessionTitleLlmRequestEventData"],"sources":["packages/session/session-title-llm/src/index.ts:37"]},
|
||||
{"digest":"a3edd1efd1fef21b72c55e213c8a8b24196b091abde2b89db52be0b2aaae3cfa","names":[],"sources":[]},
|
||||
{"digest":"a40d12070f6f4a124f32fb3cc86e7857554702e32f0eda3080a25c4b9ac9b18c","names":[],"sources":["packages/experimental/agent-team/src/types.ts:232"]},
|
||||
{"digest":"a6567ccb2e530606b775371eb4fa31468d72084339968e8b0440a516a23b39dc","names":[],"sources":[]},
|
||||
@@ -509,7 +500,6 @@
|
||||
{"digest":"af6e173f7be819bcd0a5c8d77918649c10ce761d8a184ff472f2e01ce64eb2e0","names":[],"sources":[]},
|
||||
{"digest":"aff60ef947c18b012644852bdd0d5bfe72065e061dd563787c76c646b4a10f6b","names":[],"sources":[]},
|
||||
{"digest":"b0127044ab31a702bddfd785d345f5abd7a70876746e895ce443afa3e60ddf2d","names":[],"sources":[]},
|
||||
{"digest":"b03a3f57be0e20567f0d7127555a127326cc3af61f93b8a06fbcac8b762f93eb","names":[],"sources":[]},
|
||||
{"digest":"b062078e899958f99ae464514578b8c093924dfe34bd9a835932b420ff2150b1","names":[],"sources":[]},
|
||||
{"digest":"b0b0eb1b16490f6bee135b2377e8f8c39227974c799ad7d49ff418af23ecbc35","names":["packages/attachment/attachment/src/types.ts#ImageAttachmentRef"],"sources":["packages/attachment/attachment/src/types.ts:11"]},
|
||||
{"digest":"b158f3ff6923714807c0d73882f0b05dc87f8fa85c9e90814852d48bbc866081","names":["packages/core/session/src/types.ts#RequestContext"],"sources":["packages/core/session/src/types.ts:256"]},
|
||||
@@ -519,8 +509,10 @@
|
||||
{"digest":"b222069eea2d768065161c1147b1f2c78c1b54328c84b3586ae5c8f91b8ed35e","names":[],"sources":[]},
|
||||
{"digest":"b2245a906e13aa94f2d3cc6cf7b04cfa0267f7b7f4d468de1b00b1a314e54626","names":[],"sources":[]},
|
||||
{"digest":"b2a5c8c008a31e3dc6c3013502f2356aca13894b31c8e70601fa92f2d40d1dba","names":[],"sources":[]},
|
||||
{"digest":"b2a948a5340a9341fa3bab99507c7090c5b0456de72ec28b5b157b8df3f1d640","names":[],"sources":["packages/core/agent/src/types.ts:110"]},
|
||||
{"digest":"b2d2a01e51341a3bfec809198952c8c830a7899f4cb6ecd3c1dc0b5d9a2af943","names":["packages/experimental/agent-team/src/types.ts#TeamTaskStatus"],"sources":["packages/experimental/agent-team/src/types.ts:72"]},
|
||||
{"digest":"b3681c026a0b98e98b103f057dfd217fbe904129c090efd668253ec9aea7fece","names":[],"sources":[]},
|
||||
{"digest":"b36fd842cd004b532ce96fd5d6f5be28e017eda043131aa3cf5e69edc436108e","names":[],"sources":[]},
|
||||
{"digest":"b38f206d59bad891fa58c89f97a0036987b3defe7685acbd318fa55eb85f9751","names":[],"sources":[]},
|
||||
{"digest":"b4ec0af39fd52ed971990e42f04e5be3204882e555c409eb330f8238eec21569","names":[],"sources":[]},
|
||||
{"digest":"b5086d249e8502e9ead1d39156bb8d559bde7951cac0f14ce150345b4e42a2bf","names":[],"sources":[]},
|
||||
@@ -529,12 +521,14 @@
|
||||
{"digest":"b56f6a885da3dc394c69a3e3cc5c0cfc4da15601b63fda4989eee8f40efc5be4","names":["packages/session/session-title/src/types.ts#SessionTitleEventData"],"sources":["packages/session/session-title/src/types.ts:41"]},
|
||||
{"digest":"b57a2889408de36e4516807194c73bdecd51a92f633ccd05db81bf049200f420","names":[],"sources":[]},
|
||||
{"digest":"b57ae1b37e52bee0a21cbdace168dc6a15582bcda8c306dad962c5dcc8a8e28b","names":[],"sources":[]},
|
||||
{"digest":"b613f83572fe2fbf7259c72308cafd008f4fceea897749128a48bcd158f290aa","names":[],"sources":[]},
|
||||
{"digest":"b63b089a00b3b9357675b3e0c3d3e9aa4fdbda1fba9c91a6b0c59ffdbb89f505","names":["packages/schedule/schedule/src/types.ts#LegacyAtScheduleRecord"],"sources":["packages/schedule/schedule/src/types.ts:167"]},
|
||||
{"digest":"b6896938660a1dfe4ddd100fb3164d9f8fa57feeabfe37441a80106c9942697a","names":[],"sources":[]},
|
||||
{"digest":"b6ef9c6210be8350cd465f485cf520031fffa6bf3809c61a1e713e834c5982d0","names":[],"sources":["packages/core/session/src/types.ts:203"]},
|
||||
{"digest":"b6f94c17dd9bbd7cd57015198b7c7c88407f0e3b89faab176ca3c11c3d864d3e","names":[],"sources":[]},
|
||||
{"digest":"b70f3e81fe11b7a5f2504fb47a4502fb8d9c8f0731fdfe8ddcaf9b41f5a6e196","names":[],"sources":[]},
|
||||
{"digest":"b765ee31033cea463863faf3fc6a0a1b85c47c6a2f13fe1ce833abe56105114b","names":[],"sources":[]},
|
||||
{"digest":"b782058cef83caf3eb44a16adeef5657e4d5cdff2d50655aba418c4490670a69","names":["packages/llm/llm/src/message.ts#UserMessage"],"sources":["packages/llm/llm/src/message.ts:162"]},
|
||||
{"digest":"b79641a9d25e756636dc0c706fdf3c4583ccb7d4920e009e6e86c0759cf4de4c","names":[],"sources":[]},
|
||||
{"digest":"b79ada42962cad0190a9d465805260567621fa3a4abd757eb31e6016b52d5ab5","names":[],"sources":[]},
|
||||
{"digest":"b815d7b91cdd9fc6ccc7dcba05cfc5ce1d55fab5fc0c0801803cd3630cedb602","names":[],"sources":[]},
|
||||
@@ -544,6 +538,7 @@
|
||||
{"digest":"b9305f0ea75ccd6a6061c27fde19f2ab85534f9f3c1a717b573b077ebae0f611","names":[],"sources":[]},
|
||||
{"digest":"b978cff734e62143eb56c9125423ec275405eda969802d42aaf73ecb987d3b26","names":[],"sources":[]},
|
||||
{"digest":"b993441f8ce7d27b80e619e113e232ae8e62d3d5a8340f6bfe12d8c4c018e62f","names":[],"sources":[]},
|
||||
{"digest":"ba2a1a8f194b1bb21f270713398f6643e206e8ff5f7f26f6d36a88e3f0f0ab10","names":[],"sources":[]},
|
||||
{"digest":"ba4c40b4381e0dcdfab8fc9fc75b5c9b3e8f09ef56deeb1bec8e703b0ef8cd6d","names":[],"sources":[]},
|
||||
{"digest":"ba77b58995e36f14bb13886b0493d0a1a63d5db10b1a6cd9f6ac65a72cf832ec","names":[],"sources":[]},
|
||||
{"digest":"bab68657940075483f086fffb711682a45bcc99c43d659fbe1c36af21ac05dd7","names":[],"sources":[]},
|
||||
@@ -572,21 +567,19 @@
|
||||
{"digest":"c8e6f48878cc2a2f0dc59682280d81f407943fb503f32c64bf9ff3d9393c3eff","names":[],"sources":[]},
|
||||
{"digest":"c99e20441bf15341e9db54385e558e5c03d21dff2eb1ac08ccbf47c2d8747954","names":[],"sources":[]},
|
||||
{"digest":"ca085dba2c877feceebf3c62f9d39c6c2a4d2314d97b94b3927a780fe8fe2bb2","names":[],"sources":[]},
|
||||
{"digest":"ca146eefc6285feedfbd3e6e7078ab446e258e1a9e6d289279cac0c6fa6a1be8","names":[],"sources":[]},
|
||||
{"digest":"ca59530d1a4f3e191b4032bc4a20eded0d827db8b5a7efb27b3af9e9b456c6f2","names":[],"sources":["packages/compaction/compaction/src/types.ts:72"]},
|
||||
{"digest":"cb1c8959e1726f82f9a3d2ef2bc90bf8c451a98fd56175e956022124c770c818","names":[],"sources":[]},
|
||||
{"digest":"cbbe8377ee744964537dbafd83607219e58ba79a13f6db0d0645c7ad3d5e8a09","names":[],"sources":[]},
|
||||
{"digest":"cbca49bde16b656d5b8fbe4a8a507769f7b594c6287782b809c03814941bc5e3","names":[],"sources":[]},
|
||||
{"digest":"cd186c309e2bef305705e1d324139240f5e681f4f6a957d6a25b0225f65560df","names":[],"sources":[]},
|
||||
{"digest":"cda2345a9be9d139df49ccbd16dcba716f3440178bf20ff8b801fda1f5eb77dc","names":[],"sources":[]},
|
||||
{"digest":"cda79b839d8cc0c7a7bd09dd067de04925f6e9037080d878b65aaa5a383f117c","names":["packages/llm/llm/src/message.ts#Message"],"sources":["packages/llm/llm/src/message.ts:196"]},
|
||||
{"digest":"cdca80b8dad24d4e7b1d5a288a8475ba8d8d46be385bd2da85f122ee836f1670","names":[],"sources":[]},
|
||||
{"digest":"cdee10e87dbed8440d8b6935888624884878efc7af95402e94171b29f173dced","names":[],"sources":["packages/llm/llm-retry/src/types.ts:17"]},
|
||||
{"digest":"cef171adf021a1867d244618a3dbbaafc22beb17c7f3df3ee203393271c8c6f6","names":["packages/core/tool-executor-ptc/src/types.ts#PtcDispatchEventData"],"sources":["packages/core/tool-executor-ptc/src/types.ts:21"]},
|
||||
{"digest":"cffcdc19881ab61ec0a9ce18743996f7ac44ac8889f34dfac36ae745574aa22f","names":["packages/goal/goal/src/domain.ts#GoalClearChangeMeta"],"sources":["packages/goal/goal/src/domain.ts:35"]},
|
||||
{"digest":"d0fbb0ca1bbba059830826f33f801da1aced35a2504376d61e020bdfec8d50c0","names":[],"sources":[]},
|
||||
{"digest":"d28765f87d6b6ab408e0b2f3e7e297791b004b806d8e302c49903ebae815feb2","names":[],"sources":[]},
|
||||
{"digest":"d2cc8a54a6f1abc97f638821bc36cdd559355e6d9ceb9ad69bd63587a5ec7c0a","names":[],"sources":[]},
|
||||
{"digest":"d3e2c037628540edc7ac906a89631ebc1043f205168d002cce5d6a694053c7c4","names":[],"sources":["packages/core/agent/src/types.ts:110"]},
|
||||
{"digest":"d4b739491689cc6bb13d07ffac1a32239875abda364c0d5edd8f74faf5e9c00d","names":[],"sources":["packages/llm/llm/src/types.ts:475"]},
|
||||
{"digest":"d4c799e3d51cae1040362ba4968efc484739e14416c9c1df20c2f108b4ef2eb5","names":[],"sources":[]},
|
||||
{"digest":"d4e4d575abeb4b72d616dc65c17ac0eaa943cc135609395044c38d5afcb10e31","names":[],"sources":[]},
|
||||
@@ -605,20 +598,19 @@
|
||||
{"digest":"db874d463b0fdec77e9da1c4568f37cb70bd6596781eb93800db44fb8a116965","names":[],"sources":[]},
|
||||
{"digest":"dba54c09c6e7aafc9acbed7792ecc920d99f92d0784aeeed10af55f7fe0bc8cd","names":[],"sources":["packages/core/tool-executor-ptc/src/types.ts:68"]},
|
||||
{"digest":"dbdafceb9a900183cccc80596498d386f3bf7bddead2b8cfde68453aa4739edc","names":[],"sources":[]},
|
||||
{"digest":"dd00cdccd0ba487b92362ef67db58cd264f48c1bfd368291424a1da9a899489a","names":[],"sources":[]},
|
||||
{"digest":"dd2780e7e07684332f7a9ab047237798d260e7eaffb1321cb38eca695d184c3d","names":[],"sources":[]},
|
||||
{"digest":"dd5ee8762bd8a14b6c6bffedd1753e4e78505bb0f9ea1621018d03a54eef59d5","names":[],"sources":[]},
|
||||
{"digest":"dd6cc2bb2a8f28248347021ad93565360b196a042360b4cd16b569d3a2a91f2d","names":[],"sources":[]},
|
||||
{"digest":"dde4d210811d670552c70fa7a9864ae650cef357590ad60ef1778c9b7dd1d7bf","names":[],"sources":[]},
|
||||
{"digest":"dde0cdf9d426768b649b5a9783d2144e7f900c35ef65229cd89036dbf411d1b0","names":[],"sources":[]},
|
||||
{"digest":"de25352d2dc4196309bd84b5bac6319f6d5c898ea0e82bb5ae66c5738d0d426f","names":[],"sources":[]},
|
||||
{"digest":"de30b1fa12c75f81df6aa4096e1595296d2d04e2be14a7c29849cf8028b79048","names":[],"sources":[]},
|
||||
{"digest":"deaae5cd30987d4f49398e8f9d994c125907e7f928300745fb1dbf15f145d0e7","names":[],"sources":[]},
|
||||
{"digest":"deebfc7c62177ea840f23c6362b8615bc78ffa93377dd5d243c04e541c413af5","names":["packages/typert/protocol/src/types.ts#Principal"],"sources":["packages/typert/protocol/src/types.ts:457","packages/typert/protocol/src/types.ts:461"]},
|
||||
{"digest":"df5d9709b7db2a72510dc52052a23f0c38f39730af1504bab8bccabc14fae528","names":[],"sources":[]},
|
||||
{"digest":"df843efd87c78cf8de98f8e0d0216956cd568d0d0e56a22c853663e274aa1a18","names":[],"sources":[]},
|
||||
{"digest":"df948d3c80162763fe88eb1d98c7df5b248cb41d7b632140c0ccd5907c3328bb","names":[],"sources":[]},
|
||||
{"digest":"dfce5db4aa42b7ebe0bb79eca92553587287e18c06b9eba85cbfb9d332e26acd","names":["packages/experimental/agent-team/src/types.ts#TeamMemberPhase"],"sources":["packages/experimental/agent-team/src/types.ts:45"]},
|
||||
{"digest":"e0a787e6ec76c7c94fecbc501b489164ab0293db05bc947914077ad01e674f05","names":[],"sources":[]},
|
||||
{"digest":"e1ba710db2f3e4e4d397b921fafedb5dd5ad5d16efc0393f0667160cb02f79e3","names":[],"sources":[]},
|
||||
{"digest":"e2ad8f5bcd813f268ffef1b10a12d7ddd2b8ced8b9b6d0275b3f6b7ed094a187","names":[],"sources":[]},
|
||||
{"digest":"e2d0367e5716bc188435e51718ebff8ce873190625fa93b1c5331102d98758fa","names":[],"sources":[]},
|
||||
{"digest":"e2f9a41e0989f54ed8cee80f8db2bcf9d60a5c810dc9d45b83fa050b9dce7602","names":[],"sources":[]},
|
||||
@@ -630,7 +622,6 @@
|
||||
{"digest":"e42b0f40b5d0b628c6e1c44a8fb9eda0780037a81959e1b93d2dfb47b46b0e87","names":[],"sources":[]},
|
||||
{"digest":"e438a9d4fb883b3e4a8d9fc8913aa1550ed50eb384bfbf943100a5605b537498","names":[],"sources":[]},
|
||||
{"digest":"e481c46af3813e0010558e93f578b2986acd658404cec2d1679e3ac2a6c48654","names":[],"sources":["packages/core/session/src/types.ts:299"]},
|
||||
{"digest":"e49519b11e614a05cf292f011205ebb42b94d5d0b91a8532cd57fd4a745f5c8d","names":[],"sources":[]},
|
||||
{"digest":"e4c18e294232c3ba6c9f1999f168263cc55956147cfe4121720899be8e52edd1","names":[],"sources":["packages/core/session/src/types.ts:363"]},
|
||||
{"digest":"e4cac694f8b6e1d52e48c699464f1c4c26111ef87e558f7931040d00fdc8d486","names":[],"sources":[]},
|
||||
{"digest":"e5d3828df1ec3e2a66879de0659e0f4866d9cfffc00825ee731a66f8a0c03d98","names":[],"sources":[]},
|
||||
@@ -641,6 +632,7 @@
|
||||
{"digest":"e7ce49f12953583fad217bf80fb9f1463acff2c3e9471a823782661675fb124c","names":[],"sources":[]},
|
||||
{"digest":"e7e154d47d5fbc5366330fb4dade1f108c6dfe4335044d21ded14b7bf1dce084","names":[],"sources":[]},
|
||||
{"digest":"e7e8f1318170b8284f16ab45a557afd4675c96071c0f2a456636481dab20b427","names":[],"sources":[]},
|
||||
{"digest":"e7f4cbb3a57f4cbdb61ea41e95bcba626ad1fff6bb9b1e063b1d50a32da6e864","names":[],"sources":[]},
|
||||
{"digest":"e8de0f457fed5b9ff94dc4950b59ef75fd8ba8af665cc7899485924a62653367","names":[],"sources":[]},
|
||||
{"digest":"e95f957154b2b1b58692af53d4131180b6dd19e2264869f876dbaa959991494e","names":[],"sources":[]},
|
||||
{"digest":"ea08ec1df0c33108fd03345b9af199cf04dea450aa045d3c683f216311403403","names":[],"sources":["packages/experimental/agent-team/src/types.ts:234"]},
|
||||
@@ -656,6 +648,7 @@
|
||||
{"digest":"ef11a3b7fa2033ae4279545ff8a8a2ee4e301b9b73e5b91654c48e6d08283545","names":[],"sources":["packages/core/session/src/types.ts:301","packages/core/session/src/types.ts:303"]},
|
||||
{"digest":"ef226a90ddac6cd8e631a3a337a3a3e27f9494be92befb7c718b404681d75e21","names":[],"sources":[]},
|
||||
{"digest":"ef4f00923b9edbae15c7ef05320280bf61147ca17146cf59690359bfd5e5da45","names":[],"sources":[]},
|
||||
{"digest":"efa1a091017ce533e38b0ef3e14d11a5c102ff1793229b18dad719a4268d9adc","names":[],"sources":[]},
|
||||
{"digest":"f05fb85e715af4ab4de0b6ba111166dd0435bd8bb74a0fa0f32b9d174113fc7c","names":[],"sources":[]},
|
||||
{"digest":"f09e5e7acf5ff5ccd193ff2eeec015fa2ff7c29d98bc465f8c3302058d47e29b","names":["packages/core/agent/src/types.ts#ModelSelection"],"sources":["packages/core/agent/src/types.ts:79"]},
|
||||
{"digest":"f1687f982fa3d41ef29e159feed154ecd13af4dd209acaee16038f223f2e9402","names":["packages/core/session/src/types.ts#TurnEndReason"],"sources":["packages/core/session/src/types.ts:234"]},
|
||||
@@ -681,7 +674,6 @@
|
||||
{"digest":"f88f1b7b6bb733f685f5fb6a8744a5db9199fa53c90463ea1a33bad51153671d","names":[],"sources":[]},
|
||||
{"digest":"f90eb4ab2d3897bc20c521a038e3119d581f791ec974b1a0004f63a8ab9e232d","names":[],"sources":["packages/core/session/src/types.ts:290","packages/deliverables/workspace-changes/src/types.ts:106"]},
|
||||
{"digest":"f97f47b0eb87905ed77cc27c5e4ed75ef805cb372c98905253709de1aab9b63c","names":[],"sources":[]},
|
||||
{"digest":"f99e707d67fd708b9c282bad0428e8bc8c69777d93d283bf152f20fd9eb3e36f","names":[],"sources":[]},
|
||||
{"digest":"f9cfc89e8fe085b4fcc9cd32b74b6f103608c54d7d8cd97b47c01de34f252ba3","names":[],"sources":[]},
|
||||
{"digest":"fa87537f4a9c1e25602990a8bf686b383e9e00352ec8946e16ae24ba7c1625be","names":["packages/llm/llm/src/message.ts#AssistantMessage"],"sources":["packages/llm/llm/src/message.ts:167"]},
|
||||
{"digest":"fab2bb09bc5e3b9db0685e8f5500b029af1a2b33e70bc703c1d5d0f596fbc1fd","names":["packages/sandbox/sandbox/src/index.ts#SandboxMode"],"sources":["packages/sandbox/sandbox/src/index.ts:30"]},
|
||||
@@ -706,9 +698,9 @@
|
||||
"023a355b2be0d688": {"kind":"object","properties":[{"name":"kind","type":"254dce209e735f9c","optional":false}],"indices":[]},
|
||||
"02b2c23f2d94b028": {"kind":"object","properties":[{"name":"kind","type":"c5687b1313206a6f","optional":false}],"indices":[]},
|
||||
"0341d4c3dfcd5325": {"kind":"literal","value":"product-interaction"},
|
||||
"05205074b24d8340": {"kind":"literal","value":"action-cards"},
|
||||
"05a2796621b1ee6c": {"kind":"literal","value":"unknown"},
|
||||
"05d2ae1e0c7f8770": {"kind":"union","types":["1571525adc95a24e","9e07693fd7cd9bab"]},
|
||||
"062f94b162cfd50f": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"e1ba710db2f3e4e4","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"0657d3ca5ac4e7bf": {"kind":"primitive","type":"number"},
|
||||
"07e1a58c58b593f5": {"kind":"object","properties":[{"name":"model","type":"4cd48f3e5108bd6e","optional":false},{"name":"provider","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"07eccc9ea2f9b543": {"kind":"literal","value":"security-privacy-permission"},
|
||||
@@ -750,7 +742,6 @@
|
||||
"15495614ccfa9cbd": {"kind":"literal","value":"codex"},
|
||||
"1571525adc95a24e": {"kind":"literal","value":"never"},
|
||||
"15d5dfdd822aa35e": {"kind":"object","properties":[{"name":"data","type":"54f9276a1617d7c1","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"e95f957154b2b1b5","optional":false}],"indices":[]},
|
||||
"16a51dd31994f8d8": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"93a56a85fc8d91b5","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"16d0507cb94b4cfc": {"kind":"literal","value":"relay"},
|
||||
"17aae616ef020b8b": {"kind":"literal","value":"at"},
|
||||
"17d1afb770d99419": {"kind":"object","properties":[{"name":"inherited","type":"dacf3d5f3e4ff619","optional":true}],"indices":[]},
|
||||
@@ -764,13 +755,10 @@
|
||||
"1a2718b00937b236": {"kind":"literal","value":"deliverables/presented"},
|
||||
"1a3440e357738270": {"kind":"object","properties":[{"name":"agentPreset","type":"4cd48f3e5108bd6e","optional":true},{"name":"createdAt","type":"0657d3ca5ac4e7bf","optional":false},{"name":"cwd","type":"4cd48f3e5108bd6e","optional":true},{"name":"delegationDepth","type":"0657d3ca5ac4e7bf","optional":true},{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"isSeeded","type":"aa93010d0e521ad7","optional":false},{"name":"origin","type":"aacda84a69739238","optional":true},{"name":"parentSession","type":"4cd48f3e5108bd6e","optional":true},{"name":"version","type":"af6e173f7be819bc","optional":false}],"indices":[]},
|
||||
"1ab2ef1296f157ba": {"kind":"union","types":["511801b0a6470d98","a2be0f0cb59f0d4a"]},
|
||||
"1adeb5417a9565c5": {"kind":"object","properties":[{"name":"data","type":"4ccafbd2333db70a","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"sourceEventSeqs","type":"5d03ba38734809bc","optional":true},{"name":"surfaceOp","type":"335e242de1fcc17b","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"1379f0b72275994d","optional":false}],"indices":[]},
|
||||
"1af4d670721bd327": {"kind":"object","properties":[{"name":"form","type":"6f9e00383836275e","optional":false},{"name":"kind","type":"93a56a85fc8d91b5","optional":false},{"name":"sections","type":"c748fb42c80a1200","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"1b5649238876e288": {"kind":"object","properties":[{"name":"kind","type":"d6e654b88b584fcd","optional":false}],"indices":[]},
|
||||
"1b912703e2d64f91": {"kind":"object","properties":[{"name":"data","type":"b56f6a885da3dc39","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"7a651f3b672c52fb","optional":false}],"indices":[]},
|
||||
"1c2686c0682e7bc5": {"kind":"literal","value":"session/end-seed"},
|
||||
"1c5a58f4599bd4a9": {"kind":"literal","value":"system/message"},
|
||||
"1ca126460ab395a2": {"kind":"object","properties":[{"name":"data","type":"3b08753672126186","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"sourceEventSeqs","type":"5d03ba38734809bc","optional":true},{"name":"surfaceOp","type":"335e242de1fcc17b","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"de25352d2dc41963","optional":false}],"indices":[]},
|
||||
"1ccb56061942f5cc": {"kind":"object","properties":[{"name":"interrupted","type":"dacf3d5f3e4ff619","optional":true},{"name":"message","type":"fa87537f4a9c1e25","optional":false},{"name":"step","type":"0657d3ca5ac4e7bf","optional":false},{"name":"stream","type":"84bbfdce7d2eab5b","optional":false},{"name":"turn","type":"0657d3ca5ac4e7bf","optional":false},{"name":"usage","type":"fec5442b9ee4122e","optional":true}],"indices":[]},
|
||||
"1cde1bedde79c5e8": {"kind":"object","properties":[{"name":"imageIndexes","type":"5d03ba38734809bc","optional":false},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"1d5f04a03ea75fc8": {"kind":"literal","value":"model/selection"},
|
||||
@@ -786,7 +774,6 @@
|
||||
"1f1385dbc3e875c0": {"kind":"literal","value":"repeat-tool-reminder"},
|
||||
"1f8c126cfab3df81": {"kind":"union","types":["4bb451330ff699f3","6c03546143cdf6ae","6c5a37d42ebdb12d","ada310bf0bdb8fed","eaa71be0fbf0f702"]},
|
||||
"1fdad624334d3548": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"bb94f3217aa56c88","optional":false}],"indices":[]},
|
||||
"2013e9f315078a16": {"kind":"array","element":"3b08753672126186"},
|
||||
"20a57544bbf204da": {"kind":"object","properties":[{"name":"active","type":"aa93010d0e521ad7","optional":false}],"indices":[]},
|
||||
"2142e391b9ccb60d": {"kind":"literal","value":"cancelled"},
|
||||
"2152caf1a71e588e": {"kind":"object","properties":[{"name":"kind","type":"2e4debca12f2c449","optional":false},{"name":"messageId","type":"4cd48f3e5108bd6e","optional":false},{"name":"senderId","type":"4cd48f3e5108bd6e","optional":false},{"name":"senderName","type":"4cd48f3e5108bd6e","optional":false},{"name":"teamId","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
@@ -826,8 +813,8 @@
|
||||
"30d5a537b2966857": {"kind":"union","types":["1b5649238876e288","ada310bf0bdb8fed","b81e9de81a481b24"]},
|
||||
"312aee2f0c42aabb": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"d9edf1862e4471d6","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"31907de956375182": {"kind":"object","properties":[{"name":"compactionId","type":"4cd48f3e5108bd6e","optional":false},{"name":"kind","type":"6b23ed9ce1b397e6","optional":false},{"name":"sourceCommandId","type":"4cd48f3e5108bd6e","optional":true}],"indices":[]},
|
||||
"3247e566f4340029": {"kind":"object","properties":[{"name":"form","type":"6f9e00383836275e","optional":false},{"name":"kind","type":"05205074b24d8340","optional":false},{"name":"sections","type":"c748fb42c80a1200","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"326a9bfda27dda58": {"kind":"object","properties":[{"name":"maxTokens","type":"dacf3d5f3e4ff619","optional":true},{"name":"reasoningEffort","type":"dacf3d5f3e4ff619","optional":true}],"indices":[]},
|
||||
"328eb9a6ac89d6d8": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"93a56a85fc8d91b5","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"3305a4bb6b6c29b4": {"kind":"union","types":["0341d4c3dfcd5325","07eccc9ea2f9b543","5bd310104cfe448e","7180844e1066230c","9d80129e13edfb6f","e4cac694f8b6e1d5","f05fb85e715af4ab"]},
|
||||
"33341aac09312300": {"kind":"union","types":["3860b4757d512a28","487b65c37bfedb8b","71bb3254ec8f1e49","e72269f931559e90"]},
|
||||
"335e242de1fcc17b": {"kind":"union","types":["bcf0caf62d964b2f","e438a9d4fb883b3e"]},
|
||||
@@ -845,7 +832,6 @@
|
||||
"390eed1028aba027": {"kind":"union","types":["b1f62380f6746fed","df5d9709b7db2a72"]},
|
||||
"39cf2d3ff8bac81c": {"kind":"object","properties":[{"name":"callId","type":"4cd48f3e5108bd6e","optional":false},{"name":"rootCallId","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"3b04790e08b35241": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"0fe52387f6505270","optional":false}],"indices":[]},
|
||||
"3b08753672126186": {"kind":"object","properties":[{"name":"content","type":"b52f215a6cd69105","optional":false},{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"role","type":"68f44f59e91c4139","optional":false},{"name":"source","type":"576b520757158af6","optional":false,"compatibility":{"version":1,"policy":"session-source-attribution","binding":"session.user-message.source","discriminator":"kind","unknownKinds":"preserve","attributionKinds":["personalized-pages","plugin-recommendations","tmux-context","user-question-reply","working-directory"]}}],"indices":[]},
|
||||
"3b1be838223869fe": {"kind":"object","properties":[{"name":"data","type":"e4c18e294232c3ba","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"c589e938cc0e4989","optional":false}],"indices":[]},
|
||||
"3b4f2c9ef2c1217e": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"bb94f3217aa56c88","optional":false}],"indices":[]},
|
||||
"3bc287e765d58dc3": {"kind":"literal","value":"normal"},
|
||||
@@ -870,6 +856,7 @@
|
||||
"44818000e56acb97": {"kind":"literal","value":"feedback/message-delete"},
|
||||
"44c8c77aa9aa100b": {"kind":"literal","value":"subagent/catalog"},
|
||||
"4513e088d43e6c68": {"kind":"object","properties":[{"name":"data","type":"ef11a3b7fa2033ae","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"2c64d4bc7264fd3f","optional":false}],"indices":[]},
|
||||
"45f005e6bbb76452": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"05205074b24d8340","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"45f2a07ea9457312": {"kind":"object","properties":[{"name":"callId","type":"4cd48f3e5108bd6e","optional":true},{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"reason","type":"4cd48f3e5108bd6e","optional":true},{"name":"toolName","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"477614bca595a9e7": {"kind":"object","properties":[{"name":"targets","type":"9e2c06d8653585b3","optional":false}],"indices":[]},
|
||||
"47e5d84f1a93450a": {"kind":"literal","value":"session-log-deepseek/delivery-accepted"},
|
||||
@@ -886,7 +873,6 @@
|
||||
"4b259f7f8f0a44ad": {"kind":"object","properties":[{"name":"content","type":"b52f215a6cd69105","optional":false},{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"isError","type":"aa93010d0e521ad7","optional":true},{"name":"role","type":"a13d8f379222ece8","optional":false},{"name":"source","type":"d9c462b9f62fdd3e","optional":false},{"name":"toolCallId","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"4b7ddaf3710b88ff": {"kind":"array","element":"a99f76fd149051c3"},
|
||||
"4bb451330ff699f3": {"kind":"object","properties":[{"name":"kind","type":"b38f206d59bad891","optional":false}],"indices":[]},
|
||||
"4ccafbd2333db70a": {"kind":"object","properties":[{"name":"headerSeq","type":"0657d3ca5ac4e7bf","optional":true},{"name":"message","type":"85610bad3515b96d","optional":false},{"name":"step","type":"0657d3ca5ac4e7bf","optional":false},{"name":"turn","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"4cd48f3e5108bd6e": {"kind":"primitive","type":"string"},
|
||||
"4e011753f8263f43": {"kind":"literal","value":"team/message/queued"},
|
||||
"4e44c9118152f682": {"kind":"literal","value":"text"},
|
||||
@@ -906,7 +892,6 @@
|
||||
"5302e76315127761": {"kind":"object","properties":[{"name":"error","type":"a81059ca06999da1","optional":true},{"name":"message","type":"4b259f7f8f0a44ad","optional":false},{"name":"meta","type":"c592ce75aab73fca","optional":true},{"name":"step","type":"0657d3ca5ac4e7bf","optional":false},{"name":"turn","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"530da6c0267813bb": {"kind":"union","types":["34d1ab5c5df37818","4f507598cf476214","e7ce49f12953583f","f789af5ab844827e"]},
|
||||
"53750b9abf61efb7": {"kind":"object","properties":[{"name":"data","type":"f731ffe80810b028","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"44c8c77aa9aa100b","optional":false}],"indices":[]},
|
||||
"53bb37430d38c725": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"e1ba710db2f3e4e4","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"53cf1704ae0709c7": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"99e7e7d7fed55ae6","optional":false}],"indices":[]},
|
||||
"54f9276a1617d7c1": {"kind":"object","properties":[{"name":"step","type":"0657d3ca5ac4e7bf","optional":false},{"name":"stream","type":"84bbfdce7d2eab5b","optional":false},{"name":"turn","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"557e148d30b79ee4": {"kind":"literal","value":"agent-preset/selected"},
|
||||
@@ -914,33 +899,32 @@
|
||||
"56b7c047694875a8": {"kind":"object","properties":[{"name":"kind","type":"69d238a6e9b08d67","optional":false}],"indices":[]},
|
||||
"570e850224346133": {"kind":"literal","value":"tool/result"},
|
||||
"576a2de8355eb098": {"kind":"object","properties":[{"name":"compactionId","type":"4cd48f3e5108bd6e","optional":false},{"name":"maxTokens","type":"0657d3ca5ac4e7bf","optional":true},{"name":"model","type":"4cd48f3e5108bd6e","optional":false},{"name":"provider","type":"4cd48f3e5108bd6e","optional":false},{"name":"rawOutput","type":"b52f215a6cd69105","optional":true},{"name":"shadowedRange","type":"9e41386b3a0c9572","optional":false},{"name":"shadowedSeqs","type":"5d03ba38734809bc","optional":false},{"name":"shadowedTokenCount","type":"0657d3ca5ac4e7bf","optional":false},{"name":"sourceCommandId","type":"4cd48f3e5108bd6e","optional":true},{"name":"summary","type":"b52f215a6cd69105","optional":false},{"name":"usage","type":"fec5442b9ee4122e","optional":true}],"indices":[]},
|
||||
"576b520757158af6": {"kind":"union","types":["0203243b72fc867a","022623b9ef98ec47","02b2c23f2d94b028","062f94b162cfd50f","0ed8d1108fe7a5e1","0eeb17e1df89b1eb","11638dc58a31496f","16a51dd31994f8d8","1938c8c20f1cba7c","1af4d670721bd327","1e709346005826eb","1fdad624334d3548","2152caf1a71e588e","2235d957bf4b7c6c","224aa11d4d5f88c4","24ce31aa528272e5","260523b412c19ad8","28936c614bd4e7e2","290f32bfd81ff85a","297fbd8067d7815a","2aad1179f9576314","312aee2f0c42aabb","31907de956375182","328eb9a6ac89d6d8","3b04790e08b35241","3b4f2c9ef2c1217e","3bdb8dc6989655b0","408927267422a7b2","4991dfc415c9efeb","49dab019d00e8c26","4a9bef9f27a94252","4e97c3d85c0fc817","52c6113cb0e53f34","53bb37430d38c725","53cf1704ae0709c7","5654685d7557ec74","58015da1c1950a66","5b25a1523822e01a","5bb69b88517f6214","5bc66269cfaf614c","5c98a6a7047c3589","5cdbf342b7748d15","5d7a64ed6aac5551","6085488d223aeffd","6292bcbedaa97fea","65a8400e451e667e","66b2e4f3954442bc","672c4aa2a9b736e3","6ccb6bc423fb3952","6dacb1584f2bfbe2","6ea608bdc8a7a63d","6f22a9d02b9a1f11","6f44f32be9bcd9a8","719c51f67074f970","7554565be416b034","756b5e23a5cb2c7f","7df62978a2b7de85","7eaef7a763ba5b94","7f959241c24128b4","80677c8c8b804189","825ca23416b1ea9d","8338ee303e2bd448","854db3efdfb0cd39","85fe96bf15d5c755","8620189c8e335827","87b1a33564b9a4d6","88841202942c7683","8a046b52331959aa","8c1c4f72755a78ea","8c627d7a45fa406c","8f324cea3916c051","8fcb0b44a575e998","9529cbfe9fc86799","96bfb916a727cd44","99135d8a39379779","99f0e98184709ad1","9edc162949abf93b","9f65c43e340bba31","a15a19ef63cf5d1b","a16e567c8cd2c55c","a2066bd52f61218b","a3c6f1ea38e9a61d","aa2bf9e82b9fdeb9","aae343bc3d663c83","ada310bf0bdb8fed","ade057f4fdc387ae","b03a3f57be0e2056","b062078e899958f9","b2a5c8c008a31e3d","b3681c026a0b98e9","b4ec0af39fd52ed9","b6f94c17dd9bbd7c","b70f3e81fe11b7a5","b79641a9d25e7566","ba4c40b4381e0dcd","baccc97ec34be6c4","c5228b7a55498d84","c55827fba7018198","ca146eefc6285fee","cb1c8959e1726f82","cda2345a9be9d139","d2cc8a54a6f1abc9","d85590a5675c6e2f","d9c462b9f62fdd3e","db06ef35b27a3842","dba54c09c6e7aafc","dd5ee8762bd8a14b","dd6cc2bb2a8f2824","deaae5cd30987d4f","df948d3c80162763","edbbfff1128099fd","ee577a0cc18664c9","f230c0b583e23b25","f29d63336e8266d8","f4a66f654996c093","f56c5b59ca016131","f6329fb30c7ea801","f6605d6c57933aea","f6afe41e3926f422","f7283223aacdc39b","f97f47b0eb87905e","f99e707d67fd708b","fc2ae6962f9f8801","fcf81d3c58c13593","fe1a7acdeed4d0f5"]},
|
||||
"5776e5553ff2dfe3": {"kind":"union","types":["7af85bf70d4eafce","998f22585a5d73ec","e3e77b26f0148755"]},
|
||||
"57f3f606ff8b6c84": {"kind":"literal","value":"stop"},
|
||||
"58015da1c1950a66": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"24b10f7cdae64928","optional":false}],"indices":[]},
|
||||
"5808e36c95355f0e": {"kind":"union","types":["1d76406cbb2ddadb","287211846beea1ec","693f4952fb5565da","8e31bb958e9b015e","ab7ec5f9eb2c6dfa"]},
|
||||
"587bb11da730e06a": {"kind":"literal","value":"session/title-llm-request"},
|
||||
"589d0d91239681f8": {"kind":"literal","value":"developer"},
|
||||
"58b122df513aeaf7": {"kind":"object","properties":[{"name":"data","type":"b782058cef83caf3","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"sourceEventSeqs","type":"5d03ba38734809bc","optional":true},{"name":"surfaceOp","type":"335e242de1fcc17b","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"de25352d2dc41963","optional":false}],"indices":[]},
|
||||
"58f94390b982f8a5": {"kind":"literal","value":"image/png"},
|
||||
"5abab3a27fd27366": {"kind":"literal","value":"text-delta"},
|
||||
"5b232a9b9bfcc0fc": {"kind":"literal","value":"after"},
|
||||
"5b25a1523822e01a": {"kind":"object","properties":[{"name":"kind","type":"e1ba710db2f3e4e4","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"5b6fb1f226ff5640": {"kind":"object","properties":[{"name":"commandId","type":"4cd48f3e5108bd6e","optional":false},{"name":"kind","type":"1ab2ef1296f157ba","optional":false},{"name":"sourceEventSeq","type":"0657d3ca5ac4e7bf","optional":true},{"name":"text","type":"4cd48f3e5108bd6e","optional":true}],"indices":[]},
|
||||
"5bb69b88517f6214": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"99e7e7d7fed55ae6","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"5bc66269cfaf614c": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"d9edf1862e4471d6","optional":false}],"indices":[]},
|
||||
"5bd310104cfe448e": {"kind":"literal","value":"resource-cost"},
|
||||
"5c45bf4c544a7211": {"kind":"object","properties":[{"name":"data","type":"8a9c990773f798ea","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"ae63d9d1080ed894","optional":false}],"indices":[]},
|
||||
"5c98a6a7047c3589": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"93a56a85fc8d91b5","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"5cb63db9fe57dc09": {"kind":"literal","value":"teardown"},
|
||||
"5cdbf342b7748d15": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"f68c335306535a00","optional":false}],"indices":[]},
|
||||
"5d00abf938272f22": {"kind":"array","element":"b782058cef83caf3"},
|
||||
"5d03ba38734809bc": {"kind":"array","element":"0657d3ca5ac4e7bf"},
|
||||
"5d17f27a1ef9f702": {"kind":"literal","value":"tool-workflow/agent-end"},
|
||||
"5d542ac7bdf13310": {"kind":"object","properties":[{"name":"childCreatedAt","type":"0657d3ca5ac4e7bf","optional":false},{"name":"childId","type":"4cd48f3e5108bd6e","optional":false},{"name":"label","type":"4cd48f3e5108bd6e","optional":true},{"name":"mode","type":"d28765f87d6b6ab4","optional":false},{"name":"version","type":"93d38436347f67c9","optional":false}],"indices":[]},
|
||||
"5d7a64ed6aac5551": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"8067b0d232c350f1","optional":false}],"indices":[]},
|
||||
"5dd766ccd1702a11": {"kind":"object","properties":[{"name":"shadowedRange","type":"9e41386b3a0c9572","optional":false},{"name":"shadowedSeqs","type":"5d03ba38734809bc","optional":false},{"name":"shadowedTokenCount","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"5e6db6e24948d4a8": {"kind":"object","properties":[{"name":"data","type":"17d1afb770d99419","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"1c2686c0682e7bc5","optional":false}],"indices":[]},
|
||||
"5e88c0eb7dd6462d": {"kind":"union","types":["09f3f8dc417f2782","3b08753672126186","4b259f7f8f0a44ad","85610bad3515b96d","fa87537f4a9c1e25"]},
|
||||
"5ebce1317eacd2c1": {"kind":"literal","value":"subagent/descriptor"},
|
||||
"5ef58f2a1bdc576c": {"kind":"object","properties":[{"name":"data","type":"7404c6123fdaa591","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"sourceEventSeqs","type":"5d03ba38734809bc","optional":true},{"name":"surfaceOp","type":"335e242de1fcc17b","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"1379f0b72275994d","optional":false}],"indices":[]},
|
||||
"5f2117d1856a5ab4": {"kind":"object","properties":[{"name":"code","type":"4cd48f3e5108bd6e","optional":false},{"name":"message","type":"4cd48f3e5108bd6e","optional":false},{"name":"offloadImages","type":"0657d3ca5ac4e7bf","optional":true},{"name":"providerRetryAfterMs","type":"0657d3ca5ac4e7bf","optional":true},{"name":"requestId","type":"4cd48f3e5108bd6e","optional":true},{"name":"status","type":"0657d3ca5ac4e7bf","optional":true}],"indices":[]},
|
||||
"5f26a6c20b37632f": {"kind":"object","properties":[{"name":"data","type":"9a410ddf56792b2b","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"ad92f473a03ae725","optional":false}],"indices":[]},
|
||||
"5f758f3de5f00c18": {"kind":"object","properties":[{"name":"label","type":"4cd48f3e5108bd6e","optional":true},{"name":"mode","type":"d28765f87d6b6ab4","optional":false},{"name":"provider","type":"4cd48f3e5108bd6e","optional":false},{"name":"version","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
@@ -952,10 +936,8 @@
|
||||
"62e6a429ff3f390a": {"kind":"union","types":["1d8798b1a5e8c545","1e346446e183ee76","34d1ab5c5df37818","7624ca28c61ca0ea","ad22a5ca5bbaab2e","d9196086e41e4dd5"]},
|
||||
"62ecb62dc0fe1b5e": {"kind":"literal","value":"next-turn"},
|
||||
"6487b10ba7542f3c": {"kind":"object","properties":[{"name":"agentModel","type":"4cd48f3e5108bd6e","optional":true},{"name":"agentProvider","type":"4cd48f3e5108bd6e","optional":true},{"name":"agentReasoningEffort","type":"4cd48f3e5108bd6e","optional":true},{"name":"label","type":"4cd48f3e5108bd6e","optional":false},{"name":"mode","type":"e5d3828df1ec3e2a","optional":false},{"name":"persona","type":"4cd48f3e5108bd6e","optional":true},{"name":"provider","type":"4cd48f3e5108bd6e","optional":false},{"name":"toolFilter","type":"3cfc3a56502da1f8","optional":true},{"name":"version","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"651a11c7869dfbe7": {"kind":"object","properties":[{"name":"data","type":"70a6380591b15f2d","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"587bb11da730e06a","optional":false}],"indices":[]},
|
||||
"6598cd6da253948d": {"kind":"object","properties":[{"name":"context","type":"50cf02d875f8a1f1","optional":false},{"name":"description","type":"4cd48f3e5108bd6e","optional":false},{"name":"error","type":"4cd48f3e5108bd6e","optional":true},{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"name","type":"4cd48f3e5108bd6e","optional":false},{"name":"phase","type":"dfce5db4aa42b7eb","optional":false},{"name":"provider","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"65a8400e451e667e": {"kind":"object","properties":[{"name":"kind","type":"09655b34d7f3cf1e","optional":false}],"indices":[]},
|
||||
"66b2e4f3954442bc": {"kind":"object","properties":[{"name":"form","type":"6f9e00383836275e","optional":false},{"name":"kind","type":"e1ba710db2f3e4e4","optional":false},{"name":"sections","type":"c748fb42c80a1200","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"66ba70f6f068da44": {"kind":"object","properties":[{"name":"deferLoading","type":"dacf3d5f3e4ff619","optional":true},{"name":"description","type":"4cd48f3e5108bd6e","optional":false},{"name":"name","type":"4cd48f3e5108bd6e","optional":false},{"name":"parameters","type":"0aa62ab51b36c0e6","optional":false}],"indices":[]},
|
||||
"672c4aa2a9b736e3": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"1922cd79a70806c1","optional":false},{"name":"name","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"67d5f73ceae82f52": {"kind":"object","properties":[{"name":"maxTokens","type":"0657d3ca5ac4e7bf","optional":true},{"name":"model","type":"4cd48f3e5108bd6e","optional":false},{"name":"provider","type":"4cd48f3e5108bd6e","optional":false},{"name":"reasoningEffort","type":"4cd48f3e5108bd6e","optional":true},{"name":"stop","type":"93c33d9687613293","optional":true},{"name":"temperature","type":"0657d3ca5ac4e7bf","optional":true}],"indices":[]},
|
||||
@@ -985,22 +967,25 @@
|
||||
"6f611bed14b21065": {"kind":"literal","value":"web/deepseek-search-llm-request"},
|
||||
"6f72ece8f317cd08": {"kind":"object","properties":[{"name":"retry","type":"0657d3ca5ac4e7bf","optional":false},{"name":"retryId","type":"4cd48f3e5108bd6e","optional":false},{"name":"step","type":"0657d3ca5ac4e7bf","optional":false},{"name":"turn","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"6f9e00383836275e": {"kind":"literal","value":"snapshot"},
|
||||
"70a6380591b15f2d": {"kind":"object","properties":[{"name":"maxTokens","type":"0657d3ca5ac4e7bf","optional":false},{"name":"messageSeqs","type":"5d03ba38734809bc","optional":false},{"name":"messages","type":"e49519b11e614a05","optional":false},{"name":"reasoningEffort","type":"4cd48f3e5108bd6e","optional":true},{"name":"route","type":"07e1a58c58b593f5","optional":false},{"name":"system","type":"4cd48f3e5108bd6e","optional":false},{"name":"titleProvider","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"70b082fe78991edf": {"kind":"literal","value":"request/context"},
|
||||
"7180844e1066230c": {"kind":"literal","value":"service-stability"},
|
||||
"719c51f67074f970": {"kind":"object","properties":[{"name":"kind","type":"2765e9119edf5816","optional":false},{"name":"model","type":"4cd48f3e5108bd6e","optional":false},{"name":"provider","type":"4cd48f3e5108bd6e","optional":false},{"name":"replayState","type":"bbc5696e3f13c758","optional":true}],"indices":[]},
|
||||
"71bb3254ec8f1e49": {"kind":"object","properties":[{"name":"dt","type":"5d03ba38734809bc","optional":false},{"name":"index","type":"0657d3ca5ac4e7bf","optional":false},{"name":"texts","type":"93c33d9687613293","optional":false},{"name":"time0","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"688e853dc149f0d3","optional":false}],"indices":[]},
|
||||
"72ec79127a9c0d02": {"kind":"array","element":"c592ce75aab73fca"},
|
||||
"7382c4fc95fe8c5d": {"kind":"literal","value":"remove"},
|
||||
"7404c6123fdaa591": {"kind":"object","properties":[{"name":"headerSeq","type":"0657d3ca5ac4e7bf","optional":true},{"name":"message","type":"7580e7d96dc8475f","optional":false},{"name":"step","type":"0657d3ca5ac4e7bf","optional":false},{"name":"turn","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"750a2b129d67704d": {"kind":"union","types":["5cb63db9fe57dc09","6cf082d0fb6034de","bab6865794007548"]},
|
||||
"7554565be416b034": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"2f3f201c8846e19c","optional":false}],"indices":[]},
|
||||
"756b5e23a5cb2c7f": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"8067b0d232c350f1","optional":false}],"indices":[]},
|
||||
"7580e7d96dc8475f": {"kind":"object","properties":[{"name":"content","type":"b52f215a6cd69105","optional":false},{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"role","type":"589d0d91239681f8","optional":false},{"name":"source","type":"7a5b68bd1a5118c8","optional":false,"compatibility":{"version":1,"policy":"session-source-attribution","binding":"session.developer-message.source","discriminator":"kind","unknownKinds":"preserve","attributionKinds":["action-cards","tmux-context","user-question-reply","working-directory"]}}],"indices":[]},
|
||||
"7624ca28c61ca0ea": {"kind":"literal","value":"create"},
|
||||
"763c8a20af487263": {"kind":"object","properties":[{"name":"data","type":"7d226b9fd95b4ba2","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"237c004c73b6b288","optional":false}],"indices":[]},
|
||||
"76632533f67879dc": {"kind":"literal","value":"delegation"},
|
||||
"78a9be340090b735": {"kind":"literal","value":"tmux-context"},
|
||||
"78b9204976ab9faa": {"kind":"array","element":"cda79b839d8cc0c7"},
|
||||
"79650cfa10aa3c52": {"kind":"object","properties":[{"name":"error","type":"5f2117d1856a5ab4","optional":false},{"name":"kind","type":"a2be0f0cb59f0d4a","optional":false}],"indices":[]},
|
||||
"79ddc907312f97cf": {"kind":"object","properties":[{"name":"todos","type":"4b7ddaf3710b88ff","optional":false}],"indices":[]},
|
||||
"7a5b68bd1a5118c8": {"kind":"union","types":["0203243b72fc867a","022623b9ef98ec47","02b2c23f2d94b028","0ed8d1108fe7a5e1","0eeb17e1df89b1eb","11638dc58a31496f","1938c8c20f1cba7c","1e709346005826eb","1fdad624334d3548","2152caf1a71e588e","2235d957bf4b7c6c","224aa11d4d5f88c4","24ce31aa528272e5","260523b412c19ad8","28936c614bd4e7e2","290f32bfd81ff85a","297fbd8067d7815a","2aad1179f9576314","312aee2f0c42aabb","31907de956375182","3247e566f4340029","3b04790e08b35241","3b4f2c9ef2c1217e","3bdb8dc6989655b0","408927267422a7b2","45f005e6bbb76452","4991dfc415c9efeb","49dab019d00e8c26","4a9bef9f27a94252","4e97c3d85c0fc817","52c6113cb0e53f34","53cf1704ae0709c7","5654685d7557ec74","58015da1c1950a66","5bb69b88517f6214","5bc66269cfaf614c","5cdbf342b7748d15","5d7a64ed6aac5551","6085488d223aeffd","6292bcbedaa97fea","65a8400e451e667e","672c4aa2a9b736e3","6ccb6bc423fb3952","6dacb1584f2bfbe2","6ea608bdc8a7a63d","6f22a9d02b9a1f11","6f44f32be9bcd9a8","719c51f67074f970","7554565be416b034","756b5e23a5cb2c7f","7df62978a2b7de85","7eaef7a763ba5b94","7f959241c24128b4","80677c8c8b804189","825ca23416b1ea9d","8338ee303e2bd448","854db3efdfb0cd39","85fe96bf15d5c755","8620189c8e335827","87b1a33564b9a4d6","88841202942c7683","8a046b52331959aa","8c1c4f72755a78ea","8c627d7a45fa406c","8f324cea3916c051","8fcb0b44a575e998","96bfb916a727cd44","99135d8a39379779","99f0e98184709ad1","9edc162949abf93b","9f65c43e340bba31","a15a19ef63cf5d1b","a16e567c8cd2c55c","a2066bd52f61218b","a3c6f1ea38e9a61d","aa2bf9e82b9fdeb9","aae343bc3d663c83","ada310bf0bdb8fed","ade057f4fdc387ae","b062078e899958f9","b2a5c8c008a31e3d","b3681c026a0b98e9","b4ec0af39fd52ed9","b613f83572fe2fbf","b6f94c17dd9bbd7c","b70f3e81fe11b7a5","b79641a9d25e7566","ba2a1a8f194b1bb2","ba4c40b4381e0dcd","baccc97ec34be6c4","c5228b7a55498d84","c55827fba7018198","cb1c8959e1726f82","cda2345a9be9d139","d85590a5675c6e2f","d9c462b9f62fdd3e","db06ef35b27a3842","dba54c09c6e7aafc","dd00cdccd0ba487b","dd5ee8762bd8a14b","dd6cc2bb2a8f2824","dde0cdf9d426768b","deaae5cd30987d4f","e7f4cbb3a57f4cbd","edbbfff1128099fd","ee577a0cc18664c9","f230c0b583e23b25","f29d63336e8266d8","f4a66f654996c093","f56c5b59ca016131","f6329fb30c7ea801","f6605d6c57933aea","f6afe41e3926f422","f7283223aacdc39b","f97f47b0eb87905e","fc2ae6962f9f8801","fcf81d3c58c13593","fe1a7acdeed4d0f5"]},
|
||||
"7a651f3b672c52fb": {"kind":"literal","value":"session/title"},
|
||||
"7af85bf70d4eafce": {"kind":"object","properties":[{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"surfaceOp","type":"335e242de1fcc17b","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"7b1ce60193fa8b69": {"kind":"literal","value":"working-directory"},
|
||||
@@ -1031,7 +1016,6 @@
|
||||
"84ac8c1a66ffc697": {"kind":"object","properties":[{"name":"code","type":"4cd48f3e5108bd6e","optional":false},{"name":"message","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"84bbfdce7d2eab5b": {"kind":"array","element":"33341aac09312300"},
|
||||
"854db3efdfb0cd39": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"bb94f3217aa56c88","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"85610bad3515b96d": {"kind":"object","properties":[{"name":"content","type":"b52f215a6cd69105","optional":false},{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"role","type":"589d0d91239681f8","optional":false},{"name":"source","type":"576b520757158af6","optional":false,"compatibility":{"version":1,"policy":"session-source-attribution","binding":"session.developer-message.source","discriminator":"kind","unknownKinds":"preserve","attributionKinds":["personalized-pages","plugin-recommendations","tmux-context","user-question-reply","working-directory"]}}],"indices":[]},
|
||||
"85d6d96ff8842974": {"kind":"literal","value":"answered"},
|
||||
"85f9b505b7bdff1f": {"kind":"literal","value":"tool-addition"},
|
||||
"85fe96bf15d5c755": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"8067b0d232c350f1","optional":false}],"indices":[]},
|
||||
@@ -1062,13 +1046,11 @@
|
||||
"930c1cd289def119": {"kind":"union","types":["2142e391b9ccb60d","2c4c21f19f426a58","811229eedcec5797","fab35c4520883c0d"]},
|
||||
"935c8d486292b13c": {"kind":"literal","value":"web_search"},
|
||||
"938f7c7357bc403e": {"kind":"primitive","type":"null"},
|
||||
"93a56a85fc8d91b5": {"kind":"literal","value":"plugin-recommendations"},
|
||||
"93c33d9687613293": {"kind":"array","element":"4cd48f3e5108bd6e"},
|
||||
"93cbbc5a7fd0b1aa": {"kind":"object","properties":[{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"outcome","type":"930c1cd289def119","optional":false}],"indices":[]},
|
||||
"93d38436347f67c9": {"kind":"literal","value":0},
|
||||
"94c56aeb1564ad73": {"kind":"literal","value":"in_progress"},
|
||||
"95080295115fbd83": {"kind":"object","properties":[{"name":"index","type":"0657d3ca5ac4e7bf","optional":false},{"name":"text","type":"4cd48f3e5108bd6e","optional":false},{"name":"type","type":"5abab3a27fd27366","optional":false}],"indices":[]},
|
||||
"9529cbfe9fc86799": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"e1ba710db2f3e4e4","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"95a3ffccbf3c8afc": {"kind":"literal","value":"owner"},
|
||||
"95c0e88fcf0bafb2": {"kind":"literal","value":"assistant"},
|
||||
"9645cf93769a6dfb": {"kind":"literal","value":"user-question-reply"},
|
||||
@@ -1106,6 +1088,7 @@
|
||||
"a2be0f0cb59f0d4a": {"kind":"literal","value":"error"},
|
||||
"a3a259a1aa5401af": {"kind":"literal","value":"hook/result"},
|
||||
"a3c6f1ea38e9a61d": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"9ac52f0f84fec2eb","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"a3e299483348f27a": {"kind":"object","properties":[{"name":"maxTokens","type":"0657d3ca5ac4e7bf","optional":false},{"name":"messageSeqs","type":"5d03ba38734809bc","optional":false},{"name":"messages","type":"78b9204976ab9faa","optional":false},{"name":"reasoningEffort","type":"4cd48f3e5108bd6e","optional":true},{"name":"route","type":"07e1a58c58b593f5","optional":false},{"name":"system","type":"4cd48f3e5108bd6e","optional":false},{"name":"titleProvider","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"a3edd1efd1fef21b": {"kind":"literal","value":"workspace-write"},
|
||||
"a40d12070f6f4a12": {"kind":"object","properties":[{"name":"task","type":"51edec100659da3a","optional":false},{"name":"teamId","type":"4cd48f3e5108bd6e","optional":false},{"name":"version","type":"a0f906856fc06f1c","optional":false}],"indices":[]},
|
||||
"a6567ccb2e530606": {"kind":"object","properties":[{"name":"data","type":"0d47a8f3d847243c","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"0a8a062bc9c3c0d9","optional":false}],"indices":[]},
|
||||
@@ -1141,7 +1124,6 @@
|
||||
"af6e173f7be819bc": {"kind":"literal","value":4},
|
||||
"aff60ef947c18b01": {"kind":"literal","value":"claude-code"},
|
||||
"b0127044ab31a702": {"kind":"object","properties":[{"name":"data","type":"ca59530d1a4f3e19","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"1986c2664009c991","optional":false}],"indices":[]},
|
||||
"b03a3f57be0e2056": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"93a56a85fc8d91b5","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"b062078e899958f9": {"kind":"object","properties":[{"name":"kind","type":"1f1385dbc3e875c0","optional":false}],"indices":[]},
|
||||
"b0b0eb1b16490f6b": {"kind":"object","properties":[{"name":"attachmentId","type":"4cd48f3e5108bd6e","optional":false},{"name":"bytes","type":"0657d3ca5ac4e7bf","optional":false},{"name":"height","type":"0657d3ca5ac4e7bf","optional":false},{"name":"mediaType","type":"2f1e6a7ebace43d7","optional":false},{"name":"name","type":"4cd48f3e5108bd6e","optional":true},{"name":"originalDimensions","type":"0f46153645c29784","optional":true},{"name":"width","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"b158f3ff69237148": {"kind":"object","properties":[{"name":"contextWindow","type":"0657d3ca5ac4e7bf","optional":true},{"name":"model","type":"4cd48f3e5108bd6e","optional":false},{"name":"provider","type":"4cd48f3e5108bd6e","optional":false},{"name":"systemPromptUpdate","type":"f311671e07bc7fa6","optional":true}],"indices":[]},
|
||||
@@ -1151,8 +1133,10 @@
|
||||
"b222069eea2d7680": {"kind":"object","properties":[{"name":"data","type":"477614bca595a9e7","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"9acbe713f3f64192","optional":false}],"indices":[]},
|
||||
"b2245a906e13aa94": {"kind":"literal","value":"forked"},
|
||||
"b2a5c8c008a31e3d": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"23af3759678a30de","optional":false}],"indices":[]},
|
||||
"b2a948a5340a9341": {"kind":"object","properties":[{"name":"inserted","type":"5d00abf938272f22","optional":false},{"name":"outcome","type":"d4e4d575abeb4b72","optional":true},{"name":"removedCount","type":"0657d3ca5ac4e7bf","optional":true},{"name":"start","type":"0657d3ca5ac4e7bf","optional":false},{"name":"target","type":"96f4a9c81fc0f940","optional":false}],"indices":[]},
|
||||
"b2d2a01e51341a3b": {"kind":"union","types":["1ebc6f9ff3aa9e3a","234142ee4f996f38","94c56aeb1564ad73","e7e8f1318170b828"]},
|
||||
"b3681c026a0b98e9": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"78a9be340090b735","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"b36fd842cd004b53": {"kind":"object","properties":[{"name":"data","type":"b2a948a5340a9341","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"829a2fb3be6efd4b","optional":false}],"indices":[]},
|
||||
"b38f206d59bad891": {"kind":"literal","value":"disposed"},
|
||||
"b4ec0af39fd52ed9": {"kind":"object","properties":[{"name":"kind","type":"bb94f3217aa56c88","optional":false}],"indices":[]},
|
||||
"b5086d249e8502e9": {"kind":"object","properties":[{"name":"data","type":"aa7bc2817014ca6c","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"6cda0d6d3b4336d8","optional":false}],"indices":[]},
|
||||
@@ -1161,12 +1145,14 @@
|
||||
"b56f6a885da3dc39": {"kind":"object","properties":[{"name":"messageSeqs","type":"5d03ba38734809bc","optional":false},{"name":"source","type":"30d5a537b2966857","optional":false},{"name":"title","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"b57a2889408de36e": {"kind":"literal","value":"failed"},
|
||||
"b57ae1b37e52bee0": {"kind":"literal","value":"team/task"},
|
||||
"b613f83572fe2fbf": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"05205074b24d8340","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"b63b089a00b3b935": {"kind":"object","properties":[{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"kind","type":"17aae616ef020b8b","optional":false},{"name":"prompt","type":"4cd48f3e5108bd6e","optional":false},{"name":"scheduledAt","type":"4cd48f3e5108bd6e","optional":false},{"name":"title","type":"4cd48f3e5108bd6e","optional":true}],"indices":[]},
|
||||
"b6896938660a1dfe": {"kind":"object","properties":[{"name":"childCreatedAt","type":"0657d3ca5ac4e7bf","optional":false},{"name":"childId","type":"4cd48f3e5108bd6e","optional":false},{"name":"label","type":"4cd48f3e5108bd6e","optional":true},{"name":"mode","type":"d28765f87d6b6ab4","optional":false},{"name":"version","type":"f88f1b7b6bb733f6","optional":false}],"indices":[]},
|
||||
"b6ef9c6210be8350": {"kind":"object","properties":[{"name":"kind","type":"1ebc6f9ff3aa9e3a","optional":false}],"indices":[]},
|
||||
"b6f94c17dd9bbd7c": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"bb94f3217aa56c88","optional":false}],"indices":[]},
|
||||
"b70f3e81fe11b7a5": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"a9059a81430b3207","optional":false}],"indices":[]},
|
||||
"b765ee31033cea46": {"kind":"literal","value":"set"},
|
||||
"b782058cef83caf3": {"kind":"object","properties":[{"name":"content","type":"b52f215a6cd69105","optional":false},{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"role","type":"68f44f59e91c4139","optional":false},{"name":"source","type":"7a5b68bd1a5118c8","optional":false,"compatibility":{"version":1,"policy":"session-source-attribution","binding":"session.user-message.source","discriminator":"kind","unknownKinds":"preserve","attributionKinds":["action-cards","tmux-context","user-question-reply","working-directory"]}}],"indices":[]},
|
||||
"b79641a9d25e7566": {"kind":"object","properties":[{"name":"kind","type":"8067b0d232c350f1","optional":false}],"indices":[]},
|
||||
"b79ada42962cad01": {"kind":"object","properties":[{"name":"data","type":"86d1d0e9cfebb240","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"5ebce1317eacd2c1","optional":false}],"indices":[]},
|
||||
"b815d7b91cdd9fc6": {"kind":"literal","value":"goal"},
|
||||
@@ -1176,6 +1162,7 @@
|
||||
"b9305f0ea75ccd6a": {"kind":"literal","value":"hook/invoked"},
|
||||
"b978cff734e62143": {"kind":"object","properties":[{"name":"data","type":"79ddc907312f97cf","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"af0750d32d97d47b","optional":false}],"indices":[]},
|
||||
"b993441f8ce7d27b": {"kind":"tuple","elements":[{"type":"9a2a9029f8d7ede0","optional":false,"rest":false}]},
|
||||
"ba2a1a8f194b1bb2": {"kind":"object","properties":[{"name":"form","type":"fee1caf8ab6a65c1","optional":false},{"name":"kind","type":"05205074b24d8340","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"ba4c40b4381e0dcd": {"kind":"object","properties":[{"name":"form","type":"6f9e00383836275e","optional":false},{"name":"kind","type":"23af3759678a30de","optional":false},{"name":"sections","type":"c748fb42c80a1200","optional":false}],"indices":[]},
|
||||
"ba77b58995e36f14": {"kind":"array","element":"07e1a58c58b593f5"},
|
||||
"bab6865794007548": {"kind":"literal","value":"kill"},
|
||||
@@ -1204,21 +1191,19 @@
|
||||
"c8e6f48878cc2a2f": {"kind":"literal","value":"active"},
|
||||
"c99e20441bf15341": {"kind":"literal","value":"feedback/record"},
|
||||
"ca085dba2c877fec": {"kind":"literal","value":"sandbox/mode"},
|
||||
"ca146eefc6285fee": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"93a56a85fc8d91b5","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"ca59530d1a4f3e19": {"kind":"object","properties":[{"name":"compactionId","type":"4cd48f3e5108bd6e","optional":false},{"name":"error","type":"4cd48f3e5108bd6e","optional":true},{"name":"sourceCommandId","type":"4cd48f3e5108bd6e","optional":true},{"name":"turn","type":"3bd652ebfa8726b3","optional":false}],"indices":[]},
|
||||
"cb1c8959e1726f82": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"24b10f7cdae64928","optional":false}],"indices":[]},
|
||||
"cbbe8377ee744964": {"kind":"object","properties":[{"name":"childCreatedAt","type":"0657d3ca5ac4e7bf","optional":false},{"name":"childId","type":"4cd48f3e5108bd6e","optional":false},{"name":"label","type":"4cd48f3e5108bd6e","optional":true},{"name":"mode","type":"fc351843b8ecbd05","optional":false},{"name":"version","type":"a0f906856fc06f1c","optional":false}],"indices":[]},
|
||||
"cbca49bde16b656d": {"kind":"literal","value":"block-start"},
|
||||
"cd186c309e2bef30": {"kind":"literal","value":"approval/asked"},
|
||||
"cda2345a9be9d139": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"24b10f7cdae64928","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"cda79b839d8cc0c7": {"kind":"union","types":["09f3f8dc417f2782","4b259f7f8f0a44ad","7580e7d96dc8475f","b782058cef83caf3","fa87537f4a9c1e25"]},
|
||||
"cdca80b8dad24d4e": {"kind":"literal","value":"tool-workflow/run-start"},
|
||||
"cdee10e87dbed844": {"kind":"object","properties":[{"name":"delayMs","type":"0657d3ca5ac4e7bf","optional":false},{"name":"failure","type":"5f2117d1856a5ab4","optional":false},{"name":"maxRetries","type":"0657d3ca5ac4e7bf","optional":false},{"name":"mode","type":"3bc287e765d58dc3","optional":false},{"name":"policyKey","type":"4cd48f3e5108bd6e","optional":false},{"name":"provider","type":"4cd48f3e5108bd6e","optional":false},{"name":"retry","type":"0657d3ca5ac4e7bf","optional":false},{"name":"retryId","type":"4cd48f3e5108bd6e","optional":false},{"name":"step","type":"0657d3ca5ac4e7bf","optional":false},{"name":"turn","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"cef171adf021a186": {"kind":"object","properties":[{"name":"arguments","type":"bbc5696e3f13c758","optional":false},{"name":"content","type":"b52f215a6cd69105","optional":false},{"name":"error","type":"a81059ca06999da1","optional":true},{"name":"isError","type":"aa93010d0e521ad7","optional":false},{"name":"meta","type":"c592ce75aab73fca","optional":true},{"name":"name","type":"4cd48f3e5108bd6e","optional":false},{"name":"parentCallId","type":"4cd48f3e5108bd6e","optional":false},{"name":"rootCallId","type":"4cd48f3e5108bd6e","optional":false},{"name":"subCallId","type":"4cd48f3e5108bd6e","optional":false}],"indices":[]},
|
||||
"cffcdc19881ab61e": {"kind":"object","properties":[{"name":"cleared","type":"0b6d718c693fdf7f","optional":false},{"name":"clearedAt","type":"0657d3ca5ac4e7bf","optional":false},{"name":"kind","type":"237c004c73b6b288","optional":false},{"name":"operation","type":"e7e154d47d5fbc53","optional":false},{"name":"version","type":"f88f1b7b6bb733f6","optional":false}],"indices":[]},
|
||||
"d0fbb0ca1bbba059": {"kind":"literal","value":"delete"},
|
||||
"d28765f87d6b6ab4": {"kind":"literal","value":"one-shot"},
|
||||
"d2cc8a54a6f1abc9": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"e1ba710db2f3e4e4","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"d3e2c037628540ed": {"kind":"object","properties":[{"name":"inserted","type":"2013e9f315078a16","optional":false},{"name":"outcome","type":"d4e4d575abeb4b72","optional":true},{"name":"removedCount","type":"0657d3ca5ac4e7bf","optional":true},{"name":"start","type":"0657d3ca5ac4e7bf","optional":false},{"name":"target","type":"96f4a9c81fc0f940","optional":false}],"indices":[]},
|
||||
"d4b739491689cc6b": {"kind":"object","properties":[{"name":"block","type":"8064c03c87c357fd","optional":false},{"name":"index","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"eefbea819caeeea9","optional":false}],"indices":[]},
|
||||
"d4c799e3d51cae10": {"kind":"literal","value":"working-directory/change"},
|
||||
"d4e4d575abeb4b72": {"kind":"literal","value":"canceled"},
|
||||
@@ -1237,20 +1222,19 @@
|
||||
"db874d463b0fdec7": {"kind":"object","properties":[{"name":"data","type":"3e4e7683b0192c9f","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"e2d0367e5716bc18","optional":false}],"indices":[]},
|
||||
"dba54c09c6e7aafc": {"kind":"object","properties":[{"name":"kind","type":"4edec1b770e8ec4c","optional":false}],"indices":[]},
|
||||
"dbdafceb9a900183": {"kind":"literal","value":"hook"},
|
||||
"dd00cdccd0ba487b": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"05205074b24d8340","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"dd2780e7e0768433": {"kind":"literal","value":"fresh"},
|
||||
"dd5ee8762bd8a14b": {"kind":"object","properties":[{"name":"form","type":"aec150797b655c5f","optional":false},{"name":"kind","type":"99e7e7d7fed55ae6","optional":false}],"indices":[]},
|
||||
"dd6cc2bb2a8f2824": {"kind":"object","properties":[{"name":"form","type":"383cf73ae4748e5b","optional":false},{"name":"kind","type":"99e7e7d7fed55ae6","optional":false}],"indices":[]},
|
||||
"dde4d210811d6705": {"kind":"object","properties":[{"name":"data","type":"d3e2c037628540ed","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"829a2fb3be6efd4b","optional":false}],"indices":[]},
|
||||
"dde0cdf9d426768b": {"kind":"object","properties":[{"name":"kind","type":"05205074b24d8340","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"de25352d2dc41963": {"kind":"literal","value":"user/message"},
|
||||
"de30b1fa12c75f81": {"kind":"literal","value":"image/gif"},
|
||||
"deaae5cd30987d4f": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"0fe52387f6505270","optional":false}],"indices":[]},
|
||||
"deebfc7c62177ea8": {"kind":"object","properties":[{"name":"kind","type":"95a3ffccbf3c8afc","optional":false}],"indices":[]},
|
||||
"df5d9709b7db2a72": {"kind":"literal","value":"positive"},
|
||||
"df843efd87c78cf8": {"kind":"array","element":"4f91f187baeabef5"},
|
||||
"df948d3c80162763": {"kind":"object","properties":[{"name":"kind","type":"93a56a85fc8d91b5","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"dfce5db4aa42b7eb": {"kind":"union","types":["871bfd6f7bb91061","b57a2889408de36e","c8e6f48878cc2a2f"]},
|
||||
"e0a787e6ec76c7c9": {"kind":"object","properties":[{"name":"data","type":"ef11a3b7fa2033ae","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"c219efbdfd53b836","optional":false}],"indices":[]},
|
||||
"e1ba710db2f3e4e4": {"kind":"literal","value":"personalized-pages"},
|
||||
"e2ad8f5bcd813f26": {"kind":"object","properties":[{"name":"childCreatedAt","type":"0657d3ca5ac4e7bf","optional":false},{"name":"childId","type":"4cd48f3e5108bd6e","optional":false},{"name":"label","type":"4cd48f3e5108bd6e","optional":false},{"name":"mode","type":"e5d3828df1ec3e2a","optional":false},{"name":"version","type":"f88f1b7b6bb733f6","optional":false}],"indices":[]},
|
||||
"e2d0367e5716bc18": {"kind":"literal","value":"compaction/start"},
|
||||
"e2f9a41e0989f54e": {"kind":"object","properties":[{"name":"data","type":"9947aa5938fe19a8","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"ef4f00923b9edbae","optional":false}],"indices":[]},
|
||||
@@ -1262,7 +1246,6 @@
|
||||
"e42b0f40b5d0b628": {"kind":"literal","value":"every"},
|
||||
"e438a9d4fb883b3e": {"kind":"literal","value":"append"},
|
||||
"e481c46af3813e00": {"kind":"object","properties":[{"name":"reason","type":"f1687f982fa3d41e","optional":false},{"name":"turn","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"e49519b11e614a05": {"kind":"array","element":"5e88c0eb7dd6462d"},
|
||||
"e4c18e294232c3ba": {"kind":"object","properties":[{"name":"arguments","type":"4cd48f3e5108bd6e","optional":false},{"name":"callId","type":"4cd48f3e5108bd6e","optional":false},{"name":"name","type":"4cd48f3e5108bd6e","optional":false},{"name":"step","type":"0657d3ca5ac4e7bf","optional":false},{"name":"turn","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"e4cac694f8b6e1d5": {"kind":"literal","value":"instruction-following"},
|
||||
"e5d3828df1ec3e2a": {"kind":"literal","value":"continuable"},
|
||||
@@ -1273,6 +1256,7 @@
|
||||
"e7ce49f12953583f": {"kind":"literal","value":"initial"},
|
||||
"e7e154d47d5fbc53": {"kind":"literal","value":"clear"},
|
||||
"e7e8f1318170b828": {"kind":"literal","value":"deleted"},
|
||||
"e7f4cbb3a57f4cbd": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"05205074b24d8340","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"e8de0f457fed5b9f": {"kind":"literal","value":"notice"},
|
||||
"e95f957154b2b1b5": {"kind":"literal","value":"assistant/attempt"},
|
||||
"ea08ec1df0c33108": {"kind":"object","properties":[{"name":"message","type":"2eafefdc6f79a492","optional":false},{"name":"teamId","type":"4cd48f3e5108bd6e","optional":false},{"name":"version","type":"a0f906856fc06f1c","optional":false}],"indices":[]},
|
||||
@@ -1288,6 +1272,7 @@
|
||||
"ef11a3b7fa2033ae": {"kind":"object","properties":[{"name":"step","type":"0657d3ca5ac4e7bf","optional":false},{"name":"turn","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"ef226a90ddac6cd8": {"kind":"literal","value":"killed"},
|
||||
"ef4f00923b9edbae": {"kind":"literal","value":"compaction/summary"},
|
||||
"efa1a091017ce533": {"kind":"object","properties":[{"name":"data","type":"a3e299483348f27a","optional":false},{"name":"ignorable","type":"dacf3d5f3e4ff619","optional":true},{"name":"seq","type":"0657d3ca5ac4e7bf","optional":false},{"name":"time","type":"0657d3ca5ac4e7bf","optional":false},{"name":"type","type":"587bb11da730e06a","optional":false}],"indices":[]},
|
||||
"f05fb85e715af4ab": {"kind":"literal","value":"task-result"},
|
||||
"f09e5e7acf5ff5cc": {"kind":"object","properties":[{"name":"model","type":"4cd48f3e5108bd6e","optional":false},{"name":"provider","type":"4cd48f3e5108bd6e","optional":false},{"name":"reasoningEffort","type":"4cd48f3e5108bd6e","optional":true}],"indices":[]},
|
||||
"f1687f982fa3d41e": {"kind":"union","types":["023a355b2be0d688","0a30c3be336cdd4f","56b7c047694875a8","79650cfa10aa3c52","ab7ec5f9eb2c6dfa","b6ef9c6210be8350","ec8b5ff7c77ca689"]},
|
||||
@@ -1313,7 +1298,6 @@
|
||||
"f88f1b7b6bb733f6": {"kind":"literal","value":1},
|
||||
"f90eb4ab2d3897bc": {"kind":"object","properties":[{"name":"turn","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"f97f47b0eb87905e": {"kind":"object","properties":[{"name":"form","type":"16d0507cb94b4cfc","optional":false},{"name":"kind","type":"78a9be340090b735","optional":false}],"indices":[]},
|
||||
"f99e707d67fd708b": {"kind":"object","properties":[{"name":"form","type":"e8de0f457fed5b9f","optional":false},{"name":"kind","type":"e1ba710db2f3e4e4","optional":false},{"name":"summary","type":"4cd48f3e5108bd6e","optional":false},{"name":"through","type":"0657d3ca5ac4e7bf","optional":false}],"indices":[]},
|
||||
"f9cfc89e8fe085b4": {"kind":"literal","value":"text-chunks"},
|
||||
"fa87537f4a9c1e25": {"kind":"object","properties":[{"name":"content","type":"b52f215a6cd69105","optional":false},{"name":"id","type":"4cd48f3e5108bd6e","optional":false},{"name":"role","type":"95c0e88fcf0bafb2","optional":false},{"name":"source","type":"719c51f67074f970","optional":false}],"indices":[]},
|
||||
"fab2bb09bc5e3b9d": {"kind":"union","types":["12a0cfa619ac4a5f","18fce9540bb20897","a3edd1efd1fef21b"]},
|
||||
|
||||
+45
-22
@@ -69,6 +69,51 @@ interface PendingModule {
|
||||
|
||||
Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
|
||||
|
||||
<a id="ctxactioncards--actioncards"></a>
|
||||
|
||||
### `ctx.actionCards` — `ActionCards`
|
||||
|
||||
Card tool, kind registry, Session projection, user actions and status notices.
|
||||
|
||||
```ts cordis-catalog
|
||||
/**
|
||||
* Register one action kind for the caller's lifetime.
|
||||
* @param kind - the kind's skill, details schema, verbs and handler.
|
||||
* @returns disposer removing the kind; actions on its cards are then unavailable.
|
||||
* @throws when another kind already registered the same action.
|
||||
*/
|
||||
register<Details>(kind: ActionCardKind<Details>): () => void
|
||||
|
||||
/**
|
||||
* Record a card decision in the Session log; the next model request reports it.
|
||||
* @param agent - agent whose Session owns the card.
|
||||
* @param decision - the card's new state.
|
||||
*/
|
||||
record(agent: Agent, decision: ActionCardDecision): void
|
||||
|
||||
/**
|
||||
* Read the cards of one Session.
|
||||
* @param session - a Session whose projections are prepared.
|
||||
* @returns proposals and decisions by call id.
|
||||
*/
|
||||
view(session: Session): ActionCardView
|
||||
|
||||
/**
|
||||
* Apply a user action to a logged card. Shared checks run first; `dismiss` is recorded here and every other
|
||||
* verb goes to the card's kind. Concurrent actions on one card share one operation.
|
||||
* @param agent - live root resolved from the displayed Session.
|
||||
* @param callId - the card's `propose_action` call id.
|
||||
* @param verb - `dismiss` or one of the kind's verbs.
|
||||
* @param payload - kind-defined fields such as a chosen location.
|
||||
* @returns acceptance of background work, the decision in effect, or a refusal.
|
||||
*/
|
||||
@Remote act(agent: Agent, callId: ToolCallId, verb: string, payload?: Record<string, JsonValue>): Promise<ActionCardResult>
|
||||
```
|
||||
|
||||
Types: [Agent](core.md) · [Session](session.md) · [ToolCallId](core.md)
|
||||
|
||||
Source: [`packages/experimental/action-cards/src/index.ts`](../../packages/experimental/action-cards/src/index.ts)
|
||||
|
||||
<a id="ctxconfigeditor--configeditor"></a>
|
||||
|
||||
### `ctx.configEditor` — `ConfigEditor`
|
||||
@@ -96,28 +141,6 @@ async edit( entry: Entry, change: (current: Record<string, unknown>, inherited:
|
||||
|
||||
Source: [`packages/boot/config-editor/src/index.ts`](../../packages/boot/config-editor/src/index.ts)
|
||||
|
||||
<a id="ctxcreationrecommendations--creationrecommendations"></a>
|
||||
|
||||
### `ctx.creationRecommendations` — `CreationRecommendations`
|
||||
|
||||
Internal Remote and effect owner assembled by the personalized-pages plugin.
|
||||
|
||||
```ts cordis-catalog
|
||||
/** Apply a human decision to a logged proposal.
|
||||
* @param agent - Live root resolved from the displayed session.
|
||||
* @param callId - Logged proposal id.
|
||||
* @param action - Create, cancel generation, dismiss, confirm retention, remove the owned bundle, or reinstall its retained profile copy.
|
||||
* @param slot - Location chosen by the user when creating or dismissing.
|
||||
* @param customLocation - Omitted: use slot. Present: Creator resolves this human-authored placement instead.
|
||||
* @returns acceptance for background work, a durable receipt, or a refusal.
|
||||
*/
|
||||
@Remote act(agent: Agent, callId: ToolCallId, action: 'create' | 'dismiss' | 'keep' | 'undo' | 'cancel' | 'restore', slot: CreationSlot, customLocation?: string): Promise<CreationActionResult>
|
||||
```
|
||||
|
||||
Types: [Agent](core.md) · [ToolCallId](core.md)
|
||||
|
||||
Source: [`packages/experimental/creation-recommendations/src/index.ts`](../../packages/experimental/creation-recommendations/src/index.ts)
|
||||
|
||||
<a id="ctxheadlessstartup--headlessstartupvalues"></a>
|
||||
|
||||
### `ctx.headlessStartup` — `HeadlessStartupValues`
|
||||
|
||||
+45
-22
@@ -69,6 +69,51 @@ interface PendingModule {
|
||||
|
||||
Generated from source by `scripts/gen-cordis-catalog.ts` (verified fresh by `pnpm run verify-cordis-catalog` in doc-sync; regenerate with `pnpm run gen-cordis-catalog`) — the language sides differ only in locale-specific paired document paths. Signature blocks use a `ts cordis-catalog` fence and keep the original source JSDoc; dispatch modes are defined in the [primer](../cordis-primer.zh.md#dispatch-modes), and the framework-inherited `ctx` API lives in [cordis-api/inherited.md](../cordis-api/inherited.md).
|
||||
|
||||
<a id="ctxactioncards--actioncards"></a>
|
||||
|
||||
### `ctx.actionCards` — `ActionCards`
|
||||
|
||||
Card tool, kind registry, Session projection, user actions and status notices.
|
||||
|
||||
```ts cordis-catalog
|
||||
/**
|
||||
* Register one action kind for the caller's lifetime.
|
||||
* @param kind - the kind's skill, details schema, verbs and handler.
|
||||
* @returns disposer removing the kind; actions on its cards are then unavailable.
|
||||
* @throws when another kind already registered the same action.
|
||||
*/
|
||||
register<Details>(kind: ActionCardKind<Details>): () => void
|
||||
|
||||
/**
|
||||
* Record a card decision in the Session log; the next model request reports it.
|
||||
* @param agent - agent whose Session owns the card.
|
||||
* @param decision - the card's new state.
|
||||
*/
|
||||
record(agent: Agent, decision: ActionCardDecision): void
|
||||
|
||||
/**
|
||||
* Read the cards of one Session.
|
||||
* @param session - a Session whose projections are prepared.
|
||||
* @returns proposals and decisions by call id.
|
||||
*/
|
||||
view(session: Session): ActionCardView
|
||||
|
||||
/**
|
||||
* Apply a user action to a logged card. Shared checks run first; `dismiss` is recorded here and every other
|
||||
* verb goes to the card's kind. Concurrent actions on one card share one operation.
|
||||
* @param agent - live root resolved from the displayed Session.
|
||||
* @param callId - the card's `propose_action` call id.
|
||||
* @param verb - `dismiss` or one of the kind's verbs.
|
||||
* @param payload - kind-defined fields such as a chosen location.
|
||||
* @returns acceptance of background work, the decision in effect, or a refusal.
|
||||
*/
|
||||
@Remote act(agent: Agent, callId: ToolCallId, verb: string, payload?: Record<string, JsonValue>): Promise<ActionCardResult>
|
||||
```
|
||||
|
||||
Types: [Agent](core.zh.md) · [Session](session.zh.md) · [ToolCallId](core.zh.md)
|
||||
|
||||
Source: [`packages/experimental/action-cards/src/index.ts`](../../packages/experimental/action-cards/src/index.ts)
|
||||
|
||||
<a id="ctxconfigeditor--configeditor"></a>
|
||||
|
||||
### `ctx.configEditor` — `ConfigEditor`
|
||||
@@ -96,28 +141,6 @@ async edit( entry: Entry, change: (current: Record<string, unknown>, inherited:
|
||||
|
||||
Source: [`packages/boot/config-editor/src/index.ts`](../../packages/boot/config-editor/src/index.ts)
|
||||
|
||||
<a id="ctxcreationrecommendations--creationrecommendations"></a>
|
||||
|
||||
### `ctx.creationRecommendations` — `CreationRecommendations`
|
||||
|
||||
Internal Remote and effect owner assembled by the personalized-pages plugin.
|
||||
|
||||
```ts cordis-catalog
|
||||
/** Apply a human decision to a logged proposal.
|
||||
* @param agent - Live root resolved from the displayed session.
|
||||
* @param callId - Logged proposal id.
|
||||
* @param action - Create, cancel generation, dismiss, confirm retention, remove the owned bundle, or reinstall its retained profile copy.
|
||||
* @param slot - Location chosen by the user when creating or dismissing.
|
||||
* @param customLocation - Omitted: use slot. Present: Creator resolves this human-authored placement instead.
|
||||
* @returns acceptance for background work, a durable receipt, or a refusal.
|
||||
*/
|
||||
@Remote act(agent: Agent, callId: ToolCallId, action: 'create' | 'dismiss' | 'keep' | 'undo' | 'cancel' | 'restore', slot: CreationSlot, customLocation?: string): Promise<CreationActionResult>
|
||||
```
|
||||
|
||||
Types: [Agent](core.zh.md) · [ToolCallId](core.zh.md)
|
||||
|
||||
Source: [`packages/experimental/creation-recommendations/src/index.ts`](../../packages/experimental/creation-recommendations/src/index.ts)
|
||||
|
||||
<a id="ctxheadlessstartup--headlessstartupvalues"></a>
|
||||
|
||||
### `ctx.headlessStartup` — `HeadlessStartupValues`
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
en: 6cc2cd9ced70bb09
|
||||
zh: 1c0e6cb4ba2ed637
|
||||
/tool-schema-catalog/tool-package-map:
|
||||
en: 10fe940a3d17cde7
|
||||
zh: ef1e8863c28e3c05
|
||||
en: 3b44fba80c4b6baf
|
||||
zh: 45f8962c849cdc20
|
||||
/tool-schema-catalog/deepseek-ai-dsh-plugin-manager:
|
||||
en: e0143916bb634762
|
||||
zh: e0143916bb634762
|
||||
@@ -54,8 +54,14 @@
|
||||
en: 4910ab327694ee97
|
||||
zh: 17e79e4366cb636d
|
||||
/tool-schema-catalog/deepseek-ai-dsh-experimental-browser-use-stagehand-native/stagehand-tabs:
|
||||
en: 095b18f9376e073d
|
||||
zh: abd8785f8acaa555
|
||||
en: c65d58eac812b03c
|
||||
zh: d4259095ce06e457
|
||||
/tool-schema-catalog/deepseek-ai-dsh-experimental-action-cards:
|
||||
en: 94f08f350e306557
|
||||
zh: 94f08f350e306557
|
||||
/tool-schema-catalog/deepseek-ai-dsh-experimental-action-cards/propose-action:
|
||||
en: b2afbd46036c0eb1
|
||||
zh: 0983902a9034482b
|
||||
/tool-schema-catalog/deepseek-ai-dsh-tool-ask-user:
|
||||
en: e713a4a11a15d13c
|
||||
zh: e713a4a11a15d13c
|
||||
|
||||
@@ -19,6 +19,7 @@ This table connects model-visible tool names to the plugin package and service s
|
||||
| `@deepseek-ai/dsh-plugin-market` | `plugin_market` | `ctx.tools`, `ctx.pluginMarket` | `tool/call`, `tool/result` | - | - |
|
||||
| `@deepseek-ai/dsh-mcp-resources` | `list_mcp_resource_templates`, `list_mcp_resources`, `read_mcp_resource` | `ctx.tools`, `ctx.mcpResources` | `tool/call`, `tool/result` | - | - |
|
||||
| `@deepseek-ai/dsh-experimental-browser-use-stagehand-native` | `stagehand_act`, `stagehand_extract`, `stagehand_navigate`, `stagehand_observe`, `stagehand_screenshot`, `stagehand_tabs` | `ctx.browserUse`, `ctx.agents`, `ctx.tools`, `ctx.systemPrompt` | `tool/call`, `tool/result` | - | - |
|
||||
| `@deepseek-ai/dsh-experimental-action-cards` | `propose_action` | `ctx.tools`, `ctx.agents`, `ctx.sessionProjections`, `ctx.remoteAccess` | `tool/call`, `tool/result`, `plugin:action-cards/decision`, `user/message` | - | Declared only to an Agent that loaded the skill of a registered card kind; the kind packages register their actions, and the Personalized pages bundle supplies the only shipped kind. |
|
||||
| `@deepseek-ai/dsh-tool-ask-user` | `ask_user_question` | `ctx.tools`, `ctx.userQuestions` | `tool/call`, `tool/result after an answer or timeout`, `late user/message` | - | ask_user_question keeps the original blocking behavior by default; set `mode: timed` to opt into a foreground timeout and pending result while the question remains answerable. In timed mode, `timeout: -1` keeps that call blocking indefinitely. |
|
||||
| `@deepseek-ai/dsh-tool-executor-ptc` | `run_code` | `ctx.workingDirectory (Agent executions)`, `ctx.tools`, `ctx.ptcRuntime`, `ctx.systemPrompt` | `tool/call`, `one tool/ptc-dispatch-start + tool/ptc-dispatch pair per bridged sub-call`, `tool/result` | - | The PTC executor exposes only run_code to the model and declares other visible capabilities in a generated SDK in the runtime’s language. Program bindings enter the shared guarded tool pipeline in submission order; concurrency-safe bodies overlap up to maxParallelSubCalls, and nested results remain linked to the outer program. |
|
||||
| `@deepseek-ai/dsh-plan-mode` | `exit_plan_mode` | `ctx.tools`, `ctx.systemPrompt`, `ctx.agents`, `ctx.userQuestions (execution time, opportunistic)` | `tool/call`, `plan/mode inactive on an approved review`, `tool/result` | - | exit_plan_mode stays in the model-facing schema while planning is inactive so transitions add no tool-catalog churn on top of the plan-policy change. Its execute path rejects calls outside plan mode; in plan mode it presents the plan over the user-questions seam (approve / keep planning with feedback), and approval logs plan mode inactive at the step boundary. |
|
||||
@@ -497,6 +498,49 @@ List, create, select, or close a Stagehand browser tab.
|
||||
|
||||
Source: [`packages/experimental/browser-use-stagehand-native/src/index.ts`](../packages/experimental/browser-use-stagehand-native/src/index.ts)
|
||||
|
||||
<a id="deepseek-aidsh-experimental-action-cards"></a>
|
||||
|
||||
## `@deepseek-ai/dsh-experimental-action-cards`
|
||||
|
||||
### `propose_action`
|
||||
|
||||
Show the user one optional action card under this answer. Call only as the skill that names the action instructs.
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"action": {
|
||||
"type": "string",
|
||||
"description": "Action name from the skill."
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Card title."
|
||||
},
|
||||
"brief": {
|
||||
"type": "string",
|
||||
"description": "What the action does, in the user's language."
|
||||
},
|
||||
"details": {
|
||||
"type": "object",
|
||||
"description": "Fields the skill lists for this action.",
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"action",
|
||||
"title",
|
||||
"brief",
|
||||
"details"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
Source: [`packages/experimental/action-cards/src/index.ts`](../packages/experimental/action-cards/src/index.ts)
|
||||
|
||||
Declared only to an Agent that loaded the skill of a registered card kind; the kind packages register their actions, and the Personalized pages bundle supplies the only shipped kind.
|
||||
|
||||
<a id="deepseek-aidsh-tool-ask-user"></a>
|
||||
|
||||
## `@deepseek-ai/dsh-tool-ask-user`
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
| `@deepseek-ai/dsh-plugin-market` | `plugin_market` | `ctx.tools`, `ctx.pluginMarket` | `tool/call`, `tool/result` | - | - |
|
||||
| `@deepseek-ai/dsh-mcp-resources` | `list_mcp_resource_templates`, `list_mcp_resources`, `read_mcp_resource` | `ctx.tools`, `ctx.mcpResources` | `tool/call`, `tool/result` | - | - |
|
||||
| `@deepseek-ai/dsh-experimental-browser-use-stagehand-native` | `stagehand_act`、`stagehand_extract`、`stagehand_navigate`、`stagehand_observe`、`stagehand_screenshot`、`stagehand_tabs` | `ctx.browserUse`、`ctx.agents`、`ctx.tools`、`ctx.systemPrompt` | `tool/call`、`tool/result` | - | - |
|
||||
| `@deepseek-ai/dsh-experimental-action-cards` | `propose_action` | `ctx.tools`、`ctx.agents`、`ctx.sessionProjections`、`ctx.remoteAccess` | `tool/call`、`tool/result`、`plugin:action-cards/decision`、`user/message` | - | 只向加载过已注册卡片种类 Skill 的 Agent 声明;各种类的包注册自己的动作,目前只有个性化页面 Bundle 提供种类。 |
|
||||
| `@deepseek-ai/dsh-tool-ask-user` | `ask_user_question` | `ctx.tools`、`ctx.userQuestions` | `tool/call`、`tool/result after an answer or timeout`、`late user/message` | - | ask_user_question 默认保持原有阻塞行为;设置 `mode: timed` 后才启用前台超时与 pending 结果,同时问题仍可回答;timed 模式内 `timeout: -1` 让本次调用无限期阻塞。 |
|
||||
| `@deepseek-ai/dsh-tool-executor-ptc` | `run_code` | `ctx.workingDirectory (Agent executions)`、`ctx.tools`、`ctx.ptcRuntime`、`ctx.systemPrompt` | `tool/call`、`one tool/ptc-dispatch-start + tool/ptc-dispatch pair per bridged sub-call`、`tool/result` | - | PTC 执行器只向模型公开 run_code,并在运行时语言生成的 SDK 中声明其他可见能力。程序绑定按提交顺序进入共享的受守卫工具流水线;并行安全的函数体最多重叠 maxParallelSubCalls 个,嵌套结果保持与外层程序关联。 |
|
||||
| `@deepseek-ai/dsh-plan-mode` | `exit_plan_mode` | `ctx.tools`、`ctx.systemPrompt`、`ctx.agents`、`ctx.userQuestions (execution time, opportunistic)` | `tool/call`、`plan/mode inactive on an approved review`、`tool/result` | - | 规划未激活时,exit_plan_mode 仍保留在面向模型的 schema 中,这样状态转换不会在规划策略变更之外额外造成工具目录变动。其执行路径会拒绝规划模式之外的调用;在规划模式下,它通过用户交互 seam 提交计划(批准/根据反馈继续规划),批准后会在步骤边界记录规划模式已停用。 |
|
||||
@@ -501,6 +502,49 @@
|
||||
|
||||
来源:[`packages/experimental/browser-use-stagehand-native/src/index.ts`](../packages/experimental/browser-use-stagehand-native/src/index.ts)
|
||||
|
||||
<a id="deepseek-aidsh-experimental-action-cards"></a>
|
||||
|
||||
## `@deepseek-ai/dsh-experimental-action-cards`
|
||||
|
||||
### `propose_action`
|
||||
|
||||
在本次回答下方向用户展示一张可选操作卡片。只按指定该操作的 Skill 的要求调用。
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"action": {
|
||||
"type": "string",
|
||||
"description": "Action name from the skill."
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"description": "Card title."
|
||||
},
|
||||
"brief": {
|
||||
"type": "string",
|
||||
"description": "What the action does, in the user's language."
|
||||
},
|
||||
"details": {
|
||||
"type": "object",
|
||||
"description": "Fields the skill lists for this action.",
|
||||
"additionalProperties": true
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"action",
|
||||
"title",
|
||||
"brief",
|
||||
"details"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
来源:[`packages/experimental/action-cards/src/index.ts`](../packages/experimental/action-cards/src/index.ts)
|
||||
|
||||
只向加载过已注册卡片种类 Skill 的 Agent 声明;各种类的包注册自己的动作,目前只有个性化页面 Bundle 提供种类。
|
||||
|
||||
<a id="deepseek-aidsh-tool-ask-user"></a>
|
||||
|
||||
## `@deepseek-ai/dsh-tool-ask-user`
|
||||
|
||||
@@ -2,33 +2,33 @@
|
||||
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
|
||||
# After editing either side, bring the other along and re-record with:
|
||||
# pnpm run verify-translation-pairing --write docs/user/guide/plugin-market.md
|
||||
/plugin-markets:
|
||||
en: 09b2a6328dcae63c
|
||||
zh: ac7bce767e4f5011
|
||||
/plugin-markets/summary:
|
||||
en: 2716b194b8a12aa7
|
||||
zh: b90773d095851969
|
||||
/plugin-markets/table-of-contents:
|
||||
/plugin-indexes:
|
||||
en: 5ee6a364e2708ab9
|
||||
zh: 369781529be73628
|
||||
/plugin-indexes/summary:
|
||||
en: a1d8f17e7c4b8357
|
||||
zh: 13b95dcedde344f2
|
||||
/plugin-indexes/table-of-contents:
|
||||
en: a8d1e6785c3c3c30
|
||||
zh: 7ea1eaa8204a5a1e
|
||||
/plugin-markets/turn-on-discover:
|
||||
en: a5024e57052f6e36
|
||||
zh: 39b84e247adc9a18
|
||||
/plugin-markets/browse-and-install:
|
||||
en: cf616bba26958533
|
||||
zh: 1e32df16a6f4bba7
|
||||
/plugin-markets/publish-an-index:
|
||||
/plugin-indexes/turn-on-discover:
|
||||
en: f98bc0913d4bd046
|
||||
zh: 104094714786507e
|
||||
/plugin-indexes/browse-and-install:
|
||||
en: 0f5a4082d5debe9b
|
||||
zh: c0e53f186cb31cd4
|
||||
/plugin-indexes/publish-an-index:
|
||||
en: b85b82b22c1e14b8
|
||||
zh: 920c0d6f20956c07
|
||||
/plugin-markets/generate-an-index-with-the-reference-generator:
|
||||
/plugin-indexes/generate-an-index-with-the-reference-generator:
|
||||
en: 6501406f530ffe33
|
||||
zh: 700acae3f466c985
|
||||
/plugin-markets/index-format-reference:
|
||||
en: d058d12c27433f64
|
||||
zh: f43b85e4934817f3
|
||||
/plugin-markets/further-exploration:
|
||||
en: 3c0a90e8bf73c89b
|
||||
zh: 95608eb4f6278cb4
|
||||
/plugin-markets/dev-note:
|
||||
/plugin-indexes/index-format-reference:
|
||||
en: 8fed66180a76f815
|
||||
zh: 7069ac4eed4bdfd9
|
||||
/plugin-indexes/further-exploration:
|
||||
en: 2223e92806e7e79a
|
||||
zh: 093309e1c40caa6c
|
||||
/plugin-indexes/dev-note:
|
||||
en: b75c8458928b72b9
|
||||
zh: 003ba4e17b4b5269
|
||||
@@ -1,10 +1,10 @@
|
||||
# Plugin markets
|
||||
# Plugin indexes
|
||||
|
||||
English | [中文](plugin-market.zh.md)
|
||||
|
||||
## Summary
|
||||
|
||||
A plugin market is one JSON index file that lists installable DSH bundles with their titles, icons, authors, and versions. Turn on the experimental **Custom plugin markets** bundle to browse markets in a **Discover** tab on the Plugins page and install a listed version after a confirmation. To publish a market, write or generate an index file and serve it, together with its icon files, from any static host.
|
||||
A plugin index is one JSON file that lists installable DSH bundles with their titles, icons, authors, and versions. Turn on the experimental **Custom plugin indexes** bundle to browse indexes in a **Discover** tab on the Plugins page and install a listed version after a confirmation. To publish an index, write or generate an index file and serve it, together with its icon files, from any static host.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
@@ -18,20 +18,20 @@ A plugin market is one JSON index file that lists installable DSH bundles with t
|
||||
<a id="turn-on"></a>
|
||||
## Turn on Discover
|
||||
|
||||
Open **Plugins**, find **Custom plugin markets** under **Experimental plugins**, and switch it on. A **Discover** tab appears next to **Installed**, and Creator mode gains the read-only `plugin_market` tool. Switching the bundle off removes both again.
|
||||
Open **Plugins**, find **Custom plugin indexes** under **Experimental plugins**, and switch it on. A **Discover** tab appears next to **Installed**, and Creator mode gains the read-only `plugin_market` tool. Switching the bundle off removes both again.
|
||||
|
||||
DSH ships no index source. Select **Discover**, choose **Add index source**, and enter the URL of an index file. A URL must use `http:` or `https:` and must not contain a user name, password, or `#` fragment. Anyone on the network path can change an `http:` index, including the install specs it lists, so use `https:` for a market reached over a network you do not control. Each source belongs to the current profile.
|
||||
DSH ships no index source. Select **Discover**, choose **Add index source**, and enter the URL of an index file. A URL must use `http:` or `https:` and must not contain a user name, password, or `#` fragment. Anyone on the network path can change an `http:` index, including the install specs it lists, so use `https:` for an index reached over a network you do not control. Each source belongs to the current profile.
|
||||
|
||||
<a id="browse-and-install"></a>
|
||||
## Browse and install
|
||||
|
||||
The market menu at the left of the toolbar switches between sources and opens **Manage index sources…**, where each source shows its last error. Search matches names, authors, keywords, and titles, descriptions, categories, and labels in every language, and tolerates typos; results come in best-match order until you choose another. The **Labels** menu, category pills, and **Sort** menu use the categories, labels, and sort keys that the market declares, and **Publish date** sorts by each plugin's latest version.
|
||||
The index menu at the left of the toolbar switches between sources and opens **Manage index sources…**, where each source shows its last error. Search matches names, authors, keywords, and titles, descriptions, categories, and labels in every language, and tolerates typos; results come in best-match order until you choose another. The **Labels** menu, category pills, and **Sort** menu use the categories, labels, and sort keys that the index declares, and **Publish date** sorts by each plugin's latest version.
|
||||
|
||||
Each card shows the plugin's recommended version: the highest version compatible with the running DSH that is not a prerelease, or the highest compatible prerelease when the plugin lists no version without a prerelease tag. **Install** opens a confirmation with that version's source: the npm package and registry, or the Git repository, commit, and directory. Confirming starts the normal plugin installation, including its compatibility and registry checks; nothing is installed without that confirmation.
|
||||
|
||||
Select a card to open its page. The **Versions** list shows every listed version with its compatibility and offers **Install** for any version DSH accepts, including older releases and prereleases. A card that shows **Installed**, **Update available**, or **Provided by DSH** opens the installed bundle instead.
|
||||
|
||||
Markets are third-party content. A market chooses each plugin's title, description, icon, author, and source; DSH checks the file format but not those claims. Add only sources you trust, and check the source in the confirmation before installing.
|
||||
Indexes are third-party content. An index chooses each plugin's title, description, icon, author, and source; DSH checks the file format but not those claims. Add only sources you trust, and check the source in the confirmation before installing.
|
||||
|
||||
<a id="publish-an-index"></a>
|
||||
## Publish an index
|
||||
@@ -109,10 +109,10 @@ Text fields marked `LocalizedText` are a string or an object of strings keyed by
|
||||
| Index field | Required | Meaning |
|
||||
|---|---|---|
|
||||
| `format` | yes | `1`. |
|
||||
| `title`, `description` | `title` only | Market name and description, `LocalizedText`. |
|
||||
| `title`, `description` | `title` only | Index name and description, `LocalizedText`. |
|
||||
| `metadata.categories`, `metadata.labels` | no | Objects mapping an id to `{ "title": LocalizedText }`. |
|
||||
| `metadata.sortKeys` | no | Object mapping an id to `{ "title": LocalizedText, "order": "asc" \| "desc" }`; `order` is the initial direction. |
|
||||
| `plugins` | yes | Plugins in the market's default order. |
|
||||
| `plugins` | yes | Plugins in the index's default order. |
|
||||
|
||||
| Plugin field | Required | Meaning |
|
||||
|---|---|---|
|
||||
@@ -140,7 +140,7 @@ DSH installs an npm version as `name@version`, asking `registry` first when pres
|
||||
## Further Exploration
|
||||
|
||||
- [Discover tab reference](../../../packages/client/ui-plugin-market/README.md) describes the tab's controls and states.
|
||||
- [Plugin market service](../../../packages/boot/plugin-market/README.md) covers fetch limits, caching, and the `plugin_market` tool.
|
||||
- [Plugin index service](../../../packages/boot/plugin-market/README.md) covers fetch limits, caching, and the `plugin_market` tool.
|
||||
- [Index validator](../../../packages/util/plugin-market-index/README.md) is the library generators can use to check an index before publishing it.
|
||||
|
||||
## Dev Note
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# 插件市场
|
||||
# 插件索引
|
||||
|
||||
[English](plugin-market.md) | 中文
|
||||
|
||||
## 概述
|
||||
|
||||
插件市场是一个 JSON 索引文件,列出可安装的 DSH 组合包(bundle)及其标题、图标、作者和版本。打开实验性的**自定义插件市场**组合包后,可以在插件页的**发现**标签页中浏览市场,并在确认后安装列出的版本。要发布市场,编写或生成一个索引文件,并把它和图标文件一起放到任意静态主机上。
|
||||
插件索引是一个 JSON 文件,列出可安装的 DSH 组合包(bundle)及其标题、图标、作者和版本。打开实验性的**自定义插件索引**组合包后,可以在插件页的**发现**标签页中浏览索引,并在确认后安装列出的版本。要发布索引,编写或生成一个索引文件,并把它和图标文件一起放到任意静态主机上。
|
||||
|
||||
## 目录
|
||||
|
||||
@@ -18,20 +18,20 @@
|
||||
<a id="turn-on"></a>
|
||||
## 打开「发现」
|
||||
|
||||
打开**插件**,在**实验性插件**下找到**自定义插件市场**并打开开关。**已安装**旁边会出现**发现**标签页,Creator 模式也会获得只读的 `plugin_market` 工具。关闭该组合包会再次移除这两者。
|
||||
打开**插件**,在**实验性插件**下找到**自定义插件索引**并打开开关。**已安装**旁边会出现**发现**标签页,Creator 模式也会获得只读的 `plugin_market` 工具。关闭该组合包会再次移除这两者。
|
||||
|
||||
DSH 不内置任何索引源。选择**发现**,点击**添加索引源**,输入一个索引文件的 URL。URL 必须使用 `http:` 或 `https:`,并且不能包含用户名、密码或 `#` 片段。网络路径上的任何人都能修改 `http:` 索引,包括其中列出的安装 spec,因此经由不受你控制的网络访问的市场应使用 `https:`。每个索引源属于当前 profile。
|
||||
DSH 不内置任何索引源。选择**发现**,点击**添加索引源**,输入一个索引文件的 URL。URL 必须使用 `http:` 或 `https:`,并且不能包含用户名、密码或 `#` 片段。网络路径上的任何人都能修改 `http:` 索引,包括其中列出的安装 spec,因此经由不受你控制的网络访问的索引应使用 `https:`。每个索引源属于当前 profile。
|
||||
|
||||
<a id="browse-and-install"></a>
|
||||
## 浏览和安装
|
||||
|
||||
工具栏左侧的市场菜单用于切换索引源,并可打开**管理索引源…**,其中每个索引源显示它最近一次的错误。搜索匹配名称、作者、关键词,以及所有语言的标题、描述、分类和标签,并容忍拼写错误;在你选择其他排序之前,结果按最佳匹配排序。**标签**菜单、分类按钮和**排序**菜单使用市场声明的分类、标签和排序键,**发布时间**按每个插件最新版本的时间排序。
|
||||
工具栏左侧的索引菜单用于切换索引源,并可打开**管理索引源…**,其中每个索引源显示它最近一次的错误。搜索匹配名称、作者、关键词,以及所有语言的标题、描述、分类和标签,并容忍拼写错误;在你选择其他排序之前,结果按最佳匹配排序。**标签**菜单、分类按钮和**排序**菜单使用索引声明的分类、标签和排序键,**发布时间**按每个插件最新版本的时间排序。
|
||||
|
||||
每张卡片显示插件的推荐版本:与当前运行的 DSH 兼容、且不是预发布版本的最高版本;插件没有列出任何非预发布版本时,则是兼容的最高预发布版本。**安装**会打开确认框,显示该版本的来源:npm 包和注册表,或 Git 仓库、提交和目录。确认后开始常规的插件安装,包括其中的兼容性检查和注册表检查;未经确认不会安装任何内容。
|
||||
|
||||
选择卡片会打开插件页面。**版本**列表显示列出的每个版本及其兼容性,并为 DSH 接受的任何版本提供**安装**,包括旧版本和预发布版本。显示**已安装**、**有新版本**或**随 DSH 提供**的卡片会改为打开已安装的组合包。
|
||||
|
||||
市场是第三方内容。每个插件的标题、描述、图标、作者和来源都由市场决定;DSH 检查文件格式,但不验证这些声明。只添加你信任的索引源,并在安装前核对确认框中的来源。
|
||||
索引是第三方内容。每个插件的标题、描述、图标、作者和来源都由索引决定;DSH 检查文件格式,但不验证这些声明。只添加你信任的索引源,并在安装前核对确认框中的来源。
|
||||
|
||||
<a id="publish-an-index"></a>
|
||||
## 发布索引
|
||||
@@ -109,10 +109,10 @@ pnpm --filter @deepseek-ai/dsh-plugin-market-generator start --input plugins.txt
|
||||
| 索引字段 | 必填 | 含义 |
|
||||
|---|---|---|
|
||||
| `format` | 是 | `1`。 |
|
||||
| `title`、`description` | 仅 `title` | 市场名称和描述,类型为 `LocalizedText`。 |
|
||||
| `title`、`description` | 仅 `title` | 索引名称和描述,类型为 `LocalizedText`。 |
|
||||
| `metadata.categories`、`metadata.labels` | 否 | 将 id 映射为 `{ "title": LocalizedText }` 的对象。 |
|
||||
| `metadata.sortKeys` | 否 | 将 id 映射为 `{ "title": LocalizedText, "order": "asc" \| "desc" }` 的对象;`order` 是初始方向。 |
|
||||
| `plugins` | 是 | 按市场默认顺序排列的插件。 |
|
||||
| `plugins` | 是 | 按索引默认顺序排列的插件。 |
|
||||
|
||||
| 插件字段 | 必填 | 含义 |
|
||||
|---|---|---|
|
||||
@@ -140,7 +140,7 @@ DSH 将 npm 版本安装为 `name@version`,存在 `registry` 时先询问它
|
||||
## 延伸阅读
|
||||
|
||||
- [「发现」标签页参考](../../../packages/client/ui-plugin-market/README.zh.md)说明该标签页的控件和状态。
|
||||
- [插件市场服务](../../../packages/boot/plugin-market/README.zh.md)说明获取限制、缓存和 `plugin_market` 工具。
|
||||
- [插件索引服务](../../../packages/boot/plugin-market/README.zh.md)说明获取限制、缓存和 `plugin_market` 工具。
|
||||
- [索引校验器](../../../packages/util/plugin-market-index/README.zh.md)是生成器可以用来在发布前检查索引的库。
|
||||
|
||||
## 开发备注
|
||||
|
||||
+1
-2
@@ -301,7 +301,6 @@
|
||||
"@deepseek-ai/dsh-experimental-subagent-oar": "workspace:*",
|
||||
"@deepseek-ai/dsh-experimental-tool-subagent-oar": "workspace:*",
|
||||
"@deepseek-ai/dsh-experimental-cua-macos": "workspace:*",
|
||||
"@deepseek-ai/dsh-experimental-creation-recommendations": "workspace:*",
|
||||
"@deepseek-ai/dsh-experimental-plugin-recommendations": "workspace:*"
|
||||
"@deepseek-ai/dsh-experimental-action-cards": "workspace:*"
|
||||
}
|
||||
}
|
||||
@@ -15,8 +15,8 @@
|
||||
en: 09848f4d056e4fc1
|
||||
zh: 8df6139cff0288f6
|
||||
/boot-shared-app-bin-boot-glue/packages:
|
||||
en: 71736c39fd71952c
|
||||
zh: 2033a18debd8a2d8
|
||||
en: c97ae01c92f6756e
|
||||
zh: 2ebb832078874b7a
|
||||
/boot-shared-app-bin-boot-glue/related-documentation:
|
||||
en: 77af4b40ee7b98a3
|
||||
zh: e9b4e817823b973d
|
||||
|
||||
@@ -28,7 +28,7 @@ The boot group launches profile applications and manages their installed composi
|
||||
| [`hmr`](hmr/README.md) | Coordinates module and configuration reloads with package mutations | `hmr` |
|
||||
| [`config-editor`](config-editor/README.md) | Persists active profile configuration through Loader reconciliation | `configEditor` |
|
||||
| [`plugin-manager`](plugin-manager/README.md) | Manages current-profile plugins and bundle packages through shared CLI operations | `pluginManager` |
|
||||
| [`plugin-market`](plugin-market/README.md) | Reads the plugin market indexes the user configures for Discover and the `plugin_market` tool | `pluginMarket` |
|
||||
| [`plugin-market`](plugin-market/README.md) | Reads the plugin indexes the user configures for Discover and the `plugin_market` tool | `pluginMarket` |
|
||||
|
||||
<a id="related-documentation"></a>
|
||||
## Related documentation
|
||||
|
||||
@@ -28,7 +28,7 @@ boot 组负责启动 profile 应用并管理其已安装组合。`app-boot` 解
|
||||
| [`hmr`](hmr/README.zh.md) | 协调模块与配置重载,并与包修改互斥执行 | `hmr` |
|
||||
| [`config-editor`](config-editor/README.zh.md) | 通过 Loader 应用并持久化当前 profile 配置 | `configEditor` |
|
||||
| [`plugin-manager`](plugin-manager/README.zh.md) | 通过共享 CLI 操作管理当前 profile 插件与组合包 | `pluginManager` |
|
||||
| [`plugin-market`](plugin-market/README.zh.md) | 读取用户配置的插件市场索引,供发现页和 `plugin_market` 工具使用 | `pluginMarket` |
|
||||
| [`plugin-market`](plugin-market/README.zh.md) | 读取用户配置的插件索引,供发现页和 `plugin_market` 工具使用 | `pluginMarket` |
|
||||
|
||||
<a id="related-documentation"></a>
|
||||
## 相关文档
|
||||
|
||||
@@ -3,20 +3,20 @@
|
||||
# After editing either side, bring the other along and re-record with:
|
||||
# pnpm run verify-translation-pairing --write packages/boot/plugin-market/README.md
|
||||
/:
|
||||
en: 847c61ab6dac5fd2
|
||||
zh: 4107ba58fbda723e
|
||||
en: 043de7aa04105a53
|
||||
zh: b3d966c6029037e1
|
||||
/deepseek-ai-dsh-plugin-market:
|
||||
en: ee5478f5717295df
|
||||
zh: 75a03a6db791fc6b
|
||||
/deepseek-ai-dsh-plugin-market/summary:
|
||||
en: 5fc3f5439344cb9a
|
||||
zh: 73e549c0b21b3843
|
||||
en: 4def97be3ad32ece
|
||||
zh: f855102a82dbb6ec
|
||||
/deepseek-ai-dsh-plugin-market/table-of-contents:
|
||||
en: 76368b6b1da79c80
|
||||
zh: 52384aee991ac542
|
||||
/deepseek-ai-dsh-plugin-market/use-this-package:
|
||||
en: 0553ab42ee4d83ff
|
||||
zh: 4cc8163884357247
|
||||
en: fef9850d643e327f
|
||||
zh: c6e8cab773cf93b9
|
||||
/deepseek-ai-dsh-plugin-market/use-this-package/plugin-detail-documents:
|
||||
en: 0e15de273c9acaae
|
||||
zh: 4fd93c92b71d4398
|
||||
@@ -39,8 +39,8 @@
|
||||
en: 02cf6033092eb236
|
||||
zh: cb928bfa6d39a7f7
|
||||
/deepseek-ai-dsh-plugin-market/known-limitations-and-deferred-work:
|
||||
en: 427d9c58ee09bea4
|
||||
zh: ec1c2bade3b56014
|
||||
en: 54122c96969ebbc2
|
||||
zh: 3fbe84bc6069cb46
|
||||
/deepseek-ai-dsh-plugin-market/known-limitations-and-deferred-work/dev-note:
|
||||
en: e67f633dc6fe7773
|
||||
zh: 3bb0c20c93f16f98
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
description: "Host reader of the plugin market indexes a user configures, with installation status, compatibility, and the read-only plugin_market tool."
|
||||
description: "Host reader of the plugin indexes a user configures, with installation status, compatibility, and the read-only plugin_market tool."
|
||||
kind: "package-reference"
|
||||
---
|
||||
|
||||
@@ -9,7 +9,7 @@ English | [中文](README.zh.md)
|
||||
|
||||
## Summary
|
||||
|
||||
`pluginMarket` reads the plugin market indexes the user configures, validates them with [`dsh-plugin-market-index`](../../util/plugin-market-index/README.md), and annotates every entry with the profile's installation status, DSH compatibility, and the exact arguments that install it. It also reads each market entry's long description, a Markdown document with images, for Discover entry pages. The Web [Discover tab](../../client/ui-plugin-market/README.md) and the `plugin_market` agent tool read through it; installation itself goes through [`pluginManager.installBundle`](../plugin-manager/README.md). The format and its rationale live in the [index format Agent Note](../../../.agents/notes/implemented/feature/2026-10-02-plugin-market-index-format.md); the Host and Web design lives in the [Discover Agent Note](../../../.agents/notes/implemented/feature/2026-10-02-plugin-market-discover.md).
|
||||
`pluginMarket` reads the plugin indexes the user configures, validates them with [`dsh-plugin-market-index`](../../util/plugin-market-index/README.md), and annotates every entry with the profile's installation status, DSH compatibility, and the exact arguments that install it. It also reads each index entry's long description, a Markdown document with images, for Discover entry pages. The Web [Discover tab](../../client/ui-plugin-market/README.md) and the `plugin_market` agent tool read through it; installation itself goes through [`pluginManager.installBundle`](../plugin-manager/README.md). The format and its rationale live in the [index format Agent Note](../../../.agents/notes/implemented/feature/2026-10-02-plugin-market-index-format.md); the Host and Web design lives in the [Discover Agent Note](../../../.agents/notes/implemented/feature/2026-10-02-plugin-market-discover.md).
|
||||
|
||||
## Table of Contents
|
||||
|
||||
@@ -24,7 +24,7 @@ English | [中文](README.zh.md)
|
||||
<a id="use-this-package"></a>
|
||||
## Use this package
|
||||
|
||||
The optional [custom plugin markets bundle](../../experimental/plugin-market-bundle/README.md) mounts the service as the `plugin-market` row; shipped profiles leave the bundle off. Like `plugin-manager`, the row is disabled without a profile, and it waits for `pluginManager`. No index source is configured by default, so the Host sends no market request until a user adds one.
|
||||
The optional [custom plugin indexes bundle](../../experimental/plugin-market-bundle/README.md) mounts the service as the `plugin-market` row; shipped profiles leave the bundle off. Like `plugin-manager`, the row is disabled without a profile, and it waits for `pluginManager`. No index source is configured by default, so the Host sends no index request until a user adds one.
|
||||
|
||||
| Config | Default | Meaning |
|
||||
|---|---|---|
|
||||
@@ -123,10 +123,10 @@ Append-only: results enter the conversation as ordinary tool results and do not
|
||||
<a id="known-limitations-and-deferred-work"></a>
|
||||
|
||||
- **No upgrade** — an installed bundle with a newer index version is reported as `update-available`; upgrading remains uninstall followed by install.
|
||||
- **Unsigned indexes** — index content, including a Git entry's name and version, is the market's claim; the installed manifest decides what is installed.
|
||||
- **Unsigned indexes** — index content, including a Git entry's name and version, is the index's claim; the installed manifest decides what is installed.
|
||||
- **Last write wins** — `setIndexes` replaces the whole list, so two windows editing sources at the same time can overwrite each other's change.
|
||||
- **Redirects refused** — an index served only behind a redirect must be configured at its final URL.
|
||||
- **Whole-document reads** — the Host downloads and keeps each index up to `maxBytes` and builds its text index in memory; a synthetic index of 20,000 plugins took about 0.8 s of build time and 130 MiB of heap. Parsing runs in a Worker, but receiving the validated index still blocks the Host event loop while the clone is deserialized: about 35 ms for a synthetic 7.6 MiB index of 20,000 plugins and about 190 ms for 38 MiB and 100,000 plugins. Larger markets need a server-side query protocol.
|
||||
- **Whole-document reads** — the Host downloads and keeps each index up to `maxBytes` and builds its text index in memory; a synthetic index of 20,000 plugins took about 0.8 s of build time and 130 MiB of heap. Parsing runs in a Worker, but receiving the validated index still blocks the Host event loop while the clone is deserialized: about 35 ms for a synthetic 7.6 MiB index of 20,000 plugins and about 190 ms for 38 MiB and 100,000 plugins. Larger indexes need a server-side query protocol.
|
||||
- **Default-branch READMEs** — a repository README is read at the default branch, which can differ from the listed version; npm records no commit the CDNs expose.
|
||||
- **Private npm registries** — the public CDNs do not serve packages of other registries, so only the entry's repository can provide such a version's document.
|
||||
- **Fetching an unadvertised commit** — a pinned Git entry is fetched by commit id, which the server must allow (`uploadpack.allowReachableSHA1InWant` or `allowAnySHA1InWant`); GitHub and GitLab allow it, and a server that refuses reports `denied`.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
description: "读取用户配置的插件市场索引的 Host 服务,提供安装状态、兼容性以及只读的 plugin_market 工具。"
|
||||
description: "读取用户配置的插件索引的 Host 服务,提供安装状态、兼容性以及只读的 plugin_market 工具。"
|
||||
kind: "package-reference"
|
||||
---
|
||||
|
||||
@@ -9,7 +9,7 @@ kind: "package-reference"
|
||||
|
||||
## 概述
|
||||
|
||||
`pluginMarket` 读取用户配置的插件市场索引,用 [`dsh-plugin-market-index`](../../util/plugin-market-index/README.zh.md) 校验,并为每个条目标注 profile 中的安装状态、DSH 兼容性以及安装它所需的精确参数。它还为发现区的条目页面读取每个市场条目的详细介绍,即一份带图片的 Markdown 文档。Web 的[发现标签页](../../client/ui-plugin-market/README.zh.md)和 `plugin_market` agent 工具通过它读取;安装本身经由 [`pluginManager.installBundle`](../plugin-manager/README.zh.md) 进行。格式及其理由见[索引格式 Agent Note](../../../.agents/notes/implemented/feature/2026-10-02-plugin-market-index-format.zh.md);Host 与 Web 的设计见[发现 Agent Note](../../../.agents/notes/implemented/feature/2026-10-02-plugin-market-discover.zh.md)。
|
||||
`pluginMarket` 读取用户配置的插件索引,用 [`dsh-plugin-market-index`](../../util/plugin-market-index/README.zh.md) 校验,并为每个条目标注 profile 中的安装状态、DSH 兼容性以及安装它所需的精确参数。它还为发现区的条目页面读取每个索引条目的详细介绍,即一份带图片的 Markdown 文档。Web 的[发现标签页](../../client/ui-plugin-market/README.zh.md)和 `plugin_market` agent 工具通过它读取;安装本身经由 [`pluginManager.installBundle`](../plugin-manager/README.zh.md) 进行。格式及其理由见[索引格式 Agent Note](../../../.agents/notes/implemented/feature/2026-10-02-plugin-market-index-format.zh.md);Host 与 Web 的设计见[发现 Agent Note](../../../.agents/notes/implemented/feature/2026-10-02-plugin-market-discover.zh.md)。
|
||||
|
||||
## 目录
|
||||
|
||||
@@ -24,7 +24,7 @@ kind: "package-reference"
|
||||
<a id="use-this-package"></a>
|
||||
## 使用本包
|
||||
|
||||
可选的[自定义插件市场组合包](../../experimental/plugin-market-bundle/README.zh.md)把该服务挂载为 `plugin-market` 行;随附的 profile 默认不启用该组合包。与 `plugin-manager` 一样,该行在没有 profile 时被禁用,并等待 `pluginManager`。默认不配置任何索引源,因此在用户添加索引源之前,Host 不发送任何市场请求。
|
||||
可选的[自定义插件索引组合包](../../experimental/plugin-market-bundle/README.zh.md)把该服务挂载为 `plugin-market` 行;随附的 profile 默认不启用该组合包。与 `plugin-manager` 一样,该行在没有 profile 时被禁用,并等待 `pluginManager`。默认不配置任何索引源,因此在用户添加索引源之前,Host 不发送任何索引请求。
|
||||
|
||||
| 配置 | 默认值 | 含义 |
|
||||
|---|---|---|
|
||||
@@ -124,10 +124,10 @@ Host 使用进程的 `fetch` 获取,因此配置的出站代理生效,并拒
|
||||
<a id="known-limitations-and-deferred-work"></a>
|
||||
|
||||
- **不支持升级**——索引版本更新的已安装组合包报告为 `update-available`;升级仍需先卸载再安装。
|
||||
- **索引没有签名**——索引内容(包括 Git 条目的名称和版本)是市场的声明;实际安装什么由已安装的 manifest(元数据清单)决定。
|
||||
- **索引没有签名**——索引内容(包括 Git 条目的名称和版本)是索引的声明;实际安装什么由已安装的 manifest(元数据清单)决定。
|
||||
- **后写入者覆盖**——`setIndexes` 会替换整个列表,因此两个窗口同时编辑索引源时,可能互相覆盖对方的修改。
|
||||
- **拒绝重定向**——只能经重定向访问的索引必须以其最终 URL 配置。
|
||||
- **读取整份文档**——Host 下载并保留每个不超过 `maxBytes` 的索引,并在内存中构建其文本索引;一个包含 20,000 个插件的合成索引构建用时约 0.8 秒,占用约 130 MiB 堆内存。解析在 Worker 中运行,但接收校验后的索引时,反序列化 clone 仍会阻塞 Host 事件循环:包含 20,000 个插件的 7.6 MiB 合成索引约 35 毫秒,包含 100,000 个插件的 38 MiB 索引约 190 毫秒。更大的市场需要服务端查询协议。
|
||||
- **读取整份文档**——Host 下载并保留每个不超过 `maxBytes` 的索引,并在内存中构建其文本索引;一个包含 20,000 个插件的合成索引构建用时约 0.8 秒,占用约 130 MiB 堆内存。解析在 Worker 中运行,但接收校验后的索引时,反序列化 clone 仍会阻塞 Host 事件循环:包含 20,000 个插件的 7.6 MiB 合成索引约 35 毫秒,包含 100,000 个插件的 38 MiB 索引约 190 毫秒。更大的索引需要服务端查询协议。
|
||||
- **默认分支的 README**——仓库 README 读取的是默认分支上的文件,可能与列出的版本不一致;CDN 公开的 npm 数据不记录提交。
|
||||
- **私有 npm 注册表**——公共 CDN 不提供其他注册表的包,因此此类版本的文档只能来自条目的仓库。
|
||||
- **获取未公布的提交**——固定版本的 Git 条目按提交 id 获取,这需要服务器允许(`uploadpack.allowReachableSHA1InWant` 或 `allowAnySHA1InWant`);GitHub 和 GitLab 允许这样做,拒绝的服务器报告 `denied`。
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Plugin market indexes",
|
||||
"description": "Manage configured market indexes for plugin discovery and the plugin_market tool."
|
||||
"title": "Plugin indexes",
|
||||
"description": "Manage configured plugin indexes for plugin discovery and the plugin_market tool."
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "プラグインマーケットのインデックス",
|
||||
"description": "プラグイン検索ページと plugin_market ツールで使う、設定済みのマーケットのインデックスを管理します。"
|
||||
"title": "プラグインインデックス",
|
||||
"description": "プラグイン検索ページと plugin_market ツールで使う、設定済みのプラグインインデックスを管理します。"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "插件市场索引",
|
||||
"description": "为插件发现页面和 plugin_market 工具管理已配置的市场索引。"
|
||||
"title": "插件索引",
|
||||
"description": "为插件发现页面和 plugin_market 工具管理已配置的插件索引。"
|
||||
}
|
||||
}
|
||||
@@ -60,7 +60,7 @@ function paged<T>(items: readonly T[], page: Page): { readonly slice: T[]; reado
|
||||
|
||||
/**
|
||||
* Register the read-only `plugin_market` tool while the `pluginMarket` service is mounted. The service comes from the
|
||||
* optional custom plugin markets bundle, so a preset can keep this row without the tool appearing or the row waiting.
|
||||
* optional custom plugin indexes bundle, so a preset can keep this row without the tool appearing or the row waiting.
|
||||
* @param ctx - Agent-scoped tool registration context.
|
||||
*/
|
||||
export function apply(ctx: Context): void {
|
||||
@@ -136,6 +136,6 @@ function registerTool(ctx: Context): void {
|
||||
default: return assertNever(args.action)
|
||||
}
|
||||
},
|
||||
presentCall: args => ({ card: 'generic', title: 'Browse plugin market', kind: 'read', rawInput: args }),
|
||||
presentCall: args => ({ card: 'generic', title: 'Browse plugin indexes', kind: 'read', rawInput: args }),
|
||||
}))
|
||||
}
|
||||
@@ -82,7 +82,7 @@ function styleInjectionModule(
|
||||
* Everything else under @deepseek-ai/* is either a module-table entry
|
||||
* (external) or a leak the purity gate rejects.
|
||||
*/
|
||||
export const INLINE_SAFE = /^(?:@deepseek-ai\/dsh-(?:file-reference|session|llm|tools|brand|deque|output-retention|typert-protocol|util-action-block|util-crypto|util-values|util-workspace-path)(?:\/|$)|@deepseek-ai\/dsh-util-file-drag$|@deepseek-ai\/dsh-token-meter\/client$|@deepseek-ai\/dsh-native-command\/types$|@deepseek-ai\/dsh-host-open-in-app\/shared$|@deepseek-ai\/dsh-plugin-manager\/registry$|@deepseek-ai\/dsh-agent-preset-registry\/display$|@deepseek-ai\/dsh-api-workspace-controller\/default-workspace$|@deepseek-ai\/dsh-spill-policy\/notice$)/
|
||||
export const INLINE_SAFE = /^(?:@deepseek-ai\/dsh-(?:file-reference|session|llm|tools|brand|deque|output-retention|typert-protocol|util-crypto|util-values|util-workspace-path)(?:\/|$)|@deepseek-ai\/dsh-util-file-drag$|@deepseek-ai\/dsh-token-meter\/client$|@deepseek-ai\/dsh-native-command\/types$|@deepseek-ai\/dsh-host-open-in-app\/shared$|@deepseek-ai\/dsh-plugin-manager\/registry$|@deepseek-ai\/dsh-agent-preset-registry\/display$|@deepseek-ai\/dsh-api-workspace-controller\/default-workspace$|@deepseek-ai\/dsh-spill-policy\/notice$)/
|
||||
|
||||
/**
|
||||
* Vendored framework libraries: rescoped into @deepseek-ai, so the gate below
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
en: a05d85ff4949b526
|
||||
zh: 7261ffc98665e9e7
|
||||
/deepseek-ai-dsh-client-ui-chat/hidden-chat-rows:
|
||||
en: e60db44c8a6a016e
|
||||
zh: d563bd5d34da9807
|
||||
en: cbf1f0a2205046a5
|
||||
zh: 2e59d0815351349f
|
||||
/deepseek-ai-dsh-client-ui-chat/command-and-failure-rows:
|
||||
en: 41dcd70e14ebe9cc
|
||||
zh: ededead572b59037
|
||||
|
||||
@@ -56,8 +56,6 @@ Chat omits system-prompt, ordinary Context injection, and `permission` command r
|
||||
|
||||
When an Assistant attempt retires without a visible message, Chat hides its already-published Node instead of removing its key. A retry in the same Step reuses that key when visible content returns. This also applies when the loaded window lacks the Step start.
|
||||
|
||||
Chat hides top-level `dsh-` directive fences, as found by [`dsh-util-action-block`](../../util/action-block/README.md), from rendered answers and from the answer text the Turn footer copies; Trajectory keeps the raw text.
|
||||
|
||||
<a id="command-and-failure-rows"></a>
|
||||
## Command and failure rows
|
||||
|
||||
|
||||
@@ -56,8 +56,6 @@ Chat 在所有工作步骤展示模式下都不显示系统提示词行、普通
|
||||
|
||||
Assistant 尝试结束且没有可见消息时,Chat 隐藏已发布的 Node,不移除其 key。同一 Step 的重试再次产生可见内容时,复用该 key。已加载窗口缺少 Step 起点时也遵循此规则。
|
||||
|
||||
Chat 在渲染的回答和轮次页脚复制的回答文本中隐藏 [`dsh-util-action-block`](../../util/action-block/README.zh.md) 识别出的顶层 `dsh-` 指令围栏;Trajectory 保留原始文本。
|
||||
|
||||
<a id="command-and-failure-rows"></a>
|
||||
## 指令与失败行
|
||||
|
||||
|
||||
@@ -92,7 +92,6 @@
|
||||
"@deepseek-ai/dsh-util-workspace-path": "workspace:*",
|
||||
"@deepseek-ai/dsh-tool-executor-ptc": "workspace:*",
|
||||
"@deepseek-ai/dsh-util-values": "workspace:*",
|
||||
"@deepseek-ai/dsh-util-action-block": "workspace:*",
|
||||
"@tanstack/react-virtual": "3.14.10",
|
||||
"react": "^18.2.0",
|
||||
"react-dom": "^18.2.0",
|
||||
|
||||
@@ -9,7 +9,6 @@ import type { AssistantBlock } from '../contract/snapshot.ts'
|
||||
import { markdownLabels } from '../markdown-labels.ts'
|
||||
import { ReasoningRow } from './ReasoningRow.tsx'
|
||||
import css from './AssistantMarkdown.module.css'
|
||||
import { hideDirectiveFences } from './directive-fences.ts'
|
||||
|
||||
/**
|
||||
* Standalone fallback for image destinations (query/fragment suffixes are ignored).
|
||||
@@ -86,7 +85,7 @@ export const AssistantMarkdown = memo(function AssistantMarkdown({
|
||||
rendered.push(
|
||||
<MarkdownText
|
||||
key={i}
|
||||
text={hideDirectiveFences(block.text, { streaming })}
|
||||
text={block.text}
|
||||
streaming={streaming}
|
||||
labels={labels}
|
||||
fileMentions={mentions}
|
||||
|
||||
@@ -4,7 +4,6 @@ import type { ChatNodeViewProps, PerformanceUsageInjected, TurnTailOwnerProps }
|
||||
import { MessageIconActions } from './MessageIconActions.tsx'
|
||||
import { TurnUsagePanel } from './TurnUsagePanel.tsx'
|
||||
import { assistantText } from './turn-assistant.ts'
|
||||
import { hideDirectiveFences } from './directive-fences.ts'
|
||||
import { hasAssistantReplyContent } from '../contract/assistant-content.ts'
|
||||
import type { ChatNode } from '../contract/chat-nodes.ts'
|
||||
import type { ChatSnapshot } from '../contract/snapshot.ts'
|
||||
@@ -63,7 +62,7 @@ export const TurnTailNodeView = memo(function TurnTailNodeView({
|
||||
>
|
||||
{tail}
|
||||
<MessageIconActions
|
||||
text={hideDirectiveFences(assistantText(closing.blocks))}
|
||||
text={assistantText(closing.blocks)}
|
||||
time={closing.time}
|
||||
clock="end"
|
||||
// The branch action owns boundary resolution: it sends the real
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
/** Fences in the `dsh-` language namespace carry Host-interpreted blocks, not prose; the chat hides them. */
|
||||
import { hideDirectiveFences as withoutDirectiveFences } from '@deepseek-ai/dsh-util-action-block'
|
||||
|
||||
/** Remove top-level `dsh-` fences from answer text by the shared CommonMark scan.
|
||||
* @param text - assistant text.
|
||||
* @param options - `streaming` also removes an unclosed last fence; a finished answer keeps it as text.
|
||||
* @returns the text unchanged when nothing is hidden; otherwise without the fences, leading line breaks or trailing whitespace.
|
||||
*/
|
||||
export function hideDirectiveFences(text: string, options?: { readonly streaming?: boolean }): string {
|
||||
const shown = withoutDirectiveFences(text, options)
|
||||
return shown === text ? text : shown.replace(/^\n+/u, '').trimEnd()
|
||||
}
|
||||
@@ -2543,17 +2543,6 @@ describe('ChatView', () => {
|
||||
expect(branchButtons.map(button => button.getAttribute('aria-disabled'))).toEqual([null, null])
|
||||
})
|
||||
|
||||
it('copies the final answer without its dsh- directive blocks', () => {
|
||||
const writeText = vi.fn().mockResolvedValue(undefined)
|
||||
Object.defineProperty(navigator, 'clipboard', { configurable: true, value: { writeText } })
|
||||
const block = '```dsh-action\n{"action":"create_personalized_page","title":"A","brief":"B","slot":"page"}\n```'
|
||||
const h = makeHarness({ nodes: [user(1, 'hi'), assistant(2, `方案在下方。\n\n${block}`)], turnEnds: new Map([[1, 2]]) })
|
||||
const view = render(<h.ChatView {...h.props} />)
|
||||
const tail = view.container.querySelector<HTMLElement>('[data-turn-tail]')
|
||||
fireEvent.click(within(tail!).getByRole('button', { name: '复制' }))
|
||||
expect(writeText).toHaveBeenCalledWith('方案在下方。')
|
||||
})
|
||||
|
||||
it('keeps every Assistant reply visible while the whole Turn folds its process', () => {
|
||||
const progress = {
|
||||
...assistant(2, 'stage reply', 1, 1),
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
import { expect, it } from 'vitest'
|
||||
import { hideDirectiveFences } from '../src/client/chat/directive-fences.ts'
|
||||
|
||||
const block = '```dsh-action\n{"action":"create_personalized_page","title":"A","brief":"B","slot":"page"}\n```'
|
||||
|
||||
it('hides closed top-level dsh- fences and trims the edges they leave', () => {
|
||||
expect(hideDirectiveFences(`方案在下方。\n\n${block}`)).toBe('方案在下方。')
|
||||
expect(hideDirectiveFences(`${block}\n\n后记`)).toBe('后记')
|
||||
expect(hideDirectiveFences(`前\n\n${block}\n\n后`)).toBe('前\n\n后')
|
||||
expect(hideDirectiveFences('```dsh-action json\n{}\n``` \n尾')).toBe('尾')
|
||||
})
|
||||
|
||||
it('keeps an unclosed fence in a finished answer and hides it while streaming', () => {
|
||||
const unclosed = '说明\n\n```dsh-action\n{"action":"create_pers'
|
||||
expect(hideDirectiveFences(unclosed)).toBe(unclosed)
|
||||
expect(hideDirectiveFences(unclosed, { streaming: false })).toBe(unclosed)
|
||||
expect(hideDirectiveFences(unclosed, { streaming: true })).toBe('说明')
|
||||
})
|
||||
|
||||
it('follows CommonMark fences for nested examples, longer fences and fence characters after text', () => {
|
||||
const nested = '示例:\n\n````markdown\n' + block + '\n````'
|
||||
expect(hideDirectiveFences(nested)).toBe(nested)
|
||||
expect(hideDirectiveFences('前\n\n````dsh-action\n{"note":"```"}\n```\n````\n\n后')).toBe('前\n\n后')
|
||||
const glued = '见下方:```dsh-action\n{}\n```'
|
||||
expect(hideDirectiveFences(glued)).toBe(glued)
|
||||
})
|
||||
|
||||
it('keeps other text as written, including blank lines inside other code blocks', () => {
|
||||
const code = '看代码:\n\n```ts\nconst a = 1\n\n\n\nconst b = 2\n```\n\n完'
|
||||
expect(hideDirectiveFences(code)).toBe(code)
|
||||
expect(hideDirectiveFences(`${code}\n\n${block}`)).toBe(code)
|
||||
expect(hideDirectiveFences('\n没有围栏 \n')).toBe('\n没有围栏 \n')
|
||||
})
|
||||
@@ -15,9 +15,6 @@
|
||||
{
|
||||
"path": "../../util/values"
|
||||
},
|
||||
{
|
||||
"path": "../../util/action-block"
|
||||
},
|
||||
{
|
||||
"path": "../../../vendor/cordis"
|
||||
},
|
||||
|
||||
@@ -3,23 +3,23 @@
|
||||
# After editing either side, bring the other along and re-record with:
|
||||
# pnpm run verify-translation-pairing --write packages/client/ui-plugin-market/README.md
|
||||
/:
|
||||
en: af3fe4b70bddbc1b
|
||||
zh: ac1c4326165266d9
|
||||
en: b77d6d729562a88f
|
||||
zh: b1634cc1d027424c
|
||||
/deepseek-ai-dsh-client-ui-plugin-market:
|
||||
en: 62972eb0dff8c145
|
||||
zh: 682cc03b492cd730
|
||||
/deepseek-ai-dsh-client-ui-plugin-market/summary:
|
||||
en: 55a3d1b12cd7be61
|
||||
zh: a961cf0212b3fda8
|
||||
en: 71328d505b984fe5
|
||||
zh: 9281e7dbaa01ef9a
|
||||
/deepseek-ai-dsh-client-ui-plugin-market/table-of-contents:
|
||||
en: 76368b6b1da79c80
|
||||
zh: 52384aee991ac542
|
||||
/deepseek-ai-dsh-client-ui-plugin-market/use-this-package:
|
||||
en: f873bf36195df821
|
||||
zh: e13c78ba3f3e29f1
|
||||
en: 868b100459e30aad
|
||||
zh: 8a3a01199dc3c14c
|
||||
/deepseek-ai-dsh-client-ui-plugin-market/understand-the-implementation:
|
||||
en: 4107a6967934f6b6
|
||||
zh: 46acec8bedb86329
|
||||
en: e1a480caaff8efea
|
||||
zh: 0b725fa5bc929f22
|
||||
/deepseek-ai-dsh-client-ui-plugin-market/model-experience:
|
||||
en: 08d25ab9cbdd7567
|
||||
zh: 26e6e75c123951ee
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
description: "Discover tab of the Web Plugins page: search configured plugin market indexes, read an entry, and install it."
|
||||
description: "Discover tab of the Web Plugins page: search configured plugin indexes, read an entry, and install it."
|
||||
kind: "package-reference"
|
||||
---
|
||||
|
||||
@@ -9,7 +9,7 @@ English | [中文](README.zh.md)
|
||||
|
||||
## Summary
|
||||
|
||||
Discover is the second tab of the **Plugins** page, after **Installed**. It lists the bundles that plugin market indexes offer; users manage index sources, switch between markets, search, filter by category and label, sort, open an entry's page, and install an entry after confirming it. Entry pages show each entry's long description as Markdown with images. The Host [`pluginMarket`](../../boot/plugin-market/README.md) service fetches and validates indexes; this package only presents them.
|
||||
Discover is the second tab of the **Plugins** page, after **Installed**. It lists the bundles that plugin indexes offer; users manage index sources, switch between indexes, search, filter by category and label, sort, open an entry's page, and install an entry after confirming it. Entry pages show each entry's long description as Markdown with images. The Host [`pluginMarket`](../../boot/plugin-market/README.md) service fetches and validates indexes; this package only presents them.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
@@ -24,11 +24,11 @@ Discover is the second tab of the **Plugins** page, after **Installed**. It list
|
||||
<a id="use-this-package"></a>
|
||||
## Use this package
|
||||
|
||||
Open **Plugins** and select **Discover**. With no index source, the tab shows an empty state whose **Add index source** button opens the **Index sources** dialog. The dialog lists each source by market title, or by host before the first read, with its URL, the error of its last failed read, and a remove button, and keeps a notice that indexes come from third parties. A refused URL keeps the draft and says why: an unsupported scheme, credentials, or fragment; a URL already listed; or a deployment that cannot save sources. A newly added source becomes the selected market.
|
||||
Open **Plugins** and select **Discover**. With no index source, the tab shows an empty state whose **Add index source** button opens the **Index sources** dialog. The dialog lists each source by index title, or by host before the first read, with its URL, the error of its last failed read, and a remove button, and keeps a notice that indexes come from third parties. A refused URL keeps the draft and says why: an unsupported scheme, credentials, or fragment; a URL already listed; or a deployment that cannot save sources. A newly added source becomes the selected index.
|
||||
|
||||
The toolbar holds the market menu, which switches markets and ends with **Manage index sources…**; the search field; a **Labels** menu with multi-select checkmarks when the market declares labels; the **Sort** menu; and a refresh button. Category pills, with **All** first, follow when the market declares categories.
|
||||
The toolbar holds the index menu, which switches indexes and ends with **Manage index sources…**; the search field; a **Labels** menu with multi-select checkmarks when the index declares labels; the **Sort** menu; and a refresh button. Category pills, with **All** first, follow when the index declares categories.
|
||||
|
||||
Each card shows the icon, localized title, label tags, a one-line description, and the default version, author, and publish date, with one action: **Install** for an installable entry; a disabled **Install** whose tooltip says no version is compatible with the running DSH when the plugin has no default version and its highest version is neither compatible nor exempted; or **Installed**, **Update available**, or **Provided by DSH**, which switches to the Installed tab and opens that bundle's page when that tab lists it. Selecting a card opens the entry's page with its full description, compatibility notice, and, under the source heading, the default version's facts: author; homepage and source code repository, as links that open in a new tab, with the package directory beside the repository; the npm package and registry, or the Git repository, full commit, and directory; publish date; category; labels; and market. The page shows the long description first, without a heading of its own, then **Versions**, then the source facts. The **Versions** list is in descending SemVer order; each row tags the recommended, prerelease, installed, incompatible, and exempted versions and offers **Install** for any other version installation accepts, except for a bundle DSH provides. The page's back link returns to the list with its search, filters, and sort intact.
|
||||
Each card shows the icon, localized title, label tags, a one-line description, and the default version, author, and publish date, with one action: **Install** for an installable entry; a disabled **Install** whose tooltip says no version is compatible with the running DSH when the plugin has no default version and its highest version is neither compatible nor exempted; or **Installed**, **Update available**, or **Provided by DSH**, which switches to the Installed tab and opens that bundle's page when that tab lists it. Selecting a card opens the entry's page with its full description, compatibility notice, and, under the source heading, the default version's facts: author; homepage and source code repository, as links that open in a new tab, with the package directory beside the repository; the npm package and registry, or the Git repository, full commit, and directory; publish date; category; labels; and index title. The page shows the long description first, without a heading of its own, then **Versions**, then the source facts. The **Versions** list is in descending SemVer order; each row tags the recommended, prerelease, installed, incompatible, and exempted versions and offers **Install** for any other version installation accepts, except for a bundle DSH provides. The page's back link returns to the list with its search, filters, and sort intact.
|
||||
|
||||
**Install** chooses the default version and opens a confirmation dialog with the entry's icon, title, that version, the author, its source facts, an exemption notice when one applies, and a trust notice. Confirming opens the Plugins install dialog at its check screen with the entry's exact spec and registry; there is no spec form, and a refusal offers **Retry**. The registry an entry names applies to that install only.
|
||||
|
||||
@@ -36,7 +36,7 @@ The Host [`pluginMarket.search`](../../boot/plugin-market/README.md#use-this-pac
|
||||
|
||||
The description section shows the default version's long description in the active UI language: the version's locale `meta.detail` file, otherwise its package README, otherwise its repository README, in the [order `pluginMarket` documents](../../boot/plugin-market/README.md#plugin-detail-documents). While the document loads, the section shows three skeleton lines; an entry without a document shows no section; a failed read names its reason, such as a size limit, an unreachable source, or a refused repository, with **Retry**. Raw HTML is omitted, and a document taller than the section's height limit scrolls inside it. Relative image paths load from the Host beside the document, absolute HTTP(S) images load directly without a referrer, and relative links stay text. The section is the shared [`DetailDocument`](../ui-primitives/README.md#component-catalog) primitive.
|
||||
|
||||
Reading a market shows card skeletons. A failed read shows a short sentence with **Retry**, the Host's reason appears under the source in **Index sources**, and keeps the market's last listing; a failed read of the source list shows **Retry** in place of the tab. Discover re-reads sources on `plugin-market/changed` and connection reset, and recomputes installation status on `plugin-manager/changed`.
|
||||
Reading an index shows card skeletons. A failed read shows a short sentence with **Retry**, the Host's reason appears under the source in **Index sources**, and keeps the index's last listing; a failed read of the source list shows **Retry** in place of the tab. Discover re-reads sources on `plugin-market/changed` and connection reset, and recomputes installation status on `plugin-manager/changed`.
|
||||
|
||||
-----
|
||||
|
||||
@@ -45,7 +45,7 @@ Reading a market shows card skeletons. A failed read shows a short sentence with
|
||||
|
||||
Detail reads are kept in a second snapshot store keyed by index URL, entry, version, and language; a section starts its read when it renders, an npm version's read first asks the Host's registry comparison and passes `npmFileSources: ['npmmirror']` when npmmirror answered fastest, only the latest read of a key settles it, **Retry** asks the Host to read again instead of returning its cached result, and a connection reset forgets every read, because a restarted Host no longer knows the document ids its images use, so each shown section reads its document again. Image URLs resolve `api/plugin-market/detail-file` against `document.baseURI`, so they keep a deployment prefix and use the Desktop `dsh-app://app/` origin, which [`MarkdownText`](../ui-primitives/README.md) accepts for that route.
|
||||
|
||||
The plugin registers the `discover` entry, labelled **Discover**, into `plugins.tab`, the tab slot that [`ui-plugin-manager`](../ui-plugin-manager/README.md) declares; the owner props provide `install({ spec, registry?, title, version })` and `openPackage(name)`; Discover passes the entry's localized title and the chosen version. A React-free controller owns source reads, source edits, and the selected index's query and loaded pages in a snapshot store; selecting another market starts from the initial query. Later pages send the first page's `fetchedAt`, and a page from a replaced document reloads the list once; a second replacement fails the read. The listing keeps the query its results answer, so the empty-state wording follows the shown results while a new query loads or after it fails, and **Retry** repeats the read that failed: the first pages of a query or the next page. A change to the profile's bundles reloads every loaded page to refresh installation status, and a filter or sort key the index no longer declares leaves the query. The unsent search text, the open entry, and the confirmation are component state. Pure helpers in `presentation.ts` derive the query order from the text, drop undeclared ids, order declarations with `Intl.Collator` in the active UI language, and list source facts. Icons load lazily with `referrerpolicy="no-referrer"` and fall back to the default artwork.
|
||||
The plugin registers the `discover` entry, labelled **Discover**, into `plugins.tab`, the tab slot that [`ui-plugin-manager`](../ui-plugin-manager/README.md) declares; the owner props provide `install({ spec, registry?, title, version })` and `openPackage(name)`; Discover passes the entry's localized title and the chosen version. A React-free controller owns source reads, source edits, and the selected index's query and loaded pages in a snapshot store; selecting another index starts from the initial query. Later pages send the first page's `fetchedAt`, and a page from a replaced document reloads the list once; a second replacement fails the read. The listing keeps the query its results answer, so the empty-state wording follows the shown results while a new query loads or after it fails, and **Retry** repeats the read that failed: the first pages of a query or the next page. A change to the profile's bundles reloads every loaded page to refresh installation status, and a filter or sort key the index no longer declares leaves the query. The unsent search text, the open entry, and the confirmation are component state. Pure helpers in `presentation.ts` derive the query order from the text, drop undeclared ids, order declarations with `Intl.Collator` in the active UI language, and list source facts. Icons load lazily with `referrerpolicy="no-referrer"` and fall back to the default artwork.
|
||||
|
||||
-----
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
---
|
||||
description: "Web 插件页的「发现」标签页:搜索已配置的插件市场索引,查看条目并安装。"
|
||||
description: "Web 插件页的「发现」标签页:搜索已配置的插件索引,查看条目并安装。"
|
||||
kind: "package-reference"
|
||||
---
|
||||
|
||||
@@ -9,7 +9,7 @@ kind: "package-reference"
|
||||
|
||||
## 概述
|
||||
|
||||
「发现」是**插件**页的第二个标签页,位于**已安装**之后。它列出插件市场索引提供的组合包(bundle);用户可以管理索引源、在插件市场之间切换、搜索、按分类和标签筛选、排序、打开条目页面,并在确认后安装条目。条目页面以带图片的 Markdown 显示每个条目的详细介绍。Host 的 [`pluginMarket`](../../boot/plugin-market/README.zh.md) 服务负责获取和校验索引;本包只负责展示。
|
||||
「发现」是**插件**页的第二个标签页,位于**已安装**之后。它列出插件索引提供的组合包(bundle);用户可以管理索引源、在插件索引之间切换、搜索、按分类和标签筛选、排序、打开条目页面,并在确认后安装条目。条目页面以带图片的 Markdown 显示每个条目的详细介绍。Host 的 [`pluginMarket`](../../boot/plugin-market/README.zh.md) 服务负责获取和校验索引;本包只负责展示。
|
||||
|
||||
## 目录
|
||||
|
||||
@@ -24,11 +24,11 @@ kind: "package-reference"
|
||||
<a id="use-this-package"></a>
|
||||
## 使用本包
|
||||
|
||||
打开**插件**并选择**发现**。没有索引源时,该标签页显示空状态,其中的**添加索引源**按钮打开**索引源**对话框。对话框按插件市场标题列出每个索引源(首次读取前按主机名),并显示其 URL、最近一次读取失败的错误和删除按钮,同时保留一条提示,说明索引由第三方提供。URL 被拒绝时保留草稿并说明原因:不支持的协议、包含凭据或片段、URL 已在列表中,或当前部署无法保存索引源。新添加的索引源成为所选插件市场。
|
||||
打开**插件**并选择**发现**。没有索引源时,该标签页显示空状态,其中的**添加索引源**按钮打开**索引源**对话框。对话框按插件索引标题列出每个索引源(首次读取前按主机名),并显示其 URL、最近一次读取失败的错误和删除按钮,同时保留一条提示,说明索引由第三方提供。URL 被拒绝时保留草稿并说明原因:不支持的协议、包含凭据或片段、URL 已在列表中,或当前部署无法保存索引源。新添加的索引源成为所选插件索引。
|
||||
|
||||
工具栏包含:插件市场菜单,用于切换插件市场,最后一项为**管理索引源…**;搜索框;插件市场声明了标签时显示的**标签**菜单,以勾选标记支持多选;**排序**菜单;以及刷新按钮。插件市场声明了分类时,其后显示分类按钮,**全部**排在第一位。
|
||||
工具栏包含:插件索引菜单,用于切换插件索引,最后一项为**管理索引源…**;搜索框;插件索引声明了标签时显示的**标签**菜单,以勾选标记支持多选;**排序**菜单;以及刷新按钮。插件索引声明了分类时,其后显示分类按钮,**全部**排在第一位。
|
||||
|
||||
每张卡片显示图标、本地化标题、标签、一行描述,以及默认版本、作者和发布日期,并只有一个操作:可安装的条目显示**安装**;没有默认版本、且最高版本既不兼容也未豁免的条目显示禁用的**安装**,其提示框说明没有与当前运行的 DSH 兼容的版本;其余条目显示**已安装**、**有新版本**或**随 DSH 提供**,点击后切换到「已安装」标签页,并在该标签页列出该组合包时打开其页面。选择卡片会打开条目页面,显示其完整描述、兼容性提示,并在来源标题下显示默认版本的信息:作者;主页和源代码仓库(在新标签页中打开的链接,仓库旁显示包所在目录);npm 包和注册表,或 Git 仓库、完整提交和目录;发布日期;分类;标签;以及插件市场。页面先显示详细介绍,不带单独的标题,然后是**版本**,然后是来源信息。**版本**列表按 SemVer 降序排列;每行标出推荐、预发布、已安装、不兼容和已豁免的版本,并为安装检查接受的其他版本提供**安装**,DSH 随附的组合包除外。页面的返回链接回到列表,搜索、筛选和排序保持不变。
|
||||
每张卡片显示图标、本地化标题、标签、一行描述,以及默认版本、作者和发布日期,并只有一个操作:可安装的条目显示**安装**;没有默认版本、且最高版本既不兼容也未豁免的条目显示禁用的**安装**,其提示框说明没有与当前运行的 DSH 兼容的版本;其余条目显示**已安装**、**有新版本**或**随 DSH 提供**,点击后切换到「已安装」标签页,并在该标签页列出该组合包时打开其页面。选择卡片会打开条目页面,显示其完整描述、兼容性提示,并在来源标题下显示默认版本的信息:作者;主页和源代码仓库(在新标签页中打开的链接,仓库旁显示包所在目录);npm 包和注册表,或 Git 仓库、完整提交和目录;发布日期;分类;标签;以及插件索引标题。页面先显示详细介绍,不带单独的标题,然后是**版本**,然后是来源信息。**版本**列表按 SemVer 降序排列;每行标出推荐、预发布、已安装、不兼容和已豁免的版本,并为安装检查接受的其他版本提供**安装**,DSH 随附的组合包除外。页面的返回链接回到列表,搜索、筛选和排序保持不变。
|
||||
|
||||
**安装**选择默认版本并打开确认对话框,显示条目的图标、标题、该版本、作者、来源信息、适用时的豁免提示,以及信任提示。确认后,插件页的安装对话框以该条目的精确 spec 和注册表在检查界面打开;不显示 spec 表单,被拒绝时提供**重试**。条目指定的注册表只用于这一次安装。
|
||||
|
||||
@@ -36,7 +36,7 @@ Host 的 [`pluginMarket.search`](../../boot/plugin-market/README.zh.md#use-this-
|
||||
|
||||
详细介绍部分以当前界面语言显示默认版本的详细介绍:按 [`pluginMarket` 说明的顺序](../../boot/plugin-market/README.zh.md#plugin-detail-documents),依次为该版本 locale 中 `meta.detail` 指定的文件、其包 README、其仓库 README。文档加载期间,该部分显示三行骨架屏;没有文档的条目不显示该部分;读取失败时说明原因,例如超过大小限制、来源无法访问或仓库拒绝访问,并提供**重试**。原始 HTML 会被省略;文档高度超过该部分的高度上限时,在该部分内滚动。相对路径的图片从 Host 上该文档旁的位置加载,绝对 HTTP(S) 地址的图片不带 referrer 直接加载,相对链接保持为文本。该部分使用共享的 [`DetailDocument`](../ui-primitives/README.zh.md#component-catalog) 原语。
|
||||
|
||||
读取插件市场时显示卡片骨架屏。读取失败时显示一句简短说明和**重试**,Host 给出的原因显示在**索引源**中对应索引源的下方,并保留该插件市场上一次的列表;读取索引源列表失败时,在该标签页的位置显示**重试**。「发现」在收到 `plugin-market/changed` 和连接重置时重新读取索引源,在收到 `plugin-manager/changed` 时重新计算安装状态。
|
||||
读取插件索引时显示卡片骨架屏。读取失败时显示一句简短说明和**重试**,Host 给出的原因显示在**索引源**中对应索引源的下方,并保留该插件索引上一次的列表;读取索引源列表失败时,在该标签页的位置显示**重试**。「发现」在收到 `plugin-market/changed` 和连接重置时重新读取索引源,在收到 `plugin-manager/changed` 时重新计算安装状态。
|
||||
|
||||
-----
|
||||
|
||||
@@ -45,7 +45,7 @@ Host 的 [`pluginMarket.search`](../../boot/plugin-market/README.zh.md#use-this-
|
||||
|
||||
详细介绍的读取结果保存在第二个快照存储中,以索引 URL、条目、版本和语言为键;该部分在渲染时开始读取;npm 版本的读取先询问 Host 的注册表比较,npmmirror 响应最快时传入 `npmFileSources: ['npmmirror']`;只有某个键最新一次的读取才会让该部分得到结果;**重试**要求 Host 重新读取,而不是返回其缓存的结果;连接重置时丢弃所有读取结果,因为重启后的 Host 不再知道其图片使用的文档 id,所以每个已显示的部分会重新读取其文档。图片 URL 基于 `document.baseURI` 解析 `api/plugin-market/detail-file`,因此保留部署前缀,并在 Desktop 中使用 `dsh-app://app/` origin;[`MarkdownText`](../ui-primitives/README.zh.md) 对该路由接受此 origin。
|
||||
|
||||
本插件把标签为**发现**的 `discover` 条目注册到 `plugins.tab`,即 [`ui-plugin-manager`](../ui-plugin-manager/README.zh.md) 声明的标签页 slot;owner props 提供 `install({ spec, registry?, title, version })` 和 `openPackage(name)`;发现页传入条目的本地化标题和所选版本。一个不依赖 React 的控制器在快照存储中拥有索引源读取、索引源编辑,以及所选索引的查询和已加载的页;选择另一个插件市场时从初始查询开始。之后的页发送第一页的 `fetchedAt`,来自已替换文档的页会让列表重新加载一次;再次被替换时读取失败。列表保留其结果所回答的查询,因此新查询加载期间或失败后,空状态文案仍与显示的结果一致;**重试**重新执行失败的读取:某个查询的前几页,或下一页。profile 的组合包变化时,重新加载所有已加载的页以刷新安装状态;索引不再声明的过滤条件或排序键会从查询中移除。尚未发送的搜索文本、打开的条目和确认对话框是组件状态。`presentation.ts` 中的纯函数根据文本得出查询顺序、移除未声明的 id、使用当前界面语言的 `Intl.Collator` 对声明排序,以及列出来源信息。图标以 `referrerpolicy="no-referrer"` 延迟加载,失败时回退到默认插画。
|
||||
本插件把标签为**发现**的 `discover` 条目注册到 `plugins.tab`,即 [`ui-plugin-manager`](../ui-plugin-manager/README.zh.md) 声明的标签页 slot;owner props 提供 `install({ spec, registry?, title, version })` 和 `openPackage(name)`;发现页传入条目的本地化标题和所选版本。一个不依赖 React 的控制器在快照存储中拥有索引源读取、索引源编辑,以及所选索引的查询和已加载的页;选择另一个插件索引时从初始查询开始。之后的页发送第一页的 `fetchedAt`,来自已替换文档的页会让列表重新加载一次;再次被替换时读取失败。列表保留其结果所回答的查询,因此新查询加载期间或失败后,空状态文案仍与显示的结果一致;**重试**重新执行失败的读取:某个查询的前几页,或下一页。profile 的组合包变化时,重新加载所有已加载的页以刷新安装状态;索引不再声明的过滤条件或排序键会从查询中移除。尚未发送的搜索文本、打开的条目和确认对话框是组件状态。`presentation.ts` 中的纯函数根据文本得出查询顺序、移除未声明的 id、使用当前界面语言的 `Intl.Collator` 对声明排序,以及列出来源信息。图标以 `referrerpolicy="no-referrer"` 延迟加载,失败时回退到默认插画。
|
||||
|
||||
-----
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Plugin discovery",
|
||||
"description": "Browse configured plugin market indexes and install their packages."
|
||||
"description": "Browse configured plugin indexes and install their packages."
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "プラグイン検索 UI",
|
||||
"description": "設定済みのプラグインマーケットのインデックスを参照し、プラグインパッケージをインストールします。"
|
||||
"description": "設定済みのプラグインインデックスを参照し、プラグインパッケージをインストールします。"
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "插件发现界面",
|
||||
"description": "浏览已配置的插件市场索引,并安装其中的插件包。"
|
||||
"description": "浏览已配置的插件索引,并安装其中的插件包。"
|
||||
}
|
||||
}
|
||||
@@ -8,14 +8,14 @@ export const zh = {
|
||||
retry: '重试',
|
||||
close: '关闭',
|
||||
cancel: '取消',
|
||||
emptyTitle: '还没有插件市场',
|
||||
emptyDescription: '添加一个插件市场索引,即可在这里浏览和安装其中的插件',
|
||||
emptyTitle: '还没有插件索引',
|
||||
emptyDescription: '添加一个插件索引,即可在这里浏览和安装其中的插件',
|
||||
addFirstSource: '添加索引源',
|
||||
sourcesFailed: '无法读取索引源',
|
||||
manageSources: '管理索引源…',
|
||||
marketMenu: '切换插件市场,当前为 {market}',
|
||||
marketMenu: '切换插件索引,当前为 {market}',
|
||||
sourcesTitle: '索引源',
|
||||
sourcesDescription: '插件市场以一个索引文件的 URL 提供,「发现」从这里列出的索引浏览插件',
|
||||
sourcesDescription: '插件索引以一个索引文件的 URL 提供,「发现」从这里列出的索引浏览插件',
|
||||
sourcesLabel: '已添加的索引源',
|
||||
sourceUrl: '索引 URL',
|
||||
sourcePlaceholder: 'https://example.com/index.json',
|
||||
@@ -70,7 +70,7 @@ export const zh = {
|
||||
factSourceCode: '源代码',
|
||||
factCategory: '分类',
|
||||
factLabels: '标签',
|
||||
factMarket: '插件市场',
|
||||
factMarket: '插件索引',
|
||||
versionsTitle: '版本',
|
||||
versionsLabel: '{name} 的版本',
|
||||
versionDefault: '推荐',
|
||||
@@ -102,14 +102,14 @@ export const en = {
|
||||
retry: 'Retry',
|
||||
close: 'Close',
|
||||
cancel: 'Cancel',
|
||||
emptyTitle: 'No plugin markets yet',
|
||||
emptyDescription: 'Add a plugin market index to browse and install its plugins here.',
|
||||
emptyTitle: 'No plugin indexes yet',
|
||||
emptyDescription: 'Add a plugin index to browse and install its plugins here.',
|
||||
addFirstSource: 'Add index source',
|
||||
sourcesFailed: 'Could not read the index sources.',
|
||||
manageSources: 'Manage index sources…',
|
||||
marketMenu: 'Switch plugin market, currently {market}',
|
||||
marketMenu: 'Switch plugin index, currently {market}',
|
||||
sourcesTitle: 'Index sources',
|
||||
sourcesDescription: 'A plugin market is published as the URL of one index file. Discover browses the indexes listed here.',
|
||||
sourcesDescription: 'A plugin index is published as the URL of one index file. Discover browses the indexes listed here.',
|
||||
sourcesLabel: 'Added index sources',
|
||||
sourceUrl: 'Index URL',
|
||||
sourcePlaceholder: 'https://example.com/index.json',
|
||||
@@ -164,7 +164,7 @@ export const en = {
|
||||
factSourceCode: 'Source code',
|
||||
factCategory: 'Category',
|
||||
factLabels: 'Labels',
|
||||
factMarket: 'Plugin market',
|
||||
factMarket: 'Plugin index',
|
||||
versionsTitle: 'Versions',
|
||||
versionsLabel: 'Versions of {name}',
|
||||
versionDefault: 'Recommended',
|
||||
@@ -193,14 +193,14 @@ export const ja = {
|
||||
'retry': '再試行',
|
||||
'close': '閉じる',
|
||||
'cancel': 'キャンセル',
|
||||
'emptyTitle': 'プラグインマーケットはまだありません',
|
||||
'emptyDescription': 'プラグインマーケットのインデックスを追加すると、ここでプラグインを閲覧してインストールできます。',
|
||||
'emptyTitle': 'プラグインインデックスはまだありません',
|
||||
'emptyDescription': 'プラグインインデックスを追加すると、ここでそのプラグインを閲覧してインストールできます。',
|
||||
'addFirstSource': 'インデックスソースを追加',
|
||||
'sourcesFailed': 'インデックスソースを読み取れませんでした。',
|
||||
'manageSources': 'インデックスソースを管理…',
|
||||
'marketMenu': 'プラグインマーケットを切り替え、現在は{market}',
|
||||
'marketMenu': 'プラグインインデックスを切り替え、現在は{market}',
|
||||
'sourcesTitle': 'インデックスソース',
|
||||
'sourcesDescription': 'プラグインマーケットは1つのインデックスファイルのURLとして公開されます。「見つける」ではここに一覧されたインデックスを閲覧します。',
|
||||
'sourcesDescription': 'プラグインインデックスは1つのインデックスファイルのURLとして公開されます。「見つける」ではここに一覧されたインデックスを閲覧します。',
|
||||
'sourcesLabel': '追加済みのインデックスソース',
|
||||
'sourceUrl': 'インデックスURL',
|
||||
'sourcePlaceholder': 'https://example.com/index.json',
|
||||
@@ -255,7 +255,7 @@ export const ja = {
|
||||
'factSourceCode': 'ソースコード',
|
||||
'factCategory': 'カテゴリ',
|
||||
'factLabels': 'ラベル',
|
||||
'factMarket': 'プラグインマーケット',
|
||||
'factMarket': 'プラグインインデックス',
|
||||
'versionsTitle': 'バージョン',
|
||||
'versionsLabel': '{name} のバージョン',
|
||||
'versionDefault': '推奨',
|
||||
|
||||
@@ -50,7 +50,7 @@ const LISTING: MarketSearchResult = {
|
||||
fetchedAt: 1,
|
||||
total: 6,
|
||||
nextOffset: null,
|
||||
title: { en: 'Alpha market', zh: '甲市场' },
|
||||
title: { en: 'Alpha index', zh: '甲索引' },
|
||||
metadata: {
|
||||
categories: { tools: { title: 'Tools' }, themes: { title: 'Themes' } },
|
||||
labels: { official: { title: 'Official' }, beta: { title: 'Beta' } },
|
||||
@@ -231,7 +231,7 @@ describe('DiscoverSection', () => {
|
||||
expect(screen.getByText(en.emptyIndex)).toBeTruthy()
|
||||
})
|
||||
|
||||
it('sorts by publish date, a market sort key, either direction, and back to the index order', () => {
|
||||
it('sorts by publish date, an index sort key, either direction, and back to the index order', () => {
|
||||
const { actions, answer } = renderTab()
|
||||
openMenu(/^Sort: Default order/)
|
||||
pick(en.sortPublished)
|
||||
@@ -256,7 +256,7 @@ describe('DiscoverSection', () => {
|
||||
answer(INITIAL_QUERY)
|
||||
openMenu(/^Sort: Default order/)
|
||||
expect(screen.queryByRole('menuitem', { name: en.switchToAscending })).toBeNull()
|
||||
for (const name of [/^Sort:/, en.filter, /^Switch plugin market/]) {
|
||||
for (const name of [/^Sort:/, en.filter, /^Switch plugin index/]) {
|
||||
fireEvent.keyDown(document.activeElement ?? document.body, { key: 'Escape' })
|
||||
expect(screen.queryByRole('menu')).toBeNull()
|
||||
openMenu(name)
|
||||
@@ -264,17 +264,17 @@ describe('DiscoverSection', () => {
|
||||
}
|
||||
fireEvent.keyDown(document.activeElement ?? document.body, { key: 'Escape' })
|
||||
expect(screen.queryByRole('menu')).toBeNull()
|
||||
openMenu(/^Switch plugin market/)
|
||||
openMenu(/^Switch plugin market/)
|
||||
openMenu(/^Switch plugin index/)
|
||||
openMenu(/^Switch plugin index/)
|
||||
expect(screen.queryByRole('menu')).toBeNull()
|
||||
})
|
||||
|
||||
it('switches markets and opens source management from the market menu', () => {
|
||||
it('switches indexes and opens source management from the index menu', () => {
|
||||
const { actions } = renderTab()
|
||||
openMenu('Switch plugin market, currently Alpha market')
|
||||
openMenu('Switch plugin index, currently Alpha index')
|
||||
pick('b.example')
|
||||
expect(actions.select).toHaveBeenCalledWith(B)
|
||||
openMenu(/^Switch plugin market/)
|
||||
openMenu(/^Switch plugin index/)
|
||||
pick(en.manageSources)
|
||||
expect(actions.toggleSources).toHaveBeenCalledOnce()
|
||||
})
|
||||
@@ -287,7 +287,7 @@ describe('DiscoverSection', () => {
|
||||
expect(detail.getByRole('status', { name: en.detailLoading })).toBeTruthy()
|
||||
expect(detail.getByRole('heading', { name: 'Alpha' })).toBeTruthy()
|
||||
expect(detail.getByText('dsh-a')).toBeTruthy()
|
||||
for (const value of ['Jane', '[email protected]', 'https://r.example/', 'Tools', 'Official', 'Beta', 'Alpha market']) expect(detail.getByText(value)).toBeTruthy()
|
||||
for (const value of ['Jane', '[email protected]', 'https://r.example/', 'Tools', 'Official', 'Beta', 'Alpha index']) expect(detail.getByText(value)).toBeTruthy()
|
||||
const homepage = detail.getByRole('link', { name: 'https://example.com/alpha#readme' })
|
||||
expect([homepage.getAttribute('href'), homepage.getAttribute('target'), homepage.getAttribute('rel')])
|
||||
.toEqual(['https://example.com/alpha#readme', '_blank', 'noopener noreferrer'])
|
||||
@@ -420,14 +420,14 @@ describe('DiscoverSection', () => {
|
||||
expect(screen.getByRole('status', { name: en.loading })).toBeTruthy()
|
||||
expect(screen.getByRole('button', { name: en.refresh }).hasAttribute('disabled')).toBe(true)
|
||||
set({ listing: { url: B, query: INITIAL_QUERY, status: 'ready', value: { ...LISTING, url: B, entries: [], total: 0 }, answered: INITIAL_QUERY, failure: null } })
|
||||
expect(screen.getByRole('button', { name: 'Switch plugin market, currently b.example' })).toBeTruthy()
|
||||
expect(screen.getByRole('button', { name: 'Switch plugin index, currently b.example' })).toBeTruthy()
|
||||
})
|
||||
|
||||
it('manages sources in a dialog with the trust notice and each refusal', () => {
|
||||
const { actions, set } = renderTab({ editing: true, draft: 'https://c.example/index.json', indexes: [{ url: A, title: LISTING.title }, { url: B, error: 'HTTP 404' }] })
|
||||
const dialog = within(screen.getByRole('dialog', { name: en.sourcesTitle }))
|
||||
expect(dialog.getByText(en.sourcesTrust)).toBeTruthy()
|
||||
expect(dialog.getByText('Alpha market')).toBeTruthy()
|
||||
expect(dialog.getByText('Alpha index')).toBeTruthy()
|
||||
expect(dialog.getByText(B)).toBeTruthy()
|
||||
expect(dialog.getByText('HTTP 404')).toBeTruthy()
|
||||
fireEvent.click(dialog.getByRole('button', { name: `Remove ${B}` }))
|
||||
@@ -453,7 +453,7 @@ describe('DiscoverSection', () => {
|
||||
|
||||
it('renders the Chinese copy and dates', () => {
|
||||
renderTab({}, zh)
|
||||
expect(screen.getByRole('button', { name: '切换插件市场,当前为 甲市场' })).toBeTruthy()
|
||||
expect(screen.getByRole('button', { name: '切换插件索引,当前为 甲索引' })).toBeTruthy()
|
||||
expect(card('dsh-a').getByText('甲')).toBeTruthy()
|
||||
expect(card('dsh-a').getByText(/^1\.0\.0 · Jane · 2026年9月/)).toBeTruthy()
|
||||
expect(card('dsh-b').getByText(zh.statusInstalled)).toBeTruthy()
|
||||
|
||||
@@ -31,7 +31,7 @@ describe('gen-tool-catalog collectToolCatalog', () => {
|
||||
'create_goal', 'create_worktree', 'edit', 'exit_plan_mode', 'get_goal', 'glob', 'grep',
|
||||
'interrupt_agent', 'interrupt_agent', 'job_kill', 'job_list', 'job_output',
|
||||
'list_agents', 'list_agents', 'list_mcp_resource_templates', 'list_mcp_resources',
|
||||
'list_subagent_models', 'load_workspace_dependencies', 'lsp', 'plugin_manager', 'plugin_market', 'present', 'pwsh', 'pwsh', 'ralph',
|
||||
'list_subagent_models', 'load_workspace_dependencies', 'lsp', 'plugin_manager', 'plugin_market', 'present', 'propose_action', 'pwsh', 'pwsh', 'ralph',
|
||||
'read', 'read_image', 'read_mcp_resource', 'run_code', 'schedule_create', 'schedule_delete',
|
||||
'schedule_list', 'schedule_update', 'send_message', 'send_message', 'session_event_read', 'session_event_search',
|
||||
'session_event_trace', 'session_search', 'session_trace', 'skill', 'spawn_teammate',
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
en: b55aeb927737b90d
|
||||
zh: 0b215fcb5c2c7908
|
||||
/packages-experimental/packages:
|
||||
en: be427fe35d7bc6b6
|
||||
zh: 353a8f42b66407b4
|
||||
en: a2a6d1e85d04484c
|
||||
zh: 76d6de87b2355b29
|
||||
/packages-experimental/related-documentation:
|
||||
en: 1cb9d3448d44e48d
|
||||
zh: cd326d70a746b896
|
||||
|
||||
@@ -36,10 +36,12 @@ Promotion requires a named product role, documented public behavior and limitati
|
||||
|
||||
| Package | Role | ctx key |
|
||||
|---|---|---|
|
||||
| [`creation-recommendations`](creation-recommendations/README.md) | Explicit-need creation of persistent removable interface plugins | `ctx.creationRecommendations` |
|
||||
| [`client-ui-creation-recommendations`](client-ui-creation-recommendations/README.md) | Completed-answer creation cards with location selection and undo | — |
|
||||
| [`action-cards`](action-cards/README.md) | Optional action cards below answers: the proposal tool, card state, user actions and status notices | `ctx.actionCards` |
|
||||
| [`client-ui-action-cards`](client-ui-action-cards/README.md) | Card frame below completed answers, kind bodies and the proposal process row | — |
|
||||
| [`creation-recommendations`](creation-recommendations/README.md) | Explicit-need creation of persistent removable interface plugins | — |
|
||||
| [`client-ui-creation-recommendations`](client-ui-creation-recommendations/README.md) | Personalized page card body with location selection and undo | — |
|
||||
| [`plugin-recommendations`](plugin-recommendations/README.md) | Explicit-need official plugin recommendations in conversations | `ctx.pluginRecommendations` |
|
||||
| [`client-ui-plugin-recommendations`](client-ui-plugin-recommendations/README.md) | Completed-answer recommendation cards and user choices | — |
|
||||
| [`client-ui-plugin-recommendations`](client-ui-plugin-recommendations/README.md) | Official plugin card body with catalog text and enabling | — |
|
||||
| [`tool-session-query`](tool-session-query/README.md) | Workspace-authorized model session search, trace, and event reads | — |
|
||||
| [`session-search`](session-search/README.md) | Optional experimental global session search tools | — |
|
||||
| [`ralph-bundle`](ralph-bundle/README.md) | Optional repeated delegation with an isolated workflow engine | — |
|
||||
@@ -62,7 +64,7 @@ Promotion requires a named product role, documented public behavior and limitati
|
||||
| [`speech-to-text-sensevoice`](speech-to-text-sensevoice/README.md) | Managed local SenseVoice inference | — |
|
||||
| [`api-speech-to-text`](api-speech-to-text/README.md) | Authenticated transient transcription Remote | `ctx.speechController` |
|
||||
| [`client-ui-voice-input`](client-ui-voice-input/README.md) | Microphone capture and guarded draft insertion | — |
|
||||
| [`plugin-market-bundle`](plugin-market-bundle/README.md) | Default-disabled optional custom plugin markets: the market service and the Discover tab | — |
|
||||
| [`plugin-market-bundle`](plugin-market-bundle/README.md) | Default-disabled optional custom plugin indexes: the index service and the Discover tab | — |
|
||||
| [`voice-input-bundle`](voice-input-bundle/README.md) | Default-disabled optional voice input composition | — |
|
||||
| [`agent-team-profile`](agent-team-profile/README.md) | Agent Teams collaboration, tools, and Web UI bundle | — |
|
||||
| [`agent-team`](agent-team/README.md) | Named teammates with direct messages and a durable shared task board | `ctx.agentTeams` |
|
||||
|
||||
@@ -36,10 +36,12 @@ kind: "package-group"
|
||||
|
||||
| 包 | 职责 | ctx 键 |
|
||||
|---|---|---|
|
||||
| [`creation-recommendations`](creation-recommendations/README.zh.md) | 针对明确需求创建持续可用、可移除的界面插件 | `ctx.creationRecommendations` |
|
||||
| [`client-ui-creation-recommendations`](client-ui-creation-recommendations/README.zh.md) | 回答末尾的创建卡片、位置选择和撤销 | — |
|
||||
| [`plugin-recommendations`](plugin-recommendations/README.zh.md) | 针对明确需求在会话内推荐官方插件 | `ctx.pluginRecommendations` |
|
||||
| [`client-ui-plugin-recommendations`](client-ui-plugin-recommendations/README.zh.md) | 回答末尾的推荐卡片和用户操作 | — |
|
||||
| [`action-cards`](action-cards/README.zh.md) | 回答下方的可选操作卡片:提议工具、卡片状态、用户操作与状态通知 | `ctx.actionCards` |
|
||||
| [`client-ui-action-cards`](client-ui-action-cards/README.zh.md) | 已完成回答下方的卡片框架、种类正文与提议过程行 | — |
|
||||
| [`creation-recommendations`](creation-recommendations/README.zh.md) | 针对明确需求创建持续可用、可移除的界面插件 | — |
|
||||
| [`client-ui-creation-recommendations`](client-ui-creation-recommendations/README.zh.md) | 个性化页面卡片正文、位置选择和撤销 | — |
|
||||
| [`plugin-recommendations`](plugin-recommendations/README.zh.md) | 在对话中针对明确需求推荐官方插件 | `ctx.pluginRecommendations` |
|
||||
| [`client-ui-plugin-recommendations`](client-ui-plugin-recommendations/README.zh.md) | 官方插件卡片正文:目录文本与启用 | — |
|
||||
| [`tool-session-query`](tool-session-query/README.zh.md) | 按工作区授权的模型会话搜索、追踪与事件读取 | — |
|
||||
| [`session-search`](session-search/README.zh.md) | 可选实验性全局会话搜索工具 | — |
|
||||
| [`ralph-bundle`](ralph-bundle/README.zh.md) | 带隔离 workflow 引擎的可选重复委派 | — |
|
||||
@@ -62,7 +64,7 @@ kind: "package-group"
|
||||
| [`speech-to-text-sensevoice`](speech-to-text-sensevoice/README.zh.md) | 托管本地 SenseVoice 推理 | — |
|
||||
| [`api-speech-to-text`](api-speech-to-text/README.zh.md) | 带认证的临时转写 Remote | `ctx.speechController` |
|
||||
| [`client-ui-voice-input`](client-ui-voice-input/README.zh.md) | 麦克风录音与版本检查后的草稿插入 | — |
|
||||
| [`plugin-market-bundle`](plugin-market-bundle/README.zh.md) | 默认禁用的可选自定义插件市场:市场服务和「发现」标签页 | — |
|
||||
| [`plugin-market-bundle`](plugin-market-bundle/README.zh.md) | 默认禁用的可选自定义插件索引:索引服务和「发现」标签页 | — |
|
||||
| [`voice-input-bundle`](voice-input-bundle/README.zh.md) | 默认禁用的可选语音输入组合 | — |
|
||||
| [`agent-team-profile`](agent-team-profile/README.zh.md) | Agent Teams 协作、工具与 Web UI 组合包 | — |
|
||||
| [`agent-team`](agent-team/README.zh.md) | 具名 teammate,成员之间直接消息与持久共享任务板 | `ctx.agentTeams` |
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
# Bilingual-pair consistency record for README.md (docs/i18n/README.md): per heading
|
||||
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
|
||||
# After editing either side, bring the other along and re-record with:
|
||||
# pnpm run verify-translation-pairing --write packages/experimental/action-cards/README.md
|
||||
/:
|
||||
en: 1a68a7a733a2676d
|
||||
zh: 01f72eb61a0626b7
|
||||
/deepseek-ai-dsh-experimental-action-cards:
|
||||
en: e57ce09e58e6fabc
|
||||
zh: 8a727dbd6f925363
|
||||
/deepseek-ai-dsh-experimental-action-cards/summary:
|
||||
en: 7621088773d073f4
|
||||
zh: 57674e6dcee15997
|
||||
/deepseek-ai-dsh-experimental-action-cards/table-of-contents:
|
||||
en: d152484eb41ac6b4
|
||||
zh: b00dddf4c88f0a45
|
||||
/deepseek-ai-dsh-experimental-action-cards/use-this-package:
|
||||
en: e64653a62247236d
|
||||
zh: d035f7cf50071696
|
||||
/deepseek-ai-dsh-experimental-action-cards/use-this-package/register-a-card-kind:
|
||||
en: a1414c3cfa8e204f
|
||||
zh: 90eb7a7010972743
|
||||
/deepseek-ai-dsh-experimental-action-cards/use-this-package/card-rules:
|
||||
en: d37be4e928e6fa00
|
||||
zh: 5d3eb834c2509707
|
||||
/deepseek-ai-dsh-experimental-action-cards/understand-the-implementation:
|
||||
en: 5640f0436038aefc
|
||||
zh: 5ebb181d81ad2c7e
|
||||
/deepseek-ai-dsh-experimental-action-cards/further-exploration:
|
||||
en: db407bb756ee5641
|
||||
zh: af5d25f4f2351ee6
|
||||
/deepseek-ai-dsh-experimental-action-cards/model-experience:
|
||||
en: 215e7ba838619b7b
|
||||
zh: a311da3843709f90
|
||||
/deepseek-ai-dsh-experimental-action-cards/model-experience/card-tool:
|
||||
en: 4925bc5f7153825a
|
||||
zh: 3a7bfb2210d9c6aa
|
||||
/deepseek-ai-dsh-experimental-action-cards/model-experience/card-tool/what-the-model-sees:
|
||||
en: 04e06f15a53041b0
|
||||
zh: b17c3c707c96c086
|
||||
/deepseek-ai-dsh-experimental-action-cards/model-experience/card-tool/token-effect:
|
||||
en: f9c78daaf64cf38e
|
||||
zh: 2908740f9bc3bc9c
|
||||
/deepseek-ai-dsh-experimental-action-cards/model-experience/card-tool/kv-cache-effect:
|
||||
en: d4192e35d47b5fa3
|
||||
zh: c786828e123de657
|
||||
/deepseek-ai-dsh-experimental-action-cards/model-experience/card-status-notice:
|
||||
en: 407ebca5eb94992e
|
||||
zh: 779819ea83974103
|
||||
/deepseek-ai-dsh-experimental-action-cards/model-experience/card-status-notice/what-the-model-sees:
|
||||
en: a14013ca3ddb5ee3
|
||||
zh: 18cd7ffc62fd6590
|
||||
/deepseek-ai-dsh-experimental-action-cards/model-experience/card-status-notice/what-the-model-sees/notice-preamble:
|
||||
en: 04dd9469bfaff052
|
||||
zh: 35110b231b8e3928
|
||||
/deepseek-ai-dsh-experimental-action-cards/model-experience/card-status-notice/token-effect:
|
||||
en: 4e73a2cff60b5e88
|
||||
zh: 4887212815e7425d
|
||||
/deepseek-ai-dsh-experimental-action-cards/model-experience/card-status-notice/kv-cache-effect:
|
||||
en: 58785543e2428dba
|
||||
zh: 4b082f77b3b2f482
|
||||
/deepseek-ai-dsh-experimental-action-cards/known-limitations-and-deferred-work:
|
||||
en: a8b122edac907461
|
||||
zh: d1003e2830e410c1
|
||||
/deepseek-ai-dsh-experimental-action-cards/known-limitations-and-deferred-work/dev-note:
|
||||
en: e67f633dc6fe7773
|
||||
zh: bd8a8936229e035e
|
||||
@@ -0,0 +1,136 @@
|
||||
---
|
||||
description: "Shared Host service of optional action cards: the propose_action tool, card state, user actions and status notices that experiment packages register card kinds into."
|
||||
kind: "package-reference"
|
||||
---
|
||||
|
||||
# @deepseek-ai/dsh-experimental-action-cards
|
||||
|
||||
English | [中文](README.zh.md)
|
||||
|
||||
## Summary
|
||||
|
||||
An experiment can offer one optional action below an answer, such as creating a page, without adding a tool of its own. The model loads the experiment's skill, then calls `propose_action`; the card appears after the turn ends, and nothing runs until the user acts on it. Each choice is recorded and reported to the model on its next request. The tool costs nothing until a card skill loads in the conversation.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Use this package](#use-this-package)
|
||||
- [Understand the implementation](#understand-the-implementation)
|
||||
- [Further Exploration](#further-exploration)
|
||||
- [Model Experience](#model-experience)
|
||||
- [Known Limitations and Deferred Work](#known-limitations-and-deferred-work)
|
||||
- [Dev Note](#dev-note)
|
||||
|
||||
-----
|
||||
|
||||
<a id="use-this-package"></a>
|
||||
## Use this package
|
||||
|
||||
The [Personalized pages bundle](../creation-recommendations/README.md) inserts this service and its [browser half](../client-ui-action-cards/README.md); enabling that bundle enables both. The service has one configuration field:
|
||||
|
||||
| Field | Default | Meaning |
|
||||
|---|---|---|
|
||||
| `queuedMessageLimit` | `2` | Queued next-turn user messages at or above which a card proposed in the current turn is never offered. |
|
||||
|
||||
The generated [configuration catalog](../../../docs/config-catalog.md#deepseek-aidsh-experimental-action-cards) is the exhaustive source for accepted fields.
|
||||
|
||||
### Register a card kind
|
||||
|
||||
A kind package injects `actionCards` and calls `ctx.actionCards.register(kind)` from its own plugin; unloading that plugin removes the kind, and actions on its cards are then refused as unavailable. The kind names its action, the skill that proposes it, a zod schema for the card's `details`, the user actions it accepts and the shared checks each needs (`global` Remote access, `writes` refused in a read-only Session), the recorded phases that still offer dismissal, optional status guidance, the decision data fields the status notice reports, and the handler for every action except `dismiss`. The handler records each new decision with `ctx.actionCards.record()` and returns `accepted`, `settled` with the decision in effect, `refused` or `unconfirmed`.
|
||||
|
||||
### Card rules
|
||||
|
||||
- The first accepted `propose_action` call of a turn becomes the card. The tool refuses a second call in the same turn, an unregistered action, a call whose kind skill was not loaded in the current turn, a blank title or brief, details that fail the kind schema, and calls dispatched from code.
|
||||
- A newer card replaces every unstarted earlier card. A card proposed while `queuedMessageLimit` or more user messages wait for later turns is logged but never offered. Both states are derived from the log and never recorded.
|
||||
- Events a forked Session inherits create no cards.
|
||||
- Not now is recorded for an unstarted card and for the phases the kind lists; dismissed, replaced and suppressed cards accept no further action.
|
||||
- Concurrent actions on one card share one operation. Actions require the card's live root Agent.
|
||||
|
||||
-----
|
||||
|
||||
<a id="understand-the-implementation"></a>
|
||||
## Understand the implementation
|
||||
|
||||
<details>
|
||||
<summary>Implementation internals — click to expand</summary>
|
||||
|
||||
The package default-exports the `actionCards` Remote service. It registers `propose_action` once, globally, with a `when` condition: an Agent becomes eligible when a `skill` tool result loads the skill of a registered kind, and the flag lives in memory until the Agent is disposed. The call's `execute` checks the current turn's skill loads through the turn boundary and keeps an in-memory mark of the turn's accepted call; the logged `tool/call` and its successful `tool/result` are the durable proposal.
|
||||
|
||||
The `actionCards` Session projection (state version 1) pairs each `propose_action` call with its successful result, records decisions from `plugin:action-cards/decision`, folds queued next-turn messages from inbox splices, and keeps unreported decisions until a status notice whose `through` covers them enters the log. Its Client view `{ proposals, decisions }` is excluded from Session summaries.
|
||||
|
||||
The Remote `act(sessionId, callId, verb, payload?)` checks the owner, the live root, the card, the kind and verb, and Remote access before it shares one operation per card. A dismissed, replaced or suppressed card then settles unchanged, Not now is recorded, a writing verb is refused in a read-only Session, and every other verb goes to the kind handler under the Agent's initiator. An `agent/pre-step` listener adds the status notice after later listeners prepared the step.
|
||||
|
||||
| Source | Contents |
|
||||
|---|---|
|
||||
| [`src/index.ts`](src/index.ts) | Service, tool, kind registry, Remote action and status notice |
|
||||
| [`src/projection.ts`](src/projection.ts) | Session projection |
|
||||
| [`src/types.ts`](src/types.ts) | Proposal, decision, view and result types |
|
||||
| [`tests/`](tests/) | Activation, validation, projection, action and notice tests |
|
||||
|
||||
</details>
|
||||
|
||||
-----
|
||||
|
||||
<a id="further-exploration"></a>
|
||||
## Further Exploration
|
||||
|
||||
- [Action card display](../client-ui-action-cards/README.md) — the browser frame, kind bodies and the process row.
|
||||
- [Personalized pages](../creation-recommendations/README.md) — the shipped card kind.
|
||||
- [Tools](../../core/tools/README.md) — conditional registration and step admission.
|
||||
- [Session projection](../../session/session-projection/README.md) — the card state the browser reads.
|
||||
|
||||
<a id="model-experience"></a>
|
||||
## Model Experience
|
||||
|
||||
### Card tool
|
||||
|
||||
#### What the model sees
|
||||
|
||||
The [`propose_action` declaration](../../../docs/tool-catalog.md#deepseek-aidsh-experimental-action-cards) appears only to an Agent that loaded the skill of a registered kind in this Session, from the next step on, for that Agent's lifetime. A kind's skill names the action and the fields of `details`. An accepted call returns `Card shown below your answer. Do not restate it; end with one short invitation.`. A refused call returns its reason, for example `Load skill <skill> first, then call propose_action.`, `One card per turn; the earlier card stands.`, `Unknown action "<action>". Registered actions: <actions>.` or the failing `details` fields.
|
||||
|
||||
#### Token effect
|
||||
|
||||
Before a card skill loads, the tool adds no tokens. Afterwards each request of that Agent declares it: 574 characters of JSON, about 144 tokens at the token meter's four characters per token. A card costs one extra model round trip, the call before the final answer, and its short tool result.
|
||||
|
||||
#### KV Cache effect
|
||||
|
||||
Activation is append-only on routes that declare tool updates, such as DeepSeek-V4.1-Flash: when the condition turns true the loop logs a header change and a `tool-addition` developer message, and those routes receive the definition as a deferred declaration referenced at that position, so the cached prefix is kept. A route without tool updates receives the tool in its declaration list from that step on, which changes the request prefix once. Disposing the Agent drops the activation; a reopened Session declares the tool again only after a card skill loads again, logging a removal and a later addition.
|
||||
|
||||
### Card status notice
|
||||
|
||||
#### What the model sees
|
||||
|
||||
After a decision is recorded, the next request carries one `action-cards` notice: the preamble below, the guidance sentences of each involved kind, `Continue with the user’s current request.`, and a JSON array of the changed cards with `action`, `callId`, `title`, `phase` and the data fields their kind reports.
|
||||
|
||||
##### Notice preamble
|
||||
|
||||
```markdown
|
||||
Latest status of action cards from user actions and background work. These are status facts, not a request to start or retry work. Use these receipts instead of the earlier proposal when describing progress.
|
||||
```
|
||||
|
||||
#### Token effect
|
||||
|
||||
One notice per request that follows new decisions, sized by the changed cards; unchanged cards add nothing, and several decisions of one card collapse to its latest.
|
||||
|
||||
#### KV Cache effect
|
||||
|
||||
The notice is appended after the request's other new context and never rewrites earlier messages. The notice neither starts a turn nor wakes an idle conversation.
|
||||
|
||||
## Known Limitations and Deferred Work
|
||||
|
||||
<a id="known-limitations-and-deferred-work"></a>
|
||||
|
||||
- Activation is per live Agent and kept in memory, so after a Session reopens the tool appears again only after a card skill loads again.
|
||||
- Calls dispatched from code, as in PTC presets, are refused: the log records them as program dispatches rather than tool calls, so no card could follow them.
|
||||
- Only one card is offered per turn across all kinds, and one unstarted card per conversation.
|
||||
- The projection reads `queuedMessageLimit` while its state version stays fixed. A changed limit applies to Sessions folded again from their log; cached projection rows keep the suppression decided under the earlier limit.
|
||||
- The rows of this service and its browser half are inserted by the Personalized pages bundle. A second kind's bundle that inserts the same rows conflicts with it; shared row ownership between bundles is deferred until a second kind ships.
|
||||
|
||||
<a id="dev-note"></a>
|
||||
### Dev Note
|
||||
|
||||
<details>
|
||||
<summary>Working context for maintainers — click to expand</summary>
|
||||
|
||||
None.
|
||||
|
||||
</details>
|
||||
@@ -0,0 +1,136 @@
|
||||
---
|
||||
description: "可选操作卡片的共享 Host 服务:propose_action 工具、卡片状态、用户操作和状态通知,各实验包把自己的卡片种类注册进来。"
|
||||
kind: "package-reference"
|
||||
---
|
||||
|
||||
# @deepseek-ai/dsh-experimental-action-cards
|
||||
|
||||
[English](README.md) | 中文
|
||||
|
||||
## 概述
|
||||
|
||||
实验可以在回答下方提供一个可选操作,例如创建页面,而不必新增自己的工具。模型先加载该实验的 Skill,再调用 `propose_action`;本轮结束后卡片出现在回答下方,用户操作之前不会执行任何事。用户的每次选择都会被记录,并在模型的下一次请求中告知模型。对话中加载卡片 Skill 之前,这个工具不占用任何 token。
|
||||
|
||||
## 目录
|
||||
|
||||
- [使用本包](#use-this-package)
|
||||
- [实现原理](#understand-the-implementation)
|
||||
- [延伸阅读](#further-exploration)
|
||||
- [模型体验](#model-experience)
|
||||
- [已知限制与后续工作](#known-limitations-and-deferred-work)
|
||||
- [开发备注](#dev-note)
|
||||
|
||||
-----
|
||||
|
||||
<a id="use-this-package"></a>
|
||||
## 使用本包
|
||||
|
||||
[个性化页面 Bundle](../creation-recommendations/README.zh.md) 会插入本服务及其[浏览器端](../client-ui-action-cards/README.zh.md);启用该 Bundle 即同时启用两者。本服务只有一个配置字段:
|
||||
|
||||
| 字段 | 默认值 | 含义 |
|
||||
|---|---|---|
|
||||
| `queuedMessageLimit` | `2` | 排队到后续轮次的用户消息达到该数量时,本轮提议的卡片不再展示。 |
|
||||
|
||||
生成的[配置目录](../../../docs/config-catalog.zh.md#deepseek-aidsh-experimental-action-cards)是可接受字段的完整来源。
|
||||
|
||||
### 注册卡片种类
|
||||
|
||||
种类所在的包注入 `actionCards`,并在自己的插件中调用 `ctx.actionCards.register(kind)`;该插件卸载时种类随之移除,此后对其卡片的操作会以 unavailable 拒绝。种类需要给出:动作名、提议该动作的 Skill、卡片 `details` 的 zod 校验、接受的用户操作及各自需要的共享检查(`global` 表示需要全局 Remote 权限,`writes` 表示只读会话中拒绝)、仍可忽略卡片的已记录阶段、可选的状态说明、状态通知要报告的决定数据字段,以及处理 `dismiss` 以外所有操作的处理器。处理器用 `ctx.actionCards.record()` 记录每个新决定,并返回 `accepted`、带当前决定的 `settled`、`refused` 或 `unconfirmed`。
|
||||
|
||||
### 卡片规则
|
||||
|
||||
- 一轮中第一个被接受的 `propose_action` 调用成为卡片。工具会拒绝同一轮的第二次调用、未注册的动作、本轮没有加载对应种类 Skill 的调用、空白的标题或说明、未通过种类校验的 details,以及从代码中发起的调用。
|
||||
- 新卡片会替换此前所有尚未开始的卡片。用户排队到后续轮次的消息达到 `queuedMessageLimit` 条时提议的卡片只记录、不展示。这两种状态都从日志推导,从不单独记录。
|
||||
- fork 出的会话从父会话继承的事件不会产生卡片。
|
||||
- 对尚未开始的卡片,以及处于种类列出阶段的卡片,“暂不需要”会被记录;已忽略、已替换、未展示的卡片不再接受任何操作。
|
||||
- 同一张卡片上的并发操作共用一次处理。操作要求卡片所在会话的根 Agent 仍然在线。
|
||||
|
||||
-----
|
||||
|
||||
<a id="understand-the-implementation"></a>
|
||||
## 实现原理
|
||||
|
||||
<details>
|
||||
<summary>实现细节——点击展开</summary>
|
||||
|
||||
本包默认导出 `actionCards` Remote 服务。它在全局注册一次 `propose_action`,并附带 `when` 条件:某个 `skill` 工具结果加载了已注册种类的 Skill 后,该 Agent 才满足条件;这个标记保存在内存中,直到 Agent 被释放。调用的 `execute` 通过轮次边界检查本轮加载过的 Skill,并在内存中标记本轮已接受的调用;日志中的 `tool/call` 及其成功的 `tool/result` 就是持久的提议。
|
||||
|
||||
`actionCards` 会话投影(状态版本 1)把每个 `propose_action` 调用与其成功结果配对,从 `plugin:action-cards/decision` 读取决定,从收件箱拼接事件累计排队到下一轮的消息,并保留尚未报告的决定,直到 `through` 覆盖它们的状态通知写入日志。投影的客户端视图 `{ proposals, decisions }` 不进入会话摘要。
|
||||
|
||||
Remote `act(sessionId, callId, verb, payload?)` 先检查服务所有者、在线根 Agent、卡片、种类与操作,以及 Remote 权限,然后让同一张卡片共用一次处理。之后,已忽略、已替换或未展示的卡片原样返回,“暂不需要”被记录,写入类操作在只读会话中被拒绝,其余操作在该 Agent 的发起方作用域内交给种类处理器。一个 `agent/pre-step` 监听器在后续监听器准备好本步之后追加状态通知。
|
||||
|
||||
| 源码 | 内容 |
|
||||
|---|---|
|
||||
| [`src/index.ts`](src/index.ts) | 服务、工具、种类注册表、Remote 操作与状态通知 |
|
||||
| [`src/projection.ts`](src/projection.ts) | 会话投影 |
|
||||
| [`src/types.ts`](src/types.ts) | 提议、决定、视图与结果类型 |
|
||||
| [`tests/`](tests/) | 激活、校验、投影、操作与通知测试 |
|
||||
|
||||
</details>
|
||||
|
||||
-----
|
||||
|
||||
<a id="further-exploration"></a>
|
||||
## 延伸阅读
|
||||
|
||||
- [操作卡片显示](../client-ui-action-cards/README.zh.md) — 浏览器端卡片框架、种类正文与过程行。
|
||||
- [个性化页面](../creation-recommendations/README.zh.md) — 随产品提供的卡片种类。
|
||||
- [工具](../../core/tools/README.zh.md) — 条件注册与每步准入。
|
||||
- [会话投影](../../session/session-projection/README.zh.md) — 浏览器读取的卡片状态。
|
||||
|
||||
<a id="model-experience"></a>
|
||||
## 模型体验
|
||||
|
||||
### 卡片工具
|
||||
|
||||
#### 模型看到什么
|
||||
|
||||
[`propose_action` 声明](../../../docs/tool-catalog.zh.md#deepseek-aidsh-experimental-action-cards)只对在本会话中加载过已注册种类 Skill 的 Agent 出现,从下一步开始,持续到该 Agent 被释放。种类的 Skill 给出动作名和 `details` 的字段。被接受的调用返回 `Card shown below your answer. Do not restate it; end with one short invitation.`。被拒绝的调用返回原因,例如 `Load skill <skill> first, then call propose_action.`、`One card per turn; the earlier card stands.`、`Unknown action "<action>". Registered actions: <actions>.`,或未通过校验的 `details` 字段。
|
||||
|
||||
#### Token 影响
|
||||
|
||||
加载卡片 Skill 之前,工具不增加任何 token。加载之后,该 Agent 的每次请求都会声明它:574 个字符的 JSON,按 token 计量器每 4 个字符计 1 个 token 约 144 个 token。出一张卡片多一次模型往返(最终回答前的这次调用)以及一条简短的工具结果。
|
||||
|
||||
#### KV Cache 影响
|
||||
|
||||
在声明支持工具更新的路由上(例如 DeepSeek-V4.1-Flash),激活只追加内容:条件变为真时,循环记录一次请求头变化和一条 `tool-addition` 开发者消息,这些路由以延迟加载声明的形式在该位置引用新定义,因此已缓存的前缀保持不变。不支持工具更新的路由从这一步起在声明列表中收到该工具,请求前缀因此改变一次。Agent 被释放后激活随之失效;重新打开的会话要再次加载卡片 Skill 才会再次声明该工具,并依次记录一次移除和一次添加。
|
||||
|
||||
### 卡片状态通知
|
||||
|
||||
#### 模型看到什么
|
||||
|
||||
记录决定之后,下一次请求会带一条 `action-cards` 通知:下方的开头段落、所涉及各种类的说明句、`Continue with the user’s current request.`,以及一个 JSON 数组,列出发生变化的卡片的 `action`、`callId`、`title`、`phase` 和种类要报告的数据字段。
|
||||
|
||||
##### 通知开头
|
||||
|
||||
```markdown
|
||||
Latest status of action cards from user actions and background work. These are status facts, not a request to start or retry work. Use these receipts instead of the earlier proposal when describing progress.
|
||||
```
|
||||
|
||||
#### Token 影响
|
||||
|
||||
有新决定之后的每次请求带一条通知,大小取决于发生变化的卡片;没有变化的卡片不增加内容,同一张卡片的多次决定只报告最新一次。
|
||||
|
||||
#### KV Cache 影响
|
||||
|
||||
通知追加在本次请求其他新上下文之后,从不改写之前的消息。通知既不会开始新轮次,也不会唤醒空闲的对话。
|
||||
|
||||
## 已知限制与后续工作
|
||||
|
||||
<a id="known-limitations-and-deferred-work"></a>
|
||||
|
||||
- 激活按在线 Agent 记在内存中,因此会话重新打开后,要再次加载卡片 Skill 工具才会再次出现。
|
||||
- 从代码中发起的调用(例如 PTC 预设中)会被拒绝:日志把它们记为程序派发而不是工具调用,因此不可能有卡片跟随。
|
||||
- 所有种类合计每轮只展示一张卡片,每个对话只保留一张尚未开始的卡片。
|
||||
- 投影读取 `queuedMessageLimit`,状态版本却不随它变化。修改后的上限只作用于重新从日志折叠的会话;已缓存的投影行保留按旧上限得出的“未展示”结果。
|
||||
- 本服务及其浏览器端的行由个性化页面 Bundle 插入。第二个种类的 Bundle 若插入相同的行会与其冲突;多个 Bundle 共享这些行的方式留到第二个种类发布时再定。
|
||||
|
||||
<a id="dev-note"></a>
|
||||
### 开发备注
|
||||
|
||||
<details>
|
||||
<summary>维护者工作背景——点击展开</summary>
|
||||
|
||||
无。
|
||||
|
||||
</details>
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Action cards",
|
||||
"description": "Show optional action cards below answers for enabled experiments, and report the user's choices back to the conversation."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "アクションカード",
|
||||
"description": "有効な実験のために回答の下に任意のアクションカードを表示し、ユーザーの選択を会話に伝えます。"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "操作卡片",
|
||||
"description": "为已启用的实验在回答下方显示可选操作卡片,并把用户的选择告知对话。"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,75 @@
|
||||
{
|
||||
"name": "@deepseek-ai/dsh-experimental-action-cards",
|
||||
"description": "Optional action cards below answers: one shared proposal tool, card state, user actions and status notices",
|
||||
"version": "0.2.1-rc.2",
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/deepseek-ai/deepseek-harness.git",
|
||||
"directory": "packages/experimental/action-cards"
|
||||
},
|
||||
"type": "module",
|
||||
"main": "lib/index.js",
|
||||
"types": "lib/types/index.d.ts",
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./lib/types/index.d.ts",
|
||||
"default": "./lib/index.js"
|
||||
},
|
||||
"./src/*": "./src/*",
|
||||
"./package.json": "./package.json",
|
||||
"./locale/*.json": "./locale/*.json",
|
||||
"./types": {
|
||||
"types": "./lib/types/types.d.ts",
|
||||
"default": "./lib/types/types.js"
|
||||
},
|
||||
"./typert": {
|
||||
"types": "./lib/typert.host.d.ts",
|
||||
"default": "./lib/typert.host.js"
|
||||
},
|
||||
"./remote": {
|
||||
"types": "./lib/typert.remote-client.d.ts",
|
||||
"default": "./lib/typert.remote-client.js"
|
||||
}
|
||||
},
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
"@deepseek-ai/cordis": "workspace:~",
|
||||
"@deepseek-ai/dsh-typert-protocol": "workspace:*",
|
||||
"@deepseek-ai/dsh-llm": "workspace:*",
|
||||
"@deepseek-ai/dsh-tools": "workspace:*",
|
||||
"@deepseek-ai/dsh-session": "workspace:*"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@deepseek-ai/cordis": "workspace:~",
|
||||
"@deepseek-ai/dsh-typert-protocol": "workspace:*",
|
||||
"@deepseek-ai/dsh-llm": "workspace:*",
|
||||
"@deepseek-ai/dsh-tools": "workspace:*",
|
||||
"@deepseek-ai/dsh-agent": "workspace:*",
|
||||
"@deepseek-ai/dsh-agent-loop": "workspace:*",
|
||||
"@deepseek-ai/dsh-agent-loop-testkit": "workspace:*",
|
||||
"@deepseek-ai/dsh-session": "workspace:*",
|
||||
"@deepseek-ai/dsh-session-projection": "workspace:*",
|
||||
"@deepseek-ai/dsh-api-remote-access": "workspace:*",
|
||||
"@deepseek-ai/dsh-sandbox-policy": "workspace:*",
|
||||
"@deepseek-ai/dsh-skill": "workspace:*",
|
||||
"@deepseek-ai/dsh-tool-skill": "workspace:*",
|
||||
"@deepseek-ai/dsh-tool-testkit": "workspace:*",
|
||||
"@deepseek-ai/dsh-util-values": "workspace:*"
|
||||
},
|
||||
"dependencies": {
|
||||
"zod": "4.4.3"
|
||||
},
|
||||
"files": [
|
||||
"locale/*.json",
|
||||
"lib/index.js",
|
||||
"lib/types/**/*.js",
|
||||
"lib/types/**/*.d.ts",
|
||||
"lib/typert.host.js",
|
||||
"lib/typert.host.d.ts",
|
||||
"lib/typert.remote-client.js",
|
||||
"lib/typert.remote-client.d.ts"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,365 @@
|
||||
/** Optional action cards below an answer: the `propose_action` tool, card state, user actions and status notices for registered kinds. */
|
||||
import { FiberState, Service, type Context } from '@deepseek-ai/cordis'
|
||||
import { z, type ZodError, type ZodType } from 'zod'
|
||||
import { Remote, TypertRemoteService } from '@deepseek-ai/dsh-typert-protocol'
|
||||
import { createUserMessage, HarnessError, type ToolCallId } from '@deepseek-ai/dsh-llm'
|
||||
import { defineTool, type ToolRunContext } from '@deepseek-ai/dsh-tools'
|
||||
import { appendPluginRecord, SessionSeq, type Session } from '@deepseek-ai/dsh-session'
|
||||
import type { Agent } from '@deepseek-ai/dsh-agent'
|
||||
import type { ProjectionHandle } from '@deepseek-ai/dsh-session-projection'
|
||||
import type { JsonValue } from '@deepseek-ai/dsh-util-values'
|
||||
import type {} from '@deepseek-ai/dsh-api-remote-access'
|
||||
import type {} from '@deepseek-ai/dsh-sandbox-policy'
|
||||
import { actionCardProjection, PROPOSE_ACTION, type ActionCardState } from './projection.ts'
|
||||
import type { ActionCardDecision, ActionCardFields, ActionCardProposal, ActionCardResult, ActionCardView } from './types.ts'
|
||||
export type * from './types.ts'
|
||||
|
||||
/** Deployment-tunable limits for offering cards. */
|
||||
export const Config = z.object({
|
||||
/** Queued next-turn messages at or above which a card proposed in the current turn is never offered. */
|
||||
queuedMessageLimit: z.number().int().min(1).default(2),
|
||||
}).prefault({})
|
||||
/** Validated card limits after schema defaults. */
|
||||
export type Config = z.infer<typeof Config>
|
||||
|
||||
declare module '@deepseek-ai/cordis' {
|
||||
interface Context { actionCards: ActionCards }
|
||||
}
|
||||
|
||||
/** The user action every card offers; the shared service records it. */
|
||||
const DISMISS = 'dismiss'
|
||||
/** Phases after which no user action changes the card. */
|
||||
const FINAL_PHASES: readonly string[] = ['dismissed', 'replaced', 'suppressed']
|
||||
/** Tool whose successful loads activate `propose_action`; its `name` argument names the skill. */
|
||||
const SKILL_TOOL = 'skill'
|
||||
const skillArguments = z.object({ name: z.string() })
|
||||
|
||||
const STATUS_PREAMBLE = 'Latest status of action cards from user actions and background work. '
|
||||
+ 'These are status facts, not a request to start or retry work. Use these receipts instead of the earlier proposal when describing progress.'
|
||||
const STATUS_CLOSING = 'Continue with the user’s current request.'
|
||||
|
||||
/** The fiber fields the stopping check reads. */
|
||||
export interface PluginFiber {
|
||||
readonly uid: number | null
|
||||
readonly state: FiberState
|
||||
readonly parent: { readonly fiber: PluginFiber }
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether a plugin must refuse new work: its fiber or an ancestor is disposed or unloading, since a parent's disposal
|
||||
* begins before the plugin's own effects run, or the plugin's own drain has begun.
|
||||
* @param owner - the plugin's fiber.
|
||||
* @param draining - whether the plugin's drain effect has started.
|
||||
* @returns whether the plugin is stopping.
|
||||
*/
|
||||
export function isPluginStopping(owner: PluginFiber, draining: boolean): boolean {
|
||||
for (let fiber = owner; ; fiber = fiber.parent.fiber) {
|
||||
if (fiber.uid === null || fiber.state === FiberState.UNLOADING) return true
|
||||
if (fiber.parent.fiber === fiber) return draining
|
||||
}
|
||||
}
|
||||
|
||||
/** A refused `propose_action` call; the message tells the model what to do instead. */
|
||||
export class ActionCardError extends HarnessError {}
|
||||
|
||||
/** Shared checks one user action of a kind requires before the kind handles it. */
|
||||
export interface ActionCardVerb {
|
||||
/** The connection must hold global Remote access, as for profile changes. */
|
||||
readonly global?: true
|
||||
/** Refused while the Session sandbox mode is read-only. */
|
||||
readonly writes?: true
|
||||
}
|
||||
|
||||
/** A proposal whose details passed its kind's schema. */
|
||||
export type ActionCardProposalOf<Details> = Omit<ActionCardProposal, 'details'> & { readonly details: Details }
|
||||
|
||||
/** Host half of one action kind: the skill that proposes it, its fields and its user actions. */
|
||||
export interface ActionCardKind<Details> {
|
||||
/** Value of the `action` argument. */
|
||||
readonly action: string
|
||||
/** Skill whose instructions propose this action; a load in the current turn admits the call. */
|
||||
readonly skill: string
|
||||
/** Validates `details` when the model proposes and before each user action. */
|
||||
readonly details: ZodType<Details>
|
||||
/** User actions besides `dismiss`, with the shared checks each requires; other verbs are refused as unavailable. */
|
||||
readonly verbs: Readonly<Record<string, ActionCardVerb>>
|
||||
/** Recorded phases that still offer the action; dismissal is recorded for these and for an unstarted card. */
|
||||
readonly openPhases?: readonly string[]
|
||||
/** Sentences the status notice adds when it reports this kind's decisions. */
|
||||
readonly statusGuidance?: string
|
||||
/** Decision data fields the status notice reports; omitted reports every field. */
|
||||
readonly statusFields?: readonly string[]
|
||||
/**
|
||||
* Fields recorded with a dismissal.
|
||||
* @param proposal - the dismissed card.
|
||||
* @param payload - fields the user's client sent.
|
||||
* @returns decision data, or undefined to record none.
|
||||
*/
|
||||
dismissal?(proposal: ActionCardProposalOf<Details>, payload: ActionCardFields | undefined): ActionCardFields | undefined
|
||||
/**
|
||||
* Handle one user action other than `dismiss` after the shared checks passed. The handler records each new
|
||||
* decision with {@link ActionCards.record}.
|
||||
* @param agent - live root of the card's Session.
|
||||
* @param proposal - the card with validated details.
|
||||
* @param verb - one of {@link verbs}.
|
||||
* @param payload - fields the user's client sent; the kind validates them.
|
||||
* @returns the action's result.
|
||||
*/
|
||||
act(agent: Agent, proposal: ActionCardProposalOf<Details>, verb: string, payload: ActionCardFields | undefined): Promise<ActionCardResult>
|
||||
}
|
||||
|
||||
/** A registered kind with its details type erased behind validating closures. */
|
||||
interface RegisteredKind {
|
||||
readonly skill: string
|
||||
readonly verbs: Readonly<Record<string, ActionCardVerb>>
|
||||
readonly openPhases: readonly string[]
|
||||
readonly statusGuidance: string | undefined
|
||||
readonly statusFields: readonly string[] | undefined
|
||||
/** Describe why details fail the kind's schema; undefined when they pass. */
|
||||
readonly detailsIssues: (details: ActionCardFields) => string | undefined
|
||||
readonly dismissal: (proposal: ActionCardProposal, payload: ActionCardFields | undefined) => ActionCardFields | undefined
|
||||
readonly act: (
|
||||
agent: Agent, proposal: ActionCardProposal, verb: string, payload: ActionCardFields | undefined,
|
||||
) => Promise<ActionCardResult>
|
||||
}
|
||||
|
||||
/** Own entries only: browser-supplied ids such as `toString` never reach inherited object members. */
|
||||
function ownEntry<T>(record: Readonly<Record<string, T>>, key: string): T | undefined {
|
||||
return Object.hasOwn(record, key) ? record[key] : undefined
|
||||
}
|
||||
|
||||
function refused(reason: string): ActionCardResult {
|
||||
return { status: 'refused', reason }
|
||||
}
|
||||
|
||||
function issuesOf(error: ZodError): string {
|
||||
return 'Invalid details: ' + error.issues.map(issue => `${['details', ...issue.path.map(String)].join('.')}: ${issue.message}`).join('; ')
|
||||
}
|
||||
|
||||
/** Card tool, kind registry, Session projection, user actions and status notices. */
|
||||
export class ActionCards extends TypertRemoteService {
|
||||
static inject = ['tools', 'agents', 'sessionProjections', 'remoteAccess']
|
||||
static Config = Config
|
||||
private projection!: ProjectionHandle<ActionCardState>
|
||||
private readonly kinds = new Map<string, RegisteredKind>()
|
||||
/** Skills of registered kinds each live agent has loaded; `propose_action` is declared while one is still registered. */
|
||||
private readonly loaded = new Map<Agent, Set<string>>()
|
||||
/** Kind skills each agent loaded in its latest turn. */
|
||||
private readonly turnLoads = new Map<Agent, { readonly turn: number; readonly skills: Set<string> }>()
|
||||
/** The call accepted in each agent's latest turn, until its result fails. */
|
||||
private readonly accepted = new Map<Agent, { readonly turn: number; readonly callId: ToolCallId }>()
|
||||
private readonly actions = new Map<string, Promise<ActionCardResult>>()
|
||||
private closing = false
|
||||
private readonly owner: Context['fiber']
|
||||
|
||||
/**
|
||||
* @param ctx - Owning plugin context.
|
||||
* @param config - Validated card limits; direct composition without a config gets the schema defaults.
|
||||
*/
|
||||
constructor(ctx: Context, private readonly config: Config = Config.parse({})) {
|
||||
super(ctx, 'actionCards')
|
||||
this.owner = ctx.fiber
|
||||
}
|
||||
|
||||
protected async [Service.init](): Promise<void> {
|
||||
this.projection = await this.ctx.sessionProjections.register(actionCardProjection(this.config))
|
||||
this.ctx.tools.register(defineTool({
|
||||
name: PROPOSE_ACTION,
|
||||
description: 'Show the user one optional action card under this answer. Call only as the skill that names the action instructs.',
|
||||
parameters: {
|
||||
action: { type: 'string', required: true, description: 'Action name from the skill.' },
|
||||
title: { type: 'string', required: true, description: 'Card title.' },
|
||||
brief: { type: 'string', required: true, description: 'What the action does, in the user\'s language.' },
|
||||
details: { type: 'object', additionalProperties: true, required: true, description: 'Fields the skill lists for this action.' },
|
||||
},
|
||||
output: {
|
||||
schema: {
|
||||
type: 'object', additionalProperties: false,
|
||||
properties: { action: { type: 'string', required: true }, title: { type: 'string', required: true } },
|
||||
},
|
||||
render: () => [{ type: 'text', text: 'Card shown below your answer. Do not restate it; end with one short invitation.' }],
|
||||
},
|
||||
execute: (args, exec) => Promise.resolve(this.propose(args, exec)),
|
||||
}), { when: ({ agent }) => this.declares(agent) })
|
||||
this.ctx.on('tools/result', (exec, result) => {
|
||||
const agent = exec.agent
|
||||
if (agent === undefined) return
|
||||
if (exec.name === PROPOSE_ACTION) {
|
||||
if (result.isError && this.accepted.get(agent)?.callId === exec.callId) this.accepted.delete(agent)
|
||||
return
|
||||
}
|
||||
const skill = exec.name === SKILL_TOOL && !result.isError ? skillArguments.safeParse(exec.arguments) : undefined
|
||||
if (skill?.success !== true || ![...this.kinds.values()].some(kind => kind.skill === skill.data.name)) return
|
||||
const turn = this.ctx.agents.turnBoundaryOf(agent.session).lastTurn
|
||||
const loads = this.turnLoads.get(agent)
|
||||
if (loads?.turn === turn) loads.skills.add(skill.data.name)
|
||||
else this.turnLoads.set(agent, { turn, skills: new Set([skill.data.name]) })
|
||||
this.loaded.set(agent, new Set([...this.loaded.get(agent) ?? [], skill.data.name]))
|
||||
})
|
||||
this.ctx.on('agent/disposed', ({ agent }) => {
|
||||
this.loaded.delete(agent)
|
||||
this.turnLoads.delete(agent)
|
||||
this.accepted.delete(agent)
|
||||
})
|
||||
this.ctx.on('agent/pre-step', async ({ agent, signal }, next) => {
|
||||
const decision = await next()
|
||||
if (decision.kind === 'reject' || signal.aborted || this.isStopping()) return decision
|
||||
const state = this.projection.stateOf(agent.session)
|
||||
const pending = Object.values(state.pendingStatus)
|
||||
if (pending.length === 0) return decision
|
||||
const receipts = Object.values(state.view.decisions).filter(receipt => Object.hasOwn(state.pendingStatus, receipt.callId))
|
||||
const guidance = new Set(receipts.flatMap(receipt => this.kinds.get(receipt.action)?.statusGuidance ?? []))
|
||||
const updates = receipts.map((receipt) => {
|
||||
const fields = this.kinds.get(receipt.action)?.statusFields
|
||||
const data = receipt.data === undefined || fields === undefined ? receipt.data
|
||||
: Object.fromEntries(Object.entries(receipt.data).filter(([key]) => fields.includes(key)))
|
||||
return { action: receipt.action, callId: receipt.callId, title: ownEntry(state.view.proposals, receipt.callId)?.title,
|
||||
phase: receipt.phase, ...data === undefined ? {} : { data } }
|
||||
})
|
||||
return { ...decision, messages: [...decision.messages, createUserMessage({
|
||||
source: { kind: 'action-cards', through: SessionSeq(Math.max(...pending)), form: 'notice', summary: 'Action card status updated' },
|
||||
content: [{ type: 'text', text: [STATUS_PREAMBLE, ...guidance, STATUS_CLOSING].join(' ') + '\n' + JSON.stringify(updates) }],
|
||||
})] }
|
||||
}, { prepend: true })
|
||||
this.ctx.effect(() => async () => {
|
||||
this.closing = true
|
||||
await Promise.allSettled([...this.actions.values()])
|
||||
}, 'action-cards: drain user actions')
|
||||
}
|
||||
|
||||
/**
|
||||
* Register one action kind for the caller's lifetime.
|
||||
* @param kind - the kind's skill, details schema, verbs and handler.
|
||||
* @returns disposer removing the kind; actions on its cards are then unavailable.
|
||||
* @throws when another kind already registered the same action.
|
||||
*/
|
||||
register<Details>(kind: ActionCardKind<Details>): () => void {
|
||||
const typed = (proposal: ActionCardProposal): ActionCardProposalOf<Details> | undefined => {
|
||||
const details = kind.details.safeParse(proposal.details)
|
||||
return details.success ? { ...proposal, details: details.data } : undefined
|
||||
}
|
||||
const entry: RegisteredKind = {
|
||||
skill: kind.skill, verbs: kind.verbs, openPhases: kind.openPhases ?? [],
|
||||
statusGuidance: kind.statusGuidance, statusFields: kind.statusFields,
|
||||
detailsIssues: (details) => {
|
||||
const parsed = kind.details.safeParse(details)
|
||||
return parsed.success ? undefined : issuesOf(parsed.error)
|
||||
},
|
||||
dismissal: (proposal, payload) => {
|
||||
const card = typed(proposal)
|
||||
return card === undefined ? undefined : kind.dismissal?.(card, payload)
|
||||
},
|
||||
act: (agent, proposal, verb, payload) => {
|
||||
const card = typed(proposal)
|
||||
return card === undefined ? Promise.resolve(refused('unavailable')) : kind.act(agent, card, verb, payload)
|
||||
},
|
||||
}
|
||||
const dispose = this.ctx.effect(() => {
|
||||
if (this.kinds.has(kind.action)) throw new Error(`action-cards: action "${kind.action}" is already registered`)
|
||||
this.kinds.set(kind.action, entry)
|
||||
return () => { this.kinds.delete(kind.action) }
|
||||
}, `action-cards: kind ${kind.action}`)
|
||||
return () => { void dispose() }
|
||||
}
|
||||
|
||||
/**
|
||||
* Record a card decision in the Session log; the next model request reports it.
|
||||
* @param agent - agent whose Session owns the card.
|
||||
* @param decision - the card's new state.
|
||||
*/
|
||||
record(agent: Agent, decision: ActionCardDecision): void {
|
||||
appendPluginRecord(agent.session, 'plugin:action-cards/decision', decision)
|
||||
}
|
||||
|
||||
/**
|
||||
* Read the cards of one Session.
|
||||
* @param session - a Session whose projections are prepared.
|
||||
* @returns proposals and decisions by call id.
|
||||
*/
|
||||
view(session: Session): ActionCardView {
|
||||
return this.projection.stateOf(session).view
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply a user action to a logged card. Shared checks run first; `dismiss` is recorded here and every other
|
||||
* verb goes to the card's kind. Concurrent actions on one card share one operation.
|
||||
* @param agent - live root resolved from the displayed Session.
|
||||
* @param callId - the card's `propose_action` call id.
|
||||
* @param verb - `dismiss` or one of the kind's verbs.
|
||||
* @param payload - kind-defined fields such as a chosen location.
|
||||
* @returns acceptance of background work, the decision in effect, or a refusal.
|
||||
*/
|
||||
@Remote
|
||||
act(agent: Agent, callId: ToolCallId, verb: string, payload?: Record<string, JsonValue>): Promise<ActionCardResult> {
|
||||
if (this.isStopping()) return Promise.resolve(refused('closing'))
|
||||
if (!this.ctx.agents.roots().includes(agent)) return Promise.resolve(refused('not-live-root'))
|
||||
const proposal = ownEntry(this.projection.stateOf(agent.session).view.proposals, callId)
|
||||
if (proposal === undefined) return Promise.resolve(refused('unknown'))
|
||||
const kind = this.kinds.get(proposal.action)
|
||||
const policy = kind === undefined || verb === DISMISS ? undefined : ownEntry(kind.verbs, verb)
|
||||
if (kind === undefined || verb !== DISMISS && policy === undefined) return Promise.resolve(refused('unavailable'))
|
||||
if (policy?.global === true && !this.ctx.remoteAccess.allows({ kind: 'global' })) return Promise.resolve(refused('access-denied'))
|
||||
const key = JSON.stringify([agent.id, callId])
|
||||
const existing = this.actions.get(key)
|
||||
if (existing !== undefined) return existing
|
||||
const operation = this.ctx.agents.withInitiator(agent, () => this.decide(agent, kind, proposal, verb, policy, payload))
|
||||
.finally(() => { this.actions.delete(key) })
|
||||
this.actions.set(key, operation)
|
||||
return operation
|
||||
}
|
||||
|
||||
private async decide(
|
||||
agent: Agent, kind: RegisteredKind, proposal: ActionCardProposal, verb: string, policy: ActionCardVerb | undefined,
|
||||
payload: ActionCardFields | undefined,
|
||||
): Promise<ActionCardResult> {
|
||||
const decision = ownEntry(this.projection.stateOf(agent.session).view.decisions, proposal.callId)
|
||||
if (decision !== undefined && FINAL_PHASES.includes(decision.phase)) return { status: 'settled', decision }
|
||||
if (verb === DISMISS) {
|
||||
if (decision !== undefined && !kind.openPhases.includes(decision.phase)) return { status: 'settled', decision }
|
||||
const data = kind.dismissal(proposal, payload)
|
||||
const dismissed: ActionCardDecision = { callId: proposal.callId, action: proposal.action, phase: 'dismissed', ...data === undefined ? {} : { data } }
|
||||
this.record(agent, dismissed)
|
||||
return { status: 'settled', decision: dismissed }
|
||||
}
|
||||
if (policy?.writes === true && this.ctx.get('sandboxPolicy')?.resolve({ session: agent.session }).mode === 'read-only') return refused('read-only')
|
||||
return await kind.act(agent, proposal, verb, payload)
|
||||
}
|
||||
|
||||
/** Whether `propose_action` is declared for this agent's next step. */
|
||||
private declares(agent: Agent): boolean {
|
||||
const skills = this.loaded.get(agent)
|
||||
return skills !== undefined && [...this.kinds.values()].some(kind => skills.has(kind.skill))
|
||||
}
|
||||
|
||||
private propose(
|
||||
args: { readonly action: string; readonly title: string; readonly brief: string; readonly details: ActionCardFields },
|
||||
exec: ToolRunContext,
|
||||
): { action: string; title: string } {
|
||||
const agent = exec.agent
|
||||
// Step admission declares the tool only to an agent; calls dispatched from code are not logged as tool calls,
|
||||
// so no card could follow them.
|
||||
if (agent === undefined || exec.parent !== undefined) throw new ActionCardError('Call propose_action directly, not from code.', 'ACTION_CARD_NESTED')
|
||||
const kind = this.kinds.get(args.action)
|
||||
// The tool is declared only while a kind is registered, so the list is never empty.
|
||||
if (kind === undefined) throw new ActionCardError(`Unknown action "${args.action}". Registered actions: ${[...this.kinds.keys()].join(', ')}.`, 'ACTION_CARD_UNKNOWN')
|
||||
const turn = this.ctx.agents.turnBoundaryOf(agent.session).lastTurn
|
||||
const loads = this.turnLoads.get(agent)
|
||||
if (loads?.turn !== turn || !loads.skills.has(kind.skill)) {
|
||||
throw new ActionCardError(`Load skill ${kind.skill} first, then call propose_action.`, 'ACTION_CARD_SKILL')
|
||||
}
|
||||
if (args.title.trim() === '' || args.brief.trim() === '') throw new ActionCardError('Write a title and a brief.', 'ACTION_CARD_BLANK')
|
||||
const issues = kind.detailsIssues(args.details)
|
||||
if (issues !== undefined) throw new ActionCardError(issues, 'ACTION_CARD_DETAILS')
|
||||
if (this.accepted.get(agent)?.turn === turn || Object.values(this.view(agent.session).proposals).some(card => card.turn === turn)) {
|
||||
throw new ActionCardError('One card per turn; the earlier card stands.', 'ACTION_CARD_LIMIT')
|
||||
}
|
||||
this.accepted.set(agent, { turn, callId: exec.callId })
|
||||
return { action: args.action, title: args.title.trim() }
|
||||
}
|
||||
|
||||
private isStopping(): boolean {
|
||||
return isPluginStopping(this.owner, this.closing)
|
||||
}
|
||||
}
|
||||
|
||||
export default ActionCards
|
||||
@@ -0,0 +1,137 @@
|
||||
/** Recover card proposals from logged `propose_action` calls and decisions from plugin records. */
|
||||
import { z } from 'zod'
|
||||
import { ToolCallId } from '@deepseek-ai/dsh-llm'
|
||||
import { pluginRecordOf, SessionLogOffset } from '@deepseek-ai/dsh-session'
|
||||
import type { ProjectionDefinition } from '@deepseek-ai/dsh-session-projection'
|
||||
|
||||
/** Model-facing name of the card tool. */
|
||||
export const PROPOSE_ACTION = 'propose_action'
|
||||
|
||||
/** Kind-defined JSON object of a proposal or decision. */
|
||||
export const fieldsSchema = z.record(z.string(), z.json())
|
||||
|
||||
/** Arguments of a `propose_action` call; blank titles and briefs create no card. */
|
||||
export const argumentsSchema = z.object({
|
||||
action: z.string().min(1),
|
||||
title: z.string().trim().min(1),
|
||||
brief: z.string().trim().min(1),
|
||||
details: fieldsSchema,
|
||||
})
|
||||
|
||||
const proposalSchema = z.object({
|
||||
callId: z.string().min(1).transform(ToolCallId),
|
||||
turn: z.number().int().nonnegative(),
|
||||
action: z.string().min(1),
|
||||
title: z.string().min(1),
|
||||
brief: z.string().min(1),
|
||||
details: fieldsSchema,
|
||||
}).strict()
|
||||
|
||||
/** Recorded decision of one card. */
|
||||
export const decisionSchema = z.object({
|
||||
callId: z.string().min(1).transform(ToolCallId),
|
||||
action: z.string().min(1),
|
||||
phase: z.string().min(1),
|
||||
data: fieldsSchema.optional(),
|
||||
}).strict()
|
||||
|
||||
const viewSchema = z.object({
|
||||
proposals: z.record(z.string(), proposalSchema),
|
||||
decisions: z.record(z.string(), decisionSchema),
|
||||
})
|
||||
|
||||
const stateSchema = z.object({
|
||||
/** Fork-inherited prefix length; inherited events create no proposals or decisions. */
|
||||
inheritedEventCount: z.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER).transform(SessionLogOffset),
|
||||
view: viewSchema,
|
||||
/** `propose_action` calls of the open turn still waiting for their result. */
|
||||
calls: z.record(z.string(), proposalSchema.omit({ callId: true })),
|
||||
/** Turn of the latest admitted proposal; later calls of that turn create no card. */
|
||||
admittedTurn: z.number().int().nullable(),
|
||||
/** Decisions not yet reported to the model, by call id, with the seq of their record. */
|
||||
pendingStatus: z.record(z.string(), z.number()),
|
||||
/** User messages still queued for later turns, folded from inbox splices. */
|
||||
queued: z.number().int().nonnegative(),
|
||||
})
|
||||
|
||||
/** Fold state; `view` is also the Client wire value. */
|
||||
export type ActionCardState = z.infer<typeof stateSchema>
|
||||
|
||||
/** Card limits the fold needs; the owning service supplies its validated configuration. */
|
||||
export interface ActionCardLimits { readonly queuedMessageLimit: number }
|
||||
|
||||
/** Definition returned by {@link actionCardProjection}: the fold plus its Client view wire. */
|
||||
export type ActionCardProjectionDefinition = Omit<ProjectionDefinition<'actionCards', ActionCardState>, 'wire'> & {
|
||||
readonly wire: NonNullable<ProjectionDefinition<'actionCards', ActionCardState>['wire']>
|
||||
}
|
||||
|
||||
/**
|
||||
* Full-Session fold. A successful `propose_action` result admits the call as a card, at most one per turn;
|
||||
* the first admitted call of a turn wins. A newer card replaces every unstarted earlier card, and a card
|
||||
* written while `queuedMessageLimit` or more user messages are queued for later turns is suppressed.
|
||||
* Events inherited by a forked Session create no proposals or decisions.
|
||||
* @param limits - validated card limits.
|
||||
* @returns the projection definition for this configuration.
|
||||
*/
|
||||
export function actionCardProjection(limits: ActionCardLimits): ActionCardProjectionDefinition {
|
||||
return {
|
||||
key: 'actionCards', stateVersion: 1, stateSchema,
|
||||
init: (_header, inheritedEventCount) => ({
|
||||
inheritedEventCount, view: { proposals: {}, decisions: {} }, calls: {}, admittedTurn: null, pendingStatus: {}, queued: 0,
|
||||
}),
|
||||
apply: (state, event) => {
|
||||
if (event.seq < state.inheritedEventCount) return state
|
||||
switch (event.type) {
|
||||
case 'turn/start':
|
||||
// A turn's calls settle inside it; a call left without a result never becomes a card.
|
||||
return Object.keys(state.calls).length === 0 ? state : { ...state, calls: {} }
|
||||
case 'agent/inbox/spliced':
|
||||
if (event.data.target !== 'next-turn') return state
|
||||
return { ...state, queued: Math.max(0, state.queued - (event.data.removedCount ?? 0) + event.data.inserted.length) }
|
||||
case 'user/message': {
|
||||
if (event.data.source.kind !== 'action-cards') return state
|
||||
const through = event.data.source.through
|
||||
return { ...state, pendingStatus: Object.fromEntries(Object.entries(state.pendingStatus).filter(([, seq]) => seq > through)) }
|
||||
}
|
||||
case 'tool/call': {
|
||||
if (event.data.name !== PROPOSE_ACTION) return state
|
||||
let raw: unknown
|
||||
try { raw = JSON.parse(event.data.arguments) }
|
||||
catch { return state } // Malformed model JSON failed in the tool too and creates no card.
|
||||
const parsed = argumentsSchema.safeParse(raw)
|
||||
if (!parsed.success) return state
|
||||
return { ...state, calls: { ...state.calls, [event.data.callId]: { turn: event.data.turn, ...parsed.data } } }
|
||||
}
|
||||
case 'tool/result': {
|
||||
const callId = event.data.message.toolCallId
|
||||
const call = Object.hasOwn(state.calls, callId) ? state.calls[callId] : undefined
|
||||
if (call === undefined) return state
|
||||
const calls = Object.fromEntries(Object.entries(state.calls).filter(([id]) => id !== callId))
|
||||
if (event.data.message.isError === true || state.admittedTurn === call.turn) return { ...state, calls }
|
||||
const decisions = { ...state.view.decisions }
|
||||
if (state.queued >= limits.queuedMessageLimit) {
|
||||
// The user has moved on; the card is logged but never offered.
|
||||
decisions[callId] = { callId, action: call.action, phase: 'suppressed' }
|
||||
} else {
|
||||
// A newer card supersedes every unstarted card; the model made that choice, so no status is reported.
|
||||
for (const earlier of Object.values(state.view.proposals)) {
|
||||
if (decisions[earlier.callId] === undefined) decisions[earlier.callId] = { callId: earlier.callId, action: earlier.action, phase: 'replaced' }
|
||||
}
|
||||
}
|
||||
return { ...state, calls, admittedTurn: call.turn,
|
||||
view: { proposals: { ...state.view.proposals, [callId]: { callId, ...call } }, decisions } }
|
||||
}
|
||||
default: {
|
||||
const record = pluginRecordOf(event)
|
||||
if (record?.type !== 'plugin:action-cards/decision') return state
|
||||
// A malformed or newer record is skipped; throwing here would fail every later read of this Session.
|
||||
const decision = decisionSchema.safeParse(record.data)
|
||||
if (!decision.success) return state
|
||||
return { ...state, view: { ...state.view, decisions: { ...state.view.decisions, [decision.data.callId]: decision.data } },
|
||||
pendingStatus: { ...state.pendingStatus, [decision.data.callId]: event.seq } }
|
||||
}
|
||||
}
|
||||
},
|
||||
wire: { summary: false, viewSchema, view: (state: ActionCardState) => state.view },
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
/** Card proposals, recorded decisions and user-action results shared by every action kind. */
|
||||
import type { ContextFormed } from '@deepseek-ai/dsh-llm'
|
||||
import type { ToolCallId } from '@deepseek-ai/dsh-llm/brand'
|
||||
import type { SessionSeq } from '@deepseek-ai/dsh-session/types'
|
||||
import type { SessionProjectionSummaryExcluded } from '@deepseek-ai/dsh-session-projection/types'
|
||||
import type { JsonValue } from '@deepseek-ai/dsh-util-values'
|
||||
|
||||
/** Kind-defined JSON fields of a proposal or decision; each kind validates its own fields. */
|
||||
export type ActionCardFields = Readonly<Record<string, JsonValue>>
|
||||
|
||||
/** One card admitted from a successful `propose_action` call. */
|
||||
export interface ActionCardProposal {
|
||||
/** Id of the logged tool call. */
|
||||
readonly callId: ToolCallId
|
||||
/** Turn whose answer the card follows. */
|
||||
readonly turn: number
|
||||
/** Registered action kind named by the call. */
|
||||
readonly action: string
|
||||
readonly title: string
|
||||
/** What the action does, in the user's language. */
|
||||
readonly brief: string
|
||||
/** Fields the kind's skill asks for. */
|
||||
readonly details: ActionCardFields
|
||||
}
|
||||
|
||||
/**
|
||||
* Latest state of one card. Kinds define their own phases; `dismissed` is shared.
|
||||
* `replaced` (a later proposal superseded an unstarted card) and `suppressed`
|
||||
* (the proposal was written while the user had queued messages) are derived
|
||||
* from the log and never recorded.
|
||||
*/
|
||||
export interface ActionCardDecision {
|
||||
readonly callId: ToolCallId
|
||||
readonly action: string
|
||||
readonly phase: string
|
||||
/** Kind-defined fields such as a chosen location or a created package. */
|
||||
readonly data?: ActionCardFields | undefined
|
||||
}
|
||||
|
||||
/** Open-Session proposals and decisions by call id, excluded from Session summaries. */
|
||||
export interface ActionCardView {
|
||||
readonly proposals: Readonly<Record<string, ActionCardProposal>>
|
||||
readonly decisions: Readonly<Record<string, ActionCardDecision>>
|
||||
}
|
||||
|
||||
/**
|
||||
* Result of a user action. `accepted` starts background work that records its
|
||||
* own progress; `settled` returns the decision now in effect; `refused` changed
|
||||
* nothing; `unconfirmed` lost its outcome to an unloading owner, which the
|
||||
* kind reconciles when the Session reopens.
|
||||
*/
|
||||
export type ActionCardResult =
|
||||
| { readonly status: 'accepted' }
|
||||
| { readonly status: 'settled'; readonly decision: ActionCardDecision }
|
||||
| { readonly status: 'refused'; readonly reason: string }
|
||||
| { readonly status: 'unconfirmed'; readonly reason: string }
|
||||
|
||||
declare module '@deepseek-ai/dsh-llm' {
|
||||
interface MessageSourceMap {
|
||||
/** Card status notice; other readers preserve the recorded text without this plugin.
|
||||
* The producer uses through only to acknowledge delivered decisions.
|
||||
* @persistenceAttribution
|
||||
*/
|
||||
'action-cards': { kind: 'action-cards'; through: SessionSeq } & ContextFormed
|
||||
}
|
||||
}
|
||||
|
||||
declare module '@deepseek-ai/dsh-session/types' {
|
||||
interface PluginRecordMap {
|
||||
/** Dismissals and kind-defined progress of action cards. */
|
||||
'plugin:action-cards/decision': ActionCardDecision
|
||||
}
|
||||
}
|
||||
|
||||
declare module '@deepseek-ai/dsh-session-projection/types' {
|
||||
interface SessionProjectionMap {
|
||||
/** Action card proposals and decisions for the currently open Session. */
|
||||
actionCards: SessionProjectionSummaryExcluded<ActionCardView>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
||||
|
||||
exports[`reports recorded decisions once on the next request, with each kind guidance once, without waking the conversation > status notice 1`] = `
|
||||
[
|
||||
{
|
||||
"text": "Latest status of action cards from user actions and background work. These are status facts, not a request to start or retry work. Use these receipts instead of the earlier proposal when describing progress. Failed runs can be retried from their card. Continue with the user’s current request.
|
||||
[{"action":"test_action","callId":"call-card-1","title":"Counter","phase":"failed","data":{"reason":"timeout"}},{"action":"test_action","callId":"call-card-2","title":"Second","phase":"dismissed"},{"action":"retired_action","callId":"call-orphan","phase":"done"}]",
|
||||
"type": "text",
|
||||
},
|
||||
]
|
||||
`;
|
||||
@@ -0,0 +1,36 @@
|
||||
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
||||
|
||||
exports[`declares propose_action from the step after a card skill loads, and logs the addition > tool declaration 1`] = `
|
||||
{
|
||||
"description": "Show the user one optional action card under this answer. Call only as the skill that names the action instructs.",
|
||||
"name": "propose_action",
|
||||
"parameters": {
|
||||
"properties": {
|
||||
"action": {
|
||||
"description": "Action name from the skill.",
|
||||
"type": "string",
|
||||
},
|
||||
"brief": {
|
||||
"description": "What the action does, in the user's language.",
|
||||
"type": "string",
|
||||
},
|
||||
"details": {
|
||||
"additionalProperties": true,
|
||||
"description": "Fields the skill lists for this action.",
|
||||
"type": "object",
|
||||
},
|
||||
"title": {
|
||||
"description": "Card title.",
|
||||
"type": "string",
|
||||
},
|
||||
},
|
||||
"required": [
|
||||
"action",
|
||||
"title",
|
||||
"brief",
|
||||
"details",
|
||||
],
|
||||
"type": "object",
|
||||
},
|
||||
}
|
||||
`;
|
||||
@@ -0,0 +1,99 @@
|
||||
import { expect, it, onTestFinished, vi } from 'vitest'
|
||||
import { z } from 'zod'
|
||||
import { ToolCallId } from '@deepseek-ai/dsh-llm'
|
||||
import type { ActionCardResult } from '../src/index.ts'
|
||||
import { ACTION, callId, fixture, proposal } from './fixture.ts'
|
||||
|
||||
const dismissed = (data?: object) => ({ status: 'settled', decision: { callId, action: ACTION, phase: 'dismissed', ...data === undefined ? {} : { data } } })
|
||||
|
||||
it('refuses unknown cards, closed owners, removed kinds and undeclared verbs before any handler runs', async () => {
|
||||
const f = await fixture()
|
||||
expect(await f.ctx.actionCards.act(f.agent, callId, 'start')).toEqual({ status: 'refused', reason: 'unknown' })
|
||||
f.propose()
|
||||
for (const id of ['toString', 'constructor']) {
|
||||
expect(await f.ctx.actionCards.act(f.agent, ToolCallId(id), 'dismiss')).toEqual({ status: 'refused', reason: 'unknown' })
|
||||
}
|
||||
for (const verb of ['toString', 'missing']) {
|
||||
expect(await f.ctx.actionCards.act(f.agent, callId, verb)).toEqual({ status: 'refused', reason: 'unavailable' })
|
||||
}
|
||||
const roots = vi.spyOn(f.ctx.agents, 'roots').mockReturnValue([])
|
||||
expect(await f.ctx.actionCards.act(f.agent, callId, 'start')).toEqual({ status: 'refused', reason: 'not-live-root' })
|
||||
roots.mockRestore()
|
||||
await f.kindFiber.dispose()
|
||||
expect(await f.ctx.actionCards.act(f.agent, callId, 'dismiss')).toEqual({ status: 'refused', reason: 'unavailable' })
|
||||
const service = f.ctx.actionCards
|
||||
await f.cards.dispose()
|
||||
expect(await service.act(f.agent, callId, 'dismiss')).toEqual({ status: 'refused', reason: 'closing' })
|
||||
expect(f.act).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('applies the shared access and read-only checks the kind declares, then hands typed details to the kind', async () => {
|
||||
const f = await fixture()
|
||||
f.propose()
|
||||
const access = vi.spyOn(f.ctx.remoteAccess, 'allows').mockReturnValue(false)
|
||||
expect(await f.ctx.actionCards.act(f.agent, callId, 'publish')).toEqual({ status: 'refused', reason: 'access-denied' })
|
||||
expect(await f.ctx.actionCards.act(f.agent, callId, 'start', { note: 'x' })).toEqual({ status: 'settled', decision: { callId, action: ACTION, phase: 'start' } })
|
||||
access.mockRestore()
|
||||
expect(f.act).toHaveBeenCalledWith(f.agent, { callId, turn: 1, ...proposal }, 'start', { note: 'x' })
|
||||
const resolve = vi.fn(() => ({ mode: 'read-only', workspaceRoot: '/' }))
|
||||
f.ctx.provide('sandboxPolicy', { resolve })
|
||||
expect(await f.ctx.actionCards.act(f.agent, callId, 'write')).toEqual({ status: 'refused', reason: 'read-only' })
|
||||
expect(resolve).toHaveBeenCalledWith({ session: f.agent.session })
|
||||
expect((await f.ctx.actionCards.act(f.agent, callId, 'publish')).status).toBe('settled')
|
||||
resolve.mockReturnValue({ mode: 'workspace-write', workspaceRoot: '/' })
|
||||
expect((await f.ctx.actionCards.act(f.agent, callId, 'write')).status).toBe('settled')
|
||||
f.propose(ToolCallId('call-invalid'), { ...proposal, details: { value: 3 } }, f.agent, 2)
|
||||
expect(await f.ctx.actionCards.act(f.agent, ToolCallId('call-invalid'), 'start')).toEqual({ status: 'refused', reason: 'unavailable' })
|
||||
expect(f.act).toHaveBeenCalledTimes(3)
|
||||
})
|
||||
|
||||
it('records dismissal of an unstarted or open card with the kind data, and settles started or final cards', async () => {
|
||||
const f = await fixture({
|
||||
openPhases: ['failed'],
|
||||
dismissal: (card, payload) => ({ value: card.details.value, ...z.object({ choice: z.string() }).safeParse(payload).data }),
|
||||
})
|
||||
f.propose()
|
||||
expect(await f.ctx.actionCards.act(f.agent, callId, 'dismiss', { choice: 'later' })).toEqual(dismissed({ value: 'a', choice: 'later' }))
|
||||
expect(f.view().decisions[callId]?.phase).toBe('dismissed')
|
||||
for (const verb of ['dismiss', 'start']) expect(await f.ctx.actionCards.act(f.agent, callId, verb)).toEqual(dismissed({ value: 'a', choice: 'later' }))
|
||||
f.ctx.actionCards.record(f.agent, { callId, action: ACTION, phase: 'failed' })
|
||||
expect(await f.ctx.actionCards.act(f.agent, callId, 'dismiss')).toEqual(dismissed({ value: 'a' }))
|
||||
f.ctx.actionCards.record(f.agent, { callId, action: ACTION, phase: 'running', data: { step: 1 } })
|
||||
expect(await f.ctx.actionCards.act(f.agent, callId, 'dismiss')).toEqual({ status: 'settled',
|
||||
decision: { callId, action: ACTION, phase: 'running', data: { step: 1 } } })
|
||||
f.propose(ToolCallId('call-invalid'), { ...proposal, details: { value: 3 } }, f.agent, 2)
|
||||
expect(await f.ctx.actionCards.act(f.agent, ToolCallId('call-invalid'), 'dismiss')).toEqual({ status: 'settled',
|
||||
decision: { callId: 'call-invalid', action: ACTION, phase: 'dismissed' } })
|
||||
expect(f.act).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('dismisses without data when the kind records none', async () => {
|
||||
const f = await fixture()
|
||||
f.propose()
|
||||
expect(await f.ctx.actionCards.act(f.agent, callId, 'dismiss', { choice: 'later' })).toEqual(dismissed())
|
||||
})
|
||||
|
||||
it('shares one operation between concurrent actions on a card and drains it on unload', async () => {
|
||||
const pending = Promise.withResolvers<ActionCardResult>()
|
||||
onTestFinished(() => { pending.resolve({ status: 'accepted' }) })
|
||||
const f = await fixture({ act: vi.fn(() => pending.promise) })
|
||||
f.propose()
|
||||
const first = f.ctx.actionCards.act(f.agent, callId, 'start')
|
||||
expect(f.ctx.actionCards.act(f.agent, callId, 'dismiss')).toBe(first)
|
||||
const disposing = f.cards.dispose()
|
||||
pending.resolve({ status: 'accepted' })
|
||||
expect(await first).toEqual({ status: 'accepted' })
|
||||
await disposing
|
||||
})
|
||||
|
||||
it('rejects a second kind for the same action and releases a kind through its disposer', async () => {
|
||||
const f = await fixture()
|
||||
const kind = (action: string) => ({ action, skill: 'other-skill', details: z.object({}), verbs: { start: {} },
|
||||
act: () => Promise.resolve<ActionCardResult>({ status: 'accepted' }) })
|
||||
expect(() => f.ctx.actionCards.register(kind(ACTION))).toThrow('action-cards: action "test_action" is already registered')
|
||||
const unregister = f.ctx.actionCards.register(kind('other_action'))
|
||||
f.propose(ToolCallId('call-other'), { action: 'other_action', title: 'Other', brief: 'Other card.', details: {} })
|
||||
expect(await f.ctx.actionCards.act(f.agent, ToolCallId('call-other'), 'start')).toEqual({ status: 'accepted' })
|
||||
unregister()
|
||||
expect(await f.ctx.actionCards.act(f.agent, ToolCallId('call-other'), 'start')).toEqual({ status: 'refused', reason: 'unavailable' })
|
||||
})
|
||||
@@ -0,0 +1,72 @@
|
||||
/** Real Agent, Tools, skills and projections with the card service and one scripted test kind. */
|
||||
import { Context } from '@deepseek-ai/cordis'
|
||||
import { onTestFinished, vi } from 'vitest'
|
||||
import { z } from 'zod'
|
||||
import { createToolResultMessage, ToolCallId } from '@deepseek-ai/dsh-llm'
|
||||
import { SessionId, type SessionEvent } from '@deepseek-ai/dsh-session'
|
||||
import { mountAgentLoopTestDependencies, mountAgentLoopTestHarness } from '@deepseek-ai/dsh-agent-loop-testkit'
|
||||
import Skills, { BUNDLED_SKILL_RANK } from '@deepseek-ai/dsh-skill'
|
||||
import * as SkillTool from '@deepseek-ai/dsh-tool-skill'
|
||||
import RemoteAccess from '@deepseek-ai/dsh-api-remote-access'
|
||||
import type { Agent } from '@deepseek-ai/dsh-agent'
|
||||
import ActionCards from '../src/index.ts'
|
||||
import type { ActionCardFields, ActionCardKind, ActionCardProposalOf, ActionCardResult } from '../src/index.ts'
|
||||
|
||||
export const ACTION = 'test_action'
|
||||
export const SKILL = 'test-skill'
|
||||
export const callId = ToolCallId('call-card-1')
|
||||
export const proposal = { action: ACTION, title: 'Counter', brief: 'Keep a counter visible.', details: { value: 'a' } }
|
||||
|
||||
/** Details of the test kind. */
|
||||
export interface TestDetails { readonly value: string }
|
||||
|
||||
/** Provide one model-invocable skill per name. */
|
||||
export function provideSkills(ctx: Context, ...names: string[]): void {
|
||||
ctx.skills.registerProvider(() => ({
|
||||
name: 'card-skills',
|
||||
list: () => Promise.resolve(names.map(name => ({
|
||||
name, description: `Use ${name}.`, provider: 'card-skills', source: 'bundled' as const, rank: BUNDLED_SKILL_RANK, locator: null,
|
||||
invocation: { modelInvocable: true, userInvocable: false },
|
||||
}))),
|
||||
get: candidate => Promise.resolve({ name: candidate.name, description: candidate.description, provider: 'card-skills', source: 'bundled' as const,
|
||||
invocation: candidate.invocation, content: `Call propose_action for ${candidate.name}.` }),
|
||||
}))
|
||||
}
|
||||
|
||||
/** Mount the card service with one registered kind whose handler is a spy. */
|
||||
export async function fixture(kind: Partial<ActionCardKind<TestDetails>> = {}) {
|
||||
const ctx = new Context()
|
||||
onTestFinished(async () => { await ctx.fiber.dispose() })
|
||||
await mountAgentLoopTestDependencies(ctx, { workingDirectory: true })
|
||||
const harness = await mountAgentLoopTestHarness(ctx)
|
||||
await ctx.plugin(RemoteAccess)
|
||||
await ctx.plugin(Skills)
|
||||
await ctx.plugin(SkillTool)
|
||||
provideSkills(ctx, SKILL, 'other-skill')
|
||||
const cards = await ctx.plugin(ActionCards)
|
||||
type Handler = (
|
||||
agent: Agent, card: ActionCardProposalOf<TestDetails>, verb: string, payload: ActionCardFields | undefined,
|
||||
) => Promise<ActionCardResult>
|
||||
const act = vi.fn<Handler>(async (_agent, card, verb) =>
|
||||
({ status: 'settled', decision: { callId: card.callId, action: ACTION, phase: verb } }))
|
||||
const kindFiber = await ctx.plugin({ name: 'test-kind', inject: ['actionCards'], apply: (inner: Context) => {
|
||||
inner.actionCards.register({
|
||||
action: ACTION, skill: SKILL, details: z.object({ value: z.string() }),
|
||||
verbs: { start: {}, publish: { global: true }, write: { writes: true } },
|
||||
act, ...kind,
|
||||
})
|
||||
} })
|
||||
const agentHandle = await ctx.agents.create({ sessionId: SessionId('cards-root') })
|
||||
const agent = agentHandle.agent
|
||||
const events: SessionEvent[] = []
|
||||
ctx.on('session/event', (session, event) => { if (session === agent.session) events.push(event) })
|
||||
let step = 0
|
||||
/** Log a successful `propose_action` call, as the loop does after the tool accepts it. */
|
||||
const propose = (id: ToolCallId = callId, args: object = proposal, caller = agent, turn = 1) => {
|
||||
caller.session.append('tool/call', { turn, step: ++step, callId: id, name: 'propose_action', arguments: JSON.stringify(args) })
|
||||
caller.session.append('tool/result', { turn, step, message: createToolResultMessage({ callId: id, content: [], isError: false }) }, { surfaceOp: 'append' })
|
||||
return id
|
||||
}
|
||||
const view = (caller = agent) => ctx.actionCards.view(caller.session)
|
||||
return { ctx, harness, cards, kindFiber, agent, agentHandle, events, act, propose, view }
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
import { expect, it } from 'vitest'
|
||||
import { createToolResultMessage, createUserMessage, ToolCallId } from '@deepseek-ai/dsh-llm'
|
||||
import {
|
||||
appendPluginRecord, Session, SESSION_FORMAT_VERSION, SessionId, SessionLogOffset, SessionSeq, type SessionEvent, type SessionHeader,
|
||||
} from '@deepseek-ai/dsh-session'
|
||||
import { actionCardProjection, type ActionCardState } from '../src/projection.ts'
|
||||
import type { ActionCardDecision } from '../src/types.ts'
|
||||
|
||||
const projection = actionCardProjection({ queuedMessageLimit: 2 })
|
||||
const args = { action: 'test_action', title: 'Counter', brief: 'Keep count visible', details: { value: 'a' } }
|
||||
let seq = 0
|
||||
|
||||
function init(inherited = 0): ActionCardState {
|
||||
const header: SessionHeader = { version: SESSION_FORMAT_VERSION, id: SessionId('cards'), createdAt: 0, isSeeded: inherited > 0 }
|
||||
return projection.init(header, SessionLogOffset(inherited))
|
||||
}
|
||||
|
||||
function turn(value: number): SessionEvent<'turn/start'> {
|
||||
return { type: 'turn/start', seq: SessionSeq(seq++), time: 0, data: { turn: value } }
|
||||
}
|
||||
|
||||
function call(callId: string, value: object | string = args, turnNumber = 1, name = 'propose_action'): SessionEvent<'tool/call'> {
|
||||
return { type: 'tool/call', seq: SessionSeq(seq++), time: 0,
|
||||
data: { turn: turnNumber, step: 1, callId: ToolCallId(callId), name, arguments: typeof value === 'string' ? value : JSON.stringify(value) } }
|
||||
}
|
||||
|
||||
function result(callId: string, isError = false, turnNumber = 1): SessionEvent<'tool/result'> {
|
||||
return { type: 'tool/result', seq: SessionSeq(seq++), time: 0, surfaceOp: 'append',
|
||||
data: { turn: turnNumber, step: 1, message: createToolResultMessage({ callId: ToolCallId(callId), content: [], isError }) } }
|
||||
}
|
||||
|
||||
function spliced(inserted: number, removedCount?: number, target: 'next-turn' | 'next-step' = 'next-turn'): SessionEvent<'agent/inbox/spliced'> {
|
||||
return { type: 'agent/inbox/spliced', seq: SessionSeq(seq++), time: 0, data: { target, start: 0, ...removedCount === undefined ? {} : { removedCount },
|
||||
inserted: Array.from({ length: inserted }, () => createUserMessage({ content: [{ type: 'text', text: 'next' }], source: { kind: 'user' } })) } }
|
||||
}
|
||||
|
||||
function records(...data: ActionCardDecision[]): readonly SessionEvent[] {
|
||||
const session = Session.create(SessionId('records'))
|
||||
for (const value of data) appendPluginRecord(session, 'plugin:action-cards/decision', value)
|
||||
return session.snapshotEvents()
|
||||
}
|
||||
|
||||
const fold = (events: readonly SessionEvent[], state = init()) => events.reduce(projection.apply, state)
|
||||
|
||||
it('admits a successful propose_action call as a card in its turn and ignores failed, malformed and other calls', () => {
|
||||
const state = fold([turn(1), call('c1'), result('c1')])
|
||||
expect(state.view.proposals).toEqual({ c1: { callId: 'c1', turn: 1, ...args } })
|
||||
expect(state.calls).toEqual({})
|
||||
for (const events of [
|
||||
[call('c2'), result('c2', true)],
|
||||
[call('c3', '{broken')],
|
||||
[call('c4', { ...args, title: ' ' })],
|
||||
[call('c5', { ...args, details: 'text' })],
|
||||
[call('c6', args, 1, 'other_tool'), result('c6')],
|
||||
[result('unrelated')],
|
||||
]) {
|
||||
expect(fold(events).view.proposals).toEqual({})
|
||||
}
|
||||
const trimmed = fold([call('c7', { ...args, title: ' Counter ' }), result('c7')])
|
||||
expect(trimmed.view.proposals.c7?.title).toBe('Counter')
|
||||
const pending = fold([call('c8')])
|
||||
expect(Object.keys(pending.calls)).toEqual(['c8'])
|
||||
expect(projection.apply(pending, turn(2)).calls).toEqual({})
|
||||
const idle = fold([turn(3)])
|
||||
expect(projection.apply(idle, turn(4))).toBe(idle)
|
||||
})
|
||||
|
||||
it('keeps the first admitted card of a turn and replaces only unstarted earlier cards', () => {
|
||||
const first = fold([turn(1), call('a'), result('a')])
|
||||
const late = fold([call('b'), result('b')], first)
|
||||
expect(Object.keys(late.view.proposals)).toEqual(['a'])
|
||||
const next = fold([turn(2), call('c', args, 2), result('c', false, 2)], first)
|
||||
expect(next.view.decisions).toEqual({ a: { callId: 'a', action: 'test_action', phase: 'replaced' } })
|
||||
const started = fold(records({ callId: ToolCallId('a'), action: 'test_action', phase: 'creating' }), first)
|
||||
const afterStart = fold([turn(2), call('c', args, 2), result('c', false, 2)], started)
|
||||
expect(afterStart.view.decisions.a?.phase).toBe('creating')
|
||||
expect(afterStart.view.decisions.c).toBeUndefined()
|
||||
})
|
||||
|
||||
it('suppresses a card proposed while user messages are queued for later turns', () => {
|
||||
const queued = fold([turn(1), spliced(1, undefined, 'next-step'), spliced(2), call('a'), result('a')])
|
||||
expect(queued.queued).toBe(2)
|
||||
expect(queued.view.decisions.a).toEqual({ callId: 'a', action: 'test_action', phase: 'suppressed' })
|
||||
const drained = fold([spliced(0, 2), turn(2), call('b', args, 2), result('b', false, 2)], queued)
|
||||
expect(drained.queued).toBe(0)
|
||||
expect(drained.view.decisions.b).toBeUndefined()
|
||||
expect(drained.view.decisions.a?.phase).toBe('suppressed')
|
||||
expect(fold([spliced(0, 5)]).queued).toBe(0)
|
||||
})
|
||||
|
||||
it('ignores the events a forked Session inherits from its parent', () => {
|
||||
const parent = [turn(1), call('a'), result('a')]
|
||||
// Every event created so far precedes the fork point.
|
||||
const inherited = init(seq)
|
||||
expect(fold(parent, inherited)).toBe(inherited)
|
||||
const own = fold([turn(2), call('b', args, 2), result('b', false, 2)], inherited)
|
||||
expect(Object.keys(own.view.proposals)).toEqual(['b'])
|
||||
expect(own.view.decisions).toEqual({})
|
||||
})
|
||||
|
||||
it('records valid decisions as pending status until a status notice acknowledges them', () => {
|
||||
const [created, malformed, dismissed] = records(
|
||||
{ callId: ToolCallId('a'), action: 'test_action', phase: 'creating', data: { value: 1 } },
|
||||
{ callId: ToolCallId('a'), action: 'test_action', phase: '' },
|
||||
{ callId: ToolCallId('b'), action: 'test_action', phase: 'dismissed' },
|
||||
)
|
||||
const state = fold([created!, malformed!, dismissed!])
|
||||
expect(state.view.decisions).toEqual({
|
||||
a: { callId: 'a', action: 'test_action', phase: 'creating', data: { value: 1 } },
|
||||
b: { callId: 'b', action: 'test_action', phase: 'dismissed' },
|
||||
})
|
||||
expect(state.pendingStatus).toEqual({ a: created!.seq, b: dismissed!.seq })
|
||||
const notice = (through: number): SessionEvent<'user/message'> => ({ type: 'user/message', seq: SessionSeq(99), time: 0, surfaceOp: 'append',
|
||||
data: createUserMessage({ content: [{ type: 'text', text: 'status' }],
|
||||
source: { kind: 'action-cards', through: SessionSeq(through), form: 'notice', summary: 'status' } }) })
|
||||
expect(projection.apply(state, notice(created!.seq)).pendingStatus).toEqual({ b: dismissed!.seq })
|
||||
const user: SessionEvent<'user/message'> = { type: 'user/message', seq: SessionSeq(100), time: 0, surfaceOp: 'append',
|
||||
data: createUserMessage({ content: [{ type: 'text', text: 'hi' }], source: { kind: 'user' } }) }
|
||||
expect(projection.apply(state, user)).toBe(state)
|
||||
})
|
||||
|
||||
it('publishes proposals and decisions as one view reused across internal state changes', () => {
|
||||
const state = fold([turn(1), call('a'), result('a')])
|
||||
const view = projection.wire.view(state)
|
||||
expect(view).toBe(state.view)
|
||||
expect(projection.wire.viewSchema.parse(view)).toEqual(view)
|
||||
expect(projection.wire.view(fold([spliced(1), call('pending')], state))).toBe(view)
|
||||
expect(projection.stateSchema.parse(state)).toEqual(state)
|
||||
})
|
||||
@@ -0,0 +1,69 @@
|
||||
import { expect, it, vi } from 'vitest'
|
||||
import { agentEvents, type Agent, type PreStepDecision } from '@deepseek-ai/dsh-agent'
|
||||
import { ToolCallId } from '@deepseek-ai/dsh-llm'
|
||||
import ActionCards from '../src/index.ts'
|
||||
import { ACTION, callId, fixture } from './fixture.ts'
|
||||
|
||||
type Fixture = Awaited<ReturnType<typeof fixture>>
|
||||
|
||||
async function prepare(f: Fixture, agent: Agent = f.agent, signal = new AbortController().signal, admitted?: () => void | Promise<void>) {
|
||||
const decision = await agentEvents(f.ctx, agent).waterfall('agent/pre-step', { messages: [], turn: 2, step: 1, signal, modelSelection: { provider: 'mock', model: 'mock' } },
|
||||
async (): Promise<PreStepDecision> => { await admitted?.(); return { kind: 'enter', messages: [] } })
|
||||
return decision.kind === 'reject' ? decision : { ...decision, messages: decision.messages.filter(message => message.source.kind === 'action-cards') }
|
||||
}
|
||||
|
||||
function enter(agent: Agent, decision: PreStepDecision): void {
|
||||
if (decision.kind === 'enter') for (const message of decision.messages) agent.session.append('user/message', message, { surfaceOp: 'append' })
|
||||
}
|
||||
|
||||
it('reports recorded decisions once on the next request, with each kind guidance once, without waking the conversation', async () => {
|
||||
const f = await fixture({ statusGuidance: 'Failed runs can be retried from their card.', statusFields: ['reason'] })
|
||||
const followup = vi.spyOn(f.agent, 'followup')
|
||||
expect(await prepare(f)).toEqual({ kind: 'enter', messages: [] })
|
||||
f.propose()
|
||||
f.propose(ToolCallId('call-card-2'), { action: ACTION, title: 'Second', brief: 'Another card.', details: { value: 'b' } }, f.agent, 2)
|
||||
expect(await prepare(f)).toEqual({ kind: 'enter', messages: [] })
|
||||
f.ctx.actionCards.record(f.agent, { callId, action: ACTION, phase: 'failed', data: { reason: 'timeout', internal: 'x' } })
|
||||
f.ctx.actionCards.record(f.agent, { callId: ToolCallId('call-card-2'), action: ACTION, phase: 'dismissed' })
|
||||
f.ctx.actionCards.record(f.agent, { callId: ToolCallId('call-orphan'), action: 'retired_action', phase: 'done' })
|
||||
const decision = await prepare(f)
|
||||
if (decision.kind !== 'enter') throw new Error('request was rejected')
|
||||
expect(decision.messages).toHaveLength(1)
|
||||
expect(decision.messages[0]!.source).toMatchObject({ kind: 'action-cards', form: 'notice', summary: 'Action card status updated' })
|
||||
expect(decision.messages[0]!.content).toMatchSnapshot('status notice')
|
||||
enter(f.agent, decision)
|
||||
expect(await prepare(f)).toEqual({ kind: 'enter', messages: [] })
|
||||
expect(followup).not.toHaveBeenCalled()
|
||||
})
|
||||
|
||||
it('keeps undelivered status through rejection, cancellation and plugin reload', async () => {
|
||||
const f = await fixture()
|
||||
f.propose()
|
||||
await f.ctx.actionCards.act(f.agent, callId, 'dismiss')
|
||||
const cancelled = new AbortController()
|
||||
await expect(prepare(f, f.agent, cancelled.signal, () => { cancelled.abort() })).rejects.toThrow()
|
||||
const rejected = f.ctx.on('agent/pre-step', async (): Promise<PreStepDecision> => ({ kind: 'reject' }))
|
||||
expect((await prepare(f)).kind).toBe('reject')
|
||||
rejected()
|
||||
expect(await prepare(f, f.agent, undefined, async () => { await f.cards.dispose() })).toEqual({ kind: 'enter', messages: [] })
|
||||
await f.ctx.plugin(ActionCards, { queuedMessageLimit: 3 })
|
||||
const decision = await prepare(f)
|
||||
if (decision.kind !== 'enter') throw new Error('request was rejected')
|
||||
expect(JSON.stringify(decision.messages[0]!.content)).toContain('dismissed')
|
||||
})
|
||||
|
||||
it('adds nothing when cancellation arrives after downstream preparation', async () => {
|
||||
const f = await fixture()
|
||||
f.propose()
|
||||
await f.ctx.actionCards.act(f.agent, callId, 'dismiss')
|
||||
await f.cards.dispose()
|
||||
const controller = new AbortController()
|
||||
// Prepended before the card service returns, so it runs right after the service's own listener.
|
||||
f.ctx.on('agent/pre-step', async (_event, next) => {
|
||||
const decision = await next()
|
||||
controller.abort()
|
||||
return decision
|
||||
}, { prepend: true })
|
||||
await f.ctx.plugin(ActionCards)
|
||||
expect(await prepare(f, f.agent, controller.signal)).toEqual({ kind: 'enter', messages: [] })
|
||||
})
|
||||
@@ -0,0 +1,113 @@
|
||||
import { expect, it } from 'vitest'
|
||||
import { createUserMessage, ToolCallId } from '@deepseek-ai/dsh-llm'
|
||||
import { SessionId } from '@deepseek-ai/dsh-session'
|
||||
import type { ToolExecutionToken } from '@deepseek-ai/dsh-tools'
|
||||
import { executeModelToolFixture, executeToolFixture } from '@deepseek-ai/dsh-tool-testkit'
|
||||
import type { Agent } from '@deepseek-ai/dsh-agent'
|
||||
import { MockAdapter, textResponse, toolCallResponse } from '../../../core/agent-loop/tests/mock-adapter.ts'
|
||||
import { ACTION, fixture, proposal, SKILL } from './fixture.ts'
|
||||
|
||||
type Fixture = Awaited<ReturnType<typeof fixture>>
|
||||
const signal = new AbortController().signal
|
||||
const modelSelection = { provider: 'mock', model: 'mock' }
|
||||
|
||||
/** Run one call through the executor with the step admission the loop would resolve. */
|
||||
async function call(f: Fixture, name: string, args: object, id: string, agent: Agent = f.agent, parent?: ToolExecutionToken) {
|
||||
const toolSet = await f.ctx.tools.resolve({ agent, modelSelection, signal })
|
||||
try {
|
||||
return parent === undefined
|
||||
? await executeModelToolFixture(f.ctx, { callId: ToolCallId(id), name, arguments: args, agent, signal, toolSet })
|
||||
: await executeToolFixture(f.ctx, { callId: ToolCallId(id), name, arguments: args, agent, signal, toolSet, parent })
|
||||
} finally { toolSet.dispose() }
|
||||
}
|
||||
|
||||
async function declared(f: Fixture, agent: Agent = f.agent): Promise<boolean> {
|
||||
const toolSet = await f.ctx.tools.resolve({ agent, modelSelection, signal })
|
||||
const visible = toolSet.view(agent).has('propose_action')
|
||||
toolSet.dispose()
|
||||
return visible
|
||||
}
|
||||
|
||||
function text(result: { content: readonly { type: string; text?: string }[] }): string {
|
||||
return result.content.map(block => block.text ?? '').join('')
|
||||
}
|
||||
|
||||
it('declares propose_action from the step after a card skill loads, and logs the addition', async () => {
|
||||
const f = await fixture()
|
||||
const adapter = new MockAdapter([
|
||||
toolCallResponse('call-skill', 'skill', { name: SKILL }),
|
||||
toolCallResponse('call-card-1', 'propose_action', proposal),
|
||||
textResponse('The card is below.'),
|
||||
])
|
||||
f.ctx.llm.registerAdapter(['mock'], adapter)
|
||||
const agent = await f.harness.create(SessionId('loop'), modelSelection)
|
||||
expect(await declared(f, agent)).toBe(false)
|
||||
agent.followup(createUserMessage({ content: [{ type: 'text', text: 'I want a counter.' }], source: { kind: 'user' } }))
|
||||
await agent.whenIdle()
|
||||
expect(adapter.requests.map(request => (request.tools ?? []).some(tool => tool.name === 'propose_action'))).toEqual([false, true, true])
|
||||
const tool = adapter.requests[1]!.tools!.find(candidate => candidate.name === 'propose_action')
|
||||
expect(tool).toMatchSnapshot('tool declaration')
|
||||
expect(agent.session.snapshotEvents().flatMap(event => event.type === 'developer/message' ? event.data.message.content : []))
|
||||
.toEqual([{ type: 'tool-addition', toolName: 'propose_action' }])
|
||||
expect(await declared(f, agent)).toBe(true)
|
||||
const result = agent.session.snapshotEvents().find(event => event.type === 'tool/result' && event.data.message.toolCallId === 'call-card-1')
|
||||
expect(result?.type === 'tool/result' && result.data.message.content).toEqual([
|
||||
{ type: 'text', text: 'Card shown below your answer. Do not restate it; end with one short invitation.' },
|
||||
])
|
||||
expect(f.view(agent).proposals['call-card-1']).toEqual({ callId: 'call-card-1', turn: 1, ...proposal })
|
||||
})
|
||||
|
||||
it('declares nothing for other skills and stops declaring when the kind unregisters', async () => {
|
||||
const f = await fixture()
|
||||
f.agent.session.append('turn/start', { turn: 1 })
|
||||
expect((await call(f, 'skill', { name: 'other-skill' }, 'other')).isError).toBe(false)
|
||||
expect((await call(f, 'skill', { name: 'missing-skill' }, 'missing')).isError).toBe(true)
|
||||
expect(await declared(f)).toBe(false)
|
||||
expect((await call(f, 'propose_action', proposal, 'early')).isError).toBe(true)
|
||||
expect((await call(f, 'skill', { name: SKILL }, 'load')).isError).toBe(false)
|
||||
expect((await call(f, 'skill', { name: SKILL }, 'reload')).isError).toBe(false)
|
||||
expect((await executeToolFixture(f.ctx, { callId: ToolCallId('detached'), name: 'skill', arguments: { name: SKILL }, signal })).isError).toBe(false)
|
||||
expect(await declared(f)).toBe(true)
|
||||
await f.kindFiber.dispose()
|
||||
expect(await declared(f)).toBe(false)
|
||||
await f.cards.dispose()
|
||||
expect(f.ctx.tools.get('propose_action')).toBeUndefined()
|
||||
})
|
||||
|
||||
it('refuses unknown actions, a skill not loaded in this turn, blank fields, invalid details and nested calls', async () => {
|
||||
const f = await fixture()
|
||||
f.agent.session.append('turn/start', { turn: 1 })
|
||||
await call(f, 'skill', { name: SKILL }, 'load')
|
||||
expect(text(await call(f, 'propose_action', { ...proposal, action: 'nope' }, 'unknown'))).toBe('Error: Unknown action "nope". Registered actions: test_action.')
|
||||
expect(text(await call(f, 'propose_action', { ...proposal, title: ' ' }, 'blank'))).toBe('Error: Write a title and a brief.')
|
||||
expect(text(await call(f, 'propose_action', { ...proposal, brief: '' }, 'blank-brief'))).toBe('Error: Write a title and a brief.')
|
||||
expect(text(await call(f, 'propose_action', { ...proposal, details: { value: 1 } }, 'invalid')))
|
||||
.toBe('Error: Invalid details: details.value: Invalid input: expected string, received number')
|
||||
expect(text(await call(f, 'propose_action', proposal, 'nested', f.agent, Symbol('outer') as ToolExecutionToken)))
|
||||
.toBe('Error: Call propose_action directly, not from code.')
|
||||
f.agent.session.append('turn/start', { turn: 2 })
|
||||
expect(text(await call(f, 'propose_action', proposal, 'stale'))).toBe('Error: Load skill test-skill first, then call propose_action.')
|
||||
await f.kindFiber.dispose()
|
||||
await call(f, 'skill', { name: SKILL }, 'load-again')
|
||||
expect(await declared(f)).toBe(false)
|
||||
expect(Object.keys(f.view().proposals)).toEqual([])
|
||||
})
|
||||
|
||||
it('accepts one card per turn, admits a retry after a failed result and names the registered actions', async () => {
|
||||
const f = await fixture()
|
||||
f.agent.session.append('turn/start', { turn: 1 })
|
||||
await call(f, 'skill', { name: SKILL }, 'load')
|
||||
const blocked = f.ctx.on('tools/post-execute', async (exec, _result, next) => exec.callId === 'blocked'
|
||||
? { kind: 'block', feedback: [{ type: 'text', text: 'blocked' }] } : await next())
|
||||
expect((await call(f, 'propose_action', proposal, 'blocked')).isError).toBe(true)
|
||||
blocked()
|
||||
const accepted = await call(f, 'propose_action', { ...proposal, title: ' Counter ' }, 'accepted')
|
||||
expect(accepted).toMatchObject({ isError: false, value: { action: ACTION, title: 'Counter' } })
|
||||
expect(text(await call(f, 'propose_action', proposal, 'second'))).toBe('Error: One card per turn; the earlier card stands.')
|
||||
f.agent.session.append('turn/start', { turn: 2 })
|
||||
await call(f, 'skill', { name: SKILL }, 'load-2')
|
||||
f.propose(ToolCallId('logged'), proposal, f.agent, 2)
|
||||
expect(text(await call(f, 'propose_action', proposal, 'after-log'))).toBe('Error: One card per turn; the earlier card stands.')
|
||||
// A disposed agent's activation and per-turn marks are released with it.
|
||||
await f.agentHandle.dispose()
|
||||
})
|
||||
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"extends": "../../../tsconfig.base.json",
|
||||
"compilerOptions": {
|
||||
"rootDir": "src",
|
||||
"outDir": "lib/types"
|
||||
},
|
||||
"references": [
|
||||
{ "path": "../../../vendor/cordis" },
|
||||
{ "path": "../../typert/protocol" },
|
||||
{ "path": "../../llm/llm" },
|
||||
{ "path": "../../core/tools" },
|
||||
{ "path": "../../core/agent" },
|
||||
{ "path": "../../core/session" },
|
||||
{ "path": "../../session/session-projection" },
|
||||
{ "path": "../../api/remote-access/tsconfig.host.json" },
|
||||
{ "path": "../../sandbox/sandbox-policy" },
|
||||
{ "path": "../../util/values" }
|
||||
],
|
||||
"files": [
|
||||
"src/index.ts",
|
||||
"src/types.ts",
|
||||
"src/projection.ts"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
import { defineConfig } from 'tsdown'
|
||||
|
||||
/** Build the action card plugin. */
|
||||
export default defineConfig([
|
||||
{
|
||||
entry: ['lib/types/index.js'],
|
||||
outDir: 'lib',
|
||||
format: ['esm'],
|
||||
platform: 'node',
|
||||
target: 'es2024',
|
||||
fixedExtension: false,
|
||||
dts: false,
|
||||
clean: false,
|
||||
},
|
||||
])
|
||||
@@ -0,0 +1,40 @@
|
||||
# Bilingual-pair consistency record for README.md (docs/i18n/README.md): per heading
|
||||
# section, a hash of its English and Chinese blocks outside code blocks and generated regions.
|
||||
# After editing either side, bring the other along and re-record with:
|
||||
# pnpm run verify-translation-pairing --write packages/experimental/client-ui-action-cards/README.md
|
||||
/:
|
||||
en: eec43de9002f4ab1
|
||||
zh: 0d2fddca5a1f993a
|
||||
/deepseek-ai-dsh-experimental-client-ui-action-cards:
|
||||
en: 6ed1f2bf10bc2f1b
|
||||
zh: e3edea71ec4373c7
|
||||
/deepseek-ai-dsh-experimental-client-ui-action-cards/summary:
|
||||
en: 69abe0c52072c874
|
||||
zh: b718aa6a13be4b13
|
||||
/deepseek-ai-dsh-experimental-client-ui-action-cards/table-of-contents:
|
||||
en: d152484eb41ac6b4
|
||||
zh: b00dddf4c88f0a45
|
||||
/deepseek-ai-dsh-experimental-client-ui-action-cards/use-this-package:
|
||||
en: 09d6dec2adb9699a
|
||||
zh: b6ae739fe314df54
|
||||
/deepseek-ai-dsh-experimental-client-ui-action-cards/use-this-package/register-a-card-body:
|
||||
en: 2ab65c8c258e694a
|
||||
zh: a785becbe7015e0e
|
||||
/deepseek-ai-dsh-experimental-client-ui-action-cards/understand-the-implementation:
|
||||
en: bdfd09e39b6e0edf
|
||||
zh: 06f2da1c16a66547
|
||||
/deepseek-ai-dsh-experimental-client-ui-action-cards/further-exploration:
|
||||
en: c24d6ca9095832e7
|
||||
zh: b2ee0066a865dc5f
|
||||
/deepseek-ai-dsh-experimental-client-ui-action-cards/model-experience:
|
||||
en: f80a4b656c108f22
|
||||
zh: a3e30f46fa7136ac
|
||||
/deepseek-ai-dsh-experimental-client-ui-action-cards/model-experience/kv-cache-effect:
|
||||
en: 9cb7131bde146341
|
||||
zh: 1c7d1af00f58004d
|
||||
/deepseek-ai-dsh-experimental-client-ui-action-cards/known-limitations-and-deferred-work:
|
||||
en: 96914db20cfc0671
|
||||
zh: cd231bcdcb757ae0
|
||||
/deepseek-ai-dsh-experimental-client-ui-action-cards/known-limitations-and-deferred-work/dev-note:
|
||||
en: e67f633dc6fe7773
|
||||
zh: bd8a8936229e035e
|
||||
@@ -0,0 +1,89 @@
|
||||
---
|
||||
description: "Browser half of optional action cards: the card frame below completed answers, the body registry that experiment packages fill, and the one-line process row of propose_action calls."
|
||||
kind: "package-reference"
|
||||
---
|
||||
|
||||
# @deepseek-ai/dsh-experimental-client-ui-action-cards
|
||||
|
||||
English | [中文](README.zh.md)
|
||||
|
||||
## Summary
|
||||
|
||||
Users see an optional action card below a completed answer: its title, a brief that folds when long, and the controls of the experiment that proposed it. In the process area, the proposal shows as one row with the card title and whether the card was shown; a refused call expands to its reason. A card whose experiment provides no controls in this browser offers only Not now. Showing, expanding and folding cards make no model request.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
- [Use this package](#use-this-package)
|
||||
- [Understand the implementation](#understand-the-implementation)
|
||||
- [Further Exploration](#further-exploration)
|
||||
- [Model Experience](#model-experience)
|
||||
- [Known Limitations and Deferred Work](#known-limitations-and-deferred-work)
|
||||
- [Dev Note](#dev-note)
|
||||
|
||||
-----
|
||||
|
||||
<a id="use-this-package"></a>
|
||||
## Use this package
|
||||
|
||||
Enable the [Personalized pages bundle](../creation-recommendations/README.md), which inserts this package beside its [Host service](../action-cards/README.md). This browser contribution has no configuration fields.
|
||||
|
||||
### Register a card body
|
||||
|
||||
A kind's browser plugin injects `actionCards` and registers its body inside its own `ctx.effect`: `ctx.actionCards.register({ action, locale, Body })` returns the disposer. The frame renders `Body` for cards of that action with the card, its recorded or derived decision, whether the card state has arrived, the Session id, the frame's title and folded brief as `summary`, the frame's fold component as `Folded`, an `act(verb, payload?)` bound to the card, and a translator `t` for the body's own locale namespace. The body places `summary` in its own layout and owns its header, controls, status and footer. A second body for the same action is a registration error.
|
||||
|
||||
-----
|
||||
|
||||
<a id="understand-the-implementation"></a>
|
||||
## Understand the implementation
|
||||
|
||||
<details>
|
||||
<summary>Implementation internals — click to expand</summary>
|
||||
|
||||
One `conversation.chat.turnTail` entry reads the `actionCards` Session projection and shows the card admitted in its Turn once that Turn has ended, for any end reason; a suppressed card is not shown, and should several cards share a Turn, the lowest call id is shown. The frame sets `data-action-card` to the call id and names its region by the card title. Folding counts a wide grapheme, such as a Chinese character, as two Latin-letter widths and folds after about 260; it never measures layout or alters the full text.
|
||||
|
||||
A `tool.call.toolview` entry keyed `propose_action` renders the process row from the recorded call arguments and result. The plugin provides the body registry at its top level, then mounts the generated `actionCards` Remote and registers its dictionaries and slot entries for the same lifetime.
|
||||
|
||||
| Source | Contents |
|
||||
|---|---|
|
||||
| [`src/client/mount.ts`](src/client/mount.ts) | Registry, Remote, dictionaries and slot entries |
|
||||
| [`src/client/Card.tsx`](src/client/Card.tsx) | Turn tail, frame, fold and fallback body |
|
||||
| [`src/client/ProposeRow.tsx`](src/client/ProposeRow.tsx) | Process row |
|
||||
| [`src/client/registry.ts`](src/client/registry.ts) | Body registry and body props |
|
||||
| [`tests/`](tests/) | Placement, frame, fallback, row and registration tests |
|
||||
|
||||
</details>
|
||||
|
||||
-----
|
||||
|
||||
<a id="further-exploration"></a>
|
||||
## Further Exploration
|
||||
|
||||
- [Action cards](../action-cards/README.md) — the tool, card state and user actions behind the frame.
|
||||
- [Personalized page cards](../client-ui-creation-recommendations/README.md) — the shipped card body.
|
||||
- [Slots](../../client/ui-slots/README.md) — Turn tail and tool row registration.
|
||||
|
||||
<a id="model-experience"></a>
|
||||
## Model Experience
|
||||
|
||||
Indirectly, through the Host card service: card actions reach it as Remote calls, and it owns the logged tool, decisions and status notice.
|
||||
|
||||
#### KV Cache effect
|
||||
|
||||
Rendering cards and process rows does not change any model request.
|
||||
|
||||
## Known Limitations and Deferred Work
|
||||
|
||||
<a id="known-limitations-and-deferred-work"></a>
|
||||
|
||||
- A card whose action has no registered body offers only Not now, so its experiment's other actions need that experiment's browser plugin.
|
||||
- The Turn tail shows one card per Turn, matching the Host rule of one card per turn.
|
||||
|
||||
<a id="dev-note"></a>
|
||||
### Dev Note
|
||||
|
||||
<details>
|
||||
<summary>Working context for maintainers — click to expand</summary>
|
||||
|
||||
None.
|
||||
|
||||
</details>
|
||||
@@ -0,0 +1,89 @@
|
||||
---
|
||||
description: "可选操作卡片的浏览器端:已完成回答下方的卡片框架、供各实验包填入的正文注册表,以及 propose_action 调用的单行过程行。"
|
||||
kind: "package-reference"
|
||||
---
|
||||
|
||||
# @deepseek-ai/dsh-experimental-client-ui-action-cards
|
||||
|
||||
[English](README.md) | 中文
|
||||
|
||||
## 概述
|
||||
|
||||
用户在已完成的回答下方看到一张可选操作卡片:标题、过长时会折叠的说明,以及提议该卡片的实验所提供的控件。在过程区中,提议显示为一行,带卡片标题和卡片是否已展示;被拒绝的调用可以展开查看原因。如果实验在当前浏览器中没有提供控件,卡片只提供“暂不需要”。展示、展开和折叠卡片都不会发起模型请求。
|
||||
|
||||
## 目录
|
||||
|
||||
- [使用本包](#use-this-package)
|
||||
- [实现原理](#understand-the-implementation)
|
||||
- [延伸阅读](#further-exploration)
|
||||
- [模型体验](#model-experience)
|
||||
- [已知限制与后续工作](#known-limitations-and-deferred-work)
|
||||
- [开发备注](#dev-note)
|
||||
|
||||
-----
|
||||
|
||||
<a id="use-this-package"></a>
|
||||
## 使用本包
|
||||
|
||||
启用[个性化页面 Bundle](../creation-recommendations/README.zh.md),它会在本包旁插入对应的 [Host 服务](../action-cards/README.zh.md)。本浏览器组件没有配置字段。
|
||||
|
||||
### 注册卡片正文
|
||||
|
||||
种类的浏览器插件注入 `actionCards`,并在自己的 `ctx.effect` 中注册正文:`ctx.actionCards.register({ action, locale, Body })` 返回注销函数。框架为该动作的卡片渲染 `Body`,并传入:卡片、已记录或推导出的决定、卡片状态是否已到达、会话 id、框架渲染的标题与折叠说明 `summary`、框架的折叠组件 `Folded`、绑定到该卡片的 `act(verb, payload?)`,以及正文自己语言命名空间的翻译函数 `t`。正文把 `summary` 放进自己的布局,并负责自己的标题栏、控件、状态和底部操作。为同一动作注册第二个正文属于注册错误。
|
||||
|
||||
-----
|
||||
|
||||
<a id="understand-the-implementation"></a>
|
||||
## 实现原理
|
||||
|
||||
<details>
|
||||
<summary>实现细节——点击展开</summary>
|
||||
|
||||
一个 `conversation.chat.turnTail` 条目读取 `actionCards` 会话投影,在某一轮结束后(无论因何结束)展示该轮接受的卡片;未展示状态的卡片不显示,若同一轮有多张卡片,显示调用 id 最小的一张。框架把 `data-action-card` 设为调用 id,并以卡片标题命名所在区域。折叠时,宽字素(如汉字)按两个拉丁字母宽度计算,约 260 个单位后折叠;折叠不测量布局,也不改动完整文本。
|
||||
|
||||
一个以 `propose_action` 为键的 `tool.call.toolview` 条目,根据记录的调用参数和结果渲染过程行。插件在顶层提供正文注册表,然后挂载生成的 `actionCards` Remote,并在同一生命周期内注册词典和插槽条目。
|
||||
|
||||
| 源码 | 内容 |
|
||||
|---|---|
|
||||
| [`src/client/mount.ts`](src/client/mount.ts) | 注册表、Remote、词典与插槽条目 |
|
||||
| [`src/client/Card.tsx`](src/client/Card.tsx) | 轮次尾部、框架、折叠与兜底正文 |
|
||||
| [`src/client/ProposeRow.tsx`](src/client/ProposeRow.tsx) | 过程行 |
|
||||
| [`src/client/registry.ts`](src/client/registry.ts) | 正文注册表与正文属性 |
|
||||
| [`tests/`](tests/) | 位置、框架、兜底、过程行与注册测试 |
|
||||
|
||||
</details>
|
||||
|
||||
-----
|
||||
|
||||
<a id="further-exploration"></a>
|
||||
## 延伸阅读
|
||||
|
||||
- [操作卡片](../action-cards/README.zh.md) — 框架背后的工具、卡片状态与用户操作。
|
||||
- [个性化页面卡片](../client-ui-creation-recommendations/README.zh.md) — 随产品提供的卡片正文。
|
||||
- [插槽](../../client/ui-slots/README.zh.md) — 轮次尾部与工具行的注册。
|
||||
|
||||
<a id="model-experience"></a>
|
||||
## 模型体验
|
||||
|
||||
间接影响来自 Host 卡片服务:卡片操作以 Remote 调用到达该服务,由它负责记录在日志中的工具、决定和状态通知。
|
||||
|
||||
#### KV Cache 影响
|
||||
|
||||
渲染卡片和过程行不会改变任何模型请求。
|
||||
|
||||
## 已知限制与后续工作
|
||||
|
||||
<a id="known-limitations-and-deferred-work"></a>
|
||||
|
||||
- 动作没有注册正文的卡片只提供“暂不需要”,该实验的其他操作需要它的浏览器插件。
|
||||
- 轮次尾部每轮只显示一张卡片,与 Host 每轮一张卡片的规则一致。
|
||||
|
||||
<a id="dev-note"></a>
|
||||
### 开发备注
|
||||
|
||||
<details>
|
||||
<summary>维护者工作背景——点击展开</summary>
|
||||
|
||||
无。
|
||||
|
||||
</details>
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "Action card display",
|
||||
"description": "Show optional action cards below answers, with each experiment's own controls."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"meta": {
|
||||
"title": "アクションカード表示",
|
||||
"description": "回答の下に任意のアクションカードを表示します。カードの内容は各実験が提供します。"
|
||||
}
|
||||
}
|
||||
Loaded 100 of 193 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user