@downcity/agent 1.1.150 → 1.1.153

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 (46) hide show
  1. package/bin/executor/core-engine/CoreEngineRunner.d.ts.map +1 -1
  2. package/bin/executor/core-engine/CoreEngineRunner.js +8 -6
  3. package/bin/executor/core-engine/CoreEngineRunner.js.map +1 -1
  4. package/bin/executor/tools/plugin/PluginToolBridge.d.ts +1 -1
  5. package/bin/executor/tools/plugin/PluginToolBridge.d.ts.map +1 -1
  6. package/bin/executor/tools/plugin/PluginToolBridge.js +45 -17
  7. package/bin/executor/tools/plugin/PluginToolBridge.js.map +1 -1
  8. package/bin/executor/tools/plugin/types/PluginTool.d.ts +17 -0
  9. package/bin/executor/tools/plugin/types/PluginTool.d.ts.map +1 -1
  10. package/bin/executor/types/SessionRun.d.ts +6 -2
  11. package/bin/executor/types/SessionRun.d.ts.map +1 -1
  12. package/bin/executor/types/SessionRun.js +1 -1
  13. package/bin/session/browse/Browse.d.ts.map +1 -1
  14. package/bin/session/browse/Browse.js +10 -20
  15. package/bin/session/browse/Browse.js.map +1 -1
  16. package/bin/session/runtime/SessionPromptRuntime.d.ts +1 -1
  17. package/bin/session/runtime/SessionPromptRuntime.d.ts.map +1 -1
  18. package/bin/session/runtime/SessionPromptRuntime.js +3 -1
  19. package/bin/session/runtime/SessionPromptRuntime.js.map +1 -1
  20. package/bin/session/services/SessionStateService.d.ts +1 -1
  21. package/bin/session/services/SessionStateService.d.ts.map +1 -1
  22. package/bin/session/services/SessionStateService.js.map +1 -1
  23. package/bin/session/services/SessionTurnService.d.ts.map +1 -1
  24. package/bin/session/services/SessionTurnService.js +6 -2
  25. package/bin/session/services/SessionTurnService.js.map +1 -1
  26. package/bin/session/storage/Persistence.d.ts +5 -1
  27. package/bin/session/storage/Persistence.d.ts.map +1 -1
  28. package/bin/session/storage/Persistence.js +3 -1
  29. package/bin/session/storage/Persistence.js.map +1 -1
  30. package/bin/types/agent/SessionTypes.d.ts +2 -2
  31. package/package.json +3 -3
  32. package/scripts/image-plugin-job.test.mjs +138 -3
  33. package/scripts/plugin-tool-bridge.test.mjs +88 -0
  34. package/scripts/session-list-title.test.mjs +141 -0
  35. package/scripts/session-prompt-runtime.test.mjs +38 -0
  36. package/src/executor/core-engine/CoreEngineRunner.ts +16 -17
  37. package/src/executor/tools/plugin/PluginToolBridge.ts +54 -18
  38. package/src/executor/tools/plugin/types/PluginTool.ts +18 -0
  39. package/src/executor/types/SessionRun.ts +6 -2
  40. package/src/session/browse/Browse.ts +18 -22
  41. package/src/session/runtime/SessionPromptRuntime.ts +4 -2
  42. package/src/session/services/SessionStateService.ts +1 -1
  43. package/src/session/services/SessionTurnService.ts +7 -3
  44. package/src/session/storage/Persistence.ts +8 -2
  45. package/src/types/agent/SessionTypes.ts +2 -2
  46. package/tsconfig.tsbuildinfo +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SessionStateService.js","sourceRoot":"","sources":["../../../src/session/services/SessionStateService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionStateService.js","sourceRoot":"","sources":["../../../src/session/services/SessionStateService.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SessionTurnService.d.ts","sourceRoot":"","sources":["../../../src/session/services/SessionTurnService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAM9E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAGvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAEhF,KAAK,yBAAyB,GAAG;IAC/B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;OAEG;IACH,aAAa,EAAE,mBAAmB,CAAC;IAEnC;;OAEG;IACH,SAAS,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;gBAE1C,OAAO,EAAE,yBAAyB;IA4B9C;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAI7C;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,sBAAsB,GAAG,uBAAuB;IAItE;;OAEG;IACH,wBAAwB,IAAI,OAAO;IAInC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAW7E;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAI7C;;OAEG;YACW,mBAAmB;CAkFlC"}
