kantban-cli 0.1.36 → 0.1.38
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-YFBFQAFI.js → chunk-2CY5OPZN.js} +9 -5
- package/dist/{chunk-YFBFQAFI.js.map → chunk-2CY5OPZN.js.map} +1 -1
- package/dist/chunk-5ZU2OOES.js +107 -0
- package/dist/chunk-5ZU2OOES.js.map +1 -0
- package/dist/{chunk-GCDCGOWL.js → chunk-MKKHLFA5.js} +2 -2
- package/dist/{cron-HKGLRBVM.js → cron-3R2UWFO7.js} +3 -3
- package/dist/index.js +4 -4
- package/dist/lib/gate-proxy-server.js +2 -2
- package/dist/{pipeline-N7Z43P6P.js → pipeline-IAKINX5A.js} +16 -11
- package/dist/pipeline-IAKINX5A.js.map +1 -0
- package/dist/{work-RECDDPXT.js → work-45GILGKD.js} +7 -5
- package/dist/work-45GILGKD.js.map +1 -0
- package/package.json +1 -1
- package/dist/chunk-4VT3TGJ5.js +0 -68
- package/dist/chunk-4VT3TGJ5.js.map +0 -1
- package/dist/pipeline-N7Z43P6P.js.map +0 -1
- package/dist/work-RECDDPXT.js.map +0 -1
- /package/dist/{chunk-GCDCGOWL.js.map → chunk-MKKHLFA5.js.map} +0 -0
- /package/dist/{cron-HKGLRBVM.js.map → cron-3R2UWFO7.js.map} +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
crossSpawnOptions
|
|
3
|
-
|
|
2
|
+
crossSpawnOptions,
|
|
3
|
+
resolveCommand
|
|
4
|
+
} from "./chunk-5ZU2OOES.js";
|
|
4
5
|
|
|
5
6
|
// src/commands/work.ts
|
|
6
7
|
import { spawn } from "child_process";
|
|
@@ -63,10 +64,11 @@ async function runWork(client, args) {
|
|
|
63
64
|
console.log(prompt);
|
|
64
65
|
return;
|
|
65
66
|
}
|
|
66
|
-
const
|
|
67
|
+
const [cmd, prefixArgs] = resolveCommand("claude");
|
|
68
|
+
const child = spawn(cmd, [...prefixArgs, "-p", prompt], {
|
|
67
69
|
stdio: "inherit",
|
|
68
70
|
env: { ...process.env },
|
|
69
|
-
...crossSpawnOptions()
|
|
71
|
+
...prefixArgs.length > 0 ? {} : crossSpawnOptions()
|
|
70
72
|
});
|
|
71
73
|
await new Promise((resolve) => {
|
|
72
74
|
child.on("error", (err) => {
|
|
@@ -83,4 +85,4 @@ async function runWork(client, args) {
|
|
|
83
85
|
export {
|
|
84
86
|
runWork
|
|
85
87
|
};
|
|
86
|
-
//# sourceMappingURL=work-
|
|
88
|
+
//# sourceMappingURL=work-45GILGKD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/work.ts"],"sourcesContent":["import { spawn } from 'node:child_process';\nimport type { KantBanCLIClient } from '../client.js';\nimport { crossSpawnOptions, resolveCommand } from '../lib/platform.js';\n\nfunction asRecord(val: unknown): Record<string, unknown> | undefined {\n return typeof val === 'object' && val !== null && !Array.isArray(val)\n ? (val as Record<string, unknown>)\n : undefined;\n}\n\nfunction asStringArray(val: unknown): string[] {\n return Array.isArray(val) ? val.map((v) => String(v)) : [];\n}\n\nexport async function runWork(client: KantBanCLIClient, args: string[]): Promise<void> {\n const [ticketId] = args;\n if (!ticketId) {\n console.error('Usage: kantban work <ticket-id> [--dry-run]');\n process.exit(1);\n }\n\n const projectId = process.env['KANTBAN_PROJECT_ID'];\n if (!projectId) {\n console.error('Error: KANTBAN_PROJECT_ID required');\n process.exit(1);\n }\n\n // Fetch ticket-scope context\n const context = await client.get<Record<string, unknown>>(\n `/projects/${projectId}/pipeline-context`,\n { ticketId },\n );\n\n const ticket = asRecord(context['ticket']);\n const signals = asStringArray(context['signals']);\n const rules = context['transition_rules'] ? String(context['transition_rules']) : undefined;\n\n const title = String(ticket?.['title'] ?? 'Untitled');\n const description = ticket?.['description'] ? String(ticket['description']) : '';\n const ticketIdStr = String(ticket?.['id'] ?? ticketId);\n\n // Build prompt for Claude\n const promptLines = [\n `# Task: ${title}`,\n '',\n ];\n\n if (description) {\n promptLines.push(description, '');\n }\n\n if (signals.length > 0) {\n promptLines.push('## Signals');\n for (const s of signals) {\n promptLines.push(`- ${s}`);\n }\n promptLines.push('');\n }\n\n if (rules) {\n promptLines.push('## Transition Rules', rules, '');\n }\n\n const toolPrefix = context['tool_prefix'] ? String(context['tool_prefix']) : 'kantban_';\n promptLines.push(\n `## Tool Prefix: ${toolPrefix}`,\n `## Ticket ID: ${ticketIdStr}`,\n `## Project ID: ${projectId}`,\n );\n\n const prompt = promptLines.join('\\n');\n\n console.log(`Starting Claude session for: ${title}`);\n console.log(`Ticket: ${ticketIdStr}`);\n\n // Check for dry run\n const dryRun = args.includes('--dry-run');\n if (dryRun) {\n console.log('\\n--- Prompt (dry run) ---');\n console.log(prompt);\n return;\n }\n\n // Spawn Claude with the prompt — resolveCommand bypasses cmd.exe 8191-char limit\n const [cmd, prefixArgs] = resolveCommand('claude');\n const child = spawn(cmd, [...prefixArgs, '-p', prompt], {\n stdio: 'inherit',\n env: { ...process.env },\n ...(prefixArgs.length > 0 ? {} : crossSpawnOptions()),\n });\n\n await new Promise<void>((resolve) => {\n child.on('error', (err) => {\n console.error(`Failed to start claude: ${err.message}`);\n process.exitCode = 1;\n resolve();\n });\n child.on('exit', (code) => {\n process.exitCode = code ?? 0;\n resolve();\n });\n });\n}\n"],"mappings":";;;;;;AAAA,SAAS,aAAa;AAItB,SAAS,SAAS,KAAmD;AACnE,SAAO,OAAO,QAAQ,YAAY,QAAQ,QAAQ,CAAC,MAAM,QAAQ,GAAG,IAC/D,MACD;AACN;AAEA,SAAS,cAAc,KAAwB;AAC7C,SAAO,MAAM,QAAQ,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC;AAC3D;AAEA,eAAsB,QAAQ,QAA0B,MAA+B;AACrF,QAAM,CAAC,QAAQ,IAAI;AACnB,MAAI,CAAC,UAAU;AACb,YAAQ,MAAM,6CAA6C;AAC3D,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,YAAY,QAAQ,IAAI,oBAAoB;AAClD,MAAI,CAAC,WAAW;AACd,YAAQ,MAAM,oCAAoC;AAClD,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,QAAM,UAAU,MAAM,OAAO;AAAA,IAC3B,aAAa,SAAS;AAAA,IACtB,EAAE,SAAS;AAAA,EACb;AAEA,QAAM,SAAS,SAAS,QAAQ,QAAQ,CAAC;AACzC,QAAM,UAAU,cAAc,QAAQ,SAAS,CAAC;AAChD,QAAM,QAAQ,QAAQ,kBAAkB,IAAI,OAAO,QAAQ,kBAAkB,CAAC,IAAI;AAElF,QAAM,QAAQ,OAAO,SAAS,OAAO,KAAK,UAAU;AACpD,QAAM,cAAc,SAAS,aAAa,IAAI,OAAO,OAAO,aAAa,CAAC,IAAI;AAC9E,QAAM,cAAc,OAAO,SAAS,IAAI,KAAK,QAAQ;AAGrD,QAAM,cAAc;AAAA,IAClB,WAAW,KAAK;AAAA,IAChB;AAAA,EACF;AAEA,MAAI,aAAa;AACf,gBAAY,KAAK,aAAa,EAAE;AAAA,EAClC;AAEA,MAAI,QAAQ,SAAS,GAAG;AACtB,gBAAY,KAAK,YAAY;AAC7B,eAAW,KAAK,SAAS;AACvB,kBAAY,KAAK,KAAK,CAAC,EAAE;AAAA,IAC3B;AACA,gBAAY,KAAK,EAAE;AAAA,EACrB;AAEA,MAAI,OAAO;AACT,gBAAY,KAAK,uBAAuB,OAAO,EAAE;AAAA,EACnD;AAEA,QAAM,aAAa,QAAQ,aAAa,IAAI,OAAO,QAAQ,aAAa,CAAC,IAAI;AAC7E,cAAY;AAAA,IACV,mBAAmB,UAAU;AAAA,IAC7B,iBAAiB,WAAW;AAAA,IAC5B,kBAAkB,SAAS;AAAA,EAC7B;AAEA,QAAM,SAAS,YAAY,KAAK,IAAI;AAEpC,UAAQ,IAAI,gCAAgC,KAAK,EAAE;AACnD,UAAQ,IAAI,WAAW,WAAW,EAAE;AAGpC,QAAM,SAAS,KAAK,SAAS,WAAW;AACxC,MAAI,QAAQ;AACV,YAAQ,IAAI,4BAA4B;AACxC,YAAQ,IAAI,MAAM;AAClB;AAAA,EACF;AAGA,QAAM,CAAC,KAAK,UAAU,IAAI,eAAe,QAAQ;AACjD,QAAM,QAAQ,MAAM,KAAK,CAAC,GAAG,YAAY,MAAM,MAAM,GAAG;AAAA,IACtD,OAAO;AAAA,IACP,KAAK,EAAE,GAAG,QAAQ,IAAI;AAAA,IACtB,GAAI,WAAW,SAAS,IAAI,CAAC,IAAI,kBAAkB;AAAA,EACrD,CAAC;AAED,QAAM,IAAI,QAAc,CAAC,YAAY;AACnC,UAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,cAAQ,MAAM,2BAA2B,IAAI,OAAO,EAAE;AACtD,cAAQ,WAAW;AACnB,cAAQ;AAAA,IACV,CAAC;AACD,UAAM,GAAG,QAAQ,CAAC,SAAS;AACzB,cAAQ,WAAW,QAAQ;AAC3B,cAAQ;AAAA,IACV,CAAC;AAAA,EACH,CAAC;AACH;","names":[]}
|
package/package.json
CHANGED
package/dist/chunk-4VT3TGJ5.js
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
// src/lib/platform.ts
|
|
2
|
-
import { platform } from "os";
|
|
3
|
-
import { execFileSync } from "child_process";
|
|
4
|
-
var IS_WINDOWS = platform() === "win32";
|
|
5
|
-
function normalizeEol(text) {
|
|
6
|
-
return text.replace(/\r\n|\r/g, "\n");
|
|
7
|
-
}
|
|
8
|
-
function shellArgs() {
|
|
9
|
-
if (IS_WINDOWS) {
|
|
10
|
-
const comspec = process.env.COMSPEC || "cmd.exe";
|
|
11
|
-
if (/pwsh|powershell/i.test(comspec)) {
|
|
12
|
-
return [comspec, ["-NoProfile", "-Command"]];
|
|
13
|
-
}
|
|
14
|
-
return [comspec, ["/c"]];
|
|
15
|
-
}
|
|
16
|
-
return ["/bin/sh", ["-c"]];
|
|
17
|
-
}
|
|
18
|
-
function crossSpawnOptions(opts) {
|
|
19
|
-
return { ...opts ?? {}, shell: IS_WINDOWS };
|
|
20
|
-
}
|
|
21
|
-
function killProcessTree(pid, signal = "SIGTERM") {
|
|
22
|
-
if (IS_WINDOWS) {
|
|
23
|
-
try {
|
|
24
|
-
execFileSync("taskkill", ["/pid", String(pid), "/t", "/f"], { stdio: "pipe" });
|
|
25
|
-
return;
|
|
26
|
-
} catch {
|
|
27
|
-
}
|
|
28
|
-
try {
|
|
29
|
-
process.kill(pid);
|
|
30
|
-
} catch {
|
|
31
|
-
}
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
try {
|
|
35
|
-
process.kill(-pid, signal);
|
|
36
|
-
return;
|
|
37
|
-
} catch {
|
|
38
|
-
}
|
|
39
|
-
try {
|
|
40
|
-
process.kill(pid, signal);
|
|
41
|
-
} catch {
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
function npxCommand() {
|
|
45
|
-
return IS_WINDOWS ? "npx.cmd" : "npx";
|
|
46
|
-
}
|
|
47
|
-
function defaultPath() {
|
|
48
|
-
if (IS_WINDOWS) {
|
|
49
|
-
return [
|
|
50
|
-
process.env.SystemRoot ? `${process.env.SystemRoot}\\System32` : "C:\\Windows\\System32",
|
|
51
|
-
process.env.SystemRoot || "C:\\Windows",
|
|
52
|
-
"C:\\Program Files\\nodejs",
|
|
53
|
-
process.env.APPDATA ? `${process.env.APPDATA}\\npm` : ""
|
|
54
|
-
].filter(Boolean).join(";");
|
|
55
|
-
}
|
|
56
|
-
return "/usr/local/bin:/usr/bin:/bin";
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export {
|
|
60
|
-
IS_WINDOWS,
|
|
61
|
-
normalizeEol,
|
|
62
|
-
shellArgs,
|
|
63
|
-
crossSpawnOptions,
|
|
64
|
-
killProcessTree,
|
|
65
|
-
npxCommand,
|
|
66
|
-
defaultPath
|
|
67
|
-
};
|
|
68
|
-
//# sourceMappingURL=chunk-4VT3TGJ5.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/lib/platform.ts"],"sourcesContent":["import { platform } from 'node:os';\nimport { execFileSync } from 'node:child_process';\n\nexport const IS_WINDOWS = platform() === 'win32';\n\n/** Normalize line endings to Unix-style (\\n). Strips \\r\\n and bare \\r. */\nexport function normalizeEol(text: string): string {\n return text.replace(/\\r\\n|\\r/g, '\\n');\n}\n\n/** Returns [shellExecutable, argsPrefix] for running shell commands.\n * Unix: ['/bin/sh', ['-c']] Windows: [cmd.exe /c] or [pwsh -NoProfile -Command] */\nexport function shellArgs(): [string, string[]] {\n if (IS_WINDOWS) {\n const comspec = process.env.COMSPEC || 'cmd.exe';\n // Detect PowerShell — uses -Command instead of /c\n if (/pwsh|powershell/i.test(comspec)) {\n return [comspec, ['-NoProfile', '-Command']];\n }\n return [comspec, ['/c']];\n }\n return ['/bin/sh', ['-c']];\n}\n\n/** Returns spawn options with shell:true on Windows for .cmd/.bat resolution. */\nexport function crossSpawnOptions<T extends Record<string, unknown>>(opts?: T): T & { shell: boolean } {\n return { ...(opts ?? {} as T), shell: IS_WINDOWS } as T & { shell: boolean };\n}\n\n/** Kill a process and its children. On Unix, tries process group first.\n * On Windows, uses `taskkill /T` for tree kill. Never throws. */\nexport function killProcessTree(pid: number, signal: NodeJS.Signals = 'SIGTERM'): void {\n if (IS_WINDOWS) {\n // taskkill /T kills the process tree; /F forces termination\n try { execFileSync('taskkill', ['/pid', String(pid), '/t', '/f'], { stdio: 'pipe' }); return; } catch { /* fall through */ }\n try { process.kill(pid); } catch { /* already dead */ }\n return;\n }\n // Unix: try process group kill first\n try { process.kill(-pid, signal); return; } catch { /* fall through */ }\n try { process.kill(pid, signal); } catch { /* already dead */ }\n}\n\n/** Returns platform-appropriate npx command ('npx' on Unix, 'npx.cmd' on Windows). */\nexport function npxCommand(): string {\n return IS_WINDOWS ? 'npx.cmd' : 'npx';\n}\n\n/** Returns platform-appropriate default PATH when process.env.PATH is undefined. */\nexport function defaultPath(): string {\n if (IS_WINDOWS) {\n return [\n process.env.SystemRoot ? `${process.env.SystemRoot}\\\\System32` : 'C:\\\\Windows\\\\System32',\n process.env.SystemRoot || 'C:\\\\Windows',\n 'C:\\\\Program Files\\\\nodejs',\n process.env.APPDATA ? `${process.env.APPDATA}\\\\npm` : '',\n ].filter(Boolean).join(';');\n }\n return '/usr/local/bin:/usr/bin:/bin';\n}\n"],"mappings":";AAAA,SAAS,gBAAgB;AACzB,SAAS,oBAAoB;AAEtB,IAAM,aAAa,SAAS,MAAM;AAGlC,SAAS,aAAa,MAAsB;AACjD,SAAO,KAAK,QAAQ,YAAY,IAAI;AACtC;AAIO,SAAS,YAAgC;AAC9C,MAAI,YAAY;AACd,UAAM,UAAU,QAAQ,IAAI,WAAW;AAEvC,QAAI,mBAAmB,KAAK,OAAO,GAAG;AACpC,aAAO,CAAC,SAAS,CAAC,cAAc,UAAU,CAAC;AAAA,IAC7C;AACA,WAAO,CAAC,SAAS,CAAC,IAAI,CAAC;AAAA,EACzB;AACA,SAAO,CAAC,WAAW,CAAC,IAAI,CAAC;AAC3B;AAGO,SAAS,kBAAqD,MAAkC;AACrG,SAAO,EAAE,GAAI,QAAQ,CAAC,GAAS,OAAO,WAAW;AACnD;AAIO,SAAS,gBAAgB,KAAa,SAAyB,WAAiB;AACrF,MAAI,YAAY;AAEd,QAAI;AAAE,mBAAa,YAAY,CAAC,QAAQ,OAAO,GAAG,GAAG,MAAM,IAAI,GAAG,EAAE,OAAO,OAAO,CAAC;AAAG;AAAA,IAAQ,QAAQ;AAAA,IAAqB;AAC3H,QAAI;AAAE,cAAQ,KAAK,GAAG;AAAA,IAAG,QAAQ;AAAA,IAAqB;AACtD;AAAA,EACF;AAEA,MAAI;AAAE,YAAQ,KAAK,CAAC,KAAK,MAAM;AAAG;AAAA,EAAQ,QAAQ;AAAA,EAAqB;AACvE,MAAI;AAAE,YAAQ,KAAK,KAAK,MAAM;AAAA,EAAG,QAAQ;AAAA,EAAqB;AAChE;AAGO,SAAS,aAAqB;AACnC,SAAO,aAAa,YAAY;AAClC;AAGO,SAAS,cAAsB;AACpC,MAAI,YAAY;AACd,WAAO;AAAA,MACL,QAAQ,IAAI,aAAa,GAAG,QAAQ,IAAI,UAAU,eAAe;AAAA,MACjE,QAAQ,IAAI,cAAc;AAAA,MAC1B;AAAA,MACA,QAAQ,IAAI,UAAU,GAAG,QAAQ,IAAI,OAAO,UAAU;AAAA,IACxD,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,EAC5B;AACA,SAAO;AACT;","names":[]}
|