@paperclipai/adapter-claude-local 0.2.2

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 (41) hide show
  1. package/dist/cli/format-event.d.ts +2 -0
  2. package/dist/cli/format-event.d.ts.map +1 -0
  3. package/dist/cli/format-event.js +94 -0
  4. package/dist/cli/format-event.js.map +1 -0
  5. package/dist/cli/index.d.ts +2 -0
  6. package/dist/cli/index.d.ts.map +1 -0
  7. package/dist/cli/index.js +2 -0
  8. package/dist/cli/index.js.map +1 -0
  9. package/dist/index.d.ts +8 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +29 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/server/execute.d.ts +18 -0
  14. package/dist/server/execute.d.ts.map +1 -0
  15. package/dist/server/execute.js +385 -0
  16. package/dist/server/execute.js.map +1 -0
  17. package/dist/server/index.d.ts +6 -0
  18. package/dist/server/index.d.ts.map +1 -0
  19. package/dist/server/index.js +55 -0
  20. package/dist/server/index.js.map +1 -0
  21. package/dist/server/parse.d.ts +22 -0
  22. package/dist/server/parse.d.ts.map +1 -0
  23. package/dist/server/parse.js +158 -0
  24. package/dist/server/parse.js.map +1 -0
  25. package/dist/server/test.d.ts +3 -0
  26. package/dist/server/test.d.ts.map +1 -0
  27. package/dist/server/test.js +201 -0
  28. package/dist/server/test.js.map +1 -0
  29. package/dist/ui/build-config.d.ts +3 -0
  30. package/dist/ui/build-config.d.ts.map +1 -0
  31. package/dist/ui/build-config.js +87 -0
  32. package/dist/ui/build-config.js.map +1 -0
  33. package/dist/ui/index.d.ts +3 -0
  34. package/dist/ui/index.d.ts.map +1 -0
  35. package/dist/ui/index.js +3 -0
  36. package/dist/ui/index.js.map +1 -0
  37. package/dist/ui/parse-stdout.d.ts +3 -0
  38. package/dist/ui/parse-stdout.d.ts.map +1 -0
  39. package/dist/ui/parse-stdout.js +144 -0
  40. package/dist/ui/parse-stdout.js.map +1 -0
  41. package/package.json +43 -0
