@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.
Files changed (117) hide show
  1. package/dist/curator/curator.d.ts +18 -0
  2. package/dist/curator/curator.d.ts.map +1 -0
  3. package/dist/curator/curator.js +55 -0
  4. package/dist/curator/curator.js.map +1 -0
  5. package/dist/curator/deduplicator.d.ts +7 -0
  6. package/dist/curator/deduplicator.d.ts.map +1 -0
  7. package/dist/curator/deduplicator.js +32 -0
  8. package/dist/curator/deduplicator.js.map +1 -0
  9. package/dist/curator/merge-engine.d.ts +20 -0
  10. package/dist/curator/merge-engine.d.ts.map +1 -0
  11. package/dist/curator/merge-engine.js +84 -0
  12. package/dist/curator/merge-engine.js.map +1 -0
  13. package/dist/curator/scoring.d.ts +14 -0
  14. package/dist/curator/scoring.d.ts.map +1 -0
  15. package/dist/curator/scoring.js +26 -0
  16. package/dist/curator/scoring.js.map +1 -0
  17. package/dist/curator/types.d.ts +5 -0
  18. package/dist/curator/types.d.ts.map +1 -0
  19. package/dist/curator/types.js +2 -0
  20. package/dist/curator/types.js.map +1 -0
  21. package/dist/embeddings/cosine.d.ts +2 -0
  22. package/dist/embeddings/cosine.d.ts.map +1 -0
  23. package/dist/embeddings/cosine.js +20 -0
  24. package/dist/embeddings/cosine.js.map +1 -0
  25. package/dist/embeddings/onnx-provider.d.ts +6 -0
  26. package/dist/embeddings/onnx-provider.d.ts.map +1 -0
  27. package/dist/embeddings/onnx-provider.js +19 -0
  28. package/dist/embeddings/onnx-provider.js.map +1 -0
  29. package/dist/embeddings/types.d.ts +5 -0
  30. package/dist/embeddings/types.d.ts.map +1 -0
  31. package/dist/embeddings/types.js +2 -0
  32. package/dist/embeddings/types.js.map +1 -0
  33. package/dist/events/bus.d.ts +9 -0
  34. package/dist/events/bus.d.ts.map +1 -0
  35. package/dist/events/bus.js +15 -0
  36. package/dist/events/bus.js.map +1 -0
  37. package/dist/events/types.d.ts +6 -0
  38. package/dist/events/types.d.ts.map +1 -0
  39. package/dist/events/types.js +2 -0
  40. package/dist/events/types.js.map +1 -0
  41. package/dist/generator/generator.d.ts +17 -0
  42. package/dist/generator/generator.d.ts.map +1 -0
  43. package/dist/generator/generator.js +59 -0
  44. package/dist/generator/generator.js.map +1 -0
  45. package/dist/generator/types.d.ts +20 -0
  46. package/dist/generator/types.d.ts.map +1 -0
  47. package/dist/generator/types.js +2 -0
  48. package/dist/generator/types.js.map +1 -0
  49. package/dist/index.d.ts +35 -0
  50. package/dist/index.d.ts.map +1 -0
  51. package/dist/index.js +23 -0
  52. package/dist/index.js.map +1 -0
  53. package/dist/llm/anthropic.d.ts +14 -0
  54. package/dist/llm/anthropic.d.ts.map +1 -0
  55. package/dist/llm/anthropic.js +41 -0
  56. package/dist/llm/anthropic.js.map +1 -0
  57. package/dist/llm/mock.d.ts +15 -0
  58. package/dist/llm/mock.d.ts.map +1 -0
  59. package/dist/llm/mock.js +24 -0
  60. package/dist/llm/mock.js.map +1 -0
  61. package/dist/llm/types.d.ts +15 -0
  62. package/dist/llm/types.d.ts.map +1 -0
  63. package/dist/llm/types.js +2 -0
  64. package/dist/llm/types.js.map +1 -0
  65. package/dist/pipeline/pipeline.d.ts +7 -0
  66. package/dist/pipeline/pipeline.d.ts.map +1 -0
  67. package/dist/pipeline/pipeline.js +57 -0
  68. package/dist/pipeline/pipeline.js.map +1 -0
  69. package/dist/pipeline/types.d.ts +28 -0
  70. package/dist/pipeline/types.d.ts.map +1 -0
  71. package/dist/pipeline/types.js +2 -0
  72. package/dist/pipeline/types.js.map +1 -0
  73. package/dist/playbook/filesystem.d.ts +20 -0
  74. package/dist/playbook/filesystem.d.ts.map +1 -0
  75. package/dist/playbook/filesystem.js +80 -0
  76. package/dist/playbook/filesystem.js.map +1 -0
  77. package/dist/playbook/markdown-compiler.d.ts +8 -0
  78. package/dist/playbook/markdown-compiler.d.ts.map +1 -0
  79. package/dist/playbook/markdown-compiler.js +49 -0
  80. package/dist/playbook/markdown-compiler.js.map +1 -0
  81. package/dist/playbook/reconciler.d.ts +10 -0
  82. package/dist/playbook/reconciler.d.ts.map +1 -0
  83. package/dist/playbook/reconciler.js +43 -0
  84. package/dist/playbook/reconciler.js.map +1 -0
  85. package/dist/playbook/store.d.ts +12 -0
  86. package/dist/playbook/store.d.ts.map +1 -0
  87. package/dist/playbook/store.js +2 -0
  88. package/dist/playbook/store.js.map +1 -0
  89. package/dist/playbook/types.d.ts +139 -0
  90. package/dist/playbook/types.d.ts.map +1 -0
  91. package/dist/playbook/types.js +23 -0
  92. package/dist/playbook/types.js.map +1 -0
  93. package/dist/primitives/execution-sandbox.d.ts +7 -0
  94. package/dist/primitives/execution-sandbox.d.ts.map +1 -0
  95. package/dist/primitives/execution-sandbox.js +87 -0
  96. package/dist/primitives/execution-sandbox.js.map +1 -0
  97. package/dist/primitives/ratchet-guard.d.ts +10 -0
  98. package/dist/primitives/ratchet-guard.d.ts.map +1 -0
  99. package/dist/primitives/ratchet-guard.js +44 -0
  100. package/dist/primitives/ratchet-guard.js.map +1 -0
  101. package/dist/primitives/token-budget.d.ts +10 -0
  102. package/dist/primitives/token-budget.d.ts.map +1 -0
  103. package/dist/primitives/token-budget.js +29 -0
  104. package/dist/primitives/token-budget.js.map +1 -0
  105. package/dist/primitives/types.d.ts +16 -0
  106. package/dist/primitives/types.d.ts.map +1 -0
  107. package/dist/primitives/types.js +2 -0
  108. package/dist/primitives/types.js.map +1 -0
  109. package/dist/reflector/reflector.d.ts +17 -0
  110. package/dist/reflector/reflector.d.ts.map +1 -0
  111. package/dist/reflector/reflector.js +46 -0
  112. package/dist/reflector/reflector.js.map +1 -0
  113. package/dist/reflector/types.d.ts +19 -0
  114. package/dist/reflector/types.d.ts.map +1 -0
  115. package/dist/reflector/types.js +2 -0
  116. package/dist/reflector/types.js.map +1 -0
  117. package/package.json +30 -0
@@ -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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/playbook/store.ts"],"names":[],"mappings":""}