@open-agent-toolkit/cli 0.3.14 → 0.3.16

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 (110) hide show
  1. package/assets/NOTICES.md +48 -0
  2. package/assets/bundle-metadata.json +1 -1
  3. package/assets/docs/contributing/markdown-features.md +38 -0
  4. package/assets/docs/contributing/smoke-testing.md +20 -13
  5. package/assets/docs/docs-tooling/workflows.md +26 -19
  6. package/assets/docs/getting-started/concepts.md +35 -21
  7. package/assets/docs/provider-sync/commands.md +21 -0
  8. package/assets/docs/provider-sync/manifest-and-drift.md +24 -17
  9. package/assets/docs/reference/cli-reference.md +2 -1
  10. package/assets/docs/reference/configuration.md +10 -2
  11. package/assets/docs/reference/project-state-machine.md +27 -20
  12. package/assets/docs/skills/index.md +1 -0
  13. package/assets/docs/skills/recon.md +8 -5
  14. package/assets/docs/workflows/advanced/autonomy.md +10 -0
  15. package/assets/docs/workflows/advanced/evidence-layers.md +19 -12
  16. package/assets/docs/workflows/advanced/orchestration-model.md +48 -34
  17. package/assets/docs/workflows/advanced/workflow-gates.md +109 -10
  18. package/assets/docs/workflows/approvals-and-automation.md +3 -1
  19. package/assets/docs/workflows/ideas/lifecycle.md +32 -25
  20. package/assets/docs/workflows/projects/closeout/closeout-skills.md +62 -1
  21. package/assets/docs/workflows/projects/execution/implementation-execution.md +67 -33
  22. package/assets/docs/workflows/projects/execution/project-log.md +6 -0
  23. package/assets/docs/workflows/projects/lifecycle.md +119 -63
  24. package/assets/docs/workflows/projects/reviews/index.md +63 -1
  25. package/assets/docs/workflows/projects/reviews/review-flavors.md +30 -23
  26. package/assets/docs/workflows/waves/wave-workflows.md +11 -3
  27. package/assets/public-package-versions.json +4 -4
  28. package/assets/skills/oat-project-autonomous/SKILL.md +1 -1
  29. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +172 -165
  30. package/assets/skills/oat-project-complete-auto/SKILL.md +388 -0
  31. package/assets/skills/oat-project-document/SKILL.md +1 -1
  32. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +172 -165
  33. package/assets/skills/oat-project-implement/SKILL.md +6 -1
  34. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +28 -1
  35. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +172 -165
  36. package/assets/skills/oat-project-implement/references/docs/complexity-review-fallback.md +262 -0
  37. package/assets/skills/oat-project-implement/references/docs/gate-approval-record.md +80 -0
  38. package/assets/skills/oat-project-implement/references/phase-execution.md +18 -0
  39. package/assets/skills/oat-project-lite/SKILL.md +1 -1
  40. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +172 -165
  41. package/assets/skills/oat-project-next/SKILL.md +19 -2
  42. package/assets/skills/oat-project-next/references/docs/gate-approval-record.md +80 -0
  43. package/assets/skills/oat-project-pr-final/SKILL.md +4 -3
  44. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +172 -165
  45. package/assets/skills/oat-project-progress/SKILL.md +15 -1
  46. package/assets/skills/oat-project-progress/references/docs/gate-approval-record.md +80 -0
  47. package/assets/skills/oat-project-quick-start/SKILL.md +31 -3
  48. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +172 -165
  49. package/assets/skills/oat-project-quick-start/references/docs/complexity-review-fallback.md +262 -0
  50. package/assets/skills/oat-project-quick-start/references/docs/gate-approval-record.md +80 -0
  51. package/assets/skills/oat-project-review-receive/SKILL.md +21 -3
  52. package/assets/skills/oat-project-review-receive/references/docs/complexity-review-fallback.md +262 -0
  53. package/assets/skills/oat-wave-execute/SKILL.md +49 -28
  54. package/assets/skills/oat-wave-program/SKILL.md +15 -6
  55. package/assets/skills/oat-wrap-up/SKILL.md +9 -3
  56. package/assets/skills/oat-wrap-up/references/report-template.md +1 -1
  57. package/assets/skills/recon/SKILL.md +1 -1
  58. package/assets/skills/recon/references/packet-contract.md +18 -3
  59. package/assets/skills/recon/scripts/lib/contracts.mjs +16 -2
  60. package/assets/skills/recon/scripts/reconcile-ledger.mjs +20 -10
  61. package/assets/skills/recon/scripts/render-packet.mjs +31 -3
  62. package/assets/skills/recon/scripts/validate-packet.mjs +5 -5
  63. package/assets/templates/docs-app-fuma/app/[[...slug]]/page.tsx +14 -2
  64. package/assets/templates/docs-app-fuma/app/globals.css +1 -0
  65. package/assets/templates/state.md +7 -0
  66. package/dist/commands/config/index.d.ts.map +1 -1
  67. package/dist/commands/config/index.js +13 -0
  68. package/dist/commands/gate/index.d.ts +5 -0
  69. package/dist/commands/gate/index.d.ts.map +1 -1
  70. package/dist/commands/gate/index.js +270 -9
  71. package/dist/commands/shared/frontmatter.d.ts +1 -1
  72. package/dist/commands/shared/frontmatter.d.ts.map +1 -1
  73. package/dist/commands/shared/frontmatter.js +1 -0
  74. package/dist/commands/state/generate.d.ts +1 -1
  75. package/dist/commands/state/generate.d.ts.map +1 -1
  76. package/dist/commands/state/generate.js +87 -8
  77. package/dist/commands/sync/apply.d.ts.map +1 -1
  78. package/dist/commands/sync/apply.js +31 -5
  79. package/dist/commands/sync/dry-run.d.ts.map +1 -1
  80. package/dist/commands/sync/dry-run.js +28 -11
  81. package/dist/commands/sync/sync.utils.d.ts +13 -0
  82. package/dist/commands/sync/sync.utils.d.ts.map +1 -1
  83. package/dist/commands/sync/sync.utils.js +21 -1
  84. package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
  85. package/dist/commands/tools/shared/pack-manifest.js +1 -0
  86. package/dist/config/oat-config.d.ts +1 -0
  87. package/dist/config/oat-config.d.ts.map +1 -1
  88. package/dist/config/oat-config.js +3 -0
  89. package/dist/config/resolve.d.ts.map +1 -1
  90. package/dist/config/resolve.js +1 -0
  91. package/dist/drift/detector.js +6 -6
  92. package/dist/engine/compute-plan.d.ts.map +1 -1
  93. package/dist/engine/compute-plan.js +87 -2
  94. package/dist/engine/engine.types.d.ts +10 -1
  95. package/dist/engine/engine.types.d.ts.map +1 -1
  96. package/dist/engine/engine.types.js +4 -0
  97. package/dist/engine/execute-plan.d.ts.map +1 -1
  98. package/dist/engine/execute-plan.js +42 -5
  99. package/dist/engine/managed-copy-hash.d.ts +4 -3
  100. package/dist/engine/managed-copy-hash.d.ts.map +1 -1
  101. package/dist/engine/managed-copy-hash.js +4 -3
  102. package/dist/fs/assets.d.ts.map +1 -1
  103. package/dist/fs/assets.js +7 -1
  104. package/dist/manifest/hash.d.ts +8 -10
  105. package/dist/manifest/hash.d.ts.map +1 -1
  106. package/dist/release/public-package-contract.js +1 -1
  107. package/dist/ui/output.js +1 -1
  108. package/dist/validation/skills.d.ts.map +1 -1
  109. package/dist/validation/skills.js +13 -0
  110. package/package.json +2 -2
