@kadi.build/core 0.9.0 → 0.11.1
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/README.md +424 -1
- package/agent.json +19 -0
- package/dist/agent-json.d.ts +231 -0
- package/dist/agent-json.d.ts.map +1 -0
- package/dist/agent-json.js +554 -0
- package/dist/agent-json.js.map +1 -0
- package/dist/client.d.ts +34 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +50 -0
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/dist/process-manager.d.ts +235 -0
- package/dist/process-manager.d.ts.map +1 -0
- package/dist/process-manager.js +647 -0
- package/dist/process-manager.js.map +1 -0
- package/dist/stdio-framing.d.ts +88 -0
- package/dist/stdio-framing.d.ts.map +1 -0
- package/dist/stdio-framing.js +194 -0
- package/dist/stdio-framing.js.map +1 -0
- package/dist/transports/native.d.ts.map +1 -1
- package/dist/transports/native.js +3 -2
- package/dist/transports/native.js.map +1 -1
- package/dist/transports/stdio.d.ts.map +1 -1
- package/dist/transports/stdio.js +3 -181
- package/dist/transports/stdio.js.map +1 -1
- package/dist/types.d.ts +256 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +107 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +212 -0
- package/dist/utils.js.map +1 -0
- package/package.json +3 -1
- package/scripts/symlink.mjs +131 -0
- package/src/agent-json.ts +655 -0
- package/src/client.ts +56 -0
- package/src/errors.ts +15 -0
- package/src/index.ts +32 -0
- package/src/process-manager.ts +821 -0
- package/src/stdio-framing.ts +227 -0
- package/src/transports/native.ts +3 -2
- package/src/transports/stdio.ts +4 -221
- package/src/types.ts +277 -0
- package/src/utils.ts +246 -0
|
@@ -0,0 +1,554 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentJsonManager for kadi-core
|
|
3
|
+
*
|
|
4
|
+
* Provides unified read/write access to agent.json files across the ecosystem.
|
|
5
|
+
* Three target locations:
|
|
6
|
+
*
|
|
7
|
+
* 1. **Project root** — the agent's own config (`/my-agent/agent.json`)
|
|
8
|
+
* 2. **Installed ability** — an ability's config (`/my-agent/abilities/calculator@1.0.0/agent.json`)
|
|
9
|
+
* 3. **KADI home** — global CLI config (`~/.kadi/agent.json`)
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { AgentJsonManager } from '@kadi.build/core';
|
|
14
|
+
*
|
|
15
|
+
* const ajm = new AgentJsonManager();
|
|
16
|
+
*
|
|
17
|
+
* // Read
|
|
18
|
+
* const config = await ajm.readProject();
|
|
19
|
+
* const deploy = await ajm.readProject('deploy.local');
|
|
20
|
+
* const abilityConfig = await ajm.readAbility('calculator');
|
|
21
|
+
*
|
|
22
|
+
* // Write
|
|
23
|
+
* await ajm.writeProject('deploy.staging', { target: 'akash' });
|
|
24
|
+
* await ajm.deleteProject('deploy.staging');
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
import { readFile, writeFile, rename, mkdir } from 'fs/promises';
|
|
28
|
+
import { existsSync } from 'fs';
|
|
29
|
+
import { join, dirname } from 'path';
|
|
30
|
+
import { homedir } from 'os';
|
|
31
|
+
import { randomBytes } from 'crypto';
|
|
32
|
+
import { KadiError } from './errors.js';
|
|
33
|
+
import { findProjectRoot, readLockFile, getInstalledAbilityNames } from './lockfile.js';
|
|
34
|
+
import { getByPath, setByPath, deleteByPath } from './utils.js';
|
|
35
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
36
|
+
// CONSTANTS
|
|
37
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
38
|
+
const AGENT_JSON_FILENAME = 'agent.json';
|
|
39
|
+
const DEFAULT_KADI_HOME = join(homedir(), '.kadi');
|
|
40
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
41
|
+
// AGENT JSON MANAGER
|
|
42
|
+
// ═══════════════════════════════════════════════════════════════════════
|
|
43
|
+
export class AgentJsonManager {
|
|
44
|
+
options;
|
|
45
|
+
/** Cached project root (resolved lazily) */
|
|
46
|
+
resolvedProjectRoot = null;
|
|
47
|
+
constructor(options = {}) {
|
|
48
|
+
this.options = {
|
|
49
|
+
projectRoot: options.projectRoot ?? '',
|
|
50
|
+
kadiHome: options.kadiHome ?? DEFAULT_KADI_HOME,
|
|
51
|
+
createOnWrite: options.createOnWrite ?? true,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
// ─────────────────────────────────────────────────────────────────
|
|
55
|
+
// PROJECT ROOT RESOLUTION
|
|
56
|
+
// ─────────────────────────────────────────────────────────────────
|
|
57
|
+
/**
|
|
58
|
+
* Get the resolved project root path.
|
|
59
|
+
* Auto-detects if not explicitly set.
|
|
60
|
+
*/
|
|
61
|
+
async getProjectRoot() {
|
|
62
|
+
if (this.resolvedProjectRoot) {
|
|
63
|
+
return this.resolvedProjectRoot;
|
|
64
|
+
}
|
|
65
|
+
if (this.options.projectRoot) {
|
|
66
|
+
this.resolvedProjectRoot = this.options.projectRoot;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
this.resolvedProjectRoot = await findProjectRoot();
|
|
70
|
+
}
|
|
71
|
+
return this.resolvedProjectRoot;
|
|
72
|
+
}
|
|
73
|
+
// ─────────────────────────────────────────────────────────────────
|
|
74
|
+
// READ API
|
|
75
|
+
// ─────────────────────────────────────────────────────────────────
|
|
76
|
+
/**
|
|
77
|
+
* Read the project root agent.json.
|
|
78
|
+
*
|
|
79
|
+
* @param field - Optional dot-notation path to a specific field
|
|
80
|
+
* @returns The full agent.json object, or a specific field value
|
|
81
|
+
* @throws KadiError with code AGENT_JSON_NOT_FOUND, AGENT_JSON_PARSE_ERROR,
|
|
82
|
+
* or AGENT_JSON_FIELD_NOT_FOUND
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* const config = await ajm.readProject(); // Full object
|
|
87
|
+
* const name = await ajm.readProject('name'); // 'my-agent'
|
|
88
|
+
* const deploy = await ajm.readProject('deploy.local'); // { target: 'docker', ... }
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
async readProject(field) {
|
|
92
|
+
const root = await this.getProjectRoot();
|
|
93
|
+
const filePath = join(root, AGENT_JSON_FILENAME);
|
|
94
|
+
const data = await this.readJsonFile(filePath, 'project');
|
|
95
|
+
if (!field)
|
|
96
|
+
return data;
|
|
97
|
+
return this.resolveField(data, field, filePath);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Read an installed ability's agent.json.
|
|
101
|
+
*
|
|
102
|
+
* Resolution order for version ambiguity:
|
|
103
|
+
* 1. If `options.version` specified → exact match
|
|
104
|
+
* 2. Prefer `isTopLevel: true` entries (direct dependencies)
|
|
105
|
+
* 3. Use highest semver version
|
|
106
|
+
*
|
|
107
|
+
* @param name - Ability name (without version)
|
|
108
|
+
* @param options - Version targeting and field selection
|
|
109
|
+
* @returns The full agent.json object, or a specific field value
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```typescript
|
|
113
|
+
* const config = await ajm.readAbility('calculator');
|
|
114
|
+
* const scripts = await ajm.readAbility('calculator', { field: 'scripts' });
|
|
115
|
+
* const specific = await ajm.readAbility('secret-ability', { version: '0.9.0' });
|
|
116
|
+
* ```
|
|
117
|
+
*/
|
|
118
|
+
async readAbility(name, options = {}) {
|
|
119
|
+
const abilityPath = await this.resolveAbilityDir(name, options.version);
|
|
120
|
+
const filePath = join(abilityPath, AGENT_JSON_FILENAME);
|
|
121
|
+
const data = await this.readJsonFile(filePath, `ability "${name}"`);
|
|
122
|
+
if (!options.field)
|
|
123
|
+
return data;
|
|
124
|
+
return this.resolveField(data, options.field, filePath);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Read the global KADI home agent.json (~/.kadi/agent.json).
|
|
128
|
+
*
|
|
129
|
+
* @param field - Optional dot-notation path to a specific field
|
|
130
|
+
* @returns The full agent.json object, or a specific field value
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* const global = await ajm.readHome();
|
|
135
|
+
* const plugins = await ajm.readHome('cliPlugins');
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
async readHome(field) {
|
|
139
|
+
const filePath = join(this.options.kadiHome, AGENT_JSON_FILENAME);
|
|
140
|
+
const data = await this.readJsonFile(filePath, 'home (~/.kadi)');
|
|
141
|
+
if (!field)
|
|
142
|
+
return data;
|
|
143
|
+
return this.resolveField(data, field, filePath);
|
|
144
|
+
}
|
|
145
|
+
// ─────────────────────────────────────────────────────────────────
|
|
146
|
+
// WRITE API
|
|
147
|
+
// ─────────────────────────────────────────────────────────────────
|
|
148
|
+
/**
|
|
149
|
+
* Write a value to the project root agent.json.
|
|
150
|
+
*
|
|
151
|
+
* Uses deep-merge semantics for objects (preserves sibling keys).
|
|
152
|
+
* Scalars and arrays are directly replaced.
|
|
153
|
+
*
|
|
154
|
+
* @param path - Dot-notation path to the field to set
|
|
155
|
+
* @param value - The value to write
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```typescript
|
|
159
|
+
* await ajm.writeProject('version', '2.0.0');
|
|
160
|
+
* await ajm.writeProject('deploy.staging', { target: 'akash', network: 'mainnet' });
|
|
161
|
+
* await ajm.writeProject('build.arm64', { from: 'node:22-slim', platform: 'linux/arm64' });
|
|
162
|
+
* ```
|
|
163
|
+
*/
|
|
164
|
+
async writeProject(path, value) {
|
|
165
|
+
const root = await this.getProjectRoot();
|
|
166
|
+
const filePath = join(root, AGENT_JSON_FILENAME);
|
|
167
|
+
await this.writeField(filePath, path, value, 'project');
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Write a value to an installed ability's agent.json.
|
|
171
|
+
*
|
|
172
|
+
* @param name - Ability name
|
|
173
|
+
* @param path - Dot-notation path to the field to set
|
|
174
|
+
* @param value - The value to write
|
|
175
|
+
* @param version - Optional specific version to target
|
|
176
|
+
*
|
|
177
|
+
* @example
|
|
178
|
+
* ```typescript
|
|
179
|
+
* await ajm.writeAbility('calculator', 'scripts.dev', 'node dist/index.js --debug');
|
|
180
|
+
* ```
|
|
181
|
+
*/
|
|
182
|
+
async writeAbility(name, path, value, version) {
|
|
183
|
+
const abilityPath = await this.resolveAbilityDir(name, version);
|
|
184
|
+
const filePath = join(abilityPath, AGENT_JSON_FILENAME);
|
|
185
|
+
await this.writeField(filePath, path, value, `ability "${name}"`);
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Write a value to the global KADI home agent.json.
|
|
189
|
+
*
|
|
190
|
+
* @param path - Dot-notation path to the field to set
|
|
191
|
+
* @param value - The value to write
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```typescript
|
|
195
|
+
* await ajm.writeHome('cliPlugins.my-plugin', { version: '1.0.0' });
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
async writeHome(path, value) {
|
|
199
|
+
const filePath = join(this.options.kadiHome, AGENT_JSON_FILENAME);
|
|
200
|
+
await this.writeField(filePath, path, value, 'home (~/.kadi)');
|
|
201
|
+
}
|
|
202
|
+
// ─────────────────────────────────────────────────────────────────
|
|
203
|
+
// DELETE API
|
|
204
|
+
// ─────────────────────────────────────────────────────────────────
|
|
205
|
+
/**
|
|
206
|
+
* Delete a field from the project root agent.json.
|
|
207
|
+
*
|
|
208
|
+
* @param path - Dot-notation path to the field to delete
|
|
209
|
+
* @returns true if the field was found and deleted
|
|
210
|
+
*
|
|
211
|
+
* @example
|
|
212
|
+
* ```typescript
|
|
213
|
+
* await ajm.deleteProject('deploy.staging');
|
|
214
|
+
* ```
|
|
215
|
+
*/
|
|
216
|
+
async deleteProject(path) {
|
|
217
|
+
const root = await this.getProjectRoot();
|
|
218
|
+
const filePath = join(root, AGENT_JSON_FILENAME);
|
|
219
|
+
return this.deleteField(filePath, path);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Delete a field from an ability's agent.json.
|
|
223
|
+
*/
|
|
224
|
+
async deleteAbility(name, path, version) {
|
|
225
|
+
const abilityPath = await this.resolveAbilityDir(name, version);
|
|
226
|
+
const filePath = join(abilityPath, AGENT_JSON_FILENAME);
|
|
227
|
+
return this.deleteField(filePath, path);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Delete a field from the global KADI home agent.json.
|
|
231
|
+
*/
|
|
232
|
+
async deleteHome(path) {
|
|
233
|
+
const filePath = join(this.options.kadiHome, AGENT_JSON_FILENAME);
|
|
234
|
+
return this.deleteField(filePath, path);
|
|
235
|
+
}
|
|
236
|
+
// ─────────────────────────────────────────────────────────────────
|
|
237
|
+
// DISCOVERY API
|
|
238
|
+
// ─────────────────────────────────────────────────────────────────
|
|
239
|
+
/**
|
|
240
|
+
* List all installed abilities with their name, version, and path.
|
|
241
|
+
*
|
|
242
|
+
* @returns Array of AbilityInfo objects
|
|
243
|
+
*
|
|
244
|
+
* @example
|
|
245
|
+
* ```typescript
|
|
246
|
+
* const abilities = await ajm.listAbilities();
|
|
247
|
+
* // [
|
|
248
|
+
* // { name: 'calculator', version: '1.0.0', path: '/abs/path/abilities/calculator@1.0.0' },
|
|
249
|
+
* // { name: 'secret-ability', version: '0.9.0', path: '/abs/path/abilities/secret-ability@0.9.0' },
|
|
250
|
+
* // ]
|
|
251
|
+
* ```
|
|
252
|
+
*/
|
|
253
|
+
async listAbilities() {
|
|
254
|
+
const root = await this.getProjectRoot();
|
|
255
|
+
let lockFile;
|
|
256
|
+
try {
|
|
257
|
+
lockFile = await readLockFile(root);
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
return []; // No lock file → no installed abilities
|
|
261
|
+
}
|
|
262
|
+
const abilities = [];
|
|
263
|
+
for (const [key, entry] of Object.entries(lockFile.abilities)) {
|
|
264
|
+
const lastAt = key.lastIndexOf('@');
|
|
265
|
+
const name = lastAt !== -1 ? key.substring(0, lastAt) : key;
|
|
266
|
+
abilities.push({
|
|
267
|
+
name,
|
|
268
|
+
version: entry.version,
|
|
269
|
+
path: join(root, entry.resolved),
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
return abilities;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Check if a specific ability is installed.
|
|
276
|
+
*
|
|
277
|
+
* @param name - Ability name (without version)
|
|
278
|
+
* @returns true if the ability exists in the lock file
|
|
279
|
+
*/
|
|
280
|
+
async hasAbility(name) {
|
|
281
|
+
const root = await this.getProjectRoot();
|
|
282
|
+
let lockFile;
|
|
283
|
+
try {
|
|
284
|
+
lockFile = await readLockFile(root);
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
return false;
|
|
288
|
+
}
|
|
289
|
+
return this.findAbilityEntries(lockFile, name).length > 0;
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Get all installed versions of a specific ability.
|
|
293
|
+
*
|
|
294
|
+
* @param name - Ability name (without version)
|
|
295
|
+
* @returns Array of version strings
|
|
296
|
+
*
|
|
297
|
+
* @example
|
|
298
|
+
* ```typescript
|
|
299
|
+
* const versions = await ajm.getAbilityVersions('secret-ability');
|
|
300
|
+
* // ['0.7.0', '0.9.0']
|
|
301
|
+
* ```
|
|
302
|
+
*/
|
|
303
|
+
async getAbilityVersions(name) {
|
|
304
|
+
const root = await this.getProjectRoot();
|
|
305
|
+
let lockFile;
|
|
306
|
+
try {
|
|
307
|
+
lockFile = await readLockFile(root);
|
|
308
|
+
}
|
|
309
|
+
catch {
|
|
310
|
+
return [];
|
|
311
|
+
}
|
|
312
|
+
return this.findAbilityEntries(lockFile, name).map(e => e.version);
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Get resolved paths for all known agent.json files.
|
|
316
|
+
*
|
|
317
|
+
* @returns Object with project, home, and abilities paths
|
|
318
|
+
*/
|
|
319
|
+
async getPaths() {
|
|
320
|
+
const root = await this.getProjectRoot();
|
|
321
|
+
const abilities = {};
|
|
322
|
+
try {
|
|
323
|
+
const lockFile = await readLockFile(root);
|
|
324
|
+
for (const [key, entry] of Object.entries(lockFile.abilities)) {
|
|
325
|
+
abilities[key] = join(root, entry.resolved, AGENT_JSON_FILENAME);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
catch {
|
|
329
|
+
// No lock file — abilities stays empty
|
|
330
|
+
}
|
|
331
|
+
return {
|
|
332
|
+
project: join(root, AGENT_JSON_FILENAME),
|
|
333
|
+
home: join(this.options.kadiHome, AGENT_JSON_FILENAME),
|
|
334
|
+
abilities,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
// ─────────────────────────────────────────────────────────────────
|
|
338
|
+
// INTERNAL: FILE I/O
|
|
339
|
+
// ─────────────────────────────────────────────────────────────────
|
|
340
|
+
/**
|
|
341
|
+
* Read and parse a JSON file.
|
|
342
|
+
*/
|
|
343
|
+
async readJsonFile(filePath, label) {
|
|
344
|
+
let content;
|
|
345
|
+
try {
|
|
346
|
+
content = await readFile(filePath, 'utf-8');
|
|
347
|
+
}
|
|
348
|
+
catch {
|
|
349
|
+
throw new KadiError(`${label} agent.json not found`, 'AGENT_JSON_NOT_FOUND', {
|
|
350
|
+
path: filePath,
|
|
351
|
+
hint: label === 'project'
|
|
352
|
+
? 'Make sure you are in a KADI project directory with an agent.json file'
|
|
353
|
+
: `The ${label} agent.json was expected at: ${filePath}`,
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
try {
|
|
357
|
+
return JSON.parse(content);
|
|
358
|
+
}
|
|
359
|
+
catch {
|
|
360
|
+
throw new KadiError(`Failed to parse ${label} agent.json`, 'AGENT_JSON_PARSE_ERROR', {
|
|
361
|
+
path: filePath,
|
|
362
|
+
hint: 'The file contains invalid JSON. Check for syntax errors.',
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Resolve a field from a parsed agent.json using dot-path notation.
|
|
368
|
+
*/
|
|
369
|
+
resolveField(data, field, filePath) {
|
|
370
|
+
const value = getByPath(data, field);
|
|
371
|
+
if (value === undefined) {
|
|
372
|
+
throw new KadiError(`Field "${field}" not found in agent.json`, 'AGENT_JSON_FIELD_NOT_FOUND', {
|
|
373
|
+
path: filePath,
|
|
374
|
+
available: Object.keys(data),
|
|
375
|
+
hint: `Available top-level keys: ${Object.keys(data).join(', ')}`,
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
return value;
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Write a field to a JSON file using dot-path notation.
|
|
382
|
+
* Atomic write: writes to a temp file then renames.
|
|
383
|
+
*/
|
|
384
|
+
async writeField(filePath, path, value, label) {
|
|
385
|
+
// Read existing or create new
|
|
386
|
+
let data;
|
|
387
|
+
try {
|
|
388
|
+
const content = await readFile(filePath, 'utf-8');
|
|
389
|
+
data = JSON.parse(content);
|
|
390
|
+
}
|
|
391
|
+
catch {
|
|
392
|
+
if (!this.options.createOnWrite) {
|
|
393
|
+
throw new KadiError(`${label} agent.json not found (createOnWrite is false)`, 'AGENT_JSON_NOT_FOUND', { path: filePath });
|
|
394
|
+
}
|
|
395
|
+
data = {};
|
|
396
|
+
}
|
|
397
|
+
// Apply the change
|
|
398
|
+
setByPath(data, path, value);
|
|
399
|
+
// Atomic write
|
|
400
|
+
await this.atomicWriteJson(filePath, data);
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Delete a field from a JSON file.
|
|
404
|
+
*/
|
|
405
|
+
async deleteField(filePath, path) {
|
|
406
|
+
let content;
|
|
407
|
+
try {
|
|
408
|
+
content = await readFile(filePath, 'utf-8');
|
|
409
|
+
}
|
|
410
|
+
catch {
|
|
411
|
+
return false;
|
|
412
|
+
}
|
|
413
|
+
let data;
|
|
414
|
+
try {
|
|
415
|
+
data = JSON.parse(content);
|
|
416
|
+
}
|
|
417
|
+
catch {
|
|
418
|
+
return false;
|
|
419
|
+
}
|
|
420
|
+
const deleted = deleteByPath(data, path);
|
|
421
|
+
if (deleted) {
|
|
422
|
+
await this.atomicWriteJson(filePath, data);
|
|
423
|
+
}
|
|
424
|
+
return deleted;
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Write JSON to a file atomically (write temp → rename).
|
|
428
|
+
*/
|
|
429
|
+
async atomicWriteJson(filePath, data) {
|
|
430
|
+
const dir = dirname(filePath);
|
|
431
|
+
const tmpPath = join(dir, `.agent.json.${randomBytes(6).toString('hex')}.tmp`);
|
|
432
|
+
try {
|
|
433
|
+
// Ensure directory exists
|
|
434
|
+
if (!existsSync(dir)) {
|
|
435
|
+
await mkdir(dir, { recursive: true });
|
|
436
|
+
}
|
|
437
|
+
const json = JSON.stringify(data, null, 2) + '\n';
|
|
438
|
+
await writeFile(tmpPath, json, 'utf-8');
|
|
439
|
+
await rename(tmpPath, filePath);
|
|
440
|
+
}
|
|
441
|
+
catch (error) {
|
|
442
|
+
// Attempt cleanup of temp file
|
|
443
|
+
try {
|
|
444
|
+
const { unlink } = await import('fs/promises');
|
|
445
|
+
await unlink(tmpPath);
|
|
446
|
+
}
|
|
447
|
+
catch {
|
|
448
|
+
// Ignore cleanup failure
|
|
449
|
+
}
|
|
450
|
+
throw new KadiError('Failed to write agent.json', 'AGENT_JSON_WRITE_ERROR', {
|
|
451
|
+
path: filePath,
|
|
452
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
// ─────────────────────────────────────────────────────────────────
|
|
457
|
+
// INTERNAL: ABILITY RESOLUTION
|
|
458
|
+
// ─────────────────────────────────────────────────────────────────
|
|
459
|
+
/**
|
|
460
|
+
* Resolve the directory path for an installed ability.
|
|
461
|
+
* Handles version ambiguity with smart defaults.
|
|
462
|
+
*/
|
|
463
|
+
async resolveAbilityDir(name, version) {
|
|
464
|
+
const root = await this.getProjectRoot();
|
|
465
|
+
const lockFile = await readLockFile(root);
|
|
466
|
+
const entries = this.findAbilityEntries(lockFile, name);
|
|
467
|
+
if (entries.length === 0) {
|
|
468
|
+
const available = getInstalledAbilityNames(lockFile);
|
|
469
|
+
throw new KadiError(`Ability "${name}" not found in agent-lock.json`, 'ABILITY_NOT_FOUND', {
|
|
470
|
+
abilityName: name,
|
|
471
|
+
searched: join(root, 'agent-lock.json'),
|
|
472
|
+
available: available.length > 0 ? available : undefined,
|
|
473
|
+
hint: `Run \`kadi install ${name}\` to install it`,
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
let selected;
|
|
477
|
+
if (version) {
|
|
478
|
+
// Exact version requested
|
|
479
|
+
const exact = entries.find(e => e.version === version);
|
|
480
|
+
if (!exact) {
|
|
481
|
+
throw new KadiError(`Ability "${name}" version "${version}" not found`, 'ABILITY_NOT_FOUND', {
|
|
482
|
+
abilityName: name,
|
|
483
|
+
available: entries.map(e => e.version),
|
|
484
|
+
hint: `Available versions: ${entries.map(e => e.version).join(', ')}`,
|
|
485
|
+
});
|
|
486
|
+
}
|
|
487
|
+
selected = exact;
|
|
488
|
+
}
|
|
489
|
+
else if (entries.length === 1) {
|
|
490
|
+
// Only one version — no ambiguity
|
|
491
|
+
selected = entries[0];
|
|
492
|
+
}
|
|
493
|
+
else {
|
|
494
|
+
// Multiple versions — prefer isTopLevel
|
|
495
|
+
const topLevel = entries.filter(e => e.entry.isTopLevel);
|
|
496
|
+
if (topLevel.length === 1) {
|
|
497
|
+
selected = topLevel[0];
|
|
498
|
+
}
|
|
499
|
+
else if (topLevel.length > 1) {
|
|
500
|
+
// Multiple top-level — pick highest semver
|
|
501
|
+
selected = this.highestVersion(topLevel);
|
|
502
|
+
}
|
|
503
|
+
else {
|
|
504
|
+
// No top-level — ambiguous
|
|
505
|
+
throw new KadiError(`Multiple versions of "${name}" installed — specify a version`, 'AGENT_JSON_VERSION_AMBIGUOUS', {
|
|
506
|
+
abilityName: name,
|
|
507
|
+
available: entries.map(e => e.version),
|
|
508
|
+
hint: `Installed versions: ${entries.map(e => e.version).join(', ')}. Use { version: "x.y.z" } to select one.`,
|
|
509
|
+
});
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
return join(root, selected.entry.resolved);
|
|
513
|
+
}
|
|
514
|
+
/**
|
|
515
|
+
* Find all lock file entries matching an ability name.
|
|
516
|
+
*/
|
|
517
|
+
findAbilityEntries(lockFile, name) {
|
|
518
|
+
const results = [];
|
|
519
|
+
for (const [key, entry] of Object.entries(lockFile.abilities)) {
|
|
520
|
+
const lastAt = key.lastIndexOf('@');
|
|
521
|
+
const entryName = lastAt !== -1 ? key.substring(0, lastAt) : key;
|
|
522
|
+
if (entryName === name) {
|
|
523
|
+
results.push({ entry, key, version: entry.version });
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
return results;
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Pick the entry with the highest semver version.
|
|
530
|
+
* Simple comparison — splits on dots and compares numerically.
|
|
531
|
+
*/
|
|
532
|
+
highestVersion(entries) {
|
|
533
|
+
return entries.reduce((highest, current) => {
|
|
534
|
+
return this.compareSemver(current.version, highest.version) > 0
|
|
535
|
+
? current
|
|
536
|
+
: highest;
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
/**
|
|
540
|
+
* Compare two semver strings. Returns > 0 if a > b, < 0 if a < b, 0 if equal.
|
|
541
|
+
*/
|
|
542
|
+
compareSemver(a, b) {
|
|
543
|
+
const aParts = a.split('.').map(Number);
|
|
544
|
+
const bParts = b.split('.').map(Number);
|
|
545
|
+
for (let i = 0; i < Math.max(aParts.length, bParts.length); i++) {
|
|
546
|
+
const aVal = aParts[i] ?? 0;
|
|
547
|
+
const bVal = bParts[i] ?? 0;
|
|
548
|
+
if (aVal !== bVal)
|
|
549
|
+
return aVal - bVal;
|
|
550
|
+
}
|
|
551
|
+
return 0;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
//# sourceMappingURL=agent-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-json.js","sourceRoot":"","sources":["../src/agent-json.ts"],"names":[],"mappings":"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"}
|
package/dist/client.d.ts
CHANGED
|
@@ -16,6 +16,8 @@
|
|
|
16
16
|
*/
|
|
17
17
|
import { type EncryptionKeyPair } from './crypto.js';
|
|
18
18
|
import type { ClientConfig, ClientIdentity, BrokerState, BrokerToolDefinition, ZodToolDefinition, ToolHandler, LoadedAbility, ToolExecutionBridge, RegisterToolOptions, LoadNativeOptions, LoadStdioOptions, LoadBrokerOptions, InvokeRemoteOptions, BrokerEventHandler, PublishOptions, SubscribeOptions, EmitOptions } from './types.js';
|
|
19
|
+
import { AgentJsonManager } from './agent-json.js';
|
|
20
|
+
import { ProcessManager } from './process-manager.js';
|
|
19
21
|
/**
|
|
20
22
|
* The main client for building KADI agents.
|
|
21
23
|
*
|
|
@@ -63,6 +65,10 @@ export declare class KadiClient {
|
|
|
63
65
|
private readonly loadedAbilities;
|
|
64
66
|
/** Registered disconnect hooks */
|
|
65
67
|
private readonly disconnectHooks;
|
|
68
|
+
/** Lazy-initialized AgentJsonManager */
|
|
69
|
+
private _agentJson;
|
|
70
|
+
/** Lazy-initialized ProcessManager */
|
|
71
|
+
private _processes;
|
|
66
72
|
/** Ed25519 private key (DER format) - used for signing */
|
|
67
73
|
private readonly _privateKey;
|
|
68
74
|
/** Base64-encoded Ed25519 public key (SPKI DER format) */
|
|
@@ -700,6 +706,34 @@ export declare class KadiClient {
|
|
|
700
706
|
* Sets up graceful shutdown to disconnect loaded abilities.
|
|
701
707
|
*/
|
|
702
708
|
private serveBroker;
|
|
709
|
+
/**
|
|
710
|
+
* Access the AgentJsonManager for reading/writing agent.json files.
|
|
711
|
+
*
|
|
712
|
+
* Lazily created on first access. Provides unified API for project root,
|
|
713
|
+
* installed ability, and KADI home agent.json files.
|
|
714
|
+
*
|
|
715
|
+
* @example
|
|
716
|
+
* ```typescript
|
|
717
|
+
* const config = await client.agentJson.readProject();
|
|
718
|
+
* const deploy = await client.agentJson.readProject('deploy.local');
|
|
719
|
+
* await client.agentJson.writeProject('deploy.staging', { target: 'akash' });
|
|
720
|
+
* ```
|
|
721
|
+
*/
|
|
722
|
+
get agentJson(): AgentJsonManager;
|
|
723
|
+
/**
|
|
724
|
+
* Access the ProcessManager for spawning and managing background processes.
|
|
725
|
+
*
|
|
726
|
+
* Lazily created on first access. Supports headless, piped, and bridge modes.
|
|
727
|
+
*
|
|
728
|
+
* @example
|
|
729
|
+
* ```typescript
|
|
730
|
+
* const build = await client.processes.spawn('build', {
|
|
731
|
+
* command: 'docker', args: ['build', '.'], mode: 'piped',
|
|
732
|
+
* });
|
|
733
|
+
* build.on('exit', ({ exitCode }) => console.log('done:', exitCode));
|
|
734
|
+
* ```
|
|
735
|
+
*/
|
|
736
|
+
get processes(): ProcessManager;
|
|
703
737
|
/**
|
|
704
738
|
* Get agent information (for readAgentJson protocol).
|
|
705
739
|
*/
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AAGrB,OAAO,KAAK,EACV,YAAY,EAEZ,cAAc,EACd,WAAW,EAGX,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EAOnB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,WAAW,EACZ,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|