@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
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cached boot data — vocabulary, extension paths, tool schemas.
|
|
3
|
+
* Stored at .ai/.cache/boot.json for fast hook startup.
|
|
4
|
+
*/
|
|
5
|
+
export interface BootCacheData {
|
|
6
|
+
/** Cache format version */
|
|
7
|
+
version: 1;
|
|
8
|
+
/** Checksum of inputs that produced this cache */
|
|
9
|
+
checksum: string;
|
|
10
|
+
/** Label vocabulary from resources_discover */
|
|
11
|
+
vocabulary: string[];
|
|
12
|
+
/** Extension paths that were loaded */
|
|
13
|
+
extensionPaths: string[];
|
|
14
|
+
/** Tool names + descriptions from registered tools */
|
|
15
|
+
tools: Array<{
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
}>;
|
|
19
|
+
/** Timestamp of cache creation */
|
|
20
|
+
createdAt: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Compute a checksum from file modification times.
|
|
24
|
+
* Used to invalidate the cache when extensions or config change.
|
|
25
|
+
*/
|
|
26
|
+
export declare function computeChecksum(workspaceRoot: string, extensionPaths: string[]): Promise<string>;
|
|
27
|
+
/**
|
|
28
|
+
* Try to load cached boot data.
|
|
29
|
+
* Returns null if cache is missing, invalid, or checksum doesn't match.
|
|
30
|
+
*/
|
|
31
|
+
export declare function loadBootCache(workspaceRoot: string, currentChecksum: string): Promise<BootCacheData | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Write boot cache to disk.
|
|
34
|
+
*/
|
|
35
|
+
export declare function writeBootCache(workspaceRoot: string, data: BootCacheData): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Clear the boot cache.
|
|
38
|
+
*/
|
|
39
|
+
export declare function clearBootCache(workspaceRoot: string): Promise<void>;
|
|
40
|
+
//# sourceMappingURL=boot-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boot-cache.d.ts","sourceRoot":"","sources":["../src/boot-cache.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,2BAA2B;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,uCAAuC;IACvC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,sDAAsD;IACtD,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAC;CACnB;AAKD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EAAE,GACvB,OAAO,CAAC,MAAM,CAAC,CA0BjB;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,GACtB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAa/B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,aAAa,EAAE,MAAM,EACrB,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,IAAI,CAAC,CAKf;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzE"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir, stat } from 'node:fs/promises';
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
const CACHE_DIR = '.ai/.cache';
|
|
5
|
+
const CACHE_FILE = 'boot.json';
|
|
6
|
+
/**
|
|
7
|
+
* Compute a checksum from file modification times.
|
|
8
|
+
* Used to invalidate the cache when extensions or config change.
|
|
9
|
+
*/
|
|
10
|
+
export async function computeChecksum(workspaceRoot, extensionPaths) {
|
|
11
|
+
const hash = createHash('sha256');
|
|
12
|
+
// Include settings.json mtime (or dot-ai.yml)
|
|
13
|
+
for (const configName of ['settings.json', 'dot-ai.yml']) {
|
|
14
|
+
try {
|
|
15
|
+
const s = await stat(join(workspaceRoot, '.ai', configName));
|
|
16
|
+
hash.update(`config:${configName}:${s.mtimeMs}`);
|
|
17
|
+
}
|
|
18
|
+
catch { /* not found */ }
|
|
19
|
+
}
|
|
20
|
+
// Include .ai/extensions/ dir mtime
|
|
21
|
+
try {
|
|
22
|
+
const s = await stat(join(workspaceRoot, '.ai', 'extensions'));
|
|
23
|
+
hash.update(`extdir:${s.mtimeMs}`);
|
|
24
|
+
}
|
|
25
|
+
catch { /* not found */ }
|
|
26
|
+
// Include each extension file's mtime
|
|
27
|
+
for (const extPath of extensionPaths.sort()) {
|
|
28
|
+
try {
|
|
29
|
+
const s = await stat(extPath);
|
|
30
|
+
hash.update(`ext:${extPath}:${s.mtimeMs}`);
|
|
31
|
+
}
|
|
32
|
+
catch { /* not found */ }
|
|
33
|
+
}
|
|
34
|
+
return hash.digest('hex').slice(0, 16);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Try to load cached boot data.
|
|
38
|
+
* Returns null if cache is missing, invalid, or checksum doesn't match.
|
|
39
|
+
*/
|
|
40
|
+
export async function loadBootCache(workspaceRoot, currentChecksum) {
|
|
41
|
+
try {
|
|
42
|
+
const cachePath = join(workspaceRoot, CACHE_DIR, CACHE_FILE);
|
|
43
|
+
const raw = await readFile(cachePath, 'utf-8');
|
|
44
|
+
const data = JSON.parse(raw);
|
|
45
|
+
if (data.version !== 1)
|
|
46
|
+
return null;
|
|
47
|
+
if (data.checksum !== currentChecksum)
|
|
48
|
+
return null;
|
|
49
|
+
return data;
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Write boot cache to disk.
|
|
57
|
+
*/
|
|
58
|
+
export async function writeBootCache(workspaceRoot, data) {
|
|
59
|
+
const cacheDir = join(workspaceRoot, CACHE_DIR);
|
|
60
|
+
await mkdir(cacheDir, { recursive: true });
|
|
61
|
+
const cachePath = join(cacheDir, CACHE_FILE);
|
|
62
|
+
await writeFile(cachePath, JSON.stringify(data, null, 2), 'utf-8');
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Clear the boot cache.
|
|
66
|
+
*/
|
|
67
|
+
export async function clearBootCache(workspaceRoot) {
|
|
68
|
+
const { rm } = await import('node:fs/promises');
|
|
69
|
+
const cacheDir = join(workspaceRoot, CACHE_DIR);
|
|
70
|
+
await rm(cacheDir, { recursive: true, force: true });
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=boot-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boot-cache.js","sourceRoot":"","sources":["../src/boot-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ToolDefinition } from './extension-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* The result returned by a capability execution.
|
|
4
|
+
*/
|
|
5
|
+
export interface CapabilityResult {
|
|
6
|
+
text: string;
|
|
7
|
+
details?: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* An interactive tool (capability) that an extension exposes to agents.
|
|
11
|
+
* Adapters translate these into the agent's native tool format.
|
|
12
|
+
*/
|
|
13
|
+
export interface Capability {
|
|
14
|
+
name: string;
|
|
15
|
+
description: string;
|
|
16
|
+
parameters: Record<string, unknown>;
|
|
17
|
+
execute(params: Record<string, unknown>): Promise<CapabilityResult>;
|
|
18
|
+
/** Capability category */
|
|
19
|
+
category?: 'memory' | 'tasks' | string;
|
|
20
|
+
/** Whether this capability only reads data (no side effects) */
|
|
21
|
+
readOnly?: boolean;
|
|
22
|
+
/** Whether the adapter should ask for user confirmation before executing */
|
|
23
|
+
confirmationRequired?: boolean;
|
|
24
|
+
/** Capability version — incremented when parameter schema changes */
|
|
25
|
+
version?: number;
|
|
26
|
+
/** Injected into system prompt when tool is active */
|
|
27
|
+
promptSnippet?: string;
|
|
28
|
+
/** Guidelines for the LLM when using this tool */
|
|
29
|
+
promptGuidelines?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Convert an extension ToolDefinition into a Capability.
|
|
33
|
+
*/
|
|
34
|
+
export declare function toolDefinitionToCapability(tool: ToolDefinition): Capability;
|
|
35
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpE,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;IACvC,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4EAA4E;IAC5E,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,cAAc,GAAG,UAAU,CAY3E"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert an extension ToolDefinition into a Capability.
|
|
3
|
+
*/
|
|
4
|
+
export function toolDefinitionToCapability(tool) {
|
|
5
|
+
return {
|
|
6
|
+
name: tool.name,
|
|
7
|
+
description: tool.description,
|
|
8
|
+
parameters: tool.parameters,
|
|
9
|
+
promptSnippet: tool.promptSnippet,
|
|
10
|
+
promptGuidelines: tool.promptGuidelines,
|
|
11
|
+
async execute(params) {
|
|
12
|
+
const result = await tool.execute(params);
|
|
13
|
+
return { text: result.content, details: result.details };
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAiCA;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAAoB;IAC7D,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,aAAa,EAAE,IAAI,CAAC,aAAa;QACjC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;QACvC,KAAK,CAAC,OAAO,CAAC,MAA+B;YAC3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAA8C,EAAE,CAAC;QAClG,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,29 +1,13 @@
|
|
|
1
|
-
import type { DotAiConfig
|
|
1
|
+
import type { DotAiConfig } from './types.js';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*/
|
|
6
|
-
export declare function injectRoot(config: DotAiConfig, root: string): DotAiConfig;
|
|
7
|
-
/**
|
|
8
|
-
* Load and parse dot-ai.yml from a workspace root.
|
|
9
|
-
* Returns the config with defaults applied.
|
|
10
|
-
*
|
|
11
|
-
* Uses a minimal YAML parser (key: value pairs + nested objects).
|
|
12
|
-
* No dependency on yaml package.
|
|
3
|
+
* Load config from workspace root.
|
|
4
|
+
* Tries settings.json first, falls back to empty config.
|
|
13
5
|
*/
|
|
14
6
|
export declare function loadConfig(workspaceRoot: string): Promise<DotAiConfig>;
|
|
15
7
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
8
|
+
* Migrate dot-ai.yml to settings.json.
|
|
9
|
+
* Reads the existing YAML config and writes a settings.json equivalent.
|
|
10
|
+
* Returns the path of the written file, or null if no YAML config exists.
|
|
18
11
|
*/
|
|
19
|
-
export
|
|
20
|
-
memory: ProviderConfig;
|
|
21
|
-
skills: ProviderConfig;
|
|
22
|
-
identity: ProviderConfig;
|
|
23
|
-
routing: ProviderConfig;
|
|
24
|
-
tasks: ProviderConfig;
|
|
25
|
-
tools: ProviderConfig;
|
|
26
|
-
debug?: import('./types.js').DebugConfig;
|
|
27
|
-
}
|
|
28
|
-
export declare function resolveConfig(config: DotAiConfig): ResolvedConfig;
|
|
12
|
+
export declare function migrateConfig(workspaceRoot: string): Promise<string | null>;
|
|
29
13
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,YAAY,CAAC;AA6DhE;;;GAGG;AACH,wBAAsB,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAI5E;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqBjF"}
|
package/dist/config.js
CHANGED
|
@@ -1,141 +1,164 @@
|
|
|
1
1
|
import { readFile } from 'node:fs/promises';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
-
import { discoverNodes, parseScanDirs } from './nodes.js';
|
|
4
3
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* Load settings.json (Pi-compatible format).
|
|
5
|
+
*
|
|
6
|
+
* Format:
|
|
7
|
+
* {
|
|
8
|
+
* "packages": ["npm:@dot-ai/ext-cockpit@1.0.0"],
|
|
9
|
+
* "extensions": [".ai/extensions/custom.ts"],
|
|
10
|
+
* "debug": { "logPath": "..." },
|
|
11
|
+
* "workspace": { "scanDirs": "..." }
|
|
12
|
+
* }
|
|
13
|
+
*/
|
|
14
|
+
async function loadSettingsJson(workspaceRoot) {
|
|
15
|
+
const settingsPath = join(workspaceRoot, '.ai', 'settings.json');
|
|
16
|
+
try {
|
|
17
|
+
const raw = await readFile(settingsPath, 'utf-8');
|
|
18
|
+
const json = JSON.parse(raw);
|
|
19
|
+
return settingsJsonToConfig(json);
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Convert Pi-compatible settings.json to DotAiConfig.
|
|
7
27
|
*/
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
};
|
|
28
|
+
function settingsJsonToConfig(json) {
|
|
29
|
+
const config = {};
|
|
30
|
+
// Extensions: string[] of local paths
|
|
31
|
+
const extensions = json['extensions'];
|
|
32
|
+
const packages = json['packages'];
|
|
33
|
+
if ((extensions && Array.isArray(extensions)) || (packages && Array.isArray(packages))) {
|
|
34
|
+
config.extensions = {};
|
|
35
|
+
if (extensions && Array.isArray(extensions)) {
|
|
36
|
+
config.extensions.paths = extensions.filter((e) => typeof e === 'string');
|
|
37
|
+
}
|
|
38
|
+
if (packages && Array.isArray(packages)) {
|
|
39
|
+
config.extensions.packages = packages.filter((p) => typeof p === 'string');
|
|
21
40
|
}
|
|
22
41
|
}
|
|
23
|
-
//
|
|
24
|
-
if (
|
|
25
|
-
|
|
42
|
+
// Debug section
|
|
43
|
+
if (json['debug'] && typeof json['debug'] === 'object') {
|
|
44
|
+
const debug = json['debug'];
|
|
45
|
+
config.debug = {};
|
|
46
|
+
if (typeof debug['logPath'] === 'string')
|
|
47
|
+
config.debug.logPath = debug['logPath'];
|
|
26
48
|
}
|
|
27
|
-
|
|
28
|
-
|
|
49
|
+
// Workspace section
|
|
50
|
+
if (json['workspace'] && typeof json['workspace'] === 'object') {
|
|
51
|
+
const ws = json['workspace'];
|
|
52
|
+
config.workspace = {};
|
|
53
|
+
if (typeof ws['scanDirs'] === 'string')
|
|
54
|
+
config.workspace.scanDirs = ws['scanDirs'];
|
|
29
55
|
}
|
|
30
|
-
return
|
|
56
|
+
return config;
|
|
31
57
|
}
|
|
32
58
|
/**
|
|
33
|
-
* Load
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* Uses a minimal YAML parser (key: value pairs + nested objects).
|
|
37
|
-
* No dependency on yaml package.
|
|
59
|
+
* Load config from workspace root.
|
|
60
|
+
* Tries settings.json first, falls back to empty config.
|
|
38
61
|
*/
|
|
39
62
|
export async function loadConfig(workspaceRoot) {
|
|
40
|
-
const
|
|
63
|
+
const settingsConfig = await loadSettingsJson(workspaceRoot);
|
|
64
|
+
if (settingsConfig)
|
|
65
|
+
return settingsConfig;
|
|
66
|
+
return {};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Migrate dot-ai.yml to settings.json.
|
|
70
|
+
* Reads the existing YAML config and writes a settings.json equivalent.
|
|
71
|
+
* Returns the path of the written file, or null if no YAML config exists.
|
|
72
|
+
*/
|
|
73
|
+
export async function migrateConfig(workspaceRoot) {
|
|
74
|
+
const ymlPath = join(workspaceRoot, '.ai', 'dot-ai.yml');
|
|
41
75
|
let raw;
|
|
42
76
|
try {
|
|
43
|
-
raw = await readFile(
|
|
77
|
+
raw = await readFile(ymlPath, 'utf-8');
|
|
44
78
|
}
|
|
45
79
|
catch {
|
|
46
|
-
// No
|
|
47
|
-
return {};
|
|
80
|
+
return null; // No YAML config to migrate
|
|
48
81
|
}
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
};
|
|
82
|
+
// Extract extensions section from YAML if present
|
|
83
|
+
const config = {};
|
|
84
|
+
const extensions = parseExtensionsFromYaml(raw);
|
|
85
|
+
if (extensions) {
|
|
86
|
+
config.extensions = extensions;
|
|
87
|
+
}
|
|
88
|
+
const settings = configToSettingsJson(config);
|
|
89
|
+
const settingsPath = join(workspaceRoot, '.ai', 'settings.json');
|
|
90
|
+
const { writeFile: wf } = await import('node:fs/promises');
|
|
91
|
+
await wf(settingsPath, JSON.stringify(settings, null, 2) + '\n', 'utf-8');
|
|
92
|
+
return settingsPath;
|
|
61
93
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
94
|
+
/**
|
|
95
|
+
* Convert DotAiConfig to Pi-compatible settings.json format.
|
|
96
|
+
*/
|
|
97
|
+
function configToSettingsJson(config) {
|
|
98
|
+
const settings = {};
|
|
99
|
+
if (config.extensions?.paths?.length) {
|
|
100
|
+
settings['extensions'] = config.extensions.paths;
|
|
65
101
|
}
|
|
66
|
-
|
|
102
|
+
if (config.extensions?.packages?.length) {
|
|
103
|
+
settings['packages'] = config.extensions.packages;
|
|
104
|
+
}
|
|
105
|
+
if (config.debug)
|
|
106
|
+
settings['debug'] = config.debug;
|
|
107
|
+
if (config.workspace)
|
|
108
|
+
settings['workspace'] = config.workspace;
|
|
109
|
+
return settings;
|
|
67
110
|
}
|
|
68
|
-
|
|
111
|
+
/**
|
|
112
|
+
* Parse extensions section from legacy YAML config.
|
|
113
|
+
*/
|
|
114
|
+
function parseExtensionsFromYaml(raw) {
|
|
115
|
+
const extensions = {};
|
|
69
116
|
const lines = raw.split('\n');
|
|
70
|
-
|
|
71
|
-
let
|
|
117
|
+
let inExtensions = false;
|
|
118
|
+
let currentKey = null;
|
|
72
119
|
for (const line of lines) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
continue;
|
|
76
|
-
// Top-level key (no indent)
|
|
77
|
-
const topMatch = line.match(/^(\w+):$/);
|
|
78
|
-
if (topMatch) {
|
|
79
|
-
currentSection = topMatch[1];
|
|
80
|
-
result[currentSection] = {};
|
|
120
|
+
if (line.match(/^extensions:$/)) {
|
|
121
|
+
inExtensions = true;
|
|
81
122
|
continue;
|
|
82
123
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
124
|
+
if (inExtensions && line.match(/^\w+:/) && !line.match(/^extensions:/)) {
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
if (!inExtensions)
|
|
128
|
+
continue;
|
|
129
|
+
const inlineArrayMatch = line.match(/^\s{2}(\w+):\s*\[(.+)\]$/);
|
|
130
|
+
if (inlineArrayMatch) {
|
|
131
|
+
const key = inlineArrayMatch[1];
|
|
132
|
+
const items = inlineArrayMatch[2]
|
|
133
|
+
.split(',')
|
|
134
|
+
.map(s => stripQuotes(s.trim()))
|
|
135
|
+
.filter(s => s.length > 0);
|
|
136
|
+
extensions[key] = items;
|
|
137
|
+
currentKey = null;
|
|
91
138
|
continue;
|
|
92
139
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
section['with'] = {};
|
|
99
|
-
}
|
|
100
|
-
let value = stripQuotes(deepMatch[2].trim());
|
|
101
|
-
value = value.replace(/\$\{(\w+)\}/g, (_, name) => process.env[name] ?? '');
|
|
102
|
-
section['with'][deepMatch[1]] = value;
|
|
140
|
+
const keyMatch = line.match(/^\s{2}(\w+):$/);
|
|
141
|
+
if (keyMatch) {
|
|
142
|
+
currentKey = keyMatch[1];
|
|
143
|
+
extensions[currentKey] = [];
|
|
144
|
+
continue;
|
|
103
145
|
}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
const section = result[key];
|
|
110
|
-
if (section && typeof section === 'object') {
|
|
111
|
-
const node = section;
|
|
112
|
-
const providerConfig = {
|
|
113
|
-
use: typeof node['use'] === 'string' ? node['use'] : '',
|
|
114
|
-
};
|
|
115
|
-
if (node['with'] && typeof node['with'] === 'object') {
|
|
116
|
-
providerConfig.with = node['with'];
|
|
117
|
-
}
|
|
118
|
-
config[key] = providerConfig;
|
|
146
|
+
const listItemMatch = line.match(/^\s{4}-\s*(.+)$/);
|
|
147
|
+
if (listItemMatch && currentKey) {
|
|
148
|
+
if (!extensions[currentKey])
|
|
149
|
+
extensions[currentKey] = [];
|
|
150
|
+
extensions[currentKey].push(stripQuotes(listItemMatch[1].trim()));
|
|
119
151
|
}
|
|
120
152
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
if (debugSection && typeof debugSection === 'object') {
|
|
124
|
-
const node = debugSection;
|
|
125
|
-
config.debug = {};
|
|
126
|
-
if (typeof node['logPath'] === 'string') {
|
|
127
|
-
config.debug.logPath = node['logPath'];
|
|
128
|
-
}
|
|
153
|
+
if (extensions.paths?.length || extensions.packages?.length) {
|
|
154
|
+
return extensions;
|
|
129
155
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if (typeof node['scanDirs'] === 'string') {
|
|
136
|
-
config.workspace.scanDirs = node['scanDirs'];
|
|
137
|
-
}
|
|
156
|
+
return null;
|
|
157
|
+
}
|
|
158
|
+
function stripQuotes(s) {
|
|
159
|
+
if ((s.startsWith('"') && s.endsWith('"')) || (s.startsWith("'") && s.endsWith("'"))) {
|
|
160
|
+
return s.slice(1, -1);
|
|
138
161
|
}
|
|
139
|
-
return
|
|
162
|
+
return s;
|
|
140
163
|
}
|
|
141
164
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import type { ContextInjectEvent, ContextInjectResult, ContextModifyEvent, ContextModifyResult, ToolCallEvent, ToolCallResult, ToolResultEvent, AgentEndEvent, ToolDefinition, ExtensionContext, ResourcesDiscoverResult, LabelExtractEvent, ContextEnrichEvent, ContextEnrichResult, RouteEvent, RouteResult, InputEvent, InputResult, CommandDefinition } from './extension-types.js';
|
|
2
|
+
import type { Label } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* v6 Extension Context — passed as second argument to every event handler.
|
|
5
|
+
* Extends the base ExtensionContext with labels and optional agent capabilities.
|
|
6
|
+
*/
|
|
7
|
+
export interface ExtensionContextV6 extends ExtensionContext {
|
|
8
|
+
/** Current prompt labels (available after label_extract) */
|
|
9
|
+
labels: Label[];
|
|
10
|
+
/** Agent capabilities (adapter-provided, may be undefined) */
|
|
11
|
+
agent?: {
|
|
12
|
+
abort(): void;
|
|
13
|
+
getContextUsage(): {
|
|
14
|
+
tokens: number;
|
|
15
|
+
percent: number;
|
|
16
|
+
} | undefined;
|
|
17
|
+
getSystemPrompt(): string;
|
|
18
|
+
[key: string]: unknown;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Extension API — passed to extension factory functions.
|
|
23
|
+
* Pi-compatible: same on(event) + registerTool() + registerCommand() pattern.
|
|
24
|
+
*/
|
|
25
|
+
export interface ExtensionAPI {
|
|
26
|
+
/** Resource discovery: extensions declare resources and contribute labels */
|
|
27
|
+
on(event: 'resources_discover', handler: (e: undefined, ctx: ExtensionContextV6) => Promise<ResourcesDiscoverResult | void>): void;
|
|
28
|
+
/** Label extraction: extensions can add custom labels (chain-transform) */
|
|
29
|
+
on(event: 'label_extract', handler: (e: LabelExtractEvent, ctx: ExtensionContextV6) => Promise<Label[] | void>): void;
|
|
30
|
+
/** Context enrichment: extensions return sections for context injection */
|
|
31
|
+
on(event: 'context_enrich', handler: (e: ContextEnrichEvent, ctx: ExtensionContextV6) => Promise<ContextEnrichResult | void>): void;
|
|
32
|
+
/** Model routing: first result wins */
|
|
33
|
+
on(event: 'route', handler: (e: RouteEvent, ctx: ExtensionContextV6) => Promise<RouteResult | void>): void;
|
|
34
|
+
/** Input transformation: extensions can rewrite user input */
|
|
35
|
+
on(event: 'input', handler: (e: InputEvent, ctx: ExtensionContextV6) => Promise<InputResult | void>): void;
|
|
36
|
+
/** Tool call interception: fired before tool execution, can block */
|
|
37
|
+
on(event: 'tool_call', handler: (e: ToolCallEvent, ctx: ExtensionContextV6) => Promise<ToolCallResult | void>): void;
|
|
38
|
+
/** Tool result observation: fired after tool execution */
|
|
39
|
+
on(event: 'tool_result', handler: (e: ToolResultEvent, ctx: ExtensionContextV6) => Promise<void>): void;
|
|
40
|
+
on(event: 'session_start', handler: (e: undefined, ctx: ExtensionContextV6) => Promise<void>): void;
|
|
41
|
+
on(event: 'session_end', handler: (e: undefined, ctx: ExtensionContextV6) => Promise<void>): void;
|
|
42
|
+
on(event: 'agent_start', handler: (e: undefined, ctx: ExtensionContextV6) => Promise<void>): void;
|
|
43
|
+
on(event: 'agent_end', handler: (e: AgentEndEvent, ctx: ExtensionContextV6) => Promise<void>): void;
|
|
44
|
+
on(event: 'turn_start', handler: (e: undefined, ctx: ExtensionContextV6) => Promise<void>): void;
|
|
45
|
+
on(event: 'turn_end', handler: (e: undefined, ctx: ExtensionContextV6) => Promise<void>): void;
|
|
46
|
+
/** @deprecated Use context_enrich instead */
|
|
47
|
+
on(event: 'context_inject', handler: (e: ContextInjectEvent, ctx: ExtensionContextV6) => Promise<ContextInjectResult | void>): void;
|
|
48
|
+
/** @deprecated Use context_enrich instead */
|
|
49
|
+
on(event: 'context_modify', handler: (e: ContextModifyEvent, ctx: ExtensionContextV6) => Promise<ContextModifyResult | void>): void;
|
|
50
|
+
on(event: string, handler: (e: any, ctx: ExtensionContextV6) => Promise<any>): void;
|
|
51
|
+
/** Register a tool that the agent can invoke */
|
|
52
|
+
registerTool(tool: ToolDefinition): void;
|
|
53
|
+
/** Register a command (slash command, etc.) */
|
|
54
|
+
registerCommand(command: CommandDefinition): void;
|
|
55
|
+
events: {
|
|
56
|
+
on(event: string, handler: (...args: unknown[]) => void): void;
|
|
57
|
+
off(event: string, handler: (...args: unknown[]) => void): void;
|
|
58
|
+
emit(event: string, ...args: unknown[]): void;
|
|
59
|
+
};
|
|
60
|
+
/** Extension configuration (from extension-specific config files, env vars, etc.) */
|
|
61
|
+
config: Record<string, unknown>;
|
|
62
|
+
/** Workspace root directory (contains .ai/) */
|
|
63
|
+
workspaceRoot: string;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=extension-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extension-api.d.ts","sourceRoot":"","sources":["../src/extension-api.ts"],"names":[],"mappings":"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"}
|