@jingyi0605/codingns 0.3.6 → 0.4.0

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 (185) hide show
  1. package/README.md +3 -0
  2. package/bin/codingns.mjs +489 -1
  3. package/dist/public/assets/{TerminalPage-D00S4KM6.js → TerminalPage-6jHZV9Mh.js} +17 -17
  4. package/dist/public/assets/index-CSVhg7I8.js +123 -0
  5. package/dist/public/assets/index-Ce1VX19m.css +1 -0
  6. package/dist/public/index.html +2 -2
  7. package/dist/server/modules/assistant-capability/assistant-capability-controller.d.ts +173 -0
  8. package/dist/server/modules/assistant-capability/assistant-capability-controller.js +307 -0
  9. package/dist/server/modules/assistant-capability/assistant-capability-controller.js.map +1 -1
  10. package/dist/server/modules/assistant-capability/assistant-capability-service.d.ts +199 -2
  11. package/dist/server/modules/assistant-capability/assistant-capability-service.js +565 -3
  12. package/dist/server/modules/assistant-capability/assistant-capability-service.js.map +1 -1
  13. package/dist/server/modules/butler/assistant-automation-service.d.ts +110 -0
  14. package/dist/server/modules/butler/assistant-automation-service.js +786 -0
  15. package/dist/server/modules/butler/assistant-automation-service.js.map +1 -0
  16. package/dist/server/modules/butler/assistant-automation-trigger.d.ts +94 -0
  17. package/dist/server/modules/butler/assistant-automation-trigger.js +400 -0
  18. package/dist/server/modules/butler/assistant-automation-trigger.js.map +1 -0
  19. package/dist/server/modules/butler/assistant-sandbox-service.d.ts +55 -0
  20. package/dist/server/modules/butler/assistant-sandbox-service.js +266 -0
  21. package/dist/server/modules/butler/assistant-sandbox-service.js.map +1 -0
  22. package/dist/server/modules/butler/butler-action-context-service.d.ts +4 -1
  23. package/dist/server/modules/butler/butler-action-context-service.js +8 -2
  24. package/dist/server/modules/butler/butler-action-context-service.js.map +1 -1
  25. package/dist/server/modules/butler/butler-control-session-service.d.ts +8 -1
  26. package/dist/server/modules/butler/butler-control-session-service.js +154 -40
  27. package/dist/server/modules/butler/butler-control-session-service.js.map +1 -1
  28. package/dist/server/modules/butler/butler-control-timer-scheduler.d.ts +32 -0
  29. package/dist/server/modules/butler/butler-control-timer-scheduler.js +93 -0
  30. package/dist/server/modules/butler/butler-control-timer-scheduler.js.map +1 -0
  31. package/dist/server/modules/butler/butler-control-timer-service.d.ts +42 -0
  32. package/dist/server/modules/butler/butler-control-timer-service.js +132 -0
  33. package/dist/server/modules/butler/butler-control-timer-service.js.map +1 -0
  34. package/dist/server/modules/butler/butler-controller.d.ts +42 -2
  35. package/dist/server/modules/butler/butler-controller.js +79 -12
  36. package/dist/server/modules/butler/butler-controller.js.map +1 -1
  37. package/dist/server/modules/butler/butler-follow-up-service.d.ts +9 -1
  38. package/dist/server/modules/butler/butler-follow-up-service.js +273 -181
  39. package/dist/server/modules/butler/butler-follow-up-service.js.map +1 -1
  40. package/dist/server/modules/butler/butler-inbox-analysis-service.d.ts +4 -1
  41. package/dist/server/modules/butler/butler-inbox-analysis-service.js +18 -4
  42. package/dist/server/modules/butler/butler-inbox-analysis-service.js.map +1 -1
  43. package/dist/server/modules/butler/butler-profile-service.js +2 -5
  44. package/dist/server/modules/butler/butler-profile-service.js.map +1 -1
  45. package/dist/server/modules/butler/butler-project-service.d.ts +3 -1
  46. package/dist/server/modules/butler/butler-project-service.js +7 -1
  47. package/dist/server/modules/butler/butler-project-service.js.map +1 -1
  48. package/dist/server/modules/butler/butler-session-service.d.ts +3 -1
  49. package/dist/server/modules/butler/butler-session-service.js +12 -1
  50. package/dist/server/modules/butler/butler-session-service.js.map +1 -1
  51. package/dist/server/modules/butler/butler-session-summary-service.js +2 -1
  52. package/dist/server/modules/butler/butler-session-summary-service.js.map +1 -1
  53. package/dist/server/modules/butler/butler-workspace-context.d.ts +3 -0
  54. package/dist/server/modules/butler/butler-workspace-context.js +164 -44
  55. package/dist/server/modules/butler/butler-workspace-context.js.map +1 -1
  56. package/dist/server/modules/butler/patrol-execution-service.js +2 -1
  57. package/dist/server/modules/butler/patrol-execution-service.js.map +1 -1
  58. package/dist/server/modules/butler/provider-adapter-registry.d.ts +3 -0
  59. package/dist/server/modules/butler/provider-adapter-registry.js +18 -1
  60. package/dist/server/modules/butler/provider-adapter-registry.js.map +1 -1
  61. package/dist/server/modules/butler/verification-run-service.d.ts +9 -2
  62. package/dist/server/modules/butler/verification-run-service.js +188 -34
  63. package/dist/server/modules/butler/verification-run-service.js.map +1 -1
  64. package/dist/server/modules/debug-target/debug-target-controller.js +1 -1
  65. package/dist/server/modules/debug-target/debug-target-controller.js.map +1 -1
  66. package/dist/server/modules/debug-target/debug-target-service.d.ts +7 -2
  67. package/dist/server/modules/debug-target/debug-target-service.js +563 -100
  68. package/dist/server/modules/debug-target/debug-target-service.js.map +1 -1
  69. package/dist/server/modules/git/git-command-helper-client.d.ts +1 -0
  70. package/dist/server/modules/git/git-command-helper-client.js +19 -26
  71. package/dist/server/modules/git/git-command-helper-client.js.map +1 -1
  72. package/dist/server/modules/git/git-command-runner.js +19 -1
  73. package/dist/server/modules/git/git-command-runner.js.map +1 -1
  74. package/dist/server/modules/preferences/profile-service.d.ts +3 -1
  75. package/dist/server/modules/preferences/profile-service.js +74 -3
  76. package/dist/server/modules/preferences/profile-service.js.map +1 -1
  77. package/dist/server/modules/provider/provider-discovery-helper-client.d.ts +5 -3
  78. package/dist/server/modules/provider/provider-discovery-helper-client.js +129 -43
  79. package/dist/server/modules/provider/provider-discovery-helper-client.js.map +1 -1
  80. package/dist/server/modules/provider/provider-discovery-helper-process.js +44 -0
  81. package/dist/server/modules/provider/provider-discovery-helper-process.js.map +1 -1
  82. package/dist/server/modules/provider/provider-discovery-runtime.js +83 -3
  83. package/dist/server/modules/provider/provider-discovery-runtime.js.map +1 -1
  84. package/dist/server/modules/sessions/claude-runtime-helper-client.js +23 -1
  85. package/dist/server/modules/sessions/claude-runtime-helper-client.js.map +1 -1
  86. package/dist/server/modules/sessions/session-history-service.d.ts +7 -1
  87. package/dist/server/modules/sessions/session-history-service.js +251 -41
  88. package/dist/server/modules/sessions/session-history-service.js.map +1 -1
  89. package/dist/server/modules/sessions/session-live-runtime-service.d.ts +6 -0
  90. package/dist/server/modules/sessions/session-live-runtime-service.js +97 -11
  91. package/dist/server/modules/sessions/session-live-runtime-service.js.map +1 -1
  92. package/dist/server/modules/sessions/session-message-origin-utils.d.ts +12 -0
  93. package/dist/server/modules/sessions/session-message-origin-utils.js +45 -0
  94. package/dist/server/modules/sessions/session-message-origin-utils.js.map +1 -0
  95. package/dist/server/modules/sessions/session-permission-request-service.js +167 -0
  96. package/dist/server/modules/sessions/session-permission-request-service.js.map +1 -1
  97. package/dist/server/modules/skills/builtin-skill-service.js +1 -1
  98. package/dist/server/modules/skills/builtin-skill-service.js.map +1 -1
  99. package/dist/server/modules/skills/builtin-skills/codingns-assistant/SKILL.md +19 -12
  100. package/dist/server/modules/skills/builtin-skills/codingns-assistant/references/cli-workflow.md +9 -3
  101. package/dist/server/modules/tasks/task-helper-client.d.ts +5 -2
  102. package/dist/server/modules/tasks/task-helper-client.js +118 -38
  103. package/dist/server/modules/tasks/task-helper-client.js.map +1 -1
  104. package/dist/server/modules/tasks/task-helper-process.js +94 -3
  105. package/dist/server/modules/tasks/task-helper-process.js.map +1 -1
  106. package/dist/server/modules/tasks/task-types.d.ts +3 -0
  107. package/dist/server/modules/tasks/task-types.js +4 -1
  108. package/dist/server/modules/tasks/task-types.js.map +1 -1
  109. package/dist/server/modules/terminal/command-template-service.d.ts +9 -0
  110. package/dist/server/modules/terminal/command-template-service.js +87 -5
  111. package/dist/server/modules/terminal/command-template-service.js.map +1 -1
  112. package/dist/server/modules/terminal/terminal-controller.d.ts +3 -0
  113. package/dist/server/modules/terminal/terminal-controller.js +41 -0
  114. package/dist/server/modules/terminal/terminal-controller.js.map +1 -1
  115. package/dist/server/modules/workbench/workbench-service.d.ts +3 -0
  116. package/dist/server/modules/workbench/workbench-service.js +4 -3
  117. package/dist/server/modules/workbench/workbench-service.js.map +1 -1
  118. package/dist/server/modules/workbench/workspace-file-watcher.d.ts +14 -6
  119. package/dist/server/modules/workbench/workspace-file-watcher.js +267 -57
  120. package/dist/server/modules/workbench/workspace-file-watcher.js.map +1 -1
  121. package/dist/server/modules/workbench/workspace-panel-snapshot-service.d.ts +2 -0
  122. package/dist/server/modules/workbench/workspace-panel-snapshot-service.js +32 -3
  123. package/dist/server/modules/workbench/workspace-panel-snapshot-service.js.map +1 -1
  124. package/dist/server/modules/worktree/worktree-manager.d.ts +9 -1
  125. package/dist/server/modules/worktree/worktree-manager.js +9 -1
  126. package/dist/server/modules/worktree/worktree-manager.js.map +1 -1
  127. package/dist/server/routes/assistant.js +19 -0
  128. package/dist/server/routes/assistant.js.map +1 -1
  129. package/dist/server/routes/butler.js +5 -0
  130. package/dist/server/routes/butler.js.map +1 -1
  131. package/dist/server/server/create-server.d.ts +8 -0
  132. package/dist/server/server/create-server.js +36 -13
  133. package/dist/server/server/create-server.js.map +1 -1
  134. package/dist/server/storage/repositories/assistant-automation-run-repository.d.ts +12 -0
  135. package/dist/server/storage/repositories/assistant-automation-run-repository.js +139 -0
  136. package/dist/server/storage/repositories/assistant-automation-run-repository.js.map +1 -0
  137. package/dist/server/storage/repositories/assistant-automation-task-repository.d.ts +15 -0
  138. package/dist/server/storage/repositories/assistant-automation-task-repository.js +173 -0
  139. package/dist/server/storage/repositories/assistant-automation-task-repository.js.map +1 -0
  140. package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.d.ts +17 -0
  141. package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.js +164 -0
  142. package/dist/server/storage/repositories/assistant-sandbox-workspace-repository.js.map +1 -0
  143. package/dist/server/storage/repositories/butler-control-session-repository.js +27 -3
  144. package/dist/server/storage/repositories/butler-control-session-repository.js.map +1 -1
  145. package/dist/server/storage/repositories/butler-control-timer-repository.d.ts +15 -0
  146. package/dist/server/storage/repositories/butler-control-timer-repository.js +157 -0
  147. package/dist/server/storage/repositories/butler-control-timer-repository.js.map +1 -0
  148. package/dist/server/storage/repositories/user-preference-profile-repository.js +6 -3
  149. package/dist/server/storage/repositories/user-preference-profile-repository.js.map +1 -1
  150. package/dist/server/storage/sqlite/client.js +239 -2
  151. package/dist/server/storage/sqlite/client.js.map +1 -1
  152. package/dist/server/storage/sqlite/schema.sql +107 -1
  153. package/dist/server/types/domain.d.ts +89 -2
  154. package/dist/server/ws/workbench-ws-hub.d.ts +14 -8
  155. package/dist/server/ws/workbench-ws-hub.js +299 -163
  156. package/dist/server/ws/workbench-ws-hub.js.map +1 -1
  157. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.d.ts +4 -1
  158. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js +111 -3
  159. package/node_modules/@codingns/session-sync-core/dist/providers/claude-code.js.map +1 -1
  160. package/node_modules/@codingns/session-sync-core/dist/providers/codex.d.ts +6 -1
  161. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js +306 -31
  162. package/node_modules/@codingns/session-sync-core/dist/providers/codex.js.map +1 -1
  163. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.d.ts +5 -1
  164. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js +187 -26
  165. package/node_modules/@codingns/session-sync-core/dist/providers/gemini.js.map +1 -1
  166. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.d.ts +4 -1
  167. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js +98 -1
  168. package/node_modules/@codingns/session-sync-core/dist/providers/kimi.js.map +1 -1
  169. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.d.ts +2 -0
  170. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js +71 -8
  171. package/node_modules/@codingns/session-sync-core/dist/providers/opencode.js.map +1 -1
  172. package/node_modules/@codingns/session-sync-core/dist/providers/utils.d.ts +1 -0
  173. package/node_modules/@codingns/session-sync-core/dist/providers/utils.js +4 -1
  174. package/node_modules/@codingns/session-sync-core/dist/providers/utils.js.map +1 -1
  175. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js +44 -0
  176. package/node_modules/@codingns/session-sync-core/dist/runtime/claude-runtime.js.map +1 -1
  177. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js +9 -3
  178. package/node_modules/@codingns/session-sync-core/dist/runtime/codex-runtime.js.map +1 -1
  179. package/node_modules/@codingns/session-sync-core/dist/runtime/types.d.ts +1 -0
  180. package/node_modules/@codingns/session-sync-core/dist/services.js +17 -8
  181. package/node_modules/@codingns/session-sync-core/dist/services.js.map +1 -1
  182. package/node_modules/@codingns/session-sync-core/dist/types.d.ts +4 -0
  183. package/package.json +1 -1
  184. package/dist/public/assets/index-BlOinYqR.js +0 -122
  185. package/dist/public/assets/index-Dg_7g6lA.css +0 -1
