@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/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
- // Discover extensions
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(),
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dot-ai/core",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/jogelin/dot-ai",
@@ -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('deduplicates paths', async () => {
59
- await writeFile(join(testDir, '.ai', 'extensions', 'dedup.ts'), 'export default function() {}');
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
- const matching = paths.filter(p => p.includes('dedup.ts'));
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
- it('discovers from config.paths', async () => {
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('ignores non .ts/.js files', async () => {
79
- await writeFile(join(testDir, '.ai', 'extensions', 'readme.md'), '# Readme');
80
- await writeFile(join(testDir, '.ai', 'extensions', 'data.json'), '{}');
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
+ });