@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.
Files changed (145) hide show
  1. package/README.md +37 -0
  2. package/dist/adapters/openai-provider.d.ts +31 -2
  3. package/dist/adapters/openai-provider.d.ts.map +1 -1
  4. package/dist/adapters/openai-provider.js +118 -74
  5. package/dist/adapters/openai-provider.js.map +1 -1
  6. package/dist/adapters/subprocess-sandbox.d.ts +4 -5
  7. package/dist/adapters/subprocess-sandbox.d.ts.map +1 -1
  8. package/dist/adapters/subprocess-sandbox.js +106 -18
  9. package/dist/adapters/subprocess-sandbox.js.map +1 -1
  10. package/dist/adapters/terminal-backend.d.ts +5 -0
  11. package/dist/adapters/terminal-backend.d.ts.map +1 -0
  12. package/dist/adapters/terminal-backend.js +153 -0
  13. package/dist/adapters/terminal-backend.js.map +1 -0
  14. package/dist/cli.js +0 -0
  15. package/dist/core/agent/registry.d.ts +3 -0
  16. package/dist/core/agent/registry.d.ts.map +1 -1
  17. package/dist/core/agent/registry.js +9 -2
  18. package/dist/core/agent/registry.js.map +1 -1
  19. package/dist/core/events/manifest.d.ts +29 -4
  20. package/dist/core/events/manifest.d.ts.map +1 -1
  21. package/dist/core/events/manifest.js +21 -0
  22. package/dist/core/events/manifest.js.map +1 -1
  23. package/dist/core/mcp/client.d.ts +46 -0
  24. package/dist/core/mcp/client.d.ts.map +1 -0
  25. package/dist/core/mcp/client.js +286 -0
  26. package/dist/core/mcp/client.js.map +1 -0
  27. package/dist/core/mcp/http-client.d.ts +54 -0
  28. package/dist/core/mcp/http-client.d.ts.map +1 -0
  29. package/dist/core/mcp/http-client.js +385 -0
  30. package/dist/core/mcp/http-client.js.map +1 -0
  31. package/dist/core/mcp/servers.d.ts +30 -0
  32. package/dist/core/mcp/servers.d.ts.map +1 -0
  33. package/dist/core/mcp/servers.js +104 -0
  34. package/dist/core/mcp/servers.js.map +1 -0
  35. package/dist/core/permission/ruleset.d.ts +1 -1
  36. package/dist/core/permission/ruleset.d.ts.map +1 -1
  37. package/dist/core/permission/ruleset.js +4 -0
  38. package/dist/core/permission/ruleset.js.map +1 -1
  39. package/dist/core/permission/write-path.d.ts +27 -0
  40. package/dist/core/permission/write-path.d.ts.map +1 -0
  41. package/dist/core/permission/write-path.js +52 -0
  42. package/dist/core/permission/write-path.js.map +1 -0
  43. package/dist/core/repomap/cache.d.ts +24 -0
  44. package/dist/core/repomap/cache.d.ts.map +1 -0
  45. package/dist/core/repomap/cache.js +59 -0
  46. package/dist/core/repomap/cache.js.map +1 -0
  47. package/dist/core/repomap/graph.d.ts +14 -0
  48. package/dist/core/repomap/graph.d.ts.map +1 -0
  49. package/dist/core/repomap/graph.js +89 -0
  50. package/dist/core/repomap/graph.js.map +1 -0
  51. package/dist/core/repomap/render.d.ts +10 -0
  52. package/dist/core/repomap/render.d.ts.map +1 -0
  53. package/dist/core/repomap/render.js +33 -0
  54. package/dist/core/repomap/render.js.map +1 -0
  55. package/dist/core/repomap/repomap.d.ts +38 -0
  56. package/dist/core/repomap/repomap.d.ts.map +1 -0
  57. package/dist/core/repomap/repomap.js +116 -0
  58. package/dist/core/repomap/repomap.js.map +1 -0
  59. package/dist/core/repomap/tags.d.ts +26 -0
  60. package/dist/core/repomap/tags.d.ts.map +1 -0
  61. package/dist/core/repomap/tags.js +191 -0
  62. package/dist/core/repomap/tags.js.map +1 -0
  63. package/dist/core/runtime/compaction.d.ts +26 -14
  64. package/dist/core/runtime/compaction.d.ts.map +1 -1
  65. package/dist/core/runtime/compaction.js +46 -34
  66. package/dist/core/runtime/compaction.js.map +1 -1
  67. package/dist/core/runtime/lifecycle.d.ts +79 -0
  68. package/dist/core/runtime/lifecycle.d.ts.map +1 -0
  69. package/dist/core/runtime/lifecycle.js +71 -0
  70. package/dist/core/runtime/lifecycle.js.map +1 -0
  71. package/dist/core/runtime/pi-bridge.d.ts +4 -1
  72. package/dist/core/runtime/pi-bridge.d.ts.map +1 -1
  73. package/dist/core/runtime/pi-bridge.js +15 -1
  74. package/dist/core/runtime/pi-bridge.js.map +1 -1
  75. package/dist/core/runtime/run-transcript.d.ts +14 -0
  76. package/dist/core/runtime/run-transcript.d.ts.map +1 -0
  77. package/dist/core/runtime/run-transcript.js +35 -0
  78. package/dist/core/runtime/run-transcript.js.map +1 -0
  79. package/dist/core/runtime/runner.d.ts +38 -9
  80. package/dist/core/runtime/runner.d.ts.map +1 -1
  81. package/dist/core/runtime/runner.js +140 -20
  82. package/dist/core/runtime/runner.js.map +1 -1
  83. package/dist/core/session/sqlite-store.d.ts +18 -0
  84. package/dist/core/session/sqlite-store.d.ts.map +1 -0
  85. package/dist/core/session/sqlite-store.js +159 -0
  86. package/dist/core/session/sqlite-store.js.map +1 -0
  87. package/dist/core/session/types.d.ts +12 -0
  88. package/dist/core/session/types.d.ts.map +1 -1
  89. package/dist/core/tools/adapter.d.ts +11 -4
  90. package/dist/core/tools/adapter.d.ts.map +1 -1
  91. package/dist/core/tools/adapter.js +167 -8
  92. package/dist/core/tools/adapter.js.map +1 -1
  93. package/dist/core/tools/builtins.d.ts.map +1 -1
  94. package/dist/core/tools/builtins.js +5 -2
  95. package/dist/core/tools/builtins.js.map +1 -1
  96. package/dist/core/tools/context.d.ts +2 -0
  97. package/dist/core/tools/context.d.ts.map +1 -1
  98. package/dist/core/tools/def.d.ts +25 -0
  99. package/dist/core/tools/def.d.ts.map +1 -1
  100. package/dist/core/tools/def.js +3 -1
  101. package/dist/core/tools/def.js.map +1 -1
  102. package/dist/core/tools/git.d.ts +12 -0
  103. package/dist/core/tools/git.d.ts.map +1 -0
  104. package/dist/core/tools/git.js +189 -0
  105. package/dist/core/tools/git.js.map +1 -0
  106. package/dist/core/tools/patch.d.ts +45 -0
  107. package/dist/core/tools/patch.d.ts.map +1 -0
  108. package/dist/core/tools/patch.js +224 -0
  109. package/dist/core/tools/patch.js.map +1 -0
  110. package/dist/core/tools/qa-check.d.ts.map +1 -1
  111. package/dist/core/tools/qa-check.js +9 -2
  112. package/dist/core/tools/qa-check.js.map +1 -1
  113. package/dist/core/tools/repomap.d.ts +8 -0
  114. package/dist/core/tools/repomap.d.ts.map +1 -0
  115. package/dist/core/tools/repomap.js +34 -0
  116. package/dist/core/tools/repomap.js.map +1 -0
  117. package/dist/core/tools/terminal.d.ts +80 -0
  118. package/dist/core/tools/terminal.d.ts.map +1 -0
  119. package/dist/core/tools/terminal.js +265 -0
  120. package/dist/core/tools/terminal.js.map +1 -0
  121. package/dist/core/tools/trim.d.ts +31 -0
  122. package/dist/core/tools/trim.d.ts.map +1 -0
  123. package/dist/core/tools/trim.js +98 -0
  124. package/dist/core/tools/trim.js.map +1 -0
  125. package/dist/core/tools/webfetch.d.ts +10 -0
  126. package/dist/core/tools/webfetch.d.ts.map +1 -0
  127. package/dist/core/tools/webfetch.js +104 -0
  128. package/dist/core/tools/webfetch.js.map +1 -0
  129. package/dist/core/tools/websearch.d.ts +19 -0
  130. package/dist/core/tools/websearch.d.ts.map +1 -0
  131. package/dist/core/tools/websearch.js +132 -0
  132. package/dist/core/tools/websearch.js.map +1 -0
  133. package/dist/index.d.ts +30 -5
  134. package/dist/index.d.ts.map +1 -1
  135. package/dist/index.js +19 -1
  136. package/dist/index.js.map +1 -1
  137. package/dist/server/create-agent-runtime.d.ts +68 -0
  138. package/dist/server/create-agent-runtime.d.ts.map +1 -0
  139. package/dist/server/create-agent-runtime.js +67 -0
  140. package/dist/server/create-agent-runtime.js.map +1 -0
  141. package/dist/server/create-server.d.ts +5 -0
  142. package/dist/server/create-server.d.ts.map +1 -1
  143. package/dist/server/create-server.js +2 -0
  144. package/dist/server/create-server.js.map +1 -1
  145. 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 { ToolDef } from "../tools/def.js";
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?: ToolDef[];
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":"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"}
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 { adaptTool, permissionForCall } from "../tools/adapter.js";
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
- async buildCompaction(session, emit) {
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
- const workspace = this.deps.workspaceFor(session);
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) => adaptTool(def, toolContext));
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
- // NOTE: deliberately NOT setting thinkingLevel here. The relay backend
269
- // rejects `reasoning_effort` in its request schema (400 INVALID_BODY),
270
- // so any non-"off" thinking level breaks every model call. If reasoning
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: await this.rebuildMessages(session.id),
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 parsed = toolDefs.get("edit")?.parameters.safeParse(args);
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
- await agent.prompt(input.text);
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: "(上轮回复生成中断,请继续完成回复。)" }], timestamp: Date.now() },
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
- permission: [...parent.permission],
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
- const childRunner = new SessionRunner(this.deps);
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
  };