@@ -1,16 +1,19 @@
1
1
  import type { TaskHelperProcessHandlerName } from "./task-helper-process-handlers.js";
2
2
  export declare class TaskHelperProcessClient {
3
- private readonly child;
4
- private readonly stdoutReader;
3
+ private child;
4
+ private stdoutReader;
5
5
  private readonly pendingRequests;
6
6
  private nextRequestId;
7
7
  private disposed;
8
8
  constructor();
9
9
  execute<TResult>(handler: TaskHelperProcessHandlerName, input: unknown, signal?: AbortSignal): Promise<TResult>;
10
+ private executeOnce;
10
11
  dispose(): void;
11
12
  private handleResponseLine;
12
13
  private rejectAll;
13
14
  private sendCancel;
15
+ private ensureChild;
16
+ private handleChildTermination;
14
17
  }
15
18
  export declare function getSharedTaskHelperProcessClient(): TaskHelperProcessClient;
16
19
  export declare function disposeSharedTaskHelperProcessClient(): void;
@@ -2,43 +2,42 @@ import { spawn } from "node:child_process";
2
2
  import path from "node:path";
3
3
  import readline from "node:readline";
4
4
  import { fileURLToPath } from "node:url";
5
+ const GLOBAL_TASK_HELPER_PROCESS_CLIENT_KEY = "__codingnsTaskHelperProcessClient__";
5
6
  let sharedTaskHelperProcessClient = null;
