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,100 +0,0 @@
1
- const SIGNIFICANT_TYPES = new Set([
2
- 'advisor_escalate',
3
- 'evaluator_rejected',
4
- 'budget_exhausted',
5
- 'replanner_paused',
6
- ]);
7
- const FLUSH_INTERVAL_MS = 5_000;
8
- const MAX_BATCH_SIZE = 100;
9
- export class PipelineEventEmitter {
10
- apiBaseUrl;
11
- projectId;
12
- apiToken;
13
- boardId;
14
- runId;
15
- buffer = [];
16
- flushTimer = null;
17
- closed = false;
18
- inFlight = false;
19
- static MAX_BUFFER_SIZE = 10_000;
20
- constructor(apiBaseUrl, projectId, apiToken, boardId, runId) {
21
- this.apiBaseUrl = apiBaseUrl;
22
- this.projectId = projectId;
23
- this.apiToken = apiToken;
24
- this.boardId = boardId;
25
- this.runId = runId;
26
- this.flushTimer = setInterval(() => void this.flush(), FLUSH_INTERVAL_MS);
27
- }
28
- emit(opts) {
29
- if (this.closed)
30
- return;
31
- const event = {
32
- board_id: this.boardId,
33
- ticket_id: opts.ticketId ?? null,
34
- column_id: opts.columnId ?? null,
35
- run_id: this.runId,
36
- session_id: opts.sessionId ?? null,
37
- layer: opts.layer,
38
- event_type: opts.eventType,
39
- severity: opts.severity,
40
- summary: opts.summary,
41
- detail: opts.detail ?? null,
42
- iteration: opts.iteration ?? null,
43
- };
44
- this.buffer.push(event);
45
- if (SIGNIFICANT_TYPES.has(opts.eventType) || this.buffer.length >= MAX_BATCH_SIZE) {
46
- void this.flush();
47
- }
48
- }
49
- async flush() {
50
- if (this.inFlight || this.buffer.length === 0)
51
- return;
52
- this.inFlight = true;
53
- const batch = this.buffer.splice(0, MAX_BATCH_SIZE);
54
- try {
55
- const res = await fetch(`${this.apiBaseUrl}/projects/${this.projectId}/pipeline-events`, {
56
- method: 'POST',
57
- headers: {
58
- 'Content-Type': 'application/json',
59
- Authorization: `Bearer ${this.apiToken}`,
60
- },
61
- body: JSON.stringify({ events: batch }),
62
- });
63
- if (!res.ok) {
64
- if (res.status >= 500) {
65
- // Retryable server error — re-queue
66
- this.buffer.unshift(...batch);
67
- if (this.buffer.length > PipelineEventEmitter.MAX_BUFFER_SIZE) {
68
- this.buffer.splice(0, this.buffer.length - PipelineEventEmitter.MAX_BUFFER_SIZE);
69
- }
70
- }
71
- else {
72
- // Permanent client error (4xx) — drop batch, log
73
- console.error(`[event-emitter] Dropping ${batch.length} events: HTTP ${res.status}`);
74
- }
75
- }
76
- }
77
- catch {
78
- this.buffer.unshift(...batch);
79
- if (this.buffer.length > PipelineEventEmitter.MAX_BUFFER_SIZE) {
80
- this.buffer.splice(0, this.buffer.length - PipelineEventEmitter.MAX_BUFFER_SIZE);
81
- }
82
- }
83
- finally {
84
- this.inFlight = false;
85
- }
86
- }
87
- async close() {
88
- this.closed = true;
89
- if (this.flushTimer) {
90
- clearInterval(this.flushTimer);
91
- this.flushTimer = null;
92
- }
93
- // Wait for any in-flight flush to settle
94
- while (this.inFlight) {
95
- await new Promise((r) => setTimeout(r, 50));
96
- }
97
- await this.flush();
98
- }
99
- }
100
- //# sourceMappingURL=event-emitter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-emitter.js","sourceRoot":"","sources":["../../src/lib/event-emitter.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- export interface PipelineEvent {
2
- type: 'ticket:created' | 'ticket:moved' | 'ticket:updated' | 'ticket:archived' | 'ticket:deleted';
3
- ticketId: string;
4
- columnId: string | null;
5
- }
6
- export type EventHandler = (event: PipelineEvent) => void | Promise<void>;
7
- export type ErrorHandler = (event: PipelineEvent, error: unknown) => void;
8
- interface EventQueueOptions {
9
- drainRateMs?: number;
10
- onError?: ErrorHandler;
11
- }
12
- export declare class EventQueue {
13
- private queue;
14
- private handler;
15
- private onError;
16
- private timer;
17
- private drainRateMs;
18
- private running;
19
- private draining;
20
- constructor(handler: EventHandler, options?: EventQueueOptions);
21
- start(): void;
22
- stop(): void;
23
- push(event: PipelineEvent): void;
24
- pushPriority(event: PipelineEvent): void;
25
- private drain;
26
- }
27
- export {};
28
- //# sourceMappingURL=event-queue.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-queue.d.ts","sourceRoot":"","sources":["../../src/lib/event-queue.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,gBAAgB,GAAG,cAAc,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;IAClG,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC1E,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;AAE1E,UAAU,iBAAiB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB;AAMD,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,YAAY,EAAE,OAAO,GAAE,iBAAsB;IAMlE,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,IAAI;IASZ,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAWhC,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;YAW1B,KAAK;CAiBpB"}
@@ -1,73 +0,0 @@
1
- function isDestructive(type) {
2
- return type === 'ticket:archived' || type === 'ticket:deleted';
3
- }
4
- export class EventQueue {
5
- queue = new Map(); // keyed by ticketId for coalescing
6
- handler;
7
- onError;
8
- timer = null;
9
- drainRateMs;
10
- running = false;
11
- draining = false;
12
- constructor(handler, options = {}) {
13
- this.handler = handler;
14
- this.drainRateMs = options.drainRateMs ?? 100;
15
- this.onError = options.onError ?? ((event, error) => console.error('EventQueue handler error for event', event, error));
16
- }
17
- start() {
18
- this.running = true;
19
- this.timer = setInterval(() => void this.drain(), this.drainRateMs);
20
- }
21
- stop() {
22
- this.running = false;
23
- if (this.timer) {
24
- clearInterval(this.timer);
25
- this.timer = null;
26
- }
27
- this.queue.clear();
28
- }
29
- push(event) {
30
- if (!this.running)
31
- return;
32
- // Coalesce move/create events (latest wins), but never overwrite
33
- // destructive events (archived/deleted) with non-destructive ones.
34
- const existing = this.queue.get(event.ticketId);
35
- if (existing && isDestructive(existing.type) && !isDestructive(event.type)) {
36
- return; // don't overwrite a deletion with a move
37
- }
38
- this.queue.set(event.ticketId, event);
39
- }
40
- pushPriority(event) {
41
- if (!this.running)
42
- return;
43
- // Priority events bypass the queue — execute immediately
44
- // Also remove from queue to prevent double-processing
45
- this.queue.delete(event.ticketId);
46
- const result = this.handler(event);
47
- if (result instanceof Promise) {
48
- result.catch((error) => this.onError(event, error));
49
- }
50
- }
51
- async drain() {
52
- if (this.draining)
53
- return;
54
- if (this.queue.size === 0)
55
- return;
56
- this.draining = true;
57
- try {
58
- // Take the first event (FIFO from Map insertion order)
59
- const [ticketId, event] = this.queue.entries().next().value;
60
- this.queue.delete(ticketId);
61
- try {
62
- await this.handler(event);
63
- }
64
- catch (error) {
65
- this.onError(event, error);
66
- }
67
- }
68
- finally {
69
- this.draining = false;
70
- }
71
- }
72
- }
73
- //# sourceMappingURL=event-queue.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"event-queue.js","sourceRoot":"","sources":["../../src/lib/event-queue.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- import { type GateConfig, type GateDefinition } from '@kantban/types';
2
- export declare const VALID_BRANCH_RE: RegExp;
3
- export declare function parseGateConfig(yamlContent: string): GateConfig;
4
- export declare function resolveGatesForColumn(config: GateConfig, columnName: string): GateDefinition[];
5
- export declare function resolveGatesForColumnWithWorktree(config: GateConfig, columnName: string, worktreeEnabled: boolean, integrationBranch?: string): GateDefinition[];
6
- export declare function parseTimeout(timeout: string | undefined): number;
7
- //# sourceMappingURL=gate-config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gate-config.d.ts","sourceRoot":"","sources":["../../src/lib/gate-config.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAIxF,eAAO,MAAM,eAAe,QAAmC,CAAC;AAYhE,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAI/D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,EAAE,CAwB9F;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,UAAU,EAClB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,OAAO,EACxB,iBAAiB,GAAE,MAAe,GACjC,cAAc,EAAE,CAgBlB;AAID,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAOhE"}
@@ -1,68 +0,0 @@
1
- import { load, JSON_SCHEMA } from 'js-yaml';
2
- import { GateConfigSchema } from '@kantban/types';
3
- const DANGEROUS_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
4
- export const VALID_BRANCH_RE = /^[a-zA-Z0-9][a-zA-Z0-9._\-/]*$/;
5
- function assertNoPrototypePollutionKeys(value, depth = 0) {
6
- if (depth > 20 || value === null || typeof value !== 'object')
7
- return;
8
- for (const key of Object.keys(value)) {
9
- if (DANGEROUS_KEYS.has(key)) {
10
- throw new Error(`Unsafe key "${key}" detected in YAML input`);
11
- }
12
- assertNoPrototypePollutionKeys(value[key], depth + 1);
13
- }
14
- }
15
- export function parseGateConfig(yamlContent) {
16
- const raw = load(yamlContent, { schema: JSON_SCHEMA });
17
- assertNoPrototypePollutionKeys(raw);
18
- return GateConfigSchema.parse(raw);
19
- }
20
- export function resolveGatesForColumn(config, columnName) {
21
- const lowerName = columnName.toLowerCase();
22
- // Find column override (case-insensitive)
23
- const overrideKey = config.columns
24
- ? Object.keys(config.columns).find((k) => k.toLowerCase() === lowerName)
25
- : undefined;
26
- const override = overrideKey ? config.columns[overrideKey] : undefined;
27
- if (!override) {
28
- return [...config.default];
29
- }
30
- if (!override.extend) {
31
- if (override.gates.length === 0) {
32
- console.error(` [warn] Column "${columnName}" has extend:false with no gates — all gate enforcement disabled for this column`);
33
- }
34
- return [...override.gates];
35
- }
36
- // Extend: default gates + column gates, column overrides by name
37
- const overrideNames = new Set(override.gates.map((g) => g.name));
38
- const merged = config.default.filter((g) => !overrideNames.has(g.name));
39
- return [...merged, ...override.gates];
40
- }
41
- export function resolveGatesForColumnWithWorktree(config, columnName, worktreeEnabled, integrationBranch = 'main') {
42
- const gates = resolveGatesForColumn(config, columnName);
43
- if (!worktreeEnabled)
44
- return gates;
45
- if (!VALID_BRANCH_RE.test(integrationBranch)) {
46
- throw new Error(`Invalid branch name for worktree merge gate: "${integrationBranch}"`);
47
- }
48
- const mergeGate = {
49
- name: '__worktree_merge',
50
- run: `git merge '${integrationBranch}' --no-edit`,
51
- required: true,
52
- timeout: '30s',
53
- };
54
- return [mergeGate, ...gates];
55
- }
56
- const DEFAULT_TIMEOUT_MS = 60_000;
57
- export function parseTimeout(timeout) {
58
- if (!timeout)
59
- return DEFAULT_TIMEOUT_MS;
60
- const match = timeout.match(/^(\d+)(s|m)$/);
61
- if (!match)
62
- return DEFAULT_TIMEOUT_MS;
63
- const value = parseInt(match[1], 10);
64
- if (value <= 0)
65
- return DEFAULT_TIMEOUT_MS;
66
- return match[2] === 'm' ? value * 60_000 : value * 1_000;
67
- }
68
- //# sourceMappingURL=gate-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gate-config.js","sourceRoot":"","sources":["../../src/lib/gate-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAwC,MAAM,gBAAgB,CAAC;AAExF,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC,CAAC;AAE1E,MAAM,CAAC,MAAM,eAAe,GAAG,gCAAgC,CAAC;AAEhE,SAAS,8BAA8B,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC;IAC/D,IAAI,KAAK,GAAG,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO;IACtE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAe,CAAC,EAAE,CAAC;QAC/C,IAAI,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,eAAe,GAAG,0BAA0B,CAAC,CAAC;QAChE,CAAC;QACD,8BAA8B,CAAE,KAAiC,CAAC,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACrF,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IACvD,8BAA8B,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAkB,EAAE,UAAkB;IAC1E,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IAE3C,0CAA0C;IAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO;QAChC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC;QACxE,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,OAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAExE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,oBAAoB,UAAU,kFAAkF,CAAC,CAAC;QAClI,CAAC;QACD,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,iEAAiE;IACjE,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,iCAAiC,CAC/C,MAAkB,EAClB,UAAkB,EAClB,eAAwB,EACxB,oBAA4B,MAAM;IAElC,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,eAAe;QAAE,OAAO,KAAK,CAAC;IAEnC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,iDAAiD,iBAAiB,GAAG,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,SAAS,GAAmB;QAChC,IAAI,EAAE,kBAAkB;QACxB,GAAG,EAAE,cAAc,iBAAiB,aAAa;QACjD,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,KAAK;KACf,CAAC;IAEF,OAAO,CAAC,SAAS,EAAE,GAAG,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,MAAM,UAAU,YAAY,CAAC,OAA2B;IACtD,IAAI,CAAC,OAAO;QAAE,OAAO,kBAAkB,CAAC;IACxC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK;QAAE,OAAO,kBAAkB,CAAC;IACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAE,EAAE,EAAE,CAAC,CAAC;IACtC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,kBAAkB,CAAC;IAC1C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3D,CAAC"}
@@ -1,16 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * gate-proxy-server.ts — MCP stdio server for gate enforcement.
4
- *
5
- * Spawned by the pipeline orchestrator as a child process. Reads gate config
6
- * from env vars, instantiates GateProxy, and exposes three MCP tools over
7
- * JSON-RPC on stdin/stdout:
8
- *
9
- * - kantban_run_gates — Run column gates and report results
10
- * - kantban_move_ticket — Run gates then forward move to KantBan API
11
- * - kantban_complete_task — Run gates then forward complete to KantBan API
12
- *
13
- * Uses raw JSON-RPC (no @modelcontextprotocol/sdk dependency).
14
- */
15
- export {};
16
- //# sourceMappingURL=gate-proxy-server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gate-proxy-server.d.ts","sourceRoot":"","sources":["../../src/lib/gate-proxy-server.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;GAYG"}