@alvax-ai/adapter-claude-local 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.
- package/dist/cli/format-event.d.ts +2 -0
- package/dist/cli/format-event.d.ts.map +1 -0
- package/dist/cli/format-event.js +136 -0
- package/dist/cli/format-event.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/quota-probe.d.ts +3 -0
- package/dist/cli/quota-probe.d.ts.map +1 -0
- package/dist/cli/quota-probe.js +106 -0
- package/dist/cli/quota-probe.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/server/claude-config.d.ts +5 -0
- package/dist/server/claude-config.d.ts.map +1 -0
- package/dist/server/claude-config.js +106 -0
- package/dist/server/claude-config.js.map +1 -0
- package/dist/server/execute.d.ts +18 -0
- package/dist/server/execute.d.ts.map +1 -0
- package/dist/server/execute.js +700 -0
- package/dist/server/execute.js.map +1 -0
- package/dist/server/index.d.ts +9 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +64 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/models.d.ts +11 -0
- package/dist/server/models.d.ts.map +1 -0
- package/dist/server/models.js +32 -0
- package/dist/server/models.js.map +1 -0
- package/dist/server/parse.d.ts +34 -0
- package/dist/server/parse.d.ts.map +1 -0
- package/dist/server/parse.js +319 -0
- package/dist/server/parse.js.map +1 -0
- package/dist/server/prompt-cache.d.ts +17 -0
- package/dist/server/prompt-cache.d.ts.map +1 -0
- package/dist/server/prompt-cache.js +125 -0
- package/dist/server/prompt-cache.js.map +1 -0
- package/dist/server/quota.d.ts +21 -0
- package/dist/server/quota.d.ts.map +1 -0
- package/dist/server/quota.js +484 -0
- package/dist/server/quota.js.map +1 -0
- package/dist/server/skills.d.ts +8 -0
- package/dist/server/skills.d.ts.map +1 -0
- package/dist/server/skills.js +97 -0
- package/dist/server/skills.js.map +1 -0
- package/dist/server/test.d.ts +3 -0
- package/dist/server/test.d.ts.map +1 -0
- package/dist/server/test.js +258 -0
- package/dist/server/test.js.map +1 -0
- package/dist/ui/build-config.d.ts +3 -0
- package/dist/ui/build-config.d.ts.map +1 -0
- package/dist/ui/build-config.js +111 -0
- package/dist/ui/build-config.js.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/parse-stdout.d.ts +3 -0
- package/dist/ui/parse-stdout.d.ts.map +1 -0
- package/dist/ui/parse-stdout.js +149 -0
- package/dist/ui/parse-stdout.js.map +1 -0
- package/package.json +60 -0
- package/skills/alvax/SKILL.md +448 -0
- package/skills/alvax/references/api-reference.md +284 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-event.d.ts","sourceRoot":"","sources":["../../src/cli/format-event.ts"],"names":[],"mappings":"AAwCA,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAkGxE"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import pc from "picocolors";
|
|
2
|
+
function asErrorText(value) {
|
|
3
|
+
if (typeof value === "string")
|
|
4
|
+
return value;
|
|
5
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
6
|
+
return "";
|
|
7
|
+
const obj = value;
|
|
8
|
+
const message = (typeof obj.message === "string" && obj.message) ||
|
|
9
|
+
(typeof obj.error === "string" && obj.error) ||
|
|
10
|
+
(typeof obj.code === "string" && obj.code) ||
|
|
11
|
+
"";
|
|
12
|
+
if (message)
|
|
13
|
+
return message;
|
|
14
|
+
try {
|
|
15
|
+
return JSON.stringify(obj);
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return "";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function printToolResult(block) {
|
|
22
|
+
const isError = block.is_error === true;
|
|
23
|
+
let text = "";
|
|
24
|
+
if (typeof block.content === "string") {
|
|
25
|
+
text = block.content;
|
|
26
|
+
}
|
|
27
|
+
else if (Array.isArray(block.content)) {
|
|
28
|
+
const parts = [];
|
|
29
|
+
for (const part of block.content) {
|
|
30
|
+
if (typeof part !== "object" || part === null || Array.isArray(part))
|
|
31
|
+
continue;
|
|
32
|
+
const record = part;
|
|
33
|
+
if (typeof record.text === "string")
|
|
34
|
+
parts.push(record.text);
|
|
35
|
+
}
|
|
36
|
+
text = parts.join("\n");
|
|
37
|
+
}
|
|
38
|
+
console.log((isError ? pc.red : pc.cyan)(`tool_result${isError ? " (error)" : ""}`));
|
|
39
|
+
if (text) {
|
|
40
|
+
console.log((isError ? pc.red : pc.gray)(text));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function printClaudeStreamEvent(raw, debug) {
|
|
44
|
+
const line = raw.trim();
|
|
45
|
+
if (!line)
|
|
46
|
+
return;
|
|
47
|
+
let parsed = null;
|
|
48
|
+
try {
|
|
49
|
+
parsed = JSON.parse(line);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
console.log(line);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const type = typeof parsed.type === "string" ? parsed.type : "";
|
|
56
|
+
if (type === "system" && parsed.subtype === "init") {
|
|
57
|
+
const model = typeof parsed.model === "string" ? parsed.model : "unknown";
|
|
58
|
+
const sessionId = typeof parsed.session_id === "string" ? parsed.session_id : "";
|
|
59
|
+
console.log(pc.blue(`Claude initialized (model: ${model}${sessionId ? `, session: ${sessionId}` : ""})`));
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
if (type === "assistant") {
|
|
63
|
+
const message = typeof parsed.message === "object" && parsed.message !== null && !Array.isArray(parsed.message)
|
|
64
|
+
? parsed.message
|
|
65
|
+
: {};
|
|
66
|
+
const content = Array.isArray(message.content) ? message.content : [];
|
|
67
|
+
for (const blockRaw of content) {
|
|
68
|
+
if (typeof blockRaw !== "object" || blockRaw === null || Array.isArray(blockRaw))
|
|
69
|
+
continue;
|
|
70
|
+
const block = blockRaw;
|
|
71
|
+
const blockType = typeof block.type === "string" ? block.type : "";
|
|
72
|
+
if (blockType === "text") {
|
|
73
|
+
const text = typeof block.text === "string" ? block.text : "";
|
|
74
|
+
if (text)
|
|
75
|
+
console.log(pc.green(`assistant: ${text}`));
|
|
76
|
+
}
|
|
77
|
+
else if (blockType === "thinking") {
|
|
78
|
+
const text = typeof block.thinking === "string" ? block.thinking : "";
|
|
79
|
+
if (text)
|
|
80
|
+
console.log(pc.gray(`thinking: ${text}`));
|
|
81
|
+
}
|
|
82
|
+
else if (blockType === "tool_use") {
|
|
83
|
+
const name = typeof block.name === "string" ? block.name : "unknown";
|
|
84
|
+
console.log(pc.yellow(`tool_call: ${name}`));
|
|
85
|
+
if (block.input !== undefined) {
|
|
86
|
+
console.log(pc.gray(JSON.stringify(block.input, null, 2)));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
if (type === "user") {
|
|
93
|
+
const message = typeof parsed.message === "object" && parsed.message !== null && !Array.isArray(parsed.message)
|
|
94
|
+
? parsed.message
|
|
95
|
+
: {};
|
|
96
|
+
const content = Array.isArray(message.content) ? message.content : [];
|
|
97
|
+
for (const blockRaw of content) {
|
|
98
|
+
if (typeof blockRaw !== "object" || blockRaw === null || Array.isArray(blockRaw))
|
|
99
|
+
continue;
|
|
100
|
+
const block = blockRaw;
|
|
101
|
+
if (typeof block.type === "string" && block.type === "tool_result") {
|
|
102
|
+
printToolResult(block);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (type === "result") {
|
|
108
|
+
const usage = typeof parsed.usage === "object" && parsed.usage !== null && !Array.isArray(parsed.usage)
|
|
109
|
+
? parsed.usage
|
|
110
|
+
: {};
|
|
111
|
+
const input = Number(usage.input_tokens ?? 0);
|
|
112
|
+
const output = Number(usage.output_tokens ?? 0);
|
|
113
|
+
const cached = Number(usage.cache_read_input_tokens ?? 0);
|
|
114
|
+
const cost = Number(parsed.total_cost_usd ?? 0);
|
|
115
|
+
const subtype = typeof parsed.subtype === "string" ? parsed.subtype : "";
|
|
116
|
+
const isError = parsed.is_error === true;
|
|
117
|
+
const resultText = typeof parsed.result === "string" ? parsed.result : "";
|
|
118
|
+
if (resultText) {
|
|
119
|
+
console.log(pc.green("result:"));
|
|
120
|
+
console.log(resultText);
|
|
121
|
+
}
|
|
122
|
+
const errors = Array.isArray(parsed.errors) ? parsed.errors.map(asErrorText).filter(Boolean) : [];
|
|
123
|
+
if (subtype.startsWith("error") || isError || errors.length > 0) {
|
|
124
|
+
console.log(pc.red(`claude_result: subtype=${subtype || "unknown"} is_error=${isError ? "true" : "false"}`));
|
|
125
|
+
if (errors.length > 0) {
|
|
126
|
+
console.log(pc.red(`claude_errors: ${errors.join(" | ")}`));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
console.log(pc.blue(`tokens: in=${Number.isFinite(input) ? input : 0} out=${Number.isFinite(output) ? output : 0} cached=${Number.isFinite(cached) ? cached : 0} cost=$${Number.isFinite(cost) ? cost.toFixed(6) : "0.000000"}`));
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (debug) {
|
|
133
|
+
console.log(pc.gray(line));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=format-event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-event.js","sourceRoot":"","sources":["../../src/cli/format-event.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota-probe.d.ts","sourceRoot":"","sources":["../../src/cli/quota-probe.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { captureClaudeCliUsageText, fetchClaudeCliQuota, fetchClaudeQuota, getQuotaWindows, parseClaudeCliUsageText, readClaudeAuthStatus, readClaudeToken, } from "../server/quota.js";
|
|
3
|
+
function parseArgs(argv) {
|
|
4
|
+
return {
|
|
5
|
+
json: argv.includes("--json"),
|
|
6
|
+
includeRawCli: argv.includes("--raw-cli"),
|
|
7
|
+
oauthOnly: argv.includes("--oauth-only"),
|
|
8
|
+
cliOnly: argv.includes("--cli-only"),
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function stringifyError(error) {
|
|
12
|
+
return error instanceof Error ? error.message : String(error);
|
|
13
|
+
}
|
|
14
|
+
async function main() {
|
|
15
|
+
const args = parseArgs(process.argv.slice(2));
|
|
16
|
+
if (args.oauthOnly && args.cliOnly) {
|
|
17
|
+
throw new Error("Choose either --oauth-only or --cli-only, not both.");
|
|
18
|
+
}
|
|
19
|
+
const authStatus = await readClaudeAuthStatus();
|
|
20
|
+
const token = await readClaudeToken();
|
|
21
|
+
const result = {
|
|
22
|
+
timestamp: new Date().toISOString(),
|
|
23
|
+
authStatus,
|
|
24
|
+
tokenAvailable: token != null,
|
|
25
|
+
};
|
|
26
|
+
if (!args.cliOnly) {
|
|
27
|
+
if (!token) {
|
|
28
|
+
result.oauth = {
|
|
29
|
+
ok: false,
|
|
30
|
+
error: "No Claude OAuth access token found in local credentials files.",
|
|
31
|
+
windows: [],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
try {
|
|
36
|
+
result.oauth = {
|
|
37
|
+
ok: true,
|
|
38
|
+
windows: await fetchClaudeQuota(token),
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
result.oauth = {
|
|
43
|
+
ok: false,
|
|
44
|
+
error: stringifyError(error),
|
|
45
|
+
windows: [],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (!args.oauthOnly) {
|
|
51
|
+
try {
|
|
52
|
+
const rawCliText = args.includeRawCli ? await captureClaudeCliUsageText() : null;
|
|
53
|
+
const windows = rawCliText ? parseClaudeCliUsageText(rawCliText) : await fetchClaudeCliQuota();
|
|
54
|
+
result.cli = rawCliText
|
|
55
|
+
? {
|
|
56
|
+
ok: true,
|
|
57
|
+
windows,
|
|
58
|
+
rawText: rawCliText,
|
|
59
|
+
}
|
|
60
|
+
: {
|
|
61
|
+
ok: true,
|
|
62
|
+
windows,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
result.cli = {
|
|
67
|
+
ok: false,
|
|
68
|
+
error: stringifyError(error),
|
|
69
|
+
windows: [],
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (!args.oauthOnly && !args.cliOnly) {
|
|
74
|
+
try {
|
|
75
|
+
result.aggregated = await getQuotaWindows();
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
result.aggregated = {
|
|
79
|
+
ok: false,
|
|
80
|
+
error: stringifyError(error),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
const oauthOk = result.oauth?.ok === true;
|
|
85
|
+
const cliOk = result.cli?.ok === true;
|
|
86
|
+
const aggregatedOk = result.aggregated?.ok === true;
|
|
87
|
+
const ok = oauthOk || cliOk || aggregatedOk;
|
|
88
|
+
if (args.json || process.stdout.isTTY === false) {
|
|
89
|
+
console.log(JSON.stringify({ ok, ...result }, null, 2));
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
console.log(`timestamp: ${result.timestamp}`);
|
|
93
|
+
console.log(`auth: ${JSON.stringify(authStatus)}`);
|
|
94
|
+
console.log(`tokenAvailable: ${token != null}`);
|
|
95
|
+
if (result.oauth)
|
|
96
|
+
console.log(`oauth: ${JSON.stringify(result.oauth, null, 2)}`);
|
|
97
|
+
if (result.cli)
|
|
98
|
+
console.log(`cli: ${JSON.stringify(result.cli, null, 2)}`);
|
|
99
|
+
if (result.aggregated)
|
|
100
|
+
console.log(`aggregated: ${JSON.stringify(result.aggregated, null, 2)}`);
|
|
101
|
+
}
|
|
102
|
+
if (!ok)
|
|
103
|
+
process.exitCode = 1;
|
|
104
|
+
}
|
|
105
|
+
await main();
|
|
106
|
+
//# sourceMappingURL=quota-probe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quota-probe.js","sourceRoot":"","sources":["../../src/cli/quota-probe.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AdapterModelProfileDefinition } from "@alvax-ai/adapter-utils";
|
|
2
|
+
export declare const type = "claude_local";
|
|
3
|
+
export declare const label = "Claude Code (local)";
|
|
4
|
+
export declare const SANDBOX_INSTALL_COMMAND = "npm install -g @anthropic-ai/claude-code";
|
|
5
|
+
export declare const models: {
|
|
6
|
+
id: string;
|
|
7
|
+
label: string;
|
|
8
|
+
}[];
|
|
9
|
+
export declare const modelProfiles: AdapterModelProfileDefinition[];
|
|
10
|
+
export declare const agentConfigurationDoc = "# claude_local agent configuration\n\nAdapter: claude_local\n\nCore fields:\n- cwd (string, optional): default absolute working directory fallback for the agent process (created if missing when possible)\n- instructionsFilePath (string, optional): absolute path to a markdown instructions file injected at runtime\n- model (string, optional): Claude model id\n- effort (string, optional): reasoning effort passed via --effort (low|medium|high)\n- chrome (boolean, optional): pass --chrome when running Claude\n- promptTemplate (string, optional): run prompt template\n- maxTurnsPerRun (number, optional): max turns for one run\n- dangerouslySkipPermissions (boolean, optional, default true): pass --dangerously-skip-permissions to claude; defaults to true because Alvax runs Claude in headless --print mode where interactive permission prompts cannot be answered\n- command (string, optional): defaults to \"claude\"\n- extraArgs (string[], optional): additional CLI args\n- env (object, optional): KEY=VALUE environment variables\n- workspaceStrategy (object, optional): execution workspace strategy; currently supports { type: \"git_worktree\", baseRef?, branchTemplate?, worktreeParentDir? }\n- workspaceRuntime (object, optional): reserved for workspace runtime metadata; workspace runtime services are manually controlled from the workspace UI and are not auto-started by heartbeats\n\nOperational fields:\n- timeoutSec (number, optional): run timeout in seconds\n- graceSec (number, optional): SIGTERM grace period in seconds\n\nNotes:\n- When Alvax realizes a workspace/runtime for a run, it injects ALVAX_WORKSPACE_* and ALVAX_RUNTIME_* env vars for agent-side tooling.\n";
|
|
11
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAE7E,eAAO,MAAM,IAAI,iBAAiB,CAAC;AACnC,eAAO,MAAM,KAAK,wBAAwB,CAAC;AAE3C,eAAO,MAAM,uBAAuB,6CAA6C,CAAC;AAElF,eAAO,MAAM,MAAM;;;GAIlB,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,6BAA6B,EAWxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,opDAyBjC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export const type = "claude_local";
|
|
2
|
+
export const label = "Claude Code (local)";
|
|
3
|
+
export const SANDBOX_INSTALL_COMMAND = "npm install -g @anthropic-ai/claude-code";
|
|
4
|
+
export const models = [
|
|
5
|
+
{ id: "claude-opus-4-7", label: "Claude Opus 4.7" },
|
|
6
|
+
{ id: "claude-sonnet-4-6", label: "Claude Sonnet 4.6" },
|
|
7
|
+
{ id: "claude-haiku-4-5-20251001", label: "Claude Haiku 4.5" },
|
|
8
|
+
];
|
|
9
|
+
export const modelProfiles = [
|
|
10
|
+
{
|
|
11
|
+
key: "cheap",
|
|
12
|
+
label: "Cheap",
|
|
13
|
+
description: "Use Claude Haiku as the lower-cost Claude Code lane while preserving the agent's primary model.",
|
|
14
|
+
adapterConfig: {
|
|
15
|
+
model: "claude-haiku-4-5-20251001",
|
|
16
|
+
effort: "low",
|
|
17
|
+
},
|
|
18
|
+
source: "adapter_default",
|
|
19
|
+
},
|
|
20
|
+
];
|
|
21
|
+
export const agentConfigurationDoc = `# claude_local agent configuration
|
|
22
|
+
|
|
23
|
+
Adapter: claude_local
|
|
24
|
+
|
|
25
|
+
Core fields:
|
|
26
|
+
- cwd (string, optional): default absolute working directory fallback for the agent process (created if missing when possible)
|
|
27
|
+
- instructionsFilePath (string, optional): absolute path to a markdown instructions file injected at runtime
|
|
28
|
+
- model (string, optional): Claude model id
|
|
29
|
+
- effort (string, optional): reasoning effort passed via --effort (low|medium|high)
|
|
30
|
+
- chrome (boolean, optional): pass --chrome when running Claude
|
|
31
|
+
- promptTemplate (string, optional): run prompt template
|
|
32
|
+
- maxTurnsPerRun (number, optional): max turns for one run
|
|
33
|
+
- dangerouslySkipPermissions (boolean, optional, default true): pass --dangerously-skip-permissions to claude; defaults to true because Alvax runs Claude in headless --print mode where interactive permission prompts cannot be answered
|
|
34
|
+
- command (string, optional): defaults to "claude"
|
|
35
|
+
- extraArgs (string[], optional): additional CLI args
|
|
36
|
+
- env (object, optional): KEY=VALUE environment variables
|
|
37
|
+
- workspaceStrategy (object, optional): execution workspace strategy; currently supports { type: "git_worktree", baseRef?, branchTemplate?, worktreeParentDir? }
|
|
38
|
+
- workspaceRuntime (object, optional): reserved for workspace runtime metadata; workspace runtime services are manually controlled from the workspace UI and are not auto-started by heartbeats
|
|
39
|
+
|
|
40
|
+
Operational fields:
|
|
41
|
+
- timeoutSec (number, optional): run timeout in seconds
|
|
42
|
+
- graceSec (number, optional): SIGTERM grace period in seconds
|
|
43
|
+
|
|
44
|
+
Notes:
|
|
45
|
+
- When Alvax realizes a workspace/runtime for a run, it injects ALVAX_WORKSPACE_* and ALVAX_RUNTIME_* env vars for agent-side tooling.
|
|
46
|
+
`;
|
|
47
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,IAAI,GAAG,cAAc,CAAC;AACnC,MAAM,CAAC,MAAM,KAAK,GAAG,qBAAqB,CAAC;AAE3C,MAAM,CAAC,MAAM,uBAAuB,GAAG,0CAA0C,CAAC;AAElF,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,EAAE,EAAE,EAAE,iBAAiB,EAAE,KAAK,EAAE,iBAAiB,EAAE;IACnD,EAAE,EAAE,EAAE,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,EAAE;IACvD,EAAE,EAAE,EAAE,2BAA2B,EAAE,KAAK,EAAE,kBAAkB,EAAE;CAC/D,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAoC;IAC5D;QACE,GAAG,EAAE,OAAO;QACZ,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,iGAAiG;QAC9G,aAAa,EAAE;YACb,KAAK,EAAE,2BAA2B;YAClC,MAAM,EAAE,KAAK;SACd;QACD,MAAM,EAAE,iBAAiB;KAC1B;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBpC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AdapterExecutionContext } from "@alvax-ai/adapter-utils";
|
|
2
|
+
export declare function resolveSharedClaudeConfigDir(env?: NodeJS.ProcessEnv): string;
|
|
3
|
+
export declare function resolveManagedClaudeConfigSeedDir(env: NodeJS.ProcessEnv, companyId?: string): string;
|
|
4
|
+
export declare function prepareClaudeConfigSeed(env: NodeJS.ProcessEnv, onLog: AdapterExecutionContext["onLog"], companyId?: string): Promise<string>;
|
|
5
|
+
//# sourceMappingURL=claude-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-config.d.ts","sourceRoot":"","sources":["../../src/server/claude-config.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AA+EvE,wBAAgB,4BAA4B,CAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,MAAM,CAGR;AAED,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAMR;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,KAAK,EAAE,uBAAuB,CAAC,OAAO,CAAC,EACvC,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,CAAC,CA6BjB"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import fs from "node:fs/promises";
|
|
3
|
+
import os from "node:os";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
const DEFAULT_ALVAX_INSTANCE_ID = "default";
|
|
6
|
+
const SEEDED_SHARED_FILES = [
|
|
7
|
+
".credentials.json",
|
|
8
|
+
"credentials.json",
|
|
9
|
+
"settings.json",
|
|
10
|
+
"settings.local.json",
|
|
11
|
+
"CLAUDE.md",
|
|
12
|
+
];
|
|
13
|
+
function nonEmpty(value) {
|
|
14
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
15
|
+
}
|
|
16
|
+
async function pathExists(candidate) {
|
|
17
|
+
return fs.access(candidate).then(() => true).catch(() => false);
|
|
18
|
+
}
|
|
19
|
+
function isAlreadyExistsError(error) {
|
|
20
|
+
if (!error || typeof error !== "object")
|
|
21
|
+
return false;
|
|
22
|
+
const code = "code" in error ? error.code : null;
|
|
23
|
+
return code === "EEXIST" || code === "ENOTEMPTY";
|
|
24
|
+
}
|
|
25
|
+
async function collectSeedFiles(sourceDir) {
|
|
26
|
+
const files = [];
|
|
27
|
+
for (const name of SEEDED_SHARED_FILES) {
|
|
28
|
+
const sourcePath = path.join(sourceDir, name);
|
|
29
|
+
if (!(await pathExists(sourcePath)))
|
|
30
|
+
continue;
|
|
31
|
+
files.push({ name, sourcePath });
|
|
32
|
+
}
|
|
33
|
+
return files;
|
|
34
|
+
}
|
|
35
|
+
async function buildSeedSnapshotKey(files) {
|
|
36
|
+
if (files.length === 0)
|
|
37
|
+
return "empty";
|
|
38
|
+
const hash = createHash("sha256");
|
|
39
|
+
for (const file of files) {
|
|
40
|
+
hash.update(file.name);
|
|
41
|
+
hash.update("\0");
|
|
42
|
+
hash.update(await fs.readFile(file.sourcePath));
|
|
43
|
+
hash.update("\0");
|
|
44
|
+
}
|
|
45
|
+
return hash.digest("hex").slice(0, 16);
|
|
46
|
+
}
|
|
47
|
+
async function materializeSeedSnapshot(input) {
|
|
48
|
+
const targetDir = path.join(input.rootDir, input.snapshotKey);
|
|
49
|
+
if (await pathExists(targetDir)) {
|
|
50
|
+
return targetDir;
|
|
51
|
+
}
|
|
52
|
+
await fs.mkdir(input.rootDir, { recursive: true });
|
|
53
|
+
const stagingDir = await fs.mkdtemp(path.join(input.rootDir, ".tmp-"));
|
|
54
|
+
try {
|
|
55
|
+
for (const file of input.files) {
|
|
56
|
+
await fs.copyFile(file.sourcePath, path.join(stagingDir, file.name));
|
|
57
|
+
}
|
|
58
|
+
try {
|
|
59
|
+
await fs.rename(stagingDir, targetDir);
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (!isAlreadyExistsError(error)) {
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
65
|
+
await fs.rm(stagingDir, { recursive: true, force: true });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
await fs.rm(stagingDir, { recursive: true, force: true }).catch(() => undefined);
|
|
70
|
+
throw error;
|
|
71
|
+
}
|
|
72
|
+
return targetDir;
|
|
73
|
+
}
|
|
74
|
+
export function resolveSharedClaudeConfigDir(env = process.env) {
|
|
75
|
+
const fromEnv = nonEmpty(env.CLAUDE_CONFIG_DIR);
|
|
76
|
+
return fromEnv ? path.resolve(fromEnv) : path.join(os.homedir(), ".claude");
|
|
77
|
+
}
|
|
78
|
+
export function resolveManagedClaudeConfigSeedDir(env, companyId) {
|
|
79
|
+
const alvaxHome = nonEmpty(env.ALVAX_HOME) ?? path.resolve(os.homedir(), ".alvax");
|
|
80
|
+
const instanceId = nonEmpty(env.ALVAX_INSTANCE_ID) ?? DEFAULT_ALVAX_INSTANCE_ID;
|
|
81
|
+
return companyId
|
|
82
|
+
? path.resolve(alvaxHome, "instances", instanceId, "companies", companyId, "claude-config-seed")
|
|
83
|
+
: path.resolve(alvaxHome, "instances", instanceId, "claude-config-seed");
|
|
84
|
+
}
|
|
85
|
+
export async function prepareClaudeConfigSeed(env, onLog, companyId) {
|
|
86
|
+
const sourceDir = resolveSharedClaudeConfigDir(env);
|
|
87
|
+
const targetRootDir = resolveManagedClaudeConfigSeedDir(env, companyId);
|
|
88
|
+
if (path.resolve(sourceDir) === path.resolve(targetRootDir)) {
|
|
89
|
+
return targetRootDir;
|
|
90
|
+
}
|
|
91
|
+
const copiedFiles = await collectSeedFiles(sourceDir);
|
|
92
|
+
const snapshotKey = await buildSeedSnapshotKey(copiedFiles);
|
|
93
|
+
const targetDir = await materializeSeedSnapshot({
|
|
94
|
+
rootDir: targetRootDir,
|
|
95
|
+
snapshotKey,
|
|
96
|
+
files: copiedFiles,
|
|
97
|
+
});
|
|
98
|
+
if (copiedFiles.length > 0) {
|
|
99
|
+
await onLog("stdout", `[alvax] Prepared Claude config seed "${targetDir}" from "${sourceDir}" (${copiedFiles.map((file) => file.name).join(", ")}).\n`);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
await onLog("stdout", `[alvax] No local Claude config seed files were found in "${sourceDir}". Remote Claude auth may still require login.\n`);
|
|
103
|
+
}
|
|
104
|
+
return targetDir;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=claude-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-config.js","sourceRoot":"","sources":["../../src/server/claude-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { AdapterExecutionContext, AdapterExecutionResult } from "@alvax-ai/adapter-utils";
|
|
2
|
+
export declare function runClaudeLogin(input: {
|
|
3
|
+
runId: string;
|
|
4
|
+
agent: AdapterExecutionContext["agent"];
|
|
5
|
+
config: Record<string, unknown>;
|
|
6
|
+
context?: Record<string, unknown>;
|
|
7
|
+
authToken?: string;
|
|
8
|
+
onLog?: (stream: "stdout" | "stderr", chunk: string) => Promise<void>;
|
|
9
|
+
}): Promise<{
|
|
10
|
+
exitCode: number | null;
|
|
11
|
+
signal: string | null;
|
|
12
|
+
timedOut: boolean;
|
|
13
|
+
stdout: string;
|
|
14
|
+
stderr: string;
|
|
15
|
+
loginUrl: string | null;
|
|
16
|
+
}>;
|
|
17
|
+
export declare function execute(ctx: AdapterExecutionContext): Promise<AdapterExecutionResult>;
|
|
18
|
+
//# sourceMappingURL=execute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/server/execute.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AA6S/F,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvE;;;;;;;GA4BA;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,uBAAuB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAijB3F"}
|