opencode-claude-cli 0.0.1

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 ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026
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,71 @@
1
+ # OpenCode Claude CLI
2
+
3
+ ![npm](https://img.shields.io/npm/v/opencode-claude-cli?style=flat-square&logo=npm&labelColor=4a4a4a&color=e03131) ![npm downloads](https://img.shields.io/npm/dm/opencode-claude-cli?style=flat-square&logo=npm&label=downloads&labelColor=4a4a4a&color=e03131)
4
+
5
+ Use OpenCode with Claude Code as a provider.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm install -g opencode-claude-cli
11
+ ```
12
+
13
+ Add the plugin to your OpenCode config:
14
+
15
+ ```json
16
+ {
17
+ "plugin": ["opencode-claude-cli"]
18
+ }
19
+ ```
20
+
21
+ ## Setup
22
+
23
+ 1. Make sure Claude Code is installed and logged in:
24
+ ```bash
25
+ claude auth login
26
+ ```
27
+ 2. Restart OpenCode.
28
+ 3. Run `/connect` and choose `Claude Code`.
29
+
30
+ ## Models
31
+
32
+ - `claude-opus-4-6`
33
+ - `claude-sonnet-4-6`
34
+ - `claude-haiku-4-5`
35
+
36
+ > [!NOTE]
37
+ >
38
+ > - Uses your local Claude Code login.
39
+ > - Requests are routed through the local `claude` CLI, not Anthropic HTTP APIs.
40
+ > - Tool execution happens inside Claude Code's harness.
41
+ > - OpenCode sessions are mapped to Claude Code sessions.
42
+
43
+ ## Features
44
+
45
+ - OpenCode plan mode is mapped to Claude Code plan mode.
46
+ - Claude Code responses stream live into OpenCode.
47
+ - Claude tool activity is shown in OpenCode as display-only transcript text.
48
+ - Multiple Claude Code sessions can run concurrently because OpenCode sessions are mapped independently.
49
+
50
+ ## Limitations
51
+
52
+ - **Permissions are not interactive**: This plugin always runs Claude Code with `--dangerously-skip-permissions`.
53
+ - **MCP servers are Claude-side**: Claude Code uses its own MCP servers (for example from `~/.claude/settings.json`), not the ones configured in OpenCode.
54
+ - **Tool execution is Claude-side**: OpenCode built-in tool execution, permission prompts, and tool UI are not the source of truth for Claude Code requests.
55
+ - **Tool rendering is approximate**: Tool activity is displayed as text in OpenCode, it is not rendered as native OpenCode tool execution events.
56
+ - **Custom modes are not mapped**: OpenCode custom modes are not mapped to Claude Code.
57
+
58
+ ## Permission behavior
59
+
60
+ - Claude Code always runs with `--dangerously-skip-permissions`.
61
+ - OpenCode plan mode is automatically mapped to Claude Code plan (read-only) mode.
62
+
63
+ ## Troubleshooting
64
+
65
+ - **`Claude Code was not found on PATH`**: install the `claude` CLI or set `OPENCODE_CLAUDE_CLI_PATH`.
66
+ - **`Claude Code is not logged in`**: run `claude auth login`.
67
+ - **`/connect` succeeds but requests fail**: restart OpenCode after changing plugin config or Claude login state.
68
+
69
+ ## License
70
+
71
+ MIT
@@ -0,0 +1,21 @@
1
+ type ClaudeCliAuth = {
2
+ type: "oauth";
3
+ refresh: string;
4
+ access?: string;
5
+ expires: number;
6
+ };
7
+ export declare function debugLog(message: string, extra?: unknown): void;
8
+ export declare function createClaudeCliCredentials(): {
9
+ type: "success";
10
+ refresh: string;
11
+ access: string;
12
+ expires: number;
13
+ };
14
+ export declare function getClaudeAuthStatus(): Promise<{
15
+ loggedIn: boolean;
16
+ raw?: unknown;
17
+ }>;
18
+ export declare function ensureClaudeCliLoggedIn(): Promise<void>;
19
+ export declare function isClaudeCliAuth(value: unknown): value is ClaudeCliAuth;
20
+ export declare function handleClaudeCliFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
21
+ export {};
@@ -0,0 +1,775 @@
1
+ import { spawn } from "node:child_process";
2
+ import { appendFileSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { dirname, join } from "node:path";
4
+ const AUTH_MARKER = "__claude_cli_local__";
5
+ function defaultStateDir() {
6
+ const home = trim(process.env.HOME);
7
+ if (trim(process.env.XDG_STATE_HOME))
8
+ return join(trim(process.env.XDG_STATE_HOME), "opencode-claude-cli");
9
+ if (process.platform === "darwin" && home)
10
+ return join(home, "Library", "Application Support", "opencode-claude-cli");
11
+ if (home)
12
+ return join(home, ".local", "state", "opencode-claude-cli");
13
+ return "/tmp/opencode-claude-cli";
14
+ }
15
+ const STATE_DIR = defaultStateDir();
16
+ const LOG_PATH = process.env.OPENCODE_CLAUDE_CLI_LOG_PATH || join(STATE_DIR, "plugin.log");
17
+ const SESSION_MAP_PATH = process.env.OPENCODE_CLAUDE_CLI_SESSION_MAP_PATH || join(STATE_DIR, "sessions.json");
18
+ const DEFAULT_ALLOWED_TOOLS = [
19
+ "Read",
20
+ "Edit",
21
+ "Write",
22
+ "Bash",
23
+ "Grep",
24
+ "Glob",
25
+ "TodoWrite",
26
+ "WebFetch",
27
+ "WebSearch",
28
+ ];
29
+ function trim(value) {
30
+ return typeof value === "string" ? value.trim() : "";
31
+ }
32
+ export function debugLog(message, extra) {
33
+ try {
34
+ mkdirSync(dirname(LOG_PATH), { recursive: true });
35
+ const line = `[${new Date().toISOString()}] ${message}${typeof extra === "undefined" ? "" : ` ${safeJson(extra)}`}\n`;
36
+ appendFileSync(LOG_PATH, line, "utf8");
37
+ }
38
+ catch { }
39
+ }
40
+ function safeJson(value) {
41
+ try {
42
+ return JSON.stringify(value);
43
+ }
44
+ catch {
45
+ return String(value);
46
+ }
47
+ }
48
+ function formatClaudeCliError(error) {
49
+ if (error instanceof Error && "code" in error && error.code === "ENOENT") {
50
+ return new Error("Claude Code was not found on PATH. Install the `claude` CLI or set OPENCODE_CLAUDE_CLI_PATH.");
51
+ }
52
+ if (error instanceof Error)
53
+ return error;
54
+ return new Error(String(error));
55
+ }
56
+ export function createClaudeCliCredentials() {
57
+ return {
58
+ type: "success",
59
+ refresh: AUTH_MARKER,
60
+ access: AUTH_MARKER,
61
+ expires: Date.now() + 365 * 24 * 60 * 60 * 1000,
62
+ };
63
+ }
64
+ export async function getClaudeAuthStatus() {
65
+ const command = getClaudePath();
66
+ return await new Promise((resolve, reject) => {
67
+ const child = spawn(command, ["auth", "status"], {
68
+ env: process.env,
69
+ stdio: ["ignore", "pipe", "pipe"],
70
+ });
71
+ let stdout = "";
72
+ let stderr = "";
73
+ child.stdout.on("data", (chunk) => {
74
+ stdout += chunk.toString();
75
+ });
76
+ child.stderr.on("data", (chunk) => {
77
+ stderr += chunk.toString();
78
+ });
79
+ child.once("error", (error) => reject(formatClaudeCliError(error)));
80
+ child.once("close", (code) => {
81
+ if (code !== 0) {
82
+ reject(new Error(stderr.trim() || stdout.trim() || `claude auth status exited with code ${code}`));
83
+ return;
84
+ }
85
+ try {
86
+ const parsed = JSON.parse(stdout);
87
+ resolve({
88
+ loggedIn: !!parsed?.loggedIn,
89
+ raw: parsed,
90
+ });
91
+ }
92
+ catch (error) {
93
+ reject(new Error(`Failed to parse claude auth status output: ${stdout.slice(0, 500)}\n${String(error)}`));
94
+ }
95
+ });
96
+ });
97
+ }
98
+ export async function ensureClaudeCliLoggedIn() {
99
+ const status = await getClaudeAuthStatus();
100
+ debugLog("claude.auth.status", status.raw);
101
+ if (!status.loggedIn) {
102
+ throw new Error("Claude Code is not logged in. Run `claude auth login` and try again.");
103
+ }
104
+ }
105
+ export function isClaudeCliAuth(value) {
106
+ if (!value || typeof value !== "object")
107
+ return false;
108
+ const auth = value;
109
+ return auth.type === "oauth" && auth.refresh === AUTH_MARKER;
110
+ }
111
+ function getClaudePath() {
112
+ return trim(process.env.OPENCODE_CLAUDE_CLI_PATH) || "claude";
113
+ }
114
+ function detectOpenCodePlanMode(request) {
115
+ const haystack = [
116
+ formatSystem(request.system),
117
+ formatMessages(request.messages),
118
+ ].join("\n\n").toLowerCase();
119
+ return haystack.includes("plan mode active")
120
+ || haystack.includes("you are in read-only phase")
121
+ || haystack.includes("strictly forbidden")
122
+ || haystack.includes("must not make edits");
123
+ }
124
+ function getPermissionArgs(request) {
125
+ const args = ["--dangerously-skip-permissions"];
126
+ if (detectOpenCodePlanMode(request)) {
127
+ args.push("--permission-mode", "plan");
128
+ }
129
+ const allowedTools = trim(process.env.OPENCODE_CLAUDE_CLI_ALLOWED_TOOLS) || DEFAULT_ALLOWED_TOOLS.join(",");
130
+ args.push("--allowedTools", allowedTools);
131
+ return args;
132
+ }
133
+ function flattenText(value) {
134
+ if (typeof value === "string")
135
+ return value;
136
+ if (Array.isArray(value))
137
+ return value.map(flattenText).filter(Boolean).join("\n");
138
+ if (!value || typeof value !== "object")
139
+ return "";
140
+ const block = value;
141
+ if (block.type === "text")
142
+ return trim(block.text);
143
+ if (block.type === "tool_result")
144
+ return flattenText(block.content);
145
+ if (block.type === "tool_use")
146
+ return `[tool_use ${trim(block.name) || "unknown"}]`;
147
+ if ("text" in block && typeof block.text === "string")
148
+ return block.text;
149
+ if ("content" in block)
150
+ return flattenText(block.content);
151
+ return "";
152
+ }
153
+ function formatSystem(system) {
154
+ if (typeof system === "string")
155
+ return system.trim();
156
+ if (!Array.isArray(system))
157
+ return "";
158
+ return system
159
+ .map((item) => (item?.type === "text" ? trim(item.text) : ""))
160
+ .filter(Boolean)
161
+ .join("\n\n");
162
+ }
163
+ function formatMessages(messages) {
164
+ if (!Array.isArray(messages))
165
+ return "";
166
+ return messages
167
+ .map((message) => {
168
+ const role = trim(message.role) || "user";
169
+ const content = typeof message.content === "string" ? message.content : flattenText(message.content);
170
+ return `${role.toUpperCase()}:\n${content.trim()}`.trim();
171
+ })
172
+ .filter(Boolean)
173
+ .join("\n\n");
174
+ }
175
+ function getLatestUserMessage(messages) {
176
+ if (!Array.isArray(messages))
177
+ return "";
178
+ for (let i = messages.length - 1; i >= 0; i--) {
179
+ const message = messages[i];
180
+ if (trim(message?.role) !== "user")
181
+ continue;
182
+ const content = typeof message.content === "string" ? message.content : flattenText(message.content);
183
+ if (content.trim())
184
+ return content.trim();
185
+ }
186
+ return "";
187
+ }
188
+ function buildPrompt(request, options) {
189
+ const parts = [
190
+ "You are running behind the OpenCode UI, but all execution must happen through Claude Code's own local CLI harness.",
191
+ "Work in the current working directory. Use Claude Code tools normally when needed.",
192
+ ];
193
+ const system = formatSystem(request.system);
194
+ if (system)
195
+ parts.push(`SYSTEM:\n${system}`);
196
+ if (options?.resumed) {
197
+ const latestUserMessage = getLatestUserMessage(request.messages);
198
+ if (latestUserMessage) {
199
+ parts.push(`LATEST USER MESSAGE:\n${latestUserMessage}`);
200
+ }
201
+ }
202
+ else {
203
+ const transcript = formatMessages(request.messages);
204
+ if (transcript)
205
+ parts.push(`CONVERSATION:\n${transcript}`);
206
+ }
207
+ if (Array.isArray(request.tools) && request.tools.length) {
208
+ const tools = request.tools.map((tool) => trim(tool.name)).filter(Boolean).join(", ");
209
+ if (tools)
210
+ parts.push(`OpenCode exposed these logical tools: ${tools}. Use Claude Code's closest built-in tools as needed.`);
211
+ }
212
+ parts.push("Return only the answer for the user unless the task itself requires file changes or command output.");
213
+ return parts.join("\n\n");
214
+ }
215
+ async function readBody(body) {
216
+ if (!body)
217
+ return "";
218
+ if (typeof body === "string")
219
+ return body;
220
+ if (body instanceof Uint8Array)
221
+ return new TextDecoder().decode(body);
222
+ if (body instanceof URLSearchParams)
223
+ return body.toString();
224
+ if (body instanceof ReadableStream) {
225
+ const reader = body.getReader();
226
+ const decoder = new TextDecoder();
227
+ let result = "";
228
+ while (true) {
229
+ const { done, value } = await reader.read();
230
+ if (done)
231
+ break;
232
+ if (value)
233
+ result += decoder.decode(value, { stream: true });
234
+ }
235
+ result += decoder.decode();
236
+ return result;
237
+ }
238
+ return String(body);
239
+ }
240
+ async function parseRequest(input, init) {
241
+ const bodyText = typeof init?.body !== "undefined"
242
+ ? await readBody(init.body)
243
+ : input instanceof Request
244
+ ? await input.clone().text()
245
+ : "";
246
+ return bodyText ? JSON.parse(bodyText) : {};
247
+ }
248
+ function inferHeaders(init) {
249
+ return new Headers(init?.headers);
250
+ }
251
+ function inferCwd(init) {
252
+ const headers = inferHeaders(init);
253
+ return headers.get("x-opencode-cwd") || process.cwd();
254
+ }
255
+ function inferOpencodeSessionID(init) {
256
+ const headers = inferHeaders(init);
257
+ return trim(headers.get("x-opencode-session-id"));
258
+ }
259
+ function inferModel(request) {
260
+ return trim(request.model) || trim(process.env.OPENCODE_CLAUDE_CLI_MODEL) || "claude-sonnet-4-6";
261
+ }
262
+ function loadSessionMap() {
263
+ try {
264
+ return JSON.parse(readFileSync(SESSION_MAP_PATH, "utf8"));
265
+ }
266
+ catch {
267
+ return {};
268
+ }
269
+ }
270
+ function saveSessionMap(map) {
271
+ try {
272
+ mkdirSync(dirname(SESSION_MAP_PATH), { recursive: true });
273
+ writeFileSync(SESSION_MAP_PATH, JSON.stringify(map, null, 2), "utf8");
274
+ }
275
+ catch (error) {
276
+ debugLog("sessionMap:save:error", { message: error instanceof Error ? error.message : String(error) });
277
+ }
278
+ }
279
+ function shouldUseSessionBinding(request) {
280
+ const system = formatSystem(request.system).toLowerCase();
281
+ if (!system)
282
+ return true;
283
+ if (system.includes("you are a title generator"))
284
+ return false;
285
+ if (system.includes("generate a brief title"))
286
+ return false;
287
+ return true;
288
+ }
289
+ function getBoundClaudeSessionID(opencodeSessionID) {
290
+ if (!opencodeSessionID)
291
+ return "";
292
+ return trim(loadSessionMap()[opencodeSessionID]);
293
+ }
294
+ function bindClaudeSessionID(opencodeSessionID, claudeSessionID) {
295
+ const cleanOpencode = trim(opencodeSessionID);
296
+ const cleanClaude = trim(claudeSessionID);
297
+ if (!cleanOpencode || !cleanClaude)
298
+ return;
299
+ const map = loadSessionMap();
300
+ if (map[cleanOpencode] === cleanClaude)
301
+ return;
302
+ map[cleanOpencode] = cleanClaude;
303
+ saveSessionMap(map);
304
+ debugLog("sessionMap:bind", { opencodeSessionID: cleanOpencode, claudeSessionID: cleanClaude });
305
+ }
306
+ function makeArgs(request, options) {
307
+ const outputFormat = request.stream ? "stream-json" : "json";
308
+ const resumeSessionID = trim(options?.resumeSessionID);
309
+ const args = ["-p", buildPrompt(request, { resumed: !!resumeSessionID }), "--output-format", outputFormat];
310
+ if (resumeSessionID)
311
+ args.push("--resume", resumeSessionID);
312
+ if (request.stream)
313
+ args.push("--verbose", "--include-partial-messages");
314
+ args.push("--model", inferModel(request));
315
+ const maxTurns = trim(process.env.OPENCODE_CLAUDE_CLI_MAX_TURNS);
316
+ if (maxTurns)
317
+ args.push("--max-turns", maxTurns);
318
+ const appendSystemPrompt = trim(process.env.OPENCODE_CLAUDE_CLI_APPEND_SYSTEM_PROMPT);
319
+ if (appendSystemPrompt)
320
+ args.push("--append-system-prompt", appendSystemPrompt);
321
+ args.push(...getPermissionArgs(request));
322
+ return args;
323
+ }
324
+ function extractTextFromEvents(events) {
325
+ for (let i = events.length - 1; i >= 0; i--) {
326
+ const event = events[i];
327
+ if (typeof event.result === "string" && event.result.trim())
328
+ return event.result;
329
+ const messageText = event.message?.content
330
+ ?.filter((part) => part?.type === "text" && typeof part.text === "string")
331
+ .map((part) => part.text ?? "")
332
+ .join("\n")
333
+ .trim();
334
+ if (messageText)
335
+ return messageText;
336
+ const contentText = event.content
337
+ ?.filter((part) => part?.type === "text" && typeof part.text === "string")
338
+ .map((part) => part.text ?? "")
339
+ .join("\n")
340
+ .trim();
341
+ if (contentText)
342
+ return contentText;
343
+ if (typeof event.text === "string" && event.text.trim())
344
+ return event.text;
345
+ }
346
+ return "";
347
+ }
348
+ function normalizeClaudeOutput(parsed) {
349
+ if (Array.isArray(parsed)) {
350
+ const events = parsed;
351
+ const resultEvent = [...events].reverse().find((event) => typeof event.result === "string") ?? events[events.length - 1];
352
+ return {
353
+ result: extractTextFromEvents(events),
354
+ session_id: resultEvent?.session_id,
355
+ usage: resultEvent?.usage,
356
+ };
357
+ }
358
+ if (parsed && typeof parsed === "object") {
359
+ return parsed;
360
+ }
361
+ return { result: typeof parsed === "string" ? parsed : String(parsed ?? "") };
362
+ }
363
+ function parseJsonLines(stdout) {
364
+ return stdout
365
+ .split(/\r?\n/)
366
+ .map((line) => line.trim())
367
+ .filter(Boolean)
368
+ .map((line) => JSON.parse(line));
369
+ }
370
+ async function runClaude(request, cwd, options) {
371
+ const command = getClaudePath();
372
+ const args = makeArgs(request, options);
373
+ debugLog("runClaude:start", { command, args, cwd, model: inferModel(request) });
374
+ return await new Promise((resolve, reject) => {
375
+ const child = spawn(command, args, {
376
+ cwd,
377
+ env: process.env,
378
+ stdio: ["ignore", "pipe", "pipe"],
379
+ });
380
+ let stdout = "";
381
+ let stderr = "";
382
+ child.stdout.on("data", (chunk) => {
383
+ stdout += chunk.toString();
384
+ });
385
+ child.stderr.on("data", (chunk) => {
386
+ stderr += chunk.toString();
387
+ });
388
+ child.once("error", (error) => {
389
+ const normalized = formatClaudeCliError(error);
390
+ debugLog("runClaude:error", { message: normalized.message });
391
+ reject(normalized);
392
+ });
393
+ child.once("close", (code) => {
394
+ debugLog("runClaude:close", { code, stderr: stderr.slice(0, 1000), stdout: stdout.slice(0, 1000) });
395
+ if (code !== 0) {
396
+ reject(new Error(stderr.trim() || stdout.trim() || `claude exited with code ${code}`));
397
+ return;
398
+ }
399
+ try {
400
+ resolve(normalizeClaudeOutput(JSON.parse(stdout)));
401
+ }
402
+ catch (error) {
403
+ reject(new Error(`Failed to parse Claude Code output as JSON: ${stdout.slice(0, 1000)}\n${String(error)}`));
404
+ }
405
+ });
406
+ });
407
+ }
408
+ function makeMessageId(sessionId) {
409
+ const suffix = trim(sessionId) || crypto.randomUUID();
410
+ return `msg_${suffix.replace(/[^a-zA-Z0-9_-]/g, "")}`;
411
+ }
412
+ function effectiveInputTokens(usage) {
413
+ return (usage?.input_tokens ?? 0)
414
+ + (usage?.cache_read_input_tokens ?? 0)
415
+ + (usage?.cache_creation_input_tokens ?? 0);
416
+ }
417
+ function usage(result) {
418
+ return {
419
+ input_tokens: effectiveInputTokens(result.usage),
420
+ output_tokens: result.usage?.output_tokens ?? 0,
421
+ cache_read_input_tokens: result.usage?.cache_read_input_tokens ?? 0,
422
+ cache_creation_input_tokens: result.usage?.cache_creation_input_tokens ?? 0,
423
+ };
424
+ }
425
+ function sse(event, data) {
426
+ return `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;
427
+ }
428
+ function jsonResponse(result, model) {
429
+ return new Response(JSON.stringify({
430
+ id: makeMessageId(result.session_id),
431
+ type: "message",
432
+ role: "assistant",
433
+ model,
434
+ content: [{ type: "text", text: result.result ?? "" }],
435
+ stop_reason: "end_turn",
436
+ stop_sequence: null,
437
+ usage: usage(result),
438
+ }), {
439
+ status: 200,
440
+ headers: { "content-type": "application/json" },
441
+ });
442
+ }
443
+ function parseMaybeJson(value) {
444
+ try {
445
+ return JSON.parse(value);
446
+ }
447
+ catch {
448
+ return undefined;
449
+ }
450
+ }
451
+ function shortPath(value) {
452
+ const cwd = process.cwd().replace(/\\/g, "/");
453
+ const normalized = value.replace(/\\/g, "/");
454
+ if (normalized.startsWith(`${cwd}/`))
455
+ return normalized.slice(cwd.length + 1);
456
+ return normalized;
457
+ }
458
+ function shouldDisplayToolUse(name) {
459
+ const toolName = trim(name);
460
+ return toolName !== "ExitPlanMode";
461
+ }
462
+ function formatToolUseText(name, input) {
463
+ const toolName = trim(name) || "unknown";
464
+ if (!input || typeof input !== "object")
465
+ return `✱ ${toolName}`;
466
+ const record = input;
467
+ const filePath = trim(record.file_path) || trim(record.filePath);
468
+ if (filePath)
469
+ return `✱ ${toolName} ${shortPath(filePath)}`;
470
+ const command = trim(record.command);
471
+ if (command)
472
+ return `✱ ${toolName} ${command}`;
473
+ const description = trim(record.description);
474
+ if (description)
475
+ return `✱ ${toolName} ${description}`;
476
+ return `✱ ${toolName}`;
477
+ }
478
+ function createSSEHeaders() {
479
+ return {
480
+ "content-type": "text/event-stream",
481
+ "cache-control": "no-cache",
482
+ connection: "keep-alive",
483
+ };
484
+ }
485
+ function liveStreamResponse(request, cwd, model, options) {
486
+ const command = getClaudePath();
487
+ const args = makeArgs(request, { resumeSessionID: options?.resumeSessionID });
488
+ debugLog("runClaude:stream:start", { command, args, cwd, model });
489
+ const encoder = new TextEncoder();
490
+ const body = new ReadableStream({
491
+ start(controller) {
492
+ const child = spawn(command, args, {
493
+ cwd,
494
+ env: process.env,
495
+ stdio: ["ignore", "pipe", "pipe"],
496
+ });
497
+ let buffer = "";
498
+ let stderr = "";
499
+ let messageStarted = false;
500
+ let blockIndex = 0;
501
+ let seenToolUse = new Set();
502
+ let lastUsage;
503
+ let sessionId;
504
+ let sawOutput = false;
505
+ let sawStreamEvent = false;
506
+ const textBlockMap = new Map();
507
+ const toolUseMap = new Map();
508
+ const enqueue = (chunk) => controller.enqueue(encoder.encode(chunk));
509
+ const ensureMessageStart = () => {
510
+ if (messageStarted)
511
+ return;
512
+ messageStarted = true;
513
+ enqueue(sse("message_start", {
514
+ type: "message_start",
515
+ message: {
516
+ id: makeMessageId(sessionId),
517
+ type: "message",
518
+ role: "assistant",
519
+ model,
520
+ content: [],
521
+ stop_reason: null,
522
+ stop_sequence: null,
523
+ usage: { input_tokens: effectiveInputTokens(lastUsage), output_tokens: 0 },
524
+ },
525
+ }));
526
+ };
527
+ const emitTextBlock = (text) => {
528
+ if (!text.trim())
529
+ return;
530
+ sawOutput = true;
531
+ ensureMessageStart();
532
+ enqueue(sse("content_block_start", {
533
+ type: "content_block_start",
534
+ index: blockIndex,
535
+ content_block: { type: "text", text: "" },
536
+ }));
537
+ enqueue(sse("content_block_delta", {
538
+ type: "content_block_delta",
539
+ index: blockIndex,
540
+ delta: { type: "text_delta", text },
541
+ }));
542
+ enqueue(sse("content_block_stop", { type: "content_block_stop", index: blockIndex }));
543
+ blockIndex += 1;
544
+ };
545
+ const processEvent = (event) => {
546
+ if (event.session_id) {
547
+ sessionId = event.session_id;
548
+ if (options?.shouldBindSession && options?.opencodeSessionID) {
549
+ bindClaudeSessionID(options.opencodeSessionID, event.session_id);
550
+ }
551
+ }
552
+ if (event.usage)
553
+ lastUsage = event.usage;
554
+ if (event.type === "stream_event" && event.event) {
555
+ sawStreamEvent = true;
556
+ const inner = event.event;
557
+ if (inner.message?.usage)
558
+ lastUsage = inner.message.usage;
559
+ if (inner.usage)
560
+ lastUsage = inner.usage;
561
+ if (inner.type === "message_start") {
562
+ ensureMessageStart();
563
+ return;
564
+ }
565
+ if (inner.type === "content_block_start") {
566
+ const sourceIndex = inner.index ?? -1;
567
+ const block = inner.content_block;
568
+ if (block?.type === "text") {
569
+ ensureMessageStart();
570
+ const targetIndex = blockIndex++;
571
+ textBlockMap.set(sourceIndex, targetIndex);
572
+ enqueue(sse("content_block_start", {
573
+ type: "content_block_start",
574
+ index: targetIndex,
575
+ content_block: { type: "text", text: "" },
576
+ }));
577
+ return;
578
+ }
579
+ if (block?.type === "tool_use") {
580
+ toolUseMap.set(sourceIndex, {
581
+ id: block.id,
582
+ name: block.name,
583
+ json: "",
584
+ input: block.input,
585
+ });
586
+ }
587
+ return;
588
+ }
589
+ if (inner.type === "content_block_delta") {
590
+ const sourceIndex = inner.index ?? -1;
591
+ const delta = inner.delta;
592
+ const textIndex = textBlockMap.get(sourceIndex);
593
+ if (delta?.type === "text_delta" && typeof delta.text === "string" && typeof textIndex === "number") {
594
+ sawOutput = true;
595
+ enqueue(sse("content_block_delta", {
596
+ type: "content_block_delta",
597
+ index: textIndex,
598
+ delta: { type: "text_delta", text: delta.text },
599
+ }));
600
+ return;
601
+ }
602
+ if (delta?.type === "input_json_delta") {
603
+ const tool = toolUseMap.get(sourceIndex);
604
+ if (tool)
605
+ tool.json += delta.partial_json ?? "";
606
+ }
607
+ return;
608
+ }
609
+ if (inner.type === "content_block_stop") {
610
+ const sourceIndex = inner.index ?? -1;
611
+ const textIndex = textBlockMap.get(sourceIndex);
612
+ if (typeof textIndex === "number") {
613
+ enqueue(sse("content_block_stop", { type: "content_block_stop", index: textIndex }));
614
+ textBlockMap.delete(sourceIndex);
615
+ return;
616
+ }
617
+ const tool = toolUseMap.get(sourceIndex);
618
+ if (tool) {
619
+ const parsed = tool.input ?? parseMaybeJson(tool.json);
620
+ const key = tool.id || `${tool.name}:${safeJson(parsed)}`;
621
+ if (!seenToolUse.has(key)) {
622
+ seenToolUse.add(key);
623
+ if (shouldDisplayToolUse(tool.name)) {
624
+ emitTextBlock(`${formatToolUseText(tool.name, parsed)}\n`);
625
+ }
626
+ }
627
+ toolUseMap.delete(sourceIndex);
628
+ }
629
+ return;
630
+ }
631
+ if (inner.type === "message_delta") {
632
+ return;
633
+ }
634
+ if (inner.type === "message_stop") {
635
+ return;
636
+ }
637
+ }
638
+ if (event.type === "assistant") {
639
+ for (const part of event.message?.content || []) {
640
+ if (part?.type === "tool_use") {
641
+ const key = part.id || `${part.name}:${safeJson(part.input)}`;
642
+ if (seenToolUse.has(key))
643
+ continue;
644
+ seenToolUse.add(key);
645
+ if (shouldDisplayToolUse(part.name)) {
646
+ emitTextBlock(`${formatToolUseText(part.name, part.input)}\n`);
647
+ }
648
+ continue;
649
+ }
650
+ if (sawStreamEvent)
651
+ continue;
652
+ if (part?.type === "text" && typeof part.text === "string" && part.text) {
653
+ emitTextBlock(part.text);
654
+ }
655
+ }
656
+ return;
657
+ }
658
+ if (event.type === "result") {
659
+ ensureMessageStart();
660
+ if (!sawOutput && typeof event.result === "string") {
661
+ emitTextBlock(event.result);
662
+ }
663
+ for (const [, textIndex] of textBlockMap) {
664
+ enqueue(sse("content_block_stop", { type: "content_block_stop", index: textIndex }));
665
+ }
666
+ textBlockMap.clear();
667
+ enqueue(sse("message_delta", {
668
+ type: "message_delta",
669
+ delta: { stop_reason: "end_turn", stop_sequence: null },
670
+ usage: { output_tokens: event.usage?.output_tokens ?? 0 },
671
+ }));
672
+ enqueue(sse("message_stop", { type: "message_stop" }));
673
+ controller.close();
674
+ }
675
+ };
676
+ child.stdout.on("data", (chunk) => {
677
+ buffer += chunk.toString();
678
+ const lines = buffer.split(/\r?\n/);
679
+ buffer = lines.pop() ?? "";
680
+ for (const line of lines) {
681
+ const trimmed = line.trim();
682
+ if (!trimmed)
683
+ continue;
684
+ try {
685
+ processEvent(JSON.parse(trimmed));
686
+ }
687
+ catch (error) {
688
+ debugLog("runClaude:stream:parse_error", { line: trimmed.slice(0, 500), error: String(error) });
689
+ }
690
+ }
691
+ });
692
+ child.stderr.on("data", (chunk) => {
693
+ stderr += chunk.toString();
694
+ });
695
+ child.once("error", (error) => {
696
+ const normalized = formatClaudeCliError(error);
697
+ debugLog("runClaude:stream:error", { message: normalized.message });
698
+ controller.error(normalized);
699
+ });
700
+ child.once("close", (code) => {
701
+ if (buffer.trim()) {
702
+ try {
703
+ processEvent(JSON.parse(buffer.trim()));
704
+ }
705
+ catch (error) {
706
+ debugLog("runClaude:stream:trailing_parse_error", { line: buffer.trim().slice(0, 500), error: String(error) });
707
+ }
708
+ }
709
+ debugLog("runClaude:stream:close", { code, stderr: stderr.slice(0, 1000) });
710
+ if (code !== 0) {
711
+ controller.error(new Error(stderr.trim() || `claude exited with code ${code}`));
712
+ return;
713
+ }
714
+ if (!messageStarted) {
715
+ ensureMessageStart();
716
+ enqueue(sse("message_delta", {
717
+ type: "message_delta",
718
+ delta: { stop_reason: "end_turn", stop_sequence: null },
719
+ usage: { output_tokens: lastUsage?.output_tokens ?? 0 },
720
+ }));
721
+ enqueue(sse("message_stop", { type: "message_stop" }));
722
+ controller.close();
723
+ }
724
+ });
725
+ },
726
+ });
727
+ return new Response(body, {
728
+ status: 200,
729
+ headers: createSSEHeaders(),
730
+ });
731
+ }
732
+ function errorResponse(error) {
733
+ const message = error instanceof Error ? error.message : String(error);
734
+ return new Response(JSON.stringify({
735
+ type: "error",
736
+ error: {
737
+ type: "api_error",
738
+ message,
739
+ },
740
+ }), {
741
+ status: 500,
742
+ headers: { "content-type": "application/json" },
743
+ });
744
+ }
745
+ export async function handleClaudeCliFetch(input, init) {
746
+ try {
747
+ await ensureClaudeCliLoggedIn();
748
+ const request = await parseRequest(input, init);
749
+ const cwd = inferCwd(init);
750
+ const model = inferModel(request);
751
+ const opencodeSessionID = inferOpencodeSessionID(init);
752
+ const shouldBindSession = shouldUseSessionBinding(request) && !!opencodeSessionID;
753
+ const resumeSessionID = shouldBindSession ? getBoundClaudeSessionID(opencodeSessionID) : "";
754
+ debugLog("handleClaudeCliFetch", {
755
+ cwd,
756
+ model,
757
+ stream: !!request.stream,
758
+ opencodeSessionID,
759
+ shouldBindSession,
760
+ resumeSessionID,
761
+ });
762
+ if (request.stream) {
763
+ return liveStreamResponse(request, cwd, model, { opencodeSessionID, resumeSessionID, shouldBindSession });
764
+ }
765
+ const result = await runClaude(request, cwd, { resumeSessionID });
766
+ if (shouldBindSession)
767
+ bindClaudeSessionID(opencodeSessionID, result.session_id);
768
+ return jsonResponse(result, model);
769
+ }
770
+ catch (error) {
771
+ debugLog("handleClaudeCliFetch:error", { message: error instanceof Error ? error.message : String(error) });
772
+ return errorResponse(error);
773
+ }
774
+ }
775
+ //# sourceMappingURL=claude-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-cli.js","sourceRoot":"","sources":["../src/claude-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Plugin, PluginModule } from "@opencode-ai/plugin";
2
+ export declare const server: Plugin;
3
+ declare const plugin: PluginModule;
4
+ export default plugin;
package/dist/index.js ADDED
@@ -0,0 +1,186 @@
1
+ import { createClaudeCliCredentials, debugLog, ensureClaudeCliLoggedIn, handleClaudeCliFetch, isClaudeCliAuth, } from "./claude-cli.js";
2
+ const CLAUDE_CLI_PROVIDER_ID = "claude-code-cli";
3
+ const CLAUDE_CLI_PROVIDER_NAME = "Claude Code";
4
+ function createModel(id, name) {
5
+ return {
6
+ id,
7
+ providerID: CLAUDE_CLI_PROVIDER_ID,
8
+ api: {
9
+ id: "anthropic",
10
+ url: "https://claude.ai/code",
11
+ npm: "@ai-sdk/anthropic",
12
+ },
13
+ name,
14
+ family: "claude",
15
+ capabilities: {
16
+ temperature: true,
17
+ reasoning: true,
18
+ attachment: false,
19
+ toolcall: true,
20
+ input: {
21
+ text: true,
22
+ audio: false,
23
+ image: true,
24
+ video: false,
25
+ pdf: true,
26
+ },
27
+ output: {
28
+ text: true,
29
+ audio: false,
30
+ image: false,
31
+ video: false,
32
+ pdf: false,
33
+ },
34
+ interleaved: false,
35
+ },
36
+ cost: {
37
+ input: 0,
38
+ output: 0,
39
+ cache: {
40
+ read: 0,
41
+ write: 0,
42
+ },
43
+ },
44
+ limit: {
45
+ context: 200_000,
46
+ output: 8_192,
47
+ },
48
+ status: "active",
49
+ options: {},
50
+ headers: {},
51
+ release_date: "2026-04-09",
52
+ };
53
+ }
54
+ function createModelMap() {
55
+ return {
56
+ "claude-opus-4-6": createModel("claude-opus-4-6", "Claude Opus 4.6"),
57
+ "claude-sonnet-4-6": createModel("claude-sonnet-4-6", "Claude Sonnet 4.6"),
58
+ "claude-haiku-4-5": createModel("claude-haiku-4-5", "Claude Haiku 4.5"),
59
+ opus: createModel("opus", "Claude Opus (latest alias)"),
60
+ sonnet: createModel("sonnet", "Claude Sonnet (latest alias)"),
61
+ haiku: createModel("haiku", "Claude Haiku (latest alias)"),
62
+ };
63
+ }
64
+ function applyProviderConfig(config) {
65
+ config.provider ||= {};
66
+ config.provider[CLAUDE_CLI_PROVIDER_ID] ||= {};
67
+ const provider = config.provider[CLAUDE_CLI_PROVIDER_ID];
68
+ provider.name ||= CLAUDE_CLI_PROVIDER_NAME;
69
+ provider.npm ||= "@ai-sdk/anthropic";
70
+ provider.options ||= {};
71
+ provider.models = {
72
+ ...createModelMap(),
73
+ ...(provider.models || {}),
74
+ };
75
+ }
76
+ export const server = async (input) => {
77
+ debugLog("plugin:server:init", {
78
+ directory: input.directory,
79
+ worktree: input.worktree,
80
+ serverUrl: String(input.serverUrl),
81
+ });
82
+ return {
83
+ config: async (config) => {
84
+ applyProviderConfig(config);
85
+ debugLog("hook:config", {
86
+ providerID: CLAUDE_CLI_PROVIDER_ID,
87
+ modelCount: Object.keys(config.provider?.[CLAUDE_CLI_PROVIDER_ID]?.models || {}).length,
88
+ });
89
+ },
90
+ "chat.headers": async (input, output) => {
91
+ if (input?.sessionID) {
92
+ output.headers["x-opencode-session-id"] = input.sessionID;
93
+ }
94
+ if (input?.message?.id) {
95
+ output.headers["x-opencode-message-id"] = input.message.id;
96
+ }
97
+ },
98
+ "experimental.chat.system.transform": async (input, output) => {
99
+ debugLog("hook:experimental.chat.system.transform", {
100
+ providerID: input?.model?.providerID,
101
+ modelID: input?.model?.id,
102
+ });
103
+ const prefix = "You are Claude Code, Anthropic's official CLI for Claude.";
104
+ if (input.model?.providerID === CLAUDE_CLI_PROVIDER_ID) {
105
+ output.system.unshift(prefix);
106
+ if (output.system[1]) {
107
+ output.system[1] = `${prefix}\n\n${output.system[1]}`;
108
+ }
109
+ }
110
+ },
111
+ provider: {
112
+ id: CLAUDE_CLI_PROVIDER_ID,
113
+ models: async () => createModelMap(),
114
+ },
115
+ auth: {
116
+ provider: CLAUDE_CLI_PROVIDER_ID,
117
+ loader: (async (getAuth, provider) => {
118
+ const auth = await getAuth().catch(() => undefined);
119
+ const modelEntries = provider?.models && typeof provider.models === "object"
120
+ ? Object.values(provider.models)
121
+ : [];
122
+ debugLog("auth.loader", {
123
+ auth: isClaudeCliAuth(auth) ? "claude-cli" : typeof auth,
124
+ providerID: provider?.id,
125
+ providerName: provider?.name,
126
+ hasProvider: !!provider,
127
+ modelCount: modelEntries.length,
128
+ });
129
+ if (!isClaudeCliAuth(auth))
130
+ return {};
131
+ debugLog("auth.loader:activated", {
132
+ providerID: provider?.id,
133
+ modelCount: modelEntries.length,
134
+ });
135
+ for (const model of modelEntries) {
136
+ model.cost = {
137
+ input: 0,
138
+ output: 0,
139
+ cache: {
140
+ read: 0,
141
+ write: 0,
142
+ },
143
+ };
144
+ }
145
+ return {
146
+ apiKey: "",
147
+ async fetch(input, init) {
148
+ debugLog("auth.fetch:intercept", {
149
+ providerID: provider?.id,
150
+ });
151
+ return handleClaudeCliFetch(input, init);
152
+ },
153
+ };
154
+ }),
155
+ methods: [
156
+ {
157
+ label: CLAUDE_CLI_PROVIDER_NAME,
158
+ type: "oauth",
159
+ authorize: async () => {
160
+ debugLog("auth.method.authorize");
161
+ await ensureClaudeCliLoggedIn();
162
+ return {
163
+ url: "https://claude.ai/code",
164
+ instructions: "Uses your local Claude Code login. No authorization code is needed here. If Claude Code is already logged in, press enter to activate. Otherwise run: claude auth login",
165
+ method: "auto",
166
+ callback: async () => {
167
+ debugLog("auth.method.callback");
168
+ await ensureClaudeCliLoggedIn();
169
+ return {
170
+ ...createClaudeCliCredentials(),
171
+ provider: CLAUDE_CLI_PROVIDER_ID,
172
+ };
173
+ },
174
+ };
175
+ },
176
+ },
177
+ ],
178
+ },
179
+ };
180
+ };
181
+ const plugin = {
182
+ id: "opencode-claude-cli",
183
+ server,
184
+ };
185
+ export default plugin;
186
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,0BAA0B,EAC1B,QAAQ,EACR,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,sBAAsB,GAAG,iBAAiB,CAAC;AACjD,MAAM,wBAAwB,GAAG,aAAa,CAAC;AAE/C,SAAS,WAAW,CAAC,EAAU,EAAE,IAAY;IAC3C,OAAO;QACL,EAAE;QACF,UAAU,EAAE,sBAAsB;QAClC,GAAG,EAAE;YACH,EAAE,EAAE,WAAW;YACf,GAAG,EAAE,wBAAwB;YAC7B,GAAG,EAAE,mBAAmB;SACzB;QACD,IAAI;QACJ,MAAM,EAAE,QAAQ;QAChB,YAAY,EAAE;YACZ,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,KAAK;YACjB,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,IAAI;gBACX,KAAK,EAAE,KAAK;gBACZ,GAAG,EAAE,IAAI;aACV;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,IAAI;gBACV,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,KAAK;gBACZ,GAAG,EAAE,KAAK;aACX;YACD,WAAW,EAAE,KAAK;SACnB;QACD,IAAI,EAAE;YACJ,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,KAAK,EAAE;gBACL,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,CAAC;aACT;SACF;QACD,KAAK,EAAE;YACL,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,KAAK;SACd;QACD,MAAM,EAAE,QAAiB;QACzB,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,YAAY;KAC3B,CAAC;AACJ,CAAC;AAED,SAAS,cAAc;IACrB,OAAO;QACL,iBAAiB,EAAE,WAAW,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;QACpE,mBAAmB,EAAE,WAAW,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;QAC1E,kBAAkB,EAAE,WAAW,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;QACvE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,4BAA4B,CAAC;QACvD,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,8BAA8B,CAAC;QAC7D,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,6BAA6B,CAAC;KAC3D,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,MAAW;IACtC,MAAM,CAAC,QAAQ,KAAK,EAAE,CAAC;IACvB,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;IAE/C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;IACzD,QAAQ,CAAC,IAAI,KAAK,wBAAwB,CAAC;IAC3C,QAAQ,CAAC,GAAG,KAAK,mBAAmB,CAAC;IACrC,QAAQ,CAAC,OAAO,KAAK,EAAE,CAAC;IACxB,QAAQ,CAAC,MAAM,GAAG;QAChB,GAAG,cAAc,EAAE;QACnB,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,CAAC;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,MAAM,GAAW,KAAK,EAAE,KAAkB,EAAE,EAAE;IACzD,QAAQ,CAAC,oBAAoB,EAAE;QAC7B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;KACnC,CAAC,CAAC;IAEH,OAAO;QACL,MAAM,EAAE,KAAK,EAAE,MAAW,EAAE,EAAE;YAC5B,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAC5B,QAAQ,CAAC,aAAa,EAAE;gBACtB,UAAU,EAAE,sBAAsB;gBAClC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,sBAAsB,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM;aACxF,CAAC,CAAC;QACL,CAAC;QACD,cAAc,EAAE,KAAK,EAAE,KAAU,EAAE,MAAW,EAAE,EAAE;YAChD,IAAI,KAAK,EAAE,SAAS,EAAE,CAAC;gBACrB,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;YAC5D,CAAC;YACD,IAAI,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;gBACvB,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7D,CAAC;QACH,CAAC;QACD,oCAAoC,EAAE,KAAK,EAAE,KAAU,EAAE,MAAW,EAAE,EAAE;YACtE,QAAQ,CAAC,yCAAyC,EAAE;gBAClD,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU;gBACpC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;aAC1B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,2DAA2D,CAAC;YAC3E,IAAI,KAAK,CAAC,KAAK,EAAE,UAAU,KAAK,sBAAsB,EAAE,CAAC;gBACvD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxD,CAAC;YACH,CAAC;QACH,CAAC;QACD,QAAQ,EAAE;YACR,EAAE,EAAE,sBAAsB;YAC1B,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,cAAc,EAAE;SAC9B;QACR,IAAI,EAAE;YACJ,QAAQ,EAAE,sBAAsB;YAChC,MAAM,EAAE,CAAC,KAAK,EAAE,OAA+B,EAAE,QAAa,EAAE,EAAE;gBAChE,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;gBACpD,MAAM,YAAY,GAAG,QAAQ,EAAE,MAAM,IAAI,OAAO,QAAQ,CAAC,MAAM,KAAK,QAAQ;oBAC1E,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAChC,CAAC,CAAC,EAAE,CAAC;gBAEP,QAAQ,CAAC,aAAa,EAAE;oBACtB,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,IAAI;oBACxD,UAAU,EAAE,QAAQ,EAAE,EAAE;oBACxB,YAAY,EAAE,QAAQ,EAAE,IAAI;oBAC5B,WAAW,EAAE,CAAC,CAAC,QAAQ;oBACvB,UAAU,EAAE,YAAY,CAAC,MAAM;iBAChC,CAAC,CAAC;gBACH,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;oBAAE,OAAO,EAAE,CAAC;gBAEtC,QAAQ,CAAC,uBAAuB,EAAE;oBAChC,UAAU,EAAE,QAAQ,EAAE,EAAE;oBACxB,UAAU,EAAE,YAAY,CAAC,MAAM;iBAChC,CAAC,CAAC;gBAEH,KAAK,MAAM,KAAK,IAAI,YAA0B,EAAE,CAAC;oBAC/C,KAAK,CAAC,IAAI,GAAG;wBACX,KAAK,EAAE,CAAC;wBACR,MAAM,EAAE,CAAC;wBACT,KAAK,EAAE;4BACL,IAAI,EAAE,CAAC;4BACP,KAAK,EAAE,CAAC;yBACT;qBACF,CAAC;gBACJ,CAAC;gBAED,OAAO;oBACL,MAAM,EAAE,EAAE;oBACV,KAAK,CAAC,KAAK,CAAC,KAAwB,EAAE,IAAkB;wBACtD,QAAQ,CAAC,sBAAsB,EAAE;4BAC/B,UAAU,EAAE,QAAQ,EAAE,EAAE;yBACzB,CAAC,CAAC;wBACH,OAAO,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;oBAC3C,CAAC;iBACF,CAAC;YACJ,CAAC,CAAQ;YACT,OAAO,EAAE;gBACP;oBACE,KAAK,EAAE,wBAAwB;oBAC/B,IAAI,EAAE,OAAO;oBACb,SAAS,EAAE,KAAK,IAAI,EAAE;wBACpB,QAAQ,CAAC,uBAAuB,CAAC,CAAC;wBAClC,MAAM,uBAAuB,EAAE,CAAC;wBAChC,OAAO;4BACL,GAAG,EAAE,wBAAwB;4BAC7B,YAAY,EAAE,yKAAyK;4BACvL,MAAM,EAAE,MAAe;4BACvB,QAAQ,EAAE,KAAK,IAAI,EAAE;gCACnB,QAAQ,CAAC,sBAAsB,CAAC,CAAC;gCACjC,MAAM,uBAAuB,EAAE,CAAC;gCAChC,OAAO;oCACL,GAAG,0BAA0B,EAAE;oCAC/B,QAAQ,EAAE,sBAAsB;iCACjC,CAAC;4BACJ,CAAC;yBACF,CAAC;oBACJ,CAAC;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,MAAM,GAAiB;IAC3B,EAAE,EAAE,qBAAqB;IACzB,MAAM;CACP,CAAC;AAEF,eAAe,MAAM,CAAC"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "opencode-claude-cli",
3
+ "version": "0.0.1",
4
+ "description": "OpenCode plugin that uses the local Claude Code CLI as a provider",
5
+ "keywords": [
6
+ "opencode",
7
+ "plugin",
8
+ "claude",
9
+ "claude-code",
10
+ "cli"
11
+ ],
12
+ "type": "module",
13
+ "main": "./dist/index.js",
14
+ "types": "./dist/index.d.ts",
15
+ "exports": {
16
+ ".": {
17
+ "types": "./dist/index.d.ts",
18
+ "default": "./dist/index.js"
19
+ }
20
+ },
21
+ "files": [
22
+ "dist"
23
+ ],
24
+ "license": "MIT",
25
+ "repository": {
26
+ "type": "git",
27
+ "url": "git+https://github.com/leohenon/opencode-claude-cli.git"
28
+ },
29
+ "homepage": "https://github.com/leohenon/opencode-claude-cli#readme",
30
+ "bugs": {
31
+ "url": "https://github.com/leohenon/opencode-claude-cli/issues"
32
+ },
33
+ "engines": {
34
+ "node": ">=18"
35
+ },
36
+ "scripts": {
37
+ "build": "tsc -p tsconfig.json",
38
+ "prepublishOnly": "npm run build"
39
+ },
40
+ "devDependencies": {
41
+ "@opencode-ai/plugin": "1.4.0",
42
+ "@types/node": "^22.13.9",
43
+ "typescript": "5.8.2"
44
+ }
45
+ }