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
package/dist/lib/gate-runner.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { execFile } from 'node:child_process';
|
|
2
|
-
import { parseTimeout } from './gate-config.js';
|
|
3
|
-
export async function runGate(gate, options = {}) {
|
|
4
|
-
const timeoutMs = gate.timeout ? parseTimeout(gate.timeout) : (options.timeoutMs ?? 60_000);
|
|
5
|
-
const start = Date.now();
|
|
6
|
-
return new Promise((resolve) => {
|
|
7
|
-
// SECURITY: gate.run is an operator-authored shell command from pipeline.gates.yaml.
|
|
8
|
-
// It is executed with full process privileges via `sh -c`. This is intentional —
|
|
9
|
-
// gates are trusted operator code, not user input. If gate config sources are ever
|
|
10
|
-
// extended to accept user-supplied values, sanitization must be added here.
|
|
11
|
-
const child = execFile('sh', ['-c', gate.run], {
|
|
12
|
-
timeout: timeoutMs,
|
|
13
|
-
cwd: options.cwd,
|
|
14
|
-
env: { ...process.env, ...options.env },
|
|
15
|
-
maxBuffer: options.maxBuffer ?? 1024 * 1024, // 1MB output cap
|
|
16
|
-
}, (error, stdout, stderr) => {
|
|
17
|
-
const duration_ms = Date.now() - start;
|
|
18
|
-
const output = (stdout + stderr).trim();
|
|
19
|
-
const timed_out = error?.killed === true;
|
|
20
|
-
const buffer_exceeded = error?.code === 'ERR_CHILD_PROCESS_STDIO_MAXBUFFER';
|
|
21
|
-
if (error) {
|
|
22
|
-
let annotation = '';
|
|
23
|
-
if (timed_out)
|
|
24
|
-
annotation = `\n[TIMED OUT after ${timeoutMs}ms]`;
|
|
25
|
-
else if (buffer_exceeded)
|
|
26
|
-
annotation = `\n[OUTPUT TRUNCATED — buffer limit exceeded]`;
|
|
27
|
-
resolve({
|
|
28
|
-
name: gate.name,
|
|
29
|
-
passed: false,
|
|
30
|
-
required: gate.required ?? true,
|
|
31
|
-
duration_ms,
|
|
32
|
-
output: output + annotation,
|
|
33
|
-
stderr: stderr.trim(),
|
|
34
|
-
exit_code: child.exitCode ?? (typeof error.code === 'number' ? error.code : 1),
|
|
35
|
-
timed_out: timed_out || buffer_exceeded,
|
|
36
|
-
});
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
resolve({
|
|
40
|
-
name: gate.name,
|
|
41
|
-
passed: true,
|
|
42
|
-
required: gate.required ?? true,
|
|
43
|
-
duration_ms,
|
|
44
|
-
output,
|
|
45
|
-
stderr: stderr.trim(),
|
|
46
|
-
exit_code: 0,
|
|
47
|
-
timed_out: false,
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
/** Format gate failures into a structured error string for agent/CLI display. */
|
|
53
|
-
export function formatGateErrors(results) {
|
|
54
|
-
const failures = results.filter((r) => !r.passed);
|
|
55
|
-
if (failures.length === 0)
|
|
56
|
-
return 'All gates passed.';
|
|
57
|
-
return failures
|
|
58
|
-
.map((r) => {
|
|
59
|
-
const lines = [`Gate "${r.name}" (${r.required ? 'required' : 'advisory'}): FAILED`];
|
|
60
|
-
lines.push(` Exit code: ${r.exit_code}`);
|
|
61
|
-
if (r.timed_out)
|
|
62
|
-
lines.push(' Timed out: yes');
|
|
63
|
-
if (r.output) {
|
|
64
|
-
const stderr = r.output.split('\n').slice(-20).join('\n');
|
|
65
|
-
lines.push(` Output:\n ${stderr.replace(/\n/g, '\n ')}`);
|
|
66
|
-
}
|
|
67
|
-
return lines.join('\n');
|
|
68
|
-
})
|
|
69
|
-
.join('\n\n');
|
|
70
|
-
}
|
|
71
|
-
export async function runGates(gates, options = {}) {
|
|
72
|
-
const results = [];
|
|
73
|
-
const totalStart = Date.now();
|
|
74
|
-
for (const gate of gates) {
|
|
75
|
-
// Check total timeout
|
|
76
|
-
if (options.totalTimeoutMs) {
|
|
77
|
-
const elapsed = Date.now() - totalStart;
|
|
78
|
-
if (elapsed >= options.totalTimeoutMs) {
|
|
79
|
-
// Remaining gates get timed-out results
|
|
80
|
-
results.push({
|
|
81
|
-
name: gate.name,
|
|
82
|
-
passed: false,
|
|
83
|
-
required: gate.required ?? true,
|
|
84
|
-
duration_ms: 0,
|
|
85
|
-
output: '[SKIPPED — total timeout exceeded]',
|
|
86
|
-
stderr: '',
|
|
87
|
-
exit_code: -1,
|
|
88
|
-
timed_out: true,
|
|
89
|
-
});
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
// Reduce per-gate timeout by elapsed time
|
|
93
|
-
const remainingMs = options.totalTimeoutMs - elapsed;
|
|
94
|
-
const gateTimeout = gate.timeout ? parseTimeout(gate.timeout) : (options.timeoutMs ?? 60_000);
|
|
95
|
-
const effectiveTimeout = Math.min(gateTimeout, remainingMs);
|
|
96
|
-
results.push(await runGate(gate, { ...options, timeoutMs: effectiveTimeout }));
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
results.push(await runGate(gate, options));
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return results;
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=gate-runner.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gate-runner.js","sourceRoot":"","sources":["../../src/lib/gate-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { GateResult, GateSnapshot, GateDelta } from '@kantban/types';
|
|
2
|
-
export declare function computeDelta(previous: GateSnapshot | undefined, currentResults: GateResult[]): GateDelta;
|
|
3
|
-
export declare class GateSnapshotStore {
|
|
4
|
-
private snapshots;
|
|
5
|
-
record(ticketId: string, iteration: number, results: GateResult[]): GateSnapshot;
|
|
6
|
-
getLatest(ticketId: string): GateSnapshot | undefined;
|
|
7
|
-
getRecent(ticketId: string, count: number): GateSnapshot[];
|
|
8
|
-
clear(ticketId: string): void;
|
|
9
|
-
/** Returns all ticket IDs that have at least one snapshot recorded. */
|
|
10
|
-
getAllTicketIds(): string[];
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=gate-snapshot.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gate-snapshot.d.ts","sourceRoot":"","sources":["../../src/lib/gate-snapshot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI1E,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,YAAY,GAAG,SAAS,EAClC,cAAc,EAAE,UAAU,EAAE,GAC3B,SAAS,CAUX;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAA0C;IAE3D,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,YAAY;IAsBhF,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAKrD,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE;IAK1D,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI7B,uEAAuE;IACvE,eAAe,IAAI,MAAM,EAAE;CAG5B"}
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
const MAX_SNAPSHOTS_PER_TICKET = 100;
|
|
2
|
-
export function computeDelta(previous, currentResults) {
|
|
3
|
-
if (!previous)
|
|
4
|
-
return 'first_check';
|
|
5
|
-
const prevPassing = previous.results.filter((r) => r.passed).length;
|
|
6
|
-
const currPassing = currentResults.filter((r) => r.passed).length;
|
|
7
|
-
if (currPassing > prevPassing)
|
|
8
|
-
return 'improved';
|
|
9
|
-
if (currPassing < prevPassing)
|
|
10
|
-
return 'regressed';
|
|
11
|
-
return 'same';
|
|
12
|
-
}
|
|
13
|
-
export class GateSnapshotStore {
|
|
14
|
-
snapshots = new Map();
|
|
15
|
-
record(ticketId, iteration, results) {
|
|
16
|
-
const previous = this.getLatest(ticketId);
|
|
17
|
-
const delta = computeDelta(previous, results);
|
|
18
|
-
const snapshot = {
|
|
19
|
-
timestamp: new Date().toISOString(),
|
|
20
|
-
iteration,
|
|
21
|
-
results,
|
|
22
|
-
all_required_passed: results.filter((r) => r.required).every((r) => r.passed),
|
|
23
|
-
delta_from_previous: delta,
|
|
24
|
-
};
|
|
25
|
-
const existing = this.snapshots.get(ticketId) ?? [];
|
|
26
|
-
existing.push(snapshot);
|
|
27
|
-
if (existing.length > MAX_SNAPSHOTS_PER_TICKET) {
|
|
28
|
-
existing.splice(0, existing.length - MAX_SNAPSHOTS_PER_TICKET);
|
|
29
|
-
}
|
|
30
|
-
this.snapshots.set(ticketId, existing);
|
|
31
|
-
return snapshot;
|
|
32
|
-
}
|
|
33
|
-
getLatest(ticketId) {
|
|
34
|
-
const snaps = this.snapshots.get(ticketId);
|
|
35
|
-
return snaps?.[snaps.length - 1];
|
|
36
|
-
}
|
|
37
|
-
getRecent(ticketId, count) {
|
|
38
|
-
const snaps = this.snapshots.get(ticketId) ?? [];
|
|
39
|
-
return snaps.slice(-count);
|
|
40
|
-
}
|
|
41
|
-
clear(ticketId) {
|
|
42
|
-
this.snapshots.delete(ticketId);
|
|
43
|
-
}
|
|
44
|
-
/** Returns all ticket IDs that have at least one snapshot recorded. */
|
|
45
|
-
getAllTicketIds() {
|
|
46
|
-
return Array.from(this.snapshots.keys());
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=gate-snapshot.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gate-snapshot.js","sourceRoot":"","sources":["../../src/lib/gate-snapshot.ts"],"names":[],"mappings":"AAEA,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAErC,MAAM,UAAU,YAAY,CAC1B,QAAkC,EAClC,cAA4B;IAE5B,IAAI,CAAC,QAAQ;QAAE,OAAO,aAAa,CAAC;IAEpC,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IACpE,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;IAElE,IAAI,WAAW,GAAG,WAAW;QAAE,OAAO,UAAU,CAAC;IACjD,IAAI,WAAW,GAAG,WAAW;QAAE,OAAO,WAAW,CAAC;IAElD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,OAAO,iBAAiB;IACpB,SAAS,GAAgC,IAAI,GAAG,EAAE,CAAC;IAE3D,MAAM,CAAC,QAAgB,EAAE,SAAiB,EAAE,OAAqB;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE9C,MAAM,QAAQ,GAAiB;YAC7B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS;YACT,OAAO;YACP,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YAC7E,mBAAmB,EAAE,KAAK;SAC3B,CAAC;QAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,IAAI,QAAQ,CAAC,MAAM,GAAG,wBAAwB,EAAE,CAAC;YAC/C,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,wBAAwB,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEvC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO,KAAK,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,SAAS,CAAC,QAAgB,EAAE,KAAa;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACjD,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,QAAgB;QACpB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,uEAAuE;IACvE,eAAe;QACb,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
package/dist/lib/light-call.d.ts
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
export interface LightCallContext {
|
|
3
|
-
ticketId: string;
|
|
4
|
-
ticketNumber: number;
|
|
5
|
-
ticketTitle: string;
|
|
6
|
-
ticketDescription?: string;
|
|
7
|
-
columnName: string;
|
|
8
|
-
fieldValues: Array<{
|
|
9
|
-
field_name: string;
|
|
10
|
-
value: unknown;
|
|
11
|
-
}>;
|
|
12
|
-
toolPrefix: string;
|
|
13
|
-
projectId: string;
|
|
14
|
-
availableColumns?: Array<{
|
|
15
|
-
id: string;
|
|
16
|
-
name: string;
|
|
17
|
-
}>;
|
|
18
|
-
transitionRules?: string;
|
|
19
|
-
}
|
|
20
|
-
declare const LightResponseSchema: z.ZodObject<{
|
|
21
|
-
action: z.ZodEnum<["move_ticket", "set_field_value", "create_comment", "archive_ticket", "no_action"]>;
|
|
22
|
-
params: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
23
|
-
reason: z.ZodString;
|
|
24
|
-
}, "strip", z.ZodTypeAny, {
|
|
25
|
-
params: Record<string, unknown>;
|
|
26
|
-
action: "move_ticket" | "set_field_value" | "archive_ticket" | "create_comment" | "no_action";
|
|
27
|
-
reason: string;
|
|
28
|
-
}, {
|
|
29
|
-
params: Record<string, unknown>;
|
|
30
|
-
action: "move_ticket" | "set_field_value" | "archive_ticket" | "create_comment" | "no_action";
|
|
31
|
-
reason: string;
|
|
32
|
-
}>;
|
|
33
|
-
export type LightResponse = z.infer<typeof LightResponseSchema>;
|
|
34
|
-
export declare function composeLightPrompt(ctx: LightCallContext): string;
|
|
35
|
-
export declare function parseLightResponse(raw: string): LightResponse;
|
|
36
|
-
export {};
|
|
37
|
-
//# sourceMappingURL=light-call.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"light-call.d.ts","sourceRoot":"","sources":["../../src/lib/light-call.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC3D,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,QAAA,MAAM,mBAAmB;;;;;;;;;;;;EAIvB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CA+ChE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,CAc7D"}
|
package/dist/lib/light-call.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { z } from 'zod';
|
|
2
|
-
import { parseJsonFromLlmOutput } from './parse-utils.js';
|
|
3
|
-
const LightResponseSchema = z.object({
|
|
4
|
-
action: z.enum(['move_ticket', 'set_field_value', 'create_comment', 'archive_ticket', 'no_action']),
|
|
5
|
-
params: z.record(z.string(), z.unknown()),
|
|
6
|
-
reason: z.string(),
|
|
7
|
-
});
|
|
8
|
-
export function composeLightPrompt(ctx) {
|
|
9
|
-
const fieldLines = ctx.fieldValues.length > 0
|
|
10
|
-
? ctx.fieldValues.map(f => ` ${f.field_name}: ${f.value != null ? JSON.stringify(f.value) : '(not set)'}`).join('\n')
|
|
11
|
-
: ' (none)';
|
|
12
|
-
const parts = [];
|
|
13
|
-
parts.push(`Ticket #${String(ctx.ticketNumber)}: "${ctx.ticketTitle}"
|
|
14
|
-
Column: ${ctx.columnName}
|
|
15
|
-
Project: ${ctx.projectId}
|
|
16
|
-
Tool prefix: ${ctx.toolPrefix}`);
|
|
17
|
-
if (ctx.ticketDescription) {
|
|
18
|
-
const truncated = ctx.ticketDescription.length > 300
|
|
19
|
-
? ctx.ticketDescription.slice(0, 300) + '...'
|
|
20
|
-
: ctx.ticketDescription;
|
|
21
|
-
parts.push(`Description: ${truncated}`);
|
|
22
|
-
}
|
|
23
|
-
parts.push(`\nField values:\n${fieldLines}`);
|
|
24
|
-
if (ctx.availableColumns && ctx.availableColumns.length > 0) {
|
|
25
|
-
const colLines = ctx.availableColumns.map(c => ` ${c.name} (${c.id})`).join('\n');
|
|
26
|
-
parts.push(`Available columns:\n${colLines}`);
|
|
27
|
-
}
|
|
28
|
-
if (ctx.transitionRules) {
|
|
29
|
-
parts.push(`Transition rules:\n${ctx.transitionRules}`);
|
|
30
|
-
}
|
|
31
|
-
parts.push(`Decide the single best next action for this ticket.
|
|
32
|
-
Respond with ONLY a JSON object — no markdown, no explanation outside the JSON:
|
|
33
|
-
|
|
34
|
-
{
|
|
35
|
-
"action": "<move_ticket|set_field_value|create_comment|archive_ticket|no_action>",
|
|
36
|
-
"params": { /* action-specific params */ },
|
|
37
|
-
"reason": "<one sentence>"
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
Action params shapes:
|
|
41
|
-
- move_ticket: { column_id: string }
|
|
42
|
-
- set_field_value: { field_name: string, value: unknown }
|
|
43
|
-
- create_comment: { body: string }
|
|
44
|
-
- archive_ticket: {}
|
|
45
|
-
- no_action: {}`);
|
|
46
|
-
return parts.join('\n');
|
|
47
|
-
}
|
|
48
|
-
export function parseLightResponse(raw) {
|
|
49
|
-
let parsed;
|
|
50
|
-
try {
|
|
51
|
-
parsed = parseJsonFromLlmOutput(raw);
|
|
52
|
-
}
|
|
53
|
-
catch (err) {
|
|
54
|
-
throw new Error(`LightResponse: ${err instanceof Error ? err.message : String(err)}`);
|
|
55
|
-
}
|
|
56
|
-
const result = LightResponseSchema.safeParse(parsed);
|
|
57
|
-
if (!result.success) {
|
|
58
|
-
throw new Error(`LightResponse: validation failed — ${result.error.message}`);
|
|
59
|
-
}
|
|
60
|
-
return result.data;
|
|
61
|
-
}
|
|
62
|
-
//# sourceMappingURL=light-call.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"light-call.js","sourceRoot":"","sources":["../../src/lib/light-call.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/logger.d.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
export interface IterationLogData {
|
|
2
|
-
promptSize: number;
|
|
3
|
-
exitCode: number;
|
|
4
|
-
duration: number;
|
|
5
|
-
tokenUsage?: {
|
|
6
|
-
input: number;
|
|
7
|
-
output: number;
|
|
8
|
-
cost?: number;
|
|
9
|
-
};
|
|
10
|
-
outcome: string;
|
|
11
|
-
}
|
|
12
|
-
export declare class PipelineLogger {
|
|
13
|
-
private boardDir;
|
|
14
|
-
private writeCount;
|
|
15
|
-
constructor(baseDir: string, boardId: string);
|
|
16
|
-
orchestrator(message: string): void;
|
|
17
|
-
private rotateIfNeeded;
|
|
18
|
-
iteration(ticketNumber: string, iterationNum: number, data: IterationLogData): void;
|
|
19
|
-
formatConsole(ticketNumber: string, columnName: string, iteration: number, status: string): string;
|
|
20
|
-
pruneOldLogs(retentionDays: number): void;
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=logger.d.ts.map
|
package/dist/lib/logger.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D,OAAO,EAAE,MAAM,CAAC;CACjB;AASD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,UAAU,CAAK;gBAEX,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAK5C,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAanC,OAAO,CAAC,cAAc;IAmBtB,SAAS,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAanF,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAOlG,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI;CA0B1C"}
|
package/dist/lib/logger.js
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { mkdirSync, writeFileSync, appendFileSync, readdirSync, rmSync, statSync, renameSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
/** Maximum orchestrator.log size before rotation (5 MB). */
|
|
4
|
-
const MAX_LOG_BYTES = 5 * 1024 * 1024;
|
|
5
|
-
/** Number of rotated log files to keep (orchestrator.log.1, .2, .3). */
|
|
6
|
-
const MAX_ROTATED_FILES = 3;
|
|
7
|
-
/** How often (in write count) to check file size — avoids stat on every write. */
|
|
8
|
-
const ROTATION_CHECK_INTERVAL = 100;
|
|
9
|
-
export class PipelineLogger {
|
|
10
|
-
boardDir;
|
|
11
|
-
writeCount = 0;
|
|
12
|
-
constructor(baseDir, boardId) {
|
|
13
|
-
this.boardDir = join(baseDir, boardId);
|
|
14
|
-
mkdirSync(this.boardDir, { recursive: true });
|
|
15
|
-
}
|
|
16
|
-
orchestrator(message) {
|
|
17
|
-
const logPath = join(this.boardDir, 'orchestrator.log');
|
|
18
|
-
const entry = `[${new Date().toISOString()}] ${message}\n`;
|
|
19
|
-
appendFileSync(logPath, entry);
|
|
20
|
-
// Periodically check if log needs rotation
|
|
21
|
-
this.writeCount++;
|
|
22
|
-
if (this.writeCount >= ROTATION_CHECK_INTERVAL) {
|
|
23
|
-
this.writeCount = 0;
|
|
24
|
-
this.rotateIfNeeded(logPath);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
rotateIfNeeded(logPath) {
|
|
28
|
-
try {
|
|
29
|
-
const stat = statSync(logPath);
|
|
30
|
-
if (stat.size < MAX_LOG_BYTES)
|
|
31
|
-
return;
|
|
32
|
-
// Rotate: .3 → delete, .2 → .3, .1 → .2, current → .1
|
|
33
|
-
for (let i = MAX_ROTATED_FILES; i >= 1; i--) {
|
|
34
|
-
const from = i === 1 ? logPath : `${logPath}.${String(i - 1)}`;
|
|
35
|
-
const to = `${logPath}.${String(i)}`;
|
|
36
|
-
try {
|
|
37
|
-
if (i === MAX_ROTATED_FILES) {
|
|
38
|
-
try {
|
|
39
|
-
rmSync(to, { force: true });
|
|
40
|
-
}
|
|
41
|
-
catch { /* ignore */ }
|
|
42
|
-
}
|
|
43
|
-
renameSync(from, to);
|
|
44
|
-
}
|
|
45
|
-
catch { /* file may not exist */ }
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
catch { /* stat failed — file doesn't exist yet */ }
|
|
49
|
-
}
|
|
50
|
-
iteration(ticketNumber, iterationNum, data) {
|
|
51
|
-
const ticketDir = join(this.boardDir, ticketNumber);
|
|
52
|
-
mkdirSync(ticketDir, { recursive: true });
|
|
53
|
-
const padded = String(iterationNum).padStart(3, '0');
|
|
54
|
-
const logPath = join(ticketDir, `iteration-${padded}.log`);
|
|
55
|
-
const entry = {
|
|
56
|
-
timestamp: new Date().toISOString(),
|
|
57
|
-
iteration: iterationNum,
|
|
58
|
-
...data,
|
|
59
|
-
};
|
|
60
|
-
writeFileSync(logPath, JSON.stringify(entry, null, 2));
|
|
61
|
-
}
|
|
62
|
-
formatConsole(ticketNumber, columnName, iteration, status) {
|
|
63
|
-
const time = new Date().toLocaleTimeString('en-US', { hour12: false });
|
|
64
|
-
const ticket = ticketNumber.padEnd(10);
|
|
65
|
-
const col = columnName.padEnd(12);
|
|
66
|
-
return `[${time}] ${ticket} ${col} iter:${iteration} ${status}`;
|
|
67
|
-
}
|
|
68
|
-
pruneOldLogs(retentionDays) {
|
|
69
|
-
const cutoff = Date.now() - (retentionDays * 24 * 60 * 60 * 1000);
|
|
70
|
-
try {
|
|
71
|
-
const entries = readdirSync(this.boardDir, { withFileTypes: true });
|
|
72
|
-
for (const entry of entries) {
|
|
73
|
-
const fullPath = join(this.boardDir, entry.name);
|
|
74
|
-
if (entry.isDirectory() && entry.name !== '.') {
|
|
75
|
-
try {
|
|
76
|
-
const stat = statSync(fullPath);
|
|
77
|
-
if (stat.mtimeMs < cutoff) {
|
|
78
|
-
rmSync(fullPath, { recursive: true, force: true });
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
catch { /* skip if stat fails */ }
|
|
82
|
-
}
|
|
83
|
-
// Prune old rotated orchestrator logs
|
|
84
|
-
if (entry.isFile() && /^orchestrator\.log\.\d+$/.test(entry.name)) {
|
|
85
|
-
try {
|
|
86
|
-
const stat = statSync(fullPath);
|
|
87
|
-
if (stat.mtimeMs < cutoff) {
|
|
88
|
-
rmSync(fullPath, { force: true });
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
catch { /* skip if stat fails */ }
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
catch { /* skip if dir doesn't exist */ }
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
//# sourceMappingURL=logger.js.map
|
package/dist/lib/logger.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/mcp-config.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generate (or overwrite) a stable MCP config file for the given board.
|
|
3
|
-
* Uses a deterministic path (~/.kantban/pipelines/<boardId>/mcp-config.json)
|
|
4
|
-
* so that child claude -p processes can always find it, even if the
|
|
5
|
-
* orchestrator restarts between iterations.
|
|
6
|
-
*/
|
|
7
|
-
export declare function generateMcpConfig(apiUrl: string, apiToken: string, boardId: string): string;
|
|
8
|
-
export declare function cleanupMcpConfig(filePath: string): void;
|
|
9
|
-
/**
|
|
10
|
-
* Generate an MCP config file that includes BOTH the kantban server AND the
|
|
11
|
-
* gate proxy server for a specific column. The gate proxy runs as a local
|
|
12
|
-
* Node process bundled with the CLI and enforces column-level gates during
|
|
13
|
-
* pipeline execution.
|
|
14
|
-
*
|
|
15
|
-
* The file is written to a deterministic, column-scoped path:
|
|
16
|
-
* ~/.kantban/pipelines/<boardId>/mcp-config-<columnId>.json
|
|
17
|
-
*/
|
|
18
|
-
export declare function generateGateProxyMcpConfig(apiUrl: string, apiToken: string, boardId: string, gateConfigPath: string, columnId: string, columnName: string, projectId: string): string;
|
|
19
|
-
/**
|
|
20
|
-
* Remove all gate-proxy MCP config files for a given pipeline directory.
|
|
21
|
-
* Called on shutdown to ensure credentials don't persist on disk.
|
|
22
|
-
*/
|
|
23
|
-
export declare function cleanupGateProxyConfigs(pipelineDir: string): void;
|
|
24
|
-
//# sourceMappingURL=mcp-config.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-config.d.ts","sourceRoot":"","sources":["../../src/lib/mcp-config.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAmC3F;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAQvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,MAAM,CAmCR;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CASjE"}
|
package/dist/lib/mcp-config.js
DELETED
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { writeFileSync, unlinkSync, mkdirSync, existsSync, readdirSync } from 'node:fs';
|
|
2
|
-
import { join, dirname } from 'node:path';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
|
-
import { homedir } from 'node:os';
|
|
5
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
-
const __dirname = dirname(__filename);
|
|
7
|
-
/**
|
|
8
|
-
* Generate (or overwrite) a stable MCP config file for the given board.
|
|
9
|
-
* Uses a deterministic path (~/.kantban/pipelines/<boardId>/mcp-config.json)
|
|
10
|
-
* so that child claude -p processes can always find it, even if the
|
|
11
|
-
* orchestrator restarts between iterations.
|
|
12
|
-
*/
|
|
13
|
-
export function generateMcpConfig(apiUrl, apiToken, boardId) {
|
|
14
|
-
// Use local MCP server if running from the monorepo (dev mode),
|
|
15
|
-
// otherwise fall back to the published npm package.
|
|
16
|
-
const localMcpPath = join(__dirname, '..', '..', '..', 'mcp', 'dist', 'index.js');
|
|
17
|
-
const useLocal = existsSync(localMcpPath);
|
|
18
|
-
const kantbanServer = useLocal
|
|
19
|
-
? {
|
|
20
|
-
command: 'node',
|
|
21
|
-
args: [localMcpPath],
|
|
22
|
-
env: {
|
|
23
|
-
KANTBAN_API_TOKEN: apiToken,
|
|
24
|
-
KANTBAN_API_URL: apiUrl,
|
|
25
|
-
},
|
|
26
|
-
}
|
|
27
|
-
: {
|
|
28
|
-
command: 'npx',
|
|
29
|
-
args: ['-y', 'kantban-mcp@latest'],
|
|
30
|
-
env: {
|
|
31
|
-
KANTBAN_API_TOKEN: apiToken,
|
|
32
|
-
KANTBAN_API_URL: apiUrl,
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
const config = {
|
|
36
|
-
mcpServers: {
|
|
37
|
-
kantban: kantbanServer,
|
|
38
|
-
},
|
|
39
|
-
};
|
|
40
|
-
const dir = join(homedir(), '.kantban', 'pipelines', boardId);
|
|
41
|
-
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
42
|
-
const filePath = join(dir, 'mcp-config.json');
|
|
43
|
-
writeFileSync(filePath, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
44
|
-
return filePath;
|
|
45
|
-
}
|
|
46
|
-
export function cleanupMcpConfig(filePath) {
|
|
47
|
-
try {
|
|
48
|
-
if (existsSync(filePath)) {
|
|
49
|
-
unlinkSync(filePath);
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
// Non-critical — file may already be gone
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
/**
|
|
57
|
-
* Generate an MCP config file that includes BOTH the kantban server AND the
|
|
58
|
-
* gate proxy server for a specific column. The gate proxy runs as a local
|
|
59
|
-
* Node process bundled with the CLI and enforces column-level gates during
|
|
60
|
-
* pipeline execution.
|
|
61
|
-
*
|
|
62
|
-
* The file is written to a deterministic, column-scoped path:
|
|
63
|
-
* ~/.kantban/pipelines/<boardId>/mcp-config-<columnId>.json
|
|
64
|
-
*/
|
|
65
|
-
export function generateGateProxyMcpConfig(apiUrl, apiToken, boardId, gateConfigPath, columnId, columnName, projectId) {
|
|
66
|
-
const localMcpPath = join(__dirname, '..', '..', '..', 'mcp', 'dist', 'index.js');
|
|
67
|
-
const useLocal = existsSync(localMcpPath);
|
|
68
|
-
const kantbanServer = useLocal
|
|
69
|
-
? { command: 'node', args: [localMcpPath], env: { KANTBAN_API_TOKEN: apiToken, KANTBAN_API_URL: apiUrl } }
|
|
70
|
-
: { command: 'npx', args: ['-y', 'kantban-mcp@latest'], env: { KANTBAN_API_TOKEN: apiToken, KANTBAN_API_URL: apiUrl } };
|
|
71
|
-
// Gate proxy runs as a local Node script bundled with the CLI
|
|
72
|
-
const gateProxyPath = join(__dirname, 'gate-proxy-server.js');
|
|
73
|
-
const gateProxyServer = {
|
|
74
|
-
command: 'node',
|
|
75
|
-
args: [gateProxyPath],
|
|
76
|
-
env: {
|
|
77
|
-
GATE_CONFIG_PATH: gateConfigPath,
|
|
78
|
-
COLUMN_ID: columnId,
|
|
79
|
-
COLUMN_NAME: columnName,
|
|
80
|
-
PROJECT_ID: projectId,
|
|
81
|
-
KANTBAN_API_TOKEN: apiToken,
|
|
82
|
-
KANTBAN_API_URL: apiUrl,
|
|
83
|
-
},
|
|
84
|
-
};
|
|
85
|
-
const config = {
|
|
86
|
-
mcpServers: {
|
|
87
|
-
kantban: kantbanServer,
|
|
88
|
-
'kantban-gates': gateProxyServer,
|
|
89
|
-
},
|
|
90
|
-
};
|
|
91
|
-
const dir = join(homedir(), '.kantban', 'pipelines', boardId);
|
|
92
|
-
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
93
|
-
const filePath = join(dir, `mcp-config-${columnId}.json`);
|
|
94
|
-
writeFileSync(filePath, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
95
|
-
return filePath;
|
|
96
|
-
}
|
|
97
|
-
/**
|
|
98
|
-
* Remove all gate-proxy MCP config files for a given pipeline directory.
|
|
99
|
-
* Called on shutdown to ensure credentials don't persist on disk.
|
|
100
|
-
*/
|
|
101
|
-
export function cleanupGateProxyConfigs(pipelineDir) {
|
|
102
|
-
try {
|
|
103
|
-
const files = readdirSync(pipelineDir);
|
|
104
|
-
for (const f of files) {
|
|
105
|
-
if (f.startsWith('mcp-config-') && f.endsWith('.json')) {
|
|
106
|
-
try {
|
|
107
|
-
unlinkSync(join(pipelineDir, f));
|
|
108
|
-
}
|
|
109
|
-
catch { /* ignore */ }
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
catch { /* directory may not exist */ }
|
|
114
|
-
}
|
|
115
|
-
//# sourceMappingURL=mcp-config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-config.js","sourceRoot":"","sources":["../../src/lib/mcp-config.ts"],"names":[],"mappings":"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"}
|