@galileodev/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/dist/curator/curator.d.ts +18 -0
- package/dist/curator/curator.d.ts.map +1 -0
- package/dist/curator/curator.js +55 -0
- package/dist/curator/curator.js.map +1 -0
- package/dist/curator/deduplicator.d.ts +7 -0
- package/dist/curator/deduplicator.d.ts.map +1 -0
- package/dist/curator/deduplicator.js +32 -0
- package/dist/curator/deduplicator.js.map +1 -0
- package/dist/curator/merge-engine.d.ts +20 -0
- package/dist/curator/merge-engine.d.ts.map +1 -0
- package/dist/curator/merge-engine.js +84 -0
- package/dist/curator/merge-engine.js.map +1 -0
- package/dist/curator/scoring.d.ts +14 -0
- package/dist/curator/scoring.d.ts.map +1 -0
- package/dist/curator/scoring.js +26 -0
- package/dist/curator/scoring.js.map +1 -0
- package/dist/curator/types.d.ts +5 -0
- package/dist/curator/types.d.ts.map +1 -0
- package/dist/curator/types.js +2 -0
- package/dist/curator/types.js.map +1 -0
- package/dist/embeddings/cosine.d.ts +2 -0
- package/dist/embeddings/cosine.d.ts.map +1 -0
- package/dist/embeddings/cosine.js +20 -0
- package/dist/embeddings/cosine.js.map +1 -0
- package/dist/embeddings/onnx-provider.d.ts +6 -0
- package/dist/embeddings/onnx-provider.d.ts.map +1 -0
- package/dist/embeddings/onnx-provider.js +19 -0
- package/dist/embeddings/onnx-provider.js.map +1 -0
- package/dist/embeddings/types.d.ts +5 -0
- package/dist/embeddings/types.d.ts.map +1 -0
- package/dist/embeddings/types.js +2 -0
- package/dist/embeddings/types.js.map +1 -0
- package/dist/events/bus.d.ts +9 -0
- package/dist/events/bus.d.ts.map +1 -0
- package/dist/events/bus.js +15 -0
- package/dist/events/bus.js.map +1 -0
- package/dist/events/types.d.ts +6 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +2 -0
- package/dist/events/types.js.map +1 -0
- package/dist/generator/generator.d.ts +17 -0
- package/dist/generator/generator.d.ts.map +1 -0
- package/dist/generator/generator.js +59 -0
- package/dist/generator/generator.js.map +1 -0
- package/dist/generator/types.d.ts +20 -0
- package/dist/generator/types.d.ts.map +1 -0
- package/dist/generator/types.js +2 -0
- package/dist/generator/types.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/anthropic.d.ts +14 -0
- package/dist/llm/anthropic.d.ts.map +1 -0
- package/dist/llm/anthropic.js +41 -0
- package/dist/llm/anthropic.js.map +1 -0
- package/dist/llm/mock.d.ts +15 -0
- package/dist/llm/mock.d.ts.map +1 -0
- package/dist/llm/mock.js +24 -0
- package/dist/llm/mock.js.map +1 -0
- package/dist/llm/types.d.ts +15 -0
- package/dist/llm/types.d.ts.map +1 -0
- package/dist/llm/types.js +2 -0
- package/dist/llm/types.js.map +1 -0
- package/dist/pipeline/pipeline.d.ts +7 -0
- package/dist/pipeline/pipeline.d.ts.map +1 -0
- package/dist/pipeline/pipeline.js +57 -0
- package/dist/pipeline/pipeline.js.map +1 -0
- package/dist/pipeline/types.d.ts +28 -0
- package/dist/pipeline/types.d.ts.map +1 -0
- package/dist/pipeline/types.js +2 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/playbook/filesystem.d.ts +20 -0
- package/dist/playbook/filesystem.d.ts.map +1 -0
- package/dist/playbook/filesystem.js +80 -0
- package/dist/playbook/filesystem.js.map +1 -0
- package/dist/playbook/markdown-compiler.d.ts +8 -0
- package/dist/playbook/markdown-compiler.d.ts.map +1 -0
- package/dist/playbook/markdown-compiler.js +49 -0
- package/dist/playbook/markdown-compiler.js.map +1 -0
- package/dist/playbook/reconciler.d.ts +10 -0
- package/dist/playbook/reconciler.d.ts.map +1 -0
- package/dist/playbook/reconciler.js +43 -0
- package/dist/playbook/reconciler.js.map +1 -0
- package/dist/playbook/store.d.ts +12 -0
- package/dist/playbook/store.d.ts.map +1 -0
- package/dist/playbook/store.js +2 -0
- package/dist/playbook/store.js.map +1 -0
- package/dist/playbook/types.d.ts +139 -0
- package/dist/playbook/types.d.ts.map +1 -0
- package/dist/playbook/types.js +23 -0
- package/dist/playbook/types.js.map +1 -0
- package/dist/primitives/execution-sandbox.d.ts +7 -0
- package/dist/primitives/execution-sandbox.d.ts.map +1 -0
- package/dist/primitives/execution-sandbox.js +87 -0
- package/dist/primitives/execution-sandbox.js.map +1 -0
- package/dist/primitives/ratchet-guard.d.ts +10 -0
- package/dist/primitives/ratchet-guard.d.ts.map +1 -0
- package/dist/primitives/ratchet-guard.js +44 -0
- package/dist/primitives/ratchet-guard.js.map +1 -0
- package/dist/primitives/token-budget.d.ts +10 -0
- package/dist/primitives/token-budget.d.ts.map +1 -0
- package/dist/primitives/token-budget.js +29 -0
- package/dist/primitives/token-budget.js.map +1 -0
- package/dist/primitives/types.d.ts +16 -0
- package/dist/primitives/types.d.ts.map +1 -0
- package/dist/primitives/types.js +2 -0
- package/dist/primitives/types.js.map +1 -0
- package/dist/reflector/reflector.d.ts +17 -0
- package/dist/reflector/reflector.d.ts.map +1 -0
- package/dist/reflector/reflector.js +46 -0
- package/dist/reflector/reflector.js.map +1 -0
- package/dist/reflector/types.d.ts +19 -0
- package/dist/reflector/types.d.ts.map +1 -0
- package/dist/reflector/types.js +2 -0
- package/dist/reflector/types.js.map +1 -0
- package/package.json +30 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export { Pipeline } from './pipeline/pipeline.js';
|
|
2
|
+
export type { PipelineConfig, PipelineInput, PipelineResult } from './pipeline/types.js';
|
|
3
|
+
export { Generator } from './generator/generator.js';
|
|
4
|
+
export type { GeneratorConfig, GenerationResult, Trajectory, Artifact } from './generator/types.js';
|
|
5
|
+
export { Reflector } from './reflector/reflector.js';
|
|
6
|
+
export type { ReflectorConfig, ReflectionResult, Lesson, GroundTruth } from './reflector/types.js';
|
|
7
|
+
export { Curator } from './curator/curator.js';
|
|
8
|
+
export type { CuratorConfig } from './curator/types.js';
|
|
9
|
+
export { deduplicate } from './curator/deduplicator.js';
|
|
10
|
+
export type { DeduplicationResult } from './curator/deduplicator.js';
|
|
11
|
+
export { FilesystemPlaybookStore } from './playbook/filesystem.js';
|
|
12
|
+
export type { PlaybookStore } from './playbook/store.js';
|
|
13
|
+
export type { PlaybookEntry, DeltaUpdate, PlaybookSnapshot } from './playbook/types.js';
|
|
14
|
+
export { PlaybookEntrySchema, DeltaUpdateSchema } from './playbook/types.js';
|
|
15
|
+
export { EventBus } from './events/bus.js';
|
|
16
|
+
export type { PipelineEvent } from './events/types.js';
|
|
17
|
+
export type { LLMProvider, CompletionOptions, ChatMessage } from './llm/types.js';
|
|
18
|
+
export { MockLLMProvider } from './llm/mock.js';
|
|
19
|
+
export { AnthropicProvider } from './llm/anthropic.js';
|
|
20
|
+
export { TokenBudget } from './primitives/token-budget.js';
|
|
21
|
+
export { RatchetGuard } from './primitives/ratchet-guard.js';
|
|
22
|
+
export { ExecutionSandbox } from './primitives/execution-sandbox.js';
|
|
23
|
+
export type { SandboxOptions, SandboxResult } from './primitives/types.js';
|
|
24
|
+
export type { EmbeddingProvider } from './embeddings/types.js';
|
|
25
|
+
export { cosineSimilarity } from './embeddings/cosine.js';
|
|
26
|
+
export { OnnxEmbeddingProvider } from './embeddings/onnx-provider.js';
|
|
27
|
+
export { curationScore, selectionScore } from './curator/scoring.js';
|
|
28
|
+
export type { CurationWeights, SelectionWeights } from './curator/scoring.js';
|
|
29
|
+
export { MergeEngine } from './curator/merge-engine.js';
|
|
30
|
+
export type { MergeEngineConfig, MergeResult } from './curator/merge-engine.js';
|
|
31
|
+
export { compileMarkdown, parseMarkdown } from './playbook/markdown-compiler.js';
|
|
32
|
+
export type { ParsedBullet } from './playbook/markdown-compiler.js';
|
|
33
|
+
export { Reconciler } from './playbook/reconciler.js';
|
|
34
|
+
export type { ReconcileResult } from './playbook/reconciler.js';
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACpG,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnG,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,YAAY,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACnE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3E,YAAY,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG9E,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGhF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACjF,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export { Pipeline } from './pipeline/pipeline.js';
|
|
2
|
+
export { Generator } from './generator/generator.js';
|
|
3
|
+
export { Reflector } from './reflector/reflector.js';
|
|
4
|
+
export { Curator } from './curator/curator.js';
|
|
5
|
+
export { deduplicate } from './curator/deduplicator.js';
|
|
6
|
+
export { FilesystemPlaybookStore } from './playbook/filesystem.js';
|
|
7
|
+
export { PlaybookEntrySchema, DeltaUpdateSchema } from './playbook/types.js';
|
|
8
|
+
export { EventBus } from './events/bus.js';
|
|
9
|
+
export { MockLLMProvider } from './llm/mock.js';
|
|
10
|
+
export { AnthropicProvider } from './llm/anthropic.js';
|
|
11
|
+
export { TokenBudget } from './primitives/token-budget.js';
|
|
12
|
+
export { RatchetGuard } from './primitives/ratchet-guard.js';
|
|
13
|
+
export { ExecutionSandbox } from './primitives/execution-sandbox.js';
|
|
14
|
+
export { cosineSimilarity } from './embeddings/cosine.js';
|
|
15
|
+
export { OnnxEmbeddingProvider } from './embeddings/onnx-provider.js';
|
|
16
|
+
// Scoring
|
|
17
|
+
export { curationScore, selectionScore } from './curator/scoring.js';
|
|
18
|
+
// Merge Engine
|
|
19
|
+
export { MergeEngine } from './curator/merge-engine.js';
|
|
20
|
+
// Playbook Compiler + Reconciler
|
|
21
|
+
export { compileMarkdown, parseMarkdown } from './playbook/markdown-compiler.js';
|
|
22
|
+
export { Reconciler } from './playbook/reconciler.js';
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAGnE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAKrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGrE,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAGxD,iCAAiC;AACjC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ZodSchema } from 'zod';
|
|
2
|
+
import type { LLMProvider, CompletionOptions, ChatMessage } from './types.js';
|
|
3
|
+
interface AnthropicProviderOptions {
|
|
4
|
+
model?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class AnthropicProvider implements LLMProvider {
|
|
7
|
+
private readonly client;
|
|
8
|
+
private readonly defaultModel;
|
|
9
|
+
constructor(apiKey: string, options?: AnthropicProviderOptions);
|
|
10
|
+
complete(prompt: string, options?: CompletionOptions, history?: ChatMessage[]): Promise<string>;
|
|
11
|
+
structured<T>(prompt: string, schema: ZodSchema<T>, options?: CompletionOptions, history?: ChatMessage[]): Promise<T>;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9E,UAAU,wBAAwB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,wBAA6B;IAK5D,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAyB/F,UAAU,CAAC,CAAC,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE,iBAAiB,EAC3B,OAAO,CAAC,EAAE,WAAW,EAAE,GACtB,OAAO,CAAC,CAAC,CAAC;CAcd"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
export class AnthropicProvider {
|
|
3
|
+
client;
|
|
4
|
+
defaultModel;
|
|
5
|
+
constructor(apiKey, options = {}) {
|
|
6
|
+
this.client = new Anthropic({ apiKey });
|
|
7
|
+
this.defaultModel = options.model ?? 'claude-sonnet-4-20250514';
|
|
8
|
+
}
|
|
9
|
+
async complete(prompt, options, history) {
|
|
10
|
+
const messages = [];
|
|
11
|
+
if (history) {
|
|
12
|
+
for (const msg of history) {
|
|
13
|
+
messages.push({ role: msg.role, content: msg.content });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
messages.push({ role: 'user', content: prompt });
|
|
17
|
+
const response = await this.client.messages.create({
|
|
18
|
+
model: options?.model ?? this.defaultModel,
|
|
19
|
+
max_tokens: options?.maxTokens ?? 4096,
|
|
20
|
+
temperature: options?.temperature,
|
|
21
|
+
messages,
|
|
22
|
+
});
|
|
23
|
+
const textBlock = response.content.find((block) => block.type === 'text');
|
|
24
|
+
if (!textBlock || textBlock.type !== 'text') {
|
|
25
|
+
throw new Error('No text response from Anthropic API');
|
|
26
|
+
}
|
|
27
|
+
return textBlock.text;
|
|
28
|
+
}
|
|
29
|
+
async structured(prompt, schema, options, history) {
|
|
30
|
+
const wrappedPrompt = [
|
|
31
|
+
prompt,
|
|
32
|
+
'',
|
|
33
|
+
'Respond with ONLY valid JSON matching the required schema. No markdown, no explanation.',
|
|
34
|
+
].join('\n');
|
|
35
|
+
const raw = await this.complete(wrappedPrompt, options, history);
|
|
36
|
+
const jsonMatch = raw.match(/```(?:json)?\s*([\s\S]*?)```/) ?? [null, raw];
|
|
37
|
+
const jsonStr = (jsonMatch[1] ?? raw).trim();
|
|
38
|
+
return schema.parse(JSON.parse(jsonStr));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/llm/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAQ1C,MAAM,OAAO,iBAAiB;IACX,MAAM,CAAY;IAClB,YAAY,CAAS;IAEtC,YAAY,MAAc,EAAE,UAAoC,EAAE;QAChE,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,KAAK,IAAI,0BAA0B,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,OAA2B,EAAE,OAAuB;QACjF,MAAM,QAAQ,GAA2D,EAAE,CAAC;QAE5E,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAEjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;YACjD,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,YAAY;YAC1C,UAAU,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;YACtC,WAAW,EAAE,OAAO,EAAE,WAAW;YACjC,QAAQ;SACT,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;QAC1E,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,UAAU,CACd,MAAc,EACd,MAAoB,EACpB,OAA2B,EAC3B,OAAuB;QAEvB,MAAM,aAAa,GAAG;YACpB,MAAM;YACN,EAAE;YACF,yFAAyF;SAC1F,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAEjE,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAE7C,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ZodSchema } from 'zod';
|
|
2
|
+
import type { LLMProvider, CompletionOptions, ChatMessage } from './types.js';
|
|
3
|
+
export declare class MockLLMProvider implements LLMProvider {
|
|
4
|
+
private completeResponses;
|
|
5
|
+
private structuredResponses;
|
|
6
|
+
private completeIndex;
|
|
7
|
+
private structuredIndex;
|
|
8
|
+
constructor(options?: {
|
|
9
|
+
completeResponses?: string[];
|
|
10
|
+
structuredResponses?: unknown[];
|
|
11
|
+
});
|
|
12
|
+
complete(_prompt: string, _options?: CompletionOptions, _history?: ChatMessage[]): Promise<string>;
|
|
13
|
+
structured<T>(_prompt: string, schema: ZodSchema<T>, _options?: CompletionOptions, _history?: ChatMessage[]): Promise<T>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=mock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../src/llm/mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9E,qBAAa,eAAgB,YAAW,WAAW;IACjD,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,mBAAmB,CAAiB;IAC5C,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,eAAe,CAAK;gBAEhB,OAAO,CAAC,EAAE;QACpB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC7B,mBAAmB,CAAC,EAAE,OAAO,EAAE,CAAC;KACjC;IAKK,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IASlG,UAAU,CAAC,CAAC,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EACpB,QAAQ,CAAC,EAAE,iBAAiB,EAC5B,QAAQ,CAAC,EAAE,WAAW,EAAE,GACvB,OAAO,CAAC,CAAC,CAAC;CASd"}
|
package/dist/llm/mock.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export class MockLLMProvider {
|
|
2
|
+
completeResponses = [];
|
|
3
|
+
structuredResponses = [];
|
|
4
|
+
completeIndex = 0;
|
|
5
|
+
structuredIndex = 0;
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.completeResponses = options?.completeResponses ?? [];
|
|
8
|
+
this.structuredResponses = options?.structuredResponses ?? [];
|
|
9
|
+
}
|
|
10
|
+
async complete(_prompt, _options, _history) {
|
|
11
|
+
if (this.completeIndex >= this.completeResponses.length) {
|
|
12
|
+
throw new Error(`MockLLMProvider: no more complete responses (called ${this.completeIndex + 1} times, have ${this.completeResponses.length})`);
|
|
13
|
+
}
|
|
14
|
+
return this.completeResponses[this.completeIndex++];
|
|
15
|
+
}
|
|
16
|
+
async structured(_prompt, schema, _options, _history) {
|
|
17
|
+
if (this.structuredIndex >= this.structuredResponses.length) {
|
|
18
|
+
throw new Error(`MockLLMProvider: no more structured responses (called ${this.structuredIndex + 1} times, have ${this.structuredResponses.length})`);
|
|
19
|
+
}
|
|
20
|
+
const raw = this.structuredResponses[this.structuredIndex++];
|
|
21
|
+
return schema.parse(raw);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=mock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mock.js","sourceRoot":"","sources":["../../src/llm/mock.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,eAAe;IAClB,iBAAiB,GAAa,EAAE,CAAC;IACjC,mBAAmB,GAAc,EAAE,CAAC;IACpC,aAAa,GAAG,CAAC,CAAC;IAClB,eAAe,GAAG,CAAC,CAAC;IAE5B,YAAY,OAGX;QACC,IAAI,CAAC,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,IAAI,EAAE,CAAC;QAC1D,IAAI,CAAC,mBAAmB,GAAG,OAAO,EAAE,mBAAmB,IAAI,EAAE,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe,EAAE,QAA4B,EAAE,QAAwB;QACpF,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,uDAAuD,IAAI,CAAC,aAAa,GAAG,CAAC,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAC9H,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,UAAU,CACd,OAAe,EACf,MAAoB,EACpB,QAA4B,EAC5B,QAAwB;QAExB,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CAAC;YAC5D,MAAM,IAAI,KAAK,CACb,yDAAyD,IAAI,CAAC,eAAe,GAAG,CAAC,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,MAAM,GAAG,CACpI,CAAC;QACJ,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QAC7D,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { ZodSchema } from 'zod';
|
|
2
|
+
export interface CompletionOptions {
|
|
3
|
+
model?: string;
|
|
4
|
+
temperature?: number;
|
|
5
|
+
maxTokens?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface ChatMessage {
|
|
8
|
+
role: 'user' | 'assistant';
|
|
9
|
+
content: string;
|
|
10
|
+
}
|
|
11
|
+
export interface LLMProvider {
|
|
12
|
+
complete(prompt: string, options?: CompletionOptions, history?: ChatMessage[]): Promise<string>;
|
|
13
|
+
structured<T>(prompt: string, schema: ZodSchema<T>, options?: CompletionOptions, history?: ChatMessage[]): Promise<T>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAErC,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAChG,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACvH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/llm/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PipelineConfig, PipelineInput, PipelineResult } from './types.js';
|
|
2
|
+
export declare class Pipeline {
|
|
3
|
+
private readonly config;
|
|
4
|
+
constructor(config: PipelineConfig);
|
|
5
|
+
run(input: PipelineInput): Promise<PipelineResult>;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../src/pipeline/pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhF,qBAAa,QAAQ;IACP,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAE7C,GAAG,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;CAyDzD"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
export class Pipeline {
|
|
2
|
+
config;
|
|
3
|
+
constructor(config) {
|
|
4
|
+
this.config = config;
|
|
5
|
+
}
|
|
6
|
+
async run(input) {
|
|
7
|
+
const { store, generator, reflector, curator, eventBus } = this.config;
|
|
8
|
+
// 1. Snapshot current playbook state
|
|
9
|
+
const preSnapshot = await store.snapshot();
|
|
10
|
+
// 2. Generator: produce trajectories and artifacts
|
|
11
|
+
const generation = await generator.run({
|
|
12
|
+
taskId: input.taskId,
|
|
13
|
+
instruction: input.instruction,
|
|
14
|
+
snapshot: preSnapshot,
|
|
15
|
+
});
|
|
16
|
+
eventBus.emit({
|
|
17
|
+
type: 'generation',
|
|
18
|
+
taskId: input.taskId,
|
|
19
|
+
payload: { trajectoryCount: generation.trajectories.length, artifactCount: generation.artifacts.length },
|
|
20
|
+
});
|
|
21
|
+
// 3. Reflector: extract lessons
|
|
22
|
+
const reflection = await reflector.run({
|
|
23
|
+
taskId: input.taskId,
|
|
24
|
+
generation,
|
|
25
|
+
groundTruth: input.groundTruth,
|
|
26
|
+
});
|
|
27
|
+
eventBus.emit({
|
|
28
|
+
type: 'reflection',
|
|
29
|
+
taskId: input.taskId,
|
|
30
|
+
payload: { lessonCount: reflection.lessons.length },
|
|
31
|
+
});
|
|
32
|
+
// 4. Curator: score and deduplicate
|
|
33
|
+
const currentEntries = await store.getActiveEntries();
|
|
34
|
+
const delta = await curator.run({
|
|
35
|
+
taskId: input.taskId,
|
|
36
|
+
reflection,
|
|
37
|
+
currentEntries,
|
|
38
|
+
});
|
|
39
|
+
eventBus.emit({
|
|
40
|
+
type: 'curation',
|
|
41
|
+
taskId: input.taskId,
|
|
42
|
+
payload: { additions: delta.additions.length, deprecations: delta.deprecations.length },
|
|
43
|
+
});
|
|
44
|
+
// 5. Persist delta
|
|
45
|
+
await store.applyDelta(delta);
|
|
46
|
+
// 6. Take post-run snapshot
|
|
47
|
+
const playbookSnapshot = await store.snapshot();
|
|
48
|
+
return {
|
|
49
|
+
taskId: input.taskId,
|
|
50
|
+
generation,
|
|
51
|
+
reflection,
|
|
52
|
+
delta,
|
|
53
|
+
playbookSnapshot,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../src/pipeline/pipeline.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,QAAQ;IACU;IAA7B,YAA6B,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAEvD,KAAK,CAAC,GAAG,CAAC,KAAoB;QAC5B,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QAEvE,qCAAqC;QACrC,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QAE3C,mDAAmD;QACnD,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC;YACrC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,QAAQ,EAAE,WAAW;SACtB,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE;SACzG,CAAC,CAAC;QAEH,gCAAgC;QAChC,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC;YACrC,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU;YACV,WAAW,EAAE,KAAK,CAAC,WAAW;SAC/B,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,YAAY;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE;SACpD,CAAC,CAAC;QAEH,oCAAoC;QACpC,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,gBAAgB,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU;YACV,cAAc;SACf,CAAC,CAAC;QACH,QAAQ,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,OAAO,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE;SACxF,CAAC,CAAC;QAEH,mBAAmB;QACnB,MAAM,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAE9B,4BAA4B;QAC5B,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEhD,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU;YACV,UAAU;YACV,KAAK;YACL,gBAAgB;SACjB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { PlaybookStore } from '../playbook/store.js';
|
|
2
|
+
import type { PlaybookSnapshot, DeltaUpdate } from '../playbook/types.js';
|
|
3
|
+
import type { Generator } from '../generator/generator.js';
|
|
4
|
+
import type { Reflector } from '../reflector/reflector.js';
|
|
5
|
+
import type { Curator } from '../curator/curator.js';
|
|
6
|
+
import type { EventBus } from '../events/bus.js';
|
|
7
|
+
import type { GenerationResult } from '../generator/types.js';
|
|
8
|
+
import type { ReflectionResult, GroundTruth } from '../reflector/types.js';
|
|
9
|
+
export interface PipelineConfig {
|
|
10
|
+
store: PlaybookStore;
|
|
11
|
+
generator: Generator;
|
|
12
|
+
reflector: Reflector;
|
|
13
|
+
curator: Curator;
|
|
14
|
+
eventBus: EventBus;
|
|
15
|
+
}
|
|
16
|
+
export interface PipelineInput {
|
|
17
|
+
taskId: string;
|
|
18
|
+
instruction: string;
|
|
19
|
+
groundTruth?: GroundTruth;
|
|
20
|
+
}
|
|
21
|
+
export interface PipelineResult {
|
|
22
|
+
taskId: string;
|
|
23
|
+
generation: GenerationResult;
|
|
24
|
+
reflection: ReflectionResult;
|
|
25
|
+
delta: DeltaUpdate;
|
|
26
|
+
playbookSnapshot: PlaybookSnapshot;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/pipeline/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAE3E,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,gBAAgB,CAAC;IAC7B,UAAU,EAAE,gBAAgB,CAAC;IAC7B,KAAK,EAAE,WAAW,CAAC;IACnB,gBAAgB,EAAE,gBAAgB,CAAC;CACpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/pipeline/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type PlaybookEntry, type DeltaUpdate, type PlaybookSnapshot } from './types.js';
|
|
2
|
+
import type { PlaybookStore } from './store.js';
|
|
3
|
+
export declare class FilesystemPlaybookStore implements PlaybookStore {
|
|
4
|
+
private readonly dir;
|
|
5
|
+
private readonly playbookPath;
|
|
6
|
+
private readonly deprecationsPath;
|
|
7
|
+
constructor(dir: string);
|
|
8
|
+
getEntry(id: string): Promise<PlaybookEntry | null>;
|
|
9
|
+
getActiveEntries(): Promise<PlaybookEntry[]>;
|
|
10
|
+
getAllEntries(): Promise<PlaybookEntry[]>;
|
|
11
|
+
snapshot(): Promise<PlaybookSnapshot>;
|
|
12
|
+
append(entries: PlaybookEntry[]): Promise<void>;
|
|
13
|
+
applyDelta(delta: DeltaUpdate): Promise<void>;
|
|
14
|
+
findByKind(kind: PlaybookEntry['kind']): Promise<PlaybookEntry[]>;
|
|
15
|
+
findBySource(source: PlaybookEntry['source']): Promise<PlaybookEntry[]>;
|
|
16
|
+
private readDeprecations;
|
|
17
|
+
private writeDeprecationsAtomic;
|
|
18
|
+
private ensureDir;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=filesystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/playbook/filesystem.ts"],"names":[],"mappings":"AAGA,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9G,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,qBAAa,uBAAwB,YAAW,aAAa;IAI/C,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHhC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;gBAEb,GAAG,EAAE,MAAM;IAKlC,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAKnD,gBAAgB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAS5C,aAAa,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IASzC,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAKrC,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAM/C,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7C,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAKjE,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;YAK/D,gBAAgB;YAQhB,uBAAuB;YAOvB,SAAS;CAKxB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { readFile, writeFile, appendFile, rename, mkdir } from 'node:fs/promises';
|
|
2
|
+
import { existsSync } from 'node:fs';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { PlaybookEntrySchema } from './types.js';
|
|
5
|
+
export class FilesystemPlaybookStore {
|
|
6
|
+
dir;
|
|
7
|
+
playbookPath;
|
|
8
|
+
deprecationsPath;
|
|
9
|
+
constructor(dir) {
|
|
10
|
+
this.dir = dir;
|
|
11
|
+
this.playbookPath = join(dir, 'playbook.jsonl');
|
|
12
|
+
this.deprecationsPath = join(dir, 'deprecations.json');
|
|
13
|
+
}
|
|
14
|
+
async getEntry(id) {
|
|
15
|
+
const entries = await this.getAllEntries();
|
|
16
|
+
return entries.find((e) => e.id === id) ?? null;
|
|
17
|
+
}
|
|
18
|
+
async getActiveEntries() {
|
|
19
|
+
const [entries, deprecations] = await Promise.all([
|
|
20
|
+
this.getAllEntries(),
|
|
21
|
+
this.readDeprecations(),
|
|
22
|
+
]);
|
|
23
|
+
const deprecatedSet = new Set(deprecations);
|
|
24
|
+
return entries.filter((e) => !deprecatedSet.has(e.id));
|
|
25
|
+
}
|
|
26
|
+
async getAllEntries() {
|
|
27
|
+
if (!existsSync(this.playbookPath)) {
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
const raw = await readFile(this.playbookPath, 'utf-8');
|
|
31
|
+
const lines = raw.trim().split('\n').filter(Boolean);
|
|
32
|
+
return lines.map((line) => PlaybookEntrySchema.parse(JSON.parse(line)));
|
|
33
|
+
}
|
|
34
|
+
async snapshot() {
|
|
35
|
+
const entries = await this.getActiveEntries();
|
|
36
|
+
return { entries, takenAt: new Date().toISOString() };
|
|
37
|
+
}
|
|
38
|
+
async append(entries) {
|
|
39
|
+
await this.ensureDir();
|
|
40
|
+
const lines = entries.map((e) => JSON.stringify(e)).join('\n') + '\n';
|
|
41
|
+
await appendFile(this.playbookPath, lines, 'utf-8');
|
|
42
|
+
}
|
|
43
|
+
async applyDelta(delta) {
|
|
44
|
+
if (delta.additions.length > 0) {
|
|
45
|
+
await this.append(delta.additions);
|
|
46
|
+
}
|
|
47
|
+
if (delta.deprecations.length > 0) {
|
|
48
|
+
const existing = await this.readDeprecations();
|
|
49
|
+
const merged = [...new Set([...existing, ...delta.deprecations])];
|
|
50
|
+
await this.writeDeprecationsAtomic(merged);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
async findByKind(kind) {
|
|
54
|
+
const active = await this.getActiveEntries();
|
|
55
|
+
return active.filter((e) => e.kind === kind);
|
|
56
|
+
}
|
|
57
|
+
async findBySource(source) {
|
|
58
|
+
const active = await this.getActiveEntries();
|
|
59
|
+
return active.filter((e) => e.source === source);
|
|
60
|
+
}
|
|
61
|
+
async readDeprecations() {
|
|
62
|
+
if (!existsSync(this.deprecationsPath)) {
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
const raw = await readFile(this.deprecationsPath, 'utf-8');
|
|
66
|
+
return JSON.parse(raw);
|
|
67
|
+
}
|
|
68
|
+
async writeDeprecationsAtomic(ids) {
|
|
69
|
+
await this.ensureDir();
|
|
70
|
+
const tmpPath = this.deprecationsPath + '.tmp';
|
|
71
|
+
await writeFile(tmpPath, JSON.stringify(ids), 'utf-8');
|
|
72
|
+
await rename(tmpPath, this.deprecationsPath);
|
|
73
|
+
}
|
|
74
|
+
async ensureDir() {
|
|
75
|
+
if (!existsSync(this.dir)) {
|
|
76
|
+
await mkdir(this.dir, { recursive: true });
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=filesystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/playbook/filesystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PlaybookEntry } from './types.js';
|
|
2
|
+
export interface ParsedBullet {
|
|
3
|
+
id?: string;
|
|
4
|
+
content: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function compileMarkdown(section: string, entries: PlaybookEntry[]): string;
|
|
7
|
+
export declare function parseMarkdown(md: string): ParsedBullet[];
|
|
8
|
+
//# sourceMappingURL=markdown-compiler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-compiler.d.ts","sourceRoot":"","sources":["../../src/playbook/markdown-compiler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,MAAM,CAoBjF;AASD,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,EAAE,CA6BxD"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export function compileMarkdown(section, entries) {
|
|
2
|
+
const active = entries
|
|
3
|
+
.filter((e) => !e.archived)
|
|
4
|
+
.sort((a, b) => b.utility - a.utility);
|
|
5
|
+
const lines = [`# ${section}`, ''];
|
|
6
|
+
if (active.length === 0) {
|
|
7
|
+
lines.push('No lessons yet.');
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
for (const entry of active) {
|
|
11
|
+
const score = entry.utility.toFixed(2);
|
|
12
|
+
lines.push(`- ${entry.content} [+${entry.helpful}/-${entry.harmful}, score: ${score}] <!-- id:${entry.id} -->`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
lines.push('');
|
|
16
|
+
return lines.join('\n');
|
|
17
|
+
}
|
|
18
|
+
// Regex to match: - <content> [+N/-M, score: X.XX] <!-- id:xxx -->
|
|
19
|
+
const BULLET_WITH_ID = /^- (.+?)\s*\[.*?\]\s*<!--\s*id:(\S+?)\s*-->$/;
|
|
20
|
+
// Regex to match: - <content> [+N/-M, score: X.XX] (no id)
|
|
21
|
+
const BULLET_WITH_COUNTERS = /^- (.+?)\s*\[.*?\]\s*$/;
|
|
22
|
+
// Regex to match plain bullets: - <content>
|
|
23
|
+
const BULLET_PLAIN = /^- (.+)$/;
|
|
24
|
+
export function parseMarkdown(md) {
|
|
25
|
+
const lines = md.split('\n');
|
|
26
|
+
const bullets = [];
|
|
27
|
+
for (const line of lines) {
|
|
28
|
+
const trimmed = line.trim();
|
|
29
|
+
let match = trimmed.match(BULLET_WITH_ID);
|
|
30
|
+
if (match) {
|
|
31
|
+
bullets.push({ id: match[2], content: match[1].trim() });
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
match = trimmed.match(BULLET_WITH_COUNTERS);
|
|
35
|
+
if (match) {
|
|
36
|
+
bullets.push({ content: match[1].trim() });
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
match = trimmed.match(BULLET_PLAIN);
|
|
40
|
+
if (match) {
|
|
41
|
+
const content = match[1].trim();
|
|
42
|
+
if (content.length > 0) {
|
|
43
|
+
bullets.push({ content });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return bullets;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=markdown-compiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-compiler.js","sourceRoot":"","sources":["../../src/playbook/markdown-compiler.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,eAAe,CAAC,OAAe,EAAE,OAAwB;IACvE,MAAM,MAAM,GAAG,OAAO;SACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;SAC1B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;IAEzC,MAAM,KAAK,GAAa,CAAC,KAAK,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAE7C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACvC,KAAK,CAAC,IAAI,CACR,KAAK,KAAK,CAAC,OAAO,MAAM,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,YAAY,KAAK,aAAa,KAAK,CAAC,EAAE,MAAM,CACpG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,mEAAmE;AACnE,MAAM,cAAc,GAAG,8CAA8C,CAAC;AACtE,2DAA2D;AAC3D,MAAM,oBAAoB,GAAG,wBAAwB,CAAC;AACtD,4CAA4C;AAC5C,MAAM,YAAY,GAAG,UAAU,CAAC;AAEhC,MAAM,UAAU,aAAa,CAAC,EAAU;IACtC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAC1C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACzD,SAAS;QACX,CAAC;QAED,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC5C,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC3C,SAAS;QACX,CAAC;QAED,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACpC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { PlaybookEntry } from './types.js';
|
|
2
|
+
export interface ReconcileResult {
|
|
3
|
+
updated: PlaybookEntry[];
|
|
4
|
+
added: PlaybookEntry[];
|
|
5
|
+
softDeleted: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare class Reconciler {
|
|
8
|
+
reconcile(entries: PlaybookEntry[], markdown: string): ReconcileResult;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=reconciler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconciler.d.ts","sourceRoot":"","sources":["../../src/playbook/reconciler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,qBAAa,UAAU;IACrB,SAAS,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe;CAwCvE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ulid } from 'ulid';
|
|
2
|
+
import { parseMarkdown } from './markdown-compiler.js';
|
|
3
|
+
export class Reconciler {
|
|
4
|
+
reconcile(entries, markdown) {
|
|
5
|
+
const parsed = parseMarkdown(markdown);
|
|
6
|
+
const entryMap = new Map(entries.filter((e) => !e.archived).map((e) => [e.id, e]));
|
|
7
|
+
const updated = [];
|
|
8
|
+
const added = [];
|
|
9
|
+
const seenIds = new Set();
|
|
10
|
+
for (const bullet of parsed) {
|
|
11
|
+
if (bullet.id) {
|
|
12
|
+
seenIds.add(bullet.id);
|
|
13
|
+
const existing = entryMap.get(bullet.id);
|
|
14
|
+
if (existing && existing.content !== bullet.content) {
|
|
15
|
+
updated.push({ ...existing, content: bullet.content });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
added.push({
|
|
20
|
+
id: ulid(),
|
|
21
|
+
timestamp: new Date().toISOString(),
|
|
22
|
+
source: 'curator',
|
|
23
|
+
kind: 'delta',
|
|
24
|
+
content: bullet.content,
|
|
25
|
+
utility: 0,
|
|
26
|
+
harmfulness: 0,
|
|
27
|
+
metadata: { origin: 'human-edit' },
|
|
28
|
+
helpful: 0,
|
|
29
|
+
harmful: 0,
|
|
30
|
+
archived: false,
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const softDeleted = [];
|
|
35
|
+
for (const [id] of entryMap) {
|
|
36
|
+
if (!seenIds.has(id)) {
|
|
37
|
+
softDeleted.push(id);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return { updated, added, softDeleted };
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=reconciler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reconciler.js","sourceRoot":"","sources":["../../src/playbook/reconciler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AASvD,MAAM,OAAO,UAAU;IACrB,SAAS,CAAC,OAAwB,EAAE,QAAgB;QAClD,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAElC,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;YAC5B,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACzC,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;oBACpD,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC;oBACT,EAAE,EAAE,IAAI,EAAE;oBACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,MAAM,EAAE,SAAS;oBACjB,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,OAAO,EAAE,CAAC;oBACV,WAAW,EAAE,CAAC;oBACd,QAAQ,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE;oBAClC,OAAO,EAAE,CAAC;oBACV,OAAO,EAAE,CAAC;oBACV,QAAQ,EAAE,KAAK;iBAChB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,KAAK,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;gBACrB,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IACzC,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { PlaybookEntry, DeltaUpdate, PlaybookSnapshot } from './types.js';
|
|
2
|
+
export interface PlaybookStore {
|
|
3
|
+
getEntry(id: string): Promise<PlaybookEntry | null>;
|
|
4
|
+
getActiveEntries(): Promise<PlaybookEntry[]>;
|
|
5
|
+
getAllEntries(): Promise<PlaybookEntry[]>;
|
|
6
|
+
snapshot(): Promise<PlaybookSnapshot>;
|
|
7
|
+
append(entries: PlaybookEntry[]): Promise<void>;
|
|
8
|
+
applyDelta(delta: DeltaUpdate): Promise<void>;
|
|
9
|
+
findByKind(kind: PlaybookEntry['kind']): Promise<PlaybookEntry[]>;
|
|
10
|
+
findBySource(source: PlaybookEntry['source']): Promise<PlaybookEntry[]>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/playbook/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC;IACpD,gBAAgB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC7C,aAAa,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1C,QAAQ,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACtC,MAAM,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,UAAU,CAAC,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;IAClE,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;CACzE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/playbook/store.ts"],"names":[],"mappings":""}
|