agkan 3.15.0 → 3.15.2

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 (110) hide show
  1. package/dist/board/boardRoutes.d.ts +1 -0
  2. package/dist/board/boardRoutes.d.ts.map +1 -1
  3. package/dist/board/boardRoutes.js +33 -1
  4. package/dist/board/boardRoutes.js.map +1 -1
  5. package/dist/board/client/main.js +103 -183
  6. package/dist/board/server.js +1 -1
  7. package/dist/board/server.js.map +1 -1
  8. package/dist/cli/commands/block/add.js +10 -10
  9. package/dist/cli/commands/block/add.js.map +1 -1
  10. package/dist/cli/commands/block/list.js +4 -4
  11. package/dist/cli/commands/block/list.js.map +1 -1
  12. package/dist/cli/commands/block/remove.js +9 -9
  13. package/dist/cli/commands/block/remove.js.map +1 -1
  14. package/dist/cli/commands/comment/add.js +2 -2
  15. package/dist/cli/commands/comment/add.js.map +1 -1
  16. package/dist/cli/commands/comment/delete.js +2 -2
  17. package/dist/cli/commands/comment/delete.js.map +1 -1
  18. package/dist/cli/commands/comment/list.js +2 -2
  19. package/dist/cli/commands/comment/list.js.map +1 -1
  20. package/dist/cli/commands/config/get.js +2 -2
  21. package/dist/cli/commands/config/get.js.map +1 -1
  22. package/dist/cli/commands/meta/delete.js +3 -3
  23. package/dist/cli/commands/meta/delete.js.map +1 -1
  24. package/dist/cli/commands/meta/get.js +3 -3
  25. package/dist/cli/commands/meta/get.js.map +1 -1
  26. package/dist/cli/commands/meta/list.js +2 -2
  27. package/dist/cli/commands/meta/list.js.map +1 -1
  28. package/dist/cli/commands/meta/set.js +4 -4
  29. package/dist/cli/commands/meta/set.js.map +1 -1
  30. package/dist/cli/commands/tag/add.js +7 -7
  31. package/dist/cli/commands/tag/add.js.map +1 -1
  32. package/dist/cli/commands/tag/attach.js +7 -7
  33. package/dist/cli/commands/tag/attach.js.map +1 -1
  34. package/dist/cli/commands/tag/delete.js +5 -5
  35. package/dist/cli/commands/tag/delete.js.map +1 -1
  36. package/dist/cli/commands/tag/detach.js +7 -7
  37. package/dist/cli/commands/tag/detach.js.map +1 -1
  38. package/dist/cli/commands/tag/list.js +2 -2
  39. package/dist/cli/commands/tag/list.js.map +1 -1
  40. package/dist/cli/commands/tag/rename.js +8 -8
  41. package/dist/cli/commands/tag/rename.js.map +1 -1
  42. package/dist/cli/commands/tag/show.js +3 -3
  43. package/dist/cli/commands/tag/show.js.map +1 -1
  44. package/dist/cli/commands/task/add.js +11 -11
  45. package/dist/cli/commands/task/add.js.map +1 -1
  46. package/dist/cli/commands/task/archive.js +3 -3
  47. package/dist/cli/commands/task/archive.js.map +1 -1
  48. package/dist/cli/commands/task/copy.js +5 -5
  49. package/dist/cli/commands/task/copy.js.map +1 -1
  50. package/dist/cli/commands/task/count.js +4 -4
  51. package/dist/cli/commands/task/count.js.map +1 -1
  52. package/dist/cli/commands/task/delete.js +3 -3
  53. package/dist/cli/commands/task/delete.js.map +1 -1
  54. package/dist/cli/commands/task/find.js +2 -2
  55. package/dist/cli/commands/task/find.js.map +1 -1
  56. package/dist/cli/commands/task/get.js +3 -3
  57. package/dist/cli/commands/task/get.js.map +1 -1
  58. package/dist/cli/commands/task/list.d.ts.map +1 -1
  59. package/dist/cli/commands/task/list.js +195 -162
  60. package/dist/cli/commands/task/list.js.map +1 -1
  61. package/dist/cli/commands/task/purge.js +3 -3
  62. package/dist/cli/commands/task/purge.js.map +1 -1
  63. package/dist/cli/commands/task/unarchive.js +3 -3
  64. package/dist/cli/commands/task/unarchive.js.map +1 -1
  65. package/dist/cli/commands/task/update-helpers.js +11 -11
  66. package/dist/cli/commands/task/update-helpers.js.map +1 -1
  67. package/dist/cli/commands/task/update-parent.js +8 -8
  68. package/dist/cli/commands/task/update-parent.js.map +1 -1
  69. package/dist/cli/commands/task/update.js +3 -3
  70. package/dist/cli/commands/task/update.js.map +1 -1
  71. package/dist/cli/utils/error-handler.js +4 -4
  72. package/dist/cli/utils/error-handler.js.map +1 -1
  73. package/dist/cli/utils/output-formatter.js +2 -2
  74. package/dist/cli/utils/output-formatter.js.map +1 -1
  75. package/dist/db/adapters/sqlite-storage-backend.js +4 -4
  76. package/dist/db/adapters/sqlite-storage-backend.js.map +1 -1
  77. package/dist/hooks/hook-stop.mjs +107 -42
  78. package/dist/services/ExportImportService.d.ts +11 -0
  79. package/dist/services/ExportImportService.d.ts.map +1 -1
  80. package/dist/services/ExportImportService.js +44 -30
  81. package/dist/services/ExportImportService.js.map +1 -1
  82. package/dist/services/index.d.ts +1 -2
  83. package/dist/services/index.d.ts.map +1 -1
  84. package/dist/services/index.js +1 -3
  85. package/dist/services/index.js.map +1 -1
  86. package/dist/services/types.d.ts +28 -0
  87. package/dist/services/types.d.ts.map +1 -0
  88. package/dist/services/types.js +6 -0
  89. package/dist/services/types.js.map +1 -0
  90. package/dist/terminal/PtySessionService.d.ts +1 -1
  91. package/dist/terminal/PtySessionService.d.ts.map +1 -1
  92. package/dist/terminal/PtySessionService.js +24 -18
  93. package/dist/terminal/PtySessionService.js.map +1 -1
  94. package/dist/terminal/buildHookEnv.d.ts +8 -0
  95. package/dist/terminal/buildHookEnv.d.ts.map +1 -0
  96. package/dist/terminal/buildHookEnv.js +24 -0
  97. package/dist/terminal/buildHookEnv.js.map +1 -0
  98. package/dist/terminal/ensureSpawnHelperExecutable.d.ts +31 -0
  99. package/dist/terminal/ensureSpawnHelperExecutable.d.ts.map +1 -0
  100. package/dist/terminal/ensureSpawnHelperExecutable.js +89 -0
  101. package/dist/terminal/ensureSpawnHelperExecutable.js.map +1 -0
  102. package/dist/utils/runTargetStatus.d.ts +9 -0
  103. package/dist/utils/runTargetStatus.d.ts.map +1 -0
  104. package/dist/utils/runTargetStatus.js +17 -0
  105. package/dist/utils/runTargetStatus.js.map +1 -0
  106. package/package.json +3 -2
  107. package/dist/services/ClaudeProcessService.d.ts +0 -110
  108. package/dist/services/ClaudeProcessService.d.ts.map +0 -1
  109. package/dist/services/ClaudeProcessService.js +0 -312
  110. package/dist/services/ClaudeProcessService.js.map +0 -1
