@open-agent-toolkit/cli 0.2.75 → 0.2.77
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/assets/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/config-and-local-state.md +3 -3
- package/assets/docs/cli-utilities/configuration.md +3 -1
- package/assets/docs/cli-utilities/index.md +1 -0
- package/assets/docs/cli-utilities/tool-packs.md +1 -1
- package/assets/docs/reference/file-locations.md +1 -1
- package/assets/docs/reference/oat-directory-structure.md +1 -1
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/explainer-kit/SKILL.md +1 -1
- package/assets/skills/explainer-kit/scripts/bundle.mjs +26 -2
- package/assets/skills/explainer-kit/scripts/record.mjs +26 -3
- package/assets/skills/explainer-kit/scripts/verify.mjs +26 -3
- package/assets/skills/oat-doctor/SKILL.md +153 -193
- package/assets/skills/oat-explainer-kit/SKILL.md +1 -1
- package/assets/skills/oat-explainer-kit/scripts/check-terminal-outcome.mjs +25 -5
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
- package/assets/skills/oat-project-complete/SKILL.md +1 -1
- package/assets/skills/oat-project-complete/scripts/consume-persisted-recap-intent.mjs +26 -6
- package/assets/skills/oat-project-complete/scripts/execute-synced-archive-entry.mjs +26 -6
- package/assets/skills/oat-project-complete/scripts/finalize-synced-archive.mjs +7 -0
- package/assets/skills/oat-project-complete/scripts/parse-completion-retry-fields.mjs +26 -5
- package/assets/skills/oat-project-complete/scripts/parse-synced-archive-resume-fields.mjs +26 -5
- package/assets/skills/oat-project-complete/scripts/recover-completion-receipts.mjs +26 -6
- package/assets/skills/oat-project-complete/scripts/resolve-completion-retry.mjs +26 -6
- package/assets/skills/oat-project-complete/scripts/resolve-synced-archive-entry.mjs +26 -5
- package/assets/skills/oat-project-complete/scripts/validate-durable-archive-receipt.mjs +7 -0
- package/assets/skills/oat-project-complete/scripts/validate-nonarchive-lifecycle-receipt.mjs +126 -95
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-implement/scripts/capture-dirty-tree.mjs +3 -0
- package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-quick-start/SKILL.md +9 -6
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/recon/SKILL.md +1 -1
- package/assets/skills/recon/scripts/create-review-brief.mjs +25 -5
- package/assets/skills/recon/scripts/prepare-routing.mjs +26 -2
- package/assets/skills/recon/scripts/render-packet.mjs +25 -5
- package/assets/skills/recon/scripts/validate-artifact.mjs +25 -5
- package/assets/skills/recon/scripts/validate-packet.mjs +25 -5
- package/assets/templates/implementation.md +1 -1
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +18 -1
- package/dist/config/oat-config.d.ts +1 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +1 -1
- package/package.json +2 -2
|
@@ -124,7 +124,7 @@ Use `oat config` for repo runtime config inspection and supported key mutation.
|
|
|
124
124
|
- `oat config list` - show the resolved command-surface values with source information
|
|
125
125
|
- `oat config dump --json` - emit the full merged config payload with per-key source attribution, suitable for automation and debugging
|
|
126
126
|
- `oat config describe` - list supported config surfaces and keys across shared repo, repo-local, user, and sync/provider config
|
|
127
|
-
- `oat config describe <key>` - show file location, scope, default, mutability, and owning command for one key
|
|
127
|
+
- `oat config describe <key>` - show file location, scope, default, mutability, and owning command for one key; a deprecated key also prints a `Deprecated: prefer …` line, and `--json` carries it as a `deprecated` object with `supersededBy` (plus `legacyValues` when only a legacy value form is deprecated), which `oat-doctor` reads
|
|
128
128
|
|
|
129
129
|
Use `oat config dump --json` when you need the whole resolved config in one machine-readable response rather than a single key or a human-oriented list view.
|
|
130
130
|
|
|
@@ -281,6 +281,6 @@ For the full state model, repair semantics, and examples, see [Instruction Sync]
|
|
|
281
281
|
- `oat internal validate-oat-skills` - validate `oat-*` skill contracts and metadata
|
|
282
282
|
- `oat doctor` - run environment and setup diagnostics, including installed-vs-bundled skill version checks
|
|
283
283
|
|
|
284
|
-
`oat doctor` is the quickest way to confirm that your runtime, directory structure, and installed OAT assets are healthy before deeper debugging. At project scope it also scans bounded repository script and documentation surfaces for known-stale CLI grammar, such as `oat --scope all sync
|
|
284
|
+
`oat doctor` is the quickest way to confirm that your runtime, directory structure, and installed OAT assets are healthy before deeper debugging. At project scope it also scans bounded repository script and documentation surfaces for known-stale CLI grammar, such as `oat --scope all sync` <!-- oat-doctor: allow-stale-invocation -->, and reports file/line evidence plus the current `oat sync --scope all` form. Generated provider views, OAT lifecycle artifacts, archived content, dependencies, build output, and nested worktrees are excluded.
|
|
285
285
|
|
|
286
|
-
The `/oat-doctor` skill (installed via the core pack)
|
|
286
|
+
The `/oat-doctor` skill (installed via the core pack) goes further: it sweeps config, project management (PJM), agent instructions, docs, and installed tools read-only, prints one report grouped by area and severity, and then dives into any area you pick, teaching from the bundled documentation and the `oat config describe` entries and offering the exact fix command or the owning skill. It applies nothing except a single fix command you approve. Unattended (`OAT_NON_INTERACTIVE=1`), the report is the whole output; `--summary` keeps the installed-tools dashboard.
|
|
@@ -54,7 +54,9 @@ What each command is for:
|
|
|
54
54
|
- `oat config set <key> <value>` updates supported shared or repo-local keys.
|
|
55
55
|
- `oat config unset <key>` removes a supported key from one surface, using the same `--shared`/`--local`/`--user` flags and per-key restrictions as `set`. The resolved value then falls back to the next surface down, or to the built-in default. A key the surface does not hold exits 0 as already-unset (`--json` adds a `removed` boolean to tell the two apart). Unknown keys, lifecycle state, `tools.*` pack intent, aggregate read views, read-only remote-policy structure, and environment-shadowed keys with nothing stored are refused with exit 1 — see [CLI Reference](../reference/cli-reference.md#oat-config-surface-flags).
|
|
56
56
|
- `oat config describe` shows the supported config catalog across shared repo, repo-local, user, and sync/provider surfaces.
|
|
57
|
-
- `oat config describe <key>` shows file, scope, default, mutability, owning command, and description for one key.
|
|
57
|
+
- `oat config describe <key>` shows file, scope, default, mutability, owning command, and description for one key. A deprecated key also prints `Deprecated: prefer <successor>`, and `--json` carries the same fact as a `deprecated` object (`supersededBy`, plus `note` and `legacyValues` where they apply).
|
|
58
|
+
|
|
59
|
+
For a guided pass instead of individual commands, run the `/oat-doctor` skill (core pack). It sweeps every config surface read-only, flags stale `activeProject` / `lastPausedProject` pointers, keys set on the wrong surface, and deprecated values, then walks each key group you have not set: what it does, when you would want it, and which surface owns it. It offers the exact `oat config` command for each fix and runs one only after you approve it. See [Config and Local State](config-and-local-state.md#internal-helpers-and-diagnostics) for the other areas it covers.
|
|
58
60
|
|
|
59
61
|
### Source labels
|
|
60
62
|
|
|
@@ -31,6 +31,7 @@ Examples include:
|
|
|
31
31
|
- general configuration guidance
|
|
32
32
|
- workflow gate commands for per-skill final checks and cross-runtime review dispatch
|
|
33
33
|
- utility command groups for config, local state, diagnostics, and related inspection flows
|
|
34
|
+
- a guided health check, the `/oat-doctor` skill, that sweeps config, project management, agent instructions, docs, and installed tools, then explains and offers fixes for what it finds (described in [Config and Local State](config-and-local-state.md))
|
|
34
35
|
|
|
35
36
|
## Who It's For
|
|
36
37
|
|
|
@@ -850,7 +850,7 @@ packs and is retained while either pack still owns it in that scope.
|
|
|
850
850
|
|
|
851
851
|
The `core` pack contains foundational diagnostic and documentation skills:
|
|
852
852
|
|
|
853
|
-
- **oat-doctor** —
|
|
853
|
+
- **oat-doctor** — One read-only sweep over config, PJM, agent instructions, docs, and tools; a report grouped by area and severity; then a dive into any area on request that explains findings and unset settings from the bundled docs and offers the exact fix command or the owning skill (nothing is applied without approval). `--summary` keeps the installed-tools dashboard.
|
|
854
854
|
- **oat-docs** — Interactive Q&A skill backed by locally-bundled OAT documentation at `~/.oat/docs/`.
|
|
855
855
|
|
|
856
856
|
Key behavior:
|
|
@@ -62,7 +62,7 @@ Pack intent is stored per scope:
|
|
|
62
62
|
Config discovery via CLI:
|
|
63
63
|
|
|
64
64
|
- `oat config describe` lists the supported config surfaces and keys across `.oat/config.json`, `.oat/config.local.json`, `~/.oat/config.json`, `.oat/sync/config.json`, and `~/.oat/sync/config.json`.
|
|
65
|
-
- `oat config describe <key>` shows file location, scope, default, mutability, and the owning command for one key.
|
|
65
|
+
- `oat config describe <key>` shows file location, scope, default, mutability, and the owning command for one key, and for a deprecated key its successor.
|
|
66
66
|
- `oat config list` shows the currently resolved values for the repo-local/shared command surface.
|
|
67
67
|
|
|
68
68
|
Config ownership note:
|
|
@@ -104,7 +104,7 @@ Current config ownership:
|
|
|
104
104
|
CLI discovery surfaces:
|
|
105
105
|
|
|
106
106
|
- `oat config describe` lists the supported config surfaces and keys across shared repo, repo-local, user, and sync/provider config.
|
|
107
|
-
- `oat config describe <key>` prints scope, file, default, mutability, owning command, and description for one config key.
|
|
107
|
+
- `oat config describe <key>` prints scope, file, default, mutability, owning command, and description for one config key, plus a `Deprecated: prefer …` line when the key is deprecated.
|
|
108
108
|
- `oat config list` prints the resolved values for the repo-scoped/local command surface.
|
|
109
109
|
|
|
110
110
|
Legacy `.oat/active-project` / `.oat/projects-root` / `.oat/active-idea` files may still be present in some environments but are no longer the canonical source in migrated command paths.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { createHash } from 'node:crypto';
|
|
4
|
+
import { realpathSync } from 'node:fs';
|
|
4
5
|
import {
|
|
5
6
|
lstat,
|
|
6
7
|
mkdir,
|
|
@@ -20,8 +21,9 @@ import {
|
|
|
20
21
|
isAbsolute,
|
|
21
22
|
join,
|
|
22
23
|
relative,
|
|
24
|
+
resolve,
|
|
23
25
|
} from 'node:path';
|
|
24
|
-
import {
|
|
26
|
+
import { fileURLToPath } from 'node:url';
|
|
25
27
|
|
|
26
28
|
import {
|
|
27
29
|
harvestNumericTokens,
|
|
@@ -704,7 +706,29 @@ function bundleError(message) {
|
|
|
704
706
|
return error;
|
|
705
707
|
}
|
|
706
708
|
|
|
707
|
-
|
|
709
|
+
/**
|
|
710
|
+
* Direct invocation, compared as canonical paths on both sides. Comparing a raw
|
|
711
|
+
* `process.argv[1]` against `import.meta.url` makes this script a silent no-op
|
|
712
|
+
* that exits 0 whenever the skill is reached through a symlinked install root,
|
|
713
|
+
* and canonicalizing only one side has the same effect under
|
|
714
|
+
* `--preserve-symlinks-main`, which keeps the link in `import.meta.url`.
|
|
715
|
+
* A path that cannot be canonicalized is not a module Node loaded as the entry
|
|
716
|
+
* point, so a thrown `realpathSync` means "not invoked directly" and returns
|
|
717
|
+
* `false`; it never masks a direct run.
|
|
718
|
+
*/
|
|
719
|
+
function isDirectInvocation(invokedPath) {
|
|
720
|
+
if (!invokedPath) return false;
|
|
721
|
+
try {
|
|
722
|
+
return (
|
|
723
|
+
realpathSync(fileURLToPath(import.meta.url)) ===
|
|
724
|
+
realpathSync(resolve(invokedPath))
|
|
725
|
+
);
|
|
726
|
+
} catch {
|
|
727
|
+
return false;
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
if (isDirectInvocation(process.argv[1])) {
|
|
708
732
|
runBundle(process.argv.slice(2)).catch((error) => {
|
|
709
733
|
console.error(error.message);
|
|
710
734
|
process.exitCode = 1;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { createHash, randomUUID } from 'node:crypto';
|
|
4
|
+
import { realpathSync } from 'node:fs';
|
|
4
5
|
import { access, readFile, readdir, rename, writeFile } from 'node:fs/promises';
|
|
5
|
-
import { join } from 'node:path';
|
|
6
|
-
import {
|
|
6
|
+
import { join, resolve } from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
7
8
|
|
|
8
9
|
import { validateContract } from './lib/contracts.mjs';
|
|
9
10
|
import {
|
|
@@ -327,7 +328,29 @@ function recordError(code, message) {
|
|
|
327
328
|
return error;
|
|
328
329
|
}
|
|
329
330
|
|
|
330
|
-
|
|
331
|
+
/**
|
|
332
|
+
* Direct invocation, compared as canonical paths on both sides. Comparing a raw
|
|
333
|
+
* `process.argv[1]` against `import.meta.url` makes this script a silent no-op
|
|
334
|
+
* that exits 0 whenever the skill is reached through a symlinked install root,
|
|
335
|
+
* and canonicalizing only one side has the same effect under
|
|
336
|
+
* `--preserve-symlinks-main`, which keeps the link in `import.meta.url`.
|
|
337
|
+
* A path that cannot be canonicalized is not a module Node loaded as the entry
|
|
338
|
+
* point, so a thrown `realpathSync` means "not invoked directly" and returns
|
|
339
|
+
* `false`; it never masks a direct run.
|
|
340
|
+
*/
|
|
341
|
+
function isDirectInvocation(invokedPath) {
|
|
342
|
+
if (!invokedPath) return false;
|
|
343
|
+
try {
|
|
344
|
+
return (
|
|
345
|
+
realpathSync(fileURLToPath(import.meta.url)) ===
|
|
346
|
+
realpathSync(resolve(invokedPath))
|
|
347
|
+
);
|
|
348
|
+
} catch {
|
|
349
|
+
return false;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
if (isDirectInvocation(process.argv[1])) {
|
|
331
354
|
runRecord(process.argv.slice(2)).catch((error) => {
|
|
332
355
|
console.error(`${error.code}: ${error.message}`);
|
|
333
356
|
process.exitCode = 1;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { createHash } from 'node:crypto';
|
|
4
|
+
import { realpathSync } from 'node:fs';
|
|
4
5
|
import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';
|
|
5
|
-
import { join } from 'node:path';
|
|
6
|
-
import {
|
|
6
|
+
import { join, resolve } from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
7
8
|
|
|
8
9
|
import { writeFailure } from './bundle.mjs';
|
|
9
10
|
import {
|
|
@@ -640,7 +641,29 @@ function verifyError(code, message) {
|
|
|
640
641
|
return error;
|
|
641
642
|
}
|
|
642
643
|
|
|
643
|
-
|
|
644
|
+
/**
|
|
645
|
+
* Direct invocation, compared as canonical paths on both sides. Comparing a raw
|
|
646
|
+
* `process.argv[1]` against `import.meta.url` makes this script a silent no-op
|
|
647
|
+
* that exits 0 whenever the skill is reached through a symlinked install root,
|
|
648
|
+
* and canonicalizing only one side has the same effect under
|
|
649
|
+
* `--preserve-symlinks-main`, which keeps the link in `import.meta.url`.
|
|
650
|
+
* A path that cannot be canonicalized is not a module Node loaded as the entry
|
|
651
|
+
* point, so a thrown `realpathSync` means "not invoked directly" and returns
|
|
652
|
+
* `false`; it never masks a direct run.
|
|
653
|
+
*/
|
|
654
|
+
function isDirectInvocation(invokedPath) {
|
|
655
|
+
if (!invokedPath) return false;
|
|
656
|
+
try {
|
|
657
|
+
return (
|
|
658
|
+
realpathSync(fileURLToPath(import.meta.url)) ===
|
|
659
|
+
realpathSync(resolve(invokedPath))
|
|
660
|
+
);
|
|
661
|
+
} catch {
|
|
662
|
+
return false;
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
if (isDirectInvocation(process.argv[1])) {
|
|
644
667
|
runVerify(process.argv.slice(2)).catch((error) => {
|
|
645
668
|
console.error(`${error.code ?? 'verify-error'}: ${error.message}`);
|
|
646
669
|
process.exitCode = 1;
|