aws-runtime-bridge 1.9.40 → 1.9.45

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 (119) hide show
  1. package/dist/adapter/AcodeSdkAdapter.d.ts +31 -4
  2. package/dist/adapter/AcodeSdkAdapter.d.ts.map +1 -1
  3. package/dist/adapter/AcodeSdkAdapter.js +382 -57
  4. package/dist/adapter/ClaudeSdkAdapter.d.ts.map +1 -1
  5. package/dist/adapter/ClaudeSdkAdapter.js +1 -0
  6. package/dist/adapter/OpencodeSdkAdapter.d.ts +19 -0
  7. package/dist/adapter/OpencodeSdkAdapter.d.ts.map +1 -1
  8. package/dist/adapter/OpencodeSdkAdapter.js +62 -0
  9. package/dist/adapter/types.d.ts +21 -6
  10. package/dist/adapter/types.d.ts.map +1 -1
  11. package/dist/adapter/types.js +10 -1
  12. package/dist/index.js +11 -0
  13. package/dist/routes/ai-sources.js +4 -1
  14. package/dist/routes/dashboard.d.ts.map +1 -1
  15. package/dist/routes/dashboard.js +1 -1
  16. package/dist/routes/file-browser.d.ts.map +1 -1
  17. package/dist/routes/file-browser.js +47 -1
  18. package/dist/routes/processes.d.ts.map +1 -1
  19. package/dist/routes/processes.js +7 -0
  20. package/dist/routes/runtime-binding.d.ts.map +1 -1
  21. package/dist/routes/runtime-binding.js +6 -3
  22. package/dist/routes/sessions.js +93 -5
  23. package/dist/routes/sub-agents.js +15 -1
  24. package/dist/routes/terminal.d.ts +15 -0
  25. package/dist/routes/terminal.d.ts.map +1 -1
  26. package/dist/routes/terminal.js +162 -5
  27. package/dist/services/acode-package.d.ts +8 -1
  28. package/dist/services/acode-package.d.ts.map +1 -1
  29. package/dist/services/acode-package.js +33 -4
  30. package/dist/services/aws-client-agent-mcp.d.ts.map +1 -1
  31. package/dist/services/aws-client-agent-mcp.js +11 -4
  32. package/dist/services/fileSnapshotStore.js +1 -1
  33. package/dist/services/legacy-path-migration.d.ts +3 -0
  34. package/dist/services/legacy-path-migration.d.ts.map +1 -0
  35. package/dist/services/legacy-path-migration.js +66 -0
  36. package/dist/services/lifecycle-state.d.ts.map +1 -1
  37. package/dist/services/lifecycle-state.js +1 -1
  38. package/dist/services/runtime-binding.d.ts +5 -0
  39. package/dist/services/runtime-binding.d.ts.map +1 -1
  40. package/dist/services/runtime-binding.js +33 -1
  41. package/dist/services/session-output.d.ts +7 -1
  42. package/dist/services/session-output.d.ts.map +1 -1
  43. package/dist/services/session-output.js +16 -2
  44. package/dist/services/workspace-files.d.ts +48 -0
  45. package/dist/services/workspace-files.d.ts.map +1 -1
  46. package/dist/services/workspace-files.js +285 -0
  47. package/package/acode/dist/built-in-file-tools.d.ts.map +1 -1
  48. package/package/acode/dist/built-in-file-tools.js +504 -3
  49. package/package/acode/dist/compaction.d.ts +43 -7
  50. package/package/acode/dist/compaction.d.ts.map +1 -1
  51. package/package/acode/dist/compaction.js +286 -31
  52. package/package/acode/dist/runtime.d.ts +130 -0
  53. package/package/acode/dist/runtime.d.ts.map +1 -1
  54. package/package/acode/dist/runtime.js +972 -71
  55. package/package/acode/dist/sub-agent-manager.d.ts +96 -1
  56. package/package/acode/dist/sub-agent-manager.d.ts.map +1 -1
  57. package/package/acode/dist/sub-agent-manager.js +293 -3
  58. package/package/acode/dist/sub-agent-store.d.ts +8 -1
  59. package/package/acode/dist/sub-agent-store.d.ts.map +1 -1
  60. package/package/acode/dist/sub-agent-store.js +55 -0
  61. package/package/acode/dist/sub-agent-tools.d.ts.map +1 -1
  62. package/package/acode/dist/sub-agent-tools.js +5 -4
  63. package/package/acode/dist/sub-agent-types.d.ts +4 -0
  64. package/package/acode/dist/sub-agent-types.d.ts.map +1 -1
  65. package/package/acode/dist/types.d.ts +19 -0
  66. package/package/acode/dist/types.d.ts.map +1 -1
  67. package/package/aws-client-agent-mcp/dist/agent-client.d.ts +9 -0
  68. package/package/aws-client-agent-mcp/dist/agent-client.d.ts.map +1 -1
  69. package/package/aws-client-agent-mcp/dist/agent-client.js +69 -10
  70. package/package/aws-client-agent-mcp/dist/agent-client.js.map +1 -1
  71. package/package/aws-client-agent-mcp/dist/config.d.ts.map +1 -1
  72. package/package/aws-client-agent-mcp/dist/config.js +4 -0
  73. package/package/aws-client-agent-mcp/dist/config.js.map +1 -1
  74. package/package/aws-client-agent-mcp/dist/constants.d.ts +2 -0
  75. package/package/aws-client-agent-mcp/dist/constants.d.ts.map +1 -1
  76. package/package/aws-client-agent-mcp/dist/constants.js +3 -1
  77. package/package/aws-client-agent-mcp/dist/constants.js.map +1 -1
  78. package/package/aws-client-agent-mcp/dist/context-manager.d.ts +4 -1
  79. package/package/aws-client-agent-mcp/dist/context-manager.d.ts.map +1 -1
  80. package/package/aws-client-agent-mcp/dist/context-manager.js +6 -2
  81. package/package/aws-client-agent-mcp/dist/context-manager.js.map +1 -1
  82. package/package/aws-client-agent-mcp/dist/context-manager.test.js +5 -0
  83. package/package/aws-client-agent-mcp/dist/context-manager.test.js.map +1 -1
  84. package/package/aws-client-agent-mcp/dist/http-client.d.ts +5 -0
  85. package/package/aws-client-agent-mcp/dist/http-client.d.ts.map +1 -1
  86. package/package/aws-client-agent-mcp/dist/http-client.js +15 -1
  87. package/package/aws-client-agent-mcp/dist/http-client.js.map +1 -1
  88. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts +102 -34
  89. package/package/aws-client-agent-mcp/dist/mcp-server.d.ts.map +1 -1
  90. package/package/aws-client-agent-mcp/dist/mcp-server.js +637 -209
  91. package/package/aws-client-agent-mcp/dist/mcp-server.js.map +1 -1
  92. package/package/aws-client-agent-mcp/dist/mcp-server.test.js +151 -51
  93. package/package/aws-client-agent-mcp/dist/mcp-server.test.js.map +1 -1
  94. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts +7 -0
  95. package/package/aws-client-agent-mcp/dist/mcp-tools.d.ts.map +1 -1
  96. package/package/aws-client-agent-mcp/dist/mcp-tools.js +18 -0
  97. package/package/aws-client-agent-mcp/dist/mcp-tools.js.map +1 -1
  98. package/package/aws-client-agent-mcp/dist/memory-store.d.ts +32 -9
  99. package/package/aws-client-agent-mcp/dist/memory-store.d.ts.map +1 -1
  100. package/package/aws-client-agent-mcp/dist/memory-store.js +58 -19
  101. package/package/aws-client-agent-mcp/dist/memory-store.js.map +1 -1
  102. package/package/aws-client-agent-mcp/dist/memory-tools.js +3 -3
  103. package/package/aws-client-agent-mcp/dist/memory-tools.js.map +1 -1
  104. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts +21 -1
  105. package/package/aws-client-agent-mcp/dist/message-buffer.d.ts.map +1 -1
  106. package/package/aws-client-agent-mcp/dist/message-buffer.js +47 -21
  107. package/package/aws-client-agent-mcp/dist/message-buffer.js.map +1 -1
  108. package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts +13 -0
  109. package/package/aws-client-agent-mcp/dist/server-memory-store.d.ts.map +1 -1
  110. package/package/aws-client-agent-mcp/dist/server-memory-store.js +18 -0
  111. package/package/aws-client-agent-mcp/dist/server-memory-store.js.map +1 -1
  112. package/package/aws-client-agent-mcp/dist/types.d.ts +9 -0
  113. package/package/aws-client-agent-mcp/dist/types.d.ts.map +1 -1
  114. package/package/aws-client-agent-mcp/dist/types.js.map +1 -1
  115. package/package/aws-client-agent-mcp/dist/websocket-client.d.ts +34 -1
  116. package/package/aws-client-agent-mcp/dist/websocket-client.d.ts.map +1 -1
  117. package/package/aws-client-agent-mcp/dist/websocket-client.js +146 -18
  118. package/package/aws-client-agent-mcp/dist/websocket-client.js.map +1 -1
  119. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ClaudeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/ClaudeSdkAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClaudeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/ClaudeSdkAdapter.ts"],"names":[],"mappings":"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"}
