@dot-ai/core 0.10.0 → 0.11.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/extension-loader.d.ts +8 -1
- package/dist/extension-loader.d.ts.map +1 -1
- package/dist/extension-loader.js +159 -48
- package/dist/extension-loader.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/package-manager.d.ts +28 -5
- package/dist/package-manager.d.ts.map +1 -1
- package/dist/package-manager.js +126 -20
- package/dist/package-manager.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +19 -1
- package/dist/runtime.js.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/extension-loader.test.ts +154 -11
- package/src/__tests__/package-manager.test.ts +237 -0
- package/src/extension-loader.ts +168 -47
- package/src/index.ts +2 -2
- package/src/package-manager.ts +146 -23
- package/src/runtime.ts +23 -1
- package/tsconfig.tsbuildinfo +1 -1
package/dist/runtime.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { loadConfig } from './config.js';
|
|
2
2
|
import { toolDefinitionToCapability } from './capabilities.js';
|
|
3
3
|
import { discoverExtensions, createV6CollectorAPI } from './extension-loader.js';
|
|
4
|
+
import { ensurePackagesInstalled } from './package-manager.js';
|
|
4
5
|
import { ExtensionRunner, EventBus } from './extension-runner.js';
|
|
5
6
|
import { NoopLogger } from './logger.js';
|
|
6
7
|
import { extractLabels } from './labels.js';
|
|
@@ -42,8 +43,25 @@ export class DotAiRuntime {
|
|
|
42
43
|
const rawConfig = await loadConfig(this.options.workspaceRoot);
|
|
43
44
|
// Create event bus
|
|
44
45
|
this._eventBus = new EventBus();
|
|
45
|
-
//
|
|
46
|
+
// Auto-install packages from settings.json before discovery
|
|
46
47
|
const extConfig = this.options.extensions ?? rawConfig.extensions;
|
|
48
|
+
if (extConfig?.packages?.length) {
|
|
49
|
+
const installResult = await ensurePackagesInstalled(this.options.workspaceRoot, extConfig.packages);
|
|
50
|
+
if (installResult.installed.length > 0 || installResult.errors.length > 0) {
|
|
51
|
+
this.logger.log({
|
|
52
|
+
timestamp: new Date().toISOString(),
|
|
53
|
+
level: installResult.errors.length > 0 ? 'warn' : 'info',
|
|
54
|
+
phase: 'boot',
|
|
55
|
+
event: 'packages_installed',
|
|
56
|
+
data: {
|
|
57
|
+
installed: installResult.installed,
|
|
58
|
+
skipped: installResult.skipped,
|
|
59
|
+
errors: installResult.errors,
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Discover extensions
|
|
47
65
|
const extPaths = await discoverExtensions(this.options.workspaceRoot, extConfig);
|
|
48
66
|
// Load extensions via collector API
|
|
49
67
|
// Extension factories run here — they call registerSkill(), registerIdentity(),
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -16,6 +16,8 @@ afterEach(async () => {
|
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
describe('discoverExtensions', () => {
|
|
19
|
+
// ── Auto-discovery: .ai/extensions/ ──────────────────────────────────
|
|
20
|
+
|
|
19
21
|
it('discovers .ts files in .ai/extensions/', async () => {
|
|
20
22
|
await writeFile(join(testDir, '.ai', 'extensions', 'my-ext.ts'), 'export default function() {}');
|
|
21
23
|
const paths = await discoverExtensions(testDir);
|
|
@@ -42,24 +44,23 @@ describe('discoverExtensions', () => {
|
|
|
42
44
|
expect(paths).toContainEqual(expect.stringContaining('jsext/index.js'));
|
|
43
45
|
});
|
|
44
46
|
|
|
45
|
-
it('reads dot-ai field from package.json', async () => {
|
|
47
|
+
it('reads dot-ai field from package.json in subdirectory', async () => {
|
|
46
48
|
const extDir = join(testDir, '.ai', 'extensions', 'pkg-ext');
|
|
47
|
-
await mkdir(extDir, { recursive: true });
|
|
49
|
+
await mkdir(join(extDir, 'src'), { recursive: true });
|
|
48
50
|
await writeFile(join(extDir, 'package.json'), JSON.stringify({
|
|
49
51
|
name: 'pkg-ext',
|
|
50
52
|
'dot-ai': { extensions: ['src/index.ts'] },
|
|
51
53
|
}));
|
|
52
|
-
await mkdir(join(extDir, 'src'), { recursive: true });
|
|
53
54
|
await writeFile(join(extDir, 'src', 'index.ts'), 'export default function() {}');
|
|
54
55
|
const paths = await discoverExtensions(testDir);
|
|
55
56
|
expect(paths).toContainEqual(expect.stringContaining('src/index.ts'));
|
|
56
57
|
});
|
|
57
58
|
|
|
58
|
-
it('
|
|
59
|
-
await writeFile(join(testDir, '.ai', 'extensions', '
|
|
59
|
+
it('ignores non .ts/.js files', async () => {
|
|
60
|
+
await writeFile(join(testDir, '.ai', 'extensions', 'readme.md'), '# Readme');
|
|
61
|
+
await writeFile(join(testDir, '.ai', 'extensions', 'data.json'), '{}');
|
|
60
62
|
const paths = await discoverExtensions(testDir);
|
|
61
|
-
|
|
62
|
-
expect(matching).toHaveLength(1);
|
|
63
|
+
expect(paths).toHaveLength(0);
|
|
63
64
|
});
|
|
64
65
|
|
|
65
66
|
it('returns empty array when directory does not exist', async () => {
|
|
@@ -67,7 +68,18 @@ describe('discoverExtensions', () => {
|
|
|
67
68
|
expect(paths).toEqual([]);
|
|
68
69
|
});
|
|
69
70
|
|
|
70
|
-
|
|
71
|
+
// ── Deduplication ────────────────────────────────────────────────────
|
|
72
|
+
|
|
73
|
+
it('deduplicates paths', async () => {
|
|
74
|
+
await writeFile(join(testDir, '.ai', 'extensions', 'dedup.ts'), 'export default function() {}');
|
|
75
|
+
const paths = await discoverExtensions(testDir);
|
|
76
|
+
const matching = paths.filter(p => p.includes('dedup.ts'));
|
|
77
|
+
expect(matching).toHaveLength(1);
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
// ── Configured paths (settings.json "extensions") ────────────────────
|
|
81
|
+
|
|
82
|
+
it('discovers from config.paths (directory)', async () => {
|
|
71
83
|
const customDir = join(testDir, 'custom-extensions');
|
|
72
84
|
await mkdir(customDir, { recursive: true });
|
|
73
85
|
await writeFile(join(customDir, 'custom.ts'), 'export default function() {}');
|
|
@@ -75,10 +87,141 @@ describe('discoverExtensions', () => {
|
|
|
75
87
|
expect(paths).toContainEqual(expect.stringContaining('custom.ts'));
|
|
76
88
|
});
|
|
77
89
|
|
|
78
|
-
it('
|
|
79
|
-
|
|
80
|
-
await
|
|
90
|
+
it('discovers from config.paths (directory with package.json)', async () => {
|
|
91
|
+
const customDir = join(testDir, 'my-package');
|
|
92
|
+
await mkdir(join(customDir, 'dist'), { recursive: true });
|
|
93
|
+
await writeFile(join(customDir, 'package.json'), JSON.stringify({
|
|
94
|
+
name: 'my-package',
|
|
95
|
+
'dot-ai': { extensions: ['dist/index.js'] },
|
|
96
|
+
}));
|
|
97
|
+
await writeFile(join(customDir, 'dist', 'index.js'), 'export default function() {}');
|
|
98
|
+
const paths = await discoverExtensions(testDir, { paths: ['my-package'] });
|
|
99
|
+
expect(paths).toContainEqual(expect.stringContaining('dist/index.js'));
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
it('discovers from config.paths (direct file)', async () => {
|
|
103
|
+
const customFile = join(testDir, 'standalone.ts');
|
|
104
|
+
await writeFile(customFile, 'export default function() {}');
|
|
105
|
+
const paths = await discoverExtensions(testDir, { paths: ['standalone.ts'] });
|
|
106
|
+
expect(paths).toContainEqual(expect.stringContaining('standalone.ts'));
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
// ── Installed packages (.ai/packages/) ───────────────────────────────
|
|
110
|
+
|
|
111
|
+
it('discovers extensions from .ai/packages/node_modules/', async () => {
|
|
112
|
+
const pkgDir = join(testDir, '.ai', 'packages');
|
|
113
|
+
const extPkgDir = join(pkgDir, 'node_modules', '@dot-ai', 'ext-file-memory');
|
|
114
|
+
await mkdir(join(extPkgDir, 'dist'), { recursive: true });
|
|
115
|
+
|
|
116
|
+
// Create the packages/package.json (npm --prefix creates this)
|
|
117
|
+
await writeFile(join(pkgDir, 'package.json'), JSON.stringify({
|
|
118
|
+
dependencies: { '@dot-ai/ext-file-memory': '0.10.0' },
|
|
119
|
+
}));
|
|
120
|
+
|
|
121
|
+
// Create the installed package with dot-ai field
|
|
122
|
+
await writeFile(join(extPkgDir, 'package.json'), JSON.stringify({
|
|
123
|
+
name: '@dot-ai/ext-file-memory',
|
|
124
|
+
version: '0.10.0',
|
|
125
|
+
'dot-ai': { extensions: ['./dist/extension.js'] },
|
|
126
|
+
}));
|
|
127
|
+
await writeFile(join(extPkgDir, 'dist', 'extension.js'), 'export default function() {}');
|
|
128
|
+
|
|
129
|
+
const paths = await discoverExtensions(testDir);
|
|
130
|
+
expect(paths).toContainEqual(expect.stringContaining('ext-file-memory/dist/extension.js'));
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it('discovers multiple packages from .ai/packages/', async () => {
|
|
134
|
+
const pkgDir = join(testDir, '.ai', 'packages');
|
|
135
|
+
await mkdir(pkgDir, { recursive: true });
|
|
136
|
+
|
|
137
|
+
// Create packages/package.json with two deps
|
|
138
|
+
await writeFile(join(pkgDir, 'package.json'), JSON.stringify({
|
|
139
|
+
dependencies: {
|
|
140
|
+
'@dot-ai/ext-file-memory': '0.10.0',
|
|
141
|
+
'@dot-ai/ext-file-identity': '0.10.0',
|
|
142
|
+
},
|
|
143
|
+
}));
|
|
144
|
+
|
|
145
|
+
// ext-file-memory
|
|
146
|
+
const memDir = join(pkgDir, 'node_modules', '@dot-ai', 'ext-file-memory');
|
|
147
|
+
await mkdir(join(memDir, 'dist'), { recursive: true });
|
|
148
|
+
await writeFile(join(memDir, 'package.json'), JSON.stringify({
|
|
149
|
+
name: '@dot-ai/ext-file-memory',
|
|
150
|
+
'dot-ai': { extensions: ['./dist/extension.js'] },
|
|
151
|
+
}));
|
|
152
|
+
await writeFile(join(memDir, 'dist', 'extension.js'), 'export default function() {}');
|
|
153
|
+
|
|
154
|
+
// ext-file-identity
|
|
155
|
+
const idDir = join(pkgDir, 'node_modules', '@dot-ai', 'ext-file-identity');
|
|
156
|
+
await mkdir(join(idDir, 'dist'), { recursive: true });
|
|
157
|
+
await writeFile(join(idDir, 'package.json'), JSON.stringify({
|
|
158
|
+
name: '@dot-ai/ext-file-identity',
|
|
159
|
+
'dot-ai': { extensions: ['./dist/index.js'] },
|
|
160
|
+
}));
|
|
161
|
+
await writeFile(join(idDir, 'dist', 'index.js'), 'export default function() {}');
|
|
162
|
+
|
|
163
|
+
const paths = await discoverExtensions(testDir);
|
|
164
|
+
expect(paths).toContainEqual(expect.stringContaining('ext-file-memory/dist/extension.js'));
|
|
165
|
+
expect(paths).toContainEqual(expect.stringContaining('ext-file-identity/dist/index.js'));
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
it('ignores .ai/packages/ when no package.json exists', async () => {
|
|
169
|
+
// No .ai/packages/package.json at all
|
|
81
170
|
const paths = await discoverExtensions(testDir);
|
|
82
171
|
expect(paths).toHaveLength(0);
|
|
83
172
|
});
|
|
173
|
+
|
|
174
|
+
it('ignores packages without dot-ai field', async () => {
|
|
175
|
+
const pkgDir = join(testDir, '.ai', 'packages');
|
|
176
|
+
const noDotAiDir = join(pkgDir, 'node_modules', 'some-lib');
|
|
177
|
+
await mkdir(noDotAiDir, { recursive: true });
|
|
178
|
+
|
|
179
|
+
await writeFile(join(pkgDir, 'package.json'), JSON.stringify({
|
|
180
|
+
dependencies: { 'some-lib': '1.0.0' },
|
|
181
|
+
}));
|
|
182
|
+
await writeFile(join(noDotAiDir, 'package.json'), JSON.stringify({
|
|
183
|
+
name: 'some-lib',
|
|
184
|
+
version: '1.0.0',
|
|
185
|
+
}));
|
|
186
|
+
|
|
187
|
+
const paths = await discoverExtensions(testDir);
|
|
188
|
+
expect(paths).toHaveLength(0);
|
|
189
|
+
});
|
|
190
|
+
|
|
191
|
+
// ── Combined sources ─────────────────────────────────────────────────
|
|
192
|
+
|
|
193
|
+
it('merges auto-discovered and installed package extensions', async () => {
|
|
194
|
+
// Auto-discovered in .ai/extensions/
|
|
195
|
+
await writeFile(join(testDir, '.ai', 'extensions', 'local.ts'), 'export default function() {}');
|
|
196
|
+
|
|
197
|
+
// Installed package in .ai/packages/
|
|
198
|
+
const pkgDir = join(testDir, '.ai', 'packages');
|
|
199
|
+
const extPkgDir = join(pkgDir, 'node_modules', 'my-ext');
|
|
200
|
+
await mkdir(join(extPkgDir, 'dist'), { recursive: true });
|
|
201
|
+
await writeFile(join(pkgDir, 'package.json'), JSON.stringify({
|
|
202
|
+
dependencies: { 'my-ext': '1.0.0' },
|
|
203
|
+
}));
|
|
204
|
+
await writeFile(join(extPkgDir, 'package.json'), JSON.stringify({
|
|
205
|
+
name: 'my-ext',
|
|
206
|
+
'dot-ai': { extensions: ['./dist/index.js'] },
|
|
207
|
+
}));
|
|
208
|
+
await writeFile(join(extPkgDir, 'dist', 'index.js'), 'export default function() {}');
|
|
209
|
+
|
|
210
|
+
const paths = await discoverExtensions(testDir);
|
|
211
|
+
expect(paths).toContainEqual(expect.stringContaining('local.ts'));
|
|
212
|
+
expect(paths).toContainEqual(expect.stringContaining('my-ext/dist/index.js'));
|
|
213
|
+
expect(paths).toHaveLength(2);
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
it('deduplicates across sources', async () => {
|
|
217
|
+
// Same extension in both .ai/extensions/ and config.paths
|
|
218
|
+
const extDir = join(testDir, '.ai', 'extensions');
|
|
219
|
+
await writeFile(join(extDir, 'shared.ts'), 'export default function() {}');
|
|
220
|
+
|
|
221
|
+
const paths = await discoverExtensions(testDir, {
|
|
222
|
+
paths: [join(testDir, '.ai', 'extensions', 'shared.ts')],
|
|
223
|
+
});
|
|
224
|
+
const matching = paths.filter(p => p.includes('shared.ts'));
|
|
225
|
+
expect(matching).toHaveLength(1);
|
|
226
|
+
});
|
|
84
227
|
});
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
2
|
+
import { mkdir, writeFile, rm, readFile } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import {
|
|
6
|
+
listPackages,
|
|
7
|
+
resolvePackages,
|
|
8
|
+
ensurePackagesInstalled,
|
|
9
|
+
} from '../package-manager.js';
|
|
10
|
+
|
|
11
|
+
// Use temp directory for test fixtures
|
|
12
|
+
const testDir = join(tmpdir(), 'dot-ai-pkg-test-' + Date.now());
|
|
13
|
+
|
|
14
|
+
beforeEach(async () => {
|
|
15
|
+
await mkdir(join(testDir, '.ai', 'packages'), { recursive: true });
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
afterEach(async () => {
|
|
19
|
+
await rm(testDir, { recursive: true, force: true });
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
// ── Helper: create a fake installed package ─────────────────────────────────
|
|
23
|
+
async function createFakePackage(
|
|
24
|
+
name: string,
|
|
25
|
+
version: string,
|
|
26
|
+
dotAi?: { extensions?: string[] },
|
|
27
|
+
) {
|
|
28
|
+
const installDir = join(testDir, '.ai', 'packages');
|
|
29
|
+
const pkgDir = join(installDir, 'node_modules', name);
|
|
30
|
+
await mkdir(pkgDir, { recursive: true });
|
|
31
|
+
|
|
32
|
+
// Write package.json for installed package
|
|
33
|
+
const pkgJson: Record<string, unknown> = { name, version };
|
|
34
|
+
if (dotAi) pkgJson['dot-ai'] = dotAi;
|
|
35
|
+
await writeFile(join(pkgDir, 'package.json'), JSON.stringify(pkgJson));
|
|
36
|
+
|
|
37
|
+
// Create extension files if declared
|
|
38
|
+
if (dotAi?.extensions) {
|
|
39
|
+
for (const ext of dotAi.extensions) {
|
|
40
|
+
const extPath = join(pkgDir, ext);
|
|
41
|
+
await mkdir(join(extPath, '..'), { recursive: true });
|
|
42
|
+
await writeFile(extPath, 'export default function() {}');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Update the packages/package.json dependencies
|
|
47
|
+
const depsPkgPath = join(installDir, 'package.json');
|
|
48
|
+
let deps: Record<string, string> = {};
|
|
49
|
+
try {
|
|
50
|
+
const raw = await readFile(depsPkgPath, 'utf-8');
|
|
51
|
+
const existing = JSON.parse(raw);
|
|
52
|
+
deps = existing.dependencies ?? {};
|
|
53
|
+
} catch { /* no file yet */ }
|
|
54
|
+
|
|
55
|
+
deps[name] = version;
|
|
56
|
+
await writeFile(depsPkgPath, JSON.stringify({ dependencies: deps }));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
describe('listPackages', () => {
|
|
60
|
+
it('returns empty array when no packages installed', async () => {
|
|
61
|
+
const result = await listPackages(testDir);
|
|
62
|
+
expect(result).toEqual([]);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
it('lists installed packages with dot-ai field', async () => {
|
|
66
|
+
await createFakePackage('@dot-ai/ext-memory', '1.0.0', {
|
|
67
|
+
extensions: ['./dist/extension.js'],
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
const result = await listPackages(testDir);
|
|
71
|
+
expect(result).toHaveLength(1);
|
|
72
|
+
expect(result[0].name).toBe('@dot-ai/ext-memory');
|
|
73
|
+
expect(result[0].version).toBe('1.0.0');
|
|
74
|
+
expect(result[0].dotAi?.extensions).toEqual(['./dist/extension.js']);
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
it('lists packages without dot-ai field', async () => {
|
|
78
|
+
await createFakePackage('some-lib', '2.0.0');
|
|
79
|
+
|
|
80
|
+
const result = await listPackages(testDir);
|
|
81
|
+
expect(result).toHaveLength(1);
|
|
82
|
+
expect(result[0].name).toBe('some-lib');
|
|
83
|
+
expect(result[0].dotAi).toBeUndefined();
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
it('lists multiple packages', async () => {
|
|
87
|
+
await createFakePackage('@dot-ai/ext-memory', '1.0.0', {
|
|
88
|
+
extensions: ['./dist/extension.js'],
|
|
89
|
+
});
|
|
90
|
+
await createFakePackage('@dot-ai/ext-identity', '1.0.0', {
|
|
91
|
+
extensions: ['./dist/index.js'],
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
const result = await listPackages(testDir);
|
|
95
|
+
expect(result).toHaveLength(2);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
describe('resolvePackages', () => {
|
|
100
|
+
it('returns empty when no packages', async () => {
|
|
101
|
+
const result = await resolvePackages(testDir);
|
|
102
|
+
expect(result.extensions).toEqual([]);
|
|
103
|
+
expect(result.skills).toEqual([]);
|
|
104
|
+
expect(result.providers).toEqual([]);
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
it('resolves extension paths from packages with dot-ai field', async () => {
|
|
108
|
+
await createFakePackage('@dot-ai/ext-memory', '1.0.0', {
|
|
109
|
+
extensions: ['./dist/extension.js'],
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
const result = await resolvePackages(testDir);
|
|
113
|
+
expect(result.extensions).toHaveLength(1);
|
|
114
|
+
expect(result.extensions[0]).toContain('ext-memory');
|
|
115
|
+
expect(result.extensions[0]).toContain('dist/extension.js');
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it('skips packages without dot-ai field', async () => {
|
|
119
|
+
await createFakePackage('some-lib', '2.0.0');
|
|
120
|
+
|
|
121
|
+
const result = await resolvePackages(testDir);
|
|
122
|
+
expect(result.extensions).toHaveLength(0);
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
describe('ensurePackagesInstalled', () => {
|
|
127
|
+
it('skips already installed packages', async () => {
|
|
128
|
+
await createFakePackage('@dot-ai/ext-memory', '1.0.0', {
|
|
129
|
+
extensions: ['./dist/extension.js'],
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
const result = await ensurePackagesInstalled(
|
|
133
|
+
testDir,
|
|
134
|
+
['@dot-ai/ext-memory'],
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
expect(result.skipped).toContain('@dot-ai/ext-memory');
|
|
138
|
+
expect(result.installed).toHaveLength(0);
|
|
139
|
+
expect(result.errors).toHaveLength(0);
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
it('skips packages when onMissing returns skip', async () => {
|
|
143
|
+
const result = await ensurePackagesInstalled(
|
|
144
|
+
testDir,
|
|
145
|
+
['@dot-ai/ext-not-there'],
|
|
146
|
+
async () => 'skip',
|
|
147
|
+
);
|
|
148
|
+
|
|
149
|
+
expect(result.skipped).toContain('@dot-ai/ext-not-there');
|
|
150
|
+
expect(result.installed).toHaveLength(0);
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
it('errors when onMissing returns error', async () => {
|
|
154
|
+
const result = await ensurePackagesInstalled(
|
|
155
|
+
testDir,
|
|
156
|
+
['@dot-ai/ext-not-there'],
|
|
157
|
+
async () => 'error',
|
|
158
|
+
);
|
|
159
|
+
|
|
160
|
+
expect(result.errors).toHaveLength(1);
|
|
161
|
+
expect(result.errors[0].source).toBe('@dot-ai/ext-not-there');
|
|
162
|
+
expect(result.errors[0].error).toContain('Missing package');
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
it('reports errors for failed installs', async () => {
|
|
166
|
+
// Use an impossible package name that npm will fail to find
|
|
167
|
+
const result = await ensurePackagesInstalled(
|
|
168
|
+
testDir,
|
|
169
|
+
['@dot-ai-fake-nonexistent-pkg-xyz/no-exist'],
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
expect(result.errors).toHaveLength(1);
|
|
173
|
+
expect(result.errors[0].source).toBe('@dot-ai-fake-nonexistent-pkg-xyz/no-exist');
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it('handles npm: prefix in source', async () => {
|
|
177
|
+
await createFakePackage('@dot-ai/ext-memory', '1.0.0', {
|
|
178
|
+
extensions: ['./dist/extension.js'],
|
|
179
|
+
});
|
|
180
|
+
|
|
181
|
+
const result = await ensurePackagesInstalled(
|
|
182
|
+
testDir,
|
|
183
|
+
['npm:@dot-ai/ext-memory@1.0.0'],
|
|
184
|
+
);
|
|
185
|
+
|
|
186
|
+
// npm:@dot-ai/ext-memory@1.0.0 → name = @dot-ai/ext-memory → already installed
|
|
187
|
+
expect(result.skipped).toContain('npm:@dot-ai/ext-memory@1.0.0');
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
it('handles multiple packages', async () => {
|
|
191
|
+
await createFakePackage('@dot-ai/ext-memory', '1.0.0', {
|
|
192
|
+
extensions: ['./dist/extension.js'],
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
const result = await ensurePackagesInstalled(
|
|
196
|
+
testDir,
|
|
197
|
+
['@dot-ai/ext-memory', '@dot-ai/ext-not-there'],
|
|
198
|
+
async (source) => source.includes('not-there') ? 'skip' : 'install',
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
expect(result.skipped).toContain('@dot-ai/ext-memory');
|
|
202
|
+
expect(result.skipped).toContain('@dot-ai/ext-not-there');
|
|
203
|
+
});
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
describe('parsePackageSource (via ensurePackagesInstalled)', () => {
|
|
207
|
+
// We test parsePackageSource indirectly through ensurePackagesInstalled
|
|
208
|
+
|
|
209
|
+
it('handles scoped package with version', async () => {
|
|
210
|
+
await createFakePackage('@dot-ai/ext-memory', '1.0.0');
|
|
211
|
+
|
|
212
|
+
const result = await ensurePackagesInstalled(testDir, ['@dot-ai/ext-memory@1.0.0']);
|
|
213
|
+
// Should find it as already installed (strips version to get name)
|
|
214
|
+
expect(result.skipped).toContain('@dot-ai/ext-memory@1.0.0');
|
|
215
|
+
});
|
|
216
|
+
|
|
217
|
+
it('handles scoped package without version', async () => {
|
|
218
|
+
await createFakePackage('@dot-ai/ext-memory', '1.0.0');
|
|
219
|
+
|
|
220
|
+
const result = await ensurePackagesInstalled(testDir, ['@dot-ai/ext-memory']);
|
|
221
|
+
expect(result.skipped).toContain('@dot-ai/ext-memory');
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
it('handles unscoped package with version', async () => {
|
|
225
|
+
await createFakePackage('my-ext', '2.0.0');
|
|
226
|
+
|
|
227
|
+
const result = await ensurePackagesInstalled(testDir, ['my-ext@2.0.0']);
|
|
228
|
+
expect(result.skipped).toContain('my-ext@2.0.0');
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
it('handles npm: prefix with scoped package', async () => {
|
|
232
|
+
await createFakePackage('@dot-ai/ext-memory', '1.0.0');
|
|
233
|
+
|
|
234
|
+
const result = await ensurePackagesInstalled(testDir, ['npm:@dot-ai/ext-memory']);
|
|
235
|
+
expect(result.skipped).toContain('npm:@dot-ai/ext-memory');
|
|
236
|
+
});
|
|
237
|
+
});
|