1
+ {"version":3,"file":"SessionTurnService.d.ts","sourceRoot":"","sources":["../../../src/session/services/SessionTurnService.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AACjF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAM9E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAGvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAEhF,KAAK,yBAAyB,GAAG;IAC/B;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;OAEG;IACH,aAAa,EAAE,mBAAmB,CAAC;IAEnC;;OAEG;IACH,SAAS,EAAE,eAAe,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;gBAE1C,OAAO,EAAE,yBAAyB;IA4B9C;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI;IAI7C;;OAEG;IACH,SAAS,CAAC,UAAU,EAAE,sBAAsB,GAAG,uBAAuB;IAItE;;OAEG;IACH,wBAAwB,IAAI,OAAO;IAInC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAW7E;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAI7C;;OAEG;YACW,mBAAmB;CAsFlC"}
@@ -140,9 +140,13 @@ export class SessionTurnService {
140
140
  await this.state_service.persist_assistant_result(result.assistantMessage);
141
141
  await this.state_service.persist_deferred_user_messages(result.deferredPersistedUserMessages);
142
142
  return {
143
- text: extractTextFromUiMessage(result.assistantMessage),
143
+ text: result.assistantMessage
144
+ ? extractTextFromUiMessage(result.assistantMessage)
145
+ : "",
144
146
  success: result.success,
145
- assistantMessage: result.assistantMessage,
147
+ ...(result.assistantMessage
148
+ ? { assistantMessage: result.assistantMessage }
149
+ : {}),
146
150
  ...(result.error ? { error: result.error } : {}),
147
151
  };
148
152
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SessionTurnService.js","sourceRoot":"","sources":["../../../src/session/services/SessionTurnService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SessionTurnService.js","sourceRoot":"","sources":["../../../src/session/services/SessionTurnService.ts"],"names":[],"mappings":"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"}
@@ -49,8 +49,12 @@ export interface PersistSdkAssistantResultParams extends TouchSessionMetadataPar
49
49
  };
50
50
  /**
51
51
  * 本轮执行得到的 assistant 消息。
52
+ *
53
+ * 关键点(中文)
54
+ * - stop/abort 且没有 assistant 内容时允许为空。
55
+ * - 为空时仅刷新 metadata,不写入伪造 assistant 正文。
52
56
  */
53
- assistantMessage: SessionMessageV1;
57
+ assistantMessage?: SessionMessageV1 | null;
54
58
  }
