@dot-ai/core 0.5.2
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/.ai/memory/2026-03-04.md +2 -0
- package/.ai/tasks.json +7 -0
- package/LICENSE +21 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +128 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/e2e.test.d.ts +2 -0
- package/dist/__tests__/e2e.test.d.ts.map +1 -0
- package/dist/__tests__/e2e.test.js +211 -0
- package/dist/__tests__/e2e.test.js.map +1 -0
- package/dist/__tests__/engine.test.d.ts +2 -0
- package/dist/__tests__/engine.test.d.ts.map +1 -0
- package/dist/__tests__/engine.test.js +271 -0
- package/dist/__tests__/engine.test.js.map +1 -0
- package/dist/__tests__/format.test.d.ts +2 -0
- package/dist/__tests__/format.test.d.ts.map +1 -0
- package/dist/__tests__/format.test.js +200 -0
- package/dist/__tests__/format.test.js.map +1 -0
- package/dist/__tests__/labels.test.d.ts +2 -0
- package/dist/__tests__/labels.test.d.ts.map +1 -0
- package/dist/__tests__/labels.test.js +82 -0
- package/dist/__tests__/labels.test.js.map +1 -0
- package/dist/__tests__/loader.test.d.ts +2 -0
- package/dist/__tests__/loader.test.d.ts.map +1 -0
- package/dist/__tests__/loader.test.js +161 -0
- package/dist/__tests__/loader.test.js.map +1 -0
- package/dist/__tests__/logger.test.d.ts +2 -0
- package/dist/__tests__/logger.test.d.ts.map +1 -0
- package/dist/__tests__/logger.test.js +95 -0
- package/dist/__tests__/logger.test.js.map +1 -0
- package/dist/__tests__/nodes.test.d.ts +2 -0
- package/dist/__tests__/nodes.test.d.ts.map +1 -0
- package/dist/__tests__/nodes.test.js +83 -0
- package/dist/__tests__/nodes.test.js.map +1 -0
- package/dist/config.d.ts +29 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +141 -0
- package/dist/config.js.map +1 -0
- package/dist/contracts.d.ts +56 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +2 -0
- package/dist/contracts.js.map +1 -0
- package/dist/engine.d.ts +38 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +88 -0
- package/dist/engine.js.map +1 -0
- package/dist/format.d.ts +18 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +89 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/labels.d.ts +13 -0
- package/dist/labels.d.ts.map +1 -0
- package/dist/labels.js +36 -0
- package/dist/labels.js.map +1 -0
- package/dist/loader.d.ts +26 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +120 -0
- package/dist/loader.js.map +1 -0
- package/dist/logger.d.ts +29 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +29 -0
- package/dist/logger.js.map +1 -0
- package/dist/nodes.d.ts +15 -0
- package/dist/nodes.d.ts.map +1 -0
- package/dist/nodes.js +46 -0
- package/dist/nodes.js.map +1 -0
- package/dist/types.d.ts +111 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +23 -0
- package/src/__tests__/config.test.ts +166 -0
- package/src/__tests__/e2e.test.ts +257 -0
- package/src/__tests__/engine.test.ts +305 -0
- package/src/__tests__/format.test.ts +247 -0
- package/src/__tests__/labels.test.ts +96 -0
- package/src/__tests__/loader.test.ts +191 -0
- package/src/__tests__/logger.test.ts +113 -0
- package/src/__tests__/nodes.test.ts +103 -0
- package/src/config.ts +178 -0
- package/src/contracts.ts +71 -0
- package/src/engine.ts +145 -0
- package/src/format.ts +113 -0
- package/src/index.ts +63 -0
- package/src/labels.ts +40 -0
- package/src/loader.ts +152 -0
- package/src/logger.ts +49 -0
- package/src/nodes.ts +46 -0
- package/src/types.ts +123 -0
- package/tsconfig.json +23 -0
- package/tsconfig.tsbuildinfo +1 -0
package/.ai/tasks.json
ADDED
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Jonathan Gelin
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach } from 'vitest';
|
|
2
|
+
import { mkdtemp, writeFile, mkdir } from 'node:fs/promises';
|
|
3
|
+
import { tmpdir } from 'node:os';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { loadConfig, resolveConfig } from '../config.js';
|
|
6
|
+
let testDir;
|
|
7
|
+
beforeEach(async () => {
|
|
8
|
+
testDir = await mkdtemp(join(tmpdir(), 'dot-ai-test-'));
|
|
9
|
+
await mkdir(join(testDir, '.ai'), { recursive: true });
|
|
10
|
+
});
|
|
11
|
+
describe('loadConfig', () => {
|
|
12
|
+
it('returns empty config when no file exists', async () => {
|
|
13
|
+
const config = await loadConfig(testDir);
|
|
14
|
+
expect(config).toEqual({});
|
|
15
|
+
});
|
|
16
|
+
it('returns empty config when .ai directory has no dot-ai.yml', async () => {
|
|
17
|
+
const config = await loadConfig('/nonexistent/path/to/workspace');
|
|
18
|
+
expect(config).toEqual({});
|
|
19
|
+
});
|
|
20
|
+
it('parses a simple memory section', async () => {
|
|
21
|
+
await writeFile(join(testDir, '.ai', 'dot-ai.yml'), `memory:\n use: @dot-ai/provider-file-memory\n`, 'utf-8');
|
|
22
|
+
const config = await loadConfig(testDir);
|
|
23
|
+
expect(config.memory).toEqual({ use: '@dot-ai/provider-file-memory' });
|
|
24
|
+
});
|
|
25
|
+
it('parses multiple provider sections', async () => {
|
|
26
|
+
await writeFile(join(testDir, '.ai', 'dot-ai.yml'), [
|
|
27
|
+
'memory:',
|
|
28
|
+
' use: @dot-ai/provider-file-memory',
|
|
29
|
+
'skills:',
|
|
30
|
+
' use: @dot-ai/provider-file-skills',
|
|
31
|
+
'routing:',
|
|
32
|
+
' use: @dot-ai/provider-rules-routing',
|
|
33
|
+
].join('\n'), 'utf-8');
|
|
34
|
+
const config = await loadConfig(testDir);
|
|
35
|
+
expect(config.memory?.use).toBe('@dot-ai/provider-file-memory');
|
|
36
|
+
expect(config.skills?.use).toBe('@dot-ai/provider-file-skills');
|
|
37
|
+
expect(config.routing?.use).toBe('@dot-ai/provider-rules-routing');
|
|
38
|
+
});
|
|
39
|
+
it('parses nested with block', async () => {
|
|
40
|
+
await writeFile(join(testDir, '.ai', 'dot-ai.yml'), [
|
|
41
|
+
'memory:',
|
|
42
|
+
' use: @dot-ai/cockpit-memory',
|
|
43
|
+
' url: http://localhost:3010',
|
|
44
|
+
].join('\n'), 'utf-8');
|
|
45
|
+
const config = await loadConfig(testDir);
|
|
46
|
+
expect(config.memory?.use).toBe('@dot-ai/cockpit-memory');
|
|
47
|
+
expect(config.memory?.with?.['url']).toBe('http://localhost:3010');
|
|
48
|
+
});
|
|
49
|
+
it('resolves ${ENV_VAR} references', async () => {
|
|
50
|
+
process.env['DOT_AI_TEST_URL'] = 'http://test-server:9999';
|
|
51
|
+
await writeFile(join(testDir, '.ai', 'dot-ai.yml'), [
|
|
52
|
+
'memory:',
|
|
53
|
+
' use: @dot-ai/cockpit-memory',
|
|
54
|
+
' url: ${DOT_AI_TEST_URL}',
|
|
55
|
+
].join('\n'), 'utf-8');
|
|
56
|
+
const config = await loadConfig(testDir);
|
|
57
|
+
expect(config.memory?.with?.['url']).toBe('http://test-server:9999');
|
|
58
|
+
delete process.env['DOT_AI_TEST_URL'];
|
|
59
|
+
});
|
|
60
|
+
it('replaces undefined ENV_VAR with empty string', async () => {
|
|
61
|
+
delete process.env['MISSING_ENV_VAR'];
|
|
62
|
+
await writeFile(join(testDir, '.ai', 'dot-ai.yml'), [
|
|
63
|
+
'memory:',
|
|
64
|
+
' use: @dot-ai/provider-file-memory',
|
|
65
|
+
' key: ${MISSING_ENV_VAR}',
|
|
66
|
+
].join('\n'), 'utf-8');
|
|
67
|
+
const config = await loadConfig(testDir);
|
|
68
|
+
expect(config.memory?.with?.['key']).toBe('');
|
|
69
|
+
});
|
|
70
|
+
it('skips comment lines (# prefix)', async () => {
|
|
71
|
+
await writeFile(join(testDir, '.ai', 'dot-ai.yml'), [
|
|
72
|
+
'# This is a comment',
|
|
73
|
+
'memory:',
|
|
74
|
+
' # nested comment',
|
|
75
|
+
' use: @dot-ai/provider-file-memory',
|
|
76
|
+
].join('\n'), 'utf-8');
|
|
77
|
+
const config = await loadConfig(testDir);
|
|
78
|
+
expect(config.memory?.use).toBe('@dot-ai/provider-file-memory');
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('resolveConfig', () => {
|
|
82
|
+
it('fills all defaults for empty config', () => {
|
|
83
|
+
const resolved = resolveConfig({});
|
|
84
|
+
expect(resolved.memory.use).toBe('@dot-ai/provider-file-memory');
|
|
85
|
+
expect(resolved.skills.use).toBe('@dot-ai/provider-file-skills');
|
|
86
|
+
expect(resolved.identity.use).toBe('@dot-ai/provider-file-identity');
|
|
87
|
+
expect(resolved.routing.use).toBe('@dot-ai/provider-rules-routing');
|
|
88
|
+
expect(resolved.tasks.use).toBe('@dot-ai/provider-file-tasks');
|
|
89
|
+
expect(resolved.tools.use).toBe('@dot-ai/provider-file-tools');
|
|
90
|
+
});
|
|
91
|
+
it('preserves existing memory config', () => {
|
|
92
|
+
const resolved = resolveConfig({ memory: { use: '@dot-ai/cockpit-memory', with: { url: 'http://x' } } });
|
|
93
|
+
expect(resolved.memory.use).toBe('@dot-ai/cockpit-memory');
|
|
94
|
+
expect(resolved.memory.with?.['url']).toBe('http://x');
|
|
95
|
+
});
|
|
96
|
+
it('fills defaults only for missing providers', () => {
|
|
97
|
+
const resolved = resolveConfig({ memory: { use: '@dot-ai/cockpit-memory' } });
|
|
98
|
+
expect(resolved.memory.use).toBe('@dot-ai/cockpit-memory');
|
|
99
|
+
expect(resolved.skills.use).toBe('@dot-ai/provider-file-skills');
|
|
100
|
+
expect(resolved.routing.use).toBe('@dot-ai/provider-rules-routing');
|
|
101
|
+
});
|
|
102
|
+
it('returns a Required<DotAiConfig> with all keys present', () => {
|
|
103
|
+
const resolved = resolveConfig({});
|
|
104
|
+
const keys = ['memory', 'skills', 'identity', 'routing', 'tasks', 'tools'];
|
|
105
|
+
for (const key of keys) {
|
|
106
|
+
expect(resolved[key]).toBeDefined();
|
|
107
|
+
expect(typeof resolved[key].use).toBe('string');
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
it('preserves all six provided providers', () => {
|
|
111
|
+
const full = {
|
|
112
|
+
memory: { use: 'mem' },
|
|
113
|
+
skills: { use: 'ski' },
|
|
114
|
+
identity: { use: 'idn' },
|
|
115
|
+
routing: { use: 'rte' },
|
|
116
|
+
tasks: { use: 'tsk' },
|
|
117
|
+
tools: { use: 'tls' },
|
|
118
|
+
};
|
|
119
|
+
const resolved = resolveConfig(full);
|
|
120
|
+
expect(resolved.memory.use).toBe('mem');
|
|
121
|
+
expect(resolved.skills.use).toBe('ski');
|
|
122
|
+
expect(resolved.identity.use).toBe('idn');
|
|
123
|
+
expect(resolved.routing.use).toBe('rte');
|
|
124
|
+
expect(resolved.tasks.use).toBe('tsk');
|
|
125
|
+
expect(resolved.tools.use).toBe('tls');
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
//# sourceMappingURL=config.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.test.js","sourceRoot":"","sources":["../../src/__tests__/config.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"e2e.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/e2e.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,211 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"e2e.test.js","sourceRoot":"","sources":["../../src/__tests__/e2e.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/engine.test.ts"],"names":[],"mappings":""}
|