@dot-ai/core 0.5.2 → 0.8.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 (132) hide show
  1. package/dist/boot-cache.d.ts +40 -0
  2. package/dist/boot-cache.d.ts.map +1 -0
  3. package/dist/boot-cache.js +72 -0
  4. package/dist/boot-cache.js.map +1 -0
  5. package/dist/capabilities.d.ts +35 -0
  6. package/dist/capabilities.d.ts.map +1 -0
  7. package/dist/capabilities.js +17 -0
  8. package/dist/capabilities.js.map +1 -0
  9. package/dist/config.d.ts +7 -23
  10. package/dist/config.d.ts.map +1 -1
  11. package/dist/config.js +131 -108
  12. package/dist/config.js.map +1 -1
  13. package/dist/extension-api.d.ts +65 -0
  14. package/dist/extension-api.d.ts.map +1 -0
  15. package/dist/extension-api.js +2 -0
  16. package/dist/extension-api.js.map +1 -0
  17. package/dist/extension-loader.d.ts +19 -0
  18. package/dist/extension-loader.d.ts.map +1 -0
  19. package/dist/extension-loader.js +113 -0
  20. package/dist/extension-loader.js.map +1 -0
  21. package/dist/extension-runner.d.ts +62 -0
  22. package/dist/extension-runner.d.ts.map +1 -0
  23. package/dist/extension-runner.js +260 -0
  24. package/dist/extension-runner.js.map +1 -0
  25. package/dist/extension-types.d.ts +312 -0
  26. package/dist/extension-types.d.ts.map +1 -0
  27. package/dist/extension-types.js +89 -0
  28. package/dist/extension-types.js.map +1 -0
  29. package/dist/format.d.ts +13 -1
  30. package/dist/format.d.ts.map +1 -1
  31. package/dist/format.js +131 -15
  32. package/dist/format.js.map +1 -1
  33. package/dist/format.spec.d.ts +2 -0
  34. package/dist/format.spec.d.ts.map +1 -0
  35. package/dist/format.spec.js +140 -0
  36. package/dist/format.spec.js.map +1 -0
  37. package/dist/index.d.ts +21 -14
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +21 -14
  40. package/dist/index.js.map +1 -1
  41. package/dist/logger.d.ts +1 -1
  42. package/dist/logger.d.ts.map +1 -1
  43. package/dist/package-manager.d.ts +30 -0
  44. package/dist/package-manager.d.ts.map +1 -0
  45. package/dist/package-manager.js +91 -0
  46. package/dist/package-manager.js.map +1 -0
  47. package/dist/runtime.d.ts +119 -0
  48. package/dist/runtime.d.ts.map +1 -0
  49. package/dist/runtime.js +441 -0
  50. package/dist/runtime.js.map +1 -0
  51. package/dist/types.d.ts +29 -10
  52. package/dist/types.d.ts.map +1 -1
  53. package/package.json +4 -1
  54. package/src/__tests__/capabilities.test.ts +72 -0
  55. package/src/__tests__/config.test.ts +22 -120
  56. package/src/__tests__/extension-loader.test.ts +84 -0
  57. package/src/__tests__/extension-runner.test.ts +228 -0
  58. package/src/__tests__/fixtures/extensions/ctx-aware.js +26 -0
  59. package/src/__tests__/fixtures/extensions/security-gate.js +20 -0
  60. package/src/__tests__/fixtures/extensions/session-analytics.js +28 -0
  61. package/src/__tests__/fixtures/extensions/smart-context.js +10 -0
  62. package/src/__tests__/format.test.ts +207 -2
  63. package/src/__tests__/runtime.test.ts +141 -0
  64. package/src/boot-cache.ts +104 -0
  65. package/src/capabilities.ts +49 -0
  66. package/src/config.ts +131 -133
  67. package/src/extension-api.ts +99 -0
  68. package/src/extension-loader.ts +127 -0
  69. package/src/extension-runner.ts +297 -0
  70. package/src/extension-types.ts +416 -0
  71. package/src/format.spec.ts +175 -0
  72. package/src/format.test.ts +218 -0
  73. package/src/format.ts +140 -16
  74. package/src/index.ts +68 -30
  75. package/src/logger.ts +1 -1
  76. package/src/package-manager.ts +119 -0
  77. package/src/runtime.ts +562 -0
  78. package/src/types.ts +36 -14
  79. package/tsconfig.json +1 -1
  80. package/tsconfig.tsbuildinfo +1 -1
  81. package/.ai/memory/2026-03-04.md +0 -2
  82. package/.ai/tasks.json +0 -7
  83. package/dist/__tests__/config.test.d.ts +0 -2
  84. package/dist/__tests__/config.test.d.ts.map +0 -1
  85. package/dist/__tests__/config.test.js +0 -128
  86. package/dist/__tests__/config.test.js.map +0 -1
  87. package/dist/__tests__/e2e.test.d.ts +0 -2
  88. package/dist/__tests__/e2e.test.d.ts.map +0 -1
  89. package/dist/__tests__/e2e.test.js +0 -211
  90. package/dist/__tests__/e2e.test.js.map +0 -1
  91. package/dist/__tests__/engine.test.d.ts +0 -2
  92. package/dist/__tests__/engine.test.d.ts.map +0 -1
  93. package/dist/__tests__/engine.test.js +0 -271
  94. package/dist/__tests__/engine.test.js.map +0 -1
  95. package/dist/__tests__/format.test.d.ts +0 -2
  96. package/dist/__tests__/format.test.d.ts.map +0 -1
  97. package/dist/__tests__/format.test.js +0 -200
  98. package/dist/__tests__/format.test.js.map +0 -1
  99. package/dist/__tests__/labels.test.d.ts +0 -2
  100. package/dist/__tests__/labels.test.d.ts.map +0 -1
  101. package/dist/__tests__/labels.test.js +0 -82
  102. package/dist/__tests__/labels.test.js.map +0 -1
  103. package/dist/__tests__/loader.test.d.ts +0 -2
  104. package/dist/__tests__/loader.test.d.ts.map +0 -1
  105. package/dist/__tests__/loader.test.js +0 -161
  106. package/dist/__tests__/loader.test.js.map +0 -1
  107. package/dist/__tests__/logger.test.d.ts +0 -2
  108. package/dist/__tests__/logger.test.d.ts.map +0 -1
  109. package/dist/__tests__/logger.test.js +0 -95
  110. package/dist/__tests__/logger.test.js.map +0 -1
  111. package/dist/__tests__/nodes.test.d.ts +0 -2
  112. package/dist/__tests__/nodes.test.d.ts.map +0 -1
  113. package/dist/__tests__/nodes.test.js +0 -83
  114. package/dist/__tests__/nodes.test.js.map +0 -1
  115. package/dist/contracts.d.ts +0 -56
  116. package/dist/contracts.d.ts.map +0 -1
  117. package/dist/contracts.js +0 -2
  118. package/dist/contracts.js.map +0 -1
  119. package/dist/engine.d.ts +0 -38
  120. package/dist/engine.d.ts.map +0 -1
  121. package/dist/engine.js +0 -88
  122. package/dist/engine.js.map +0 -1
  123. package/dist/loader.d.ts +0 -26
  124. package/dist/loader.d.ts.map +0 -1
  125. package/dist/loader.js +0 -120
  126. package/dist/loader.js.map +0 -1
  127. package/src/__tests__/e2e.test.ts +0 -257
  128. package/src/__tests__/engine.test.ts +0 -305
  129. package/src/__tests__/loader.test.ts +0 -191
  130. package/src/contracts.ts +0 -71
  131. package/src/engine.ts +0 -145
  132. package/src/loader.ts +0 -152
