@open-agent-toolkit/cli 0.2.53 → 0.2.55

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 (81) hide show
  1. package/assets/agents/recon-worker.md +105 -0
  2. package/assets/bundle-metadata.json +1 -1
  3. package/assets/docs/cli-utilities/tool-packs.md +62 -8
  4. package/assets/docs/contributing/skills.md +26 -0
  5. package/assets/docs/workflows/skills/index.md +3 -0
  6. package/assets/docs/workflows/skills/recon.md +210 -0
  7. package/assets/public-package-versions.json +4 -4
  8. package/assets/skills/oat-dispatch-subagents/SKILL.md +1 -1
  9. package/assets/skills/recon/SKILL.md +298 -0
  10. package/assets/skills/recon/references/packet-contract.md +340 -0
  11. package/assets/skills/recon/references/profiles.md +58 -0
  12. package/assets/skills/recon/references/worker-contract.md +71 -0
  13. package/assets/skills/recon/scripts/create-review-brief.mjs +452 -0
  14. package/assets/skills/recon/scripts/lib/canonical-json.mjs +55 -0
  15. package/assets/skills/recon/scripts/lib/contracts.mjs +1969 -0
  16. package/assets/skills/recon/scripts/lib/safe-path.mjs +120 -0
  17. package/assets/skills/recon/scripts/lib/validated-run.mjs +80 -0
  18. package/assets/skills/recon/scripts/reconcile-ledger.mjs +360 -0
  19. package/assets/skills/recon/scripts/render-packet.mjs +379 -0
  20. package/assets/skills/recon/scripts/validate-artifact.mjs +96 -0
  21. package/assets/skills/recon/scripts/validate-packet.mjs +2192 -0
  22. package/dist/commands/doctor/index.js +5 -5
  23. package/dist/commands/init/index.d.ts.map +1 -1
  24. package/dist/commands/init/index.js +6 -7
  25. package/dist/commands/status/index.d.ts +2 -2
  26. package/dist/commands/status/index.d.ts.map +1 -1
  27. package/dist/commands/status/index.js +7 -4
  28. package/dist/commands/sync/index.d.ts.map +1 -1
  29. package/dist/commands/sync/index.js +24 -8
  30. package/dist/commands/sync/sync.types.d.ts +2 -2
  31. package/dist/commands/sync/sync.types.d.ts.map +1 -1
  32. package/dist/commands/tools/migrate/index.d.ts.map +1 -1
  33. package/dist/commands/tools/migrate/index.js +25 -1
  34. package/dist/commands/tools/migrate/migrate-pack.d.ts +5 -0
  35. package/dist/commands/tools/migrate/migrate-pack.d.ts.map +1 -1
  36. package/dist/commands/tools/migrate/migrate-pack.js +66 -7
  37. package/dist/commands/tools/remove/index.js +1 -1
  38. package/dist/commands/tools/remove/remove-tools.d.ts +5 -1
  39. package/dist/commands/tools/remove/remove-tools.d.ts.map +1 -1
  40. package/dist/commands/tools/remove/remove-tools.js +81 -1
  41. package/dist/commands/tools/shared/apply-pack-reconcile.d.ts +3 -0
  42. package/dist/commands/tools/shared/apply-pack-reconcile.d.ts.map +1 -1
  43. package/dist/commands/tools/shared/apply-pack-reconcile.js +40 -9
  44. package/dist/commands/tools/shared/format-pack-inventory.d.ts.map +1 -1
  45. package/dist/commands/tools/shared/format-pack-inventory.js +3 -0
  46. package/dist/commands/tools/shared/install-sync-context.d.ts +2 -1
  47. package/dist/commands/tools/shared/install-sync-context.d.ts.map +1 -1
  48. package/dist/commands/tools/shared/install-sync-context.js +14 -3
  49. package/dist/commands/tools/shared/pack-dependencies.d.ts +14 -0
  50. package/dist/commands/tools/shared/pack-dependencies.d.ts.map +1 -0
  51. package/dist/commands/tools/shared/pack-dependencies.js +54 -0
  52. package/dist/commands/tools/shared/pack-inventory.d.ts.map +1 -1
  53. package/dist/commands/tools/shared/pack-inventory.js +9 -9
  54. package/dist/commands/tools/shared/pack-lifecycle.d.ts +9 -1
  55. package/dist/commands/tools/shared/pack-lifecycle.d.ts.map +1 -1
  56. package/dist/commands/tools/shared/pack-lifecycle.js +102 -9
  57. package/dist/commands/tools/shared/pack-manifest.d.ts +2 -2
  58. package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
  59. package/dist/commands/tools/shared/pack-manifest.js +91 -2
  60. package/dist/commands/tools/shared/pack-reconcile.d.ts +15 -1
  61. package/dist/commands/tools/shared/pack-reconcile.d.ts.map +1 -1
  62. package/dist/commands/tools/shared/pack-reconcile.js +75 -13
  63. package/dist/commands/tools/shared/scoped-pack-intent.d.ts +8 -0
  64. package/dist/commands/tools/shared/scoped-pack-intent.d.ts.map +1 -1
  65. package/dist/commands/tools/shared/scoped-pack-intent.js +61 -15
  66. package/dist/commands/tools/shared/types.d.ts +7 -0
  67. package/dist/commands/tools/shared/types.d.ts.map +1 -1
  68. package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
  69. package/dist/commands/tools/update/update-tools.js +7 -1
  70. package/dist/config/oat-config.d.ts +5 -1
  71. package/dist/config/oat-config.d.ts.map +1 -1
  72. package/dist/config/oat-config.js +19 -0
  73. package/dist/engine/index.d.ts +1 -1
  74. package/dist/engine/index.d.ts.map +1 -1
  75. package/dist/engine/scanner.d.ts +9 -1
  76. package/dist/engine/scanner.d.ts.map +1 -1
  77. package/dist/engine/scanner.js +61 -4
  78. package/dist/shared/types.d.ts +1 -0
  79. package/dist/shared/types.d.ts.map +1 -1
  80. package/dist/shared/types.js +3 -0
  81. package/package.json +2 -2
