kantban-cli 0.1.8 → 0.1.10
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-HTGCXNPL.js +4049 -0
- package/dist/pipeline-HTGCXNPL.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
|
@@ -1,317 +0,0 @@
|
|
|
1
|
-
import { VALID_BRANCH_RE } from './gate-config.js';
|
|
2
|
-
// --- Token budget system ---
|
|
3
|
-
export const PROMPT_BUDGETS = {
|
|
4
|
-
system_preamble: 800,
|
|
5
|
-
gate_results: 500,
|
|
6
|
-
column_prompt: Infinity, // NEVER truncated
|
|
7
|
-
lookahead: 1000,
|
|
8
|
-
run_memory: 1000,
|
|
9
|
-
rejection: 500,
|
|
10
|
-
ticket_details: 1500,
|
|
11
|
-
comments: 2000,
|
|
12
|
-
transition_rules: 500,
|
|
13
|
-
linked_documents: 2000,
|
|
14
|
-
metadata: 200,
|
|
15
|
-
};
|
|
16
|
-
export function estimateTokens(text) {
|
|
17
|
-
return Math.ceil(text.length / 4);
|
|
18
|
-
}
|
|
19
|
-
export function truncateToTokens(text, maxTokens) {
|
|
20
|
-
if (maxTokens === Infinity)
|
|
21
|
-
return text;
|
|
22
|
-
const maxChars = maxTokens * 4;
|
|
23
|
-
if (text.length <= maxChars)
|
|
24
|
-
return text;
|
|
25
|
-
return text.slice(0, maxChars) + '\n[...truncated]';
|
|
26
|
-
}
|
|
27
|
-
export function windowComments(comments, maxTokens) {
|
|
28
|
-
const pinned = comments.filter((c) => c.pinned);
|
|
29
|
-
const unpinned = comments.filter((c) => !c.pinned);
|
|
30
|
-
const recentFull = unpinned.slice(-3);
|
|
31
|
-
const older = unpinned.slice(0, -3);
|
|
32
|
-
const parts = [];
|
|
33
|
-
// Pinned always included in full
|
|
34
|
-
for (const c of pinned) {
|
|
35
|
-
parts.push(`[pinned] **${c.author}** (${c.created_at}):\n${c.body}\n`);
|
|
36
|
-
}
|
|
37
|
-
// Recent 3 in full
|
|
38
|
-
for (const c of recentFull) {
|
|
39
|
-
parts.push(`**${c.author}** (${c.created_at}):\n${c.body}\n`);
|
|
40
|
-
}
|
|
41
|
-
// Older compressed to one line
|
|
42
|
-
for (const c of older) {
|
|
43
|
-
const firstLine = c.body.split('\n')[0]?.slice(0, 100) ?? '';
|
|
44
|
-
parts.push(`- ${c.author}: ${firstLine}`);
|
|
45
|
-
}
|
|
46
|
-
const joined = parts.join('\n');
|
|
47
|
-
return truncateToTokens(joined, maxTokens);
|
|
48
|
-
}
|
|
49
|
-
// --- Prompt composer ---
|
|
50
|
-
export function composePrompt(columnContext, ticketContext, meta) {
|
|
51
|
-
const parts = [];
|
|
52
|
-
if (!columnContext.prompt_document?.content) {
|
|
53
|
-
throw new Error(`Column "${columnContext.column.name}" has no prompt document. ` +
|
|
54
|
-
`Configure a prompt document for this column before running the pipeline.`);
|
|
55
|
-
}
|
|
56
|
-
// --- 1. System preamble (identity, iteration N/M) ---
|
|
57
|
-
const hasUnresolvedBlockers = ticketContext.ticket_links.some((l) => l.direction === 'inward' && l.link_type === 'blocks' && !l.resolved);
|
|
58
|
-
parts.push(`# Pipeline Agent Instructions
|
|
59
|
-
|
|
60
|
-
You are a pipeline automation agent processing ticket #${String(ticketContext.ticket.ticket_number)}: "${ticketContext.ticket.title}".
|
|
61
|
-
|
|
62
|
-
## Your Goal
|
|
63
|
-
Advance this ticket through the pipeline. Your success criteria:
|
|
64
|
-
1. Complete the work described in the ticket and column prompt below
|
|
65
|
-
2. Move the ticket to the next column using \`${ticketContext.tool_prefix}move_ticket\`
|
|
66
|
-
3. Or mark it complete using \`${ticketContext.tool_prefix}complete_task\`
|
|
67
|
-
|
|
68
|
-
## Iteration ${meta.iteration} of ${meta.maxIterations}
|
|
69
|
-
${meta.iteration >= meta.maxIterations - 1 ? '**FINAL ITERATIONS** — prioritize moving the ticket NOW or it will be marked stalled.' : `You have ${meta.maxIterations - meta.iteration} iterations remaining. Make meaningful progress each iteration.`}
|
|
70
|
-
${meta.gutterCount > 0 ? `
|
|
71
|
-
## Progress Warning
|
|
72
|
-
No meaningful progress detected for ${meta.gutterCount} consecutive iteration(s).
|
|
73
|
-
${meta.gutterThreshold - meta.gutterCount} iteration(s) remain before this loop is terminated as stalled.
|
|
74
|
-
|
|
75
|
-
You MUST change approach. What you've been doing is not working. Consider:
|
|
76
|
-
- Breaking the problem into smaller steps
|
|
77
|
-
- Setting a field value to record partial progress
|
|
78
|
-
- Creating a comment explaining what's blocking you
|
|
79
|
-
- Asking for help via a signal
|
|
80
|
-
` : ''}
|
|
81
|
-
## Available Tools (prefix: ${ticketContext.tool_prefix})
|
|
82
|
-
- **${ticketContext.tool_prefix}check_transition** — ALWAYS call this before moving. Returns allowed/blocked with recovery steps.
|
|
83
|
-
Params: \`{ projectId, boardId, ticketId, targetColumnId }\`
|
|
84
|
-
- **${ticketContext.tool_prefix}move_ticket** — Move ticket to a new column. Include handoff data for the next agent.
|
|
85
|
-
Params: \`{ projectId, ticketId, column_id, handoff: { branch?, commit_sha?, build_status?, notes? } }\`
|
|
86
|
-
- **${ticketContext.tool_prefix}complete_task** — Move to a done column with handoff data.
|
|
87
|
-
Params: \`{ projectId, ticketId, handoff: { ... } }\`
|
|
88
|
-
- **${ticketContext.tool_prefix}set_field_value** — Set a required field before moving (check transition rules).
|
|
89
|
-
Params: \`{ projectId, ticketId, fieldId, value }\`
|
|
90
|
-
- **${ticketContext.tool_prefix}create_signal** — Leave knowledge for future agents at any scope.
|
|
91
|
-
- **${ticketContext.tool_prefix}create_comment** — Add progress notes to the ticket.
|
|
92
|
-
- **${ticketContext.tool_prefix}append_run_memory** — Share discoveries with future agents.
|
|
93
|
-
Params: \`{ section: 'conventions'|'interfaces'|'failures'|'decisions', content: string }\`
|
|
94
|
-
|
|
95
|
-
## Iteration Summary
|
|
96
|
-
If you made meaningful progress this iteration, create a comment using \`${ticketContext.tool_prefix}create_comment\` summarizing:
|
|
97
|
-
- What you accomplished
|
|
98
|
-
- What remains to be done
|
|
99
|
-
- Any blockers or issues encountered
|
|
100
|
-
|
|
101
|
-
This comment is your handoff to the next iteration. Without it, the next iteration starts blind.
|
|
102
|
-
|
|
103
|
-
## Critical Rules
|
|
104
|
-
1. **Always call ${ticketContext.tool_prefix}check_transition before ${ticketContext.tool_prefix}move_ticket** — moves that violate workflow rules will fail.
|
|
105
|
-
2. **If the ticket has UNRESOLVED blockers, do not attempt to move it.** Create a comment explaining you are waiting, then stop.
|
|
106
|
-
3. **Include handoff data** when moving — the next agent needs context (branch name, build status, etc.).
|
|
107
|
-
4. **If you cannot make progress**, create a comment explaining why and stop. Do not burn iterations.
|
|
108
|
-
${hasUnresolvedBlockers ? '\n**WARNING: This ticket has UNRESOLVED blockers. Do NOT attempt to move it. Document your status and stop.**\n' : ''}
|
|
109
|
-
---
|
|
110
|
-
`);
|
|
111
|
-
// Worktree context — operational instructions when worktree isolation is active
|
|
112
|
-
const worktreeConfig = columnContext.agent_config?.worktree;
|
|
113
|
-
if (worktreeConfig?.enabled) {
|
|
114
|
-
const integrationBranch = worktreeConfig.integration_branch ?? 'main';
|
|
115
|
-
if (!VALID_BRANCH_RE.test(integrationBranch)) {
|
|
116
|
-
parts.push(`## Git Worktree\n\nYou are working in an isolated git worktree. Integration branch name is invalid — contact the pipeline operator.`);
|
|
117
|
-
}
|
|
118
|
-
else {
|
|
119
|
-
parts.push(`## Git Worktree
|
|
120
|
-
|
|
121
|
-
You are working in an isolated git worktree. Before starting any code changes:
|
|
122
|
-
1. Merge \`${integrationBranch}\` into your current branch: \`git merge '${integrationBranch}'\`
|
|
123
|
-
2. Resolve any merge conflicts before proceeding with ticket work
|
|
124
|
-
3. Never rebase — always merge (rebase destroys traceability across the pipeline)
|
|
125
|
-
|
|
126
|
-
After completing your work, commit all changes to your worktree branch.
|
|
127
|
-
`);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
// --- 2. Signals (guardrails — at the top) ---
|
|
131
|
-
if (ticketContext.signals.length > 0) {
|
|
132
|
-
parts.push(`\n## Signals (Guardrails)\n`);
|
|
133
|
-
for (const s of ticketContext.signals) {
|
|
134
|
-
parts.push(`- ${s}`);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
// --- 3. Previous gate results (what failed) ---
|
|
138
|
-
if (meta.gateResults && meta.gateResults.length > 0) {
|
|
139
|
-
parts.push(`\n## Previous Gate Results\n`);
|
|
140
|
-
for (const r of meta.gateResults) {
|
|
141
|
-
const status = r.passed ? 'PASS' : 'FAIL';
|
|
142
|
-
const req = r.required ? '(required)' : '(advisory)';
|
|
143
|
-
parts.push(`- **${r.name}** ${status} ${req} [${String(r.duration_ms)}ms]`);
|
|
144
|
-
if (!r.passed && r.output) {
|
|
145
|
-
parts.push(` \`\`\`\n ${truncateToTokens(r.output, 200)}\n \`\`\``);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
// --- 4. Rejection elevation ---
|
|
150
|
-
// Prefer meta.rejectionFindings, fall back to comment-based detection for backward compat
|
|
151
|
-
if (meta.rejectionFindings) {
|
|
152
|
-
parts.push(`\n## Previous Rejection (fix these before resubmitting)\n`);
|
|
153
|
-
parts.push(truncateToTokens(meta.rejectionFindings, PROMPT_BUDGETS.rejection));
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
const rejectionComment = ticketContext.comments
|
|
157
|
-
.slice()
|
|
158
|
-
.reverse()
|
|
159
|
-
.find((c) => c.body.startsWith('QA REJECTION:') || c.body.startsWith('REJECTION:'));
|
|
160
|
-
if (rejectionComment) {
|
|
161
|
-
parts.push(`\n## Previous Rejection (fix these before resubmitting)\n`);
|
|
162
|
-
parts.push(truncateToTokens(rejectionComment.body, PROMPT_BUDGETS.rejection));
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
// --- 5. Column prompt document (NEVER truncated) ---
|
|
166
|
-
if (columnContext.prompt_document?.content) {
|
|
167
|
-
parts.push(columnContext.prompt_document.content);
|
|
168
|
-
}
|
|
169
|
-
// --- 6. Lookahead — downstream column criteria ---
|
|
170
|
-
if (meta.lookaheadDocument?.content) {
|
|
171
|
-
parts.push(`\n## Downstream Criteria (build to pass these)\n`);
|
|
172
|
-
parts.push(`*From: ${meta.lookaheadDocument.title}*\n`);
|
|
173
|
-
parts.push(truncateToTokens(meta.lookaheadDocument.content, PROMPT_BUDGETS.lookahead));
|
|
174
|
-
}
|
|
175
|
-
// --- 7. Run memory — cross-agent knowledge ---
|
|
176
|
-
if (meta.runMemoryContent) {
|
|
177
|
-
parts.push(`\n## Run Memory\n`);
|
|
178
|
-
parts.push(truncateToTokens(meta.runMemoryContent, PROMPT_BUDGETS.run_memory));
|
|
179
|
-
parts.push(`\nYou can contribute to run memory using ${ticketContext.tool_prefix}append_run_memory.`);
|
|
180
|
-
}
|
|
181
|
-
// --- 8. Ticket details ---
|
|
182
|
-
parts.push(`## Current Ticket\n`);
|
|
183
|
-
parts.push(`**Title:** ${ticketContext.ticket.title}`);
|
|
184
|
-
parts.push(`**Ticket ID:** ${ticketContext.ticket.id}`);
|
|
185
|
-
parts.push(`**Ticket Number:** ${String(ticketContext.ticket.ticket_number)}`);
|
|
186
|
-
if (ticketContext.ticket.description) {
|
|
187
|
-
parts.push(`\n${truncateToTokens(ticketContext.ticket.description, PROMPT_BUDGETS.ticket_details)}`);
|
|
188
|
-
}
|
|
189
|
-
// Assignee and column position
|
|
190
|
-
if (ticketContext.ticket.assignee) {
|
|
191
|
-
parts.push(`**Assignee:** ${ticketContext.ticket.assignee.name}`);
|
|
192
|
-
}
|
|
193
|
-
if (ticketContext.ticket.column) {
|
|
194
|
-
parts.push(`**Current Column:** ${ticketContext.ticket.column.name} (${ticketContext.ticket.column.type})`);
|
|
195
|
-
}
|
|
196
|
-
if (ticketContext.ticket.backward_transitions > 0) {
|
|
197
|
-
parts.push(`**Backward Transitions:** ${String(ticketContext.ticket.backward_transitions)}`);
|
|
198
|
-
}
|
|
199
|
-
// Field values
|
|
200
|
-
if (ticketContext.field_values.length > 0) {
|
|
201
|
-
parts.push(`\n## Field Values\n`);
|
|
202
|
-
for (const fv of ticketContext.field_values) {
|
|
203
|
-
parts.push(`- **${fv.field_name}:** ${fv.value !== null ? JSON.stringify(fv.value) : '(not set)'}`);
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
// Parent/children
|
|
207
|
-
if (ticketContext.parent) {
|
|
208
|
-
parts.push(`\n## Parent Ticket\n`);
|
|
209
|
-
parts.push(`- #${String(ticketContext.parent.ticket_number)}: ${ticketContext.parent.title}`);
|
|
210
|
-
}
|
|
211
|
-
if (ticketContext.children.length > 0) {
|
|
212
|
-
parts.push(`\n## Child Tickets\n`);
|
|
213
|
-
for (const child of ticketContext.children) {
|
|
214
|
-
parts.push(`- #${String(child.ticket_number)}: ${child.title}${child.column_name ? ` (${child.column_name})` : ''}`);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
// Transition history (handoff chain)
|
|
218
|
-
if (ticketContext.transitions.length > 0) {
|
|
219
|
-
parts.push(`\n## Transition History\n`);
|
|
220
|
-
let transitionTokens = 0;
|
|
221
|
-
const TRANSITION_BUDGET = 1000;
|
|
222
|
-
for (const t of ticketContext.transitions) {
|
|
223
|
-
let line = `- ${t.from ?? 'Backlog'} → ${t.to}`;
|
|
224
|
-
if (t.handoff)
|
|
225
|
-
line += ` (handoff: ${JSON.stringify(t.handoff)})`;
|
|
226
|
-
const lineTokens = estimateTokens(line);
|
|
227
|
-
if (transitionTokens + lineTokens > TRANSITION_BUDGET) {
|
|
228
|
-
parts.push(`- [...truncated — ${String(ticketContext.transitions.length)} total transitions]`);
|
|
229
|
-
break;
|
|
230
|
-
}
|
|
231
|
-
parts.push(line);
|
|
232
|
-
transitionTokens += lineTokens;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
// Ticket links
|
|
236
|
-
if (ticketContext.ticket_links.length > 0) {
|
|
237
|
-
parts.push(`\n## Ticket Links\n`);
|
|
238
|
-
const blockers = ticketContext.ticket_links.filter(l => l.direction === 'inward' && l.link_type === 'blocks');
|
|
239
|
-
const blocking = ticketContext.ticket_links.filter(l => l.direction === 'outward' && l.link_type === 'blocks');
|
|
240
|
-
const related = ticketContext.ticket_links.filter(l => l.link_type === 'relates_to');
|
|
241
|
-
if (blockers.length > 0) {
|
|
242
|
-
parts.push(`**Blocked by:**`);
|
|
243
|
-
for (const l of blockers) {
|
|
244
|
-
const status = l.resolved ? '(resolved)' : 'UNRESOLVED';
|
|
245
|
-
parts.push(`- #${String(l.ticket_number)}: ${l.title} [${l.column_name ?? 'backlog'}] ${status}`);
|
|
246
|
-
}
|
|
247
|
-
}
|
|
248
|
-
if (blocking.length > 0) {
|
|
249
|
-
parts.push(`**Blocks:**`);
|
|
250
|
-
for (const l of blocking) {
|
|
251
|
-
parts.push(`- #${String(l.ticket_number)}: ${l.title} [${l.column_name ?? 'backlog'}]`);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
if (related.length > 0) {
|
|
255
|
-
parts.push(`**Related:**`);
|
|
256
|
-
for (const l of related) {
|
|
257
|
-
parts.push(`- #${String(l.ticket_number)}: ${l.title}`);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
// --- 9. Comments (windowed) ---
|
|
262
|
-
if (ticketContext.comments.length > 0) {
|
|
263
|
-
parts.push(`\n## Comments\n`);
|
|
264
|
-
parts.push(windowComments(ticketContext.comments, PROMPT_BUDGETS.comments));
|
|
265
|
-
}
|
|
266
|
-
// --- 10. Transition rules ---
|
|
267
|
-
if (ticketContext.transition_rules) {
|
|
268
|
-
parts.push(`\n## Transition Rules\n`);
|
|
269
|
-
parts.push(truncateToTokens(ticketContext.transition_rules, PROMPT_BUDGETS.transition_rules));
|
|
270
|
-
}
|
|
271
|
-
// Dependency requirements
|
|
272
|
-
if (ticketContext.dependency_requirements && ticketContext.dependency_requirements !== 'No dependency or field requirements configured.') {
|
|
273
|
-
parts.push(`\n## Dependency & Field Requirements\n`);
|
|
274
|
-
parts.push(ticketContext.dependency_requirements);
|
|
275
|
-
}
|
|
276
|
-
// --- 11. Linked documents (truncated to budget) ---
|
|
277
|
-
if (ticketContext.linked_documents.length > 0) {
|
|
278
|
-
parts.push(`\n## Linked Documents\n`);
|
|
279
|
-
let remainingTokens = PROMPT_BUDGETS.linked_documents;
|
|
280
|
-
for (const doc of ticketContext.linked_documents) {
|
|
281
|
-
if (doc.content) {
|
|
282
|
-
const docHeader = `### ${doc.title}\n`;
|
|
283
|
-
const headerTokens = estimateTokens(docHeader);
|
|
284
|
-
const contentTokens = estimateTokens(doc.content);
|
|
285
|
-
if (headerTokens + contentTokens <= remainingTokens) {
|
|
286
|
-
parts.push(docHeader);
|
|
287
|
-
parts.push(doc.content);
|
|
288
|
-
remainingTokens -= headerTokens + contentTokens;
|
|
289
|
-
}
|
|
290
|
-
else if (remainingTokens > headerTokens + 50) {
|
|
291
|
-
// Truncate the document content to fit remaining budget
|
|
292
|
-
parts.push(docHeader);
|
|
293
|
-
parts.push(truncateToTokens(doc.content, remainingTokens - headerTokens));
|
|
294
|
-
remainingTokens = 0;
|
|
295
|
-
}
|
|
296
|
-
else {
|
|
297
|
-
parts.push(`- ${doc.title} (truncated — token budget exceeded)`);
|
|
298
|
-
remainingTokens = 0;
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
else if (doc.truncated) {
|
|
302
|
-
parts.push(`- ${doc.title} (document too large — read via kantban_get_document)`);
|
|
303
|
-
}
|
|
304
|
-
if (remainingTokens <= 0)
|
|
305
|
-
break;
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
// --- 12. Metadata ---
|
|
309
|
-
parts.push(`\n## Pipeline Metadata\n`);
|
|
310
|
-
parts.push(`- Iteration: ${meta.iteration} / ${meta.maxIterations}`);
|
|
311
|
-
parts.push(`- Project ID: ${meta.projectId}`);
|
|
312
|
-
parts.push(`- Tool Prefix: ${ticketContext.tool_prefix}`);
|
|
313
|
-
parts.push(`- Column: ${columnContext.column.name}`);
|
|
314
|
-
parts.push(`- Goal: ${columnContext.column.goal ?? 'No goal set'}`);
|
|
315
|
-
return parts.join('\n');
|
|
316
|
-
}
|
|
317
|
-
//# sourceMappingURL=prompt-composer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-composer.js","sourceRoot":"","sources":["../../src/lib/prompt-composer.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/ralph-loop.d.ts
DELETED
|
@@ -1,123 +0,0 @@
|
|
|
1
|
-
import { type ColumnContext, type TicketContext } from './prompt-composer.js';
|
|
2
|
-
import type { TicketFingerprint, GateSnapshot } from '@kantban/types';
|
|
3
|
-
import type { LoopCheckpoint } from './checkpoint.js';
|
|
4
|
-
import { type StuckDetectionConfig, type StuckDetectionInput, type StuckDetectionResult } from './stuck-detector.js';
|
|
5
|
-
import type { StreamJsonEvent } from './stream-parser.js';
|
|
6
|
-
export interface LoopConfig {
|
|
7
|
-
maxIterations: number;
|
|
8
|
-
gutterThreshold: number;
|
|
9
|
-
model?: string;
|
|
10
|
-
maxBudgetUsd?: number | null;
|
|
11
|
-
worktreeName?: string;
|
|
12
|
-
postMoveRetryDelayMs?: number;
|
|
13
|
-
lookaheadColumnId?: string;
|
|
14
|
-
runId?: string;
|
|
15
|
-
startIteration?: number;
|
|
16
|
-
startGutterCount?: number;
|
|
17
|
-
onCheckpoint?: (ticketId: string, checkpoint: LoopCheckpoint) => Promise<void>;
|
|
18
|
-
startFingerprint?: TicketFingerprint;
|
|
19
|
-
stuckDetection?: StuckDetectionConfig;
|
|
20
|
-
invokeStuckDetection?: (input: StuckDetectionInput) => Promise<StuckDetectionResult>;
|
|
21
|
-
/** Run gates after each iteration and record snapshot. Returns GateSnapshot. */
|
|
22
|
-
onPostIterationGates?: (ticketId: string, iteration: number) => Promise<GateSnapshot>;
|
|
23
|
-
/** Resolved tool restrictions from profile */
|
|
24
|
-
toolRestrictions?: {
|
|
25
|
-
tools?: string;
|
|
26
|
-
allowedTools?: string[];
|
|
27
|
-
disallowedTools?: string[];
|
|
28
|
-
includeMcpConfig?: boolean;
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
export interface LoopResult {
|
|
32
|
-
reason: 'moved' | 'max_iterations' | 'stalled' | 'stopped' | 'error' | 'deleted';
|
|
33
|
-
iterations: number;
|
|
34
|
-
gutterCount: number;
|
|
35
|
-
lastError?: string;
|
|
36
|
-
model?: string;
|
|
37
|
-
/** Final gate snapshot (if gates enabled) */
|
|
38
|
-
finalGateSnapshot?: GateSnapshot;
|
|
39
|
-
/** Final output from the loop (used by evaluator columns for verdict parsing) */
|
|
40
|
-
output?: string;
|
|
41
|
-
/** Cumulative tokens consumed (input) across all iterations */
|
|
42
|
-
tokensIn?: number;
|
|
43
|
-
/** Cumulative tokens consumed (output) across all iterations */
|
|
44
|
-
tokensOut?: number;
|
|
45
|
-
/** Cumulative tool calls across all iterations */
|
|
46
|
-
toolCallCount?: number;
|
|
47
|
-
/** Total wall-clock duration in ms across all iterations */
|
|
48
|
-
durationMs?: number;
|
|
49
|
-
}
|
|
50
|
-
export interface RalphLoopDeps {
|
|
51
|
-
fetchTicketContext: (ticketId: string) => Promise<TicketContext>;
|
|
52
|
-
fetchColumnContext: (columnId: string) => Promise<ColumnContext>;
|
|
53
|
-
fetchFingerprint: (ticketId: string) => Promise<TicketFingerprint>;
|
|
54
|
-
invokeClaudeP: (prompt: string, options: ClaudeInvokeOptions) => Promise<{
|
|
55
|
-
exitCode: number;
|
|
56
|
-
output: string;
|
|
57
|
-
toolCallCount: number;
|
|
58
|
-
tokensIn: number;
|
|
59
|
-
tokensOut: number;
|
|
60
|
-
}>;
|
|
61
|
-
mcpConfigPath: string;
|
|
62
|
-
projectId: string;
|
|
63
|
-
log?: (message: string) => void;
|
|
64
|
-
/** Fetch run memory content. Returns '' if not available. */
|
|
65
|
-
fetchRunMemoryContent?: (() => Promise<string>) | undefined;
|
|
66
|
-
/** Fetch the lookahead document for QA-forward prompting. */
|
|
67
|
-
fetchLookaheadDocument?: (() => Promise<{
|
|
68
|
-
title: string;
|
|
69
|
-
content: string;
|
|
70
|
-
} | undefined>) | undefined;
|
|
71
|
-
/** Forward each stream-json event (for live pipeline streaming to browser) */
|
|
72
|
-
onStreamEvent?: ((event: StreamJsonEvent, context: {
|
|
73
|
-
runId: string;
|
|
74
|
-
ticketId: string;
|
|
75
|
-
columnId: string;
|
|
76
|
-
}) => void) | undefined;
|
|
77
|
-
/** Emitted before each Claude invocation */
|
|
78
|
-
onSessionStart?: ((meta: {
|
|
79
|
-
runId: string;
|
|
80
|
-
model: string;
|
|
81
|
-
iteration: number;
|
|
82
|
-
}) => void) | undefined;
|
|
83
|
-
/** Emitted after each Claude invocation completes */
|
|
84
|
-
onSessionEnd?: ((meta: {
|
|
85
|
-
runId: string;
|
|
86
|
-
exitCode: number;
|
|
87
|
-
tokensIn: number;
|
|
88
|
-
tokensOut: number;
|
|
89
|
-
toolCallCount: number;
|
|
90
|
-
durationMs: number;
|
|
91
|
-
}) => void) | undefined;
|
|
92
|
-
}
|
|
93
|
-
export interface ClaudeInvokeOptions {
|
|
94
|
-
mcpConfigPath: string;
|
|
95
|
-
model?: string | undefined;
|
|
96
|
-
maxBudgetUsd?: number | null | undefined;
|
|
97
|
-
worktree?: string | undefined;
|
|
98
|
-
maxTurns?: number | undefined;
|
|
99
|
-
/** Value for --tools flag. undefined = use defaults, '' = strip all */
|
|
100
|
-
tools?: string | undefined;
|
|
101
|
-
/** Values for --allowedTools flag */
|
|
102
|
-
allowedTools?: string[] | undefined;
|
|
103
|
-
/** Values for --disallowedTools flag */
|
|
104
|
-
disallowedTools?: string[] | undefined;
|
|
105
|
-
/** If false, omit --mcp-config from args */
|
|
106
|
-
includeMcpConfig?: boolean | undefined;
|
|
107
|
-
/** Callback for each stream-json event (for pipeline streaming) */
|
|
108
|
-
onStreamEvent?: ((event: StreamJsonEvent) => void) | undefined;
|
|
109
|
-
}
|
|
110
|
-
export declare class RalphLoop {
|
|
111
|
-
private ticketId;
|
|
112
|
-
private columnId;
|
|
113
|
-
private config;
|
|
114
|
-
private deps;
|
|
115
|
-
private stopped;
|
|
116
|
-
private currentIteration;
|
|
117
|
-
constructor(ticketId: string, columnId: string, config: LoopConfig, deps: RalphLoopDeps);
|
|
118
|
-
stop(): void;
|
|
119
|
-
get iteration(): number;
|
|
120
|
-
private looksLike404;
|
|
121
|
-
run(): Promise<LoopResult>;
|
|
122
|
-
}
|
|
123
|
-
//# sourceMappingURL=ralph-loop.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ralph-loop.d.ts","sourceRoot":"","sources":["../../src/lib/ralph-loop.ts"],"names":[],"mappings":"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"}
|