55
59
  /**
56
60
  * 刷新 SDK session 元数据。
@@ -1 +1 @@
1
- {"version":3,"file":"Persistence.d.ts","sourceRoot":"","sources":["../../../src/session/storage/Persistence.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAM9E;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,aAAa,EAAE,0BAA0B,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,+BACf,SAAQ,0BAA0B;IAClC;;OAEG;IACH,QAAQ,EAAE;QACR,sBAAsB,CAAC,MAAM,EAAE;YAC7B;;eAEG;YACH,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;YAClC;;eAEG;YACH,YAAY,CAAC,EAAE,MAAM,CAAC;SACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACnB,CAAC;IACF;;OAEG;IACH,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,+BAA+B,GACtC,OAAO,CAAC,IAAI,CAAC,CAOf"}
1
+ {"version":3,"file":"Persistence.d.ts","sourceRoot":"","sources":["../../../src/session/storage/Persistence.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAM9E;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,aAAa,EAAE,0BAA0B,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,+BACf,SAAQ,0BAA0B;IAClC;;OAEG;IACH,QAAQ,EAAE;QACR,sBAAsB,CAAC,MAAM,EAAE;YAC7B;;eAEG;YACH,OAAO,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;YAClC;;eAEG;YACH,YAAY,CAAC,EAAE,MAAM,CAAC;SACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACnB,CAAC;IACF;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAC5C;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,+BAA+B,GACtC,OAAO,CAAC,IAAI,CAAC,CASf"}
@@ -42,7 +42,9 @@ export async function persistSdkAssistantResult(params) {
42
42
  await persistAssistantResult({
43
43
  writer: params.executor,
44
44
  assistantMessage: params.assistantMessage,
45
- fallbackText: extractTextFromUiMessage(params.assistantMessage),
45
+ fallbackText: params.assistantMessage
46
+ ? extractTextFromUiMessage(params.assistantMessage)
47
+ : undefined,
46
48
  });
47
49
  await touchSessionMetadata(params);
48
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Persistence.js","sourceRoot":"","sources":["../../../src/session/storage/Persistence.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AAGvF,OAAO,EAAE,sBAAsB,EAAE,MAAM,mDAAmD,CAAC;AAE3F,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AAkDvC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAkC;IAElC,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC;QACxC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAC;IACH,MAAM,IAAI,GAAyB;QACjC,GAAG,OAAO;QACV,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EACP,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;QACxE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU;YACjC,CAAC,CAAC;gBACE,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,UAAU;aAC5C;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,MAAM,oBAAoB,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAuC;IAEvC,MAAM,sBAAsB,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC,QAAQ;QACvB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,YAAY,EAAE,wBAAwB,CAAC,MAAM,CAAC,gBAAgB,CAAC;KAChE,CAAC,CAAC;IACH,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"Persistence.js","sourceRoot":"","sources":["../../../src/session/storage/Persistence.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AAGvF,OAAO,EAAE,sBAAsB,EAAE,MAAM,mDAAmD,CAAC;AAE3F,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AAsDvC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAkC;IAElC,MAAM,OAAO,GAAG,MAAM,mBAAmB,CAAC;QACxC,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC,CAAC;IACH,MAAM,IAAI,GAAyB;QACjC,GAAG,OAAO;QACV,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EACP,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;QACxE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU;YACjC,CAAC,CAAC;gBACE,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,UAAU;aAC5C;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,MAAM,oBAAoB,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAuC;IAEvC,MAAM,sBAAsB,CAAC;QAC3B,MAAM,EAAE,MAAM,CAAC,QAAQ;QACvB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;QACzC,YAAY,EAAE,MAAM,CAAC,gBAAgB;YACnC,CAAC,CAAC,wBAAwB,CAAC,MAAM,CAAC,gBAAgB,CAAC;YACnD,CAAC,CAAC,SAAS;KACd,CAAC,CAAC;IACH,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC"}
@@ -193,8 +193,8 @@ export interface AgentSessionSummary {
193
193
  *
194
194
  * 说明(中文)
195
195
  * - 标题持久化在 session `meta.json` 顶层。
196
- * - 首条用户消息出现后,SDK 会优先生成标题,失败时回退到首条用户消息截断。
197
- * - session 可能暂时没有标题,调用方可回退到 `sessionId`。
196
+ * - SDK 只在模型成功生成标题时写入,不再从首条用户消息生成 fallback。
197
+ * - 标题允许为空,调用方需要展示占位文案时可自行回退到 `sessionId`。
198
198
  */
199
199
  title?: string;
200
200
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@downcity/agent",
3
- "version": "1.1.150",
3
+ "version": "1.1.153",
4
4
  "type": "module",
5
5
  "description": "Downcity Agent 运行时 — 单 Agent 执行壳与本机 RPC 能力",
