kanban 0.1.41 → 0.1.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="23b379fd-89d4-5835-be6c-dc8e7efcb530")}catch(e){}}();
3
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="461d1b47-e68d-5084-b1e0-e90ad020250e")}catch(e){}}();
4
4
  import { captureNodeException, flushNodeTelemetry } from "./telemetry/sentry-node.js";
5
5
  import { spawn, spawnSync } from "node:child_process";
6
6
  import { stat } from "node:fs/promises";
@@ -359,7 +359,7 @@ async function runMainCommand(options, shouldAutoOpenBrowser) {
359
359
  }
360
360
  throw error;
361
361
  }
362
- console.log(`Kanban running at ${runtime.url}`);
362
+ console.log(`Cline Kanban running at ${runtime.url}`);
363
363
  if (!options.noOpen && shouldAutoOpenBrowser) {
364
364
  try {
365
365
  openInBrowser(runtime.url, {
@@ -456,4 +456,4 @@ void run().catch(async (error) => {
456
456
  process.exit(1);
457
457
  });
458
458
  //# sourceMappingURL=cli.js.map
459
- //# debugId=23b379fd-89d4-5835-be6c-dc8e7efcb530
459
+ //# debugId=461d1b47-e68d-5084-b1e0-e90ad020250e
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sources":["../src/cli.ts"],"sourceRoot":"","sourcesContent":["#!/usr/bin/env node\n\nimport { captureNodeException, flushNodeTelemetry } from \"./telemetry/sentry-node.js\";\nimport { spawn, spawnSync } from \"node:child_process\";\nimport { stat } from \"node:fs/promises\";\nimport { createServer as createNetServer } from \"node:net\";\nimport { Command, Option } from \"commander\";\nimport packageJson from \"../package.json\" with { type: \"json\" };\n\nimport { registerHooksCommand } from \"./commands/hooks.js\";\nimport { registerTaskCommand } from \"./commands/task.js\";\nimport { loadGlobalRuntimeConfig, loadRuntimeConfig } from \"./config/runtime-config.js\";\nimport type { RuntimeCommandRunResponse } from \"./core/api-contract.js\";\nimport { createGitProcessEnv } from \"./core/git-process-env.js\";\nimport {\n\tinstallGracefulShutdownHandlers,\n\tshouldSuppressImmediateDuplicateShutdownSignals,\n} from \"./core/graceful-shutdown.js\";\nimport {\n\tbuildKanbanRuntimeUrl,\n\tDEFAULT_KANBAN_RUNTIME_PORT,\n\tgetKanbanRuntimeHost,\n\tgetKanbanRuntimeOrigin,\n\tgetKanbanRuntimePort,\n\tparseRuntimePort,\n\tsetKanbanRuntimeHost,\n\tsetKanbanRuntimePort,\n} from \"./core/runtime-endpoint.js\";\nimport { terminateProcessForTimeout } from \"./server/process-termination.js\";\nimport type { RuntimeStateHub } from \"./server/runtime-state-hub.js\";\nimport type { TerminalSessionManager } from \"./terminal/session-manager.js\";\n\ninterface CliOptions {\n\tnoOpen: boolean;\n\tskipShutdownCleanup: boolean;\n\thost: string | null;\n\tport: { mode: \"fixed\"; value: number } | { mode: \"auto\" } | null;\n}\n\nconst KANBAN_VERSION = typeof packageJson.version === \"string\" ? packageJson.version : \"0.1.0\";\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\ninterface RootCommandOptions {\n\thost?: string;\n\tport?: { mode: \"fixed\"; value: number } | { mode: \"auto\" };\n\topen?: boolean;\n\tskipShutdownCleanup?: boolean;\n}\n\n/**\n * Decide whether this CLI invocation should auto-open a browser tab.\n *\n * This uses a positive allowlist for app-launch shapes like `kanban`,\n * `kanban --agent codex`, and `kanban --port 3484`. Any subcommand or\n * unexpected argument is treated as a command-style invocation instead.\n */\nfunction shouldAutoOpenBrowserTabForInvocation(argv: string[]): boolean {\n\tconst launchFlags = new Set([\"--open\", \"--no-open\", \"--skip-shutdown-cleanup\"]);\n\tconst launchOptionsWithValues = new Set([\"--host\", \"--port\", \"--agent\"]);\n\n\tfor (let index = 0; index < argv.length; index += 1) {\n\t\tconst arg = argv[index];\n\t\tif (!arg) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!arg.startsWith(\"-\")) {\n\t\t\treturn false;\n\t\t}\n\t\tif (launchFlags.has(arg)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst optionName = arg.split(\"=\", 1)[0] ?? arg;\n\t\tif (!launchOptionsWithValues.has(optionName)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (arg.includes(\"=\")) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst optionValue = argv[index + 1];\n\t\tif (!optionValue) {\n\t\t\treturn false;\n\t\t}\n\t\tindex += 1;\n\t}\n\n\treturn true;\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, getKanbanRuntimeHost(), () => {\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 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 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(options: { noOpen: boolean; shouldAutoOpenBrowser: boolean }): Promise<boolean> {\n\tlet workspaceId: string | null = null;\n\tif (hasGitRepository(process.cwd())) {\n\t\tconst { loadWorkspaceContext } = await import(\"./state/workspace-state.js\");\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 (!options.noOpen && options.shouldAutoOpenBrowser) {\n\t\ttry {\n\t\t\tconst { openInBrowser } = await import(\"./server/browser.js\");\n\t\t\topenInBrowser(projectUrl, {\n\t\t\t\twarn: (message) => {\n\t\t\t\t\tconsole.warn(message);\n\t\t\t\t},\n\t\t\t});\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\tterminateProcessForTimeout(child);\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<{\n\turl: string;\n\tclose: () => Promise<void>;\n\tshutdown: (options?: { skipSessionCleanup?: boolean }) => Promise<void>;\n}> {\n\t/*\n\t\tServer-only modules are loaded lazily because task-oriented subcommands like\n\t\t`kanban task create` and `kanban hooks ingest` do not need the runtime server.\n\n\t\tA regression in 25ba59f showed that eagerly importing the runtime stack here\n\t\tcould leave the source CLI process alive after the command had already printed\n\t\tits JSON result. The issue first appeared after the native Cline SDK runtime\n\t\twas added to the server import graph. We have not yet isolated the deepest\n\t\thandle creator inside that graph, so we keep command-style subcommands on the\n\t\tlightweight path and only load the server stack when we actually start Kanban.\n\t*/\n\tconst [\n\t\t{ resolveProjectInputPath },\n\t\t{ pickDirectoryPathFromSystemDialog },\n\t\t{ createRuntimeServer },\n\t\t{ createRuntimeStateHub },\n\t\t{ resolveInteractiveShellCommand },\n\t\t{ shutdownRuntimeServer },\n\t\t{ collectProjectWorktreeTaskIdsForRemoval, createWorkspaceRegistry },\n\t] = await Promise.all([\n\t\timport(\"./projects/project-path.js\"),\n\t\timport(\"./server/directory-picker.js\"),\n\t\timport(\"./server/runtime-server.js\"),\n\t\timport(\"./server/runtime-state-hub.js\"),\n\t\timport(\"./server/shell.js\"),\n\t\timport(\"./server/shutdown-coordinator.js\"),\n\t\timport(\"./server/workspace-registry.js\"),\n\t]);\n\tlet runtimeStateHub: RuntimeStateHub | undefined;\n\tconst workspaceRegistry = await createWorkspaceRegistry({\n\t\tcwd: process.cwd(),\n\t\tloadGlobalRuntimeConfig,\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 (options?: { skipSessionCleanup?: boolean }) => {\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\tskipSessionCleanup: options?.skipSessionCleanup ?? false,\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 runMainCommand(options: CliOptions, shouldAutoOpenBrowser: boolean): Promise<void> {\n\tif (options.host) {\n\t\tsetKanbanRuntimeHost(options.host);\n\t\tconsole.log(`Binding to host ${options.host}.`);\n\t}\n\n\tconst [{ openInBrowser }, { autoUpdateOnStartup, runPendingAutoUpdateOnShutdown }] = await Promise.all([\n\t\timport(\"./server/browser.js\"),\n\t\timport(\"./update/auto-update.js\"),\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\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({ noOpen: options.noOpen, shouldAutoOpenBrowser }))\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 && shouldAutoOpenBrowser) {\n\t\ttry {\n\t\t\topenInBrowser(runtime.url, {\n\t\t\t\twarn: (message) => {\n\t\t\t\t\tconsole.warn(message);\n\t\t\t\t},\n\t\t\t});\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 () => {\n\t\tif (isShuttingDown) {\n\t\t\treturn;\n\t\t}\n\t\tisShuttingDown = true;\n\t\trunPendingAutoUpdateOnShutdown();\n\t\tif (options.skipShutdownCleanup) {\n\t\t\tconsole.warn(\"Skipping shutdown task cleanup for this instance.\");\n\t\t}\n\t\tawait runtime.shutdown({\n\t\t\tskipSessionCleanup: options.skipShutdownCleanup,\n\t\t});\n\t};\n\n\tinstallGracefulShutdownHandlers({\n\t\tprocess,\n\t\tdelayMs: 10000,\n\t\texit: (code) => {\n\t\t\tprocess.exit(code);\n\t\t},\n\t\tonShutdown: async () => {\n\t\t\tawait shutdown();\n\t\t},\n\t\tonShutdownError: (error) => {\n\t\t\tcaptureNodeException(error, { area: \"shutdown\" });\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tconsole.error(`Shutdown failed: ${message}`);\n\t\t},\n\t\tonTimeout: (delayMs) => {\n\t\t\tconsole.error(`Forced exit after shutdown timeout (${delayMs}ms).`);\n\t\t},\n\t\tonSecondSignal: (signal) => {\n\t\t\tconsole.error(`Forced exit on second signal: ${signal}`);\n\t\t},\n\t\tsuppressImmediateDuplicateSignals: shouldSuppressImmediateDuplicateShutdownSignals(),\n\t});\n}\n\nfunction createProgram(invocationArgs: string[]): Command {\n\tconst shouldAutoOpenBrowser = shouldAutoOpenBrowserTabForInvocation(invocationArgs);\n\tconst program = new Command();\n\tprogram\n\t\t.name(\"kanban\")\n\t\t.description(\"Local orchestration board for coding agents.\")\n\t\t.version(KANBAN_VERSION, \"-v, --version\", \"Output the version number\")\n\t\t.option(\"--host <ip>\", \"Host IP to bind the server to (default: 127.0.0.1).\")\n\t\t.option(\"--port <number|auto>\", \"Runtime port (1-65535) or auto.\", parseCliPortValue)\n\t\t.option(\"--no-open\", \"Do not open browser automatically.\")\n\t\t.option(\"--skip-shutdown-cleanup\", \"Do not move sessions to trash or delete task worktrees on shutdown.\")\n\t\t.showHelpAfterError()\n\t\t.addHelpText(\"after\", `\\nRuntime URL: ${getKanbanRuntimeOrigin()}`);\n\n\tprogram.addOption(new Option(\"--agent <id>\", \"Deprecated compatibility flag. Ignored.\").hideHelp());\n\n\tregisterTaskCommand(program);\n\tregisterHooksCommand(program);\n\n\tprogram\n\t\t.command(\"mcp\")\n\t\t.description(\"Deprecated compatibility command.\")\n\t\t.action(() => {\n\t\t\tconsole.warn(\"Deprecated. Please uninstall Kanban MCP.\");\n\t\t});\n\n\tprogram.action(async (options: RootCommandOptions) => {\n\t\tawait runMainCommand(\n\t\t\t{\n\t\t\t\thost: options.host ?? null,\n\t\t\t\tport: options.port ?? null,\n\t\t\t\tnoOpen: options.open === false,\n\t\t\t\tskipShutdownCleanup: options.skipShutdownCleanup === true,\n\t\t\t},\n\t\t\tshouldAutoOpenBrowser,\n\t\t);\n\t});\n\n\treturn program;\n}\n\nasync function run(): Promise<void> {\n\tconst argv = process.argv.slice(2);\n\tconst program = createProgram(argv);\n\tawait program.parseAsync(argv, { from: \"user\" });\n}\n\nvoid run().catch(async (error) => {\n\tcaptureNodeException(error, { area: \"startup\" });\n\tawait flushNodeTelemetry();\n\tconst message = error instanceof Error ? error.message : String(error);\n\tconsole.error(`Failed to start Kanban: ${message}`);\n\tprocess.exit(1);\n});\n"],"names":[],"mappings":"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","debugId":"23b379fd-89d4-5835-be6c-dc8e7efcb530"}
1
+ {"version":3,"file":"cli.js","sources":["../src/cli.ts"],"sourceRoot":"","sourcesContent":["#!/usr/bin/env node\n\nimport { captureNodeException, flushNodeTelemetry } from \"./telemetry/sentry-node.js\";\nimport { spawn, spawnSync } from \"node:child_process\";\nimport { stat } from \"node:fs/promises\";\nimport { createServer as createNetServer } from \"node:net\";\nimport { Command, Option } from \"commander\";\nimport packageJson from \"../package.json\" with { type: \"json\" };\n\nimport { registerHooksCommand } from \"./commands/hooks.js\";\nimport { registerTaskCommand } from \"./commands/task.js\";\nimport { loadGlobalRuntimeConfig, loadRuntimeConfig } from \"./config/runtime-config.js\";\nimport type { RuntimeCommandRunResponse } from \"./core/api-contract.js\";\nimport { createGitProcessEnv } from \"./core/git-process-env.js\";\nimport {\n\tinstallGracefulShutdownHandlers,\n\tshouldSuppressImmediateDuplicateShutdownSignals,\n} from \"./core/graceful-shutdown.js\";\nimport {\n\tbuildKanbanRuntimeUrl,\n\tDEFAULT_KANBAN_RUNTIME_PORT,\n\tgetKanbanRuntimeHost,\n\tgetKanbanRuntimeOrigin,\n\tgetKanbanRuntimePort,\n\tparseRuntimePort,\n\tsetKanbanRuntimeHost,\n\tsetKanbanRuntimePort,\n} from \"./core/runtime-endpoint.js\";\nimport { terminateProcessForTimeout } from \"./server/process-termination.js\";\nimport type { RuntimeStateHub } from \"./server/runtime-state-hub.js\";\nimport type { TerminalSessionManager } from \"./terminal/session-manager.js\";\n\ninterface CliOptions {\n\tnoOpen: boolean;\n\tskipShutdownCleanup: boolean;\n\thost: string | null;\n\tport: { mode: \"fixed\"; value: number } | { mode: \"auto\" } | null;\n}\n\nconst KANBAN_VERSION = typeof packageJson.version === \"string\" ? packageJson.version : \"0.1.0\";\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\ninterface RootCommandOptions {\n\thost?: string;\n\tport?: { mode: \"fixed\"; value: number } | { mode: \"auto\" };\n\topen?: boolean;\n\tskipShutdownCleanup?: boolean;\n}\n\n/**\n * Decide whether this CLI invocation should auto-open a browser tab.\n *\n * This uses a positive allowlist for app-launch shapes like `kanban`,\n * `kanban --agent codex`, and `kanban --port 3484`. Any subcommand or\n * unexpected argument is treated as a command-style invocation instead.\n */\nfunction shouldAutoOpenBrowserTabForInvocation(argv: string[]): boolean {\n\tconst launchFlags = new Set([\"--open\", \"--no-open\", \"--skip-shutdown-cleanup\"]);\n\tconst launchOptionsWithValues = new Set([\"--host\", \"--port\", \"--agent\"]);\n\n\tfor (let index = 0; index < argv.length; index += 1) {\n\t\tconst arg = argv[index];\n\t\tif (!arg) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (!arg.startsWith(\"-\")) {\n\t\t\treturn false;\n\t\t}\n\t\tif (launchFlags.has(arg)) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst optionName = arg.split(\"=\", 1)[0] ?? arg;\n\t\tif (!launchOptionsWithValues.has(optionName)) {\n\t\t\treturn false;\n\t\t}\n\t\tif (arg.includes(\"=\")) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst optionValue = argv[index + 1];\n\t\tif (!optionValue) {\n\t\t\treturn false;\n\t\t}\n\t\tindex += 1;\n\t}\n\n\treturn true;\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, getKanbanRuntimeHost(), () => {\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 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 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(options: { noOpen: boolean; shouldAutoOpenBrowser: boolean }): Promise<boolean> {\n\tlet workspaceId: string | null = null;\n\tif (hasGitRepository(process.cwd())) {\n\t\tconst { loadWorkspaceContext } = await import(\"./state/workspace-state.js\");\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 (!options.noOpen && options.shouldAutoOpenBrowser) {\n\t\ttry {\n\t\t\tconst { openInBrowser } = await import(\"./server/browser.js\");\n\t\t\topenInBrowser(projectUrl, {\n\t\t\t\twarn: (message) => {\n\t\t\t\t\tconsole.warn(message);\n\t\t\t\t},\n\t\t\t});\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\tterminateProcessForTimeout(child);\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<{\n\turl: string;\n\tclose: () => Promise<void>;\n\tshutdown: (options?: { skipSessionCleanup?: boolean }) => Promise<void>;\n}> {\n\t/*\n\t\tServer-only modules are loaded lazily because task-oriented subcommands like\n\t\t`kanban task create` and `kanban hooks ingest` do not need the runtime server.\n\n\t\tA regression in 25ba59f showed that eagerly importing the runtime stack here\n\t\tcould leave the source CLI process alive after the command had already printed\n\t\tits JSON result. The issue first appeared after the native Cline SDK runtime\n\t\twas added to the server import graph. We have not yet isolated the deepest\n\t\thandle creator inside that graph, so we keep command-style subcommands on the\n\t\tlightweight path and only load the server stack when we actually start Kanban.\n\t*/\n\tconst [\n\t\t{ resolveProjectInputPath },\n\t\t{ pickDirectoryPathFromSystemDialog },\n\t\t{ createRuntimeServer },\n\t\t{ createRuntimeStateHub },\n\t\t{ resolveInteractiveShellCommand },\n\t\t{ shutdownRuntimeServer },\n\t\t{ collectProjectWorktreeTaskIdsForRemoval, createWorkspaceRegistry },\n\t] = await Promise.all([\n\t\timport(\"./projects/project-path.js\"),\n\t\timport(\"./server/directory-picker.js\"),\n\t\timport(\"./server/runtime-server.js\"),\n\t\timport(\"./server/runtime-state-hub.js\"),\n\t\timport(\"./server/shell.js\"),\n\t\timport(\"./server/shutdown-coordinator.js\"),\n\t\timport(\"./server/workspace-registry.js\"),\n\t]);\n\tlet runtimeStateHub: RuntimeStateHub | undefined;\n\tconst workspaceRegistry = await createWorkspaceRegistry({\n\t\tcwd: process.cwd(),\n\t\tloadGlobalRuntimeConfig,\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 (options?: { skipSessionCleanup?: boolean }) => {\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\tskipSessionCleanup: options?.skipSessionCleanup ?? false,\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 runMainCommand(options: CliOptions, shouldAutoOpenBrowser: boolean): Promise<void> {\n\tif (options.host) {\n\t\tsetKanbanRuntimeHost(options.host);\n\t\tconsole.log(`Binding to host ${options.host}.`);\n\t}\n\n\tconst [{ openInBrowser }, { autoUpdateOnStartup, runPendingAutoUpdateOnShutdown }] = await Promise.all([\n\t\timport(\"./server/browser.js\"),\n\t\timport(\"./update/auto-update.js\"),\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\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({ noOpen: options.noOpen, shouldAutoOpenBrowser }))\n\t\t) {\n\t\t\treturn;\n\t\t}\n\t\tthrow error;\n\t}\n\tconsole.log(`Cline Kanban running at ${runtime.url}`);\n\tif (!options.noOpen && shouldAutoOpenBrowser) {\n\t\ttry {\n\t\t\topenInBrowser(runtime.url, {\n\t\t\t\twarn: (message) => {\n\t\t\t\t\tconsole.warn(message);\n\t\t\t\t},\n\t\t\t});\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 () => {\n\t\tif (isShuttingDown) {\n\t\t\treturn;\n\t\t}\n\t\tisShuttingDown = true;\n\t\trunPendingAutoUpdateOnShutdown();\n\t\tif (options.skipShutdownCleanup) {\n\t\t\tconsole.warn(\"Skipping shutdown task cleanup for this instance.\");\n\t\t}\n\t\tawait runtime.shutdown({\n\t\t\tskipSessionCleanup: options.skipShutdownCleanup,\n\t\t});\n\t};\n\n\tinstallGracefulShutdownHandlers({\n\t\tprocess,\n\t\tdelayMs: 10000,\n\t\texit: (code) => {\n\t\t\tprocess.exit(code);\n\t\t},\n\t\tonShutdown: async () => {\n\t\t\tawait shutdown();\n\t\t},\n\t\tonShutdownError: (error) => {\n\t\t\tcaptureNodeException(error, { area: \"shutdown\" });\n\t\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\t\tconsole.error(`Shutdown failed: ${message}`);\n\t\t},\n\t\tonTimeout: (delayMs) => {\n\t\t\tconsole.error(`Forced exit after shutdown timeout (${delayMs}ms).`);\n\t\t},\n\t\tonSecondSignal: (signal) => {\n\t\t\tconsole.error(`Forced exit on second signal: ${signal}`);\n\t\t},\n\t\tsuppressImmediateDuplicateSignals: shouldSuppressImmediateDuplicateShutdownSignals(),\n\t});\n}\n\nfunction createProgram(invocationArgs: string[]): Command {\n\tconst shouldAutoOpenBrowser = shouldAutoOpenBrowserTabForInvocation(invocationArgs);\n\tconst program = new Command();\n\tprogram\n\t\t.name(\"kanban\")\n\t\t.description(\"Local orchestration board for coding agents.\")\n\t\t.version(KANBAN_VERSION, \"-v, --version\", \"Output the version number\")\n\t\t.option(\"--host <ip>\", \"Host IP to bind the server to (default: 127.0.0.1).\")\n\t\t.option(\"--port <number|auto>\", \"Runtime port (1-65535) or auto.\", parseCliPortValue)\n\t\t.option(\"--no-open\", \"Do not open browser automatically.\")\n\t\t.option(\"--skip-shutdown-cleanup\", \"Do not move sessions to trash or delete task worktrees on shutdown.\")\n\t\t.showHelpAfterError()\n\t\t.addHelpText(\"after\", `\\nRuntime URL: ${getKanbanRuntimeOrigin()}`);\n\n\tprogram.addOption(new Option(\"--agent <id>\", \"Deprecated compatibility flag. Ignored.\").hideHelp());\n\n\tregisterTaskCommand(program);\n\tregisterHooksCommand(program);\n\n\tprogram\n\t\t.command(\"mcp\")\n\t\t.description(\"Deprecated compatibility command.\")\n\t\t.action(() => {\n\t\t\tconsole.warn(\"Deprecated. Please uninstall Kanban MCP.\");\n\t\t});\n\n\tprogram.action(async (options: RootCommandOptions) => {\n\t\tawait runMainCommand(\n\t\t\t{\n\t\t\t\thost: options.host ?? null,\n\t\t\t\tport: options.port ?? null,\n\t\t\t\tnoOpen: options.open === false,\n\t\t\t\tskipShutdownCleanup: options.skipShutdownCleanup === true,\n\t\t\t},\n\t\t\tshouldAutoOpenBrowser,\n\t\t);\n\t});\n\n\treturn program;\n}\n\nasync function run(): Promise<void> {\n\tconst argv = process.argv.slice(2);\n\tconst program = createProgram(argv);\n\tawait program.parseAsync(argv, { from: \"user\" });\n}\n\nvoid run().catch(async (error) => {\n\tcaptureNodeException(error, { area: \"startup\" });\n\tawait flushNodeTelemetry();\n\tconst message = error instanceof Error ? error.message : String(error);\n\tconsole.error(`Failed to start Kanban: ${message}`);\n\tprocess.exit(1);\n});\n"],"names":[],"mappings":"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","debugId":"461d1b47-e68d-5084-b1e0-e90ad020250e"}
@@ -44,6 +44,7 @@ export declare function detectAutoUpdateInstallation(options: {
44
44
  entrypointPath: string;
45
45
  cwd: string;
46
46
  }): AutoUpdateInstallationInfo;
47
+ export declare function resolveUpdateCommandForPlatform(command: string, platform?: NodeJS.Platform): string;
47
48
  export declare function runPendingAutoUpdateOnShutdown(options?: {
48
49
  spawnUpdate?: (command: string, args: string[]) => void;
49
50
  log?: (message: string) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../src/update/auto-update.ts"],"names":[],"mappings":"AAIA,oBAAY,wBAAwB;IACnC,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,OAAO,YAAY;CACnB;AAED,UAAU,wBAAwB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CACf;AAED,UAAU,0BAA0B;IACnC,cAAc,EAAE,wBAAwB,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAC/C,YAAY,EAAE,SAAS,GAAG,UAAU,CAAC;CACrC;AAED,UAAU,uBAAuB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChF,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxD,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACrE;AAOD,UAAU,yBAAyB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACtB;AA2QD,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAejF;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACrD,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACZ,GAAG,0BAA0B,CAiG7B;AAoDD,wBAAgB,8BAA8B,CAAC,OAAO,CAAC,EAAE;IACxD,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxD,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC,GAAG,IAAI,CAaP;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDzF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAE3E"}
1
+ {"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../src/update/auto-update.ts"],"names":[],"mappings":"AAIA,oBAAY,wBAAwB;IACnC,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,OAAO,YAAY;CACnB;AAED,UAAU,wBAAwB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CACf;AAED,UAAU,0BAA0B;IACnC,cAAc,EAAE,wBAAwB,CAAC;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAC/C,YAAY,EAAE,SAAS,GAAG,UAAU,CAAC;CACrC;AAED,UAAU,uBAAuB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,wBAAwB;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,uBAAuB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAChF,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxD,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACrE;AAOD,UAAU,yBAAyB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;CACtB;AA2QD,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAejF;AAED,wBAAgB,4BAA4B,CAAC,OAAO,EAAE;IACrD,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACZ,GAAG,0BAA0B,CAiG7B;AAgDD,wBAAgB,+BAA+B,CAC9C,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAC1C,MAAM,CAUR;AAMD,wBAAgB,8BAA8B,CAAC,OAAO,CAAC,EAAE;IACxD,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACxD,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC,GAAG,IAAI,CAaP;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyDzF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,wBAAwB,GAAG,IAAI,CAE3E"}
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="ce0a788b-7d5d-5dea-b147-5af72e491d97")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="1098939a-908b-5347-8559-b3f5911cb326")}catch(e){}}();
3
3
  import { spawn } from "node:child_process";
4
4
  import { realpathSync } from "node:fs";
5
5
  import { resolve } from "node:path";
@@ -369,7 +369,7 @@ async function fetchLatestVersionFromRegistry(input) {
369
369
  }
370
370
  }