@@ -5,7 +5,7 @@ disable-model-invocation: true
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Glob, Grep, Bash(git:*), Bash(oat:*), Skill
7
7
  metadata:
8
- version: 1.1.4
8
+ version: 1.1.5
9
9
  ---
10
10
 
11
11
  # Project Next
@@ -135,6 +135,7 @@ Read `"$PROJECT_PATH/state.md"` frontmatter and extract:
135
135
  | `oat_hill_completed` | Which HiLL gates have been passed |
136
136
  | `oat_blockers` | Informational warnings (not routing gates) |
137
137
  | `oat_implement_exit_gate` | Whether the implementation exit gate is allowed and fresh |
138
+ | `oat_quick_start_gate` | Reported only in the Step 6 announcement; never a routing input |
138
139
  | `oat_lifecycle` | Terminal status (active, paused, complete). `complete` is the terminal signal Step 5.2 reads |
139
140
 
140
141
  **If state.md is missing or unreadable:** Report error and suggest running the relevant phase skill directly. STOP.
@@ -331,7 +332,10 @@ Apply the following checks in priority order. Stop at the first match:
331
332
  **5.0: Unresolved implementation exit gate**
332
333
 
333
334
  Before every other post-implementation route, inspect
334
- `oat_implement_exit_gate` in project state. If
335
+ `oat_implement_exit_gate` in project state. Its `status`, `disposition`,
336
+ `config_fingerprint`, `reviewed_head`, and `decided_at` fields are the shared
337
+ lifecycle gate record core in `references/docs/gate-approval-record.md`; the
338
+ freshness rules below are this record's own. If
335
339
  `oat_implement_exit_gate` is absent, `pending`, `blocked`, `stale`, malformed,
