@dot-ai/core 0.9.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.
Files changed (50) hide show
  1. package/dist/boot-cache.d.ts +1 -1
  2. package/dist/boot-cache.d.ts.map +1 -1
  3. package/dist/extension-api.d.ts +10 -9
  4. package/dist/extension-api.d.ts.map +1 -1
  5. package/dist/extension-loader.d.ts +9 -2
  6. package/dist/extension-loader.d.ts.map +1 -1
  7. package/dist/extension-loader.js +179 -55
  8. package/dist/extension-loader.js.map +1 -1
  9. package/dist/extension-runner.d.ts +9 -4
  10. package/dist/extension-runner.d.ts.map +1 -1
  11. package/dist/extension-runner.js +34 -13
  12. package/dist/extension-runner.js.map +1 -1
  13. package/dist/extension-types.d.ts +15 -115
  14. package/dist/extension-types.d.ts.map +1 -1
  15. package/dist/extension-types.js +1 -88
  16. package/dist/extension-types.js.map +1 -1
  17. package/dist/format.d.ts +21 -0
  18. package/dist/format.d.ts.map +1 -1
  19. package/dist/format.js +74 -0
  20. package/dist/format.js.map +1 -1
  21. package/dist/index.d.ts +6 -7
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +3 -4
  24. package/dist/index.js.map +1 -1
  25. package/dist/package-manager.d.ts +28 -5
  26. package/dist/package-manager.d.ts.map +1 -1
  27. package/dist/package-manager.js +126 -20
  28. package/dist/package-manager.js.map +1 -1
  29. package/dist/runtime.d.ts +31 -43
  30. package/dist/runtime.d.ts.map +1 -1
  31. package/dist/runtime.js +79 -177
  32. package/dist/runtime.js.map +1 -1
  33. package/package.json +1 -1
  34. package/src/__tests__/extension-loader.test.ts +154 -11
  35. package/src/__tests__/extension-runner.test.ts +245 -32
  36. package/src/__tests__/fixtures/extensions/ctx-aware.js +12 -3
  37. package/src/__tests__/fixtures/extensions/smart-context.js +12 -3
  38. package/src/__tests__/format.test.ts +178 -1
  39. package/src/__tests__/package-manager.test.ts +237 -0
  40. package/src/__tests__/runtime.test.ts +38 -10
  41. package/src/boot-cache.ts +1 -1
  42. package/src/extension-api.ts +10 -15
  43. package/src/extension-loader.ts +187 -57
  44. package/src/extension-runner.ts +44 -15
  45. package/src/extension-types.ts +26 -195
  46. package/src/format.ts +100 -0
  47. package/src/index.ts +5 -13
  48. package/src/package-manager.ts +146 -23
  49. package/src/runtime.ts +96 -222
  50. package/tsconfig.tsbuildinfo +1 -1
package/dist/runtime.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { loadConfig } from './config.js';
2
- import { computeChecksum, loadBootCache, writeBootCache } from './boot-cache.js';
3
2
  import { toolDefinitionToCapability } from './capabilities.js';
4
3
  import { discoverExtensions, createV6CollectorAPI } from './extension-loader.js';
4
+ import { ensurePackagesInstalled } from './package-manager.js';
5
5
  import { ExtensionRunner, EventBus } from './extension-runner.js';
6
6
  import { NoopLogger } from './logger.js';
7
7
  import { extractLabels } from './labels.js';