371
371
  function spawnDetachedUpdate(command, args) {
372
- const child = spawn(command, args, {
372
+ const child = spawn(resolveUpdateCommandForPlatform(command), args, {
373
373
  detached: true,
374
374
  stdio: "ignore",
375
375
  env: process.env,
@@ -377,6 +377,15 @@ function spawnDetachedUpdate(command, args) {
377
377
  });
378
378
  child.unref();
379
379
  }
380
+ export function resolveUpdateCommandForPlatform(command, platform = process.platform) {
381
+ if (platform !== "win32") {
382
+ return command;
383
+ }
384
+ if (command === "npm" || command === "pnpm" || command === "yarn") {
385
+ return `${command}.cmd`;
386
+ }
387
+ return command;
388
+ }
380
389
  function schedulePendingShutdownAutoUpdate(update) {
381
390
  pendingShutdownAutoUpdate = update;
382
391
  }
@@ -447,4 +456,4 @@ export function autoUpdateOnStartup(options) {
447
456
  void runAutoUpdateCheck(options);
448
457
  }
449
458
  //# sourceMappingURL=auto-update.js.map
450
- //# debugId=ce0a788b-7d5d-5dea-b147-5af72e491d97
459
+ //# debugId=1098939a-908b-5347-8559-b3f5911cb326
@@ -1 +1 @@
1
- {"version":3,"file":"auto-update.js","sources":["../../src/update/auto-update.ts"],"sourceRoot":"","sourcesContent":["import { spawn } from \"node:child_process\";\nimport { realpathSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nexport enum AutoUpdatePackageManager {\n\tNPM = \"npm\",\n\tPNPM = \"pnpm\",\n\tYARN = \"yarn\",\n\tBUN = \"bun\",\n\tNPX = \"npx\",\n\tLOCAL = \"local\",\n\tUNKNOWN = \"unknown\",\n}\n\ninterface AutoUpdateInstallCommand {\n\tcommand: string;\n\targs: string[];\n}\n\ninterface AutoUpdateInstallationInfo {\n\tpackageManager: AutoUpdatePackageManager;\n\tnpmTag: string;\n\tupdateCommand: AutoUpdateInstallCommand | null;\n\tupdateTiming: \"startup\" | \"shutdown\";\n}\n\ninterface FetchLatestVersionInput {\n\tpackageName: string;\n\tnpmTag: string;\n}\n\nexport interface AutoUpdateStartupOptions {\n\tcurrentVersion: string;\n\tpackageName?: string;\n\tenv?: NodeJS.ProcessEnv;\n\targv?: string[];\n\tcwd?: string;\n\tresolveRealPath?: (path: string) => string;\n\tfetchLatestVersion?: (input: FetchLatestVersionInput) => Promise<string | null>;\n\tspawnUpdate?: (command: string, args: string[]) => void;\n\tscheduleShutdownUpdate?: (update: PendingShutdownAutoUpdate) => void;\n}\n\ninterface ParsedVersion {\n\tcore: number[];\n\tprerelease: Array<number | string> | null;\n}\n\ninterface PendingShutdownAutoUpdate {\n\tcommand: string;\n\targs: string[];\n\tlatestVersion: string;\n}\n\nconst DELETE_DIRECTORY_AFTER_DELAY_SCRIPT = `\nconst { rmSync } = require(\"node:fs\");\n\nconst targetDirectory = process.argv[1];\nif (!targetDirectory) {\n\tprocess.exit(0);\n}\n\nsetTimeout(() => {\n\ttry {\n\t\trmSync(targetDirectory, { recursive: true, force: true, maxRetries: 8, retryDelay: 250 });\n\t} catch {}\n}, 750);\n`.trim();\n\nlet pendingShutdownAutoUpdate: PendingShutdownAutoUpdate | null = null;\n\nfunction toPosixLowerPath(path: string): string {\n\treturn path.replaceAll(\"\\\\\", \"/\").toLowerCase();\n}\n\nfunction toPosixPath(path: string): string {\n\treturn path.replaceAll(\"\\\\\", \"/\");\n}\n\nfunction isPathInside(targetPath: string, containerPath: string): boolean {\n\tconst normalizedTarget = toPosixLowerPath(resolve(targetPath));\n\tconst normalizedContainer = toPosixLowerPath(resolve(containerPath));\n\tif (normalizedTarget === normalizedContainer) {\n\t\treturn true;\n\t}\n\treturn normalizedTarget.startsWith(`${normalizedContainer}/`);\n}\n\nfunction isNightlyVersion(version: string): boolean {\n\treturn version.includes(\"-nightly.\");\n}\n\nfunction getNpmTag(currentVersion: string): string {\n\treturn isNightlyVersion(currentVersion) ? \"nightly\" : \"latest\";\n}\n\nfunction parseVersion(version: string): ParsedVersion {\n\tconst versionWithoutBuild = version.split(\"+\", 1)[0] ?? \"\";\n\tconst [corePart, prereleasePart] = versionWithoutBuild.split(\"-\", 2);\n\tconst core = corePart\n\t\t.split(\".\")\n\t\t.filter((part) => part.length > 0)\n\t\t.map((part) => Number.parseInt(part, 10));\n\tconst prerelease = prereleasePart\n\t\t? prereleasePart\n\t\t\t\t.split(\".\")\n\t\t\t\t.filter((part) => part.length > 0)\n\t\t\t\t.map((part) => (/^\\d+$/u.test(part) ? Number.parseInt(part, 10) : part))\n\t\t: null;\n\treturn {\n\t\tcore,\n\t\tprerelease,\n\t};\n}\n\nfunction buildShutdownCacheRefreshCommand(cacheDirectory: string): AutoUpdateInstallCommand {\n\treturn {\n\t\tcommand: process.execPath,\n\t\targs: [\"-e\", DELETE_DIRECTORY_AFTER_DELAY_SCRIPT, cacheDirectory],\n\t};\n}\n\nfunction splitResolvedPath(path: string): {\n\thasLeadingSlash: boolean;\n\tsegments: string[];\n\tnormalizedSegments: string[];\n} {\n\tconst resolvedPath = toPosixPath(resolve(path));\n\tconst hasLeadingSlash = resolvedPath.startsWith(\"/\");\n\tconst segments = resolvedPath.split(\"/\").filter((_segment, index) => !(hasLeadingSlash && index === 0));\n\treturn {\n\t\thasLeadingSlash,\n\t\tsegments,\n\t\tnormalizedSegments: segments.map((segment) => segment.toLowerCase()),\n\t};\n}\n\nfunction buildDirectoryFromSegments(segments: string[], hasLeadingSlash: boolean, endIndex: number): string | null {\n\tif (endIndex <= 0 || segments.length < endIndex) {\n\t\treturn null;\n\t}\n\tconst directory = segments.slice(0, endIndex).join(\"/\");\n\tif (directory.length === 0) {\n\t\treturn null;\n\t}\n\treturn hasLeadingSlash ? `/${directory}` : directory;\n}\n\nfunction findSegmentSequence(segments: string[], sequence: string[]): number {\n\tif (sequence.length === 0 || segments.length < sequence.length) {\n\t\treturn -1;\n\t}\n\n\tfor (let index = 0; index <= segments.length - sequence.length; index += 1) {\n\t\tlet matches = true;\n\t\tfor (let offset = 0; offset < sequence.length; offset += 1) {\n\t\t\tif (segments[index + offset] !== sequence[offset]) {\n\t\t\t\tmatches = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (matches) {\n\t\t\treturn index;\n\t\t}\n\t}\n\n\treturn -1;\n}\n\nfunction extractDirectoryForSegmentSequence(\n\tentrypointPath: string,\n\tsequences: string[][],\n\ttrailingSegmentCount: number,\n): string | null {\n\tconst { hasLeadingSlash, segments, normalizedSegments } = splitResolvedPath(entrypointPath);\n\n\tfor (const sequence of sequences) {\n\t\tconst sequenceIndex = findSegmentSequence(normalizedSegments, sequence);\n\t\tif (sequenceIndex < 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst endIndex = sequenceIndex + sequence.length + trailingSegmentCount;\n\t\tconst requiredSegments = normalizedSegments.slice(sequenceIndex + sequence.length, endIndex);\n\t\tif (\n\t\t\trequiredSegments.length !== trailingSegmentCount ||\n\t\t\trequiredSegments.some(\n\t\t\t\t(segment) => segment.length === 0 || segment === \".\" || segment === \"..\" || segment === \"node_modules\",\n\t\t\t)\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst directory = buildDirectoryFromSegments(segments, hasLeadingSlash, endIndex);\n\t\tif (directory) {\n\t\t\treturn directory;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction extractDirectoryForSegmentPattern(entrypointPath: string, pattern: RegExp): string | null {\n\tconst { hasLeadingSlash, segments, normalizedSegments } = splitResolvedPath(entrypointPath);\n\tconst matchingIndex = normalizedSegments.findIndex((segment) => pattern.test(segment));\n\treturn buildDirectoryFromSegments(segments, hasLeadingSlash, matchingIndex + 1);\n}\n\nfunction looksLikeTransientCachePath(path: string): boolean {\n\tconst normalizedPath = toPosixLowerPath(path);\n\treturn (\n\t\tnormalizedPath.includes(\"/.npm/_npx/\") ||\n\t\tnormalizedPath.includes(\"/npm/_npx/\") ||\n\t\tnormalizedPath.includes(\"/npm-cache/_npx/\") ||\n\t\tnormalizedPath.includes(\"/.npx/\") ||\n\t\tnormalizedPath.includes(\"/pnpm/dlx/\") ||\n\t\tnormalizedPath.includes(\"/.yarn/cache/\") ||\n\t\tnormalizedPath.includes(\"/bunx-\")\n\t);\n}\n\nfunction detectTransientAutoUpdateInstallation(options: {\n\tcurrentVersion: string;\n\tpackageName: string;\n\tentrypointPath: string;\n}): AutoUpdateInstallationInfo | null {\n\tconst npmTag = getNpmTag(options.currentVersion);\n\tconst normalizedPath = toPosixLowerPath(options.entrypointPath);\n\n\tif (!normalizedPath.includes(`/node_modules/${options.packageName.toLowerCase()}/`)) {\n\t\treturn null;\n\t}\n\n\tconst npxCacheDirectory = extractDirectoryForSegmentSequence(\n\t\toptions.entrypointPath,\n\t\t[[\".npm\", \"_npx\"], [\"npm\", \"_npx\"], [\"npm-cache\", \"_npx\"], [\".npx\"]],\n\t\t1,\n\t);\n\tif (npxCacheDirectory) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.NPX,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: buildShutdownCacheRefreshCommand(npxCacheDirectory),\n\t\t\tupdateTiming: \"shutdown\",\n\t\t};\n\t}\n\n\tconst pnpmDlxCacheDirectory = extractDirectoryForSegmentSequence(options.entrypointPath, [[\"pnpm\", \"dlx\"]], 2);\n\tif (pnpmDlxCacheDirectory) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.PNPM,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: buildShutdownCacheRefreshCommand(pnpmDlxCacheDirectory),\n\t\t\tupdateTiming: \"shutdown\",\n\t\t};\n\t}\n\n\tconst yarnDlxDirectory = extractDirectoryForSegmentPattern(options.entrypointPath, /^dlx-\\d+$/u);\n\tif (yarnDlxDirectory) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.YARN,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: buildShutdownCacheRefreshCommand(yarnDlxDirectory),\n\t\t\tupdateTiming: \"shutdown\",\n\t\t};\n\t}\n\n\tconst bunxDirectory = extractDirectoryForSegmentPattern(options.entrypointPath, /^bunx-/u);\n\tif (bunxDirectory) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.BUN,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: buildShutdownCacheRefreshCommand(bunxDirectory),\n\t\t\tupdateTiming: \"shutdown\",\n\t\t};\n\t}\n\n\treturn null;\n}\n\nfunction comparePrereleaseParts(left: Array<number | string> | null, right: Array<number | string> | null): number {\n\tif (!left && !right) {\n\t\treturn 0;\n\t}\n\tif (!left) {\n\t\treturn 1;\n\t}\n\tif (!right) {\n\t\treturn -1;\n\t}\n\n\tconst length = Math.max(left.length, right.length);\n\tfor (let index = 0; index < length; index += 1) {\n\t\tconst leftPart = left[index];\n\t\tconst rightPart = right[index];\n\t\tif (leftPart === undefined && rightPart === undefined) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (leftPart === undefined) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (rightPart === undefined) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (leftPart === rightPart) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof leftPart === \"number\" && typeof rightPart === \"number\") {\n\t\t\treturn leftPart > rightPart ? 1 : -1;\n\t\t}\n\t\tif (typeof leftPart === \"number\") {\n\t\t\treturn -1;\n\t\t}\n\t\tif (typeof rightPart === \"number\") {\n\t\t\treturn 1;\n\t\t}\n\t\treturn leftPart.localeCompare(rightPart);\n\t}\n\treturn 0;\n}\n\nexport function compareVersions(leftVersion: string, rightVersion: string): number {\n\tconst left = parseVersion(leftVersion);\n\tconst right = parseVersion(rightVersion);\n\tconst length = Math.max(left.core.length, right.core.length);\n\tfor (let index = 0; index < length; index += 1) {\n\t\tconst leftPart = left.core[index] ?? 0;\n\t\tconst rightPart = right.core[index] ?? 0;\n\t\tif (leftPart > rightPart) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (leftPart < rightPart) {\n\t\t\treturn -1;\n\t\t}\n\t}\n\treturn comparePrereleaseParts(left.prerelease, right.prerelease);\n}\n\nexport function detectAutoUpdateInstallation(options: {\n\tcurrentVersion: string;\n\tpackageName: string;\n\tentrypointPath: string;\n\tcwd: string;\n}): AutoUpdateInstallationInfo {\n\tconst normalizedPath = toPosixLowerPath(options.entrypointPath);\n\tconst npmTag = getNpmTag(options.currentVersion);\n\n\tif (isPathInside(options.entrypointPath, options.cwd)) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.LOCAL,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: null,\n\t\t\tupdateTiming: \"startup\",\n\t\t};\n\t}\n\n\tconst transientInstallation = detectTransientAutoUpdateInstallation({\n\t\tcurrentVersion: options.currentVersion,\n\t\tpackageName: options.packageName,\n\t\tentrypointPath: options.entrypointPath,\n\t});\n\tif (transientInstallation) {\n\t\treturn transientInstallation;\n\t}\n\n\tif (looksLikeTransientCachePath(options.entrypointPath)) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.UNKNOWN,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: null,\n\t\t\tupdateTiming: \"startup\",\n\t\t};\n\t}\n\n\tif (normalizedPath.includes(\"/.pnpm/global/\") || normalizedPath.includes(\"/pnpm/global/\")) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.PNPM,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: {\n\t\t\t\tcommand: \"pnpm\",\n\t\t\t\targs: [\"add\", \"-g\", `${options.packageName}@${npmTag}`],\n\t\t\t},\n\t\t\tupdateTiming: \"startup\",\n\t\t};\n\t}\n\n\tif (normalizedPath.includes(\"/.yarn/\") || normalizedPath.includes(\"/yarn/global/\")) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.YARN,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: {\n\t\t\t\tcommand: \"yarn\",\n\t\t\t\targs: [\"global\", \"add\", `${options.packageName}@${npmTag}`],\n\t\t\t},\n\t\t\tupdateTiming: \"startup\",\n\t\t};\n\t}\n\n\tif (normalizedPath.includes(\"/.bun/bin/\")) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.BUN,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: {\n\t\t\t\tcommand: \"bun\",\n\t\t\t\targs: [\"add\", \"-g\", `${options.packageName}@${npmTag}`],\n\t\t\t},\n\t\t\tupdateTiming: \"startup\",\n\t\t};\n\t}\n\n\tif (normalizedPath.includes(`/lib/node_modules/${options.packageName}/`)) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.NPM,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: {\n\t\t\t\tcommand: \"npm\",\n\t\t\t\targs: [\"install\", \"-g\", `${options.packageName}@${npmTag}`],\n\t\t\t},\n\t\t\tupdateTiming: \"startup\",\n\t\t};\n\t}\n\n\tif (normalizedPath.includes(`/node_modules/${options.packageName}/`)) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.NPM,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: {\n\t\t\t\tcommand: \"npm\",\n\t\t\t\targs: [\"install\", \"-g\", `${options.packageName}@${npmTag}`],\n\t\t\t},\n\t\t\tupdateTiming: \"startup\",\n\t\t};\n\t}\n\n\treturn {\n\t\tpackageManager: AutoUpdatePackageManager.UNKNOWN,\n\t\tnpmTag,\n\t\tupdateCommand: null,\n\t\tupdateTiming: \"startup\",\n\t};\n}\n\nfunction isAutoUpdateDisabled(env: NodeJS.ProcessEnv): boolean {\n\tif (env.KANBAN_NO_AUTO_UPDATE === \"1\") {\n\t\treturn true;\n\t}\n\tif (env.NODE_ENV === \"test\" || env.VITEST === \"true\") {\n\t\treturn true;\n\t}\n\tif (env.CI === \"true\") {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nasync function fetchLatestVersionFromRegistry(input: FetchLatestVersionInput): Promise<string | null> {\n\ttry {\n\t\tconst response = await fetch(`https://registry.npmjs.org/${input.packageName}/${input.npmTag}`, {\n\t\t\tsignal: AbortSignal.timeout(2_500),\n\t\t});\n\t\tif (!response.ok) {\n\t\t\treturn null;\n\t\t}\n\t\tconst payload = (await response.json()) as unknown;\n\t\tif (!payload || typeof payload !== \"object\") {\n\t\t\treturn null;\n\t\t}\n\t\tconst version = (payload as { version?: unknown }).version;\n\t\tif (typeof version !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\t\tconst normalized = version.trim();\n\t\treturn normalized.length > 0 ? normalized : null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction spawnDetachedUpdate(command: string, args: string[]): void {\n\tconst child = spawn(command, args, {\n\t\tdetached: true,\n\t\tstdio: \"ignore\",\n\t\tenv: process.env,\n\t\twindowsHide: true,\n\t});\n\tchild.unref();\n}\n\nfunction schedulePendingShutdownAutoUpdate(update: PendingShutdownAutoUpdate): void {\n\tpendingShutdownAutoUpdate = update;\n}\n\nexport function runPendingAutoUpdateOnShutdown(options?: {\n\tspawnUpdate?: (command: string, args: string[]) => void;\n\tlog?: (message: string) => void;\n}): void {\n\tif (!pendingShutdownAutoUpdate) {\n\t\treturn;\n\t}\n\n\tconst pendingUpdate = pendingShutdownAutoUpdate;\n\tpendingShutdownAutoUpdate = null;\n\n\tconst log = options?.log ?? console.log;\n\tlog(`New version ${pendingUpdate.latestVersion} detected. Refreshing cached Kanban for next launch.`);\n\n\tconst spawnUpdate = options?.spawnUpdate ?? spawnDetachedUpdate;\n\tspawnUpdate(pendingUpdate.command, pendingUpdate.args);\n}\n\nexport async function runAutoUpdateCheck(options: AutoUpdateStartupOptions): Promise<void> {\n\tconst env = options.env ?? process.env;\n\tif (isAutoUpdateDisabled(env)) {\n\t\treturn;\n\t}\n\n\tconst entrypointArg = options.argv?.[1] ?? process.argv[1];\n\tif (!entrypointArg) {\n\t\treturn;\n\t}\n\n\tconst resolveRealPath = options.resolveRealPath ?? ((path: string) => realpathSync(path));\n\tlet entrypointPath: string;\n\ttry {\n\t\tentrypointPath = resolveRealPath(entrypointArg);\n\t} catch {\n\t\treturn;\n\t}\n\n\tconst packageName = options.packageName ?? \"kanban\";\n\tconst installation = detectAutoUpdateInstallation({\n\t\tcurrentVersion: options.currentVersion,\n\t\tpackageName,\n\t\tentrypointPath,\n\t\tcwd: options.cwd ?? process.cwd(),\n\t});\n\tif (!installation.updateCommand) {\n\t\treturn;\n\t}\n\n\tconst fetchLatestVersion = options.fetchLatestVersion ?? fetchLatestVersionFromRegistry;\n\tconst spawnUpdate = options.spawnUpdate ?? spawnDetachedUpdate;\n\tconst scheduleShutdownUpdate = options.scheduleShutdownUpdate ?? schedulePendingShutdownAutoUpdate;\n\n\ttry {\n\t\tconst latestVersion = await fetchLatestVersion({\n\t\t\tpackageName,\n\t\t\tnpmTag: installation.npmTag,\n\t\t});\n\n\t\tif (!latestVersion || compareVersions(options.currentVersion, latestVersion) >= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (installation.updateTiming === \"shutdown\") {\n\t\t\tscheduleShutdownUpdate({\n\t\t\t\tcommand: installation.updateCommand.command,\n\t\t\t\targs: installation.updateCommand.args,\n\t\t\t\tlatestVersion,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tspawnUpdate(installation.updateCommand.command, installation.updateCommand.args);\n\t} catch {\n\t\treturn;\n\t}\n}\n\nexport function autoUpdateOnStartup(options: AutoUpdateStartupOptions): void {\n\tvoid runAutoUpdateCheck(options);\n}\n"],"names":[],"mappings":"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","debugId":"ce0a788b-7d5d-5dea-b147-5af72e491d97"}
1
+ {"version":3,"file":"auto-update.js","sources":["../../src/update/auto-update.ts"],"sourceRoot":"","sourcesContent":["import { spawn } from \"node:child_process\";\nimport { realpathSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nexport enum AutoUpdatePackageManager {\n\tNPM = \"npm\",\n\tPNPM = \"pnpm\",\n\tYARN = \"yarn\",\n\tBUN = \"bun\",\n\tNPX = \"npx\",\n\tLOCAL = \"local\",\n\tUNKNOWN = \"unknown\",\n}\n\ninterface AutoUpdateInstallCommand {\n\tcommand: string;\n\targs: string[];\n}\n\ninterface AutoUpdateInstallationInfo {\n\tpackageManager: AutoUpdatePackageManager;\n\tnpmTag: string;\n\tupdateCommand: AutoUpdateInstallCommand | null;\n\tupdateTiming: \"startup\" | \"shutdown\";\n}\n\ninterface FetchLatestVersionInput {\n\tpackageName: string;\n\tnpmTag: string;\n}\n\nexport interface AutoUpdateStartupOptions {\n\tcurrentVersion: string;\n\tpackageName?: string;\n\tenv?: NodeJS.ProcessEnv;\n\targv?: string[];\n\tcwd?: string;\n\tresolveRealPath?: (path: string) => string;\n\tfetchLatestVersion?: (input: FetchLatestVersionInput) => Promise<string | null>;\n\tspawnUpdate?: (command: string, args: string[]) => void;\n\tscheduleShutdownUpdate?: (update: PendingShutdownAutoUpdate) => void;\n}\n\ninterface ParsedVersion {\n\tcore: number[];\n\tprerelease: Array<number | string> | null;\n}\n\ninterface PendingShutdownAutoUpdate {\n\tcommand: string;\n\targs: string[];\n\tlatestVersion: string;\n}\n\nconst DELETE_DIRECTORY_AFTER_DELAY_SCRIPT = `\nconst { rmSync } = require(\"node:fs\");\n\nconst targetDirectory = process.argv[1];\nif (!targetDirectory) {\n\tprocess.exit(0);\n}\n\nsetTimeout(() => {\n\ttry {\n\t\trmSync(targetDirectory, { recursive: true, force: true, maxRetries: 8, retryDelay: 250 });\n\t} catch {}\n}, 750);\n`.trim();\n\nlet pendingShutdownAutoUpdate: PendingShutdownAutoUpdate | null = null;\n\nfunction toPosixLowerPath(path: string): string {\n\treturn path.replaceAll(\"\\\\\", \"/\").toLowerCase();\n}\n\nfunction toPosixPath(path: string): string {\n\treturn path.replaceAll(\"\\\\\", \"/\");\n}\n\nfunction isPathInside(targetPath: string, containerPath: string): boolean {\n\tconst normalizedTarget = toPosixLowerPath(resolve(targetPath));\n\tconst normalizedContainer = toPosixLowerPath(resolve(containerPath));\n\tif (normalizedTarget === normalizedContainer) {\n\t\treturn true;\n\t}\n\treturn normalizedTarget.startsWith(`${normalizedContainer}/`);\n}\n\nfunction isNightlyVersion(version: string): boolean {\n\treturn version.includes(\"-nightly.\");\n}\n\nfunction getNpmTag(currentVersion: string): string {\n\treturn isNightlyVersion(currentVersion) ? \"nightly\" : \"latest\";\n}\n\nfunction parseVersion(version: string): ParsedVersion {\n\tconst versionWithoutBuild = version.split(\"+\", 1)[0] ?? \"\";\n\tconst [corePart, prereleasePart] = versionWithoutBuild.split(\"-\", 2);\n\tconst core = corePart\n\t\t.split(\".\")\n\t\t.filter((part) => part.length > 0)\n\t\t.map((part) => Number.parseInt(part, 10));\n\tconst prerelease = prereleasePart\n\t\t? prereleasePart\n\t\t\t\t.split(\".\")\n\t\t\t\t.filter((part) => part.length > 0)\n\t\t\t\t.map((part) => (/^\\d+$/u.test(part) ? Number.parseInt(part, 10) : part))\n\t\t: null;\n\treturn {\n\t\tcore,\n\t\tprerelease,\n\t};\n}\n\nfunction buildShutdownCacheRefreshCommand(cacheDirectory: string): AutoUpdateInstallCommand {\n\treturn {\n\t\tcommand: process.execPath,\n\t\targs: [\"-e\", DELETE_DIRECTORY_AFTER_DELAY_SCRIPT, cacheDirectory],\n\t};\n}\n\nfunction splitResolvedPath(path: string): {\n\thasLeadingSlash: boolean;\n\tsegments: string[];\n\tnormalizedSegments: string[];\n} {\n\tconst resolvedPath = toPosixPath(resolve(path));\n\tconst hasLeadingSlash = resolvedPath.startsWith(\"/\");\n\tconst segments = resolvedPath.split(\"/\").filter((_segment, index) => !(hasLeadingSlash && index === 0));\n\treturn {\n\t\thasLeadingSlash,\n\t\tsegments,\n\t\tnormalizedSegments: segments.map((segment) => segment.toLowerCase()),\n\t};\n}\n\nfunction buildDirectoryFromSegments(segments: string[], hasLeadingSlash: boolean, endIndex: number): string | null {\n\tif (endIndex <= 0 || segments.length < endIndex) {\n\t\treturn null;\n\t}\n\tconst directory = segments.slice(0, endIndex).join(\"/\");\n\tif (directory.length === 0) {\n\t\treturn null;\n\t}\n\treturn hasLeadingSlash ? `/${directory}` : directory;\n}\n\nfunction findSegmentSequence(segments: string[], sequence: string[]): number {\n\tif (sequence.length === 0 || segments.length < sequence.length) {\n\t\treturn -1;\n\t}\n\n\tfor (let index = 0; index <= segments.length - sequence.length; index += 1) {\n\t\tlet matches = true;\n\t\tfor (let offset = 0; offset < sequence.length; offset += 1) {\n\t\t\tif (segments[index + offset] !== sequence[offset]) {\n\t\t\t\tmatches = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (matches) {\n\t\t\treturn index;\n\t\t}\n\t}\n\n\treturn -1;\n}\n\nfunction extractDirectoryForSegmentSequence(\n\tentrypointPath: string,\n\tsequences: string[][],\n\ttrailingSegmentCount: number,\n): string | null {\n\tconst { hasLeadingSlash, segments, normalizedSegments } = splitResolvedPath(entrypointPath);\n\n\tfor (const sequence of sequences) {\n\t\tconst sequenceIndex = findSegmentSequence(normalizedSegments, sequence);\n\t\tif (sequenceIndex < 0) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst endIndex = sequenceIndex + sequence.length + trailingSegmentCount;\n\t\tconst requiredSegments = normalizedSegments.slice(sequenceIndex + sequence.length, endIndex);\n\t\tif (\n\t\t\trequiredSegments.length !== trailingSegmentCount ||\n\t\t\trequiredSegments.some(\n\t\t\t\t(segment) => segment.length === 0 || segment === \".\" || segment === \"..\" || segment === \"node_modules\",\n\t\t\t)\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst directory = buildDirectoryFromSegments(segments, hasLeadingSlash, endIndex);\n\t\tif (directory) {\n\t\t\treturn directory;\n\t\t}\n\t}\n\n\treturn null;\n}\n\nfunction extractDirectoryForSegmentPattern(entrypointPath: string, pattern: RegExp): string | null {\n\tconst { hasLeadingSlash, segments, normalizedSegments } = splitResolvedPath(entrypointPath);\n\tconst matchingIndex = normalizedSegments.findIndex((segment) => pattern.test(segment));\n\treturn buildDirectoryFromSegments(segments, hasLeadingSlash, matchingIndex + 1);\n}\n\nfunction looksLikeTransientCachePath(path: string): boolean {\n\tconst normalizedPath = toPosixLowerPath(path);\n\treturn (\n\t\tnormalizedPath.includes(\"/.npm/_npx/\") ||\n\t\tnormalizedPath.includes(\"/npm/_npx/\") ||\n\t\tnormalizedPath.includes(\"/npm-cache/_npx/\") ||\n\t\tnormalizedPath.includes(\"/.npx/\") ||\n\t\tnormalizedPath.includes(\"/pnpm/dlx/\") ||\n\t\tnormalizedPath.includes(\"/.yarn/cache/\") ||\n\t\tnormalizedPath.includes(\"/bunx-\")\n\t);\n}\n\nfunction detectTransientAutoUpdateInstallation(options: {\n\tcurrentVersion: string;\n\tpackageName: string;\n\tentrypointPath: string;\n}): AutoUpdateInstallationInfo | null {\n\tconst npmTag = getNpmTag(options.currentVersion);\n\tconst normalizedPath = toPosixLowerPath(options.entrypointPath);\n\n\tif (!normalizedPath.includes(`/node_modules/${options.packageName.toLowerCase()}/`)) {\n\t\treturn null;\n\t}\n\n\tconst npxCacheDirectory = extractDirectoryForSegmentSequence(\n\t\toptions.entrypointPath,\n\t\t[[\".npm\", \"_npx\"], [\"npm\", \"_npx\"], [\"npm-cache\", \"_npx\"], [\".npx\"]],\n\t\t1,\n\t);\n\tif (npxCacheDirectory) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.NPX,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: buildShutdownCacheRefreshCommand(npxCacheDirectory),\n\t\t\tupdateTiming: \"shutdown\",\n\t\t};\n\t}\n\n\tconst pnpmDlxCacheDirectory = extractDirectoryForSegmentSequence(options.entrypointPath, [[\"pnpm\", \"dlx\"]], 2);\n\tif (pnpmDlxCacheDirectory) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.PNPM,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: buildShutdownCacheRefreshCommand(pnpmDlxCacheDirectory),\n\t\t\tupdateTiming: \"shutdown\",\n\t\t};\n\t}\n\n\tconst yarnDlxDirectory = extractDirectoryForSegmentPattern(options.entrypointPath, /^dlx-\\d+$/u);\n\tif (yarnDlxDirectory) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.YARN,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: buildShutdownCacheRefreshCommand(yarnDlxDirectory),\n\t\t\tupdateTiming: \"shutdown\",\n\t\t};\n\t}\n\n\tconst bunxDirectory = extractDirectoryForSegmentPattern(options.entrypointPath, /^bunx-/u);\n\tif (bunxDirectory) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.BUN,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: buildShutdownCacheRefreshCommand(bunxDirectory),\n\t\t\tupdateTiming: \"shutdown\",\n\t\t};\n\t}\n\n\treturn null;\n}\n\nfunction comparePrereleaseParts(left: Array<number | string> | null, right: Array<number | string> | null): number {\n\tif (!left && !right) {\n\t\treturn 0;\n\t}\n\tif (!left) {\n\t\treturn 1;\n\t}\n\tif (!right) {\n\t\treturn -1;\n\t}\n\n\tconst length = Math.max(left.length, right.length);\n\tfor (let index = 0; index < length; index += 1) {\n\t\tconst leftPart = left[index];\n\t\tconst rightPart = right[index];\n\t\tif (leftPart === undefined && rightPart === undefined) {\n\t\t\treturn 0;\n\t\t}\n\t\tif (leftPart === undefined) {\n\t\t\treturn -1;\n\t\t}\n\t\tif (rightPart === undefined) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (leftPart === rightPart) {\n\t\t\tcontinue;\n\t\t}\n\t\tif (typeof leftPart === \"number\" && typeof rightPart === \"number\") {\n\t\t\treturn leftPart > rightPart ? 1 : -1;\n\t\t}\n\t\tif (typeof leftPart === \"number\") {\n\t\t\treturn -1;\n\t\t}\n\t\tif (typeof rightPart === \"number\") {\n\t\t\treturn 1;\n\t\t}\n\t\treturn leftPart.localeCompare(rightPart);\n\t}\n\treturn 0;\n}\n\nexport function compareVersions(leftVersion: string, rightVersion: string): number {\n\tconst left = parseVersion(leftVersion);\n\tconst right = parseVersion(rightVersion);\n\tconst length = Math.max(left.core.length, right.core.length);\n\tfor (let index = 0; index < length; index += 1) {\n\t\tconst leftPart = left.core[index] ?? 0;\n\t\tconst rightPart = right.core[index] ?? 0;\n\t\tif (leftPart > rightPart) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (leftPart < rightPart) {\n\t\t\treturn -1;\n\t\t}\n\t}\n\treturn comparePrereleaseParts(left.prerelease, right.prerelease);\n}\n\nexport function detectAutoUpdateInstallation(options: {\n\tcurrentVersion: string;\n\tpackageName: string;\n\tentrypointPath: string;\n\tcwd: string;\n}): AutoUpdateInstallationInfo {\n\tconst normalizedPath = toPosixLowerPath(options.entrypointPath);\n\tconst npmTag = getNpmTag(options.currentVersion);\n\n\tif (isPathInside(options.entrypointPath, options.cwd)) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.LOCAL,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: null,\n\t\t\tupdateTiming: \"startup\",\n\t\t};\n\t}\n\n\tconst transientInstallation = detectTransientAutoUpdateInstallation({\n\t\tcurrentVersion: options.currentVersion,\n\t\tpackageName: options.packageName,\n\t\tentrypointPath: options.entrypointPath,\n\t});\n\tif (transientInstallation) {\n\t\treturn transientInstallation;\n\t}\n\n\tif (looksLikeTransientCachePath(options.entrypointPath)) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.UNKNOWN,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: null,\n\t\t\tupdateTiming: \"startup\",\n\t\t};\n\t}\n\n\tif (normalizedPath.includes(\"/.pnpm/global/\") || normalizedPath.includes(\"/pnpm/global/\")) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.PNPM,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: {\n\t\t\t\tcommand: \"pnpm\",\n\t\t\t\targs: [\"add\", \"-g\", `${options.packageName}@${npmTag}`],\n\t\t\t},\n\t\t\tupdateTiming: \"startup\",\n\t\t};\n\t}\n\n\tif (normalizedPath.includes(\"/.yarn/\") || normalizedPath.includes(\"/yarn/global/\")) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.YARN,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: {\n\t\t\t\tcommand: \"yarn\",\n\t\t\t\targs: [\"global\", \"add\", `${options.packageName}@${npmTag}`],\n\t\t\t},\n\t\t\tupdateTiming: \"startup\",\n\t\t};\n\t}\n\n\tif (normalizedPath.includes(\"/.bun/bin/\")) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.BUN,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: {\n\t\t\t\tcommand: \"bun\",\n\t\t\t\targs: [\"add\", \"-g\", `${options.packageName}@${npmTag}`],\n\t\t\t},\n\t\t\tupdateTiming: \"startup\",\n\t\t};\n\t}\n\n\tif (normalizedPath.includes(`/lib/node_modules/${options.packageName}/`)) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.NPM,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: {\n\t\t\t\tcommand: \"npm\",\n\t\t\t\targs: [\"install\", \"-g\", `${options.packageName}@${npmTag}`],\n\t\t\t},\n\t\t\tupdateTiming: \"startup\",\n\t\t};\n\t}\n\n\tif (normalizedPath.includes(`/node_modules/${options.packageName}/`)) {\n\t\treturn {\n\t\t\tpackageManager: AutoUpdatePackageManager.NPM,\n\t\t\tnpmTag,\n\t\t\tupdateCommand: {\n\t\t\t\tcommand: \"npm\",\n\t\t\t\targs: [\"install\", \"-g\", `${options.packageName}@${npmTag}`],\n\t\t\t},\n\t\t\tupdateTiming: \"startup\",\n\t\t};\n\t}\n\n\treturn {\n\t\tpackageManager: AutoUpdatePackageManager.UNKNOWN,\n\t\tnpmTag,\n\t\tupdateCommand: null,\n\t\tupdateTiming: \"startup\",\n\t};\n}\n\nfunction isAutoUpdateDisabled(env: NodeJS.ProcessEnv): boolean {\n\tif (env.KANBAN_NO_AUTO_UPDATE === \"1\") {\n\t\treturn true;\n\t}\n\tif (env.NODE_ENV === \"test\" || env.VITEST === \"true\") {\n\t\treturn true;\n\t}\n\tif (env.CI === \"true\") {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nasync function fetchLatestVersionFromRegistry(input: FetchLatestVersionInput): Promise<string | null> {\n\ttry {\n\t\tconst response = await fetch(`https://registry.npmjs.org/${input.packageName}/${input.npmTag}`, {\n\t\t\tsignal: AbortSignal.timeout(2_500),\n\t\t});\n\t\tif (!response.ok) {\n\t\t\treturn null;\n\t\t}\n\t\tconst payload = (await response.json()) as unknown;\n\t\tif (!payload || typeof payload !== \"object\") {\n\t\t\treturn null;\n\t\t}\n\t\tconst version = (payload as { version?: unknown }).version;\n\t\tif (typeof version !== \"string\") {\n\t\t\treturn null;\n\t\t}\n\t\tconst normalized = version.trim();\n\t\treturn normalized.length > 0 ? normalized : null;\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction spawnDetachedUpdate(command: string, args: string[]): void {\n\tconst child = spawn(resolveUpdateCommandForPlatform(command), args, {\n\t\tdetached: true,\n\t\tstdio: \"ignore\",\n\t\tenv: process.env,\n\t\twindowsHide: true,\n\t});\n\tchild.unref();\n}\n\nexport function resolveUpdateCommandForPlatform(\n\tcommand: string,\n\tplatform: NodeJS.Platform = process.platform,\n): string {\n\tif (platform !== \"win32\") {\n\t\treturn command;\n\t}\n\n\tif (command === \"npm\" || command === \"pnpm\" || command === \"yarn\") {\n\t\treturn `${command}.cmd`;\n\t}\n\n\treturn command;\n}\n\nfunction schedulePendingShutdownAutoUpdate(update: PendingShutdownAutoUpdate): void {\n\tpendingShutdownAutoUpdate = update;\n}\n\nexport function runPendingAutoUpdateOnShutdown(options?: {\n\tspawnUpdate?: (command: string, args: string[]) => void;\n\tlog?: (message: string) => void;\n}): void {\n\tif (!pendingShutdownAutoUpdate) {\n\t\treturn;\n\t}\n\n\tconst pendingUpdate = pendingShutdownAutoUpdate;\n\tpendingShutdownAutoUpdate = null;\n\n\tconst log = options?.log ?? console.log;\n\tlog(`New version ${pendingUpdate.latestVersion} detected. Refreshing cached Kanban for next launch.`);\n\n\tconst spawnUpdate = options?.spawnUpdate ?? spawnDetachedUpdate;\n\tspawnUpdate(pendingUpdate.command, pendingUpdate.args);\n}\n\nexport async function runAutoUpdateCheck(options: AutoUpdateStartupOptions): Promise<void> {\n\tconst env = options.env ?? process.env;\n\tif (isAutoUpdateDisabled(env)) {\n\t\treturn;\n\t}\n\n\tconst entrypointArg = options.argv?.[1] ?? process.argv[1];\n\tif (!entrypointArg) {\n\t\treturn;\n\t}\n\n\tconst resolveRealPath = options.resolveRealPath ?? ((path: string) => realpathSync(path));\n\tlet entrypointPath: string;\n\ttry {\n\t\tentrypointPath = resolveRealPath(entrypointArg);\n\t} catch {\n\t\treturn;\n\t}\n\n\tconst packageName = options.packageName ?? \"kanban\";\n\tconst installation = detectAutoUpdateInstallation({\n\t\tcurrentVersion: options.currentVersion,\n\t\tpackageName,\n\t\tentrypointPath,\n\t\tcwd: options.cwd ?? process.cwd(),\n\t});\n\tif (!installation.updateCommand) {\n\t\treturn;\n\t}\n\n\tconst fetchLatestVersion = options.fetchLatestVersion ?? fetchLatestVersionFromRegistry;\n\tconst spawnUpdate = options.spawnUpdate ?? spawnDetachedUpdate;\n\tconst scheduleShutdownUpdate = options.scheduleShutdownUpdate ?? schedulePendingShutdownAutoUpdate;\n\n\ttry {\n\t\tconst latestVersion = await fetchLatestVersion({\n\t\t\tpackageName,\n\t\t\tnpmTag: installation.npmTag,\n\t\t});\n\n\t\tif (!latestVersion || compareVersions(options.currentVersion, latestVersion) >= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (installation.updateTiming === \"shutdown\") {\n\t\t\tscheduleShutdownUpdate({\n\t\t\t\tcommand: installation.updateCommand.command,\n\t\t\t\targs: installation.updateCommand.args,\n\t\t\t\tlatestVersion,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tspawnUpdate(installation.updateCommand.command, installation.updateCommand.args);\n\t} catch {\n\t\treturn;\n\t}\n}\n\nexport function autoUpdateOnStartup(options: AutoUpdateStartupOptions): void {\n\tvoid runAutoUpdateCheck(options);\n}\n"],"names":[],"mappings":"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","debugId":"1098939a-908b-5347-8559-b3f5911cb326"}
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a1daa9b2-4162-58ae-844e-94b28bdc2673")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="c696e3d1-6cf7-5121-a23a-764efbdd7813")}catch(e){}}();
3
3
  var __defProp = Object.defineProperty;
4
4
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
5
5
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -31645,7 +31645,7 @@ function Q2e({ projects: e, isLoadingProjects: t = false, currentProjectId: n, r
31645
31645
  const T = y.useCallback((A) => {
31646
31646
  A.preventDefault(), b && S(), _.current = { startX: A.clientX, startWidth: h }, x(true), w.current = { userSelect: document.body.style.userSelect, cursor: document.body.style.cursor }, document.body.style.userSelect = "none", document.body.style.cursor = "ew-resize";
31647
31647
  }, [h, b, S]), [R, $] = y.useState(null), N = R !== null && r === R.id, D = R ? R.taskCounts.backlog + R.taskCounts.in_progress + R.taskCounts.review + R.taskCounts.trash : 0;
31648
- return g.jsxs("aside", { className: "relative flex flex-col min-h-0 overflow-hidden bg-surface-1", style: { width: h, minWidth: EE, maxWidth: CE, borderRight: "1px solid var(--color-divider)" }, children: [g.jsx("div", { role: "separator", "aria-orientation": "vertical", "aria-label": "Resize sidebar", onMouseDown: T, className: "absolute top-0 right-0 bottom-0 z-10 w-[5px] cursor-ew-resize hover:bg-accent/30" }), g.jsxs("div", { style: { padding: "12px 12px 8px" }, children: [g.jsx("div", { children: g.jsxs("div", { className: "font-semibold text-base flex items-baseline gap-1.5", children: [g.jsx(H2e, { size: 18, className: "text-text-primary shrink-0 self-center" }), "Cline ", g.jsxs("span", { className: "text-text-secondary font-normal text-xs", children: ["v", "0.1.41"] })] }) }), g.jsx("div", { className: "mt-2 rounded-md bg-surface-2 p-1", children: g.jsxs("div", { className: "grid grid-cols-2 gap-1", children: [g.jsx("button", { type: "button", onClick: () => s("projects"), className: at("cursor-pointer rounded-sm px-2 py-1 text-xs font-medium", i === "projects" ? "bg-surface-4 text-text-primary" : "text-text-secondary hover:text-text-primary"), children: "Projects" }), g.jsx("button", { type: "button", onClick: () => s("agent"), disabled: !o, className: at("cursor-pointer rounded-sm px-2 py-1 text-xs font-medium", i === "agent" ? "bg-surface-4 text-text-primary" : "text-text-secondary hover:text-text-primary", o ? null : "cursor-not-allowed opacity-50"), children: "Kanban Agent" })] }) }), i === "agent" ? g.jsx("p", { className: "text-text-tertiary text-xs", style: { padding: "8px 4px 0" }, children: "Add tasks, link dependencies, break work down, and manage your board. Try asking to create and link some tasks to get started." }) : null] }), i === "projects" ? g.jsxs(g.Fragment, { children: [g.jsxs("div", { className: "flex-1 min-h-0 overflow-y-auto overscroll-contain flex flex-col gap-1", style: { padding: "4px 12px" }, children: [f.length === 0 && t ? g.jsx("div", { style: { padding: "4px 0" }, children: Array.from({ length: 3 }).map((A, j) => g.jsx(i$e, {}, `project-skeleton-${j}`)) }) : null, f.map((A) => g.jsx(s$e, { project: A, isCurrent: n === A.id, removingProjectId: r, onSelect: l, onRemove: (j) => {
31648
+ return g.jsxs("aside", { className: "relative flex flex-col min-h-0 overflow-hidden bg-surface-1", style: { width: h, minWidth: EE, maxWidth: CE, borderRight: "1px solid var(--color-divider)" }, children: [g.jsx("div", { role: "separator", "aria-orientation": "vertical", "aria-label": "Resize sidebar", onMouseDown: T, className: "absolute top-0 right-0 bottom-0 z-10 w-[5px] cursor-ew-resize hover:bg-accent/30" }), g.jsxs("div", { style: { padding: "12px 12px 8px" }, children: [g.jsx("div", { children: g.jsxs("div", { className: "font-semibold text-base flex items-baseline gap-1.5", children: [g.jsx(H2e, { size: 18, className: "text-text-primary shrink-0 self-center" }), "Cline ", g.jsxs("span", { className: "text-text-secondary font-normal text-xs", children: ["v", "0.1.42"] })] }) }), g.jsx("div", { className: "mt-2 rounded-md bg-surface-2 p-1", children: g.jsxs("div", { className: "grid grid-cols-2 gap-1", children: [g.jsx("button", { type: "button", onClick: () => s("projects"), className: at("cursor-pointer rounded-sm px-2 py-1 text-xs font-medium", i === "projects" ? "bg-surface-4 text-text-primary" : "text-text-secondary hover:text-text-primary"), children: "Projects" }), g.jsx("button", { type: "button", onClick: () => s("agent"), disabled: !o, className: at("cursor-pointer rounded-sm px-2 py-1 text-xs font-medium", i === "agent" ? "bg-surface-4 text-text-primary" : "text-text-secondary hover:text-text-primary", o ? null : "cursor-not-allowed opacity-50"), children: "Kanban Agent" })] }) }), i === "agent" ? g.jsx("p", { className: "text-text-tertiary text-xs", style: { padding: "8px 4px 0" }, children: "Add tasks, link dependencies, break work down, and manage your board. Try asking to create and link some tasks to get started." }) : null] }), i === "projects" ? g.jsxs(g.Fragment, { children: [g.jsxs("div", { className: "flex-1 min-h-0 overflow-y-auto overscroll-contain flex flex-col gap-1", style: { padding: "4px 12px" }, children: [f.length === 0 && t ? g.jsx("div", { style: { padding: "4px 0" }, children: Array.from({ length: 3 }).map((A, j) => g.jsx(i$e, {}, `project-skeleton-${j}`)) }) : null, f.map((A) => g.jsx(s$e, { project: A, isCurrent: n === A.id, removingProjectId: r, onSelect: l, onRemove: (j) => {
31649
31649
  const M = f.find((G) => G.id === j);
31650
31650
  M && $(M);
31651
31651
  } }, A.id)), t ? null : g.jsxs("button", { type: "button", className: "kb-project-row flex cursor-pointer items-center gap-1.5 rounded-md text-text-secondary hover:text-text-primary", style: { padding: "6px 8px" }, onClick: d, disabled: r !== null, children: [g.jsx(au, { size: 14, className: "shrink-0" }), g.jsx("span", { className: "text-sm", children: "Add Project" })] })] }), g.jsx(n$e, {}), g.jsx(r$e, {})] }) : g.jsx("div", { className: "flex flex-1 min-h-0 flex-col", children: g.jsx("div", { className: "flex flex-1 min-h-0 overflow-hidden bg-surface-1 px-2 pb-2 pt-1", children: a ?? g.jsx("div", { className: "flex w-full items-center justify-center rounded-md border border-border bg-surface-2 px-3 text-center text-sm text-text-secondary", children: "Select a project to use the agent." }) }) }), g.jsxs(od, { open: R !== null, onOpenChange: (A) => {
@@ -42521,7 +42521,7 @@ function H4e({ children: e }) {
42521
42521
  const V4e = "https://061e8f494493d1cf3c7c918563cc0783@o4511098366263296.ingest.us.sentry.io/4511098568769536", W4e = "production";
42522
42522
  let uz = false;
42523
42523
  function G4e() {
42524
- uz || (j4e({ dsn: V4e, environment: W4e, release: "kanban@0.1.41", sendDefaultPii: false, initialScope: { tags: { app: "kanban", runtime_surface: "web" } } }), uz = true);
42524
+ uz || (j4e({ dsn: V4e, environment: W4e, release: "kanban@0.1.42", sendDefaultPii: false, initialScope: { tags: { app: "kanban", runtime_surface: "web" } } }), uz = true);
42525
42525
  }
42526
42526
  var nY = y.createContext({ client: Ll, bootstrap: void 0 });
42527
42527
  function rY(e, t, n) {
@@ -42591,6 +42591,6 @@ G4e();
42591
42591
  const iY = document.getElementById("root");
42592
42592
  if (!iY) throw new Error("Root element was not found.");
42593
42593
  hX.createRoot(iY).render(g.jsx(X4e, { children: g.jsx(H4e, { children: g.jsxs(Gte, { children: [g.jsx(FDe, {}), g.jsx(BX, { theme: "dark", position: "bottom-right", toastOptions: { style: { background: "var(--color-surface-1)", border: "1px solid var(--color-border)", color: "var(--color-text-primary)", fontSize: "13px", whiteSpace: "pre-line" } } })] }) }) }));
42594
- //# sourceMappingURL=index-OpsLqYwc.js.map
42594
+ //# sourceMappingURL=index-CJ3nLkj0.js.map
42595
42595
 
42596
- //# debugId=a1daa9b2-4162-58ae-844e-94b28bdc2673
42596
+ //# debugId=c696e3d1-6cf7-5121-a23a-764efbdd7813