odai-dsh-agent 0.2.23 → 0.2.26

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 (63) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +155 -155
  3. package/build/bin/odai-dsh-agent.mjs +26 -19
  4. package/build/bin/odai-dsh-agent.mjs.map +1 -1
  5. package/build/src/control-center-installer.d.mts.map +1 -1
  6. package/build/src/control-center-installer.mjs +90 -50
  7. package/build/src/control-center-installer.mjs.map +1 -1
  8. package/build/src/installer.d.mts +3 -0
  9. package/build/src/installer.d.mts.map +1 -1
  10. package/build/src/installer.mjs +145 -24
  11. package/build/src/installer.mjs.map +1 -1
  12. package/build/src/operation-lock.d.mts +2 -0
  13. package/build/src/operation-lock.d.mts.map +1 -0
  14. package/build/src/operation-lock.mjs +48 -0
  15. package/build/src/operation-lock.mjs.map +1 -0
  16. package/client/client.js +12 -12
  17. package/control-center.cordis.patch.yml +3 -3
  18. package/package.json +90 -90
  19. package/preset/odai/agent.cordis.yml +260 -260
  20. package/preset/odai/preset.yml +3 -3
  21. package/preset/odai/runtime/governance.d.mts +2 -0
  22. package/preset/odai/runtime/governance.d.mts.map +1 -1
  23. package/preset/odai/runtime/governance.mjs +15 -4
  24. package/preset/odai/runtime/governance.mjs.map +1 -1
  25. package/preset/odai/runtime/model-route.d.mts.map +1 -1
  26. package/preset/odai/runtime/model-route.mjs +21 -14
  27. package/preset/odai/runtime/model-route.mjs.map +1 -1
  28. package/preset/odai/runtime/role-overlays.mjs +8 -8
  29. package/preset/odai/runtime/semantic-memory.d.mts.map +1 -1
  30. package/preset/odai/runtime/semantic-memory.mjs +63 -25
  31. package/preset/odai/runtime/semantic-memory.mjs.map +1 -1
  32. package/preset/odai/runtime/session-evidence.d.mts.map +1 -1
  33. package/preset/odai/runtime/session-evidence.mjs +4 -104
  34. package/preset/odai/runtime/session-evidence.mjs.map +1 -1
  35. package/preset/odai/runtime/store-lock.d.mts.map +1 -1
  36. package/preset/odai/runtime/store-lock.mjs +42 -11
  37. package/preset/odai/runtime/store-lock.mjs.map +1 -1
  38. package/preset/odai/skills/odai/SKILL.md +70 -68
  39. package/preset/odai/skills/odai/agents/openai.yaml +4 -4
  40. package/preset/odai/skills/odai/assets/claude-agents/agent.md +11 -11
  41. package/preset/odai/skills/odai/assets/codex-agents/config.toml +11 -11
  42. package/preset/odai/skills/odai/assets/codex-agents/role.toml +5 -5
  43. package/preset/odai/skills/odai/assets/copilot-agents/agent.md +13 -13
  44. package/preset/odai/skills/odai/assets/hooks-policy.example.json +24 -24
  45. package/preset/odai/skills/odai/assets/routing-roles/controller.md +15 -15
  46. package/preset/odai/skills/odai/assets/routing-roles/frontend.md +7 -7
  47. package/preset/odai/skills/odai/assets/routing-roles/planner.md +28 -28
  48. package/preset/odai/skills/odai/assets/routing-roles/researcher.md +7 -7
  49. package/preset/odai/skills/odai/assets/routing-roles/reviewer.md +11 -11
  50. package/preset/odai/skills/odai/assets/task-state.md +14 -14
  51. package/preset/odai/skills/odai/manifest.json +52 -52
  52. package/preset/odai/skills/odai/references/craft.md +54 -54
  53. package/preset/odai/skills/odai/references/dao.md +32 -31
  54. package/preset/odai/skills/odai/references/leverage.md +53 -50
  55. package/preset/odai/skills/odai/references/planning.md +83 -83
  56. package/preset/odai/skills/odai/references/support.md +31 -30
  57. package/preset/odai/skills/odai/references/verification.md +24 -24
  58. package/preset/odai/skills/odai/scripts/build-hooks.mjs +273 -273
  59. package/preset/odai/skills/odai/scripts/build-routing.mjs +315 -315
  60. package/preset/odai/skills/odai/scripts/install-routing.mjs +448 -393
  61. package/preset/odai/skills/odai/scripts/odai-hook.mjs +457 -457
  62. package/preset/odai/skills/odai/scripts/run-role.mjs +285 -285
  63. package/preset/odai/skills/odai/scripts/verify-routing.mjs +103 -103
