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.
Files changed (155) hide show
  1. package/dist/chunk-ZCUIGFSP.js +4111 -0
  2. package/dist/chunk-ZCUIGFSP.js.map +1 -0
  3. package/dist/context-7YDNTI3P.js +30 -0
  4. package/dist/context-7YDNTI3P.js.map +1 -0
  5. package/dist/cron-OKQP6QDF.js +112 -0
  6. package/dist/cron-OKQP6QDF.js.map +1 -0
  7. package/dist/index.d.ts +0 -2
  8. package/dist/index.js +179 -44
  9. package/dist/index.js.map +1 -1
  10. package/dist/pipeline-HTGCXNPL.js +4049 -0
  11. package/dist/pipeline-HTGCXNPL.js.map +1 -0
  12. package/dist/pipeline-init-IGZZOOLK.js +103 -0
  13. package/dist/pipeline-init-IGZZOOLK.js.map +1 -0
  14. package/dist/status-4GFXMVIM.js +128 -0
  15. package/dist/status-4GFXMVIM.js.map +1 -0
  16. package/dist/work-2V33NZAT.js +81 -0
  17. package/dist/work-2V33NZAT.js.map +1 -0
  18. package/package.json +5 -4
  19. package/dist/client.d.ts +0 -38
  20. package/dist/client.d.ts.map +0 -1
  21. package/dist/client.js +0 -163
  22. package/dist/client.js.map +0 -1
  23. package/dist/commands/context.d.ts +0 -3
  24. package/dist/commands/context.d.ts.map +0 -1
  25. package/dist/commands/context.js +0 -27
  26. package/dist/commands/context.js.map +0 -1
  27. package/dist/commands/cron.d.ts +0 -3
  28. package/dist/commands/cron.d.ts.map +0 -1
  29. package/dist/commands/cron.js +0 -106
  30. package/dist/commands/cron.js.map +0 -1
  31. package/dist/commands/pipeline-init.d.ts +0 -2
  32. package/dist/commands/pipeline-init.d.ts.map +0 -1
  33. package/dist/commands/pipeline-init.js +0 -100
  34. package/dist/commands/pipeline-init.js.map +0 -1
  35. package/dist/commands/pipeline.d.ts +0 -4
  36. package/dist/commands/pipeline.d.ts.map +0 -1
  37. package/dist/commands/pipeline.js +0 -1222
  38. package/dist/commands/pipeline.js.map +0 -1
  39. package/dist/commands/status.d.ts +0 -3
  40. package/dist/commands/status.d.ts.map +0 -1
  41. package/dist/commands/status.js +0 -135
  42. package/dist/commands/status.js.map +0 -1
  43. package/dist/commands/work.d.ts +0 -3
  44. package/dist/commands/work.d.ts.map +0 -1
  45. package/dist/commands/work.js +0 -76
  46. package/dist/commands/work.js.map +0 -1
  47. package/dist/index.d.ts.map +0 -1
  48. package/dist/lib/advisor.d.ts +0 -108
  49. package/dist/lib/advisor.d.ts.map +0 -1
  50. package/dist/lib/advisor.js +0 -139
  51. package/dist/lib/advisor.js.map +0 -1
  52. package/dist/lib/checkpoint.d.ts +0 -15
  53. package/dist/lib/checkpoint.d.ts.map +0 -1
  54. package/dist/lib/checkpoint.js +0 -49
  55. package/dist/lib/checkpoint.js.map +0 -1
  56. package/dist/lib/constraint-evaluator.d.ts +0 -40
  57. package/dist/lib/constraint-evaluator.d.ts.map +0 -1
  58. package/dist/lib/constraint-evaluator.js +0 -189
  59. package/dist/lib/constraint-evaluator.js.map +0 -1
  60. package/dist/lib/cost-tracker.d.ts +0 -46
  61. package/dist/lib/cost-tracker.d.ts.map +0 -1
  62. package/dist/lib/cost-tracker.js +0 -120
  63. package/dist/lib/cost-tracker.js.map +0 -1
  64. package/dist/lib/evaluator.d.ts +0 -17
  65. package/dist/lib/evaluator.d.ts.map +0 -1
  66. package/dist/lib/evaluator.js +0 -71
  67. package/dist/lib/evaluator.js.map +0 -1
  68. package/dist/lib/event-emitter.d.ts +0 -28
  69. package/dist/lib/event-emitter.d.ts.map +0 -1
  70. package/dist/lib/event-emitter.js +0 -100
  71. package/dist/lib/event-emitter.js.map +0 -1
  72. package/dist/lib/event-queue.d.ts +0 -28
  73. package/dist/lib/event-queue.d.ts.map +0 -1
  74. package/dist/lib/event-queue.js +0 -73
  75. package/dist/lib/event-queue.js.map +0 -1
  76. package/dist/lib/gate-config.d.ts +0 -7
  77. package/dist/lib/gate-config.d.ts.map +0 -1
  78. package/dist/lib/gate-config.js +0 -68
  79. package/dist/lib/gate-config.js.map +0 -1
  80. package/dist/lib/gate-proxy-server.d.ts +0 -16
  81. package/dist/lib/gate-proxy-server.d.ts.map +0 -1
  82. package/dist/lib/gate-proxy-server.js +0 -385
  83. package/dist/lib/gate-proxy-server.js.map +0 -1
  84. package/dist/lib/gate-proxy.d.ts +0 -46
  85. package/dist/lib/gate-proxy.d.ts.map +0 -1
  86. package/dist/lib/gate-proxy.js +0 -104
  87. package/dist/lib/gate-proxy.js.map +0 -1
  88. package/dist/lib/gate-runner.d.ts +0 -13
  89. package/dist/lib/gate-runner.d.ts.map +0 -1
  90. package/dist/lib/gate-runner.js +0 -104
  91. package/dist/lib/gate-runner.js.map +0 -1
  92. package/dist/lib/gate-snapshot.d.ts +0 -12
  93. package/dist/lib/gate-snapshot.d.ts.map +0 -1
  94. package/dist/lib/gate-snapshot.js +0 -49
  95. package/dist/lib/gate-snapshot.js.map +0 -1
  96. package/dist/lib/light-call.d.ts +0 -37
  97. package/dist/lib/light-call.d.ts.map +0 -1
  98. package/dist/lib/light-call.js +0 -62
  99. package/dist/lib/light-call.js.map +0 -1
  100. package/dist/lib/logger.d.ts +0 -22
  101. package/dist/lib/logger.d.ts.map +0 -1
  102. package/dist/lib/logger.js +0 -98
  103. package/dist/lib/logger.js.map +0 -1
  104. package/dist/lib/mcp-config.d.ts +0 -24
  105. package/dist/lib/mcp-config.d.ts.map +0 -1
  106. package/dist/lib/mcp-config.js +0 -115
  107. package/dist/lib/mcp-config.js.map +0 -1
  108. package/dist/lib/orchestrator.d.ts +0 -392
  109. package/dist/lib/orchestrator.d.ts.map +0 -1
  110. package/dist/lib/orchestrator.js +0 -1636
  111. package/dist/lib/orchestrator.js.map +0 -1
  112. package/dist/lib/parse-utils.d.ts +0 -6
  113. package/dist/lib/parse-utils.d.ts.map +0 -1
  114. package/dist/lib/parse-utils.js +0 -64
  115. package/dist/lib/parse-utils.js.map +0 -1
  116. package/dist/lib/prompt-composer.d.ts +0 -131
  117. package/dist/lib/prompt-composer.d.ts.map +0 -1
  118. package/dist/lib/prompt-composer.js +0 -317
  119. package/dist/lib/prompt-composer.js.map +0 -1
  120. package/dist/lib/ralph-loop.d.ts +0 -123
  121. package/dist/lib/ralph-loop.d.ts.map +0 -1
  122. package/dist/lib/ralph-loop.js +0 -383
  123. package/dist/lib/ralph-loop.js.map +0 -1
  124. package/dist/lib/reaper.d.ts +0 -14
  125. package/dist/lib/reaper.d.ts.map +0 -1
  126. package/dist/lib/reaper.js +0 -114
  127. package/dist/lib/reaper.js.map +0 -1
  128. package/dist/lib/replanner.d.ts +0 -49
  129. package/dist/lib/replanner.d.ts.map +0 -1
  130. package/dist/lib/replanner.js +0 -61
  131. package/dist/lib/replanner.js.map +0 -1
  132. package/dist/lib/run-memory.d.ts +0 -37
  133. package/dist/lib/run-memory.d.ts.map +0 -1
  134. package/dist/lib/run-memory.js +0 -115
  135. package/dist/lib/run-memory.js.map +0 -1
  136. package/dist/lib/stream-parser.d.ts +0 -20
  137. package/dist/lib/stream-parser.d.ts.map +0 -1
  138. package/dist/lib/stream-parser.js +0 -65
  139. package/dist/lib/stream-parser.js.map +0 -1
  140. package/dist/lib/stuck-detector.d.ts +0 -47
  141. package/dist/lib/stuck-detector.d.ts.map +0 -1
  142. package/dist/lib/stuck-detector.js +0 -105
  143. package/dist/lib/stuck-detector.js.map +0 -1
  144. package/dist/lib/tool-profiles.d.ts +0 -19
  145. package/dist/lib/tool-profiles.d.ts.map +0 -1
  146. package/dist/lib/tool-profiles.js +0 -22
  147. package/dist/lib/tool-profiles.js.map +0 -1
  148. package/dist/lib/worktree.d.ts +0 -12
  149. package/dist/lib/worktree.d.ts.map +0 -1
  150. package/dist/lib/worktree.js +0 -29
  151. package/dist/lib/worktree.js.map +0 -1
  152. package/dist/lib/ws-client.d.ts +0 -31
  153. package/dist/lib/ws-client.d.ts.map +0 -1
  154. package/dist/lib/ws-client.js +0 -113
  155. 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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"}
@@ -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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"}