@@ -33,7 +33,7 @@ export class DotAiRuntime {
33
33
  // Boot
34
34
  // ══════════════════════════════════════════════════════════════════════════════
35
35
  /**
36
- * Boot the runtime — loads config, discovers extensions, fires lifecycle events.
36
+ * Boot the runtime — loads config, discovers extensions, builds vocabulary from registrations.
37
37
  * Call once per session. Safe to call multiple times (idempotent).
38
38
  */
39
39
  async boot() {
@@ -43,51 +43,33 @@ export class DotAiRuntime {
43
43
  const rawConfig = await loadConfig(this.options.workspaceRoot);
44
44
  // Create event bus
45
45
  this._eventBus = new EventBus();
46
- // Discover extensions
46
+ // Auto-install packages from settings.json before discovery
47
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
48
65
  const extPaths = await discoverExtensions(this.options.workspaceRoot, extConfig);
49
- // Compute checksum for cache invalidation
50
- const checksum = await computeChecksum(this.options.workspaceRoot, extPaths);
51
- // Try loading from cache
52
- const cached = await loadBootCache(this.options.workspaceRoot, checksum);
53
- // Load extensions via v6 collector API (always needed for handlers)
66
+ // Load extensions via collector API
67
+ // Extension factories run here — they call registerSkill(), registerIdentity(),
68
+ // contributeLabels(), registerTool(), registerCommand(), and subscribe to events.
54
69
  const loaded = await this.loadExtensions(extPaths);
55
70
  this._runner = new ExtensionRunner(loaded, this.logger);
56
- if (cached) {
57
- // Cache hit — use cached vocabulary, skip resources_discover
58
- this.vocabulary = cached.vocabulary;
59
- this.logger.log({
60
- timestamp: new Date().toISOString(),
61
- level: 'info',
62
- phase: 'boot',
63
- event: 'boot_cache_hit',
64
- data: { checksum, vocabularySize: cached.vocabulary.length },
65
- });
66
- }
67
- else {
68
- // Cache miss — fire resources_discover → build vocabulary
69
- const ctx = this.buildCtx();
70
- const discoverResults = await this._runner.fire('resources_discover', undefined, ctx);
71
- // Build vocabulary from all extension-contributed labels
72
- const allLabels = new Set();
73
- for (const result of discoverResults) {
74
- if (result.labels && Array.isArray(result.labels)) {
75
- for (const label of result.labels) {
76
- allLabels.add(label);
77
- }
78
- }
79
- }
80
- this.vocabulary = Array.from(allLabels);
81
- // Write cache
82
- await writeBootCache(this.options.workspaceRoot, {
83
- version: 1,
84
- checksum,
85
- vocabulary: this.vocabulary,
86
- extensionPaths: extPaths,
87
- tools: this._runner.tools.map(t => ({ name: t.name, description: t.description ?? '' })),
88
- createdAt: new Date().toISOString(),
89
- });
90
- }
71
+ // Build vocabulary from registered resources (replaces resources_discover)
72
+ this.vocabulary = this._runner.vocabularyLabels;
91
73
  // Build capabilities from extension-registered tools
92
74
  this.caps = this._runner.tools.map(toolDefinitionToCapability);
93
75
  this.logger.log({
@@ -100,11 +82,12 @@ export class DotAiRuntime {
100
82
  vocabularySize: this.vocabulary.length,
101
83
  toolCount: this._runner.tools.length,
102
84
  commandCount: this._runner.commands.length,
103
- cacheHit: !!cached,
85
+ skillCount: this._runner.skills.length,
86
+ identityCount: this._runner.identities.length,
104
87
  },
105
88
  durationMs: Math.round(performance.now() - start),
106
89
  });
107
- // Fire session_start (always, regardless of cache)
90
+ // Fire session_start (always)
108
91
  const ctx = this.buildCtx();
109
92
  await this._runner.fire('session_start', undefined, ctx);
110
93
  this.booted = true;
@@ -165,6 +148,8 @@ export class DotAiRuntime {
165
148
  handlers: Object.fromEntries(Array.from(extension.handlers.entries()).map(([k, v]) => [k, v.length])),
166
149
  tools: Array.from(extension.tools.keys()),
167
150
  commands: Array.from(extension.commands.keys()),
151
+ skills: Array.from(extension.skills.keys()),
152
+ identities: Array.from(extension.identities.keys()),
168
153
  },
169
154
  });
170
155
  }
