claude-mem-opencode 0.0.1 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +155 -5
- package/dist/bundle/claude-mem-opencode.js +21 -333
- package/dist/bundle/index.js +230 -0
- package/dist/integration/config-defaults.d.ts +15 -0
- package/dist/integration/config-defaults.d.ts.map +1 -0
- package/dist/integration/config-defaults.js +38 -0
- package/dist/integration/config-defaults.js.map +1 -0
- package/dist/integration/config-schema.d.ts +24 -0
- package/dist/integration/config-schema.d.ts.map +1 -0
- package/dist/integration/config-schema.js +5 -0
- package/dist/integration/config-schema.js.map +1 -0
- package/dist/integration/config.d.ts +63 -0
- package/dist/integration/config.d.ts.map +1 -0
- package/dist/integration/config.js +216 -0
- package/dist/integration/config.js.map +1 -0
- package/dist/plugin.d.ts +7 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +426 -0
- package/dist/plugin.js.map +1 -0
- package/package.json +10 -3
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
import { tool } from "@opencode-ai/plugin";
|
|
2
|
+
import { WorkerClient } from "./integration/worker-client.js";
|
|
3
|
+
import { ProjectNameExtractor } from "./integration/utils/project-name.js";
|
|
4
|
+
import { PrivacyTagStripper } from "./integration/utils/privacy.js";
|
|
5
|
+
import { ConfigLoader } from "./integration/config.js";
|
|
6
|
+
/**
|
|
7
|
+
* OpenCode plugin for claude-mem persistent memory
|
|
8
|
+
* Provides automatic context capture and injection across sessions
|
|
9
|
+
*/
|
|
10
|
+
export const ClaudeMemPlugin = async (ctx) => {
|
|
11
|
+
const { directory, client, project } = ctx;
|
|
12
|
+
// Load configuration from multiple sources
|
|
13
|
+
const configLoader = new ConfigLoader(directory);
|
|
14
|
+
const { config, errors, warnings, sources } = await configLoader.load();
|
|
15
|
+
// Log configuration warnings and errors
|
|
16
|
+
if (warnings.length > 0) {
|
|
17
|
+
warnings.forEach(warning => console.warn(`[CLAUDE_MEM] ⚠️ ${warning}`));
|
|
18
|
+
}
|
|
19
|
+
if (errors.length > 0) {
|
|
20
|
+
errors.forEach(error => console.error(`[CLAUDE_MEM] ❌ ${error}`));
|
|
21
|
+
// If config has errors, fail hard
|
|
22
|
+
throw new Error(`Configuration errors: ${errors.join(', ')}`);
|
|
23
|
+
}
|
|
24
|
+
// Log configuration source
|
|
25
|
+
console.log(`[CLAUDE_MEM] Configuration loaded from: ${sources.join(' → ')}`);
|
|
26
|
+
const projectNameExtractor = new ProjectNameExtractor();
|
|
27
|
+
const projectName = projectNameExtractor.extract(directory) || 'unknown';
|
|
28
|
+
const privacyStripper = new PrivacyTagStripper();
|
|
29
|
+
// Session state management
|
|
30
|
+
const sessionStates = new Map();
|
|
31
|
+
console.log('[CLAUDE_MEM] Initializing plugin...');
|
|
32
|
+
console.log(`[CLAUDE_MEM] Project: ${projectName}`);
|
|
33
|
+
console.log(`[CLAUDE_MEM] Worker port: ${config.workerPort}`);
|
|
34
|
+
console.log(`[CLAUDE_MEM] Debug: ${config.debug}`);
|
|
35
|
+
// Initialize worker client
|
|
36
|
+
const workerClient = new WorkerClient(config.workerPort);
|
|
37
|
+
// Fail hard: Worker must be available
|
|
38
|
+
try {
|
|
39
|
+
console.log('[CLAUDE_MEM] Checking worker availability...');
|
|
40
|
+
const workerReady = await workerClient.healthCheck();
|
|
41
|
+
if (!workerReady) {
|
|
42
|
+
throw new Error('claude-mem worker is not running. Start it with: claude-mem worker start');
|
|
43
|
+
}
|
|
44
|
+
console.log('[CLAUDE_MEM] ✅ Worker connected - plugin active');
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
48
|
+
console.error('[CLAUDE_MEM] ❌ Worker initialization failed:', errorMsg);
|
|
49
|
+
// Fail hard: Show toast notification and disable plugin
|
|
50
|
+
try {
|
|
51
|
+
await client.tui.showToast({
|
|
52
|
+
body: {
|
|
53
|
+
title: "claude-mem Plugin Disabled",
|
|
54
|
+
message: errorMsg,
|
|
55
|
+
variant: "error",
|
|
56
|
+
duration: 10000
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch (toastError) {
|
|
61
|
+
console.error('[CLAUDE_MEM] Failed to show toast:', toastError);
|
|
62
|
+
}
|
|
63
|
+
// Return empty hooks object to disable plugin
|
|
64
|
+
return {};
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
/**
|
|
68
|
+
* Event hook - Handle session lifecycle
|
|
69
|
+
* Handles session creation and completion
|
|
70
|
+
*/
|
|
71
|
+
event: async (input) => {
|
|
72
|
+
if (!config.enabled)
|
|
73
|
+
return;
|
|
74
|
+
try {
|
|
75
|
+
switch (input.event.type) {
|
|
76
|
+
case 'session.created':
|
|
77
|
+
await handleSessionCreated(input.event, sessionStates, workerClient, projectName, privacyStripper);
|
|
78
|
+
break;
|
|
79
|
+
case 'session.updated':
|
|
80
|
+
await handleSessionUpdated(input.event, sessionStates, workerClient);
|
|
81
|
+
break;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
console.error('[CLAUDE_MEM] Event handler error:', error);
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
/**
|
|
89
|
+
* Chat message hook - Inject context on first message
|
|
90
|
+
* Similar to supermemory's context injection pattern
|
|
91
|
+
*/
|
|
92
|
+
'chat.message': async (input, output) => {
|
|
93
|
+
if (!config.enabled || !config.autoInjectContext)
|
|
94
|
+
return;
|
|
95
|
+
const state = sessionStates.get(input.sessionID);
|
|
96
|
+
// Skip if no state, already injected, or private session
|
|
97
|
+
if (!state || state.contextInjected || state.isPrivate) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
console.log(`[CLAUDE_MEM] Injecting context for session ${input.sessionID}`);
|
|
102
|
+
// Fetch relevant memories for this project
|
|
103
|
+
const response = await workerClient.search('', {
|
|
104
|
+
limit: config.maxContextMemories,
|
|
105
|
+
project: projectName
|
|
106
|
+
});
|
|
107
|
+
if (!response.success || !response.results || response.results.length === 0) {
|
|
108
|
+
console.log('[CLAUDE_MEM] No relevant memories found');
|
|
109
|
+
state.contextInjected = true;
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
// Format context for injection
|
|
113
|
+
const contextText = formatContextForPrompt(response.results, projectName);
|
|
114
|
+
// Create synthetic part for context injection
|
|
115
|
+
const contextPart = {
|
|
116
|
+
id: `claude-mem-context-${Date.now()}`,
|
|
117
|
+
sessionID: input.sessionID,
|
|
118
|
+
messageID: output.message.id,
|
|
119
|
+
type: "text",
|
|
120
|
+
text: contextText,
|
|
121
|
+
synthetic: true,
|
|
122
|
+
};
|
|
123
|
+
// Unshift to inject at beginning (before user message)
|
|
124
|
+
output.parts.unshift(contextPart);
|
|
125
|
+
state.contextInjected = true;
|
|
126
|
+
console.log(`[CLAUDE_MEM] ✅ Context injected (${contextText.length} chars)`);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
console.error('[CLAUDE_MEM] Context injection failed:', error);
|
|
130
|
+
// Mark as injected to avoid retries
|
|
131
|
+
state.contextInjected = true;
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
/**
|
|
135
|
+
* Tool execution hook - Capture tool usage
|
|
136
|
+
* Runs after tool execution completes
|
|
137
|
+
*/
|
|
138
|
+
'tool.execute.after': async (input, output) => {
|
|
139
|
+
if (!config.enabled)
|
|
140
|
+
return;
|
|
141
|
+
const state = sessionStates.get(input.sessionID);
|
|
142
|
+
// Skip if no claude-mem session, private session, or tool execution failed
|
|
143
|
+
if (!state || !state.claudeMemSessionId || state.isPrivate) {
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
try {
|
|
147
|
+
console.log(`[CLAUDE_MEM] Capturing tool: ${input.tool}`);
|
|
148
|
+
// Strip private tags from tool input and output
|
|
149
|
+
const cleanedInput = privacyStripper.stripFromJson(input.tool);
|
|
150
|
+
const cleanedOutput = privacyStripper.stripFromText(output.output);
|
|
151
|
+
// Add observation to claude-mem
|
|
152
|
+
await workerClient.addObservation({
|
|
153
|
+
sessionDbId: state.claudeMemSessionId,
|
|
154
|
+
promptNumber: state.promptNumber,
|
|
155
|
+
toolName: input.tool,
|
|
156
|
+
toolInput: cleanedInput,
|
|
157
|
+
toolOutput: cleanedOutput,
|
|
158
|
+
cwd: directory,
|
|
159
|
+
timestamp: Date.now()
|
|
160
|
+
});
|
|
161
|
+
console.log(`[CLAUDE_MEM] ✅ Observation added: ${input.tool}`);
|
|
162
|
+
}
|
|
163
|
+
catch (error) {
|
|
164
|
+
console.error('[CLAUDE_MEM] Failed to capture tool usage:', error);
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
/**
|
|
168
|
+
* Tool hook - Expose claude-mem as a searchable tool
|
|
169
|
+
* Allows manual memory operations
|
|
170
|
+
*/
|
|
171
|
+
tool: {
|
|
172
|
+
'claude-mem': tool({
|
|
173
|
+
description: "Search and manage persistent memory from claude-mem. Use to find relevant context from past coding sessions, patterns, error solutions, and project knowledge.",
|
|
174
|
+
args: {
|
|
175
|
+
mode: tool.schema
|
|
176
|
+
.enum(['search', 'status', 'list'])
|
|
177
|
+
.optional()
|
|
178
|
+
.describe('Operation mode: search memories, check worker status, or list recent memories'),
|
|
179
|
+
query: tool.schema
|
|
180
|
+
.string()
|
|
181
|
+
.optional()
|
|
182
|
+
.describe('Search query for semantic memory search (e.g., "authentication bug fix")'),
|
|
183
|
+
limit: tool.schema
|
|
184
|
+
.number()
|
|
185
|
+
.optional()
|
|
186
|
+
.describe('Maximum number of results to return (default: 10)'),
|
|
187
|
+
type: tool.schema
|
|
188
|
+
.enum(['all', 'code', 'file', 'web', 'bash'])
|
|
189
|
+
.optional()
|
|
190
|
+
.describe('Filter memories by type'),
|
|
191
|
+
project: tool.schema
|
|
192
|
+
.string()
|
|
193
|
+
.optional()
|
|
194
|
+
.describe('Project name to search (default: current project)')
|
|
195
|
+
},
|
|
196
|
+
async execute(args, toolCtx) {
|
|
197
|
+
try {
|
|
198
|
+
const state = sessionStates.get(toolCtx.sessionID);
|
|
199
|
+
if (!state || !state.claudeMemSessionId) {
|
|
200
|
+
return JSON.stringify({
|
|
201
|
+
success: false,
|
|
202
|
+
error: 'No active claude-mem session for this OpenCode session'
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
switch (args.mode || 'search') {
|
|
206
|
+
case 'search': {
|
|
207
|
+
if (!args.query) {
|
|
208
|
+
return JSON.stringify({
|
|
209
|
+
success: false,
|
|
210
|
+
error: 'Query parameter is required for search mode'
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
console.log(`[CLAUDE_MEM] Searching: ${args.query}`);
|
|
214
|
+
const response = await workerClient.search(args.query, {
|
|
215
|
+
limit: args.limit || 10,
|
|
216
|
+
type: args.type,
|
|
217
|
+
project: args.project || projectName
|
|
218
|
+
});
|
|
219
|
+
if (!response.success) {
|
|
220
|
+
return JSON.stringify({
|
|
221
|
+
success: false,
|
|
222
|
+
error: response.error || 'Search failed'
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
return JSON.stringify({
|
|
226
|
+
success: true,
|
|
227
|
+
mode: 'search',
|
|
228
|
+
query: args.query,
|
|
229
|
+
project: args.project || projectName,
|
|
230
|
+
count: response.results?.length || 0,
|
|
231
|
+
results: response.results?.map((r) => ({
|
|
232
|
+
id: r.id,
|
|
233
|
+
type: r.type,
|
|
234
|
+
content: r.content || r.summary,
|
|
235
|
+
timestamp: r.created_at,
|
|
236
|
+
similarity: r.similarity ? Math.round(r.similarity * 100) : null
|
|
237
|
+
}))
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
case 'status': {
|
|
241
|
+
const healthCheck = await workerClient.healthCheck();
|
|
242
|
+
return JSON.stringify({
|
|
243
|
+
success: true,
|
|
244
|
+
mode: 'status',
|
|
245
|
+
worker: {
|
|
246
|
+
connected: healthCheck,
|
|
247
|
+
port: config.workerPort
|
|
248
|
+
},
|
|
249
|
+
session: {
|
|
250
|
+
id: toolCtx.sessionID,
|
|
251
|
+
claudeMemId: state.claudeMemSessionId,
|
|
252
|
+
project: state.projectName,
|
|
253
|
+
contextInjected: state.contextInjected
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
case 'list': {
|
|
258
|
+
const response = await workerClient.search('', {
|
|
259
|
+
limit: args.limit || 20,
|
|
260
|
+
project: args.project || projectName
|
|
261
|
+
});
|
|
262
|
+
if (!response.success) {
|
|
263
|
+
return JSON.stringify({
|
|
264
|
+
success: false,
|
|
265
|
+
error: response.error || 'List failed'
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
return JSON.stringify({
|
|
269
|
+
success: true,
|
|
270
|
+
mode: 'list',
|
|
271
|
+
project: args.project || projectName,
|
|
272
|
+
count: response.results?.length || 0,
|
|
273
|
+
memories: response.results?.map((r) => ({
|
|
274
|
+
id: r.id,
|
|
275
|
+
type: r.type,
|
|
276
|
+
summary: r.summary,
|
|
277
|
+
created_at: r.created_at
|
|
278
|
+
}))
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
default: {
|
|
282
|
+
return JSON.stringify({
|
|
283
|
+
success: false,
|
|
284
|
+
error: `Unknown mode: ${args.mode}. Valid modes: search, status, list`
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
const errorMsg = error instanceof Error ? error.message : String(error);
|
|
291
|
+
console.error('[CLAUDE_MEM] Tool execution error:', errorMsg);
|
|
292
|
+
return JSON.stringify({
|
|
293
|
+
success: false,
|
|
294
|
+
error: errorMsg
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
})
|
|
299
|
+
}
|
|
300
|
+
};
|
|
301
|
+
};
|
|
302
|
+
/**
|
|
303
|
+
* Handle session creation event
|
|
304
|
+
* Initialize claude-mem session and track mapping
|
|
305
|
+
*/
|
|
306
|
+
async function handleSessionCreated(event, sessionStates, workerClient, projectName, privacyStripper) {
|
|
307
|
+
const { info } = event.properties;
|
|
308
|
+
const sessionId = info.id;
|
|
309
|
+
const title = info.title || 'New session';
|
|
310
|
+
// Check for private session indicators
|
|
311
|
+
const isPrivate = isSessionPrivate(info, privacyStripper);
|
|
312
|
+
if (isPrivate) {
|
|
313
|
+
console.log(`[CLAUDE_MEM] Skipping private session: ${sessionId}`);
|
|
314
|
+
sessionStates.set(sessionId, {
|
|
315
|
+
sessionId,
|
|
316
|
+
claudeMemSessionId: null,
|
|
317
|
+
contextInjected: true,
|
|
318
|
+
isPrivate: true,
|
|
319
|
+
projectName,
|
|
320
|
+
promptNumber: 1
|
|
321
|
+
});
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
try {
|
|
325
|
+
// Initialize claude-mem session
|
|
326
|
+
const response = await workerClient.initSession({
|
|
327
|
+
contentSessionId: sessionId,
|
|
328
|
+
project: projectName,
|
|
329
|
+
prompt: title
|
|
330
|
+
});
|
|
331
|
+
if (response.skipped) {
|
|
332
|
+
console.log(`[CLAUDE_MEM] Session marked as private: ${sessionId}`);
|
|
333
|
+
console.log(`[CLAUDE_MEM] Reason: ${response.reason}`);
|
|
334
|
+
sessionStates.set(sessionId, {
|
|
335
|
+
sessionId,
|
|
336
|
+
claudeMemSessionId: null,
|
|
337
|
+
contextInjected: true,
|
|
338
|
+
isPrivate: true,
|
|
339
|
+
projectName,
|
|
340
|
+
promptNumber: 1
|
|
341
|
+
});
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
// Track session mapping
|
|
345
|
+
sessionStates.set(sessionId, {
|
|
346
|
+
sessionId,
|
|
347
|
+
claudeMemSessionId: response.sessionDbId,
|
|
348
|
+
contextInjected: false,
|
|
349
|
+
isPrivate: false,
|
|
350
|
+
projectName,
|
|
351
|
+
promptNumber: response.promptNumber || 1
|
|
352
|
+
});
|
|
353
|
+
console.log(`[CLAUDE_MEM] Session ${sessionId} → ${response.sessionDbId}`);
|
|
354
|
+
}
|
|
355
|
+
catch (error) {
|
|
356
|
+
console.error(`[CLAUDE_MEM] Failed to initialize session ${sessionId}:`, error);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Handle session updated event
|
|
361
|
+
* Complete claude-mem session when archived
|
|
362
|
+
*/
|
|
363
|
+
async function handleSessionUpdated(event, sessionStates, workerClient) {
|
|
364
|
+
const { info } = event.properties;
|
|
365
|
+
const sessionId = info.id;
|
|
366
|
+
// Only complete on archive
|
|
367
|
+
if (!info.time?.archived) {
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
const state = sessionStates.get(sessionId);
|
|
371
|
+
if (!state || !state.claudeMemSessionId || state.isPrivate) {
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
try {
|
|
375
|
+
console.log(`[CLAUDE_MEM] Completing session: ${sessionId}`);
|
|
376
|
+
await workerClient.completeSession(state.claudeMemSessionId);
|
|
377
|
+
console.log(`[CLAUDE_MEM] ✅ Session completed: ${state.claudeMemSessionId}`);
|
|
378
|
+
// Clean up state
|
|
379
|
+
sessionStates.delete(sessionId);
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
console.error(`[CLAUDE_MEM] Failed to complete session ${sessionId}:`, error);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Check if session should be treated as private
|
|
387
|
+
*/
|
|
388
|
+
function isSessionPrivate(sessionInfo, privacyStripper) {
|
|
389
|
+
const title = (sessionInfo.title || '').toLowerCase();
|
|
390
|
+
// Check title for private keywords
|
|
391
|
+
const privateKeywords = ['private', 'secret', 'confidential', 'test', 'tmp'];
|
|
392
|
+
const hasPrivateKeyword = privateKeywords.some(keyword => title.includes(keyword));
|
|
393
|
+
if (hasPrivateKeyword) {
|
|
394
|
+
return true;
|
|
395
|
+
}
|
|
396
|
+
// Check for private tags in message/prompt
|
|
397
|
+
if (sessionInfo.message || sessionInfo.prompt) {
|
|
398
|
+
const content = sessionInfo.message || sessionInfo.prompt;
|
|
399
|
+
const hasPrivacyTags = privacyStripper.hasPrivacyTags(content);
|
|
400
|
+
if (hasPrivacyTags) {
|
|
401
|
+
return true;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
return false;
|
|
405
|
+
}
|
|
406
|
+
/**
|
|
407
|
+
* Format memories for prompt injection
|
|
408
|
+
*/
|
|
409
|
+
function formatContextForPrompt(memories, projectName) {
|
|
410
|
+
if (memories.length === 0) {
|
|
411
|
+
return '';
|
|
412
|
+
}
|
|
413
|
+
const parts = [];
|
|
414
|
+
parts.push('[CLAUDE-MEM]');
|
|
415
|
+
parts.push(`\nProject: ${projectName}`);
|
|
416
|
+
parts.push(`\nRelevant Memories (${memories.length}):`);
|
|
417
|
+
memories.forEach((mem, index) => {
|
|
418
|
+
const similarity = mem.similarity ? Math.round(mem.similarity * 100) : null;
|
|
419
|
+
const type = mem.type || 'observation';
|
|
420
|
+
const content = mem.content || mem.summary || '';
|
|
421
|
+
parts.push(`\n${index + 1}. [${type}] ${similarity ? `${similarity}% match` : ''}`);
|
|
422
|
+
parts.push(` ${content.substring(0, 200)}${content.length > 200 ? '...' : ''}`);
|
|
423
|
+
});
|
|
424
|
+
return parts.join('\n');
|
|
425
|
+
}
|
|
426
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-mem-opencode",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "OpenCode integration for claude-mem persistent memory",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"main": "./dist/bundle/index.js",
|
|
6
7
|
"types": "./dist/bundle/index.d.ts",
|
|
7
8
|
"exports": {
|
|
@@ -11,6 +12,10 @@
|
|
|
11
12
|
},
|
|
12
13
|
"./bundle": {
|
|
13
14
|
"import": "./dist/bundle/opencode-mem.js"
|
|
15
|
+
},
|
|
16
|
+
"./plugin": {
|
|
17
|
+
"import": "./dist/plugin.js",
|
|
18
|
+
"types": "./dist/plugin.d.ts"
|
|
14
19
|
}
|
|
15
20
|
},
|
|
16
21
|
"files": [
|
|
@@ -23,10 +28,12 @@
|
|
|
23
28
|
"bun": ">=1.0.0"
|
|
24
29
|
},
|
|
25
30
|
"dependencies": {
|
|
31
|
+
"@opencode-ai/sdk": "^1.0.223",
|
|
32
|
+
"@opencode-ai/plugin": "^1.0.162",
|
|
26
33
|
"open": "^8.4.2"
|
|
27
34
|
},
|
|
28
35
|
"devDependencies": {
|
|
29
|
-
"@types/node": "^
|
|
36
|
+
"@types/node": "^22.10.0",
|
|
30
37
|
"bun-types": "^1.0.0",
|
|
31
38
|
"typescript": "^5.3.0"
|
|
32
39
|
},
|
|
@@ -64,6 +71,6 @@
|
|
|
64
71
|
"ai",
|
|
65
72
|
"integration"
|
|
66
73
|
],
|
|
67
|
-
"author": "
|
|
74
|
+
"author": "mc303",
|
|
68
75
|
"license": "MIT"
|
|
69
76
|
}
|