336
340
  or not fresh, route to `oat-project-implement`.
337
341
 
@@ -562,6 +566,19 @@ Routing: → {target-skill-name}
562
566
  Reason: {one-line explanation}
563
567
  ```
564
568
 
569
+ **Quick-start gate record:** When `oat_quick_start_gate` exists, read it as
570
+ `references/docs/gate-approval-record.md` describes, without recomputing its
571
+ fingerprint, and add one line after the `Current:` line:
572
+
573
+ ```
574
+ Quick-start gate: {status}/{disposition}, decided {decided_at}, fingerprint {config_fingerprint} (as recorded)
575
+ ```
576
+
577
+ Write `malformed` in place of the values when the fields do not form a valid
578
+ record. The record adds no route and no warning. The quick plan readiness
579
+ predicate stays the single routing rule for quick plans, and an absent record
580
+ (no record written) adds no line.
581
+
565
582
  **Blocker warning:** If `oat_blockers` is non-empty, add before the routing line:
566
583
 
567
584
  ```
@@ -0,0 +1,80 @@
1
+ # Lifecycle Gate Approval Record
2
+
3
+ A configured lifecycle gate ends in an outcome the operator or a later session
4
+ needs to see again: it passed, it warned, the operator explicitly continued
5
+ past a failure, the project disabled it, or it blocked. Chat output does not
6
+ survive the session, so the skill that runs the gate persists the outcome in
7
+ project `state.md`. This document defines the record's shared core once; each
8
+ carrier names where it lives and what it adds.
9
+
10
+ ## Core record
11
+
12
+ ```yaml
13
+ <carrier>:
14
+ status: allowed # allowed | blocked
15
+ disposition: passed # passed | warned | prompt_approved | project_disabled; null when blocked
16
+ config_fingerprint: '<stable hash of the resolved gate declaration>'
17
+ reviewed_head: '<full SHA of the commit the gate reviewed>'
18
+ decided_at: '2026-10-02T15:20:00Z'
19
+ ```
20
+
21
+ - `status`: `allowed` | `blocked`.
22
+ - `disposition`: `passed`, `warned`, `prompt_approved`, or `project_disabled`
23
+ when `status` is `allowed`; `null` when `status` is `blocked`.
24
+ - `config_fingerprint`: the writer's stable hash of the resolved gate
25
+ declaration it ran (command, description, `onFailure`, `maxAttempts`, and the
26
+ project override state), recorded as provenance. Implement recomputes its own
27
+ carrier's fingerprint under its Step 14 rules; quick-start readers do not.
28
+ - `reviewed_head`: the full 40-character SHA of the commit the gate reviewed,
29
+ recorded as provenance. `null` when no gate ran.
30
+ - `decided_at`: the ISO 8601 UTC time the outcome was decided. A record written
31
+ before `decided_at` existed is not malformed for that reason alone.
32
+
33
+ ## Write rules
34
+
35
+ | Gate outcome | Record |
36
+ | --------------------------------------------------------------- | ----------------------------------------------------------- |
37
+ | Passed its threshold | `allowed` / `passed` |
38
+ | Failed under `onFailure: warn` | `allowed` / `warned` |
39
+ | Failed under `onFailure: prompt`, operator explicitly continued | `allowed` / `prompt_approved` |
40
+ | Failed under `onFailure: prompt`, operator declined or deferred | `blocked` / `null` |
41
+ | `block` still failing after `maxAttempts` | `blocked` / `null` |
42
+ | Configured but disabled by project override (no launch) | `allowed` / `project_disabled` |
43
+ | Launch, transport, validation, or receive failure | `blocked` / `null` |
44
+ | Not configured | no record (quick-start); implement writes `allowed/no_gate` |
45
+
46
+ Only an explicit operator continuation writes `prompt_approved`. Declining,
47
+ deferring, giving no response, or running under `OAT_AUTONOMOUS=1` writes
48
+ `blocked`, never anything that reads as approval. A rerun of the same gate
49
+ replaces the record.
50
+
51
+ ## Carriers
52
+
53
+ - **`oat_implement_exit_gate`** (`oat-project-implement`,
54
+ `references/completion-and-closeout.md` Step 14) uses this core and keeps its
55
+ additional values and fields there: the `pending` and `stale` statuses, the
56
+ `no_gate` disposition, and the resolution, attempt, launch, receive, waiver,
57
+ and freshness fields. Its own effective-delta freshness rule decides whether a
58
+ record is current.
59
+ - **`oat_quick_start_gate`** (`oat-project-quick-start`, Gate Execution) carries
60
+ exactly the core.
61
+
62
+ ## Reading a quick-start record
63
+
64
+ Readers report a quick-start record as recorded and do not recompute
65
+ `config_fingerprint`: no CLI emits a canonical fingerprint for the quick-start
66
+ gate, so a recomputation could not be reproduced across sessions. They do not
67
+ route on the record either.
68
+
69
+ - Report `status`, `disposition`, `decided_at`, and `config_fingerprint` (as
70
+ provenance) exactly as stored.
71
+ - Report the record as malformed when `status` and `disposition` do not form
72
+ one of the combinations in the write rules, or when a present `decided_at` is
73
+ not a valid ISO 8601 UTC time.
74
+ - `reviewed_head` is provenance only and is not compared with `HEAD`, because
75
+ the quick-start completion step commits after the gate.
76
+ - An absent record means none was written: no gate was configured, the gate
77
+ has not reached an outcome, or the plan predates the record. Readers do not
78
+ infer which.
79
+
80
+ Readers never write, repair, or infer a record.
@@ -5,7 +5,7 @@ disable-model-invocation: false
5
5
  user-invocable: true
