@skelm/opencode 0.3.4 → 0.3.5
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/backend.d.ts.map +1 -1
- package/dist/backend.js +23 -10
- package/dist/backend.js.map +1 -1
- package/dist/client.d.ts +6 -14
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +117 -64
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/provider.js +4 -3
- package/dist/provider.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +3 -3
package/dist/backend.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAOV,YAAY,EACb,MAAM,aAAa,CAAA;AAOpB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAExD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,YAAY,CAgFnF;AAuCD;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,KAAK;gBACvC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE;IAChD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACxB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,YAAY,CA+Bf"}
|
package/dist/backend.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { formatSkillBlock } from '@skelm/core';
|
|
1
2
|
import { OpencodeClientWrapper } from './client.js';
|
|
2
3
|
import { buildPermissionAuditEntry, mapSkelmPermissionsToOpencode, validatePermissions, } from './permission-mapper.js';
|
|
3
4
|
/**
|
|
@@ -48,11 +49,12 @@ export function createOpencodeBackend(options) {
|
|
|
48
49
|
console.warn('Permission denied:', JSON.stringify(auditEntry, null, 2));
|
|
49
50
|
throw new Error(`Permission denied: ${permissionResult.denied.join(', ')}`);
|
|
50
51
|
}
|
|
51
|
-
//
|
|
52
|
-
const
|
|
53
|
-
|
|
52
|
+
// Load skills and inject into system prompt before forwarding
|
|
53
|
+
const enrichedRequest = await injectSkills(request, context);
|
|
54
|
+
// Signal and timeout are threaded directly into prompt(); no separate
|
|
55
|
+
// cancel() listener needed — the SSE loop handles abort internally.
|
|
54
56
|
try {
|
|
55
|
-
const result = await client.prompt(
|
|
57
|
+
const result = await client.prompt(enrichedRequest, context.signal, options.timeout, policy);
|
|
56
58
|
return result;
|
|
57
59
|
}
|
|
58
60
|
catch (error) {
|
|
@@ -63,16 +65,13 @@ export function createOpencodeBackend(options) {
|
|
|
63
65
|
if (error.message.includes('Rate limit')) {
|
|
64
66
|
throw new BackendRateLimitError(`Opencode rate limit exceeded: ${error.message}`);
|
|
65
67
|
}
|
|
66
|
-
if (error.message.includes('
|
|
67
|
-
throw new BackendTimeoutError(
|
|
68
|
+
if (error.message.includes('timed out')) {
|
|
69
|
+
throw new BackendTimeoutError(error.message);
|
|
68
70
|
}
|
|
69
71
|
}
|
|
70
72
|
throw error;
|
|
71
73
|
}
|
|
72
|
-
|
|
73
|
-
context.signal.removeEventListener('abort', onAbort);
|
|
74
|
-
// Do NOT dispose — server stays alive for subsequent calls
|
|
75
|
-
}
|
|
74
|
+
// Do NOT dispose — server stays alive for subsequent calls
|
|
76
75
|
},
|
|
77
76
|
async dispose() {
|
|
78
77
|
await client.dispose();
|
|
@@ -80,6 +79,20 @@ export function createOpencodeBackend(options) {
|
|
|
80
79
|
};
|
|
81
80
|
return backend;
|
|
82
81
|
}
|
|
82
|
+
async function injectSkills(req, ctx) {
|
|
83
|
+
if (!req.skills || req.skills.length === 0 || !ctx.loadSkill)
|
|
84
|
+
return req;
|
|
85
|
+
const skillParts = [];
|
|
86
|
+
for (const skillId of req.skills) {
|
|
87
|
+
const skill = await ctx.loadSkill(skillId);
|
|
88
|
+
if (skill !== null)
|
|
89
|
+
skillParts.push(formatSkillBlock(skill));
|
|
90
|
+
}
|
|
91
|
+
if (skillParts.length === 0)
|
|
92
|
+
return req;
|
|
93
|
+
const systemParts = req.system !== undefined ? [req.system, ...skillParts] : skillParts;
|
|
94
|
+
return { ...req, system: systemParts.join('\n\n---\n\n') };
|
|
95
|
+
}
|
|
83
96
|
/**
|
|
84
97
|
* Create an empty policy for when no permissions are specified
|
|
85
98
|
*/
|
package/dist/backend.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"backend.js","sourceRoot":"","sources":["../src/backend.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,27 +1,19 @@
|
|
|
1
|
-
import type { AgentRequest, AgentResponse } from '@skelm/core';
|
|
1
|
+
import type { AgentRequest, AgentResponse, ResolvedPolicy } from '@skelm/core';
|
|
2
2
|
import type { OpencodeBackendOptions } from './types.js';
|
|
3
3
|
export declare class OpencodeClientWrapper {
|
|
4
4
|
private proc;
|
|
5
5
|
private client;
|
|
6
|
-
private baseUrl;
|
|
7
|
-
private currentSessionId;
|
|
8
6
|
private startPromise;
|
|
9
|
-
private _cancelled;
|
|
10
7
|
private readonly options;
|
|
11
8
|
constructor(options: OpencodeBackendOptions);
|
|
12
|
-
/**
|
|
13
|
-
* Ensure the opencode server is running. Safe to call concurrently —
|
|
14
|
-
* subsequent callers await the same start promise.
|
|
15
|
-
*/
|
|
9
|
+
/** Ensure the opencode server is running. Safe to call concurrently. */
|
|
16
10
|
ensureStarted(): Promise<void>;
|
|
11
|
+
/** Alias kept for callers that start the server explicitly before first use. */
|
|
12
|
+
start(): Promise<void>;
|
|
17
13
|
private _start;
|
|
18
14
|
private _handleExit;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
prompt(request: AgentRequest, _permissions: unknown): Promise<AgentResponse>;
|
|
22
|
-
cancel(): Promise<void>;
|
|
23
|
-
/** Stop the opencode server and clean up. Called when the backend is no longer needed. */
|
|
15
|
+
prompt(request: AgentRequest, signal: AbortSignal, timeoutMs?: number, resolvedPolicy?: ResolvedPolicy): Promise<AgentResponse>;
|
|
16
|
+
private _collectFromStream;
|
|
24
17
|
dispose(): Promise<void>;
|
|
25
|
-
getSessionId(): string | null;
|
|
26
18
|
}
|
|
27
19
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAC9E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAgBxD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,IAAI,CAA4B;IACxC,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;gBAEpC,OAAO,EAAE,sBAAsB;IAI3C,wEAAwE;IAClE,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAOpC,gFAAgF;IAC1E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAId,MAAM;IAqDpB,OAAO,CAAC,WAAW;IAMb,MAAM,CACV,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,WAAW,EACnB,SAAS,SAAU,EACnB,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,aAAa,CAAC;YAsDX,kBAAkB;IAkE1B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAM/B"}
|
package/dist/client.js
CHANGED
|
@@ -1,24 +1,22 @@
|
|
|
1
1
|
// Opencode HTTP client — spawns `opencode serve --port 0` once per backend
|
|
2
|
-
// instance and reuses the process across multiple prompt() calls (session
|
|
3
|
-
// per call, server kept alive). Disposed via dispose() when the backend
|
|
4
|
-
//
|
|
2
|
+
// instance and reuses the process across multiple prompt() calls (one session
|
|
3
|
+
// per call, server kept alive). Disposed via dispose() when the backend is done.
|
|
4
|
+
//
|
|
5
|
+
// Improvements over the original:
|
|
6
|
+
// #1 — Cleaner spawn: OPENCODE_CONFIG_CONTENT + no dead cancel()/getSessionId()
|
|
7
|
+
// #2 — Model/logLevel injected via OPENCODE_CONFIG_CONTENT at server startup
|
|
8
|
+
// #3 — Non-blocking promptAsync + SSE stream instead of blocking session.prompt()
|
|
5
9
|
import { spawn } from 'node:child_process'; // @subprocess-ok: spawns opencode serve for HTTP backend
|
|
6
10
|
import { createOpencodeClient } from '@opencode-ai/sdk';
|
|
7
11
|
export class OpencodeClientWrapper {
|
|
8
12
|
proc = null;
|
|
9
13
|
client = null;
|
|
10
|
-
baseUrl = null;
|
|
11
|
-
currentSessionId = null;
|
|
12
14
|
startPromise = null;
|
|
13
|
-
_cancelled = false;
|
|
14
15
|
options;
|
|
15
16
|
constructor(options) {
|
|
16
17
|
this.options = options;
|
|
17
18
|
}
|
|
18
|
-
/**
|
|
19
|
-
* Ensure the opencode server is running. Safe to call concurrently —
|
|
20
|
-
* subsequent callers await the same start promise.
|
|
21
|
-
*/
|
|
19
|
+
/** Ensure the opencode server is running. Safe to call concurrently. */
|
|
22
20
|
async ensureStarted() {
|
|
23
21
|
if (this.client !== null)
|
|
24
22
|
return;
|
|
@@ -27,11 +25,28 @@ export class OpencodeClientWrapper {
|
|
|
27
25
|
this.startPromise = this._start();
|
|
28
26
|
await this.startPromise;
|
|
29
27
|
}
|
|
28
|
+
/** Alias kept for callers that start the server explicitly before first use. */
|
|
29
|
+
async start() {
|
|
30
|
+
return this.ensureStarted();
|
|
31
|
+
}
|
|
30
32
|
async _start() {
|
|
31
33
|
const command = this.options.command ?? 'opencode';
|
|
34
|
+
// (#2) Inject model and logLevel via OPENCODE_CONFIG_CONTENT so opencode
|
|
35
|
+
// uses them as its defaults for every session, without needing per-session
|
|
36
|
+
// body overrides.
|
|
37
|
+
const serverConfig = {};
|
|
38
|
+
if (this.options.model)
|
|
39
|
+
serverConfig.model = this.options.model;
|
|
40
|
+
if (this.options.logLevel && this.options.logLevel !== 'off') {
|
|
41
|
+
const logLevelMap = { debug: 'DEBUG', info: 'INFO', warn: 'WARN', error: 'ERROR' };
|
|
42
|
+
serverConfig.logLevel = logLevelMap[this.options.logLevel];
|
|
43
|
+
}
|
|
44
|
+
if (this.options.serverPermissions) {
|
|
45
|
+
serverConfig.permission = this.options.serverPermissions;
|
|
46
|
+
}
|
|
32
47
|
return new Promise((resolve, reject) => {
|
|
33
48
|
const proc = spawn(command, ['serve', '--port', '0'], {
|
|
34
|
-
env: { ...process.env },
|
|
49
|
+
env: { ...process.env, OPENCODE_CONFIG_CONTENT: JSON.stringify(serverConfig) },
|
|
35
50
|
stdio: ['ignore', 'pipe', 'pipe'],
|
|
36
51
|
});
|
|
37
52
|
this.proc = proc;
|
|
@@ -41,12 +56,10 @@ export class OpencodeClientWrapper {
|
|
|
41
56
|
if (resolved)
|
|
42
57
|
return;
|
|
43
58
|
buf += chunk.toString();
|
|
44
|
-
// stdout: "opencode server listening on http://127.0.0.1:PORT"
|
|
45
59
|
const m = buf.match(/listening on (https?:\/\/[^\s]+)/);
|
|
46
60
|
if (m?.[1]) {
|
|
47
61
|
resolved = true;
|
|
48
|
-
this.
|
|
49
|
-
this.client = createOpencodeClient({ baseUrl: this.baseUrl });
|
|
62
|
+
this.client = createOpencodeClient({ baseUrl: m[1].trim() });
|
|
50
63
|
resolve();
|
|
51
64
|
}
|
|
52
65
|
};
|
|
@@ -71,82 +84,122 @@ export class OpencodeClientWrapper {
|
|
|
71
84
|
});
|
|
72
85
|
}
|
|
73
86
|
_handleExit() {
|
|
74
|
-
// Server died unexpectedly — reset so next call restarts it
|
|
75
87
|
this.proc = null;
|
|
76
88
|
this.client = null;
|
|
77
89
|
this.startPromise = null;
|
|
78
90
|
}
|
|
79
|
-
|
|
80
|
-
async start() {
|
|
81
|
-
return this.ensureStarted();
|
|
82
|
-
}
|
|
83
|
-
async prompt(request, _permissions) {
|
|
91
|
+
async prompt(request, signal, timeoutMs = 300_000, resolvedPolicy) {
|
|
84
92
|
await this.ensureStarted();
|
|
85
93
|
if (!this.client)
|
|
86
94
|
throw new Error('opencode serve not ready');
|
|
87
95
|
const cwd = request.cwd ?? process.cwd();
|
|
88
|
-
// Create a new session for this call (sessions are per-conversation)
|
|
89
96
|
const sessResult = await this.client.session.create({ query: { directory: cwd } });
|
|
90
97
|
if (!sessResult.data) {
|
|
91
98
|
throw new Error(`session.create failed: ${JSON.stringify(sessResult.error)}`);
|
|
92
99
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
//
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
100
|
+
const sessionId = sessResult.data.id;
|
|
101
|
+
// (#3) Subscribe to the global SSE stream BEFORE calling promptAsync so
|
|
102
|
+
// we don't miss events that fire immediately after the session starts.
|
|
103
|
+
const sseAbort = new AbortController();
|
|
104
|
+
const timeoutId = setTimeout(() => sseAbort.abort(new Error(`opencode timed out after ${timeoutMs}ms`)), timeoutMs);
|
|
105
|
+
const onSignalAbort = () => sseAbort.abort(new Error('opencode aborted'));
|
|
106
|
+
signal.addEventListener('abort', onSignalAbort, { once: true });
|
|
107
|
+
try {
|
|
108
|
+
const { stream } = await this.client.event.subscribe({ signal: sseAbort.signal });
|
|
109
|
+
// (#3) Fire promptAsync — returns immediately; response arrives over SSE.
|
|
110
|
+
// Model is already set via OPENCODE_CONFIG_CONTENT (#2), so no per-request body needed.
|
|
111
|
+
const promptResult = await this.client.session.promptAsync({
|
|
112
|
+
path: { id: sessionId },
|
|
113
|
+
body: {
|
|
114
|
+
parts: [{ type: 'text', text: request.prompt }],
|
|
115
|
+
...(request.system !== undefined && { system: request.system }),
|
|
116
|
+
...(resolvedPolicy !== undefined && {
|
|
117
|
+
tools: buildOpencodeToolsFromPolicy(resolvedPolicy),
|
|
118
|
+
}),
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
if (!promptResult.data) {
|
|
122
|
+
throw new Error(`session.promptAsync failed: ${JSON.stringify(promptResult.error)}`);
|
|
106
123
|
}
|
|
124
|
+
return await this._collectFromStream(stream, sessionId, signal);
|
|
107
125
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
});
|
|
116
|
-
if (!result.data) {
|
|
117
|
-
throw new Error(`session.prompt failed: ${JSON.stringify(result.error)}`);
|
|
118
|
-
}
|
|
119
|
-
// Extract text parts (skip synthetic/tool parts)
|
|
120
|
-
let text = '';
|
|
121
|
-
for (const part of result.data.parts) {
|
|
122
|
-
if (part.type === 'text' && !part.synthetic && part.text) {
|
|
123
|
-
text += part.text;
|
|
126
|
+
finally {
|
|
127
|
+
clearTimeout(timeoutId);
|
|
128
|
+
signal.removeEventListener('abort', onSignalAbort);
|
|
129
|
+
sseAbort.abort(); // close SSE connection
|
|
130
|
+
// Best-effort abort of the session if we're bailing out early
|
|
131
|
+
if (signal.aborted) {
|
|
132
|
+
this.client?.session.abort({ path: { id: sessionId } }).catch(() => { });
|
|
124
133
|
}
|
|
125
134
|
}
|
|
126
|
-
return { text: text.trim(), stopReason: 'end_turn' };
|
|
127
135
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
136
|
+
// (#3) Collect text from SSE events for one session until it goes idle.
|
|
137
|
+
async _collectFromStream(stream, sessionId, signal) {
|
|
138
|
+
// Only collect text parts from assistant messages; track which message IDs are assistant.
|
|
139
|
+
const assistantMessageIds = new Set();
|
|
140
|
+
// Each TextPart is updated incrementally; track the latest full text per part id.
|
|
141
|
+
const textParts = new Map();
|
|
142
|
+
for await (const raw of stream) {
|
|
143
|
+
if (signal.aborted)
|
|
144
|
+
break;
|
|
145
|
+
const event = raw;
|
|
146
|
+
if (event.type === 'session.error') {
|
|
147
|
+
const props = event.properties;
|
|
148
|
+
if (!props.sessionID || props.sessionID === sessionId) {
|
|
149
|
+
throw new Error(`opencode session error: ${JSON.stringify(props.error)}`);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if (event.type === 'message.updated') {
|
|
153
|
+
const props = event.properties;
|
|
154
|
+
if (props.info.sessionID === sessionId && props.info.role === 'assistant') {
|
|
155
|
+
assistantMessageIds.add(props.info.id);
|
|
156
|
+
}
|
|
133
157
|
}
|
|
134
|
-
|
|
135
|
-
|
|
158
|
+
if (event.type === 'message.part.updated') {
|
|
159
|
+
const props = event.properties;
|
|
160
|
+
const { part } = props;
|
|
161
|
+
if (part.sessionID === sessionId &&
|
|
162
|
+
assistantMessageIds.has(part.messageID) &&
|
|
163
|
+
part.type === 'text' &&
|
|
164
|
+
!part.synthetic &&
|
|
165
|
+
part.text) {
|
|
166
|
+
textParts.set(part.id, part.text);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
if (event.type === 'session.idle') {
|
|
170
|
+
const props = event.properties;
|
|
171
|
+
if (props.sessionID === sessionId)
|
|
172
|
+
break;
|
|
136
173
|
}
|
|
137
174
|
}
|
|
175
|
+
if (signal.aborted)
|
|
176
|
+
throw new Error('opencode agent aborted');
|
|
177
|
+
const text = [...textParts.values()].join('');
|
|
178
|
+
return { text: text.trim(), stopReason: 'end_turn' };
|
|
138
179
|
}
|
|
139
|
-
/** Stop the opencode server and clean up. Called when the backend is no longer needed. */
|
|
140
180
|
async dispose() {
|
|
141
|
-
this._cancelled = true;
|
|
142
181
|
this.proc?.kill('SIGTERM');
|
|
143
182
|
this.proc = null;
|
|
144
183
|
this.client = null;
|
|
145
184
|
this.startPromise = null;
|
|
146
|
-
this.currentSessionId = null;
|
|
147
|
-
}
|
|
148
|
-
getSessionId() {
|
|
149
|
-
return this.currentSessionId;
|
|
150
185
|
}
|
|
151
186
|
}
|
|
187
|
+
// Map a skelm ResolvedPolicy to opencode's per-prompt tool allow/deny map.
|
|
188
|
+
// opencode tool names: bash, read, edit, glob, grep, list, webSearch.
|
|
189
|
+
function buildOpencodeToolsFromPolicy(policy) {
|
|
190
|
+
// star = all tools allowed; return empty map to let opencode use its defaults.
|
|
191
|
+
if (policy.allowedTools.star)
|
|
192
|
+
return {};
|
|
193
|
+
const allow = (name) => policy.allowedTools.exact.has(name) ||
|
|
194
|
+
policy.allowedTools.prefixes.some((p) => name.startsWith(p));
|
|
195
|
+
return {
|
|
196
|
+
bash: policy.allowedExecutables.size > 0 || allow('bash'),
|
|
197
|
+
read: policy.fsRead.size > 0 || allow('read'),
|
|
198
|
+
edit: policy.fsWrite.size > 0 || allow('edit'),
|
|
199
|
+
glob: policy.fsRead.size > 0 || allow('glob'),
|
|
200
|
+
grep: policy.fsRead.size > 0 || allow('grep'),
|
|
201
|
+
list: policy.fsRead.size > 0 || allow('list'),
|
|
202
|
+
webSearch: policy.networkEgress !== 'deny' || allow('webSearch'),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
152
205
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export { createOpencodeBackend, createOpencodeAcpBackend } from './backend.js';
|
|
8
8
|
export { createOpencodeBackendFromConfig } from './factory.js';
|
|
9
|
+
export type { OpencodeBackendConfig } from './factory.js';
|
|
9
10
|
export { OpencodeProvider, createOpencodeProvider } from './provider.js';
|
|
10
11
|
export { OpencodeClientWrapper } from './client.js';
|
|
11
12
|
export { mapSkelmPermissionsToOpencode, mapOpencodePermissionsToSkelm, validatePermissions, buildPermissionAuditEntry, } from './permission-mapper.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AAC9E,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAA;AAE/B,YAAY,EACV,sBAAsB,EACtB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,YAAY,CAAA;AAEnB,YAAY,EACV,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,cAAc,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AAC9E,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAA;AAC9D,YAAY,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAA;AAE/B,YAAY,EACV,sBAAsB,EACtB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,YAAY,CAAA;AAEnB,YAAY,EACV,0BAA0B,EAC1B,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,cAAc,CAAA"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AAC9E,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAA;AAC9E,OAAO,EAAE,+BAA+B,EAAE,MAAM,cAAc,CAAA;AAE9D,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,wBAAwB,CAAA"}
|
package/dist/provider.js
CHANGED
|
@@ -93,9 +93,10 @@ export class OpencodeProvider extends ProviderPluginBase {
|
|
|
93
93
|
if (!this.initialized) {
|
|
94
94
|
throw new Error('Provider must be initialized before creating backends');
|
|
95
95
|
}
|
|
96
|
-
const config = {
|
|
97
|
-
|
|
98
|
-
|
|
96
|
+
const config = {};
|
|
97
|
+
const apiKey = this.config.apiKey ?? process.env.OPENCODE_API_KEY;
|
|
98
|
+
if (apiKey !== undefined)
|
|
99
|
+
config.apiKey = apiKey;
|
|
99
100
|
if (this.config.apiUrl !== undefined) {
|
|
100
101
|
config.apiUrl = this.config.apiUrl;
|
|
101
102
|
}
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -28,6 +28,16 @@ export interface OpencodeBackendOptions {
|
|
|
28
28
|
maxRetries?: number;
|
|
29
29
|
/** Log level */
|
|
30
30
|
logLevel?: 'debug' | 'info' | 'warn' | 'error' | 'off';
|
|
31
|
+
/**
|
|
32
|
+
* Server-level permission defaults injected via OPENCODE_CONFIG_CONTENT at
|
|
33
|
+
* server startup. These apply to every session on this backend instance.
|
|
34
|
+
* For per-request tool blocking, use the skelm permission layer instead.
|
|
35
|
+
*/
|
|
36
|
+
serverPermissions?: {
|
|
37
|
+
bash?: 'allow' | 'ask' | 'deny';
|
|
38
|
+
edit?: 'allow' | 'ask' | 'deny';
|
|
39
|
+
webfetch?: 'allow' | 'ask' | 'deny';
|
|
40
|
+
};
|
|
31
41
|
}
|
|
32
42
|
/**
|
|
33
43
|
* Permission configuration matching opencode's permission system
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,uFAAuF;IACvF,EAAE,CAAC,EAAE,MAAM,CAAA;IAEX,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,gEAAgE;IAChE,WAAW,CAAC,EAAE,wBAAwB,CAAA;IAEtC,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,uFAAuF;IACvF,EAAE,CAAC,EAAE,MAAM,CAAA;IAEX,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,gEAAgE;IAChE,WAAW,CAAC,EAAE,wBAAwB,CAAA;IAEtC,oEAAoE;IACpE,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAA;IAEd,gCAAgC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;IACtD;;;;OAIG;IACH,iBAAiB,CAAC,EAAE;QAClB,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;QAC/B,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;QAC/B,QAAQ,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;KACpC,CAAA;CACF;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;IAC/B,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;IAC/B,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;IAC/B,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;IAC/B,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;IAC/B,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;IAC/B,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC,CAAA;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC,CAAA;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAA;IACvB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;IACxB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@skelm/opencode",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.5",
|
|
4
4
|
"description": "Opencode.ai backend for skelm with full permission enforcement",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Scott Glover <scottgl@gmail.com>",
|
|
@@ -48,10 +48,10 @@
|
|
|
48
48
|
"@opencode-ai/sdk": "^1.14.33"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
|
-
"@skelm/core": "^0.3.
|
|
51
|
+
"@skelm/core": "^0.3.5"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
54
|
-
"@skelm/core": "^0.3.
|
|
54
|
+
"@skelm/core": "^0.3.5",
|
|
55
55
|
"@types/node": "^20.10.0",
|
|
56
56
|
"typescript": "^5.3.0",
|
|
57
57
|
"vitest": "^1.0.0"
|