@muha-sdk/claude-code-adapter 0.0.0-bootstrap.0 → 0.1.20
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/LICENSE +21 -0
- package/README.md +73 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/process.d.ts +69 -0
- package/dist/process.d.ts.map +1 -0
- package/dist/process.js +319 -0
- package/dist/process.js.map +1 -0
- package/package.json +33 -10
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Gao Sijie
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# @muha-sdk/claude-code-adapter
|
|
2
|
+
|
|
3
|
+
Official Claude Code Harness Adapter for Muha SDK. Node.js `>=22.20.0`.
|
|
4
|
+
Requires an independently installed and authenticated `claude` CLI on `PATH`.
|
|
5
|
+
Linux x64 is real-qualified. Windows is unsupported/untested;
|
|
6
|
+
macOS is untested. Muha never installs or runs CLI setup automatically.
|
|
7
|
+
|
|
8
|
+
```js
|
|
9
|
+
import { createMuhaRuntime } from "@muha-sdk/core";
|
|
10
|
+
import { claudeCodeAdapter } from "@muha-sdk/claude-code-adapter";
|
|
11
|
+
const runtime = await createMuhaRuntime({ harnesses: [claudeCodeAdapter()] });
|
|
12
|
+
try {
|
|
13
|
+
const session = await runtime.createSession({
|
|
14
|
+
harness: "claude", workspacePath: process.cwd(),
|
|
15
|
+
model: "sonnet", approvalPolicy: "autoDeny",
|
|
16
|
+
});
|
|
17
|
+
const turn = await session.startTurn([{ type: "text", text: "Explain this project" }]);
|
|
18
|
+
console.log(await turn.result);
|
|
19
|
+
} finally { await runtime.close(); }
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Install Claude Code separately using Anthropic's native installer, then configure
|
|
23
|
+
native authentication. `OfficialAdapterOptions.env` passes overrides unchanged:
|
|
24
|
+
`ANTHROPIC_API_KEY`, `ANTHROPIC_AUTH_TOKEN`, `ANTHROPIC_BASE_URL` support
|
|
25
|
+
Anthropic-compatible third-party gateways. Native `apiKeyHelper` in
|
|
26
|
+
`~/.claude/settings.json` also works. `CLAUDE_CONFIG_DIR` selects another config
|
|
27
|
+
directory. For opencode Go, set
|
|
28
|
+
`ANTHROPIC_BASE_URL=https://opencode.ai/inference/go/anthropic` plus
|
|
29
|
+
`ANTHROPIC_AUTH_TOKEN` through adapter `env` or the native environment. Never
|
|
30
|
+
print credentials. Credentials and environment values are never logged by this adapter.
|
|
31
|
+
|
|
32
|
+
The native route starts one headless process per Turn with stdin text input.
|
|
33
|
+
New Sessions use a UUID with `--session-id`, then `--resume`; explicit resume
|
|
34
|
+
always uses `--resume`. Init must confirm the requested session identity.
|
|
35
|
+
Resume existence and native configuration are checked by Claude on the next
|
|
36
|
+
Turn, rather than through a paid readiness probe.
|
|
37
|
+
|
|
38
|
+
Model IDs are arbitrary passthrough strings, including `deepseek-v4.1-flash`.
|
|
39
|
+
`listModels` is a static alias catalog (`default`, `sonnet`, `opus`, `haiku`,
|
|
40
|
+
`opusplan`, `fable`), augmented with `ANTHROPIC_MODEL`,
|
|
41
|
+
`ANTHROPIC_DEFAULT_OPUS_MODEL`, `ANTHROPIC_DEFAULT_SONNET_MODEL`,
|
|
42
|
+
`ANTHROPIC_DEFAULT_HAIKU_MODEL` and the readable settings `model` field.
|
|
43
|
+
This is configuration discovery, not a live provider model inventory.
|
|
44
|
+
Model and effort selection are `selectedOnly` at create/resume/idle and apply
|
|
45
|
+
to the next Turn. CLI 2.1.197 help declares `--effort` levels
|
|
46
|
+
`low`, `medium`, `high`, `xhigh`, `max`; actual model/provider acceptance may vary.
|
|
47
|
+
Changing model clears explicit effort.
|
|
48
|
+
|
|
49
|
+
`autoApprove` maps to `--dangerously-skip-permissions`; `autoDeny` maps to
|
|
50
|
+
`--permission-mode dontAsk`. Native configured permissions can still allow tools;
|
|
51
|
+
this policy denies requests that would require prompting. Result
|
|
52
|
+
`permission_denials` remain in Native Event Records. Interactive approvals,
|
|
53
|
+
Questions, image input, Session listing, Workspace Skills and MCP configuration
|
|
54
|
+
are unsupported by the adapter declaration.
|
|
55
|
+
|
|
56
|
+
`startupTimeoutMs` defaults to 120000 ms until the first parsed event.
|
|
57
|
+
`MUHA_CLAUDE_TURN_IDLE_TIMEOUT_MS` in adapter env defaults to 300000 ms from
|
|
58
|
+
that event and resets on every parsed stream-json event; it bounds authentication stalls after
|
|
59
|
+
init and later idle periods. `shutdownTimeoutMs` defaults to 5000 ms.
|
|
60
|
+
Timeouts, interruption and close reclaim owned processes through Core's supervisor.
|
|
61
|
+
|
|
62
|
+
Usage inputTokens includes input_tokens plus cache_creation_input_tokens;
|
|
63
|
+
cachedInputTokens reports cache_read_input_tokens separately. Output tokens use
|
|
64
|
+
output_tokens. `total_cost_usd` and `modelUsage.costUSD` are Claude Code's
|
|
65
|
+
Anthropic list-price estimates, not actual gateway charges. They stay exclusively
|
|
66
|
+
in Native Event Records and never become Muha usage/cost fields.
|
|
67
|
+
|
|
68
|
+
Controlled fixtures cover protocol translation and process lifecycle. Linux x64 real
|
|
69
|
+
qualification passed with CLI 2.1.197, Node 22.23.4 and `deepseek-v4.1-flash`
|
|
70
|
+
through opencode Go, effort null and zero Muha retries. Initial modes ran at
|
|
71
|
+
`d5f05cf`; interrupt and resume-interrupt continuation passed at `e046b9e` after
|
|
72
|
+
a runner reporting fix. Full-mode continuation is not yet real-observed. See
|
|
73
|
+
[qualification](https://github.com/Gao-Gossssip/muha/blob/main/QUALIFICATION.md).
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { HarnessRegistration, OfficialAdapterOptions } from "@muha-sdk/core";
|
|
2
|
+
export type { OfficialAdapterOptions } from "@muha-sdk/core";
|
|
3
|
+
export declare function claudeCodeAdapter(options?: OfficialAdapterOptions): HarnessRegistration;
|
|
4
|
+
//# 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,EAAuB,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAGvG,YAAY,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAS7D,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,sBAA2B,GAAG,mBAAmB,CAM3F"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { composeWorkspaceConfigurator, createOfficialHarnessRegistration } from "@muha-sdk/core/internal";
|
|
2
|
+
import { ClaudeProcess } from "./process.js";
|
|
3
|
+
const points = Object.freeze(["createSession", "resumeSession", "idleSession"]);
|
|
4
|
+
const capabilities = Object.freeze({
|
|
5
|
+
sessionListing: false, imageInput: false, approvalPolicies: Object.freeze(["autoDeny", "autoApprove"]),
|
|
6
|
+
turnQuestions: false, workspaceSkills: false, workspaceMcp: false,
|
|
7
|
+
model: Object.freeze({ listing: true, selectionAt: points, observation: "selectedOnly" }),
|
|
8
|
+
effort: Object.freeze({ selectionAt: points, observation: "selectedOnly", requiresKnownModel: false }),
|
|
9
|
+
assistantMessageStreaming: true, assistantReasoningStreaming: true, toolEvents: true, turnUsage: true,
|
|
10
|
+
});
|
|
11
|
+
export function claudeCodeAdapter(options = {}) {
|
|
12
|
+
return createOfficialHarnessRegistration("claude", options, capabilities, composeWorkspaceConfigurator({
|
|
13
|
+
planSkill() { throw new Error("Claude Code Workspace Skills are unsupported"); },
|
|
14
|
+
planMcpServer() { throw new Error("Claude Code Workspace MCP is unsupported"); },
|
|
15
|
+
}), (snapshot, context) => new ClaudeProcess(snapshot, context));
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,4BAA4B,EAAE,iCAAiC,EAAE,MAAM,yBAAyB,CAAC;AAC1G,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,eAAe,EAAE,aAAa,CAAU,CAAC,CAAC;AACzF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACjC,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,aAAa,CAAU,CAAC;IAC/G,aAAa,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK;IACjE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;IACzF,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,KAAK,EAAE,CAAC;IACtG,yBAAyB,EAAE,IAAI,EAAE,2BAA2B,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI;CACxE,CAAC,CAAC;AACjC,MAAM,UAAU,iBAAiB,CAAC,UAAkC,EAAE;IACpE,OAAO,iCAAiC,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EACtE,4BAA4B,CAAC;QAC3B,SAAS,KAAK,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC,CAAC;QAChF,aAAa,KAAK,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAC,CAAC;KACjF,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { OfficialAdapterOptions } from "@muha-sdk/core";
|
|
2
|
+
import { type AdapterCreateSessionOptions, type AdapterResumeSessionOptions, type AdapterSession, type AdapterTurn, type AdapterTurnEvent, type AdapterTurnInput, type LiveHarnessAdapter, type LiveHarnessAdapterContext } from "@muha-sdk/core/internal";
|
|
3
|
+
export declare class ClaudeProcess implements LiveHarnessAdapter {
|
|
4
|
+
readonly options: OfficialAdapterOptions;
|
|
5
|
+
readonly context: LiveHarnessAdapterContext;
|
|
6
|
+
readonly kind: "claude";
|
|
7
|
+
readonly route: "native";
|
|
8
|
+
readonly sessions: Set<ClaudeSession>;
|
|
9
|
+
readonly env: NodeJS.ProcessEnv;
|
|
10
|
+
readonly idleTimeoutMs: number;
|
|
11
|
+
constructor(options: OfficialAdapterOptions, context: LiveHarnessAdapterContext);
|
|
12
|
+
initialize(): Promise<void>;
|
|
13
|
+
createSession(options: AdapterCreateSessionOptions): Promise<AdapterSession>;
|
|
14
|
+
resumeSession(options: AdapterResumeSessionOptions): Promise<AdapterSession>;
|
|
15
|
+
private session;
|
|
16
|
+
listSessions(): Promise<never>;
|
|
17
|
+
listModels(): Promise<{
|
|
18
|
+
id: string;
|
|
19
|
+
supportedEfforts: string[];
|
|
20
|
+
}[]>;
|
|
21
|
+
close(): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
declare class ClaudeSession implements AdapterSession {
|
|
24
|
+
readonly owner: ClaudeProcess;
|
|
25
|
+
readonly options: AdapterCreateSessionOptions;
|
|
26
|
+
readonly nativeSessionId: string;
|
|
27
|
+
model: string | undefined;
|
|
28
|
+
effort: string | undefined;
|
|
29
|
+
closed: boolean;
|
|
30
|
+
private resume;
|
|
31
|
+
private turn?;
|
|
32
|
+
constructor(owner: ClaudeProcess, options: AdapterCreateSessionOptions, id?: string);
|
|
33
|
+
setModel(model: string): Promise<void>;
|
|
34
|
+
setEffort(effort: string): Promise<void>;
|
|
35
|
+
startTurn(input: readonly AdapterTurnInput[]): Promise<ClaudeTurn>;
|
|
36
|
+
close(): Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
declare class ClaudeTurn implements AdapterTurn {
|
|
39
|
+
readonly session: ClaudeSession;
|
|
40
|
+
readonly nativeTurnId: `${string}-${string}-${string}-${string}-${string}`;
|
|
41
|
+
private queue;
|
|
42
|
+
private wake?;
|
|
43
|
+
private ended;
|
|
44
|
+
private stopping?;
|
|
45
|
+
private owner;
|
|
46
|
+
private timer?;
|
|
47
|
+
private init;
|
|
48
|
+
private started;
|
|
49
|
+
private receivedEvent;
|
|
50
|
+
private message;
|
|
51
|
+
private tools;
|
|
52
|
+
private sequence;
|
|
53
|
+
private resultEvent?;
|
|
54
|
+
private stderr;
|
|
55
|
+
private cleanupError?;
|
|
56
|
+
constructor(session: ClaudeSession, args: string[], prompt: string);
|
|
57
|
+
private sanitize;
|
|
58
|
+
private deadline;
|
|
59
|
+
private receive;
|
|
60
|
+
private completeMessage;
|
|
61
|
+
private push;
|
|
62
|
+
private finish;
|
|
63
|
+
interrupt(): Promise<void>;
|
|
64
|
+
respondToApproval(): Promise<never>;
|
|
65
|
+
respondToQuestion(): Promise<never>;
|
|
66
|
+
[Symbol.asyncIterator](): AsyncGenerator<AdapterTurnEvent, void, unknown>;
|
|
67
|
+
}
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"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"}
|
package/dist/process.js
ADDED
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import { homedir } from "node:os";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import {} from "@muha-sdk/core/internal";
|
|
6
|
+
import { harnessEnvironment, OwnedHarnessProcess } from "@muha-sdk/core/internal/host-process";
|
|
7
|
+
const efforts = ["low", "medium", "high", "xhigh", "max"];
|
|
8
|
+
const failure = (message) => ({ code: "HARNESS_ERROR", harness: "claude", operation: "startTurn", message, retryable: false });
|
|
9
|
+
export class ClaudeProcess {
|
|
10
|
+
options;
|
|
11
|
+
context;
|
|
12
|
+
kind = "claude";
|
|
13
|
+
route = "native";
|
|
14
|
+
sessions = new Set();
|
|
15
|
+
env;
|
|
16
|
+
idleTimeoutMs;
|
|
17
|
+
constructor(options, context) {
|
|
18
|
+
this.options = options;
|
|
19
|
+
this.context = context;
|
|
20
|
+
this.env = harnessEnvironment(options.env);
|
|
21
|
+
const idle = Number(this.env.MUHA_CLAUDE_TURN_IDLE_TIMEOUT_MS ?? 300000);
|
|
22
|
+
this.idleTimeoutMs = Number.isSafeInteger(idle) && idle > 0 ? idle : 300000;
|
|
23
|
+
}
|
|
24
|
+
async initialize() { }
|
|
25
|
+
async createSession(options) { return this.session(options); }
|
|
26
|
+
async resumeSession(options) { return this.session(options, options.nativeSessionId); }
|
|
27
|
+
session(options, id) {
|
|
28
|
+
const session = new ClaudeSession(this, options, id);
|
|
29
|
+
this.sessions.add(session);
|
|
30
|
+
return session;
|
|
31
|
+
}
|
|
32
|
+
async listSessions() { throw failure("Claude Code Session listing is unsupported"); }
|
|
33
|
+
async listModels() {
|
|
34
|
+
const ids = new Set(["default", "sonnet", "opus", "haiku", "opusplan", "fable"]);
|
|
35
|
+
for (const key of ["ANTHROPIC_MODEL", "ANTHROPIC_DEFAULT_OPUS_MODEL", "ANTHROPIC_DEFAULT_SONNET_MODEL", "ANTHROPIC_DEFAULT_HAIKU_MODEL"]) {
|
|
36
|
+
const value = this.env[key];
|
|
37
|
+
if (value)
|
|
38
|
+
ids.add(value);
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
const settings = JSON.parse(await readFile(join(this.env.CLAUDE_CONFIG_DIR ?? join(homedir(), ".claude"), "settings.json"), "utf8"));
|
|
42
|
+
if (typeof settings.model === "string" && settings.model)
|
|
43
|
+
ids.add(settings.model);
|
|
44
|
+
}
|
|
45
|
+
catch { /* Optional local configuration; no credentials are read into diagnostics. */ }
|
|
46
|
+
return [...ids].map(id => ({ id, supportedEfforts: [...efforts] }));
|
|
47
|
+
}
|
|
48
|
+
async close() { await Promise.all([...this.sessions].map(session => session.close())); }
|
|
49
|
+
}
|
|
50
|
+
class ClaudeSession {
|
|
51
|
+
owner;
|
|
52
|
+
options;
|
|
53
|
+
nativeSessionId;
|
|
54
|
+
model;
|
|
55
|
+
effort;
|
|
56
|
+
closed = false;
|
|
57
|
+
resume;
|
|
58
|
+
turn;
|
|
59
|
+
constructor(owner, options, id) {
|
|
60
|
+
this.owner = owner;
|
|
61
|
+
this.options = options;
|
|
62
|
+
this.nativeSessionId = id ?? randomUUID();
|
|
63
|
+
this.resume = id !== undefined;
|
|
64
|
+
this.model = options.model;
|
|
65
|
+
this.effort = options.effort;
|
|
66
|
+
if (this.effort !== undefined && !efforts.includes(this.effort))
|
|
67
|
+
throw { ...failure("Unsupported Claude Code effort"), operation: id === undefined ? "createSession" : "resumeSession" };
|
|
68
|
+
}
|
|
69
|
+
async setModel(model) { this.model = model; this.effort = undefined; }
|
|
70
|
+
async setEffort(effort) { if (!efforts.includes(effort))
|
|
71
|
+
throw { ...failure("Unsupported Claude Code effort"), operation: "setEffort" }; this.effort = effort; }
|
|
72
|
+
async startTurn(input) {
|
|
73
|
+
const args = ["-p", "--output-format", "stream-json", "--verbose", "--input-format", "text",
|
|
74
|
+
this.resume ? "--resume" : "--session-id", this.nativeSessionId];
|
|
75
|
+
if (this.model)
|
|
76
|
+
args.push("--model", this.model);
|
|
77
|
+
if (this.effort)
|
|
78
|
+
args.push("--effort", this.effort);
|
|
79
|
+
if (this.options.approvalPolicy === "autoApprove")
|
|
80
|
+
args.push("--dangerously-skip-permissions");
|
|
81
|
+
else
|
|
82
|
+
args.push("--permission-mode", "dontAsk");
|
|
83
|
+
this.turn = new ClaudeTurn(this, args, input.map(part => {
|
|
84
|
+
if (part.type !== "text")
|
|
85
|
+
throw failure("Claude Code supports text input only");
|
|
86
|
+
return part.text;
|
|
87
|
+
}).join("\n"));
|
|
88
|
+
this.resume = true;
|
|
89
|
+
return this.turn;
|
|
90
|
+
}
|
|
91
|
+
async close() { this.closed = true; await this.turn?.interrupt(); this.owner.sessions.delete(this); }
|
|
92
|
+
}
|
|
93
|
+
class ClaudeTurn {
|
|
94
|
+
session;
|
|
95
|
+
nativeTurnId = randomUUID();
|
|
96
|
+
queue = [];
|
|
97
|
+
wake;
|
|
98
|
+
ended = false;
|
|
99
|
+
stopping;
|
|
100
|
+
owner;
|
|
101
|
+
timer;
|
|
102
|
+
init = false;
|
|
103
|
+
started = false;
|
|
104
|
+
receivedEvent = false;
|
|
105
|
+
message;
|
|
106
|
+
tools = new Set();
|
|
107
|
+
sequence = 0;
|
|
108
|
+
resultEvent;
|
|
109
|
+
stderr = "";
|
|
110
|
+
cleanupError;
|
|
111
|
+
constructor(session, args, prompt) {
|
|
112
|
+
this.session = session;
|
|
113
|
+
const adapter = session.owner;
|
|
114
|
+
this.owner = new OwnedHarnessProcess("claude", args, adapter.env, adapter.options.shutdownTimeoutMs ?? 5000, (message, kind) => {
|
|
115
|
+
if (kind === "ownership") {
|
|
116
|
+
const error = failure(message);
|
|
117
|
+
adapter.context.reportFatalError(error, [session]);
|
|
118
|
+
void this.finish({ type: "turn.failed", error });
|
|
119
|
+
}
|
|
120
|
+
}, session.options.workspacePath);
|
|
121
|
+
const child = this.owner.child;
|
|
122
|
+
child.stderr.setEncoding("utf8");
|
|
123
|
+
child.stderr.on("data", (chunk) => { this.stderr = (this.stderr + chunk).slice(-4096); });
|
|
124
|
+
this.deadline(adapter.options.startupTimeoutMs ?? 120000);
|
|
125
|
+
child.stdin.end(prompt);
|
|
126
|
+
void (async () => {
|
|
127
|
+
let buffer = "";
|
|
128
|
+
try {
|
|
129
|
+
child.stdout.setEncoding("utf8");
|
|
130
|
+
for await (const chunk of child.stdout) {
|
|
131
|
+
buffer += chunk;
|
|
132
|
+
if (Buffer.byteLength(buffer) > 8 * 1024 * 1024)
|
|
133
|
+
throw new Error("Frame too large");
|
|
134
|
+
let end;
|
|
135
|
+
while ((end = buffer.indexOf("\n")) >= 0) {
|
|
136
|
+
const line = buffer.slice(0, end);
|
|
137
|
+
buffer = buffer.slice(end + 1);
|
|
138
|
+
if (line.trim())
|
|
139
|
+
await this.receive(line);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
if (buffer.trim())
|
|
143
|
+
await this.receive(buffer);
|
|
144
|
+
if (this.resultEvent && !this.stopping)
|
|
145
|
+
await this.owner.nativeExited;
|
|
146
|
+
if (!this.stopping)
|
|
147
|
+
await this.finish(this.resultEvent ?? { type: "turn.failed", error: failure(`Claude Code exited without a result. ${this.sanitize(this.stderr)}`) });
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
if (!this.stopping) {
|
|
151
|
+
if (!this.started) {
|
|
152
|
+
this.started = true;
|
|
153
|
+
this.push({ type: "turn.started" });
|
|
154
|
+
}
|
|
155
|
+
this.push({ type: "adapter.protocolError", message: "Invalid Claude Code stream-json output" });
|
|
156
|
+
await this.finish({ type: "turn.failed", error: failure("Invalid Claude Code stream-json output") });
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
})();
|
|
160
|
+
}
|
|
161
|
+
sanitize(text) {
|
|
162
|
+
const secrets = Object.entries(this.session.owner.env)
|
|
163
|
+
.filter(([name, value]) => {
|
|
164
|
+
if (!value || value.trim().length < 8)
|
|
165
|
+
return false;
|
|
166
|
+
// Known provider credentials retain coverage even for numeric-looking values.
|
|
167
|
+
if (/^(?:ANTHROPIC_API_KEY|ANTHROPIC_AUTH_TOKEN|CLAUDE_CODE_OAUTH_TOKEN|AWS_(?:ACCESS_KEY_ID|SECRET_ACCESS_KEY|SESSION_TOKEN|SECURITY_TOKEN))$/i.test(name))
|
|
168
|
+
return true;
|
|
169
|
+
return /(^|_)(API_?KEY|KEY|TOKEN|SECRET|PASSWORD|AUTH(ORIZATION)?)(_|$)/i.test(name)
|
|
170
|
+
&& !/^(?:true|false|[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?)$/i.test(value.trim());
|
|
171
|
+
})
|
|
172
|
+
.map(([, value]) => value)
|
|
173
|
+
.sort((a, b) => b.length - a.length);
|
|
174
|
+
for (const value of secrets)
|
|
175
|
+
text = text.split(value).join("[REDACTED]");
|
|
176
|
+
return text.replace(/(authorization\s*[:=]\s*)([^\r\n]+)/ig, "$1[REDACTED]")
|
|
177
|
+
.replace(/((?:api[_-]?key|auth[_-]?token|access[_-]?token|token|secret)\s*[:=]\s*)["']?[^\s,"'}]+/ig, "$1[REDACTED]")
|
|
178
|
+
.replace(/\b(?:sk-|sk_ant_|sk-ant-)[\w-]+/g, "[REDACTED]");
|
|
179
|
+
}
|
|
180
|
+
deadline(ms) {
|
|
181
|
+
clearTimeout(this.timer);
|
|
182
|
+
this.timer = setTimeout(() => {
|
|
183
|
+
void this.finish({ type: "turn.failed", error: failure(this.receivedEvent
|
|
184
|
+
? `Claude Code started (${this.init ? "session init received" : "stream-json event received"}) but produced no further output within ${ms} ms; the gateway may be slow or authentication (apiKeyHelper) may be retrying. Raise MUHA_CLAUDE_TURN_IDLE_TIMEOUT_MS to allow more time.`
|
|
185
|
+
: `Claude Code produced no output within ${ms} ms; check authentication (ANTHROPIC_API_KEY / ANTHROPIC_AUTH_TOKEN / apiKeyHelper in ~/.claude/settings.json) and ANTHROPIC_BASE_URL`) });
|
|
186
|
+
}, ms);
|
|
187
|
+
}
|
|
188
|
+
async receive(line) {
|
|
189
|
+
const scrub = (value) => {
|
|
190
|
+
if (typeof value === "string")
|
|
191
|
+
return this.sanitize(value);
|
|
192
|
+
if (Array.isArray(value))
|
|
193
|
+
return value.map(scrub);
|
|
194
|
+
if (value && typeof value === "object")
|
|
195
|
+
return Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, key !== "apiKeySource" && /^(?:api[_-]?key|token|secret|authorization|password)$/i.test(key) && typeof entry === "string" ? "[REDACTED]" : scrub(entry)]));
|
|
196
|
+
return value;
|
|
197
|
+
};
|
|
198
|
+
const payload = JSON.parse(line);
|
|
199
|
+
if (!payload || typeof payload !== "object" || Array.isArray(payload))
|
|
200
|
+
throw new Error("Invalid event");
|
|
201
|
+
await this.session.owner.context.recordNativeEvent("claude", scrub(payload));
|
|
202
|
+
if (this.stopping)
|
|
203
|
+
return;
|
|
204
|
+
this.receivedEvent = true;
|
|
205
|
+
this.deadline(this.session.owner.idleTimeoutMs);
|
|
206
|
+
if (payload.type === "system" && payload.subtype === "init") {
|
|
207
|
+
if (this.init || payload.session_id !== this.session.nativeSessionId)
|
|
208
|
+
throw new Error("Session mismatch");
|
|
209
|
+
this.init = true;
|
|
210
|
+
this.started = true;
|
|
211
|
+
this.push({ type: "turn.started" });
|
|
212
|
+
}
|
|
213
|
+
else if (payload.type === "assistant") {
|
|
214
|
+
if (!this.init)
|
|
215
|
+
throw new Error("Missing init");
|
|
216
|
+
if (typeof payload.message?.id !== "string" || !payload.message.id || !Array.isArray(payload.message.content))
|
|
217
|
+
throw new Error("Invalid assistant message");
|
|
218
|
+
if (this.message && this.message.claudeId !== payload.message.id)
|
|
219
|
+
this.completeMessage();
|
|
220
|
+
for (const block of payload.message.content) {
|
|
221
|
+
if (block.type === "text" || block.type === "thinking") {
|
|
222
|
+
const delta = block.type === "text" ? block.text : block.thinking;
|
|
223
|
+
if (typeof delta !== "string")
|
|
224
|
+
throw new Error("Invalid assistant block");
|
|
225
|
+
if (!this.message) {
|
|
226
|
+
const nativeId = `${this.nativeTurnId}:${payload.message.id}:${this.sequence++}`;
|
|
227
|
+
this.message = { claudeId: payload.message.id, nativeId, text: "" };
|
|
228
|
+
this.push({ type: "assistant.message.started", nativeMessageId: nativeId });
|
|
229
|
+
}
|
|
230
|
+
if (block.type === "text")
|
|
231
|
+
this.message.text += delta;
|
|
232
|
+
if (delta)
|
|
233
|
+
this.push({ type: block.type === "text" ? "assistant.message.delta" : "assistant.reasoning.delta", nativeMessageId: this.message.nativeId, delta });
|
|
234
|
+
}
|
|
235
|
+
else if (block.type === "tool_use") {
|
|
236
|
+
this.completeMessage();
|
|
237
|
+
if (typeof block.id !== "string" || !block.id || typeof block.name !== "string" || !block.name || this.tools.has(block.id))
|
|
238
|
+
throw new Error("Invalid tool use");
|
|
239
|
+
this.tools.add(block.id);
|
|
240
|
+
this.push({ type: "tool.started", nativeToolCallId: block.id, toolName: block.name, input: block.input });
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
else if (payload.type === "user") {
|
|
245
|
+
for (const block of payload.message?.content ?? [])
|
|
246
|
+
if (block.type === "tool_result") {
|
|
247
|
+
this.completeMessage();
|
|
248
|
+
if (typeof block.tool_use_id !== "string" || !this.tools.delete(block.tool_use_id))
|
|
249
|
+
throw new Error("Unknown tool result");
|
|
250
|
+
this.push({ type: "tool.completed", nativeToolCallId: block.tool_use_id, isError: block.is_error === true,
|
|
251
|
+
output: { content: block.content, ...(payload.tool_use_result === undefined ? {} : { tool_use_result: payload.tool_use_result }) },
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else if (payload.type === "result") {
|
|
256
|
+
this.completeMessage();
|
|
257
|
+
if (this.resultEvent)
|
|
258
|
+
throw new Error("Repeated Claude result");
|
|
259
|
+
if (payload.subtype !== "success" || payload.is_error)
|
|
260
|
+
await this.finish({ type: "turn.failed", error: failure(`Claude Code ${String(payload.subtype)}: ${this.sanitize(JSON.stringify(payload.errors ?? payload.result ?? "Execution failed"))}`) });
|
|
261
|
+
else {
|
|
262
|
+
if (!this.init)
|
|
263
|
+
throw new Error("Missing init");
|
|
264
|
+
const u = payload.usage ?? {};
|
|
265
|
+
this.push({ type: "usage.updated", usage: { inputTokens: (u.input_tokens ?? 0) + (u.cache_creation_input_tokens ?? 0),
|
|
266
|
+
cachedInputTokens: u.cache_read_input_tokens ?? 0, outputTokens: u.output_tokens ?? 0 } });
|
|
267
|
+
this.resultEvent = { type: "turn.completed" };
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
completeMessage() {
|
|
272
|
+
if (!this.message)
|
|
273
|
+
return;
|
|
274
|
+
this.push({ type: "assistant.message.completed", nativeMessageId: this.message.nativeId, text: this.message.text });
|
|
275
|
+
this.message = undefined;
|
|
276
|
+
}
|
|
277
|
+
push(event) { this.queue.push(event); this.wake?.(); }
|
|
278
|
+
finish(event) {
|
|
279
|
+
// Core requires a start even when the native process fails before init.
|
|
280
|
+
if (!this.started) {
|
|
281
|
+
this.started = true;
|
|
282
|
+
this.push({ type: "turn.started" });
|
|
283
|
+
}
|
|
284
|
+
return this.stopping ??= (async () => {
|
|
285
|
+
clearTimeout(this.timer);
|
|
286
|
+
try {
|
|
287
|
+
await this.owner.close();
|
|
288
|
+
if (event.type === "turn.completed" && this.owner.nativeExitCode !== 0)
|
|
289
|
+
event = {
|
|
290
|
+
type: "turn.failed", error: failure(`Claude Code exited non-zero (${this.owner.nativeExitCode ?? "unknown"}). ${this.sanitize(this.stderr)}`),
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
this.cleanupError = failure("Claude Code owned process cleanup failed");
|
|
295
|
+
this.session.owner.context.reportFatalError(this.cleanupError, [this.session]);
|
|
296
|
+
event = { type: "turn.failed", error: this.cleanupError };
|
|
297
|
+
}
|
|
298
|
+
this.push(event);
|
|
299
|
+
this.ended = true;
|
|
300
|
+
this.wake?.();
|
|
301
|
+
})();
|
|
302
|
+
}
|
|
303
|
+
async interrupt() { await this.finish({ type: "turn.interrupted" }); if (this.cleanupError)
|
|
304
|
+
throw this.cleanupError; }
|
|
305
|
+
async respondToApproval() { throw failure("Claude Code interactive approvals are unsupported"); }
|
|
306
|
+
async respondToQuestion() { throw failure("Claude Code Questions are unsupported"); }
|
|
307
|
+
async *[Symbol.asyncIterator]() {
|
|
308
|
+
while (true) {
|
|
309
|
+
const event = this.queue.shift();
|
|
310
|
+
if (event)
|
|
311
|
+
yield event;
|
|
312
|
+
else if (this.ended)
|
|
313
|
+
return;
|
|
314
|
+
else
|
|
315
|
+
await new Promise(resolve => { this.wake = resolve; });
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=process.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.js","sourceRoot":"","sources":["../src/process.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@muha-sdk/claude-code-adapter",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
},
|
|
9
|
-
"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
3
|
+
"version": "0.1.20",
|
|
4
|
+
"description": "Official Claude Code adapter for Muha SDK.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"node": ">=22.20.0"
|
|
8
|
+
},
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"default": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"sideEffects": false,
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "https://github.com/Gao-Gossssip/muha.git",
|
|
23
|
+
"directory": "packages/claude-code-adapter"
|
|
24
|
+
},
|
|
25
|
+
"bugs": {
|
|
26
|
+
"url": "https://github.com/Gao-Gossssip/muha/issues"
|
|
27
|
+
},
|
|
28
|
+
"homepage": "https://github.com/Gao-Gossssip/muha/tree/main/packages/claude-code-adapter#readme",
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@muha-sdk/core": "0.1.20"
|
|
31
|
+
},
|
|
32
|
+
"publishConfig": {
|
|
33
|
+
"access": "public",
|
|
34
|
+
"registry": "https://registry.npmjs.org/"
|
|
35
|
+
}
|
|
13
36
|
}
|