6
7
  export class TaskHelperProcessClient {
7
- child;
8
- stdoutReader;
8
+ child = null;
9
+ stdoutReader = null;
9
10
  pendingRequests = new Map();
10
11
  nextRequestId = 1;
11
12
  disposed = false;
12
13
  constructor() {
13
- const launch = resolveHelperLaunch();
14
- this.child = spawn(launch.command, launch.args, {
15
- cwd: process.cwd(),
16
- env: process.env,
17
- stdio: ["pipe", "pipe", "pipe"]
18
- });
19
- this.stdoutReader = readline.createInterface({
20
- input: this.child.stdout
21
- });
22
- this.stdoutReader.on("line", (line) => {
23
- this.handleResponseLine(line);
24
- });
25
- this.child.stderr.on("data", (chunk) => {
26
- const content = String(chunk).trim();
27
- if (content) {
28
- console.warn(`[task-helper] ${content}`);
29
- }
30
- });
31
- this.child.on("error", (error) => {
32
- this.rejectAll(error);
33
- });
34
- this.child.on("exit", (code, signal) => {
35
- this.rejectAll(new Error(`task helper 已退出:code=${code ?? "null"} signal=${signal ?? "null"}`));
36
- });
14
+ this.ensureChild();
37
15
  }
38
16
  async execute(handler, input, signal) {
17
+ let attempt = 0;
18
+ while (true) {
19
+ try {
20
+ return await this.executeOnce(handler, input, signal);
21
+ }
22
+ catch (error) {
23
+ if (attempt >= 1 ||
24
+ this.disposed ||
25
+ signal?.aborted ||
26
+ !isRetryableHelperClientError(error)) {
27
+ throw error;
28
+ }
29
+ attempt += 1;
30
+ this.handleChildTermination(error instanceof Error
31
+ ? error
32
+ : new Error("task helper pipe 已断开"));
33
+ }
34
+ }
35
+ }
36
+ async executeOnce(handler, input, signal) {
39
37
  if (this.disposed) {
40
38
  return Promise.reject(new Error("task helper 已关闭"));
41
39
  }
40
+ const child = this.ensureChild();
42
41
  const id = String(this.nextRequestId++);
43
42
  return await new Promise((resolve, reject) => {
44
43
  let aborted = false;
@@ -74,7 +73,7 @@ export class TaskHelperProcessClient {
74
73
  }
75
74
  }
76
75
  });
77
- this.child.stdin.write(`${JSON.stringify({
76
+ child.stdin.write(`${JSON.stringify({
78
77
  id,
79
78
  type: "run",
80
79
  handler,
@@ -96,11 +95,13 @@ export class TaskHelperProcessClient {
96
95
  return;
97
96
  }
98
97
  this.disposed = true;
99
- this.stdoutReader.close();
100
- if (!this.child.killed) {
98
+ this.stdoutReader?.close();
99
+ if (this.child && !this.child.killed) {
101
100
  this.child.kill("SIGTERM");
102
101
  }
103
102
  this.rejectAll(new Error("task helper 已关闭"));
103
+ this.child = null;
104
+ this.stdoutReader = null;
104
105
  }
105
106
  handleResponseLine(line) {
106
107
  const trimmed = line.trim();
@@ -132,31 +133,110 @@ export class TaskHelperProcessClient {
132
133
  this.pendingRequests.clear();
133
134
  }
134
135
  async sendCancel(targetId) {
135
- if (this.disposed || this.child.killed || this.child.stdin.destroyed) {
136
+ if (this.disposed ||
137
+ !this.child ||
138
+ this.child.killed ||
139
+ this.child.stdin.destroyed) {
136
140
  return;
137
141
  }
142
+ const child = this.child;
138
143
  await new Promise((resolve) => {
139
- this.child.stdin.write(`${JSON.stringify({
140
- id: `cancel:${targetId}`,
141
- type: "cancel",
142
- targetId
143
- })}\n`, () => {
144
+ try {
145
+ child.stdin.write(`${JSON.stringify({
146
+ id: `cancel:${targetId}`,
147
+ type: "cancel",
148
+ targetId
149
+ })}\n`, () => {
150
+ resolve();
151
+ });
152
+ }
153
+ catch {
144
154
  resolve();
145
- });
155
+ }
146
156
  });
147
157
  }
158
+ ensureChild() {
159
+ if (this.child && this.stdoutReader && !this.child.killed && !this.child.stdin.destroyed) {
160
+ return this.child;
161
+ }
162
+ const launch = resolveHelperLaunch();
163
+ const child = spawn(launch.command, launch.args, {
164
+ cwd: process.cwd(),
165
+ env: process.env,
166
+ stdio: ["pipe", "pipe", "pipe"]
167
+ });
168
+ const stdoutReader = readline.createInterface({
169
+ input: child.stdout
170
+ });
171
+ stdoutReader.on("line", (line) => {
172
+ this.handleResponseLine(line);
173
+ });
174
+ child.stderr.on("data", (chunk) => {
175
+ const content = String(chunk).trim();
176
+ if (content) {
177
+ console.warn(`[task-helper] ${content}`);
178
+ }
179
+ });
180
+ child.stdin.on("error", (error) => {
181
+ this.handleChildTermination(error instanceof Error
182
+ ? error
183
+ : new Error("task helper stdin 已断开"));
184
+ });
185
+ child.on("error", (error) => {
186
+ this.handleChildTermination(error);
187
+ });
188
+ child.on("exit", (code, signal) => {
189
+ this.handleChildTermination(new Error(`task helper 已退出:code=${code ?? "null"} signal=${signal ?? "null"}`));
190
+ });
191
+ this.child = child;
192
+ this.stdoutReader = stdoutReader;
193
+ return child;
194
+ }
195
+ handleChildTermination(error) {
196
+ const child = this.child;
197
+ if (this.stdoutReader) {
198
+ this.stdoutReader.close();
199
+ }
200
+ if (child && !child.killed) {
201
+ child.kill("SIGTERM");
202
+ }
203
+ this.child = null;
204
+ this.stdoutReader = null;
205
+ this.rejectAll(error);
206
+ }
207
+ }
208
+ function isRetryableHelperClientError(error) {
209
+ if (!error || typeof error !== "object") {
210
+ return false;
211
+ }
212
+ const code = "code" in error ? error.code : null;
213
+ if (code === "EPIPE" || code === "ECONNRESET") {
214
+ return true;
215
+ }
216
+ const message = "message" in error ? String(error.message ?? "") : "";
217
+ return message.includes("task helper 已退出");
148
218
  }
149
219
  export function getSharedTaskHelperProcessClient() {
220
+ const scope = globalThis;
221
+ const globalClient = scope[GLOBAL_TASK_HELPER_PROCESS_CLIENT_KEY];
222
+ if (globalClient) {
223
+ sharedTaskHelperProcessClient = globalClient;
224
+ return globalClient;
225
+ }
150
226
  if (!sharedTaskHelperProcessClient) {
151
227
  sharedTaskHelperProcessClient = new TaskHelperProcessClient();
152
228
  }
229
+ scope[GLOBAL_TASK_HELPER_PROCESS_CLIENT_KEY] = sharedTaskHelperProcessClient;
153
230
  return sharedTaskHelperProcessClient;
154
231
  }
155
232
  export function disposeSharedTaskHelperProcessClient() {
156
- if (!sharedTaskHelperProcessClient) {
233
+ const scope = globalThis;
234
+ const sharedClient = scope[GLOBAL_TASK_HELPER_PROCESS_CLIENT_KEY] ?? sharedTaskHelperProcessClient;
235
+ if (!sharedClient) {
157
236
  return;
158
237
  }
159
- sharedTaskHelperProcessClient.dispose();
238
+ sharedClient.dispose();
239
+ scope[GLOBAL_TASK_HELPER_PROCESS_CLIENT_KEY] = null;
160
240
  sharedTaskHelperProcessClient = null;
161
241
  }
162
242
  function resolveHelperLaunch() {
@@ -1 +1 @@
1
- {"version":3,"file":"task-helper-client.js","sourceRoot":"","sources":["../../../../src/modules/tasks/task-helper-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-helper-client.js","sourceRoot":"","sources":["../../../../src/modules/tasks/task-helper-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAuC,MAAM,oBAAoB,CAAC;AAChF,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAuBzC,MAAM,qCAAqC,GAAG,qCAAqC,CAAC;AAEpF,IAAI,6BAA6B,GAAmC,IAAI,CAAC;AAEzE,MAAM,OAAO,uBAAuB;IAC1B,KAAK,GAA0C,IAAI,CAAC;IACpD,YAAY,GAA8B,IAAI,CAAC;IACtC,eAAe,GAAG,IAAI,GAAG,EAAmC,CAAC;IACtE,aAAa,GAAG,CAAC,CAAC;IAClB,QAAQ,GAAG,KAAK,CAAC;IAEzB;QACE,IAAI,CAAC,WAAW,EAAE,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,OAAO,CACX,OAAqC,EACrC,KAAc,EACd,MAAoB;QAEpB,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,OAAO,MAAM,IAAI,CAAC,WAAW,CAAU,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IACE,OAAO,IAAI,CAAC;oBACZ,IAAI,CAAC,QAAQ;oBACb,MAAM,EAAE,OAAO;oBACf,CAAC,4BAA4B,CAAC,KAAK,CAAC,EACpC,CAAC;oBACD,MAAM,KAAK,CAAC;gBACd,CAAC;gBAED,OAAO,IAAI,CAAC,CAAC;gBACb,IAAI,CAAC,sBAAsB,CACzB,KAAK,YAAY,KAAK;oBACpB,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CACtC,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,OAAqC,EACrC,KAAc,EACd,MAAoB;QAEpB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAExC,OAAO,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACpD,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,IAAI,OAAO,GAAwB,IAAI,CAAC;YAExC,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,GAAG,GAAG,EAAE;oBACb,OAAO,GAAG,IAAI,CAAC;oBACf,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBAChC,KAAK,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;oBACzB,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;gBAC5D,CAAC,CAAC;gBAEF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,EAAE,CAAC;oBACV,OAAO;gBACT,CAAC;gBAED,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;YAED,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE;gBAC3B,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBACjB,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;wBACtB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC/C,CAAC;oBAED,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,OAAO,CAAC,KAAgB,CAAC,CAAC;oBAC5B,CAAC;gBACH,CAAC;gBACD,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBAChB,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;wBACtB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;oBAC/C,CAAC;oBAED,IAAI,CAAC,OAAO,EAAE,CAAC;wBACb,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC;gBACH,CAAC;aACF,CAAC,CAAC;YAEH,KAAK,CAAC,KAAK,CAAC,KAAK,CACf,GAAG,IAAI,CAAC,SAAS,CAAC;gBAChB,EAAE;gBACF,IAAI,EAAE,KAAK;gBACX,OAAO;gBACP,KAAK;aACN,CAAC,IAAI,EACN,CAAC,KAAK,EAAE,EAAE;gBACR,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO;gBACT,CAAC;gBAED,IAAI,OAAO,IAAI,MAAM,EAAE,CAAC;oBACtB,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC/C,CAAC;gBAED,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAChC,MAAM,CAAC,KAAK,CAAC,CAAC;YAChB,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC;QAE3B,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC3B,CAAC;IAEO,kBAAkB,CAAC,IAAY;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO;QACT,CAAC;QAED,IAAI,OAAuB,CAAC;QAE5B,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAmB,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAErD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YACf,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAChC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAEO,SAAS,CAAC,KAAc;QAC9B,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC;YACpD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,QAAgB;QACvC,IACE,IAAI,CAAC,QAAQ;YACb,CAAC,IAAI,CAAC,KAAK;YACX,IAAI,CAAC,KAAK,CAAC,MAAM;YACjB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAC1B,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,IAAI,CAAC;gBACH,KAAK,CAAC,KAAK,CAAC,KAAK,CACf,GAAG,IAAI,CAAC,SAAS,CAAC;oBAChB,EAAE,EAAE,UAAU,QAAQ,EAAE;oBACxB,IAAI,EAAE,QAAQ;oBACd,QAAQ;iBACT,CAAC,IAAI,EACN,GAAG,EAAE;oBACH,OAAO,EAAE,CAAC;gBACZ,CAAC,CACF,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,WAAW;QACjB,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACzF,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB,CAAC;QAED,MAAM,MAAM,GAAG,mBAAmB,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;YAC/C,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,QAAQ,CAAC,eAAe,CAAC;YAC5C,KAAK,EAAE,KAAK,CAAC,MAAM;SACpB,CAAC,CAAC;QAEH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YAC/B,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YAErC,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAChC,IAAI,CAAC,sBAAsB,CACzB,KAAK,YAAY,KAAK;gBACpB,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CACvC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC1B,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YAChC,IAAI,CAAC,sBAAsB,CACzB,IAAI,KAAK,CACP,wBAAwB,IAAI,IAAI,MAAM,WAAW,MAAM,IAAI,MAAM,EAAE,CACpE,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,sBAAsB,CAAC,KAAY;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;CACF;AAED,SAAS,4BAA4B,CAAC,KAAc;IAClD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAEjD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAG,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,OAAO,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,gCAAgC;IAC9C,MAAM,KAAK,GAAG,UAEb,CAAC;IACF,MAAM,YAAY,GAAG,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAElE,IAAI,YAAY,EAAE,CAAC;QACjB,6BAA6B,GAAG,YAAY,CAAC;QAC7C,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,6BAA6B,EAAE,CAAC;QACnC,6BAA6B,GAAG,IAAI,uBAAuB,EAAE,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,qCAAqC,CAAC,GAAG,6BAA6B,CAAC;IAC7E,OAAO,6BAA6B,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,oCAAoC;IAClD,MAAM,KAAK,GAAG,UAEb,CAAC;IACF,MAAM,YAAY,GAChB,KAAK,CAAC,qCAAqC,CAAC,IAAI,6BAA6B,CAAC;IAEhF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,YAAY,CAAC,OAAO,EAAE,CAAC;IACvB,KAAK,CAAC,qCAAqC,CAAC,GAAG,IAAI,CAAC;IACpD,6BAA6B,GAAG,IAAI,CAAC;AACvC,CAAC;AAED,SAAS,mBAAmB;IAC1B,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,eAAe,CAAC,OAAO,CACxC,8BAA8B,EAC9B,sBAAsB,SAAS,EAAE,CAClC,CAAC;IAEF,IAAI,SAAS,KAAK,KAAK,EAAE,CAAC;QACxB,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,QAAQ;YACzB,IAAI,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC;SACtC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,QAAQ;QACzB,IAAI,EAAE,CAAC,UAAU,CAAC;KACnB,CAAC;AACJ,CAAC"}
@@ -1,6 +1,13 @@
1
1
  import readline from "node:readline";
2
2
  import { runTaskHelperProcessHandler } from "./task-helper-process-handlers.js";
3
+ const TASK_HELPER_HANDLER_CONCURRENCY = {
4
+ "session.workspace_discovery": 2
5
+ };
6
+ const TASK_HELPER_RSS_HIGH_WATER_BYTES = 768 * 1024 * 1024;
3
7
  const activeRequests = new Map();
8
+ const queuedRequests = new Map();
9
+ const queuedRequestsByHandler = new Map();
10
+ const runningCountByHandler = new Map();
4
11
  const reader = readline.createInterface({
5
12
  input: process.stdin,
6
13
  crlfDelay: Number.POSITIVE_INFINITY
@@ -27,11 +34,42 @@ async function handleLine(line) {
27
34
  return;
28
35
  }
29
36
  if (payload.type === "cancel") {
30
- activeRequests.get(payload.targetId)?.abort(new Error("helper task aborted"));
37
+ cancelRequest(payload.targetId);
31
38
  return;
32
39
  }
33
40
  const controller = new AbortController();
41
+ const task = {
42
+ payload,
43
+ controller
44
+ };
45
+ if (canStartTask(payload.handler)) {
46
+ startTask(task);
47
+ return;
48
+ }
49
+ queuedRequests.set(payload.id, task);
50
+ const queue = queuedRequestsByHandler.get(payload.handler) ?? [];
51
+ queue.push(task);
52
+ queuedRequestsByHandler.set(payload.handler, queue);
53
+ }
54
+ function writeResponse(payload) {
55
+ process.stdout.write(`${JSON.stringify(payload)}\n`);
56
+ }
57
+ function canStartTask(handler) {
58
+ const limit = TASK_HELPER_HANDLER_CONCURRENCY[handler];
59
+ if (!limit || limit <= 0) {
60
+ return true;
61
+ }
62
+ return (runningCountByHandler.get(handler) ?? 0) < limit;
63
+ }
64
+ function startTask(task) {
65
+ const { payload, controller } = task;
66
+ queuedRequests.delete(payload.id);
34
67
  activeRequests.set(payload.id, controller);
68
+ runningCountByHandler.set(payload.handler, (runningCountByHandler.get(payload.handler) ?? 0) + 1);
69
+ void runTask(task);
70
+ }
71
+ async function runTask(task) {
72
+ const { payload, controller } = task;
35
73
  try {
36
74
  const result = await runTaskHelperProcessHandler(payload.handler, payload.input, controller.signal);
37
75
  writeResponse({
@@ -51,9 +89,62 @@ async function handleLine(line) {
51
89
  }
52
90
  finally {
53
91
  activeRequests.delete(payload.id);
92
+ runningCountByHandler.set(payload.handler, Math.max(0, (runningCountByHandler.get(payload.handler) ?? 1) - 1));
93
+ drainQueue(payload.handler);
94
+ maybeRecycleProcess();
54
95
  }
55
96
  }
56
- function writeResponse(payload) {
57
- process.stdout.write(`${JSON.stringify(payload)}\n`);
97
+ function drainQueue(handler) {
98
+ const queue = queuedRequestsByHandler.get(handler);
99
+ if (!queue || queue.length === 0) {
100
+ return;
101
+ }
102
+ while (queue.length > 0 && canStartTask(handler)) {
103
+ const next = queue.shift();
104
+ if (!next) {
105
+ continue;
106
+ }
107
+ if (!queuedRequests.has(next.payload.id)) {
108
+ continue;
109
+ }
110
+ startTask(next);
111
+ }
112
+ if (queue.length === 0) {
113
+ queuedRequestsByHandler.delete(handler);
114
+ }
115
+ }
116
+ function cancelRequest(targetId) {
117
+ const active = activeRequests.get(targetId);
118
+ if (active) {
119
+ active.abort(new Error("helper task aborted"));
120
+ return;
121
+ }
122
+ const queued = queuedRequests.get(targetId);
123
+ if (!queued) {
124
+ return;
125
+ }
126
+ queuedRequests.delete(targetId);
127
+ const queue = queuedRequestsByHandler.get(queued.payload.handler);
128
+ if (!queue) {
129
+ return;
130
+ }
131
+ const nextQueue = queue.filter((entry) => entry.payload.id !== targetId);
132
+ if (nextQueue.length === 0) {
133
+ queuedRequestsByHandler.delete(queued.payload.handler);
134
+ return;
135
+ }
136
+ queuedRequestsByHandler.set(queued.payload.handler, nextQueue);
137
+ }
138
+ function maybeRecycleProcess() {
139
+ if (activeRequests.size > 0 || queuedRequests.size > 0) {
140
+ return;
141
+ }
142
+ if (process.memoryUsage.rss() < TASK_HELPER_RSS_HIGH_WATER_BYTES) {
143
+ return;
144
+ }
145
+ process.stderr.write(`[task-helper] rss 高水位回收,rss=${process.memoryUsage.rss()}\n`);
146
+ setImmediate(() => {
147
+ process.exit(0);
148
+ });
58
149
  }
59
150
  //# sourceMappingURL=task-helper-process.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"task-helper-process.js","sourceRoot":"","sources":["../../../../src/modules/tasks/task-helper-process.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC,OAAO,EACL,2BAA2B,EAE5B,MAAM,mCAAmC,CAAC;AA+B3C,MAAM,cAAc,GAAG,IAAI,GAAG,EAA2B,CAAC;AAE1D,MAAM,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC;IACtC,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,SAAS,EAAE,MAAM,CAAC,iBAAiB;CACpC,CAAC,CAAC;AAEH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;IACzB,KAAK,UAAU,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE5B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IAED,IAAI,OAA0B,CAAC;IAE/B,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAsB,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,aAAa,CAAC;YACZ,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,SAAS;YACb,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B;SAC9E,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAE3C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACpG,aAAa,CAAC;YACZ,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,EAAE,EAAE,IAAI;YACR,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,aAAa,CAAC;YACZ,IAAI,EAAE,QAAQ;YACd,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB;SACrE,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpC,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAA2B;IAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"task-helper-process.js","sourceRoot":"","sources":["../../../../src/modules/tasks/task-helper-process.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,9 @@ export declare const HOST_TASK_TYPES: {
10
10
  readonly templateRuntimeStatusDiscovery: "terminal.template_runtime_status_discovery";
11
11
  readonly debugRuntimeStaleReconciliation: "debug_runtime.stale_reconciliation";
12
12
  readonly serviceNpmGlobalUpdateInstall: "service.npm_global_update_install";
13
+ readonly assistantAutomationTick: "assistant.automation.tick";
14
+ readonly assistantAutomationEvaluate: "assistant.automation.evaluate";
15
+ readonly verificationRunExecute: "butler.verification_run.execute";
13
16
  };
14
17
  export type HostTaskType = (typeof HOST_TASK_TYPES)[keyof typeof HOST_TASK_TYPES];
15
18
  export type TaskExecutionLane = "request_main_thread" | "host_background" | "helper_process" | "external_process";
@@ -9,7 +9,10 @@ export const HOST_TASK_TYPES = {
9
9
  terminalManagerSnapshot: "terminal.manager_snapshot",
10
10
  templateRuntimeStatusDiscovery: "terminal.template_runtime_status_discovery",
11
11
  debugRuntimeStaleReconciliation: "debug_runtime.stale_reconciliation",
12
- serviceNpmGlobalUpdateInstall: "service.npm_global_update_install"
12
+ serviceNpmGlobalUpdateInstall: "service.npm_global_update_install",
13
+ assistantAutomationTick: "assistant.automation.tick",
14
+ assistantAutomationEvaluate: "assistant.automation.evaluate",
15
+ verificationRunExecute: "butler.verification_run.execute"
13
16
  };
14
17
  export class TaskCancelledError extends Error {
15
18
  constructor(message = "任务已取消") {
@@ -1 +1 @@
1
- {"version":3,"file":"task-types.js","sourceRoot":"","sources":["../../../../src/modules/tasks/task-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,kBAAkB,EAAE,qBAAqB;IACzC,sBAAsB,EAAE,0BAA0B;IAClD,yBAAyB,EAAE,6BAA6B;IACxD,mBAAmB,EAAE,uBAAuB;IAC5C,0BAA0B,EAAE,8BAA8B;IAC1D,4BAA4B,EAAE,iCAAiC;IAC/D,kBAAkB,EAAE,sBAAsB;IAC1C,uBAAuB,EAAE,2BAA2B;IACpD,8BAA8B,EAAE,4CAA4C;IAC5E,+BAA+B,EAAE,oCAAoC;IACrE,6BAA6B,EAAE,mCAAmC;CAC1D,CAAC;AAkIX,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAO,GAAG,OAAO;QAC3B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAO,GAAG,QAAQ;QAC5B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF"}
1
+ {"version":3,"file":"task-types.js","sourceRoot":"","sources":["../../../../src/modules/tasks/task-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,kBAAkB,EAAE,qBAAqB;IACzC,sBAAsB,EAAE,0BAA0B;IAClD,yBAAyB,EAAE,6BAA6B;IACxD,mBAAmB,EAAE,uBAAuB;IAC5C,0BAA0B,EAAE,8BAA8B;IAC1D,4BAA4B,EAAE,iCAAiC;IAC/D,kBAAkB,EAAE,sBAAsB;IAC1C,uBAAuB,EAAE,2BAA2B;IACpD,8BAA8B,EAAE,4CAA4C;IAC5E,+BAA+B,EAAE,oCAAoC;IACrE,6BAA6B,EAAE,mCAAmC;IAClE,uBAAuB,EAAE,2BAA2B;IACpD,2BAA2B,EAAE,+BAA+B;IAC5D,sBAAsB,EAAE,iCAAiC;CACjD,CAAC;AAkIX,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,OAAO,GAAG,OAAO;QAC3B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAO,GAAG,QAAQ;QAC5B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF"}
@@ -19,6 +19,9 @@ interface RunCommandTemplateInput {
19
19
  terminalId?: string;
20
20
  shell?: string;
21
21
  runtimeType?: TerminalRuntimeType | null;
22
+ argsOverride?: string[];
23
+ envPatch?: Record<string, string>;
24
+ portOverride?: number | null;
22
25
  userId: string;
23
26
  }
24
27
  export declare class CommandTemplateService {
@@ -28,6 +31,12 @@ export declare class CommandTemplateService {
28
31
  private readonly terminalService;
29
32
  constructor(db: Database.Database, templateRepository: TerminalCommandTemplateRepository, workspaceService: WorkspaceService, terminalService: TerminalService);
30
33
  listTemplates(workspaceId: string): TerminalCommandTemplate[];
34
+ cloneTemplatesToWorkspace(input: {
35
+ sourceWorkspaceId: string;
36
+ targetWorkspaceId: string;
37
+ sourceWorkspacePath: string;
38
+ targetWorkspacePath: string;
39
+ }): TerminalCommandTemplate[];
31
40
  listTemplateRuntimeStatuses(workspaceId: string, signal?: AbortSignal): Promise<import("../../types/domain.js").TerminalTemplateRuntimeStatus[]>;
32
41
  listTemplateRuntimeStatusesByItems(items: Array<{
33
42
  templateId: string;
@@ -1,4 +1,5 @@
1
1
  import { randomBytes } from "node:crypto";
2
+ import path from "node:path";
2
3
  import { AppError } from "../../shared/errors/app-error.js";
3
4
  import { createId } from "../../shared/utils/id.js";
4
5
  import { nowIso } from "../../shared/utils/time.js";
@@ -20,6 +21,53 @@ export class CommandTemplateService {
20
21
  this.workspaceService.getWorkspaceOrThrow(workspaceId);
21
22
  return this.templateRepository.listByWorkspace(workspaceId);
22
23
  }
24
+ cloneTemplatesToWorkspace(input) {
25
+ this.workspaceService.getWorkspaceOrThrow(input.sourceWorkspaceId);
26
+ this.workspaceService.getWorkspaceOrThrow(input.targetWorkspaceId);
27
+ const sourceTemplates = this.templateRepository
28
+ .listByWorkspace(input.sourceWorkspaceId)
29
+ .filter(shouldCloneToWorktree);
30
+ if (sourceTemplates.length === 0) {
31
+ return [];
32
+ }
33
+ const timestamp = nowIso();
34
+ const clonedTemplates = sourceTemplates.map((template) => buildValidatedTemplate({
35
+ id: createId(),
36
+ workspaceId: input.targetWorkspaceId,
37
+ name: template.name,
38
+ cwd: resolveInheritedTemplateCwd(template.cwd, input.sourceWorkspacePath, input.targetWorkspacePath),
39
+ command: template.command,
40
+ args: [...template.args],
41
+ env: { ...template.env },
42
+ port: template.port,
43
+ proxyEnabled: template.proxyEnabled,
44
+ proxySlug: template.proxyEnabled ? this.createUniqueProxySlug() : null,
45
+ runtimeType: template.runtimeType,
46
+ createdAt: timestamp,
47
+ updatedAt: timestamp,
48
+ sourceType: template.sourceType ?? "manual",
49
+ debugTargetId: template.debugTargetId ?? null,
50
+ debugServiceId: template.debugServiceId ?? null,
51
+ frameworkAnalysisId: template.frameworkAnalysisId ?? null,
52
+ adapterKind: template.adapterKind ?? null,
53
+ injectionMode: template.injectionMode ?? null,
54
+ generatedArtifactRef: template.generatedArtifactRef ?? null,
55
+ serviceDiscoveryMode: template.serviceDiscoveryMode ?? null,
56
+ managedBySystem: template.managedBySystem === true
57
+ }));
58
+ const persist = this.db.transaction(() => {
59
+ for (const template of clonedTemplates) {
60
+ this.templateRepository.create(template);
61
+ }
62
+ });
63
+ try {
64
+ persist();
65
+ }
66
+ catch (error) {
67
+ throw mapTemplateStorageError(error);
68
+ }
69
+ return clonedTemplates;
70
+ }
23
71
  async listTemplateRuntimeStatuses(workspaceId, signal) {
24
72
  return await this.listTemplateRuntimeStatusesByItems(this.listTemplates(workspaceId)
25
73
  .filter((template) => template.port !== null)
@@ -159,6 +207,15 @@ export class CommandTemplateService {
159
207
  }
160
208
  async runTemplate(input) {
161
209
  const template = this.getTemplateOrThrow(input.templateId);
210
+ const effectiveTemplate = {
211
+ ...template,
212
+ args: input.argsOverride ?? template.args,
213
+ env: {
214
+ ...template.env,
215
+ ...(input.envPatch ?? {})
216
+ },
217
+ port: input.portOverride === undefined ? template.port : input.portOverride
218
+ };
162
219
  let targetTerminalId = input.terminalId ?? null;
163
220
  let createdTerminal = false;
164
221
  if (targetTerminalId) {
@@ -176,21 +233,21 @@ export class CommandTemplateService {
176
233
  const terminal = await this.terminalService.createTerminal({
177
234
  workspaceId: template.workspaceId,
178
235
  name: `${template.name} 运行`,
179
- cwd: template.cwd,
236
+ cwd: effectiveTemplate.cwd,
180
237
  shell: input.shell,
181
- runtimeType: input.runtimeType ?? template.runtimeType ?? undefined,
238
+ runtimeType: input.runtimeType ?? effectiveTemplate.runtimeType ?? undefined,
182
239
  createdByUserId: input.userId,
183
- env: template.env
240
+ env: effectiveTemplate.env
184
241
  });
185
242
  targetTerminalId = terminal.id;
186
243
  createdTerminal = true;
187
244
  }
188
245
  const terminal = this.terminalService.getTerminalOrThrow(targetTerminalId);
189
- const commandLine = buildTemplateCommandLine(template, terminal.shell);
246
+ const commandLine = buildTemplateCommandLine(effectiveTemplate, terminal.shell);
190
247
  await this.terminalService.writeInput(targetTerminalId, `${commandLine}${getShellEnterSequence(terminal.shell)}`);
191
248
  return {
192
249
  terminalId: targetTerminalId,
193
- templateId: template.id,
250
+ templateId: effectiveTemplate.id,
194
251
  createdTerminal
195
252
  };
196
253
  }
@@ -313,6 +370,31 @@ function normalizePort(input) {
313
370
  function containsControlCharacter(input) {
314
371
  return input.includes("\0") || input.includes("\n") || input.includes("\r");
315
372
  }
373
+ function shouldCloneToWorktree(template) {
374
+ if (template.managedBySystem === true) {
375
+ return false;
376
+ }
377
+ if (template.sourceType === "debug_service") {
378
+ return false;
379
+ }
380
+ return true;
381
+ }
382
+ function resolveInheritedTemplateCwd(templateCwd, sourceWorkspacePath, targetWorkspacePath) {
383
+ const normalizedSourcePath = stripTrailingSeparators(path.resolve(sourceWorkspacePath));
384
+ const normalizedTargetPath = stripTrailingSeparators(path.resolve(targetWorkspacePath));
385
+ const normalizedTemplateCwd = path.resolve(templateCwd);
386
+ if (normalizedTemplateCwd === normalizedSourcePath) {
387
+ return normalizedTargetPath;
388
+ }
389
+ const relativePath = path.relative(normalizedSourcePath, normalizedTemplateCwd);
390
+ if (!relativePath || relativePath.startsWith("..") || path.isAbsolute(relativePath)) {
391
+ return templateCwd;
392
+ }
393
+ return path.join(normalizedTargetPath, relativePath);
394
+ }
395
+ function stripTrailingSeparators(input) {
396
+ return input.replace(/[\\/]+$/, "");
397
+ }
316
398
  function mapTemplateStorageError(error) {
317
399
  if (error instanceof AppError) {
318
400
  return error;