@iniesta8888/agent-live 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CODE_OF_CONDUCT.md +7 -0
- package/CONTRIBUTING.md +56 -0
- package/LICENSE +21 -0
- package/README.md +92 -0
- package/SECURITY.md +13 -0
- package/dist/adapter-sdk/index.d.ts +45 -0
- package/dist/adapter-sdk/index.d.ts.map +1 -0
- package/dist/adapter-sdk/index.js +106 -0
- package/dist/adapter-sdk/index.js.map +1 -0
- package/dist/content/compiler.d.ts +31 -0
- package/dist/content/compiler.d.ts.map +1 -0
- package/dist/content/compiler.js +218 -0
- package/dist/content/compiler.js.map +1 -0
- package/dist/content/graph-validator.d.ts +56 -0
- package/dist/content/graph-validator.d.ts.map +1 -0
- package/dist/content/graph-validator.js +226 -0
- package/dist/content/graph-validator.js.map +1 -0
- package/dist/content/library.d.ts +4 -0
- package/dist/content/library.d.ts.map +1 -0
- package/dist/content/library.js +45 -0
- package/dist/content/library.js.map +1 -0
- package/dist/content/registry.d.ts +34 -0
- package/dist/content/registry.d.ts.map +1 -0
- package/dist/content/registry.js +130 -0
- package/dist/content/registry.js.map +1 -0
- package/dist/content/runtime-content.d.ts +63 -0
- package/dist/content/runtime-content.d.ts.map +1 -0
- package/dist/content/runtime-content.js +78 -0
- package/dist/content/runtime-content.js.map +1 -0
- package/dist/content/schema.d.ts +142 -0
- package/dist/content/schema.d.ts.map +1 -0
- package/dist/content/schema.js +280 -0
- package/dist/content/schema.js.map +1 -0
- package/dist/content/validator.d.ts +35 -0
- package/dist/content/validator.d.ts.map +1 -0
- package/dist/content/validator.js +205 -0
- package/dist/content/validator.js.map +1 -0
- package/dist/core/agents.d.ts +56 -0
- package/dist/core/agents.d.ts.map +1 -0
- package/dist/core/agents.js +148 -0
- package/dist/core/agents.js.map +1 -0
- package/dist/core/limits.d.ts +15 -0
- package/dist/core/limits.d.ts.map +1 -0
- package/dist/core/limits.js +16 -0
- package/dist/core/limits.js.map +1 -0
- package/dist/core/mapping.d.ts +17 -0
- package/dist/core/mapping.d.ts.map +1 -0
- package/dist/core/mapping.js +94 -0
- package/dist/core/mapping.js.map +1 -0
- package/dist/core/protocol.d.ts +105 -0
- package/dist/core/protocol.d.ts.map +1 -0
- package/dist/core/protocol.js +6 -0
- package/dist/core/protocol.js.map +1 -0
- package/dist/core/state.d.ts +49 -0
- package/dist/core/state.d.ts.map +1 -0
- package/dist/core/state.js +216 -0
- package/dist/core/state.js.map +1 -0
- package/dist/creator/commands.d.ts +19 -0
- package/dist/creator/commands.d.ts.map +1 -0
- package/dist/creator/commands.js +44 -0
- package/dist/creator/commands.js.map +1 -0
- package/dist/creator/mode.d.ts +10 -0
- package/dist/creator/mode.d.ts.map +1 -0
- package/dist/creator/mode.js +23 -0
- package/dist/creator/mode.js.map +1 -0
- package/dist/creator/service.d.ts +199 -0
- package/dist/creator/service.d.ts.map +1 -0
- package/dist/creator/service.js +159 -0
- package/dist/creator/service.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/agent-live-runtime.d.ts +17 -0
- package/dist/runtime/agent-live-runtime.d.ts.map +1 -0
- package/dist/runtime/agent-live-runtime.js +50 -0
- package/dist/runtime/agent-live-runtime.js.map +1 -0
- package/dist/runtime/content-service.d.ts +75 -0
- package/dist/runtime/content-service.d.ts.map +1 -0
- package/dist/runtime/content-service.js +60 -0
- package/dist/runtime/content-service.js.map +1 -0
- package/dist/runtime/resource-guard.d.ts +17 -0
- package/dist/runtime/resource-guard.d.ts.map +1 -0
- package/dist/runtime/resource-guard.js +54 -0
- package/dist/runtime/resource-guard.js.map +1 -0
- package/dist/runtime/server.d.ts +39 -0
- package/dist/runtime/server.d.ts.map +1 -0
- package/dist/runtime/server.js +286 -0
- package/dist/runtime/server.js.map +1 -0
- package/dist/web/app.d.ts +1 -0
- package/dist/web/app.js +1317 -0
- package/dist/web/index.html +45 -0
- package/dist/web/office.js +350 -0
- package/dist/web/sprites.js +185 -0
- package/dist/web/style.css +288 -0
- package/dist/web/v2/bootstrap.js +276 -0
- package/dist/web/v2/content/README.md +17 -0
- package/dist/web/v2/content/agent-skins/studio-team.json +33 -0
- package/dist/web/v2/content/agent-skins/tiny-developers.json +33 -0
- package/dist/web/v2/content/atmospheres/default.json +13 -0
- package/dist/web/v2/content/atmospheres/rainy-night.json +37 -0
- package/dist/web/v2/content/catalog.json +14 -0
- package/dist/web/v2/content/component-library/activity-implementations.json +873 -0
- package/dist/web/v2/content/component-library/activity-recipes.json +25 -0
- package/dist/web/v2/content/component-library/agent-profile-templates.json +18 -0
- package/dist/web/v2/content/component-library/catalog.json +38 -0
- package/dist/web/v2/content/component-library/npc-templates.json +42 -0
- package/dist/web/v2/content/component-library/props.json +41 -0
- package/dist/web/v2/content/environments/local-office.json +31 -0
- package/dist/web/v2/content/environments/rainy-night.json +28 -0
- package/dist/web/v2/content/environments/static-office.json +27 -0
- package/dist/web/v2/content/layouts/boardroom-office.json +122 -0
- package/dist/web/v2/content/layouts/demo-office.json +88 -0
- package/dist/web/v2/content/layouts/lively-office.json +96 -0
- package/dist/web/v2/content/layouts/old-school-office.json +154 -0
- package/dist/web/v2/content/layouts/tech-open-office.json +132 -0
- package/dist/web/v2/content/life-activities/boardroom-routines.json +67 -0
- package/dist/web/v2/content/life-activities/none.json +10 -0
- package/dist/web/v2/content/life-activities/office-basics.json +39 -0
- package/dist/web/v2/content/life-activities/old-school-routines.json +74 -0
- package/dist/web/v2/content/life-activities/tech-office-routines.json +148 -0
- package/dist/web/v2/content/npcs/boardroom-staff.json +54 -0
- package/dist/web/v2/content/npcs/none.json +10 -0
- package/dist/web/v2/content/npcs/office-staff.json +25 -0
- package/dist/web/v2/content/npcs/old-school-staff.json +39 -0
- package/dist/web/v2/content/npcs/tech-office-staff.json +40 -0
- package/dist/web/v2/content/official-offices/boardroom-office.json +25 -0
- package/dist/web/v2/content/official-offices/old-school-office.json +25 -0
- package/dist/web/v2/content/official-offices/tech-open-office.json +25 -0
- package/dist/web/v2/content/presets/boardroom-office.json +21 -0
- package/dist/web/v2/content/presets/cozy-studio.json +19 -0
- package/dist/web/v2/content/presets/demo-office.json +19 -0
- package/dist/web/v2/content/presets/lively-office.json +19 -0
- package/dist/web/v2/content/presets/night-shift.json +19 -0
- package/dist/web/v2/content/presets/old-school-office.json +20 -0
- package/dist/web/v2/content/presets/refined-demo.json +20 -0
- package/dist/web/v2/content/presets/tech-open-office.json +21 -0
- package/dist/web/v2/content/props/default-office.json +23 -0
- package/dist/web/v2/content/props/extended-office.json +39 -0
- package/dist/web/v2/content/props/tech-office.json +28 -0
- package/dist/web/v2/content/styles/pixel-classic.json +160 -0
- package/dist/web/v2/content/styles/warm-studio.json +150 -0
- package/dist/web/v2/environment-runtime.d.ts +1 -0
- package/dist/web/v2/environment-runtime.js +138 -0
- package/dist/web/v2/graph-validator.d.ts +55 -0
- package/dist/web/v2/graph-validator.js +225 -0
- package/dist/web/v2/i18n.js +54 -0
- package/dist/web/v2/locales/en.json +209 -0
- package/dist/web/v2/locales/zh-CN.json +52 -0
- package/dist/web/v2/office-engine.d.ts +1 -0
- package/dist/web/v2/office-engine.js +145 -0
- package/dist/web/v2/office-renderer.d.ts +1 -0
- package/dist/web/v2/office-renderer.js +843 -0
- package/dist/web/v2/parity.html +10 -0
- package/dist/web/v2/parity.js +82 -0
- package/dist/web/v2/sprite-renderer.d.ts +1 -0
- package/dist/web/v2/sprite-renderer.js +242 -0
- package/dist/web/v2/static-content.js +48 -0
- package/dist/web/v2/style.css +140 -0
- package/dist/web/v2.html +68 -0
- package/docs/ADAPTER-DEVELOPMENT.md +328 -0
- package/docs/ADAPTER-SDK.md +109 -0
- package/docs/ARCHITECTURE.md +223 -0
- package/docs/COMPONENT-LIBRARY.md +212 -0
- package/docs/CUSTOMIZATION.md +163 -0
- package/docs/DEVELOPER.md +186 -0
- package/docs/DSH-ADAPTER-DESIGN.md +173 -0
- package/docs/OFFICE-THEMES.md +516 -0
- package/docs/PRESET-CONFIG.md +460 -0
- package/docs/RELEASE-CHECK.md +23 -0
- package/docs/TECHNICAL.md +515 -0
- package/docs/USING-CODEX.md +24 -0
- package/docs/USING-DSH.md +44 -0
- package/docs/USING-PI.md +50 -0
- package/docs/VISION.md +146 -0
- package/examples/adapter/local-office.mjs +52 -0
- package/package.json +89 -0
- package/skills/agent-live-adapter-builder/SKILL.md +30 -0
- package/skills/agent-live-adapter-builder/agents/openai.yaml +4 -0
- package/skills/agent-live-adapter-builder/references/investigation.md +9 -0
- package/skills/agent-live-adapter-builder/references/review.md +7 -0
- package/skills/agent-live-adapter-builder/scripts/create-adapter.mjs +26 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
# DeepSeek Harness Adapter 设计
|
|
2
|
+
|
|
3
|
+
> 状态:第一阶段已实现,锁定并验证 DeepSeek Harness `0.1.5-rc.1`。DSH 仍处于 Developer Preview,升级时必须重新验证公开类型和运行时合同。
|
|
4
|
+
|
|
5
|
+
## 1. 目标与决定
|
|
6
|
+
|
|
7
|
+
第一阶段把 Agent Live 作为 DSH 会话中的原生 `conversation.view` 发布。用户仍在 DSH 原有界面创建任务、输入消息、停止任务和处理审批;切换到 **Agent Live** View 后,查看当前 Session 的办公室。
|
|
8
|
+
|
|
9
|
+
本阶段采用 **Client-side Observer**:读取 DSH 已经送达 Web Client 的 Session / Conversation Snapshot,把变化直接转换成公共 `OfficeEvent`,再交给 Agent Live Core、Engine 和 Renderer。
|
|
10
|
+
|
|
11
|
+
明确不做:
|
|
12
|
+
|
|
13
|
+
- 不启动 Agent Live HTTP、SSE 或额外浏览器页面。
|
|
14
|
+
- 不实现第二套输入框、任务 Controller 或审批 UI。
|
|
15
|
+
- 不增加 `DshFact`、Bridge Host 或 DSH 专用公共协议。
|
|
16
|
+
- 不读取 DSH 私有数据库或日志,不修改官方 UI 源码。
|
|
17
|
+
- 不额外复制完整 Session 历史。
|
|
18
|
+
- 不修改 DSH 的 Host→Client 事件 allowlist。
|
|
19
|
+
|
|
20
|
+
原因是 `conversation.view` 已提供 Session 范围的标准数据入口;而当前 DSH 的 `ctx.remote.$on()` 只接收官方 assembly 选择的固定 Host 事件,第三方插件不能稳定添加任意下行事件。第一阶段绕过这一限制会引入 DSH 补丁或额外本地服务,与产品的轻量原则冲突。
|
|
21
|
+
|
|
22
|
+
## 2. 用户体验
|
|
23
|
+
|
|
24
|
+
```text
|
|
25
|
+
安装并启用 DSH Plugin Bundle
|
|
26
|
+
↓
|
|
27
|
+
打开任意 DSH Session
|
|
28
|
+
↓
|
|
29
|
+
Chat | Agent Live | 其他 View
|
|
30
|
+
↓
|
|
31
|
+
切换到 Agent Live
|
|
32
|
+
↓
|
|
33
|
+
当前 Session 的 Agent、任务、工具动作和回答映射为办公室活动
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
- Chat 和 Agent Live 是同一个 Session 的两种 View,不创建新 Session。
|
|
37
|
+
- 用户在 Chat 中继续操作;Agent Live 只观察,不截获输入。
|
|
38
|
+
- View 切走后 iframe 停止渲染和动画;Session 本身继续由 DSH 管理。
|
|
39
|
+
- Adapter 在客户端内为最近使用的 Session 保留有界 journal 与增量游标。再次打开 View 时,先重放这份会话内 journal,再继续消费 DSH 当前 Snapshot;不依赖旧 iframe 仍存活,也不把 journal 写进 DSH Session 日志。
|
|
40
|
+
- 第一阶段只展示当前 Session,不做跨 Session 总办公室。
|
|
41
|
+
|
|
42
|
+
## 3. 实际包内结构
|
|
43
|
+
|
|
44
|
+
对开发者而言它仍是一个 DSH Adapter Package,Host/Client 文件只是 DSH 官方构建方式要求的两个运行面,不是 Agent Live 新架构层。
|
|
45
|
+
|
|
46
|
+
```text
|
|
47
|
+
plugins/agent-live/dsh/
|
|
48
|
+
├── cordis.patch.yml DSH Bundle 注册
|
|
49
|
+
├── src/adapter.ts 标准化 Snapshot 的增量游标与 OfficeEvent 映射
|
|
50
|
+
├── src/index.ts Host 入口;注册受限 Creator 命令、Tool、Skill 与 Session Projection
|
|
51
|
+
├── src/client.tsx Snapshot 选择、conversation.view 和生命周期
|
|
52
|
+
├── src/frame-runtime.ts 复用公共 Office Engine / Renderer
|
|
53
|
+
├── src/frame.html View 内的隔离渲染文档
|
|
54
|
+
└── build.mjs DSH lazy-CJS 客户端 bundle
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
另有 DSH Bundle 清单与 `cordis.patch.yml`,负责把 Host/Client 两个入口装入 DSH。共享的 Agent Live Core、Engine、Renderer 和 Content 不复制进 Adapter 业务代码。
|
|
58
|
+
|
|
59
|
+
DSH 版本字段只在 `dsh/src/client.tsx` 中读取;共享映射器只接受本地的窄结构。升级 DSH 时只需调整这一兼容入口并回归 Adapter,不让 DSH 类型进入 Core。
|
|
60
|
+
|
|
61
|
+
## 4. 数据流
|
|
62
|
+
|
|
63
|
+
```mermaid
|
|
64
|
+
flowchart LR
|
|
65
|
+
H["DSH Host<br/>Agent Loop + Session Event Log"]
|
|
66
|
+
C["DSH Web Client Runtime<br/>Session / Conversation Snapshot"]
|
|
67
|
+
S["DSH Adapter Selectors<br/>官方字段兼容边界"]
|
|
68
|
+
A["DSH Adapter<br/>直接映射"]
|
|
69
|
+
O["OfficeEvent"]
|
|
70
|
+
E["Agent Live Core + Engine"]
|
|
71
|
+
V["conversation.view<br/>Renderer"]
|
|
72
|
+
|
|
73
|
+
H -->|DSH 官方连接与增量同步| C
|
|
74
|
+
C --> S --> A --> O --> E --> V
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
DSH Client Runtime 已负责历史窗口合并和实时更新。Adapter 不再订阅第二条来源重复生成事件。`adapter.ts` 的增量游标只解决 OfficeEvent 投影本身的问题,例如:
|
|
78
|
+
|
|
79
|
+
- 哪些 `seq` 已经映射。
|
|
80
|
+
- `tool/call` 与 `tool/result` 的 `callId` 关联。
|
|
81
|
+
- 哪些已完成消息已经展示。
|
|
82
|
+
- View 重建时先发 `snapshot`,再只消费新增内容。
|
|
83
|
+
|
|
84
|
+
这些都是 DSH Adapter 私有实现,不进入 Core。
|
|
85
|
+
|
|
86
|
+
## 5. 官方数据到 OfficeEvent 的映射
|
|
87
|
+
|
|
88
|
+
映射只接受 DSH 正式 Snapshot/Session Event 中存在的字段。具体 TypeScript 字段名在实现前以锁定版本的导出类型为准。
|
|
89
|
+
|
|
90
|
+
| DSH 公开 Client 数据 | 权威用途 | Agent Live 输出 | 规则 |
|
|
91
|
+
| --- | --- | --- | --- |
|
|
92
|
+
| `useSession(...running)` 与 Session ID | 会话建立、运行/空闲 | `snapshot`、`session`、`agent_state` | View 首次挂载先建立完整状态;空闲以 Session lifecycle 为准 |
|
|
93
|
+
| `useProjection("modelSelection")` | 当前/最近模型 | `session` | 使用 `next ?? lastUsed`,只显示 DSH 明确提供的字段 |
|
|
94
|
+
| `useConversation(...views.get("chat"))` 的 user message | 当前用户任务 | `task` | 用公开节点 identity 生成稳定 key;文本限长 |
|
|
95
|
+
| Chat `runningCalls` 与 tool result | 工具开始与结果 | `action`、`action_end` | 使用 `callId` 成对映射;短工具可在一次 Snapshot diff 中补齐开始和结束 |
|
|
96
|
+
| Chat assistant 完成节点 | 回答与用量 | `say`、`usage` | 完整消息落定后显示;不展示私有 reasoning |
|
|
97
|
+
| Chat turn-error 节点 | Turn 异常 | `agent_state:error` | 只根据公开错误事实判断 |
|
|
98
|
+
| `subagentCatalog` + Session catalog/summary | 子 Agent 身份、父子关系、活动状态 | `agent_join`、`delegate`、`agent_leave` | inactive 只代表结束;公开数据无结果时省略 `agent_leave.ok` |
|
|
99
|
+
|
|
100
|
+
### 权威来源原则
|
|
101
|
+
|
|
102
|
+
- Conversation 与 model projection 负责消息、工具、结果、模型和用量。
|
|
103
|
+
- Session lifecycle snapshot 负责“是否仍在运行”。
|
|
104
|
+
- 同一消息或工具调用必须用稳定 key/callId 去重。
|
|
105
|
+
- 不同时订阅 Host `session/event` 和 Client Snapshot 来生成同一 OfficeEvent。
|
|
106
|
+
- 未识别的扩展事件忽略并记录调试信息;DSH 的 SessionEventMap 可扩展,代码不能用穷尽断言导致崩溃。
|
|
107
|
+
|
|
108
|
+
## 6. Agent 与 Subagent
|
|
109
|
+
|
|
110
|
+
主 Agent 使用当前 Session 的稳定 identity,不使用昵称作为 ID。
|
|
111
|
+
|
|
112
|
+
锁定版本通过 `subagentCatalog` projection 与 Session catalog/summary 同时提供稳定子 Session ID、父 Session 归属和 `running/inactive` 活动状态,因此本实现会映射 Subagent:
|
|
113
|
+
|
|
114
|
+
1. 子 Agent 的稳定 Session/Agent ID。
|
|
115
|
+
2. 父 Agent 或 ownership/address 关系。
|
|
116
|
+
3. 可判断加入与结束的生命周期信息。当前公开 activity 不提供结束结果,因此不会猜测成功或失败。
|
|
117
|
+
|
|
118
|
+
缺少任意一项,就不产生对应 Subagent 事实,并在宿主支持说明中记录该限制;不根据名称、消息内容或工具文本猜测。多人容量、工位不足及视觉避让由公共 Core/Engine 处理,不写进 DSH Adapter。
|
|
119
|
+
|
|
120
|
+
## 7. 实际接入边界
|
|
121
|
+
|
|
122
|
+
DSH 第一阶段实现的是官方 `conversation.view` 中的实时观察与渲染。它消费宿主已经提供的 Conversation、Session、模型、用量和 Subagent projection;不重复实现 prompt、interrupt、模型选择或审批控制面,用户继续使用 DSH 官方 UI。
|
|
123
|
+
|
|
124
|
+
项目不再维护一份手写的能力布尔描述符。公共 SDK 中的控制能力只由实际实现的方法推导;Subagent、模型与 Token 则是能够可靠取得时映射的宿主事实。
|
|
125
|
+
|
|
126
|
+
## 8. 生命周期和资源
|
|
127
|
+
|
|
128
|
+
DSH 负责:
|
|
129
|
+
|
|
130
|
+
- 加载和卸载 Cordis Plugin。
|
|
131
|
+
- 管理 Host、Session、Web Client 连接和历史同步。
|
|
132
|
+
- 自动移除属于 Plugin fiber 的 Slot 注册与订阅。
|
|
133
|
+
|
|
134
|
+
DSH Adapter 负责:
|
|
135
|
+
|
|
136
|
+
- 按 DSH 官方方式注册/注销 `conversation.view`。
|
|
137
|
+
- 在首次访问一个 Session 时创建它的 Adapter cursor 与有界 journal;最多保留最近使用的 24 个 Session,每个 journal 最多 800 个 OfficeEvent。
|
|
138
|
+
- 在 View unmount 时停止该组件的 Snapshot 消费,并让 React 销毁 iframe、动画与渲染资源;会话级 cursor/journal 留在客户端内,供同一 Session 再次打开 View 时恢复,并按 LRU 上限淘汰。
|
|
139
|
+
|
|
140
|
+
Agent Live 负责:
|
|
141
|
+
|
|
142
|
+
- 清理 Engine 自己创建的动画帧、定时器、临时回放记录和渲染资源。
|
|
143
|
+
|
|
144
|
+
第一阶段没有 Agent Live 本地端口、SSE、子进程或临时文件,因此关闭 View 不需要杀掉 DSH Host,也不存在遗留 Agent Live 服务。Adapter 不登记宿主资源到 Agent Live ResourceGuard。
|
|
145
|
+
|
|
146
|
+
## 9. 回放与历史
|
|
147
|
+
|
|
148
|
+
DSH 的持久化 Session Event 是任务事实来源。重新打开 View 时,Adapter 从 DSH 已装载的历史窗口构建当前 Office Snapshot;需要更早内容时,应使用 DSH 正式的 history/paging 能力,而不是扫描文件。
|
|
149
|
+
|
|
150
|
+
“某某的一天”动画仍需要 Agent Live 的轻量表现时间线,因为 DSH 历史描述的是任务事实,不包含人物走路、等待设施、NPC 活动等办公室表现。但这份时间线只保存映射后的 OfficeEvent/表现时间戳,不复制完整 prompt、reasoning 或工具输出。
|
|
151
|
+
|
|
152
|
+
## 10. 实现顺序与验收门
|
|
153
|
+
|
|
154
|
+
每一步完成后先通过本步和此前全部回归,再进入下一步:
|
|
155
|
+
|
|
156
|
+
1. **Bundle 骨架**:插件可安装、启用、卸载;无 Agent Live 本地端口或进程。
|
|
157
|
+
2. **原生 View(完成)**:`conversation.view` 注册 Agent Live,不创建新 Session。
|
|
158
|
+
3. **Snapshot 基线(完成)**:可重建主 Agent、模型、Turn 和空闲/运行状态。
|
|
159
|
+
4. **单 Turn 映射(完成)**:用户消息、完成回答、usage 和异常状态使用稳定 `seq` 去重。
|
|
160
|
+
5. **工具映射(完成)**:`tool/call`/`tool/result` 由同一 `callId` 成对显示,也处理一次渲染间完成的短工具。
|
|
161
|
+
6. **关闭与恢复(完成)**:View 卸载销毁隔离文档与动画;会话级 journal/cursor 有界保留,重开时先恢复已有表现时间线,再与当前 Snapshot 增量同步。
|
|
162
|
+
7. **Subagent(完成)**:稳定子 Session ID、父子关系和活动状态来自官方 projections/catalog。
|
|
163
|
+
8. **静态性能约束(完成)**:无额外服务和主动轮询;Renderer 仅随 View 存活,Snapshot 扫描窗口、会话 store、journal、消息与参数均有上限。真实宿主中的 CPU、内存和长时间切换仍需按发布检查实测,不能由静态约束代替。
|
|
164
|
+
|
|
165
|
+
## 11. 暂缓的第二阶段
|
|
166
|
+
|
|
167
|
+
只有 DSH 提供稳定的第三方 Host→Client 事件注册能力,或我们决定维护自己的 DSH Client assembly 时,才考虑 Host-side Observer。届时仍遵循:
|
|
168
|
+
|
|
169
|
+
```text
|
|
170
|
+
DSH 官方 Host 事件 → DSH Adapter → OfficeEvent
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
不能增加另一套共享 Fact 层。若增加 Controller,也只是在 Adapter Package 内调用 DSH 正式 Remote API,并复用相同 Core/Engine;它不改变第一阶段 View Observer 的数据合同。
|