kanban 0.1.9 → 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/README.md +18 -16
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/mcp.js +3 -3
- package/dist/commands/mcp.js.map +1 -1
- package/dist/config/runtime-config.js +1 -1
- package/dist/config/runtime-config.js.map +1 -1
- package/dist/core/agent-catalog.js +10 -10
- package/dist/core/agent-catalog.js.map +1 -1
- package/dist/core/api-contract.d.ts +11 -21
- package/dist/core/api-contract.d.ts.map +1 -1
- package/dist/core/api-contract.js +6 -9
- package/dist/core/api-contract.js.map +1 -1
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/terminal/agent-registry.d.ts.map +1 -1
- package/dist/terminal/agent-registry.js +3 -66
- package/dist/terminal/agent-registry.js.map +1 -1
- package/dist/terminal/agent-session-adapters.d.ts.map +1 -1
- package/dist/terminal/agent-session-adapters.js +10 -2
- package/dist/terminal/agent-session-adapters.js.map +1 -1
- package/dist/terminal/command-discovery.d.ts +8 -0
- package/dist/terminal/command-discovery.d.ts.map +1 -0
- package/dist/terminal/command-discovery.js +69 -0
- package/dist/terminal/command-discovery.js.map +1 -0
- package/dist/terminal/session-manager.d.ts.map +1 -1
- package/dist/terminal/session-manager.js +22 -80
- package/dist/terminal/session-manager.js.map +1 -1
- package/dist/terminal/task-start-setup-detection.d.ts +3 -0
- package/dist/terminal/task-start-setup-detection.d.ts.map +1 -0
- package/dist/terminal/task-start-setup-detection.js +164 -0
- package/dist/terminal/task-start-setup-detection.js.map +1 -0
- package/dist/terminal/terminal-protocol-filter.d.ts +16 -0
- package/dist/terminal/terminal-protocol-filter.d.ts.map +1 -0
- package/dist/terminal/terminal-protocol-filter.js +128 -0
- package/dist/terminal/terminal-protocol-filter.js.map +1 -0
- package/dist/trpc/app-router.d.ts +11 -17
- package/dist/trpc/app-router.d.ts.map +1 -1
- package/dist/trpc/app-router.js +1 -7
- package/dist/trpc/app-router.js.map +1 -1
- package/dist/trpc/runtime-api.d.ts.map +1 -1
- package/dist/trpc/runtime-api.js +0 -51
- package/dist/trpc/runtime-api.js.map +1 -1
- package/dist/web-ui/assets/{allPaths-DOTpTORM.js → allPaths-TTLanb7r.js} +1 -1
- package/dist/web-ui/assets/{allPathsLoader-QnqMU9zv.js → allPathsLoader-BiKoVO_H.js} +3 -3
- package/dist/web-ui/assets/{index-DZcGgUMk.js → index-B9i9vNNM.js} +10234 -10051
- package/dist/web-ui/assets/{splitPathsBySizeLoader-BpwicruJ.js → splitPathsBySizeLoader-D_nSKPlk.js} +1 -1
- package/dist/web-ui/index.html +1 -1
- package/package.json +1 -1
- package/dist/terminal/slash-commands.d.ts +0 -7
- package/dist/terminal/slash-commands.d.ts.map +0 -1
- package/dist/terminal/slash-commands.js +0 -322
- package/dist/terminal/slash-commands.js.map +0 -1
package/README.md
CHANGED
|
@@ -42,27 +42,29 @@ npx kanban
|
|
|
42
42
|
3. Create tasks, link dependencies, hit the play button, and watch agents work in parallel. You can even use Kanban MCP to tell an agent to create parallelizable tasks and links in clever ways to get projects done quickly.
|
|
43
43
|
4. When they finish, you review diffs, leave comments, and commit or make a PR.
|
|
44
44
|
|
|
45
|
+
## MCP Setup
|
|
46
|
+
|
|
45
47
|
Use MCP to let the agent add and start tasks on the kanban board itself, decomposing large work into parallelizable linked tasks in clever ways to get work done quicker.
|
|
46
48
|
|
|
49
|
+
<details>
|
|
50
|
+
<summary>Install instructions</summary>
|
|
51
|
+
|
|
52
|
+
Claude Code:
|
|
53
|
+
|
|
47
54
|
```bash
|
|
48
|
-
claude mcp add --transport stdio --scope user kanban -- kanban mcp
|
|
55
|
+
claude mcp add --transport stdio --scope user kanban -- npx -y kanban mcp
|
|
49
56
|
```
|
|
50
57
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
"args": ["mcp"],
|
|
62
|
-
"transportType": "stdio"
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
58
|
+
Codex:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
codex mcp add kanban -- npx -y kanban mcp
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Cline CLI:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
cline mcp add kanban -- npx -y kanban mcp
|
|
66
68
|
```
|
|
67
69
|
|
|
68
70
|
</details>
|
package/dist/cli.js
CHANGED
|
@@ -108,7 +108,7 @@ function printHelp() {
|
|
|
108
108
|
console.log("");
|
|
109
109
|
console.log("Usage:");
|
|
110
110
|
console.log(" kanban [--agent <id>] [--port <number|auto>] [--no-open] [--help] [--version]");
|
|
111
|
-
console.log(" kanban mcp");
|
|
111
|
+
console.log(" npx -y kanban mcp");
|
|
112
112
|
console.log("");
|
|
113
113
|
console.log(`Runtime URL: ${getKanbanRuntimeOrigin()}`);
|
|
114
114
|
console.log(`Agent IDs: ${CLI_AGENT_IDS.join(", ")}`);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\nimport { spawn, spawnSync } from \"node:child_process\";\nimport { stat } from \"node:fs/promises\";\nimport { createServer as createNetServer } from \"node:net\";\nimport packageJson from \"../package.json\" with { type: \"json\" };\n\nimport { isHooksSubcommand, runHooksSubcommand } from \"./commands/hooks.js\";\nimport { isMcpSubcommand, runMcpSubcommand } from \"./commands/mcp.js\";\nimport { loadRuntimeConfig, updateRuntimeConfig } from \"./config/runtime-config.js\";\nimport type { RuntimeAgentId, RuntimeCommandRunResponse } from \"./core/api-contract.js\";\nimport { createGitProcessEnv } from \"./core/git-process-env.js\";\nimport {\n\tbuildKanbanRuntimeUrl,\n\tDEFAULT_KANBAN_RUNTIME_PORT,\n\tgetKanbanRuntimeOrigin,\n\tgetKanbanRuntimePort,\n\tparseRuntimePort,\n\tsetKanbanRuntimePort,\n} from \"./core/runtime-endpoint.js\";\nimport { resolveProjectInputPath } from \"./projects/project-path.js\";\nimport { openInBrowser } from \"./server/browser.js\";\nimport { createRuntimeServer } from \"./server/runtime-server.js\";\nimport { createRuntimeStateHub } from \"./server/runtime-state-hub.js\";\nimport { resolveInteractiveShellCommand } from \"./server/shell.js\";\nimport { shutdownRuntimeServer } from \"./server/shutdown-coordinator.js\";\nimport { collectProjectWorktreeTaskIdsForRemoval, createWorkspaceRegistry } from \"./server/workspace-registry.js\";\nimport { loadWorkspaceContext } from \"./state/workspace-state.js\";\nimport type { TerminalSessionManager } from \"./terminal/session-manager.js\";\nimport { autoUpdateOnStartup, runPendingAutoUpdateOnShutdown } from \"./update/auto-update.js\";\n\ninterface CliOptions {\n\thelp: boolean;\n\tversion: boolean;\n\tnoOpen: boolean;\n\tagent: RuntimeAgentId | null;\n\tport: { mode: \"fixed\"; value: number } | { mode: \"auto\" } | null;\n}\n\nconst CLI_AGENT_IDS: readonly RuntimeAgentId[] = [\"claude\", \"codex\", \"gemini\", \"opencode\", \"droid\", \"cline\"];\nconst KANBAN_VERSION = typeof packageJson.version === \"string\" ? packageJson.version : \"0.1.0\";\n\nfunction parseCliAgentId(value: string): RuntimeAgentId {\n\tconst normalized = value.trim().toLowerCase();\n\tif (\n\t\tnormalized === \"claude\" ||\n\t\tnormalized === \"codex\" ||\n\t\tnormalized === \"gemini\" ||\n\t\tnormalized === \"opencode\" ||\n\t\tnormalized === \"droid\" ||\n\t\tnormalized === \"cline\"\n\t) {\n\t\treturn normalized;\n\t}\n\tthrow new Error(`Invalid agent: ${value}. Expected one of: ${CLI_AGENT_IDS.join(\", \")}`);\n}\n\nfunction parseCliPortValue(rawValue: string): { mode: \"fixed\"; value: number } | { mode: \"auto\" } {\n\tconst normalized = rawValue.trim().toLowerCase();\n\tif (!normalized) {\n\t\tthrow new Error(\"Missing value for --port.\");\n\t}\n\tif (normalized === \"auto\") {\n\t\treturn { mode: \"auto\" };\n\t}\n\ttry {\n\t\treturn { mode: \"fixed\", value: parseRuntimePort(normalized) };\n\t} catch {\n\t\tthrow new Error(`Invalid port value: ${rawValue}. Expected an integer from 1-65535 or \"auto\".`);\n\t}\n}\n\nfunction parseCliOptions(argv: string[]): CliOptions {\n\tlet help = false;\n\tlet version = false;\n\tlet noOpen = false;\n\tlet agent: RuntimeAgentId | null = null;\n\tlet port: { mode: \"fixed\"; value: number } | { mode: \"auto\" } | null = null;\n\n\tfor (let index = 0; index < argv.length; index += 1) {\n\t\tconst arg = argv[index];\n\t\tif (arg === \"--help\" || arg === \"-h\") {\n\t\t\thelp = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (arg === \"--version\" || arg === \"-v\") {\n\t\t\tversion = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (arg === \"--no-open\") {\n\t\t\tnoOpen = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (arg === \"--agent\") {\n\t\t\tconst value = argv[index + 1];\n\t\t\tif (!value) {\n\t\t\t\tthrow new Error(\"Missing value for --agent.\");\n\t\t\t}\n\t\t\tagent = parseCliAgentId(value);\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (arg.startsWith(\"--agent=\")) {\n\t\t\tconst value = arg.slice(\"--agent=\".length);\n\t\t\tif (!value) {\n\t\t\t\tthrow new Error(\"Missing value for --agent.\");\n\t\t\t}\n\t\t\tagent = parseCliAgentId(value);\n\t\t\tcontinue;\n\t\t}\n\t\tif (arg === \"--port\") {\n\t\t\tconst value = argv[index + 1];\n\t\t\tif (!value) {\n\t\t\t\tthrow new Error(\"Missing value for --port.\");\n\t\t\t}\n\t\t\tport = parseCliPortValue(value);\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (arg.startsWith(\"--port=\")) {\n\t\t\tconst value = arg.slice(\"--port=\".length);\n\t\t\tif (!value) {\n\t\t\t\tthrow new Error(\"Missing value for --port.\");\n\t\t\t}\n\t\t\tport = parseCliPortValue(value);\n\t\t}\n\t}\n\n\treturn { help, version, noOpen, agent, port };\n}\n\nfunction printHelp(): void {\n\tconsole.log(\"kanban\");\n\tconsole.log(\"Local orchestration board for coding agents.\");\n\tconsole.log(\"\");\n\tconsole.log(\"Usage:\");\n\tconsole.log(\" kanban [--agent <id>] [--port <number|auto>] [--no-open] [--help] [--version]\");\n\tconsole.log(\" kanban mcp\");\n\tconsole.log(\"\");\n\tconsole.log(`Runtime URL: ${getKanbanRuntimeOrigin()}`);\n\tconsole.log(`Agent IDs: ${CLI_AGENT_IDS.join(\", \")}`);\n}\n\nasync function isPortAvailable(port: number): Promise<boolean> {\n\treturn await new Promise<boolean>((resolve) => {\n\t\tconst probe = createNetServer();\n\t\tprobe.once(\"error\", () => {\n\t\t\tresolve(false);\n\t\t});\n\t\tprobe.listen(port, \"127.0.0.1\", () => {\n\t\t\tprobe.close(() => {\n\t\t\t\tresolve(true);\n\t\t\t});\n\t\t});\n\t});\n}\n\nasync function findAvailableRuntimePort(startPort: number): Promise<number> {\n\tfor (let candidate = startPort; candidate <= 65535; candidate += 1) {\n\t\tif (await isPortAvailable(candidate)) {\n\t\t\treturn candidate;\n\t\t}\n\t}\n\tthrow new Error(\"No available runtime port found.\");\n}\n\nasync function applyRuntimePortOption(portOption: CliOptions[\"port\"]): Promise<number | null> {\n\tif (!portOption) {\n\t\treturn null;\n\t}\n\tif (portOption.mode === \"fixed\") {\n\t\tsetKanbanRuntimePort(portOption.value);\n\t\treturn portOption.value;\n\t}\n\tconst autoPort = await findAvailableRuntimePort(DEFAULT_KANBAN_RUNTIME_PORT);\n\tsetKanbanRuntimePort(autoPort);\n\treturn autoPort;\n}\n\nasync function persistCliAgentSelection(cwd: string, selectedAgentId: RuntimeAgentId): Promise<boolean> {\n\tconst currentRuntimeConfig = await loadRuntimeConfig(cwd);\n\tif (currentRuntimeConfig.selectedAgentId === selectedAgentId) {\n\t\treturn false;\n\t}\n\tawait updateRuntimeConfig(cwd, { selectedAgentId });\n\treturn true;\n}\n\nasync function assertPathIsDirectory(path: string): Promise<void> {\n\tconst info = await stat(path);\n\tif (!info.isDirectory()) {\n\t\tthrow new Error(`Project path is not a directory: ${path}`);\n\t}\n}\n\nasync function pathIsDirectory(path: string): Promise<boolean> {\n\ttry {\n\t\tconst info = await stat(path);\n\t\treturn info.isDirectory();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction hasGitRepository(path: string): boolean {\n\tconst result = spawnSync(\"git\", [\"rev-parse\", \"--is-inside-work-tree\"], {\n\t\tcwd: path,\n\t\tencoding: \"utf8\",\n\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\tenv: createGitProcessEnv(),\n\t});\n\treturn result.status === 0 && result.stdout.trim() === \"true\";\n}\n\nfunction pickDirectoryPathFromSystemDialog(): string | null {\n\tif (process.platform === \"darwin\") {\n\t\tconst result = spawnSync(\n\t\t\t\"osascript\",\n\t\t\t[\"-e\", 'POSIX path of (choose folder with prompt \"Select a project folder\")'],\n\t\t\t{\n\t\t\t\tencoding: \"utf8\",\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t},\n\t\t);\n\t\tif (result.status !== 0) {\n\t\t\treturn null;\n\t\t}\n\t\tconst selected = typeof result.stdout === \"string\" ? result.stdout.trim() : \"\";\n\t\treturn selected || null;\n\t}\n\n\tif (process.platform === \"linux\") {\n\t\tconst result = spawnSync(\"zenity\", [\"--file-selection\", \"--directory\", \"--title=Select project folder\"], {\n\t\t\tencoding: \"utf8\",\n\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t});\n\t\tif (result.status !== 0) {\n\t\t\treturn null;\n\t\t}\n\t\tconst selected = typeof result.stdout === \"string\" ? result.stdout.trim() : \"\";\n\t\treturn selected || null;\n\t}\n\n\treturn null;\n}\n\nfunction isAddressInUseError(error: unknown): error is NodeJS.ErrnoException {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"code\" in error &&\n\t\t(error as NodeJS.ErrnoException).code === \"EADDRINUSE\"\n\t);\n}\n\nasync function canReachKanbanServer(workspaceId: string | null): Promise<boolean> {\n\ttry {\n\t\tconst headers: Record<string, string> = {};\n\t\tif (workspaceId) {\n\t\t\theaders[\"x-kanban-workspace-id\"] = workspaceId;\n\t\t}\n\t\tconst response = await fetch(buildKanbanRuntimeUrl(\"/api/trpc/projects.list\"), {\n\t\t\tmethod: \"GET\",\n\t\t\theaders,\n\t\t\tsignal: AbortSignal.timeout(1_500),\n\t\t});\n\t\tif (response.status === 404) {\n\t\t\treturn false;\n\t\t}\n\t\tconst payload = (await response.json().catch(() => null)) as {\n\t\t\tresult?: { data?: unknown };\n\t\t\terror?: unknown;\n\t\t} | null;\n\t\treturn Boolean(payload && (payload.result || payload.error));\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function tryOpenExistingServer(noOpen: boolean): Promise<boolean> {\n\tlet workspaceId: string | null = null;\n\tif (hasGitRepository(process.cwd())) {\n\t\tconst context = await loadWorkspaceContext(process.cwd());\n\t\tworkspaceId = context.workspaceId;\n\t}\n\tconst running = await canReachKanbanServer(workspaceId);\n\tif (!running) {\n\t\treturn false;\n\t}\n\tconst projectUrl = workspaceId\n\t\t? buildKanbanRuntimeUrl(`/${encodeURIComponent(workspaceId)}`)\n\t\t: getKanbanRuntimeOrigin();\n\tconsole.log(`Kanban already running at ${getKanbanRuntimeOrigin()}`);\n\tif (!noOpen) {\n\t\ttry {\n\t\t\topenInBrowser(projectUrl);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tconsole.warn(`Could not open browser automatically: ${message}`);\n\t\t}\n\t}\n\tconsole.log(`Project URL: ${projectUrl}`);\n\treturn true;\n}\n\nasync function runScopedCommand(command: string, cwd: string): Promise<RuntimeCommandRunResponse> {\n\tconst startedAt = Date.now();\n\tconst outputLimitBytes = 64 * 1024;\n\n\treturn await new Promise<RuntimeCommandRunResponse>((resolve, reject) => {\n\t\tconst child = spawn(command, {\n\t\t\tcwd,\n\t\t\tshell: true,\n\t\t\tenv: process.env,\n\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t});\n\n\t\tif (!child.stdout || !child.stderr) {\n\t\t\treject(new Error(\"Shortcut process did not expose stdout/stderr.\"));\n\t\t\treturn;\n\t\t}\n\n\t\tlet stdout = \"\";\n\t\tlet stderr = \"\";\n\n\t\tconst appendOutput = (current: string, chunk: string): string => {\n\t\t\tconst next = current + chunk;\n\t\t\tif (next.length <= outputLimitBytes) {\n\t\t\t\treturn next;\n\t\t\t}\n\t\t\treturn next.slice(0, outputLimitBytes);\n\t\t};\n\n\t\tchild.stdout.on(\"data\", (chunk: Buffer | string) => {\n\t\t\tstdout = appendOutput(stdout, String(chunk));\n\t\t});\n\n\t\tchild.stderr.on(\"data\", (chunk: Buffer | string) => {\n\t\t\tstderr = appendOutput(stderr, String(chunk));\n\t\t});\n\n\t\tchild.on(\"error\", (error) => {\n\t\t\treject(error);\n\t\t});\n\n\t\tconst timeout = setTimeout(() => {\n\t\t\tchild.kill(\"SIGTERM\");\n\t\t}, 60_000);\n\n\t\tchild.on(\"close\", (code) => {\n\t\t\tclearTimeout(timeout);\n\t\t\tconst exitCode = typeof code === \"number\" ? code : 1;\n\t\t\tconst combinedOutput = [stdout.trim(), stderr.trim()].filter(Boolean).join(\"\\n\");\n\t\t\tresolve({\n\t\t\t\texitCode,\n\t\t\t\tstdout: stdout.trim(),\n\t\t\t\tstderr: stderr.trim(),\n\t\t\t\tcombinedOutput,\n\t\t\t\tdurationMs: Date.now() - startedAt,\n\t\t\t});\n\t\t});\n\t});\n}\n\nasync function startServer(): Promise<{ url: string; close: () => Promise<void>; shutdown: () => Promise<void> }> {\n\tlet runtimeStateHub: ReturnType<typeof createRuntimeStateHub> | undefined;\n\tconst workspaceRegistry = await createWorkspaceRegistry({\n\t\tcwd: process.cwd(),\n\t\tloadRuntimeConfig,\n\t\thasGitRepository,\n\t\tpathIsDirectory,\n\t\tonTerminalManagerReady: (workspaceId, manager) => {\n\t\t\truntimeStateHub?.trackTerminalManager(workspaceId, manager);\n\t\t},\n\t});\n\truntimeStateHub = createRuntimeStateHub({\n\t\tworkspaceRegistry,\n\t});\n\tconst runtimeHub = runtimeStateHub;\n\tfor (const { workspaceId, terminalManager } of workspaceRegistry.listManagedWorkspaces()) {\n\t\truntimeHub.trackTerminalManager(workspaceId, terminalManager);\n\t}\n\n\tconst disposeTrackedWorkspace = (\n\t\tworkspaceId: string,\n\t\toptions?: {\n\t\t\tstopTerminalSessions?: boolean;\n\t\t},\n\t): { terminalManager: TerminalSessionManager | null; workspacePath: string | null } => {\n\t\tconst disposed = workspaceRegistry.disposeWorkspace(workspaceId, {\n\t\t\tstopTerminalSessions: options?.stopTerminalSessions,\n\t\t});\n\t\truntimeHub.disposeWorkspace(workspaceId);\n\t\treturn disposed;\n\t};\n\n\tconst runtimeServer = await createRuntimeServer({\n\t\tworkspaceRegistry,\n\t\truntimeStateHub: runtimeHub,\n\t\twarn: (message) => {\n\t\t\tconsole.warn(`[kanban] ${message}`);\n\t\t},\n\t\tensureTerminalManagerForWorkspace: workspaceRegistry.ensureTerminalManagerForWorkspace,\n\t\tresolveInteractiveShellCommand,\n\t\trunCommand: runScopedCommand,\n\t\tresolveProjectInputPath,\n\t\tassertPathIsDirectory,\n\t\thasGitRepository,\n\t\tdisposeWorkspace: disposeTrackedWorkspace,\n\t\tcollectProjectWorktreeTaskIdsForRemoval,\n\t\tpickDirectoryPathFromSystemDialog,\n\t});\n\n\tconst close = async () => {\n\t\tawait runtimeServer.close();\n\t};\n\n\tconst shutdown = async () => {\n\t\tawait shutdownRuntimeServer({\n\t\t\tworkspaceRegistry,\n\t\t\twarn: (message) => {\n\t\t\t\tconsole.warn(`[kanban] ${message}`);\n\t\t\t},\n\t\t\tcloseRuntimeServer: close,\n\t\t});\n\t};\n\n\treturn {\n\t\turl: runtimeServer.url,\n\t\tclose,\n\t\tshutdown,\n\t};\n}\n\nasync function startServerWithAutoPortRetry(options: CliOptions): Promise<Awaited<ReturnType<typeof startServer>>> {\n\tif (options.port?.mode !== \"auto\") {\n\t\treturn await startServer();\n\t}\n\n\twhile (true) {\n\t\ttry {\n\t\t\treturn await startServer();\n\t\t} catch (error) {\n\t\t\tif (!isAddressInUseError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst currentPort = getKanbanRuntimePort();\n\t\t\tconst retryPort = await findAvailableRuntimePort(currentPort + 1);\n\t\t\tsetKanbanRuntimePort(retryPort);\n\t\t\tconsole.warn(`Runtime port ${currentPort} became busy during startup, retrying on ${retryPort}.`);\n\t\t}\n\t}\n}\n\nasync function run(): Promise<void> {\n\tconst argv = process.argv.slice(2);\n\tif (isMcpSubcommand(argv)) {\n\t\tawait runMcpSubcommand(argv);\n\t\treturn;\n\t}\n\tif (isHooksSubcommand(argv)) {\n\t\tawait runHooksSubcommand(argv);\n\t\treturn;\n\t}\n\n\tconst options = parseCliOptions(argv);\n\n\tif (options.help) {\n\t\tprintHelp();\n\t\treturn;\n\t}\n\tif (options.version) {\n\t\tconsole.log(KANBAN_VERSION);\n\t\treturn;\n\t}\n\n\tconst selectedPort = await applyRuntimePortOption(options.port);\n\tif (selectedPort !== null) {\n\t\tconsole.log(`Using runtime port ${selectedPort}.`);\n\t}\n\n\tautoUpdateOnStartup({\n\t\tcurrentVersion: KANBAN_VERSION,\n\t});\n\n\tif (options.agent) {\n\t\tconst didChange = await persistCliAgentSelection(process.cwd(), options.agent);\n\t\tif (didChange) {\n\t\t\tconsole.log(`Default agent set to ${options.agent}.`);\n\t\t}\n\t}\n\n\tlet runtime: Awaited<ReturnType<typeof startServer>>;\n\ttry {\n\t\truntime = await startServerWithAutoPortRetry(options);\n\t} catch (error) {\n\t\tif (\n\t\t\toptions.port?.mode !== \"auto\" &&\n\t\t\tisAddressInUseError(error) &&\n\t\t\t(await tryOpenExistingServer(options.noOpen))\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tthrow error;\n\t}\n\tconsole.log(`Kanban running at ${runtime.url}`);\n\tif (!options.noOpen) {\n\t\ttry {\n\t\t\topenInBrowser(runtime.url);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tconsole.warn(`Could not open browser automatically: ${message}`);\n\t\t}\n\t}\n\tconsole.log(\"Press Ctrl+C to stop.\");\n\n\tlet isShuttingDown = false;\n\tconst shutdown = async (signal: \"SIGINT\" | \"SIGTERM\") => {\n\t\tif (isShuttingDown) {\n\t\t\tprocess.exit(130);\n\t\t\treturn;\n\t\t}\n\t\tisShuttingDown = true;\n\t\trunPendingAutoUpdateOnShutdown();\n\t\tconst forceExitTimer = setTimeout(() => {\n\t\t\tconsole.error(`Forced exit after ${signal} timeout.`);\n\t\t\tprocess.exit(130);\n\t\t}, 3000);\n\t\tforceExitTimer.unref();\n\t\ttry {\n\t\t\tawait runtime.shutdown();\n\t\t\tclearTimeout(forceExitTimer);\n\t\t\tprocess.exit(130);\n\t\t} catch (error) {\n\t\t\tclearTimeout(forceExitTimer);\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tconsole.error(`Shutdown failed: ${message}`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t};\n\tprocess.on(\"SIGINT\", () => {\n\t\tvoid shutdown(\"SIGINT\");\n\t});\n\tprocess.on(\"SIGTERM\", () => {\n\t\tvoid shutdown(\"SIGTERM\");\n\t});\n}\n\nrun().catch((error) => {\n\tconst message = error instanceof Error ? error.message : String(error);\n\tconsole.error(`Failed to start Kanban: ${message}`);\n\tprocess.exit(1);\n});\n"]}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\n\nimport { spawn, spawnSync } from \"node:child_process\";\nimport { stat } from \"node:fs/promises\";\nimport { createServer as createNetServer } from \"node:net\";\nimport packageJson from \"../package.json\" with { type: \"json\" };\n\nimport { isHooksSubcommand, runHooksSubcommand } from \"./commands/hooks.js\";\nimport { isMcpSubcommand, runMcpSubcommand } from \"./commands/mcp.js\";\nimport { loadRuntimeConfig, updateRuntimeConfig } from \"./config/runtime-config.js\";\nimport type { RuntimeAgentId, RuntimeCommandRunResponse } from \"./core/api-contract.js\";\nimport { createGitProcessEnv } from \"./core/git-process-env.js\";\nimport {\n\tbuildKanbanRuntimeUrl,\n\tDEFAULT_KANBAN_RUNTIME_PORT,\n\tgetKanbanRuntimeOrigin,\n\tgetKanbanRuntimePort,\n\tparseRuntimePort,\n\tsetKanbanRuntimePort,\n} from \"./core/runtime-endpoint.js\";\nimport { resolveProjectInputPath } from \"./projects/project-path.js\";\nimport { openInBrowser } from \"./server/browser.js\";\nimport { createRuntimeServer } from \"./server/runtime-server.js\";\nimport { createRuntimeStateHub } from \"./server/runtime-state-hub.js\";\nimport { resolveInteractiveShellCommand } from \"./server/shell.js\";\nimport { shutdownRuntimeServer } from \"./server/shutdown-coordinator.js\";\nimport { collectProjectWorktreeTaskIdsForRemoval, createWorkspaceRegistry } from \"./server/workspace-registry.js\";\nimport { loadWorkspaceContext } from \"./state/workspace-state.js\";\nimport type { TerminalSessionManager } from \"./terminal/session-manager.js\";\nimport { autoUpdateOnStartup, runPendingAutoUpdateOnShutdown } from \"./update/auto-update.js\";\n\ninterface CliOptions {\n\thelp: boolean;\n\tversion: boolean;\n\tnoOpen: boolean;\n\tagent: RuntimeAgentId | null;\n\tport: { mode: \"fixed\"; value: number } | { mode: \"auto\" } | null;\n}\n\nconst CLI_AGENT_IDS: readonly RuntimeAgentId[] = [\"claude\", \"codex\", \"gemini\", \"opencode\", \"droid\", \"cline\"];\nconst KANBAN_VERSION = typeof packageJson.version === \"string\" ? packageJson.version : \"0.1.0\";\n\nfunction parseCliAgentId(value: string): RuntimeAgentId {\n\tconst normalized = value.trim().toLowerCase();\n\tif (\n\t\tnormalized === \"claude\" ||\n\t\tnormalized === \"codex\" ||\n\t\tnormalized === \"gemini\" ||\n\t\tnormalized === \"opencode\" ||\n\t\tnormalized === \"droid\" ||\n\t\tnormalized === \"cline\"\n\t) {\n\t\treturn normalized;\n\t}\n\tthrow new Error(`Invalid agent: ${value}. Expected one of: ${CLI_AGENT_IDS.join(\", \")}`);\n}\n\nfunction parseCliPortValue(rawValue: string): { mode: \"fixed\"; value: number } | { mode: \"auto\" } {\n\tconst normalized = rawValue.trim().toLowerCase();\n\tif (!normalized) {\n\t\tthrow new Error(\"Missing value for --port.\");\n\t}\n\tif (normalized === \"auto\") {\n\t\treturn { mode: \"auto\" };\n\t}\n\ttry {\n\t\treturn { mode: \"fixed\", value: parseRuntimePort(normalized) };\n\t} catch {\n\t\tthrow new Error(`Invalid port value: ${rawValue}. Expected an integer from 1-65535 or \"auto\".`);\n\t}\n}\n\nfunction parseCliOptions(argv: string[]): CliOptions {\n\tlet help = false;\n\tlet version = false;\n\tlet noOpen = false;\n\tlet agent: RuntimeAgentId | null = null;\n\tlet port: { mode: \"fixed\"; value: number } | { mode: \"auto\" } | null = null;\n\n\tfor (let index = 0; index < argv.length; index += 1) {\n\t\tconst arg = argv[index];\n\t\tif (arg === \"--help\" || arg === \"-h\") {\n\t\t\thelp = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (arg === \"--version\" || arg === \"-v\") {\n\t\t\tversion = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (arg === \"--no-open\") {\n\t\t\tnoOpen = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (arg === \"--agent\") {\n\t\t\tconst value = argv[index + 1];\n\t\t\tif (!value) {\n\t\t\t\tthrow new Error(\"Missing value for --agent.\");\n\t\t\t}\n\t\t\tagent = parseCliAgentId(value);\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (arg.startsWith(\"--agent=\")) {\n\t\t\tconst value = arg.slice(\"--agent=\".length);\n\t\t\tif (!value) {\n\t\t\t\tthrow new Error(\"Missing value for --agent.\");\n\t\t\t}\n\t\t\tagent = parseCliAgentId(value);\n\t\t\tcontinue;\n\t\t}\n\t\tif (arg === \"--port\") {\n\t\t\tconst value = argv[index + 1];\n\t\t\tif (!value) {\n\t\t\t\tthrow new Error(\"Missing value for --port.\");\n\t\t\t}\n\t\t\tport = parseCliPortValue(value);\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\t\tif (arg.startsWith(\"--port=\")) {\n\t\t\tconst value = arg.slice(\"--port=\".length);\n\t\t\tif (!value) {\n\t\t\t\tthrow new Error(\"Missing value for --port.\");\n\t\t\t}\n\t\t\tport = parseCliPortValue(value);\n\t\t}\n\t}\n\n\treturn { help, version, noOpen, agent, port };\n}\n\nfunction printHelp(): void {\n\tconsole.log(\"kanban\");\n\tconsole.log(\"Local orchestration board for coding agents.\");\n\tconsole.log(\"\");\n\tconsole.log(\"Usage:\");\n\tconsole.log(\" kanban [--agent <id>] [--port <number|auto>] [--no-open] [--help] [--version]\");\n\tconsole.log(\" npx -y kanban mcp\");\n\tconsole.log(\"\");\n\tconsole.log(`Runtime URL: ${getKanbanRuntimeOrigin()}`);\n\tconsole.log(`Agent IDs: ${CLI_AGENT_IDS.join(\", \")}`);\n}\n\nasync function isPortAvailable(port: number): Promise<boolean> {\n\treturn await new Promise<boolean>((resolve) => {\n\t\tconst probe = createNetServer();\n\t\tprobe.once(\"error\", () => {\n\t\t\tresolve(false);\n\t\t});\n\t\tprobe.listen(port, \"127.0.0.1\", () => {\n\t\t\tprobe.close(() => {\n\t\t\t\tresolve(true);\n\t\t\t});\n\t\t});\n\t});\n}\n\nasync function findAvailableRuntimePort(startPort: number): Promise<number> {\n\tfor (let candidate = startPort; candidate <= 65535; candidate += 1) {\n\t\tif (await isPortAvailable(candidate)) {\n\t\t\treturn candidate;\n\t\t}\n\t}\n\tthrow new Error(\"No available runtime port found.\");\n}\n\nasync function applyRuntimePortOption(portOption: CliOptions[\"port\"]): Promise<number | null> {\n\tif (!portOption) {\n\t\treturn null;\n\t}\n\tif (portOption.mode === \"fixed\") {\n\t\tsetKanbanRuntimePort(portOption.value);\n\t\treturn portOption.value;\n\t}\n\tconst autoPort = await findAvailableRuntimePort(DEFAULT_KANBAN_RUNTIME_PORT);\n\tsetKanbanRuntimePort(autoPort);\n\treturn autoPort;\n}\n\nasync function persistCliAgentSelection(cwd: string, selectedAgentId: RuntimeAgentId): Promise<boolean> {\n\tconst currentRuntimeConfig = await loadRuntimeConfig(cwd);\n\tif (currentRuntimeConfig.selectedAgentId === selectedAgentId) {\n\t\treturn false;\n\t}\n\tawait updateRuntimeConfig(cwd, { selectedAgentId });\n\treturn true;\n}\n\nasync function assertPathIsDirectory(path: string): Promise<void> {\n\tconst info = await stat(path);\n\tif (!info.isDirectory()) {\n\t\tthrow new Error(`Project path is not a directory: ${path}`);\n\t}\n}\n\nasync function pathIsDirectory(path: string): Promise<boolean> {\n\ttry {\n\t\tconst info = await stat(path);\n\t\treturn info.isDirectory();\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction hasGitRepository(path: string): boolean {\n\tconst result = spawnSync(\"git\", [\"rev-parse\", \"--is-inside-work-tree\"], {\n\t\tcwd: path,\n\t\tencoding: \"utf8\",\n\t\tstdio: [\"ignore\", \"pipe\", \"ignore\"],\n\t\tenv: createGitProcessEnv(),\n\t});\n\treturn result.status === 0 && result.stdout.trim() === \"true\";\n}\n\nfunction pickDirectoryPathFromSystemDialog(): string | null {\n\tif (process.platform === \"darwin\") {\n\t\tconst result = spawnSync(\n\t\t\t\"osascript\",\n\t\t\t[\"-e\", 'POSIX path of (choose folder with prompt \"Select a project folder\")'],\n\t\t\t{\n\t\t\t\tencoding: \"utf8\",\n\t\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t\t},\n\t\t);\n\t\tif (result.status !== 0) {\n\t\t\treturn null;\n\t\t}\n\t\tconst selected = typeof result.stdout === \"string\" ? result.stdout.trim() : \"\";\n\t\treturn selected || null;\n\t}\n\n\tif (process.platform === \"linux\") {\n\t\tconst result = spawnSync(\"zenity\", [\"--file-selection\", \"--directory\", \"--title=Select project folder\"], {\n\t\t\tencoding: \"utf8\",\n\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t});\n\t\tif (result.status !== 0) {\n\t\t\treturn null;\n\t\t}\n\t\tconst selected = typeof result.stdout === \"string\" ? result.stdout.trim() : \"\";\n\t\treturn selected || null;\n\t}\n\n\treturn null;\n}\n\nfunction isAddressInUseError(error: unknown): error is NodeJS.ErrnoException {\n\treturn (\n\t\ttypeof error === \"object\" &&\n\t\terror !== null &&\n\t\t\"code\" in error &&\n\t\t(error as NodeJS.ErrnoException).code === \"EADDRINUSE\"\n\t);\n}\n\nasync function canReachKanbanServer(workspaceId: string | null): Promise<boolean> {\n\ttry {\n\t\tconst headers: Record<string, string> = {};\n\t\tif (workspaceId) {\n\t\t\theaders[\"x-kanban-workspace-id\"] = workspaceId;\n\t\t}\n\t\tconst response = await fetch(buildKanbanRuntimeUrl(\"/api/trpc/projects.list\"), {\n\t\t\tmethod: \"GET\",\n\t\t\theaders,\n\t\t\tsignal: AbortSignal.timeout(1_500),\n\t\t});\n\t\tif (response.status === 404) {\n\t\t\treturn false;\n\t\t}\n\t\tconst payload = (await response.json().catch(() => null)) as {\n\t\t\tresult?: { data?: unknown };\n\t\t\terror?: unknown;\n\t\t} | null;\n\t\treturn Boolean(payload && (payload.result || payload.error));\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nasync function tryOpenExistingServer(noOpen: boolean): Promise<boolean> {\n\tlet workspaceId: string | null = null;\n\tif (hasGitRepository(process.cwd())) {\n\t\tconst context = await loadWorkspaceContext(process.cwd());\n\t\tworkspaceId = context.workspaceId;\n\t}\n\tconst running = await canReachKanbanServer(workspaceId);\n\tif (!running) {\n\t\treturn false;\n\t}\n\tconst projectUrl = workspaceId\n\t\t? buildKanbanRuntimeUrl(`/${encodeURIComponent(workspaceId)}`)\n\t\t: getKanbanRuntimeOrigin();\n\tconsole.log(`Kanban already running at ${getKanbanRuntimeOrigin()}`);\n\tif (!noOpen) {\n\t\ttry {\n\t\t\topenInBrowser(projectUrl);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tconsole.warn(`Could not open browser automatically: ${message}`);\n\t\t}\n\t}\n\tconsole.log(`Project URL: ${projectUrl}`);\n\treturn true;\n}\n\nasync function runScopedCommand(command: string, cwd: string): Promise<RuntimeCommandRunResponse> {\n\tconst startedAt = Date.now();\n\tconst outputLimitBytes = 64 * 1024;\n\n\treturn await new Promise<RuntimeCommandRunResponse>((resolve, reject) => {\n\t\tconst child = spawn(command, {\n\t\t\tcwd,\n\t\t\tshell: true,\n\t\t\tenv: process.env,\n\t\t\tstdio: [\"ignore\", \"pipe\", \"pipe\"],\n\t\t});\n\n\t\tif (!child.stdout || !child.stderr) {\n\t\t\treject(new Error(\"Shortcut process did not expose stdout/stderr.\"));\n\t\t\treturn;\n\t\t}\n\n\t\tlet stdout = \"\";\n\t\tlet stderr = \"\";\n\n\t\tconst appendOutput = (current: string, chunk: string): string => {\n\t\t\tconst next = current + chunk;\n\t\t\tif (next.length <= outputLimitBytes) {\n\t\t\t\treturn next;\n\t\t\t}\n\t\t\treturn next.slice(0, outputLimitBytes);\n\t\t};\n\n\t\tchild.stdout.on(\"data\", (chunk: Buffer | string) => {\n\t\t\tstdout = appendOutput(stdout, String(chunk));\n\t\t});\n\n\t\tchild.stderr.on(\"data\", (chunk: Buffer | string) => {\n\t\t\tstderr = appendOutput(stderr, String(chunk));\n\t\t});\n\n\t\tchild.on(\"error\", (error) => {\n\t\t\treject(error);\n\t\t});\n\n\t\tconst timeout = setTimeout(() => {\n\t\t\tchild.kill(\"SIGTERM\");\n\t\t}, 60_000);\n\n\t\tchild.on(\"close\", (code) => {\n\t\t\tclearTimeout(timeout);\n\t\t\tconst exitCode = typeof code === \"number\" ? code : 1;\n\t\t\tconst combinedOutput = [stdout.trim(), stderr.trim()].filter(Boolean).join(\"\\n\");\n\t\t\tresolve({\n\t\t\t\texitCode,\n\t\t\t\tstdout: stdout.trim(),\n\t\t\t\tstderr: stderr.trim(),\n\t\t\t\tcombinedOutput,\n\t\t\t\tdurationMs: Date.now() - startedAt,\n\t\t\t});\n\t\t});\n\t});\n}\n\nasync function startServer(): Promise<{ url: string; close: () => Promise<void>; shutdown: () => Promise<void> }> {\n\tlet runtimeStateHub: ReturnType<typeof createRuntimeStateHub> | undefined;\n\tconst workspaceRegistry = await createWorkspaceRegistry({\n\t\tcwd: process.cwd(),\n\t\tloadRuntimeConfig,\n\t\thasGitRepository,\n\t\tpathIsDirectory,\n\t\tonTerminalManagerReady: (workspaceId, manager) => {\n\t\t\truntimeStateHub?.trackTerminalManager(workspaceId, manager);\n\t\t},\n\t});\n\truntimeStateHub = createRuntimeStateHub({\n\t\tworkspaceRegistry,\n\t});\n\tconst runtimeHub = runtimeStateHub;\n\tfor (const { workspaceId, terminalManager } of workspaceRegistry.listManagedWorkspaces()) {\n\t\truntimeHub.trackTerminalManager(workspaceId, terminalManager);\n\t}\n\n\tconst disposeTrackedWorkspace = (\n\t\tworkspaceId: string,\n\t\toptions?: {\n\t\t\tstopTerminalSessions?: boolean;\n\t\t},\n\t): { terminalManager: TerminalSessionManager | null; workspacePath: string | null } => {\n\t\tconst disposed = workspaceRegistry.disposeWorkspace(workspaceId, {\n\t\t\tstopTerminalSessions: options?.stopTerminalSessions,\n\t\t});\n\t\truntimeHub.disposeWorkspace(workspaceId);\n\t\treturn disposed;\n\t};\n\n\tconst runtimeServer = await createRuntimeServer({\n\t\tworkspaceRegistry,\n\t\truntimeStateHub: runtimeHub,\n\t\twarn: (message) => {\n\t\t\tconsole.warn(`[kanban] ${message}`);\n\t\t},\n\t\tensureTerminalManagerForWorkspace: workspaceRegistry.ensureTerminalManagerForWorkspace,\n\t\tresolveInteractiveShellCommand,\n\t\trunCommand: runScopedCommand,\n\t\tresolveProjectInputPath,\n\t\tassertPathIsDirectory,\n\t\thasGitRepository,\n\t\tdisposeWorkspace: disposeTrackedWorkspace,\n\t\tcollectProjectWorktreeTaskIdsForRemoval,\n\t\tpickDirectoryPathFromSystemDialog,\n\t});\n\n\tconst close = async () => {\n\t\tawait runtimeServer.close();\n\t};\n\n\tconst shutdown = async () => {\n\t\tawait shutdownRuntimeServer({\n\t\t\tworkspaceRegistry,\n\t\t\twarn: (message) => {\n\t\t\t\tconsole.warn(`[kanban] ${message}`);\n\t\t\t},\n\t\t\tcloseRuntimeServer: close,\n\t\t});\n\t};\n\n\treturn {\n\t\turl: runtimeServer.url,\n\t\tclose,\n\t\tshutdown,\n\t};\n}\n\nasync function startServerWithAutoPortRetry(options: CliOptions): Promise<Awaited<ReturnType<typeof startServer>>> {\n\tif (options.port?.mode !== \"auto\") {\n\t\treturn await startServer();\n\t}\n\n\twhile (true) {\n\t\ttry {\n\t\t\treturn await startServer();\n\t\t} catch (error) {\n\t\t\tif (!isAddressInUseError(error)) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tconst currentPort = getKanbanRuntimePort();\n\t\t\tconst retryPort = await findAvailableRuntimePort(currentPort + 1);\n\t\t\tsetKanbanRuntimePort(retryPort);\n\t\t\tconsole.warn(`Runtime port ${currentPort} became busy during startup, retrying on ${retryPort}.`);\n\t\t}\n\t}\n}\n\nasync function run(): Promise<void> {\n\tconst argv = process.argv.slice(2);\n\tif (isMcpSubcommand(argv)) {\n\t\tawait runMcpSubcommand(argv);\n\t\treturn;\n\t}\n\tif (isHooksSubcommand(argv)) {\n\t\tawait runHooksSubcommand(argv);\n\t\treturn;\n\t}\n\n\tconst options = parseCliOptions(argv);\n\n\tif (options.help) {\n\t\tprintHelp();\n\t\treturn;\n\t}\n\tif (options.version) {\n\t\tconsole.log(KANBAN_VERSION);\n\t\treturn;\n\t}\n\n\tconst selectedPort = await applyRuntimePortOption(options.port);\n\tif (selectedPort !== null) {\n\t\tconsole.log(`Using runtime port ${selectedPort}.`);\n\t}\n\n\tautoUpdateOnStartup({\n\t\tcurrentVersion: KANBAN_VERSION,\n\t});\n\n\tif (options.agent) {\n\t\tconst didChange = await persistCliAgentSelection(process.cwd(), options.agent);\n\t\tif (didChange) {\n\t\t\tconsole.log(`Default agent set to ${options.agent}.`);\n\t\t}\n\t}\n\n\tlet runtime: Awaited<ReturnType<typeof startServer>>;\n\ttry {\n\t\truntime = await startServerWithAutoPortRetry(options);\n\t} catch (error) {\n\t\tif (\n\t\t\toptions.port?.mode !== \"auto\" &&\n\t\t\tisAddressInUseError(error) &&\n\t\t\t(await tryOpenExistingServer(options.noOpen))\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tthrow error;\n\t}\n\tconsole.log(`Kanban running at ${runtime.url}`);\n\tif (!options.noOpen) {\n\t\ttry {\n\t\t\topenInBrowser(runtime.url);\n\t\t} catch (error) {\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tconsole.warn(`Could not open browser automatically: ${message}`);\n\t\t}\n\t}\n\tconsole.log(\"Press Ctrl+C to stop.\");\n\n\tlet isShuttingDown = false;\n\tconst shutdown = async (signal: \"SIGINT\" | \"SIGTERM\") => {\n\t\tif (isShuttingDown) {\n\t\t\tprocess.exit(130);\n\t\t\treturn;\n\t\t}\n\t\tisShuttingDown = true;\n\t\trunPendingAutoUpdateOnShutdown();\n\t\tconst forceExitTimer = setTimeout(() => {\n\t\t\tconsole.error(`Forced exit after ${signal} timeout.`);\n\t\t\tprocess.exit(130);\n\t\t}, 3000);\n\t\tforceExitTimer.unref();\n\t\ttry {\n\t\t\tawait runtime.shutdown();\n\t\t\tclearTimeout(forceExitTimer);\n\t\t\tprocess.exit(130);\n\t\t} catch (error) {\n\t\t\tclearTimeout(forceExitTimer);\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tconsole.error(`Shutdown failed: ${message}`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t};\n\tprocess.on(\"SIGINT\", () => {\n\t\tvoid shutdown(\"SIGINT\");\n\t});\n\tprocess.on(\"SIGTERM\", () => {\n\t\tvoid shutdown(\"SIGTERM\");\n\t});\n}\n\nrun().catch((error) => {\n\tconst message = error instanceof Error ? error.message : String(error);\n\tconsole.error(`Failed to start Kanban: ${message}`);\n\tprocess.exit(1);\n});\n"]}
|
package/dist/commands/mcp.js
CHANGED
|
@@ -14,12 +14,12 @@ function parseMcpCliOptions(args) {
|
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
16
|
function printMcpHelp() {
|
|
17
|
-
process.stdout.write("kanban mcp\n");
|
|
17
|
+
process.stdout.write("npx -y kanban mcp\n");
|
|
18
18
|
process.stdout.write("Run Kanban as a local MCP stdio server.\n");
|
|
19
19
|
process.stdout.write("\n");
|
|
20
20
|
process.stdout.write("Usage:\n");
|
|
21
|
-
process.stdout.write(" kanban mcp\n");
|
|
22
|
-
process.stdout.write(" kanban mcp --help\n");
|
|
21
|
+
process.stdout.write(" npx -y kanban mcp\n");
|
|
22
|
+
process.stdout.write(" npx -y kanban mcp --help\n");
|
|
23
23
|
}
|
|
24
24
|
export async function runMcpSubcommand(argv) {
|
|
25
25
|
const options = parseMcpCliOptions(argv.slice(1));
|
package/dist/commands/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAMtD,MAAM,UAAU,eAAe,CAAC,IAAc;IAC7C,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;AAC1B,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAc;IACzC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACtC,IAAI,GAAG,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IACD,OAAO;QACN,IAAI;KACJ,CAAC;AACH,CAAC;AAED,SAAS,YAAY;IACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAMtD,MAAM,UAAU,eAAe,CAAC,IAAc;IAC7C,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC;AAC1B,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAc;IACzC,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACtC,IAAI,GAAG,IAAI,CAAC;QACb,CAAC;IACF,CAAC;IACD,OAAO;QACN,IAAI;KACJ,CAAC;AACH,CAAC;AAED,SAAS,YAAY;IACpB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IAC5C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAClE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACjC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAc;IACpD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,YAAY,EAAE,CAAC;QACf,OAAO;IACR,CAAC;IACD,MAAM,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AACzC,CAAC","sourcesContent":["import { runKanbanMcpServer } from \"../mcp/server.js\";\n\ninterface McpCliOptions {\n\thelp: boolean;\n}\n\nexport function isMcpSubcommand(argv: string[]): boolean {\n\treturn argv[0] === \"mcp\";\n}\n\nfunction parseMcpCliOptions(args: string[]): McpCliOptions {\n\tlet help = false;\n\tfor (const arg of args) {\n\t\tif (arg === \"--help\" || arg === \"-h\") {\n\t\t\thelp = true;\n\t\t}\n\t}\n\treturn {\n\t\thelp,\n\t};\n}\n\nfunction printMcpHelp(): void {\n\tprocess.stdout.write(\"npx -y kanban mcp\\n\");\n\tprocess.stdout.write(\"Run Kanban as a local MCP stdio server.\\n\");\n\tprocess.stdout.write(\"\\n\");\n\tprocess.stdout.write(\"Usage:\\n\");\n\tprocess.stdout.write(\" npx -y kanban mcp\\n\");\n\tprocess.stdout.write(\" npx -y kanban mcp --help\\n\");\n}\n\nexport async function runMcpSubcommand(argv: string[]): Promise<void> {\n\tconst options = parseMcpCliOptions(argv.slice(1));\n\tif (options.help) {\n\t\tprintMcpHelp();\n\t\treturn;\n\t}\n\tawait runKanbanMcpServer(process.cwd());\n}\n"]}
|
|
@@ -8,7 +8,7 @@ const CONFIG_FILENAME = "config.json";
|
|
|
8
8
|
const PROJECT_CONFIG_DIR = ".kanban";
|
|
9
9
|
const PROJECT_CONFIG_FILENAME = "config.json";
|
|
10
10
|
const DEFAULT_AGENT_ID = "claude";
|
|
11
|
-
const AUTO_SELECT_AGENT_PRIORITY = ["claude", "codex", "opencode", "droid", "gemini"
|
|
11
|
+
const AUTO_SELECT_AGENT_PRIORITY = ["cline", "claude", "codex", "opencode", "droid", "gemini"];
|
|
12
12
|
const DEFAULT_AGENT_AUTONOMOUS_MODE_ENABLED = true;
|
|
13
13
|
const DEFAULT_READY_FOR_REVIEW_NOTIFICATIONS_ENABLED = true;
|
|
14
14
|
const DEFAULT_COMMIT_PROMPT_TEMPLATE = `You are in a worktree on a detached HEAD. When you are finished with the task, commit the working changes onto {{base_ref}}.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-config.js","sourceRoot":"","sources":["../../src/config/runtime-config.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\n\nimport type { RuntimeAgentId, RuntimeProjectShortcut } from \"../core/api-contract.js\";\nimport { detectInstalledCommands } from \"../terminal/agent-registry.js\";\nimport { areRuntimeProjectShortcutsEqual } from \"./shortcut-utils.js\";\n\ninterface RuntimeGlobalConfigFileShape {\n\tselectedAgentId?: RuntimeAgentId;\n\tselectedShortcutLabel?: string;\n\tagentAutonomousModeEnabled?: boolean;\n\treadyForReviewNotificationsEnabled?: boolean;\n\tcommitPromptTemplate?: string;\n\topenPrPromptTemplate?: string;\n}\n\ninterface RuntimeProjectConfigFileShape {\n\tshortcuts?: RuntimeProjectShortcut[];\n}\n\nexport interface RuntimeConfigState {\n\tglobalConfigPath: string;\n\tprojectConfigPath: string;\n\tselectedAgentId: RuntimeAgentId;\n\tselectedShortcutLabel: string | null;\n\tagentAutonomousModeEnabled: boolean;\n\treadyForReviewNotificationsEnabled: boolean;\n\tshortcuts: RuntimeProjectShortcut[];\n\tcommitPromptTemplate: string;\n\topenPrPromptTemplate: string;\n\tcommitPromptTemplateDefault: string;\n\topenPrPromptTemplateDefault: string;\n}\n\nexport interface RuntimeConfigUpdateInput {\n\tselectedAgentId?: RuntimeAgentId;\n\tselectedShortcutLabel?: string | null;\n\tagentAutonomousModeEnabled?: boolean;\n\treadyForReviewNotificationsEnabled?: boolean;\n\tshortcuts?: RuntimeProjectShortcut[];\n\tcommitPromptTemplate?: string;\n\topenPrPromptTemplate?: string;\n}\n\nconst RUNTIME_HOME_DIR = \".kanban\";\nconst CONFIG_FILENAME = \"config.json\";\nconst PROJECT_CONFIG_DIR = \".kanban\";\nconst PROJECT_CONFIG_FILENAME = \"config.json\";\nconst DEFAULT_AGENT_ID: RuntimeAgentId = \"claude\";\nconst AUTO_SELECT_AGENT_PRIORITY: RuntimeAgentId[] = [\"claude\", \"codex\", \"opencode\", \"droid\", \"gemini\", \"cline\"];\nconst DEFAULT_AGENT_AUTONOMOUS_MODE_ENABLED = true;\nconst DEFAULT_READY_FOR_REVIEW_NOTIFICATIONS_ENABLED = true;\nconst DEFAULT_COMMIT_PROMPT_TEMPLATE = `You are in a worktree on a detached HEAD. When you are finished with the task, commit the working changes onto {{base_ref}}.\n\n- Do not run destructive commands: git reset --hard, git clean -fdx, git worktree remove, rm/mv on repository paths.\n- Do not edit files outside git workflows unless required for conflict resolution.\n- Preserve any pre-existing user uncommitted changes in the base worktree.\n\nSteps:\n1. In the current task worktree, stage and create a commit for the pending task changes.\n2. Find where {{base_ref}} is checked out:\n - Run: git worktree list --porcelain\n - If branch {{base_ref}} is checked out in path P, use that P.\n - If not checked out anywhere, use current worktree as P by checking out {{base_ref}} there.\n3. In P, verify current branch is {{base_ref}}.\n4. If P has uncommitted changes, stash them: git -C P stash push -u -m \"kanban-pre-cherry-pick\"\n5. Cherry-pick the task commit into P.\n6. If cherry-pick conflicts, resolve carefully, preserving both the intended task changes and existing user edits.\n7. If a stash was created, restore it with: git -C P stash pop\n8. If stash pop conflicts, resolve them while preserving pre-existing user edits.\n9. Report:\n - Final commit hash\n - Final commit message\n - Whether stash was used\n - Whether conflicts were resolved\n - Any remaining manual follow-up needed`;\nconst DEFAULT_OPEN_PR_PROMPT_TEMPLATE = `You are in a worktree on a detached HEAD. When you are finished with the task, open a pull request against {{base_ref}}.\n\n- Do not run destructive commands: git reset --hard, git clean -fdx, git worktree remove, rm/mv on repository paths.\n- Do not modify the base worktree.\n- Keep all PR preparation in the current task worktree.\n\nSteps:\n1. Ensure all intended changes are committed in the current task worktree.\n2. If currently on detached HEAD, create a branch at the current commit in this worktree.\n3. Push the branch to origin and set upstream.\n4. Create a pull request with base {{base_ref}} and head as the pushed branch (use gh CLI if available).\n5. If a pull request already exists for the same head and base, return that existing PR URL instead of creating a duplicate.\n6. If PR creation is blocked, explain exactly why and provide the exact commands to complete it manually.\n7. Report:\n - PR title: PR URL\n - Base branch\n - Head branch\n - Any follow-up needed`;\n\nexport function pickBestInstalledAgentIdFromDetected(detectedCommands: readonly string[]): RuntimeAgentId | null {\n\tconst detected = new Set(detectedCommands);\n\tfor (const agentId of AUTO_SELECT_AGENT_PRIORITY) {\n\t\tif (detected.has(agentId)) {\n\t\t\treturn agentId;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction getRuntimeHomePath(): string {\n\treturn join(homedir(), RUNTIME_HOME_DIR);\n}\n\nfunction normalizeAgentId(agentId: RuntimeAgentId | string | null | undefined): RuntimeAgentId {\n\tif (\n\t\tagentId === \"claude\" ||\n\t\tagentId === \"codex\" ||\n\t\tagentId === \"gemini\" ||\n\t\tagentId === \"opencode\" ||\n\t\tagentId === \"droid\" ||\n\t\tagentId === \"cline\"\n\t) {\n\t\treturn agentId;\n\t}\n\treturn DEFAULT_AGENT_ID;\n}\n\nfunction pickBestInstalledAgentId(): RuntimeAgentId | null {\n\treturn pickBestInstalledAgentIdFromDetected(detectInstalledCommands());\n}\n\nfunction normalizeShortcut(shortcut: RuntimeProjectShortcut): RuntimeProjectShortcut | null {\n\tif (!shortcut || typeof shortcut !== \"object\") {\n\t\treturn null;\n\t}\n\n\tconst label = typeof shortcut.label === \"string\" ? shortcut.label.trim() : \"\";\n\tconst command = typeof shortcut.command === \"string\" ? shortcut.command.trim() : \"\";\n\tconst icon = typeof shortcut.icon === \"string\" ? shortcut.icon.trim() : \"\";\n\n\tif (!label || !command) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tlabel,\n\t\tcommand,\n\t\ticon: icon || undefined,\n\t};\n}\n\nfunction normalizeShortcuts(shortcuts: RuntimeProjectShortcut[] | null | undefined): RuntimeProjectShortcut[] {\n\tif (!Array.isArray(shortcuts)) {\n\t\treturn [];\n\t}\n\tconst normalized: RuntimeProjectShortcut[] = [];\n\tfor (const shortcut of shortcuts) {\n\t\tconst parsed = normalizeShortcut(shortcut);\n\t\tif (parsed) {\n\t\t\tnormalized.push(parsed);\n\t\t}\n\t}\n\treturn normalized;\n}\n\nfunction normalizePromptTemplate(value: unknown, fallback: string): string {\n\tif (typeof value !== \"string\") {\n\t\treturn fallback;\n\t}\n\tconst normalized = value.trim();\n\treturn normalized.length > 0 ? value : fallback;\n}\n\nfunction normalizeBoolean(value: unknown, fallback: boolean): boolean {\n\tif (typeof value === \"boolean\") {\n\t\treturn value;\n\t}\n\treturn fallback;\n}\n\nfunction normalizeShortcutLabel(value: unknown): string | null {\n\tif (typeof value !== \"string\") {\n\t\treturn null;\n\t}\n\tconst normalized = value.trim();\n\treturn normalized.length > 0 ? normalized : null;\n}\n\nfunction hasOwnKey<T extends object>(value: T | null, key: keyof T): boolean {\n\tif (!value) {\n\t\treturn false;\n\t}\n\treturn Object.hasOwn(value, key);\n}\n\nexport function getRuntimeGlobalConfigPath(): string {\n\treturn join(getRuntimeHomePath(), CONFIG_FILENAME);\n}\n\nexport function getRuntimeProjectConfigPath(cwd: string): string {\n\treturn join(resolve(cwd), PROJECT_CONFIG_DIR, PROJECT_CONFIG_FILENAME);\n}\n\nfunction toRuntimeConfigState({\n\tglobalConfigPath,\n\tprojectConfigPath,\n\tglobalConfig,\n\tprojectConfig,\n}: {\n\tglobalConfigPath: string;\n\tprojectConfigPath: string;\n\tglobalConfig: RuntimeGlobalConfigFileShape | null;\n\tprojectConfig: RuntimeProjectConfigFileShape | null;\n}): RuntimeConfigState {\n\treturn {\n\t\tglobalConfigPath,\n\t\tprojectConfigPath,\n\t\tselectedAgentId: normalizeAgentId(globalConfig?.selectedAgentId),\n\t\tselectedShortcutLabel: normalizeShortcutLabel(globalConfig?.selectedShortcutLabel),\n\t\tagentAutonomousModeEnabled: normalizeBoolean(\n\t\t\tglobalConfig?.agentAutonomousModeEnabled,\n\t\t\tDEFAULT_AGENT_AUTONOMOUS_MODE_ENABLED,\n\t\t),\n\t\treadyForReviewNotificationsEnabled: normalizeBoolean(\n\t\t\tglobalConfig?.readyForReviewNotificationsEnabled,\n\t\t\tDEFAULT_READY_FOR_REVIEW_NOTIFICATIONS_ENABLED,\n\t\t),\n\t\tshortcuts: normalizeShortcuts(projectConfig?.shortcuts),\n\t\tcommitPromptTemplate: normalizePromptTemplate(globalConfig?.commitPromptTemplate, DEFAULT_COMMIT_PROMPT_TEMPLATE),\n\t\topenPrPromptTemplate: normalizePromptTemplate(\n\t\t\tglobalConfig?.openPrPromptTemplate,\n\t\t\tDEFAULT_OPEN_PR_PROMPT_TEMPLATE,\n\t\t),\n\t\tcommitPromptTemplateDefault: DEFAULT_COMMIT_PROMPT_TEMPLATE,\n\t\topenPrPromptTemplateDefault: DEFAULT_OPEN_PR_PROMPT_TEMPLATE,\n\t};\n}\n\nasync function readRuntimeConfigFile<T>(configPath: string): Promise<T | null> {\n\ttry {\n\t\tconst raw = await readFile(configPath, \"utf8\");\n\t\treturn JSON.parse(raw) as T;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nasync function writeRuntimeGlobalConfigFile(\n\tconfigPath: string,\n\tconfig: {\n\t\tselectedAgentId?: RuntimeAgentId;\n\t\tselectedShortcutLabel?: string | null;\n\t\tagentAutonomousModeEnabled?: boolean;\n\t\treadyForReviewNotificationsEnabled?: boolean;\n\t\tcommitPromptTemplate?: string;\n\t\topenPrPromptTemplate?: string;\n\t},\n): Promise<void> {\n\tconst existing = await readRuntimeConfigFile<RuntimeGlobalConfigFileShape>(configPath);\n\tconst selectedAgentId = config.selectedAgentId === undefined ? undefined : normalizeAgentId(config.selectedAgentId);\n\tconst existingSelectedAgentId = hasOwnKey(existing, \"selectedAgentId\")\n\t\t? normalizeAgentId(existing?.selectedAgentId)\n\t\t: undefined;\n\tconst selectedShortcutLabel =\n\t\tconfig.selectedShortcutLabel === undefined ? undefined : normalizeShortcutLabel(config.selectedShortcutLabel);\n\tconst existingSelectedShortcutLabel = hasOwnKey(existing, \"selectedShortcutLabel\")\n\t\t? normalizeShortcutLabel(existing?.selectedShortcutLabel)\n\t\t\t: undefined;\n\tconst agentAutonomousModeEnabled =\n\t\tconfig.agentAutonomousModeEnabled === undefined\n\t\t\t? DEFAULT_AGENT_AUTONOMOUS_MODE_ENABLED\n\t\t\t: normalizeBoolean(config.agentAutonomousModeEnabled, DEFAULT_AGENT_AUTONOMOUS_MODE_ENABLED);\n\tconst readyForReviewNotificationsEnabled =\n\t\tconfig.readyForReviewNotificationsEnabled === undefined\n\t\t\t? DEFAULT_READY_FOR_REVIEW_NOTIFICATIONS_ENABLED\n\t\t\t: normalizeBoolean(config.readyForReviewNotificationsEnabled, DEFAULT_READY_FOR_REVIEW_NOTIFICATIONS_ENABLED);\n\tconst commitPromptTemplate =\n\t\tconfig.commitPromptTemplate === undefined\n\t\t\t? DEFAULT_COMMIT_PROMPT_TEMPLATE\n\t\t\t: normalizePromptTemplate(config.commitPromptTemplate, DEFAULT_COMMIT_PROMPT_TEMPLATE);\n\tconst openPrPromptTemplate =\n\t\tconfig.openPrPromptTemplate === undefined\n\t\t\t? DEFAULT_OPEN_PR_PROMPT_TEMPLATE\n\t\t\t: normalizePromptTemplate(config.openPrPromptTemplate, DEFAULT_OPEN_PR_PROMPT_TEMPLATE);\n\n\tconst payload: RuntimeGlobalConfigFileShape = {};\n\tif (selectedAgentId !== undefined) {\n\t\tif (hasOwnKey(existing, \"selectedAgentId\") || selectedAgentId !== DEFAULT_AGENT_ID) {\n\t\t\tpayload.selectedAgentId = selectedAgentId;\n\t\t}\n\t} else if (existingSelectedAgentId !== undefined) {\n\t\tpayload.selectedAgentId = existingSelectedAgentId;\n\t}\n\tif (selectedShortcutLabel !== undefined) {\n\t\tif (selectedShortcutLabel) {\n\t\t\tpayload.selectedShortcutLabel = selectedShortcutLabel;\n\t\t}\n\t} else if (existingSelectedShortcutLabel) {\n\t\tpayload.selectedShortcutLabel = existingSelectedShortcutLabel;\n\t}\n\tif (\n\t\thasOwnKey(existing, \"agentAutonomousModeEnabled\") ||\n\t\tagentAutonomousModeEnabled !== DEFAULT_AGENT_AUTONOMOUS_MODE_ENABLED\n\t) {\n\t\tpayload.agentAutonomousModeEnabled = agentAutonomousModeEnabled;\n\t}\n\tif (\n\t\thasOwnKey(existing, \"readyForReviewNotificationsEnabled\") ||\n\t\treadyForReviewNotificationsEnabled !== DEFAULT_READY_FOR_REVIEW_NOTIFICATIONS_ENABLED\n\t) {\n\t\tpayload.readyForReviewNotificationsEnabled = readyForReviewNotificationsEnabled;\n\t}\n\tif (hasOwnKey(existing, \"commitPromptTemplate\") || commitPromptTemplate !== DEFAULT_COMMIT_PROMPT_TEMPLATE) {\n\t\tpayload.commitPromptTemplate = commitPromptTemplate;\n\t}\n\tif (hasOwnKey(existing, \"openPrPromptTemplate\") || openPrPromptTemplate !== DEFAULT_OPEN_PR_PROMPT_TEMPLATE) {\n\t\tpayload.openPrPromptTemplate = openPrPromptTemplate;\n\t}\n\n\tawait mkdir(dirname(configPath), { recursive: true });\n\tawait writeFile(configPath, JSON.stringify(payload, null, 2), \"utf8\");\n}\n\nasync function writeRuntimeProjectConfigFile(\n\tconfigPath: string,\n\tconfig: { shortcuts: RuntimeProjectShortcut[] },\n): Promise<void> {\n\tconst existing = await readRuntimeConfigFile<RuntimeProjectConfigFileShape>(configPath);\n\tconst normalizedShortcuts = normalizeShortcuts(config.shortcuts);\n\tconst payload: RuntimeProjectConfigFileShape = {};\n\tif (hasOwnKey(existing, \"shortcuts\") || normalizedShortcuts.length > 0) {\n\t\tpayload.shortcuts = normalizedShortcuts;\n\t}\n\tawait mkdir(dirname(configPath), { recursive: true });\n\tawait writeFile(configPath, JSON.stringify(payload, null, 2), \"utf8\");\n}\n\nexport async function loadRuntimeConfig(cwd: string): Promise<RuntimeConfigState> {\n\tconst globalConfigPath = getRuntimeGlobalConfigPath();\n\tconst projectConfigPath = getRuntimeProjectConfigPath(cwd);\n\tlet globalConfig = await readRuntimeConfigFile<RuntimeGlobalConfigFileShape>(globalConfigPath);\n\tconst projectConfig = await readRuntimeConfigFile<RuntimeProjectConfigFileShape>(projectConfigPath);\n\tif (globalConfig === null) {\n\t\tconst autoSelectedAgentId = pickBestInstalledAgentId();\n\t\tif (autoSelectedAgentId) {\n\t\t\tawait writeRuntimeGlobalConfigFile(globalConfigPath, {\n\t\t\t\tselectedAgentId: autoSelectedAgentId,\n\t\t\t});\n\t\t\tglobalConfig = {\n\t\t\t\t...(globalConfig ?? {}),\n\t\t\t\tselectedAgentId: autoSelectedAgentId,\n\t\t\t};\n\t\t}\n\t}\n\treturn toRuntimeConfigState({\n\t\tglobalConfigPath,\n\t\tprojectConfigPath,\n\t\tglobalConfig,\n\t\tprojectConfig,\n\t});\n}\n\nexport async function saveRuntimeConfig(\n\tcwd: string,\n\tconfig: {\n\t\tselectedAgentId: RuntimeAgentId;\n\t\tselectedShortcutLabel: string | null;\n\t\tagentAutonomousModeEnabled: boolean;\n\t\treadyForReviewNotificationsEnabled: boolean;\n\t\tshortcuts: RuntimeProjectShortcut[];\n\t\tcommitPromptTemplate: string;\n\t\topenPrPromptTemplate: string;\n\t},\n): Promise<RuntimeConfigState> {\n\tconst globalConfigPath = getRuntimeGlobalConfigPath();\n\tconst projectConfigPath = getRuntimeProjectConfigPath(cwd);\n\tawait writeRuntimeGlobalConfigFile(globalConfigPath, {\n\t\tselectedAgentId: config.selectedAgentId,\n\t\tselectedShortcutLabel: config.selectedShortcutLabel,\n\t\tagentAutonomousModeEnabled: config.agentAutonomousModeEnabled,\n\t\treadyForReviewNotificationsEnabled: config.readyForReviewNotificationsEnabled,\n\t\tcommitPromptTemplate: config.commitPromptTemplate,\n\t\topenPrPromptTemplate: config.openPrPromptTemplate,\n\t});\n\tawait writeRuntimeProjectConfigFile(projectConfigPath, { shortcuts: config.shortcuts });\n\treturn {\n\t\tglobalConfigPath,\n\t\tprojectConfigPath,\n\t\tselectedAgentId: normalizeAgentId(config.selectedAgentId),\n\t\tselectedShortcutLabel: normalizeShortcutLabel(config.selectedShortcutLabel),\n\t\tagentAutonomousModeEnabled: normalizeBoolean(\n\t\t\tconfig.agentAutonomousModeEnabled,\n\t\t\tDEFAULT_AGENT_AUTONOMOUS_MODE_ENABLED,\n\t\t),\n\t\treadyForReviewNotificationsEnabled: normalizeBoolean(\n\t\t\tconfig.readyForReviewNotificationsEnabled,\n\t\t\tDEFAULT_READY_FOR_REVIEW_NOTIFICATIONS_ENABLED,\n\t\t),\n\t\tshortcuts: normalizeShortcuts(config.shortcuts),\n\t\tcommitPromptTemplate: normalizePromptTemplate(config.commitPromptTemplate, DEFAULT_COMMIT_PROMPT_TEMPLATE),\n\t\topenPrPromptTemplate: normalizePromptTemplate(config.openPrPromptTemplate, DEFAULT_OPEN_PR_PROMPT_TEMPLATE),\n\t\tcommitPromptTemplateDefault: DEFAULT_COMMIT_PROMPT_TEMPLATE,\n\t\topenPrPromptTemplateDefault: DEFAULT_OPEN_PR_PROMPT_TEMPLATE,\n\t};\n}\n\nexport async function updateRuntimeConfig(cwd: string, updates: RuntimeConfigUpdateInput): Promise<RuntimeConfigState> {\n\tconst current = await loadRuntimeConfig(cwd);\n\tconst nextConfig = {\n\t\tselectedAgentId: updates.selectedAgentId ?? current.selectedAgentId,\n\t\tselectedShortcutLabel:\n\t\t\tupdates.selectedShortcutLabel === undefined ? current.selectedShortcutLabel : updates.selectedShortcutLabel,\n\t\tagentAutonomousModeEnabled: updates.agentAutonomousModeEnabled ?? current.agentAutonomousModeEnabled,\n\t\treadyForReviewNotificationsEnabled:\n\t\t\tupdates.readyForReviewNotificationsEnabled ?? current.readyForReviewNotificationsEnabled,\n\t\tshortcuts: updates.shortcuts ?? current.shortcuts,\n\t\tcommitPromptTemplate: updates.commitPromptTemplate ?? current.commitPromptTemplate,\n\t\topenPrPromptTemplate: updates.openPrPromptTemplate ?? current.openPrPromptTemplate,\n\t};\n\n\tconst hasChanges =\n\t\tnextConfig.selectedAgentId !== current.selectedAgentId ||\n\t\tnextConfig.selectedShortcutLabel !== current.selectedShortcutLabel ||\n\t\tnextConfig.agentAutonomousModeEnabled !== current.agentAutonomousModeEnabled ||\n\t\tnextConfig.readyForReviewNotificationsEnabled !== current.readyForReviewNotificationsEnabled ||\n\t\tnextConfig.commitPromptTemplate !== current.commitPromptTemplate ||\n\t\tnextConfig.openPrPromptTemplate !== current.openPrPromptTemplate ||\n\t\t!areRuntimeProjectShortcutsEqual(nextConfig.shortcuts, current.shortcuts);\n\n\tif (!hasChanges) {\n\t\treturn current;\n\t}\n\n\treturn await saveRuntimeConfig(cwd, nextConfig);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"runtime-config.js","sourceRoot":"","sources":["../../src/config/runtime-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGnD,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,+BAA+B,EAAE,MAAM,qBAAqB,CAAC;AAuCtE,MAAM,gBAAgB,GAAG,SAAS,CAAC;AACnC,MAAM,eAAe,GAAG,aAAa,CAAC;AACtC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AACrC,MAAM,uBAAuB,GAAG,aAAa,CAAC;AAC9C,MAAM,gBAAgB,GAAmB,QAAQ,CAAC;AAClD,MAAM,0BAA0B,GAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AACjH,MAAM,qCAAqC,GAAG,IAAI,CAAC;AACnD,MAAM,8CAA8C,GAAG,IAAI,CAAC;AAC5D,MAAM,8BAA8B,GAAG;;;;;;;;;;;;;;;;;;;;;;;2CAuBI,CAAC;AAC5C,MAAM,+BAA+B,GAAG;;;;;;;;;;;;;;;;;0BAiBd,CAAC;AAE3B,MAAM,UAAU,oCAAoC,CAAC,gBAAmC;IACvF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC3C,KAAK,MAAM,OAAO,IAAI,0BAA0B,EAAE,CAAC;QAClD,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,OAAO,OAAO,CAAC;QAChB,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,SAAS,kBAAkB;IAC1B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAmD;IAC5E,IACC,OAAO,KAAK,QAAQ;QACpB,OAAO,KAAK,OAAO;QACnB,OAAO,KAAK,QAAQ;QACpB,OAAO,KAAK,UAAU;QACtB,OAAO,KAAK,OAAO;QACnB,OAAO,KAAK,OAAO,EAClB,CAAC;QACF,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,OAAO,gBAAgB,CAAC;AACzB,CAAC;AAED,SAAS,wBAAwB;IAChC,OAAO,oCAAoC,CAAC,uBAAuB,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgC;IAC1D,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9E,MAAM,OAAO,GAAG,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpF,MAAM,IAAI,GAAG,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAE3E,IAAI,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO;QACN,KAAK;QACL,OAAO;QACP,IAAI,EAAE,IAAI,IAAI,SAAS;KACvB,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAsD;IACjF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACX,CAAC;IACD,MAAM,UAAU,GAA6B,EAAE,CAAC;IAChD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACZ,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;IACF,CAAC;IACD,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc,EAAE,QAAgB;IAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;AACjD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc,EAAE,QAAiB;IAC1D,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACb,CAAC;IACD,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAChC,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AAClD,CAAC;AAED,SAAS,SAAS,CAAmB,KAAe,EAAE,GAAY;IACjE,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,0BAA0B;IACzC,OAAO,IAAI,CAAC,kBAAkB,EAAE,EAAE,eAAe,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,GAAW;IACtD,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,kBAAkB,EAAE,uBAAuB,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,oBAAoB,CAAC,EAC7B,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,GAMb;IACA,OAAO;QACN,gBAAgB;QAChB,iBAAiB;QACjB,eAAe,EAAE,gBAAgB,CAAC,YAAY,EAAE,eAAe,CAAC;QAChE,qBAAqB,EAAE,sBAAsB,CAAC,YAAY,EAAE,qBAAqB,CAAC;QAClF,0BAA0B,EAAE,gBAAgB,CAC3C,YAAY,EAAE,0BAA0B,EACxC,qCAAqC,CACrC;QACD,kCAAkC,EAAE,gBAAgB,CACnD,YAAY,EAAE,kCAAkC,EAChD,8CAA8C,CAC9C;QACD,SAAS,EAAE,kBAAkB,CAAC,aAAa,EAAE,SAAS,CAAC;QACvD,oBAAoB,EAAE,uBAAuB,CAAC,YAAY,EAAE,oBAAoB,EAAE,8BAA8B,CAAC;QACjH,oBAAoB,EAAE,uBAAuB,CAC5C,YAAY,EAAE,oBAAoB,EAClC,+BAA+B,CAC/B;QACD,2BAA2B,EAAE,8BAA8B;QAC3D,2BAA2B,EAAE,+BAA+B;KAC5D,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAI,UAAkB;IACzD,IAAI,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAM,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,KAAK,UAAU,4BAA4B,CAC1C,UAAkB,EAClB,MAOC;IAED,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAA+B,UAAU,CAAC,CAAC;IACvF,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACpH,MAAM,uBAAuB,GAAG,SAAS,CAAC,QAAQ,EAAE,iBAAiB,CAAC;QACrE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,eAAe,CAAC;QAC7C,CAAC,CAAC,SAAS,CAAC;IACb,MAAM,qBAAqB,GAC1B,MAAM,CAAC,qBAAqB,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAC/G,MAAM,6BAA6B,GAAG,SAAS,CAAC,QAAQ,EAAE,uBAAuB,CAAC;QACjF,CAAC,CAAC,sBAAsB,CAAC,QAAQ,EAAE,qBAAqB,CAAC;QACxD,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,0BAA0B,GAC/B,MAAM,CAAC,0BAA0B,KAAK,SAAS;QAC9C,CAAC,CAAC,qCAAqC;QACvC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,0BAA0B,EAAE,qCAAqC,CAAC,CAAC;IAC/F,MAAM,kCAAkC,GACvC,MAAM,CAAC,kCAAkC,KAAK,SAAS;QACtD,CAAC,CAAC,8CAA8C;QAChD,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,kCAAkC,EAAE,8CAA8C,CAAC,CAAC;IAChH,MAAM,oBAAoB,GACzB,MAAM,CAAC,oBAAoB,KAAK,SAAS;QACxC,CAAC,CAAC,8BAA8B;QAChC,CAAC,CAAC,uBAAuB,CAAC,MAAM,CAAC,oBAAoB,EAAE,8BAA8B,CAAC,CAAC;IACzF,MAAM,oBAAoB,GACzB,MAAM,CAAC,oBAAoB,KAAK,SAAS;QACxC,CAAC,CAAC,+BAA+B;QACjC,CAAC,CAAC,uBAAuB,CAAC,MAAM,CAAC,oBAAoB,EAAE,+BAA+B,CAAC,CAAC;IAE1F,MAAM,OAAO,GAAiC,EAAE,CAAC;IACjD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,QAAQ,EAAE,iBAAiB,CAAC,IAAI,eAAe,KAAK,gBAAgB,EAAE,CAAC;YACpF,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC;QAC3C,CAAC;IACF,CAAC;SAAM,IAAI,uBAAuB,KAAK,SAAS,EAAE,CAAC;QAClD,OAAO,CAAC,eAAe,GAAG,uBAAuB,CAAC;IACnD,CAAC;IACD,IAAI,qBAAqB,KAAK,SAAS,EAAE,CAAC;QACzC,IAAI,qBAAqB,EAAE,CAAC;YAC3B,OAAO,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACvD,CAAC;IACF,CAAC;SAAM,IAAI,6BAA6B,EAAE,CAAC;QAC1C,OAAO,CAAC,qBAAqB,GAAG,6BAA6B,CAAC;IAC/D,CAAC;IACD,IACC,SAAS,CAAC,QAAQ,EAAE,4BAA4B,CAAC;QACjD,0BAA0B,KAAK,qCAAqC,EACnE,CAAC;QACF,OAAO,CAAC,0BAA0B,GAAG,0BAA0B,CAAC;IACjE,CAAC;IACD,IACC,SAAS,CAAC,QAAQ,EAAE,oCAAoC,CAAC;QACzD,kCAAkC,KAAK,8CAA8C,EACpF,CAAC;QACF,OAAO,CAAC,kCAAkC,GAAG,kCAAkC,CAAC;IACjF,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,EAAE,sBAAsB,CAAC,IAAI,oBAAoB,KAAK,8BAA8B,EAAE,CAAC;QAC5G,OAAO,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;IACrD,CAAC;IACD,IAAI,SAAS,CAAC,QAAQ,EAAE,sBAAsB,CAAC,IAAI,oBAAoB,KAAK,+BAA+B,EAAE,CAAC;QAC7G,OAAO,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;IACrD,CAAC;IAED,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,6BAA6B,CAC3C,UAAkB,EAClB,MAA+C;IAE/C,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAgC,UAAU,CAAC,CAAC;IACxF,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACjE,MAAM,OAAO,GAAkC,EAAE,CAAC;IAClD,IAAI,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxE,OAAO,CAAC,SAAS,GAAG,mBAAmB,CAAC;IACzC,CAAC;IACD,MAAM,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAW;IAClD,MAAM,gBAAgB,GAAG,0BAA0B,EAAE,CAAC;IACtD,MAAM,iBAAiB,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC;IAC3D,IAAI,YAAY,GAAG,MAAM,qBAAqB,CAA+B,gBAAgB,CAAC,CAAC;IAC/F,MAAM,aAAa,GAAG,MAAM,qBAAqB,CAAgC,iBAAiB,CAAC,CAAC;IACpG,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC3B,MAAM,mBAAmB,GAAG,wBAAwB,EAAE,CAAC;QACvD,IAAI,mBAAmB,EAAE,CAAC;YACzB,MAAM,4BAA4B,CAAC,gBAAgB,EAAE;gBACpD,eAAe,EAAE,mBAAmB;aACpC,CAAC,CAAC;YACH,YAAY,GAAG;gBACd,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;gBACvB,eAAe,EAAE,mBAAmB;aACpC,CAAC;QACH,CAAC;IACF,CAAC;IACD,OAAO,oBAAoB,CAAC;QAC3B,gBAAgB;QAChB,iBAAiB;QACjB,YAAY;QACZ,aAAa;KACb,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACtC,GAAW,EACX,MAQC;IAED,MAAM,gBAAgB,GAAG,0BAA0B,EAAE,CAAC;IACtD,MAAM,iBAAiB,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC;IAC3D,MAAM,4BAA4B,CAAC,gBAAgB,EAAE;QACpD,eAAe,EAAE,MAAM,CAAC,eAAe;QACvC,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;QACnD,0BAA0B,EAAE,MAAM,CAAC,0BAA0B;QAC7D,kCAAkC,EAAE,MAAM,CAAC,kCAAkC;QAC7E,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;QACjD,oBAAoB,EAAE,MAAM,CAAC,oBAAoB;KACjD,CAAC,CAAC;IACH,MAAM,6BAA6B,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;IACxF,OAAO;QACN,gBAAgB;QAChB,iBAAiB;QACjB,eAAe,EAAE,gBAAgB,CAAC,MAAM,CAAC,eAAe,CAAC;QACzD,qBAAqB,EAAE,sBAAsB,CAAC,MAAM,CAAC,qBAAqB,CAAC;QAC3E,0BAA0B,EAAE,gBAAgB,CAC3C,MAAM,CAAC,0BAA0B,EACjC,qCAAqC,CACrC;QACD,kCAAkC,EAAE,gBAAgB,CACnD,MAAM,CAAC,kCAAkC,EACzC,8CAA8C,CAC9C;QACD,SAAS,EAAE,kBAAkB,CAAC,MAAM,CAAC,SAAS,CAAC;QAC/C,oBAAoB,EAAE,uBAAuB,CAAC,MAAM,CAAC,oBAAoB,EAAE,8BAA8B,CAAC;QAC1G,oBAAoB,EAAE,uBAAuB,CAAC,MAAM,CAAC,oBAAoB,EAAE,+BAA+B,CAAC;QAC3G,2BAA2B,EAAE,8BAA8B;QAC3D,2BAA2B,EAAE,+BAA+B;KAC5D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAW,EAAE,OAAiC;IACvF,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG;QAClB,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,eAAe;QACnE,qBAAqB,EACpB,OAAO,CAAC,qBAAqB,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB;QAC5G,0BAA0B,EAAE,OAAO,CAAC,0BAA0B,IAAI,OAAO,CAAC,0BAA0B;QACpG,kCAAkC,EACjC,OAAO,CAAC,kCAAkC,IAAI,OAAO,CAAC,kCAAkC;QACzF,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;QACjD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,IAAI,OAAO,CAAC,oBAAoB;QAClF,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,IAAI,OAAO,CAAC,oBAAoB;KAClF,CAAC;IAEF,MAAM,UAAU,GACf,UAAU,CAAC,eAAe,KAAK,OAAO,CAAC,eAAe;QACtD,UAAU,CAAC,qBAAqB,KAAK,OAAO,CAAC,qBAAqB;QAClE,UAAU,CAAC,0BAA0B,KAAK,OAAO,CAAC,0BAA0B;QAC5E,UAAU,CAAC,kCAAkC,KAAK,OAAO,CAAC,kCAAkC;QAC5F,UAAU,CAAC,oBAAoB,KAAK,OAAO,CAAC,oBAAoB;QAChE,UAAU,CAAC,oBAAoB,KAAK,OAAO,CAAC,oBAAoB;QAChE,CAAC,+BAA+B,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAE3E,IAAI,CAAC,UAAU,EAAE,CAAC;QACjB,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,OAAO,MAAM,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACjD,CAAC","sourcesContent":["import { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join, resolve } from \"node:path\";\n\nimport type { RuntimeAgentId, RuntimeProjectShortcut } from \"../core/api-contract.js\";\nimport { detectInstalledCommands } from \"../terminal/agent-registry.js\";\nimport { areRuntimeProjectShortcutsEqual } from \"./shortcut-utils.js\";\n\ninterface RuntimeGlobalConfigFileShape {\n\tselectedAgentId?: RuntimeAgentId;\n\tselectedShortcutLabel?: string;\n\tagentAutonomousModeEnabled?: boolean;\n\treadyForReviewNotificationsEnabled?: boolean;\n\tcommitPromptTemplate?: string;\n\topenPrPromptTemplate?: string;\n}\n\ninterface RuntimeProjectConfigFileShape {\n\tshortcuts?: RuntimeProjectShortcut[];\n}\n\nexport interface RuntimeConfigState {\n\tglobalConfigPath: string;\n\tprojectConfigPath: string;\n\tselectedAgentId: RuntimeAgentId;\n\tselectedShortcutLabel: string | null;\n\tagentAutonomousModeEnabled: boolean;\n\treadyForReviewNotificationsEnabled: boolean;\n\tshortcuts: RuntimeProjectShortcut[];\n\tcommitPromptTemplate: string;\n\topenPrPromptTemplate: string;\n\tcommitPromptTemplateDefault: string;\n\topenPrPromptTemplateDefault: string;\n}\n\nexport interface RuntimeConfigUpdateInput {\n\tselectedAgentId?: RuntimeAgentId;\n\tselectedShortcutLabel?: string | null;\n\tagentAutonomousModeEnabled?: boolean;\n\treadyForReviewNotificationsEnabled?: boolean;\n\tshortcuts?: RuntimeProjectShortcut[];\n\tcommitPromptTemplate?: string;\n\topenPrPromptTemplate?: string;\n}\n\nconst RUNTIME_HOME_DIR = \".kanban\";\nconst CONFIG_FILENAME = \"config.json\";\nconst PROJECT_CONFIG_DIR = \".kanban\";\nconst PROJECT_CONFIG_FILENAME = \"config.json\";\nconst DEFAULT_AGENT_ID: RuntimeAgentId = \"claude\";\nconst AUTO_SELECT_AGENT_PRIORITY: RuntimeAgentId[] = [\"cline\", \"claude\", \"codex\", \"opencode\", \"droid\", \"gemini\"];\nconst DEFAULT_AGENT_AUTONOMOUS_MODE_ENABLED = true;\nconst DEFAULT_READY_FOR_REVIEW_NOTIFICATIONS_ENABLED = true;\nconst DEFAULT_COMMIT_PROMPT_TEMPLATE = `You are in a worktree on a detached HEAD. When you are finished with the task, commit the working changes onto {{base_ref}}.\n\n- Do not run destructive commands: git reset --hard, git clean -fdx, git worktree remove, rm/mv on repository paths.\n- Do not edit files outside git workflows unless required for conflict resolution.\n- Preserve any pre-existing user uncommitted changes in the base worktree.\n\nSteps:\n1. In the current task worktree, stage and create a commit for the pending task changes.\n2. Find where {{base_ref}} is checked out:\n - Run: git worktree list --porcelain\n - If branch {{base_ref}} is checked out in path P, use that P.\n - If not checked out anywhere, use current worktree as P by checking out {{base_ref}} there.\n3. In P, verify current branch is {{base_ref}}.\n4. If P has uncommitted changes, stash them: git -C P stash push -u -m \"kanban-pre-cherry-pick\"\n5. Cherry-pick the task commit into P.\n6. If cherry-pick conflicts, resolve carefully, preserving both the intended task changes and existing user edits.\n7. If a stash was created, restore it with: git -C P stash pop\n8. If stash pop conflicts, resolve them while preserving pre-existing user edits.\n9. Report:\n - Final commit hash\n - Final commit message\n - Whether stash was used\n - Whether conflicts were resolved\n - Any remaining manual follow-up needed`;\nconst DEFAULT_OPEN_PR_PROMPT_TEMPLATE = `You are in a worktree on a detached HEAD. When you are finished with the task, open a pull request against {{base_ref}}.\n\n- Do not run destructive commands: git reset --hard, git clean -fdx, git worktree remove, rm/mv on repository paths.\n- Do not modify the base worktree.\n- Keep all PR preparation in the current task worktree.\n\nSteps:\n1. Ensure all intended changes are committed in the current task worktree.\n2. If currently on detached HEAD, create a branch at the current commit in this worktree.\n3. Push the branch to origin and set upstream.\n4. Create a pull request with base {{base_ref}} and head as the pushed branch (use gh CLI if available).\n5. If a pull request already exists for the same head and base, return that existing PR URL instead of creating a duplicate.\n6. If PR creation is blocked, explain exactly why and provide the exact commands to complete it manually.\n7. Report:\n - PR title: PR URL\n - Base branch\n - Head branch\n - Any follow-up needed`;\n\nexport function pickBestInstalledAgentIdFromDetected(detectedCommands: readonly string[]): RuntimeAgentId | null {\n\tconst detected = new Set(detectedCommands);\n\tfor (const agentId of AUTO_SELECT_AGENT_PRIORITY) {\n\t\tif (detected.has(agentId)) {\n\t\t\treturn agentId;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction getRuntimeHomePath(): string {\n\treturn join(homedir(), RUNTIME_HOME_DIR);\n}\n\nfunction normalizeAgentId(agentId: RuntimeAgentId | string | null | undefined): RuntimeAgentId {\n\tif (\n\t\tagentId === \"claude\" ||\n\t\tagentId === \"codex\" ||\n\t\tagentId === \"gemini\" ||\n\t\tagentId === \"opencode\" ||\n\t\tagentId === \"droid\" ||\n\t\tagentId === \"cline\"\n\t) {\n\t\treturn agentId;\n\t}\n\treturn DEFAULT_AGENT_ID;\n}\n\nfunction pickBestInstalledAgentId(): RuntimeAgentId | null {\n\treturn pickBestInstalledAgentIdFromDetected(detectInstalledCommands());\n}\n\nfunction normalizeShortcut(shortcut: RuntimeProjectShortcut): RuntimeProjectShortcut | null {\n\tif (!shortcut || typeof shortcut !== \"object\") {\n\t\treturn null;\n\t}\n\n\tconst label = typeof shortcut.label === \"string\" ? shortcut.label.trim() : \"\";\n\tconst command = typeof shortcut.command === \"string\" ? shortcut.command.trim() : \"\";\n\tconst icon = typeof shortcut.icon === \"string\" ? shortcut.icon.trim() : \"\";\n\n\tif (!label || !command) {\n\t\treturn null;\n\t}\n\n\treturn {\n\t\tlabel,\n\t\tcommand,\n\t\ticon: icon || undefined,\n\t};\n}\n\nfunction normalizeShortcuts(shortcuts: RuntimeProjectShortcut[] | null | undefined): RuntimeProjectShortcut[] {\n\tif (!Array.isArray(shortcuts)) {\n\t\treturn [];\n\t}\n\tconst normalized: RuntimeProjectShortcut[] = [];\n\tfor (const shortcut of shortcuts) {\n\t\tconst parsed = normalizeShortcut(shortcut);\n\t\tif (parsed) {\n\t\t\tnormalized.push(parsed);\n\t\t}\n\t}\n\treturn normalized;\n}\n\nfunction normalizePromptTemplate(value: unknown, fallback: string): string {\n\tif (typeof value !== \"string\") {\n\t\treturn fallback;\n\t}\n\tconst normalized = value.trim();\n\treturn normalized.length > 0 ? value : fallback;\n}\n\nfunction normalizeBoolean(value: unknown, fallback: boolean): boolean {\n\tif (typeof value === \"boolean\") {\n\t\treturn value;\n\t}\n\treturn fallback;\n}\n\nfunction normalizeShortcutLabel(value: unknown): string | null {\n\tif (typeof value !== \"string\") {\n\t\treturn null;\n\t}\n\tconst normalized = value.trim();\n\treturn normalized.length > 0 ? normalized : null;\n}\n\nfunction hasOwnKey<T extends object>(value: T | null, key: keyof T): boolean {\n\tif (!value) {\n\t\treturn false;\n\t}\n\treturn Object.hasOwn(value, key);\n}\n\nexport function getRuntimeGlobalConfigPath(): string {\n\treturn join(getRuntimeHomePath(), CONFIG_FILENAME);\n}\n\nexport function getRuntimeProjectConfigPath(cwd: string): string {\n\treturn join(resolve(cwd), PROJECT_CONFIG_DIR, PROJECT_CONFIG_FILENAME);\n}\n\nfunction toRuntimeConfigState({\n\tglobalConfigPath,\n\tprojectConfigPath,\n\tglobalConfig,\n\tprojectConfig,\n}: {\n\tglobalConfigPath: string;\n\tprojectConfigPath: string;\n\tglobalConfig: RuntimeGlobalConfigFileShape | null;\n\tprojectConfig: RuntimeProjectConfigFileShape | null;\n}): RuntimeConfigState {\n\treturn {\n\t\tglobalConfigPath,\n\t\tprojectConfigPath,\n\t\tselectedAgentId: normalizeAgentId(globalConfig?.selectedAgentId),\n\t\tselectedShortcutLabel: normalizeShortcutLabel(globalConfig?.selectedShortcutLabel),\n\t\tagentAutonomousModeEnabled: normalizeBoolean(\n\t\t\tglobalConfig?.agentAutonomousModeEnabled,\n\t\t\tDEFAULT_AGENT_AUTONOMOUS_MODE_ENABLED,\n\t\t),\n\t\treadyForReviewNotificationsEnabled: normalizeBoolean(\n\t\t\tglobalConfig?.readyForReviewNotificationsEnabled,\n\t\t\tDEFAULT_READY_FOR_REVIEW_NOTIFICATIONS_ENABLED,\n\t\t),\n\t\tshortcuts: normalizeShortcuts(projectConfig?.shortcuts),\n\t\tcommitPromptTemplate: normalizePromptTemplate(globalConfig?.commitPromptTemplate, DEFAULT_COMMIT_PROMPT_TEMPLATE),\n\t\topenPrPromptTemplate: normalizePromptTemplate(\n\t\t\tglobalConfig?.openPrPromptTemplate,\n\t\t\tDEFAULT_OPEN_PR_PROMPT_TEMPLATE,\n\t\t),\n\t\tcommitPromptTemplateDefault: DEFAULT_COMMIT_PROMPT_TEMPLATE,\n\t\topenPrPromptTemplateDefault: DEFAULT_OPEN_PR_PROMPT_TEMPLATE,\n\t};\n}\n\nasync function readRuntimeConfigFile<T>(configPath: string): Promise<T | null> {\n\ttry {\n\t\tconst raw = await readFile(configPath, \"utf8\");\n\t\treturn JSON.parse(raw) as T;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nasync function writeRuntimeGlobalConfigFile(\n\tconfigPath: string,\n\tconfig: {\n\t\tselectedAgentId?: RuntimeAgentId;\n\t\tselectedShortcutLabel?: string | null;\n\t\tagentAutonomousModeEnabled?: boolean;\n\t\treadyForReviewNotificationsEnabled?: boolean;\n\t\tcommitPromptTemplate?: string;\n\t\topenPrPromptTemplate?: string;\n\t},\n): Promise<void> {\n\tconst existing = await readRuntimeConfigFile<RuntimeGlobalConfigFileShape>(configPath);\n\tconst selectedAgentId = config.selectedAgentId === undefined ? undefined : normalizeAgentId(config.selectedAgentId);\n\tconst existingSelectedAgentId = hasOwnKey(existing, \"selectedAgentId\")\n\t\t? normalizeAgentId(existing?.selectedAgentId)\n\t\t: undefined;\n\tconst selectedShortcutLabel =\n\t\tconfig.selectedShortcutLabel === undefined ? undefined : normalizeShortcutLabel(config.selectedShortcutLabel);\n\tconst existingSelectedShortcutLabel = hasOwnKey(existing, \"selectedShortcutLabel\")\n\t\t? normalizeShortcutLabel(existing?.selectedShortcutLabel)\n\t\t\t: undefined;\n\tconst agentAutonomousModeEnabled =\n\t\tconfig.agentAutonomousModeEnabled === undefined\n\t\t\t? DEFAULT_AGENT_AUTONOMOUS_MODE_ENABLED\n\t\t\t: normalizeBoolean(config.agentAutonomousModeEnabled, DEFAULT_AGENT_AUTONOMOUS_MODE_ENABLED);\n\tconst readyForReviewNotificationsEnabled =\n\t\tconfig.readyForReviewNotificationsEnabled === undefined\n\t\t\t? DEFAULT_READY_FOR_REVIEW_NOTIFICATIONS_ENABLED\n\t\t\t: normalizeBoolean(config.readyForReviewNotificationsEnabled, DEFAULT_READY_FOR_REVIEW_NOTIFICATIONS_ENABLED);\n\tconst commitPromptTemplate =\n\t\tconfig.commitPromptTemplate === undefined\n\t\t\t? DEFAULT_COMMIT_PROMPT_TEMPLATE\n\t\t\t: normalizePromptTemplate(config.commitPromptTemplate, DEFAULT_COMMIT_PROMPT_TEMPLATE);\n\tconst openPrPromptTemplate =\n\t\tconfig.openPrPromptTemplate === undefined\n\t\t\t? DEFAULT_OPEN_PR_PROMPT_TEMPLATE\n\t\t\t: normalizePromptTemplate(config.openPrPromptTemplate, DEFAULT_OPEN_PR_PROMPT_TEMPLATE);\n\n\tconst payload: RuntimeGlobalConfigFileShape = {};\n\tif (selectedAgentId !== undefined) {\n\t\tif (hasOwnKey(existing, \"selectedAgentId\") || selectedAgentId !== DEFAULT_AGENT_ID) {\n\t\t\tpayload.selectedAgentId = selectedAgentId;\n\t\t}\n\t} else if (existingSelectedAgentId !== undefined) {\n\t\tpayload.selectedAgentId = existingSelectedAgentId;\n\t}\n\tif (selectedShortcutLabel !== undefined) {\n\t\tif (selectedShortcutLabel) {\n\t\t\tpayload.selectedShortcutLabel = selectedShortcutLabel;\n\t\t}\n\t} else if (existingSelectedShortcutLabel) {\n\t\tpayload.selectedShortcutLabel = existingSelectedShortcutLabel;\n\t}\n\tif (\n\t\thasOwnKey(existing, \"agentAutonomousModeEnabled\") ||\n\t\tagentAutonomousModeEnabled !== DEFAULT_AGENT_AUTONOMOUS_MODE_ENABLED\n\t) {\n\t\tpayload.agentAutonomousModeEnabled = agentAutonomousModeEnabled;\n\t}\n\tif (\n\t\thasOwnKey(existing, \"readyForReviewNotificationsEnabled\") ||\n\t\treadyForReviewNotificationsEnabled !== DEFAULT_READY_FOR_REVIEW_NOTIFICATIONS_ENABLED\n\t) {\n\t\tpayload.readyForReviewNotificationsEnabled = readyForReviewNotificationsEnabled;\n\t}\n\tif (hasOwnKey(existing, \"commitPromptTemplate\") || commitPromptTemplate !== DEFAULT_COMMIT_PROMPT_TEMPLATE) {\n\t\tpayload.commitPromptTemplate = commitPromptTemplate;\n\t}\n\tif (hasOwnKey(existing, \"openPrPromptTemplate\") || openPrPromptTemplate !== DEFAULT_OPEN_PR_PROMPT_TEMPLATE) {\n\t\tpayload.openPrPromptTemplate = openPrPromptTemplate;\n\t}\n\n\tawait mkdir(dirname(configPath), { recursive: true });\n\tawait writeFile(configPath, JSON.stringify(payload, null, 2), \"utf8\");\n}\n\nasync function writeRuntimeProjectConfigFile(\n\tconfigPath: string,\n\tconfig: { shortcuts: RuntimeProjectShortcut[] },\n): Promise<void> {\n\tconst existing = await readRuntimeConfigFile<RuntimeProjectConfigFileShape>(configPath);\n\tconst normalizedShortcuts = normalizeShortcuts(config.shortcuts);\n\tconst payload: RuntimeProjectConfigFileShape = {};\n\tif (hasOwnKey(existing, \"shortcuts\") || normalizedShortcuts.length > 0) {\n\t\tpayload.shortcuts = normalizedShortcuts;\n\t}\n\tawait mkdir(dirname(configPath), { recursive: true });\n\tawait writeFile(configPath, JSON.stringify(payload, null, 2), \"utf8\");\n}\n\nexport async function loadRuntimeConfig(cwd: string): Promise<RuntimeConfigState> {\n\tconst globalConfigPath = getRuntimeGlobalConfigPath();\n\tconst projectConfigPath = getRuntimeProjectConfigPath(cwd);\n\tlet globalConfig = await readRuntimeConfigFile<RuntimeGlobalConfigFileShape>(globalConfigPath);\n\tconst projectConfig = await readRuntimeConfigFile<RuntimeProjectConfigFileShape>(projectConfigPath);\n\tif (globalConfig === null) {\n\t\tconst autoSelectedAgentId = pickBestInstalledAgentId();\n\t\tif (autoSelectedAgentId) {\n\t\t\tawait writeRuntimeGlobalConfigFile(globalConfigPath, {\n\t\t\t\tselectedAgentId: autoSelectedAgentId,\n\t\t\t});\n\t\t\tglobalConfig = {\n\t\t\t\t...(globalConfig ?? {}),\n\t\t\t\tselectedAgentId: autoSelectedAgentId,\n\t\t\t};\n\t\t}\n\t}\n\treturn toRuntimeConfigState({\n\t\tglobalConfigPath,\n\t\tprojectConfigPath,\n\t\tglobalConfig,\n\t\tprojectConfig,\n\t});\n}\n\nexport async function saveRuntimeConfig(\n\tcwd: string,\n\tconfig: {\n\t\tselectedAgentId: RuntimeAgentId;\n\t\tselectedShortcutLabel: string | null;\n\t\tagentAutonomousModeEnabled: boolean;\n\t\treadyForReviewNotificationsEnabled: boolean;\n\t\tshortcuts: RuntimeProjectShortcut[];\n\t\tcommitPromptTemplate: string;\n\t\topenPrPromptTemplate: string;\n\t},\n): Promise<RuntimeConfigState> {\n\tconst globalConfigPath = getRuntimeGlobalConfigPath();\n\tconst projectConfigPath = getRuntimeProjectConfigPath(cwd);\n\tawait writeRuntimeGlobalConfigFile(globalConfigPath, {\n\t\tselectedAgentId: config.selectedAgentId,\n\t\tselectedShortcutLabel: config.selectedShortcutLabel,\n\t\tagentAutonomousModeEnabled: config.agentAutonomousModeEnabled,\n\t\treadyForReviewNotificationsEnabled: config.readyForReviewNotificationsEnabled,\n\t\tcommitPromptTemplate: config.commitPromptTemplate,\n\t\topenPrPromptTemplate: config.openPrPromptTemplate,\n\t});\n\tawait writeRuntimeProjectConfigFile(projectConfigPath, { shortcuts: config.shortcuts });\n\treturn {\n\t\tglobalConfigPath,\n\t\tprojectConfigPath,\n\t\tselectedAgentId: normalizeAgentId(config.selectedAgentId),\n\t\tselectedShortcutLabel: normalizeShortcutLabel(config.selectedShortcutLabel),\n\t\tagentAutonomousModeEnabled: normalizeBoolean(\n\t\t\tconfig.agentAutonomousModeEnabled,\n\t\t\tDEFAULT_AGENT_AUTONOMOUS_MODE_ENABLED,\n\t\t),\n\t\treadyForReviewNotificationsEnabled: normalizeBoolean(\n\t\t\tconfig.readyForReviewNotificationsEnabled,\n\t\t\tDEFAULT_READY_FOR_REVIEW_NOTIFICATIONS_ENABLED,\n\t\t),\n\t\tshortcuts: normalizeShortcuts(config.shortcuts),\n\t\tcommitPromptTemplate: normalizePromptTemplate(config.commitPromptTemplate, DEFAULT_COMMIT_PROMPT_TEMPLATE),\n\t\topenPrPromptTemplate: normalizePromptTemplate(config.openPrPromptTemplate, DEFAULT_OPEN_PR_PROMPT_TEMPLATE),\n\t\tcommitPromptTemplateDefault: DEFAULT_COMMIT_PROMPT_TEMPLATE,\n\t\topenPrPromptTemplateDefault: DEFAULT_OPEN_PR_PROMPT_TEMPLATE,\n\t};\n}\n\nexport async function updateRuntimeConfig(cwd: string, updates: RuntimeConfigUpdateInput): Promise<RuntimeConfigState> {\n\tconst current = await loadRuntimeConfig(cwd);\n\tconst nextConfig = {\n\t\tselectedAgentId: updates.selectedAgentId ?? current.selectedAgentId,\n\t\tselectedShortcutLabel:\n\t\t\tupdates.selectedShortcutLabel === undefined ? current.selectedShortcutLabel : updates.selectedShortcutLabel,\n\t\tagentAutonomousModeEnabled: updates.agentAutonomousModeEnabled ?? current.agentAutonomousModeEnabled,\n\t\treadyForReviewNotificationsEnabled:\n\t\t\tupdates.readyForReviewNotificationsEnabled ?? current.readyForReviewNotificationsEnabled,\n\t\tshortcuts: updates.shortcuts ?? current.shortcuts,\n\t\tcommitPromptTemplate: updates.commitPromptTemplate ?? current.commitPromptTemplate,\n\t\topenPrPromptTemplate: updates.openPrPromptTemplate ?? current.openPrPromptTemplate,\n\t};\n\n\tconst hasChanges =\n\t\tnextConfig.selectedAgentId !== current.selectedAgentId ||\n\t\tnextConfig.selectedShortcutLabel !== current.selectedShortcutLabel ||\n\t\tnextConfig.agentAutonomousModeEnabled !== current.agentAutonomousModeEnabled ||\n\t\tnextConfig.readyForReviewNotificationsEnabled !== current.readyForReviewNotificationsEnabled ||\n\t\tnextConfig.commitPromptTemplate !== current.commitPromptTemplate ||\n\t\tnextConfig.openPrPromptTemplate !== current.openPrPromptTemplate ||\n\t\t!areRuntimeProjectShortcutsEqual(nextConfig.shortcuts, current.shortcuts);\n\n\tif (!hasChanges) {\n\t\treturn current;\n\t}\n\n\treturn await saveRuntimeConfig(cwd, nextConfig);\n}\n"]}
|
|
@@ -16,12 +16,12 @@ export const RUNTIME_AGENT_CATALOG = [
|
|
|
16
16
|
installUrl: "https://github.com/openai/codex",
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
|
-
id: "
|
|
20
|
-
label: "
|
|
21
|
-
binary: "
|
|
19
|
+
id: "cline",
|
|
20
|
+
label: "Cline CLI",
|
|
21
|
+
binary: "cline",
|
|
22
22
|
baseArgs: [],
|
|
23
|
-
autonomousArgs: ["--
|
|
24
|
-
installUrl: "https://
|
|
23
|
+
autonomousArgs: ["--auto-approve-all"],
|
|
24
|
+
installUrl: "https://www.npmjs.com/package/cline",
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
id: "opencode",
|
|
@@ -40,12 +40,12 @@ export const RUNTIME_AGENT_CATALOG = [
|
|
|
40
40
|
installUrl: "https://docs.factory.ai/cli/getting-started/quickstart",
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
|
-
id: "
|
|
44
|
-
label: "
|
|
45
|
-
binary: "
|
|
43
|
+
id: "gemini",
|
|
44
|
+
label: "Gemini CLI",
|
|
45
|
+
binary: "gemini",
|
|
46
46
|
baseArgs: [],
|
|
47
|
-
autonomousArgs: ["--
|
|
48
|
-
installUrl: "https://
|
|
47
|
+
autonomousArgs: ["--yolo"],
|
|
48
|
+
installUrl: "https://github.com/google-gemini/gemini-cli",
|
|
49
49
|
},
|
|
50
50
|
];
|
|
51
51
|
export function getRuntimeAgentCatalogEntry(agentId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-catalog.js","sourceRoot":"","sources":["../../src/core/agent-catalog.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,qBAAqB,GAA+B;IAChE;QACC,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,aAAa;QACpB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,CAAC,gCAAgC,CAAC;QAClD,UAAU,EAAE,2DAA2D;KACvE;IACD;QACC,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,CAAC,4CAA4C,CAAC;QAC9D,UAAU,EAAE,iCAAiC;KAC7C;IACD;QACC,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"agent-catalog.js","sourceRoot":"","sources":["../../src/core/agent-catalog.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,qBAAqB,GAA+B;IAChE;QACC,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,aAAa;QACpB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,CAAC,gCAAgC,CAAC;QAClD,UAAU,EAAE,2DAA2D;KACvE;IACD;QACC,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,CAAC,4CAA4C,CAAC;QAC9D,UAAU,EAAE,iCAAiC;KAC7C;IACD;QACC,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,CAAC,oBAAoB,CAAC;QACtC,UAAU,EAAE,qCAAqC;KACjD;IACD;QACC,EAAE,EAAE,UAAU;QACd,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,UAAU;QAClB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,EAAE;QAClB,UAAU,EAAE,iCAAiC;KAC7C;IACD;QACC,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,WAAW;QAClB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;QAClC,UAAU,EAAE,wDAAwD;KACpE;IACD;QACC,EAAE,EAAE,QAAQ;QACZ,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,CAAC,QAAQ,CAAC;QAC1B,UAAU,EAAE,6CAA6C;KACzD;CACD,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,OAAuB;IAClE,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC;AAC5E,CAAC","sourcesContent":["import type { RuntimeAgentId } from \"./api-contract.js\";\n\nexport interface RuntimeAgentCatalogEntry {\n\tid: RuntimeAgentId;\n\tlabel: string;\n\tbinary: string;\n\tbaseArgs: string[];\n\tautonomousArgs: string[];\n\tinstallUrl: string;\n}\n\nexport const RUNTIME_AGENT_CATALOG: RuntimeAgentCatalogEntry[] = [\n\t{\n\t\tid: \"claude\",\n\t\tlabel: \"Claude Code\",\n\t\tbinary: \"claude\",\n\t\tbaseArgs: [],\n\t\tautonomousArgs: [\"--dangerously-skip-permissions\"],\n\t\tinstallUrl: \"https://docs.anthropic.com/en/docs/claude-code/quickstart\",\n\t},\n\t{\n\t\tid: \"codex\",\n\t\tlabel: \"OpenAI Codex\",\n\t\tbinary: \"codex\",\n\t\tbaseArgs: [],\n\t\tautonomousArgs: [\"--dangerously-bypass-approvals-and-sandbox\"],\n\t\tinstallUrl: \"https://github.com/openai/codex\",\n\t},\n\t{\n\t\tid: \"cline\",\n\t\tlabel: \"Cline CLI\",\n\t\tbinary: \"cline\",\n\t\tbaseArgs: [],\n\t\tautonomousArgs: [\"--auto-approve-all\"],\n\t\tinstallUrl: \"https://www.npmjs.com/package/cline\",\n\t},\n\t{\n\t\tid: \"opencode\",\n\t\tlabel: \"OpenCode\",\n\t\tbinary: \"opencode\",\n\t\tbaseArgs: [],\n\t\tautonomousArgs: [],\n\t\tinstallUrl: \"https://github.com/sst/opencode\",\n\t},\n\t{\n\t\tid: \"droid\",\n\t\tlabel: \"Droid CLI\",\n\t\tbinary: \"droid\",\n\t\tbaseArgs: [],\n\t\tautonomousArgs: [\"--auto\", \"high\"],\n\t\tinstallUrl: \"https://docs.factory.ai/cli/getting-started/quickstart\",\n\t},\n\t{\n\t\tid: \"gemini\",\n\t\tlabel: \"Gemini CLI\",\n\t\tbinary: \"gemini\",\n\t\tbaseArgs: [],\n\t\tautonomousArgs: [\"--yolo\"],\n\t\tinstallUrl: \"https://github.com/google-gemini/gemini-cli\",\n\t},\n];\n\nexport function getRuntimeAgentCatalogEntry(agentId: RuntimeAgentId): RuntimeAgentCatalogEntry | null {\n\treturn RUNTIME_AGENT_CATALOG.find((entry) => entry.id === agentId) ?? null;\n}\n"]}
|
|
@@ -74,11 +74,6 @@ export declare const runtimeWorkspaceFileSearchResponseSchema: z.ZodObject<{
|
|
|
74
74
|
}, z.core.$strip>>;
|
|
75
75
|
}, z.core.$strip>;
|
|
76
76
|
export type RuntimeWorkspaceFileSearchResponse = z.infer<typeof runtimeWorkspaceFileSearchResponseSchema>;
|
|
77
|
-
export declare const runtimeSlashCommandDescriptionSchema: z.ZodObject<{
|
|
78
|
-
name: z.ZodString;
|
|
79
|
-
description: z.ZodNullable<z.ZodString>;
|
|
80
|
-
}, z.core.$strip>;
|
|
81
|
-
export type RuntimeSlashCommandDescription = z.infer<typeof runtimeSlashCommandDescriptionSchema>;
|
|
82
77
|
export declare const runtimeAgentIdSchema: z.ZodEnum<{
|
|
83
78
|
claude: "claude";
|
|
84
79
|
codex: "codex";
|
|
@@ -88,22 +83,6 @@ export declare const runtimeAgentIdSchema: z.ZodEnum<{
|
|
|
88
83
|
cline: "cline";
|
|
89
84
|
}>;
|
|
90
85
|
export type RuntimeAgentId = z.infer<typeof runtimeAgentIdSchema>;
|
|
91
|
-
export declare const runtimeSlashCommandsResponseSchema: z.ZodObject<{
|
|
92
|
-
agentId: z.ZodNullable<z.ZodEnum<{
|
|
93
|
-
claude: "claude";
|
|
94
|
-
codex: "codex";
|
|
95
|
-
gemini: "gemini";
|
|
96
|
-
opencode: "opencode";
|
|
97
|
-
droid: "droid";
|
|
98
|
-
cline: "cline";
|
|
99
|
-
}>>;
|
|
100
|
-
commands: z.ZodArray<z.ZodObject<{
|
|
101
|
-
name: z.ZodString;
|
|
102
|
-
description: z.ZodNullable<z.ZodString>;
|
|
103
|
-
}, z.core.$strip>>;
|
|
104
|
-
error: z.ZodNullable<z.ZodString>;
|
|
105
|
-
}, z.core.$strip>;
|
|
106
|
-
export type RuntimeSlashCommandsResponse = z.infer<typeof runtimeSlashCommandsResponseSchema>;
|
|
107
86
|
export declare const runtimeBoardColumnIdSchema: z.ZodEnum<{
|
|
108
87
|
backlog: "backlog";
|
|
109
88
|
in_progress: "in_progress";
|
|
@@ -1312,6 +1291,12 @@ export declare const runtimeAgentDefinitionSchema: z.ZodObject<{
|
|
|
1312
1291
|
configured: z.ZodBoolean;
|
|
1313
1292
|
}, z.core.$strip>;
|
|
1314
1293
|
export type RuntimeAgentDefinition = z.infer<typeof runtimeAgentDefinitionSchema>;
|
|
1294
|
+
export declare const runtimeTaskStartSetupAvailabilitySchema: z.ZodObject<{
|
|
1295
|
+
githubCli: z.ZodBoolean;
|
|
1296
|
+
linearMcp: z.ZodBoolean;
|
|
1297
|
+
kanbanMcp: z.ZodBoolean;
|
|
1298
|
+
}, z.core.$strip>;
|
|
1299
|
+
export type RuntimeTaskStartSetupAvailability = z.infer<typeof runtimeTaskStartSetupAvailabilitySchema>;
|
|
1315
1300
|
export declare const runtimeConfigResponseSchema: z.ZodObject<{
|
|
1316
1301
|
selectedAgentId: z.ZodEnum<{
|
|
1317
1302
|
claude: "claude";
|
|
@@ -1344,6 +1329,11 @@ export declare const runtimeConfigResponseSchema: z.ZodObject<{
|
|
|
1344
1329
|
installed: z.ZodBoolean;
|
|
1345
1330
|
configured: z.ZodBoolean;
|
|
1346
1331
|
}, z.core.$strip>>;
|
|
1332
|
+
taskStartSetupAvailability: z.ZodObject<{
|
|
1333
|
+
githubCli: z.ZodBoolean;
|
|
1334
|
+
linearMcp: z.ZodBoolean;
|
|
1335
|
+
kanbanMcp: z.ZodBoolean;
|
|
1336
|
+
}, z.core.$strip>;
|
|
1347
1337
|
shortcuts: z.ZodArray<z.ZodObject<{
|
|
1348
1338
|
label: z.ZodString;
|
|
1349
1339
|
command: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-contract.d.ts","sourceRoot":"","sources":["../../src/core/api-contract.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api-contract.d.ts","sourceRoot":"","sources":["../../src/core/api-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,16 +39,7 @@ export const runtimeWorkspaceFileSearchResponseSchema = z.object({
|
|
|
39
39
|
query: z.string(),
|
|
40
40
|
files: z.array(runtimeWorkspaceFileSearchMatchSchema),
|
|
41
41
|
});
|
|
42
|
-
export const runtimeSlashCommandDescriptionSchema = z.object({
|
|
43
|
-
name: z.string(),
|
|
44
|
-
description: z.string().nullable(),
|
|
45
|
-
});
|
|
46
42
|
export const runtimeAgentIdSchema = z.enum(["claude", "codex", "gemini", "opencode", "droid", "cline"]);
|
|
47
|
-
export const runtimeSlashCommandsResponseSchema = z.object({
|
|
48
|
-
agentId: runtimeAgentIdSchema.nullable(),
|
|
49
|
-
commands: z.array(runtimeSlashCommandDescriptionSchema),
|
|
50
|
-
error: z.string().nullable(),
|
|
51
|
-
});
|
|
52
43
|
export const runtimeBoardColumnIdSchema = z.enum(["backlog", "in_progress", "review", "trash"]);
|
|
53
44
|
export const runtimeTaskAutoReviewModeSchema = z.enum(["commit", "pr", "move_to_trash"]);
|
|
54
45
|
export const runtimeBoardCardSchema = z.object({
|
|
@@ -327,6 +318,11 @@ export const runtimeAgentDefinitionSchema = z.object({
|
|
|
327
318
|
installed: z.boolean(),
|
|
328
319
|
configured: z.boolean(),
|
|
329
320
|
});
|
|
321
|
+
export const runtimeTaskStartSetupAvailabilitySchema = z.object({
|
|
322
|
+
githubCli: z.boolean(),
|
|
323
|
+
linearMcp: z.boolean(),
|
|
324
|
+
kanbanMcp: z.boolean(),
|
|
325
|
+
});
|
|
330
326
|
export const runtimeConfigResponseSchema = z.object({
|
|
331
327
|
selectedAgentId: runtimeAgentIdSchema,
|
|
332
328
|
selectedShortcutLabel: z.string().nullable(),
|
|
@@ -337,6 +333,7 @@ export const runtimeConfigResponseSchema = z.object({
|
|
|
337
333
|
readyForReviewNotificationsEnabled: z.boolean(),
|
|
338
334
|
detectedCommands: z.array(z.string()),
|
|
339
335
|
agents: z.array(runtimeAgentDefinitionSchema),
|
|
336
|
+
taskStartSetupAvailability: runtimeTaskStartSetupAvailabilitySchema,
|
|
340
337
|
shortcuts: z.array(runtimeProjectShortcutSchema),
|
|
341
338
|
commitPromptTemplate: z.string(),
|
|
342
339
|
openPrPromptTemplate: z.string(),
|