agkan 3.15.0 → 3.15.1

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 (99) 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 +17 -1
  4. package/dist/board/boardRoutes.js.map +1 -1
  5. package/dist/board/server.js +1 -1
  6. package/dist/board/server.js.map +1 -1
  7. package/dist/cli/commands/block/add.js +10 -10
  8. package/dist/cli/commands/block/add.js.map +1 -1
  9. package/dist/cli/commands/block/list.js +4 -4
  10. package/dist/cli/commands/block/list.js.map +1 -1
  11. package/dist/cli/commands/block/remove.js +9 -9
  12. package/dist/cli/commands/block/remove.js.map +1 -1
  13. package/dist/cli/commands/comment/add.js +2 -2
  14. package/dist/cli/commands/comment/add.js.map +1 -1
  15. package/dist/cli/commands/comment/delete.js +2 -2
  16. package/dist/cli/commands/comment/delete.js.map +1 -1
  17. package/dist/cli/commands/comment/list.js +2 -2
  18. package/dist/cli/commands/comment/list.js.map +1 -1
  19. package/dist/cli/commands/config/get.js +2 -2
  20. package/dist/cli/commands/config/get.js.map +1 -1
  21. package/dist/cli/commands/meta/delete.js +3 -3
  22. package/dist/cli/commands/meta/delete.js.map +1 -1
  23. package/dist/cli/commands/meta/get.js +3 -3
  24. package/dist/cli/commands/meta/get.js.map +1 -1
  25. package/dist/cli/commands/meta/list.js +2 -2
  26. package/dist/cli/commands/meta/list.js.map +1 -1
  27. package/dist/cli/commands/meta/set.js +4 -4
  28. package/dist/cli/commands/meta/set.js.map +1 -1
  29. package/dist/cli/commands/tag/add.js +7 -7
  30. package/dist/cli/commands/tag/add.js.map +1 -1
  31. package/dist/cli/commands/tag/attach.js +7 -7
  32. package/dist/cli/commands/tag/attach.js.map +1 -1
  33. package/dist/cli/commands/tag/delete.js +5 -5
  34. package/dist/cli/commands/tag/delete.js.map +1 -1
  35. package/dist/cli/commands/tag/detach.js +7 -7
  36. package/dist/cli/commands/tag/detach.js.map +1 -1
  37. package/dist/cli/commands/tag/list.js +2 -2
  38. package/dist/cli/commands/tag/list.js.map +1 -1
  39. package/dist/cli/commands/tag/rename.js +8 -8
  40. package/dist/cli/commands/tag/rename.js.map +1 -1
  41. package/dist/cli/commands/tag/show.js +3 -3
  42. package/dist/cli/commands/tag/show.js.map +1 -1
  43. package/dist/cli/commands/task/add.js +11 -11
  44. package/dist/cli/commands/task/add.js.map +1 -1
  45. package/dist/cli/commands/task/archive.js +3 -3
  46. package/dist/cli/commands/task/archive.js.map +1 -1
  47. package/dist/cli/commands/task/copy.js +5 -5
  48. package/dist/cli/commands/task/copy.js.map +1 -1
  49. package/dist/cli/commands/task/count.js +4 -4
  50. package/dist/cli/commands/task/count.js.map +1 -1
  51. package/dist/cli/commands/task/delete.js +3 -3
  52. package/dist/cli/commands/task/delete.js.map +1 -1
  53. package/dist/cli/commands/task/find.js +2 -2
  54. package/dist/cli/commands/task/find.js.map +1 -1
  55. package/dist/cli/commands/task/get.js +3 -3
  56. package/dist/cli/commands/task/get.js.map +1 -1
  57. package/dist/cli/commands/task/list.d.ts.map +1 -1
  58. package/dist/cli/commands/task/list.js +163 -160
  59. package/dist/cli/commands/task/list.js.map +1 -1
  60. package/dist/cli/commands/task/purge.js +3 -3
  61. package/dist/cli/commands/task/purge.js.map +1 -1
  62. package/dist/cli/commands/task/unarchive.js +3 -3
  63. package/dist/cli/commands/task/unarchive.js.map +1 -1
  64. package/dist/cli/commands/task/update-helpers.js +11 -11
  65. package/dist/cli/commands/task/update-helpers.js.map +1 -1
  66. package/dist/cli/commands/task/update-parent.js +8 -8
  67. package/dist/cli/commands/task/update-parent.js.map +1 -1
  68. package/dist/cli/commands/task/update.js +3 -3
  69. package/dist/cli/commands/task/update.js.map +1 -1
  70. package/dist/cli/utils/error-handler.js +4 -4
  71. package/dist/cli/utils/error-handler.js.map +1 -1
  72. package/dist/cli/utils/output-formatter.js +2 -2
  73. package/dist/cli/utils/output-formatter.js.map +1 -1
  74. package/dist/hooks/hook-stop.mjs +107 -42
  75. package/dist/services/index.d.ts +1 -2
  76. package/dist/services/index.d.ts.map +1 -1
  77. package/dist/services/index.js +1 -3
  78. package/dist/services/index.js.map +1 -1
  79. package/dist/services/types.d.ts +28 -0
  80. package/dist/services/types.d.ts.map +1 -0
  81. package/dist/services/types.js +6 -0
  82. package/dist/services/types.js.map +1 -0
  83. package/dist/terminal/PtySessionService.d.ts +1 -1
  84. package/dist/terminal/PtySessionService.d.ts.map +1 -1
  85. package/dist/terminal/PtySessionService.js +2 -7
  86. package/dist/terminal/PtySessionService.js.map +1 -1
  87. package/dist/terminal/buildHookEnv.d.ts +8 -0
  88. package/dist/terminal/buildHookEnv.d.ts.map +1 -0
  89. package/dist/terminal/buildHookEnv.js +24 -0
  90. package/dist/terminal/buildHookEnv.js.map +1 -0
  91. package/dist/utils/runTargetStatus.d.ts +9 -0
  92. package/dist/utils/runTargetStatus.d.ts.map +1 -0
  93. package/dist/utils/runTargetStatus.js +17 -0
  94. package/dist/utils/runTargetStatus.js.map +1 -0
  95. package/package.json +1 -1
  96. package/dist/services/ClaudeProcessService.d.ts +0 -110
  97. package/dist/services/ClaudeProcessService.d.ts.map +0 -1
  98. package/dist/services/ClaudeProcessService.js +0 -312
  99. 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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"}