@zmzai/agent-framework 0.1.0 → 0.2.1
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 +37 -0
- package/dist/adapters/openai-provider.d.ts +31 -2
- package/dist/adapters/openai-provider.d.ts.map +1 -1
- package/dist/adapters/openai-provider.js +118 -74
- package/dist/adapters/openai-provider.js.map +1 -1
- package/dist/adapters/subprocess-sandbox.d.ts +4 -5
- package/dist/adapters/subprocess-sandbox.d.ts.map +1 -1
- package/dist/adapters/subprocess-sandbox.js +106 -18
- package/dist/adapters/subprocess-sandbox.js.map +1 -1
- package/dist/adapters/terminal-backend.d.ts +5 -0
- package/dist/adapters/terminal-backend.d.ts.map +1 -0
- package/dist/adapters/terminal-backend.js +153 -0
- package/dist/adapters/terminal-backend.js.map +1 -0
- package/dist/cli.js +0 -0
- package/dist/core/agent/registry.d.ts +3 -0
- package/dist/core/agent/registry.d.ts.map +1 -1
- package/dist/core/agent/registry.js +9 -2
- package/dist/core/agent/registry.js.map +1 -1
- package/dist/core/events/manifest.d.ts +29 -4
- package/dist/core/events/manifest.d.ts.map +1 -1
- package/dist/core/events/manifest.js +21 -0
- package/dist/core/events/manifest.js.map +1 -1
- package/dist/core/mcp/client.d.ts +46 -0
- package/dist/core/mcp/client.d.ts.map +1 -0
- package/dist/core/mcp/client.js +286 -0
- package/dist/core/mcp/client.js.map +1 -0
- package/dist/core/mcp/http-client.d.ts +54 -0
- package/dist/core/mcp/http-client.d.ts.map +1 -0
- package/dist/core/mcp/http-client.js +385 -0
- package/dist/core/mcp/http-client.js.map +1 -0
- package/dist/core/mcp/servers.d.ts +30 -0
- package/dist/core/mcp/servers.d.ts.map +1 -0
- package/dist/core/mcp/servers.js +104 -0
- package/dist/core/mcp/servers.js.map +1 -0
- package/dist/core/permission/ruleset.d.ts +1 -1
- package/dist/core/permission/ruleset.d.ts.map +1 -1
- package/dist/core/permission/ruleset.js +4 -0
- package/dist/core/permission/ruleset.js.map +1 -1
- package/dist/core/permission/write-path.d.ts +27 -0
- package/dist/core/permission/write-path.d.ts.map +1 -0
- package/dist/core/permission/write-path.js +52 -0
- package/dist/core/permission/write-path.js.map +1 -0
- package/dist/core/repomap/cache.d.ts +24 -0
- package/dist/core/repomap/cache.d.ts.map +1 -0
- package/dist/core/repomap/cache.js +59 -0
- package/dist/core/repomap/cache.js.map +1 -0
- package/dist/core/repomap/graph.d.ts +14 -0
- package/dist/core/repomap/graph.d.ts.map +1 -0
- package/dist/core/repomap/graph.js +89 -0
- package/dist/core/repomap/graph.js.map +1 -0
- package/dist/core/repomap/render.d.ts +10 -0
- package/dist/core/repomap/render.d.ts.map +1 -0
- package/dist/core/repomap/render.js +33 -0
- package/dist/core/repomap/render.js.map +1 -0
- package/dist/core/repomap/repomap.d.ts +38 -0
- package/dist/core/repomap/repomap.d.ts.map +1 -0
- package/dist/core/repomap/repomap.js +116 -0
- package/dist/core/repomap/repomap.js.map +1 -0
- package/dist/core/repomap/tags.d.ts +26 -0
- package/dist/core/repomap/tags.d.ts.map +1 -0
- package/dist/core/repomap/tags.js +191 -0
- package/dist/core/repomap/tags.js.map +1 -0
- package/dist/core/runtime/compaction.d.ts +26 -14
- package/dist/core/runtime/compaction.d.ts.map +1 -1
- package/dist/core/runtime/compaction.js +46 -34
- package/dist/core/runtime/compaction.js.map +1 -1
- package/dist/core/runtime/lifecycle.d.ts +79 -0
- package/dist/core/runtime/lifecycle.d.ts.map +1 -0
- package/dist/core/runtime/lifecycle.js +71 -0
- package/dist/core/runtime/lifecycle.js.map +1 -0
- package/dist/core/runtime/pi-bridge.d.ts +4 -1
- package/dist/core/runtime/pi-bridge.d.ts.map +1 -1
- package/dist/core/runtime/pi-bridge.js +15 -1
- package/dist/core/runtime/pi-bridge.js.map +1 -1
- package/dist/core/runtime/run-transcript.d.ts +14 -0
- package/dist/core/runtime/run-transcript.d.ts.map +1 -0
- package/dist/core/runtime/run-transcript.js +35 -0
- package/dist/core/runtime/run-transcript.js.map +1 -0
- package/dist/core/runtime/runner.d.ts +38 -9
- package/dist/core/runtime/runner.d.ts.map +1 -1
- package/dist/core/runtime/runner.js +140 -20
- package/dist/core/runtime/runner.js.map +1 -1
- package/dist/core/session/sqlite-store.d.ts +18 -0
- package/dist/core/session/sqlite-store.d.ts.map +1 -0
- package/dist/core/session/sqlite-store.js +159 -0
- package/dist/core/session/sqlite-store.js.map +1 -0
- package/dist/core/session/types.d.ts +12 -0
- package/dist/core/session/types.d.ts.map +1 -1
- package/dist/core/tools/adapter.d.ts +11 -4
- package/dist/core/tools/adapter.d.ts.map +1 -1
- package/dist/core/tools/adapter.js +167 -8
- package/dist/core/tools/adapter.js.map +1 -1
- package/dist/core/tools/builtins.d.ts.map +1 -1
- package/dist/core/tools/builtins.js +5 -2
- package/dist/core/tools/builtins.js.map +1 -1
- package/dist/core/tools/context.d.ts +2 -0
- package/dist/core/tools/context.d.ts.map +1 -1
- package/dist/core/tools/def.d.ts +25 -0
- package/dist/core/tools/def.d.ts.map +1 -1
- package/dist/core/tools/def.js +3 -1
- package/dist/core/tools/def.js.map +1 -1
- package/dist/core/tools/git.d.ts +12 -0
- package/dist/core/tools/git.d.ts.map +1 -0
- package/dist/core/tools/git.js +189 -0
- package/dist/core/tools/git.js.map +1 -0
- package/dist/core/tools/patch.d.ts +45 -0
- package/dist/core/tools/patch.d.ts.map +1 -0
- package/dist/core/tools/patch.js +224 -0
- package/dist/core/tools/patch.js.map +1 -0
- package/dist/core/tools/qa-check.d.ts.map +1 -1
- package/dist/core/tools/qa-check.js +9 -2
- package/dist/core/tools/qa-check.js.map +1 -1
- package/dist/core/tools/repomap.d.ts +8 -0
- package/dist/core/tools/repomap.d.ts.map +1 -0
- package/dist/core/tools/repomap.js +34 -0
- package/dist/core/tools/repomap.js.map +1 -0
- package/dist/core/tools/terminal.d.ts +80 -0
- package/dist/core/tools/terminal.d.ts.map +1 -0
- package/dist/core/tools/terminal.js +265 -0
- package/dist/core/tools/terminal.js.map +1 -0
- package/dist/core/tools/trim.d.ts +31 -0
- package/dist/core/tools/trim.d.ts.map +1 -0
- package/dist/core/tools/trim.js +98 -0
- package/dist/core/tools/trim.js.map +1 -0
- package/dist/core/tools/webfetch.d.ts +10 -0
- package/dist/core/tools/webfetch.d.ts.map +1 -0
- package/dist/core/tools/webfetch.js +104 -0
- package/dist/core/tools/webfetch.js.map +1 -0
- package/dist/core/tools/websearch.d.ts +19 -0
- package/dist/core/tools/websearch.d.ts.map +1 -0
- package/dist/core/tools/websearch.js +132 -0
- package/dist/core/tools/websearch.js.map +1 -0
- package/dist/index.d.ts +30 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/dist/server/create-agent-runtime.d.ts +68 -0
- package/dist/server/create-agent-runtime.d.ts.map +1 -0
- package/dist/server/create-agent-runtime.js +67 -0
- package/dist/server/create-agent-runtime.js.map +1 -0
- package/dist/server/create-server.d.ts +5 -0
- package/dist/server/create-server.d.ts.map +1 -1
- package/dist/server/create-server.js +2 -0
- package/dist/server/create-server.js.map +1 -1
- package/package.json +23 -9
|
@@ -68,7 +68,7 @@ export class PartProjector {
|
|
|
68
68
|
return part;
|
|
69
69
|
}
|
|
70
70
|
// ---- PI event handlers (called by handleAgentEvent) ----
|
|
71
|
-
onUserPrompt(emit, text) {
|
|
71
|
+
onUserPrompt(emit, text, images) {
|
|
72
72
|
const message = {
|
|
73
73
|
id: newMessageId(),
|
|
74
74
|
sessionId: this.identity.sessionId,
|
|
@@ -91,6 +91,20 @@ export class PartProjector {
|
|
|
91
91
|
this.parts.set(part.id, part);
|
|
92
92
|
emit({ type: "message.part.updated", data: { part } });
|
|
93
93
|
}
|
|
94
|
+
if (images?.length) {
|
|
95
|
+
for (const image of images) {
|
|
96
|
+
const part = {
|
|
97
|
+
id: newPartId(),
|
|
98
|
+
sessionId: this.identity.sessionId,
|
|
99
|
+
messageId: message.id,
|
|
100
|
+
type: "image",
|
|
101
|
+
url: image.url,
|
|
102
|
+
mediaType: image.mediaType,
|
|
103
|
+
};
|
|
104
|
+
this.parts.set(part.id, part);
|
|
105
|
+
emit({ type: "message.part.updated", data: { part } });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
94
108
|
return message;
|
|
95
109
|
}
|
|
96
110
|
onAssistantStart(emit) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pi-bridge.js","sourceRoot":"","sources":["../../../src/core/runtime/pi-bridge.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pi-bridge.js","sourceRoot":"","sources":["../../../src/core/runtime/pi-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AgentMessage } from "@earendil-works/pi-agent-core";
|
|
2
|
+
/** F6 自动重试时注入的合成 user 占位文本。run-transcript 提取时排除它,
|
|
3
|
+
* 避免合成占位内容被当成真实用户发言存入长期记忆。 */
|
|
4
|
+
export declare const RETRY_PLACEHOLDER_TEXT = "\uFF08\u4E0A\u8F6E\u56DE\u590D\u751F\u6210\u4E2D\u65AD\uFF0C\u8BF7\u7EE7\u7EED\u5B8C\u6210\u56DE\u590D\u3002\uFF09";
|
|
5
|
+
/** 本次 run 新增的一条消息(只有 user/assistant 的纯文本部分)。 */
|
|
6
|
+
export type RunTranscriptMessage = {
|
|
7
|
+
role: "user" | "assistant";
|
|
8
|
+
text: string;
|
|
9
|
+
};
|
|
10
|
+
/** 提取一次 run 新增的可记忆内容:从 baselineCount 起切片,只保留
|
|
11
|
+
* user/assistant 的非空文本(thinking/toolCall/toolResult 一律跳过),
|
|
12
|
+
* 排除 F6 合成占位。返回结果供宿主 hook retain 到长期记忆。 */
|
|
13
|
+
export declare function extractRunTranscript(messages: AgentMessage[], baselineCount: number): RunTranscriptMessage[];
|
|
14
|
+
//# sourceMappingURL=run-transcript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-transcript.d.ts","sourceRoot":"","sources":["../../../src/core/runtime/run-transcript.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAElE;+BAC+B;AAC/B,eAAO,MAAM,sBAAsB,uHAAwB,CAAC;AAE5D,gDAAgD;AAChD,MAAM,MAAM,oBAAoB,GAAG;IAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAgBhF;;4CAE4C;AAC5C,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAU5G"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** F6 自动重试时注入的合成 user 占位文本。run-transcript 提取时排除它,
|
|
2
|
+
* 避免合成占位内容被当成真实用户发言存入长期记忆。 */
|
|
3
|
+
export const RETRY_PLACEHOLDER_TEXT = "(上轮回复生成中断,请继续完成回复。)";
|
|
4
|
+
function textOf(message) {
|
|
5
|
+
if (message.role !== "user" && message.role !== "assistant")
|
|
6
|
+
return "";
|
|
7
|
+
const content = message.content;
|
|
8
|
+
if (typeof content === "string")
|
|
9
|
+
return content.trim();
|
|
10
|
+
if (!Array.isArray(content))
|
|
11
|
+
return "";
|
|
12
|
+
return content
|
|
13
|
+
.filter((block) => typeof block === "object" && block !== null && block.type === "text")
|
|
14
|
+
.map((block) => block.text)
|
|
15
|
+
.join("\n")
|
|
16
|
+
.trim();
|
|
17
|
+
}
|
|
18
|
+
/** 提取一次 run 新增的可记忆内容:从 baselineCount 起切片,只保留
|
|
19
|
+
* user/assistant 的非空文本(thinking/toolCall/toolResult 一律跳过),
|
|
20
|
+
* 排除 F6 合成占位。返回结果供宿主 hook retain 到长期记忆。 */
|
|
21
|
+
export function extractRunTranscript(messages, baselineCount) {
|
|
22
|
+
const out = [];
|
|
23
|
+
for (const message of messages.slice(Math.max(0, baselineCount))) {
|
|
24
|
+
if (message.role !== "user" && message.role !== "assistant")
|
|
25
|
+
continue;
|
|
26
|
+
const text = textOf(message);
|
|
27
|
+
if (!text)
|
|
28
|
+
continue;
|
|
29
|
+
if (message.role === "user" && text === RETRY_PLACEHOLDER_TEXT)
|
|
30
|
+
continue;
|
|
31
|
+
out.push({ role: message.role, text });
|
|
32
|
+
}
|
|
33
|
+
return out;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=run-transcript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-transcript.js","sourceRoot":"","sources":["../../../src/core/runtime/run-transcript.ts"],"names":[],"mappings":"AAEA;+BAC+B;AAC/B,MAAM,CAAC,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAO5D,SAAS,MAAM,CAAC,OAAqB;IACnC,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IACvE,MAAM,OAAO,GAAY,OAAO,CAAC,OAAO,CAAC;IACzC,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;IACvD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAQ,OAAqB;SAC1B,MAAM,CAAC,CAAC,KAAK,EAAsB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAK,KAA2B,CAAC,IAAI,KAAK,MAAM,CAAC;SAClI,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC1B,IAAI,CAAC,IAAI,CAAC;SACV,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;4CAE4C;AAC5C,MAAM,UAAU,oBAAoB,CAAC,QAAwB,EAAE,aAAqB;IAClF,MAAM,GAAG,GAA2B,EAAE,CAAC;IACvC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC,EAAE,CAAC;QACjE,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW;YAAE,SAAS;QACtE,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,sBAAsB;YAAE,SAAS;QACzE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -6,9 +6,10 @@ import { type EventLog } from "../events/bus.js";
|
|
|
6
6
|
import { PermissionEngine, type Reply } from "../permission/engine.js";
|
|
7
7
|
import type { Ruleset } from "../permission/ruleset.js";
|
|
8
8
|
import type { SessionStore } from "../session/store.js";
|
|
9
|
-
import type { ModelRef, SessionInfo } from "../session/types.js";
|
|
9
|
+
import type { ModelRef, SessionInfo, ThinkingEffort } from "../session/types.js";
|
|
10
10
|
import type { ToolContext, WorkspaceFiles } from "../tools/context.js";
|
|
11
|
-
import type {
|
|
11
|
+
import type { AnyToolDef } from "../tools/def.js";
|
|
12
|
+
import { type LifecycleHook } from "./lifecycle.js";
|
|
12
13
|
import type { SandboxExecutor } from "../../adapters/index.js";
|
|
13
14
|
/** SessionRunner (spec §8.1): owns one session's full lifecycle — prompt →
|
|
14
15
|
* PI agent loop → persisted parts + framework events → terminal settlement
|
|
@@ -17,6 +18,17 @@ import type { SandboxExecutor } from "../../adapters/index.js";
|
|
|
17
18
|
*
|
|
18
19
|
* M5: fully storage/backend-agnostic. All product surfaces (model, sandbox,
|
|
19
20
|
* workspace files, event log, lease) are injected. */
|
|
21
|
+
export type { ThinkingEffort } from "../session/types.js";
|
|
22
|
+
export type PromptInput = {
|
|
23
|
+
text: string;
|
|
24
|
+
agent?: string;
|
|
25
|
+
model?: ModelRef;
|
|
26
|
+
images?: readonly {
|
|
27
|
+
url: string;
|
|
28
|
+
mediaType: string;
|
|
29
|
+
}[];
|
|
30
|
+
effort?: ThinkingEffort;
|
|
31
|
+
};
|
|
20
32
|
export type RunnerDeps = {
|
|
21
33
|
store: SessionStore;
|
|
22
34
|
registry: AgentRegistry;
|
|
@@ -40,7 +52,11 @@ export type RunnerDeps = {
|
|
|
40
52
|
/** Product approval sessions may persist an "always" rule with a bounded
|
|
41
53
|
* lifetime. The in-memory rule remains valid for the current run. */
|
|
42
54
|
sessionRuleTtlMs?: number;
|
|
43
|
-
tools?:
|
|
55
|
+
tools?: AnyToolDef[];
|
|
56
|
+
/** 本机工具(用户桌面机器上的 fs/shell/notify)。产品经 relay → bridge 下发
|
|
57
|
+
* 到桌面客户端,客户端本地审批后执行。与 sandbox 的云端执行相互独立。
|
|
58
|
+
* MCP server 工具(ExternalToolDef)也走这里注入。 */
|
|
59
|
+
localTools?: AnyToolDef[];
|
|
44
60
|
buildToolContext?: (input: {
|
|
45
61
|
session: SessionInfo;
|
|
46
62
|
engine: PermissionEngine;
|
|
@@ -57,14 +73,22 @@ export type RunnerDeps = {
|
|
|
57
73
|
contextWindow: number;
|
|
58
74
|
summaryModel: Model<Api> | null;
|
|
59
75
|
};
|
|
76
|
+
/** 生命周期钩子(P0):observe/block。抛错只告警不中断运行。 */
|
|
77
|
+
hooks?: LifecycleHook[];
|
|
78
|
+
/** 长期记忆召回(spec §记忆):run 开始时按当前 prompt 查询,返回文本
|
|
79
|
+
* 则作为首条 in-memory user 消息前插(不落 store)。抛错/返回空时零影响。 */
|
|
80
|
+
memoryContextFor?: (session: SessionInfo, text: string) => Promise<string | undefined>;
|
|
60
81
|
};
|
|
61
82
|
/** 上游中断类错误(F6):模型流偶发终止/连接断开时自动重试一次,避免
|
|
62
83
|
* 偶发中断直接结束任务(实测 relay 透传 "terminated"、上游断流
|
|
63
84
|
* "upstream_http2_stream_error" 等)。余额/鉴权等确定性错误不重试。 */
|
|
64
85
|
export declare function isRetryableError(message: string): boolean;
|
|
65
86
|
export declare class SessionRunner {
|
|
87
|
+
#private;
|
|
66
88
|
private readonly deps;
|
|
67
89
|
constructor(deps: RunnerDeps);
|
|
90
|
+
/** 供 runLoop 取归一化钩子数组(lazy:constructor 后仍可由 deps 引用共享)。 */
|
|
91
|
+
private get hooks();
|
|
68
92
|
/** fallbackSessionId 由 runLoop 闭包传入(而非实例字段):runner 是进程级
|
|
69
93
|
* 单例,两个会话并发时实例字段会互相覆盖,导致 message.part.delta 等
|
|
70
94
|
* 无自带 sessionId 的事件落到错误的会话事件流里(串台)。 */
|
|
@@ -72,11 +96,7 @@ export declare class SessionRunner {
|
|
|
72
96
|
private publish;
|
|
73
97
|
private stampLease;
|
|
74
98
|
private clearLease;
|
|
75
|
-
prompt(sessionId: string, input: {
|
|
76
|
-
text: string;
|
|
77
|
-
agent?: string;
|
|
78
|
-
model?: ModelRef;
|
|
79
|
-
}): Promise<{
|
|
99
|
+
prompt(sessionId: string, input: PromptInput): Promise<{
|
|
80
100
|
queued: boolean;
|
|
81
101
|
}>;
|
|
82
102
|
replyPermission(sessionId: string, requestId: string, reply: Reply, feedback?: string): Promise<boolean>;
|
|
@@ -84,9 +104,17 @@ export declare class SessionRunner {
|
|
|
84
104
|
* removes their persisted continuation access. */
|
|
85
105
|
revokePermission(sessionId: string, permission: string, patterns: string[]): Promise<boolean>;
|
|
86
106
|
abort(sessionId: string): Promise<void>;
|
|
107
|
+
/** 手动触发一次上下文压缩(UI「压缩当前会话」):无条件对当前历史跑一次
|
|
108
|
+
* 摘要折叠,摘要通过 buildCompaction 的 onCompacted 落为 compaction part
|
|
109
|
+
* 并发事件。与自动 compaction 共用同一套保护(膨胀拒绝/失败降级)。 */
|
|
110
|
+
compactSession(sessionId: string): Promise<{
|
|
111
|
+
ok: boolean;
|
|
112
|
+
reason?: string;
|
|
113
|
+
}>;
|
|
87
114
|
/** Builds the compaction transformContext (spec §8.3) when the runner has a
|
|
88
115
|
* summary model configured. Emits a `compaction` part on the latest
|
|
89
|
-
* assistant message so the boundary shows in the transcript.
|
|
116
|
+
* assistant message so the boundary shows in the transcript. force=true
|
|
117
|
+
* skips the threshold/滞回 early-outs (手动「压缩当前会话」). */
|
|
90
118
|
private buildCompaction;
|
|
91
119
|
/** Layers the session's workspace custom agents (`.zmzai/agents/*.md`) on top
|
|
92
120
|
* of the shared registry without mutating it (spec §6.3). Load failures
|
|
@@ -122,6 +150,7 @@ export declare function createFrameworkSession(input: {
|
|
|
122
150
|
parentId?: string;
|
|
123
151
|
title?: string;
|
|
124
152
|
permission?: Ruleset;
|
|
153
|
+
writePaths?: string[];
|
|
125
154
|
}): Promise<SessionInfo>;
|
|
126
155
|
export declare function isSessionActive(sessionId: string): boolean;
|
|
127
156
|
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/core/runtime/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,+BAA+B,CAAC;AACzE,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,sBAAsB,CAAC;AAEzE,OAAO,EAA2B,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE1E,OAAO,EAAE,gBAAgB,EAAiB,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/core/runtime/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,15 @@ import { Agent } from "@earendil-works/pi-agent-core";
|
|
|
2
2
|
import { leaseDurationMs } from "../../adapters/index.js";
|
|
3
3
|
import { notifyEventLogListeners } from "../events/bus.js";
|
|
4
4
|
import { PermissionEngine, RejectedError } from "../permission/engine.js";
|
|
5
|
+
import { confineWorkspaceFiles, writePathGuardRules } from "../permission/write-path.js";
|
|
5
6
|
import { PartProjector, serializeEmit } from "./pi-bridge.js";
|
|
6
7
|
import { LoopGuard, REPEAT_EDIT_FAILURE_THRESHOLD } from "./loop-guard.js";
|
|
7
8
|
import { newPartId, newSessionId } from "../session/ids.js";
|
|
8
|
-
import {
|
|
9
|
+
import { adaptAnyTool, permissionForCall } from "../tools/adapter.js";
|
|
9
10
|
import { builtinTools } from "../tools/builtins.js";
|
|
11
|
+
import { isExternalToolDef } from "../tools/def.js";
|
|
12
|
+
import { fireRunStart, firstToolBlock, fireAfterToolCall, fireRunEnd } from "./lifecycle.js";
|
|
13
|
+
import { extractRunTranscript, RETRY_PLACEHOLDER_TEXT } from "./run-transcript.js";
|
|
10
14
|
import { noopSandboxExecutor } from "../../adapters/index.js";
|
|
11
15
|
/** 事件的 sessionId 提取:能自带的自带(message/part/session),其余
|
|
12
16
|
* (message.part.delta 等)用发起 run 的会话 id 兜底。 */
|
|
@@ -75,6 +79,13 @@ export class SessionRunner {
|
|
|
75
79
|
constructor(deps) {
|
|
76
80
|
this.deps = deps;
|
|
77
81
|
}
|
|
82
|
+
#hooks = [];
|
|
83
|
+
/** 供 runLoop 取归一化钩子数组(lazy:constructor 后仍可由 deps 引用共享)。 */
|
|
84
|
+
get hooks() {
|
|
85
|
+
if (this.#hooks.length !== (this.deps.hooks?.length ?? 0))
|
|
86
|
+
this.#hooks = [...(this.deps.hooks ?? [])];
|
|
87
|
+
return this.#hooks;
|
|
88
|
+
}
|
|
78
89
|
/** fallbackSessionId 由 runLoop 闭包传入(而非实例字段):runner 是进程级
|
|
79
90
|
* 单例,两个会话并发时实例字段会互相覆盖,导致 message.part.delta 等
|
|
80
91
|
* 无自带 sessionId 的事件落到错误的会话事件流里(串台)。 */
|
|
@@ -115,7 +126,7 @@ export class SessionRunner {
|
|
|
115
126
|
if (!session)
|
|
116
127
|
throw new Error("SESSION_NOT_FOUND");
|
|
117
128
|
if (activeRuns.has(sessionId)) {
|
|
118
|
-
await this.deps.store.enqueuePrompt(sessionId, { text: input.text, ...(input.agent ? { agent: input.agent } : {}), enqueuedAt: new Date().toISOString() });
|
|
129
|
+
await this.deps.store.enqueuePrompt(sessionId, { text: input.text, ...(input.agent ? { agent: input.agent } : {}), ...(input.effort ? { effort: input.effort } : {}), enqueuedAt: new Date().toISOString() });
|
|
119
130
|
return { queued: true };
|
|
120
131
|
}
|
|
121
132
|
void this.runLoop(session, input);
|
|
@@ -153,10 +164,30 @@ export class SessionRunner {
|
|
|
153
164
|
active.abort();
|
|
154
165
|
await active.done;
|
|
155
166
|
}
|
|
167
|
+
/** 手动触发一次上下文压缩(UI「压缩当前会话」):无条件对当前历史跑一次
|
|
168
|
+
* 摘要折叠,摘要通过 buildCompaction 的 onCompacted 落为 compaction part
|
|
169
|
+
* 并发事件。与自动 compaction 共用同一套保护(膨胀拒绝/失败降级)。 */
|
|
170
|
+
async compactSession(sessionId) {
|
|
171
|
+
if (!this.deps.compaction?.enabled || !this.deps.compaction.summaryModel) {
|
|
172
|
+
return { ok: false, reason: "compaction-disabled" };
|
|
173
|
+
}
|
|
174
|
+
const session = await this.deps.store.getSession(sessionId);
|
|
175
|
+
if (!session)
|
|
176
|
+
return { ok: false, reason: "session-not-found" };
|
|
177
|
+
const transform = await this.buildCompaction(session, (event) => this.publish(event, session.id), true);
|
|
178
|
+
if (!transform)
|
|
179
|
+
return { ok: false, reason: "compaction-disabled" };
|
|
180
|
+
const messages = await this.rebuildMessages(sessionId);
|
|
181
|
+
if (messages.length <= 1)
|
|
182
|
+
return { ok: false, reason: "nothing-to-compact" };
|
|
183
|
+
await transform(messages);
|
|
184
|
+
return { ok: true };
|
|
185
|
+
}
|
|
156
186
|
/** Builds the compaction transformContext (spec §8.3) when the runner has a
|
|
157
187
|
* summary model configured. Emits a `compaction` part on the latest
|
|
158
|
-
* assistant message so the boundary shows in the transcript.
|
|
159
|
-
|
|
188
|
+
* assistant message so the boundary shows in the transcript. force=true
|
|
189
|
+
* skips the threshold/滞回 early-outs (手动「压缩当前会话」). */
|
|
190
|
+
async buildCompaction(session, emit, force = false) {
|
|
160
191
|
if (!this.deps.compaction?.enabled || !this.deps.compaction.summaryModel)
|
|
161
192
|
return undefined;
|
|
162
193
|
const { buildCompactionTransform, streamOneText } = await import("./compaction.js");
|
|
@@ -164,6 +195,7 @@ export class SessionRunner {
|
|
|
164
195
|
enabled: true,
|
|
165
196
|
contextWindow: this.deps.compaction.contextWindow,
|
|
166
197
|
summaryModel: this.deps.compaction.summaryModel,
|
|
198
|
+
...(force ? { force: true } : {}),
|
|
167
199
|
streamOne: async (model, messages) => {
|
|
168
200
|
const streamFn = this.deps.streamFnFor(session);
|
|
169
201
|
return streamOneText(async (m, ctx) => {
|
|
@@ -243,11 +275,14 @@ export class SessionRunner {
|
|
|
243
275
|
});
|
|
244
276
|
const projector = new PartProjector({ sessionId: session.id, agent: agentInfo?.name ?? "default", model });
|
|
245
277
|
// Exclude task from contexts that can't nest; include for primary runs.
|
|
246
|
-
const baseTools = [...(this.deps.tools ?? builtinTools), ...(resolved?.tools ?? [])];
|
|
278
|
+
const baseTools = [...(this.deps.tools ?? builtinTools), ...(this.deps.localTools ?? []), ...(resolved?.tools ?? [])];
|
|
247
279
|
const toolList = session.parentId ? baseTools.filter((def) => def.id !== "task") : baseTools;
|
|
248
280
|
const toolDefs = new Map(toolList.map((def) => [def.id, def]));
|
|
249
281
|
const sandbox = this.deps.sandbox ?? noopSandboxExecutor();
|
|
250
|
-
|
|
282
|
+
// 子代理写路径隔离(07-subagent):会话声明了 writePaths 时把 workspace
|
|
283
|
+
// 门面包进结构层圈禁——越界 write/edit 直接抛错,不可绕过。
|
|
284
|
+
const rawWorkspace = this.deps.workspaceFor(session);
|
|
285
|
+
const workspace = session.writePaths?.length ? confineWorkspaceFiles(rawWorkspace, session.writePaths) : rawWorkspace;
|
|
251
286
|
const emitAsync = async (event) => {
|
|
252
287
|
const persisted = await this.deps.eventLog.append({ sessionId: session.id, ...event });
|
|
253
288
|
notifyEventLogListeners(persisted);
|
|
@@ -258,19 +293,34 @@ export class SessionRunner {
|
|
|
258
293
|
if (!session.parentId) {
|
|
259
294
|
toolContext.spawnSubagent = (spawnInput) => this.spawnSubagent(session, spawnInput, registry, engine);
|
|
260
295
|
}
|
|
261
|
-
const piTools = [...toolDefs.values()].map((def) =>
|
|
296
|
+
const piTools = [...toolDefs.values()].map((def) => adaptAnyTool(def, toolContext));
|
|
262
297
|
let unknownSideEffect = false;
|
|
263
298
|
const compactionTransform = await this.buildCompaction(session, emit);
|
|
299
|
+
// 记忆召回(spec §记忆):单点注入 runLoop,天然覆盖正常 prompt/排队出
|
|
300
|
+
// 队/automation/子代理触发四条路径。只进内存不落 store;抛错静默降级。
|
|
301
|
+
const history = await this.rebuildMessages(session.id);
|
|
302
|
+
if (this.deps.memoryContextFor) {
|
|
303
|
+
try {
|
|
304
|
+
const section = await this.deps.memoryContextFor(session, input.text);
|
|
305
|
+
if (section) {
|
|
306
|
+
history.unshift({ role: "user", content: [{ type: "text", text: section }], timestamp: Date.now() });
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
// 召回失败不阻塞 run
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
// baseline:本次 run 新增消息从这之后算(供 onRunEnd 提取 retain)
|
|
314
|
+
const baseline = history.length;
|
|
264
315
|
const agent = new Agent({
|
|
265
316
|
initialState: {
|
|
266
317
|
systemPrompt: agentInfo?.prompt ?? "",
|
|
267
318
|
model: this.deps.modelFor(model),
|
|
268
|
-
//
|
|
269
|
-
//
|
|
270
|
-
|
|
271
|
-
// output is desired later, the relay must accept the field first.
|
|
319
|
+
// 推理力度(P1-8 复活):relay 现已按模型白名单接受 reasoning_effort;
|
|
320
|
+
// 仅当调用方显式选择且非 off 时下发(默认不设 = 完全不带该字段)。
|
|
321
|
+
...(input.effort && input.effort !== "off" ? { thinkingLevel: input.effort } : {}),
|
|
272
322
|
tools: piTools,
|
|
273
|
-
messages:
|
|
323
|
+
messages: history,
|
|
274
324
|
},
|
|
275
325
|
streamFn: this.deps.streamFnFor(session),
|
|
276
326
|
toolExecution: "sequential",
|
|
@@ -295,7 +345,7 @@ export class SessionRunner {
|
|
|
295
345
|
// 重试前先复查文件状态——oldText 已唯一存在则放行清记录,
|
|
296
346
|
// 否则直接拦截(避免无意义空转烧步数)。
|
|
297
347
|
const editDef = toolCall.name === "edit" ? toolDefs.get("edit") : undefined;
|
|
298
|
-
const editArgs = editDef ? editDef.parameters.safeParse(args) : undefined;
|
|
348
|
+
const editArgs = editDef && !isExternalToolDef(editDef) ? editDef.parameters.safeParse(args) : undefined;
|
|
299
349
|
if (editDef && editArgs?.success && loopGuard.needsEditRecheck(editArgs.data.path, editArgs.data.oldText)) {
|
|
300
350
|
const file = await workspace.read(editArgs.data.path);
|
|
301
351
|
const occurrences = file ? file.content.split(editArgs.data.oldText).length - 1 : 0;
|
|
@@ -310,6 +360,17 @@ export class SessionRunner {
|
|
|
310
360
|
};
|
|
311
361
|
}
|
|
312
362
|
}
|
|
363
|
+
// 生命周期钩子(P0):所有工具统一的第一道闸口(在权限评估之前,
|
|
364
|
+
// 便于宿主实现全量工具审计/拦截);reason 会反馈给模型
|
|
365
|
+
const hookBlock = await firstToolBlock(this.hooks, {
|
|
366
|
+
sessionId: session.id,
|
|
367
|
+
agent: session.agent,
|
|
368
|
+
tool: toolCall.name,
|
|
369
|
+
args,
|
|
370
|
+
});
|
|
371
|
+
if (hookBlock?.block) {
|
|
372
|
+
return { block: true, reason: String(hookBlock.reason ?? "被钩子拦截"), terminate: false };
|
|
373
|
+
}
|
|
313
374
|
const mapped = permissionForCall(toolDefs, toolCall.name, args);
|
|
314
375
|
if (!mapped)
|
|
315
376
|
return undefined;
|
|
@@ -345,8 +406,17 @@ export class SessionRunner {
|
|
|
345
406
|
.map((block) => block.text)
|
|
346
407
|
.join("\n");
|
|
347
408
|
let advisory = loopGuard.onToolResult({ toolName: toolCall.name, isError, errorText: resultText });
|
|
409
|
+
// 生命周期钩子(P0):只读观测,不阻塞结果路径
|
|
410
|
+
void Promise.all(fireAfterToolCall(this.hooks, {
|
|
411
|
+
sessionId: session.id,
|
|
412
|
+
agent: session.agent,
|
|
413
|
+
tool: toolCall.name,
|
|
414
|
+
isError,
|
|
415
|
+
title: typeof details?.title === "string" ? details.title : undefined,
|
|
416
|
+
}));
|
|
348
417
|
if (toolCall.name === "edit") {
|
|
349
|
-
const
|
|
418
|
+
const editAfterDef = toolDefs.get("edit");
|
|
419
|
+
const parsed = editAfterDef && !isExternalToolDef(editAfterDef) ? editAfterDef.parameters.safeParse(args) : undefined;
|
|
350
420
|
if (parsed?.success) {
|
|
351
421
|
if (isError) {
|
|
352
422
|
loopGuard.noteEditFailure(parsed.data.path, parsed.data.oldText);
|
|
@@ -363,7 +433,16 @@ export class SessionRunner {
|
|
|
363
433
|
return undefined;
|
|
364
434
|
return { content: [{ type: "text", text: `${advisory}\n\n--- 原始工具结果 ---\n${resultText}` }] };
|
|
365
435
|
};
|
|
436
|
+
// 流空闲看门狗:上游无响应时(模型不支持该输入如非视觉模型收图、网络挂起),
|
|
437
|
+
// runLoop 会无限挂起,用户端表现为「卡住」。任意 agent 事件喂狗;
|
|
438
|
+
// 超过阈值未喂则发布 session.error 并 abort,让 UI 得到明确反馈而非永久等待。
|
|
439
|
+
const STREAM_IDLE_TIMEOUT_MS = 120_000;
|
|
440
|
+
let lastStreamActivityAt = Date.now();
|
|
441
|
+
const feedStreamWatchdog = () => {
|
|
442
|
+
lastStreamActivityAt = Date.now();
|
|
443
|
+
};
|
|
366
444
|
agent.subscribe((event) => {
|
|
445
|
+
feedStreamWatchdog();
|
|
367
446
|
switch (event.type) {
|
|
368
447
|
case "message_start":
|
|
369
448
|
if (event.message.role === "assistant")
|
|
@@ -392,10 +471,23 @@ export class SessionRunner {
|
|
|
392
471
|
break;
|
|
393
472
|
}
|
|
394
473
|
});
|
|
474
|
+
const streamWatchdog = setInterval(() => {
|
|
475
|
+
if (Date.now() - lastStreamActivityAt < STREAM_IDLE_TIMEOUT_MS)
|
|
476
|
+
return;
|
|
477
|
+
lastStreamActivityAt = Date.now(); // 只触发一次,错误路径会 abort 收尾
|
|
478
|
+
void this.publish({ type: "session.error", data: { name: "StreamIdleTimeout", message: `上游 ${STREAM_IDLE_TIMEOUT_MS / 1000}s 无响应,已中止本次运行(模型可能不支持该输入,如非视觉模型收到图片;可切换模型重试)` } }, session.id);
|
|
479
|
+
abortController.abort();
|
|
480
|
+
}, 15_000);
|
|
481
|
+
await Promise.all(fireRunStart(this.hooks, { sessionId: session.id, agent: session.agent, text: input.text }));
|
|
395
482
|
await this.publish({ type: "session.status", data: { status: "running" } }, session.id);
|
|
483
|
+
let runErrored = false;
|
|
396
484
|
try {
|
|
397
|
-
projector.onUserPrompt(emit, input.text);
|
|
398
|
-
|
|
485
|
+
projector.onUserPrompt(emit, input.text, input.images);
|
|
486
|
+
const piImages = input.images?.map((img) => {
|
|
487
|
+
const match = img.url.match(/^data:([^;]+);base64,(.+)$/);
|
|
488
|
+
return match ? { type: "image", data: match[2], mimeType: match[1] } : null;
|
|
489
|
+
}).filter((img) => img !== null);
|
|
490
|
+
await agent.prompt(input.text, piImages?.length ? piImages : undefined);
|
|
399
491
|
await settled();
|
|
400
492
|
let failed = agent.state.errorMessage;
|
|
401
493
|
if (unknownSideEffect) {
|
|
@@ -416,7 +508,7 @@ export class SessionRunner {
|
|
|
416
508
|
if (last?.role === "assistant" && "errorMessage" in last && last.errorMessage) {
|
|
417
509
|
agent.state.messages = [
|
|
418
510
|
...messages.slice(0, -1),
|
|
419
|
-
{ role: "user", content: [{ type: "text", text:
|
|
511
|
+
{ role: "user", content: [{ type: "text", text: RETRY_PLACEHOLDER_TEXT }], timestamp: Date.now() },
|
|
420
512
|
];
|
|
421
513
|
}
|
|
422
514
|
try {
|
|
@@ -429,6 +521,7 @@ export class SessionRunner {
|
|
|
429
521
|
}
|
|
430
522
|
}
|
|
431
523
|
if (failed) {
|
|
524
|
+
runErrored = true;
|
|
432
525
|
await this.publish({ type: "session.error", data: { name: "APIError", message: failed } }, session.id);
|
|
433
526
|
}
|
|
434
527
|
await this.publish({ type: "session.status", data: { status: "idle" } }, session.id);
|
|
@@ -437,6 +530,8 @@ export class SessionRunner {
|
|
|
437
530
|
catch (error) {
|
|
438
531
|
await settled();
|
|
439
532
|
const aborted = abortController.signal.aborted;
|
|
533
|
+
if (!aborted && !unknownSideEffect)
|
|
534
|
+
runErrored = true;
|
|
440
535
|
await this.publish(unknownSideEffect
|
|
441
536
|
? { type: "session.status", data: { status: "waiting_input" } }
|
|
442
537
|
: aborted
|
|
@@ -444,9 +539,12 @@ export class SessionRunner {
|
|
|
444
539
|
: { type: "session.error", data: { name: "AgentRuntimeError", message: error instanceof Error ? error.message : "Agent 运行失败" } }, session.id);
|
|
445
540
|
}
|
|
446
541
|
finally {
|
|
542
|
+
clearInterval(streamWatchdog);
|
|
447
543
|
activeRuns.delete(session.id);
|
|
448
544
|
engine.dispose();
|
|
449
545
|
await this.clearLease(session.id);
|
|
546
|
+
const newMessages = extractRunTranscript(agent.state.messages, baseline);
|
|
547
|
+
void Promise.all(fireRunEnd(this.hooks, { sessionId: session.id, agent: session.agent, ok: !runErrored, aborted: abortController.signal.aborted, workspaceId: session.workspaceId, newMessages }));
|
|
450
548
|
resolveDone();
|
|
451
549
|
}
|
|
452
550
|
if (unknownSideEffect)
|
|
@@ -456,7 +554,7 @@ export class SessionRunner {
|
|
|
456
554
|
if (next) {
|
|
457
555
|
const latest = await this.deps.store.getSession(session.id);
|
|
458
556
|
if (latest)
|
|
459
|
-
await this.runLoop(latest, { text: next.text, ...(next.agent ? { agent: next.agent } : {}) });
|
|
557
|
+
await this.runLoop(latest, { text: next.text, ...(next.agent ? { agent: next.agent } : {}), ...(next.effort ? { effort: next.effort } : {}) });
|
|
460
558
|
}
|
|
461
559
|
}
|
|
462
560
|
/** Spawns a subagent child session (spec §6.4): depth-capped, permission
|
|
@@ -488,20 +586,41 @@ export class SessionRunner {
|
|
|
488
586
|
prompt: input.prompt,
|
|
489
587
|
parentId: parent.id,
|
|
490
588
|
title: input.description,
|
|
491
|
-
|
|
589
|
+
// 写路径隔离(07-subagent):子代理 preset 声明 writePaths 时,权限层
|
|
590
|
+
// 追加白名单 allow + 全局 deny 兜底(LAST match wins,兜底必须在最后),
|
|
591
|
+
// 结构层通过 SessionInfo.writePaths 在子 runLoop 里圈禁 workspace。
|
|
592
|
+
permission: [...parent.permission, ...writePathGuardRules(subagent.writePaths ?? [])],
|
|
593
|
+
...(subagent.writePaths?.length ? { writePaths: subagent.writePaths } : {}),
|
|
492
594
|
});
|
|
595
|
+
// 事件桥接(R3,opencode 式页面联动):子代理生命周期发到父会话事件流,
|
|
596
|
+
// UI 可实时展示子代理的执行进度而无需订阅子会话。
|
|
597
|
+
const startedAt = Date.now();
|
|
598
|
+
let toolCalls = 0;
|
|
599
|
+
await this.publish({ type: "subagent.started", data: { id: childSession.id, agent: input.subagentType, task: input.description, parentSessionId: parent.id } }, parent.id);
|
|
493
600
|
try {
|
|
494
601
|
// Run the child with a FRESH runner (not this instance's nested runLoop):
|
|
495
602
|
// reusing runLoop here would deadlock on the shared in-process state and
|
|
496
603
|
// the parent's event chain. A dedicated runner owns the child's loop.
|
|
497
|
-
|
|
604
|
+
// 附加 step 桥接钩子:子会话每次工具调用完成 → subagent.step 事件。
|
|
605
|
+
const stepHook = {
|
|
606
|
+
name: "subagent-step-bridge",
|
|
607
|
+
onAfterToolCall: async ({ sessionId, tool, isError, title }) => {
|
|
608
|
+
if (sessionId !== childSession.id)
|
|
609
|
+
return;
|
|
610
|
+
toolCalls += 1;
|
|
611
|
+
await this.publish({ type: "subagent.step", data: { id: childSession.id, tool, title, state: isError ? "error" : "completed" } }, parent.id);
|
|
612
|
+
},
|
|
613
|
+
};
|
|
614
|
+
const childRunner = new SessionRunner({ ...this.deps, hooks: [...(this.deps.hooks ?? []), stepHook] });
|
|
498
615
|
await childRunner.runLoop(childSession, { text: input.prompt, agent: input.subagentType });
|
|
499
616
|
const summary = await this.lastAssistantText(childSession.id);
|
|
500
617
|
await this.recordSubtask(parent, { prompt: input.prompt, description: input.description, agent: input.subagentType, childSessionId: childSession.id });
|
|
618
|
+
await this.publish({ type: "subagent.finished", data: { id: childSession.id, state: "completed", durationMs: Date.now() - startedAt, toolCalls } }, parent.id);
|
|
501
619
|
return { childSessionId: childSession.id, summary: summary || "(子代理无文本输出)", state: "completed" };
|
|
502
620
|
}
|
|
503
621
|
catch (error) {
|
|
504
622
|
await this.recordSubtask(parent, { prompt: input.prompt, description: input.description, agent: input.subagentType, childSessionId: childSession.id });
|
|
623
|
+
await this.publish({ type: "subagent.finished", data: { id: childSession.id, state: "error", durationMs: Date.now() - startedAt, toolCalls } }, parent.id);
|
|
505
624
|
return { childSessionId: childSession.id, summary: `子代理失败:${error instanceof Error ? error.message : "未知错误"}`, state: "error" };
|
|
506
625
|
}
|
|
507
626
|
}
|
|
@@ -599,6 +718,7 @@ export async function createFrameworkSession(input) {
|
|
|
599
718
|
...(input.agentVersionId ? { agentVersionId: input.agentVersionId } : {}),
|
|
600
719
|
model: input.model,
|
|
601
720
|
permission: input.permission ?? [],
|
|
721
|
+
...(input.writePaths?.length ? { writePaths: input.writePaths } : {}),
|
|
602
722
|
queuedPrompts: [],
|
|
603
723
|
time: { created: new Date().toISOString(), updated: new Date().toISOString() },
|
|
604
724
|
};
|