@@ -1,211 +0,0 @@
1
- import { describe, it, expect, beforeEach } from 'vitest';
2
- import { mkdtemp, mkdir, writeFile } from 'node:fs/promises';
3
- import { tmpdir } from 'node:os';
4
- import { join } from 'node:path';
5
- import { loadConfig, resolveConfig, registerDefaults, clearProviders, createProviders, boot, enrich, learn, } from '../index.js';
6
- describe('E2E: full pipeline', () => {
7
- let root;
8
- beforeEach(async () => {
9
- clearProviders();
10
- registerDefaults();
11
- root = await mkdtemp(join(tmpdir(), 'dot-ai-e2e-'));
12
- const ai = join(root, '.ai');
13
- // Create .ai/ structure
14
- await mkdir(ai, { recursive: true });
15
- await mkdir(join(ai, 'memory'), { recursive: true });
16
- await mkdir(join(ai, 'skills', 'ts-standards'), { recursive: true });
17
- await mkdir(join(ai, 'skills', 'code-review'), { recursive: true });
18
- await mkdir(join(ai, 'tools'), { recursive: true });
19
- // Identity files
20
- await writeFile(join(ai, 'AGENTS.md'), '# AGENTS.md\n\nYou are Kiwi, a helpful assistant.\n\n## Rules\n- Always be concise\n- Use TypeScript');
21
- await writeFile(join(ai, 'SOUL.md'), '# SOUL.md\n\nBe genuine. Skip the fluff.');
22
- await writeFile(join(ai, 'USER.md'), '# USER.md\n\nJo, developer, Belgium.');
23
- await writeFile(join(ai, 'IDENTITY.md'), '# IDENTITY.md\n\nName: Kiwi\nEmoji: 🥝');
24
- // Skills with frontmatter
25
- await writeFile(join(ai, 'skills', 'ts-standards', 'SKILL.md'), [
26
- '---',
27
- 'description: TypeScript coding standards',
28
- 'labels: [typescript, code, standards]',
29
- 'triggers: [auto]',
30
- '---',
31
- '',
32
- '## TypeScript Standards',
33
- '',
34
- '- Use strict mode',
35
- '- Prefer const over let',
36
- '- Add type annotations',
37
- ].join('\n'));
38
- await writeFile(join(ai, 'skills', 'code-review', 'SKILL.md'), [
39
- '---',
40
- 'description: Code review guidelines',
41
- 'labels: [review, code-fix, bug]',
42
- 'triggers: [auto]',
43
- '---',
44
- '',
45
- '## Code Review',
46
- '',
47
- '- Check for edge cases',
48
- '- Verify error handling',
49
- ].join('\n'));
50
- // Tools
51
- await writeFile(join(ai, 'tools', 'eslint.yaml'), [
52
- 'name: eslint',
53
- 'description: TypeScript linter',
54
- 'labels: [typescript, lint, code]',
55
- ].join('\n'));
56
- // Memory (some past entries)
57
- await writeFile(join(ai, 'memory', '2026-03-01.md'), [
58
- '- Fixed auth middleware N+1 query bug',
59
- '- Decided to use JWT for auth tokens',
60
- '- Rate limiting added to auth endpoints',
61
- ].join('\n'));
62
- await writeFile(join(ai, 'memory', '2026-03-02.md'), [
63
- '- Refactored database connection pooling',
64
- '- Updated React test suite to use vitest',
65
- ].join('\n'));
66
- // Config — uses 4-space indent for 'with' block (parsed as options)
67
- // The parser maps 4-space keys directly into section.with
68
- await writeFile(join(ai, 'dot-ai.yml'), [
69
- '# dot-ai config',
70
- 'memory:',
71
- ' use: @dot-ai/provider-file-memory',
72
- ` root: ${root}`,
73
- 'skills:',
74
- ' use: @dot-ai/provider-file-skills',
75
- ` root: ${root}`,
76
- 'identity:',
77
- ' use: @dot-ai/provider-file-identity',
78
- ` root: ${root}`,
79
- 'routing:',
80
- ' use: @dot-ai/provider-rules-routing',
81
- 'tasks:',
82
- ' use: @dot-ai/provider-file-tasks',
83
- ` root: ${root}`,
84
- 'tools:',
85
- ' use: @dot-ai/provider-file-tools',
86
- ` root: ${root}`,
87
- ].join('\n'));
88
- });
89
- it('runs the complete pipeline: config → providers → boot → enrich', async () => {
90
- // 1. Load config
91
- const config = await loadConfig(root);
92
- expect(config).toBeDefined();
93
- // 2. Create providers
94
- const providers = await createProviders(config);
95
- expect(providers).toBeDefined();
96
- expect(providers.memory).toBeDefined();
97
- expect(providers.skills).toBeDefined();
98
- expect(providers.identity).toBeDefined();
99
- expect(providers.routing).toBeDefined();
100
- expect(providers.tasks).toBeDefined();
101
- expect(providers.tools).toBeDefined();
102
- // 3. Boot
103
- const cache = await boot(providers);
104
- expect(cache.identities.length).toBe(4); // AGENTS, SOUL, USER, IDENTITY
105
- expect(cache.skills.length).toBe(2); // ts-standards, code-review
106
- expect(cache.vocabulary.length).toBeGreaterThan(0);
107
- expect(cache.vocabulary).toContain('typescript');
108
- expect(cache.vocabulary).toContain('code');
109
- // 4. Enrich a prompt
110
- const ctx = await enrich('Fix the TypeScript bug in the auth module', providers, cache);
111
- // Check labels extracted
112
- expect(ctx.labels.length).toBeGreaterThan(0);
113
- expect(ctx.labels.some(l => l.name === 'typescript')).toBe(true);
114
- // Check identities loaded
115
- expect(ctx.identities.length).toBe(4);
116
- expect(ctx.identities.find(i => i.type === 'agents')?.content).toContain('Kiwi');
117
- // Check memories found (should match "auth" and/or "bug")
118
- expect(ctx.memories.length).toBeGreaterThan(0);
119
- expect(ctx.memories.some(m => m.content.includes('auth'))).toBe(true);
120
- // Check skills matched (typescript label should match ts-standards)
121
- expect(ctx.skills.length).toBeGreaterThan(0);
122
- expect(ctx.skills.some(s => s.name === 'ts-standards')).toBe(true);
123
- // Check tools matched (typescript label should match eslint)
124
- expect(ctx.tools.length).toBeGreaterThan(0);
125
- expect(ctx.tools.some(t => t.name === 'eslint')).toBe(true);
126
- // Check routing (code-fix → sonnet)
127
- expect(ctx.routing.model).toBeDefined();
128
- });
129
- it('enriches differently for different prompts', async () => {
130
- const config = await loadConfig(root);
131
- const providers = await createProviders(config);
132
- const cache = await boot(providers);
133
- // A code-related prompt should match code skills and tools
134
- const codeFix = await enrich('Fix the TypeScript bug', providers, cache);
135
- expect(codeFix.skills.some(s => s.name === 'ts-standards')).toBe(true);
136
- expect(codeFix.tools.some(t => t.name === 'eslint')).toBe(true);
137
- // A review-related prompt should match code-review skill
138
- const review = await enrich('Review this code for bugs', providers, cache);
139
- expect(review.skills.some(s => s.name === 'code-review')).toBe(true);
140
- });
141
- it('learns from agent responses and retrieves later', async () => {
142
- const config = await loadConfig(root);
143
- const providers = await createProviders(config);
144
- const cache = await boot(providers);
145
- // Learn something
146
- await learn('Discovered that the connection pool was configured wrong', providers);
147
- // Should be retrievable via memory search
148
- const ctx = await enrich('What about the connection pool?', providers, cache);
149
- expect(ctx.memories.some(m => m.content.includes('connection pool'))).toBe(true);
150
- });
151
- it('works with empty .ai/ directory (minimal config)', async () => {
152
- const emptyRoot = await mkdtemp(join(tmpdir(), 'dot-ai-empty-'));
153
- await mkdir(join(emptyRoot, '.ai'), { recursive: true });
154
- await writeFile(join(emptyRoot, '.ai', 'dot-ai.yml'), '# empty config');
155
- const config = await loadConfig(emptyRoot);
156
- // Inject root so providers read from the empty dir (not process.cwd())
157
- const resolvedConfig = {
158
- memory: { use: '@dot-ai/provider-file-memory', with: { root: emptyRoot } },
159
- skills: { use: '@dot-ai/provider-file-skills', with: { root: emptyRoot } },
160
- identity: { use: '@dot-ai/provider-file-identity', with: { root: emptyRoot } },
161
- routing: { use: '@dot-ai/provider-rules-routing' },
162
- tasks: { use: '@dot-ai/provider-file-tasks', with: { root: emptyRoot } },
163
- tools: { use: '@dot-ai/provider-file-tools', with: { root: emptyRoot } },
164
- ...config,
165
- };
166
- const providers = await createProviders(resolvedConfig);
167
- const cache = await boot(providers);
168
- expect(cache.identities).toEqual([]);
169
- expect(cache.skills).toEqual([]);
170
- expect(cache.vocabulary).toEqual([]);
171
- const ctx = await enrich('Hello', providers, cache);
172
- expect(ctx.identities).toEqual([]);
173
- expect(ctx.memories).toEqual([]);
174
- expect(ctx.skills).toEqual([]);
175
- });
176
- it('unregistered provider falls back to noop gracefully', async () => {
177
- // Auto-discovery: when a provider name is not in the registry and cannot be
178
- // dynamically imported (e.g. package doesn't exist), createProviders must
179
- // return a working noop instead of throwing.
180
- clearProviders(); // no defaults registered
181
- const providers = await createProviders({
182
- memory: { use: '@dot-ai/nonexistent-memory-provider' },
183
- });
184
- // Should not throw — noop memory is returned
185
- const memories = await providers.memory.search('anything');
186
- expect(memories).toEqual([]);
187
- await expect(providers.memory.store({ content: 'x', type: 'log' })).resolves.toBeUndefined();
188
- });
189
- it('boot caches skills and vocabulary for reuse across prompts', async () => {
190
- const config = await loadConfig(root);
191
- const providers = await createProviders(config);
192
- const cache = await boot(providers);
193
- // Run enrich multiple times — should all use same cache
194
- const ctx1 = await enrich('Fix typescript', providers, cache);
195
- const ctx2 = await enrich('Review code', providers, cache);
196
- const ctx3 = await enrich('Something unrelated', providers, cache);
197
- // All should have same identities from cache
198
- expect(ctx1.identities).toEqual(ctx2.identities);
199
- expect(ctx2.identities).toEqual(ctx3.identities);
200
- });
201
- it('resolveConfig fills defaults for missing providers', () => {
202
- const resolved = resolveConfig({});
203
- expect(resolved.memory.use).toBe('@dot-ai/provider-file-memory');
204
- expect(resolved.skills.use).toBe('@dot-ai/provider-file-skills');
205
- expect(resolved.identity.use).toBe('@dot-ai/provider-file-identity');
206
- expect(resolved.routing.use).toBe('@dot-ai/provider-rules-routing');
207
- expect(resolved.tasks.use).toBe('@dot-ai/provider-file-tasks');
208
- expect(resolved.tools.use).toBe('@dot-ai/provider-file-tools');
209
- });
210
- });
211
- //# sourceMappingURL=e2e.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/e2e.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=engine.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/engine.test.ts"],"names":[],"mappings":""}
@@ -1,271 +0,0 @@
1
- import { describe, it, expect, vi } from 'vitest';
2
- import { boot, enrich, learn } from '../engine.js';
3
- function createMockProviders(overrides) {
4
- return {
5
- memory: {
6
- search: vi.fn().mockResolvedValue([]),
7
- store: vi.fn().mockResolvedValue(undefined),
8
- },
9
- skills: {
10
- list: vi.fn().mockResolvedValue([]),
11
- match: vi.fn().mockResolvedValue([]),
12
- load: vi.fn().mockResolvedValue(null),
13
- },
14
- identity: {
15
- load: vi.fn().mockResolvedValue([]),
16
- },
17
- routing: {
18
- route: vi.fn().mockResolvedValue({ model: 'sonnet', reason: 'default' }),
19
- },
20
- tasks: {
21
- list: vi.fn().mockResolvedValue([]),
22
- get: vi.fn().mockResolvedValue(null),
23
- create: vi.fn(),
24
- update: vi.fn(),
25
- },
26
- tools: {
27
- list: vi.fn().mockResolvedValue([]),
28
- match: vi.fn().mockResolvedValue([]),
29
- load: vi.fn().mockResolvedValue(null),
30
- },
31
- ...overrides,
32
- };
33
- }
34
- describe('boot', () => {
35
- it('calls identity.load(), skills.list(), tools.list()', async () => {
36
- const providers = createMockProviders();
37
- await boot(providers);
38
- expect(providers.identity.load).toHaveBeenCalledOnce();
39
- expect(providers.skills.list).toHaveBeenCalledOnce();
40
- expect(providers.tools.list).toHaveBeenCalledOnce();
41
- });
42
- it('returns a BootCache with identities, vocabulary, skills', async () => {
43
- const providers = createMockProviders();
44
- const cache = await boot(providers);
45
- expect(cache).toHaveProperty('identities');
46
- expect(cache).toHaveProperty('vocabulary');
47
- expect(cache).toHaveProperty('skills');
48
- });
49
- it('populates identities from identity provider', async () => {
50
- const mockIdentities = [
51
- { type: 'agents', content: 'I am Kiwi', source: 'file', priority: 1 },
52
- ];
53
- const providers = createMockProviders({
54
- identity: { load: vi.fn().mockResolvedValue(mockIdentities) },
55
- });
56
- const cache = await boot(providers);
57
- expect(cache.identities).toEqual(mockIdentities);
58
- });
59
- it('populates skills from skills provider', async () => {
60
- const mockSkills = [
61
- { name: 'dot-ai-tasks', description: 'Task management', labels: ['tasks', 'cockpit'] },
62
- ];
63
- const providers = createMockProviders({
64
- skills: {
65
- list: vi.fn().mockResolvedValue(mockSkills),
66
- match: vi.fn().mockResolvedValue([]),
67
- load: vi.fn().mockResolvedValue(null),
68
- },
69
- });
70
- const cache = await boot(providers);
71
- expect(cache.skills).toEqual(mockSkills);
72
- });
73
- it('builds vocabulary from skill and tool labels', async () => {
74
- const providers = createMockProviders({
75
- skills: {
76
- list: vi.fn().mockResolvedValue([
77
- { name: 'skill-a', description: 'A', labels: ['memory', 'routing'] },
78
- ]),
79
- match: vi.fn().mockResolvedValue([]),
80
- load: vi.fn().mockResolvedValue(null),
81
- },
82
- tools: {
83
- list: vi.fn().mockResolvedValue([
84
- { name: 'tool-b', description: 'B', labels: ['ui', 'ux'], config: {}, source: 'file' },
85
- ]),
86
- match: vi.fn().mockResolvedValue([]),
87
- load: vi.fn().mockResolvedValue(null),
88
- },
89
- });
90
- const cache = await boot(providers);
91
- expect(cache.vocabulary).toContain('memory');
92
- expect(cache.vocabulary).toContain('routing');
93
- expect(cache.vocabulary).toContain('ui');
94
- expect(cache.vocabulary).toContain('ux');
95
- });
96
- it('calls identity, skills, and tools providers in parallel (all called before any awaited)', async () => {
97
- const callOrder = [];
98
- const providers = createMockProviders({
99
- identity: {
100
- load: vi.fn().mockImplementation(async () => {
101
- callOrder.push('identity');
102
- return [];
103
- }),
104
- },
105
- skills: {
106
- list: vi.fn().mockImplementation(async () => {
107
- callOrder.push('skills');
108
- return [];
109
- }),
110
- match: vi.fn().mockResolvedValue([]),
111
- load: vi.fn().mockResolvedValue(null),
112
- },
113
- tools: {
114
- list: vi.fn().mockImplementation(async () => {
115
- callOrder.push('tools');
116
- return [];
117
- }),
118
- match: vi.fn().mockResolvedValue([]),
119
- load: vi.fn().mockResolvedValue(null),
120
- },
121
- });
122
- await boot(providers);
123
- // All three should have been called (order may vary in parallel)
124
- expect(callOrder).toContain('identity');
125
- expect(callOrder).toContain('skills');
126
- expect(callOrder).toContain('tools');
127
- });
128
- });
129
- describe('enrich', () => {
130
- const baseCache = {
131
- identities: [{ type: 'agents', content: 'I am Kiwi', source: 'file', priority: 1 }],
132
- vocabulary: ['memory', 'routing', 'tasks'],
133
- skills: [],
134
- };
135
- it('returns an EnrichedContext with all required fields', async () => {
136
- const providers = createMockProviders();
137
- const result = await enrich('fix the memory issue', providers, baseCache);
138
- expect(result).toHaveProperty('prompt');
139
- expect(result).toHaveProperty('labels');
140
- expect(result).toHaveProperty('identities');
141
- expect(result).toHaveProperty('memories');
142
- expect(result).toHaveProperty('skills');
143
- expect(result).toHaveProperty('tools');
144
- expect(result).toHaveProperty('routing');
145
- });
146
- it('includes the original prompt in the result', async () => {
147
- const providers = createMockProviders();
148
- const result = await enrich('fix the memory issue', providers, baseCache);
149
- expect(result.prompt).toBe('fix the memory issue');
150
- });
151
- it('extracts labels from prompt against vocabulary', async () => {
152
- const providers = createMockProviders();
153
- const result = await enrich('fix the memory issue', providers, baseCache);
154
- const labelNames = result.labels.map((l) => l.name);
155
- expect(labelNames).toContain('memory');
156
- expect(labelNames).not.toContain('routing');
157
- });
158
- it('includes identities from cache', async () => {
159
- const providers = createMockProviders();
160
- const result = await enrich('hello', providers, baseCache);
161
- expect(result.identities).toEqual(baseCache.identities);
162
- });
163
- it('calls memory.search with prompt and extracted label names', async () => {
164
- const providers = createMockProviders();
165
- await enrich('fix the memory issue', providers, baseCache);
166
- expect(providers.memory.search).toHaveBeenCalledWith('fix the memory issue', ['memory']);
167
- });
168
- it('calls skills.match with extracted labels', async () => {
169
- const providers = createMockProviders();
170
- await enrich('fix the routing logic', providers, baseCache);
171
- expect(providers.skills.match).toHaveBeenCalledWith(expect.arrayContaining([expect.objectContaining({ name: 'routing' })]));
172
- });
173
- it('calls tools.match with extracted labels', async () => {
174
- const providers = createMockProviders();
175
- await enrich('tasks need fixing', providers, baseCache);
176
- expect(providers.tools.match).toHaveBeenCalledWith(expect.arrayContaining([expect.objectContaining({ name: 'tasks' })]));
177
- });
178
- it('calls routing.route with extracted labels', async () => {
179
- const providers = createMockProviders();
180
- await enrich('fix the memory issue', providers, baseCache);
181
- expect(providers.routing.route).toHaveBeenCalledWith(expect.arrayContaining([expect.objectContaining({ name: 'memory' })]));
182
- });
183
- it('populates memories from memory.search result', async () => {
184
- const mockMemories = [
185
- { content: 'Memory fact', type: 'fact', source: 'file' },
186
- ];
187
- const providers = createMockProviders({
188
- memory: {
189
- search: vi.fn().mockResolvedValue(mockMemories),
190
- store: vi.fn().mockResolvedValue(undefined),
191
- },
192
- });
193
- const result = await enrich('fix the memory issue', providers, baseCache);
194
- expect(result.memories).toEqual(mockMemories);
195
- });
196
- it('populates skills from skills.match result', async () => {
197
- const mockSkills = [
198
- { name: 'dot-ai-tasks', description: 'Tasks', labels: ['tasks'] },
199
- ];
200
- const providers = createMockProviders({
201
- skills: {
202
- list: vi.fn().mockResolvedValue([]),
203
- match: vi.fn().mockResolvedValue(mockSkills),
204
- load: vi.fn().mockResolvedValue(null),
205
- },
206
- });
207
- const result = await enrich('hello', providers, baseCache);
208
- expect(result.skills).toEqual(mockSkills);
209
- });
210
- it('populates routing from routing.route result', async () => {
211
- const mockRouting = { model: 'opus', reason: 'complex task' };
212
- const providers = createMockProviders({
213
- routing: { route: vi.fn().mockResolvedValue(mockRouting) },
214
- });
215
- const result = await enrich('hello', providers, baseCache);
216
- expect(result.routing).toEqual(mockRouting);
217
- });
218
- it('calls memory, skills, tools, routing in parallel', async () => {
219
- const callOrder = [];
220
- const providers = createMockProviders({
221
- memory: {
222
- search: vi.fn().mockImplementation(async () => { callOrder.push('memory'); return []; }),
223
- store: vi.fn().mockResolvedValue(undefined),
224
- },
225
- skills: {
226
- list: vi.fn().mockResolvedValue([]),
227
- match: vi.fn().mockImplementation(async () => { callOrder.push('skills'); return []; }),
228
- load: vi.fn().mockResolvedValue(null),
229
- },
230
- tools: {
231
- list: vi.fn().mockResolvedValue([]),
232
- match: vi.fn().mockImplementation(async () => { callOrder.push('tools'); return []; }),
233
- load: vi.fn().mockResolvedValue(null),
234
- },
235
- routing: {
236
- route: vi.fn().mockImplementation(async () => { callOrder.push('routing'); return { model: 'sonnet', reason: 'default' }; }),
237
- },
238
- });
239
- await enrich('hello world', providers, baseCache);
240
- expect(callOrder).toContain('memory');
241
- expect(callOrder).toContain('skills');
242
- expect(callOrder).toContain('tools');
243
- expect(callOrder).toContain('routing');
244
- });
245
- });
246
- describe('learn', () => {
247
- it('calls memory.store with the response', async () => {
248
- const providers = createMockProviders();
249
- await learn('This is what I learned today', providers);
250
- expect(providers.memory.store).toHaveBeenCalledOnce();
251
- expect(providers.memory.store).toHaveBeenCalledWith(expect.objectContaining({ content: 'This is what I learned today', type: 'log' }));
252
- });
253
- it('stores entry with today\'s date', async () => {
254
- const providers = createMockProviders();
255
- const today = new Date().toISOString().slice(0, 10);
256
- await learn('response', providers);
257
- expect(providers.memory.store).toHaveBeenCalledWith(expect.objectContaining({ date: today }));
258
- });
259
- it('does not call any other provider methods', async () => {
260
- const providers = createMockProviders();
261
- await learn('response', providers);
262
- expect(providers.skills.list).not.toHaveBeenCalled();
263
- expect(providers.identity.load).not.toHaveBeenCalled();
264
- expect(providers.routing.route).not.toHaveBeenCalled();
265
- });
266
- it('resolves without error on successful store', async () => {
267
- const providers = createMockProviders();
268
- await expect(learn('response', providers)).resolves.toBeUndefined();
269
- });
270
- });
271
- //# sourceMappingURL=engine.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.test.js","sourceRoot":"","sources":["../../src/__tests__/engine.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=format.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"format.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/format.test.ts"],"names":[],"mappings":""}