kantban-cli 0.1.8 → 0.1.11
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/chunk-ZCUIGFSP.js +4111 -0
- package/dist/chunk-ZCUIGFSP.js.map +1 -0
- package/dist/context-7YDNTI3P.js +30 -0
- package/dist/context-7YDNTI3P.js.map +1 -0
- package/dist/cron-OKQP6QDF.js +112 -0
- package/dist/cron-OKQP6QDF.js.map +1 -0
- package/dist/index.d.ts +0 -2
- package/dist/index.js +179 -44
- package/dist/index.js.map +1 -1
- package/dist/pipeline-7LG74YA2.js +4098 -0
- package/dist/pipeline-7LG74YA2.js.map +1 -0
- package/dist/pipeline-init-IGZZOOLK.js +103 -0
- package/dist/pipeline-init-IGZZOOLK.js.map +1 -0
- package/dist/status-4GFXMVIM.js +128 -0
- package/dist/status-4GFXMVIM.js.map +1 -0
- package/dist/work-2V33NZAT.js +81 -0
- package/dist/work-2V33NZAT.js.map +1 -0
- package/package.json +5 -4
- package/dist/client.d.ts +0 -38
- package/dist/client.d.ts.map +0 -1
- package/dist/client.js +0 -163
- package/dist/client.js.map +0 -1
- package/dist/commands/context.d.ts +0 -3
- package/dist/commands/context.d.ts.map +0 -1
- package/dist/commands/context.js +0 -27
- package/dist/commands/context.js.map +0 -1
- package/dist/commands/cron.d.ts +0 -3
- package/dist/commands/cron.d.ts.map +0 -1
- package/dist/commands/cron.js +0 -106
- package/dist/commands/cron.js.map +0 -1
- package/dist/commands/pipeline-init.d.ts +0 -2
- package/dist/commands/pipeline-init.d.ts.map +0 -1
- package/dist/commands/pipeline-init.js +0 -100
- package/dist/commands/pipeline-init.js.map +0 -1
- package/dist/commands/pipeline.d.ts +0 -4
- package/dist/commands/pipeline.d.ts.map +0 -1
- package/dist/commands/pipeline.js +0 -1222
- package/dist/commands/pipeline.js.map +0 -1
- package/dist/commands/status.d.ts +0 -3
- package/dist/commands/status.d.ts.map +0 -1
- package/dist/commands/status.js +0 -135
- package/dist/commands/status.js.map +0 -1
- package/dist/commands/work.d.ts +0 -3
- package/dist/commands/work.d.ts.map +0 -1
- package/dist/commands/work.js +0 -76
- package/dist/commands/work.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/lib/advisor.d.ts +0 -108
- package/dist/lib/advisor.d.ts.map +0 -1
- package/dist/lib/advisor.js +0 -139
- package/dist/lib/advisor.js.map +0 -1
- package/dist/lib/checkpoint.d.ts +0 -15
- package/dist/lib/checkpoint.d.ts.map +0 -1
- package/dist/lib/checkpoint.js +0 -49
- package/dist/lib/checkpoint.js.map +0 -1
- package/dist/lib/constraint-evaluator.d.ts +0 -40
- package/dist/lib/constraint-evaluator.d.ts.map +0 -1
- package/dist/lib/constraint-evaluator.js +0 -189
- package/dist/lib/constraint-evaluator.js.map +0 -1
- package/dist/lib/cost-tracker.d.ts +0 -46
- package/dist/lib/cost-tracker.d.ts.map +0 -1
- package/dist/lib/cost-tracker.js +0 -120
- package/dist/lib/cost-tracker.js.map +0 -1
- package/dist/lib/evaluator.d.ts +0 -17
- package/dist/lib/evaluator.d.ts.map +0 -1
- package/dist/lib/evaluator.js +0 -71
- package/dist/lib/evaluator.js.map +0 -1
- package/dist/lib/event-emitter.d.ts +0 -28
- package/dist/lib/event-emitter.d.ts.map +0 -1
- package/dist/lib/event-emitter.js +0 -100
- package/dist/lib/event-emitter.js.map +0 -1
- package/dist/lib/event-queue.d.ts +0 -28
- package/dist/lib/event-queue.d.ts.map +0 -1
- package/dist/lib/event-queue.js +0 -73
- package/dist/lib/event-queue.js.map +0 -1
- package/dist/lib/gate-config.d.ts +0 -7
- package/dist/lib/gate-config.d.ts.map +0 -1
- package/dist/lib/gate-config.js +0 -68
- package/dist/lib/gate-config.js.map +0 -1
- package/dist/lib/gate-proxy-server.d.ts +0 -16
- package/dist/lib/gate-proxy-server.d.ts.map +0 -1
- package/dist/lib/gate-proxy-server.js +0 -385
- package/dist/lib/gate-proxy-server.js.map +0 -1
- package/dist/lib/gate-proxy.d.ts +0 -46
- package/dist/lib/gate-proxy.d.ts.map +0 -1
- package/dist/lib/gate-proxy.js +0 -104
- package/dist/lib/gate-proxy.js.map +0 -1
- package/dist/lib/gate-runner.d.ts +0 -13
- package/dist/lib/gate-runner.d.ts.map +0 -1
- package/dist/lib/gate-runner.js +0 -104
- package/dist/lib/gate-runner.js.map +0 -1
- package/dist/lib/gate-snapshot.d.ts +0 -12
- package/dist/lib/gate-snapshot.d.ts.map +0 -1
- package/dist/lib/gate-snapshot.js +0 -49
- package/dist/lib/gate-snapshot.js.map +0 -1
- package/dist/lib/light-call.d.ts +0 -37
- package/dist/lib/light-call.d.ts.map +0 -1
- package/dist/lib/light-call.js +0 -62
- package/dist/lib/light-call.js.map +0 -1
- package/dist/lib/logger.d.ts +0 -22
- package/dist/lib/logger.d.ts.map +0 -1
- package/dist/lib/logger.js +0 -98
- package/dist/lib/logger.js.map +0 -1
- package/dist/lib/mcp-config.d.ts +0 -24
- package/dist/lib/mcp-config.d.ts.map +0 -1
- package/dist/lib/mcp-config.js +0 -115
- package/dist/lib/mcp-config.js.map +0 -1
- package/dist/lib/orchestrator.d.ts +0 -392
- package/dist/lib/orchestrator.d.ts.map +0 -1
- package/dist/lib/orchestrator.js +0 -1636
- package/dist/lib/orchestrator.js.map +0 -1
- package/dist/lib/parse-utils.d.ts +0 -6
- package/dist/lib/parse-utils.d.ts.map +0 -1
- package/dist/lib/parse-utils.js +0 -64
- package/dist/lib/parse-utils.js.map +0 -1
- package/dist/lib/prompt-composer.d.ts +0 -131
- package/dist/lib/prompt-composer.d.ts.map +0 -1
- package/dist/lib/prompt-composer.js +0 -317
- package/dist/lib/prompt-composer.js.map +0 -1
- package/dist/lib/ralph-loop.d.ts +0 -123
- package/dist/lib/ralph-loop.d.ts.map +0 -1
- package/dist/lib/ralph-loop.js +0 -383
- package/dist/lib/ralph-loop.js.map +0 -1
- package/dist/lib/reaper.d.ts +0 -14
- package/dist/lib/reaper.d.ts.map +0 -1
- package/dist/lib/reaper.js +0 -114
- package/dist/lib/reaper.js.map +0 -1
- package/dist/lib/replanner.d.ts +0 -49
- package/dist/lib/replanner.d.ts.map +0 -1
- package/dist/lib/replanner.js +0 -61
- package/dist/lib/replanner.js.map +0 -1
- package/dist/lib/run-memory.d.ts +0 -37
- package/dist/lib/run-memory.d.ts.map +0 -1
- package/dist/lib/run-memory.js +0 -115
- package/dist/lib/run-memory.js.map +0 -1
- package/dist/lib/stream-parser.d.ts +0 -20
- package/dist/lib/stream-parser.d.ts.map +0 -1
- package/dist/lib/stream-parser.js +0 -65
- package/dist/lib/stream-parser.js.map +0 -1
- package/dist/lib/stuck-detector.d.ts +0 -47
- package/dist/lib/stuck-detector.d.ts.map +0 -1
- package/dist/lib/stuck-detector.js +0 -105
- package/dist/lib/stuck-detector.js.map +0 -1
- package/dist/lib/tool-profiles.d.ts +0 -19
- package/dist/lib/tool-profiles.d.ts.map +0 -1
- package/dist/lib/tool-profiles.js +0 -22
- package/dist/lib/tool-profiles.js.map +0 -1
- package/dist/lib/worktree.d.ts +0 -12
- package/dist/lib/worktree.d.ts.map +0 -1
- package/dist/lib/worktree.js +0 -29
- package/dist/lib/worktree.js.map +0 -1
- package/dist/lib/ws-client.d.ts +0 -31
- package/dist/lib/ws-client.d.ts.map +0 -1
- package/dist/lib/ws-client.js +0 -113
- package/dist/lib/ws-client.js.map +0 -1
package/dist/lib/replanner.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { parseJsonFromLlmOutput } from './parse-utils.js';
|
|
3
|
-
export function shouldFireReplanner(triggers, state) {
|
|
4
|
-
if (state.escalatedTickets >= triggers.escalation_count)
|
|
5
|
-
return true;
|
|
6
|
-
if (state.maxInputTokens > 0) {
|
|
7
|
-
const pct = (state.totalTokensIn / state.maxInputTokens) * 100;
|
|
8
|
-
if (pct >= triggers.cost_threshold_pct)
|
|
9
|
-
return true;
|
|
10
|
-
}
|
|
11
|
-
for (const count of Object.values(state.repeatedGateFailures)) {
|
|
12
|
-
if (count >= triggers.repeated_gate_failure_count)
|
|
13
|
-
return true;
|
|
14
|
-
}
|
|
15
|
-
if (state.durationMinutes >= triggers.duration_threshold_minutes)
|
|
16
|
-
return true;
|
|
17
|
-
return false;
|
|
18
|
-
}
|
|
19
|
-
const ReplannerActionSchema = z.enum([
|
|
20
|
-
'CONTINUE', 'PAUSE_PIPELINE', 'ARCHIVE_TICKETS', 'CREATE_SIGNAL', 'ADJUST_BUDGET', 'ESCALATE_ALL',
|
|
21
|
-
]);
|
|
22
|
-
const ReplannerResponseSchema = z.object({
|
|
23
|
-
action: ReplannerActionSchema,
|
|
24
|
-
reason: z.string(),
|
|
25
|
-
ticket_ids: z.array(z.string()).optional(),
|
|
26
|
-
signal_content: z.string().optional(),
|
|
27
|
-
new_max_input_tokens: z.number().optional(),
|
|
28
|
-
});
|
|
29
|
-
export function composeReplannerPrompt(state) {
|
|
30
|
-
const parts = [];
|
|
31
|
-
parts.push('You are a pipeline replanner. A trigger threshold has been crossed.');
|
|
32
|
-
parts.push(`\nTrigger: ${state.triggerReason}`);
|
|
33
|
-
parts.push(`\nPipeline State:`);
|
|
34
|
-
parts.push(`- Escalated tickets: ${state.escalatedTickets}`);
|
|
35
|
-
parts.push(`- Token usage: ${state.totalTokensIn} / ${state.maxInputTokens}`);
|
|
36
|
-
parts.push(`- Duration: ${state.durationMinutes} minutes`);
|
|
37
|
-
if (Object.keys(state.repeatedGateFailures).length > 0) {
|
|
38
|
-
parts.push(`\nRepeated gate failures:`);
|
|
39
|
-
for (const [gate, count] of Object.entries(state.repeatedGateFailures)) {
|
|
40
|
-
parts.push(`- ${gate}: ${count} tickets failing`);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
parts.push(`\nTicket summaries:`);
|
|
44
|
-
for (const t of state.ticketSummaries) {
|
|
45
|
-
parts.push(`- ${t.title} [${t.column}] status=${t.status} iterations=${t.iterations} gate_pass=${t.gatePassRate}%`);
|
|
46
|
-
}
|
|
47
|
-
parts.push(`\nActions available: CONTINUE, PAUSE_PIPELINE, ARCHIVE_TICKETS, CREATE_SIGNAL, ADJUST_BUDGET, ESCALATE_ALL`);
|
|
48
|
-
parts.push(`\nBe conservative. Primary value is knowing when to stop.`);
|
|
49
|
-
parts.push(`\nRespond with a JSON object: { "action": "...", "reason": "..." }`);
|
|
50
|
-
return parts.join('\n');
|
|
51
|
-
}
|
|
52
|
-
export function parseReplannerResponse(raw) {
|
|
53
|
-
try {
|
|
54
|
-
const parsed = parseJsonFromLlmOutput(raw);
|
|
55
|
-
return ReplannerResponseSchema.parse(parsed);
|
|
56
|
-
}
|
|
57
|
-
catch {
|
|
58
|
-
return { action: 'PAUSE_PIPELINE', reason: 'Failed to parse replanner response — defaulting to pause for safety' };
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=replanner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"replanner.js","sourceRoot":"","sources":["../../src/lib/replanner.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/run-memory.d.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
export interface RunMemoryDeps {
|
|
2
|
-
createDocument: (content: string, title: string) => Promise<string>;
|
|
3
|
-
getDocument: (documentId: string) => Promise<string>;
|
|
4
|
-
updateDocument: (documentId: string, content: string) => Promise<void>;
|
|
5
|
-
}
|
|
6
|
-
export declare class RunMemory {
|
|
7
|
-
private boardName;
|
|
8
|
-
private deps;
|
|
9
|
-
private _documentId;
|
|
10
|
-
private _writeQueue;
|
|
11
|
-
constructor(_boardId: string, boardName: string, deps: RunMemoryDeps);
|
|
12
|
-
get documentId(): string | null;
|
|
13
|
-
/**
|
|
14
|
-
* Create the run memory document. Optional seedContent prepopulates the
|
|
15
|
-
* Codebase Conventions section.
|
|
16
|
-
*/
|
|
17
|
-
initialize(seedContent?: string): Promise<void>;
|
|
18
|
-
/**
|
|
19
|
-
* Get current document content. Returns '' if not initialized or on error.
|
|
20
|
-
*/
|
|
21
|
-
getContent(): Promise<string>;
|
|
22
|
-
/**
|
|
23
|
-
* Check if document exceeds line threshold (default 500).
|
|
24
|
-
*/
|
|
25
|
-
needsCompaction(threshold?: number): Promise<boolean>;
|
|
26
|
-
/**
|
|
27
|
-
* Append content under a specific section heading.
|
|
28
|
-
* Agents call this after successful iterations to share discoveries.
|
|
29
|
-
*/
|
|
30
|
-
append(section: string, content: string): Promise<void>;
|
|
31
|
-
/**
|
|
32
|
-
* Replace document content with a compacted version.
|
|
33
|
-
* Called by the orchestrator after a Haiku summarization call.
|
|
34
|
-
*/
|
|
35
|
-
compact(compactedContent: string): Promise<void>;
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=run-memory.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run-memory.d.ts","sourceRoot":"","sources":["../../src/lib/run-memory.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACpE,WAAW,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,cAAc,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACxE;AAID,qBAAa,SAAS;IACpB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,IAAI,CAAgB;IAC5B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,WAAW,CAAoC;gBAE3C,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa;IAKpE,IAAI,UAAU,IAAI,MAAM,GAAG,IAAI,CAE9B;IAED;;;OAGG;IACG,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAYnC;;OAEG;IACG,eAAe,CAAC,SAAS,GAAE,MAAqC,GAAG,OAAO,CAAC,OAAO,CAAC;IAOzF;;;OAGG;IACG,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B7D;;;OAGG;IACG,OAAO,CAAC,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAcvD"}
|
package/dist/lib/run-memory.js
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
const DEFAULT_COMPACTION_THRESHOLD = 500;
|
|
2
|
-
export class RunMemory {
|
|
3
|
-
boardName;
|
|
4
|
-
deps;
|
|
5
|
-
_documentId = null;
|
|
6
|
-
_writeQueue = Promise.resolve();
|
|
7
|
-
constructor(_boardId, boardName, deps) {
|
|
8
|
-
this.boardName = boardName;
|
|
9
|
-
this.deps = deps;
|
|
10
|
-
}
|
|
11
|
-
get documentId() {
|
|
12
|
-
return this._documentId;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Create the run memory document. Optional seedContent prepopulates the
|
|
16
|
-
* Codebase Conventions section.
|
|
17
|
-
*/
|
|
18
|
-
async initialize(seedContent) {
|
|
19
|
-
if (this._documentId !== null)
|
|
20
|
-
return; // Already initialized
|
|
21
|
-
const date = new Date().toISOString().slice(0, 10); // YYYY-MM-DD
|
|
22
|
-
const title = `Pipeline Run Memory — ${this.boardName} — ${date}`;
|
|
23
|
-
const content = buildTemplate(seedContent);
|
|
24
|
-
this._documentId = await this.deps.createDocument(content, title);
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Get current document content. Returns '' if not initialized or on error.
|
|
28
|
-
*/
|
|
29
|
-
async getContent() {
|
|
30
|
-
if (this._documentId === null) {
|
|
31
|
-
return '';
|
|
32
|
-
}
|
|
33
|
-
try {
|
|
34
|
-
return await this.deps.getDocument(this._documentId);
|
|
35
|
-
}
|
|
36
|
-
catch (err) {
|
|
37
|
-
console.warn(`[run-memory] getContent failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
38
|
-
return '';
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Check if document exceeds line threshold (default 500).
|
|
43
|
-
*/
|
|
44
|
-
async needsCompaction(threshold = DEFAULT_COMPACTION_THRESHOLD) {
|
|
45
|
-
const content = await this.getContent();
|
|
46
|
-
if (!content)
|
|
47
|
-
return false;
|
|
48
|
-
const lineCount = content.split('\n').length;
|
|
49
|
-
return lineCount > threshold;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Append content under a specific section heading.
|
|
53
|
-
* Agents call this after successful iterations to share discoveries.
|
|
54
|
-
*/
|
|
55
|
-
async append(section, content) {
|
|
56
|
-
if (this._documentId === null)
|
|
57
|
-
return;
|
|
58
|
-
this._writeQueue = this._writeQueue.then(async () => {
|
|
59
|
-
try {
|
|
60
|
-
const current = await this.deps.getDocument(this._documentId);
|
|
61
|
-
const sectionHeader = `## ${section}`;
|
|
62
|
-
const idx = current.indexOf(sectionHeader);
|
|
63
|
-
if (idx === -1) {
|
|
64
|
-
await this.deps.updateDocument(this._documentId, current + `\n\n${sectionHeader}\n\n${content}`);
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
const afterHeader = idx + sectionHeader.length;
|
|
68
|
-
const nextSection = current.indexOf('\n## ', afterHeader);
|
|
69
|
-
const insertAt = nextSection === -1 ? current.length : nextSection;
|
|
70
|
-
const updated = current.slice(0, insertAt) + `\n${content}\n` + current.slice(insertAt);
|
|
71
|
-
await this.deps.updateDocument(this._documentId, updated);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
catch (err) {
|
|
75
|
-
// Fire-and-forget — run memory writes must never block the loop
|
|
76
|
-
console.warn(`[run-memory] append failed (section="${section}"): ${err instanceof Error ? err.message : String(err)}`);
|
|
77
|
-
}
|
|
78
|
-
}).catch(() => {
|
|
79
|
-
// Ensure queue is never in rejected state — individual failures are logged inside
|
|
80
|
-
});
|
|
81
|
-
await this._writeQueue;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Replace document content with a compacted version.
|
|
85
|
-
* Called by the orchestrator after a Haiku summarization call.
|
|
86
|
-
*/
|
|
87
|
-
async compact(compactedContent) {
|
|
88
|
-
if (this._documentId === null)
|
|
89
|
-
return;
|
|
90
|
-
this._writeQueue = this._writeQueue.then(async () => {
|
|
91
|
-
try {
|
|
92
|
-
await this.deps.updateDocument(this._documentId, compactedContent);
|
|
93
|
-
}
|
|
94
|
-
catch (err) {
|
|
95
|
-
// Fire-and-forget
|
|
96
|
-
console.warn(`[run-memory] compact failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
97
|
-
}
|
|
98
|
-
}).catch(() => {
|
|
99
|
-
// Ensure queue is never in rejected state — individual failures are logged inside
|
|
100
|
-
});
|
|
101
|
-
await this._writeQueue;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
function buildTemplate(seedContent) {
|
|
105
|
-
const conventionsSection = seedContent
|
|
106
|
-
? `## Codebase Conventions\n\n${seedContent}`
|
|
107
|
-
: `## Codebase Conventions`;
|
|
108
|
-
return [
|
|
109
|
-
conventionsSection,
|
|
110
|
-
`## Discovered Interfaces`,
|
|
111
|
-
`## Failure Patterns`,
|
|
112
|
-
`## QA Rejection History`,
|
|
113
|
-
].join('\n\n');
|
|
114
|
-
}
|
|
115
|
-
//# sourceMappingURL=run-memory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"run-memory.js","sourceRoot":"","sources":["../../src/lib/run-memory.ts"],"names":[],"mappings":"AAMA,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAEzC,MAAM,OAAO,SAAS;IACZ,SAAS,CAAS;IAClB,IAAI,CAAgB;IACpB,WAAW,GAAkB,IAAI,CAAC;IAClC,WAAW,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEvD,YAAY,QAAgB,EAAE,SAAiB,EAAE,IAAmB;QAClE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,WAAoB;QACnC,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI;YAAE,OAAO,CAAC,sBAAsB;QAC7D,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa;QACjE,MAAM,KAAK,GAAG,yBAAyB,IAAI,CAAC,SAAS,MAAM,IAAI,EAAE,CAAC;QAClE,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC9B,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,mCAAmC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpG,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,YAAoB,4BAA4B;QACpE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAC7C,OAAO,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,OAAe;QAC3C,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI;YAAE,OAAO;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAClD,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAY,CAAC,CAAC;gBAC/D,MAAM,aAAa,GAAG,MAAM,OAAO,EAAE,CAAC;gBACtC,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;gBAC3C,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;oBACf,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAY,EAAE,OAAO,GAAG,OAAO,aAAa,OAAO,OAAO,EAAE,CAAC,CAAC;gBACpG,CAAC;qBAAM,CAAC;oBACN,MAAM,WAAW,GAAG,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC;oBAC/C,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;oBAC1D,MAAM,QAAQ,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;oBACnE,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,KAAK,OAAO,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACxF,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAY,EAAE,OAAO,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,gEAAgE;gBAChE,OAAO,CAAC,IAAI,CAAC,wCAAwC,OAAO,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzH,CAAC;QACH,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACZ,kFAAkF;QACpF,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,gBAAwB;QACpC,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI;YAAE,OAAO;QACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAClD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAY,EAAE,gBAAgB,CAAC,CAAC;YACtE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,kBAAkB;gBAClB,OAAO,CAAC,IAAI,CAAC,gCAAgC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnG,CAAC;QACH,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YACZ,kFAAkF;QACpF,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,WAAW,CAAC;IACzB,CAAC;CACF;AAED,SAAS,aAAa,CAAC,WAAoB;IACzC,MAAM,kBAAkB,GAAG,WAAW;QACpC,CAAC,CAAC,8BAA8B,WAAW,EAAE;QAC7C,CAAC,CAAC,yBAAyB,CAAC;IAE9B,OAAO;QACL,kBAAkB;QAClB,0BAA0B;QAC1B,qBAAqB;QACrB,yBAAyB;KAC1B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjB,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'node:events';
|
|
2
|
-
export interface StreamJsonEvent {
|
|
3
|
-
type: string;
|
|
4
|
-
subtype?: string;
|
|
5
|
-
[key: string]: unknown;
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Parses newline-delimited JSON from a readable stream (Claude --output-format stream-json).
|
|
9
|
-
* Emits 'event' for each parsed line, 'error' for parse failures.
|
|
10
|
-
*/
|
|
11
|
-
export declare class StreamJsonParser extends EventEmitter {
|
|
12
|
-
private buffer;
|
|
13
|
-
private toolCallCount;
|
|
14
|
-
feed(chunk: string): void;
|
|
15
|
-
/** Flush any remaining buffer content (call after stream ends). */
|
|
16
|
-
flush(): void;
|
|
17
|
-
getToolCallCount(): number;
|
|
18
|
-
reset(): void;
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=stream-parser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stream-parser.d.ts","sourceRoot":"","sources":["../../src/lib/stream-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,aAAa,CAAK;IAE1B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAyBzB,mEAAmE;IACnE,KAAK,IAAI,IAAI;IAmBb,gBAAgB,IAAI,MAAM;IAI1B,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'node:events';
|
|
2
|
-
/**
|
|
3
|
-
* Parses newline-delimited JSON from a readable stream (Claude --output-format stream-json).
|
|
4
|
-
* Emits 'event' for each parsed line, 'error' for parse failures.
|
|
5
|
-
*/
|
|
6
|
-
export class StreamJsonParser extends EventEmitter {
|
|
7
|
-
buffer = '';
|
|
8
|
-
toolCallCount = 0;
|
|
9
|
-
feed(chunk) {
|
|
10
|
-
this.buffer += chunk;
|
|
11
|
-
const lines = this.buffer.split('\n');
|
|
12
|
-
// Keep the last incomplete line in the buffer
|
|
13
|
-
this.buffer = lines.pop() ?? '';
|
|
14
|
-
for (const line of lines) {
|
|
15
|
-
const trimmed = line.trim();
|
|
16
|
-
if (!trimmed)
|
|
17
|
-
continue;
|
|
18
|
-
try {
|
|
19
|
-
const event = JSON.parse(trimmed);
|
|
20
|
-
// Count tool_use blocks within assistant events only — the assistant event is
|
|
21
|
-
// the authoritative source. Standalone top-level tool_use events are duplicates.
|
|
22
|
-
if (event.type === 'assistant' && Array.isArray(event.content)) {
|
|
23
|
-
for (const block of event.content) {
|
|
24
|
-
if (block.type === 'tool_use')
|
|
25
|
-
this.toolCallCount++;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
this.emit('event', event);
|
|
29
|
-
}
|
|
30
|
-
catch {
|
|
31
|
-
this.emit('error', new Error(`Failed to parse stream-json line: ${trimmed.slice(0, 100)}`));
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/** Flush any remaining buffer content (call after stream ends). */
|
|
36
|
-
flush() {
|
|
37
|
-
const trimmed = this.buffer.trim();
|
|
38
|
-
this.buffer = '';
|
|
39
|
-
if (!trimmed)
|
|
40
|
-
return;
|
|
41
|
-
try {
|
|
42
|
-
const event = JSON.parse(trimmed);
|
|
43
|
-
// Count tool_use blocks within assistant events only — the assistant event is
|
|
44
|
-
// the authoritative source. Standalone top-level tool_use events are duplicates.
|
|
45
|
-
if (event.type === 'assistant' && Array.isArray(event.content)) {
|
|
46
|
-
for (const block of event.content) {
|
|
47
|
-
if (block.type === 'tool_use')
|
|
48
|
-
this.toolCallCount++;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
this.emit('event', event);
|
|
52
|
-
}
|
|
53
|
-
catch {
|
|
54
|
-
// Ignore incomplete final line
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
getToolCallCount() {
|
|
58
|
-
return this.toolCallCount;
|
|
59
|
-
}
|
|
60
|
-
reset() {
|
|
61
|
-
this.buffer = '';
|
|
62
|
-
this.toolCallCount = 0;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=stream-parser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stream-parser.js","sourceRoot":"","sources":["../../src/lib/stream-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAQ3C;;;GAGG;AACH,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IACxC,MAAM,GAAG,EAAE,CAAC;IACZ,aAAa,GAAG,CAAC,CAAC;IAE1B,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACtC,8CAA8C;QAC9C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAEhC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO;gBAAE,SAAS;YACvB,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAoB,CAAC;gBACrD,8EAA8E;gBAC9E,iFAAiF;gBACjF,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC/D,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAmC,EAAE,CAAC;wBAC9D,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;4BAAE,IAAI,CAAC,aAAa,EAAE,CAAC;oBACtD,CAAC;gBACH,CAAC;gBACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,CAAC,qCAAqC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9F,CAAC;QACH,CAAC;IACH,CAAC;IAED,mEAAmE;IACnE,KAAK;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAoB,CAAC;YACrD,8EAA8E;YAC9E,iFAAiF;YACjF,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/D,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAmC,EAAE,CAAC;oBAC9D,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;wBAAE,IAAI,CAAC,aAAa,EAAE,CAAC;gBACtD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;IACH,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QACjB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import type { GateSnapshot } from '@kantban/types';
|
|
3
|
-
export interface StuckPattern {
|
|
4
|
-
status: 'progressing' | 'spinning' | 'regressing' | 'blocked';
|
|
5
|
-
evidence: string;
|
|
6
|
-
confidence: number;
|
|
7
|
-
}
|
|
8
|
-
export interface StuckDetectionConfig {
|
|
9
|
-
enabled: boolean;
|
|
10
|
-
firstCheck?: number;
|
|
11
|
-
interval?: number;
|
|
12
|
-
}
|
|
13
|
-
export declare function shouldCheckStuckDetection(config: StuckDetectionConfig, iteration: number): boolean;
|
|
14
|
-
export interface StuckDetectionInput {
|
|
15
|
-
ticketNumber: number;
|
|
16
|
-
ticketTitle: string;
|
|
17
|
-
columnName: string;
|
|
18
|
-
iteration: number;
|
|
19
|
-
maxIterations: number;
|
|
20
|
-
recentComments: Array<{
|
|
21
|
-
author: string;
|
|
22
|
-
body: string;
|
|
23
|
-
}>;
|
|
24
|
-
}
|
|
25
|
-
export declare function composeStuckDetectionPrompt(input: StuckDetectionInput): string;
|
|
26
|
-
declare const StuckDetectionResponseSchema: z.ZodObject<{
|
|
27
|
-
status: z.ZodEnum<["progressing", "spinning", "blocked"]>;
|
|
28
|
-
confidence: z.ZodNumber;
|
|
29
|
-
evidence: z.ZodString;
|
|
30
|
-
}, "strip", z.ZodTypeAny, {
|
|
31
|
-
status: "progressing" | "spinning" | "blocked";
|
|
32
|
-
confidence: number;
|
|
33
|
-
evidence: string;
|
|
34
|
-
}, {
|
|
35
|
-
status: "progressing" | "spinning" | "blocked";
|
|
36
|
-
confidence: number;
|
|
37
|
-
evidence: string;
|
|
38
|
-
}>;
|
|
39
|
-
export type StuckDetectionResult = z.infer<typeof StuckDetectionResponseSchema>;
|
|
40
|
-
export declare function parseStuckDetectionResponse(raw: string): StuckDetectionResult;
|
|
41
|
-
/**
|
|
42
|
-
* Deterministic trajectory classification from gate snapshot history.
|
|
43
|
-
* Replaces the Haiku-based comment classifier.
|
|
44
|
-
*/
|
|
45
|
-
export declare function classifyTrajectory(snapshots: GateSnapshot[]): StuckPattern;
|
|
46
|
-
export {};
|
|
47
|
-
//# sourceMappingURL=stuck-detector.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stuck-detector.d.ts","sourceRoot":"","sources":["../../src/lib/stuck-detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,YAAY,EAAa,MAAM,gBAAgB,CAAC;AAE9D,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,aAAa,GAAG,UAAU,GAAG,YAAY,GAAG,SAAS,CAAC;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAQlG;AAGD,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzD;AAGD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAsB9E;AAED,QAAA,MAAM,4BAA4B;;;;;;;;;;;;EAIhC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAGhF,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAsB7E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,YAAY,CA4C1E"}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { parseJsonFromLlmOutput } from './parse-utils.js';
|
|
3
|
-
export function shouldCheckStuckDetection(config, iteration) {
|
|
4
|
-
if (!config.enabled)
|
|
5
|
-
return false;
|
|
6
|
-
const firstCheck = config.firstCheck ?? 3;
|
|
7
|
-
const interval = config.interval ?? 2;
|
|
8
|
-
if (interval <= 0)
|
|
9
|
-
return iteration === firstCheck;
|
|
10
|
-
if (iteration < firstCheck)
|
|
11
|
-
return false;
|
|
12
|
-
if (iteration === firstCheck)
|
|
13
|
-
return true;
|
|
14
|
-
return (iteration - firstCheck) % interval === 0;
|
|
15
|
-
}
|
|
16
|
-
// Legacy function — kept for pipeline.ts compatibility until orchestrator layer is updated
|
|
17
|
-
export function composeStuckDetectionPrompt(input) {
|
|
18
|
-
const commentLines = input.recentComments.length > 0
|
|
19
|
-
? input.recentComments.map((c) => ` [${c.author}] ${c.body.slice(0, 200)}`).join('\n')
|
|
20
|
-
: ' (no comments)';
|
|
21
|
-
return `You are a pipeline trajectory classifier. Analyze recent agent activity and classify the trajectory.
|
|
22
|
-
|
|
23
|
-
Ticket: #${String(input.ticketNumber)} "${input.ticketTitle}"
|
|
24
|
-
Column: ${input.columnName}
|
|
25
|
-
Iteration: ${String(input.iteration)} of ${String(input.maxIterations)}
|
|
26
|
-
|
|
27
|
-
Recent iteration comments:
|
|
28
|
-
${commentLines}
|
|
29
|
-
|
|
30
|
-
Classify as one of:
|
|
31
|
-
- "progressing" — each iteration makes distinct forward progress (new code, new tests, new fields set)
|
|
32
|
-
- "spinning" — agent is active but repeating similar actions without advancing (same error, same approach retried, output duplicated)
|
|
33
|
-
- "blocked" — agent cannot make progress due to external dependency, missing information, or fundamental task issue
|
|
34
|
-
|
|
35
|
-
Respond with ONLY a JSON object:
|
|
36
|
-
{"status": "progressing|spinning|blocked", "confidence": 0.0-1.0, "evidence": "one sentence"}`;
|
|
37
|
-
}
|
|
38
|
-
const StuckDetectionResponseSchema = z.object({
|
|
39
|
-
status: z.enum(['progressing', 'spinning', 'blocked']),
|
|
40
|
-
confidence: z.number().min(0).max(1),
|
|
41
|
-
evidence: z.string(),
|
|
42
|
-
});
|
|
43
|
-
// Legacy function — kept for pipeline.ts compatibility until orchestrator layer is updated
|
|
44
|
-
export function parseStuckDetectionResponse(raw) {
|
|
45
|
-
let parsed;
|
|
46
|
-
try {
|
|
47
|
-
parsed = parseJsonFromLlmOutput(raw);
|
|
48
|
-
}
|
|
49
|
-
catch (err) {
|
|
50
|
-
throw new Error(`StuckDetectionResponse: ${err instanceof Error ? err.message : String(err)}`);
|
|
51
|
-
}
|
|
52
|
-
// Clamp confidence before validation
|
|
53
|
-
if (parsed && typeof parsed === 'object' && 'confidence' in parsed) {
|
|
54
|
-
const p = parsed;
|
|
55
|
-
if (typeof p.confidence === 'number') {
|
|
56
|
-
p.confidence = Math.min(1, Math.max(0, p.confidence));
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
const result = StuckDetectionResponseSchema.safeParse(parsed);
|
|
60
|
-
if (!result.success) {
|
|
61
|
-
throw new Error(`StuckDetectionResponse: validation failed — ${result.error.message}`);
|
|
62
|
-
}
|
|
63
|
-
return result.data;
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Deterministic trajectory classification from gate snapshot history.
|
|
67
|
-
* Replaces the Haiku-based comment classifier.
|
|
68
|
-
*/
|
|
69
|
-
export function classifyTrajectory(snapshots) {
|
|
70
|
-
if (snapshots.length === 0) {
|
|
71
|
-
return { status: 'progressing', evidence: 'no data', confidence: 0.5 };
|
|
72
|
-
}
|
|
73
|
-
const recent = snapshots.slice(-3);
|
|
74
|
-
const deltas = recent.map((s) => s.delta_from_previous);
|
|
75
|
-
// Filter out first_check — it's not a real signal
|
|
76
|
-
const meaningful = deltas.filter((d) => d !== 'first_check');
|
|
77
|
-
if (meaningful.length === 0) {
|
|
78
|
-
return { status: 'progressing', evidence: 'only initial checks', confidence: 0.5 };
|
|
79
|
-
}
|
|
80
|
-
// All same = spinning
|
|
81
|
-
if (meaningful.every((d) => d === 'same')) {
|
|
82
|
-
return { status: 'spinning', evidence: 'identical gate results', confidence: 1.0 };
|
|
83
|
-
}
|
|
84
|
-
// Monotonic regression
|
|
85
|
-
if (meaningful.every((d) => d === 'regressed' || d === 'same')) {
|
|
86
|
-
return { status: 'regressing', evidence: 'gate results degrading', confidence: 1.0 };
|
|
87
|
-
}
|
|
88
|
-
// Recent improvement takes precedence over oscillation
|
|
89
|
-
if (meaningful.some((d) => d === 'improved')) {
|
|
90
|
-
const lastMeaningful = meaningful[meaningful.length - 1];
|
|
91
|
-
if (lastMeaningful === 'improved') {
|
|
92
|
-
return { status: 'progressing', evidence: 'gate results improving', confidence: 1.0 };
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
// Oscillation: improved AND regressed, but last delta is NOT improved
|
|
96
|
-
if (meaningful.some((d) => d === 'improved') && meaningful.some((d) => d === 'regressed')) {
|
|
97
|
-
return { status: 'spinning', evidence: 'oscillating gate results', confidence: 1.0 };
|
|
98
|
-
}
|
|
99
|
-
// Stale improvement — has improved sometime but no recent progress
|
|
100
|
-
if (meaningful.some((d) => d === 'improved')) {
|
|
101
|
-
return { status: 'spinning', evidence: 'stale improvement — no recent progress', confidence: 0.8 };
|
|
102
|
-
}
|
|
103
|
-
return { status: 'spinning', evidence: 'no improvement detected', confidence: 1.0 };
|
|
104
|
-
}
|
|
105
|
-
//# sourceMappingURL=stuck-detector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stuck-detector.js","sourceRoot":"","sources":["../../src/lib/stuck-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export interface ToolRestrictions {
|
|
2
|
-
/** Value for --tools flag. undefined = all (default), '' = strip all built-in tools */
|
|
3
|
-
tools?: string;
|
|
4
|
-
/** Values for --allowedTools flag */
|
|
5
|
-
allowedTools?: string[];
|
|
6
|
-
/** Values for --disallowedTools flag */
|
|
7
|
-
disallowedTools?: string[];
|
|
8
|
-
/** Whether to include --mcp-config in the invocation */
|
|
9
|
-
includeMcpConfig: boolean;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* Resolve tool restrictions from per-column agent_config fields.
|
|
13
|
-
* No presets — the user directly configures allowed_tools/disallowed_tools/builtin_tools.
|
|
14
|
-
*
|
|
15
|
-
* If none of the three fields are set, returns no restrictions (full tool access).
|
|
16
|
-
* This means agents have ALL tools by default unless the user explicitly restricts them.
|
|
17
|
-
*/
|
|
18
|
-
export declare function resolveToolRestrictions(builtinTools?: string, allowedTools?: string[], disallowedTools?: string[]): ToolRestrictions;
|
|
19
|
-
//# sourceMappingURL=tool-profiles.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-profiles.d.ts","sourceRoot":"","sources":["../../src/lib/tool-profiles.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,uFAAuF;IACvF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,wDAAwD;IACxD,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,YAAY,CAAC,EAAE,MAAM,EACrB,YAAY,CAAC,EAAE,MAAM,EAAE,EACvB,eAAe,CAAC,EAAE,MAAM,EAAE,GACzB,gBAAgB,CAelB"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Resolve tool restrictions from per-column agent_config fields.
|
|
3
|
-
* No presets — the user directly configures allowed_tools/disallowed_tools/builtin_tools.
|
|
4
|
-
*
|
|
5
|
-
* If none of the three fields are set, returns no restrictions (full tool access).
|
|
6
|
-
* This means agents have ALL tools by default unless the user explicitly restricts them.
|
|
7
|
-
*/
|
|
8
|
-
export function resolveToolRestrictions(builtinTools, allowedTools, disallowedTools) {
|
|
9
|
-
const hasRestrictions = builtinTools !== undefined
|
|
10
|
-
|| (allowedTools && allowedTools.length > 0)
|
|
11
|
-
|| (disallowedTools && disallowedTools.length > 0);
|
|
12
|
-
if (!hasRestrictions) {
|
|
13
|
-
return { includeMcpConfig: true };
|
|
14
|
-
}
|
|
15
|
-
return {
|
|
16
|
-
...(builtinTools !== undefined && { tools: builtinTools }),
|
|
17
|
-
...(allowedTools && allowedTools.length > 0 && { allowedTools }),
|
|
18
|
-
...(disallowedTools && disallowedTools.length > 0 && { disallowedTools }),
|
|
19
|
-
includeMcpConfig: true,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=tool-profiles.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-profiles.js","sourceRoot":"","sources":["../../src/lib/tool-profiles.ts"],"names":[],"mappings":"AAWA;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,YAAqB,EACrB,YAAuB,EACvB,eAA0B;IAE1B,MAAM,eAAe,GAAG,YAAY,KAAK,SAAS;WAC7C,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;WACzC,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAErD,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,OAAO;QACL,GAAG,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;QAC1D,GAAG,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,YAAY,EAAE,CAAC;QAChE,GAAG,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC;QACzE,gBAAgB,EAAE,IAAI;KACvB,CAAC;AACJ,CAAC"}
|
package/dist/lib/worktree.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generate a deterministic worktree name from ticket context.
|
|
3
|
-
* Claude CLI's --worktree flag accepts a name (not a path).
|
|
4
|
-
*/
|
|
5
|
-
export declare function generateWorktreeName(ticketNumber: number, columnName: string): string;
|
|
6
|
-
type ExecFn = (cmd: string, args: string[], cb: (err: Error | null, stdout: string, stderr: string) => void) => void;
|
|
7
|
-
/**
|
|
8
|
-
* Remove a git worktree. Fire-and-forget — never throws.
|
|
9
|
-
*/
|
|
10
|
-
export declare function cleanupWorktree(worktreeName: string, exec?: ExecFn): Promise<boolean>;
|
|
11
|
-
export {};
|
|
12
|
-
//# sourceMappingURL=worktree.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAMrF;AAED,KAAK,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC;AAErH;;GAEG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,MAAM,EACpB,IAAI,GAAE,MAA6C,GAClD,OAAO,CAAC,OAAO,CAAC,CAWlB"}
|
package/dist/lib/worktree.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { execFile as defaultExecFile } from 'node:child_process';
|
|
2
|
-
/**
|
|
3
|
-
* Generate a deterministic worktree name from ticket context.
|
|
4
|
-
* Claude CLI's --worktree flag accepts a name (not a path).
|
|
5
|
-
*/
|
|
6
|
-
export function generateWorktreeName(ticketNumber, columnName) {
|
|
7
|
-
const slug = columnName
|
|
8
|
-
.toLowerCase()
|
|
9
|
-
.replace(/[^a-z0-9]+/g, '-')
|
|
10
|
-
.replace(/^-|-$/g, '');
|
|
11
|
-
return `kantban-${ticketNumber}-${slug}`;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Remove a git worktree. Fire-and-forget — never throws.
|
|
15
|
-
*/
|
|
16
|
-
export async function cleanupWorktree(worktreeName, exec = defaultExecFile) {
|
|
17
|
-
return new Promise((resolve) => {
|
|
18
|
-
exec('git', ['worktree', 'remove', '--force', worktreeName], (err) => {
|
|
19
|
-
if (err) {
|
|
20
|
-
console.error(`[worktree] cleanup failed for ${worktreeName}: ${err.message}`);
|
|
21
|
-
resolve(false);
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
resolve(true);
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
});
|
|
28
|
-
}
|
|
29
|
-
//# sourceMappingURL=worktree.js.map
|
package/dist/lib/worktree.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/lib/worktree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAEjE;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAAoB,EAAE,UAAkB;IAC3E,MAAM,IAAI,GAAG,UAAU;SACpB,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzB,OAAO,WAAW,YAAY,IAAI,IAAI,EAAE,CAAC;AAC3C,CAAC;AAID;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,YAAoB,EACpB,OAAe,eAAoC;IAEnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;YACnE,IAAI,GAAG,EAAE,CAAC;gBACR,OAAO,CAAC,KAAK,CAAC,iCAAiC,YAAY,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC/E,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/lib/ws-client.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import type { KantBanCLIClient } from '../client.js';
|
|
2
|
-
export interface WsClientOptions {
|
|
3
|
-
boardId: string;
|
|
4
|
-
projectId: string;
|
|
5
|
-
onEvent: (event: {
|
|
6
|
-
type: string;
|
|
7
|
-
payload: Record<string, unknown>;
|
|
8
|
-
}) => void;
|
|
9
|
-
onConnect: () => void;
|
|
10
|
-
onDisconnect: () => void;
|
|
11
|
-
}
|
|
12
|
-
export declare class PipelineWsClient {
|
|
13
|
-
private ws;
|
|
14
|
-
private client;
|
|
15
|
-
private options;
|
|
16
|
-
private pingTimer;
|
|
17
|
-
private stopped;
|
|
18
|
-
constructor(client: KantBanCLIClient, options: WsClientOptions);
|
|
19
|
-
/** Whether the WebSocket is currently open. */
|
|
20
|
-
get connected(): boolean;
|
|
21
|
-
connect(): Promise<void>;
|
|
22
|
-
/**
|
|
23
|
-
* Attempt to reconnect. Called by the polling fallback on each cycle.
|
|
24
|
-
* Returns true if reconnected, false if it failed (polling continues).
|
|
25
|
-
*/
|
|
26
|
-
tryReconnect(): Promise<boolean>;
|
|
27
|
-
stop(): void;
|
|
28
|
-
send(data: unknown): void;
|
|
29
|
-
private cleanupPing;
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=ws-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ws-client.d.ts","sourceRoot":"","sources":["../../src/lib/ws-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7E,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,eAAe;IAK9D,+CAA+C;IAC/C,IAAI,SAAS,IAAI,OAAO,CAEvB;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+D9B;;;OAGG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAUtC,IAAI,IAAI,IAAI;IASZ,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAMzB,OAAO,CAAC,WAAW;CAMpB"}
|