@@ -1,10 +1,11 @@
1
1
  import { execFileSync } from "node:child_process";
2
- import { randomUUID } from "node:crypto";
3
- import { mkdir, readFile, realpath, rm, writeFile } from "node:fs/promises";
2
+ import { createHash, randomUUID } from "node:crypto";
3
+ import { mkdir, readFile, realpath, writeFile } from "node:fs/promises";
4
4
  import { dirname, resolve, sep } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
6
6
  import { parse as parseYaml } from "yaml";
7
- import { resolveDshHome } from "./installer.mjs";
7
+ import { assertNoSymlinkDescendants, resolveDshHome, resolveManagedDshHome } from "./installer.mjs";
8
+ import { acquireAgentOperationLock } from "./operation-lock.mjs";
8
9
  const moduleDirectory = dirname(fileURLToPath(import.meta.url));
9
10
  const packageRoot = resolve(moduleDirectory, moduleDirectory.endsWith(`${sep}build${sep}src`) ? "../.." : "..");
10
11
  const parsedMetadata = JSON.parse(await readFile(resolve(packageRoot, "package.json"), "utf8"));
@@ -80,7 +81,7 @@ async function lockDependencyIssues(target, dependency) {
80
81
  const issues = [];
81
82
  if (specifier !== dependency)
82
83
  issues.push(`lockfile specifier ${specifier ?? "<missing>"} does not match dependency ${dependency}`);
83
- if (!version || !version.startsWith(dependency)) {
84
+ if (!version || (version !== dependency && !version.startsWith(`${dependency}(`))) {
84
85
  issues.push(`lockfile version ${version ?? "<missing>"} does not resolve dependency ${dependency}`);
85
86
  }
86
87
  return issues;
@@ -157,8 +158,9 @@ async function resolvedPackage(target) {
157
158
  };
158
159
  }
159
160
  export async function inspectAgentControlCenter(options = {}) {
160
- const dshHome = resolveDshHome(options.dshHome);
161
+ const dshHome = await resolveManagedDshHome(options.dshHome, false);
161
162
  const profile = assertProfile(options.profile ?? "web");
163
+ await assertNoSymlinkDescendants(dshHome, `profiles/${profile}`);
162
164
  const target = resolve(dshHome, "profiles", profile);
163
165
  const metadata = await profileMetadata(resolve(target, "package.json"));
164
166
  const dependency = metadata?.dependencies?.[packageMetadata.name];
@@ -229,46 +231,67 @@ function runPluginCommand(action, operand, options) {
229
231
  execute(command, args, processOptions);
230
232
  }
231
233
  async function captureProfile(target) {
232
- return Promise.all(PROFILE_STATE_FILES.map(async (relativePath) => ({
234
+ const files = await Promise.all(PROFILE_STATE_FILES.map(async (relativePath) => ({
233
235
  path: resolve(target, relativePath),
234
236
  content: await optionalFile(resolve(target, relativePath)),
235
237
  })));
236
- }
237
- async function restoreProfile(snapshot) {
238
- for (const file of snapshot) {
239
- if (file.content === undefined)
240
- await rm(file.path, { force: true });
241
- else {
242
- await mkdir(dirname(file.path), { recursive: true });
243
- await writeFile(file.path, file.content);
244
- }
238
+ const digest = createHash("sha256");
239
+ for (const file of files) {
240
+ digest.update(`${file.path.split(/[\\/]/u).at(-1) ?? "state"}\0${file.content?.length ?? -1}\0`);
241
+ if (file.content !== undefined)
242
+ digest.update(file.content);
245
243
  }
244
+ return { files, revision: digest.digest("hex") };
246
245
  }
247
- function previousOperand(inspection) {
248
- const dependency = inspection.dependency;
249
- if (!dependency)
250
- return undefined;
251
- return localDependency(dependency) ? dependency : `${packageMetadata.name}@${dependency}`;
252
- }
253
- async function retainRollbackEvidence(dshHome, snapshot, failure) {
246
+ async function retainRollbackEvidence(dshHome, before, after, failure) {
247
+ await assertNoSymlinkDescendants(dshHome, "odai/control-center-backups");
254
248
  const root = resolve(dshHome, "odai", "control-center-backups", `${Date.now()}-${randomUUID()}`);
255
249
  await mkdir(root, { recursive: true });
256
- for (const file of snapshot) {
257
- if (file.content !== undefined)
258
- await writeFile(resolve(root, file.path.split(/[\\/]/u).at(-1) ?? "state"), file.content);
250
+ await assertNoSymlinkDescendants(dshHome, "odai/control-center-backups");
251
+ for (const [name, snapshot] of [["before", before], ["after", after]]) {
252
+ const snapshotRoot = resolve(root, name);
253
+ await mkdir(snapshotRoot, { recursive: true });
254
+ const states = {};
255
+ for (const file of snapshot.files) {
256
+ const filename = file.path.split(/[\\/]/u).at(-1) ?? "state";
257
+ states[filename] = file.content === undefined ? "missing" : "present";
258
+ if (file.content !== undefined)
259
+ await writeFile(resolve(snapshotRoot, filename), file.content);
260
+ }
261
+ await writeFile(resolve(snapshotRoot, "snapshot.json"), `${JSON.stringify({ revision: snapshot.revision, files: states }, null, 2)}\n`, "utf8");
259
262
  }
260
263
  await writeFile(resolve(root, "failure.txt"), `${failure}\n`, "utf8");
261
264
  return root;
262
265
  }
263
- async function rollbackProfile(before, snapshot, options) {
264
- const operand = previousOperand(before);
265
- if (operand)
266
- runPluginCommand("add", operand, options);
267
- else
268
- runPluginCommand("remove", packageMetadata.name, options);
269
- await restoreProfile(snapshot);
266
+ async function changedProfileFailure(dshHome, before, after, detail, cause) {
267
+ try {
268
+ const backupPath = await retainRollbackEvidence(dshHome, before, after, detail);
269
+ return new Error(`${detail}\ncurrent profile state was preserved; recovery evidence retained at ${backupPath}`, { cause });
270
+ }
271
+ catch (evidenceError) {
272
+ return new AggregateError([cause, evidenceError], `${detail}\ncurrent profile state was preserved, but recovery evidence could not be retained`);
273
+ }
274
+ }
275
+ async function acquireControlCenterOperation(dshHome, profile) {
276
+ await assertNoSymlinkDescendants(dshHome, "odai/locks");
277
+ const lockRoot = resolve(dshHome, "odai", "locks");
278
+ await mkdir(lockRoot, { recursive: true, mode: 0o700 });
279
+ await assertNoSymlinkDescendants(dshHome, "odai/locks");
280
+ return acquireAgentOperationLock(resolve(lockRoot, `control-center-${profile}.lock`), `Agent Control Center ${profile} operation`);
270
281
  }
271
282
  export async function installAgentControlCenter(options = {}) {
283
+ const dshHome = await resolveManagedDshHome(options.dshHome, true);
284
+ const profile = assertProfile(options.profile ?? "web");
285
+ const operationOptions = { ...options, dshHome, profile };
286
+ const releaseOperation = await acquireControlCenterOperation(dshHome, profile);
287
+ try {
288
+ return await installAgentControlCenterUnderLock(operationOptions);
289
+ }
290
+ finally {
291
+ releaseOperation();
292
+ }
293
+ }
294
+ async function installAgentControlCenterUnderLock(options) {
272
295
  const current = await inspectAgentControlCenter(options);
273
296
  if (current.status === "current") {
274
297
  return Object.freeze({
@@ -304,29 +327,46 @@ export async function installAgentControlCenter(options = {}) {
304
327
  });
305
328
  }
306
329
  catch (error) {
307
- try {
308
- await rollbackProfile(current, snapshot, options);
309
- }
310
- catch (rollbackError) {
311
- const detail = `install failed: ${errorMessage(error)}\nrollback failed: ${errorMessage(rollbackError)}`;
312
- const backupPath = await retainRollbackEvidence(current.dshHome, snapshot, detail);
313
- throw new Error(`${detail}\nprofile recovery evidence retained at ${backupPath}`);
330
+ const after = await captureProfile(current.target);
331
+ if (after.revision === snapshot.revision) {
332
+ throw new Error(`${errorMessage(error)}; Control Center profile state remained unchanged`, { cause: error });
314
333
  }
315
- throw new Error(`${errorMessage(error)}; previous Control Center profile state was restored`);
334
+ const detail = `install failed: ${errorMessage(error)}\nautomatic rollback was not attempted because profile ownership changed`;
335
+ throw await changedProfileFailure(current.dshHome, snapshot, after, detail, error);
316
336
  }
317
337
  }
318
338
  export async function uninstallAgentControlCenter(options = {}) {
319
- const current = await inspectAgentControlCenter(options);
320
- if (current.status === "absent")
321
- return Object.freeze({ operation: "absent", target: current.target, profile: current.profile });
322
- if (current.status === "partial-drift") {
323
- throw new Error(`refusing to remove partially owned Control Center profile state at ${current.target}: ${current.issues.join("; ")}`);
339
+ const initial = await inspectAgentControlCenter(options);
340
+ if (initial.status === "absent")
341
+ return Object.freeze({ operation: "absent", target: initial.target, profile: initial.profile });
342
+ const operationOptions = { ...options, dshHome: initial.dshHome, profile: initial.profile };
343
+ const releaseOperation = await acquireControlCenterOperation(initial.dshHome, initial.profile);
344
+ try {
345
+ const current = await inspectAgentControlCenter(operationOptions);
346
+ if (current.status === "absent")
347
+ return Object.freeze({ operation: "absent", target: current.target, profile: current.profile });
348
+ if (current.status === "partial-drift") {
349
+ throw new Error(`refusing to remove partially owned Control Center profile state at ${current.target}: ${current.issues.join("; ")}`);
350
+ }
351
+ const before = await captureProfile(current.target);
352
+ try {
353
+ runPluginCommand("remove", packageMetadata.name, operationOptions);
354
+ const removed = await inspectAgentControlCenter(operationOptions);
355
+ if (removed.status !== "absent") {
356
+ throw new Error(`DSH plugin manager did not remove the Agent Control Center completely: ${removed.issues.join("; ") || removed.status}`);
357
+ }
358
+ return Object.freeze({ operation: "uninstalled", target: removed.target, profile: removed.profile });
359
+ }
360
+ catch (error) {
361
+ const after = await captureProfile(current.target);
362
+ if (after.revision === before.revision)
363
+ throw error;
364
+ const detail = `uninstall failed: ${errorMessage(error)}\nautomatic rollback was not attempted because profile ownership changed`;
365
+ throw await changedProfileFailure(current.dshHome, before, after, detail, error);
366
+ }
324
367
  }
325
- runPluginCommand("remove", packageMetadata.name, options);
326
- const removed = await inspectAgentControlCenter(options);
327
- if (removed.status !== "absent") {
328
- throw new Error(`DSH plugin manager did not remove the Agent Control Center completely: ${removed.issues.join("; ") || removed.status}`);
368
+ finally {
369
+ releaseOperation();
329
370
  }
330
- return Object.freeze({ operation: "uninstalled", target: removed.target, profile: removed.profile });
331
371
  }
332
372
  //# sourceMappingURL=control-center-installer.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"control-center-installer.mjs","sourceRoot":"","sources":["../../src/control-center-installer.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"control-center-installer.mjs","sourceRoot":"","sources":["../../src/control-center-installer.mts"],"names":[],"mappings":"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"}
@@ -14,11 +14,14 @@ export declare function supportsDshVersion(version: string): boolean;
14
14
  export declare const SUPPORTED_DSH_VERSION = "0.1.2-rc.1";
15
15
  export declare function renderAgentCompositionForDsh(composition: string, dshVersion?: string): string;
16
16
  export declare function resolveDshHome(configured?: string, env?: NodeJS.ProcessEnv): string;
17
+ export declare function resolveManagedDshHome(configured: string | undefined, create: boolean): Promise<string>;
18
+ export declare function assertNoSymlinkDescendants(root: string, relativePath: string): Promise<void>;
17
19
  export declare function inspectAgentInstallation(options?: AgentInstallerOptions): Promise<Readonly<{
18
20
  status: "absent" | "installed" | "drifted";
19
21
  issues: string[];
20
22
  version?: string;
21
23
  dshVersion?: string;
24
+ revision?: string;
22
25
  dshHome: string;
23
26
  presetId: string;
24
27
  target: string;
@@ -1 +1 @@
1
- {"version":3,"file":"installer.d.mts","sourceRoot":"","sources":["../../src/installer.mts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAgCD,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,aAAa,qBAAqB,CAAC;AAKhD,eAAO,MAAM,MAAM,UAAwB,CAAC;AAE5C,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,GAAE,OAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhF;AAsBD,eAAO,MAAM,mBAAmB,eAAY,CAAC;AAC7C,eAAO,MAAM,sBAAsB,mBAAsC,CAAC;AAI1E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AACD,eAAO,MAAM,qBAAqB,eAAqB,CAAC;AAexD,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,SAAwB,GAAG,MAAM,CAQ5G;AAED,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAShG;AAED,wBAAsB,wBAAwB,CAAC,OAAO,GAAE,qBAA0B;YArGxE,QAAQ,GAAG,WAAW,GAAG,SAAS;YAClC,MAAM,EAAE;cACN,MAAM;iBACH,MAAM;;;;IAwGpB;AAED,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,qBAA0B;;;;;;;;;IA+E3E;AAED,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B;;;;;;;;IAe7E"}
1
+ {"version":3,"file":"installer.d.mts","sourceRoot":"","sources":["../../src/installer.mts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAiCD,eAAO,MAAM,iBAAiB,SAAS,CAAC;AACxC,eAAO,MAAM,aAAa,qBAAqB,CAAC;AAKhD,eAAO,MAAM,MAAM,UAAwB,CAAC;AAE5C,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,GAAE,OAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAOhF;AAsBD,eAAO,MAAM,mBAAmB,eAAY,CAAC;AAC7C,eAAO,MAAM,sBAAsB,mBAAsC,CAAC;AAI1E,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE3D;AACD,eAAO,MAAM,qBAAqB,eAAqB,CAAC;AAexD,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,SAAwB,GAAG,MAAM,CAQ5G;AAED,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAShG;AAED,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAY5G;AAED,wBAAsB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBlG;AAUD,wBAAsB,wBAAwB,CAAC,OAAO,GAAE,qBAA0B;YAhJxE,QAAQ,GAAG,WAAW,GAAG,SAAS;YAClC,MAAM,EAAE;cACN,MAAM;iBACH,MAAM;eACR,MAAM;;;;IAmJlB;AAED,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,qBAA0B;;;;;;;;;IAa3E;AA2GD,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B;;;;;;;;IAmC7E"}
@@ -1,10 +1,11 @@
1
1
  import { createHash, randomUUID } from "node:crypto";
2
- import { chmod, cp, lstat, mkdir, readFile, readdir, rename, rm, writeFile, } from "node:fs/promises";
2
+ import { chmod, cp, lstat, mkdir, readFile, readdir, realpath, rename, rm, writeFile, } from "node:fs/promises";
3
3
  import { homedir } from "node:os";
4
4
  import { dirname, resolve, sep } from "node:path";
5
5
  import { fileURLToPath, pathToFileURL } from "node:url";
6
- import { satisfies, validRange } from "semver";
6
+ import { satisfies, valid, validRange } from "semver";
7
7
  import { parse as parseYaml } from "yaml";
8
+ import { acquireAgentOperationLock } from "./operation-lock.mjs";
8
9
  function isRecord(value) {
9
10
  return typeof value === "object" && value !== null && !Array.isArray(value);
10
11
  }
@@ -88,16 +89,76 @@ export function resolveDshHome(configured, env = process.env) {
88
89
  return resolve(homedir(), trimmed.slice(2));
89
90
  return resolve(trimmed);
90
91
  }
92
+ export async function resolveManagedDshHome(configured, create) {
93
+ const requested = resolveDshHome(configured);
94
+ const state = await pathState(requested);
95
+ if (state === "missing") {
96
+ if (!create)
97
+ return requested;
98
+ await mkdir(requested, { recursive: true, mode: 0o700 });
99
+ }
100
+ else if (state !== "directory" && state !== "symlink") {
101
+ throw new Error(`DSH home is not a directory: ${requested}`);
102
+ }
103
+ const canonical = await realpath(requested);
104
+ if (await pathState(canonical) !== "directory")
105
+ throw new Error(`DSH home is not a regular directory: ${canonical}`);
106
+ return canonical;
107
+ }
108
+ export async function assertNoSymlinkDescendants(root, relativePath) {
109
+ if (relativePath.split(/[\\/]/u).some((segment) => segment === "..")) {
110
+ throw new Error(`managed DSH path escapes its root: ${relativePath}`);
111
+ }
112
+ const rootState = await pathState(root);
113
+ if (rootState === "missing")
114
+ return;
115
+ if (rootState !== "directory")
116
+ throw new Error(`managed DSH root is not a regular directory: ${root}`);
117
+ let current = root;
118
+ const segments = relativePath.split(/[\\/]/u).filter(Boolean);
119
+ for (let index = 0; index < segments.length; index += 1) {
120
+ current = resolve(current, segments[index]);
121
+ const state = await pathState(current);
122
+ if (state === "missing")
123
+ return;
124
+ if (state === "symlink")
125
+ throw new Error(`symbolic link is not allowed in managed DSH path: ${current}`);
126
+ if (index < segments.length - 1 && state !== "directory") {
127
+ throw new Error(`managed DSH parent is not a directory: ${current}`);
128
+ }
129
+ }
130
+ }
131
+ async function acquirePresetOperation(dshHome, presetId) {
132
+ await assertNoSymlinkDescendants(dshHome, "odai/locks");
133
+ const lockRoot = resolve(dshHome, "odai", "locks");
134
+ await mkdir(lockRoot, { recursive: true, mode: 0o700 });
135
+ await assertNoSymlinkDescendants(dshHome, "odai/locks");
136
+ return acquireAgentOperationLock(resolve(lockRoot, `agent-preset-${presetId}.lock`), `Agent preset ${presetId} operation`);
137
+ }
91
138
  export async function inspectAgentInstallation(options = {}) {
92
139
  const presetId = assertPresetId(options.presetId ?? DEFAULT_PRESET_ID);
93
- const dshHome = resolveDshHome(options.dshHome);
140
+ const dshHome = await resolveManagedDshHome(options.dshHome, false);
141
+ await assertNoSymlinkDescendants(dshHome, ".agent-presets");
94
142
  const target = resolve(dshHome, ".agent-presets", presetId);
95
143
  const state = await inspectTarget(target, presetId);
96
144
  return Object.freeze({ dshHome, presetId, target, ...state });
97
145
  }
98
146
  export async function installAgentPreset(options = {}) {
99
147
  const presetId = assertPresetId(options.presetId ?? DEFAULT_PRESET_ID);
100
- const dshHome = resolveDshHome(options.dshHome);
148
+ const dshHome = await resolveManagedDshHome(options.dshHome, true);
149
+ await assertNoSymlinkDescendants(dshHome, ".agent-presets");
150
+ const targetRoot = resolve(dshHome, ".agent-presets");
151
+ await mkdir(targetRoot, { recursive: true, mode: 0o700 });
152
+ await assertNoSymlinkDescendants(dshHome, ".agent-presets");
153
+ const releaseOperation = await acquirePresetOperation(dshHome, presetId);
154
+ try {
155
+ return await installAgentPresetUnderLock(options, presetId, dshHome);
156
+ }
157
+ finally {
158
+ releaseOperation();
159
+ }
160
+ }
161
+ async function installAgentPresetUnderLock(options, presetId, dshHome) {
101
162
  const sourceRoot = resolve(options.sourceRoot ?? defaultSourceRoot);
102
163
  const dshVersion = options.dshVersion ?? SUPPORTED_DSH_VERSION;
103
164
  if (!supportsDshVersion(dshVersion)) {
@@ -116,7 +177,7 @@ export async function installAgentPreset(options = {}) {
116
177
  await mkdir(targetRoot, { recursive: true, mode: 0o700 });
117
178
  const staging = resolve(targetRoot, `.${presetId}.tmp-${process.pid}-${randomUUID()}`);
118
179
  const backup = resolve(targetRoot, `.${presetId}.backup-${process.pid}-${randomUUID()}`);
119
- let backupCreated = false;
180
+ let backupState = "none";
120
181
  try {
121
182
  await cp(sourceRoot, staging, { recursive: true, errorOnExist: true });
122
183
  await tightenTree(staging);
@@ -142,12 +203,22 @@ export async function installAgentPreset(options = {}) {
142
203
  await chmod(manifestPath, 0o600);
143
204
  if (current.status === "installed") {
144
205
  await rename(target, backup);
145
- backupCreated = true;
206
+ backupState = "unverified";
207
+ const claimed = await inspectTarget(backup, presetId);
208
+ if (claimed.status !== "installed" || claimed.revision !== current.revision) {
209
+ throw new Error(`preset changed before replacement; unverified target preserved at ${backup}`);
210
+ }
211
+ backupState = "confirmed";
212
+ }
213
+ else {
214
+ const latest = await inspectTarget(target, presetId);
215
+ if (latest.status !== "absent")
216
+ throw new Error(`preset target appeared during installation; refusing to replace ${target}`);
146
217
  }
147
218
  await rename(staging, target);
148
- if (backupCreated) {
219
+ if (backupState === "confirmed") {
149
220
  await rm(backup, { recursive: true, force: true });
150
- backupCreated = false;
221
+ backupState = "none";
151
222
  }
152
223
  return Object.freeze({
153
224
  operation: current.status === "installed" ? "updated" : "installed",
@@ -161,16 +232,30 @@ export async function installAgentPreset(options = {}) {
161
232
  });
162
233
  }
163
234
  catch (error) {
164
- await rm(staging, { recursive: true, force: true });
165
- if (backupCreated) {
235
+ if (backupState === "unverified") {
236
+ throw new Error(`agent preset update stopped before ownership was confirmed; moved target preserved at ${backup}: ${errorMessage(error)}`, { cause: error });
237
+ }
238
+ if (backupState === "confirmed") {
166
239
  const targetState = await pathState(target);
167
- if (targetState === "missing")
168
- await rename(backup, target);
240
+ if (targetState === "missing") {
241
+ try {
242
+ await rename(backup, target);
243
+ backupState = "none";
244
+ }
245
+ catch (restoreError) {
246
+ throw new AggregateError([error, restoreError], `agent preset update failed and the previous preset could not be restored; backup preserved at ${backup}`);
247
+ }
248
+ }
249
+ else {
250
+ throw new Error(`agent preset update failed after replacing the target; previous preset backup preserved at ${backup}: ${errorMessage(error)}`, { cause: error });
251
+ }
169
252
  }
170
253
  throw error;
171
254
  }
172
255
  finally {
173
- await rm(backup, { recursive: true, force: true });
256
+ await rm(staging, { recursive: true, force: true });
257
+ if (backupState === "none")
258
+ await rm(backup, { recursive: true, force: true });
174
259
  }
175
260
  }
176
261
  export async function uninstallAgentPreset(options = {}) {
@@ -178,16 +263,38 @@ export async function uninstallAgentPreset(options = {}) {
178
263
  if (inspected.status === "absent") {
179
264
  return Object.freeze({ operation: "absent", target: inspected.target, presetId: inspected.presetId });
180
265
  }
181
- if (inspected.status === "drifted") {
182
- throw new Error(`refusing to remove modified preset at ${inspected.target}: ${inspected.issues.join("; ")}`);
266
+ const releaseOperation = await acquirePresetOperation(inspected.dshHome, inspected.presetId);
267
+ try {
268
+ await assertNoSymlinkDescendants(inspected.dshHome, ".agent-presets");
269
+ const current = await inspectTarget(inspected.target, inspected.presetId);
270
+ if (current.status === "drifted") {
271
+ throw new Error(`refusing to remove modified preset at ${inspected.target}: ${current.issues.join("; ")}`);
272
+ }
273
+ if (current.status === "absent") {
274
+ return Object.freeze({ operation: "absent", target: inspected.target, presetId: inspected.presetId });
275
+ }
276
+ await assertPresetIsNotDefault(inspected.dshHome, inspected.presetId);
277
+ const quarantine = resolve(dirname(inspected.target), `.${inspected.presetId}.uninstall-${process.pid}-${randomUUID()}`);
278
+ await rename(inspected.target, quarantine);
279
+ const claimed = await inspectTarget(quarantine, inspected.presetId);
280
+ if (claimed.status !== "installed" || claimed.revision !== current.revision) {
281
+ throw new Error(`preset changed before uninstall ownership was confirmed; moved target preserved at ${quarantine}`);
282
+ }
283
+ try {
284
+ await rm(quarantine, { recursive: true });
285
+ }
286
+ catch (error) {
287
+ throw new Error(`confirmed preset could not be removed completely; remaining quarantine retained at ${quarantine}: ${errorMessage(error)}`, { cause: error });
288
+ }
289
+ return Object.freeze({
290
+ operation: "uninstalled",
291
+ target: inspected.target,
292
+ presetId: inspected.presetId,
293
+ });
294
+ }
295
+ finally {
296
+ releaseOperation();
183
297
  }
184
- await assertPresetIsNotDefault(inspected.dshHome, inspected.presetId);
185
- await rm(inspected.target, { recursive: true, force: true });
186
- return Object.freeze({
187
- operation: "uninstalled",
188
- target: inspected.target,
189
- presetId: inspected.presetId,
190
- });
191
298
  }
192
299
  async function assertPresetIsNotDefault(dshHome, presetId) {
193
300
  const settingsPath = resolve(dshHome, "settings.yaml");
@@ -219,8 +326,10 @@ async function inspectTarget(target, presetId) {
219
326
  if (state !== "directory")
220
327
  return { status: "drifted", issues: ["target is not a regular directory"] };
221
328
  let manifest;
329
+ let manifestSource;
222
330
  try {
223
- manifest = JSON.parse(await readFile(resolve(target, MANIFEST_FILE), "utf8"));
331
+ manifestSource = await readFile(resolve(target, MANIFEST_FILE));
332
+ manifest = JSON.parse(manifestSource.toString("utf8"));
224
333
  }
225
334
  catch (error) {
226
335
  return { status: "drifted", issues: [`managed manifest is unavailable: ${errorMessage(error)}`] };
@@ -251,6 +360,7 @@ async function inspectTarget(target, presetId) {
251
360
  issues,
252
361
  version: isRecord(manifest) && typeof manifest.version === "string" ? manifest.version : undefined,
253
362
  dshVersion: isRecord(manifest) && typeof manifest.dshVersion === "string" ? manifest.dshVersion : undefined,
363
+ revision: issues.length === 0 ? createHash("sha256").update(manifestSource).digest("hex") : undefined,
254
364
  };
255
365
  }
256
366
  function isManagedManifest(manifest) {
@@ -266,15 +376,24 @@ function validateManifest(manifest, presetId) {
266
376
  issues.push("unsupported managed manifest schema");
267
377
  if (!isRecord(manifest) || manifest.package !== packageMetadata.name)
268
378
  issues.push("managed manifest package mismatch");
379
+ if (!isRecord(manifest) || typeof manifest.version !== "string" || valid(manifest.version) === null) {
380
+ issues.push("managed manifest version is invalid");
381
+ }
382
+ if (!isRecord(manifest) || typeof manifest.dshVersion !== "string" || valid(manifest.dshVersion) === null) {
383
+ issues.push("managed manifest DSH version is invalid");
384
+ }
269
385
  if (!isRecord(manifest) || manifest.presetId !== presetId)
270
386
  issues.push("managed manifest preset id mismatch");
271
387
  if (!isRecord(manifest) || !isRecord(manifest.files)
272
- || !Object.values(manifest.files).every((value) => typeof value === "string")) {
388
+ || !Object.values(manifest.files).every((value) => typeof value === "string" && /^[a-f0-9]{64}$/u.test(value))) {
273
389
  issues.push("managed manifest file map is invalid");
274
390
  }
275
391
  return issues;
276
392
  }
277
393
  async function assertSource(sourceRoot) {
394
+ if (await pathState(sourceRoot) !== "directory") {
395
+ throw new Error(`agent package source must be a regular directory and not a symbolic link: ${sourceRoot}`);
396
+ }
278
397
  for (const path of requiredFiles) {
279
398
  const state = await pathState(resolve(sourceRoot, path));
280
399
  if (state !== "file")
@@ -282,6 +401,8 @@ async function assertSource(sourceRoot) {
282
401
  }
283
402
  }
284
403
  async function tightenTree(root) {
404
+ if (await pathState(root) !== "directory")
405
+ throw new Error(`managed preset root is not a regular directory: ${root}`);
285
406
  await chmod(root, 0o700);
286
407
  const entries = await readdir(root, { withFileTypes: true });
287
408
  for (const entry of entries) {