@termlink/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +84 -0
  3. package/dist/auth/login.d.ts +55 -0
  4. package/dist/auth/login.d.ts.map +1 -0
  5. package/dist/auth/login.js +238 -0
  6. package/dist/auth/login.js.map +1 -0
  7. package/dist/auth/oauth-defaults.d.ts +9 -0
  8. package/dist/auth/oauth-defaults.d.ts.map +1 -0
  9. package/dist/auth/oauth-defaults.js +9 -0
  10. package/dist/auth/oauth-defaults.js.map +1 -0
  11. package/dist/cli.d.ts +3 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +319 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/errors.d.ts +8 -0
  16. package/dist/errors.d.ts.map +1 -0
  17. package/dist/errors.js +13 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/index.d.ts +20 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +19 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/providers/claude/history.d.ts +15 -0
  24. package/dist/providers/claude/history.d.ts.map +1 -0
  25. package/dist/providers/claude/history.js +71 -0
  26. package/dist/providers/claude/history.js.map +1 -0
  27. package/dist/providers/claude/input-queue.d.ts +8 -0
  28. package/dist/providers/claude/input-queue.d.ts.map +1 -0
  29. package/dist/providers/claude/input-queue.js +34 -0
  30. package/dist/providers/claude/input-queue.js.map +1 -0
  31. package/dist/providers/claude/mapper.d.ts +21 -0
  32. package/dist/providers/claude/mapper.d.ts.map +1 -0
  33. package/dist/providers/claude/mapper.js +136 -0
  34. package/dist/providers/claude/mapper.js.map +1 -0
  35. package/dist/providers/claude/provider.d.ts +46 -0
  36. package/dist/providers/claude/provider.d.ts.map +1 -0
  37. package/dist/providers/claude/provider.js +148 -0
  38. package/dist/providers/claude/provider.js.map +1 -0
  39. package/dist/providers/claude/session.d.ts +27 -0
  40. package/dist/providers/claude/session.d.ts.map +1 -0
  41. package/dist/providers/claude/session.js +353 -0
  42. package/dist/providers/claude/session.js.map +1 -0
  43. package/dist/providers/codex/app-server.d.ts +24 -0
  44. package/dist/providers/codex/app-server.d.ts.map +1 -0
  45. package/dist/providers/codex/app-server.js +79 -0
  46. package/dist/providers/codex/app-server.js.map +1 -0
  47. package/dist/providers/codex/command.d.ts +12 -0
  48. package/dist/providers/codex/command.d.ts.map +1 -0
  49. package/dist/providers/codex/command.js +60 -0
  50. package/dist/providers/codex/command.js.map +1 -0
  51. package/dist/providers/codex/history.d.ts +5 -0
  52. package/dist/providers/codex/history.d.ts.map +1 -0
  53. package/dist/providers/codex/history.js +33 -0
  54. package/dist/providers/codex/history.js.map +1 -0
  55. package/dist/providers/codex/mapper.d.ts +13 -0
  56. package/dist/providers/codex/mapper.d.ts.map +1 -0
  57. package/dist/providers/codex/mapper.js +83 -0
  58. package/dist/providers/codex/mapper.js.map +1 -0
  59. package/dist/providers/codex/protocol.d.ts +223 -0
  60. package/dist/providers/codex/protocol.d.ts.map +1 -0
  61. package/dist/providers/codex/protocol.js +11 -0
  62. package/dist/providers/codex/protocol.js.map +1 -0
  63. package/dist/providers/codex/provider.d.ts +28 -0
  64. package/dist/providers/codex/provider.d.ts.map +1 -0
  65. package/dist/providers/codex/provider.js +116 -0
  66. package/dist/providers/codex/provider.js.map +1 -0
  67. package/dist/providers/codex/rpc.d.ts +23 -0
  68. package/dist/providers/codex/rpc.d.ts.map +1 -0
  69. package/dist/providers/codex/rpc.js +104 -0
  70. package/dist/providers/codex/rpc.js.map +1 -0
  71. package/dist/providers/codex/session.d.ts +16 -0
  72. package/dist/providers/codex/session.d.ts.map +1 -0
  73. package/dist/providers/codex/session.js +262 -0
  74. package/dist/providers/codex/session.js.map +1 -0
  75. package/dist/providers/display.d.ts +9 -0
  76. package/dist/providers/display.d.ts.map +1 -0
  77. package/dist/providers/display.js +21 -0
  78. package/dist/providers/display.js.map +1 -0
  79. package/dist/providers/terminal.d.ts +24 -0
  80. package/dist/providers/terminal.d.ts.map +1 -0
  81. package/dist/providers/terminal.js +33 -0
  82. package/dist/providers/terminal.js.map +1 -0
  83. package/dist/providers/types.d.ts +72 -0
  84. package/dist/providers/types.d.ts.map +1 -0
  85. package/dist/providers/types.js +2 -0
  86. package/dist/providers/types.js.map +1 -0
  87. package/dist/relay/api.d.ts +13 -0
  88. package/dist/relay/api.d.ts.map +1 -0
  89. package/dist/relay/api.js +75 -0
  90. package/dist/relay/api.js.map +1 -0
  91. package/dist/relay/device.d.ts +26 -0
  92. package/dist/relay/device.d.ts.map +1 -0
  93. package/dist/relay/device.js +83 -0
  94. package/dist/relay/device.js.map +1 -0
  95. package/dist/relay/relay-host.d.ts +41 -0
  96. package/dist/relay/relay-host.d.ts.map +1 -0
  97. package/dist/relay/relay-host.js +238 -0
  98. package/dist/relay/relay-host.js.map +1 -0
  99. package/dist/server/coalesce.d.ts +15 -0
  100. package/dist/server/coalesce.d.ts.map +1 -0
  101. package/dist/server/coalesce.js +50 -0
  102. package/dist/server/coalesce.js.map +1 -0
  103. package/dist/server/connection.d.ts +30 -0
  104. package/dist/server/connection.d.ts.map +1 -0
  105. package/dist/server/connection.js +182 -0
  106. package/dist/server/connection.js.map +1 -0
  107. package/dist/server/local-server.d.ts +27 -0
  108. package/dist/server/local-server.d.ts.map +1 -0
  109. package/dist/server/local-server.js +108 -0
  110. package/dist/server/local-server.js.map +1 -0
  111. package/dist/session/event-log.d.ts +17 -0
  112. package/dist/session/event-log.d.ts.map +1 -0
  113. package/dist/session/event-log.js +21 -0
  114. package/dist/session/event-log.js.map +1 -0
  115. package/dist/session/manager.d.ts +62 -0
  116. package/dist/session/manager.d.ts.map +1 -0
  117. package/dist/session/manager.js +282 -0
  118. package/dist/session/manager.js.map +1 -0
  119. package/dist/session/session.d.ts +43 -0
  120. package/dist/session/session.d.ts.map +1 -0
  121. package/dist/session/session.js +310 -0
  122. package/dist/session/session.js.map +1 -0
  123. package/dist/session/store.d.ts +22 -0
  124. package/dist/session/store.d.ts.map +1 -0
  125. package/dist/session/store.js +44 -0
  126. package/dist/session/store.js.map +1 -0
  127. package/dist/session/terminal-session.d.ts +52 -0
  128. package/dist/session/terminal-session.d.ts.map +1 -0
  129. package/dist/session/terminal-session.js +210 -0
  130. package/dist/session/terminal-session.js.map +1 -0
  131. package/dist/util/id.d.ts +2 -0
  132. package/dist/util/id.d.ts.map +1 -0
  133. package/dist/util/id.js +5 -0
  134. package/dist/util/id.js.map +1 -0
  135. package/dist/util/lock.d.ts +12 -0
  136. package/dist/util/lock.d.ts.map +1 -0
  137. package/dist/util/lock.js +52 -0
  138. package/dist/util/lock.js.map +1 -0
  139. package/dist/util/which.d.ts +3 -0
  140. package/dist/util/which.d.ts.map +1 -0
  141. package/dist/util/which.js +12 -0
  142. package/dist/util/which.js.map +1 -0
  143. package/dist/version.d.ts +2 -0
  144. package/dist/version.d.ts.map +1 -0
  145. package/dist/version.js +5 -0
  146. package/dist/version.js.map +1 -0
  147. package/package.json +56 -0
