@open-agent-toolkit/cli 0.0.40 → 0.0.42
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/docs/contributing/hooks-and-safety.md +9 -2
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-project-complete/SKILL.md +30 -12
- package/assets/skills/oat-project-pr-final/SKILL.md +2 -1
- package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
- package/dist/commands/project/archive/archive-utils.js +7 -0
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +21 -4
- package/dist/engine/hook.d.ts +6 -3
- package/dist/engine/hook.d.ts.map +1 -1
- package/dist/engine/hook.js +31 -14
- package/dist/engine/index.d.ts +2 -2
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +1 -1
- package/package.json +2 -2
|
@@ -7,9 +7,16 @@ description: 'Pre-commit hooks and safety contracts for provider sync mutations.
|
|
|
7
7
|
|
|
8
8
|
## Optional pre-commit drift warning hook
|
|
9
9
|
|
|
10
|
-
`oat init` can install a pre-commit hook that
|
|
10
|
+
`oat init` can install a pre-commit hook that checks project provider sync state on every commit by invoking `oat status --scope project --hook`.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
The hook distinguishes two states so unmanaged files are not reported the same as true drift:
|
|
13
|
+
|
|
14
|
+
- **Warning (managed drift or missing):** a manifest-tracked provider entry has drifted or is missing. Emits `oat: managed provider views are out of sync - run 'oat sync --scope project'` to stderr.
|
|
15
|
+
- **Info (unmanaged strays only):** provider files exist inside a managed directory but are not in the manifest. Emits `oat: unmanaged provider files detected - run 'oat status --scope project' to review` to stderr. Not treated as drift.
|
|
16
|
+
|
|
17
|
+
The hook is non-blocking: it never fails the commit, even when managed drift is detected.
|
|
18
|
+
|
|
19
|
+
OAT installs the hook into Git's currently active hook directory. When a consumer repo keeps hooks in a repo-managed folder such as `.githooks/`, Git must be configured to use that path before install, or OAT must configure it during the hook prompt flow.
|
|
13
20
|
|
|
14
21
|
## Safety contracts
|
|
15
22
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-complete
|
|
3
|
-
version: 1.4.
|
|
3
|
+
version: 1.4.3
|
|
4
4
|
description: Use when all implementation work is finished and the project is ready to close. Marks the OAT project lifecycle as complete.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: true
|
|
@@ -310,23 +310,40 @@ Archive happens after PR description generation (so artifacts are readable at tr
|
|
|
310
310
|
|
|
311
311
|
The archive-side effects in this step are CLI-owned. Follow the canonical behavior from `packages/cli/src/commands/project/archive/archive-utils.ts` rather than inventing separate S3 or summary-export logic inside the skill.
|
|
312
312
|
|
|
313
|
+
**Anti-pattern (do NOT do this):** Running `git check-ignore` on the
|
|
314
|
+
`.oat/projects/archived` directory itself to decide durability. A common
|
|
315
|
+
gitignore shape for this repo is `.oat/projects/archived/**`, which leaves the
|
|
316
|
+
directory visible in the tree while ignoring every file placed inside. A
|
|
317
|
+
directory-level check reports "not ignored" and produces the inverse of the
|
|
318
|
+
intended decision — archiving in the worktree when the archive must actually
|
|
319
|
+
go to the primary repo. Always probe a representative path **inside** the
|
|
320
|
+
archive directory (the project subpath or a probe filename), matching the CLI
|
|
321
|
+
helper at `packages/cli/src/commands/project/archive/archive-utils.ts`.
|
|
322
|
+
|
|
313
323
|
```bash
|
|
314
324
|
ARCHIVED_ROOT=".oat/projects/archived"
|
|
325
|
+
# ARCHIVE_RELATIVE_PATH is the contents-level probe: a hypothetical file that
|
|
326
|
+
# would live inside the archive directory. This is the same probe shape the
|
|
327
|
+
# CLI helper uses — do not simplify this to the directory itself.
|
|
315
328
|
ARCHIVE_RELATIVE_PATH=".oat/projects/archived/${PROJECT_NAME}"
|
|
316
329
|
PRIMARY_REPO_ARCHIVE=""
|
|
317
|
-
|
|
330
|
+
ARCHIVE_CONTENTS_TRACKED="true"
|
|
318
331
|
USE_PRIMARY_REPO_ARCHIVE="false"
|
|
319
332
|
|
|
320
|
-
#
|
|
321
|
-
#
|
|
322
|
-
#
|
|
333
|
+
# Will a newly-archived file at ${ARCHIVE_RELATIVE_PATH} actually be tracked in
|
|
334
|
+
# this checkout? Probe a representative path INSIDE the directory, not the
|
|
335
|
+
# directory itself. A `.oat/projects/archived/**` gitignore pattern leaves the
|
|
336
|
+
# directory visible in the tree but ignores everything placed inside, so a
|
|
337
|
+
# directory-level check reports "tracked" and gives the inverse of the
|
|
338
|
+
# intended answer.
|
|
323
339
|
if git check-ignore --quiet --no-index "$ARCHIVE_RELATIVE_PATH" 2>/dev/null; then
|
|
324
|
-
|
|
340
|
+
ARCHIVE_CONTENTS_TRACKED="false"
|
|
325
341
|
fi
|
|
326
342
|
|
|
327
|
-
#
|
|
328
|
-
#
|
|
329
|
-
|
|
343
|
+
# Fall back to the primary checkout whenever archive contents are local-only
|
|
344
|
+
# in the current worktree, regardless of whether the archive directory itself
|
|
345
|
+
# happens to exist in the tree.
|
|
346
|
+
if [[ "$ARCHIVE_CONTENTS_TRACKED" == "false" ]] && git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
|
|
330
347
|
GIT_COMMON_DIR=$(git rev-parse --git-common-dir 2>/dev/null || true)
|
|
331
348
|
GIT_DIR=$(git rev-parse --git-dir 2>/dev/null || true)
|
|
332
349
|
if [[ -n "$GIT_COMMON_DIR" && -n "$GIT_DIR" && "$GIT_COMMON_DIR" != "$GIT_DIR" ]]; then
|
|
@@ -373,7 +390,7 @@ echo "Project archived to $ARCHIVE_PATH"
|
|
|
373
390
|
- Ask the user explicitly: "Primary repo archive path is unavailable, so this archive may be lost when the worktree is deleted. Continue with local-only archive anyway?"
|
|
374
391
|
- If the user declines, skip archiving and continue the completion flow without archive.
|
|
375
392
|
- Resolve the durable repo root from `git rev-parse --git-common-dir` and `git rev-parse --git-dir`, matching the CLI helper in `packages/cli/src/commands/project/archive/archive-utils.ts`. Do not rely on a `main` checkout or default-branch naming.
|
|
376
|
-
- Apply this guard only when `git check-ignore --quiet --no-index "$ARCHIVE_RELATIVE_PATH"` reports that the archive
|
|
393
|
+
- Apply this guard only when `git check-ignore --quiet --no-index "$ARCHIVE_RELATIVE_PATH"` reports that the archive **contents** are local-only in the current checkout. `$ARCHIVE_RELATIVE_PATH` must be a path **inside** the archive directory (the project subpath), never the directory itself — see the anti-pattern note above the bash block.
|
|
377
394
|
|
|
378
395
|
**Git handling after archive:**
|
|
379
396
|
|
|
@@ -387,7 +404,7 @@ This stages the deletions from the shared directory. The archived copy is preser
|
|
|
387
404
|
|
|
388
405
|
**Worktree archive target (required when available):**
|
|
389
406
|
|
|
390
|
-
If running from a git worktree, prefer the primary repo archive directory
|
|
407
|
+
If running from a git worktree, prefer the primary repo archive directory whenever a newly-archived file inside `.oat/projects/archived/` would be local-only in the current checkout.
|
|
391
408
|
|
|
392
409
|
Reference path:
|
|
393
410
|
|
|
@@ -399,7 +416,8 @@ PRIMARY_REPO_ARCHIVE="${PRIMARY_REPO_ROOT}/.oat/projects/archived"
|
|
|
399
416
|
|
|
400
417
|
Guidance:
|
|
401
418
|
|
|
402
|
-
- In a worktree,
|
|
419
|
+
- In a worktree, prefer `PRIMARY_REPO_ARCHIVE` whenever `git check-ignore --quiet --no-index "$ARCHIVE_RELATIVE_PATH"` reports the archive **contents** as ignored — regardless of whether the archive directory itself happens to exist in the tree. Only archive in the current checkout when a hypothetical file at `.oat/projects/archived/<project>/state.md` would actually be tracked here.
|
|
420
|
+
- Do not check `git check-ignore` on `.oat/projects/archived` (the directory itself). A `.oat/projects/archived/**` ignore pattern leaves the directory unignored while ignoring all contents, so a directory-level check reports "tracked" and an agent can mistakenly archive in the worktree.
|
|
403
421
|
- Do not treat the worktree-local archive as durable.
|
|
404
422
|
- If forced to use a local-only archive, warn and require explicit user confirmation.
|
|
405
423
|
- Always write the dated `archive.summaryExportPath` copy into the current checkout (`repoRoot`), even when the project archive itself is written to the primary checkout.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-project-pr-final
|
|
3
|
-
version: 1.3.
|
|
3
|
+
version: 1.3.3
|
|
4
4
|
description: Use when an active OAT project has completed all phases and is ready for final merge to main. Generates the final OAT lifecycle PR description from artifacts and review status, then creates the PR automatically.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: true
|
|
@@ -255,6 +255,7 @@ Local path exclusion:
|
|
|
255
255
|
|
|
256
256
|
- Read `.oat/config.json` and extract `localPaths` (glob patterns for gitignored directories).
|
|
257
257
|
- Do **not** include References links to any path that matches a `localPaths` pattern — those paths are gitignored and will not exist on the remote.
|
|
258
|
+
- Evaluate the match against the actual **file or subpath** you are about to link (e.g. `.oat/projects/<proj>/pr/project-pr-2026-04-01.md`), not against the parent directory. A pattern like `.oat/**/pr` is shorthand for "everything under this directory is local-only"; a directory-level `git check-ignore` on `.oat/projects/<proj>/pr` can report "not ignored" even when every file inside is local-only, so a directory-level check will produce a broken reference link.
|
|
258
259
|
- Common matches: `.oat/projects/**/reviews/archived`, `.oat/projects/**/pr`. Active `reviews/` paths remain eligible for References when they are tracked; only archived review paths should be treated as local-only by default.
|
|
259
260
|
|
|
260
261
|
Example link context:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive-utils.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/archive/archive-utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"archive-utils.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/archive/archive-utils.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,aAAa,EACb,cAAc,EACd,SAAS,EACT,SAAS,EACT,UAAU,EACX,MAAM,QAAQ,CAAC;AAIhB,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,KAChD,OAAO,CAAC,cAAc,CAAC,CAAC;AAE7B,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,YAAY,GAAG,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,iCAAiC;IACzC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,2BAA2B;IAC1C,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,iCAAiC;IAChD,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,UAAU,sCAAuC,SAAQ,iCAAiC;IACxF,qBAAqB,CAAC,EAAE,OAAO,qBAAqB,CAAC;IACrD,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,WAAW,CAAC,EAAE,YAAY,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,aAAa,CAAC;IACrC,UAAU,CAAC,EAAE,CACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QAAE,SAAS,EAAE,IAAI,CAAC;QAAC,KAAK,EAAE,IAAI,CAAA;KAAE,KACtC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,cAAc,CAAC,EAAE,OAAO,cAAc,CAAC;IACvC,SAAS,CAAC,EAAE,OAAO,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,UAAU,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,gCAAgC;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,eAAO,MAAM,kCAAkC,6BAA6B,CAAC;AAE7E;;;GAGG;AACH,eAAO,MAAM,wBAAwB,UAAwB,CAAC;AAE9D,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AA8BD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,MAAM,CAER;AAmBD,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,MAAM,CAER;AAED,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B,CA4BA;AAED,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,GAClB,MAAM,CAIR;AA4JD,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,iCAAiC,EAC1C,YAAY,GAAE,sCAA2C,GACxD,OAAO,CAAC,gCAAgC,CAAC,CAwG3C;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,4BAA4B,EACrC,YAAY,GAAE,iCAAsC,GACnD,OAAO,CAAC,2BAA2B,CAAC,CA0CtC"}
|
|
@@ -98,6 +98,13 @@ function isExitCode(error, code) {
|
|
|
98
98
|
'code' in error &&
|
|
99
99
|
Number(error.code) === code);
|
|
100
100
|
}
|
|
101
|
+
// archiveProjectPath must be the contents-level probe path
|
|
102
|
+
// (.oat/projects/archived/<projectName>), not the archive directory itself
|
|
103
|
+
// (.oat/projects/archived). A `.oat/projects/archived/**` gitignore pattern
|
|
104
|
+
// leaves the directory visible in the tree while ignoring every file placed
|
|
105
|
+
// inside — a directory-level check reports "not ignored" and produces the
|
|
106
|
+
// inverse of the intended durability decision. Keep the probe inside the
|
|
107
|
+
// directory; the `oat-project-complete` skill documents the same invariant.
|
|
101
108
|
async function isGitignoredArchivePath(repoRoot, archiveProjectPath, dependencies) {
|
|
102
109
|
const execFile = dependencies.gitExecFile ?? execFileAsync;
|
|
103
110
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/status/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAEnB,MAAM,iCAAiC,CAAC;AAKzC,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,WAAW,EAGjB,MAAM,cAAc,CAAC;AACtB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/status/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EACL,KAAK,cAAc,EAGpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAEnB,MAAM,iCAAiC,CAAC;AAKzC,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,WAAW,EAGjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,cAAc,EAIpB,MAAM,eAAe,CAAC;AAMvB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIhD,OAAO,EAEL,KAAK,kBAAkB,EAExB,MAAM,uCAAuC,CAAC;AAI/C,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,aAAa,EAGlB,KAAK,KAAK,EACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmBpC,UAAU,kBAAkB;IAC1B,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,gBAAgB,EAAE,CAChB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,cAAc,KACpB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1D,YAAY,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1E,aAAa,EAAE,CACb,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,aAAa,KACjB,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC/B,WAAW,EAAE,MAAM,eAAe,EAAE,CAAC;IACrC,iBAAiB,EAAE,CACjB,QAAQ,EAAE,eAAe,EAAE,EAC3B,SAAS,EAAE,MAAM,KACd,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAChC,eAAe,EAAE,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,KAAK,WAAW,EAAE,CAAC;IAC3E,WAAW,EAAE,CACX,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,EAClC,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,aAAa,KAC1B,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,YAAY,EAAE,CACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,cAAc,EAAE,EAClC,OAAO,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,aAAa,GAAG,mBAAmB,CAAC,KAC7D,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAC5B,qBAAqB,EAAE,CACrB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,KAC/B,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC/B,gCAAgC,EAAE,CAChC,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,KAC/B,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACjC,8BAA8B,EAAE,CAC9B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,kBAAkB,KACrB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,mBAAmB,EAAE,CAAC,CAAC,SAAS,MAAM,EACpC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,EAC/B,GAAG,EAAE,aAAa,KACf,OAAO,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACzB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,UAAU,EAAE,CACV,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,QAAQ,EAClB,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KACrC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvB,iBAAiB,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,MAAM,CAAC;CACvD;AAED,UAAU,oBAAoB;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,YAAY,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AA+eD,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,kBAAkB,CAAM,GAC1C,OAAO,CAoBT"}
|
|
@@ -5,7 +5,7 @@ import { detectCodexRoleStrays, regenerateCodexAfterAdoption, } from '../shared/
|
|
|
5
5
|
import { confirmAction, selectManyWithAbort, } from '../shared/shared.prompts.js';
|
|
6
6
|
import { readGlobalOptions, resolveConcreteScopes, } from '../shared/shared.utils.js';
|
|
7
7
|
import { detectDrift, detectStrays, } from '../../drift/index.js';
|
|
8
|
-
import { scanCanonical } from '../../engine/index.js';
|
|
8
|
+
import { HOOK_DRIFT_WARNING, HOOK_STRAY_INFO, scanCanonical, } from '../../engine/index.js';
|
|
9
9
|
import { normalizeToPosixPath, resolveProjectRoot, resolveScopeRoot, } from '../../fs/paths.js';
|
|
10
10
|
import { loadManifest, saveManifest } from '../../manifest/manager.js';
|
|
11
11
|
import { claudeAdapter } from '../../providers/claude/index.js';
|
|
@@ -242,7 +242,7 @@ async function collectScopeReports(scope, context, dependencies) {
|
|
|
242
242
|
strayCandidates,
|
|
243
243
|
};
|
|
244
244
|
}
|
|
245
|
-
async function runStatusCommand(context, dependencies) {
|
|
245
|
+
async function runStatusCommand(context, dependencies, options = {}) {
|
|
246
246
|
const reports = [];
|
|
247
247
|
const scopeCollections = [];
|
|
248
248
|
for (const scope of resolveConcreteScopes(context.scope)) {
|
|
@@ -252,6 +252,20 @@ async function runStatusCommand(context, dependencies) {
|
|
|
252
252
|
}
|
|
253
253
|
const summary = summarizeReports(reports);
|
|
254
254
|
const hasIssues = summary.total > 0 && summary.inSync !== summary.total;
|
|
255
|
+
if (options.hook) {
|
|
256
|
+
if (summary.drifted > 0 || summary.missing > 0) {
|
|
257
|
+
context.logger.warn(HOOK_DRIFT_WARNING);
|
|
258
|
+
process.exitCode = 1;
|
|
259
|
+
}
|
|
260
|
+
else if (summary.stray > 0) {
|
|
261
|
+
context.logger.info(HOOK_STRAY_INFO);
|
|
262
|
+
process.exitCode = 0;
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
process.exitCode = 0;
|
|
266
|
+
}
|
|
267
|
+
return;
|
|
268
|
+
}
|
|
255
269
|
if (context.json) {
|
|
256
270
|
const payload = {
|
|
257
271
|
scope: context.scope,
|
|
@@ -338,8 +352,11 @@ export function createStatusCommand(overrides = {}) {
|
|
|
338
352
|
};
|
|
339
353
|
return new Command('status')
|
|
340
354
|
.description('Report provider sync and drift status')
|
|
341
|
-
.
|
|
355
|
+
.option('--hook', 'Emit a minimal pre-commit message: warn on managed drift, info on strays')
|
|
356
|
+
.action(async (options, command) => {
|
|
342
357
|
const context = dependencies.buildCommandContext(readGlobalOptions(command));
|
|
343
|
-
await runStatusCommand(context, dependencies
|
|
358
|
+
await runStatusCommand(context, dependencies, {
|
|
359
|
+
hook: Boolean(options.hook),
|
|
360
|
+
});
|
|
344
361
|
});
|
|
345
362
|
}
|
package/dist/engine/hook.d.ts
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
export declare const HOOK_MARKER_START = "# >>> oat pre-commit hook >>>";
|
|
2
2
|
export declare const HOOK_MARKER_END = "# <<< oat pre-commit hook <<<";
|
|
3
|
-
export declare const HOOK_DRIFT_WARNING = "oat:
|
|
3
|
+
export declare const HOOK_DRIFT_WARNING = "oat: managed provider views are out of sync - run 'oat sync --scope project'";
|
|
4
|
+
export declare const HOOK_STRAY_INFO = "oat: unmanaged provider files detected - run 'oat status --scope project' to review";
|
|
4
5
|
export declare const REPO_GITHOOKS_PATH = ".githooks";
|
|
6
|
+
export type HookStatus = 'in_sync' | 'managed_drift' | 'stray_only';
|
|
5
7
|
export interface HookInstallInfo {
|
|
6
8
|
hookPath: string;
|
|
7
9
|
suggestedHooksPath: string | null;
|
|
8
10
|
suggestedHookPath: string | null;
|
|
9
11
|
}
|
|
10
12
|
interface RunHookCheckOptions {
|
|
11
|
-
runStatusCommand?: (cwd: string) => Promise<
|
|
13
|
+
runStatusCommand?: (cwd: string) => Promise<HookStatus>;
|
|
12
14
|
warn?: (message: string) => void;
|
|
15
|
+
info?: (message: string) => void;
|
|
13
16
|
}
|
|
14
17
|
export declare function getHookInstallInfo(projectRoot: string): Promise<HookInstallInfo>;
|
|
15
18
|
export declare function configureLocalHooksPath(projectRoot: string, hooksPath: string): Promise<void>;
|
|
@@ -17,7 +20,7 @@ export declare function isHookInstalled(projectRoot: string): Promise<boolean>;
|
|
|
17
20
|
export declare function installHook(projectRoot: string): Promise<string>;
|
|
18
21
|
export declare function uninstallHook(projectRoot: string): Promise<void>;
|
|
19
22
|
export declare function runHookCheck(cwd: string, options?: RunHookCheckOptions): Promise<{
|
|
20
|
-
|
|
23
|
+
status: HookStatus;
|
|
21
24
|
}>;
|
|
22
25
|
export {};
|
|
23
26
|
//# sourceMappingURL=hook.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/engine/hook.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,iBAAiB,kCAAkC,CAAC;AACjE,eAAO,MAAM,eAAe,kCAAkC,CAAC;AAC/D,eAAO,MAAM,kBAAkB,
|
|
1
|
+
{"version":3,"file":"hook.d.ts","sourceRoot":"","sources":["../../src/engine/hook.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,iBAAiB,kCAAkC,CAAC;AACjE,eAAO,MAAM,eAAe,kCAAkC,CAAC;AAC/D,eAAO,MAAM,kBAAkB,iFACiD,CAAC;AACjF,eAAO,MAAM,eAAe,wFAC2D,CAAC;AACxF,eAAO,MAAM,kBAAkB,cAAc,CAAC;AAE9C,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,eAAe,GAAG,YAAY,CAAC;AAEpE,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,UAAU,mBAAmB;IAC3B,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAsHD,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,eAAe,CAAC,CA4B1B;AAED,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAQf;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAgB3E;AAED,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgCtE;AAuBD,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCtE;AA8BD,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,CAAC,CA2BjC"}
|
package/dist/engine/hook.js
CHANGED
|
@@ -6,7 +6,8 @@ import { ensureDir } from '../fs/io.js';
|
|
|
6
6
|
const execFileAsync = promisify(execFile);
|
|
7
7
|
export const HOOK_MARKER_START = '# >>> oat pre-commit hook >>>';
|
|
8
8
|
export const HOOK_MARKER_END = '# <<< oat pre-commit hook <<<';
|
|
9
|
-
export const HOOK_DRIFT_WARNING = "oat:
|
|
9
|
+
export const HOOK_DRIFT_WARNING = "oat: managed provider views are out of sync - run 'oat sync --scope project'";
|
|
10
|
+
export const HOOK_STRAY_INFO = "oat: unmanaged provider files detected - run 'oat status --scope project' to review";
|
|
10
11
|
export const REPO_GITHOOKS_PATH = '.githooks';
|
|
11
12
|
function escapeRegExp(value) {
|
|
12
13
|
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
@@ -15,9 +16,7 @@ function createHookSnippet(options = {}) {
|
|
|
15
16
|
const lines = [
|
|
16
17
|
HOOK_MARKER_START,
|
|
17
18
|
'if command -v oat >/dev/null 2>&1; then',
|
|
18
|
-
'
|
|
19
|
-
` echo "${HOOK_DRIFT_WARNING}" >&2`,
|
|
20
|
-
' fi',
|
|
19
|
+
' oat status --scope project --hook || true',
|
|
21
20
|
'fi',
|
|
22
21
|
HOOK_MARKER_END,
|
|
23
22
|
];
|
|
@@ -225,11 +224,24 @@ export async function uninstallHook(projectRoot) {
|
|
|
225
224
|
}
|
|
226
225
|
async function runStatusCommandDefault(cwd) {
|
|
227
226
|
try {
|
|
228
|
-
await execFileAsync('oat', ['status', '--scope', 'project'], { cwd });
|
|
229
|
-
|
|
227
|
+
const { stdout } = await execFileAsync('oat', ['status', '--scope', 'project', '--json'], { cwd });
|
|
228
|
+
const payload = JSON.parse(stdout);
|
|
229
|
+
const summary = payload.summary ?? {};
|
|
230
|
+
const drifted = summary.drifted ?? 0;
|
|
231
|
+
const missing = summary.missing ?? 0;
|
|
232
|
+
const stray = summary.stray ?? 0;
|
|
233
|
+
if (drifted + missing > 0) {
|
|
234
|
+
return 'managed_drift';
|
|
235
|
+
}
|
|
236
|
+
if (stray > 0) {
|
|
237
|
+
return 'stray_only';
|
|
238
|
+
}
|
|
239
|
+
return 'in_sync';
|
|
230
240
|
}
|
|
231
241
|
catch {
|
|
232
|
-
|
|
242
|
+
// On any failure (oat missing, JSON parse error, unexpected exit), fall
|
|
243
|
+
// back to treating the state as managed drift so the operator notices.
|
|
244
|
+
return 'managed_drift';
|
|
233
245
|
}
|
|
234
246
|
}
|
|
235
247
|
export async function runHookCheck(cwd, options = {}) {
|
|
@@ -238,17 +250,22 @@ export async function runHookCheck(cwd, options = {}) {
|
|
|
238
250
|
((message) => {
|
|
239
251
|
process.stderr.write(`${message}\n`);
|
|
240
252
|
});
|
|
241
|
-
|
|
253
|
+
const info = options.info ??
|
|
254
|
+
((message) => {
|
|
255
|
+
process.stderr.write(`${message}\n`);
|
|
256
|
+
});
|
|
257
|
+
let status;
|
|
242
258
|
try {
|
|
243
|
-
|
|
244
|
-
// protects custom injected implementations from escaping exceptions.
|
|
245
|
-
inSync = await runStatusCommand(cwd);
|
|
259
|
+
status = await runStatusCommand(cwd);
|
|
246
260
|
}
|
|
247
261
|
catch {
|
|
248
|
-
|
|
262
|
+
status = 'managed_drift';
|
|
249
263
|
}
|
|
250
|
-
if (
|
|
264
|
+
if (status === 'managed_drift') {
|
|
251
265
|
warn(HOOK_DRIFT_WARNING);
|
|
252
266
|
}
|
|
253
|
-
|
|
267
|
+
else if (status === 'stray_only') {
|
|
268
|
+
info(HOOK_STRAY_INFO);
|
|
269
|
+
}
|
|
270
|
+
return { status };
|
|
254
271
|
}
|
package/dist/engine/index.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export { computeSyncPlan } from './compute-plan.js';
|
|
2
2
|
export { type EngineScope, type RemovalSyncPlanEntry, SYNC_OPERATION_TYPES, type SyncOperationType, type SyncPlan, type SyncPlanEntry, type SyncResult, } from './engine.types.js';
|
|
3
3
|
export { executeSyncPlan } from './execute-plan.js';
|
|
4
|
-
export { configureLocalHooksPath, getHookInstallInfo, HOOK_DRIFT_WARNING, HOOK_MARKER_END, HOOK_MARKER_START, installHook, isHookInstalled, REPO_GITHOOKS_PATH, runHookCheck, uninstallHook, } from './hook.js';
|
|
5
|
-
export type { HookInstallInfo } from './hook.js';
|
|
4
|
+
export { configureLocalHooksPath, getHookInstallInfo, HOOK_DRIFT_WARNING, HOOK_MARKER_END, HOOK_MARKER_START, HOOK_STRAY_INFO, installHook, isHookInstalled, REPO_GITHOOKS_PATH, runHookCheck, uninstallHook, } from './hook.js';
|
|
5
|
+
export type { HookInstallInfo, HookStatus } from './hook.js';
|
|
6
6
|
export { hasMarker, insertMarker, OAT_DIRECTORY_SENTINEL, OAT_MARKER_PREFIX, writeDirectorySentinel, } from './markers.js';
|
|
7
7
|
export type { CanonicalEntry } from './scanner.js';
|
|
8
8
|
export { scanCanonical } from './scanner.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,aAAa,GACd,MAAM,QAAQ,CAAC;AAChB,YAAY,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engine/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,UAAU,GAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,aAAa,GACd,MAAM,QAAQ,CAAC;AAChB,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC1D,OAAO,EACL,SAAS,EACT,YAAY,EACZ,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/engine/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { computeSyncPlan } from './compute-plan.js';
|
|
2
2
|
export { SYNC_OPERATION_TYPES, } from './engine.types.js';
|
|
3
3
|
export { executeSyncPlan } from './execute-plan.js';
|
|
4
|
-
export { configureLocalHooksPath, getHookInstallInfo, HOOK_DRIFT_WARNING, HOOK_MARKER_END, HOOK_MARKER_START, installHook, isHookInstalled, REPO_GITHOOKS_PATH, runHookCheck, uninstallHook, } from './hook.js';
|
|
4
|
+
export { configureLocalHooksPath, getHookInstallInfo, HOOK_DRIFT_WARNING, HOOK_MARKER_END, HOOK_MARKER_START, HOOK_STRAY_INFO, installHook, isHookInstalled, REPO_GITHOOKS_PATH, runHookCheck, uninstallHook, } from './hook.js';
|
|
5
5
|
export { hasMarker, insertMarker, OAT_DIRECTORY_SENTINEL, OAT_MARKER_PREFIX, writeDirectorySentinel, } from './markers.js';
|
|
6
6
|
export { scanCanonical } from './scanner.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@open-agent-toolkit/cli",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.42",
|
|
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",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"ora": "^9.0.0",
|
|
34
34
|
"yaml": "2.8.2",
|
|
35
35
|
"zod": "^3.25.76",
|
|
36
|
-
"@open-agent-toolkit/control-plane": "0.0.
|
|
36
|
+
"@open-agent-toolkit/control-plane": "0.0.42"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/node": "^22.10.0",
|