@eddacraft/kindling-adapter-opencode 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.
Files changed (55) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +192 -0
  3. package/dist/index.d.ts +7 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +7 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/opencode/commands/export.d.ts +67 -0
  8. package/dist/opencode/commands/export.d.ts.map +1 -0
  9. package/dist/opencode/commands/export.js +76 -0
  10. package/dist/opencode/commands/export.js.map +1 -0
  11. package/dist/opencode/commands/forget.d.ts +50 -0
  12. package/dist/opencode/commands/forget.d.ts.map +1 -0
  13. package/dist/opencode/commands/forget.js +63 -0
  14. package/dist/opencode/commands/forget.js.map +1 -0
  15. package/dist/opencode/commands/index.d.ts +11 -0
  16. package/dist/opencode/commands/index.d.ts.map +1 -0
  17. package/dist/opencode/commands/index.js +11 -0
  18. package/dist/opencode/commands/index.js.map +1 -0
  19. package/dist/opencode/commands/pin.d.ts +64 -0
  20. package/dist/opencode/commands/pin.d.ts.map +1 -0
  21. package/dist/opencode/commands/pin.js +74 -0
  22. package/dist/opencode/commands/pin.js.map +1 -0
  23. package/dist/opencode/commands/search.d.ts +43 -0
  24. package/dist/opencode/commands/search.d.ts.map +1 -0
  25. package/dist/opencode/commands/search.js +90 -0
  26. package/dist/opencode/commands/search.js.map +1 -0
  27. package/dist/opencode/commands/status.d.ts +65 -0
  28. package/dist/opencode/commands/status.d.ts.map +1 -0
  29. package/dist/opencode/commands/status.js +64 -0
  30. package/dist/opencode/commands/status.js.map +1 -0
  31. package/dist/opencode/events.d.ts +95 -0
  32. package/dist/opencode/events.d.ts.map +1 -0
  33. package/dist/opencode/events.js +19 -0
  34. package/dist/opencode/events.js.map +1 -0
  35. package/dist/opencode/filter.d.ts +88 -0
  36. package/dist/opencode/filter.d.ts.map +1 -0
  37. package/dist/opencode/filter.js +150 -0
  38. package/dist/opencode/filter.js.map +1 -0
  39. package/dist/opencode/index.d.ts +10 -0
  40. package/dist/opencode/index.d.ts.map +1 -0
  41. package/dist/opencode/index.js +10 -0
  42. package/dist/opencode/index.js.map +1 -0
  43. package/dist/opencode/mapping.d.ts +37 -0
  44. package/dist/opencode/mapping.d.ts.map +1 -0
  45. package/dist/opencode/mapping.js +160 -0
  46. package/dist/opencode/mapping.js.map +1 -0
  47. package/dist/opencode/provenance.d.ts +27 -0
  48. package/dist/opencode/provenance.d.ts.map +1 -0
  49. package/dist/opencode/provenance.js +105 -0
  50. package/dist/opencode/provenance.js.map +1 -0
  51. package/dist/opencode/session.d.ts +108 -0
  52. package/dist/opencode/session.d.ts.map +1 -0
  53. package/dist/opencode/session.js +194 -0
  54. package/dist/opencode/session.js.map +1 -0
  55. package/package.json +57 -0