6
6
  "main": "./bin/index.js",
@@ -17,8 +17,8 @@
17
17
  },
18
18
  "dependencies": {
19
19
  "@ai-sdk/openai-compatible": "^2.0.48",
20
- "@downcity/shell": "^0.1.29",
21
- "@downcity/type": "0.1.63",
20
+ "@downcity/shell": "^0.1.30",
21
+ "@downcity/type": "0.1.64",
22
22
  "@larksuiteoapi/node-sdk": "^1.66.0",
23
23
  "ai": "^6.0.193",
24
24
  "commander": "^15.0.0",
@@ -2,15 +2,15 @@
2
2
  * @file 验证 ImagePlugin 对 Agent 保持直接生图体验。
3
3
  *
4
4
  * 关键点(中文)
5
- * - Agent 只调用 `generate` action。
6
- * - 插件内部调用注入的 image_create / image_result 任务函数并轮询。
5
+ * - 插件暴露 image_create / image_result 两个任务 action,并保留 generate 便捷 action。
6
+ * - image_result 默认轮询到终态,成功后返回 UIMessage 方便 tool bridge 自动挂载图片。
7
7
  * - 成功后返回 UIMessage,后续由 plugin bridge 落盘 file parts。
8
8
  */
9
9
 
10
10
  import test from "node:test";
11
11
  import assert from "node:assert/strict";
12
12
 
13
- import { ImagePlugin } from "../bin/index.js";
13
+ import { ImagePlugin } from "../../plugins/bin/index.js";
14
14
 
15
15
  function create_image_message() {
16
16
  return {
@@ -61,6 +61,141 @@ test("ImagePlugin generate creates and polls image jobs", async () => {
61
61
  ]);
62
62
  });
63
63
 
64
+ test("ImagePlugin image_create returns image job", async () => {
65
+ const plugin = new ImagePlugin({
66
+ image_create: (input) => ({
67
+ job_id: "img_1",
68
+ status: "queued",
69
+ poll_after_ms: 1,
70
+ metadata: { prompt: input.prompt },
71
+ }),
72
+ image_result: () => ({ job_id: "img_1", status: "queued", poll_after_ms: 1 }),
73
+ });
74
+
75
+ const result = await plugin.actions.image_create.execute({
76
+ context: {},
77
+ payload: { prompt: "draw" },
78
+ pluginName: "image",
79
+ actionName: "image_create",
80
+ });
81
+
82
+ assert.equal(result.success, true);
83
+ assert.equal(result.data.job_id, "img_1");
84
+ assert.equal(result.data.status, "queued");
85
+ });
86
+
87
+ test("ImagePlugin models lists image-capable models", async () => {
88
+ const plugin = new ImagePlugin({
89
+ list_models: () => [
90
+ {
91
+ id: "text_1",
92
+ name: "Text",
93
+ description: "text only",
94
+ modalities: ["text"],
95
+ tags: ["general"],
96
+ meta: {},
97
+ },
98
+ {
99
+ id: "image_1",
100
+ name: "Image",
101
+ description: "image model",
102
+ modalities: ["image"],
103
+ tags: ["creative"],
104
+ meta: { provider: "test" },
105
+ default_modalities: ["image"],
106
+ },
107
+ ],
108
+ image_create: () => ({ job_id: "img_1", status: "queued", poll_after_ms: 1 }),
109
+ image_result: () => ({ job_id: "img_1", status: "queued", poll_after_ms: 1 }),
110
+ });
111
+
112
+ const result = await plugin.actions.models.execute({
113
+ context: {},
114
+ payload: {},
115
+ pluginName: "image",
116
+ actionName: "models",
117
+ });
118
+
119
+ assert.equal(result.success, true);
120
+ assert.equal(result.data.default_model_id, "image_1");
121
+ assert.deepEqual(result.data.items.map((item) => item.id), ["image_1"]);
122
+ assert.equal(result.data.items[0].meta.provider, "test");
123
+ });
124
+
125
+ test("ImagePlugin image_result waits by default and returns final message", async () => {
126
+ const calls = [];
127
+ const message = create_image_message();
128
+ const plugin = new ImagePlugin({
129
+ min_poll_interval_ms: 1,
130
+ image_create: () => ({ job_id: "img_1", status: "queued", poll_after_ms: 1 }),
131
+ image_result: (input) => {
132
+ calls.push(input.job_id);
133
+ return calls.length === 1
134
+ ? { job_id: input.job_id, status: "running", poll_after_ms: 1 }
135
+ : { job_id: input.job_id, status: "succeeded", result: message, poll_after_ms: 1 };
136
+ },
137
+ });
138
+
139
+ const result = await plugin.actions.image_result.execute({
140
+ context: {},
141
+ payload: { job_id: "img_1" },
142
+ pluginName: "image",
143
+ actionName: "image_result",
144
+ });
145
+
146
+ assert.equal(result.success, true);
147
+ assert.equal(result.data.role, "assistant");
148
+ assert.equal(result.data.parts[0].type, "file");
149
+ assert.deepEqual(calls, ["img_1", "img_1"]);
150
+ });
151
+
152
+ test("ImagePlugin image_result can read once without waiting", async () => {
153
+ const calls = [];
154
+ const plugin = new ImagePlugin({
155
+ min_poll_interval_ms: 1,
156
+ image_create: () => ({ job_id: "img_1", status: "queued", poll_after_ms: 1 }),
157
+ image_result: (input) => {
158
+ calls.push(input.job_id);
159
+ return { job_id: input.job_id, status: "running", poll_after_ms: 1 };
160
+ },
161
+ });
162
+
163
+ const result = await plugin.actions.image_result.execute({
164
+ context: {},
165
+ payload: { job_id: "img_1", until_finish: false },
166
+ pluginName: "image",
167
+ actionName: "image_result",
168
+ });
169
+
170
+ assert.equal(result.success, true);
171
+ assert.equal(result.data.job_id, "img_1");
172
+ assert.equal(result.data.status, "running");
173
+ assert.deepEqual(calls, ["img_1"]);
174
+ });
175
+
176
+ test("ImagePlugin image_result reports failed terminal job by default", async () => {
177
+ const plugin = new ImagePlugin({
178
+ min_poll_interval_ms: 1,
179
+ image_create: () => ({ job_id: "img_1", status: "queued", poll_after_ms: 1 }),
180
+ image_result: (input) => ({
181
+ job_id: input.job_id,
182
+ status: "failed",
183
+ error: "provider failed",
184
+ poll_after_ms: 1,
185
+ }),
186
+ });
187
+
188
+ const result = await plugin.actions.image_result.execute({
189
+ context: {},
190
+ payload: { job_id: "img_1" },
191
+ pluginName: "image",
192
+ actionName: "image_result",
193
+ });
194
+
195
+ assert.equal(result.success, false);
196
+ assert.match(result.error, /provider failed/);
197
+ });
198
+
64
199
  test("ImagePlugin generate reports image failure", async () => {
65
200
  const plugin = new ImagePlugin({
66
201
  min_poll_interval_ms: 1,
@@ -0,0 +1,88 @@
1
+ /**
2
+ * @file 验证 plugin tool bridge 会把生成文件摘要为可打开路径。
3
+ *
4
+ * 关键点(中文)
5
+ * - assistant message 仍然使用 `resources://` URL,避免历史暴露本机路径。
6
+ * - tool result 额外返回本机绝对路径,便于模型与用户明确知道文件位置。
7
+ */
8
+
9
+ import test from "node:test";
10
+ import assert from "node:assert/strict";
11
+ import os from "node:os";
12
+ import path from "node:path";
13
+ import fs from "node:fs/promises";
14
+
15
+ import {
16
+ invokePluginCallTool,
17
+ setPluginToolRuntime,
18
+ } from "../bin/executor/tools/plugin/PluginToolBridge.js";
19
+ import { withSessionRunScope } from "../bin/executor/SessionRunScope.js";
20
+
21
+ function create_run_context(project_root) {
22
+ return {
23
+ sessionId: "session_test",
24
+ projectRoot: project_root,
25
+ injectedUserMessages: [],
26
+ deferredPersistedUserMessages: [],
27
+ pendingAssistantFileParts: [],
28
+ };
29
+ }
30
+
31
+ test("invokePluginCallTool returns absolute paths for materialized file parts", async () => {
32
+ const project_root = await fs.mkdtemp(
33
+ path.join(os.tmpdir(), "downcity-agent-plugin-tool-files-"),
34
+ );
35
+ const bytes = Buffer.from("png-bytes-for-plugin-tool", "utf8");
36
+
37
+ setPluginToolRuntime({
38
+ list: () => [],
39
+ availability: async () => ({ enabled: true, available: true, reasons: [] }),
40
+ runAction: async () => ({
41
+ success: true,
42
+ message: "image generated",
43
+ data: {
44
+ id: "msg_image_test",
45
+ role: "assistant",
46
+ parts: [
47
+ {
48
+ type: "file",
49
+ mediaType: "image/png",
50
+ filename: "image.png",
51
+ url: `data:image/png;base64,${bytes.toString("base64")}`,
52
+ },
53
+ ],
54
+ },
55
+ }),
56
+ pipeline: async (_, value) => value,
57
+ guard: async () => {},
58
+ effect: async () => {},
59
+ resolve: async () => {
60
+ throw new Error("not implemented");
61
+ },
62
+ });
63
+
64
+ const run_context = create_run_context(project_root);
65
+ const result = await withSessionRunScope({ runContext: run_context }, () =>
66
+ invokePluginCallTool({
67
+ plugin: "image",
68
+ action: "generate",
69
+ payload: { prompt: "draw" },
70
+ }),
71
+ );
72
+
73
+ assert.equal(result.success, true);
74
+ assert.equal(result.assistant_file_count, 1);
75
+ assert.equal(result.files?.length, 1);
76
+ assert.match(result.files[0].url, /^resources:\/\/\.downcity\/resources\//);
77
+ assert.equal(path.isAbsolute(result.files[0].path), true);
78
+ assert.equal(
79
+ path.dirname(result.files[0].path),
80
+ path.join(project_root, ".downcity", "resources"),
81
+ );
82
+ assert.deepEqual(await fs.readFile(result.files[0].path), bytes);
83
+ assert.equal("data" in result, false);
84
+
85
+ const pending_parts = run_context.pendingAssistantFileParts;
86
+ assert.equal(pending_parts.length, 1);
87
+ assert.equal(pending_parts[0].url, result.files[0].url);
88
+ });
@@ -0,0 +1,141 @@
1
+ /**
2
+ * @file 验证 session 列表从正确目录读取持久化 title。
3
+ *
4
+ * 关键点(中文)
5
+ * - 普通列表只读取 `.downcity/agents/<agentId>/sessions` 下的 meta。
6
+ * - 归档列表只读取 `.downcity/agents/<agentId>/archived-sessions` 下的 meta。
7
+ * - title 允许为空;这里仅验证已由模型生成并落盘的 title 能被列表返回。
8
+ */
9
+
10
+ import test from "node:test";
11
+ import assert from "node:assert/strict";
12
+ import os from "node:os";
13
+ import path from "node:path";
14
+ import fs from "node:fs/promises";
15
+
16
+ import { MockLanguageModelV3 } from "ai/test";
17
+ import { Agent } from "../bin/index.js";
18
+
19
+ function create_mock_title_model(title_text) {
20
+ return new MockLanguageModelV3({
21
+ modelId: "mock-session-list-title-model",
22
+ doGenerate: async () => ({
23
+ content: [
24
+ {
25
+ type: "text",
26
+ text: title_text,
27
+ },
28
+ ],
29
+ finishReason: "stop",
30
+ usage: {
31
+ inputTokens: {
32
+ total: 0,
33
+ noCache: 0,
34
+ cacheRead: 0,
35
+ cacheWrite: 0,
36
+ },
37
+ outputTokens: {
38
+ total: 0,
39
+ text: 0,
40
+ reasoning: 0,
41
+ },
42
+ },
43
+ warnings: [],
44
+ }),
45
+ });
46
+ }
47
+
48
+ async function create_agent_with_titled_session(input) {
49
+ const agent_path = await fs.mkdtemp(
50
+ path.join(os.tmpdir(), input.tmp_prefix),
51
+ );
52
+ const agent = new Agent({
53
+ id: input.agent_id,
54
+ path: agent_path,
55
+ model: create_mock_title_model(input.title),
56
+ });
57
+ const collection = agent.session_collection();
58
+ const session = await collection.create_session({
59
+ sessionId: input.session_id,
60
+ });
61
+
62
+ await session.appendUserMessage({
63
+ text: input.first_user_text,
64
+ });
65
+
66
+ return {
67
+ agent,
68
+ collection,
69
+ session,
70
+ };
71
+ }
72
+
73
+ test("list_sessions returns persisted title from active session metadata", async () => {
74
+ const { agent, collection, session } = await create_agent_with_titled_session({
75
+ tmp_prefix: "downcity-agent-session-list-title-",
76
+ agent_id: "list_title_agent",
77
+ session_id: "active_session",
78
+ title: "列表标题",
79
+ first_user_text: "Need the session list to show the generated title",
80
+ });
81
+
82
+ try {
83
+ const page = await collection.list_sessions();
84
+
85
+ assert.equal(page.total, 1);
86
+ assert.deepEqual(
87
+ page.items.map((item) => ({
88
+ sessionId: item.sessionId,
89
+ title: item.title,
90
+ messageCount: item.messageCount,
91
+ })),
92
+ [
93
+ {
94
+ sessionId: session.id,
95
+ title: "列表标题",
96
+ messageCount: 1,
97
+ },
98
+ ],
99
+ );
100
+ } finally {
101
+ await agent.dispose();
102
+ }
103
+ });
104
+
105
+ test("archive_sessions returns title from archived session metadata", async () => {
106
+ const { agent, collection, session } = await create_agent_with_titled_session({
107
+ tmp_prefix: "downcity-agent-archive-list-title-",
108
+ agent_id: "archive_list_title_agent",
109
+ session_id: "archived_session",
110
+ title: "归档标题",
111
+ first_user_text: "Archive this titled session",
112
+ });
113
+
114
+ try {
115
+ await collection.archive_session({
116
+ id: session.id,
117
+ });
118
+
119
+ const active_page = await collection.list_sessions();
120
+ const archived_page = await collection.archive_sessions();
121
+
122
+ assert.equal(active_page.total, 0);
123
+ assert.equal(archived_page.total, 1);
124
+ assert.deepEqual(
125
+ archived_page.items.map((item) => ({
126
+ sessionId: item.sessionId,
127
+ title: item.title,
128
+ messageCount: item.messageCount,
129
+ })),
130
+ [
131
+ {
132
+ sessionId: session.id,
133
+ title: "归档标题",
134
+ messageCount: 1,
135
+ },
136
+ ],
137
+ );
138
+ } finally {
139
+ await agent.dispose();
140
+ }
141
+ });
@@ -247,3 +247,41 @@ test("SessionPromptRuntime stops current turn and cancels unmerged queued prompt
247
247
  ["turn-start", "turn-start", "turn-finish", "turn-finish"],
248
248
  );
249
249
  });
250
+
251
+ test("SessionPromptRuntime does not synthesize assistant text when stopped before output", async () => {
252
+ const executionFinished = createDeferred();
253
+
254
+ const runtime = new SessionPromptRuntime({
255
+ sessionId: "test",
256
+ publish: () => {},
257
+ createAndPersistUserMessage: async (input) => {
258
+ return createUserMessage(input.query, 1);
259
+ },
260
+ executeTurn: async (input) => {
261
+ await new Promise((resolve) => {
262
+ input.abortSignal.addEventListener("abort", resolve, { once: true });
263
+ });
264
+ await executionFinished.promise;
265
+ return {
266
+ text: "",
267
+ success: false,
268
+ error: "Turn stopped",
269
+ };
270
+ },
271
+ stopTurn: () => {
272
+ executionFinished.resolve();
273
+ return true;
274
+ },
275
+ });
276
+
277
+ const turn = await runtime.prompt({ query: "first" });
278
+ await waitUntil(() => runtime.isActive());
279
+
280
+ runtime.stop();
281
+ const result = await turn.finished;
282
+
283
+ assert.equal(result.success, false);
284
+ assert.equal(result.error, "Turn stopped");
285
+ assert.equal(result.text, "");
286
+ assert.equal(result.assistantMessage, undefined);
287
+ });
@@ -227,6 +227,15 @@ export class CoreEngineRunner {
227
227
  abortSignal: input.run_context.abortSignal,
228
228
  });
229
229
 
230
+ final_assistant_ui_message = mergeAssistantUiMessages(
231
+ final_assistant_ui_message,
232
+ step_assistant_ui_message,
233
+ );
234
+
235
+ // 关键点(中文):先保存本 step 已收敛的 assistant 消息,再等待 steps。
236
+ // stop/abort 时 `result.steps` 可能抛错,但当前已经生成的文本仍应沉淀。
237
+ message_state.appendRuntimeSessionMessage(step_assistant_ui_message);
238
+
230
239
  const executed_steps = await result.steps;
231
240
  const last_step = executed_steps[executed_steps.length - 1];
232
241
  if (!last_step) break;
@@ -313,14 +322,6 @@ export class CoreEngineRunner {
313
322
  : [];
314
323
  message_state.appendModelMessages(response_messages);
315
324
 
316
- final_assistant_ui_message = mergeAssistantUiMessages(
317
- final_assistant_ui_message,
318
- step_assistant_ui_message,
319
- );
320
-
321
- // 关键点(中文):把本 step 的 assistant UI 消息并入运行时上下文,保证后续全量重算不丢历史。
322
- message_state.appendRuntimeSessionMessage(step_assistant_ui_message);
323
-
324
325
  if (loop_decision.continueForToolCalls) {
325
326
  text_only_continuation_count = 0;
326
327
  incomplete_response_recovery_count = 0;
@@ -414,18 +415,16 @@ export class CoreEngineRunner {
414
415
  await this.logger.log("info", "[agent] stopped", {
415
416
  sessionId: session_id,
416
417
  });
417
- const stopped_message = mergePendingAssistantFileParts(
418
- final_assistant_ui_message ||
419
- this.context_composer.buildFallbackAssistantMessage(
420
- error_text,
421
- input.run_context,
422
- ),
423
- input.run_context.pendingAssistantFileParts,
424
- );
418
+ const stopped_message = final_assistant_ui_message
419
+ ? mergePendingAssistantFileParts(
420
+ final_assistant_ui_message,
421
+ input.run_context.pendingAssistantFileParts,
422
+ )
423
+ : null;
425
424
  return {
426
425
  success: false,
427
426
  error: error_text,
428
- assistantMessage: stopped_message,
427
+ ...(stopped_message ? { assistantMessage: stopped_message } : {}),
429
428
  deferredPersistedUserMessages: [
430
429
  ...input.run_context.deferredPersistedUserMessages,
431
430
  ],