@@ -0,0 +1,55 @@
1
+ export { execute, runClaudeLogin } from "./execute.js";
2
+ export { testEnvironment } from "./test.js";
3
+ export { parseClaudeStreamJson, describeClaudeFailure, isClaudeMaxTurnsResult, isClaudeUnknownSessionError, } from "./parse.js";
4
+ function readNonEmptyString(value) {
5
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
6
+ }
7
+ export const sessionCodec = {
8
+ deserialize(raw) {
9
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw))
10
+ return null;
11
+ const record = raw;
12
+ const sessionId = readNonEmptyString(record.sessionId) ?? readNonEmptyString(record.session_id);
13
+ if (!sessionId)
14
+ return null;
15
+ const cwd = readNonEmptyString(record.cwd) ??
16
+ readNonEmptyString(record.workdir) ??
17
+ readNonEmptyString(record.folder);
18
+ const workspaceId = readNonEmptyString(record.workspaceId) ?? readNonEmptyString(record.workspace_id);
19
+ const repoUrl = readNonEmptyString(record.repoUrl) ?? readNonEmptyString(record.repo_url);
20
+ const repoRef = readNonEmptyString(record.repoRef) ?? readNonEmptyString(record.repo_ref);
21
+ return {
22
+ sessionId,
23
+ ...(cwd ? { cwd } : {}),
24
+ ...(workspaceId ? { workspaceId } : {}),
25
+ ...(repoUrl ? { repoUrl } : {}),
26
+ ...(repoRef ? { repoRef } : {}),
27
+ };
28
+ },
29
+ serialize(params) {
30
+ if (!params)
31
+ return null;
32
+ const sessionId = readNonEmptyString(params.sessionId) ?? readNonEmptyString(params.session_id);
33
+ if (!sessionId)
34
+ return null;
35
+ const cwd = readNonEmptyString(params.cwd) ??
36
+ readNonEmptyString(params.workdir) ??
37
+ readNonEmptyString(params.folder);
38
+ const workspaceId = readNonEmptyString(params.workspaceId) ?? readNonEmptyString(params.workspace_id);
39
+ const repoUrl = readNonEmptyString(params.repoUrl) ?? readNonEmptyString(params.repo_url);
40
+ const repoRef = readNonEmptyString(params.repoRef) ?? readNonEmptyString(params.repo_ref);
41
+ return {
42
+ sessionId,
43
+ ...(cwd ? { cwd } : {}),
44
+ ...(workspaceId ? { workspaceId } : {}),
45
+ ...(repoUrl ? { repoUrl } : {}),
46
+ ...(repoRef ? { repoRef } : {}),
47
+ };
48
+ },
49
+ getDisplayId(params) {
50
+ if (!params)
51
+ return null;
52
+ return readNonEmptyString(params.sessionId) ?? readNonEmptyString(params.session_id);
53
+ },
54
+ };
55
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { UsageSummary } from "@paperclipai/adapter-utils";
2
+ export declare function parseClaudeStreamJson(stdout: string): {
3
+ sessionId: string | null;
4
+ model: string;
5
+ costUsd: number | null;
6
+ usage: UsageSummary | null;
7
+ summary: string;
8
+ resultJson: Record<string, unknown> | null;
9
+ };
10
+ export declare function extractClaudeLoginUrl(text: string): string | null;
11
+ export declare function detectClaudeLoginRequired(input: {
12
+ parsed: Record<string, unknown> | null;
13
+ stdout: string;
14
+ stderr: string;
15
+ }): {
16
+ requiresLogin: boolean;
17
+ loginUrl: string | null;
18
+ };
19
+ export declare function describeClaudeFailure(parsed: Record<string, unknown>): string | null;
20
+ export declare function isClaudeMaxTurnsResult(parsed: Record<string, unknown> | null | undefined): boolean;
21
+ export declare function isClaudeUnknownSessionError(parsed: Record<string, unknown>): boolean;
22
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/server/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAM/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM;;;aA4C7B,MAAM,GAAG,IAAI;WACf,YAAY,GAAG,IAAI;;gBAEd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;EAsBvD;AAkCD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUjE;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG;IAAE,aAAa,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAatD;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAcpF;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAWlG;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CASpF"}
@@ -0,0 +1,158 @@
1
+ import { asString, asNumber, parseObject, parseJson } from "@paperclipai/adapter-utils/server-utils";
2
+ const CLAUDE_AUTH_REQUIRED_RE = /(?:not\s+logged\s+in|please\s+log\s+in|please\s+run\s+`?claude\s+login`?|login\s+required|requires\s+login|unauthorized|authentication\s+required)/i;
3
+ const URL_RE = /(https?:\/\/[^\s'"`<>()[\]{};,!?]+[^\s'"`<>()[\]{};,!.?:]+)/gi;
4
+ export function parseClaudeStreamJson(stdout) {
5
+ let sessionId = null;
6
+ let model = "";
7
+ let finalResult = null;
8
+ const assistantTexts = [];
9
+ for (const rawLine of stdout.split(/\r?\n/)) {
10
+ const line = rawLine.trim();
11
+ if (!line)
12
+ continue;
13
+ const event = parseJson(line);
14
+ if (!event)
15
+ continue;
16
+ const type = asString(event.type, "");
17
+ if (type === "system" && asString(event.subtype, "") === "init") {
18
+ sessionId = asString(event.session_id, sessionId ?? "") || sessionId;
19
+ model = asString(event.model, model);
20
+ continue;
21
+ }
22
+ if (type === "assistant") {
23
+ sessionId = asString(event.session_id, sessionId ?? "") || sessionId;
24
+ const message = parseObject(event.message);
25
+ const content = Array.isArray(message.content) ? message.content : [];
26
+ for (const entry of content) {
27
+ if (typeof entry !== "object" || entry === null || Array.isArray(entry))
28
+ continue;
29
+ const block = entry;
30
+ if (asString(block.type, "") === "text") {
31
+ const text = asString(block.text, "");
32
+ if (text)
33
+ assistantTexts.push(text);
34
+ }
35
+ }
36
+ continue;
37
+ }
38
+ if (type === "result") {
39
+ finalResult = event;
40
+ sessionId = asString(event.session_id, sessionId ?? "") || sessionId;
41
+ }
42
+ }
43
+ if (!finalResult) {
44
+ return {
45
+ sessionId,
46
+ model,
47
+ costUsd: null,
48
+ usage: null,
49
+ summary: assistantTexts.join("\n\n").trim(),
50
+ resultJson: null,
51
+ };
52
+ }
53
+ const usageObj = parseObject(finalResult.usage);
54
+ const usage = {
55
+ inputTokens: asNumber(usageObj.input_tokens, 0),
56
+ cachedInputTokens: asNumber(usageObj.cache_read_input_tokens, 0),
57
+ outputTokens: asNumber(usageObj.output_tokens, 0),
58
+ };
59
+ const costRaw = finalResult.total_cost_usd;
60
+ const costUsd = typeof costRaw === "number" && Number.isFinite(costRaw) ? costRaw : null;
61
+ const summary = asString(finalResult.result, assistantTexts.join("\n\n")).trim();
62
+ return {
63
+ sessionId,
64
+ model,
65
+ costUsd,
66
+ usage,
67
+ summary,
68
+ resultJson: finalResult,
69
+ };
70
+ }
71
+ function extractClaudeErrorMessages(parsed) {
72
+ const raw = Array.isArray(parsed.errors) ? parsed.errors : [];
73
+ const messages = [];
74
+ for (const entry of raw) {
75
+ if (typeof entry === "string") {
76
+ const msg = entry.trim();
77
+ if (msg)
78
+ messages.push(msg);
79
+ continue;
80
+ }
81
+ if (typeof entry !== "object" || entry === null || Array.isArray(entry)) {
82
+ continue;
83
+ }
84
+ const obj = entry;
85
+ const msg = asString(obj.message, "") || asString(obj.error, "") || asString(obj.code, "");
86
+ if (msg) {
87
+ messages.push(msg);
88
+ continue;
89
+ }
90
+ try {
91
+ messages.push(JSON.stringify(obj));
92
+ }
93
+ catch {
94
+ // skip non-serializable entry
95
+ }
96
+ }
97
+ return messages;
98
+ }
99
+ export function extractClaudeLoginUrl(text) {
100
+ const match = text.match(URL_RE);
101
+ if (!match || match.length === 0)
102
+ return null;
103
+ for (const rawUrl of match) {
104
+ const cleaned = rawUrl.replace(/[\])}.!,?;:'\"]+$/g, "");
105
+ if (cleaned.includes("claude") || cleaned.includes("anthropic") || cleaned.includes("auth")) {
106
+ return cleaned;
107
+ }
108
+ }
109
+ return match[0]?.replace(/[\])}.!,?;:'\"]+$/g, "") ?? null;
110
+ }
111
+ export function detectClaudeLoginRequired(input) {
112
+ const resultText = asString(input.parsed?.result, "").trim();
113
+ const messages = [resultText, ...extractClaudeErrorMessages(input.parsed ?? {}), input.stdout, input.stderr]
114
+ .join("\n")
115
+ .split(/\r?\n/)
116
+ .map((line) => line.trim())
117
+ .filter(Boolean);
118
+ const requiresLogin = messages.some((line) => CLAUDE_AUTH_REQUIRED_RE.test(line));
119
+ return {
120
+ requiresLogin,
121
+ loginUrl: extractClaudeLoginUrl([input.stdout, input.stderr].join("\n")),
122
+ };
123
+ }
124
+ export function describeClaudeFailure(parsed) {
125
+ const subtype = asString(parsed.subtype, "");
126
+ const resultText = asString(parsed.result, "").trim();
127
+ const errors = extractClaudeErrorMessages(parsed);
128
+ let detail = resultText;
129
+ if (!detail && errors.length > 0) {
130
+ detail = errors[0] ?? "";
131
+ }
132
+ const parts = ["Claude run failed"];
133
+ if (subtype)
134
+ parts.push(`subtype=${subtype}`);
135
+ if (detail)
136
+ parts.push(detail);
137
+ return parts.length > 1 ? parts.join(": ") : null;
138
+ }
139
+ export function isClaudeMaxTurnsResult(parsed) {
140
+ if (!parsed)
141
+ return false;
142
+ const subtype = asString(parsed.subtype, "").trim().toLowerCase();
143
+ if (subtype === "error_max_turns")
144
+ return true;
145
+ const stopReason = asString(parsed.stop_reason, "").trim().toLowerCase();
146
+ if (stopReason === "max_turns")
147
+ return true;
148
+ const resultText = asString(parsed.result, "").trim();
149
+ return /max(?:imum)?\s+turns?/i.test(resultText);
150
+ }
151
+ export function isClaudeUnknownSessionError(parsed) {
152
+ const resultText = asString(parsed.result, "").trim();
153
+ const allMessages = [resultText, ...extractClaudeErrorMessages(parsed)]
154
+ .map((msg) => msg.trim())
155
+ .filter(Boolean);
156
+ return allMessages.some((msg) => /no conversation found with session id|unknown session|session .* not found/i.test(msg));
157
+ }
158
+ //# sourceMappingURL=parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/server/parse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { AdapterEnvironmentTestContext, AdapterEnvironmentTestResult } from "@paperclipai/adapter-utils";
2
+ export declare function testEnvironment(ctx: AdapterEnvironmentTestContext): Promise<AdapterEnvironmentTestResult>;
3
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/server/test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,6BAA6B,EAC7B,4BAA4B,EAC7B,MAAM,4BAA4B,CAAC;AA+CpC,wBAAsB,eAAe,CACnC,GAAG,EAAE,6BAA6B,GACjC,OAAO,CAAC,4BAA4B,CAAC,CAyKvC"}
@@ -0,0 +1,201 @@
1
+ import { asString, asBoolean, asNumber, asStringArray, parseObject, ensureAbsoluteDirectory, ensureCommandResolvable, ensurePathInEnv, runChildProcess, } from "@paperclipai/adapter-utils/server-utils";
2
+ import path from "node:path";
3
+ import { detectClaudeLoginRequired, parseClaudeStreamJson } from "./parse.js";
4
+ function summarizeStatus(checks) {
5
+ if (checks.some((check) => check.level === "error"))
6
+ return "fail";
7
+ if (checks.some((check) => check.level === "warn"))
8
+ return "warn";
9
+ return "pass";
10
+ }
11
+ function isNonEmpty(value) {
12
+ return typeof value === "string" && value.trim().length > 0;
13
+ }
14
+ function firstNonEmptyLine(text) {
15
+ return (text
16
+ .split(/\r?\n/)
17
+ .map((line) => line.trim())
18
+ .find(Boolean) ?? "");
19
+ }
20
+ function commandLooksLike(command, expected) {
21
+ const base = path.basename(command).toLowerCase();
22
+ return base === expected || base === `${expected}.cmd` || base === `${expected}.exe`;
23
+ }
24
+ function summarizeProbeDetail(stdout, stderr) {
25
+ const raw = firstNonEmptyLine(stderr) || firstNonEmptyLine(stdout);
26
+ if (!raw)
27
+ return null;
28
+ const clean = raw.replace(/\s+/g, " ").trim();
29
+ const max = 240;
30
+ return clean.length > max ? `${clean.slice(0, max - 1)}…` : clean;
31
+ }
32
+ export async function testEnvironment(ctx) {
33
+ const checks = [];
34
+ const config = parseObject(ctx.config);
35
+ const command = asString(config.command, "claude");
36
+ const cwd = asString(config.cwd, process.cwd());
37
+ try {
38
+ await ensureAbsoluteDirectory(cwd, { createIfMissing: true });
39
+ checks.push({
40
+ code: "claude_cwd_valid",
41
+ level: "info",
42
+ message: `Working directory is valid: ${cwd}`,
43
+ });
44
+ }
45
+ catch (err) {
46
+ checks.push({
47
+ code: "claude_cwd_invalid",
48
+ level: "error",
49
+ message: err instanceof Error ? err.message : "Invalid working directory",
50
+ detail: cwd,
51
+ });
52
+ }
53
+ const envConfig = parseObject(config.env);
54
+ const env = {};
55
+ for (const [key, value] of Object.entries(envConfig)) {
56
+ if (typeof value === "string")
57
+ env[key] = value;
58
+ }
59
+ const runtimeEnv = ensurePathInEnv({ ...process.env, ...env });
60
+ try {
61
+ await ensureCommandResolvable(command, cwd, runtimeEnv);
62
+ checks.push({
63
+ code: "claude_command_resolvable",
64
+ level: "info",
65
+ message: `Command is executable: ${command}`,
66
+ });
67
+ }
68
+ catch (err) {
69
+ checks.push({
70
+ code: "claude_command_unresolvable",
71
+ level: "error",
72
+ message: err instanceof Error ? err.message : "Command is not executable",
73
+ detail: command,
74
+ });
75
+ }
76
+ const configApiKey = env.ANTHROPIC_API_KEY;
77
+ const hostApiKey = process.env.ANTHROPIC_API_KEY;
78
+ if (isNonEmpty(configApiKey) || isNonEmpty(hostApiKey)) {
79
+ const source = isNonEmpty(configApiKey) ? "adapter config env" : "server environment";
80
+ checks.push({
81
+ code: "claude_anthropic_api_key_overrides_subscription",
82
+ level: "warn",
83
+ message: "ANTHROPIC_API_KEY is set. Claude will use API-key auth instead of subscription credentials.",
84
+ detail: `Detected in ${source}.`,
85
+ hint: "Unset ANTHROPIC_API_KEY if you want subscription-based Claude login behavior.",
86
+ });
87
+ }
88
+ else {
89
+ checks.push({
90
+ code: "claude_subscription_mode_possible",
91
+ level: "info",
92
+ message: "ANTHROPIC_API_KEY is not set; subscription-based auth can be used if Claude is logged in.",
93
+ });
94
+ }
95
+ const canRunProbe = checks.every((check) => check.code !== "claude_cwd_invalid" && check.code !== "claude_command_unresolvable");
96
+ if (canRunProbe) {
97
+ if (!commandLooksLike(command, "claude")) {
98
+ checks.push({
99
+ code: "claude_hello_probe_skipped_custom_command",
100
+ level: "info",
101
+ message: "Skipped hello probe because command is not `claude`.",
102
+ detail: command,
103
+ hint: "Use the `claude` CLI command to run the automatic login and installation probe.",
104
+ });
105
+ }
106
+ else {
107
+ const model = asString(config.model, "").trim();
108
+ const effort = asString(config.effort, "").trim();
109
+ const chrome = asBoolean(config.chrome, false);
110
+ const maxTurns = asNumber(config.maxTurnsPerRun, 0);
111
+ const dangerouslySkipPermissions = asBoolean(config.dangerouslySkipPermissions, false);
112
+ const extraArgs = (() => {
113
+ const fromExtraArgs = asStringArray(config.extraArgs);
114
+ if (fromExtraArgs.length > 0)
115
+ return fromExtraArgs;
116
+ return asStringArray(config.args);
117
+ })();
118
+ const args = ["--print", "-", "--output-format", "stream-json", "--verbose"];
119
+ if (dangerouslySkipPermissions)
120
+ args.push("--dangerously-skip-permissions");
121
+ if (chrome)
122
+ args.push("--chrome");
123
+ if (model)
124
+ args.push("--model", model);
125
+ if (effort)
126
+ args.push("--effort", effort);
127
+ if (maxTurns > 0)
128
+ args.push("--max-turns", String(maxTurns));
129
+ if (extraArgs.length > 0)
130
+ args.push(...extraArgs);
131
+ const probe = await runChildProcess(`claude-envtest-${Date.now()}-${Math.random().toString(16).slice(2)}`, command, args, {
132
+ cwd,
133
+ env,
134
+ timeoutSec: 45,
135
+ graceSec: 5,
136
+ stdin: "Respond with hello.",
137
+ onLog: async () => { },
138
+ });
139
+ const parsedStream = parseClaudeStreamJson(probe.stdout);
140
+ const parsed = parsedStream.resultJson;
141
+ const loginMeta = detectClaudeLoginRequired({
142
+ parsed,
143
+ stdout: probe.stdout,
144
+ stderr: probe.stderr,
145
+ });
146
+ const detail = summarizeProbeDetail(probe.stdout, probe.stderr);
147
+ if (probe.timedOut) {
148
+ checks.push({
149
+ code: "claude_hello_probe_timed_out",
150
+ level: "warn",
151
+ message: "Claude hello probe timed out.",
152
+ hint: "Retry the probe. If this persists, verify Claude can run `Respond with hello` from this directory manually.",
153
+ });
154
+ }
155
+ else if (loginMeta.requiresLogin) {
156
+ checks.push({
157
+ code: "claude_hello_probe_auth_required",
158
+ level: "warn",
159
+ message: "Claude CLI is installed, but login is required.",
160
+ ...(detail ? { detail } : {}),
161
+ hint: loginMeta.loginUrl
162
+ ? `Run \`claude login\` and complete sign-in at ${loginMeta.loginUrl}, then retry.`
163
+ : "Run `claude login` in this environment, then retry the probe.",
164
+ });
165
+ }
166
+ else if ((probe.exitCode ?? 1) === 0) {
167
+ const summary = parsedStream.summary.trim();
168
+ const hasHello = /\bhello\b/i.test(summary);
169
+ checks.push({
170
+ code: hasHello ? "claude_hello_probe_passed" : "claude_hello_probe_unexpected_output",
171
+ level: hasHello ? "info" : "warn",
172
+ message: hasHello
173
+ ? "Claude hello probe succeeded."
174
+ : "Claude probe ran but did not return `hello` as expected.",
175
+ ...(summary ? { detail: summary.replace(/\s+/g, " ").trim().slice(0, 240) } : {}),
176
+ ...(hasHello
177
+ ? {}
178
+ : {
179
+ hint: "Try the probe manually (`claude --print - --output-format stream-json --verbose`) and prompt `Respond with hello`.",
180
+ }),
181
+ });
182
+ }
183
+ else {
184
+ checks.push({
185
+ code: "claude_hello_probe_failed",
186
+ level: "error",
187
+ message: "Claude hello probe failed.",
188
+ ...(detail ? { detail } : {}),
189
+ hint: "Run `claude --print - --output-format stream-json --verbose` manually in this directory and prompt `Respond with hello` to debug.",
190
+ });
191
+ }
192
+ }
193
+ }
194
+ return {
195
+ adapterType: ctx.adapterType,
196
+ status: summarizeStatus(checks),
197
+ checks,
198
+ testedAt: new Date().toISOString(),
199
+ };
200
+ }
201
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/server/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { CreateConfigValues } from "@paperclipai/adapter-utils";
2
+ export declare function buildClaudeLocalConfig(v: CreateConfigValues): Record<string, unknown>;
3
+ //# sourceMappingURL=build-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-config.d.ts","sourceRoot":"","sources":["../../src/ui/build-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAoDrE,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAuBrF"}
@@ -0,0 +1,87 @@
1
+ function parseCommaArgs(value) {
2
+ return value
3
+ .split(",")
4
+ .map((item) => item.trim())
5
+ .filter(Boolean);
6
+ }
7
+ function parseEnvVars(text) {
8
+ const env = {};
9
+ for (const line of text.split(/\r?\n/)) {
10
+ const trimmed = line.trim();
11
+ if (!trimmed || trimmed.startsWith("#"))
12
+ continue;
13
+ const eq = trimmed.indexOf("=");
14
+ if (eq <= 0)
15
+ continue;
16
+ const key = trimmed.slice(0, eq).trim();
17
+ const value = trimmed.slice(eq + 1);
18
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key))
19
+ continue;
20
+ env[key] = value;
21
+ }
22
+ return env;
23
+ }
24
+ function parseEnvBindings(bindings) {
25
+ if (typeof bindings !== "object" || bindings === null || Array.isArray(bindings))
26
+ return {};
27
+ const env = {};
28
+ for (const [key, raw] of Object.entries(bindings)) {
29
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(key))
30
+ continue;
31
+ if (typeof raw === "string") {
32
+ env[key] = { type: "plain", value: raw };
33
+ continue;
34
+ }
35
+ if (typeof raw !== "object" || raw === null || Array.isArray(raw))
36
+ continue;
37
+ const rec = raw;
38
+ if (rec.type === "plain" && typeof rec.value === "string") {
39
+ env[key] = { type: "plain", value: rec.value };
40
+ continue;
41
+ }
42
+ if (rec.type === "secret_ref" && typeof rec.secretId === "string") {
43
+ env[key] = {
44
+ type: "secret_ref",
45
+ secretId: rec.secretId,
46
+ ...(typeof rec.version === "number" || rec.version === "latest"
47
+ ? { version: rec.version }
48
+ : {}),
49
+ };
50
+ }
51
+ }
52
+ return env;
53
+ }
54
+ export function buildClaudeLocalConfig(v) {
55
+ const ac = {};
56
+ if (v.cwd)
57
+ ac.cwd = v.cwd;
58
+ if (v.instructionsFilePath)
59
+ ac.instructionsFilePath = v.instructionsFilePath;
60
+ if (v.promptTemplate)
61
+ ac.promptTemplate = v.promptTemplate;
62
+ if (v.model)
63
+ ac.model = v.model;
64
+ if (v.thinkingEffort)
65
+ ac.effort = v.thinkingEffort;
66
+ if (v.chrome)
67
+ ac.chrome = true;
68
+ ac.timeoutSec = 0;
69
+ ac.graceSec = 15;
70
+ const env = parseEnvBindings(v.envBindings);
71
+ const legacy = parseEnvVars(v.envVars);
72
+ for (const [key, value] of Object.entries(legacy)) {
73
+ if (!Object.prototype.hasOwnProperty.call(env, key)) {
74
+ env[key] = { type: "plain", value };
75
+ }
76
+ }
77
+ if (Object.keys(env).length > 0)
78
+ ac.env = env;
79
+ ac.maxTurnsPerRun = v.maxTurnsPerRun;
80
+ ac.dangerouslySkipPermissions = v.dangerouslySkipPermissions;
81
+ if (v.command)
82
+ ac.command = v.command;
83
+ if (v.extraArgs)
84
+ ac.extraArgs = parseCommaArgs(v.extraArgs);
85
+ return ac;
86
+ }
87
+ //# sourceMappingURL=build-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-config.js","sourceRoot":"","sources":["../../src/ui/build-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { parseClaudeStdoutLine } from "./parse-stdout.js";
2
+ export { buildClaudeLocalConfig } from "./build-config.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { parseClaudeStdoutLine } from "./parse-stdout.js";
2
+ export { buildClaudeLocalConfig } from "./build-config.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TranscriptEntry } from "@paperclipai/adapter-utils";
2
+ export declare function parseClaudeStdoutLine(line: string, ts: string): TranscriptEntry[];
3
+ //# sourceMappingURL=parse-stdout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-stdout.d.ts","sourceRoot":"","sources":["../../src/ui/parse-stdout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAoClE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,eAAe,EAAE,CAqGjF"}