@@ -0,0 +1,108 @@
1
+ /**
2
+ * OpenCode session lifecycle management
3
+ *
4
+ * Manages the lifecycle of session capsules:
5
+ * - onSessionStart: Opens a new capsule
6
+ * - onEvent: Maps events and attaches observations
7
+ * - onSessionEnd: Closes the capsule
8
+ */
9
+ import type { Capsule, CapsuleStore, Observation, ID } from '@eddacraft/kindling-core';
10
+ import type { OpenCodeEvent } from './events.js';
11
+ /**
12
+ * Session context tracking active session state
13
+ */
14
+ export interface SessionContext {
15
+ sessionId: string;
16
+ repoId?: string;
17
+ activeCapsuleId: ID;
18
+ eventCount: number;
19
+ }
20
+ /**
21
+ * Options for starting a session
22
+ */
23
+ export interface SessionStartOptions {
24
+ sessionId: string;
25
+ intent?: string;
26
+ repoId?: string;
27
+ }
28
+ /**
29
+ * Signals for ending a session
30
+ */
31
+ export interface SessionEndSignals {
32
+ reason?: string;
33
+ summaryContent?: string;
34
+ summaryConfidence?: number;
35
+ evidenceRefs?: ID[];
36
+ }
37
+ /**
38
+ * Result of processing an event
39
+ */
40
+ export interface EventProcessingResult {
41
+ observation?: Observation;
42
+ skipped?: boolean;
43
+ error?: string;
44
+ }
45
+ /**
46
+ * SessionManager manages OpenCode session lifecycles
47
+ *
48
+ * Provides hooks for session start, event processing, and session end.
49
+ * Each session gets its own capsule that collects observations.
50
+ */
51
+ export declare class SessionManager {
52
+ private store;
53
+ private activeSessions;
54
+ constructor(store: CapsuleStore & {
55
+ insertObservation(observation: Observation): void;
56
+ attachObservationToCapsule(capsuleId: ID, observationId: ID): void;
57
+ });
58
+ /**
59
+ * Start a new session
60
+ *
61
+ * Opens a capsule for the session. If a session already has an open capsule,
62
+ * returns the existing context.
63
+ *
64
+ * @param options - Session start options
65
+ * @returns Session context
66
+ */
67
+ onSessionStart(options: SessionStartOptions): SessionContext;
68
+ /**
69
+ * Process an event from the session
70
+ *
71
+ * Maps the event to an observation and attaches it to the active capsule.
72
+ *
73
+ * @param event - OpenCode event to process
74
+ * @returns Processing result with observation or skip/error
75
+ */
76
+ onEvent(event: OpenCodeEvent): EventProcessingResult;
77
+ /**
78
+ * End a session
79
+ *
80
+ * Closes the active capsule for the session.
81
+ *
82
+ * @param sessionId - Session ID to end
83
+ * @param signals - Optional signals for capsule closure
84
+ * @returns Closed capsule
85
+ */
86
+ onSessionEnd(sessionId: string, signals?: SessionEndSignals): Capsule;
87
+ /**
88
+ * Get active session context
89
+ *
90
+ * @param sessionId - Session ID
91
+ * @returns Session context or undefined
92
+ */
93
+ getSession(sessionId: string): SessionContext | undefined;
94
+ /**
95
+ * Check if session is active
96
+ *
97
+ * @param sessionId - Session ID
98
+ * @returns True if session has an active capsule
99
+ */
100
+ isSessionActive(sessionId: string): boolean;
101
+ /**
102
+ * Get all active session IDs
103
+ *
104
+ * @returns Array of active session IDs
105
+ */
106
+ getActiveSessions(): string[];
107
+ }
108
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/opencode/session.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,qBAAa,cAAc;IAIvB,OAAO,CAAC,KAAK;IAHf,OAAO,CAAC,cAAc,CAA0C;gBAGtD,KAAK,EAAE,YAAY,GAAG;QAC5B,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;QAClD,0BAA0B,CAAC,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,GAAG,IAAI,CAAC;KACpE;IAGH;;;;;;;;OAQG;IACH,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,cAAc;IAkD5D;;;;;;;OAOG;IACH,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,qBAAqB;IA+CpD;;;;;;;;OAQG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO;IA6CrE;;;;;OAKG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAIzD;;;;;OAKG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;OAIG;IACH,iBAAiB,IAAI,MAAM,EAAE;CAG9B"}
@@ -0,0 +1,194 @@
1
+ /**
2
+ * OpenCode session lifecycle management
3
+ *
4
+ * Manages the lifecycle of session capsules:
5
+ * - onSessionStart: Opens a new capsule
6
+ * - onEvent: Maps events and attaches observations
7
+ * - onSessionEnd: Closes the capsule
8
+ */
9
+ import { randomUUID } from 'crypto';
10
+ import { mapEvent } from './mapping.js';
11
+ /**
12
+ * SessionManager manages OpenCode session lifecycles
13
+ *
14
+ * Provides hooks for session start, event processing, and session end.
15
+ * Each session gets its own capsule that collects observations.
16
+ */
17
+ export class SessionManager {
18
+ store;
19
+ activeSessions = new Map();
20
+ constructor(store) {
21
+ this.store = store;
22
+ }
23
+ /**
24
+ * Start a new session
25
+ *
26
+ * Opens a capsule for the session. If a session already has an open capsule,
27
+ * returns the existing context.
28
+ *
29
+ * @param options - Session start options
30
+ * @returns Session context
31
+ */
32
+ onSessionStart(options) {
33
+ const { sessionId, intent = 'OpenCode session', repoId } = options;
34
+ // Check if session already has an open capsule
35
+ const existing = this.activeSessions.get(sessionId);
36
+ if (existing) {
37
+ return existing;
38
+ }
39
+ // Check store for existing open capsule
40
+ const existingCapsule = this.store.getOpenCapsuleForSession(sessionId);
41
+ if (existingCapsule) {
42
+ const context = {
43
+ sessionId,
44
+ repoId,
45
+ activeCapsuleId: existingCapsule.id,
46
+ eventCount: existingCapsule.observationIds.length,
47
+ };
48
+ this.activeSessions.set(sessionId, context);
49
+ return context;
50
+ }
51
+ // Create new capsule
52
+ const capsuleId = randomUUID();
53
+ const capsule = {
54
+ id: capsuleId,
55
+ type: 'session',
56
+ intent,
57
+ status: 'open',
58
+ openedAt: Date.now(),
59
+ scopeIds: {
60
+ sessionId,
61
+ ...(repoId && { repoId }),
62
+ },
63
+ observationIds: [],
64
+ };
65
+ this.store.createCapsule(capsule);
66
+ const context = {
67
+ sessionId,
68
+ repoId,
69
+ activeCapsuleId: capsuleId,
70
+ eventCount: 0,
71
+ };
72
+ this.activeSessions.set(sessionId, context);
73
+ return context;
74
+ }
75
+ /**
76
+ * Process an event from the session
77
+ *
78
+ * Maps the event to an observation and attaches it to the active capsule.
79
+ *
80
+ * @param event - OpenCode event to process
81
+ * @returns Processing result with observation or skip/error
82
+ */
83
+ onEvent(event) {
84
+ // Get active session context
85
+ const context = this.activeSessions.get(event.sessionId);
86
+ if (!context) {
87
+ return {
88
+ error: `No active session found for sessionId: ${event.sessionId}`,
89
+ };
90
+ }
91
+ // Map event to observation
92
+ const mapResult = mapEvent(event);
93
+ // Handle skip (e.g., session_start/session_end events)
94
+ if (mapResult.skip) {
95
+ return { skipped: true };
96
+ }
97
+ // Handle mapping errors
98
+ if (mapResult.error) {
99
+ return { error: mapResult.error };
100
+ }
101
+ if (!mapResult.observation) {
102
+ return { error: 'Mapping produced no observation' };
103
+ }
104
+ // Generate observation ID and timestamp
105
+ const observation = {
106
+ id: randomUUID(),
107
+ ts: event.timestamp,
108
+ redacted: false,
109
+ provenance: {},
110
+ ...mapResult.observation,
111
+ };
112
+ // Store observation
113
+ this.store.insertObservation(observation);
114
+ // Attach to capsule
115
+ this.store.attachObservationToCapsule(context.activeCapsuleId, observation.id);
116
+ // Update context
117
+ context.eventCount += 1;
118
+ return { observation };
119
+ }
120
+ /**
121
+ * End a session
122
+ *
123
+ * Closes the active capsule for the session.
124
+ *
125
+ * @param sessionId - Session ID to end
126
+ * @param signals - Optional signals for capsule closure
127
+ * @returns Closed capsule
128
+ */
129
+ onSessionEnd(sessionId, signals) {
130
+ const context = this.activeSessions.get(sessionId);
131
+ if (!context) {
132
+ throw new Error(`No active session found for sessionId: ${sessionId}`);
133
+ }
134
+ const closedAt = Date.now();
135
+ // Close capsule in store
136
+ this.store.closeCapsule(context.activeCapsuleId, closedAt);
137
+ // If summary provided, insert it
138
+ if (signals?.summaryContent) {
139
+ const summary = {
140
+ id: randomUUID(),
141
+ capsuleId: context.activeCapsuleId,
142
+ content: signals.summaryContent,
143
+ confidence: signals.summaryConfidence ?? 0.8,
144
+ createdAt: closedAt,
145
+ evidenceRefs: signals.evidenceRefs ?? [],
146
+ };
147
+ this.store.insertSummary(summary);
148
+ }
149
+ // Remove from active sessions
150
+ this.activeSessions.delete(sessionId);
151
+ // Return closed capsule
152
+ const capsule = {
153
+ id: context.activeCapsuleId,
154
+ type: 'session',
155
+ intent: 'OpenCode session',
156
+ status: 'closed',
157
+ openedAt: 0, // Will be filled from store if needed
158
+ closedAt,
159
+ scopeIds: {
160
+ sessionId,
161
+ ...(context.repoId && { repoId: context.repoId }),
162
+ },
163
+ observationIds: [],
164
+ };
165
+ return capsule;
166
+ }
167
+ /**
168
+ * Get active session context
169
+ *
170
+ * @param sessionId - Session ID
171
+ * @returns Session context or undefined
172
+ */
173
+ getSession(sessionId) {
174
+ return this.activeSessions.get(sessionId);
175
+ }
176
+ /**
177
+ * Check if session is active
178
+ *
179
+ * @param sessionId - Session ID
180
+ * @returns True if session has an active capsule
181
+ */
182
+ isSessionActive(sessionId) {
183
+ return this.activeSessions.has(sessionId);
184
+ }
185
+ /**
186
+ * Get all active session IDs
187
+ *
188
+ * @returns Array of active session IDs
189
+ */
190
+ getActiveSessions() {
191
+ return Array.from(this.activeSessions.keys());
192
+ }
193
+ }
194
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/opencode/session.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,57 @@
1
+ {
2
+ "name": "@eddacraft/kindling-adapter-opencode",
3
+ "version": "0.1.0",
4
+ "description": "OpenCode session adapter for Kindling - capture tool calls, commands, and file changes from AI coding sessions",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "keywords": [
18
+ "kindling",
19
+ "opencode",
20
+ "adapter",
21
+ "session",
22
+ "ai",
23
+ "coding",
24
+ "tool-calls",
25
+ "memory"
26
+ ],
27
+ "author": "EddaCraft <hello@eddacraft.ai>",
28
+ "homepage": "https://github.com/EddaCraft/kindling/tree/main/packages/kindling-adapter-opencode#readme",
29
+ "repository": {
30
+ "type": "git",
31
+ "url": "git+https://github.com/EddaCraft/kindling.git",
32
+ "directory": "packages/kindling-adapter-opencode"
33
+ },
34
+ "bugs": {
35
+ "url": "https://github.com/EddaCraft/kindling/issues"
36
+ },
37
+ "license": "Apache-2.0",
38
+ "dependencies": {
39
+ "@eddacraft/kindling-core": "0.1.0"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^20.11.0",
43
+ "typescript": "^5.3.0",
44
+ "vitest": "^3.2.4"
45
+ },
46
+ "publishConfig": {
47
+ "access": "public"
48
+ },
49
+ "scripts": {
50
+ "build": "tsc --build",
51
+ "test": "vitest run",
52
+ "test:watch": "vitest",
53
+ "type-check": "tsc --noEmit",
54
+ "lint": "eslint src",
55
+ "clean": "rm -rf dist"
56
+ }
57
+ }