@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.
- package/dist/boot-cache.d.ts +40 -0
- package/dist/boot-cache.d.ts.map +1 -0
- package/dist/boot-cache.js +72 -0
- package/dist/boot-cache.js.map +1 -0
- package/dist/capabilities.d.ts +35 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +17 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/config.d.ts +7 -23
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +131 -108
- package/dist/config.js.map +1 -1
- package/dist/extension-api.d.ts +65 -0
- package/dist/extension-api.d.ts.map +1 -0
- package/dist/extension-api.js +2 -0
- package/dist/extension-api.js.map +1 -0
- package/dist/extension-loader.d.ts +19 -0
- package/dist/extension-loader.d.ts.map +1 -0
- package/dist/extension-loader.js +113 -0
- package/dist/extension-loader.js.map +1 -0
- package/dist/extension-runner.d.ts +62 -0
- package/dist/extension-runner.d.ts.map +1 -0
- package/dist/extension-runner.js +260 -0
- package/dist/extension-runner.js.map +1 -0
- package/dist/extension-types.d.ts +312 -0
- package/dist/extension-types.d.ts.map +1 -0
- package/dist/extension-types.js +89 -0
- package/dist/extension-types.js.map +1 -0
- package/dist/format.d.ts +13 -1
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +131 -15
- package/dist/format.js.map +1 -1
- package/dist/format.spec.d.ts +2 -0
- package/dist/format.spec.d.ts.map +1 -0
- package/dist/format.spec.js +140 -0
- package/dist/format.spec.js.map +1 -0
- package/dist/index.d.ts +21 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -14
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/package-manager.d.ts +30 -0
- package/dist/package-manager.d.ts.map +1 -0
- package/dist/package-manager.js +91 -0
- package/dist/package-manager.js.map +1 -0
- package/dist/runtime.d.ts +119 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +441 -0
- package/dist/runtime.js.map +1 -0
- package/dist/types.d.ts +29 -10
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -1
- package/src/__tests__/capabilities.test.ts +72 -0
- package/src/__tests__/config.test.ts +22 -120
- package/src/__tests__/extension-loader.test.ts +84 -0
- package/src/__tests__/extension-runner.test.ts +228 -0
- package/src/__tests__/fixtures/extensions/ctx-aware.js +26 -0
- package/src/__tests__/fixtures/extensions/security-gate.js +20 -0
- package/src/__tests__/fixtures/extensions/session-analytics.js +28 -0
- package/src/__tests__/fixtures/extensions/smart-context.js +10 -0
- package/src/__tests__/format.test.ts +207 -2
- package/src/__tests__/runtime.test.ts +141 -0
- package/src/boot-cache.ts +104 -0
- package/src/capabilities.ts +49 -0
- package/src/config.ts +131 -133
- package/src/extension-api.ts +99 -0
- package/src/extension-loader.ts +127 -0
- package/src/extension-runner.ts +297 -0
- package/src/extension-types.ts +416 -0
- package/src/format.spec.ts +175 -0
- package/src/format.test.ts +218 -0
- package/src/format.ts +140 -16
- package/src/index.ts +68 -30
- package/src/logger.ts +1 -1
- package/src/package-manager.ts +119 -0
- package/src/runtime.ts +562 -0
- package/src/types.ts +36 -14
- package/tsconfig.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/.ai/memory/2026-03-04.md +0 -2
- package/.ai/tasks.json +0 -7
- package/dist/__tests__/config.test.d.ts +0 -2
- package/dist/__tests__/config.test.d.ts.map +0 -1
- package/dist/__tests__/config.test.js +0 -128
- package/dist/__tests__/config.test.js.map +0 -1
- package/dist/__tests__/e2e.test.d.ts +0 -2
- package/dist/__tests__/e2e.test.d.ts.map +0 -1
- package/dist/__tests__/e2e.test.js +0 -211
- package/dist/__tests__/e2e.test.js.map +0 -1
- package/dist/__tests__/engine.test.d.ts +0 -2
- package/dist/__tests__/engine.test.d.ts.map +0 -1
- package/dist/__tests__/engine.test.js +0 -271
- package/dist/__tests__/engine.test.js.map +0 -1
- package/dist/__tests__/format.test.d.ts +0 -2
- package/dist/__tests__/format.test.d.ts.map +0 -1
- package/dist/__tests__/format.test.js +0 -200
- package/dist/__tests__/format.test.js.map +0 -1
- package/dist/__tests__/labels.test.d.ts +0 -2
- package/dist/__tests__/labels.test.d.ts.map +0 -1
- package/dist/__tests__/labels.test.js +0 -82
- package/dist/__tests__/labels.test.js.map +0 -1
- package/dist/__tests__/loader.test.d.ts +0 -2
- package/dist/__tests__/loader.test.d.ts.map +0 -1
- package/dist/__tests__/loader.test.js +0 -161
- package/dist/__tests__/loader.test.js.map +0 -1
- package/dist/__tests__/logger.test.d.ts +0 -2
- package/dist/__tests__/logger.test.d.ts.map +0 -1
- package/dist/__tests__/logger.test.js +0 -95
- package/dist/__tests__/logger.test.js.map +0 -1
- package/dist/__tests__/nodes.test.d.ts +0 -2
- package/dist/__tests__/nodes.test.d.ts.map +0 -1
- package/dist/__tests__/nodes.test.js +0 -83
- package/dist/__tests__/nodes.test.js.map +0 -1
- package/dist/contracts.d.ts +0 -56
- package/dist/contracts.d.ts.map +0 -1
- package/dist/contracts.js +0 -2
- package/dist/contracts.js.map +0 -1
- package/dist/engine.d.ts +0 -38
- package/dist/engine.d.ts.map +0 -1
- package/dist/engine.js +0 -88
- package/dist/engine.js.map +0 -1
- package/dist/loader.d.ts +0 -26
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -120
- package/dist/loader.js.map +0 -1
- package/src/__tests__/e2e.test.ts +0 -257
- package/src/__tests__/engine.test.ts +0 -305
- package/src/__tests__/loader.test.ts +0 -191
- package/src/contracts.ts +0 -71
- package/src/engine.ts +0 -145
- package/src/loader.ts +0 -152
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { formatContext } from '../format.js';
|
|
3
|
-
function makeContext(overrides) {
|
|
4
|
-
return {
|
|
5
|
-
prompt: 'test prompt',
|
|
6
|
-
labels: [],
|
|
7
|
-
identities: [],
|
|
8
|
-
memories: [],
|
|
9
|
-
skills: [],
|
|
10
|
-
tools: [],
|
|
11
|
-
routing: { model: 'default', reason: '' },
|
|
12
|
-
...overrides,
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
function makeIdentity(overrides) {
|
|
16
|
-
return {
|
|
17
|
-
type: 'agents',
|
|
18
|
-
content: 'You are Kiwi.',
|
|
19
|
-
source: 'file',
|
|
20
|
-
priority: 10,
|
|
21
|
-
...overrides,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
function makeMemory(overrides) {
|
|
25
|
-
return {
|
|
26
|
-
content: 'User prefers TypeScript',
|
|
27
|
-
type: 'fact',
|
|
28
|
-
source: 'file',
|
|
29
|
-
...overrides,
|
|
30
|
-
};
|
|
31
|
-
}
|
|
32
|
-
function makeSkill(overrides) {
|
|
33
|
-
return {
|
|
34
|
-
name: 'my-skill',
|
|
35
|
-
description: 'A skill',
|
|
36
|
-
labels: [],
|
|
37
|
-
content: 'Skill content here.',
|
|
38
|
-
...overrides,
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
function makeTool(overrides) {
|
|
42
|
-
return {
|
|
43
|
-
name: 'bash',
|
|
44
|
-
description: 'Run shell commands',
|
|
45
|
-
labels: [],
|
|
46
|
-
config: {},
|
|
47
|
-
source: 'file',
|
|
48
|
-
...overrides,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
describe('formatContext', () => {
|
|
52
|
-
it('includes all sections when identities, memories, skills, and tools are present', () => {
|
|
53
|
-
const ctx = makeContext({
|
|
54
|
-
identities: [makeIdentity({ content: 'You are Kiwi.' })],
|
|
55
|
-
memories: [makeMemory({ content: 'User prefers TypeScript' })],
|
|
56
|
-
skills: [makeSkill({ name: 'dot-ai', content: 'dot-ai skill content' })],
|
|
57
|
-
tools: [makeTool({ name: 'bash', description: 'Run shell commands' })],
|
|
58
|
-
});
|
|
59
|
-
const result = formatContext(ctx);
|
|
60
|
-
expect(result).toContain('You are Kiwi.');
|
|
61
|
-
expect(result).toContain('## Relevant Memory');
|
|
62
|
-
expect(result).toContain('User prefers TypeScript');
|
|
63
|
-
expect(result).toContain('## Active Skills');
|
|
64
|
-
expect(result).toContain('dot-ai skill content');
|
|
65
|
-
expect(result).toContain('## Available Tools');
|
|
66
|
-
expect(result).toContain('bash');
|
|
67
|
-
});
|
|
68
|
-
it('skips identities when skipIdentities: true', () => {
|
|
69
|
-
const ctx = makeContext({
|
|
70
|
-
identities: [makeIdentity({ content: 'You are Kiwi.' })],
|
|
71
|
-
memories: [makeMemory({ content: 'Some memory' })],
|
|
72
|
-
});
|
|
73
|
-
const result = formatContext(ctx, { skipIdentities: true });
|
|
74
|
-
expect(result).not.toContain('You are Kiwi.');
|
|
75
|
-
expect(result).toContain('## Relevant Memory');
|
|
76
|
-
});
|
|
77
|
-
it('includes identities when skipIdentities: false', () => {
|
|
78
|
-
const ctx = makeContext({
|
|
79
|
-
identities: [makeIdentity({ content: 'You are Kiwi.' })],
|
|
80
|
-
});
|
|
81
|
-
const result = formatContext(ctx, { skipIdentities: false });
|
|
82
|
-
expect(result).toContain('You are Kiwi.');
|
|
83
|
-
});
|
|
84
|
-
it('includes identities when skipIdentities is undefined (backward compat)', () => {
|
|
85
|
-
const ctx = makeContext({
|
|
86
|
-
identities: [makeIdentity({ content: 'You are Kiwi.' })],
|
|
87
|
-
});
|
|
88
|
-
const result = formatContext(ctx);
|
|
89
|
-
expect(result).toContain('You are Kiwi.');
|
|
90
|
-
});
|
|
91
|
-
it('sorts identities by priority descending', () => {
|
|
92
|
-
const ctx = makeContext({
|
|
93
|
-
identities: [
|
|
94
|
-
makeIdentity({ content: 'Low priority identity.', priority: 1 }),
|
|
95
|
-
makeIdentity({ content: 'High priority identity.', priority: 100 }),
|
|
96
|
-
],
|
|
97
|
-
});
|
|
98
|
-
const result = formatContext(ctx);
|
|
99
|
-
const highPos = result.indexOf('High priority identity.');
|
|
100
|
-
const lowPos = result.indexOf('Low priority identity.');
|
|
101
|
-
expect(highPos).toBeLessThan(lowPos);
|
|
102
|
-
});
|
|
103
|
-
it('truncates skill content at maxSkillLength with [...truncated] marker', () => {
|
|
104
|
-
const longContent = 'A'.repeat(200);
|
|
105
|
-
const ctx = makeContext({
|
|
106
|
-
skills: [makeSkill({ content: longContent })],
|
|
107
|
-
});
|
|
108
|
-
const result = formatContext(ctx, { maxSkillLength: 50 });
|
|
109
|
-
expect(result).toContain('A'.repeat(50));
|
|
110
|
-
expect(result).toContain('[...truncated]');
|
|
111
|
-
expect(result).not.toContain('A'.repeat(51));
|
|
112
|
-
});
|
|
113
|
-
it('does not truncate skill content shorter than maxSkillLength', () => {
|
|
114
|
-
const ctx = makeContext({
|
|
115
|
-
skills: [makeSkill({ content: 'Short content.' })],
|
|
116
|
-
});
|
|
117
|
-
const result = formatContext(ctx, { maxSkillLength: 200 });
|
|
118
|
-
expect(result).toContain('Short content.');
|
|
119
|
-
expect(result).not.toContain('[...truncated]');
|
|
120
|
-
});
|
|
121
|
-
it('limits number of skills to maxSkills', () => {
|
|
122
|
-
const ctx = makeContext({
|
|
123
|
-
skills: [
|
|
124
|
-
makeSkill({ name: 'skill-a', content: 'Content A' }),
|
|
125
|
-
makeSkill({ name: 'skill-b', content: 'Content B' }),
|
|
126
|
-
makeSkill({ name: 'skill-c', content: 'Content C' }),
|
|
127
|
-
],
|
|
128
|
-
});
|
|
129
|
-
const result = formatContext(ctx, { maxSkills: 2 });
|
|
130
|
-
expect(result).toContain('skill-a');
|
|
131
|
-
expect(result).toContain('Content A');
|
|
132
|
-
expect(result).toContain('skill-b');
|
|
133
|
-
expect(result).toContain('Content B');
|
|
134
|
-
expect(result).not.toContain('skill-c');
|
|
135
|
-
expect(result).not.toContain('Content C');
|
|
136
|
-
});
|
|
137
|
-
it('combines skipIdentities + maxSkillLength + maxSkills', () => {
|
|
138
|
-
const ctx = makeContext({
|
|
139
|
-
identities: [makeIdentity({ content: 'You are Kiwi.' })],
|
|
140
|
-
skills: [
|
|
141
|
-
makeSkill({ name: 'skill-a', content: 'A'.repeat(100) }),
|
|
142
|
-
makeSkill({ name: 'skill-b', content: 'B'.repeat(100) }),
|
|
143
|
-
makeSkill({ name: 'skill-c', content: 'C'.repeat(100) }),
|
|
144
|
-
],
|
|
145
|
-
});
|
|
146
|
-
const result = formatContext(ctx, {
|
|
147
|
-
skipIdentities: true,
|
|
148
|
-
maxSkillLength: 20,
|
|
149
|
-
maxSkills: 2,
|
|
150
|
-
});
|
|
151
|
-
expect(result).not.toContain('You are Kiwi.');
|
|
152
|
-
expect(result).toContain('skill-a');
|
|
153
|
-
expect(result).toContain('skill-b');
|
|
154
|
-
expect(result).not.toContain('skill-c');
|
|
155
|
-
expect(result).toContain('[...truncated]');
|
|
156
|
-
expect(result).not.toContain('A'.repeat(21));
|
|
157
|
-
});
|
|
158
|
-
it('returns empty string when context has all empty arrays', () => {
|
|
159
|
-
const ctx = makeContext();
|
|
160
|
-
const result = formatContext(ctx);
|
|
161
|
-
expect(result).toBe('');
|
|
162
|
-
});
|
|
163
|
-
it('omits routing section when model is "default"', () => {
|
|
164
|
-
const ctx = makeContext({
|
|
165
|
-
routing: { model: 'default', reason: 'no routing needed' },
|
|
166
|
-
});
|
|
167
|
-
const result = formatContext(ctx);
|
|
168
|
-
expect(result).not.toContain('## Model Routing');
|
|
169
|
-
});
|
|
170
|
-
it('includes routing section when model is not "default"', () => {
|
|
171
|
-
const ctx = makeContext({
|
|
172
|
-
routing: { model: 'opus', reason: 'complex task' },
|
|
173
|
-
});
|
|
174
|
-
const result = formatContext(ctx);
|
|
175
|
-
expect(result).toContain('## Model Routing');
|
|
176
|
-
expect(result).toContain('opus');
|
|
177
|
-
expect(result).toContain('complex task');
|
|
178
|
-
});
|
|
179
|
-
it('separates multiple sections with ---', () => {
|
|
180
|
-
const ctx = makeContext({
|
|
181
|
-
identities: [makeIdentity({ content: 'Identity content.' })],
|
|
182
|
-
memories: [makeMemory({ content: 'A memory.' })],
|
|
183
|
-
});
|
|
184
|
-
const result = formatContext(ctx);
|
|
185
|
-
expect(result).toContain('---');
|
|
186
|
-
});
|
|
187
|
-
it('skips skills without content', () => {
|
|
188
|
-
const ctx = makeContext({
|
|
189
|
-
skills: [
|
|
190
|
-
makeSkill({ name: 'no-content', content: undefined }),
|
|
191
|
-
makeSkill({ name: 'has-content', content: 'Real content' }),
|
|
192
|
-
],
|
|
193
|
-
});
|
|
194
|
-
const result = formatContext(ctx);
|
|
195
|
-
expect(result).toContain('has-content');
|
|
196
|
-
expect(result).toContain('Real content');
|
|
197
|
-
expect(result).not.toContain('no-content');
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
//# sourceMappingURL=format.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"format.test.js","sourceRoot":"","sources":["../../src/__tests__/format.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"labels.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/labels.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest';
|
|
2
|
-
import { extractLabels, buildVocabulary } from '../labels.js';
|
|
3
|
-
describe('extractLabels', () => {
|
|
4
|
-
it('returns matched labels from vocabulary', () => {
|
|
5
|
-
const labels = extractLabels('I need to fix the memory issue', ['memory', 'routing', 'skills']);
|
|
6
|
-
expect(labels).toHaveLength(1);
|
|
7
|
-
expect(labels[0]).toEqual({ name: 'memory', source: 'extract' });
|
|
8
|
-
});
|
|
9
|
-
it('returns multiple matches when several vocabulary words are present', () => {
|
|
10
|
-
const labels = extractLabels('routing and memory both matter', ['memory', 'routing', 'skills']);
|
|
11
|
-
expect(labels).toHaveLength(2);
|
|
12
|
-
const names = labels.map((l) => l.name);
|
|
13
|
-
expect(names).toContain('memory');
|
|
14
|
-
expect(names).toContain('routing');
|
|
15
|
-
});
|
|
16
|
-
it('returns empty array when no vocabulary words match', () => {
|
|
17
|
-
const labels = extractLabels('hello world', ['memory', 'routing', 'skills']);
|
|
18
|
-
expect(labels).toHaveLength(0);
|
|
19
|
-
});
|
|
20
|
-
it('is case insensitive', () => {
|
|
21
|
-
const labels = extractLabels('MEMORY is important', ['memory']);
|
|
22
|
-
expect(labels).toHaveLength(1);
|
|
23
|
-
expect(labels[0].name).toBe('memory');
|
|
24
|
-
});
|
|
25
|
-
it('is case insensitive for vocabulary words too', () => {
|
|
26
|
-
const labels = extractLabels('memory is important', ['Memory']);
|
|
27
|
-
expect(labels).toHaveLength(1);
|
|
28
|
-
expect(labels[0].name).toBe('Memory');
|
|
29
|
-
});
|
|
30
|
-
it('sets source to "extract" for all labels', () => {
|
|
31
|
-
const labels = extractLabels('use routing for memory', ['routing', 'memory']);
|
|
32
|
-
for (const label of labels) {
|
|
33
|
-
expect(label.source).toBe('extract');
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
it('returns empty array when vocabulary is empty', () => {
|
|
37
|
-
const labels = extractLabels('any prompt at all', []);
|
|
38
|
-
expect(labels).toHaveLength(0);
|
|
39
|
-
});
|
|
40
|
-
it('does not match partial words within a prompt', () => {
|
|
41
|
-
const labels = extractLabels('my skillset is broad', ['skill']);
|
|
42
|
-
expect(labels).toHaveLength(0);
|
|
43
|
-
});
|
|
44
|
-
it('matches whole words at word boundaries', () => {
|
|
45
|
-
const labels = extractLabels('my skill is broad', ['skill']);
|
|
46
|
-
expect(labels).toHaveLength(1);
|
|
47
|
-
expect(labels[0].name).toBe('skill');
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
describe('buildVocabulary', () => {
|
|
51
|
-
it('merges skill labels and tool labels into a flat array', () => {
|
|
52
|
-
const vocab = buildVocabulary([['memory', 'routing']], [['ui', 'ux']]);
|
|
53
|
-
expect(vocab).toContain('memory');
|
|
54
|
-
expect(vocab).toContain('routing');
|
|
55
|
-
expect(vocab).toContain('ui');
|
|
56
|
-
expect(vocab).toContain('ux');
|
|
57
|
-
});
|
|
58
|
-
it('deduplicates labels appearing in multiple skills', () => {
|
|
59
|
-
const vocab = buildVocabulary([['memory', 'routing'], ['memory', 'skills']], []);
|
|
60
|
-
const memoryCount = vocab.filter((v) => v === 'memory').length;
|
|
61
|
-
expect(memoryCount).toBe(1);
|
|
62
|
-
});
|
|
63
|
-
it('deduplicates labels appearing across skills and tools', () => {
|
|
64
|
-
const vocab = buildVocabulary([['shared']], [['shared']]);
|
|
65
|
-
const count = vocab.filter((v) => v === 'shared').length;
|
|
66
|
-
expect(count).toBe(1);
|
|
67
|
-
});
|
|
68
|
-
it('returns empty array when both inputs are empty', () => {
|
|
69
|
-
const vocab = buildVocabulary([], []);
|
|
70
|
-
expect(vocab).toHaveLength(0);
|
|
71
|
-
});
|
|
72
|
-
it('handles empty skill label arrays', () => {
|
|
73
|
-
const vocab = buildVocabulary([[], []], [['tool-label']]);
|
|
74
|
-
expect(vocab).toEqual(['tool-label']);
|
|
75
|
-
});
|
|
76
|
-
it('returns unique values only', () => {
|
|
77
|
-
const vocab = buildVocabulary([['a', 'b', 'a']], [['b', 'c']]);
|
|
78
|
-
expect(vocab.length).toBe(3);
|
|
79
|
-
expect(new Set(vocab).size).toBe(3);
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
//# sourceMappingURL=labels.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"labels.test.js","sourceRoot":"","sources":["../../src/__tests__/labels.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loader.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/loader.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
|
2
|
-
import { registerProvider, clearProviders, createProviders } from '../loader.js';
|
|
3
|
-
beforeEach(() => {
|
|
4
|
-
clearProviders();
|
|
5
|
-
});
|
|
6
|
-
describe('clearProviders', () => {
|
|
7
|
-
it('resets the registry so registered factories are no longer used', async () => {
|
|
8
|
-
const factory = vi.fn().mockReturnValue({
|
|
9
|
-
search: vi.fn().mockResolvedValue([{ content: 'custom', type: 'fact', source: 'test' }]),
|
|
10
|
-
store: vi.fn().mockResolvedValue(undefined),
|
|
11
|
-
});
|
|
12
|
-
registerProvider('@dot-ai/provider-file-memory', factory);
|
|
13
|
-
clearProviders();
|
|
14
|
-
const providers = await createProviders({ memory: { use: '@dot-ai/provider-file-memory' } });
|
|
15
|
-
// After clear, factory should not be called — noop provider is used
|
|
16
|
-
expect(factory).not.toHaveBeenCalled();
|
|
17
|
-
const memories = await providers.memory.search('query');
|
|
18
|
-
expect(memories).toEqual([]);
|
|
19
|
-
});
|
|
20
|
-
});
|
|
21
|
-
describe('registerProvider + createProviders', () => {
|
|
22
|
-
it('uses registered memory factory', async () => {
|
|
23
|
-
const customMemory = {
|
|
24
|
-
search: vi.fn().mockResolvedValue([{ content: 'custom result', type: 'fact', source: 'test' }]),
|
|
25
|
-
store: vi.fn().mockResolvedValue(undefined),
|
|
26
|
-
};
|
|
27
|
-
registerProvider('@dot-ai/custom-memory', () => customMemory);
|
|
28
|
-
const providers = await createProviders({ memory: { use: '@dot-ai/custom-memory' } });
|
|
29
|
-
const results = await providers.memory.search('query');
|
|
30
|
-
expect(results[0]?.content).toBe('custom result');
|
|
31
|
-
});
|
|
32
|
-
it('passes options to the factory', async () => {
|
|
33
|
-
const factory = vi.fn().mockReturnValue({
|
|
34
|
-
search: vi.fn().mockResolvedValue([]),
|
|
35
|
-
store: vi.fn().mockResolvedValue(undefined),
|
|
36
|
-
});
|
|
37
|
-
registerProvider('@dot-ai/opts-memory', factory);
|
|
38
|
-
await createProviders({ memory: { use: '@dot-ai/opts-memory', with: { url: 'http://test' } } });
|
|
39
|
-
expect(factory).toHaveBeenCalledWith({ url: 'http://test' });
|
|
40
|
-
});
|
|
41
|
-
it('supports async factory (returns Promise)', async () => {
|
|
42
|
-
const customMemory = {
|
|
43
|
-
search: vi.fn().mockResolvedValue([]),
|
|
44
|
-
store: vi.fn().mockResolvedValue(undefined),
|
|
45
|
-
};
|
|
46
|
-
registerProvider('@dot-ai/async-memory', async () => customMemory);
|
|
47
|
-
const providers = await createProviders({ memory: { use: '@dot-ai/async-memory' } });
|
|
48
|
-
expect(providers.memory).toBe(customMemory);
|
|
49
|
-
});
|
|
50
|
-
it('registers and uses a skill provider', async () => {
|
|
51
|
-
const mockSkills = [{ name: 'my-skill', description: 'A skill', labels: ['test'] }];
|
|
52
|
-
registerProvider('@dot-ai/custom-skills', () => ({
|
|
53
|
-
list: vi.fn().mockResolvedValue(mockSkills),
|
|
54
|
-
match: vi.fn().mockResolvedValue([]),
|
|
55
|
-
load: vi.fn().mockResolvedValue(null),
|
|
56
|
-
}));
|
|
57
|
-
const providers = await createProviders({ skills: { use: '@dot-ai/custom-skills' } });
|
|
58
|
-
const skills = await providers.skills.list();
|
|
59
|
-
expect(skills).toEqual(mockSkills);
|
|
60
|
-
});
|
|
61
|
-
it('registers and uses an identity provider', async () => {
|
|
62
|
-
const mockIdentities = [{ type: 'agents', content: 'I am Kiwi', source: 'file', priority: 1 }];
|
|
63
|
-
registerProvider('@dot-ai/custom-identity', () => ({
|
|
64
|
-
load: vi.fn().mockResolvedValue(mockIdentities),
|
|
65
|
-
}));
|
|
66
|
-
const providers = await createProviders({ identity: { use: '@dot-ai/custom-identity' } });
|
|
67
|
-
const identities = await providers.identity.load();
|
|
68
|
-
expect(identities).toEqual(mockIdentities);
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
describe('auto-discovery via dynamic import', () => {
|
|
72
|
-
// NOTE: Dynamic import behavior is hard to mock reliably in vitest (import() is
|
|
73
|
-
// module-level). Auto-discovery with real packages is tested via E2E.
|
|
74
|
-
// The unit guarantee here is that an unknown provider name gracefully falls
|
|
75
|
-
// back to the noop implementation (i.e. tryImportProvider returns null for
|
|
76
|
-
// non-existent packages without throwing).
|
|
77
|
-
it('falls back to noop when provider package does not exist', async () => {
|
|
78
|
-
// '@dot-ai/nonexistent-provider' is not registered and cannot be imported
|
|
79
|
-
const providers = await createProviders({ memory: { use: '@dot-ai/nonexistent-provider' } });
|
|
80
|
-
const memories = await providers.memory.search('query');
|
|
81
|
-
expect(memories).toEqual([]);
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
describe('createProviders — noop fallbacks', () => {
|
|
85
|
-
// Use non-existent provider names to ensure noop fallbacks are returned
|
|
86
|
-
// (auto-discovery would find real packages for default names like @dot-ai/provider-file-memory)
|
|
87
|
-
const noopConfig = {
|
|
88
|
-
memory: { use: '@dot-ai/nonexistent-memory' },
|
|
89
|
-
skills: { use: '@dot-ai/nonexistent-skills' },
|
|
90
|
-
identity: { use: '@dot-ai/nonexistent-identity' },
|
|
91
|
-
routing: { use: '@dot-ai/nonexistent-routing' },
|
|
92
|
-
tasks: { use: '@dot-ai/nonexistent-tasks' },
|
|
93
|
-
tools: { use: '@dot-ai/nonexistent-tools' },
|
|
94
|
-
};
|
|
95
|
-
it('returns noop memory provider when nothing registered', async () => {
|
|
96
|
-
const providers = await createProviders(noopConfig);
|
|
97
|
-
const memories = await providers.memory.search('any query');
|
|
98
|
-
expect(memories).toEqual([]);
|
|
99
|
-
});
|
|
100
|
-
it('noop memory.store resolves without error', async () => {
|
|
101
|
-
const providers = await createProviders(noopConfig);
|
|
102
|
-
await expect(providers.memory.store({ content: 'x', type: 'log' })).resolves.toBeUndefined();
|
|
103
|
-
});
|
|
104
|
-
it('noop skills.list returns empty array', async () => {
|
|
105
|
-
const providers = await createProviders(noopConfig);
|
|
106
|
-
expect(await providers.skills.list()).toEqual([]);
|
|
107
|
-
});
|
|
108
|
-
it('noop skills.match returns empty array', async () => {
|
|
109
|
-
const providers = await createProviders(noopConfig);
|
|
110
|
-
expect(await providers.skills.match([])).toEqual([]);
|
|
111
|
-
});
|
|
112
|
-
it('noop skills.load returns null', async () => {
|
|
113
|
-
const providers = await createProviders(noopConfig);
|
|
114
|
-
expect(await providers.skills.load('any-skill')).toBeNull();
|
|
115
|
-
});
|
|
116
|
-
it('noop identity.load returns empty array', async () => {
|
|
117
|
-
const providers = await createProviders(noopConfig);
|
|
118
|
-
expect(await providers.identity.load()).toEqual([]);
|
|
119
|
-
});
|
|
120
|
-
it('noop routing.route returns a RoutingResult', async () => {
|
|
121
|
-
const providers = await createProviders(noopConfig);
|
|
122
|
-
const result = await providers.routing.route([]);
|
|
123
|
-
expect(result).toHaveProperty('model');
|
|
124
|
-
expect(result).toHaveProperty('reason');
|
|
125
|
-
expect(typeof result.model).toBe('string');
|
|
126
|
-
});
|
|
127
|
-
it('noop tasks.list returns empty array', async () => {
|
|
128
|
-
const providers = await createProviders(noopConfig);
|
|
129
|
-
expect(await providers.tasks.list()).toEqual([]);
|
|
130
|
-
});
|
|
131
|
-
it('noop tasks.get returns null', async () => {
|
|
132
|
-
const providers = await createProviders(noopConfig);
|
|
133
|
-
expect(await providers.tasks.get('123')).toBeNull();
|
|
134
|
-
});
|
|
135
|
-
it('noop tasks.create returns a task with generated id', async () => {
|
|
136
|
-
const providers = await createProviders(noopConfig);
|
|
137
|
-
const task = await providers.tasks.create({ text: 'Do something', status: 'pending' });
|
|
138
|
-
expect(task).toHaveProperty('id');
|
|
139
|
-
expect(task.text).toBe('Do something');
|
|
140
|
-
expect(task.status).toBe('pending');
|
|
141
|
-
});
|
|
142
|
-
it('noop tasks.update returns a task with the patched fields', async () => {
|
|
143
|
-
const providers = await createProviders(noopConfig);
|
|
144
|
-
const task = await providers.tasks.update('abc', { status: 'done' });
|
|
145
|
-
expect(task.id).toBe('abc');
|
|
146
|
-
expect(task.status).toBe('done');
|
|
147
|
-
});
|
|
148
|
-
it('noop tools.list returns empty array', async () => {
|
|
149
|
-
const providers = await createProviders(noopConfig);
|
|
150
|
-
expect(await providers.tools.list()).toEqual([]);
|
|
151
|
-
});
|
|
152
|
-
it('noop tools.match returns empty array', async () => {
|
|
153
|
-
const providers = await createProviders(noopConfig);
|
|
154
|
-
expect(await providers.tools.match([])).toEqual([]);
|
|
155
|
-
});
|
|
156
|
-
it('noop tools.load returns null', async () => {
|
|
157
|
-
const providers = await createProviders(noopConfig);
|
|
158
|
-
expect(await providers.tools.load('any-tool')).toBeNull();
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
//# sourceMappingURL=loader.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loader.test.js","sourceRoot":"","sources":["../../src/__tests__/loader.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEjF,UAAU,CAAC,GAAG,EAAE;IACd,cAAc,EAAE,CAAC;AACnB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;YACtC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YACxF,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;SAC5C,CAAC,CAAC;QACH,gBAAgB,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;QAC1D,cAAc,EAAE,CAAC;QAEjB,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,8BAA8B,EAAE,EAAE,CAAC,CAAC;QAC7F,oEAAoE;QACpE,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,EAAE,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,YAAY,GAAG;YACnB,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/F,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;SAC5C,CAAC;QACF,gBAAgB,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC;QAE9D,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,uBAAuB,EAAE,EAAE,CAAC,CAAC;QACtF,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;YACtC,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACrC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;SAC5C,CAAC,CAAC;QACH,gBAAgB,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;QAEjD,MAAM,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,qBAAqB,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;QAChG,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,YAAY,GAAG;YACnB,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACrC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;SAC5C,CAAC;QACF,gBAAgB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC;QAEnE,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,sBAAsB,EAAE,EAAE,CAAC,CAAC;QACrF,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACpF,gBAAgB,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;YAC/C,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC;YAC3C,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACpC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC;SACtC,CAAC,CAAC,CAAC;QAEJ,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,uBAAuB,EAAE,EAAE,CAAC,CAAC;QACtF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,cAAc,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/F,gBAAgB,CAAC,yBAAyB,EAAE,GAAG,EAAE,CAAC,CAAC;YACjD,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,cAAc,CAAC;SAChD,CAAC,CAAC,CAAC;QAEJ,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,yBAAyB,EAAE,EAAE,CAAC,CAAC;QAC1F,MAAM,UAAU,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,gFAAgF;IAChF,sEAAsE;IACtE,4EAA4E;IAC5E,2EAA2E;IAC3E,2CAA2C;IAC3C,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,0EAA0E;QAC1E,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,8BAA8B,EAAE,EAAE,CAAC,CAAC;QAC7F,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,wEAAwE;IACxE,gGAAgG;IAChG,MAAM,UAAU,GAAG;QACjB,MAAM,EAAE,EAAE,GAAG,EAAE,4BAA4B,EAAE;QAC7C,MAAM,EAAE,EAAE,GAAG,EAAE,4BAA4B,EAAE;QAC7C,QAAQ,EAAE,EAAE,GAAG,EAAE,8BAA8B,EAAE;QACjD,OAAO,EAAE,EAAE,GAAG,EAAE,6BAA6B,EAAE;QAC/C,KAAK,EAAE,EAAE,GAAG,EAAE,2BAA2B,EAAE;QAC3C,KAAK,EAAE,EAAE,GAAG,EAAE,2BAA2B,EAAE;KAC5C,CAAC;IAEF,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACpE,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC5D,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,MAAM,CACV,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CACtD,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QACvF,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACrE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/logger.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
-
import { mkdtemp, readFile, rm } from 'node:fs/promises';
|
|
3
|
-
import { tmpdir } from 'node:os';
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { NoopLogger, JsonFileLogger, StderrLogger } from '../logger.js';
|
|
6
|
-
const makeEntry = (overrides) => ({
|
|
7
|
-
timestamp: '2026-03-04T12:00:00.000Z',
|
|
8
|
-
level: 'info',
|
|
9
|
-
phase: 'boot',
|
|
10
|
-
event: 'test_event',
|
|
11
|
-
...overrides,
|
|
12
|
-
});
|
|
13
|
-
describe('NoopLogger', () => {
|
|
14
|
-
it('log does nothing', () => {
|
|
15
|
-
const logger = new NoopLogger();
|
|
16
|
-
logger.log(makeEntry());
|
|
17
|
-
// No error thrown
|
|
18
|
-
});
|
|
19
|
-
it('flush resolves immediately', async () => {
|
|
20
|
-
const logger = new NoopLogger();
|
|
21
|
-
await logger.flush();
|
|
22
|
-
});
|
|
23
|
-
});
|
|
24
|
-
describe('JsonFileLogger', () => {
|
|
25
|
-
let tempDir;
|
|
26
|
-
beforeEach(async () => {
|
|
27
|
-
tempDir = await mkdtemp(join(tmpdir(), 'dot-ai-logger-'));
|
|
28
|
-
});
|
|
29
|
-
afterEach(async () => {
|
|
30
|
-
await rm(tempDir, { recursive: true, force: true });
|
|
31
|
-
});
|
|
32
|
-
it('writes JSONL on flush', async () => {
|
|
33
|
-
const logFile = join(tempDir, 'test.jsonl');
|
|
34
|
-
const logger = new JsonFileLogger(logFile);
|
|
35
|
-
logger.log(makeEntry({ event: 'event_1' }));
|
|
36
|
-
logger.log(makeEntry({ event: 'event_2' }));
|
|
37
|
-
await logger.flush();
|
|
38
|
-
const content = await readFile(logFile, 'utf-8');
|
|
39
|
-
const lines = content.trim().split('\n');
|
|
40
|
-
expect(lines).toHaveLength(2);
|
|
41
|
-
expect(JSON.parse(lines[0]).event).toBe('event_1');
|
|
42
|
-
expect(JSON.parse(lines[1]).event).toBe('event_2');
|
|
43
|
-
});
|
|
44
|
-
it('does nothing on flush when buffer is empty', async () => {
|
|
45
|
-
const logFile = join(tempDir, 'empty.jsonl');
|
|
46
|
-
const logger = new JsonFileLogger(logFile);
|
|
47
|
-
await logger.flush();
|
|
48
|
-
// File should not exist (no write)
|
|
49
|
-
await expect(readFile(logFile, 'utf-8')).rejects.toThrow();
|
|
50
|
-
});
|
|
51
|
-
it('clears buffer after flush', async () => {
|
|
52
|
-
const logFile = join(tempDir, 'clear.jsonl');
|
|
53
|
-
const logger = new JsonFileLogger(logFile);
|
|
54
|
-
logger.log(makeEntry({ event: 'first' }));
|
|
55
|
-
await logger.flush();
|
|
56
|
-
logger.log(makeEntry({ event: 'second' }));
|
|
57
|
-
await logger.flush();
|
|
58
|
-
const content = await readFile(logFile, 'utf-8');
|
|
59
|
-
const lines = content.trim().split('\n');
|
|
60
|
-
expect(lines).toHaveLength(2);
|
|
61
|
-
expect(JSON.parse(lines[0]).event).toBe('first');
|
|
62
|
-
expect(JSON.parse(lines[1]).event).toBe('second');
|
|
63
|
-
});
|
|
64
|
-
it('includes all LogEntry fields', async () => {
|
|
65
|
-
const logFile = join(tempDir, 'fields.jsonl');
|
|
66
|
-
const logger = new JsonFileLogger(logFile);
|
|
67
|
-
logger.log(makeEntry({
|
|
68
|
-
level: 'warn',
|
|
69
|
-
phase: 'enrich',
|
|
70
|
-
event: 'labels_extracted',
|
|
71
|
-
data: { labels: ['git', 'commit'], count: 2 },
|
|
72
|
-
durationMs: 42,
|
|
73
|
-
}));
|
|
74
|
-
await logger.flush();
|
|
75
|
-
const content = await readFile(logFile, 'utf-8');
|
|
76
|
-
const entry = JSON.parse(content.trim());
|
|
77
|
-
expect(entry.level).toBe('warn');
|
|
78
|
-
expect(entry.phase).toBe('enrich');
|
|
79
|
-
expect(entry.event).toBe('labels_extracted');
|
|
80
|
-
expect(entry.data.labels).toEqual(['git', 'commit']);
|
|
81
|
-
expect(entry.durationMs).toBe(42);
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
describe('StderrLogger', () => {
|
|
85
|
-
it('writes to stderr', () => {
|
|
86
|
-
const logger = new StderrLogger();
|
|
87
|
-
// Just verify it doesn't throw
|
|
88
|
-
logger.log(makeEntry());
|
|
89
|
-
});
|
|
90
|
-
it('flush resolves immediately', async () => {
|
|
91
|
-
const logger = new StderrLogger();
|
|
92
|
-
await logger.flush();
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
//# sourceMappingURL=logger.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger.test.js","sourceRoot":"","sources":["../../src/__tests__/logger.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"nodes.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/nodes.test.ts"],"names":[],"mappings":""}
|