@plusplusoneplusplus/coc 1.0.4 → 1.0.5

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 (169) hide show
  1. package/dist/cli.js +1 -1
  2. package/dist/cli.js.map +1 -1
  3. package/dist/server/api-handler.d.ts +2 -2
  4. package/dist/server/api-handler.d.ts.map +1 -1
  5. package/dist/server/diff-comments-ai.d.ts +8 -0
  6. package/dist/server/diff-comments-ai.d.ts.map +1 -1
  7. package/dist/server/diff-comments-ai.js +62 -0
  8. package/dist/server/diff-comments-ai.js.map +1 -1
  9. package/dist/server/diff-comments-handler.d.ts.map +1 -1
  10. package/dist/server/diff-comments-handler.js +115 -0
  11. package/dist/server/diff-comments-handler.js.map +1 -1
  12. package/dist/server/executors/base-executor.d.ts.map +1 -1
  13. package/dist/server/executors/base-executor.js +1 -29
  14. package/dist/server/executors/base-executor.js.map +1 -1
  15. package/dist/server/executors/executor-registry.d.ts +55 -0
  16. package/dist/server/executors/executor-registry.d.ts.map +1 -0
  17. package/dist/server/executors/executor-registry.js +98 -0
  18. package/dist/server/executors/executor-registry.js.map +1 -0
  19. package/dist/server/executors/executor-types.d.ts +6 -0
  20. package/dist/server/executors/executor-types.d.ts.map +1 -0
  21. package/dist/server/executors/executor-types.js +3 -0
  22. package/dist/server/executors/executor-types.js.map +1 -0
  23. package/dist/server/executors/follow-up-executor.d.ts +1 -1
  24. package/dist/server/executors/follow-up-executor.d.ts.map +1 -1
  25. package/dist/server/executors/follow-up-executor.js +64 -121
  26. package/dist/server/executors/follow-up-executor.js.map +1 -1
  27. package/dist/server/executors/process-lifecycle-runner.d.ts +1 -1
  28. package/dist/server/executors/process-lifecycle-runner.d.ts.map +1 -1
  29. package/dist/server/executors/process-lifecycle-runner.js +60 -48
  30. package/dist/server/executors/process-lifecycle-runner.js.map +1 -1
  31. package/dist/server/executors/prompt-builder.d.ts +3 -3
  32. package/dist/server/executors/prompt-builder.d.ts.map +1 -1
  33. package/dist/server/executors/prompt-builder.js +4 -9
  34. package/dist/server/executors/prompt-builder.js.map +1 -1
  35. package/dist/server/executors/resolve-comments-executor.d.ts.map +1 -1
  36. package/dist/server/executors/resolve-comments-executor.js +33 -3
  37. package/dist/server/executors/resolve-comments-executor.js.map +1 -1
  38. package/dist/server/executors/task-generation-executor.d.ts.map +1 -1
  39. package/dist/server/executors/task-generation-executor.js +1 -7
  40. package/dist/server/executors/task-generation-executor.js.map +1 -1
  41. package/dist/server/executors/wrapped-task-executor.d.ts +26 -0
  42. package/dist/server/executors/wrapped-task-executor.d.ts.map +1 -0
  43. package/dist/server/executors/wrapped-task-executor.js +88 -0
  44. package/dist/server/executors/wrapped-task-executor.js.map +1 -0
  45. package/dist/server/in-memory-process-store.d.ts.map +1 -1
  46. package/dist/server/in-memory-process-store.js +62 -0
  47. package/dist/server/in-memory-process-store.js.map +1 -1
  48. package/dist/server/index.d.ts +4 -1
  49. package/dist/server/index.d.ts.map +1 -1
  50. package/dist/server/index.js +5 -2
  51. package/dist/server/index.js.map +1 -1
  52. package/dist/server/memory/conversation-recorder.d.ts.map +1 -1
  53. package/dist/server/memory/conversation-recorder.js +35 -1
  54. package/dist/server/memory/conversation-recorder.js.map +1 -1
  55. package/dist/server/memory/memory-aggregate-executor.d.ts +18 -0
  56. package/dist/server/memory/memory-aggregate-executor.d.ts.map +1 -0
  57. package/dist/server/memory/memory-aggregate-executor.js +210 -0
  58. package/dist/server/memory/memory-aggregate-executor.js.map +1 -0
  59. package/dist/server/memory/memory-routes.d.ts.map +1 -1
  60. package/dist/server/memory/memory-routes.js +15 -4
  61. package/dist/server/memory/memory-routes.js.map +1 -1
  62. package/dist/server/memory/repo-memory-handler.d.ts +5 -2
  63. package/dist/server/memory/repo-memory-handler.d.ts.map +1 -1
  64. package/dist/server/memory/repo-memory-handler.js +103 -112
  65. package/dist/server/memory/repo-memory-handler.js.map +1 -1
  66. package/dist/server/memory/repo-memory-migration.d.ts +58 -0
  67. package/dist/server/memory/repo-memory-migration.d.ts.map +1 -0
  68. package/dist/server/memory/repo-memory-migration.js +289 -0
  69. package/dist/server/memory/repo-memory-migration.js.map +1 -0
  70. package/dist/server/multi-repo-executor-bridge.d.ts +2 -2
  71. package/dist/server/multi-repo-executor-bridge.d.ts.map +1 -1
  72. package/dist/server/multi-repo-executor-bridge.js +4 -4
  73. package/dist/server/multi-repo-executor-bridge.js.map +1 -1
  74. package/dist/server/prompt-handler.d.ts.map +1 -1
  75. package/dist/server/prompt-handler.js +4 -12
  76. package/dist/server/prompt-handler.js.map +1 -1
  77. package/dist/server/queue-executor-bridge.d.ts +9 -16
  78. package/dist/server/queue-executor-bridge.d.ts.map +1 -1
  79. package/dist/server/queue-executor-bridge.js +25 -62
  80. package/dist/server/queue-executor-bridge.js.map +1 -1
  81. package/dist/server/replicate-apply-handler.d.ts.map +1 -1
  82. package/dist/server/replicate-apply-handler.js +5 -12
  83. package/dist/server/replicate-apply-handler.js.map +1 -1
  84. package/dist/server/routes/api-git-branch-routes.d.ts.map +1 -1
  85. package/dist/server/routes/api-git-branch-routes.js +165 -0
  86. package/dist/server/routes/api-git-branch-routes.js.map +1 -1
  87. package/dist/server/routes/api-git-working-tree-routes.d.ts.map +1 -1
  88. package/dist/server/routes/api-git-working-tree-routes.js +4 -2
  89. package/dist/server/routes/api-git-working-tree-routes.js.map +1 -1
  90. package/dist/server/routes/api-process-routes.d.ts.map +1 -1
  91. package/dist/server/routes/api-process-routes.js +8 -34
  92. package/dist/server/routes/api-process-routes.js.map +1 -1
  93. package/dist/server/routes/index.d.ts.map +1 -1
  94. package/dist/server/routes/index.js +1 -0
  95. package/dist/server/routes/index.js.map +1 -1
  96. package/dist/server/shared/queue-utils.d.ts +1 -1
  97. package/dist/server/shared/queue-utils.d.ts.map +1 -1
  98. package/dist/server/shared/queue-utils.js +2 -1
  99. package/dist/server/shared/queue-utils.js.map +1 -1
  100. package/dist/server/skill-handler.d.ts +3 -0
  101. package/dist/server/skill-handler.d.ts.map +1 -1
  102. package/dist/server/skill-handler.js +8 -5
  103. package/dist/server/skill-handler.js.map +1 -1
  104. package/dist/server/spa/client/dist/bundle.css +81 -0
  105. package/dist/server/spa/client/dist/bundle.js +13526 -12306
  106. package/dist/server/sse-handler.d.ts.map +1 -1
  107. package/dist/server/sse-handler.js +3 -0
  108. package/dist/server/sse-handler.js.map +1 -1
  109. package/dist/server/task-comments-handler.d.ts.map +1 -1
  110. package/dist/server/task-comments-handler.js +16 -8
  111. package/dist/server/task-comments-handler.js.map +1 -1
  112. package/dist/server/task-types.d.ts +24 -1
  113. package/dist/server/task-types.d.ts.map +1 -1
  114. package/dist/server/task-types.js +9 -0
  115. package/dist/server/task-types.js.map +1 -1
  116. package/dist/server/templates-handler.d.ts.map +1 -1
  117. package/dist/server/templates-handler.js +19 -29
  118. package/dist/server/templates-handler.js.map +1 -1
  119. package/node_modules/@plusplusoneplusplus/forge/dist/copilot-sdk-wrapper/model-registry.d.ts.map +1 -1
  120. package/node_modules/@plusplusoneplusplus/forge/dist/copilot-sdk-wrapper/model-registry.js +10 -0
  121. package/node_modules/@plusplusoneplusplus/forge/dist/copilot-sdk-wrapper/model-registry.js.map +1 -1
  122. package/node_modules/@plusplusoneplusplus/forge/dist/copilot-sdk-wrapper/sdk-loader.d.ts +25 -28
  123. package/node_modules/@plusplusoneplusplus/forge/dist/copilot-sdk-wrapper/sdk-loader.d.ts.map +1 -1
  124. package/node_modules/@plusplusoneplusplus/forge/dist/copilot-sdk-wrapper/sdk-loader.js +59 -40
  125. package/node_modules/@plusplusoneplusplus/forge/dist/copilot-sdk-wrapper/sdk-loader.js.map +1 -1
  126. package/node_modules/@plusplusoneplusplus/forge/dist/file-process-store.d.ts +11 -1
  127. package/node_modules/@plusplusoneplusplus/forge/dist/file-process-store.d.ts.map +1 -1
  128. package/node_modules/@plusplusoneplusplus/forge/dist/file-process-store.js +125 -1
  129. package/node_modules/@plusplusoneplusplus/forge/dist/file-process-store.js.map +1 -1
  130. package/node_modules/@plusplusoneplusplus/forge/dist/git/branch-service.d.ts +28 -1
  131. package/node_modules/@plusplusoneplusplus/forge/dist/git/branch-service.d.ts.map +1 -1
  132. package/node_modules/@plusplusoneplusplus/forge/dist/git/branch-service.js +183 -0
  133. package/node_modules/@plusplusoneplusplus/forge/dist/git/branch-service.js.map +1 -1
  134. package/node_modules/@plusplusoneplusplus/forge/dist/git/git-ops-store.d.ts +1 -1
  135. package/node_modules/@plusplusoneplusplus/forge/dist/git/git-ops-store.d.ts.map +1 -1
  136. package/node_modules/@plusplusoneplusplus/forge/dist/git/index.d.ts +1 -1
  137. package/node_modules/@plusplusoneplusplus/forge/dist/git/index.d.ts.map +1 -1
  138. package/node_modules/@plusplusoneplusplus/forge/dist/git/index.js.map +1 -1
  139. package/node_modules/@plusplusoneplusplus/forge/dist/git/types.d.ts +8 -0
  140. package/node_modules/@plusplusoneplusplus/forge/dist/git/types.d.ts.map +1 -1
  141. package/node_modules/@plusplusoneplusplus/forge/dist/index.d.ts +1 -1
  142. package/node_modules/@plusplusoneplusplus/forge/dist/index.d.ts.map +1 -1
  143. package/node_modules/@plusplusoneplusplus/forge/dist/index.js.map +1 -1
  144. package/node_modules/@plusplusoneplusplus/forge/dist/memory/memory-store.d.ts +14 -1
  145. package/node_modules/@plusplusoneplusplus/forge/dist/memory/memory-store.d.ts.map +1 -1
  146. package/node_modules/@plusplusoneplusplus/forge/dist/memory/memory-store.js +44 -15
  147. package/node_modules/@plusplusoneplusplus/forge/dist/memory/memory-store.js.map +1 -1
  148. package/node_modules/@plusplusoneplusplus/forge/dist/memory/tool-call-cache-store.d.ts +1 -1
  149. package/node_modules/@plusplusoneplusplus/forge/dist/memory/tool-call-cache-store.d.ts.map +1 -1
  150. package/node_modules/@plusplusoneplusplus/forge/dist/memory/tool-call-cache-store.js +10 -2
  151. package/node_modules/@plusplusoneplusplus/forge/dist/memory/tool-call-cache-store.js.map +1 -1
  152. package/node_modules/@plusplusoneplusplus/forge/dist/memory/tool-call-cache-types.d.ts +6 -0
  153. package/node_modules/@plusplusoneplusplus/forge/dist/memory/tool-call-cache-types.d.ts.map +1 -1
  154. package/node_modules/@plusplusoneplusplus/forge/dist/memory/types.d.ts +6 -0
  155. package/node_modules/@plusplusoneplusplus/forge/dist/memory/types.d.ts.map +1 -1
  156. package/node_modules/@plusplusoneplusplus/forge/dist/memory/with-memory.d.ts +2 -0
  157. package/node_modules/@plusplusoneplusplus/forge/dist/memory/with-memory.d.ts.map +1 -1
  158. package/node_modules/@plusplusoneplusplus/forge/dist/memory/with-memory.js.map +1 -1
  159. package/node_modules/@plusplusoneplusplus/forge/dist/memory/write-memory-tool.d.ts +3 -0
  160. package/node_modules/@plusplusoneplusplus/forge/dist/memory/write-memory-tool.d.ts.map +1 -1
  161. package/node_modules/@plusplusoneplusplus/forge/dist/memory/write-memory-tool.js.map +1 -1
  162. package/node_modules/@plusplusoneplusplus/forge/dist/process-store.d.ts +34 -3
  163. package/node_modules/@plusplusoneplusplus/forge/dist/process-store.d.ts.map +1 -1
  164. package/node_modules/@plusplusoneplusplus/forge/dist/skills/bundled-skills-provider.d.ts.map +1 -1
  165. package/node_modules/@plusplusoneplusplus/forge/dist/skills/bundled-skills-provider.js +10 -0
  166. package/node_modules/@plusplusoneplusplus/forge/dist/skills/bundled-skills-provider.js.map +1 -1
  167. package/node_modules/@plusplusoneplusplus/forge/dist/tasks/task-prompt-builder.js +3 -3
  168. package/node_modules/@plusplusoneplusplus/forge/dist/tasks/task-prompt-builder.js.map +1 -1
  169. package/package.json +6 -2
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExecutorRegistry = void 0;
4
+ const task_types_1 = require("../task-types");
5
+ const task_strategies_1 = require("../task-strategies");
6
+ const replicate_template_strategy_1 = require("../task-strategies/replicate-template-strategy");
7
+ const shell_executor_1 = require("./shell-executor");
8
+ const workflow_executor_1 = require("./workflow-executor");
9
+ const follow_up_executor_1 = require("./follow-up-executor");
10
+ const chat_executor_1 = require("./chat-executor");
11
+ const plan_executor_1 = require("./plan-executor");
12
+ const autopilot_executor_1 = require("./autopilot-executor");
13
+ const task_generation_executor_1 = require("./task-generation-executor");
14
+ const resolve_comments_executor_1 = require("./resolve-comments-executor");
15
+ const memory_aggregate_executor_1 = require("../memory/memory-aggregate-executor");
16
+ const process_lifecycle_runner_1 = require("./process-lifecycle-runner");
17
+ const wrapped_task_executor_1 = require("./wrapped-task-executor");
18
+ /**
19
+ * Central registry that owns all executor instances and provides
20
+ * task dispatch logic. Replaces the 9-way constructor fan-out
21
+ * previously in CLITaskExecutor.
22
+ */
23
+ class ExecutorRegistry {
24
+ constructor(store, options) {
25
+ this.store = store;
26
+ this.approvePermissions = options.approvePermissions;
27
+ this.defaultWorkingDirectory = options.defaultWorkingDirectory;
28
+ this.dataDir = options.dataDir;
29
+ const chatOpts = {
30
+ workingDirectory: options.defaultWorkingDirectory,
31
+ approvePermissions: options.approvePermissions,
32
+ aiService: options.aiService,
33
+ defaultTimeoutMs: options.defaultTimeoutMs,
34
+ followUpSuggestions: options.followUpSuggestions,
35
+ toolCallCacheStore: options.toolCallCacheStore,
36
+ resolveSkillConfig: options.resolveSkillConfig,
37
+ resolveWorkspaceIdForPath: options.resolveWorkspaceIdForPath,
38
+ };
39
+ this.strategyRegistry = new task_strategies_1.TaskStrategyRegistry();
40
+ this.strategyRegistry.register('replicate-template', new replicate_template_strategy_1.ReplicateTemplateStrategy());
41
+ this.workflowExecutor = new workflow_executor_1.WorkflowExecutor(store, { approvePermissions: options.approvePermissions, workingDirectory: options.defaultWorkingDirectory }, options.dataDir);
42
+ this.followUpExecutor = new follow_up_executor_1.FollowUpExecutor(store, { workingDirectory: options.defaultWorkingDirectory, approvePermissions: options.approvePermissions, aiService: options.aiService, followUpSuggestions: options.followUpSuggestions, resolveWorkspaceIdForPath: options.resolveWorkspaceIdForPath, resolveSkillConfig: options.resolveSkillConfig, onTitleNeeded: options.onTitleNeeded }, options.dataDir);
43
+ this.chatExecutor = new chat_executor_1.ChatExecutor(store, chatOpts, options.dataDir);
44
+ this.planExecutor = new plan_executor_1.PlanExecutor(store, chatOpts, options.dataDir);
45
+ this.autopilotExecutor = new autopilot_executor_1.AutopilotExecutor(store, chatOpts, options.dataDir);
46
+ this.taskGenerationExecutor = new task_generation_executor_1.TaskGenerationExecutor(store, chatOpts, options.dataDir);
47
+ this.resolveCommentsExecutor = new resolve_comments_executor_1.ResolveCommentsExecutor(store, chatOpts, options.getWsServer, options.dataDir);
48
+ this.memoryAggregateExecutor = new memory_aggregate_executor_1.MemoryAggregateExecutor(store, options.dataDir ?? '');
49
+ this.runner = new process_lifecycle_runner_1.ProcessLifecycleRunner(store, options.dataDir, options.onTitleNeeded);
50
+ }
51
+ /** Dispatch a task to the appropriate executor based on its type and payload. */
52
+ async dispatch(task, prompt) {
53
+ if ((0, task_types_1.isRunWorkflowPayload)(task.payload))
54
+ return this.workflowExecutor.execute(task);
55
+ if ((0, task_types_1.isRunScriptPayload)(task.payload))
56
+ return new shell_executor_1.ShellExecutor(this.store, this.dataDir, this.defaultWorkingDirectory).execute(task);
57
+ if ((0, task_types_1.isChatPayload)(task.payload) && !(0, task_types_1.isChatFollowUp)(task.payload)) {
58
+ const payload = task.payload;
59
+ const executor = this.resolveChatExecutor(task, payload);
60
+ if (payload.beforeScript || payload.afterScript) {
61
+ return new wrapped_task_executor_1.WrappedTaskExecutor(executor, this.store).execute(task, prompt);
62
+ }
63
+ return executor.execute(task, prompt);
64
+ }
65
+ return { status: 'completed', message: `Task type '${task.type}' executed (no-op in CLI mode)` };
66
+ }
67
+ /** Resolve the working directory for a task. */
68
+ getWorkingDirectory(task) {
69
+ if ((0, task_types_1.isRunWorkflowPayload)(task.payload))
70
+ return task.payload.workingDirectory || this.defaultWorkingDirectory;
71
+ if ((0, task_types_1.isRunScriptPayload)(task.payload))
72
+ return task.payload.workingDirectory || this.defaultWorkingDirectory;
73
+ if ((0, task_types_1.isChatPayload)(task.payload))
74
+ return task.payload.workingDirectory || task.payload.folderPath || this.defaultWorkingDirectory;
75
+ return this.defaultWorkingDirectory;
76
+ }
77
+ /** Build execution context for strategy-based execution. */
78
+ buildExecutionContext(task) {
79
+ return { processId: `queue_${task.id}`, store: this.store, approvePermissions: this.approvePermissions, workingDirectory: this.getWorkingDirectory(task) };
80
+ }
81
+ /** Resolve the chat-mode executor based on payload context and mode. */
82
+ resolveChatExecutor(task, payload) {
83
+ if ((0, task_types_1.hasTaskGenerationContext)(task.payload))
84
+ return this.taskGenerationExecutor;
85
+ if ((0, task_types_1.hasReplicationContext)(task.payload))
86
+ return { execute: (t) => this.strategyRegistry.get('replicate-template').execute(t, this.buildExecutionContext(t)) };
87
+ if ((0, task_types_1.hasResolveCommentsContext)(task.payload) || (0, task_types_1.hasResolveDiffCommentsContext)(task.payload) || payload.tools?.includes('resolve-comments'))
88
+ return { execute: (t) => this.resolveCommentsExecutor.executeTask(t) };
89
+ const mode = payload.mode;
90
+ if (mode === 'plan')
91
+ return this.planExecutor;
92
+ if (mode === 'autopilot')
93
+ return this.autopilotExecutor;
94
+ return this.chatExecutor;
95
+ }
96
+ }
97
+ exports.ExecutorRegistry = ExecutorRegistry;
98
+ //# sourceMappingURL=executor-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor-registry.js","sourceRoot":"","sources":["../../../src/server/executors/executor-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { QueuedTask } from '@plusplusoneplusplus/forge';
2
+ /** Normalized executor interface for all task execution strategies. */
3
+ export interface ITaskExecutor {
4
+ execute(task: QueuedTask, prompt: string): Promise<unknown>;
5
+ }
6
+ //# sourceMappingURL=executor-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor-types.d.ts","sourceRoot":"","sources":["../../../src/server/executors/executor-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAE7D,uEAAuE;AACvE,MAAM,WAAW,aAAa;IAC1B,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC/D"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=executor-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor-types.js","sourceRoot":"","sources":["../../../src/server/executors/executor-types.ts"],"names":[],"mappings":""}
@@ -53,6 +53,6 @@ export declare class FollowUpExecutor extends BaseExecutor {
53
53
  * 4. On completion, append assistant turn to conversationTurns
54
54
  * 5. Update process status back to 'completed'
55
55
  */
56
- executeFollowUp(processId: string, message: string, attachments?: Attachment[], mode?: ChatMode, deliveryMode?: string): Promise<void>;
56
+ executeFollowUp(processId: string, message: string, attachments?: Attachment[], mode?: ChatMode, deliveryMode?: string, images?: string[]): Promise<void>;
57
57
  }
