berry-agent-sdk 0.1.0-alpha.2
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/README.md +78 -0
- package/dist/packages/berry-agent-sdk/src/client.d.ts +6 -0
- package/dist/packages/berry-agent-sdk/src/client.js +59 -0
- package/dist/packages/berry-agent-sdk/src/client.js.map +1 -0
- package/dist/packages/berry-agent-sdk/src/http.d.ts +24 -0
- package/dist/packages/berry-agent-sdk/src/http.js +232 -0
- package/dist/packages/berry-agent-sdk/src/http.js.map +1 -0
- package/dist/packages/berry-agent-sdk/src/index.d.ts +25 -0
- package/dist/packages/berry-agent-sdk/src/index.js +22 -0
- package/dist/packages/berry-agent-sdk/src/index.js.map +1 -0
- package/dist/packages/berry-agent-sdk/src/stdio.d.ts +23 -0
- package/dist/packages/berry-agent-sdk/src/stdio.js +238 -0
- package/dist/packages/berry-agent-sdk/src/stdio.js.map +1 -0
- package/dist/packages/berry-agent-sdk/src/types.d.ts +117 -0
- package/dist/packages/berry-agent-sdk/src/types.js +19 -0
- package/dist/packages/berry-agent-sdk/src/types.js.map +1 -0
- package/dist/src/agent/events.d.ts +11 -0
- package/dist/src/agent/events.js +2 -0
- package/dist/src/agent/events.js.map +1 -0
- package/dist/src/agent/index.d.ts +13 -0
- package/dist/src/agent/index.js +3 -0
- package/dist/src/agent/index.js.map +1 -0
- package/dist/src/agent/loop.d.ts +19 -0
- package/dist/src/agent/loop.js +140 -0
- package/dist/src/agent/loop.js.map +1 -0
- package/dist/src/agent/queue.d.ts +105 -0
- package/dist/src/agent/queue.js +120 -0
- package/dist/src/agent/queue.js.map +1 -0
- package/dist/src/agent/stream.d.ts +21 -0
- package/dist/src/agent/stream.js +80 -0
- package/dist/src/agent/stream.js.map +1 -0
- package/dist/src/agent/tools-batch.d.ts +49 -0
- package/dist/src/agent/tools-batch.js +222 -0
- package/dist/src/agent/tools-batch.js.map +1 -0
- package/dist/src/agent/types.d.ts +104 -0
- package/dist/src/agent/types.js +9 -0
- package/dist/src/agent/types.js.map +1 -0
- package/dist/src/channels/ask-queue.d.ts +44 -0
- package/dist/src/channels/ask-queue.js +83 -0
- package/dist/src/channels/ask-queue.js.map +1 -0
- package/dist/src/channels/commands.d.ts +56 -0
- package/dist/src/channels/commands.js +130 -0
- package/dist/src/channels/commands.js.map +1 -0
- package/dist/src/channels/engine/cell.d.ts +55 -0
- package/dist/src/channels/engine/cell.js +144 -0
- package/dist/src/channels/engine/cell.js.map +1 -0
- package/dist/src/channels/engine/diff.d.ts +3 -0
- package/dist/src/channels/engine/diff.js +144 -0
- package/dist/src/channels/engine/diff.js.map +1 -0
- package/dist/src/channels/engine/engine.d.ts +151 -0
- package/dist/src/channels/engine/engine.js +417 -0
- package/dist/src/channels/engine/engine.js.map +1 -0
- package/dist/src/channels/engine/index.d.ts +22 -0
- package/dist/src/channels/engine/index.js +9 -0
- package/dist/src/channels/engine/index.js.map +1 -0
- package/dist/src/channels/engine/input-keys.d.ts +39 -0
- package/dist/src/channels/engine/input-keys.js +87 -0
- package/dist/src/channels/engine/input-keys.js.map +1 -0
- package/dist/src/channels/engine/input.d.ts +174 -0
- package/dist/src/channels/engine/input.js +597 -0
- package/dist/src/channels/engine/input.js.map +1 -0
- package/dist/src/channels/engine/memory-io.d.ts +46 -0
- package/dist/src/channels/engine/memory-io.js +72 -0
- package/dist/src/channels/engine/memory-io.js.map +1 -0
- package/dist/src/channels/engine/process-io.d.ts +23 -0
- package/dist/src/channels/engine/process-io.js +39 -0
- package/dist/src/channels/engine/process-io.js.map +1 -0
- package/dist/src/channels/engine/types.d.ts +202 -0
- package/dist/src/channels/engine/types.js +18 -0
- package/dist/src/channels/engine/types.js.map +1 -0
- package/dist/src/channels/engine/width.d.ts +23 -0
- package/dist/src/channels/engine/width.js +123 -0
- package/dist/src/channels/engine/width.js.map +1 -0
- package/dist/src/channels/index.d.ts +25 -0
- package/dist/src/channels/index.js +16 -0
- package/dist/src/channels/index.js.map +1 -0
- package/dist/src/channels/registry.d.ts +33 -0
- package/dist/src/channels/registry.js +57 -0
- package/dist/src/channels/registry.js.map +1 -0
- package/dist/src/channels/sdk/admit.d.ts +32 -0
- package/dist/src/channels/sdk/admit.js +30 -0
- package/dist/src/channels/sdk/admit.js.map +1 -0
- package/dist/src/channels/sdk/backend.d.ts +19 -0
- package/dist/src/channels/sdk/backend.js +103 -0
- package/dist/src/channels/sdk/backend.js.map +1 -0
- package/dist/src/channels/sdk/cursor.d.ts +51 -0
- package/dist/src/channels/sdk/cursor.js +57 -0
- package/dist/src/channels/sdk/cursor.js.map +1 -0
- package/dist/src/channels/sdk/index.d.ts +20 -0
- package/dist/src/channels/sdk/index.js +21 -0
- package/dist/src/channels/sdk/index.js.map +1 -0
- package/dist/src/channels/sdk/jsonl.d.ts +47 -0
- package/dist/src/channels/sdk/jsonl.js +201 -0
- package/dist/src/channels/sdk/jsonl.js.map +1 -0
- package/dist/src/channels/sdk/protocol.d.ts +297 -0
- package/dist/src/channels/sdk/protocol.js +25 -0
- package/dist/src/channels/sdk/protocol.js.map +1 -0
- package/dist/src/channels/sdk/schema.d.ts +12 -0
- package/dist/src/channels/sdk/schema.js +92 -0
- package/dist/src/channels/sdk/schema.js.map +1 -0
- package/dist/src/channels/sdk/wire-core.d.ts +199 -0
- package/dist/src/channels/sdk/wire-core.js +447 -0
- package/dist/src/channels/sdk/wire-core.js.map +1 -0
- package/dist/src/channels/service.d.ts +66 -0
- package/dist/src/channels/service.js +170 -0
- package/dist/src/channels/service.js.map +1 -0
- package/dist/src/channels/tui/autocomplete/autocomplete.d.ts +32 -0
- package/dist/src/channels/tui/autocomplete/autocomplete.js +43 -0
- package/dist/src/channels/tui/autocomplete/autocomplete.js.map +1 -0
- package/dist/src/channels/tui/autocomplete/file-mentions.d.ts +18 -0
- package/dist/src/channels/tui/autocomplete/file-mentions.js +107 -0
- package/dist/src/channels/tui/autocomplete/file-mentions.js.map +1 -0
- package/dist/src/channels/tui/autocomplete/popup.d.ts +47 -0
- package/dist/src/channels/tui/autocomplete/popup.js +149 -0
- package/dist/src/channels/tui/autocomplete/popup.js.map +1 -0
- package/dist/src/channels/tui/autocomplete/provider.d.ts +38 -0
- package/dist/src/channels/tui/autocomplete/provider.js +8 -0
- package/dist/src/channels/tui/autocomplete/provider.js.map +1 -0
- package/dist/src/channels/tui/autocomplete/token.d.ts +22 -0
- package/dist/src/channels/tui/autocomplete/token.js +69 -0
- package/dist/src/channels/tui/autocomplete/token.js.map +1 -0
- package/dist/src/channels/tui/backend/ansi-rows.d.ts +86 -0
- package/dist/src/channels/tui/backend/ansi-rows.js +209 -0
- package/dist/src/channels/tui/backend/ansi-rows.js.map +1 -0
- package/dist/src/channels/tui/backend/main-screen.d.ts +90 -0
- package/dist/src/channels/tui/backend/main-screen.js +208 -0
- package/dist/src/channels/tui/backend/main-screen.js.map +1 -0
- package/dist/src/channels/tui/backend/osc.d.ts +79 -0
- package/dist/src/channels/tui/backend/osc.js +92 -0
- package/dist/src/channels/tui/backend/osc.js.map +1 -0
- package/dist/src/channels/tui/backend/transcript.d.ts +98 -0
- package/dist/src/channels/tui/backend/transcript.js +231 -0
- package/dist/src/channels/tui/backend/transcript.js.map +1 -0
- package/dist/src/channels/tui/backend/tui-backend.d.ts +324 -0
- package/dist/src/channels/tui/backend/tui-backend.js +916 -0
- package/dist/src/channels/tui/backend/tui-backend.js.map +1 -0
- package/dist/src/channels/tui/editor/editor-model.d.ts +141 -0
- package/dist/src/channels/tui/editor/editor-model.js +544 -0
- package/dist/src/channels/tui/editor/editor-model.js.map +1 -0
- package/dist/src/channels/tui/editor/editor-view.d.ts +36 -0
- package/dist/src/channels/tui/editor/editor-view.js +141 -0
- package/dist/src/channels/tui/editor/editor-view.js.map +1 -0
- package/dist/src/channels/tui/editor/editor.d.ts +50 -0
- package/dist/src/channels/tui/editor/editor.js +276 -0
- package/dist/src/channels/tui/editor/editor.js.map +1 -0
- package/dist/src/channels/tui/editor/undo-stack.d.ts +22 -0
- package/dist/src/channels/tui/editor/undo-stack.js +36 -0
- package/dist/src/channels/tui/editor/undo-stack.js.map +1 -0
- package/dist/src/channels/tui/editor/visual-lines.d.ts +39 -0
- package/dist/src/channels/tui/editor/visual-lines.js +127 -0
- package/dist/src/channels/tui/editor/visual-lines.js.map +1 -0
- package/dist/src/channels/tui/editor/word-nav.d.ts +10 -0
- package/dist/src/channels/tui/editor/word-nav.js +107 -0
- package/dist/src/channels/tui/editor/word-nav.js.map +1 -0
- package/dist/src/channels/tui/history/history-viewer.d.ts +133 -0
- package/dist/src/channels/tui/history/history-viewer.js +404 -0
- package/dist/src/channels/tui/history/history-viewer.js.map +1 -0
- package/dist/src/channels/tui/index.d.ts +16 -0
- package/dist/src/channels/tui/index.js +4 -0
- package/dist/src/channels/tui/index.js.map +1 -0
- package/dist/src/channels/tui/markdown/blocks.d.ts +42 -0
- package/dist/src/channels/tui/markdown/blocks.js +112 -0
- package/dist/src/channels/tui/markdown/blocks.js.map +1 -0
- package/dist/src/channels/tui/markdown/inline.d.ts +24 -0
- package/dist/src/channels/tui/markdown/inline.js +76 -0
- package/dist/src/channels/tui/markdown/inline.js.map +1 -0
- package/dist/src/channels/tui/markdown/markdown.d.ts +34 -0
- package/dist/src/channels/tui/markdown/markdown.js +183 -0
- package/dist/src/channels/tui/markdown/markdown.js.map +1 -0
- package/dist/src/channels/tui/memory/memory-viewer.d.ts +235 -0
- package/dist/src/channels/tui/memory/memory-viewer.js +541 -0
- package/dist/src/channels/tui/memory/memory-viewer.js.map +1 -0
- package/dist/src/channels/tui/overlay/alt-screen.d.ts +79 -0
- package/dist/src/channels/tui/overlay/alt-screen.js +106 -0
- package/dist/src/channels/tui/overlay/alt-screen.js.map +1 -0
- package/dist/src/channels/tui/overlay/overlay.d.ts +53 -0
- package/dist/src/channels/tui/overlay/overlay.js +58 -0
- package/dist/src/channels/tui/overlay/overlay.js.map +1 -0
- package/dist/src/channels/tui/overlay/select-confirm.d.ts +73 -0
- package/dist/src/channels/tui/overlay/select-confirm.js +157 -0
- package/dist/src/channels/tui/overlay/select-confirm.js.map +1 -0
- package/dist/src/channels/tui/panels/todo-panel.d.ts +24 -0
- package/dist/src/channels/tui/panels/todo-panel.js +55 -0
- package/dist/src/channels/tui/panels/todo-panel.js.map +1 -0
- package/dist/src/channels/tui/panels/tool-progress-panel.d.ts +37 -0
- package/dist/src/channels/tui/panels/tool-progress-panel.js +94 -0
- package/dist/src/channels/tui/panels/tool-progress-panel.js.map +1 -0
- package/dist/src/channels/tui/scroll/scroll-view.d.ts +96 -0
- package/dist/src/channels/tui/scroll/scroll-view.js +255 -0
- package/dist/src/channels/tui/scroll/scroll-view.js.map +1 -0
- package/dist/src/channels/tui/status/status-line.d.ts +46 -0
- package/dist/src/channels/tui/status/status-line.js +77 -0
- package/dist/src/channels/tui/status/status-line.js.map +1 -0
- package/dist/src/channels/tui/theme.d.ts +27 -0
- package/dist/src/channels/tui/theme.js +42 -0
- package/dist/src/channels/tui/theme.js.map +1 -0
- package/dist/src/channels/types.d.ts +84 -0
- package/dist/src/channels/types.js +12 -0
- package/dist/src/channels/types.js.map +1 -0
- package/dist/src/channels/ui-core.d.ts +80 -0
- package/dist/src/channels/ui-core.js +210 -0
- package/dist/src/channels/ui-core.js.map +1 -0
- package/dist/src/context/codes.d.ts +1 -0
- package/dist/src/context/codes.js +41 -0
- package/dist/src/context/codes.js.map +1 -0
- package/dist/src/context/events.d.ts +62 -0
- package/dist/src/context/events.js +161 -0
- package/dist/src/context/events.js.map +1 -0
- package/dist/src/context/index.d.ts +16 -0
- package/dist/src/context/index.js +14 -0
- package/dist/src/context/index.js.map +1 -0
- package/dist/src/context/logger.d.ts +67 -0
- package/dist/src/context/logger.js +137 -0
- package/dist/src/context/logger.js.map +1 -0
- package/dist/src/context/scope.d.ts +78 -0
- package/dist/src/context/scope.js +183 -0
- package/dist/src/context/scope.js.map +1 -0
- package/dist/src/context/workspace.d.ts +8 -0
- package/dist/src/context/workspace.js +105 -0
- package/dist/src/context/workspace.js.map +1 -0
- package/dist/src/contracts/agent-events.d.ts +73 -0
- package/dist/src/contracts/agent-events.js +17 -0
- package/dist/src/contracts/agent-events.js.map +1 -0
- package/dist/src/contracts/api.d.ts +249 -0
- package/dist/src/contracts/api.js +334 -0
- package/dist/src/contracts/api.js.map +1 -0
- package/dist/src/contracts/approval.d.ts +37 -0
- package/dist/src/contracts/approval.js +10 -0
- package/dist/src/contracts/approval.js.map +1 -0
- package/dist/src/contracts/env-ref.d.ts +41 -0
- package/dist/src/contracts/env-ref.js +33 -0
- package/dist/src/contracts/env-ref.js.map +1 -0
- package/dist/src/contracts/errors.d.ts +56 -0
- package/dist/src/contracts/errors.js +267 -0
- package/dist/src/contracts/errors.js.map +1 -0
- package/dist/src/contracts/events.d.ts +70 -0
- package/dist/src/contracts/events.js +330 -0
- package/dist/src/contracts/events.js.map +1 -0
- package/dist/src/contracts/index.d.ts +32 -0
- package/dist/src/contracts/index.js +27 -0
- package/dist/src/contracts/index.js.map +1 -0
- package/dist/src/contracts/llm.d.ts +278 -0
- package/dist/src/contracts/llm.js +13 -0
- package/dist/src/contracts/llm.js.map +1 -0
- package/dist/src/contracts/messages.d.ts +63 -0
- package/dist/src/contracts/messages.js +66 -0
- package/dist/src/contracts/messages.js.map +1 -0
- package/dist/src/contracts/redact.d.ts +46 -0
- package/dist/src/contracts/redact.js +224 -0
- package/dist/src/contracts/redact.js.map +1 -0
- package/dist/src/contracts/tools.d.ts +198 -0
- package/dist/src/contracts/tools.js +35 -0
- package/dist/src/contracts/tools.js.map +1 -0
- package/dist/src/contracts/types.d.ts +304 -0
- package/dist/src/contracts/types.js +51 -0
- package/dist/src/contracts/types.js.map +1 -0
- package/dist/src/contracts/ui.d.ts +122 -0
- package/dist/src/contracts/ui.js +16 -0
- package/dist/src/contracts/ui.js.map +1 -0
- package/dist/src/sdk/types.d.ts +144 -0
- package/dist/src/sdk/types.js +33 -0
- package/dist/src/sdk/types.js.map +1 -0
- package/package.json +29 -0
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 会话事件信封与归因词汇类型(05 篇 §1.1 信封定稿 + §3.1 source 闭集定稿)。
|
|
3
|
+
*
|
|
4
|
+
* 本文件是 SessionEvent 形态的唯一权威——02 篇词汇表钉、05 篇 §1.1 重述,
|
|
5
|
+
* 此处逐字段转录;LLM 消息/流/角色与工具/插件/子代理/Job 类型随对应模块
|
|
6
|
+
* 落码批按 pi-ai 实形定义(contract-first:纵切批内先契约后实现)。
|
|
7
|
+
*/
|
|
8
|
+
import type { Usage } from './llm.js';
|
|
9
|
+
/**
|
|
10
|
+
* 表面遮蔽指令(改历史的唯一合法形态——追加 replace 指令事件遮蔽旧区间,
|
|
11
|
+
* 原文保留可审计)。区间 [start, end] 为被遮蔽事件的 seq 闭区间。
|
|
12
|
+
*/
|
|
13
|
+
export interface SurfaceOp {
|
|
14
|
+
/** 指令形态——v1 唯一值 'replace'(词汇预留扩展) */
|
|
15
|
+
op: 'replace';
|
|
16
|
+
/** 被遮蔽区间起始 seq(含) */
|
|
17
|
+
start: number;
|
|
18
|
+
/** 被遮蔽区间结束 seq(含) */
|
|
19
|
+
end: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 会话事件信封:日志唯一条目形态(append-only,写入即冻结)。
|
|
23
|
+
*/
|
|
24
|
+
export interface SessionEvent<T = unknown> {
|
|
25
|
+
/** 事件类型词汇(核心清单 events.ts + 插件显式注册扩展) */
|
|
26
|
+
type: string;
|
|
27
|
+
/** = 写入时 log.length,强制连续、0 起(只在尾部追加结构保证,无独立分配器) */
|
|
28
|
+
seq: number;
|
|
29
|
+
/** 毫秒时间戳;合成事件复用最后真实事件的 time(确定性——金样回放友好) */
|
|
30
|
+
time: number;
|
|
31
|
+
/** 已冻结的 JSON 快照(写入时单遍校验 + deepFreeze——从冻结快照读 = 免拷贝投影) */
|
|
32
|
+
data: T;
|
|
33
|
+
/** true = 读侧可以不认识此类型(向前兼容);缺省 = 必须认识 */
|
|
34
|
+
ignorable?: boolean;
|
|
35
|
+
/** 遮蔽指令——仅改历史事件携带(§2 surfaceOp 协议) */
|
|
36
|
+
surfaceOp?: SurfaceOp;
|
|
37
|
+
/** 遮蔽溯源:被遮蔽节点 + 依据事件的完整 seq 列表 */
|
|
38
|
+
sourceEventSeqs?: number[];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* user/message 的 source 归因词汇闭集(05 §3.1 表全列):
|
|
42
|
+
* 六字面量 ∪ 三前缀模板串。TS 模板字面量类型即闭集执法——已知前缀的
|
|
43
|
+
* 任意后缀(`plugin:未来插件`)类型合法,语义按前缀行展开。
|
|
44
|
+
*/
|
|
45
|
+
export type EventSource = 'user' | `channel:${string}` | 'schedule' | 'subagent-settled' | 'subagent-approval-pending' | 'budget-extended' | 'compaction' | `plugin:${string}` | `session:${string}`;
|
|
46
|
+
/** source 归一化种类(前缀型归并到 kind;字面量一一对应) */
|
|
47
|
+
export type EventSourceKind = 'user' | 'channel' | 'schedule' | 'subagent-settled' | 'subagent-approval-pending' | 'budget-extended' | 'compaction' | 'plugin' | 'session';
|
|
48
|
+
/** parseEventSource 结果:归一化种类 + 原值 + 投影位判别 */
|
|
49
|
+
export interface ParsedEventSource {
|
|
50
|
+
/** 归一化种类(未知字面量归 'user'——旧日志向前兼容按 user 同视) */
|
|
51
|
+
kind: EventSourceKind;
|
|
52
|
+
/** 原始字符串(审计保真) */
|
|
53
|
+
raw: string;
|
|
54
|
+
/**
|
|
55
|
+
* 投影是否以用户话语位展开(05 §3.1「投影同视 user」判据):
|
|
56
|
+
* user/channel/schedule/subagent-settled = true(都是输入位,仅审计可辨入口);
|
|
57
|
+
* compaction/plugin/session = false(摘要载体、受控注入与跨会话操控注入
|
|
58
|
+
* 不视为用户话语——渲染与记忆提取归因区分显示)。
|
|
59
|
+
*/
|
|
60
|
+
treatedAsUser: boolean;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* 解析 source 归因字符串(闭集执法的读侧判据,05 §3.1):
|
|
64
|
+
* - 已知前缀的未知后缀(如 'plugin:未来插件')按前缀行语义展开;
|
|
65
|
+
* - 未知字面量(旧日志向前兼容)按 user 同视;
|
|
66
|
+
* - append 侧新值必须先扩闭集(类型 + 本函数)——写入纪律归 session 落码批。
|
|
67
|
+
*/
|
|
68
|
+
export declare function parseEventSource(source: string): ParsedEventSource;
|
|
69
|
+
/**
|
|
70
|
+
* turn/end 的 reason 闭集(05 §1.1 表:completed / aborted / blocked / error /
|
|
71
|
+
* max-tokens / interrupted,可扩展)。`(string & {})` 保留字面量自动补全的
|
|
72
|
+
* 同时不拒扩展值——新增终态值属词汇演进,须先扩 05 篇表格。
|
|
73
|
+
*/
|
|
74
|
+
export type TurnEndReason = 'completed' | 'aborted' | 'blocked' | 'error' | 'max-tokens' | 'interrupted' | (string & {});
|
|
75
|
+
/**
|
|
76
|
+
* 会话血缘 origin 闭集(05 §5.1):'conversation'(普通对话)/ 'delegation'
|
|
77
|
+
* (委派子会话)/ 'import'(外部导入)/ 'fork'(显式 fork)/ 'trigger'(触发器
|
|
78
|
+
* starter 起的无头会话——首 turn 非人触,2026-09-07 触发器面 C 批落码扩词;
|
|
79
|
+
* 05 §9 sessions.origin 与 03 §2.4 session_start 载荷三处闭集同笔)。无插件
|
|
80
|
+
* 域——会话直归 agent(05 §0 会话归属模型)。
|
|
81
|
+
*/
|
|
82
|
+
export type SessionOrigin = 'conversation' | 'delegation' | 'import' | 'fork' | 'trigger';
|
|
83
|
+
/** 血缘三元组(fork 动作的分层返回外层,05 §5.2;不返回幻影 id) */
|
|
84
|
+
export interface SessionLineage {
|
|
85
|
+
/** 源会话 id(根会话 = undefined) */
|
|
86
|
+
readonly parentId: string | undefined;
|
|
87
|
+
/** 种子前缀长度(首条新 append 事件恰落此位,05 §5.2) */
|
|
88
|
+
readonly seedLength: number;
|
|
89
|
+
/** 血缘形态 */
|
|
90
|
+
readonly origin: SessionOrigin;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 重试进行态只读小面(04 §3.3 注记 seam——批 13a 落码位):conversation 驱动
|
|
94
|
+
* 重试循环的只读探针,SDK 线协议心跳载荷是该 seam 的**唯一线面出口**
|
|
95
|
+
* (03 §10.6 线协议②:`retry <attempt>/<next>` 不可从事件流推导——活体层
|
|
96
|
+
* 「重试续入零新事件型」维持不破;非事件型、不进 durable)。
|
|
97
|
+
*
|
|
98
|
+
* 归位 contracts:producer(conversation)与 consumer(channels SDK 通道
|
|
99
|
+
* 后端)边表互不可达(02 §4.1),结构共享零 import 边——ApprovalAskRequest
|
|
100
|
+
* 归位同款先例(批 11b)。
|
|
101
|
+
*/
|
|
102
|
+
export interface RetryProbe {
|
|
103
|
+
/** 当前重试序(1 起——attempt 计数生命周期 = 单次 runTurns 调用) */
|
|
104
|
+
readonly attempt: number;
|
|
105
|
+
/** 名额上限(RetryPolicy.maxRetries 面——transient/overflow 各自分账) */
|
|
106
|
+
readonly maxAttempts: number;
|
|
107
|
+
/** 下次续入时间戳(epoch ms);null = 不在退避等待(重试已续入/取消/耗尽) */
|
|
108
|
+
readonly nextAt: number | null;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* 委派深度帽(04 §10 委派边界③):根会话委派 = 深度 1;子代理再委派逐层 +1;
|
|
112
|
+
* 超帽 3 拒(SUBAGENT_DEPTH_EXCEEDED——防自嵌套爆栈)。
|
|
113
|
+
*/
|
|
114
|
+
export declare const SUBAGENT_DEPTH_MAX = 3;
|
|
115
|
+
/**
|
|
116
|
+
* SubagentProvider 能力协商面(04 §10——五布尔):注册方声明,消费方
|
|
117
|
+
* (委派机器/呈现面)据以决定可用形态(如 background=false 的 provider
|
|
118
|
+
* 不受理后台收场)。in-process 真工厂五项恒真(独立装配全套)。
|
|
119
|
+
*/
|
|
120
|
+
export interface SubagentCapabilities {
|
|
121
|
+
/** 子代理有自己的工具面(非纯文本模型) */
|
|
122
|
+
readonly tools: boolean;
|
|
123
|
+
/** 支持流式过程可见(父可观察中间输出) */
|
|
124
|
+
readonly streaming: boolean;
|
|
125
|
+
/** 支持协作取消(stop → stopping → killed) */
|
|
126
|
+
readonly cancel: boolean;
|
|
127
|
+
/** 支持后台收场(Job 注册表托管;one-shot-only provider 恒 false) */
|
|
128
|
+
readonly background: boolean;
|
|
129
|
+
/**
|
|
130
|
+
* 支持结构化输出(SubagentResult.structured 面):语义 = 「结果携宿主铸造
|
|
131
|
+
* 结构账可依赖」——in-process 真 = 工厂结算位机器账(04 §10 定形段),
|
|
132
|
+
* 第三方 true = 自有形(契约位宽形不锁字段表)。
|
|
133
|
+
*/
|
|
134
|
+
readonly structuredOutput: boolean;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* 委派请求(04 §10:请求含 prompt、工具白名单、模型覆盖——其余为机器
|
|
138
|
+
* 注入位,模型侧工具 schema 不暴露)。
|
|
139
|
+
*/
|
|
140
|
+
export interface SubagentRequest {
|
|
141
|
+
/** 委派目标提示(子代理的唯一任务输入) */
|
|
142
|
+
readonly prompt: string;
|
|
143
|
+
/** 工具白名单(与 def 的 tools 交集执法——子代理可用面 ⊆ 交集) */
|
|
144
|
+
readonly tools?: readonly string[];
|
|
145
|
+
/** 模型覆盖(缺省回落宿主模型) */
|
|
146
|
+
readonly model?: string;
|
|
147
|
+
/** 子代理系统提示(声明式子代理正文直传;通用 agent 工具不设) */
|
|
148
|
+
readonly systemPrompt?: string;
|
|
149
|
+
/** 诊断名(Job 名与通知文案的显示位;缺省机器派生) */
|
|
150
|
+
readonly name?: string;
|
|
151
|
+
/** 机器注入位——父会话 id(background 结算通知路由) */
|
|
152
|
+
readonly parentSessionId?: string;
|
|
153
|
+
/** 机器注入位——收场形态(one-shot 缺省 / background 托管) */
|
|
154
|
+
readonly background?: boolean;
|
|
155
|
+
/** 机器注入位——委派深度(根 = 1;超帽拒——模型不可直设) */
|
|
156
|
+
readonly depth?: number;
|
|
157
|
+
/**
|
|
158
|
+
* 机器注入位——审批挂起通知闭包(in-process 子栈审批闸的父路由):
|
|
159
|
+
* background 形注入(one-shot 不注入——挂着等待即知情);实现方执法
|
|
160
|
+
* 恰一条幂等(driver dedupeKey 面)。
|
|
161
|
+
*/
|
|
162
|
+
readonly notifyApproval?: (info: {
|
|
163
|
+
approvalId: string;
|
|
164
|
+
toolName: string;
|
|
165
|
+
reason?: string;
|
|
166
|
+
}) => Promise<unknown>;
|
|
167
|
+
/**
|
|
168
|
+
* 机器注入位——协作停止观察面(background 形注入):JobHandle.stop()
|
|
169
|
+
* 置 stopping 后本闭包变真;in-process 工厂据此桥子栈中止(abort 子 run)。
|
|
170
|
+
* 只读观察非信号——轮询/桥接形态由工厂自选。
|
|
171
|
+
*/
|
|
172
|
+
readonly stopRequested?: () => boolean;
|
|
173
|
+
/**
|
|
174
|
+
* 机器注入位——技能正文永久注入清单(06 §11.6 skills 键 spawn 永久注入模):
|
|
175
|
+
* 技能名数组(形状三验在工厂 spawn 时统一复验——声明式 def 填充缺省/程序化
|
|
176
|
+
* def 镜像/直呼三方同点执法);模型侧工具 schema 不暴露。
|
|
177
|
+
*/
|
|
178
|
+
readonly skills?: readonly string[];
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* 委派结算(04 §10:子代理是黑盒——结果不重试,立即结算给父)。
|
|
182
|
+
*/
|
|
183
|
+
export interface SubagentResult {
|
|
184
|
+
/** 最终输出(黑盒面——父只见结果不见内部过程;机器账在位时降为参考面) */
|
|
185
|
+
readonly output: string;
|
|
186
|
+
/**
|
|
187
|
+
* 结构化输出(capabilities.structuredOutput 时有效)。契约位保持宽形
|
|
188
|
+
* (unknown——第三方 provider 可铸自有形);in-process 工厂 v1 唯一形 =
|
|
189
|
+
* 宿主机器账 { childSessionId, jobName?, durationMs, turnCount,
|
|
190
|
+
* messageCount, usage {input,output}|null, stopReason }(04 §10 structured
|
|
191
|
+
* 定形段——subagent/types.ts SubagentMachineAccount 单源形)。
|
|
192
|
+
*/
|
|
193
|
+
readonly structured?: unknown;
|
|
194
|
+
/** 降级上报(≤4096 截断——哪些工具被拒、以何降级路径完成;禁伪装执法位) */
|
|
195
|
+
readonly diagnostic?: string;
|
|
196
|
+
/**
|
|
197
|
+
* 用量(子栈计量上报;缺席 = 未计量)。in-process 工厂与 structured.usage
|
|
198
|
+
* 同值双填(同源一次铸造——顶层位 = 末条 assistant 完整 Usage、机器账位 =
|
|
199
|
+
* 同源两桶投影);顶层位独立保留意义 = 第三方 provider 只报顶层计量不铸
|
|
200
|
+
* 机器账。
|
|
201
|
+
*/
|
|
202
|
+
readonly usage?: Usage;
|
|
203
|
+
/** 收场原因(error 形 = 结果即错误数据——重试是父的策略不是子代理机制) */
|
|
204
|
+
readonly stopReason: SubagentStopReason;
|
|
205
|
+
}
|
|
206
|
+
/** 子代理收场原因闭集(StopReason 子集——委派语境三值;'killed' 承 Job 终态词) */
|
|
207
|
+
export type SubagentStopReason = 'stop' | 'error' | 'aborted';
|
|
208
|
+
/**
|
|
209
|
+
* SubagentProvider 契约(04 §10——subagent 件提供,core:):能力协商 +
|
|
210
|
+
* 单一委派动词。in-process provider 是真工厂——每子代理独立装配全套
|
|
211
|
+
* (自己的 loop/scope/工具面/凭证),运行期无「我是谁派来的」识别。
|
|
212
|
+
*/
|
|
213
|
+
export interface SubagentProvider {
|
|
214
|
+
readonly capabilities: SubagentCapabilities;
|
|
215
|
+
run(request: SubagentRequest): Promise<SubagentResult>;
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Job 种类闭集(04 §10——kind 现设三值;registerKind 显式登记后方可使用)。
|
|
219
|
+
* `'trigger'` = 触发器 starter 的缺省托管 kind(jobKind 缺省即隐式进此 kind;
|
|
220
|
+
* host 装配期自登 + 缺省并行帽 4——2026-09-07 触发器面 C 批落码定形)。
|
|
221
|
+
* 'process' 幽灵词已除(六役勘正笔:exec 子进程治理不走 Job 表登记——
|
|
222
|
+
* 联合零登记源词即除名,防随手字符串当 kind 用)。
|
|
223
|
+
*/
|
|
224
|
+
export type JobKind = 'subagent' | 'issue' | 'trigger';
|
|
225
|
+
/** Job 状态机(04 §10:running →(可选 stopping)→ 唯一终态;first-wins) */
|
|
226
|
+
export type JobStatus = 'running' | 'stopping' | 'completed' | 'killed' | 'failed';
|
|
227
|
+
/** Job 终态载荷(settle 时落——first-wins 封口后的不可变值) */
|
|
228
|
+
export interface JobTerminal {
|
|
229
|
+
/** 终态(三值闭集——completed/killed/failed) */
|
|
230
|
+
readonly status: Extract<JobStatus, 'completed' | 'killed' | 'failed'>;
|
|
231
|
+
/** 终态落定时刻(epoch ms) */
|
|
232
|
+
readonly at: number;
|
|
233
|
+
/** 终态说明(人读——killed 的归因/failed 的错误摘要等) */
|
|
234
|
+
readonly detail?: string;
|
|
235
|
+
}
|
|
236
|
+
/** Job 注册表条目(进程内状态——04 §10 终态不镜像落库明文豁免) */
|
|
237
|
+
export interface JobEntry {
|
|
238
|
+
/** 唯一 id(注册表自铸 `job-<n>` 序列) */
|
|
239
|
+
readonly id: string;
|
|
240
|
+
/** 显示名(子代理诊断名/进程命令行等) */
|
|
241
|
+
readonly name: string;
|
|
242
|
+
/** 种类(registerKind 登记词汇) */
|
|
243
|
+
readonly kind: JobKind;
|
|
244
|
+
/** 归属围栏(会话关闭按 owner 收口其在飞 Job 落 killed) */
|
|
245
|
+
readonly owner: string;
|
|
246
|
+
/** 当前状态(终态后不可变——first-wins) */
|
|
247
|
+
readonly status: JobStatus;
|
|
248
|
+
/** 起跑时刻(epoch ms) */
|
|
249
|
+
readonly startedAt: number;
|
|
250
|
+
/** 终态载荷(未终态 = undefined) */
|
|
251
|
+
readonly terminal?: JobTerminal;
|
|
252
|
+
}
|
|
253
|
+
/** job_settled 活体事件载荷(04 §10——总线词,内存直推不落库) */
|
|
254
|
+
export interface JobSettledEvent {
|
|
255
|
+
/** 终态条目快照(含 id/kind/owner/terminal) */
|
|
256
|
+
readonly entry: JobEntry;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* 声明式子代理解析产物(06 §11.6 agents/*.md 纯数据 def)。
|
|
260
|
+
* 归 contracts(02 §4.1 席 1 契约家):解析层住 core:skills、机器住
|
|
261
|
+
* core:subagent——两侧共享形状只可经契约面(skills→subagent 无边,
|
|
262
|
+
* DAG 禁穿);subagent 收纯数据 def 零 yaml(yaml 裸导入白名单不扩)。
|
|
263
|
+
*/
|
|
264
|
+
export interface SubagentDef {
|
|
265
|
+
/** 身份键(frontmatter name 缺省回落文件基名;提供时须与基名一致) */
|
|
266
|
+
readonly name: string;
|
|
267
|
+
/** 描述(必填——披露段清单行 = 模型选择依据) */
|
|
268
|
+
readonly description: string;
|
|
269
|
+
/** 工具白名单(可选 include 名单——与派生面交集执法) */
|
|
270
|
+
readonly tools?: readonly string[];
|
|
271
|
+
/** 前置要求(04 §10 预检闸声明位——与 tools 白名单正交不混读) */
|
|
272
|
+
readonly requires?: readonly string[];
|
|
273
|
+
/** 技能正文永久注入清单(06 §11.6 skills 键——spawn 时具名块拼入子 systemPrompt 尾) */
|
|
274
|
+
readonly skills?: readonly string[];
|
|
275
|
+
/** 模型覆盖(子代理启动参数直传工厂——不进能力协商面) */
|
|
276
|
+
readonly model?: string;
|
|
277
|
+
/** 正文即系统提示(frontmatter 闭合 --- 之后全文) */
|
|
278
|
+
readonly systemPrompt: string;
|
|
279
|
+
/** 来源文件绝对路径(诊断/溯源面) */
|
|
280
|
+
readonly filePath: string;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* 程序化 named provider 注册 def(03 §2.2 第十二动词 ctx.agent.registerSubagentProvider
|
|
284
|
+
* 单参——04 §10 程序化注册槽段机制真源)。**镜像 frontmatter 形** = SubagentDef 减
|
|
285
|
+
* 来源文件位(程序化注册无文件载体——filePath 是声明式腿专属归因面);注册即派生
|
|
286
|
+
* 静态工具 `agent_<name>`(物化机器住 core:subagent)。形状归 contracts 同 SubagentDef
|
|
287
|
+
* (消费方 = subagent 注册机器 + host ctx 面——经契约面共享,不私造双形)。
|
|
288
|
+
*/
|
|
289
|
+
export interface ProgrammaticSubagentDef {
|
|
290
|
+
/** 身份键(裸词——06 §11.6 声明式 name 同形:小写字母/数字/连字符,词法真源 06 §11.2) */
|
|
291
|
+
readonly name: string;
|
|
292
|
+
/** 描述(必填——披露段清单行 = 模型选择依据) */
|
|
293
|
+
readonly description: string;
|
|
294
|
+
/** 工具白名单(可选 include 名单——与派生面交集执法) */
|
|
295
|
+
readonly tools?: readonly string[];
|
|
296
|
+
/** 前置要求(04 §10 预检闸声明位——与 tools 白名单正交不混读) */
|
|
297
|
+
readonly requires?: readonly string[];
|
|
298
|
+
/** 技能正文永久注入清单(06 §11.6 skills 键——镜像 frontmatter 形;spawn 时统一复验) */
|
|
299
|
+
readonly skills?: readonly string[];
|
|
300
|
+
/** 模型覆盖(子代理启动参数直传工厂——不进能力协商面) */
|
|
301
|
+
readonly model?: string;
|
|
302
|
+
/** 子代理系统提示(程序化腿无文件载体——正文直传) */
|
|
303
|
+
readonly systemPrompt: string;
|
|
304
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/** 字面量六值 → 归一化种类映射(前缀型经 startsWith 归并) */
|
|
2
|
+
const LITERAL_SOURCE_KINDS = {
|
|
3
|
+
user: 'user',
|
|
4
|
+
schedule: 'schedule',
|
|
5
|
+
'subagent-settled': 'subagent-settled',
|
|
6
|
+
'subagent-approval-pending': 'subagent-approval-pending',
|
|
7
|
+
'budget-extended': 'budget-extended',
|
|
8
|
+
compaction: 'compaction',
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* 解析 source 归因字符串(闭集执法的读侧判据,05 §3.1):
|
|
12
|
+
* - 已知前缀的未知后缀(如 'plugin:未来插件')按前缀行语义展开;
|
|
13
|
+
* - 未知字面量(旧日志向前兼容)按 user 同视;
|
|
14
|
+
* - append 侧新值必须先扩闭集(类型 + 本函数)——写入纪律归 session 落码批。
|
|
15
|
+
*/
|
|
16
|
+
export function parseEventSource(source) {
|
|
17
|
+
if (source.startsWith('channel:')) {
|
|
18
|
+
return { kind: 'channel', raw: source, treatedAsUser: true };
|
|
19
|
+
}
|
|
20
|
+
if (source.startsWith('plugin:')) {
|
|
21
|
+
return { kind: 'plugin', raw: source, treatedAsUser: false };
|
|
22
|
+
}
|
|
23
|
+
if (source.startsWith('session:')) {
|
|
24
|
+
// 跨会话操控注入(模型工具道——前缀自描述送话会话 id):agent 互搏注入
|
|
25
|
+
// 非用户话语,投影位与 plugin 同判 false(05 §3.1 session: 行)
|
|
26
|
+
return { kind: 'session', raw: source, treatedAsUser: false };
|
|
27
|
+
}
|
|
28
|
+
const literal = LITERAL_SOURCE_KINDS[source];
|
|
29
|
+
if (literal) {
|
|
30
|
+
// compaction 是摘要载体:不是人说的——投影位与 plugin 同判 false;
|
|
31
|
+
// subagent-approval-pending 与 subagent-settled 同通道同型(04 §10
|
|
32
|
+
// UserMessage 注入位)——投影同视用户话语;budget-extended 与 schedule
|
|
33
|
+
// 同形(机器注入的起跑输入位,05 §3.1 第六字面量)——投影同视用户话语
|
|
34
|
+
const treatedAsUser = literal === 'user' ||
|
|
35
|
+
literal === 'schedule' ||
|
|
36
|
+
literal === 'subagent-settled' ||
|
|
37
|
+
literal === 'subagent-approval-pending' ||
|
|
38
|
+
literal === 'budget-extended';
|
|
39
|
+
return { kind: literal, raw: source, treatedAsUser };
|
|
40
|
+
}
|
|
41
|
+
// 未知字面量:旧日志向前兼容——按 user 同视(读侧宽容,append 侧严进)
|
|
42
|
+
return { kind: 'user', raw: source, treatedAsUser: true };
|
|
43
|
+
}
|
|
44
|
+
/* ---------------- 子代理与 Job 注册表(04 §10——批 15c 契约先行) ---------------- */
|
|
45
|
+
/**
|
|
46
|
+
* 委派深度帽(04 §10 委派边界③):根会话委派 = 深度 1;子代理再委派逐层 +1;
|
|
47
|
+
* 超帽 3 拒(SUBAGENT_DEPTH_EXCEEDED——防自嵌套爆栈)。
|
|
48
|
+
*/
|
|
49
|
+
export const SUBAGENT_DEPTH_MAX = 3;
|
|
50
|
+
void true;
|
|
51
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/contracts/types.ts"],"names":[],"mappings":"AAqFA,0CAA0C;AAC1C,MAAM,oBAAoB,GAA8C;IACtE,IAAI,EAAE,MAAM;IACZ,QAAQ,EAAE,UAAU;IACpB,kBAAkB,EAAE,kBAAkB;IACtC,2BAA2B,EAAE,2BAA2B;IACxD,iBAAiB,EAAE,iBAAiB;IACpC,UAAU,EAAE,YAAY;CACzB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IAC/D,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAClC,0CAA0C;QAC1C,iDAAiD;QACjD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IAChE,CAAC;IACD,MAAM,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,OAAO,EAAE,CAAC;QACZ,gDAAgD;QAChD,4DAA4D;QAC5D,wDAAwD;QACxD,yCAAyC;QACzC,MAAM,aAAa,GACjB,OAAO,KAAK,MAAM;YAClB,OAAO,KAAK,UAAU;YACtB,OAAO,KAAK,kBAAkB;YAC9B,OAAO,KAAK,2BAA2B;YACvC,OAAO,KAAK,iBAAiB,CAAC;QAChC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;IACvD,CAAC;IACD,4CAA4C;IAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC5D,CAAC;AAgDD,wEAAwE;AAExE;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AA0NpC,KAAM,IAAiD,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI 通道后端契约(07 篇 §4.1/§4.3 机制真源;03 §2.2 registerUiBackend
|
|
3
|
+
* 插件注册面)。
|
|
4
|
+
*
|
|
5
|
+
* 归位注记(2026-09-08 U3 落码批):本族类型原住 channels 件
|
|
6
|
+
* (src/channels/types.ts),为插件侧类型可达(虚拟主键 `berry-agent` 面只达
|
|
7
|
+
* contracts——03 §2.2 定形注记)随 U3-1 归位本件(批 11b ApprovalAsk 归位
|
|
8
|
+
* 同款先例);channels 公开面 re-export 维持不变。
|
|
9
|
+
*
|
|
10
|
+
* 插件实装形 = `UiBackend<never>`:投影泛型 TProjection 由宿主装配钉入
|
|
11
|
+
* (session 域投影类型,插件结构性不可达),插件后端走信封驱动呈现
|
|
12
|
+
* (onEnvelope 活体流)、不参与投影重画(onRepaint/openHistory——
|
|
13
|
+
* SDK/webui 后端 `UiBackend<never>` 同形先例)。
|
|
14
|
+
*/
|
|
15
|
+
import type { AgentEvent } from './agent-events.js';
|
|
16
|
+
import type { ApprovalAskAnswer, ApprovalAskRequest } from './approval.js';
|
|
17
|
+
/**
|
|
18
|
+
* 多会话信封(07 §4.1 channels 纵切批定形三则②):AgentEvent 不带会话归属
|
|
19
|
+
* 是刻意的——loop 是单 run 视角无多会话概念;归属信封的包装位 = host 装配
|
|
20
|
+
* 的 per-run sink 包装器(conversation 侧 sink 签名零 channels 感知、纯
|
|
21
|
+
* AgentEvent 回调注册面,host 汇入 channels 分发器时附加信封——装配根是
|
|
22
|
+
* 唯一允许 import 全部宿主模块的横切层,2026-09-06 冷读裁决 C-1),channels
|
|
23
|
+
* 消费分流。
|
|
24
|
+
*/
|
|
25
|
+
export interface SessionEnvelope {
|
|
26
|
+
readonly sessionId: string;
|
|
27
|
+
readonly event: AgentEvent;
|
|
28
|
+
}
|
|
29
|
+
/** notify 通知档(07 §4.3 签名定稿;'success' = 任务完成语义档) */
|
|
30
|
+
export type NotifyLevel = 'info' | 'success' | 'warn' | 'error';
|
|
31
|
+
/** 阻塞原语公共选项(07 §4.3 撤销面:abort 按取消收场取保守值) */
|
|
32
|
+
export interface UiAskOptions {
|
|
33
|
+
/** 可选中止信号——abort 时 confirm→false / select·input→''(保守值收场) */
|
|
34
|
+
readonly signal?: AbortSignal;
|
|
35
|
+
}
|
|
36
|
+
/** select 单选项(07 §4.3 签名定稿形) */
|
|
37
|
+
export interface UiSelectChoice {
|
|
38
|
+
readonly value: string;
|
|
39
|
+
readonly label: string;
|
|
40
|
+
}
|
|
41
|
+
/** input 原语选项 */
|
|
42
|
+
export interface UiInputOptions extends UiAskOptions {
|
|
43
|
+
readonly placeholder?: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 通道能力声明(07 §4.3 通道降级规则的判定面):不支持的原语按
|
|
47
|
+
* 「notify 化」降级(select→input→notify、setWidget→notify)——插件不感知
|
|
48
|
+
* 通道能力差异,降级判定与编舞在核。
|
|
49
|
+
*/
|
|
50
|
+
export interface UiCapabilities {
|
|
51
|
+
/** 一次性通知(一切通道的最后降级目标——接口上仍声明,装配健全性由核校验) */
|
|
52
|
+
readonly notify: boolean;
|
|
53
|
+
readonly confirm: boolean;
|
|
54
|
+
readonly select: boolean;
|
|
55
|
+
readonly input: boolean;
|
|
56
|
+
/** 审批 ask(07 §4.3 提问队列条款——阻塞原语与审批统一入队的第四原语位) */
|
|
57
|
+
readonly approval: boolean;
|
|
58
|
+
readonly setStatus: boolean;
|
|
59
|
+
readonly setWidget: boolean;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 通道后端接口(通道核的呈现消费面)。TUI 实装 = channels 件内自研 TuiBackend
|
|
63
|
+
* (批 10e 已落)、webui 件同面接入;核经此面驱动一切呈现——阻塞原语多后端并发竞速(04 §9 跨入口竞速
|
|
64
|
+
* 先答先得),败腿经 signal 撤销收场(07 §4.3 撤销面同链)。
|
|
65
|
+
*/
|
|
66
|
+
export interface UiBackend<TProjection> {
|
|
67
|
+
/** 后端身份('tui' / 'webui'——日志与调试面,非能力位) */
|
|
68
|
+
readonly id: string;
|
|
69
|
+
readonly capabilities: UiCapabilities;
|
|
70
|
+
/** 观众探针:本后端自报有观众(TUI 恒真 / webui 报在线连接数 > 0——07 §4.3) */
|
|
71
|
+
hasAudience(): boolean;
|
|
72
|
+
/** 一次性通知(level 档通道不识别时向后端自身归一 info) */
|
|
73
|
+
notify(message: string, opts?: {
|
|
74
|
+
level?: NotifyLevel;
|
|
75
|
+
}): void;
|
|
76
|
+
/** 是/否确认(仅 capable 后端被调——缺席面降级判定在核) */
|
|
77
|
+
confirm?(message: string, opts?: UiAskOptions): Promise<boolean>;
|
|
78
|
+
/** 单选(Enter 选定 / Esc 取消收 ''——TUI 原生实装语义) */
|
|
79
|
+
select?(message: string, choices: readonly UiSelectChoice[], opts?: UiAskOptions): Promise<string>;
|
|
80
|
+
/** 自由文本输入 */
|
|
81
|
+
input?(message: string, opts?: UiInputOptions): Promise<string>;
|
|
82
|
+
/**
|
|
83
|
+
* 审批 ask(仅 capable 后端被调——呈现形态归后端:TUI 主屏浮层是队首呈现之一)。
|
|
84
|
+
* sessionId 首参 = 会话归属承载位(批 13b-3 随 SDK 通道后端定形——ask 帧信封
|
|
85
|
+
* 必携会话归属;核心面 07 §4.3 `askApproval(sessionId, request)` 本含会话位,
|
|
86
|
+
* 后端面同携)。
|
|
87
|
+
*/
|
|
88
|
+
askApproval?(sessionId: string, request: ApprovalAskRequest, opts?: UiAskOptions): Promise<ApprovalAskAnswer>;
|
|
89
|
+
/** 状态行更新(last-writer-wins——多写者自然覆盖) */
|
|
90
|
+
setStatus?(sessionId: string, status: string): void;
|
|
91
|
+
/** 自定义渲染槽呈现(会话级单槽值由核维护——见 UiCore.setWidget) */
|
|
92
|
+
setWidget?(sessionId: string, node: unknown | null): void;
|
|
93
|
+
/** 活体信封呈现(focused 位由核路由——聚焦全渲染/非聚焦摘要行,形态归后端) */
|
|
94
|
+
onEnvelope?(env: SessionEnvelope, focused: boolean): void;
|
|
95
|
+
/** 重画呈现(焦点切换/初始——载荷 = 投影快照 + 该会话当前 widget 槽值) */
|
|
96
|
+
onRepaint?(sessionId: string, projection: readonly TProjection[], widget: {
|
|
97
|
+
node: unknown;
|
|
98
|
+
} | null): void;
|
|
99
|
+
/**
|
|
100
|
+
* 收起副屏(07 §4.1 件 8「ask 强制收起(注意力优先级 ask > 回看):通道
|
|
101
|
+
* ask 入口先收副屏再入提问队列」条款的可选能力面——批 10f-4)。在场即
|
|
102
|
+
* 实现 = 后端自报有副屏可收(TUI = 1049 备屏退出 + 主屏复起);核 ask
|
|
103
|
+
* 入口扇出本钩。缺席 = 无副屏可收零义务(非 TUI 后端不受影响)。
|
|
104
|
+
*/
|
|
105
|
+
collapseAltScreen?(): void;
|
|
106
|
+
/**
|
|
107
|
+
* 开副屏回看器(07 §4.1 件 8 /history 命令的呈现面——命令注册在通道核按
|
|
108
|
+
* ChannelsOptions.history 注入在场判)。载荷 = 全量 durable 正文投影
|
|
109
|
+
* (history() 拉取);呈现形态归后端(TUI = 1049 副屏整屏回看,同一渲染
|
|
110
|
+
* 管线零第二渲染器)。缺席 = 不支持整屏回看的后端。
|
|
111
|
+
*/
|
|
112
|
+
openHistory?(sessionId: string, messages: readonly TProjection[]): void;
|
|
113
|
+
/**
|
|
114
|
+
* 开副屏记忆管理面(06 §7 `/memory` 命令的呈现面——命令注册在通道核按
|
|
115
|
+
* ChannelsOptions.memory 注入在场判;mm 批)。零参形——材料归后端装配
|
|
116
|
+
* 自持(数据不经通道核流转:TuiBackend 经后置 setMemoryScreen 注入位持
|
|
117
|
+
* 有 DAO 窄面/消毒函数/导出闭包,与 openHistory 的载荷经核流转分立)。
|
|
118
|
+
* 返 boolean:true = 已开(支持且有材料);false = 不支持或缺材料——核
|
|
119
|
+
* 据此走 notify 降级提示(不静默)。缺席 = 不支持管理面的后端。
|
|
120
|
+
*/
|
|
121
|
+
openMemory?(): boolean;
|
|
122
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI 通道后端契约(07 篇 §4.1/§4.3 机制真源;03 §2.2 registerUiBackend
|
|
3
|
+
* 插件注册面)。
|
|
4
|
+
*
|
|
5
|
+
* 归位注记(2026-09-08 U3 落码批):本族类型原住 channels 件
|
|
6
|
+
* (src/channels/types.ts),为插件侧类型可达(虚拟主键 `berry-agent` 面只达
|
|
7
|
+
* contracts——03 §2.2 定形注记)随 U3-1 归位本件(批 11b ApprovalAsk 归位
|
|
8
|
+
* 同款先例);channels 公开面 re-export 维持不变。
|
|
9
|
+
*
|
|
10
|
+
* 插件实装形 = `UiBackend<never>`:投影泛型 TProjection 由宿主装配钉入
|
|
11
|
+
* (session 域投影类型,插件结构性不可达),插件后端走信封驱动呈现
|
|
12
|
+
* (onEnvelope 活体流)、不参与投影重画(onRepaint/openHistory——
|
|
13
|
+
* SDK/webui 后端 `UiBackend<never>` 同形先例)。
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../../../../src/contracts/ui.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* sdk/types — core:sdk HTTP 面契约(批 13e-1 契约先行)。
|
|
3
|
+
*
|
|
4
|
+
* 词面单源:端点路由与协议头(03 §10.6 批 13e 落码定形注①)/ 开面配置形
|
|
5
|
+
* (07 §5 serve 旗标族落码定名注——sock 缺省接入点、TCP 可选位、凭证 env
|
|
6
|
+
* 双载体三名)均在本件定形,传输实装(13e-2)与 daemon 装配(13e-3)只
|
|
7
|
+
* 消费不复制。
|
|
8
|
+
*/
|
|
9
|
+
import type { IncomingMessage, ServerResponse } from 'node:http';
|
|
10
|
+
import type { SdkWireDeps } from '../channels/index.js';
|
|
11
|
+
/** HTTP 端点路由词面(03 §10.6 差异面①/批 13e 定形:程序调用面五 POST/GET + SSE 建立位) */
|
|
12
|
+
export declare const SDK_HTTP_ENDPOINTS: {
|
|
13
|
+
/** POST——prompt 新发(sessionId 缺席即新建) */
|
|
14
|
+
readonly prompt: "/v1/prompt";
|
|
15
|
+
/** POST——interrupt(无应答档 HTTP 形 = 204 空体) */
|
|
16
|
+
readonly interrupt: "/v1/interrupt";
|
|
17
|
+
/** POST——审批应答(跨入口竞速回执) */
|
|
18
|
+
readonly decide: "/v1/decide";
|
|
19
|
+
/** POST——断线对账读面(since 窗口 (since, 高水位]) */
|
|
20
|
+
readonly entries: "/v1/entries";
|
|
21
|
+
/** GET——会话清单 */
|
|
22
|
+
readonly sessions: "/v1/sessions";
|
|
23
|
+
/** GET SSE——事件流建立位(即 hello 动词的 HTTP 承载:sessionId/after/noDelta 入查询参) */
|
|
24
|
+
readonly events: "/v1/events";
|
|
25
|
+
};
|
|
26
|
+
/** 协议版本头名(HTTP 无连接级 hello 位——每请求携版本,不符即 400 SDK_PROTOCOL_MISMATCH) */
|
|
27
|
+
export declare const SDK_PROTOCOL_HEADER = "x-sdk-protocol";
|
|
28
|
+
/** 鉴权头(10.4「监听 ⇒ 鉴权」恒在场——Bearer 形携 token) */
|
|
29
|
+
export declare const SDK_AUTH_HEADER = "authorization";
|
|
30
|
+
/** TCP 监听位形(单监听 spec——config.tcp 收单形或数组,内部归一数组执法) */
|
|
31
|
+
export interface SdkTcpListenSpec {
|
|
32
|
+
readonly host: string;
|
|
33
|
+
readonly port: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* sdk HTTP 面开面配置(07 §5 落码定名批 13e;18a-1' 多监听扩形——03 §10.6
|
|
37
|
+
* 路由扩展位段「sock 可缺席 + TCP×N」)。
|
|
38
|
+
*
|
|
39
|
+
* 监听器族多监听并存:sock 可选(缺席 = 不开——webui 人面 --port 独占 TCP 形
|
|
40
|
+
* 时 daemon 可无 sock);TCP 侧收单形或数组(归一执法)。非回环 host 必配
|
|
41
|
+
* 凭证 fail-closed 拒启(03 §10.6 差异面③「非回环 ⇒ 必配鉴权凭证」不豁免)。
|
|
42
|
+
*/
|
|
43
|
+
export interface SdkHttpListenConfig {
|
|
44
|
+
/** Unix-domain socket 监听路径(daemon 形缺省接入点——02 数据域表 serve/ 行;可选化:缺席不开 sock) */
|
|
45
|
+
readonly socketPath?: string;
|
|
46
|
+
/** TCP 可选位(--sdk-port/--sdk-host 或 env 双载体;单形或数组形——缺席 = 不开 TCP) */
|
|
47
|
+
readonly tcp?: SdkTcpListenSpec | readonly SdkTcpListenSpec[];
|
|
48
|
+
/**
|
|
49
|
+
* 预置共享密钥(BERRY_AGENT_SDK_TOKEN——差异面⑤ env 载体)。缺席 = 监听面
|
|
50
|
+
* 自足生成进程内一次性 token(只存内存不落盘),经披露面出(daemon 形 =
|
|
51
|
+
* daemon 日志文件 / 前台形 = stderr)。
|
|
52
|
+
*/
|
|
53
|
+
readonly token?: string;
|
|
54
|
+
}
|
|
55
|
+
/** 13e-2 传输实装的装配注入面(宿主装配桥同形——decideApproval/onSubscribed 后端自持、sink 传输自持;件不 import 宿主) */
|
|
56
|
+
export type SdkHttpBridge = Omit<SdkWireDeps, 'decideApproval' | 'onSubscribed' | 'sink'>;
|
|
57
|
+
/** 心跳看门狗节拍(10.4 同律:SSE 注释行 ping 每 30s + 写侧 90s 判死) */
|
|
58
|
+
export declare const SDK_SSE_PING_INTERVAL_MS = 30000;
|
|
59
|
+
/** SSE 写侧看门狗判死窗(ping 写失败或写超时即 reap 连接——读侧判死不可实施) */
|
|
60
|
+
export declare const SDK_SSE_WRITE_TIMEOUT_MS = 90000;
|
|
61
|
+
/**
|
|
62
|
+
* open 档合法语义位闭集(射界枚举钉死——注册期白名单校验、越界即拒 fail-loud,
|
|
63
|
+
* 代码可执法非仅冷读审读):
|
|
64
|
+
* - `liveness`——探活(GET /api/health 形:零敏感面应答);
|
|
65
|
+
* - `auth-exchange`——鉴权换证(POST /api/auth 形:token 换 cookie 桥);
|
|
66
|
+
* - `static-shell`——静态壳(SPA 静态面 + fallback:壳先于鉴权必须可载)。
|
|
67
|
+
*/
|
|
68
|
+
export declare const SDK_ROUTE_OPEN_PURPOSES: readonly ["liveness", "auth-exchange", "static-shell"];
|
|
69
|
+
/** open 档语义位(闭集成员——SDK_ROUTE_OPEN_PURPOSES 单源) */
|
|
70
|
+
export type SdkRouteOpenPurpose = (typeof SDK_ROUTE_OPEN_PURPOSES)[number];
|
|
71
|
+
/**
|
|
72
|
+
* 扩展路由鉴权档(四值——03 §10.6):
|
|
73
|
+
* - `'token'`——Bearer 判(面 token 验换位 verifyToken 常时比对);
|
|
74
|
+
* - `{mode:'token-or-cookie', cookie}`——Bearer ∪ HttpOnly cookie 双通道(EventSource
|
|
75
|
+
* 结构性无 Authorization 头——浏览器侧唯一凭证通道;恒时比对);
|
|
76
|
+
* - `{mode:'open', purpose}`——跳 token 闸(射界枚举钉死三类语义位——注册期校验);
|
|
77
|
+
* - `'self'`——跳面 token 闸、件侧自验(issue webhook HMAC 位——Host/Origin 防线
|
|
78
|
+
* 仍面级先行,self 只跳 token 闸)。
|
|
79
|
+
*/
|
|
80
|
+
export type SdkRouteAuth = 'token' | {
|
|
81
|
+
readonly mode: 'token-or-cookie';
|
|
82
|
+
readonly cookie: string;
|
|
83
|
+
} | {
|
|
84
|
+
readonly mode: 'open';
|
|
85
|
+
readonly purpose: SdkRouteOpenPurpose;
|
|
86
|
+
} | 'self';
|
|
87
|
+
/** 面级 SSE 流(openSse 产物——write 即 `data: <单行 JSON>` 帧合成钉死;close 幂等) */
|
|
88
|
+
export interface SdkRouteSseStream {
|
|
89
|
+
/** 帧写入(载荷整体单次 JSON.stringify 单行——禁手工拼帧);背压期 droppable 载荷 shedding */
|
|
90
|
+
write(data: unknown): void;
|
|
91
|
+
/** 终结(幂等——连接 close / 看门狗 / 宿主 stop 三路共用) */
|
|
92
|
+
close(): void;
|
|
93
|
+
}
|
|
94
|
+
/** openSse 选项(背压 shedding 谓词注入——各消费面自定可丢档) */
|
|
95
|
+
export interface SdkRouteSseOptions {
|
|
96
|
+
/** 背压期可丢判据(缺席 = 不 shedding——线控/关键帧永不丢档) */
|
|
97
|
+
readonly droppable?: (data: unknown) => boolean;
|
|
98
|
+
}
|
|
99
|
+
/** ctx.readBody 结果(排空纪律内含——超帽 ok:false 在体收完后才返回) */
|
|
100
|
+
export type SdkRouteBodyResult = {
|
|
101
|
+
readonly ok: true;
|
|
102
|
+
readonly body: string;
|
|
103
|
+
} | {
|
|
104
|
+
readonly ok: false;
|
|
105
|
+
readonly status: 413;
|
|
106
|
+
readonly message: string;
|
|
107
|
+
};
|
|
108
|
+
/** 扩展路由 handler 上下文(面级 helper 单源——03 §10.6「面级 helper ctx 单源」) */
|
|
109
|
+
export interface SdkRouteContext {
|
|
110
|
+
/** `:param` 段提取(匹配期注入——非参数路由恒空对象) */
|
|
111
|
+
readonly params: Readonly<Record<string, string>>;
|
|
112
|
+
/** catch-all 尾吞的原始路径形(非 catch-all 路由恒 undefined;SPA fallback 承载位) */
|
|
113
|
+
readonly wildcard: string | undefined;
|
|
114
|
+
/** 面级 SSE 开流(帧形单行 JSON/ping 30s/写侧看门狗 90s/shedding 谓词注入/幂等 close——面 stop 全流收口) */
|
|
115
|
+
openSse(res: ServerResponse, opts?: SdkRouteSseOptions): SdkRouteSseStream;
|
|
116
|
+
/** 读请求体(排空纪律——超帽 413 永不早于请求体收完防连接池 RST 连坐;帽 = descriptor.bodyLimitBytes ?? 面缺省) */
|
|
117
|
+
readBody(req: IncomingMessage): Promise<SdkRouteBodyResult>;
|
|
118
|
+
/** 面 token 验换(sha256 摘要恒长 + timingSafeEqual——面 token 唯一验换位;cookie 桥/Bearer 共用) */
|
|
119
|
+
verifyToken(value: string): boolean;
|
|
120
|
+
}
|
|
121
|
+
/** 扩展路由 handler(三参定形——03 §10.6 路由描述符条款) */
|
|
122
|
+
export type SdkRouteHandler = (req: IncomingMessage, res: ServerResponse, ctx: SdkRouteContext) => void | Promise<void>;
|
|
123
|
+
/**
|
|
124
|
+
* 扩展路由 HTTP 方法词面(七值闭集——method+path 双键匹配的 method 侧;
|
|
125
|
+
* U5-1 起独立立名:插件道描述符子集形(plugin-routes.ts)同词面复用,
|
|
126
|
+
* 七值单源不再内联两处)。
|
|
127
|
+
*/
|
|
128
|
+
export type SdkRouteMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';
|
|
129
|
+
/** 路由描述符(03 §10.6——path 段式 `:param` + 至多一枚 catch-all 通配尾 `*`) */
|
|
130
|
+
export interface SdkRouteDescriptor {
|
|
131
|
+
/** HTTP 方法(method+path 双键匹配) */
|
|
132
|
+
readonly method: SdkRouteMethod;
|
|
133
|
+
/** 段式路径:`/api/sessions/:id/submit` 形;`*` 单独成 path = 吞一切(SPA fallback);`/*` 尾 = 吞余段 */
|
|
134
|
+
readonly path: string;
|
|
135
|
+
/** 鉴权档(四值——SdkRouteAuth) */
|
|
136
|
+
readonly auth: SdkRouteAuth;
|
|
137
|
+
/** 恒回环可达标记(非回环 TCP 监听器不挂载——404 同未注册 + start warn;sock/回环 TCP 挂全路由) */
|
|
138
|
+
readonly loopbackOnly?: boolean;
|
|
139
|
+
/** per-route 请求体帽(缺席 = 面缺省 10 MiB;webui 族 256KiB 位) */
|
|
140
|
+
readonly bodyLimitBytes?: number;
|
|
141
|
+
readonly handler: SdkRouteHandler;
|
|
142
|
+
}
|
|
143
|
+
/** 路由注册器(两注册入口共享:SdkHttpFaceOptions.routes 构造期 + handle.register 晚注册——claim 桥同款晚绑);返摘除 fn */
|
|
144
|
+
export type SdkRouteRegistrar = (descriptor: SdkRouteDescriptor) => () => void;
|