@@ -1,312 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ClaudeProcessService = void 0;
4
- const child_process_1 = require("child_process");
5
- const logger_1 = require("../utils/logger");
6
- const errors_1 = require("../errors");
7
- const config_1 = require("../db/config");
8
- function resolveClaudePath() {
9
- try {
10
- const path = (0, child_process_1.execSync)('which claude', { env: process.env }).toString().trim();
11
- if (path)
12
- return path;
13
- }
14
- catch {
15
- // which failed, fall through
16
- }
17
- return 'claude';
18
- }
19
- const CLAUDE_BIN = resolveClaudePath();
20
- class ClaudeProcessService {
21
- processes = new Map();
22
- db;
23
- runningTasksChangeSubscribers = new Set();
24
- userStoppedTasks = new Set();
25
- completionConfirmSubscribers = new Set();
26
- constructor(db) {
27
- this.db = db ?? null;
28
- }
29
- subscribeRunningTasksChange(callback) {
30
- this.runningTasksChangeSubscribers.add(callback);
31
- return () => {
32
- this.runningTasksChangeSubscribers.delete(callback);
33
- };
34
- }
35
- subscribeCompletionConfirm(callback) {
36
- this.completionConfirmSubscribers.add(callback);
37
- return () => {
38
- this.completionConfirmSubscribers.delete(callback);
39
- };
40
- }
41
- notifyCompletionConfirm(taskId, targetStatus) {
42
- this.completionConfirmSubscribers.forEach((cb) => cb(taskId, targetStatus));
43
- }
44
- isUserStopped(taskId) {
45
- return this.userStoppedTasks.has(taskId);
46
- }
47
- clearUserStopped(taskId) {
48
- this.userStoppedTasks.delete(taskId);
49
- }
50
- notifyRunningTasksChange() {
51
- this.runningTasksChangeSubscribers.forEach((cb) => cb());
52
- }
53
- /**
54
- * Start a claude process for the given taskId and prompt.
55
- * Prevents duplicate processes for the same taskId.
56
- */
57
- startProcess(taskId, prompt, command = 'run', model, effort) {
58
- if (this.processes.has(taskId)) {
59
- const existing = this.processes.get(taskId);
60
- const pid = existing.process.pid;
61
- const killed = existing.process.killed;
62
- const exitCode = existing.process.exitCode;
63
- const signalCode = existing.process.signalCode;
64
- const aliveMs = Date.now() - existing.startedAt.getTime();
65
- (0, logger_1.verboseLog)(`[ClaudeProcessService] startProcess DUPLICATE taskId=${taskId} existing pid=${pid} killed=${killed} exitCode=${exitCode} signalCode=${signalCode} aliveMs=${aliveMs} command=${existing.command}`);
66
- throw new errors_1.ConflictError(`Process for taskId ${taskId} is already running`);
67
- }
68
- (0, logger_1.verboseLog)(`[ClaudeProcessService] startProcess taskId=${taskId} command=${command}`);
69
- const permissionArgs = (0, config_1.buildPermissionArgs)((0, config_1.loadConfig)());
70
- const baseArgs = ['--output-format', 'stream-json', '--verbose', ...permissionArgs, '-p', prompt];
71
- const effortArgs = effort ? ['--effort', effort] : [];
72
- const modelArgs = model ? ['--model', model] : [];
73
- const args = [...modelArgs, ...effortArgs, ...baseArgs];
74
- const child = (0, child_process_1.spawn)(CLAUDE_BIN, args, {
75
- cwd: process.cwd(),
76
- env: process.env,
77
- stdio: ['ignore', 'pipe', 'pipe'],
78
- });
79
- const info = {
80
- taskId,
81
- command,
82
- process: child,
83
- startedAt: new Date(),
84
- status: 'running',
85
- outputBuffer: [],
86
- processedEvents: [],
87
- subscribers: new Set(),
88
- runLogId: null,
89
- sessionId: null,
90
- };
91
- this.processes.set(taskId, info);
92
- (0, logger_1.verboseLog)(`[ClaudeProcessService] process added to map taskId=${taskId} total=${this.processes.size}`);
93
- this.notifyRunningTasksChange();
94
- if (this.db) {
95
- info.runLogId = this.db.runLogs.create(info.taskId, info.startedAt.toISOString());
96
- (0, logger_1.verboseLog)(`[ClaudeProcessService] run log created id=${info.runLogId} taskId=${taskId}`);
97
- }
98
- let lineBuffer = '';
99
- let spawnError = false;
100
- child.on('error', (err) => {
101
- spawnError = true;
102
- const message = err.code === 'ENOENT' ? 'claude CLI not found in PATH' : err.message;
103
- console.error(`[ClaudeProcessService] spawn error for taskId=${taskId}: ${message}`, err);
104
- const errorEvent = { kind: 'error', message };
105
- info.processedEvents.push(errorEvent);
106
- info.subscribers.forEach((cb) => cb(errorEvent));
107
- const doneEvent = { kind: 'done', exitCode: 1 };
108
- info.subscribers.forEach((cb) => cb(doneEvent));
109
- if (this.db && info.runLogId) {
110
- const finishedAt = new Date().toISOString();
111
- this.db.runLogs.updateFinished(info.runLogId, finishedAt, 1, JSON.stringify(info.processedEvents));
112
- (0, logger_1.verboseLog)(`[ClaudeProcessService] run log updated (error) id=${info.runLogId} taskId=${taskId}`);
113
- }
114
- if (this.processes.get(taskId) === info) {
115
- this.processes.delete(taskId);
116
- (0, logger_1.verboseLog)(`[ClaudeProcessService] process removed from map (error) taskId=${taskId} total=${this.processes.size}`);
117
- this.notifyRunningTasksChange();
118
- }
119
- else {
120
- (0, logger_1.verboseLog)(`[ClaudeProcessService] process error skipped map delete (stale entry) taskId=${taskId}`);
121
- }
122
- });
123
- child.stdout?.on('data', (chunk) => {
124
- lineBuffer += chunk.toString();
125
- const lines = lineBuffer.split('\n');
126
- // Keep the last (potentially incomplete) line in the buffer
127
- lineBuffer = lines.pop() ?? '';
128
- for (const line of lines) {
129
- const trimmed = line.trim();
130
- if (!trimmed)
131
- continue;
132
- let parsed;
133
- try {
134
- parsed = JSON.parse(trimmed);
135
- }
136
- catch {
137
- // Skip non-JSON lines
138
- continue;
139
- }
140
- info.outputBuffer.push(parsed);
141
- this._notifySubscribers(info, parsed);
142
- }
143
- });
144
- let stderrBuffer = '';
145
- child.stderr?.on('data', (chunk) => {
146
- stderrBuffer += chunk.toString();
147
- });
148
- child.on('close', (code) => {
149
- if (spawnError)
150
- return;
151
- // Process any remaining buffered line
152
- const remaining = lineBuffer.trim();
153
- if (remaining) {
154
- try {
155
- const parsed = JSON.parse(remaining);
156
- info.outputBuffer.push(parsed);
157
- this._notifySubscribers(info, parsed);
158
- }
159
- catch {
160
- // Ignore
161
- }
162
- }
163
- if (stderrBuffer) {
164
- console.error(`[ClaudeProcessService] stderr for taskId=${taskId}:\n${stderrBuffer}`);
165
- const errorEvent = { kind: 'error', message: stderrBuffer };
166
- info.processedEvents.push(errorEvent);
167
- info.subscribers.forEach((cb) => cb(errorEvent));
168
- }
169
- const exitCode = code ?? 0;
170
- (0, logger_1.verboseLog)(`[ClaudeProcessService] process close taskId=${taskId} exitCode=${exitCode}`);
171
- if (exitCode !== 0) {
172
- console.error(`[ClaudeProcessService] process exited with code ${exitCode} for taskId=${taskId}`);
173
- }
174
- const doneEvent = { kind: 'done', exitCode };
175
- info.subscribers.forEach((cb) => cb(doneEvent));
176
- // Finalize log in DB before removing process
177
- if (this.db && info.runLogId) {
178
- const finishedAt = new Date().toISOString();
179
- this.db.runLogs.updateFinished(info.runLogId, finishedAt, exitCode, JSON.stringify(info.processedEvents));
180
- (0, logger_1.verboseLog)(`[ClaudeProcessService] run log finalized id=${info.runLogId} taskId=${taskId} exitCode=${exitCode}`);
181
- // Rotate: keep only latest 5 per task
182
- const ids = this.db.runLogs.findIdsByTaskId(info.taskId);
183
- if (ids.length > 5) {
184
- const toDelete = ids.slice(5);
185
- this.db.runLogs.deleteMany(toDelete);
186
- (0, logger_1.verboseLog)(`[ClaudeProcessService] rotated run logs taskId=${taskId} deleted=${toDelete.length}`);
187
- }
188
- }
189
- if (this.processes.get(taskId) === info) {
190
- this.processes.delete(taskId);
191
- (0, logger_1.verboseLog)(`[ClaudeProcessService] process removed from map (close) taskId=${taskId} total=${this.processes.size}`);
192
- this.notifyRunningTasksChange();
193
- }
194
- else {
195
- (0, logger_1.verboseLog)(`[ClaudeProcessService] process close skipped map delete (stale entry) taskId=${taskId}`);
196
- }
197
- this.clearUserStopped(taskId);
198
- });
199
- }
200
- /**
201
- * Stop the process for the given taskId.
202
- * Returns true if the process was found and signalled, false otherwise.
203
- */
204
- stopProcess(taskId) {
205
- const info = this.processes.get(taskId);
206
- if (!info) {
207
- (0, logger_1.verboseLog)(`[ClaudeProcessService] stopProcess taskId=${taskId} not found`);
208
- return false;
209
- }
210
- (0, logger_1.verboseLog)(`[ClaudeProcessService] stopProcess taskId=${taskId} sending SIGTERM`);
211
- this.userStoppedTasks.add(taskId);
212
- info.process.kill('SIGTERM');
213
- this.processes.delete(taskId);
214
- (0, logger_1.verboseLog)(`[ClaudeProcessService] process removed from map (stop) taskId=${taskId} total=${this.processes.size}`);
215
- this.notifyRunningTasksChange();
216
- return true;
217
- }
218
- /**
219
- * List all currently running tasks with their command type.
220
- */
221
- listRunningTasks() {
222
- return Array.from(this.processes.values()).map((info) => ({ taskId: info.taskId, command: info.command }));
223
- }
224
- /**
225
- * Subscribe to output events for a given taskId.
226
- * If process is running: replay past events and subscribe to future events.
227
- * If no process but DB available: replay last saved log from DB.
228
- * Returns an unsubscribe function.
229
- */
230
- subscribeOutput(taskId, callback) {
231
- const info = this.processes.get(taskId);
232
- if (!info) {
233
- // Try to replay from DB
234
- if (this.db) {
235
- const row = this.db.runLogs.findLatestByTaskId(taskId);
236
- if (row) {
237
- const events = JSON.parse(row.events);
238
- events.forEach((evt) => callback(evt));
239
- callback({ kind: 'done', exitCode: row.exit_code ?? 0 });
240
- return () => { };
241
- }
242
- }
243
- // No process and no log found — emit error
244
- callback({ kind: 'error', message: `No running process for taskId ${taskId}` });
245
- return () => { };
246
- }
247
- // Replay past events to the new subscriber before registering
248
- info.processedEvents.forEach((evt) => callback(evt));
249
- info.subscribers.add(callback);
250
- return () => {
251
- info.subscribers.delete(callback);
252
- };
253
- }
254
- /**
255
- * Get the buffered output events for a taskId.
256
- * Useful for late subscribers who missed earlier events.
257
- */
258
- getOutputBuffer(taskId) {
259
- return this.processes.get(taskId)?.outputBuffer ?? [];
260
- }
261
- /**
262
- * Get saved run logs for a task from DB (most recent first, up to 5).
263
- */
264
- getRunLogs(taskId) {
265
- if (!this.db)
266
- return [];
267
- const rows = this.db.runLogs.findByTaskId(taskId, 5);
268
- return rows.map((r) => ({
269
- id: r.id,
270
- task_id: r.task_id,
271
- started_at: r.started_at,
272
- finished_at: r.finished_at,
273
- exit_code: r.exit_code,
274
- session_id: r.session_id,
275
- events: JSON.parse(r.events),
276
- }));
277
- }
278
- // ---- Private helpers ----
279
- _notifySubscribers(info, event) {
280
- if (event.type === 'system' && event.session_id && !info.sessionId) {
281
- info.sessionId = event.session_id;
282
- if (this.db && info.runLogId) {
283
- this.db.runLogs.updateSessionId(info.runLogId, info.sessionId);
284
- }
285
- }
286
- if (event.type === 'assistant') {
287
- const assistantEvent = event;
288
- let added = false;
289
- for (const content of assistantEvent.message.content) {
290
- if (content.type === 'text') {
291
- const outputEvent = { kind: 'text', text: content.text };
292
- info.processedEvents.push(outputEvent);
293
- info.subscribers.forEach((cb) => cb(outputEvent));
294
- added = true;
295
- }
296
- else if (content.type === 'tool_use') {
297
- const outputEvent = { kind: 'tool_use', name: content.name, input: content.input };
298
- info.processedEvents.push(outputEvent);
299
- info.subscribers.forEach((cb) => cb(outputEvent));
300
- added = true;
301
- }
302
- }
303
- if (added && this.db && info.runLogId) {
304
- this.db.runLogs.updateEvents(info.runLogId, JSON.stringify(info.processedEvents));
305
- }
306
- }
307
- // 'result' and 'system' events are buffered but not forwarded as OutputEvents
308
- // (done/error are sent on process close)
309
- }
310
- }
311
- exports.ClaudeProcessService = ClaudeProcessService;
312
- //# sourceMappingURL=ClaudeProcessService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClaudeProcessService.js","sourceRoot":"","sources":["../../src/services/ClaudeProcessService.ts"],"names":[],"mappings":"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"}