@@ -190,11 +175,12 @@ export class DotAiRuntime {
190
175
  * Process a prompt through the pipeline:
191
176
  * 1. Extract labels (core regex + label_extract chain-transform)
192
177
  * 2. Route (first-result)
193
- * 3. Context enrich (collect-sections)
194
- * 4. Assemble sections by priority
195
- * 5. Apply token budget trimming
178
+ * 3. Context enrich (collect-sections) + core system section
179
+ * 4. Sort sections by priority DESC
180
+ *
181
+ * Returns structured data. Adapters call formatSections() to get markdown.
196
182
  */
197
- async processPrompt(prompt, formatOverrides) {
183
+ async processPrompt(prompt) {
198
184
  if (!this.booted) {
199
185
  await this.boot();
200
186
  }
@@ -231,66 +217,54 @@ export class DotAiRuntime {
231
217
  const ctx = this.buildCtx(labels);
232
218
  const collected = await this._runner.fireCollectSections('context_enrich', enrichEvent, ctx);
233
219
  sections = collected.sections;
234
- // Also fire legacy context_inject for backward compat
235
- const injectEvent = { prompt, labels };
236
- const injectResults = await this._runner.fire('context_inject', injectEvent, ctx);
237
- for (const result of injectResults) {
238
- if (result.inject) {
239
- sections.push({
240
- id: `legacy-inject-${sections.length}`,
241
- title: 'Extension Context',
242
- content: result.inject,
243
- priority: 20,
244
- source: 'legacy',
245
- });
246
- }
247
- }
220
+ }
221
+ // Add core system section
222
+ if (this._runner) {
223
+ const skillNames = this._runner.skills.map(s => s.name);
224
+ const toolNames = this._runner.tools.map(t => t.name);
225
+ const parts = ['dot-ai workspace active.'];
226
+ if (skillNames.length > 0)
227
+ parts.push(`Skills: ${skillNames.join(', ')}.`);
228
+ if (toolNames.length > 0)
229
+ parts.push(`Tools: ${toolNames.join(', ')}.`);
230
+ sections.push({
231
+ id: 'dot-ai:system',
232
+ title: 'dot-ai',
233
+ content: parts.join(' '),
234
+ priority: 95,
235
+ source: 'core',
236
+ trimStrategy: 'never',
237
+ });
248
238
  }
249
239
  // 4. Sort sections by priority DESC
250
240
  sections.sort((a, b) => b.priority - a.priority);
251
- // 5. Apply token budget trimming
252
- const tokenBudget = formatOverrides?.tokenBudget ?? this.options.tokenBudget;
253
- if (tokenBudget) {
254
- sections = this.trimSections(sections, tokenBudget);
255
- }
256
- // 6. Assemble sections into formatted markdown
257
- const formatted = this.assembleSections(sections);
258
241
  this.logger.log({
259
242
  timestamp: new Date().toISOString(),
260
243
  level: 'info',
261
- phase: 'format',
262
- event: 'format_complete',
244
+ phase: 'enrich',
245
+ event: 'prompt_processed',
263
246
  data: {
264
247
  sectionCount: sections.length,
265
- outputChars: formatted.length,
266
- estimatedTokens: Math.round(formatted.length / 4),
267
248
  routing: routing?.model ?? 'default',
268
249
  labels: labels.map(l => l.name),
269
250
  },
270
251
  durationMs: Math.round(performance.now() - start),
271
252
  });
272
- // Build enriched context for adapters that need it
273
- const enriched = this.buildEnrichedFromSections(prompt, labels, sections, routing);
274
- return {
275
- formatted,
276
- enriched,
277
- capabilities: this.caps,
278
- routing,
279
- labels,
280
- sections,
281
- };
253
+ return { sections, labels, routing };
282
254
  }
283
255
  // ══════════════════════════════════════════════════════════════════════════════
284
- // Learn
256
+ // Tool Execution
285
257
  // ══════════════════════════════════════════════════════════════════════════════
286
258
  /**
287
- * Learn from agent response fires agent_end event.
288
- * Memory extensions handle storage in their handlers.
259
+ * Execute a registered tool by name.
289
260
  */
290
- async learn(response) {
291
- if (this._runner) {
292
- await this._runner.fire('agent_end', { response }, this.buildCtx());
293
- }
261
+ async executeTool(name, input) {
262
+ if (!this._runner)
263
+ throw new Error('Runtime not booted');
264
+ const tool = this._runner.tools.find(t => t.name === name);
265
+ if (!tool)
266
+ throw new Error(`Tool not found: ${name}`);
267
+ return tool.execute(input, this.buildCtx());
294
268
  }
295
269
  // ══════════════════════════════════════════════════════════════════════════════
296
270
  // Event Firing
@@ -343,98 +317,26 @@ export class DotAiRuntime {
343
317
  get commands() {
344
318
  return this._runner?.commands ?? [];
345
319
  }
320
+ /** Get registered skills from extensions */
321
+ get skills() {
322
+ return this._runner?.skills ?? [];
323
+ }
324
+ /** Get registered identities from extensions */
325
+ get identities() {
326
+ return this._runner?.identities ?? [];
327
+ }
328
+ /** Get registered tools from extensions */
329
+ get tools() {
330
+ return this._runner?.tools ?? [];
331
+ }
346
332
  /** Get diagnostics including extensions */
347
333
  get diagnostics() {
348
334
  return {
349
335
  extensions: this._runner?.diagnostics ?? [],
350
- usedTiers: this._runner ? Array.from(this._runner.usedTiers) : [],
351
336
  capabilityCount: this.caps.length,
352
337
  vocabularySize: this.vocabulary.length,
353
- };
354
- }
355
- // ══════════════════════════════════════════════════════════════════════════════
356
- // Helpers
357
- // ══════════════════════════════════════════════════════════════════════════════
358
- /**
359
- * Assemble sorted sections into a single markdown string.
360
- */
361
- assembleSections(sections) {
362
- if (sections.length === 0)
363
- return '';
364
- return sections
365
- .map(s => {
366
- if (s.title) {
367
- return `## ${s.title}\n\n${s.content}`;
368
- }
369
- return s.content;
370
- })
371
- .join('\n\n---\n\n');
372
- }
373
- /**
374
- * Trim sections to fit within a token budget.
375
- * Respects trimStrategy: 'never' sections are never removed.
376
- */
377
- trimSections(sections, budget) {
378
- const estimateTokens = (secs) => Math.round(secs.map(s => `## ${s.title}\n\n${s.content}`).join('\n\n---\n\n').length / 4);
379
- let current = estimateTokens(sections);
380
- if (current <= budget)
381
- return sections;
382
- const result = [...sections];
383
- const actions = [];
384
- // Strategy 1: Truncate 'truncate' sections
385
- for (let i = result.length - 1; i >= 0; i--) {
386
- if (current <= budget)
387
- break;
388
- const s = result[i];
389
- if (s.trimStrategy === 'truncate' && s.content.length > 2000) {
390
- result[i] = { ...s, content: s.content.slice(0, 2000) + '\n\n[...truncated]' };
391
- actions.push(`truncated section: ${s.id}`);
392
- current = estimateTokens(result);
393
- }
394
- }
395
- // Strategy 2: Drop non-'never' sections (lowest priority first)
396
- for (let i = result.length - 1; i >= 0; i--) {
397
- if (current <= budget)
398
- break;
399
- const s = result[i];
400
- if (s.trimStrategy !== 'never') {
401
- actions.push(`dropped section: ${s.id} (priority ${s.priority})`);
402
- result.splice(i, 1);
403
- current = estimateTokens(result);
404
- }
405
- }
406
- if (actions.length > 0) {
407
- const warning = { budget, actual: current, actions };
408
- this.logger.log({
409
- timestamp: new Date().toISOString(),
410
- level: current > budget ? 'warn' : 'info',
411
- phase: 'format',
412
- event: 'budget_trimmed',
413
- data: warning,
414
- });
415
- }
416
- return result;
417
- }
418
- /**
419
- * Build a backward-compatible EnrichedContext from pipeline output.
420
- * Adapters that log enriched fields still work.
421
- */
422
- buildEnrichedFromSections(prompt, labels, sections, routing) {
423
- return {
424
- prompt,
425
- labels,
426
- identities: sections
427
- .filter(s => s.source === 'identity' || s.priority >= 80)
428
- .map(s => ({
429
- type: s.id ?? s.source,
430
- content: s.content,
431
- source: s.source,
432
- priority: s.priority,
433
- })),
434
- memories: [],
435
- skills: [],
436
- tools: [],
437
- routing: routing ?? { model: 'default', reason: 'no routing extensions' },
338
+ skillCount: this._runner?.skills.length ?? 0,
339
+ identityCount: this._runner?.identities.length ?? 0,
438
340
  };
439
341
  }
440
342
  }
@@ -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.9.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
  });