agkan 3.17.1 → 3.19.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.
- package/dist/board/boardRoutes.d.ts +1 -0
- package/dist/board/boardRoutes.d.ts.map +1 -1
- package/dist/board/boardRoutes.js +9 -1
- package/dist/board/boardRoutes.js.map +1 -1
- package/dist/cli/commands/comment/update.d.ts +6 -0
- package/dist/cli/commands/comment/update.d.ts.map +1 -0
- package/dist/cli/commands/comment/update.js +65 -0
- package/dist/cli/commands/comment/update.js.map +1 -0
- package/dist/cli/commands/tag/delete.d.ts.map +1 -1
- package/dist/cli/commands/tag/delete.js +21 -8
- package/dist/cli/commands/tag/delete.js.map +1 -1
- package/dist/cli/commands/task/delete.d.ts.map +1 -1
- package/dist/cli/commands/task/delete.js +38 -4
- package/dist/cli/commands/task/delete.js.map +1 -1
- package/dist/cli/commands/task/find.d.ts.map +1 -1
- package/dist/cli/commands/task/find.js +19 -2
- package/dist/cli/commands/task/find.js.map +1 -1
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/hooks/claudeHookSettings.js +4 -4
- package/dist/hooks/claudeHookSettings.js.map +1 -1
- package/dist/hooks/hook-stop.mjs +84 -16
- package/dist/services/TagService.d.ts +14 -2
- package/dist/services/TagService.d.ts.map +1 -1
- package/dist/services/TagService.js +20 -2
- package/dist/services/TagService.js.map +1 -1
- package/dist/services/TaskService.d.ts +22 -2
- package/dist/services/TaskService.d.ts.map +1 -1
- package/dist/services/TaskService.js +27 -2
- package/dist/services/TaskService.js.map +1 -1
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/terminal/PtySessionService.d.ts +4 -0
- package/dist/terminal/PtySessionService.d.ts.map +1 -1
- package/dist/terminal/PtySessionService.js +282 -0
- package/dist/terminal/PtySessionService.js.map +1 -1
- package/dist/utils/security.d.ts.map +1 -1
- package/dist/utils/security.js +8 -13
- package/dist/utils/security.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claudeHookSettings.js","sourceRoot":"","sources":["../../src/hooks/claudeHookSettings.ts"],"names":[],"mappings":";;AAsCA,0DAcC;AApDD,2BAAoC;AACpC,+BAAqC;AAErC,MAAM,cAAc,GAAG,IAAA,cAAO,EAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAChE,MAAM,kBAAkB,GAAG,IAAA,cAAO,EAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;AACxE,MAAM,SAAS,GAAG,IAAA,cAAO,EAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAEtD,MAAM,aAAa,GAAG,0BAA0B,CAAC;AAEjD,SAAS,aAAa;IACpB,OAAO;QACL,KAAK,EAAE;YACL,YAAY,EAAE;gBACZ;oBACE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,kBAAkB,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"claudeHookSettings.js","sourceRoot":"","sources":["../../src/hooks/claudeHookSettings.ts"],"names":[],"mappings":";;AAsCA,0DAcC;AApDD,2BAAoC;AACpC,+BAAqC;AAErC,MAAM,cAAc,GAAG,IAAA,cAAO,EAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;AAChE,MAAM,kBAAkB,GAAG,IAAA,cAAO,EAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;AACxE,MAAM,SAAS,GAAG,IAAA,cAAO,EAAC,SAAS,EAAE,eAAe,CAAC,CAAC;AAEtD,MAAM,aAAa,GAAG,0BAA0B,CAAC;AAEjD,SAAS,aAAa;IACpB,OAAO;QACL,KAAK,EAAE;YACL,YAAY,EAAE;gBACZ;oBACE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,EAAE,EAAE,CAAC;iBACpF;aACF;YACD,UAAU,EAAE;gBACV;oBACE,OAAO,EAAE,iBAAiB;oBAC1B,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;iBACpF;aACF;YACD,WAAW,EAAE;gBACX;oBACE,OAAO,EAAE,iBAAiB;oBAC1B,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;iBACrF;aACF;YACD,IAAI,EAAE;gBACJ;oBACE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;iBAC3E;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,uBAAuB,CAAC,OAAe;IAC3D,MAAM,aAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,IAAA,WAAI,EAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACzD,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,aAAE,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/hooks/hook-stop.mjs
CHANGED
|
@@ -50,15 +50,17 @@ function findLastToolUse(entries) {
|
|
|
50
50
|
// the current turn ends on an unrelated tool (e.g. ScheduleWakeup) — the last-tool-only
|
|
51
51
|
// view used by findLastToolUse cannot see it, so a full scan is required here.
|
|
52
52
|
//
|
|
53
|
-
// Two shapes are recognized
|
|
54
|
-
//
|
|
55
|
-
//
|
|
56
|
-
//
|
|
57
|
-
//
|
|
58
|
-
//
|
|
59
|
-
//
|
|
60
|
-
//
|
|
61
|
-
//
|
|
53
|
+
// Two shapes are recognized, and each job is tagged with its `kind` because the two
|
|
54
|
+
// shapes have different completion signals (see the guard in main()):
|
|
55
|
+
// 1. `kind: 'flagged'` — Bash or Task with input.run_in_background === true (the
|
|
56
|
+
// documented flag). Completion is signalled only by a matching <task-notification>.
|
|
57
|
+
// 2. `kind: 'agent'` — Agent, with no flag at all, when `includeAgentWithoutFlag` is
|
|
58
|
+
// true. Newer CLI versions run sub-agents under the tool name `Agent` and may run
|
|
59
|
+
// them in the background without ever setting run_in_background (see #667). This
|
|
60
|
+
// shape is only opted into by the caller for BOARD_TARGET_STATUS-less (planning)
|
|
61
|
+
// sessions: this guard runs before the status-reached check, so if an Agent's
|
|
62
|
+
// completion is never observed, treating it as background here would permanently
|
|
63
|
+
// block status-based termination for pr/run sessions.
|
|
62
64
|
function findBackgroundJobToolUses(entries, { includeAgentWithoutFlag = false } = {}) {
|
|
63
65
|
const jobs = [];
|
|
64
66
|
for (const entry of entries) {
|
|
@@ -76,7 +78,7 @@ function findBackgroundJobToolUses(entries, { includeAgentWithoutFlag = false }
|
|
|
76
78
|
if (isFlaggedBashOrTask || isUnflaggedAgent) {
|
|
77
79
|
// A missing id means we cannot verify completion at all — treat conservatively
|
|
78
80
|
// as unfinished rather than silently skipping the guard.
|
|
79
|
-
jobs.push(item.id ?? null);
|
|
81
|
+
jobs.push({ id: item.id ?? null, kind: isUnflaggedAgent ? 'agent' : 'flagged' });
|
|
80
82
|
}
|
|
81
83
|
}
|
|
82
84
|
}
|
|
@@ -84,13 +86,61 @@ function findBackgroundJobToolUses(entries, { includeAgentWithoutFlag = false }
|
|
|
84
86
|
}
|
|
85
87
|
|
|
86
88
|
// The real completion signal for a background Bash/Task is a `<task-notification>` block
|
|
87
|
-
//
|
|
88
|
-
//
|
|
89
|
-
//
|
|
89
|
+
// whose `<tool-use-id>` matches the original tool_use id. The immediate "running in
|
|
90
|
+
// background" ack is a normal tool_result and must NOT be mistaken for completion.
|
|
91
|
+
//
|
|
92
|
+
// The marker has been observed recorded in transcripts in four different shapes:
|
|
93
|
+
// 1. Top-level `entry.content` string (queue-operation entries).
|
|
94
|
+
// 2. `entry.message.content` as a plain string (user entries).
|
|
95
|
+
// 3. `entry.message.content` as a block array, marker inside a block's `content` string.
|
|
96
|
+
// 4. `entry.message.content` as a block array, marker inside a block's `text` string
|
|
97
|
+
// (assistant entries).
|
|
98
|
+
// All four must be scanned, or notifications recorded in the less common shapes are
|
|
99
|
+
// silently missed and `hasUnfinishedBackgroundJob` never clears (see #692).
|
|
100
|
+
function entryContainsMarker(entry, marker) {
|
|
101
|
+
if (typeof entry?.content === 'string' && entry.content.includes(marker)) return true;
|
|
102
|
+
const messageContent = entry?.message?.content;
|
|
103
|
+
if (typeof messageContent === 'string') return messageContent.includes(marker);
|
|
104
|
+
if (Array.isArray(messageContent)) {
|
|
105
|
+
for (const block of messageContent) {
|
|
106
|
+
if (typeof block?.content === 'string' && block.content.includes(marker)) return true;
|
|
107
|
+
if (typeof block?.text === 'string' && block.text.includes(marker)) return true;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return false;
|
|
111
|
+
}
|
|
112
|
+
|
|
90
113
|
function isBackgroundJobComplete(entries, toolUseId) {
|
|
91
114
|
const marker = `<tool-use-id>${toolUseId}</tool-use-id>`;
|
|
115
|
+
return entries.some((entry) => entryContainsMarker(entry, marker));
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
// Completion check for the `Agent`-without-flag shape. Unlike flagged Bash/Task jobs,
|
|
119
|
+
// Agent runs are synchronous by default: the tool_result IS the agent's final report,
|
|
120
|
+
// and no <task-notification> marker is ever emitted for it. The only tool_result that
|
|
121
|
+
// must not count as completion is the background-launch ack, which is recognized by its
|
|
122
|
+
// `toolUseResult` sidecar (`isAsync: true` / `status: 'async_launched'`) or, when the
|
|
123
|
+
// sidecar is absent, by its "Async agent launched" text. A string `toolUseResult`
|
|
124
|
+
// (error / user rejection) means nothing is running, so it also counts as final.
|
|
125
|
+
function hasFinalAgentToolResult(entries, toolUseId) {
|
|
92
126
|
for (const entry of entries) {
|
|
93
|
-
|
|
127
|
+
const messageContent = entry?.message?.content;
|
|
128
|
+
if (!Array.isArray(messageContent)) continue;
|
|
129
|
+
for (const block of messageContent) {
|
|
130
|
+
if (block?.type !== 'tool_result' || block.tool_use_id !== toolUseId) continue;
|
|
131
|
+
const sidecar = entry.toolUseResult;
|
|
132
|
+
if (sidecar && typeof sidecar === 'object') {
|
|
133
|
+
if (sidecar.isAsync === true || sidecar.status === 'async_launched') continue;
|
|
134
|
+
return true;
|
|
135
|
+
}
|
|
136
|
+
const texts = [];
|
|
137
|
+
if (typeof block.content === 'string') texts.push(block.content);
|
|
138
|
+
if (Array.isArray(block.content)) {
|
|
139
|
+
for (const part of block.content) {
|
|
140
|
+
if (typeof part?.text === 'string') texts.push(part.text);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (texts.some((t) => t.includes('Async agent launched'))) continue;
|
|
94
144
|
return true;
|
|
95
145
|
}
|
|
96
146
|
}
|
|
@@ -134,6 +184,15 @@ async function notifyComplete(apiUrl, token, taskId, sessionFile) {
|
|
|
134
184
|
});
|
|
135
185
|
if (!res.ok) {
|
|
136
186
|
process.stderr.write(`hook-stop: API responded ${res.status}\n`);
|
|
187
|
+
} else {
|
|
188
|
+
// A 200 response can still carry ok:false when the server's screen-status guard
|
|
189
|
+
// skipped termination. This is not retried here — the server itself schedules a
|
|
190
|
+
// delayed re-evaluation and guarantees eventual termination — but it is logged so
|
|
191
|
+
// guard-skip cases are observable instead of silently looking identical to success.
|
|
192
|
+
const data = await res.json().catch(() => null);
|
|
193
|
+
if (data && data.ok === false) {
|
|
194
|
+
process.stderr.write(`hook-stop: server skipped stop (reason=${data.reason ?? 'unknown'})\n`);
|
|
195
|
+
}
|
|
137
196
|
}
|
|
138
197
|
} catch (err) {
|
|
139
198
|
process.stderr.write(`hook-stop: ${(err && err.message) || err}\n`);
|
|
@@ -212,8 +271,17 @@ async function main() {
|
|
|
212
271
|
// signal to fall back on. pr/run/direct sessions always have BOARD_TARGET_STATUS set and
|
|
213
272
|
// rely on the status-reached check below as their sole termination signal (see #667) —
|
|
214
273
|
// opting an unverified completion shape into their guard could wedge them open forever.
|
|
215
|
-
|
|
216
|
-
|
|
274
|
+
//
|
|
275
|
+
// Completion is shape-specific: flagged Bash/Task jobs complete only via the
|
|
276
|
+
// <task-notification> marker, while Agent runs also complete via their final
|
|
277
|
+
// tool_result — synchronous Agent runs never emit a marker, so requiring one would
|
|
278
|
+
// keep planning sessions alive forever after a foreground sub-agent returns.
|
|
279
|
+
const backgroundJobs = findBackgroundJobToolUses(entries, { includeAgentWithoutFlag: !targetStatus });
|
|
280
|
+
const hasUnfinishedBackgroundJob = backgroundJobs.some((job) => {
|
|
281
|
+
if (job.id === null) return true;
|
|
282
|
+
if (isBackgroundJobComplete(entries, job.id)) return false;
|
|
283
|
+
return !(job.kind === 'agent' && hasFinalAgentToolResult(entries, job.id));
|
|
284
|
+
});
|
|
217
285
|
if (hasUnfinishedBackgroundJob) return;
|
|
218
286
|
|
|
219
287
|
// When a target status is configured (pr/run/direct), status-reached is the ONLY
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { Tag, CreateTagInput, UpdateTagInput } from '../models';
|
|
2
2
|
import { StorageBackend } from '../db/types/repository';
|
|
3
|
+
/** Counts of records affected by deleting a tag */
|
|
4
|
+
export interface TagDeleteImpact {
|
|
5
|
+
/** Tasks referencing this tag; their task_tags association will be cascade-deleted */
|
|
6
|
+
taskCount: number;
|
|
7
|
+
}
|
|
3
8
|
/**
|
|
4
9
|
* Tag Service
|
|
5
10
|
* Manages creation, retrieval, update, and deletion of tags
|
|
@@ -42,8 +47,15 @@ export declare class TagService {
|
|
|
42
47
|
/**
|
|
43
48
|
* Delete tag
|
|
44
49
|
* @param id - Tag ID
|
|
45
|
-
* @
|
|
50
|
+
* @param dryRun - If true, verify the tag exists without deleting it
|
|
51
|
+
* @returns True if deletion (or dry-run check) succeeded, false if tag not found
|
|
52
|
+
*/
|
|
53
|
+
deleteTag(id: number, dryRun?: boolean): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Compute the cascade impact of deleting a tag, without deleting it.
|
|
56
|
+
* @param id - Tag ID
|
|
57
|
+
* @returns Impact counts, or null if the tag does not exist
|
|
46
58
|
*/
|
|
47
|
-
|
|
59
|
+
getTagDeleteImpact(id: number): TagDeleteImpact | null;
|
|
48
60
|
}
|
|
49
61
|
//# sourceMappingURL=TagService.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagService.d.ts","sourceRoot":"","sources":["../../src/services/TagService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,CAAC,EAAE,cAAc;IAIpC;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,GAAG;IAiBrC;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAI9B;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAItC;;;OAGG;IACH,QAAQ,IAAI,GAAG,EAAE;IAIjB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,GAAG,GAAG,IAAI;IA+BxD
|
|
1
|
+
{"version":3,"file":"TagService.d.ts","sourceRoot":"","sources":["../../src/services/TagService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAGhE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,mDAAmD;AACnD,MAAM,WAAW,eAAe;IAC9B,sFAAsF;IACtF,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAAiB;gBAEpB,OAAO,CAAC,EAAE,cAAc;IAIpC;;;;;OAKG;IACH,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,GAAG;IAiBrC;;;;OAIG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAI9B;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI;IAItC;;;OAGG;IACH,QAAQ,IAAI,GAAG,EAAE;IAIjB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,GAAG,GAAG,IAAI;IA+BxD;;;;;OAKG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,OAAe,GAAG,OAAO;IAOvD;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;CASvD"}
|
|
@@ -93,11 +93,29 @@ class TagService {
|
|
|
93
93
|
/**
|
|
94
94
|
* Delete tag
|
|
95
95
|
* @param id - Tag ID
|
|
96
|
-
* @
|
|
96
|
+
* @param dryRun - If true, verify the tag exists without deleting it
|
|
97
|
+
* @returns True if deletion (or dry-run check) succeeded, false if tag not found
|
|
97
98
|
*/
|
|
98
|
-
deleteTag(id) {
|
|
99
|
+
deleteTag(id, dryRun = false) {
|
|
100
|
+
if (dryRun) {
|
|
101
|
+
return this.getTag(id) !== null;
|
|
102
|
+
}
|
|
99
103
|
return this.backend.tags.delete(id);
|
|
100
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Compute the cascade impact of deleting a tag, without deleting it.
|
|
107
|
+
* @param id - Tag ID
|
|
108
|
+
* @returns Impact counts, or null if the tag does not exist
|
|
109
|
+
*/
|
|
110
|
+
getTagDeleteImpact(id) {
|
|
111
|
+
const tag = this.getTag(id);
|
|
112
|
+
if (!tag) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
taskCount: this.backend.taskTags.findTaskIdsByTagId(id).length,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
101
119
|
}
|
|
102
120
|
exports.TagService = TagService;
|
|
103
121
|
//# sourceMappingURL=TagService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagService.js","sourceRoot":"","sources":["../../src/services/TagService.ts"],"names":[],"mappings":";;;AACA,iDAAqD;AACrD,gEAA6D;AAE7D,sCAA2D;
|
|
1
|
+
{"version":3,"file":"TagService.js","sourceRoot":"","sources":["../../src/services/TagService.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,19 @@ import { BoardEventService } from './BoardEventService';
|
|
|
5
5
|
export declare const ALLOWED_SORT_FIELDS: readonly ["id", "title", "status", "created_at", "updated_at", "priority"];
|
|
6
6
|
export type SortField = (typeof ALLOWED_SORT_FIELDS)[number];
|
|
7
7
|
export type SortOrder = 'asc' | 'desc';
|
|
8
|
+
/** Counts of records affected by deleting a task */
|
|
9
|
+
export interface TaskDeleteImpact {
|
|
10
|
+
/** Direct child tasks; their parent_id will be set to null (ON DELETE SET NULL) */
|
|
11
|
+
childCount: number;
|
|
12
|
+
/** Comments that will be cascade-deleted */
|
|
13
|
+
commentCount: number;
|
|
14
|
+
/** Tag associations that will be cascade-deleted */
|
|
15
|
+
tagCount: number;
|
|
16
|
+
/** Metadata entries that will be cascade-deleted */
|
|
17
|
+
metadataCount: number;
|
|
18
|
+
/** Blocking relationships (as blocker or blocked) that will be cascade-deleted */
|
|
19
|
+
blockCount: number;
|
|
20
|
+
}
|
|
8
21
|
/**
|
|
9
22
|
* Task Service
|
|
10
23
|
* Provides CRUD operations for tasks
|
|
@@ -53,9 +66,16 @@ export declare class TaskService {
|
|
|
53
66
|
/**
|
|
54
67
|
* Delete task
|
|
55
68
|
* @param id - Task ID
|
|
56
|
-
* @
|
|
69
|
+
* @param dryRun - If true, verify the task exists without deleting it
|
|
70
|
+
* @returns true if deletion (or dry-run check) succeeded, false if task not found
|
|
71
|
+
*/
|
|
72
|
+
deleteTask(id: number, dryRun?: boolean): boolean;
|
|
73
|
+
/**
|
|
74
|
+
* Compute the cascade impact of deleting a task, without deleting it.
|
|
75
|
+
* @param id - Task ID
|
|
76
|
+
* @returns Impact counts, or null if the task does not exist
|
|
57
77
|
*/
|
|
58
|
-
|
|
78
|
+
getTaskDeleteImpact(id: number): TaskDeleteImpact | null;
|
|
59
79
|
/**
|
|
60
80
|
* Get task count by status
|
|
61
81
|
* @returns Map of task count for each status
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskService.d.ts","sourceRoot":"","sources":["../../src/services/TaskService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAI/E,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,2CAA2C;AAC3C,eAAO,MAAM,mBAAmB,4EAA6E,CAAC;AAC9G,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvC;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,iBAAiB,CAAC,CAAoB;gBAElC,OAAO,CAAC,EAAE,cAAc,EAAE,iBAAiB,CAAC,EAAE,iBAAiB;IAK3E;;;;;;OAMG;IACH,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IA8CxC;;;;OAIG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIhC;;;;;;OAMG;IACH,SAAS,CACP,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,EAAE,CAAC;QACnC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;QAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,eAAe,CAAC,EAAE,OAAO,CAAC;KAC3B,EACD,IAAI,CAAC,EAAE,SAAS,EAChB,KAAK,CAAC,EAAE,SAAS,GAChB,IAAI,EAAE;IAuBT;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IA8B3D
|
|
1
|
+
{"version":3,"file":"TaskService.d.ts","sourceRoot":"","sources":["../../src/services/TaskService.ts"],"names":[],"mappings":"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"}
|
|
@@ -133,18 +133,40 @@ class TaskService {
|
|
|
133
133
|
/**
|
|
134
134
|
* Delete task
|
|
135
135
|
* @param id - Task ID
|
|
136
|
-
* @
|
|
136
|
+
* @param dryRun - If true, verify the task exists without deleting it
|
|
137
|
+
* @returns true if deletion (or dry-run check) succeeded, false if task not found
|
|
137
138
|
*/
|
|
138
|
-
deleteTask(id) {
|
|
139
|
+
deleteTask(id, dryRun = false) {
|
|
139
140
|
const task = this.getTask(id);
|
|
140
141
|
if (!task) {
|
|
141
142
|
return false;
|
|
142
143
|
}
|
|
144
|
+
if (dryRun) {
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
143
147
|
const deleted = this.backend.tasks.delete(id);
|
|
144
148
|
if (deleted)
|
|
145
149
|
this.boardEventService?.notify();
|
|
146
150
|
return deleted;
|
|
147
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* Compute the cascade impact of deleting a task, without deleting it.
|
|
154
|
+
* @param id - Task ID
|
|
155
|
+
* @returns Impact counts, or null if the task does not exist
|
|
156
|
+
*/
|
|
157
|
+
getTaskDeleteImpact(id) {
|
|
158
|
+
const task = this.getTask(id);
|
|
159
|
+
if (!task) {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
childCount: this.backend.tasks.findChildren(id).length,
|
|
164
|
+
commentCount: this.backend.comments.findByTaskId(id).length,
|
|
165
|
+
tagCount: this.backend.taskTags.findTagIdsByTaskId(id).length,
|
|
166
|
+
metadataCount: this.backend.metadata.findByTaskId(id).length,
|
|
167
|
+
blockCount: this.backend.blocks.findBlockedTaskIds(id).length + this.backend.blocks.findBlockerTaskIds(id).length,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
148
170
|
/**
|
|
149
171
|
* Get task count by status
|
|
150
172
|
* @returns Map of task count for each status
|
|
@@ -166,6 +188,7 @@ class TaskService {
|
|
|
166
188
|
const tasks = this.backend.tasks.findForPurge(beforeDate, statuses);
|
|
167
189
|
if (!dryRun && tasks.length > 0) {
|
|
168
190
|
this.backend.tasks.deleteMany(tasks.map((t) => t.id));
|
|
191
|
+
this.boardEventService?.notify();
|
|
169
192
|
}
|
|
170
193
|
return tasks;
|
|
171
194
|
}
|
|
@@ -184,6 +207,7 @@ class TaskService {
|
|
|
184
207
|
const tasks = this.backend.tasks.findForPurge(beforeDate, statuses);
|
|
185
208
|
if (!dryRun && tasks.length > 0) {
|
|
186
209
|
this.backend.tasks.archiveMany(tasks.map((t) => t.id));
|
|
210
|
+
this.boardEventService?.notify();
|
|
187
211
|
}
|
|
188
212
|
return tasks;
|
|
189
213
|
}
|
|
@@ -198,6 +222,7 @@ class TaskService {
|
|
|
198
222
|
return null;
|
|
199
223
|
}
|
|
200
224
|
this.backend.tasks.unarchiveMany([id]);
|
|
225
|
+
this.boardEventService?.notify();
|
|
201
226
|
return this.backend.tasks.findById(id);
|
|
202
227
|
}
|
|
203
228
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TaskService.js","sourceRoot":"","sources":["../../src/services/TaskService.ts"],"names":[],"mappings":";;;AACA,iDAAqD;AACrD,gEAAuF;AACvF,4DAA2D;AAE3D,sCAA0E;AAG1E,2CAA2C;AAC9B,QAAA,mBAAmB,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"TaskService.js","sourceRoot":"","sources":["../../src/services/TaskService.ts"],"names":[],"mappings":"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"}
|
package/dist/services/index.d.ts
CHANGED
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
* Centrally manages all service classes
|
|
4
4
|
*/
|
|
5
5
|
export { TaskService } from './TaskService';
|
|
6
|
+
export type { TaskDeleteImpact } from './TaskService';
|
|
6
7
|
export { FileService } from './FileService';
|
|
7
8
|
export { TaskBlockService } from './TaskBlockService';
|
|
8
9
|
export { TagService } from './TagService';
|
|
10
|
+
export type { TagDeleteImpact } from './TagService';
|
|
9
11
|
export { TaskTagService } from './TaskTagService';
|
|
10
12
|
export { MetadataService } from './MetadataService';
|
|
11
13
|
export { CommentService } from './CommentService';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrG,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrG,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AAEpB,6CAA4C;AAAnC,0GAAA,WAAW,OAAA;AACpB,uDAAsD;AAA7C,oHAAA,gBAAgB,OAAA;AACzB,2CAA0C;AAAjC,wGAAA,UAAU,OAAA;AAEnB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,mDAAkD;AAAzC,gHAAA,cAAc,OAAA;AACvB,6DAA4D;AAAnD,0HAAA,mBAAmB,OAAA"}
|
|
@@ -10,6 +10,8 @@ type OutputEvent = {
|
|
|
10
10
|
message: string;
|
|
11
11
|
};
|
|
12
12
|
type SubscribeCallback = (event: OutputEvent) => void;
|
|
13
|
+
export type ClaudeScreenStatus = 'working' | 'blocked' | 'idle' | 'unknown';
|
|
14
|
+
export declare function detectClaudeScreenStatus(outputBuffer: string): ClaudeScreenStatus;
|
|
13
15
|
export interface PtySessionServiceOptions {
|
|
14
16
|
boardApiUrl: string | null;
|
|
15
17
|
attentionStateService: AttentionStateService;
|
|
@@ -36,6 +38,8 @@ export declare class PtySessionService {
|
|
|
36
38
|
private sendEnterWithRetry;
|
|
37
39
|
startProcess(taskId: number, prompt: string, command?: string, model?: string, effort?: string): Promise<void>;
|
|
38
40
|
stopProcess(taskId: number): boolean;
|
|
41
|
+
stopProcessFromHook(taskId: number): boolean;
|
|
42
|
+
private scheduleDeferredHookStop;
|
|
39
43
|
listRunningTasks(): {
|
|
40
44
|
taskId: number;
|
|
41
45
|
command: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PtySessionService.d.ts","sourceRoot":"","sources":["../../src/terminal/PtySessionService.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,wBAAwB,CAAC;AACxE,OAAO,KAAK,EAAE,MAAM,EAAoC,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAK7G,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAG1E,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY9C;
|
|
1
|
+
{"version":3,"file":"PtySessionService.d.ts","sourceRoot":"","sources":["../../src/terminal/PtySessionService.ts"],"names":[],"mappings":"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"}
|