@@ -1,3 +1,5 @@
1
+ import { type InventoryScopedPackInput, type ScopedPackInventory } from '../commands/tools/shared/pack-inventory.js';
2
+ import { type PackDefinition } from '../commands/tools/shared/pack-manifest.js';
1
3
  import { type CanonicalScanTarget, type Scope } from '../shared/types.js';
2
4
  type ConcreteScope = Exclude<Scope, 'all'>;
3
5
  export interface CanonicalEntry {
@@ -6,7 +8,13 @@ export interface CanonicalEntry {
6
8
  canonicalPath: string;
7
9
  isFile: boolean;
8
10
  }
9
- export declare function scanBundledManagedAgents(): Promise<CanonicalEntry[]>;
11
+ export interface ScanBundledManagedAgentsOptions {
12
+ scopeRoot?: string;
13
+ assetsRoot?: string;
14
+ manifest?: readonly PackDefinition[];
15
+ inventoryPack?: (input: InventoryScopedPackInput) => Promise<ScopedPackInventory>;
16
+ }
17
+ export declare function scanBundledManagedAgents(options?: ScanBundledManagedAgentsOptions): Promise<CanonicalEntry[]>;
10
18
  /**
11
19
  * User-scope Codex/Cursor materialization reads the bundled managed role files,
12
20
  * not the installed copies under `~/.agents/agents/`. Concatenating both lists
@@ -1 +1 @@
1
- {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/engine/scanner.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,KAAK,EACX,MAAM,eAAe,CAAC;AAEvB,KAAK,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;CACjB;AA0DD,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAsB1E;AAED;;;;GAIG;AACH,wBAAgB,oCAAoC,CAClD,gBAAgB,EAAE,cAAc,EAAE,EAClC,oBAAoB,EAAE,cAAc,EAAE,GACrC,cAAc,EAAE,CAqBlB;AAED,wBAAgB,mCAAmC,CACjD,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,cAAc,EAC9B,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAC/B,OAAO,CAqBT;AAED,qFAAqF;AACrF,eAAO,MAAM,6BAA6B,iCAA2B,CAAC;AAEtE,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,SAAS,mBAAmB,EAAE,GACvC,OAAO,CAAC,cAAc,EAAE,CAAC,CA6C3B"}
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../src/engine/scanner.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACzB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,sCAAsC,CAAC;AAG9C,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,KAAK,EACX,MAAM,eAAe,CAAC;AAEvB,KAAK,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,+BAA+B;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,wBAAwB,KAC5B,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACnC;AA0DD,wBAAsB,wBAAwB,CAC5C,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,cAAc,EAAE,CAAC,CAiG3B;AAED;;;;GAIG;AACH,wBAAgB,oCAAoC,CAClD,gBAAgB,EAAE,cAAc,EAAE,EAClC,oBAAoB,EAAE,cAAc,EAAE,GACrC,cAAc,EAAE,CAqBlB;AAED,wBAAgB,mCAAmC,CACjD,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,cAAc,EAC9B,qBAAqB,CAAC,EAAE,MAAM,EAAE,GAC/B,OAAO,CAqBT;AAED,qFAAqF;AACrF,eAAO,MAAM,6BAA6B,iCAA2B,CAAC;AAEtE,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,SAAS,mBAAmB,EAAE,GACvC,OAAO,CAAC,cAAc,EAAE,CAAC,CA6C3B"}
@@ -1,5 +1,7 @@
1
1
  import { readdir } from 'node:fs/promises';
2
- import { isAbsolute, join, relative, resolve, sep } from 'node:path';
2
+ import { basename, isAbsolute, join, relative, resolve, sep } from 'node:path';
3
+ import { inventoryScopedPack, } from '../commands/tools/shared/pack-inventory.js';
4
+ import { PACK_MANIFEST, } from '../commands/tools/shared/pack-manifest.js';
3
5
  import { CliError } from '../errors/index.js';
4
6
  import { resolveAssetsRoot } from '../fs/assets.js';
5
7
  import { SCOPE_CONTENT_TYPES, USER_SCOPE_MANAGED_AGENT_FILES, } from '../shared/types.js';
@@ -43,20 +45,75 @@ async function readEntries(dirPath) {
43
45
  throw error;
44
46
  }
45
47
  }
46
- export async function scanBundledManagedAgents() {
47
- const agentsDir = join(await resolveAssetsRoot(), 'agents');
48
+ export async function scanBundledManagedAgents(options = {}) {
49
+ const assetsRoot = options.assetsRoot ?? (await resolveAssetsRoot());
50
+ const agentsDir = join(assetsRoot, 'agents');
48
51
  const entries = await readEntries(agentsDir);
49
52
  const available = new Set(entries.filter((entry) => entry.isFile).map((entry) => entry.name));
50
53
  const missing = USER_SCOPE_MANAGED_AGENT_FILES.filter((name) => !available.has(name));
51
54
  if (missing.length > 0) {
52
55
  throw new CliError(`Bundled managed role definitions are unavailable: ${missing.join(', ')}. Reinstall or rebuild OAT before running user sync.`);
53
56
  }
54
- return USER_SCOPE_MANAGED_AGENT_FILES.map((name) => ({
57
+ const managed = USER_SCOPE_MANAGED_AGENT_FILES.map((name) => ({
55
58
  name,
56
59
  type: 'agent',
57
60
  canonicalPath: join(agentsDir, name),
58
61
  isFile: true,
59
62
  }));
63
+ if (!options.scopeRoot)
64
+ return managed;
65
+ const inventoryPack = options.inventoryPack ?? inventoryScopedPack;
66
+ const materializable = (options.manifest ?? PACK_MANIFEST).flatMap((pack) => {
67
+ const assets = pack.assets.filter((asset) => asset.kind === 'agent' &&
68
+ asset.userMaterializable === true &&
69
+ asset.scopes.includes('user') &&
70
+ asset.ownership.user === 'managed');
71
+ return assets.length === 0 ? [] : [{ pack, assets }];
72
+ });
73
+ const inventories = await Promise.all(materializable.map(async ({ pack, assets }) => ({
74
+ assets,
75
+ inventory: await inventoryPack({
76
+ pack: pack.name,
77
+ scope: 'user',
78
+ scopeRoot: options.scopeRoot,
79
+ assetsRoot,
80
+ }),
81
+ })));
82
+ const selected = new Map(managed.map((entry) => [entry.name, entry]));
83
+ for (const { assets, inventory } of inventories) {
84
+ if (!inventory.intent.enabled)
85
+ continue;
86
+ for (const definition of assets) {
87
+ const installed = inventory.assets.find(({ definition: candidate }) => candidate.id === definition.id);
88
+ if (!installed || installed.status === 'missing')
89
+ continue;
90
+ if (installed.status !== 'current') {
91
+ throw new CliError(`User-materializable agent ${definition.id} is ${installed.status}, not current. Run oat tools update --pack ${inventory.pack} --scope user before running user sync.`);
92
+ }
93
+ if (!definition.source) {
94
+ throw new CliError(`User-materializable agent ${definition.id} has no bundled source. Reinstall or rebuild OAT before running user sync.`);
95
+ }
96
+ const name = basename(definition.destination);
97
+ const sourceName = basename(definition.source);
98
+ if (name !== sourceName ||
99
+ definition.source !== `agents/${name}` ||
100
+ !available.has(sourceName)) {
101
+ throw new CliError(`Bundled user-materializable agent definition is unavailable or mismatched: ${definition.id} (${definition.source}). Reinstall or rebuild OAT before running user sync.`);
102
+ }
103
+ const existing = selected.get(name);
104
+ const canonicalPath = installed.path;
105
+ if (existing && existing.canonicalPath !== canonicalPath) {
106
+ throw new CliError(`User-scope managed agent collision for ${name}: ${existing.canonicalPath} and ${canonicalPath}.`);
107
+ }
108
+ selected.set(name, {
109
+ name,
110
+ type: 'agent',
111
+ canonicalPath,
112
+ isFile: true,
113
+ });
114
+ }
115
+ }
116
+ return [...selected.values()];
60
117
  }
61
118
  /**
62
119
  * User-scope Codex/Cursor materialization reads the bundled managed role files,
@@ -12,4 +12,5 @@ export interface CanonicalScanTarget {
12
12
  }
13
13
  export declare const SCOPE_CONTENT_TYPES: Record<Scope, ContentType[]>;
14
14
  export declare const USER_SCOPE_MANAGED_AGENT_FILES: readonly ['oat-phase-implementer.md', 'oat-reviewer.md'];
15
+ export declare function isBuiltInUserScopeManagedAgentFile(name: string): boolean;
15
16
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB,uCAAqC,CAAC;AACpE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,kBAAkB,wCAAsC,CAAC;AACtE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,WAAW,uCAAqC,CAAC;AAC9D,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAQD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,CAI5D,CAAC;AAEF,eAAO,MAAM,8BAA8B,YACzC,0BAA0B,EAC1B,iBAAiB,CACT,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB,uCAAqC,CAAC;AACpE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,kBAAkB,wCAAsC,CAAC;AACtE,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D,eAAO,MAAM,WAAW,uCAAqC,CAAC;AAC9D,MAAM,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAChD,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAQD,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,CAI5D,CAAC;AAEF,eAAO,MAAM,8BAA8B,YACzC,0BAA0B,EAC1B,iBAAiB,CACT,CAAC;AAEX,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExE"}
@@ -16,3 +16,6 @@ export const USER_SCOPE_MANAGED_AGENT_FILES = [
16
16
  'oat-phase-implementer.md',
17
17
  'oat-reviewer.md',
18
18
  ];
19
+ export function isBuiltInUserScopeManagedAgentFile(name) {
20
+ return USER_SCOPE_MANAGED_AGENT_FILES.includes(name);
21
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@open-agent-toolkit/cli",
3
- "version": "0.2.53",
3
+ "version": "0.2.55",
4
4
  "private": false,
5
5
  "description": "Open Agent Toolkit CLI",
6
6
  "homepage": "https://github.com/voxmedia/open-agent-toolkit/tree/main/packages/cli",
@@ -34,7 +34,7 @@
34
34
  "ora": "^9.0.0",
35
35
  "yaml": "2.8.2",
36
36
  "zod": "^3.25.76",
37
- "@open-agent-toolkit/control-plane": "0.2.53"
37
+ "@open-agent-toolkit/control-plane": "0.2.55"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^22.10.0",