@eddacraft/kindling-core 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/LICENSE +190 -0
- package/README.md +187 -0
- package/dist/capsule/index.d.ts +10 -0
- package/dist/capsule/index.d.ts.map +1 -0
- package/dist/capsule/index.js +10 -0
- package/dist/capsule/index.js.map +1 -0
- package/dist/capsule/lifecycle.d.ts +63 -0
- package/dist/capsule/lifecycle.d.ts.map +1 -0
- package/dist/capsule/lifecycle.js +108 -0
- package/dist/capsule/lifecycle.js.map +1 -0
- package/dist/capsule/manager.d.ts +79 -0
- package/dist/capsule/manager.d.ts.map +1 -0
- package/dist/capsule/manager.js +113 -0
- package/dist/capsule/manager.js.map +1 -0
- package/dist/capsule/types.d.ts +79 -0
- package/dist/capsule/types.d.ts.map +1 -0
- package/dist/capsule/types.js +5 -0
- package/dist/capsule/types.js.map +1 -0
- package/dist/export/bundle.d.ts +125 -0
- package/dist/export/bundle.d.ts.map +1 -0
- package/dist/export/bundle.js +136 -0
- package/dist/export/bundle.js.map +1 -0
- package/dist/export/index.d.ts +8 -0
- package/dist/export/index.d.ts.map +1 -0
- package/dist/export/index.js +8 -0
- package/dist/export/index.js.map +1 -0
- package/dist/export/restore.d.ts +111 -0
- package/dist/export/restore.d.ts.map +1 -0
- package/dist/export/restore.js +149 -0
- package/dist/export/restore.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/retrieval/index.d.ts +8 -0
- package/dist/retrieval/index.d.ts.map +1 -0
- package/dist/retrieval/index.js +8 -0
- package/dist/retrieval/index.js.map +1 -0
- package/dist/retrieval/orchestrator.d.ts +50 -0
- package/dist/retrieval/orchestrator.d.ts.map +1 -0
- package/dist/retrieval/orchestrator.js +86 -0
- package/dist/retrieval/orchestrator.js.map +1 -0
- package/dist/retrieval/tiering.d.ts +76 -0
- package/dist/retrieval/tiering.d.ts.map +1 -0
- package/dist/retrieval/tiering.js +122 -0
- package/dist/retrieval/tiering.js.map +1 -0
- package/dist/service/index.d.ts +6 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/service/index.js +5 -0
- package/dist/service/index.js.map +1 -0
- package/dist/service/kindling-service.d.ts +219 -0
- package/dist/service/kindling-service.d.ts.map +1 -0
- package/dist/service/kindling-service.js +260 -0
- package/dist/service/kindling-service.js.map +1 -0
- package/dist/types/capsule.d.ts +80 -0
- package/dist/types/capsule.d.ts.map +1 -0
- package/dist/types/capsule.js +33 -0
- package/dist/types/capsule.js.map +1 -0
- package/dist/types/common.d.ts +56 -0
- package/dist/types/common.d.ts.map +1 -0
- package/dist/types/common.js +16 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/index.d.ts +17 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/observation.d.ts +60 -0
- package/dist/types/observation.d.ts.map +1 -0
- package/dist/types/observation.js +27 -0
- package/dist/types/observation.js.map +1 -0
- package/dist/types/pin.d.ts +65 -0
- package/dist/types/pin.d.ts.map +1 -0
- package/dist/types/pin.js +26 -0
- package/dist/types/pin.js.map +1 -0
- package/dist/types/retrieval.d.ts +81 -0
- package/dist/types/retrieval.d.ts.map +1 -0
- package/dist/types/retrieval.js +5 -0
- package/dist/types/retrieval.js.map +1 -0
- package/dist/types/summary.d.ts +49 -0
- package/dist/types/summary.d.ts.map +1 -0
- package/dist/types/summary.js +13 -0
- package/dist/types/summary.js.map +1 -0
- package/dist/validation/capsule.d.ts +18 -0
- package/dist/validation/capsule.d.ts.map +1 -0
- package/dist/validation/capsule.js +143 -0
- package/dist/validation/capsule.js.map +1 -0
- package/dist/validation/index.d.ts +8 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +8 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/validation/observation.d.ts +18 -0
- package/dist/validation/observation.d.ts.map +1 -0
- package/dist/validation/observation.js +110 -0
- package/dist/validation/observation.js.map +1 -0
- package/dist/validation/pin.d.ts +16 -0
- package/dist/validation/pin.d.ts.map +1 -0
- package/dist/validation/pin.js +116 -0
- package/dist/validation/pin.js.map +1 -0
- package/dist/validation/summary.d.ts +16 -0
- package/dist/validation/summary.d.ts.map +1 -0
- package/dist/validation/summary.js +117 -0
- package/dist/validation/summary.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KindlingService - Main orchestration service
|
|
3
|
+
*
|
|
4
|
+
* Provides a unified API that combines:
|
|
5
|
+
* - Capsule lifecycle management
|
|
6
|
+
* - Observation ingestion
|
|
7
|
+
* - Retrieval orchestration
|
|
8
|
+
* - Pin management
|
|
9
|
+
* - Export/import coordination
|
|
10
|
+
*/
|
|
11
|
+
import type { ID, ScopeIds } from '../types/common.js';
|
|
12
|
+
import type { Observation } from '../types/observation.js';
|
|
13
|
+
import type { Capsule } from '../types/capsule.js';
|
|
14
|
+
import type { Summary } from '../types/summary.js';
|
|
15
|
+
import type { Pin } from '../types/pin.js';
|
|
16
|
+
import type { RetrieveOptions, RetrieveResult, RetrievalProvider } from '../types/retrieval.js';
|
|
17
|
+
import type { OpenCapsuleOptions } from '../capsule/types.js';
|
|
18
|
+
import type { RetrievalStore } from '../retrieval/orchestrator.js';
|
|
19
|
+
import type { ExportStore } from '../export/bundle.js';
|
|
20
|
+
import type { ImportStore } from '../export/restore.js';
|
|
21
|
+
import { type ExportBundle, type ExportBundleOptions, type ExportStats } from '../export/bundle.js';
|
|
22
|
+
import { type ImportOptions, type ImportResult } from '../export/restore.js';
|
|
23
|
+
/**
|
|
24
|
+
* Store interface required by KindlingService
|
|
25
|
+
*/
|
|
26
|
+
export interface KindlingStore extends RetrievalStore, ExportStore, ImportStore {
|
|
27
|
+
insertObservation(observation: Observation): void;
|
|
28
|
+
createCapsule(capsule: Capsule): void;
|
|
29
|
+
closeCapsule(capsuleId: ID, closedAt?: number): void;
|
|
30
|
+
attachObservationToCapsule(capsuleId: ID, observationId: ID): void;
|
|
31
|
+
createSummary(summary: Summary): void;
|
|
32
|
+
createPin(pin: Pin): void;
|
|
33
|
+
removePin(pinId: ID): void;
|
|
34
|
+
redactObservation(observationId: ID): void;
|
|
35
|
+
getCapsule(capsuleId: ID): Capsule | undefined;
|
|
36
|
+
getOpenCapsuleForSession(sessionId: string): Capsule | undefined;
|
|
37
|
+
getObservationById(observationId: ID): Observation | undefined;
|
|
38
|
+
getSummaryById(summaryId: ID): Summary | undefined;
|
|
39
|
+
getLatestSummaryForCapsule(capsuleId: ID): Summary | undefined;
|
|
40
|
+
listActivePins(scopeIds?: Partial<Record<string, string>>, now?: number): Pin[];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Options for appendObservation
|
|
44
|
+
*/
|
|
45
|
+
export interface AppendObservationOptions {
|
|
46
|
+
capsuleId?: ID;
|
|
47
|
+
validate?: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Options for creating a pin
|
|
51
|
+
*/
|
|
52
|
+
export interface CreatePinOptions {
|
|
53
|
+
targetType: 'observation' | 'summary';
|
|
54
|
+
targetId: ID;
|
|
55
|
+
note?: string;
|
|
56
|
+
ttlMs?: number;
|
|
57
|
+
scopeIds?: Partial<ScopeIds>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Options for closing a capsule
|
|
61
|
+
*/
|
|
62
|
+
export interface CloseCapsuleOptions {
|
|
63
|
+
generateSummary?: boolean;
|
|
64
|
+
summaryContent?: string;
|
|
65
|
+
confidence?: number;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* KindlingService configuration
|
|
69
|
+
*/
|
|
70
|
+
export interface KindlingServiceConfig {
|
|
71
|
+
store: KindlingStore;
|
|
72
|
+
provider: RetrievalProvider;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Main Kindling service
|
|
76
|
+
*
|
|
77
|
+
* Provides a unified API for all Kindling operations.
|
|
78
|
+
*/
|
|
79
|
+
export declare class KindlingService {
|
|
80
|
+
private store;
|
|
81
|
+
private provider;
|
|
82
|
+
private capsuleManager;
|
|
83
|
+
constructor(config: KindlingServiceConfig);
|
|
84
|
+
/**
|
|
85
|
+
* Open a new capsule
|
|
86
|
+
*
|
|
87
|
+
* @param options - Capsule creation options
|
|
88
|
+
* @returns The created capsule
|
|
89
|
+
*/
|
|
90
|
+
openCapsule(options: OpenCapsuleOptions): Capsule;
|
|
91
|
+
/**
|
|
92
|
+
* Close a capsule
|
|
93
|
+
*
|
|
94
|
+
* @param capsuleId - ID of capsule to close
|
|
95
|
+
* @param options - Closure options
|
|
96
|
+
* @returns The closed capsule
|
|
97
|
+
*/
|
|
98
|
+
closeCapsule(capsuleId: ID, options?: CloseCapsuleOptions): Capsule;
|
|
99
|
+
/**
|
|
100
|
+
* Append an observation
|
|
101
|
+
*
|
|
102
|
+
* @param observation - Observation to append
|
|
103
|
+
* @param options - Append options
|
|
104
|
+
*/
|
|
105
|
+
appendObservation(observation: Observation, options?: AppendObservationOptions): void;
|
|
106
|
+
/**
|
|
107
|
+
* Retrieve relevant context
|
|
108
|
+
*
|
|
109
|
+
* @param options - Retrieval options
|
|
110
|
+
* @returns Retrieval result with pins, summary, and candidates
|
|
111
|
+
*/
|
|
112
|
+
retrieve(options: RetrieveOptions): Promise<RetrieveResult>;
|
|
113
|
+
/**
|
|
114
|
+
* Create a pin
|
|
115
|
+
*
|
|
116
|
+
* @param options - Pin creation options
|
|
117
|
+
* @returns The created pin
|
|
118
|
+
*/
|
|
119
|
+
pin(options: CreatePinOptions): Pin;
|
|
120
|
+
/**
|
|
121
|
+
* Remove a pin
|
|
122
|
+
*
|
|
123
|
+
* @param pinId - ID of pin to remove
|
|
124
|
+
*/
|
|
125
|
+
unpin(pinId: ID): void;
|
|
126
|
+
/**
|
|
127
|
+
* Redact an observation
|
|
128
|
+
*
|
|
129
|
+
* Removes content but preserves structure for provenance.
|
|
130
|
+
*
|
|
131
|
+
* @param observationId - ID of observation to redact
|
|
132
|
+
*/
|
|
133
|
+
forget(observationId: ID): void;
|
|
134
|
+
/**
|
|
135
|
+
* Get a capsule by ID
|
|
136
|
+
*
|
|
137
|
+
* @param capsuleId - Capsule ID
|
|
138
|
+
* @returns Capsule or undefined if not found
|
|
139
|
+
*/
|
|
140
|
+
getCapsule(capsuleId: ID): Capsule | undefined;
|
|
141
|
+
/**
|
|
142
|
+
* Get open capsule for a session
|
|
143
|
+
*
|
|
144
|
+
* @param sessionId - Session ID
|
|
145
|
+
* @returns Open capsule or undefined
|
|
146
|
+
*/
|
|
147
|
+
getOpenCapsule(sessionId: string): Capsule | undefined;
|
|
148
|
+
/**
|
|
149
|
+
* Get observation by ID
|
|
150
|
+
*
|
|
151
|
+
* @param observationId - Observation ID
|
|
152
|
+
* @returns Observation or undefined if not found
|
|
153
|
+
*/
|
|
154
|
+
getObservation(observationId: ID): Observation | undefined;
|
|
155
|
+
/**
|
|
156
|
+
* Get summary by ID
|
|
157
|
+
*
|
|
158
|
+
* @param summaryId - Summary ID
|
|
159
|
+
* @returns Summary or undefined if not found
|
|
160
|
+
*/
|
|
161
|
+
getSummary(summaryId: ID): Summary | undefined;
|
|
162
|
+
/**
|
|
163
|
+
* List active pins for a scope
|
|
164
|
+
*
|
|
165
|
+
* @param scopeIds - Scope to filter by
|
|
166
|
+
* @returns Array of active pins
|
|
167
|
+
*/
|
|
168
|
+
listPins(scopeIds?: Partial<ScopeIds>): Pin[];
|
|
169
|
+
/**
|
|
170
|
+
* Export database to a portable bundle
|
|
171
|
+
*
|
|
172
|
+
* @param options - Export options
|
|
173
|
+
* @returns Export bundle with dataset and metadata
|
|
174
|
+
*/
|
|
175
|
+
export(options?: ExportBundleOptions): ExportBundle;
|
|
176
|
+
/**
|
|
177
|
+
* Export database to JSON string
|
|
178
|
+
*
|
|
179
|
+
* @param options - Export options
|
|
180
|
+
* @param pretty - Use pretty formatting (default: false)
|
|
181
|
+
* @returns JSON string
|
|
182
|
+
*/
|
|
183
|
+
exportToJson(options?: ExportBundleOptions, pretty?: boolean): string;
|
|
184
|
+
/**
|
|
185
|
+
* Import from export bundle
|
|
186
|
+
*
|
|
187
|
+
* @param bundle - Export bundle to import
|
|
188
|
+
* @param options - Import options
|
|
189
|
+
* @returns Import result with counts and errors
|
|
190
|
+
*/
|
|
191
|
+
import(bundle: ExportBundle, options?: ImportOptions): ImportResult;
|
|
192
|
+
/**
|
|
193
|
+
* Import from JSON string
|
|
194
|
+
*
|
|
195
|
+
* @param json - JSON string containing export bundle
|
|
196
|
+
* @param options - Import options
|
|
197
|
+
* @returns Import result with counts and errors
|
|
198
|
+
*/
|
|
199
|
+
importFromJson(json: string, options?: ImportOptions): ImportResult;
|
|
200
|
+
/**
|
|
201
|
+
* Get statistics for an export bundle
|
|
202
|
+
*
|
|
203
|
+
* @param bundle - Export bundle
|
|
204
|
+
* @returns Statistics about bundle contents
|
|
205
|
+
*/
|
|
206
|
+
getBundleStats(bundle: ExportBundle): ExportStats;
|
|
207
|
+
/**
|
|
208
|
+
* Merge multiple export bundles
|
|
209
|
+
*
|
|
210
|
+
* @param bundles - Bundles to merge
|
|
211
|
+
* @param metadata - Optional metadata for merged bundle
|
|
212
|
+
* @returns Merged bundle
|
|
213
|
+
*/
|
|
214
|
+
mergeBundles(bundles: ExportBundle[], metadata?: {
|
|
215
|
+
description?: string;
|
|
216
|
+
tags?: string[];
|
|
217
|
+
}): ExportBundle;
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=kindling-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kindling-service.d.ts","sourceRoot":"","sources":["../../src/service/kindling-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAChG,OAAO,KAAK,EAAE,kBAAkB,EAAuB,MAAM,qBAAqB,CAAC;AAGnF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAInE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAKL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,cAAc,EAAE,WAAW,EAAE,WAAW;IAE7E,iBAAiB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAClD,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACtC,YAAY,CAAC,SAAS,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrD,0BAA0B,CAAC,SAAS,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,GAAG,IAAI,CAAC;IACnE,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACtC,SAAS,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,SAAS,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI,CAAC;IAC3B,iBAAiB,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI,CAAC;IAG3C,UAAU,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,GAAG,SAAS,CAAC;IAC/C,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IACjE,kBAAkB,CAAC,aAAa,EAAE,EAAE,GAAG,WAAW,GAAG,SAAS,CAAC;IAC/D,cAAc,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,GAAG,SAAS,CAAC;IACnD,0BAA0B,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,GAAG,SAAS,CAAC;IAC/D,cAAc,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;CACjF;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,SAAS,CAAC,EAAE,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,aAAa,GAAG,SAAS,CAAC;IACtC,QAAQ,EAAE,EAAE,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,cAAc,CAAiB;gBAE3B,MAAM,EAAE,qBAAqB;IAczC;;;;;OAKG;IACH,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO;IAIjD;;;;;;OAMG;IACH,YAAY,CAAC,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO;IA2BnE;;;;;OAKG;IACH,iBAAiB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,IAAI;IAuBrF;;;;;OAKG;IACG,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAIjE;;;;;OAKG;IACH,GAAG,CAAC,OAAO,EAAE,gBAAgB,GAAG,GAAG;IAsBnC;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,EAAE,GAAG,IAAI;IAItB;;;;;;OAMG;IACH,MAAM,CAAC,aAAa,EAAE,EAAE,GAAG,IAAI;IAI/B;;;;;OAKG;IACH,UAAU,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,GAAG,SAAS;IAI9C;;;;;OAKG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAItD;;;;;OAKG;IACH,cAAc,CAAC,aAAa,EAAE,EAAE,GAAG,WAAW,GAAG,SAAS;IAI1D;;;;;OAKG;IACH,UAAU,CAAC,SAAS,EAAE,EAAE,GAAG,OAAO,GAAG,SAAS;IAI9C;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,GAAG,EAAE;IAI7C;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,YAAY;IAInD;;;;;;OAMG;IACH,YAAY,CAAC,OAAO,CAAC,EAAE,mBAAmB,EAAE,MAAM,UAAQ,GAAG,MAAM;IAKnE;;;;;;OAMG;IACH,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY;IAInE;;;;;;OAMG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,YAAY;IAKnE;;;;;OAKG;IACH,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,WAAW;IAIjD;;;;;;OAMG;IACH,YAAY,CACV,OAAO,EAAE,YAAY,EAAE,EACvB,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACnD,YAAY;CAGhB"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KindlingService - Main orchestration service
|
|
3
|
+
*
|
|
4
|
+
* Provides a unified API that combines:
|
|
5
|
+
* - Capsule lifecycle management
|
|
6
|
+
* - Observation ingestion
|
|
7
|
+
* - Retrieval orchestration
|
|
8
|
+
* - Pin management
|
|
9
|
+
* - Export/import coordination
|
|
10
|
+
*/
|
|
11
|
+
import { CapsuleManager } from '../capsule/manager.js';
|
|
12
|
+
import { retrieve as retrieveOrchestrator } from '../retrieval/orchestrator.js';
|
|
13
|
+
import { validateObservation } from '../validation/observation.js';
|
|
14
|
+
import { validatePin } from '../validation/pin.js';
|
|
15
|
+
import { validateSummary } from '../validation/summary.js';
|
|
16
|
+
import { createExportBundle, getBundleStats, serializeBundle, deserializeBundle, } from '../export/bundle.js';
|
|
17
|
+
import { restoreFromBundle, mergeBundles, } from '../export/restore.js';
|
|
18
|
+
/**
|
|
19
|
+
* Main Kindling service
|
|
20
|
+
*
|
|
21
|
+
* Provides a unified API for all Kindling operations.
|
|
22
|
+
*/
|
|
23
|
+
export class KindlingService {
|
|
24
|
+
store;
|
|
25
|
+
provider;
|
|
26
|
+
capsuleManager;
|
|
27
|
+
constructor(config) {
|
|
28
|
+
this.store = config.store;
|
|
29
|
+
this.provider = config.provider;
|
|
30
|
+
this.capsuleManager = new CapsuleManager({
|
|
31
|
+
createCapsule: (capsule) => this.store.createCapsule(capsule),
|
|
32
|
+
closeCapsule: (capsuleId, closedAt) => this.store.closeCapsule(capsuleId, closedAt),
|
|
33
|
+
getCapsuleById: (capsuleId) => this.store.getCapsule(capsuleId),
|
|
34
|
+
getOpenCapsuleForSession: (sessionId) => this.store.getOpenCapsuleForSession(sessionId),
|
|
35
|
+
insertSummary: (summary) => this.store.createSummary(summary),
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Open a new capsule
|
|
40
|
+
*
|
|
41
|
+
* @param options - Capsule creation options
|
|
42
|
+
* @returns The created capsule
|
|
43
|
+
*/
|
|
44
|
+
openCapsule(options) {
|
|
45
|
+
return this.capsuleManager.open(options);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Close a capsule
|
|
49
|
+
*
|
|
50
|
+
* @param capsuleId - ID of capsule to close
|
|
51
|
+
* @param options - Closure options
|
|
52
|
+
* @returns The closed capsule
|
|
53
|
+
*/
|
|
54
|
+
closeCapsule(capsuleId, options) {
|
|
55
|
+
const signals = {};
|
|
56
|
+
// Generate summary if requested
|
|
57
|
+
if (options?.generateSummary && options.summaryContent) {
|
|
58
|
+
const summary = {
|
|
59
|
+
id: `sum_${crypto.randomUUID()}`,
|
|
60
|
+
capsuleId,
|
|
61
|
+
content: options.summaryContent,
|
|
62
|
+
confidence: options.confidence ?? 1.0,
|
|
63
|
+
createdAt: Date.now(),
|
|
64
|
+
evidenceRefs: [],
|
|
65
|
+
};
|
|
66
|
+
// Validate and store summary
|
|
67
|
+
const validation = validateSummary(summary);
|
|
68
|
+
if (!validation.ok) {
|
|
69
|
+
const errorMessages = validation.error.map(e => e.message).join(', ');
|
|
70
|
+
throw new Error(`Invalid summary: ${errorMessages}`);
|
|
71
|
+
}
|
|
72
|
+
this.store.createSummary(validation.value);
|
|
73
|
+
}
|
|
74
|
+
return this.capsuleManager.close(capsuleId, signals);
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Append an observation
|
|
78
|
+
*
|
|
79
|
+
* @param observation - Observation to append
|
|
80
|
+
* @param options - Append options
|
|
81
|
+
*/
|
|
82
|
+
appendObservation(observation, options) {
|
|
83
|
+
// Validate observation if requested (default: true)
|
|
84
|
+
let obsToStore = observation;
|
|
85
|
+
if (options?.validate !== false) {
|
|
86
|
+
const validation = validateObservation(observation);
|
|
87
|
+
if (!validation.ok) {
|
|
88
|
+
const errorMessages = validation.error.map(e => e.message).join(', ');
|
|
89
|
+
throw new Error(`Invalid observation: ${errorMessages}`);
|
|
90
|
+
}
|
|
91
|
+
obsToStore = validation.value;
|
|
92
|
+
}
|
|
93
|
+
// Store observation
|
|
94
|
+
this.store.insertObservation(obsToStore);
|
|
95
|
+
// Attach to capsule if specified
|
|
96
|
+
if (options?.capsuleId) {
|
|
97
|
+
this.store.attachObservationToCapsule(options.capsuleId, obsToStore.id);
|
|
98
|
+
// Update the capsule manager's cache
|
|
99
|
+
this.capsuleManager.notifyObservationAttached(options.capsuleId, obsToStore.id);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Retrieve relevant context
|
|
104
|
+
*
|
|
105
|
+
* @param options - Retrieval options
|
|
106
|
+
* @returns Retrieval result with pins, summary, and candidates
|
|
107
|
+
*/
|
|
108
|
+
async retrieve(options) {
|
|
109
|
+
return retrieveOrchestrator(this.store, this.provider, options);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Create a pin
|
|
113
|
+
*
|
|
114
|
+
* @param options - Pin creation options
|
|
115
|
+
* @returns The created pin
|
|
116
|
+
*/
|
|
117
|
+
pin(options) {
|
|
118
|
+
const pin = {
|
|
119
|
+
id: `pin_${crypto.randomUUID()}`,
|
|
120
|
+
targetType: options.targetType,
|
|
121
|
+
targetId: options.targetId,
|
|
122
|
+
reason: options.note,
|
|
123
|
+
createdAt: Date.now(),
|
|
124
|
+
expiresAt: options.ttlMs ? Date.now() + options.ttlMs : undefined,
|
|
125
|
+
scopeIds: options.scopeIds ?? {},
|
|
126
|
+
};
|
|
127
|
+
// Validate pin
|
|
128
|
+
const validation = validatePin(pin);
|
|
129
|
+
if (!validation.ok) {
|
|
130
|
+
const errorMessages = validation.error.map(e => e.message).join(', ');
|
|
131
|
+
throw new Error(`Invalid pin: ${errorMessages}`);
|
|
132
|
+
}
|
|
133
|
+
this.store.createPin(validation.value);
|
|
134
|
+
return validation.value;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Remove a pin
|
|
138
|
+
*
|
|
139
|
+
* @param pinId - ID of pin to remove
|
|
140
|
+
*/
|
|
141
|
+
unpin(pinId) {
|
|
142
|
+
this.store.removePin(pinId);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Redact an observation
|
|
146
|
+
*
|
|
147
|
+
* Removes content but preserves structure for provenance.
|
|
148
|
+
*
|
|
149
|
+
* @param observationId - ID of observation to redact
|
|
150
|
+
*/
|
|
151
|
+
forget(observationId) {
|
|
152
|
+
this.store.redactObservation(observationId);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Get a capsule by ID
|
|
156
|
+
*
|
|
157
|
+
* @param capsuleId - Capsule ID
|
|
158
|
+
* @returns Capsule or undefined if not found
|
|
159
|
+
*/
|
|
160
|
+
getCapsule(capsuleId) {
|
|
161
|
+
return this.capsuleManager.get(capsuleId);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Get open capsule for a session
|
|
165
|
+
*
|
|
166
|
+
* @param sessionId - Session ID
|
|
167
|
+
* @returns Open capsule or undefined
|
|
168
|
+
*/
|
|
169
|
+
getOpenCapsule(sessionId) {
|
|
170
|
+
return this.capsuleManager.getOpen({ sessionId });
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get observation by ID
|
|
174
|
+
*
|
|
175
|
+
* @param observationId - Observation ID
|
|
176
|
+
* @returns Observation or undefined if not found
|
|
177
|
+
*/
|
|
178
|
+
getObservation(observationId) {
|
|
179
|
+
return this.store.getObservationById(observationId);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Get summary by ID
|
|
183
|
+
*
|
|
184
|
+
* @param summaryId - Summary ID
|
|
185
|
+
* @returns Summary or undefined if not found
|
|
186
|
+
*/
|
|
187
|
+
getSummary(summaryId) {
|
|
188
|
+
return this.store.getSummaryById(summaryId);
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* List active pins for a scope
|
|
192
|
+
*
|
|
193
|
+
* @param scopeIds - Scope to filter by
|
|
194
|
+
* @returns Array of active pins
|
|
195
|
+
*/
|
|
196
|
+
listPins(scopeIds) {
|
|
197
|
+
return this.store.listActivePins(scopeIds, Date.now());
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Export database to a portable bundle
|
|
201
|
+
*
|
|
202
|
+
* @param options - Export options
|
|
203
|
+
* @returns Export bundle with dataset and metadata
|
|
204
|
+
*/
|
|
205
|
+
export(options) {
|
|
206
|
+
return createExportBundle(this.store, options);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Export database to JSON string
|
|
210
|
+
*
|
|
211
|
+
* @param options - Export options
|
|
212
|
+
* @param pretty - Use pretty formatting (default: false)
|
|
213
|
+
* @returns JSON string
|
|
214
|
+
*/
|
|
215
|
+
exportToJson(options, pretty = false) {
|
|
216
|
+
const bundle = this.export(options);
|
|
217
|
+
return serializeBundle(bundle, pretty);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Import from export bundle
|
|
221
|
+
*
|
|
222
|
+
* @param bundle - Export bundle to import
|
|
223
|
+
* @param options - Import options
|
|
224
|
+
* @returns Import result with counts and errors
|
|
225
|
+
*/
|
|
226
|
+
import(bundle, options) {
|
|
227
|
+
return restoreFromBundle(this.store, bundle, options);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Import from JSON string
|
|
231
|
+
*
|
|
232
|
+
* @param json - JSON string containing export bundle
|
|
233
|
+
* @param options - Import options
|
|
234
|
+
* @returns Import result with counts and errors
|
|
235
|
+
*/
|
|
236
|
+
importFromJson(json, options) {
|
|
237
|
+
const bundle = deserializeBundle(json);
|
|
238
|
+
return this.import(bundle, options);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get statistics for an export bundle
|
|
242
|
+
*
|
|
243
|
+
* @param bundle - Export bundle
|
|
244
|
+
* @returns Statistics about bundle contents
|
|
245
|
+
*/
|
|
246
|
+
getBundleStats(bundle) {
|
|
247
|
+
return getBundleStats(bundle);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Merge multiple export bundles
|
|
251
|
+
*
|
|
252
|
+
* @param bundles - Bundles to merge
|
|
253
|
+
* @param metadata - Optional metadata for merged bundle
|
|
254
|
+
* @returns Merged bundle
|
|
255
|
+
*/
|
|
256
|
+
mergeBundles(bundles, metadata) {
|
|
257
|
+
return mergeBundles(bundles, metadata);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=kindling-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kindling-service.js","sourceRoot":"","sources":["../../src/service/kindling-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capsule types and definitions
|
|
3
|
+
*
|
|
4
|
+
* A Capsule is a bounded unit of meaning that groups related observations
|
|
5
|
+
* (e.g., a session, a workflow node)
|
|
6
|
+
*/
|
|
7
|
+
import type { ID, Timestamp, ScopeIds } from './common.js';
|
|
8
|
+
/**
|
|
9
|
+
* Types of capsules
|
|
10
|
+
*/
|
|
11
|
+
export type CapsuleType = 'session' | 'pocketflow_node';
|
|
12
|
+
/**
|
|
13
|
+
* Capsule lifecycle status
|
|
14
|
+
*/
|
|
15
|
+
export type CapsuleStatus = 'open' | 'closed';
|
|
16
|
+
/**
|
|
17
|
+
* Capsule entity
|
|
18
|
+
*
|
|
19
|
+
* Immutable except for:
|
|
20
|
+
* - status (transitions from 'open' to 'closed')
|
|
21
|
+
* - closedAt (set when status changes to 'closed')
|
|
22
|
+
*/
|
|
23
|
+
export interface Capsule {
|
|
24
|
+
/** Unique identifier (UUIDv4) */
|
|
25
|
+
id: ID;
|
|
26
|
+
/** Type of capsule */
|
|
27
|
+
type: CapsuleType;
|
|
28
|
+
/**
|
|
29
|
+
* Human-readable description of capsule purpose
|
|
30
|
+
* e.g., "Fix authentication bug"
|
|
31
|
+
*/
|
|
32
|
+
intent: string;
|
|
33
|
+
/** Lifecycle state */
|
|
34
|
+
status: CapsuleStatus;
|
|
35
|
+
/** Timestamp when capsule was opened (epoch milliseconds) */
|
|
36
|
+
openedAt: Timestamp;
|
|
37
|
+
/** Timestamp when capsule was closed (epoch milliseconds, undefined if open) */
|
|
38
|
+
closedAt?: Timestamp;
|
|
39
|
+
/** Isolation dimensions for scoped queries */
|
|
40
|
+
scopeIds: ScopeIds;
|
|
41
|
+
/**
|
|
42
|
+
* Ordered list of observation IDs attached to this capsule
|
|
43
|
+
* Order is deterministic (insertion order)
|
|
44
|
+
*/
|
|
45
|
+
observationIds: ID[];
|
|
46
|
+
/** Optional reference to summary for this capsule */
|
|
47
|
+
summaryId?: ID;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Input for creating a new capsule
|
|
51
|
+
* Makes id, openedAt, status, observationIds, and summaryId optional
|
|
52
|
+
*/
|
|
53
|
+
export interface CapsuleInput {
|
|
54
|
+
id?: ID;
|
|
55
|
+
type: CapsuleType;
|
|
56
|
+
intent: string;
|
|
57
|
+
status?: CapsuleStatus;
|
|
58
|
+
openedAt?: Timestamp;
|
|
59
|
+
closedAt?: Timestamp;
|
|
60
|
+
scopeIds: ScopeIds;
|
|
61
|
+
observationIds?: ID[];
|
|
62
|
+
summaryId?: ID;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* All valid capsule types
|
|
66
|
+
*/
|
|
67
|
+
export declare const CAPSULE_TYPES: readonly CapsuleType[];
|
|
68
|
+
/**
|
|
69
|
+
* All valid capsule statuses
|
|
70
|
+
*/
|
|
71
|
+
export declare const CAPSULE_STATUSES: readonly CapsuleStatus[];
|
|
72
|
+
/**
|
|
73
|
+
* Type guard to check if a string is a valid CapsuleType
|
|
74
|
+
*/
|
|
75
|
+
export declare function isCapsuleType(value: unknown): value is CapsuleType;
|
|
76
|
+
/**
|
|
77
|
+
* Type guard to check if a string is a valid CapsuleStatus
|
|
78
|
+
*/
|
|
79
|
+
export declare function isCapsuleStatus(value: unknown): value is CapsuleStatus;
|
|
80
|
+
//# sourceMappingURL=capsule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capsule.d.ts","sourceRoot":"","sources":["../../src/types/capsule.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE3D;;GAEG;AACH,MAAM,MAAM,WAAW,GACnB,SAAS,GACT,iBAAiB,CAAC;AAEtB;;GAEG;AACH,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,QAAQ,CAAC;AAEb;;;;;;GAMG;AACH,MAAM,WAAW,OAAO;IACtB,iCAAiC;IACjC,EAAE,EAAE,EAAE,CAAC;IAEP,sBAAsB;IACtB,IAAI,EAAE,WAAW,CAAC;IAElB;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf,sBAAsB;IACtB,MAAM,EAAE,aAAa,CAAC;IAEtB,6DAA6D;IAC7D,QAAQ,EAAE,SAAS,CAAC;IAEpB,gFAAgF;IAChF,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,8CAA8C;IAC9C,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;;OAGG;IACH,cAAc,EAAE,EAAE,EAAE,CAAC;IAErB,qDAAqD;IACrD,SAAS,CAAC,EAAE,EAAE,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,EAAE,CAAC;IACR,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,EAAE,CAAC;CAChB;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAGtC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,aAAa,EAG3C,CAAC;AAEX;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAEtE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Capsule types and definitions
|
|
3
|
+
*
|
|
4
|
+
* A Capsule is a bounded unit of meaning that groups related observations
|
|
5
|
+
* (e.g., a session, a workflow node)
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* All valid capsule types
|
|
9
|
+
*/
|
|
10
|
+
export const CAPSULE_TYPES = [
|
|
11
|
+
'session',
|
|
12
|
+
'pocketflow_node',
|
|
13
|
+
];
|
|
14
|
+
/**
|
|
15
|
+
* All valid capsule statuses
|
|
16
|
+
*/
|
|
17
|
+
export const CAPSULE_STATUSES = [
|
|
18
|
+
'open',
|
|
19
|
+
'closed',
|
|
20
|
+
];
|
|
21
|
+
/**
|
|
22
|
+
* Type guard to check if a string is a valid CapsuleType
|
|
23
|
+
*/
|
|
24
|
+
export function isCapsuleType(value) {
|
|
25
|
+
return typeof value === 'string' && CAPSULE_TYPES.includes(value);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Type guard to check if a string is a valid CapsuleStatus
|
|
29
|
+
*/
|
|
30
|
+
export function isCapsuleStatus(value) {
|
|
31
|
+
return typeof value === 'string' && CAPSULE_STATUSES.includes(value);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=capsule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capsule.js","sourceRoot":"","sources":["../../src/types/capsule.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4EH;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,SAAS;IACT,iBAAiB;CACT,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAA6B;IACxD,MAAM;IACN,QAAQ;CACA,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAoB,CAAC,CAAC;AACnF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,gBAAgB,CAAC,QAAQ,CAAC,KAAsB,CAAC,CAAC;AACxF,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Common types used across Kindling packages
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Unique identifier for entities
|
|
6
|
+
* Implementation uses UUIDv4 format
|
|
7
|
+
*/
|
|
8
|
+
export type ID = string;
|
|
9
|
+
/**
|
|
10
|
+
* Timestamp in epoch milliseconds
|
|
11
|
+
*/
|
|
12
|
+
export type Timestamp = number;
|
|
13
|
+
/**
|
|
14
|
+
* Scope identifiers for multi-dimensional isolation
|
|
15
|
+
*
|
|
16
|
+
* All fields are optional to support partial scoping:
|
|
17
|
+
* - sessionId: Isolate by session (e.g., OpenCode session)
|
|
18
|
+
* - repoId: Isolate by repository path
|
|
19
|
+
* - agentId: Isolate by agent (future)
|
|
20
|
+
* - userId: Isolate by user (future)
|
|
21
|
+
* - taskId: Link to external task system (e.g., Beads task ID)
|
|
22
|
+
*/
|
|
23
|
+
export interface ScopeIds {
|
|
24
|
+
sessionId?: string;
|
|
25
|
+
repoId?: string;
|
|
26
|
+
agentId?: string;
|
|
27
|
+
userId?: string;
|
|
28
|
+
taskId?: string;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Result type for operations that can fail
|
|
32
|
+
*/
|
|
33
|
+
export type Result<T, E = Error> = {
|
|
34
|
+
ok: true;
|
|
35
|
+
value: T;
|
|
36
|
+
} | {
|
|
37
|
+
ok: false;
|
|
38
|
+
error: E;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Validation error details
|
|
42
|
+
*/
|
|
43
|
+
export interface ValidationError {
|
|
44
|
+
field: string;
|
|
45
|
+
message: string;
|
|
46
|
+
value?: unknown;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Helper to create a success result
|
|
50
|
+
*/
|
|
51
|
+
export declare function ok<T>(value: T): Result<T, never>;
|
|
52
|
+
/**
|
|
53
|
+
* Helper to create an error result
|
|
54
|
+
*/
|
|
55
|
+
export declare function err<E>(error: E): Result<never, E>;
|
|
56
|
+
//# sourceMappingURL=common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,MAAM,EAAE,GAAG,MAAM,CAAC;AAExB;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,IAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GACtB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAEhD;AAED;;GAEG;AACH,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAEjD"}
|