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