@@ -853,6 +853,7 @@ export class ClaudeSdkAdapter extends EventEmitter {
853
853
  this.pendingQuestions.set(sessionId, { resolve, toolInput });
854
854
  this.emit('ask-user-question', {
855
855
  sessionId,
856
+ toolCallId: this.activeToolUseIds.get(sessionId) || undefined,
856
857
  questions: toolInput.questions,
857
858
  });
858
859
  });
@@ -57,6 +57,25 @@ export declare class OpencodeSdkAdapter extends EventEmitter implements BaseProv
57
57
  private runSseLoop;
58
58
  private handleOpenCodeEvent;
59
59
  private handlePartUpdate;
60
+ /**
61
+ * 同步 todowrite 工具调用的 todo 到公共 TodoStore 路径 ~/.acode/todos/{agentId}.json。
62
+ *
63
+ * OpenCode 内置 todowrite 工具与 ACode 共享同一文件格式,确保 poll_message
64
+ * 的 buildTodoReminderNotification() 能在 OpenCode runtime 下正确感知未完成 todo。
65
+ *
66
+ * 触发条件:
67
+ * - toolName 为 todowrite 或 todo_write
68
+ * - state.status 为 completed(工具调用成功完成)
69
+ * - session.config.agentId 存在
70
+ * - toolInput 包含有效的 todos 数组
71
+ *
72
+ * 写入格式(与 ACode TodoStore 一致):
73
+ * { agentId, updatedAt, background, todos: [{content, status, priority}] }
74
+ *
75
+ * 测试替身可通过覆写 getTodoStoreDir 注入临时目录。
76
+ */
77
+ private getTodoStoreDir;
78
+ private syncTodosFromToolCall;
60
79
  private emitEvent;
61
80
  private startIdleDetection;
62
81
  private stopIdleDetection;
