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,49 +0,0 @@
1
- import { LoopCheckpointSchema } from '@kantban/types';
2
- export const CHECKPOINT_FIELD = 'loop_checkpoint';
3
- /** Default stale threshold in minutes. 600 minutes = 10 hours. */
4
- const DEFAULT_STALE_THRESHOLD_MINUTES = 600;
5
- export async function writeCheckpoint(deps, ticketId, checkpoint) {
6
- try {
7
- await deps.setFieldValue(ticketId, CHECKPOINT_FIELD, checkpoint);
8
- }
9
- catch (err) {
10
- // Fire-and-forget: checkpoint writes must never block the loop
11
- const msg = err instanceof Error ? err.message : String(err);
12
- console.warn(`[checkpoint] writeCheckpoint failed for ${ticketId}: ${msg}`);
13
- deps.emitEvent?.('checkpoint_write_failed', `Checkpoint write failed: ${msg}`, ticketId);
14
- }
15
- }
16
- export async function readCheckpoint(deps, ticketId, currentColumnId, staleMinutes) {
17
- try {
18
- const fields = await deps.getFieldValues(ticketId);
19
- const entry = fields.find((f) => f.field_name === CHECKPOINT_FIELD);
20
- if (!entry)
21
- return null;
22
- const parsed = LoopCheckpointSchema.safeParse(entry.value);
23
- if (!parsed.success)
24
- return null;
25
- const checkpoint = parsed.data;
26
- if (checkpoint.column_id !== currentColumnId)
27
- return null;
28
- const threshold = Math.max(staleMinutes ?? DEFAULT_STALE_THRESHOLD_MINUTES, 1);
29
- const updatedAt = new Date(checkpoint.updated_at).getTime();
30
- const ageMinutes = (Date.now() - updatedAt) / (1000 * 60);
31
- if (ageMinutes > threshold)
32
- return null;
33
- return checkpoint;
34
- }
35
- catch (err) {
36
- console.warn(`[checkpoint] readCheckpoint failed for ${ticketId}: ${err instanceof Error ? err.message : String(err)}`);
37
- return null;
38
- }
39
- }
40
- export async function clearCheckpoint(deps, ticketId) {
41
- try {
42
- await deps.setFieldValue(ticketId, CHECKPOINT_FIELD, null);
43
- }
44
- catch (err) {
45
- // Fire-and-forget: checkpoint clears must never block the loop
46
- console.warn(`[checkpoint] clearCheckpoint failed for ${ticketId}: ${err instanceof Error ? err.message : String(err)}`);
47
- }
48
- }
49
- //# sourceMappingURL=checkpoint.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"checkpoint.js","sourceRoot":"","sources":["../../src/lib/checkpoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAuB,MAAM,gBAAgB,CAAC;AAG3E,MAAM,CAAC,MAAM,gBAAgB,GAAG,iBAAiB,CAAC;AAClD,kEAAkE;AAClE,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAQ5C,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAoB,EACpB,QAAgB,EAChB,UAA0B;IAE1B,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,+DAA+D;QAC/D,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,IAAI,CAAC,2CAA2C,QAAQ,KAAK,GAAG,EAAE,CAAC,CAAC;QAC5E,IAAI,CAAC,SAAS,EAAE,CAAC,yBAAyB,EAAE,4BAA4B,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAoB,EACpB,QAAgB,EAChB,eAAuB,EACvB,YAAqB;IAErB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,gBAAgB,CAAC,CAAC;QACpE,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QAExB,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAEjC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;QAE/B,IAAI,UAAU,CAAC,SAAS,KAAK,eAAe;YAAE,OAAO,IAAI,CAAC;QAE1D,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,+BAA+B,EAAE,CAAC,CAAC,CAAC;QAC/E,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;QAC5D,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;QAC1D,IAAI,UAAU,GAAG,SAAS;YAAE,OAAO,IAAI,CAAC;QAExC,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,0CAA0C,QAAQ,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxH,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAoB,EACpB,QAAgB;IAEhB,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,+DAA+D;QAC/D,OAAO,CAAC,IAAI,CAAC,2CAA2C,QAAQ,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC3H,CAAC;AACH,CAAC"}
@@ -1,40 +0,0 @@
1
- /**
2
- * Pure firing constraint evaluator for the pipeline orchestrator.
3
- *
4
- * Ported from apps/api/src/services/firing-constraints.service.ts with
5
- * orchestrator-specific enhancements:
6
- * - `last_fired_at` resolved from in-memory Map (seconds since last fire)
7
- * - `active_loops` resolved from orchestrator runtime state
8
- *
9
- * This module has ZERO side-effects and ZERO external dependencies beyond
10
- * @kantban/types. All data flows in via the BoardState parameter.
11
- */
12
- import type { FiringConstraint, EvaluateFiringConstraintResult } from '@kantban/types';
13
- export interface ColumnState {
14
- id: string;
15
- name: string;
16
- position: number;
17
- column_type: string;
18
- wip_limit: number | null;
19
- ticket_count: number;
20
- }
21
- export interface BoardState {
22
- columns: ColumnState[];
23
- active_loops: Map<string, number>;
24
- /** Seconds since last fire per column. Missing key = never fired. */
25
- last_fired_at: Map<string, number>;
26
- circuit_breaker_count: number;
27
- backlog_ticket_count: number;
28
- }
29
- export interface EvalSummary {
30
- total: number;
31
- passed: number;
32
- failed: number;
33
- errors: number;
34
- }
35
- export interface EvalResult {
36
- results: EvaluateFiringConstraintResult[];
37
- summary: EvalSummary;
38
- }
39
- export declare function evaluateConstraints(constraints: FiringConstraint[], board: BoardState, columnId: string, now?: Date): EvalResult;
40
- //# sourceMappingURL=constraint-evaluator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraint-evaluator.d.ts","sourceRoot":"","sources":["../../src/lib/constraint-evaluator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,8BAA8B,EAC/B,MAAM,gBAAgB,CAAC;AAIxB,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,qEAAqE;IACrE,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,oBAAoB,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,8BAA8B,EAAE,CAAC;IAC1C,OAAO,EAAE,WAAW,CAAC;CACtB;AAoED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,gBAAgB,EAAE,EAC/B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,IAAI,GACT,UAAU,CA4IZ"}
@@ -1,189 +0,0 @@
1
- /**
2
- * Pure firing constraint evaluator for the pipeline orchestrator.
3
- *
4
- * Ported from apps/api/src/services/firing-constraints.service.ts with
5
- * orchestrator-specific enhancements:
6
- * - `last_fired_at` resolved from in-memory Map (seconds since last fire)
7
- * - `active_loops` resolved from orchestrator runtime state
8
- *
9
- * This module has ZERO side-effects and ZERO external dependencies beyond
10
- * @kantban/types. All data flows in via the BoardState parameter.
11
- */
12
- // ── Column Ref Resolution ────────────────────────────────────────────────────
13
- function resolveColumn(board, columnId, subjectRef) {
14
- const ref = subjectRef ?? 'self';
15
- if (ref === 'self' || ref === null) {
16
- const col = board.columns.find((c) => c.id === columnId) ?? null;
17
- return { column: col, error: col ? null : `Column ${columnId} not found` };
18
- }
19
- if (ref === 'next') {
20
- const sorted = [...board.columns].sort((a, b) => a.position - b.position);
21
- const idx = sorted.findIndex((c) => c.id === columnId);
22
- const next = idx >= 0 && idx < sorted.length - 1 ? sorted[idx + 1] : null;
23
- return { column: next, error: next ? null : 'No next column exists' };
24
- }
25
- if (ref === 'prev') {
26
- const sorted = [...board.columns].sort((a, b) => a.position - b.position);
27
- const idx = sorted.findIndex((c) => c.id === columnId);
28
- const prev = idx > 0 ? sorted[idx - 1] : null;
29
- return { column: prev, error: prev ? null : 'No prev column exists' };
30
- }
31
- // UUID reference
32
- const col = board.columns.find((c) => c.id === ref) ?? null;
33
- return { column: col, error: col ? null : `Column ${ref} not found` };
34
- }
35
- // ── Operator Evaluation ──────────────────────────────────────────────────────
36
- function applyOperator(resolved, operator, threshold) {
37
- // For eq/neq: try numeric comparison when both sides are valid numbers
38
- // (DB may store numbers as strings e.g. resolved=3 vs threshold="3")
39
- if (operator === 'eq' || operator === 'neq') {
40
- const rn = Number(resolved);
41
- const tn = Number(threshold);
42
- const bothNumeric = !isNaN(rn) && !isNaN(tn) && resolved !== '' && threshold !== '';
43
- const equal = bothNumeric ? rn === tn : resolved === threshold;
44
- return operator === 'eq' ? equal : !equal;
45
- }
46
- // For ordering operators, coerce to number
47
- const r = Number(resolved);
48
- const t = Number(threshold);
49
- if (isNaN(r) || isNaN(t))
50
- return false;
51
- switch (operator) {
52
- case 'lt': return r < t;
53
- case 'lte': return r <= t;
54
- case 'gt': return r > t;
55
- case 'gte': return r >= t;
56
- default: return false;
57
- }
58
- }
59
- // ── Pure Evaluation Engine ───────────────────────────────────────────────────
60
- export function evaluateConstraints(constraints, board, columnId, now) {
61
- // Filter to enabled column-scope only, sort by position ascending
62
- const enabled = constraints
63
- .filter((c) => c.enabled && c.scope === 'column')
64
- .sort((a, b) => a.position - b.position);
65
- const results = [];
66
- const summary = { total: 0, passed: 0, failed: 0, errors: 0 };
67
- for (const constraint of enabled) {
68
- summary.total++;
69
- let resolvedValue = null;
70
- let resolveError = null;
71
- const subjectType = constraint.subject_type;
72
- const subjectRef = constraint.subject_ref;
73
- switch (subjectType) {
74
- case 'column.ticket_count': {
75
- const { column, error } = resolveColumn(board, columnId, subjectRef);
76
- if (error || !column) {
77
- resolveError = error ?? 'Column resolution failed';
78
- }
79
- else {
80
- resolvedValue = column.ticket_count;
81
- }
82
- break;
83
- }
84
- case 'column.active_loops': {
85
- const { column, error } = resolveColumn(board, columnId, subjectRef);
86
- if (error || !column) {
87
- resolveError = error ?? 'Column resolution failed';
88
- }
89
- else {
90
- resolvedValue = board.active_loops.get(column.id) ?? 0;
91
- }
92
- break;
93
- }
94
- case 'column.wip_remaining': {
95
- const { column, error } = resolveColumn(board, columnId, subjectRef);
96
- if (error || !column) {
97
- resolveError = error ?? 'Column resolution failed';
98
- }
99
- else {
100
- resolvedValue = column.wip_limit === null ? 999999 : column.wip_limit - column.ticket_count;
101
- }
102
- break;
103
- }
104
- case 'column.last_fired_at': {
105
- const { column, error } = resolveColumn(board, columnId, subjectRef);
106
- if (error || !column) {
107
- resolveError = error ?? 'Column resolution failed';
108
- }
109
- else {
110
- // Seconds since last fire. If never fired, treat as Infinity (999999).
111
- const secondsSinceLastFire = board.last_fired_at.get(column.id);
112
- resolvedValue = secondsSinceLastFire ?? 999999;
113
- }
114
- break;
115
- }
116
- case 'board.total_active_loops': {
117
- let total = 0;
118
- for (const v of board.active_loops.values()) {
119
- total += v;
120
- }
121
- resolvedValue = total;
122
- break;
123
- }
124
- case 'board.circuit_breaker_count': {
125
- resolvedValue = board.circuit_breaker_count;
126
- break;
127
- }
128
- case 'backlog.ticket_count': {
129
- resolvedValue = board.backlog_ticket_count;
130
- break;
131
- }
132
- case 'ticket.field_value': {
133
- resolveError = 'ticket.field_value requires ticket context (ticket-scope only)';
134
- resolvedValue = null;
135
- break;
136
- }
137
- case 'time.hour': {
138
- const date = now ?? new Date();
139
- resolvedValue = date.getUTCHours();
140
- break;
141
- }
142
- default: {
143
- resolveError = `Unknown subject type: ${subjectType}`;
144
- break;
145
- }
146
- }
147
- // Fail-closed by default, unless fail_open explicitly set
148
- if (resolveError !== null) {
149
- summary.errors++;
150
- const failOpen = constraint.fail_open === true;
151
- const passed = failOpen;
152
- results.push({
153
- constraint_id: constraint.id,
154
- name: constraint.name,
155
- column_id: constraint.column_id,
156
- passed,
157
- resolved_value: null,
158
- threshold: { operator: constraint.operator, value: constraint.value },
159
- error: failOpen
160
- ? `Unresolvable (fail_open=true): ${resolveError}`
161
- : `Unresolvable (fail-closed): ${resolveError}`,
162
- });
163
- if (passed) {
164
- summary.passed++;
165
- }
166
- else {
167
- summary.failed++;
168
- }
169
- continue;
170
- }
171
- const passed = applyOperator(resolvedValue, constraint.operator, constraint.value);
172
- results.push({
173
- constraint_id: constraint.id,
174
- name: constraint.name,
175
- column_id: constraint.column_id,
176
- passed,
177
- resolved_value: resolvedValue,
178
- threshold: { operator: constraint.operator, value: constraint.value },
179
- });
180
- if (passed) {
181
- summary.passed++;
182
- }
183
- else {
184
- summary.failed++;
185
- }
186
- }
187
- return { results, summary };
188
- }
189
- //# sourceMappingURL=constraint-evaluator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constraint-evaluator.js","sourceRoot":"","sources":["../../src/lib/constraint-evaluator.ts"],"names":[],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- import type { BudgetConfig, InvocationType } from '@kantban/types';
2
- interface InvocationRecord {
3
- ticketId: string;
4
- columnId: string;
5
- model: string;
6
- tokensIn: number;
7
- tokensOut: number;
8
- type: InvocationType;
9
- }
10
- interface TicketCost {
11
- tokens_in: number;
12
- tokens_out: number;
13
- iterations: number;
14
- advisor_calls: number;
15
- }
16
- interface ColumnCost {
17
- tokens_in: number;
18
- tokens_out: number;
19
- light_calls: number;
20
- heavy_calls: number;
21
- advisor_calls: number;
22
- }
23
- export declare class PipelineCostTracker {
24
- private readonly runId;
25
- private readonly budget;
26
- private _totalIn;
27
- private _totalOut;
28
- private readonly ticketCosts;
29
- private readonly columnCosts;
30
- private readonly modelCosts;
31
- constructor(runId: string, budget: BudgetConfig | undefined);
32
- get totalTokensIn(): number;
33
- get totalTokensOut(): number;
34
- get maxInputTokens(): number;
35
- record(inv: InvocationRecord): void;
36
- getTicketCost(ticketId: string): TicketCost | undefined;
37
- getColumnCost(columnId: string): ColumnCost | undefined;
38
- isWarning(): boolean;
39
- isExhausted(): boolean;
40
- generateReport(pricing?: Record<string, {
41
- input_per_mtok: number;
42
- output_per_mtok: number;
43
- }>): string;
44
- }
45
- export {};
46
- //# sourceMappingURL=cost-tracker.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cost-tracker.d.ts","sourceRoot":"","sources":["../../src/lib/cost-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEnE,UAAU,gBAAgB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,UAAU,UAAU;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,UAAU,UAAU;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAQD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsC;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqC;gBAEpD,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,SAAS;IAK3D,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,MAAM,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI;IAwCnC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIvD,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAIvD,SAAS,IAAI,OAAO;IAOpB,WAAW,IAAI,OAAO;IAQtB,cAAc,CACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC,GAC5E,MAAM;CA6CV"}
@@ -1,120 +0,0 @@
1
- export class PipelineCostTracker {
2
- runId;
3
- budget;
4
- _totalIn = 0;
5
- _totalOut = 0;
6
- ticketCosts = new Map();
7
- columnCosts = new Map();
8
- modelCosts = new Map();
9
- constructor(runId, budget) {
10
- this.runId = runId;
11
- this.budget = budget;
12
- }
13
- get totalTokensIn() {
14
- return this._totalIn;
15
- }
16
- get totalTokensOut() {
17
- return this._totalOut;
18
- }
19
- get maxInputTokens() {
20
- return this.budget?.max_input_tokens ?? 5_000_000;
21
- }
22
- record(inv) {
23
- this._totalIn += inv.tokensIn;
24
- this._totalOut += inv.tokensOut;
25
- // Per-ticket
26
- const tc = this.ticketCosts.get(inv.ticketId) ?? {
27
- tokens_in: 0,
28
- tokens_out: 0,
29
- iterations: 0,
30
- advisor_calls: 0,
31
- };
32
- tc.tokens_in += inv.tokensIn;
33
- tc.tokens_out += inv.tokensOut;
34
- if (inv.type === 'heavy')
35
- tc.iterations++;
36
- if (inv.type === 'advisor')
37
- tc.advisor_calls++;
38
- this.ticketCosts.set(inv.ticketId, tc);
39
- // Per-column
40
- const cc = this.columnCosts.get(inv.columnId) ?? {
41
- tokens_in: 0,
42
- tokens_out: 0,
43
- light_calls: 0,
44
- heavy_calls: 0,
45
- advisor_calls: 0,
46
- };
47
- cc.tokens_in += inv.tokensIn;
48
- cc.tokens_out += inv.tokensOut;
49
- if (inv.type === 'light')
50
- cc.light_calls++;
51
- if (inv.type === 'heavy')
52
- cc.heavy_calls++;
53
- if (inv.type === 'advisor' || inv.type === 'stuck_detection')
54
- cc.advisor_calls++;
55
- this.columnCosts.set(inv.columnId, cc);
56
- // Per-model
57
- const mc = this.modelCosts.get(inv.model) ?? { tokens_in: 0, tokens_out: 0, calls: 0 };
58
- mc.tokens_in += inv.tokensIn;
59
- mc.tokens_out += inv.tokensOut;
60
- mc.calls++;
61
- this.modelCosts.set(inv.model, mc);
62
- }
63
- getTicketCost(ticketId) {
64
- return this.ticketCosts.get(ticketId);
65
- }
66
- getColumnCost(columnId) {
67
- return this.columnCosts.get(columnId);
68
- }
69
- isWarning() {
70
- if (!this.budget)
71
- return false;
72
- const inPct = (this._totalIn / this.budget.max_input_tokens) * 100;
73
- const outPct = (this._totalOut / this.budget.max_output_tokens) * 100;
74
- return inPct >= this.budget.warn_pct || outPct >= this.budget.warn_pct;
75
- }
76
- isExhausted() {
77
- if (!this.budget)
78
- return false;
79
- return (this._totalIn >= this.budget.max_input_tokens ||
80
- this._totalOut >= this.budget.max_output_tokens);
81
- }
82
- generateReport(pricing) {
83
- const fmt = (n) => {
84
- if (n >= 1_000_000)
85
- return `${(n / 1_000_000).toFixed(1)}M`;
86
- if (n >= 1_000)
87
- return `${(n / 1_000).toFixed(0)}K`;
88
- return String(n);
89
- };
90
- const lines = [];
91
- const budgetStr = this.budget
92
- ? ` (of ${fmt(this.budget.max_input_tokens)} / ${fmt(this.budget.max_output_tokens)} budget)`
93
- : '';
94
- lines.push(`Tokens: ${fmt(this._totalIn)} in / ${fmt(this._totalOut)} out${budgetStr}`);
95
- if (this.columnCosts.size > 0) {
96
- const colParts = Array.from(this.columnCosts.entries()).map(([id, c]) => `${id.slice(0, 8)} ${fmt(c.tokens_in)}/${fmt(c.tokens_out)}`);
97
- lines.push(` By column: ${colParts.join(', ')}`);
98
- }
99
- if (this.modelCosts.size > 0) {
100
- const modelParts = Array.from(this.modelCosts.entries()).map(([model, c]) => `${model} ${fmt(c.tokens_in)}/${fmt(c.tokens_out)} (${c.calls} calls)`);
101
- lines.push(` By model: ${modelParts.join(', ')}`);
102
- }
103
- // Dollar estimate only if pricing provided
104
- if (pricing) {
105
- let totalCost = 0;
106
- for (const [model, mc] of this.modelCosts) {
107
- const p = pricing[model];
108
- if (p) {
109
- totalCost += (mc.tokens_in / 1_000_000) * p.input_per_mtok;
110
- totalCost += (mc.tokens_out / 1_000_000) * p.output_per_mtok;
111
- }
112
- }
113
- if (totalCost > 0) {
114
- lines.push(` Estimated cost: $${totalCost.toFixed(2)} (user-provided pricing)`);
115
- }
116
- }
117
- return lines.join('\n');
118
- }
119
- }
120
- //# sourceMappingURL=cost-tracker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cost-tracker.js","sourceRoot":"","sources":["../../src/lib/cost-tracker.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import { type Verdict, type GateResult } from '@kantban/types';
2
- interface EvaluatorPromptInput {
3
- ticketTitle: string;
4
- ticketNumber: number;
5
- columnPrompt: string;
6
- diff: string;
7
- gateResults: GateResult[];
8
- handoff: Record<string, unknown>;
9
- }
10
- export declare function composeEvaluatorPrompt(input: EvaluatorPromptInput): string;
11
- export declare function parseVerdict(raw: string): Verdict & {
12
- parseFailed?: boolean;
13
- };
14
- export type VerdictAction = 'forward' | 'reject' | 'forward_with_signals';
15
- export declare function resolveVerdictAction(verdict: Verdict): VerdictAction;
16
- export {};
17
- //# sourceMappingURL=evaluator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evaluator.d.ts","sourceRoot":"","sources":["../../src/lib/evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAc9E,UAAU,oBAAoB;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAwC1E;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG;IAAE,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,CAa7E;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,sBAAsB,CAAC;AAE1E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,aAAa,CAQpE"}
@@ -1,71 +0,0 @@
1
- import { VerdictSchema } from '@kantban/types';
2
- import { parseJsonFromLlmOutput } from './parse-utils.js';
3
- const ADVERSARIAL_PREAMBLE = `You are an ADVERSARIAL REVIEWER. Your job is to find problems, not to approve.
4
-
5
- Rules:
6
- 1. You MUST return a structured verdict using submit_verdict (see below).
7
- 2. Finding no problems is acceptable but suspicious — look harder before approving.
8
- 3. The agent that did this work will tell you it's great. It's lying. Check everything.
9
- 4. You have full tool access. Use it to probe claims — run tests, read code, check builds.
10
- 5. Gate results show objective pass/fail. Your job is everything gates CAN'T check:
11
- code quality, architecture fit, edge cases, security, naming, duplication.
12
- 6. Do NOT fix problems. Document them in your verdict. The worker agent will fix them.`;
13
- export function composeEvaluatorPrompt(input) {
14
- const parts = [];
15
- parts.push(ADVERSARIAL_PREAMBLE);
16
- parts.push(`\n## Ticket: #${input.ticketNumber} "${input.ticketTitle}"`);
17
- // Column prompt (review instructions)
18
- parts.push(`\n## Review Instructions\n${input.columnPrompt}`);
19
- // Handoff data from worker
20
- if (Object.keys(input.handoff).length > 0) {
21
- parts.push(`\n## Handoff Data\n${JSON.stringify(input.handoff, null, 2)}`);
22
- }
23
- // Gate results from worker column
24
- if (input.gateResults.length > 0) {
25
- parts.push(`\n## Worker Gate Results`);
26
- for (const r of input.gateResults) {
27
- parts.push(`- ${r.name}: ${r.passed ? 'PASS' : 'FAIL'}${r.required ? ' (required)' : ''}`);
28
- }
29
- }
30
- // Diff
31
- if (input.diff) {
32
- parts.push(`\n## Code Changes\n\`\`\`diff\n${input.diff}\n\`\`\``);
33
- }
34
- parts.push(`\n## Verdict Format
35
- Call submit_verdict with a JSON object:
36
- {
37
- "decision": "approve" | "reject",
38
- "summary": "one-line summary",
39
- "findings": [
40
- { "severity": "blocker" | "warning" | "nit", "description": "...", "file": "...", "line": N }
41
- ]
42
- }
43
-
44
- If you do NOT call submit_verdict, the harness will treat this as a reject.`);
45
- return parts.join('\n');
46
- }
47
- export function parseVerdict(raw) {
48
- try {
49
- const parsed = parseJsonFromLlmOutput(raw);
50
- return VerdictSchema.parse(parsed);
51
- }
52
- catch (err) {
53
- const msg = err instanceof Error ? err.message : 'unknown';
54
- return {
55
- decision: 'reject',
56
- summary: `Evaluator verdict parse error: ${msg.slice(0, 100)}`,
57
- findings: [{ severity: 'blocker', description: `Verdict parse error — raw output did not contain valid JSON verdict. Error: ${msg.slice(0, 200)}` }],
58
- parseFailed: true,
59
- };
60
- }
61
- }
62
- export function resolveVerdictAction(verdict) {
63
- if (verdict.decision === 'approve')
64
- return 'forward';
65
- const hasBlockers = verdict.findings.some((f) => f.severity === 'blocker');
66
- if (hasBlockers || verdict.findings.length === 0)
67
- return 'reject';
68
- // Reject with only warnings/nits → forward with signals
69
- return 'forward_with_signals';
70
- }
71
- //# sourceMappingURL=evaluator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evaluator.js","sourceRoot":"","sources":["../../src/lib/evaluator.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- import type { PipelineEventLayer, PipelineEventSeverity } from '@kantban/types';
2
- export declare class PipelineEventEmitter {
3
- private apiBaseUrl;
4
- private projectId;
5
- private apiToken;
6
- private boardId;
7
- private runId;
8
- private buffer;
9
- private flushTimer;
10
- private closed;
11
- private inFlight;
12
- private static readonly MAX_BUFFER_SIZE;
13
- constructor(apiBaseUrl: string, projectId: string, apiToken: string, boardId: string, runId: string);
14
- emit(opts: {
15
- layer: PipelineEventLayer;
16
- eventType: string;
17
- severity: PipelineEventSeverity;
18
- summary: string;
19
- detail?: Record<string, unknown> | null;
20
- ticketId?: string | null;
21
- columnId?: string | null;
22
- sessionId?: string | null;
23
- iteration?: number | null;
24
- }): void;
25
- flush(): Promise<void>;
26
- close(): Promise<void>;
27
- }
28
- //# sourceMappingURL=event-emitter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-emitter.d.ts","sourceRoot":"","sources":["../../src/lib/event-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAuB,kBAAkB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAYrG,qBAAa,oBAAoB;IAQ7B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK;IAXf,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAU;gBAGvC,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM;IAKvB,IAAI,CAAC,IAAI,EAAE;QACT,KAAK,EAAE,kBAAkB,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,qBAAqB,CAAC;QAChC,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QACxC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,GAAG,IAAI;IAwBF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsCtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAY7B"}