6
6
  allowed-tools: Read, Write, Bash(awk:*), Bash(gh:*), Bash(git:*), Bash(mktemp:*), Bash(oat:*), Bash(rm:*), Glob, Grep, AskUserQuestion
7
7
  metadata:
8
- version: 1.6.7
8
+ version: 1.6.8
9
9
  ---
10
10
 
11
11
  # Project PR (Final)
@@ -194,7 +194,8 @@ echo "$FINAL_ROW"
194
194
  ```
195
195
 
196
196
  `REVIEWS_SECTION` is strictly the `## Reviews` section through the next
197
- level-two heading. Use the latest appended event in that ledger whose Scope is
197
+ level-two heading other than `## Reviews` itself; `###` and level-one headings
198
+ do not end it. Use the latest appended event in that ledger whose Scope is
198
199
  `final` and Type is `code`. Earlier final-review events remain history and do
199
200
  not determine the current gate.
200
201
 
@@ -420,7 +421,7 @@ Only include links to artifacts that actually exist in the project. Omit any tha
420
421
 
421
422
  After writing the PR artifact, push and create the PR automatically.
422
423
 
423
- **Ledger-path guard (both PR paths).** Before either `gh pr create` path runs, validate every artifact path in the project's `## Reviews` ledger. Parse each row's Artifact cell rather than grepping the section as free text, and skip a `-` placeholder. The ledger is the table rows of `## Reviews`: the scan starts at the first exact `## Reviews` heading and ends at the next level-two heading — a `###` subsection inside that section is still scanned, exactly as Step 2 reads the ledger — and a blockquoted line or a fenced block inside the section is a note or an event example, never an event. Columns are split on `|`, so an escaped `\|` anywhere in a ledger header or ledger row stops rather than shifting the Artifact column onto a neighbouring cell: no ledger value needs a literal pipe, and reading one cell while naming another is exactly the silent skip this gate exists to prevent. Every other cell must normalize — `..` segments and symlinks resolved physically — to a regular file inside `$PROJECT_PATH`. The ledger is the table inside `## Reviews` whose header carries `Scope`, `Type`, and `Artifact` columns, matched after emphasis is stripped and in whatever order the header declares; a section that holds table rows but no such header, or an unclosed fenced block, stops rather than validating nothing. Processed review artifacts live in the gitignored `reviews/archived/`, so when that directory does not exist in this checkout at all — a fresh clone, a remote workspace, or a lane worktree — an absent path inside it is a local-only artifact: report it and continue. Once `reviews/archived/` exists, a file missing from it is a dangling row, usually an archive interrupted between the reference rewrite and the move, and it stops like any other absent path. That excuse covers a location that was never materialized, so it requires the path to be absent outright: a regular file, a dangling symlink, or any other non-directory at `reviews/archived` is an anomaly, not a fresh checkout, and it stops rather than excusing the row. Every other absent path fails, in every project scope — git ignores whole project directories for `local`, `synced`, and `archived` projects, so ignore state says nothing about whether a row resolves. A missing file in a tracked location, a directory, a path that escapes the project, a non-directory at `reviews/archived`, an unreadable ledger, a plan with no `## Reviews` section, an escaped pipe in a ledger header or row, a row the parser cannot read, or a ledger the guard could not check row for row stops this skill at gate `PRFINAL-05`, naming the offending row by scope, type, and artifact filename. Every stop fails closed. Both the synced flow below and the non-synced flow run after this block, so no PR is created from a ledger whose artifact paths do not resolve.
424
+ **Ledger-path guard (both PR paths).** Before either `gh pr create` path runs, validate every artifact path in the project's `## Reviews` ledger. Parse each row's Artifact cell rather than grepping the section as free text, and skip a `-` placeholder. The ledger is the table rows of `## Reviews`: the scan starts at the first exact `## Reviews` heading and ends at the next level-two heading other than `## Reviews` itself; `###` and deeper subsections and level-one headings inside the section do not end it and are still scanned, exactly as Step 2 reads the ledger. A blockquoted line or a fenced block inside the section is a note or an event example, never an event. Columns are split on `|`, so an escaped `\|` anywhere in a ledger header or ledger row stops rather than shifting the Artifact column onto a neighbouring cell: no ledger value needs a literal pipe, and reading one cell while naming another is exactly the silent skip this gate exists to prevent. The escaped-pipe stop stands until a real review ledger contains an escaped pipe; that ledger, not a hypothetical one, is the evidence that would justify teaching the parser to unescape a cell. Every other cell must normalize — `..` segments and symlinks resolved physically — to a regular file inside `$PROJECT_PATH`. The ledger is the table inside `## Reviews` whose header carries `Scope`, `Type`, and `Artifact` columns, matched after emphasis is stripped and in whatever order the header declares; a section that holds table rows but no such header, or an unclosed fenced block, stops rather than validating nothing. Processed review artifacts live in the gitignored `reviews/archived/`, so when that directory does not exist in this checkout at all — a fresh clone, a remote workspace, or a lane worktree — an absent path inside it is a local-only artifact: report it and continue. Once `reviews/archived/` exists, a file missing from it is a dangling row, usually an archive interrupted between the reference rewrite and the move, and it stops like any other absent path. That excuse covers a location that was never materialized, so it requires the path to be absent outright: a regular file, a dangling symlink, or any other non-directory at `reviews/archived` is an anomaly, not a fresh checkout, and it stops rather than excusing the row. Every other absent path fails, in every project scope — git ignores whole project directories for `local`, `synced`, and `archived` projects, so ignore state says nothing about whether a row resolves. A missing file in a tracked location, a directory, a path that escapes the project, a non-directory at `reviews/archived`, an unreadable ledger, a plan with no `## Reviews` section, an escaped pipe in a ledger header or row, a row the parser cannot read, or a ledger the guard could not check row for row stops this skill at gate `PRFINAL-05`, naming the offending row by scope, type, and artifact filename. Every stop fails closed. Both the synced flow below and the non-synced flow run after this block, so no PR is created from a ledger whose artifact paths do not resolve.
424
425
 
425
426
  ````bash
426
427
  LEDGER_PROJECT_ROOT=$(cd -P "$PROJECT_PATH" 2>/dev/null && pwd -P) || {