@@ -0,0 +1,136 @@
1
+ import { readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { createTwoFilesPatch } from "diff";
4
+ import { displayCommand } from "../display.js";
5
+ const MAX_DIFF_CHARS = 200_000;
6
+ export function displayPath(file, cwd) {
7
+ const relative = path.relative(cwd, file);
8
+ if (!relative || relative.startsWith("..") || path.isAbsolute(relative))
9
+ return file;
10
+ return relative.split(path.sep).join("/");
11
+ }
12
+ export function unifiedDiff(name, before, after) {
13
+ const patch = createTwoFilesPatch(`a/${name}`, `b/${name}`, before, after, undefined, undefined, { context: 3 });
14
+ // jsdiff opens with an "Index:"/"====" banner; start at the --- line like git does.
15
+ const start = patch.indexOf("--- ");
16
+ const diff = start >= 0 ? patch.slice(start) : patch;
17
+ return diff.length > MAX_DIFF_CHARS ? `${diff.slice(0, MAX_DIFF_CHARS)}\n... diff truncated` : diff;
18
+ }
19
+ function readIfExists(file) {
20
+ try {
21
+ return readFileSync(file, "utf8");
22
+ }
23
+ catch {
24
+ return null;
25
+ }
26
+ }
27
+ function applyEdit(text, edit) {
28
+ const oldText = typeof edit.old_string === "string" ? edit.old_string : "";
29
+ const newText = typeof edit.new_string === "string" ? edit.new_string : "";
30
+ if (!oldText || !text.includes(oldText))
31
+ return null;
32
+ return edit.replace_all === true ? text.split(oldText).join(newText) : text.replace(oldText, () => newText);
33
+ }
34
+ /**
35
+ * The file changes a Claude file tool is about to make. Claude reports edits as
36
+ * old/new strings, so the host reads the file as it is now (before the tool runs)
37
+ * and computes a real unified diff. Returns null for tools that do not edit files.
38
+ */
39
+ export function fileChangesFor(tool, input, cwd, readFiles = true) {
40
+ const target = typeof input.file_path === "string" ? input.file_path : input.notebook_path;
41
+ if (typeof target !== "string")
42
+ return null;
43
+ const file = path.resolve(cwd, target);
44
+ const name = displayPath(file, cwd);
45
+ // History import passes readFiles=false: the file on disk is no longer the "before".
46
+ const read = (f) => (readFiles ? readIfExists(f) : null);
47
+ switch (tool) {
48
+ case "Write": {
49
+ const before = read(file);
50
+ const after = typeof input.content === "string" ? input.content : "";
51
+ const action = before !== null || !readFiles ? "modify" : "add";
52
+ return [{ path: name, action, diff: unifiedDiff(name, before ?? "", after) }];
53
+ }
54
+ case "Edit":
55
+ case "MultiEdit": {
56
+ const edits = tool === "Edit" ? [input] : Array.isArray(input.edits) ? input.edits : [];
57
+ const before = read(file);
58
+ let after = before;
59
+ for (const edit of edits)
60
+ after = after === null ? null : applyEdit(after, edit);
61
+ if (before !== null && after !== null)
62
+ return [{ path: name, action: "modify", diff: unifiedDiff(name, before, after) }];
63
+ // The file is not readable or an edit no longer matches: show the edits themselves.
64
+ // Snippets rarely end in a newline; add one so the diff has no "No newline" markers.
65
+ const line = (value) => {
66
+ const text = String(value ?? "");
67
+ return text.endsWith("\n") ? text : `${text}\n`;
68
+ };
69
+ const diff = edits.map((e) => unifiedDiff(name, line(e.old_string), line(e.new_string))).join("\n");
70
+ return [{ path: name, action: "modify", diff }];
71
+ }
72
+ case "NotebookEdit":
73
+ return [{ path: name, action: "modify" }];
74
+ default:
75
+ return null;
76
+ }
77
+ }
78
+ /** Maps a tool_use block to the item shown while the tool runs. */
79
+ export function mapToolUse(id, name, input, cwd, options = {}) {
80
+ // Claude Code on Windows runs shell commands through its PowerShell tool.
81
+ if (name === "Bash" || name === "PowerShell") {
82
+ const command = typeof input.command === "string" ? input.command : "";
83
+ const display = displayCommand(command);
84
+ return { id, kind: "command", command, ...(display ? { display } : {}), cwd, status: "in_progress" };
85
+ }
86
+ const changes = fileChangesFor(name, input, cwd, options.readFiles ?? true);
87
+ if (changes)
88
+ return { id, kind: "file_change", changes, status: "in_progress" };
89
+ if (name === "TodoWrite" && Array.isArray(input.todos)) {
90
+ const todos = input.todos;
91
+ return {
92
+ id,
93
+ kind: "todo",
94
+ entries: todos.map((t) => ({ text: String(t.content ?? ""), done: t.status === "completed" })),
95
+ status: "in_progress",
96
+ };
97
+ }
98
+ return { id, kind: "tool", name, input, status: "in_progress" };
99
+ }
100
+ export function toolResultText(content) {
101
+ if (typeof content === "string")
102
+ return content;
103
+ if (!Array.isArray(content))
104
+ return "";
105
+ return content
106
+ .map((block) => typeof block === "object" && block !== null && "text" in block && typeof block.text === "string" ? block.text : "")
107
+ .filter(Boolean)
108
+ .join("\n");
109
+ }
110
+ function bashOutput(structured) {
111
+ if (typeof structured !== "object" || structured === null)
112
+ return null;
113
+ const { stdout, stderr } = structured;
114
+ if (typeof stdout !== "string" && typeof stderr !== "string")
115
+ return null;
116
+ const out = typeof stdout === "string" ? stdout : "";
117
+ const err = typeof stderr === "string" && stderr ? stderr : "";
118
+ return out && err ? `${out}\n${err}` : out || err;
119
+ }
120
+ /** Final state of a tool item once its tool_result arrives. */
121
+ export function completeToolItem(item, result, structured, declined) {
122
+ const status = declined ? "declined" : result.is_error ? "failed" : "completed";
123
+ const text = toolResultText(result.content);
124
+ switch (item.kind) {
125
+ case "command": {
126
+ const exit = /exit code (\d+)/i.exec(text);
127
+ const exitCode = declined ? null : exit ? Number(exit[1]) : result.is_error ? null : 0;
128
+ return { ...item, output: bashOutput(structured) ?? text, exitCode, status };
129
+ }
130
+ case "tool":
131
+ return { ...item, output: text, status };
132
+ default:
133
+ return { ...item, status };
134
+ }
135
+ }
136
+ //# sourceMappingURL=mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapper.js","sourceRoot":"","sources":["../../../src/providers/claude/mapper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { type PermissionMode } from "@anthropic-ai/claude-agent-sdk";
2
+ import type { EventSink, HistoryTurn, ProbeResult, ProviderAdapter, ProviderSession, StartOptions } from "../types.js";
3
+ import { type TranscriptMessage } from "./history.js";
4
+ import { type QueryFn } from "./session.js";
5
+ /** Modes a remote user may run under. bypassPermissions is deliberately not offered. */
6
+ export declare const CLAUDE_PERMISSION_MODES: readonly ["default", "acceptEdits", "plan", "dontAsk", "auto"];
7
+ export type ClaudePermissionMode = (typeof CLAUDE_PERMISSION_MODES)[number] & PermissionMode;
8
+ export type HistoryFn = (sessionId: string, options: {
9
+ dir: string;
10
+ }) => Promise<TranscriptMessage[]>;
11
+ export interface ClaudeProviderOptions {
12
+ /** Claude Code executable. Defaults to resolveClaudeExecutable(); null means none. */
13
+ executable?: string | null;
14
+ model?: string;
15
+ /** Leave unset to use the user's Claude Code settings. */
16
+ permissionMode?: ClaudePermissionMode;
17
+ /** Replaces the SDK's query() in tests. */
18
+ queryFn?: QueryFn;
19
+ /** Replaces the SDK's getSessionMessages() in tests. */
20
+ historyFn?: HistoryFn;
21
+ }
22
+ /**
23
+ * Drives Claude Code through the Claude Agent SDK. The host never handles Claude
24
+ * credentials: the Claude Code process uses whatever login the user made with `claude`.
25
+ */
26
+ export declare class ClaudeProvider implements ProviderAdapter {
27
+ #private;
28
+ readonly id = "claude";
29
+ readonly kind: "agent";
30
+ readonly label = "Claude";
31
+ readonly resumable = true;
32
+ constructor(options?: ClaudeProviderOptions);
33
+ probe(): Promise<ProbeResult>;
34
+ start(options: StartOptions, sink: EventSink): Promise<ProviderSession>;
35
+ /** Reads the session's transcript from ~/.claude/projects, as Claude Code itself stores it. */
36
+ history(sessionId: string, cwd: string): Promise<HistoryTurn[]>;
37
+ }
38
+ /**
39
+ * Which Claude Code to run, in order: TERMLINK_CLAUDE_PATH; a claude binary next to the
40
+ * termlink-node executable (single-executable builds); the one bundled with the Agent SDK
41
+ * (npm installs, version-matched to the SDK); the user's `claude` on PATH.
42
+ */
43
+ export declare function resolveClaudeExecutable(env?: NodeJS.ProcessEnv, singleExecutable?: boolean): string | null;
44
+ /** The Claude Code binary shipped in the Agent SDK's platform package, if installed. */
45
+ export declare function bundledClaudeExecutable(): string | null;
46
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/provider.ts"],"names":[],"mappings":"AAKA,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGhG,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvH,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAE3D,wFAAwF;AACxF,eAAO,MAAM,uBAAuB,YAAI,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAU,CAAC;AACtG,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,CAAC,MAAM,CAAC,GAAG,cAAc,CAAC;AAE7F,MAAM,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAEtG,MAAM,WAAW,qBAAqB;IACpC,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0DAA0D;IAC1D,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,2CAA2C;IAC3C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAQD;;;GAGG;AACH,qBAAa,cAAe,YAAW,eAAe;;IACpD,QAAQ,CAAC,EAAE,YAAY;IACvB,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,QAAQ,CAAC,KAAK,YAAY;IAC1B,QAAQ,CAAC,SAAS,QAAQ;IAI1B,YAAY,OAAO,GAAE,qBAA0B,EAE9C;IAEK,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC,CAKlC;IAEK,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,eAAe,CAAC,CAe5E;IAED,+FAA+F;IACzF,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAGpE;CA8BF;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,EAAE,gBAAgB,UAAU,GAAG,MAAM,GAAG,IAAI,CAQvH;AAED,wFAAwF;AACxF,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAiBvD"}
@@ -0,0 +1,148 @@
1
+ import { execFile } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { createRequire } from "node:module";
4
+ import path from "node:path";
5
+ import { isSea } from "node:sea";
6
+ import { getSessionMessages, query } from "@anthropic-ai/claude-agent-sdk";
7
+ import { errorMessage } from "../../errors.js";
8
+ import { findOnPath } from "../../util/which.js";
9
+ import { claudeHistory } from "./history.js";
10
+ import { ClaudeSession } from "./session.js";
11
+ /** Modes a remote user may run under. bypassPermissions is deliberately not offered. */
12
+ export const CLAUDE_PERMISSION_MODES = ["default", "acceptEdits", "plan", "dontAsk", "auto"];
13
+ // A good status is kept a minute. A bad one is re-checked soon: the first run of a
14
+ // freshly installed 220 MB binary can be slow enough to time out once.
15
+ const READY_TTL_MS = 60_000;
16
+ const UNAVAILABLE_TTL_MS = 5_000;
17
+ const PROBE_TIMEOUT_MS = 30_000;
18
+ /**
19
+ * Drives Claude Code through the Claude Agent SDK. The host never handles Claude
20
+ * credentials: the Claude Code process uses whatever login the user made with `claude`.
21
+ */
22
+ export class ClaudeProvider {
23
+ id = "claude";
24
+ kind = "agent";
25
+ label = "Claude";
26
+ resumable = true;
27
+ #options;
28
+ #probe = null;
29
+ constructor(options = {}) {
30
+ this.#options = options;
31
+ }
32
+ async probe() {
33
+ if (this.#probe && Date.now() < this.#probe.until)
34
+ return this.#probe.status;
35
+ const status = await this.#runProbe();
36
+ this.#probe = { until: Date.now() + (status.available ? READY_TTL_MS : UNAVAILABLE_TTL_MS), status };
37
+ return status;
38
+ }
39
+ async start(options, sink) {
40
+ // The probe and the session use the same binary; the SDK's own lookup does not work
41
+ // from a bundle or a single executable, so the path is always passed explicitly.
42
+ const executable = this.#executable();
43
+ if (!executable)
44
+ throw new Error("Claude Code was not found: install it or set TERMLINK_CLAUDE_PATH");
45
+ const session = new ClaudeSession(sink, {
46
+ cwd: options.cwd,
47
+ resume: options.resumeProviderSessionId,
48
+ model: this.#options.model,
49
+ permissionMode: this.#options.permissionMode,
50
+ executable,
51
+ queryFn: this.#options.queryFn ?? query,
52
+ });
53
+ sink.setProviderSessionId(session.sessionId);
54
+ return session;
55
+ }
56
+ /** Reads the session's transcript from ~/.claude/projects, as Claude Code itself stores it. */
57
+ async history(sessionId, cwd) {
58
+ const read = this.#options.historyFn ?? ((id, opts) => getSessionMessages(id, opts));
59
+ return claudeHistory(await read(sessionId, { dir: cwd }), cwd);
60
+ }
61
+ #executable() {
62
+ return this.#options.executable !== undefined ? this.#options.executable : resolveClaudeExecutable();
63
+ }
64
+ async #runProbe() {
65
+ const executable = this.#executable();
66
+ if (!executable)
67
+ return { available: false, version: null, detail: "Claude Code was not found" };
68
+ const version = await run(executable, ["--version"]);
69
+ if (!version.ok) {
70
+ return { available: false, version: null, detail: `claude failed to run: ${version.output}` };
71
+ }
72
+ const versionText = version.output.split(/\s+/)[0] ?? null;
73
+ // Only loggedIn and authMethod are read; the rest of the status (account details) stays here.
74
+ const authRun = await run(executable, ["auth", "status"]);
75
+ const auth = parseAuthStatus(authRun.output);
76
+ if (!auth) {
77
+ // No answer is not the same as "logged out"; say which one it was.
78
+ const why = authRun.ok ? "unexpected output" : authRun.output || "no answer";
79
+ return { available: false, version: versionText, detail: `could not check the Claude login (${why})` };
80
+ }
81
+ return {
82
+ available: auth.loggedIn,
83
+ version: versionText,
84
+ detail: auth.loggedIn
85
+ ? `Logged in${auth.method ? ` (${auth.method})` : ""}`
86
+ : "not logged in: run `claude` on this machine and log in",
87
+ };
88
+ }
89
+ }
90
+ /**
91
+ * Which Claude Code to run, in order: TERMLINK_CLAUDE_PATH; a claude binary next to the
92
+ * termlink-node executable (single-executable builds); the one bundled with the Agent SDK
93
+ * (npm installs, version-matched to the SDK); the user's `claude` on PATH.
94
+ */
95
+ export function resolveClaudeExecutable(env = process.env, singleExecutable = isSea()) {
96
+ if (env.TERMLINK_CLAUDE_PATH)
97
+ return env.TERMLINK_CLAUDE_PATH;
98
+ const binary = process.platform === "win32" ? "claude.exe" : "claude";
99
+ if (singleExecutable) {
100
+ const beside = path.join(path.dirname(process.execPath), binary);
101
+ if (existsSync(beside))
102
+ return beside;
103
+ }
104
+ return bundledClaudeExecutable() ?? findOnPath(binary, env);
105
+ }
106
+ /** The Claude Code binary shipped in the Agent SDK's platform package, if installed. */
107
+ export function bundledClaudeExecutable() {
108
+ const binary = process.platform === "win32" ? "claude.exe" : "claude";
109
+ const base = `@anthropic-ai/claude-agent-sdk-${process.platform}-${process.arch}`;
110
+ try {
111
+ const require = createRequire(import.meta.url);
112
+ for (const pkg of [base, `${base}-musl`]) {
113
+ try {
114
+ const file = path.join(path.dirname(require.resolve(`${pkg}/package.json`)), binary);
115
+ if (existsSync(file))
116
+ return file;
117
+ }
118
+ catch {
119
+ // Not installed for this platform.
120
+ }
121
+ }
122
+ }
123
+ catch {
124
+ // No module resolution from here (a single executable).
125
+ }
126
+ return null;
127
+ }
128
+ /** The two fields read from `claude auth status`, or null when the output is not its JSON. */
129
+ function parseAuthStatus(output) {
130
+ try {
131
+ const status = JSON.parse(output);
132
+ if (typeof status.loggedIn !== "boolean")
133
+ return null;
134
+ return { loggedIn: status.loggedIn, method: typeof status.authMethod === "string" ? status.authMethod : null };
135
+ }
136
+ catch {
137
+ return null;
138
+ }
139
+ }
140
+ function run(file, args) {
141
+ return new Promise((resolve) => {
142
+ execFile(file, args, { timeout: PROBE_TIMEOUT_MS, windowsHide: true }, (err, stdout, stderr) => {
143
+ const output = `${stdout}${stderr}`.trim();
144
+ resolve({ ok: !err, output: err && !output ? errorMessage(err) : output });
145
+ });
146
+ });
147
+ }
148
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/providers/claude/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Options, PermissionMode, Query, SDKUserMessage } from "@anthropic-ai/claude-agent-sdk";
2
+ import type { EventSink, ProviderSession, UserInput } from "../types.js";
3
+ export type QueryFn = (params: {
4
+ prompt: AsyncIterable<SDKUserMessage>;
5
+ options?: Options;
6
+ }) => Query;
7
+ export interface ClaudeSessionOptions {
8
+ cwd: string;
9
+ resume?: string | undefined;
10
+ model?: string | undefined;
11
+ permissionMode?: PermissionMode | undefined;
12
+ executable?: string | undefined;
13
+ queryFn: QueryFn;
14
+ }
15
+ /**
16
+ * One long-lived Claude Code session in streaming-input mode. Each send() pushes a
17
+ * user message; the turn ends at the matching result message.
18
+ */
19
+ export declare class ClaudeSession implements ProviderSession {
20
+ #private;
21
+ readonly sessionId: string;
22
+ constructor(sink: EventSink, options: ClaudeSessionOptions);
23
+ send(input: UserInput): Promise<void>;
24
+ interrupt(): Promise<void>;
25
+ close(): Promise<void>;
26
+ }
27
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/session.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,OAAO,EACP,cAAc,EAEd,KAAK,EAGL,cAAc,EACf,MAAM,gCAAgC,CAAC;AAIxC,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAIzE,MAAM,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,KAAK,KAAK,CAAC;AAuBtG,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,cAAc,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,aAAc,YAAW,eAAe;;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAqB3B,YAAY,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,oBAAoB,EAkBzD;IAEK,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ1C;IAEK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAS/B;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAK3B;CAwQF"}