claude-mem-opencode 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.
Files changed (59) hide show
  1. package/README.md +391 -0
  2. package/dist/bundle/claude-mem-opencode.js +542 -0
  3. package/dist/bundle/index.d.ts +13 -0
  4. package/dist/bundle/index.d.ts.map +1 -0
  5. package/dist/bundle/index.js.map +1 -0
  6. package/dist/bundle/package.json +10 -0
  7. package/dist/bundle/skill/SKILL.md +118 -0
  8. package/dist/bundle/skill/operations/search.md +178 -0
  9. package/dist/bundle/skill/operations/timeline.md +269 -0
  10. package/dist/bundle/skill/operations/workflow.md +375 -0
  11. package/dist/cli.d.ts +6 -0
  12. package/dist/cli.d.ts.map +1 -0
  13. package/dist/cli.js +164 -0
  14. package/dist/cli.js.map +1 -0
  15. package/dist/integration/context-injector.d.ts +19 -0
  16. package/dist/integration/context-injector.d.ts.map +1 -0
  17. package/dist/integration/context-injector.js +47 -0
  18. package/dist/integration/context-injector.js.map +1 -0
  19. package/dist/integration/event-listeners.d.ts +41 -0
  20. package/dist/integration/event-listeners.d.ts.map +1 -0
  21. package/dist/integration/event-listeners.js +156 -0
  22. package/dist/integration/event-listeners.js.map +1 -0
  23. package/dist/integration/index.d.ts +66 -0
  24. package/dist/integration/index.d.ts.map +1 -0
  25. package/dist/integration/index.js +127 -0
  26. package/dist/integration/index.js.map +1 -0
  27. package/dist/integration/session-mapper.d.ts +39 -0
  28. package/dist/integration/session-mapper.d.ts.map +1 -0
  29. package/dist/integration/session-mapper.js +63 -0
  30. package/dist/integration/session-mapper.js.map +1 -0
  31. package/dist/integration/test.d.ts +6 -0
  32. package/dist/integration/test.d.ts.map +1 -0
  33. package/dist/integration/test.js +73 -0
  34. package/dist/integration/test.js.map +1 -0
  35. package/dist/integration/utils/logger.d.ts +15 -0
  36. package/dist/integration/utils/logger.d.ts.map +1 -0
  37. package/dist/integration/utils/logger.js +26 -0
  38. package/dist/integration/utils/logger.js.map +1 -0
  39. package/dist/integration/utils/privacy.d.ts +32 -0
  40. package/dist/integration/utils/privacy.d.ts.map +1 -0
  41. package/dist/integration/utils/privacy.js +62 -0
  42. package/dist/integration/utils/privacy.js.map +1 -0
  43. package/dist/integration/utils/project-name.d.ts +16 -0
  44. package/dist/integration/utils/project-name.d.ts.map +1 -0
  45. package/dist/integration/utils/project-name.js +28 -0
  46. package/dist/integration/utils/project-name.js.map +1 -0
  47. package/dist/integration/version-checker.d.ts +52 -0
  48. package/dist/integration/version-checker.d.ts.map +1 -0
  49. package/dist/integration/version-checker.js +121 -0
  50. package/dist/integration/version-checker.js.map +1 -0
  51. package/dist/integration/worker-client.d.ts +94 -0
  52. package/dist/integration/worker-client.d.ts.map +1 -0
  53. package/dist/integration/worker-client.js +188 -0
  54. package/dist/integration/worker-client.js.map +1 -0
  55. package/dist/test.d.ts +6 -0
  56. package/dist/test.d.ts.map +1 -0
  57. package/dist/test.js +73 -0
  58. package/dist/test.js.map +1 -0
  59. package/package.json +69 -0
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Subscribe to OpenCode Bus events and bridge to claude-mem
3
+ * Adapted to use real OpenCode APIs (with fallback for testing)
4
+ */
5
+ import { SessionMapper } from './session-mapper.js';
6
+ import { ProjectNameExtractor } from './utils/project-name.js';
7
+ import { PrivacyTagStripper } from './utils/privacy.js';
8
+ let Bus = null;
9
+ let Session = null;
10
+ let MessageV2 = null;
11
+ try {
12
+ const busModule = await import('@/bus');
13
+ Bus = busModule.Bus;
14
+ const sessionModule = await import('@/session');
15
+ Session = sessionModule.Session;
16
+ MessageV2 = sessionModule.MessageV2;
17
+ }
18
+ catch (error) {
19
+ console.log('[EVENT_LISTENERS] OpenCode APIs not available - running in standalone mode');
20
+ }
21
+ export class EventListeners {
22
+ workerClient;
23
+ sessionMapper;
24
+ projectNameExtractor;
25
+ privacyStripper;
26
+ promptNumberTracker = new Map();
27
+ constructor(workerClient) {
28
+ this.workerClient = workerClient;
29
+ this.sessionMapper = new SessionMapper();
30
+ this.projectNameExtractor = new ProjectNameExtractor();
31
+ this.privacyStripper = new PrivacyTagStripper();
32
+ }
33
+ /**
34
+ * Subscribe to all relevant OpenCode events using real Bus API
35
+ */
36
+ async initialize() {
37
+ if (!Bus || !Session || !MessageV2) {
38
+ console.log('[EVENT_LISTENERS] OpenCode APIs not available - event listeners will be initialized via manual calls');
39
+ return;
40
+ }
41
+ console.log('[EVENT_LISTENERS] Initializing OpenCode event listeners...');
42
+ Bus.subscribe(Session.Event.Created, this.handleSessionCreated.bind(this));
43
+ Bus.subscribe(MessageV2.Event.PartUpdated, this.handleMessagePartUpdated.bind(this));
44
+ Bus.subscribe(Session.Event.Updated, this.handleSessionUpdated.bind(this));
45
+ console.log('[EVENT_LISTENERS] Subscribed to OpenCode Bus events');
46
+ }
47
+ /**
48
+ * Handle session creation - initialize claude-mem session
49
+ * Uses real Session.Info from OpenCode
50
+ */
51
+ async handleSessionCreated(event) {
52
+ const { info } = event.properties;
53
+ const project = this.projectNameExtractor.extract(info.directory);
54
+ const openCodeSessionId = info.id;
55
+ const title = info.title || 'New session';
56
+ console.log(`[EVENT_LISTENERS] Session created: ${openCodeSessionId}`);
57
+ try {
58
+ const response = await this.workerClient.initSession({
59
+ contentSessionId: openCodeSessionId,
60
+ project,
61
+ prompt: title
62
+ });
63
+ if (response.skipped) {
64
+ console.log(`[EVENT_LISTENERS] Session marked as private: ${openCodeSessionId}`);
65
+ console.log(`[EVENT_LISTENERS] Reason: ${response.reason}`);
66
+ return;
67
+ }
68
+ this.sessionMapper.mapOpenCodeToClaudeMem(openCodeSessionId, response.sessionDbId);
69
+ this.promptNumberTracker.set(openCodeSessionId, response.promptNumber);
70
+ console.log(`[EVENT_LISTENERS] Mapped ${openCodeSessionId} → ${response.sessionDbId}`);
71
+ console.log(`[EVENT_LISTENERS] Project: ${project}, Prompt #${response.promptNumber}`);
72
+ }
73
+ catch (error) {
74
+ console.error(`[EVENT_LISTENERS] Failed to initialize session ${openCodeSessionId}:`, error);
75
+ }
76
+ }
77
+ /**
78
+ * Handle message part updates - capture tool usage
79
+ * Uses real MessageV2.Part from OpenCode
80
+ */
81
+ async handleMessagePartUpdated(event) {
82
+ const { part } = event.properties;
83
+ if (part.type !== 'tool_call') {
84
+ return;
85
+ }
86
+ const toolName = part.name;
87
+ const toolArgs = part.args;
88
+ const toolResult = part.result || '';
89
+ const sessionId = part.sessionID;
90
+ const cwd = part.cwd || process.cwd();
91
+ const claudeMemSessionId = this.sessionMapper.getClaudeMemSessionId(sessionId);
92
+ if (!claudeMemSessionId) {
93
+ console.log(`[EVENT_LISTENERS] No claude-mem session for: ${sessionId}`);
94
+ return;
95
+ }
96
+ const promptNumber = this.getPromptNumber(sessionId);
97
+ console.log(`[EVENT_LISTENERS] Tool usage: ${sessionId} - ${toolName}`);
98
+ try {
99
+ const strippedArgs = this.privacyStripper.stripFromJson(toolArgs);
100
+ const strippedResult = this.privacyStripper.stripFromText(toolResult);
101
+ await this.workerClient.addObservation({
102
+ sessionDbId: claudeMemSessionId,
103
+ promptNumber,
104
+ toolName,
105
+ toolInput: strippedArgs,
106
+ toolOutput: strippedResult,
107
+ cwd,
108
+ timestamp: Date.now()
109
+ });
110
+ console.log(`[EVENT_LISTENERS] Added observation: ${claudeMemSessionId} - ${toolName}`);
111
+ }
112
+ catch (error) {
113
+ console.error(`[EVENT_LISTENERS] Failed to add observation:`, error);
114
+ }
115
+ }
116
+ /**
117
+ * Handle session updates - check for completion
118
+ * Uses real Session.Info from OpenCode
119
+ */
120
+ async handleSessionUpdated(event) {
121
+ const { info } = event.properties;
122
+ if (!info.time.archived) {
123
+ return;
124
+ }
125
+ const openCodeSessionId = info.id;
126
+ console.log(`[EVENT_LISTENERS] Session archived: ${openCodeSessionId}`);
127
+ const claudeMemSessionId = this.sessionMapper.getClaudeMemSessionId(openCodeSessionId);
128
+ if (!claudeMemSessionId) {
129
+ console.log(`[EVENT_LISTENERS] No claude-mem session for: ${openCodeSessionId}`);
130
+ return;
131
+ }
132
+ try {
133
+ await this.workerClient.completeSession(claudeMemSessionId);
134
+ console.log(`[EVENT_LISTENERS] Completed session: ${claudeMemSessionId}`);
135
+ this.sessionMapper.unmapSession(openCodeSessionId);
136
+ this.promptNumberTracker.delete(openCodeSessionId);
137
+ }
138
+ catch (error) {
139
+ console.error(`[EVENT_LISTENERS] Failed to complete session:`, error);
140
+ }
141
+ }
142
+ /**
143
+ * Get current prompt number for a session
144
+ */
145
+ getPromptNumber(sessionId) {
146
+ return this.promptNumberTracker.get(sessionId) ?? 1;
147
+ }
148
+ /**
149
+ * Increment prompt number for a session
150
+ */
151
+ incrementPromptNumber(sessionId) {
152
+ const current = this.promptNumberTracker.get(sessionId) ?? 1;
153
+ this.promptNumberTracker.set(sessionId, current + 1);
154
+ }
155
+ }
156
+ //# sourceMappingURL=event-listeners.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-listeners.js","sourceRoot":"","sources":["../../src/integration/event-listeners.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Main entry point for claude-mem OpenCode integration
3
+ * Initializes worker client, event listeners, and context injection
4
+ */
5
+ import { WorkerClient } from './worker-client.js';
6
+ import { EventListeners } from './event-listeners.js';
7
+ import { ContextInjector } from './context-injector.js';
8
+ export declare class ClaudeMemIntegration {
9
+ private workerClient;
10
+ private eventListeners;
11
+ private contextInjector;
12
+ private projectNameExtractor;
13
+ private logger;
14
+ private initialized;
15
+ private memoryAvailable;
16
+ constructor(workerUrl?: string);
17
+ /**
18
+ * Initialize integration
19
+ */
20
+ initialize(): Promise<void>;
21
+ /**
22
+ * Get integration status
23
+ */
24
+ getStatus(): Promise<{
25
+ initialized: boolean;
26
+ workerReady: boolean;
27
+ workerUrl: string;
28
+ currentProject: string;
29
+ }>;
30
+ /**
31
+ * Get project context
32
+ */
33
+ getProjectContext(project?: string): Promise<string | null>;
34
+ /**
35
+ * Search memories
36
+ */
37
+ searchMemory(query: string, options?: {
38
+ limit?: number;
39
+ type?: 'all' | 'code' | 'file' | 'web' | 'bash';
40
+ project?: string;
41
+ }): Promise<any>;
42
+ /**
43
+ * Shutdown integration
44
+ */
45
+ shutdown(): Promise<void>;
46
+ /**
47
+ * Get worker client (for advanced usage)
48
+ */
49
+ getWorkerClient(): WorkerClient;
50
+ /**
51
+ * Get event listeners (for advanced usage)
52
+ */
53
+ getEventListeners(): EventListeners;
54
+ /**
55
+ * Get context injector (for advanced usage)
56
+ */
57
+ getContextInjector(): ContextInjector;
58
+ /**
59
+ * Check if memory features are available
60
+ */
61
+ isMemoryAvailable(): boolean;
62
+ }
63
+ declare const defaultInstance: ClaudeMemIntegration;
64
+ export default ClaudeMemIntegration;
65
+ export { defaultInstance };
66
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integration/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAMvD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAiB;IACxC,OAAO,CAAC,oBAAoB,CAAsB;IAClD,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,WAAW,CAAiB;IACpC,OAAO,CAAC,eAAe,CAAiB;gBAE5B,SAAS,GAAE,MAAiC;IAYxD;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA+BjC;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC;QACzB,WAAW,EAAE,OAAO,CAAA;QACpB,WAAW,EAAE,OAAO,CAAA;QACpB,SAAS,EAAE,MAAM,CAAA;QACjB,cAAc,EAAE,MAAM,CAAA;KACvB,CAAC;IAYF;;OAEG;IACG,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAUjE;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAC1C,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAA;QAC/C,OAAO,CAAC,EAAE,MAAM,CAAA;KACjB,GAAG,OAAO,CAAC,GAAG,CAAC;IAShB;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAM/B;;OAEG;IACH,eAAe,IAAI,YAAY;IAI/B;;OAEG;IACH,iBAAiB,IAAI,cAAc;IAInC;;OAEG;IACH,kBAAkB,IAAI,eAAe;IAIrC;;OAEG;IACH,iBAAiB,IAAI,OAAO;CAG7B;AAGD,QAAA,MAAM,eAAe,sBAA6B,CAAA;AAGlD,eAAe,oBAAoB,CAAA;AACnC,OAAO,EAAE,eAAe,EAAE,CAAA"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Main entry point for claude-mem OpenCode integration
3
+ * Initializes worker client, event listeners, and context injection
4
+ */
5
+ import { WorkerClient } from './worker-client.js';
6
+ import { EventListeners } from './event-listeners.js';
7
+ import { ContextInjector } from './context-injector.js';
8
+ import { ProjectNameExtractor } from './utils/project-name.js';
9
+ import { Logger } from './utils/logger.js';
10
+ export class ClaudeMemIntegration {
11
+ workerClient;
12
+ eventListeners;
13
+ contextInjector;
14
+ projectNameExtractor;
15
+ logger;
16
+ initialized = false;
17
+ memoryAvailable = false;
18
+ constructor(workerUrl = 'http://localhost:37777') {
19
+ this.workerClient = new WorkerClient(workerUrl.includes('localhost') ?
20
+ parseInt(workerUrl.split(':')[1] || '37777') :
21
+ 37777);
22
+ this.eventListeners = new EventListeners(this.workerClient);
23
+ this.contextInjector = new ContextInjector(this.workerClient);
24
+ this.projectNameExtractor = new ProjectNameExtractor();
25
+ this.logger = new Logger('CLAUDE_MEM');
26
+ }
27
+ /**
28
+ * Initialize integration
29
+ */
30
+ async initialize() {
31
+ if (this.initialized) {
32
+ console.log('[CLAUDE_MEM] Integration already initialized');
33
+ return;
34
+ }
35
+ try {
36
+ console.log('[CLAUDE_MEM] Initializing claude-mem integration...');
37
+ console.log(`[CLAUDE_MEM] Worker port: ${this.workerClient.getPort() || '37777'}`);
38
+ const ready = await this.workerClient.waitForReady(30000);
39
+ if (!ready) {
40
+ throw new Error('Worker service not ready after 30s. Is worker running?');
41
+ }
42
+ console.log('[CLAUDE_MEM] Worker service is ready');
43
+ await this.eventListeners.initialize();
44
+ this.initialized = true;
45
+ this.memoryAvailable = true;
46
+ console.log('[CLAUDE_MEM] Integration initialized successfully');
47
+ console.log('[CLAUDE_MEM] Project:', this.projectNameExtractor.getCurrentProject());
48
+ }
49
+ catch (error) {
50
+ console.error('[CLAUDE_MEM] Initialization failed:', error);
51
+ console.warn('[CLAUDE_MEM] Continuing anyway, but expect potential issues');
52
+ this.memoryAvailable = false;
53
+ }
54
+ }
55
+ /**
56
+ * Get integration status
57
+ */
58
+ async getStatus() {
59
+ const workerReady = this.memoryAvailable &&
60
+ (await this.workerClient.healthCheck());
61
+ return {
62
+ initialized: this.initialized,
63
+ workerReady,
64
+ currentProject: this.projectNameExtractor.getCurrentProject(),
65
+ workerUrl: `http://localhost:${this.workerClient.getPort() || '37777'}`
66
+ };
67
+ }
68
+ /**
69
+ * Get project context
70
+ */
71
+ async getProjectContext(project) {
72
+ if (!this.memoryAvailable) {
73
+ this.logger.warn('Memory features are not available');
74
+ return null;
75
+ }
76
+ const projectToUse = project || this.projectNameExtractor.getCurrentProject();
77
+ return this.contextInjector.injectContext(projectToUse);
78
+ }
79
+ /**
80
+ * Search memories
81
+ */
82
+ async searchMemory(query, options) {
83
+ if (!this.memoryAvailable) {
84
+ this.logger.warn('Memory features are not available');
85
+ throw new Error('Memory features not available');
86
+ }
87
+ return this.workerClient.search(query, options);
88
+ }
89
+ /**
90
+ * Shutdown integration
91
+ */
92
+ async shutdown() {
93
+ this.logger.info('Shutting down integration');
94
+ this.initialized = false;
95
+ this.memoryAvailable = false;
96
+ }
97
+ /**
98
+ * Get worker client (for advanced usage)
99
+ */
100
+ getWorkerClient() {
101
+ return this.workerClient;
102
+ }
103
+ /**
104
+ * Get event listeners (for advanced usage)
105
+ */
106
+ getEventListeners() {
107
+ return this.eventListeners;
108
+ }
109
+ /**
110
+ * Get context injector (for advanced usage)
111
+ */
112
+ getContextInjector() {
113
+ return this.contextInjector;
114
+ }
115
+ /**
116
+ * Check if memory features are available
117
+ */
118
+ isMemoryAvailable() {
119
+ return this.memoryAvailable;
120
+ }
121
+ }
122
+ // Create singleton instance for convenience
123
+ const defaultInstance = new ClaudeMemIntegration();
124
+ // Export the class as default, and the singleton as a named export
125
+ export default ClaudeMemIntegration;
126
+ export { defaultInstance };
127
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integration/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Map OpenCode session IDs to claude-mem session IDs
3
+ */
4
+ export declare class SessionMapper {
5
+ private mapping;
6
+ /**
7
+ * Map OpenCode session ID to claude-mem session ID
8
+ */
9
+ mapOpenCodeToClaudeMem(openCodeSessionId: string, claudeMemSessionId: number): void;
10
+ /**
11
+ * Get claude-mem session ID for OpenCode session
12
+ */
13
+ getClaudeMemSessionId(openCodeSessionId: string): number | undefined;
14
+ /**
15
+ * Get OpenCode session ID for claude-mem session
16
+ */
17
+ getOpenCodeSessionId(claudeMemSessionId: number): string | undefined;
18
+ /**
19
+ * Remove session mapping
20
+ */
21
+ unmapSession(openCodeSessionId: string): void;
22
+ /**
23
+ * Get all mappings
24
+ */
25
+ getAllMappings(): Map<string, number>;
26
+ /**
27
+ * Check if session is mapped
28
+ */
29
+ hasSession(openCodeSessionId: string): boolean;
30
+ /**
31
+ * Get number of mappings
32
+ */
33
+ size(): number;
34
+ /**
35
+ * Clear all mappings
36
+ */
37
+ clear(): void;
38
+ }
39
+ //# sourceMappingURL=session-mapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-mapper.d.ts","sourceRoot":"","sources":["../../src/integration/session-mapper.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAiC;IAEhD;;OAEG;IACH,sBAAsB,CAAC,iBAAiB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,GAAG,IAAI;IAKnF;;OAEG;IACH,qBAAqB,CAAC,iBAAiB,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpE;;OAEG;IACH,oBAAoB,CAAC,kBAAkB,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IASpE;;OAEG;IACH,YAAY,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI;IAK7C;;OAEG;IACH,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIrC;;OAEG;IACH,UAAU,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO;IAI9C;;OAEG;IACH,IAAI,IAAI,MAAM;IAId;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Map OpenCode session IDs to claude-mem session IDs
3
+ */
4
+ export class SessionMapper {
5
+ mapping = new Map();
6
+ /**
7
+ * Map OpenCode session ID to claude-mem session ID
8
+ */
9
+ mapOpenCodeToClaudeMem(openCodeSessionId, claudeMemSessionId) {
10
+ this.mapping.set(openCodeSessionId, claudeMemSessionId);
11
+ console.log(`[SESSION_MAPPER] Mapped ${openCodeSessionId} → ${claudeMemSessionId}`);
12
+ }
13
+ /**
14
+ * Get claude-mem session ID for OpenCode session
15
+ */
16
+ getClaudeMemSessionId(openCodeSessionId) {
17
+ return this.mapping.get(openCodeSessionId);
18
+ }
19
+ /**
20
+ * Get OpenCode session ID for claude-mem session
21
+ */
22
+ getOpenCodeSessionId(claudeMemSessionId) {
23
+ for (const [openCodeId, claudeMemId] of this.mapping.entries()) {
24
+ if (claudeMemId === claudeMemSessionId) {
25
+ return openCodeId;
26
+ }
27
+ }
28
+ return undefined;
29
+ }
30
+ /**
31
+ * Remove session mapping
32
+ */
33
+ unmapSession(openCodeSessionId) {
34
+ this.mapping.delete(openCodeSessionId);
35
+ console.log(`[SESSION_MAPPER] Unmapped ${openCodeSessionId}`);
36
+ }
37
+ /**
38
+ * Get all mappings
39
+ */
40
+ getAllMappings() {
41
+ return new Map(this.mapping);
42
+ }
43
+ /**
44
+ * Check if session is mapped
45
+ */
46
+ hasSession(openCodeSessionId) {
47
+ return this.mapping.has(openCodeSessionId);
48
+ }
49
+ /**
50
+ * Get number of mappings
51
+ */
52
+ size() {
53
+ return this.mapping.size;
54
+ }
55
+ /**
56
+ * Clear all mappings
57
+ */
58
+ clear() {
59
+ this.mapping.clear();
60
+ console.log('[SESSION_MAPPER] Cleared all mappings');
61
+ }
62
+ }
63
+ //# sourceMappingURL=session-mapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-mapper.js","sourceRoot":"","sources":["../../src/integration/session-mapper.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,OAAO,aAAa;IAChB,OAAO,GAAwB,IAAI,GAAG,EAAE,CAAA;IAEhD;;OAEG;IACH,sBAAsB,CAAC,iBAAyB,EAAE,kBAA0B;QAC1E,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAA;QACvD,OAAO,CAAC,GAAG,CAAC,2BAA2B,iBAAiB,MAAM,kBAAkB,EAAE,CAAC,CAAA;IACrF,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,iBAAyB;QAC7C,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IAC5C,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,kBAA0B;QAC7C,KAAK,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAC/D,IAAI,WAAW,KAAK,kBAAkB,EAAE,CAAC;gBACvC,OAAO,UAAU,CAAA;YACnB,CAAC;QACH,CAAC;QACD,OAAO,SAAS,CAAA;IAClB,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,iBAAyB;QACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAA;QACtC,OAAO,CAAC,GAAG,CAAC,6BAA6B,iBAAiB,EAAE,CAAC,CAAA;IAC/D,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC;IAED;;OAEG;IACH,UAAU,CAAC,iBAAyB;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IAC5C,CAAC;IAED;;OAEG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QACpB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;IACtD,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Test script for claude-mem OpenCode integration
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/integration/test.ts"],"names":[],"mappings":";AAEA;;GAEG"}
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * Test script for claude-mem OpenCode integration
4
+ */
5
+ import { ClaudeMemIntegration } from './index.js';
6
+ async function testIntegration() {
7
+ console.log('='.repeat(60));
8
+ console.log('claude-mem OpenCode Integration Test');
9
+ console.log('='.repeat(60));
10
+ console.log();
11
+ const integration = new ClaudeMemIntegration();
12
+ try {
13
+ // Test 1: Initialize integration
14
+ console.log('Test 1: Initializing integration...');
15
+ await integration.initialize();
16
+ console.log('✅ PASS: Integration initialized');
17
+ console.log();
18
+ // Test 2: Check status
19
+ console.log('Test 2: Getting integration status...');
20
+ const status = await integration.getStatus();
21
+ console.log('Status:');
22
+ console.log(` - Initialized: ${status.initialized}`);
23
+ console.log(` - Worker Ready: ${status.workerReady}`);
24
+ console.log(` - Project: ${status.currentProject}`);
25
+ console.log(` - Worker URL: ${status.workerUrl}`);
26
+ console.log('✅ PASS: Status retrieved');
27
+ console.log();
28
+ // Test 3: Get project context
29
+ console.log('Test 3: Getting project context...');
30
+ const context = await integration.getProjectContext();
31
+ if (context) {
32
+ console.log(`✅ PASS: Got context (${context.length} chars)`);
33
+ }
34
+ else {
35
+ console.log('⚠️ WARN: No context available (expected for new project)');
36
+ }
37
+ console.log();
38
+ // Test 4: Search memory
39
+ console.log('Test 4: Searching memory...');
40
+ try {
41
+ const searchResults = await integration.searchMemory('test');
42
+ console.log(`✅ PASS: Search returned ${Array.isArray(searchResults) ? searchResults.length : 'results'}`);
43
+ }
44
+ catch (error) {
45
+ console.log('⚠️ WARN: Search failed (expected for empty database)');
46
+ console.log(` Error: ${error}`);
47
+ }
48
+ console.log();
49
+ // Test 5: Shutdown
50
+ console.log('Test 5: Shutting down integration...');
51
+ await integration.shutdown();
52
+ console.log('✅ PASS: Integration shut down');
53
+ console.log();
54
+ console.log('='.repeat(60));
55
+ console.log('All tests completed!');
56
+ console.log('='.repeat(60));
57
+ process.exit(0);
58
+ }
59
+ catch (error) {
60
+ console.error('❌ FAIL: Test failed');
61
+ console.error(` Error: ${error}`);
62
+ console.log();
63
+ console.log('Troubleshooting:');
64
+ console.log(' 1. Ensure worker is running: npm run worker:start');
65
+ console.log(' 2. Check worker health: curl http://localhost:37777/api/health');
66
+ console.log(' 3. Check worker logs: npm run worker:tail');
67
+ console.log();
68
+ process.exit(1);
69
+ }
70
+ }
71
+ // Run tests
72
+ testIntegration();
73
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/integration/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export declare enum LogLevel {
2
+ DEBUG = 0,
3
+ INFO = 1,
4
+ WARN = 2,
5
+ ERROR = 3
6
+ }
7
+ export declare class Logger {
8
+ private context;
9
+ constructor(context: string);
10
+ debug(message: string, ...args: any[]): void;
11
+ info(message: string, ...args: any[]): void;
12
+ warn(message: string, ...args: any[]): void;
13
+ error(message: string, ...args: any[]): void;
14
+ }
15
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/integration/utils/logger.ts"],"names":[],"mappings":"AAAA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,IAAI,IAAI;IACR,IAAI,IAAI;IACR,KAAK,IAAI;CACV;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,OAAO,CAAQ;gBAEX,OAAO,EAAE,MAAM;IAI3B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAIrC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAIpC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;IAIpC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE;CAGtC"}
@@ -0,0 +1,26 @@
1
+ export var LogLevel;
2
+ (function (LogLevel) {
3
+ LogLevel[LogLevel["DEBUG"] = 0] = "DEBUG";
4
+ LogLevel[LogLevel["INFO"] = 1] = "INFO";
5
+ LogLevel[LogLevel["WARN"] = 2] = "WARN";
6
+ LogLevel[LogLevel["ERROR"] = 3] = "ERROR";
7
+ })(LogLevel || (LogLevel = {}));
8
+ export class Logger {
9
+ context;
10
+ constructor(context) {
11
+ this.context = context;
12
+ }
13
+ debug(message, ...args) {
14
+ console.log(`[${this.context}] [DEBUG] ${message}`, ...args);
15
+ }
16
+ info(message, ...args) {
17
+ console.log(`[${this.context}] [INFO] ${message}`, ...args);
18
+ }
19
+ warn(message, ...args) {
20
+ console.warn(`[${this.context}] [WARN] ${message}`, ...args);
21
+ }
22
+ error(message, ...args) {
23
+ console.error(`[${this.context}] [ERROR] ${message}`, ...args);
24
+ }
25
+ }
26
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/integration/utils/logger.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QAKX;AALD,WAAY,QAAQ;IAClB,yCAAS,CAAA;IACT,uCAAQ,CAAA;IACR,uCAAQ,CAAA;IACR,yCAAS,CAAA;AACX,CAAC,EALW,QAAQ,KAAR,QAAQ,QAKnB;AAED,MAAM,OAAO,MAAM;IACT,OAAO,CAAQ;IAEvB,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAW;QACnC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,aAAa,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;IAC9D,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW;QAClC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,YAAY,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;IAC7D,CAAC;IAED,IAAI,CAAC,OAAe,EAAE,GAAG,IAAW;QAClC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,YAAY,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;IAC9D,CAAC;IAED,KAAK,CAAC,OAAe,EAAE,GAAG,IAAW;QACnC,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,aAAa,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,CAAA;IAChE,CAAC;CACF"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Strip privacy tags from text and JSON
3
+ * Consistent with claude-mem's tag-stripping logic
4
+ */
5
+ export declare class PrivacyTagStripper {
6
+ private readonly PRIVATE_TAG_REGEX;
7
+ private readonly CONTEXT_TAG_REGEX;
8
+ /**
9
+ * Strip privacy tags from text
10
+ */
11
+ stripFromText(text: string): string;
12
+ /**
13
+ * Strip privacy tags from JSON (recursive)
14
+ */
15
+ stripFromJson(obj: any): any;
16
+ /**
17
+ * Check if text contains only private content
18
+ */
19
+ isFullyPrivate(text: string): boolean;
20
+ /**
21
+ * Check if text contains privacy tags
22
+ */
23
+ hasPrivacyTags(text: string): boolean;
24
+ /**
25
+ * Count privacy tags in text
26
+ */
27
+ countPrivacyTags(text: string): {
28
+ private: number;
29
+ context: number;
30
+ };
31
+ }
32
+ //# sourceMappingURL=privacy.d.ts.map