kanban 0.1.26 → 0.1.28
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 +12 -3
- package/dist/cli.js.map +1 -1
- package/dist/cline-sdk/cline-event-adapter.d.ts.map +1 -1
- package/dist/cline-sdk/cline-event-adapter.js +64 -1
- package/dist/cline-sdk/cline-event-adapter.js.map +1 -1
- package/dist/cline-sdk/cline-provider-service.d.ts.map +1 -1
- package/dist/cline-sdk/cline-provider-service.js +49 -8
- package/dist/cline-sdk/cline-provider-service.js.map +1 -1
- package/dist/cline-sdk/cline-session-runtime.d.ts +5 -2
- package/dist/cline-sdk/cline-session-runtime.d.ts.map +1 -1
- package/dist/cline-sdk/cline-session-runtime.js +14 -4
- package/dist/cline-sdk/cline-session-runtime.js.map +1 -1
- package/dist/cline-sdk/cline-session-state.js +1 -1
- package/dist/cline-sdk/cline-session-state.js.map +1 -1
- package/dist/cline-sdk/cline-task-session-service.d.ts +5 -3
- package/dist/cline-sdk/cline-task-session-service.d.ts.map +1 -1
- package/dist/cline-sdk/cline-task-session-service.js +28 -14
- package/dist/cline-sdk/cline-task-session-service.js.map +1 -1
- package/dist/cline-sdk/sdk-provider-boundary.js +1 -1
- package/dist/cline-sdk/sdk-provider-boundary.js.map +1 -1
- package/dist/cline-sdk/sdk-runtime-boundary.d.ts +1 -1
- package/dist/cline-sdk/sdk-runtime-boundary.d.ts.map +1 -1
- package/dist/cline-sdk/sdk-runtime-boundary.js +1 -1
- package/dist/cline-sdk/sdk-runtime-boundary.js.map +1 -1
- package/dist/commands/task.d.ts.map +1 -1
- package/dist/commands/task.js +16 -3
- package/dist/commands/task.js.map +1 -1
- package/dist/config/runtime-config.d.ts.map +1 -1
- package/dist/config/runtime-config.js +11 -7
- package/dist/config/runtime-config.js.map +1 -1
- package/dist/core/agent-catalog.d.ts +3 -0
- package/dist/core/agent-catalog.d.ts.map +1 -1
- package/dist/core/agent-catalog.js +17 -0
- package/dist/core/agent-catalog.js.map +1 -1
- package/dist/core/api-contract.d.ts +13 -0
- package/dist/core/api-contract.d.ts.map +1 -1
- package/dist/core/api-contract.js +3 -0
- package/dist/core/api-contract.js.map +1 -1
- package/dist/core/task-board-mutations.d.ts.map +1 -1
- package/dist/core/task-board-mutations.js +4 -5
- package/dist/core/task-board-mutations.js.map +1 -1
- package/dist/prompts/append-system-prompt.d.ts.map +1 -1
- package/dist/prompts/append-system-prompt.js +10 -4
- package/dist/prompts/append-system-prompt.js.map +1 -1
- package/dist/server/runtime-state-hub.d.ts.map +1 -1
- package/dist/server/runtime-state-hub.js +3 -1
- package/dist/server/runtime-state-hub.js.map +1 -1
- package/dist/state/workspace-state.d.ts.map +1 -1
- package/dist/state/workspace-state.js +3 -2
- package/dist/state/workspace-state.js.map +1 -1
- package/dist/terminal/agent-registry.d.ts.map +1 -1
- package/dist/terminal/agent-registry.js +5 -4
- 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 +4 -1
- package/dist/terminal/agent-session-adapters.js.map +1 -1
- package/dist/terminal/session-manager.d.ts.map +1 -1
- package/dist/terminal/session-manager.js +3 -1
- package/dist/terminal/session-manager.js.map +1 -1
- package/dist/terminal/session-state-machine.js +1 -1
- package/dist/terminal/session-state-machine.js.map +1 -1
- package/dist/trpc/app-router.d.ts +2 -0
- package/dist/trpc/app-router.d.ts.map +1 -1
- package/dist/trpc/hooks-api.d.ts.map +1 -1
- package/dist/trpc/hooks-api.js +4 -1
- package/dist/trpc/hooks-api.js.map +1 -1
- package/dist/trpc/runtime-api.d.ts.map +1 -1
- package/dist/trpc/runtime-api.js +5 -1
- package/dist/trpc/runtime-api.js.map +1 -1
- package/dist/web-ui/assets/{index-Ch9fifln.js → index-BbRkQZyB.js} +19233 -18863
- package/dist/web-ui/assets/{index-C5_h_GRw.css → index-CfvtOUPc.css} +107 -2
- package/dist/web-ui/assets/onboarding/.gitkeep +1 -0
- package/dist/web-ui/index.html +2 -2
- package/dist/workspace/task-worktree-path.d.ts +2 -2
- package/dist/workspace/task-worktree-path.d.ts.map +1 -1
- package/dist/workspace/task-worktree-path.js +1 -1
- package/dist/workspace/task-worktree-path.js.map +1 -1
- package/dist/workspace/task-worktree.d.ts.map +1 -1
- package/dist/workspace/task-worktree.js +18 -1
- package/dist/workspace/task-worktree.js.map +1 -1
- package/package.json +4 -4
package/dist/cli.js
CHANGED
|
@@ -8,19 +8,28 @@ import packageJson from "../package.json" with { type: "json" };
|
|
|
8
8
|
import { registerHooksCommand } from "./commands/hooks.js";
|
|
9
9
|
import { registerTaskCommand } from "./commands/task.js";
|
|
10
10
|
import { loadRuntimeConfig, updateRuntimeConfig } from "./config/runtime-config.js";
|
|
11
|
+
import { isRuntimeAgentLaunchSupported } from "./core/agent-catalog.js";
|
|
11
12
|
import { createGitProcessEnv } from "./core/git-process-env.js";
|
|
12
13
|
import { buildKanbanRuntimeUrl, DEFAULT_KANBAN_RUNTIME_PORT, getKanbanRuntimeHost, getKanbanRuntimeOrigin, getKanbanRuntimePort, parseRuntimePort, setKanbanRuntimeHost, setKanbanRuntimePort, } from "./core/runtime-endpoint.js";
|
|
13
14
|
import { terminateProcessForTimeout } from "./server/process-termination.js";
|
|
14
|
-
const CLI_AGENT_IDS = [
|
|
15
|
+
const CLI_AGENT_IDS = [
|
|
16
|
+
"claude",
|
|
17
|
+
"codex",
|
|
18
|
+
"cline",
|
|
19
|
+
// "opencode",
|
|
20
|
+
// "droid",
|
|
21
|
+
// "gemini",
|
|
22
|
+
];
|
|
15
23
|
const KANBAN_VERSION = typeof packageJson.version === "string" ? packageJson.version : "0.1.0";
|
|
16
24
|
function parseCliAgentId(value) {
|
|
17
25
|
const normalized = value.trim().toLowerCase();
|
|
18
|
-
if (normalized === "claude" ||
|
|
26
|
+
if ((normalized === "claude" ||
|
|
19
27
|
normalized === "codex" ||
|
|
20
28
|
normalized === "gemini" ||
|
|
21
29
|
normalized === "opencode" ||
|
|
22
30
|
normalized === "droid" ||
|
|
23
|
-
normalized === "cline")
|
|
31
|
+
normalized === "cline") &&
|
|
32
|
+
isRuntimeAgentLaunchSupported(normalized)) {
|
|
24
33
|
return normalized;
|
|
25
34
|
}
|
|
26
35
|
throw new Error(`Invalid agent: ${value}. Expected one of: ${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 closeWithGrace from \"close-with-grace\";\nimport { Command } from \"commander\";\nimport packageJson from \"../package.json\" with { type: \"json\" };\n\nimport { registerHooksCommand } from \"./commands/hooks.js\";\nimport { registerTaskCommand } from \"./commands/task.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\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\tagent: RuntimeAgentId | null;\n\thost: string | 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\ninterface RootCommandOptions {\n\tagent?: RuntimeAgentId;\n\thost?: string;\n\tport?: { mode: \"fixed\"; value: number } | { mode: \"auto\" };\n\topen?: boolean;\n\tskipShutdownCleanup?: boolean;\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 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 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 { 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 (!noOpen) {\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\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): 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\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\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 (signal: NodeJS.Signals | null) => {\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\ttry {\n\t\t\tif (options.skipShutdownCleanup) {\n\t\t\t\tconsole.warn(\"Skipping shutdown task cleanup for this instance.\");\n\t\t\t}\n\t\t\tawait runtime.shutdown({\n\t\t\t\tskipSessionCleanup: options.skipShutdownCleanup,\n\t\t\t});\n\t\t\tprocess.exit(signal ? 130 : 0);\n\t\t} catch (error) {\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\n\tcloseWithGrace(\n\t\t{\n\t\t\tdelay: 10000,\n\t\t\tskip: [\"uncaughtException\", \"unhandledRejection\", \"beforeExit\"],\n\t\t\tonTimeout: (delayMs) => {\n\t\t\t\tconsole.error(`Forced exit after shutdown timeout (${delayMs}ms).`);\n\t\t\t},\n\t\t\tonSecondSignal: (signal) => {\n\t\t\t\tconsole.error(`Forced exit on second signal: ${signal}`);\n\t\t\t},\n\t\t},\n\t\tasync ({ signal }) => {\n\t\t\tawait shutdown(signal ?? null);\n\t\t},\n\t);\n}\n\nfunction createProgram(): Command {\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(\"--agent <id>\", `Default agent ID (${CLI_AGENT_IDS.join(\", \")}).`, parseCliAgentId)\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()}\\nAgent IDs: ${CLI_AGENT_IDS.join(\", \")}`);\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\tagent: options.agent ?? null,\n\t\t\thost: options.host ?? null,\n\t\t\tport: options.port ?? null,\n\t\t\tnoOpen: options.open === false,\n\t\t\tskipShutdownCleanup: options.skipShutdownCleanup === true,\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();\n\tawait program.parseAsync(argv, { from: \"user\" });\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 closeWithGrace from \"close-with-grace\";\nimport { Command } from \"commander\";\nimport packageJson from \"../package.json\" with { type: \"json\" };\n\nimport { registerHooksCommand } from \"./commands/hooks.js\";\nimport { registerTaskCommand } from \"./commands/task.js\";\nimport { loadRuntimeConfig, updateRuntimeConfig } from \"./config/runtime-config.js\";\nimport { isRuntimeAgentLaunchSupported } from \"./core/agent-catalog.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\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\tagent: RuntimeAgentId | null;\n\thost: string | null;\n\tport: { mode: \"fixed\"; value: number } | { mode: \"auto\" } | null;\n}\n\nconst CLI_AGENT_IDS: readonly RuntimeAgentId[] = [\n\t\"claude\",\n\t\"codex\",\n\t\"cline\",\n\t// \"opencode\",\n\t// \"droid\",\n\t// \"gemini\",\n];\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\t(normalized === \"claude\" ||\n\t\t\tnormalized === \"codex\" ||\n\t\t\tnormalized === \"gemini\" ||\n\t\t\tnormalized === \"opencode\" ||\n\t\t\tnormalized === \"droid\" ||\n\t\t\tnormalized === \"cline\") &&\n\t\tisRuntimeAgentLaunchSupported(normalized)\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\ninterface RootCommandOptions {\n\tagent?: RuntimeAgentId;\n\thost?: string;\n\tport?: { mode: \"fixed\"; value: number } | { mode: \"auto\" };\n\topen?: boolean;\n\tskipShutdownCleanup?: boolean;\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 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 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 { 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 (!noOpen) {\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\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): 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\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\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 (signal: NodeJS.Signals | null) => {\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\ttry {\n\t\t\tif (options.skipShutdownCleanup) {\n\t\t\t\tconsole.warn(\"Skipping shutdown task cleanup for this instance.\");\n\t\t\t}\n\t\t\tawait runtime.shutdown({\n\t\t\t\tskipSessionCleanup: options.skipShutdownCleanup,\n\t\t\t});\n\t\t\tprocess.exit(signal ? 130 : 0);\n\t\t} catch (error) {\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\n\tcloseWithGrace(\n\t\t{\n\t\t\tdelay: 10000,\n\t\t\tskip: [\"uncaughtException\", \"unhandledRejection\", \"beforeExit\"],\n\t\t\tonTimeout: (delayMs) => {\n\t\t\t\tconsole.error(`Forced exit after shutdown timeout (${delayMs}ms).`);\n\t\t\t},\n\t\t\tonSecondSignal: (signal) => {\n\t\t\t\tconsole.error(`Forced exit on second signal: ${signal}`);\n\t\t\t},\n\t\t},\n\t\tasync ({ signal }) => {\n\t\t\tawait shutdown(signal ?? null);\n\t\t},\n\t);\n}\n\nfunction createProgram(): Command {\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(\"--agent <id>\", `Default agent ID (${CLI_AGENT_IDS.join(\", \")}).`, parseCliAgentId)\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()}\\nAgent IDs: ${CLI_AGENT_IDS.join(\", \")}`);\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\tagent: options.agent ?? null,\n\t\t\thost: options.host ?? null,\n\t\t\tport: options.port ?? null,\n\t\t\tnoOpen: options.open === false,\n\t\t\tskipShutdownCleanup: options.skipShutdownCleanup === true,\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();\n\tawait program.parseAsync(argv, { from: \"user\" });\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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cline-event-adapter.d.ts","sourceRoot":"","sources":["../../src/cline-sdk/cline-event-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEzE,OAAO,EAeN,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAE1B,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,2BAA2B;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,qBAAqB,CAAC;IAC7B,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC1D,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACjE;
|
|
1
|
+
{"version":3,"file":"cline-event-adapter.d.ts","sourceRoot":"","sources":["../../src/cline-sdk/cline-event-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEzE,OAAO,EAeN,KAAK,gBAAgB,EACrB,KAAK,qBAAqB,EAE1B,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,2BAA2B;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,qBAAqB,CAAC;IAC7B,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,WAAW,EAAE,CAAC,OAAO,EAAE,yBAAyB,KAAK,IAAI,CAAC;IAC1D,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,CAAC;CACjE;AAoCD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CASnE;AAGD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,IAAI,CA0f/E"}
|
|
@@ -13,6 +13,21 @@ function getRetainedClineToolActivity(entry) {
|
|
|
13
13
|
toolInputSummary: latestHookActivity.toolInputSummary ?? null,
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
+
function extractAgentErrorMessage(error) {
|
|
17
|
+
if (typeof error === "string") {
|
|
18
|
+
const normalized = error.trim();
|
|
19
|
+
return normalized.length > 0 ? normalized : null;
|
|
20
|
+
}
|
|
21
|
+
if (error instanceof Error) {
|
|
22
|
+
const normalized = error.message.trim();
|
|
23
|
+
return normalized.length > 0 ? normalized : null;
|
|
24
|
+
}
|
|
25
|
+
if (error && typeof error === "object" && "message" in error && typeof error.message === "string") {
|
|
26
|
+
const normalized = error.message.trim();
|
|
27
|
+
return normalized.length > 0 ? normalized : null;
|
|
28
|
+
}
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
16
31
|
export function extractClineSessionId(event) {
|
|
17
32
|
if (!event || typeof event !== "object" || !("payload" in event)) {
|
|
18
33
|
return null;
|
|
@@ -26,6 +41,54 @@ export function extractClineSessionId(event) {
|
|
|
26
41
|
// Translate raw SDK events into Kanban summary and chat mutations so the session service can stay focused on host ownership.
|
|
27
42
|
export function applyClineSessionEvent(input) {
|
|
28
43
|
const { entry, event, taskId } = input;
|
|
44
|
+
if (event &&
|
|
45
|
+
typeof event === "object" &&
|
|
46
|
+
"type" in event &&
|
|
47
|
+
event.type === "agent_event" &&
|
|
48
|
+
"payload" in event &&
|
|
49
|
+
event.payload &&
|
|
50
|
+
typeof event.payload === "object" &&
|
|
51
|
+
"event" in event.payload &&
|
|
52
|
+
event.payload.event &&
|
|
53
|
+
typeof event.payload.event === "object" &&
|
|
54
|
+
"type" in event.payload.event &&
|
|
55
|
+
event.payload.event.type === "error") {
|
|
56
|
+
const errorMessage = "error" in event.payload.event ? extractAgentErrorMessage(event.payload.event.error) : null;
|
|
57
|
+
const recoverable = "recoverable" in event.payload.event && typeof event.payload.event.recoverable === "boolean"
|
|
58
|
+
? event.payload.event.recoverable
|
|
59
|
+
: false;
|
|
60
|
+
const retainedToolActivity = getRetainedClineToolActivity(entry);
|
|
61
|
+
if (!recoverable) {
|
|
62
|
+
clearActiveTurnState(entry);
|
|
63
|
+
}
|
|
64
|
+
if (recoverable && errorMessage) {
|
|
65
|
+
const retryMsg = createMessage(taskId, "system", `Retrying: ${errorMessage}`);
|
|
66
|
+
entry.messages.push(retryMsg);
|
|
67
|
+
input.emitMessage(taskId, retryMsg);
|
|
68
|
+
}
|
|
69
|
+
emitSummary(input, {
|
|
70
|
+
...(recoverable
|
|
71
|
+
? {}
|
|
72
|
+
: {
|
|
73
|
+
state: "failed",
|
|
74
|
+
reviewReason: "error",
|
|
75
|
+
}),
|
|
76
|
+
lastOutputAt: now(),
|
|
77
|
+
lastHookAt: now(),
|
|
78
|
+
latestHookActivity: {
|
|
79
|
+
activityText: recoverable
|
|
80
|
+
? `Retrying after error: ${errorMessage ?? "Unknown agent error"}`
|
|
81
|
+
: `Agent error: ${errorMessage ?? "Unknown agent error"}`,
|
|
82
|
+
toolName: retainedToolActivity.toolName,
|
|
83
|
+
toolInputSummary: retainedToolActivity.toolInputSummary,
|
|
84
|
+
finalMessage: recoverable ? null : (errorMessage ?? "Unknown agent error"),
|
|
85
|
+
hookEventName: "agent_error",
|
|
86
|
+
notificationType: null,
|
|
87
|
+
source: "cline-sdk",
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
29
92
|
if (event &&
|
|
30
93
|
typeof event === "object" &&
|
|
31
94
|
"type" in event &&
|
|
@@ -121,7 +184,7 @@ export function applyClineSessionEvent(input) {
|
|
|
121
184
|
summaryPatch.reviewReason = "interrupted";
|
|
122
185
|
}
|
|
123
186
|
else if (doneReason === "error") {
|
|
124
|
-
summaryPatch.state = "
|
|
187
|
+
summaryPatch.state = "awaiting_review";
|
|
125
188
|
summaryPatch.reviewReason = "error";
|
|
126
189
|
}
|
|
127
190
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cline-event-adapter.js","sourceRoot":"","sources":["../../src/cline-sdk/cline-event-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["// Translates raw SDK session events into Kanban summary and message mutations.\n// Keep protocol-specific parsing here so the runtime and repository can stay\n// focused on lifecycle, storage, and task-facing orchestration.\nimport type { RuntimeTaskSessionSummary } from \"../core/api-contract.js\";\nimport { formatClineToolCallLabel, getClineToolCallDisplay } from \"./cline-tool-call-display.js\";\nimport {\n\tappendAssistantChunk,\n\tappendReasoningChunk,\n\tcanReturnToRunning,\n\tclearActiveTurnState,\n\tcreateAssistantMessage,\n\tcreateMessage,\n\tcreateReasoningMessage,\n\tfinishToolCallMessage,\n\tisClineUserAttentionTool,\n\tlatestAssistantMessageMatches,\n\tnow,\n\tsetOrCreateAssistantMessage,\n\tsetOrCreateReasoningMessage,\n\tstartToolCallMessage,\n\ttype ClineTaskMessage,\n\ttype ClineTaskSessionEntry,\n\tupdateSummary,\n} from \"./cline-session-state.js\";\n\nexport interface ApplyClineSessionEventInput {\n\tevent: unknown;\n\ttaskId: string;\n\tentry: ClineTaskSessionEntry;\n\tpendingTurnCancelTaskIds: Set<string>;\n\temitSummary: (summary: RuntimeTaskSessionSummary) => void;\n\temitMessage: (taskId: string, message: ClineTaskMessage) => void;\n}\n\nfunction getRetainedClineToolActivity(entry: ClineTaskSessionEntry): {\n\ttoolName: string | null;\n\ttoolInputSummary: string | null;\n} {\n\tconst latestHookActivity = entry.summary.latestHookActivity;\n\tif (!latestHookActivity || latestHookActivity.source !== \"cline-sdk\" || !latestHookActivity.toolName) {\n\t\treturn {\n\t\t\ttoolName: null,\n\t\t\ttoolInputSummary: null,\n\t\t};\n\t}\n\n\treturn {\n\t\ttoolName: latestHookActivity.toolName,\n\t\ttoolInputSummary: latestHookActivity.toolInputSummary ?? null,\n\t};\n}\n\nexport function extractClineSessionId(event: unknown): string | null {\n\tif (!event || typeof event !== \"object\" || !(\"payload\" in event)) {\n\t\treturn null;\n\t}\n\tconst payload = event.payload;\n\tif (!payload || typeof payload !== \"object\" || !(\"sessionId\" in payload)) {\n\t\treturn null;\n\t}\n\treturn typeof payload.sessionId === \"string\" ? payload.sessionId : null;\n}\n\n// Translate raw SDK events into Kanban summary and chat mutations so the session service can stay focused on host ownership.\nexport function applyClineSessionEvent(input: ApplyClineSessionEventInput): void {\n\tconst { entry, event, taskId } = input;\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"agent_event\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"event\" in event.payload &&\n\t\tevent.payload.event &&\n\t\ttypeof event.payload.event === \"object\" &&\n\t\t\"type\" in event.payload.event &&\n\t\tevent.payload.event.type === \"content_start\" &&\n\t\t\"contentType\" in event.payload.event &&\n\t\tevent.payload.event.contentType === \"text\"\n\t) {\n\t\tconst accumulated =\n\t\t\t\"accumulated\" in event.payload.event && typeof event.payload.event.accumulated === \"string\"\n\t\t\t\t? event.payload.event.accumulated\n\t\t\t\t: null;\n\t\tconst text =\n\t\t\t\"text\" in event.payload.event && typeof event.payload.event.text === \"string\"\n\t\t\t\t? event.payload.event.text\n\t\t\t\t: null;\n\t\tif (typeof accumulated === \"string\") {\n\t\t\tconst message =\n\t\t\t\tsetOrCreateAssistantMessage(entry, taskId, accumulated) ?? createAssistantMessage(entry, taskId, accumulated);\n\t\t\tinput.emitMessage(taskId, message);\n\t\t} else if (typeof text === \"string\" && text.length > 0) {\n\t\t\tinput.emitMessage(taskId, appendAssistantChunk(entry, taskId, text));\n\t\t}\n\t\tconst retainedToolActivity = getRetainedClineToolActivity(entry);\n\t\temitSummary(input, {\n\t\t\tstate: \"running\",\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: \"Agent active\",\n\t\t\t\ttoolName: retainedToolActivity.toolName,\n\t\t\t\ttoolInputSummary: retainedToolActivity.toolInputSummary,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName: \"assistant_delta\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t});\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"agent_event\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"event\" in event.payload &&\n\t\tevent.payload.event &&\n\t\ttypeof event.payload.event === \"object\" &&\n\t\t\"type\" in event.payload.event &&\n\t\tevent.payload.event.type === \"done\"\n\t) {\n\t\tconst finalText =\n\t\t\t\"text\" in event.payload.event && typeof event.payload.event.text === \"string\"\n\t\t\t\t? event.payload.event.text.trim()\n\t\t\t\t: \"\";\n\t\tif (finalText) {\n\t\t\tconst message = setOrCreateAssistantMessage(entry, taskId, finalText);\n\t\t\tif (message) {\n\t\t\t\tinput.emitMessage(taskId, message);\n\t\t\t} else if (!latestAssistantMessageMatches(entry, finalText)) {\n\t\t\t\tconst assistantMessage = createMessage(taskId, \"assistant\", finalText);\n\t\t\t\tentry.messages.push(assistantMessage);\n\t\t\t\tinput.emitMessage(taskId, assistantMessage);\n\t\t\t}\n\t\t}\n\n\t\tconst doneReason =\n\t\t\t\"reason\" in event.payload.event && typeof event.payload.event.reason === \"string\"\n\t\t\t\t? event.payload.event.reason\n\t\t\t\t: \"completed\";\n\t\tif (doneReason === \"aborted\" && input.pendingTurnCancelTaskIds.has(taskId)) {\n\t\t\temitTurnCanceled(input);\n\t\t\treturn;\n\t\t}\n\n\t\tconst summaryPatch: Partial<RuntimeTaskSessionSummary> = {\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: finalText ? `Final: ${finalText}` : \"Waiting for review\",\n\t\t\t\ttoolName: null,\n\t\t\t\ttoolInputSummary: null,\n\t\t\t\tfinalMessage: finalText || null,\n\t\t\t\thookEventName: \"agent_end\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t};\n\t\tif (doneReason === \"aborted\") {\n\t\t\tsummaryPatch.state = \"interrupted\";\n\t\t\tsummaryPatch.reviewReason = \"interrupted\";\n\t\t} else if (doneReason === \"error\") {\n\t\t\tsummaryPatch.state = \"failed\";\n\t\t\tsummaryPatch.reviewReason = \"error\";\n\t\t} else {\n\t\t\tsummaryPatch.state = \"awaiting_review\";\n\t\t\tsummaryPatch.reviewReason = \"hook\";\n\t\t}\n\n\t\tclearActiveTurnState(entry);\n\t\temitSummary(input, summaryPatch);\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"agent_event\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"event\" in event.payload &&\n\t\tevent.payload.event &&\n\t\ttypeof event.payload.event === \"object\" &&\n\t\t\"type\" in event.payload.event &&\n\t\tevent.payload.event.type === \"content_start\" &&\n\t\t\"contentType\" in event.payload.event &&\n\t\tevent.payload.event.contentType === \"reasoning\"\n\t) {\n\t\tconst reasoning =\n\t\t\t\"reasoning\" in event.payload.event && typeof event.payload.event.reasoning === \"string\"\n\t\t\t\t? event.payload.event.reasoning\n\t\t\t\t: null;\n\t\tif (reasoning && reasoning.length > 0) {\n\t\t\tinput.emitMessage(taskId, appendReasoningChunk(entry, taskId, reasoning));\n\t\t\temitSummary(input, {\n\t\t\t\tstate: \"running\",\n\t\t\t\tlastOutputAt: now(),\n\t\t\t});\n\t\t}\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"agent_event\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"event\" in event.payload &&\n\t\tevent.payload.event &&\n\t\ttypeof event.payload.event === \"object\" &&\n\t\t\"type\" in event.payload.event &&\n\t\tevent.payload.event.type === \"content_end\" &&\n\t\t\"contentType\" in event.payload.event &&\n\t\tevent.payload.event.contentType === \"reasoning\"\n\t) {\n\t\tconst reasoning =\n\t\t\t\"reasoning\" in event.payload.event && typeof event.payload.event.reasoning === \"string\"\n\t\t\t\t? event.payload.event.reasoning\n\t\t\t\t: null;\n\t\tif (reasoning) {\n\t\t\tconst message =\n\t\t\t\tsetOrCreateReasoningMessage(entry, taskId, reasoning) ?? createReasoningMessage(entry, taskId, reasoning);\n\t\t\tinput.emitMessage(taskId, message);\n\t\t}\n\t\tentry.activeReasoningMessageId = null;\n\t\temitSummary(input, {\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"agent_event\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"event\" in event.payload &&\n\t\tevent.payload.event &&\n\t\ttypeof event.payload.event === \"object\" &&\n\t\t\"type\" in event.payload.event &&\n\t\tevent.payload.event.type === \"content_start\" &&\n\t\t\"contentType\" in event.payload.event &&\n\t\tevent.payload.event.contentType === \"tool\"\n\t) {\n\t\tconst toolName =\n\t\t\t\"toolName\" in event.payload.event && typeof event.payload.event.toolName === \"string\"\n\t\t\t\t? event.payload.event.toolName\n\t\t\t\t: null;\n\t\tconst toolCallId =\n\t\t\t\"toolCallId\" in event.payload.event && typeof event.payload.event.toolCallId === \"string\"\n\t\t\t\t? event.payload.event.toolCallId\n\t\t\t\t: null;\n\t\tconst toolInput = \"input\" in event.payload.event ? event.payload.event.input : undefined;\n\t\tconst toolDisplay = getClineToolCallDisplay(toolName, toolInput);\n\t\tconst isUserAttentionTool = isClineUserAttentionTool(toolName);\n\t\tinput.emitMessage(\n\t\t\ttaskId,\n\t\t\tstartToolCallMessage(entry, taskId, {\n\t\t\t\ttoolName,\n\t\t\t\ttoolCallId,\n\t\t\t\tinput: toolInput,\n\t\t\t}),\n\t\t);\n\t\tconst summaryPatch: Partial<RuntimeTaskSessionSummary> = {\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: `Using ${formatClineToolCallLabel(toolDisplay.toolName, toolDisplay.inputSummary)}`,\n\t\t\t\ttoolName: toolDisplay.toolName,\n\t\t\t\ttoolInputSummary: toolDisplay.inputSummary,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName: \"tool_call\",\n\t\t\t\tnotificationType: isUserAttentionTool ? \"user_attention\" : null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t};\n\t\tif (isUserAttentionTool && entry.summary.state === \"running\") {\n\t\t\tsummaryPatch.state = \"awaiting_review\";\n\t\t\tsummaryPatch.reviewReason = \"hook\";\n\t\t} else if (!isUserAttentionTool && canReturnToRunning(entry.summary.reviewReason)) {\n\t\t\tsummaryPatch.state = \"running\";\n\t\t\tsummaryPatch.reviewReason = null;\n\t\t}\n\t\temitSummary(input, summaryPatch);\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"agent_event\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"event\" in event.payload &&\n\t\tevent.payload.event &&\n\t\ttypeof event.payload.event === \"object\" &&\n\t\t\"type\" in event.payload.event &&\n\t\tevent.payload.event.type === \"content_end\" &&\n\t\t\"contentType\" in event.payload.event &&\n\t\tevent.payload.event.contentType === \"tool\"\n\t) {\n\t\tconst toolName =\n\t\t\t\"toolName\" in event.payload.event && typeof event.payload.event.toolName === \"string\"\n\t\t\t\t? event.payload.event.toolName\n\t\t\t\t: null;\n\t\tconst toolCallId =\n\t\t\t\"toolCallId\" in event.payload.event && typeof event.payload.event.toolCallId === \"string\"\n\t\t\t\t? event.payload.event.toolCallId\n\t\t\t\t: null;\n\t\tconst toolOutput = \"output\" in event.payload.event ? event.payload.event.output : undefined;\n\t\tconst toolError =\n\t\t\t\"error\" in event.payload.event && typeof event.payload.event.error === \"string\"\n\t\t\t\t? event.payload.event.error\n\t\t\t\t: null;\n\t\tconst durationMs =\n\t\t\t\"durationMs\" in event.payload.event && typeof event.payload.event.durationMs === \"number\"\n\t\t\t\t? event.payload.event.durationMs\n\t\t\t\t: null;\n\t\tconst toolInput = toolCallId ? entry.toolInputByToolCallId.get(toolCallId) : undefined;\n\t\tconst toolDisplay = getClineToolCallDisplay(toolName, toolInput);\n\t\tconst isUserAttentionTool = isClineUserAttentionTool(toolName);\n\t\tinput.emitMessage(\n\t\t\ttaskId,\n\t\t\tfinishToolCallMessage(entry, taskId, {\n\t\t\t\ttoolName,\n\t\t\t\ttoolCallId,\n\t\t\t\toutput: toolOutput,\n\t\t\t\terror: toolError,\n\t\t\t\tdurationMs,\n\t\t\t}),\n\t\t);\n\t\tconst summaryPatch: Partial<RuntimeTaskSessionSummary> = {\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: `${toolError ? \"Failed\" : \"Completed\"} ${formatClineToolCallLabel(toolDisplay.toolName, toolDisplay.inputSummary)}`,\n\t\t\t\ttoolName: toolDisplay.toolName,\n\t\t\t\ttoolInputSummary: toolDisplay.inputSummary,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName: \"tool_result\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t};\n\t\tif (isUserAttentionTool && canReturnToRunning(entry.summary.reviewReason)) {\n\t\t\tsummaryPatch.state = \"running\";\n\t\t\tsummaryPatch.reviewReason = null;\n\t\t}\n\t\temitSummary(input, summaryPatch);\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"agent_event\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"event\" in event.payload &&\n\t\tevent.payload.event &&\n\t\ttypeof event.payload.event === \"object\" &&\n\t\t\"type\" in event.payload.event &&\n\t\tevent.payload.event.type === \"content_end\" &&\n\t\t\"contentType\" in event.payload.event &&\n\t\tevent.payload.event.contentType === \"text\"\n\t) {\n\t\tconst text =\n\t\t\t\"text\" in event.payload.event && typeof event.payload.event.text === \"string\"\n\t\t\t\t? event.payload.event.text\n\t\t\t\t: null;\n\t\tif (text) {\n\t\t\tconst message =\n\t\t\t\tsetOrCreateAssistantMessage(entry, taskId, text) ?? createAssistantMessage(entry, taskId, text);\n\t\t\tinput.emitMessage(taskId, message);\n\t\t}\n\t\tentry.activeAssistantMessageId = null;\n\t\temitSummary(input, {\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"chunk\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"stream\" in event.payload &&\n\t\tevent.payload.stream === \"agent\" &&\n\t\t\"chunk\" in event.payload &&\n\t\ttypeof event.payload.chunk === \"string\"\n\t) {\n\t\tconst chunk = event.payload.chunk;\n\t\tif (chunk.length === 0 || isLikelySerializedAgentEventChunk(chunk)) {\n\t\t\treturn;\n\t\t}\n\t\tinput.emitMessage(taskId, appendAssistantChunk(entry, taskId, chunk));\n\t\tconst retainedToolActivity = getRetainedClineToolActivity(entry);\n\t\temitSummary(input, {\n\t\t\tstate: \"running\",\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: \"Agent active\",\n\t\t\t\ttoolName: retainedToolActivity.toolName,\n\t\t\t\ttoolInputSummary: retainedToolActivity.toolInputSummary,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName: \"assistant_delta\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t});\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"hook\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\"\n\t) {\n\t\tconst hookEventName =\n\t\t\t\"hookEventName\" in event.payload && typeof event.payload.hookEventName === \"string\"\n\t\t\t\t? event.payload.hookEventName\n\t\t\t\t: null;\n\t\tconst toolName =\n\t\t\t\"toolName\" in event.payload && typeof event.payload.toolName === \"string\"\n\t\t\t\t? event.payload.toolName\n\t\t\t\t: null;\n\t\tconst activityText = hookEventName && toolName ? `${hookEventName}: ${toolName}` : hookEventName;\n\t\temitSummary(input, {\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText,\n\t\t\t\ttoolName,\n\t\t\t\ttoolInputSummary: null,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName,\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t});\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"ended\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"reason\" in event.payload &&\n\t\ttypeof event.payload.reason === \"string\"\n\t) {\n\t\tconst interrupted =\n\t\t\tevent.payload.reason.includes(\"abort\") || event.payload.reason.includes(\"interrupt\");\n\t\tif (interrupted && input.pendingTurnCancelTaskIds.has(taskId)) {\n\t\t\temitTurnCanceled(input);\n\t\t\treturn;\n\t\t}\n\t\tclearActiveTurnState(entry);\n\t\temitSummary(input, {\n\t\t\tstate: interrupted ? \"interrupted\" : \"awaiting_review\",\n\t\t\treviewReason: interrupted ? \"interrupted\" : \"exit\",\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"status\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"status\" in event.payload &&\n\t\ttypeof event.payload.status === \"string\"\n\t) {\n\t\tif (event.payload.status !== \"running\") {\n\t\t\tclearActiveTurnState(entry);\n\t\t}\n\t\temitSummary(input, {\n\t\t\tstate: event.payload.status === \"running\" ? \"running\" : entry.summary.state,\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t}\n}\n\nfunction emitSummary(input: ApplyClineSessionEventInput, patch: Partial<RuntimeTaskSessionSummary>): void {\n\tinput.emitSummary(updateSummary(input.entry, patch));\n}\n\nfunction emitTurnCanceled(input: ApplyClineSessionEventInput): void {\n\tinput.pendingTurnCancelTaskIds.delete(input.taskId);\n\tclearActiveTurnState(input.entry);\n\temitSummary(input, {\n\t\tstate: \"idle\",\n\t\treviewReason: null,\n\t\tlastOutputAt: now(),\n\t\tlastHookAt: now(),\n\t\tlatestHookActivity: {\n\t\t\tactivityText: \"Turn canceled\",\n\t\t\ttoolName: null,\n\t\t\ttoolInputSummary: null,\n\t\t\tfinalMessage: null,\n\t\t\thookEventName: \"turn_canceled\",\n\t\t\tnotificationType: null,\n\t\t\tsource: \"cline-sdk\",\n\t\t},\n\t});\n}\n\nfunction isLikelySerializedAgentEventChunk(chunk: string): boolean {\n\tconst trimmed = chunk.trim();\n\tif (!trimmed) {\n\t\treturn false;\n\t}\n\tif (!(trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\"))) {\n\t\treturn false;\n\t}\n\ttry {\n\t\tconst parsed = JSON.parse(trimmed);\n\t\treturn Boolean(parsed && typeof parsed === \"object\" && \"type\" in parsed);\n\t} catch {\n\t\treturn false;\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"cline-event-adapter.js","sourceRoot":"","sources":["../../src/cline-sdk/cline-event-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["// Translates raw SDK session events into Kanban summary and message mutations.\n// Keep protocol-specific parsing here so the runtime and repository can stay\n// focused on lifecycle, storage, and task-facing orchestration.\nimport type { RuntimeTaskSessionSummary } from \"../core/api-contract.js\";\nimport { formatClineToolCallLabel, getClineToolCallDisplay } from \"./cline-tool-call-display.js\";\nimport {\n\tappendAssistantChunk,\n\tappendReasoningChunk,\n\tcanReturnToRunning,\n\tclearActiveTurnState,\n\tcreateAssistantMessage,\n\tcreateMessage,\n\tcreateReasoningMessage,\n\tfinishToolCallMessage,\n\tisClineUserAttentionTool,\n\tlatestAssistantMessageMatches,\n\tnow,\n\tsetOrCreateAssistantMessage,\n\tsetOrCreateReasoningMessage,\n\tstartToolCallMessage,\n\ttype ClineTaskMessage,\n\ttype ClineTaskSessionEntry,\n\tupdateSummary,\n} from \"./cline-session-state.js\";\n\nexport interface ApplyClineSessionEventInput {\n\tevent: unknown;\n\ttaskId: string;\n\tentry: ClineTaskSessionEntry;\n\tpendingTurnCancelTaskIds: Set<string>;\n\temitSummary: (summary: RuntimeTaskSessionSummary) => void;\n\temitMessage: (taskId: string, message: ClineTaskMessage) => void;\n}\n\nfunction getRetainedClineToolActivity(entry: ClineTaskSessionEntry): {\n\ttoolName: string | null;\n\ttoolInputSummary: string | null;\n} {\n\tconst latestHookActivity = entry.summary.latestHookActivity;\n\tif (!latestHookActivity || latestHookActivity.source !== \"cline-sdk\" || !latestHookActivity.toolName) {\n\t\treturn {\n\t\t\ttoolName: null,\n\t\t\ttoolInputSummary: null,\n\t\t};\n\t}\n\n\treturn {\n\t\ttoolName: latestHookActivity.toolName,\n\t\ttoolInputSummary: latestHookActivity.toolInputSummary ?? null,\n\t};\n}\n\nfunction extractAgentErrorMessage(error: unknown): string | null {\n\tif (typeof error === \"string\") {\n\t\tconst normalized = error.trim();\n\t\treturn normalized.length > 0 ? normalized : null;\n\t}\n\tif (error instanceof Error) {\n\t\tconst normalized = error.message.trim();\n\t\treturn normalized.length > 0 ? normalized : null;\n\t}\n\tif (error && typeof error === \"object\" && \"message\" in error && typeof error.message === \"string\") {\n\t\tconst normalized = error.message.trim();\n\t\treturn normalized.length > 0 ? normalized : null;\n\t}\n\treturn null;\n}\n\nexport function extractClineSessionId(event: unknown): string | null {\n\tif (!event || typeof event !== \"object\" || !(\"payload\" in event)) {\n\t\treturn null;\n\t}\n\tconst payload = event.payload;\n\tif (!payload || typeof payload !== \"object\" || !(\"sessionId\" in payload)) {\n\t\treturn null;\n\t}\n\treturn typeof payload.sessionId === \"string\" ? payload.sessionId : null;\n}\n\n// Translate raw SDK events into Kanban summary and chat mutations so the session service can stay focused on host ownership.\nexport function applyClineSessionEvent(input: ApplyClineSessionEventInput): void {\n\tconst { entry, event, taskId } = input;\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"agent_event\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"event\" in event.payload &&\n\t\tevent.payload.event &&\n\t\ttypeof event.payload.event === \"object\" &&\n\t\t\"type\" in event.payload.event &&\n\t\tevent.payload.event.type === \"error\"\n\t) {\n\t\tconst errorMessage =\n\t\t\t\"error\" in event.payload.event ? extractAgentErrorMessage(event.payload.event.error) : null;\n\t\tconst recoverable =\n\t\t\t\"recoverable\" in event.payload.event && typeof event.payload.event.recoverable === \"boolean\"\n\t\t\t\t? event.payload.event.recoverable\n\t\t\t\t: false;\n\t\tconst retainedToolActivity = getRetainedClineToolActivity(entry);\n\t\tif (!recoverable) {\n\t\t\tclearActiveTurnState(entry);\n\t\t}\n\t\tif (recoverable && errorMessage) {\n\t\t\tconst retryMsg = createMessage(taskId, \"system\", `Retrying: ${errorMessage}`);\n\t\t\tentry.messages.push(retryMsg);\n\t\t\tinput.emitMessage(taskId, retryMsg);\n\t\t}\n\t\temitSummary(input, {\n\t\t\t...(recoverable\n\t\t\t\t? {}\n\t\t\t\t: {\n\t\t\t\t\t\tstate: \"failed\",\n\t\t\t\t\t\treviewReason: \"error\",\n\t\t\t\t\t}),\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: recoverable\n\t\t\t\t\t? `Retrying after error: ${errorMessage ?? \"Unknown agent error\"}`\n\t\t\t\t\t: `Agent error: ${errorMessage ?? \"Unknown agent error\"}`,\n\t\t\t\ttoolName: retainedToolActivity.toolName,\n\t\t\t\ttoolInputSummary: retainedToolActivity.toolInputSummary,\n\t\t\t\tfinalMessage: recoverable ? null : (errorMessage ?? \"Unknown agent error\"),\n\t\t\t\thookEventName: \"agent_error\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t});\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"agent_event\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"event\" in event.payload &&\n\t\tevent.payload.event &&\n\t\ttypeof event.payload.event === \"object\" &&\n\t\t\"type\" in event.payload.event &&\n\t\tevent.payload.event.type === \"content_start\" &&\n\t\t\"contentType\" in event.payload.event &&\n\t\tevent.payload.event.contentType === \"text\"\n\t) {\n\t\tconst accumulated =\n\t\t\t\"accumulated\" in event.payload.event && typeof event.payload.event.accumulated === \"string\"\n\t\t\t\t? event.payload.event.accumulated\n\t\t\t\t: null;\n\t\tconst text =\n\t\t\t\"text\" in event.payload.event && typeof event.payload.event.text === \"string\"\n\t\t\t\t? event.payload.event.text\n\t\t\t\t: null;\n\t\tif (typeof accumulated === \"string\") {\n\t\t\tconst message =\n\t\t\t\tsetOrCreateAssistantMessage(entry, taskId, accumulated) ?? createAssistantMessage(entry, taskId, accumulated);\n\t\t\tinput.emitMessage(taskId, message);\n\t\t} else if (typeof text === \"string\" && text.length > 0) {\n\t\t\tinput.emitMessage(taskId, appendAssistantChunk(entry, taskId, text));\n\t\t}\n\t\tconst retainedToolActivity = getRetainedClineToolActivity(entry);\n\t\temitSummary(input, {\n\t\t\tstate: \"running\",\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: \"Agent active\",\n\t\t\t\ttoolName: retainedToolActivity.toolName,\n\t\t\t\ttoolInputSummary: retainedToolActivity.toolInputSummary,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName: \"assistant_delta\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t});\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"agent_event\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"event\" in event.payload &&\n\t\tevent.payload.event &&\n\t\ttypeof event.payload.event === \"object\" &&\n\t\t\"type\" in event.payload.event &&\n\t\tevent.payload.event.type === \"done\"\n\t) {\n\t\tconst finalText =\n\t\t\t\"text\" in event.payload.event && typeof event.payload.event.text === \"string\"\n\t\t\t\t? event.payload.event.text.trim()\n\t\t\t\t: \"\";\n\t\tif (finalText) {\n\t\t\tconst message = setOrCreateAssistantMessage(entry, taskId, finalText);\n\t\t\tif (message) {\n\t\t\t\tinput.emitMessage(taskId, message);\n\t\t\t} else if (!latestAssistantMessageMatches(entry, finalText)) {\n\t\t\t\tconst assistantMessage = createMessage(taskId, \"assistant\", finalText);\n\t\t\t\tentry.messages.push(assistantMessage);\n\t\t\t\tinput.emitMessage(taskId, assistantMessage);\n\t\t\t}\n\t\t}\n\n\t\tconst doneReason =\n\t\t\t\"reason\" in event.payload.event && typeof event.payload.event.reason === \"string\"\n\t\t\t\t? event.payload.event.reason\n\t\t\t\t: \"completed\";\n\t\tif (doneReason === \"aborted\" && input.pendingTurnCancelTaskIds.has(taskId)) {\n\t\t\temitTurnCanceled(input);\n\t\t\treturn;\n\t\t}\n\n\t\tconst summaryPatch: Partial<RuntimeTaskSessionSummary> = {\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: finalText ? `Final: ${finalText}` : \"Waiting for review\",\n\t\t\t\ttoolName: null,\n\t\t\t\ttoolInputSummary: null,\n\t\t\t\tfinalMessage: finalText || null,\n\t\t\t\thookEventName: \"agent_end\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t};\n\t\tif (doneReason === \"aborted\") {\n\t\t\tsummaryPatch.state = \"interrupted\";\n\t\t\tsummaryPatch.reviewReason = \"interrupted\";\n\t\t} else if (doneReason === \"error\") {\n\t\t\tsummaryPatch.state = \"awaiting_review\";\n\t\t\tsummaryPatch.reviewReason = \"error\";\n\t\t} else {\n\t\t\tsummaryPatch.state = \"awaiting_review\";\n\t\t\tsummaryPatch.reviewReason = \"hook\";\n\t\t}\n\n\t\tclearActiveTurnState(entry);\n\t\temitSummary(input, summaryPatch);\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"agent_event\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"event\" in event.payload &&\n\t\tevent.payload.event &&\n\t\ttypeof event.payload.event === \"object\" &&\n\t\t\"type\" in event.payload.event &&\n\t\tevent.payload.event.type === \"content_start\" &&\n\t\t\"contentType\" in event.payload.event &&\n\t\tevent.payload.event.contentType === \"reasoning\"\n\t) {\n\t\tconst reasoning =\n\t\t\t\"reasoning\" in event.payload.event && typeof event.payload.event.reasoning === \"string\"\n\t\t\t\t? event.payload.event.reasoning\n\t\t\t\t: null;\n\t\tif (reasoning && reasoning.length > 0) {\n\t\t\tinput.emitMessage(taskId, appendReasoningChunk(entry, taskId, reasoning));\n\t\t\temitSummary(input, {\n\t\t\t\tstate: \"running\",\n\t\t\t\tlastOutputAt: now(),\n\t\t\t});\n\t\t}\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"agent_event\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"event\" in event.payload &&\n\t\tevent.payload.event &&\n\t\ttypeof event.payload.event === \"object\" &&\n\t\t\"type\" in event.payload.event &&\n\t\tevent.payload.event.type === \"content_end\" &&\n\t\t\"contentType\" in event.payload.event &&\n\t\tevent.payload.event.contentType === \"reasoning\"\n\t) {\n\t\tconst reasoning =\n\t\t\t\"reasoning\" in event.payload.event && typeof event.payload.event.reasoning === \"string\"\n\t\t\t\t? event.payload.event.reasoning\n\t\t\t\t: null;\n\t\tif (reasoning) {\n\t\t\tconst message =\n\t\t\t\tsetOrCreateReasoningMessage(entry, taskId, reasoning) ?? createReasoningMessage(entry, taskId, reasoning);\n\t\t\tinput.emitMessage(taskId, message);\n\t\t}\n\t\tentry.activeReasoningMessageId = null;\n\t\temitSummary(input, {\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"agent_event\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"event\" in event.payload &&\n\t\tevent.payload.event &&\n\t\ttypeof event.payload.event === \"object\" &&\n\t\t\"type\" in event.payload.event &&\n\t\tevent.payload.event.type === \"content_start\" &&\n\t\t\"contentType\" in event.payload.event &&\n\t\tevent.payload.event.contentType === \"tool\"\n\t) {\n\t\tconst toolName =\n\t\t\t\"toolName\" in event.payload.event && typeof event.payload.event.toolName === \"string\"\n\t\t\t\t? event.payload.event.toolName\n\t\t\t\t: null;\n\t\tconst toolCallId =\n\t\t\t\"toolCallId\" in event.payload.event && typeof event.payload.event.toolCallId === \"string\"\n\t\t\t\t? event.payload.event.toolCallId\n\t\t\t\t: null;\n\t\tconst toolInput = \"input\" in event.payload.event ? event.payload.event.input : undefined;\n\t\tconst toolDisplay = getClineToolCallDisplay(toolName, toolInput);\n\t\tconst isUserAttentionTool = isClineUserAttentionTool(toolName);\n\t\tinput.emitMessage(\n\t\t\ttaskId,\n\t\t\tstartToolCallMessage(entry, taskId, {\n\t\t\t\ttoolName,\n\t\t\t\ttoolCallId,\n\t\t\t\tinput: toolInput,\n\t\t\t}),\n\t\t);\n\t\tconst summaryPatch: Partial<RuntimeTaskSessionSummary> = {\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: `Using ${formatClineToolCallLabel(toolDisplay.toolName, toolDisplay.inputSummary)}`,\n\t\t\t\ttoolName: toolDisplay.toolName,\n\t\t\t\ttoolInputSummary: toolDisplay.inputSummary,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName: \"tool_call\",\n\t\t\t\tnotificationType: isUserAttentionTool ? \"user_attention\" : null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t};\n\t\tif (isUserAttentionTool && entry.summary.state === \"running\") {\n\t\t\tsummaryPatch.state = \"awaiting_review\";\n\t\t\tsummaryPatch.reviewReason = \"hook\";\n\t\t} else if (!isUserAttentionTool && canReturnToRunning(entry.summary.reviewReason)) {\n\t\t\tsummaryPatch.state = \"running\";\n\t\t\tsummaryPatch.reviewReason = null;\n\t\t}\n\t\temitSummary(input, summaryPatch);\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"agent_event\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"event\" in event.payload &&\n\t\tevent.payload.event &&\n\t\ttypeof event.payload.event === \"object\" &&\n\t\t\"type\" in event.payload.event &&\n\t\tevent.payload.event.type === \"content_end\" &&\n\t\t\"contentType\" in event.payload.event &&\n\t\tevent.payload.event.contentType === \"tool\"\n\t) {\n\t\tconst toolName =\n\t\t\t\"toolName\" in event.payload.event && typeof event.payload.event.toolName === \"string\"\n\t\t\t\t? event.payload.event.toolName\n\t\t\t\t: null;\n\t\tconst toolCallId =\n\t\t\t\"toolCallId\" in event.payload.event && typeof event.payload.event.toolCallId === \"string\"\n\t\t\t\t? event.payload.event.toolCallId\n\t\t\t\t: null;\n\t\tconst toolOutput = \"output\" in event.payload.event ? event.payload.event.output : undefined;\n\t\tconst toolError =\n\t\t\t\"error\" in event.payload.event && typeof event.payload.event.error === \"string\"\n\t\t\t\t? event.payload.event.error\n\t\t\t\t: null;\n\t\tconst durationMs =\n\t\t\t\"durationMs\" in event.payload.event && typeof event.payload.event.durationMs === \"number\"\n\t\t\t\t? event.payload.event.durationMs\n\t\t\t\t: null;\n\t\tconst toolInput = toolCallId ? entry.toolInputByToolCallId.get(toolCallId) : undefined;\n\t\tconst toolDisplay = getClineToolCallDisplay(toolName, toolInput);\n\t\tconst isUserAttentionTool = isClineUserAttentionTool(toolName);\n\t\tinput.emitMessage(\n\t\t\ttaskId,\n\t\t\tfinishToolCallMessage(entry, taskId, {\n\t\t\t\ttoolName,\n\t\t\t\ttoolCallId,\n\t\t\t\toutput: toolOutput,\n\t\t\t\terror: toolError,\n\t\t\t\tdurationMs,\n\t\t\t}),\n\t\t);\n\t\tconst summaryPatch: Partial<RuntimeTaskSessionSummary> = {\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: `${toolError ? \"Failed\" : \"Completed\"} ${formatClineToolCallLabel(toolDisplay.toolName, toolDisplay.inputSummary)}`,\n\t\t\t\ttoolName: toolDisplay.toolName,\n\t\t\t\ttoolInputSummary: toolDisplay.inputSummary,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName: \"tool_result\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t};\n\t\tif (isUserAttentionTool && canReturnToRunning(entry.summary.reviewReason)) {\n\t\t\tsummaryPatch.state = \"running\";\n\t\t\tsummaryPatch.reviewReason = null;\n\t\t}\n\t\temitSummary(input, summaryPatch);\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"agent_event\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"event\" in event.payload &&\n\t\tevent.payload.event &&\n\t\ttypeof event.payload.event === \"object\" &&\n\t\t\"type\" in event.payload.event &&\n\t\tevent.payload.event.type === \"content_end\" &&\n\t\t\"contentType\" in event.payload.event &&\n\t\tevent.payload.event.contentType === \"text\"\n\t) {\n\t\tconst text =\n\t\t\t\"text\" in event.payload.event && typeof event.payload.event.text === \"string\"\n\t\t\t\t? event.payload.event.text\n\t\t\t\t: null;\n\t\tif (text) {\n\t\t\tconst message =\n\t\t\t\tsetOrCreateAssistantMessage(entry, taskId, text) ?? createAssistantMessage(entry, taskId, text);\n\t\t\tinput.emitMessage(taskId, message);\n\t\t}\n\t\tentry.activeAssistantMessageId = null;\n\t\temitSummary(input, {\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"chunk\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"stream\" in event.payload &&\n\t\tevent.payload.stream === \"agent\" &&\n\t\t\"chunk\" in event.payload &&\n\t\ttypeof event.payload.chunk === \"string\"\n\t) {\n\t\tconst chunk = event.payload.chunk;\n\t\tif (chunk.length === 0 || isLikelySerializedAgentEventChunk(chunk)) {\n\t\t\treturn;\n\t\t}\n\t\tinput.emitMessage(taskId, appendAssistantChunk(entry, taskId, chunk));\n\t\tconst retainedToolActivity = getRetainedClineToolActivity(entry);\n\t\temitSummary(input, {\n\t\t\tstate: \"running\",\n\t\t\tlastOutputAt: now(),\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText: \"Agent active\",\n\t\t\t\ttoolName: retainedToolActivity.toolName,\n\t\t\t\ttoolInputSummary: retainedToolActivity.toolInputSummary,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName: \"assistant_delta\",\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t});\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"hook\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\"\n\t) {\n\t\tconst hookEventName =\n\t\t\t\"hookEventName\" in event.payload && typeof event.payload.hookEventName === \"string\"\n\t\t\t\t? event.payload.hookEventName\n\t\t\t\t: null;\n\t\tconst toolName =\n\t\t\t\"toolName\" in event.payload && typeof event.payload.toolName === \"string\"\n\t\t\t\t? event.payload.toolName\n\t\t\t\t: null;\n\t\tconst activityText = hookEventName && toolName ? `${hookEventName}: ${toolName}` : hookEventName;\n\t\temitSummary(input, {\n\t\t\tlastHookAt: now(),\n\t\t\tlatestHookActivity: {\n\t\t\t\tactivityText,\n\t\t\t\ttoolName,\n\t\t\t\ttoolInputSummary: null,\n\t\t\t\tfinalMessage: null,\n\t\t\t\thookEventName,\n\t\t\t\tnotificationType: null,\n\t\t\t\tsource: \"cline-sdk\",\n\t\t\t},\n\t\t});\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"ended\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"reason\" in event.payload &&\n\t\ttypeof event.payload.reason === \"string\"\n\t) {\n\t\tconst interrupted =\n\t\t\tevent.payload.reason.includes(\"abort\") || event.payload.reason.includes(\"interrupt\");\n\t\tif (interrupted && input.pendingTurnCancelTaskIds.has(taskId)) {\n\t\t\temitTurnCanceled(input);\n\t\t\treturn;\n\t\t}\n\t\tclearActiveTurnState(entry);\n\t\temitSummary(input, {\n\t\t\tstate: interrupted ? \"interrupted\" : \"awaiting_review\",\n\t\t\treviewReason: interrupted ? \"interrupted\" : \"exit\",\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t\treturn;\n\t}\n\n\tif (\n\t\tevent &&\n\t\ttypeof event === \"object\" &&\n\t\t\"type\" in event &&\n\t\tevent.type === \"status\" &&\n\t\t\"payload\" in event &&\n\t\tevent.payload &&\n\t\ttypeof event.payload === \"object\" &&\n\t\t\"status\" in event.payload &&\n\t\ttypeof event.payload.status === \"string\"\n\t) {\n\t\tif (event.payload.status !== \"running\") {\n\t\t\tclearActiveTurnState(entry);\n\t\t}\n\t\temitSummary(input, {\n\t\t\tstate: event.payload.status === \"running\" ? \"running\" : entry.summary.state,\n\t\t\tlastOutputAt: now(),\n\t\t});\n\t}\n}\n\nfunction emitSummary(input: ApplyClineSessionEventInput, patch: Partial<RuntimeTaskSessionSummary>): void {\n\tinput.emitSummary(updateSummary(input.entry, patch));\n}\n\nfunction emitTurnCanceled(input: ApplyClineSessionEventInput): void {\n\tinput.pendingTurnCancelTaskIds.delete(input.taskId);\n\tclearActiveTurnState(input.entry);\n\temitSummary(input, {\n\t\tstate: \"idle\",\n\t\treviewReason: null,\n\t\tlastOutputAt: now(),\n\t\tlastHookAt: now(),\n\t\tlatestHookActivity: {\n\t\t\tactivityText: \"Turn canceled\",\n\t\t\ttoolName: null,\n\t\t\ttoolInputSummary: null,\n\t\t\tfinalMessage: null,\n\t\t\thookEventName: \"turn_canceled\",\n\t\t\tnotificationType: null,\n\t\t\tsource: \"cline-sdk\",\n\t\t},\n\t});\n}\n\nfunction isLikelySerializedAgentEventChunk(chunk: string): boolean {\n\tconst trimmed = chunk.trim();\n\tif (!trimmed) {\n\t\treturn false;\n\t}\n\tif (!(trimmed.startsWith(\"{\") || trimmed.startsWith(\"[\"))) {\n\t\treturn false;\n\t}\n\ttry {\n\t\tconst parsed = JSON.parse(trimmed);\n\t\treturn Boolean(parsed && typeof parsed === \"object\" && \"type\" in parsed);\n\t} catch {\n\t\treturn false;\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cline-provider-service.d.ts","sourceRoot":"","sources":["../../src/cline-sdk/cline-provider-service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,8BAA8B,EAE9B,mCAAmC,EAEnC,kCAAkC,EAClC,4BAA4B,EAC5B,wCAAwC,EACxC,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACN,KAAK,2BAA2B,EAShC,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"cline-provider-service.d.ts","sourceRoot":"","sources":["../../src/cline-sdk/cline-provider-service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,8BAA8B,EAE9B,mCAAmC,EAEnC,kCAAkC,EAClC,4BAA4B,EAC5B,wCAAwC,EACxC,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACN,KAAK,2BAA2B,EAShC,MAAM,4BAA4B,CAAC;AASpC,MAAM,WAAW,yBAAyB;IACzC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AA2OD,wBAAgB,0BAA0B;kCAKV,4BAA4B;2BAI7B,OAAO,CAAC,yBAAyB,CAAC;0BA+BnC,OAAO,CAAC,mCAAmC,CAAC;kCAwCpC,MAAM,GAAG,OAAO,CAAC,kCAAkC,CAAC;gCAkD5D;QAC3B,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,GAAG,wCAAwC;yBAsDjB;QAC1B,UAAU,EAAE,2BAA2B,CAAC;QACxC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,GAAG,OAAO,CAAC,8BAA8B,CAAC;EAiD5C"}
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { openInBrowser } from "../server/browser.js";
|
|
2
2
|
import { getLastUsedSdkProviderSettings, getSdkProviderSettings, listSdkProviderCatalog, listSdkProviderModels, loginManagedOauthProvider, refreshManagedOauthCredentials, saveSdkProviderSettings, } from "./sdk-provider-boundary.js";
|
|
3
3
|
const WORKOS_TOKEN_PREFIX = "workos:";
|
|
4
|
+
const MANAGED_PROVIDER_ENV_KEYS = {
|
|
5
|
+
cline: ["CLINE_API_KEY"],
|
|
6
|
+
oca: ["OCA_API_KEY"],
|
|
7
|
+
"openai-codex": [],
|
|
8
|
+
};
|
|
4
9
|
function toErrorMessage(error) {
|
|
5
10
|
if (error instanceof Error) {
|
|
6
11
|
return error.message;
|
|
@@ -10,6 +15,15 @@ function toErrorMessage(error) {
|
|
|
10
15
|
function isManagedOauthProviderId(providerId) {
|
|
11
16
|
return providerId === "cline" || providerId === "oca" || providerId === "openai-codex";
|
|
12
17
|
}
|
|
18
|
+
function formatManagedProviderDisplayName(providerId) {
|
|
19
|
+
if (providerId === "cline") {
|
|
20
|
+
return "Cline";
|
|
21
|
+
}
|
|
22
|
+
if (providerId === "oca") {
|
|
23
|
+
return "Oracle Code Assist";
|
|
24
|
+
}
|
|
25
|
+
return "OpenAI Codex";
|
|
26
|
+
}
|
|
13
27
|
function stripWorkosPrefix(accessToken) {
|
|
14
28
|
if (accessToken.toLowerCase().startsWith(WORKOS_TOKEN_PREFIX)) {
|
|
15
29
|
return accessToken.slice(WORKOS_TOKEN_PREFIX.length);
|
|
@@ -41,6 +55,28 @@ function resolveVisibleApiKey(settings) {
|
|
|
41
55
|
const apiKey = settings?.apiKey?.trim() || settings?.auth?.apiKey?.trim() || "";
|
|
42
56
|
return apiKey.length > 0 ? apiKey : null;
|
|
43
57
|
}
|
|
58
|
+
function readEnvApiKey(envKey) {
|
|
59
|
+
const apiKey = process.env[envKey]?.trim() ?? "";
|
|
60
|
+
return apiKey.length > 0 ? apiKey : null;
|
|
61
|
+
}
|
|
62
|
+
function resolveManagedProviderEnvApiKey(providerId) {
|
|
63
|
+
for (const envKey of MANAGED_PROVIDER_ENV_KEYS[providerId]) {
|
|
64
|
+
const apiKey = readEnvApiKey(envKey);
|
|
65
|
+
if (apiKey) {
|
|
66
|
+
return apiKey;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
function resolveManagedProviderLaunchApiKey(input) {
|
|
72
|
+
const resolvedApiKey = input.oauthApiKey ?? resolveVisibleApiKey(input.settings) ?? resolveManagedProviderEnvApiKey(input.providerId);
|
|
73
|
+
if (resolvedApiKey) {
|
|
74
|
+
return resolvedApiKey;
|
|
75
|
+
}
|
|
76
|
+
const envKeys = MANAGED_PROVIDER_ENV_KEYS[input.providerId];
|
|
77
|
+
const envHelp = envKeys.length > 0 ? ` or set ${envKeys.join(" or ")}` : "";
|
|
78
|
+
throw new Error(`${formatManagedProviderDisplayName(input.providerId)} provider is selected but no ${formatManagedProviderDisplayName(input.providerId)} credentials are configured. Sign in from Settings${envHelp} before starting a native Cline task.`);
|
|
79
|
+
}
|
|
44
80
|
function hasOauthAccessToken(settings) {
|
|
45
81
|
return (settings?.auth?.accessToken?.trim() ?? "").length > 0;
|
|
46
82
|
}
|
|
@@ -168,20 +204,25 @@ export function createClineProviderService() {
|
|
|
168
204
|
async resolveLaunchConfig() {
|
|
169
205
|
const selectedSettings = getSelectedProviderSettings();
|
|
170
206
|
if (!selectedSettings) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
};
|
|
207
|
+
throw new Error("No native Cline provider is configured. Open Settings, choose a provider, and then start the task again.");
|
|
208
|
+
}
|
|
209
|
+
const normalizedProviderId = selectedSettings.provider.trim().toLowerCase();
|
|
210
|
+
if (!normalizedProviderId) {
|
|
211
|
+
throw new Error("No native Cline provider is configured. Open Settings, choose a provider, and then start the task again.");
|
|
177
212
|
}
|
|
178
|
-
const normalizedProviderId = selectedSettings.provider.trim().toLowerCase() || "cline";
|
|
179
213
|
const oauthResolution = await refreshManagedOauthSettings(selectedSettings);
|
|
180
214
|
const resolvedSettings = oauthResolution?.settings ?? selectedSettings;
|
|
215
|
+
const apiKey = isManagedOauthProviderId(normalizedProviderId)
|
|
216
|
+
? resolveManagedProviderLaunchApiKey({
|
|
217
|
+
providerId: normalizedProviderId,
|
|
218
|
+
settings: resolvedSettings,
|
|
219
|
+
oauthApiKey: oauthResolution?.apiKey ?? null,
|
|
220
|
+
})
|
|
221
|
+
: resolveVisibleApiKey(resolvedSettings);
|
|
181
222
|
return {
|
|
182
223
|
providerId: normalizedProviderId,
|
|
183
224
|
modelId: resolvedSettings.model?.trim() || null,
|
|
184
|
-
apiKey
|
|
225
|
+
apiKey,
|
|
185
226
|
baseUrl: resolvedSettings.baseUrl?.trim() || null,
|
|
186
227
|
};
|
|
187
228
|
},
|