@@ -1 +1 @@
1
- {"version":3,"file":"OpencodeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/OpencodeSdkAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAkB3C,OAAO,EAKL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EAExB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AA8HpB,qBAAa,kBAAmB,SAAQ,YAAa,YAAW,mBAAmB;IACjF,QAAQ,CAAC,UAAU,cAAc;IACjC,QAAQ,CAAC,WAAW,cAAc;IAElC,OAAO,CAAC,QAAQ,CAA2C;IAC3D,OAAO,CAAC,SAAS,CAAC,CAAoB;IAEhC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkK5E,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDzG,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnE,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7F,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAUnG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAclD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BxD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAIzD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3D,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI9D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOpD,OAAO,IAAI,IAAI;IAaf;;;OAGG;YACW,OAAO;YA2BP,aAAa;IAmB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAahC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,YAAY;YAYN,UAAU;IAuBxB,OAAO,CAAC,mBAAmB;IAiJ3B,OAAO,CAAC,gBAAgB;IAkHxB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,kBAAkB;IAuC1B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,2BAA2B;CAOpC"}
1
+ {"version":3,"file":"OpencodeSdkAdapter.d.ts","sourceRoot":"","sources":["../../src/adapter/OpencodeSdkAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAkB3C,OAAO,EAKL,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EAExB,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AA8HpB,qBAAa,kBAAmB,SAAQ,YAAa,YAAW,mBAAmB;IACjF,QAAQ,CAAC,UAAU,cAAc;IACjC,QAAQ,CAAC,WAAW,cAAc;IAElC,OAAO,CAAC,QAAQ,CAA2C;IAC3D,OAAO,CAAC,SAAS,CAAC,CAAoB;IAEhC,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAkK5E,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDzG,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnE,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7F,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAUnG,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAclD,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BxD,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,EAAE;IAIzD,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI3D,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI9D,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAOpD,OAAO,IAAI,IAAI;IAaf;;;OAGG;YACW,OAAO;YA2BP,aAAa;IAmB3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAO3B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAahC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,YAAY;YAYN,UAAU;IAuBxB,OAAO,CAAC,mBAAmB;IAiJ3B,OAAO,CAAC,gBAAgB;IAwHxB;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,eAAe;YAIT,qBAAqB;IA0CnC,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,kBAAkB;IAuC1B,OAAO,CAAC,iBAAiB;IASzB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,2BAA2B;CAOpC"}
@@ -720,6 +720,12 @@ export class OpencodeSdkAdapter extends EventEmitter {
720
720
  this.emit('status-change', sessionId, 'tool_using', { ...actionInfo, usage: session.adapterSession.totalUsage });
721
721
  }
722
722
  else if (state.status === 'completed') {
723
+ // 同步 todowrite 工具完成的 todo 到公共 TodoStore 路径,供 poll_message 提醒使用
724
+ if (toolName === 'todowrite' || toolName === 'todo_write') {
725
+ this.syncTodosFromToolCall(session, toolInput).catch((err) => {
726
+ console.warn('[OpencodeSdkAdapter] 同步 todo 到文件失败:', err);
727
+ });
728
+ }
723
729
  emitToolStart();
724
730
  const output = redactTransientClipboardPastePaths(state.output);
725
731
  this.emitEvent({
@@ -745,6 +751,62 @@ export class OpencodeSdkAdapter extends EventEmitter {
745
751
  }
746
752
  }
747
753
  }
754
+ /**
755
+ * 同步 todowrite 工具调用的 todo 到公共 TodoStore 路径 ~/.acode/todos/{agentId}.json。
756
+ *
757
+ * OpenCode 内置 todowrite 工具与 ACode 共享同一文件格式,确保 poll_message
758
+ * 的 buildTodoReminderNotification() 能在 OpenCode runtime 下正确感知未完成 todo。
759
+ *
760
+ * 触发条件:
761
+ * - toolName 为 todowrite 或 todo_write
762
+ * - state.status 为 completed(工具调用成功完成)
763
+ * - session.config.agentId 存在
764
+ * - toolInput 包含有效的 todos 数组
765
+ *
766
+ * 写入格式(与 ACode TodoStore 一致):
767
+ * { agentId, updatedAt, background, todos: [{content, status, priority}] }
768
+ *
769
+ * 测试替身可通过覆写 getTodoStoreDir 注入临时目录。
770
+ */
771
+ getTodoStoreDir() {
772
+ return path.join(os.homedir(), '.acode', 'todos');
773
+ }
774
+ async syncTodosFromToolCall(session, toolInput) {
775
+ const agentId = session.config.agentId;
776
+ if (!agentId)
777
+ return;
778
+ const rawTodos = toolInput['todos'];
779
+ if (!Array.isArray(rawTodos) || rawTodos.length === 0)
780
+ return;
781
+ // 校验并标准化为 TodoItem 格式
782
+ const todos = [];
783
+ for (const item of rawTodos) {
784
+ if (item && typeof item === 'object') {
785
+ const content = typeof item.content === 'string' ? item.content.trim() : '';
786
+ const status = typeof item.status === 'string' ? item.status : '';
787
+ const priority = typeof item.priority === 'string' ? item.priority : '';
788
+ if (content && status && priority) {
789
+ todos.push({ content, status, priority });
790
+ }
791
+ }
792
+ }
793
+ if (todos.length === 0)
794
+ return;
795
+ // 安全化 agentId 防止路径穿越
796
+ const safe = String(agentId).replace(/[^a-zA-Z0-9_-]/g, '_');
797
+ const todosDir = this.getTodoStoreDir();
798
+ const target = path.join(todosDir, `${safe}.json`);
799
+ const doc = {
800
+ agentId,
801
+ updatedAt: new Date().toISOString(),
802
+ background: 'OpenCode runtime todos',
803
+ todos,
804
+ };
805
+ await fs.promises.mkdir(todosDir, { recursive: true });
806
+ const tmp = `${target}.tmp`;
807
+ await fs.promises.writeFile(tmp, JSON.stringify(doc, null, 2), 'utf-8');
808
+ await fs.promises.rename(tmp, target);
809
+ }
748
810
  emitEvent(event) {
749
811
  this.emit('event', event);
750
812
  }
@@ -59,6 +59,15 @@ export interface RuntimeTokenUsage {
59
59
  outputTokens: number;
60
60
  /** Model context window token limit used for the used/limit display. */
61
61
  contextLimit?: number;
62
+ /** Model max output token limit, used to compute the compaction point. */
63
+ maxOutput?: number;
64
+ /** Provider 显式输入上限(部分 Provider 的 input+output 总额 ≠ context 上限)。
65
+ * 来自 runtime resolveProviderConfig,前端用于精确显示压缩点。 */
66
+ inputLimit?: number;
67
+ /** 后端实际触发压缩的阈值(= min(contextLimit×动态比例, hardLimit - min(buffer, maxOutput)))。
68
+ * 动态比例按窗口大小分级(<32K=0.70, 32K-128K=0.75, 128K-512K=0.80, >=512K=0.85)。
69
+ * 前端 AgentContextPanel 优先用此值显示竖线,消除前端自算公式的脱节。 */
70
+ compactionThreshold?: number;
62
71
  }
63
72
  export type CommandOutputStream = "stdout" | "stderr" | "mixed";
64
73
  export interface RuntimeStatusActionInfo {
@@ -205,6 +214,10 @@ export interface AdapterInstanceAiConfig {
205
214
  apiKey?: string;
206
215
  /** Per-instance model reasoning effort (minimal|low|medium|high|xhigh) */
207
216
  effort?: string;
217
+ /** Sub Agent 专用模型覆盖(空值=继承主 Agent 模型,仅 ACode 消费) */
218
+ subAgentModel?: string;
219
+ /** Sub Agent 专用思考强度覆盖(空值=继承主 Agent 强度,仅 ACode 消费) */
220
+ subAgentEffort?: string;
208
221
  }
209
222
  export interface AdapterSessionConfig {
210
223
  /** CLI 命令(支持绝对路径) */
@@ -245,6 +258,10 @@ export interface AdapterSessionConfig {
245
258
  * per-instance acode.json 后作为 configPath 使用。
246
259
  */
247
260
  instanceAiConfig?: AdapterInstanceAiConfig;
261
+ /** Sub Agent 模型覆盖(仅 ACode 消费,空值=继承主 Agent 模型) */
262
+ subAgentModel?: string;
263
+ /** Sub Agent 思考强度覆盖(仅 ACode 消费,空值=继承主 Agent 强度) */
264
+ subAgentEffort?: string;
248
265
  /** Provider 特定参数 */
249
266
  providerArgs?: string[];
250
267
  /** 环境变量覆盖 */
@@ -271,12 +288,8 @@ export interface AdapterSession {
271
288
  messages: ConversationMessage[];
272
289
  /** 创建时间 */
273
290
  createdAt: string;
274
- /** 累计 Token 用量 */
275
- totalUsage: {
276
- inputTokens: number;
277
- outputTokens: number;
278
- contextLimit?: number;
279
- };
291
+ /** Token 用量快照(input=当前上下文大小,output=当前轮输出,均为覆盖式赋值) */
292
+ totalUsage: RuntimeTokenUsage;
280
293
  /** SDK 进程 PID(用于检测进程是否存活) */
281
294
  pid?: number;
282
295
  }
@@ -305,6 +318,8 @@ export interface PermissionRequest {
305
318
  }
306
319
  export interface AskUserQuestionRequest {
307
320
  sessionId: string;
321
+ /** 提问实例的唯一标识(toolCallId),用于前端精确去重,区分同一会话内连续多次提问 */
322
+ toolCallId?: string;
308
323
  questions: Array<{
309
324
  question: string;
310
325
  header?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/adapter/types.ts"],"names":[],"mappings":"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"}
@@ -138,7 +138,9 @@ export function getToolActionInfo(toolName, toolInput, metadata) {
138
138
  ? name.slice(name.indexOf("-mcp__") + 6)
139
139
  : name.includes("/")
140
140
  ? name.split("/").filter(Boolean).at(-1) || name
141
- : name;
141
+ : name.includes("__")
142
+ ? name.split("__").pop() || name
143
+ : name;
142
144
  const normalizedSemanticToolName = semanticToolName.replace(/[_-]/g, "");
143
145
  const normalizeSkillList = (value) => {
144
146
  if (!Array.isArray(value)) {
@@ -272,6 +274,13 @@ export function getToolActionInfo(toolName, toolInput, metadata) {
272
274
  actionDetail: getCanonicalMcpDetail(toolName),
273
275
  };
274
276
  }
277
+ // ask_user_question 内置工具:阻塞等待用户回答
278
+ if (matchesToolName("ask_user_question", "askuserquestion")) {
279
+ return {
280
+ actionType: "other",
281
+ actionLabel: "等待回答",
282
+ };
283
+ }
275
284
  // MCP 工具调用
276
285
  // 优先使用 metadata 中的 mcpServer 信息(SDK 直接提供)
277
286
  // 格式包括:
package/dist/index.js CHANGED
@@ -41,6 +41,8 @@ import { ensureAwsClientAgentMcpReleased } from "./services/aws-client-agent-mcp
41
41
  import { ensureAcodePackageReleased } from "./services/acode-package.js";
42
42
  import { ensureStartupConfig } from "./services/startup-config-wizard.js";
43
43
  import { handleCliCommand } from "./services/cli-commands.js";
44
+ import { migrateOldPathsOnStartup } from "./services/legacy-path-migration.js";
45
+ import { subAgentStore } from "./services/sub-agent-manager-instance.js";
44
46
  import { buildGracefulShutdownPlan, shouldCleanupPersistedSessionsOnStartup, } from "./services/runtime-lifecycle-policy.js";
45
47
  import { deliverPendingBridgeLifecycleNotifications } from "./services/lifecycle-state.js";
46
48
  const cliCommandResult = await handleCliCommand();
@@ -52,6 +54,7 @@ await ensureStartupConfig();
52
54
  validateProductionToken();
53
55
  ensureAwsClientAgentMcpReleased();
54
56
  ensureAcodePackageReleased();
57
+ migrateOldPathsOnStartup();
55
58
  logRuntimeBindingStartupState();
56
59
  // ★ 启动时自动注册
57
60
  async function performAutoRegister() {
@@ -495,6 +498,14 @@ async function gracefulShutdown(signal, server, preserveSessions = false) {
495
498
  process.exit(1);
496
499
  }
497
500
  }
501
+ // 启动前清理僵尸 sub-agent 记录(bridge 重启前未完成的 running/pending 记录)
502
+ subAgentStore.reconcileZombies().then((fixed) => {
503
+ if (fixed > 0) {
504
+ logger.info(`[runtime-bridge] 已清理 ${fixed} 个僵尸 sub-agent 记录`);
505
+ }
506
+ }).catch((err) => {
507
+ logger.warn("[runtime-bridge] 清理僵尸 sub-agent 记录失败:", err.message);
508
+ });
498
509
  // 启动服务器
499
510
  const server = startServer();
500
511
  /**
@@ -63,7 +63,7 @@ async function fetchRemoteModelList(baseUrl, apiKey, protocolType) {
63
63
  return [];
64
64
  }
65
65
  aiSourcesRouter.post('/cc-switch/apply-ai-sources', validateToken, async (req, res) => {
66
- const { agentId, template, ccSwitchEnabledTools, acodeTemplateId, claudecodeTemplateId, codexTemplateId, opencodeTemplateId, acodeModelEffort, claudecodeModelEffort, codexModelEffort, opencodeModelEffort, acode, claudecode, codex, opencode, } = req.body || {};
66
+ const { agentId, template, ccSwitchEnabledTools, acodeTemplateId, claudecodeTemplateId, codexTemplateId, opencodeTemplateId, acodeModelEffort, claudecodeModelEffort, codexModelEffort, opencodeModelEffort, acodeSubAgentTemplateId, acodeSubAgentModel, acodeSubAgentModelEffort, acode, acodeSubAgent, claudecode, codex, opencode, } = req.body || {};
67
67
  if (!agentId) {
68
68
  res.status(400).json({ error: 'agentId is required' });
69
69
  return;
@@ -89,6 +89,9 @@ aiSourcesRouter.post('/cc-switch/apply-ai-sources', validateToken, async (req, r
89
89
  claudecodeModelEffort: String(claudecodeModelEffort || ''),
90
90
  codexModelEffort: String(codexModelEffort || ''),
91
91
  opencodeModelEffort: String(opencodeModelEffort || ''),
92
+ acodeSubAgentTemplateId: String(acodeSubAgentTemplateId || ''),
93
+ acodeSubAgentModel: String(acodeSubAgentModel || ''),
94
+ acodeSubAgentModelEffort: String(acodeSubAgentModelEffort || ''),
92
95
  generatedFromUnifiedTemplate: appliedSummary.generatedFromUnifiedTemplate,
93
96
  applied: appliedSummary.applied,
94
97
  skippedTools: appliedSummary.skippedTools,
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/routes/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuFH,eAAO,MAAM,eAAe,4CAAW,CAAC"}
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/routes/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsFH,eAAO,MAAM,eAAe,4CAAW,CAAC"}
@@ -52,7 +52,7 @@ async function loadLatestLifecycleOperation() {
52
52
  const fs = await import("node:fs/promises");
53
53
  const path = await import("node:path");
54
54
  const os = await import("node:os");
55
- const lifecycleFile = path.join(String(process.env.AWS_RUNTIME_HOME_DIR || os.homedir()).trim() || os.homedir(), ".agentswork", "runtime-bridge", "lifecycle-state.json");
55
+ const lifecycleFile = path.join(String(process.env.AWS_RUNTIME_HOME_DIR || os.homedir()).trim() || os.homedir(), ".aws-bridge", "lifecycle-state.json");
56
56
  try {
57
57
  const raw = await fs.readFile(lifecycleFile, "utf8");
58
58
  const parsed = JSON.parse(raw);
@@ -1 +1 @@
1
- {"version":3,"file":"file-browser.d.ts","sourceRoot":"","sources":["../../src/routes/file-browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,MAAM,MAAM,QAAQ,CAAC;AAyB5B,eAAO,MAAM,iBAAiB,4CAAW,CAAC;AAE1C,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAUhD,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,mBAAmB;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAMD,UAAU,iBAAkB,SAAQ,eAAe;IACjD,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,qBAAsB,SAAQ,mBAAmB;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAiBD,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAUvI;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAgBzF;AAyFD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,SAAK,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAkB5F;AAoCD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAuBpE;AA6BD,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,CAWhH"}
1
+ {"version":3,"file":"file-browser.d.ts","sourceRoot":"","sources":["../../src/routes/file-browser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,MAAM,MAAM,QAAQ,CAAC;AA2B5B,eAAO,MAAM,iBAAiB,4CAAW,CAAC;AAE1C,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAUhD,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,mBAAmB;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,eAAe,EAAE,CAAC;CAC1B;AAMD,UAAU,iBAAkB,SAAQ,eAAe;IACjD,QAAQ,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,UAAU,qBAAsB,SAAQ,mBAAmB;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,IAAI,EAAE,iBAAiB,EAAE,CAAC;CAC3B;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAiBD,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,MAAM,CAAC,WAAW,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,CAUvI;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAgBzF;AAyFD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,WAAW,SAAK,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAkB5F;AAoCD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,EAAE,CAuBpE;AA6BD,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,CAWhH"}
@@ -10,7 +10,7 @@ import { Router } from 'express';
10
10
  import multer from 'multer';
11
11
  import { allowHostFileBrowser } from '../config.js';
12
12
  import { validateToken } from '../middleware/auth.js';
13
- import { chmodWorkspaceEntry, createWorkspaceEntry, deleteWorkspaceEntry, extractWorkspaceArchive, getWorkspaceEntryProperties, listWorkspaceDirectory, moveWorkspaceEntry, previewWorkspaceDocument, readWorkspaceFile, renameWorkspaceEntry, resolveWorkspaceDownloadTarget, streamWorkspaceDirectoryZip, uploadWorkspaceFiles, writeWorkspaceFile, } from '../services/workspace-files.js';
13
+ import { chmodWorkspaceEntry, createWorkspaceEntry, deleteWorkspaceEntry, extractWorkspaceArchive, getWorkspaceEntryProperties, listWorkspaceDirectory, moveWorkspaceEntry, previewWorkspaceDocument, readWorkspaceFile, renameWorkspaceEntry, replaceWorkspaceFiles, resolveWorkspaceDownloadTarget, searchWorkspaceFiles, streamWorkspaceDirectoryZip, uploadWorkspaceFiles, writeWorkspaceFile, } from '../services/workspace-files.js';
14
14
  import { unwatchWorkspaceFile, watchWorkspaceFile } from '../services/workspace-watch.js';
15
15
  import { createLogger } from '../utils/logger.js';
16
16
  const log = createLogger('file-browser');
@@ -736,3 +736,49 @@ fileBrowserRouter.post('/workspace/extract', validateToken, async (req, res) =>
736
736
  res.status(400).json({ error: err.message });
737
737
  }
738
738
  });
739
+ /**
740
+ * 在工作区范围内搜索文件内容。
741
+ * POST /api/file-browser/workspace/search
742
+ */
743
+ fileBrowserRouter.post('/workspace/search', validateToken, async (req, res) => {
744
+ try {
745
+ const { workspacePath, keyword, fileMask, ignoreCase, maxResults, mode } = req.body || {};
746
+ const result = await searchWorkspaceFiles({
747
+ workspacePath: String(workspacePath || ''),
748
+ keyword: String(keyword || ''),
749
+ fileMask: fileMask !== undefined ? String(fileMask) : undefined,
750
+ ignoreCase: toBoolean(ignoreCase),
751
+ maxResults: typeof maxResults === 'number' ? maxResults : undefined,
752
+ mode: mode === 'filename' ? 'filename' : 'content'
753
+ });
754
+ res.json(result);
755
+ }
756
+ catch (error) {
757
+ const err = error;
758
+ log.error('failed to search workspace files:', err);
759
+ res.status(400).json({ error: err.message });
760
+ }
761
+ });
762
+ /**
763
+ * 在工作区范围内批量替换文件内容。
764
+ * POST /api/file-browser/workspace/replace
765
+ */
766
+ fileBrowserRouter.post('/workspace/replace', validateToken, async (req, res) => {
767
+ try {
768
+ const { workspacePath, keyword, replacement, fileMask, ignoreCase, filePath } = req.body || {};
769
+ const result = await replaceWorkspaceFiles({
770
+ workspacePath: String(workspacePath || ''),
771
+ keyword: String(keyword || ''),
772
+ replacement: String(replacement ?? ''),
773
+ fileMask: fileMask !== undefined ? String(fileMask) : undefined,
774
+ ignoreCase: toBoolean(ignoreCase),
775
+ filePath: filePath !== undefined ? String(filePath) : undefined
776
+ });
777
+ res.json(result);
778
+ }
779
+ catch (error) {
780
+ const err = error;
781
+ log.error('failed to replace workspace files:', err);
782
+ res.status(400).json({ error: err.message });
783
+ }
784
+ });
@@ -1 +1 @@
1
- {"version":3,"file":"processes.d.ts","sourceRoot":"","sources":["../../src/routes/processes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,eAAO,MAAM,eAAe,4CAAW,CAAC"}
1
+ {"version":3,"file":"processes.d.ts","sourceRoot":"","sources":["../../src/routes/processes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,eAAO,MAAM,eAAe,4CAAW,CAAC"}
@@ -8,6 +8,7 @@ import { validateToken } from '../middleware/auth.js';
8
8
  import { getAgentProcessManager } from '../services/agent-process-manager.js';
9
9
  import { discoverAllProcessesFull } from '../services/process-detector.js';
10
10
  import { createLogger } from '../utils/logger.js';
11
+ import { cleanupSdkSessionByAgentId } from './terminal.js';
11
12
  const log = createLogger('processes');
12
13
  export const processesRouter = Router();
13
14
  /**
@@ -158,6 +159,12 @@ processesRouter.post('/processes/:agentId/force-kill', validateToken, async (req
158
159
  try {
159
160
  const manager = getAgentProcessManager();
160
161
  const result = await manager.forceKill(agentId);
162
+ // ★ 关键修复:强制终止后清理 bridge 内部内存状态
163
+ // 防止 sdkSessions 残留条目阻塞后续启动
164
+ const cleanedSessionId = cleanupSdkSessionByAgentId(agentId);
165
+ if (cleanedSessionId) {
166
+ log.info(`[processes/force-kill] Cleaned up SDK session after force-kill: agentId=${agentId}, sessionId=${cleanedSessionId}`);
167
+ }
161
168
  res.json({
162
169
  ok: result.success,
163
170
  agentId,
@@ -1 +1 @@
1
- {"version":3,"file":"runtime-binding.d.ts","sourceRoot":"","sources":["../../src/routes/runtime-binding.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,oBAAoB,4CAAW,CAAC;AAE7C,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,wBAAwB,GAC9B,yBAAyB,CAM3B;AAqPD,wBAAgB,6BAA6B,IAAI,IAAI,CAapD"}
1
+ {"version":3,"file":"runtime-binding.d.ts","sourceRoot":"","sources":["../../src/routes/runtime-binding.ts"],"names":[],"mappings":"AAqBA,eAAO,MAAM,oBAAoB,4CAAW,CAAC;AAE7C,MAAM,WAAW,wBAAwB;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,0BAA0B,CAAC,EAAE,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,wBAAwB,GAC9B,yBAAyB,CAM3B;AAwPD,wBAAgB,6BAA6B,IAAI,IAAI,CAapD"}
@@ -148,7 +148,7 @@ runtimeBindingRouter.post("/binding/refresh-token", (req, res) => {
148
148
  res.status(403).json({ ok: false, error: "loopback request required" });
149
149
  return;
150
150
  }
151
- const { agentId, currentToken } = req.body || {};
151
+ const { agentId, currentToken, forceRefresh } = req.body || {};
152
152
  const normalizedAgentId = String(agentId || "").trim();
153
153
  if (!normalizedAgentId) {
154
154
  res.status(400).json({ ok: false, error: "agentId is required" });
@@ -159,9 +159,12 @@ runtimeBindingRouter.post("/binding/refresh-token", (req, res) => {
159
159
  res.status(404).json({ ok: false, error: "no cached token for agent" });
160
160
  return;
161
161
  }
162
- // 如果最新 token 与当前 token 相同,说明服务端已撤销,bridge 侧没有更新的
162
+ // forceRefresh=true 时跳过 token 一致性检查,直接返回缓存的最新 token
163
+ // 用于 WebSocket 1008(policy rejection)场景:即使 bridge 缓存的 token 与当前相同,
164
+ // 也允许返回,由客户端侧的 hammer 保护控制重复请求。
165
+ // 非 forceRefresh(HTTP 401 反应式刷新)保持原有 409 语义。
163
166
  const normalizedCurrent = String(currentToken || "").trim();
164
- if (normalizedCurrent && latest.runtimeAccessToken === normalizedCurrent) {
167
+ if (!forceRefresh && normalizedCurrent && latest.runtimeAccessToken === normalizedCurrent) {
165
168
  res.status(409).json({
166
169
  ok: false,
167
170
  error: "token_unchanged",
@@ -10,7 +10,7 @@ import { validateToken } from '../middleware/auth.js';
10
10
  import { isProcessRunning, findOrphanProcessByAgentId, findOrphanProcessByWorkspace } from '../services/process-detector.js';
11
11
  import { findPersistedSessionByAgentId, loadPersistedSessions, removePersistedSession, } from '../services/terminal-persistence.js';
12
12
  import { createLogger } from '../utils/logger.js';
13
- import { sdkSessions } from './terminal.js';
13
+ import { sdkSessions, cleanupSdkSessionByAgentId } from './terminal.js';
14
14
  const log = createLogger('sessions');
15
15
  export const sessionsRouter = Router();
16
16
  /**
@@ -198,11 +198,62 @@ sessionsRouter.post('/search-orphan', validateToken, async (req, res) => {
198
198
  }
199
199
  try {
200
200
  // 1. 首先检查 runtime-bridge 是否已经有活跃 SDK 会话
201
- const activeSdkSession = Array.from(sdkSessions.entries()).find(([, s]) => s.agentId === agentId);
202
- const hasActiveSession = activeSdkSession;
201
+ // ★ 同时检测陈旧会话:进程已死但 sdkSessions 中仍有残留条目时,清理并视为无活跃会话
202
+ const activeSdkSessionEntry = Array.from(sdkSessions.entries()).find(([, s]) => s.agentId === agentId);
203
+ let hasActiveSession = false;
204
+ let activeSessionPid;
205
+ let activeSessionCommand;
206
+ if (activeSdkSessionEntry) {
207
+ const [activeSessionId, activeEntry] = activeSdkSessionEntry;
208
+ const adapter = adapterRegistry.get(activeEntry.providerId || 'claude-code');
209
+ activeSessionPid = adapter.getSessionPid?.(activeSessionId);
210
+ activeSessionCommand = activeEntry.config?.command;
211
+ const isPidAlive = activeSessionPid ? isProcessRunning(activeSessionPid) : false;
212
+ const sessionStatus = adapter.getSessionStatus(activeSessionId);
213
+ const isSessionDeadStatus = sessionStatus === 'completed' ||
214
+ sessionStatus === 'terminated' ||
215
+ sessionStatus === 'error';
216
+ if (isPidAlive) {
217
+ // 外部 CLI provider(claude-code/opencode):进程存活,视为活跃会话
218
+ hasActiveSession = true;
219
+ }
220
+ else if (activeSessionPid && !isPidAlive) {
221
+ // PID 存在但进程已死亡 - 清理陈旧会话
222
+ log.info(`[search-orphan] Cleaning up stale SDK session (process dead): agentId=${agentId}, sessionId=${activeSessionId}, pid=${activeSessionPid}`);
223
+ sdkSessions.delete(activeSessionId);
224
+ await removePersistedSession(activeSessionId);
225
+ }
226
+ else if (isSessionDeadStatus) {
227
+ // 无 PID(in-process provider 如 ACode)且会话已结束 - 清理陈旧会话
228
+ log.info(`[search-orphan] Cleaning up stale in-process SDK session (status=${sessionStatus}): agentId=${agentId}, sessionId=${activeSessionId}`);
229
+ try {
230
+ await adapter.terminateSession(activeSessionId);
231
+ }
232
+ catch (e) {
233
+ log.warn(`[search-orphan] Failed to terminate stale in-process session: ${e}`);
234
+ }
235
+ sdkSessions.delete(activeSessionId);
236
+ await removePersistedSession(activeSessionId);
237
+ }
238
+ else {
239
+ // 无 PID 且会话仍存活(in-process provider,如 ACode)
240
+ // WebSocket 断开导致前端显示 LOST,但 in-process 运行时仍在运行且不可达
241
+ // 终止会话以释放资源,然后清理
242
+ log.info(`[search-orphan] Terminating unreachable in-process SDK session: agentId=${agentId}, sessionId=${activeSessionId}, status=${sessionStatus || 'unknown'}`);
243
+ try {
244
+ await adapter.abortCurrentTurn(activeSessionId).catch(() => { });
245
+ await adapter.terminateSession(activeSessionId);
246
+ }
247
+ catch (e) {
248
+ log.warn(`[search-orphan] Failed to terminate in-process session: ${e}`);
249
+ }
250
+ sdkSessions.delete(activeSessionId);
251
+ await removePersistedSession(activeSessionId);
252
+ }
253
+ }
203
254
  // 2. 搜索标记了该 agentId 的进程(命令 + 环境变量 + 进程树匹配)
204
255
  const orphanProcess = await findOrphanProcessByAgentId(agentId);
205
- // 3. 如果找到残留进程,返回进程信�?
256
+ // 3. 如果找到残留进程,返回进程信息
206
257
  if (orphanProcess) {
207
258
  log.info(`[search-orphan] Found orphan process for agentId=${agentId}, pid=${orphanProcess.pid}`);
208
259
  res.json({
@@ -220,6 +271,24 @@ sessionsRouter.post('/search-orphan', validateToken, async (req, res) => {
220
271
  });
221
272
  return;
222
273
  }
274
+ // 3.5 活跃会话的进程仍然存活时,将其作为可终止的残留进程返回
275
+ // 场景:WebSocket 断开导致前端显示 LOST/zombie,但 SDK 进程仍在运行且不可达
276
+ // 用户可以通过终止该进程来清理僵尸状态
277
+ if (hasActiveSession && activeSessionPid) {
278
+ log.info(`[search-orphan] Active session process still running, reporting as terminable orphan: agentId=${agentId}, pid=${activeSessionPid}`);
279
+ res.json({
280
+ ok: true,
281
+ agentId,
282
+ hasActiveSession: true,
283
+ found: true,
284
+ orphan: {
285
+ pid: activeSessionPid,
286
+ command: activeSessionCommand || '(active SDK session)',
287
+ message: 'Found active SDK session process. Click terminate to stop it.',
288
+ },
289
+ });
290
+ return;
291
+ }
223
292
  // 4. 检查持久化会话中的 PID 是否仍然存活
224
293
  // 即使进程列表匹配不到(命令行特征未识别),PID 存活说明进程仍在运行
225
294
  const persistedSession = await findPersistedSessionByAgentId(agentId);
@@ -291,7 +360,23 @@ sessionsRouter.post('/terminate-orphan', validateToken, async (req, res) => {
291
360
  return;
292
361
  }
293
362
  try {
294
- // 1. 检查进程是否还在运�?
363
+ // 0. 清理 sdkSessions 中匹配 agentId 的活跃会话条目
364
+ // 场景:/search-orphan 将活跃会话的 PID 作为残留进程返回,用户终止该进程后需要清理 bridge 侧的会话状态
365
+ const activeSessionEntry = Array.from(sdkSessions.entries()).find(([, s]) => s.agentId === agentId);
366
+ if (activeSessionEntry) {
367
+ const [activeSessionId, activeEntry] = activeSessionEntry;
368
+ const adapter = adapterRegistry.get(activeEntry.providerId || 'claude-code');
369
+ try {
370
+ await adapter.terminateSession(activeSessionId);
371
+ }
372
+ catch (e) {
373
+ log.warn(`[terminate-orphan] Failed to terminate SDK session for agentId=${agentId}:`, e);
374
+ }
375
+ sdkSessions.delete(activeSessionId);
376
+ await removePersistedSession(activeSessionId);
377
+ log.info(`[terminate-orphan] Cleaned up SDK session for agentId=${agentId}, sessionId=${activeSessionId}`);
378
+ }
379
+ // 1. 检查进程是否还在运行
295
380
  if (!isProcessRunning(pid)) {
296
381
  res.json({
297
382
  ok: true,
@@ -585,6 +670,9 @@ sessionsRouter.post('/terminate-tree', validateToken, async (req, res) => {
585
670
  const result = await terminateProcessTree(pid);
586
671
  // 4. 等待进程完全终止(最多 5 秒)
587
672
  const exited = await waitForProcessExit(pid, 5000);
673
+ // ★ 关键修复:terminate-tree 后清理 bridge 内部内存状态
674
+ // 防止 sdkSessions 残留条目阻塞后续启动
675
+ cleanupSdkSessionByAgentId(agentId);
588
676
  // 5. 清理持久化状�?
589
677
  await import('../services/terminal-persistence.js').then(m => m.removePersistedSession(targetSessionId));
590
678
  log.info(`[terminate-tree] Terminated process tree for agentId=${agentId}, pid=${pid}, mode=${mode}, terminated=${result.terminated}, failed=${result.failed}, exited=${exited}`);