58
58
  //# sourceMappingURL=follow-up-executor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"follow-up-executor.d.ts","sourceRoot":"","sources":["../../../src/server/executors/follow-up-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAER,UAAU,EAEV,gBAAgB,EAChB,iBAAiB,EAEjB,YAAY,EAEf,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAe9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAiB/C,MAAM,WAAW,WAAW;IACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACpC,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,0DAA0D;IAC1D,SAAS,EAAE,iBAAiB,CAAC;IAC7B,0CAA0C;IAC1C,mBAAmB,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,2CAA2C;IAC3C,yBAAyB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,kDAAkD;IAClD,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACzF,2DAA2D;IAC3D,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;CAC1E;AAMD,qBAAa,gBAAiB,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsC;IAC1E,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAwC;IACnF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAuE;IAC3G,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAyD;gBAE5E,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,MAAM;IAWnF;;;;;;;;;OASG;IACG,eAAe,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,UAAU,EAAE,EAC1B,IAAI,CAAC,EAAE,QAAQ,EACf,YAAY,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,IAAI,CAAC;CAgRnB"}
1
+ {"version":3,"file":"follow-up-executor.d.ts","sourceRoot":"","sources":["../../../src/server/executors/follow-up-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAER,UAAU,EAEV,gBAAgB,EAChB,iBAAiB,EAEjB,YAAY,EAEf,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAe9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAiB/C,MAAM,WAAW,WAAW;IACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACpC,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,0DAA0D;IAC1D,SAAS,EAAE,iBAAiB,CAAC;IAC7B,0CAA0C;IAC1C,mBAAmB,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACzD,2CAA2C;IAC3C,yBAAyB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,kDAAkD;IAClD,kBAAkB,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACzF,2DAA2D;IAC3D,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;CAC1E;AAMD,qBAAa,gBAAiB,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAU;IAC7C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAC,CAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsC;IAC1E,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAwC;IACnF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAuE;IAC3G,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAyD;gBAE5E,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,MAAM;IAWnF;;;;;;;;;OASG;IACG,eAAe,CACjB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,UAAU,EAAE,EAC1B,IAAI,CAAC,EAAE,QAAQ,EACf,YAAY,CAAC,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,IAAI,CAAC;CA8NnB"}
@@ -88,7 +88,7 @@ class FollowUpExecutor extends base_executor_1.BaseExecutor {
88
88
  * 4. On completion, append assistant turn to conversationTurns
89
89
  * 5. Update process status back to 'completed'
90
90
  */
91
- async executeFollowUp(processId, message, attachments, mode, deliveryMode) {
91
+ async executeFollowUp(processId, message, attachments, mode, deliveryMode, images) {
92
92
  const logger = (0, forge_1.getLogger)();
93
93
  const startTime = Date.now();
94
94
  logger.debug(forge_1.LogCategory.AI, `[FollowUp] Starting follow-up for process ${processId}`);
@@ -126,8 +126,17 @@ class FollowUpExecutor extends base_executor_1.BaseExecutor {
126
126
  this.getOrCreateSession(processId).outputBuffer = '';
127
127
  this.store.registerFlushHandler?.(processId, () => this.flushConversationTurn(processId, true));
128
128
  try {
129
- const isFirstTurn = !(process.conversationTurns?.some(t => t.role === 'assistant'));
130
- const { tools: suggestTools, suffix: followUpSuffix } = (0, prompt_builder_1.buildFollowUpSuggestionsAddon)(this.followUpSuggestions.enabled && isFirstTurn, this.followUpSuggestions.count);
129
+ // Save user turn before the AI call so it is always serialized
130
+ // ahead of the assistant turn in the write-queue.
131
+ await this.store.appendConversationTurn(processId, (turnIndex) => ({
132
+ role: 'user',
133
+ content: message,
134
+ timestamp: new Date(),
135
+ turnIndex,
136
+ timeline: [],
137
+ images,
138
+ }), { additionalUpdates: { status: 'running' } });
139
+ const { tools: suggestTools, suffix: followUpSuffix } = (0, prompt_builder_1.buildFollowUpSuggestionsAddon)(this.followUpSuggestions.enabled, this.followUpSuggestions.count);
131
140
  const followUpMessage = followUpSuffix ? `${message}${followUpSuffix}` : message;
132
141
  const agentMode = toAgentMode(currentMode);
133
142
  const historySystemMessage = historyContext
@@ -176,92 +185,47 @@ class FollowUpExecutor extends base_executor_1.BaseExecutor {
176
185
  const pendingSuggestions = this.sessions.get(processId)?.pendingSuggestions;
177
186
  let assistantTurn;
178
187
  let allTurns;
179
- if (this.store.appendConversationTurn) {
180
- const appendResult = await this.store.appendConversationTurn(processId, (turnIndex) => ({
181
- role: 'assistant',
182
- content: result.response || '(No text response)',
183
- timestamp: new Date(),
184
- turnIndex,
185
- toolCalls: result.toolCalls || undefined,
186
- timeline: followUpTimeline,
187
- suggestions: pendingSuggestions,
188
- tokenUsage: result.tokenUsage,
189
- }), {
190
- filterStreaming: true,
191
- additionalUpdates: (current) => {
192
- const tokenLimit = result.tokenUsage?.tokenLimit ?? current.tokenLimit;
193
- const currentTokens = result.tokenUsage?.currentTokens ?? current.currentTokens;
194
- const prevCumulative = current.cumulativeTokenUsage;
195
- const cumulativeTokenUsage = result.tokenUsage ? {
196
- inputTokens: (prevCumulative?.inputTokens ?? 0) + result.tokenUsage.inputTokens,
197
- outputTokens: (prevCumulative?.outputTokens ?? 0) + result.tokenUsage.outputTokens,
198
- cacheReadTokens: (prevCumulative?.cacheReadTokens ?? 0) + result.tokenUsage.cacheReadTokens,
199
- cacheWriteTokens: (prevCumulative?.cacheWriteTokens ?? 0) + result.tokenUsage.cacheWriteTokens,
200
- totalTokens: (prevCumulative?.totalTokens ?? 0) + result.tokenUsage.totalTokens,
201
- turnCount: (prevCumulative?.turnCount ?? 0) + result.tokenUsage.turnCount,
202
- cost: result.tokenUsage.cost !== undefined
203
- ? (prevCumulative?.cost ?? 0) + result.tokenUsage.cost
204
- : prevCumulative?.cost,
205
- duration: result.tokenUsage.duration !== undefined
206
- ? (prevCumulative?.duration ?? 0) + result.tokenUsage.duration
207
- : prevCumulative?.duration,
208
- } : prevCumulative;
209
- return {
210
- status: 'completed',
211
- endTime: new Date(),
212
- result: result.response || undefined,
213
- ...(tokenLimit !== undefined ? { tokenLimit } : {}),
214
- ...(currentTokens !== undefined ? { currentTokens } : {}),
215
- ...(cumulativeTokenUsage ? { cumulativeTokenUsage } : {}),
216
- };
217
- },
218
- });
219
- assistantTurn = appendResult.turn;
220
- allTurns = appendResult.allTurns;
221
- }
222
- else {
223
- // Fallback: non-atomic read-modify-write for stores without appendConversationTurn
224
- const refreshed = await this.store.getProcess(processId, process.metadata?.workspaceId);
225
- const turns = refreshed?.conversationTurns || [];
226
- const cleanTurns = turns.filter(t => !(t.role === 'assistant' && t.streaming));
227
- assistantTurn = {
228
- role: 'assistant',
229
- content: result.response || '(No text response)',
230
- timestamp: new Date(),
231
- turnIndex: cleanTurns.length,
232
- toolCalls: result.toolCalls || undefined,
233
- timeline: followUpTimeline,
234
- suggestions: pendingSuggestions,
235
- tokenUsage: result.tokenUsage,
236
- };
237
- const tokenLimit = result.tokenUsage?.tokenLimit ?? refreshed?.tokenLimit;
238
- const currentTokens = result.tokenUsage?.currentTokens ?? refreshed?.currentTokens;
239
- const prevCumulative = refreshed?.cumulativeTokenUsage;
240
- const cumulativeTokenUsage = result.tokenUsage ? {
241
- inputTokens: (prevCumulative?.inputTokens ?? 0) + result.tokenUsage.inputTokens,
242
- outputTokens: (prevCumulative?.outputTokens ?? 0) + result.tokenUsage.outputTokens,
243
- cacheReadTokens: (prevCumulative?.cacheReadTokens ?? 0) + result.tokenUsage.cacheReadTokens,
244
- cacheWriteTokens: (prevCumulative?.cacheWriteTokens ?? 0) + result.tokenUsage.cacheWriteTokens,
245
- totalTokens: (prevCumulative?.totalTokens ?? 0) + result.tokenUsage.totalTokens,
246
- turnCount: (prevCumulative?.turnCount ?? 0) + result.tokenUsage.turnCount,
247
- cost: result.tokenUsage.cost !== undefined
248
- ? (prevCumulative?.cost ?? 0) + result.tokenUsage.cost
249
- : prevCumulative?.cost,
250
- duration: result.tokenUsage.duration !== undefined
251
- ? (prevCumulative?.duration ?? 0) + result.tokenUsage.duration
252
- : prevCumulative?.duration,
253
- } : prevCumulative;
254
- allTurns = [...cleanTurns, assistantTurn];
255
- await this.store.updateProcess(processId, {
256
- conversationTurns: allTurns,
257
- status: 'completed',
258
- endTime: new Date(),
259
- result: result.response || undefined,
260
- ...(tokenLimit !== undefined ? { tokenLimit } : {}),
261
- ...(currentTokens !== undefined ? { currentTokens } : {}),
262
- ...(cumulativeTokenUsage ? { cumulativeTokenUsage } : {}),
263
- });
264
- }
188
+ const appendResult = await this.store.appendConversationTurn(processId, (turnIndex) => ({
189
+ role: 'assistant',
190
+ content: result.response || '(No text response)',
191
+ timestamp: new Date(),
192
+ turnIndex,
193
+ toolCalls: result.toolCalls || undefined,
194
+ timeline: followUpTimeline,
195
+ suggestions: pendingSuggestions,
196
+ tokenUsage: result.tokenUsage,
197
+ }), {
198
+ filterStreaming: true,
199
+ additionalUpdates: (current) => {
200
+ const tokenLimit = result.tokenUsage?.tokenLimit ?? current.tokenLimit;
201
+ const currentTokens = result.tokenUsage?.currentTokens ?? current.currentTokens;
202
+ const prevCumulative = current.cumulativeTokenUsage;
203
+ const cumulativeTokenUsage = result.tokenUsage ? {
204
+ inputTokens: (prevCumulative?.inputTokens ?? 0) + result.tokenUsage.inputTokens,
205
+ outputTokens: (prevCumulative?.outputTokens ?? 0) + result.tokenUsage.outputTokens,
206
+ cacheReadTokens: (prevCumulative?.cacheReadTokens ?? 0) + result.tokenUsage.cacheReadTokens,
207
+ cacheWriteTokens: (prevCumulative?.cacheWriteTokens ?? 0) + result.tokenUsage.cacheWriteTokens,
208
+ totalTokens: (prevCumulative?.totalTokens ?? 0) + result.tokenUsage.totalTokens,
209
+ turnCount: (prevCumulative?.turnCount ?? 0) + result.tokenUsage.turnCount,
210
+ cost: result.tokenUsage.cost !== undefined
211
+ ? (prevCumulative?.cost ?? 0) + result.tokenUsage.cost
212
+ : prevCumulative?.cost,
213
+ duration: result.tokenUsage.duration !== undefined
214
+ ? (prevCumulative?.duration ?? 0) + result.tokenUsage.duration
215
+ : prevCumulative?.duration,
216
+ } : prevCumulative;
217
+ return {
218
+ status: 'completed',
219
+ endTime: new Date(),
220
+ result: result.response || undefined,
221
+ ...(tokenLimit !== undefined ? { tokenLimit } : {}),
222
+ ...(currentTokens !== undefined ? { currentTokens } : {}),
223
+ ...(cumulativeTokenUsage ? { cumulativeTokenUsage } : {}),
224
+ };
225
+ },
226
+ });
227
+ assistantTurn = appendResult.turn;
228
+ allTurns = appendResult.allTurns;
265
229
  if (result.tokenUsage) {
266
230
  try {
267
231
  this.store.emitProcessEvent(processId, {
@@ -283,41 +247,20 @@ class FollowUpExecutor extends base_executor_1.BaseExecutor {
283
247
  const errorMsg = error instanceof Error ? error.message : String(error);
284
248
  const duration = Date.now() - startTime;
285
249
  logger.debug(forge_1.LogCategory.AI, `[FollowUp] Failed for ${processId} in ${duration}ms: ${errorMsg}`);
286
- if (this.store.appendConversationTurn) {
287
- await this.store.appendConversationTurn(processId, (turnIndex) => ({
288
- role: 'assistant',
289
- content: `Error: ${errorMsg}`,
290
- timestamp: new Date(),
291
- turnIndex,
292
- timeline: [],
293
- }), {
294
- filterStreaming: true,
295
- additionalUpdates: {
296
- status: 'failed',
297
- endTime: new Date(),
298
- error: errorMsg,
299
- },
300
- });
301
- }
302
- else {
303
- // Fallback for stores without appendConversationTurn
304
- const refreshed = await this.store.getProcess(processId, process.metadata?.workspaceId);
305
- const turns = refreshed?.conversationTurns || [];
306
- const cleanTurns = turns.filter(t => !(t.role === 'assistant' && t.streaming));
307
- const errorTurn = {
308
- role: 'assistant',
309
- content: `Error: ${errorMsg}`,
310
- timestamp: new Date(),
311
- turnIndex: cleanTurns.length,
312
- timeline: [],
313
- };
314
- await this.store.updateProcess(processId, {
315
- conversationTurns: [...cleanTurns, errorTurn],
250
+ await this.store.appendConversationTurn(processId, (turnIndex) => ({
251
+ role: 'assistant',
252
+ content: `Error: ${errorMsg}`,
253
+ timestamp: new Date(),
254
+ turnIndex,
255
+ timeline: [],
256
+ }), {
257
+ filterStreaming: true,
258
+ additionalUpdates: {
316
259
  status: 'failed',
317
260
  endTime: new Date(),
318
261
  error: errorMsg,
319
- });
320
- }
262
+ },
263
+ });
321
264
  this.store.emitProcessComplete(processId, 'failed', `${duration}ms`);
322
265
  }
323
266
  finally {
@@ -1 +1 @@
1
- {"version":3,"file":"follow-up-executor.js","sourceRoot":"","sources":["../../../src/server/executors/follow-up-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"follow-up-executor.js","sourceRoot":"","sources":["../../../src/server/executors/follow-up-executor.ts"],"names":[],"mappings":"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"}
@@ -28,7 +28,7 @@ export interface LifecycleRunnerOptions {
28
28
  /** Set of task IDs that have been cancelled (shared with the bridge). */
29
29
  cancelledTasks: Set<string>;
30
30
  /** Delegate follow-up execution to the FollowUpExecutor. */
31
- executeFollowUpFn: (processId: string, message: string, attachments?: Attachment[], mode?: string, deliveryMode?: string) => Promise<void>;
31
+ executeFollowUpFn: (processId: string, message: string, attachments?: Attachment[], mode?: string, deliveryMode?: string, images?: string[]) => Promise<void>;
32
32
  /** Dispatch execution by task type (chat/workflow/script). */
33
33
  executeByTypeFn: (task: QueuedTask, prompt: string) => Promise<unknown>;
34
34
  /** Resolve the working directory for a given task. */
@@ -1 +1 @@
1
- {"version":3,"file":"process-lifecycle-runner.d.ts","sourceRoot":"","sources":["../../../src/server/executors/process-lifecycle-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAER,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,mBAAmB,EACtB,MAAM,4BAA4B,CAAC;AAkBpC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAM/C,2EAA2E;AAC3E,QAAA,MAAM,iBAAiB,aAAgD,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAM7B,MAAM,WAAW,sBAAsB;IACnC,yEAAyE;IACzE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,4DAA4D;IAC5D,iBAAiB,EAAE,CACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,UAAU,EAAE,EAC1B,IAAI,CAAC,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,MAAM,KACpB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,8DAA8D;IAC9D,eAAe,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxE,sDAAsD;IACtD,qBAAqB,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,MAAM,GAAG,SAAS,CAAC;CACnE;AAMD,qBAAa,sBAAuB,SAAQ,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyD;gBAGrF,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,IAAI;IAM3E;;;;;;OAMG;IACG,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CA+N1F"}
1
+ {"version":3,"file":"process-lifecycle-runner.d.ts","sourceRoot":"","sources":["../../../src/server/executors/process-lifecycle-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,KAAK,EAER,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,mBAAmB,EACtB,MAAM,4BAA4B,CAAC;AAmBpC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAM/C,2EAA2E;AAC3E,QAAA,MAAM,iBAAiB,aAAgD,CAAC;AAExE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAM7B,MAAM,WAAW,sBAAsB;IACnC,yEAAyE;IACzE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC5B,4DAA4D;IAC5D,iBAAiB,EAAE,CACf,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,WAAW,CAAC,EAAE,UAAU,EAAE,EAC1B,IAAI,CAAC,EAAE,MAAM,EACb,YAAY,CAAC,EAAE,MAAM,EACrB,MAAM,CAAC,EAAE,MAAM,EAAE,KAChB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,8DAA8D;IAC9D,eAAe,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACxE,sDAAsD;IACtD,qBAAqB,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,MAAM,GAAG,SAAS,CAAC;CACnE;AAMD,qBAAa,sBAAuB,SAAQ,YAAY;IACpD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAyD;gBAGrF,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,IAAI;IAM3E;;;;;;OAMG;IACG,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,sBAAsB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAuO1F"}
@@ -60,6 +60,7 @@ const forge_1 = require("@plusplusoneplusplus/forge");
60
60
  const prompt_builder_1 = require("./prompt-builder");
61
61
  const image_store_1 = require("./image-store");
62
62
  const task_types_1 = require("../task-types");
63
+ const conversation_recorder_1 = require("../memory/conversation-recorder");
63
64
  const base_executor_1 = require("./base-executor");
64
65
  // ============================================================================
65
66
  // Constants
@@ -112,7 +113,7 @@ class ProcessLifecycleRunner extends base_executor_1.BaseExecutor {
112
113
  const imageTempDir = followUpPayload.imageTempDir;
113
114
  await (0, image_store_1.rehydrateImagesIfNeeded)(task.payload);
114
115
  try {
115
- await opts.executeFollowUpFn(followUpPayload.processId, followUpPayload.prompt, followUpPayload.attachments, followUpPayload.mode, followUpPayload.deliveryMode);
116
+ await opts.executeFollowUpFn(followUpPayload.processId, followUpPayload.prompt, followUpPayload.attachments, followUpPayload.mode, followUpPayload.deliveryMode, followUpPayload.images);
116
117
  const duration = Date.now() - startTime;
117
118
  logger.debug(forge_1.LogCategory.AI, `[QueueExecutor] Follow-up task ${task.id} completed in ${duration}ms`);
118
119
  return { success: true, durationMs: duration };
@@ -172,7 +173,46 @@ class ProcessLifecycleRunner extends base_executor_1.BaseExecutor {
172
173
  images: payloadImages?.length > 0 ? payloadImages : undefined,
173
174
  },
174
175
  ];
175
- process.conversationTurns = initialTurns;
176
+ // Cold resume: prepend historical turns before creating the process
177
+ const resumedFrom = task.payload?.resumedFrom;
178
+ if (resumedFrom && typeof resumedFrom === 'string') {
179
+ try {
180
+ const oldProcess = await this.store.getProcess(resumedFrom, task.payload?.workspaceId);
181
+ if (oldProcess?.conversationTurns?.length) {
182
+ const historicalTurns = oldProcess.conversationTurns.map((t, i) => ({
183
+ ...t,
184
+ historical: true,
185
+ turnIndex: i,
186
+ }));
187
+ const offset = historicalTurns.length;
188
+ process.conversationTurns = [
189
+ ...historicalTurns,
190
+ ...initialTurns.map((t, i) => ({ ...t, turnIndex: offset + i })),
191
+ ];
192
+ }
193
+ else {
194
+ process.conversationTurns = initialTurns;
195
+ }
196
+ }
197
+ catch {
198
+ // Non-fatal: old process may be gone
199
+ process.conversationTurns = initialTurns;
200
+ }
201
+ }
202
+ else {
203
+ process.conversationTurns = initialTurns;
204
+ }
205
+ // Record initial prompt to memory (skip scheduled/template-generated runs)
206
+ const isScheduledRun = (0, task_types_1.isChatPayload)(task.payload) && !!task.payload.context?.scheduleId;
207
+ if (this.dataDir && task.type === 'chat' && !isScheduledRun) {
208
+ const wsId = process.metadata?.workspaceId ?? '';
209
+ if (wsId) {
210
+ try {
211
+ (0, conversation_recorder_1.recordUserMessage)(this.dataDir, wsId, prompt);
212
+ }
213
+ catch { /* never block */ }
214
+ }
215
+ }
176
216
  try {
177
217
  await this.store.addProcess(process);
178
218
  }
@@ -188,64 +228,38 @@ class ProcessLifecycleRunner extends base_executor_1.BaseExecutor {
188
228
  const responseText = result?.response ?? '';
189
229
  const finalTimeline = result?.timeline
190
230
  ?? (0, forge_1.mergeConsecutiveContentItems)(this.sessions.get(processId)?.timelineBuffer || []);
191
- const currentProcess = await this.store.getProcess(processId, task.payload?.workspaceId);
192
- const existingTurns = currentProcess?.conversationTurns?.length
193
- ? currentProcess.conversationTurns
194
- : initialTurns;
195
- const finalTurns = [
196
- existingTurns[0],
197
- {
231
+ try {
232
+ const appendResult = await this.store.appendConversationTurn(processId, (turnIndex) => ({
198
233
  role: 'assistant',
199
234
  content: responseText,
200
235
  timestamp: new Date(),
201
- turnIndex: 1,
236
+ turnIndex,
202
237
  toolCalls: result?.toolCalls || undefined,
203
238
  timeline: finalTimeline,
204
239
  suggestions: result?.pendingSuggestions ?? this.sessions.get(processId)?.pendingSuggestions,
205
- },
206
- ];
207
- // Cold resume: prepend historical turns from the original session
208
- const resumedFrom = task.payload?.resumedFrom;
209
- let combinedTurns = finalTurns;
210
- if (resumedFrom && typeof resumedFrom === 'string') {
211
- try {
212
- const oldProcess = await this.store.getProcess(resumedFrom, task.payload?.workspaceId);
213
- if (oldProcess?.conversationTurns?.length) {
214
- const historicalTurns = oldProcess.conversationTurns.map((t, i) => ({
215
- ...t,
216
- historical: true,
217
- turnIndex: i,
218
- }));
219
- const offset = historicalTurns.length;
220
- combinedTurns = [
221
- ...historicalTurns,
222
- ...finalTurns.map((t, i) => ({ ...t, turnIndex: offset + i })),
223
- ];
224
- }
225
- }
226
- catch {
227
- // Non-fatal: old process may be gone
228
- }
229
- }
230
- try {
240
+ }), {
241
+ filterStreaming: true,
242
+ additionalUpdates: (current) => {
243
+ if (TERMINAL_STATUSES.has(current.status))
244
+ return {};
245
+ return {
246
+ status: 'completed',
247
+ endTime: new Date(),
248
+ result: typeof result === 'string' ? result : JSON.stringify(result),
249
+ ...(sessionId ? { sdkSessionId: sessionId } : {}),
250
+ };
251
+ },
252
+ });
253
+ const combinedTurns = appendResult?.allTurns ?? process.conversationTurns ?? initialTurns;
231
254
  const currentProc = await this.store.getProcess(processId, task.payload?.workspaceId);
232
255
  if (!TERMINAL_STATUSES.has(currentProc?.status ?? '')) {
233
- await this.store.updateProcess(processId, {
234
- status: 'completed',
235
- endTime: new Date(),
236
- result: typeof result === 'string' ? result : JSON.stringify(result),
237
- ...(sessionId ? { sdkSessionId: sessionId } : {}),
238
- conversationTurns: combinedTurns,
239
- });
240
256
  this.store.emitProcessComplete(processId, 'completed', `${duration}ms`);
241
257
  }
258
+ setTimeout(() => this.onGenerateTitle(processId, combinedTurns), 0);
242
259
  }
243
260
  catch {
244
261
  // Non-fatal
245
262
  }
246
- // Schedule title generation as a macrotask so it runs AFTER the queue
247
- // executor fires taskCompleted and after the caller's synchronous code.
248
- setTimeout(() => this.onGenerateTitle(processId, combinedTurns), 0);
249
263
  return { success: true, result, durationMs: Date.now() - startTime };
250
264
  }
251
265
  catch (error) {
@@ -254,13 +268,11 @@ class ProcessLifecycleRunner extends base_executor_1.BaseExecutor {
254
268
  logger.debug(forge_1.LogCategory.AI, `[QueueExecutor] Task ${task.id} failed in ${duration}ms: ${errorMsg}`);
255
269
  try {
256
270
  const currentProcess = await this.store.getProcess(processId, task.payload?.workspaceId);
257
- const existingTurns = currentProcess?.conversationTurns || initialTurns;
258
271
  if (!TERMINAL_STATUSES.has(currentProcess?.status ?? '')) {
259
272
  await this.store.updateProcess(processId, {
260
273
  status: 'failed',
261
274
  endTime: new Date(),
262
275
  error: errorMsg,
263
- conversationTurns: existingTurns,
264
276
  });
265
277
  this.store.emitProcessComplete(processId, 'failed', `${duration}ms`);
266
278
  }