@open-agent-toolkit/cli 0.2.10 → 0.2.12

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 (43) hide show
  1. package/assets/docs/cli-utilities/configuration.md +28 -14
  2. package/assets/docs/reference/cli-reference.md +1 -1
  3. package/assets/docs/workflows/projects/artifacts.md +16 -4
  4. package/assets/docs/workflows/skills/explainer-kit.md +70 -27
  5. package/assets/public-package-versions.json +4 -4
  6. package/assets/skills/explainer-kit/SKILL.md +9 -3
  7. package/assets/skills/explainer-kit/references/contracts.md +22 -7
  8. package/assets/skills/explainer-kit/schemas/author-request.schema.json +85 -0
  9. package/assets/skills/explainer-kit/schemas/author-result.schema.json +65 -0
  10. package/assets/skills/explainer-kit/schemas/manifest.schema.json +7 -1
  11. package/assets/skills/explainer-kit/schemas/run-request.schema.json +8 -0
  12. package/assets/skills/explainer-kit/schemas/theme.schema.json +8 -0
  13. package/assets/skills/explainer-kit/scripts/lib/content-approval.mjs +26 -1
  14. package/assets/skills/explainer-kit/scripts/lib/contracts.mjs +61 -0
  15. package/assets/skills/explainer-kit/scripts/lib/durability.mjs +2 -14
  16. package/assets/skills/explainer-kit/scripts/lib/qa.mjs +56 -0
  17. package/assets/skills/explainer-kit/scripts/lib/theme.mjs +102 -4
  18. package/assets/skills/explainer-kit/scripts/run.mjs +144 -11
  19. package/assets/skills/explainer-kit/styles/business-corporate.json +77 -0
  20. package/assets/skills/explainer-kit/styles/clean-neutral.json +77 -0
  21. package/assets/skills/explainer-kit/styles/dark-edgy.json +77 -0
  22. package/assets/skills/explainer-kit/styles/navy-ocean.json +82 -0
  23. package/assets/skills/explainer-kit/templates/deck-shell.html +57 -2
  24. package/assets/skills/oat-explainer-kit/SKILL.md +15 -9
  25. package/assets/skills/oat-explainer-kit/references/config-contract.md +11 -6
  26. package/assets/skills/oat-explainer-kit/references/lifecycle-contract.md +13 -0
  27. package/assets/skills/oat-explainer-kit/scripts/finalize-tracked-run.mjs +10 -14
  28. package/assets/skills/oat-explainer-kit/scripts/resolve-config.mjs +53 -9
  29. package/assets/skills/oat-explainer-kit/scripts/run.mjs +68 -0
  30. package/assets/skills/oat-wave-execute/SKILL.md +126 -23
  31. package/assets/skills/oat-wave-program/SKILL.md +41 -7
  32. package/dist/commands/config/index.d.ts.map +1 -1
  33. package/dist/commands/config/index.js +34 -8
  34. package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
  35. package/dist/commands/project/archive/archive-utils.js +14 -5
  36. package/dist/config/oat-config.d.ts +2 -0
  37. package/dist/config/oat-config.d.ts.map +1 -1
  38. package/dist/config/oat-config.js +11 -0
  39. package/dist/config/resolve.d.ts.map +1 -1
  40. package/dist/config/resolve.js +3 -2
  41. package/dist/providers/codex/codec/config-merge.d.ts.map +1 -1
  42. package/dist/providers/codex/codec/config-merge.js +39 -1
  43. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-wave-execute
3
- version: 1.6.2
3
+ version: 1.7.1
4
4
  description: Use when executing a wave of external implementation plans as a wrapper OAT project — scaffolding, drift refresh, parallel worktree groups, briefs, gates, merge choreography, and closeout.
5
5
  argument-hint: '<wave-id> [plan-names...] (e.g. wave-2 http-listener-before-indexing ...)'
6
6
  disable-model-invocation: false
@@ -60,8 +60,12 @@ cross-lane synthesis, the end-of-run synthesis, and all user checkpoints.
60
60
  Bare `merge(...)` fails commitlint. Keep headers ≤ 100 chars.
61
61
  3. **Clean orchestrator tree before group merges** — a dirty unrelated file leaves
62
62
  `git merge --no-ff` uncommitted and drags the full hook chain into recovery.
63
- Gate reviewers now COMMIT their own artifacts (waves 2–3 evidence): keep the
64
- tree clean around gate runs and expect a gate-authored commit on return.
63
+ When a gate reviewer runs in the primary checkout, it MUST COMMIT its own
64
+ artifact.
65
+ From a linked worktree, `.git` points to metadata outside the review sandbox and
66
+ that commit can fail silently; the ORCHESTRATOR commits the gate artifact on
67
+ the reviewer's behalf. Keep the tree clean around either path (both consumers:
68
+ stoa waves 2–3; Orc W1–W4).
65
69
  4. **Pre-declare CUMULATIVE churn in every brief:** declarations cover everything
66
70
  landed since each source plan's AUTHORED COMMIT (drift checks compare against
67
71
  that commit, not the group base), naming files + rough regions. Zero false
@@ -75,6 +79,12 @@ cross-lane synthesis, the end-of-run synthesis, and all user checkpoints.
75
79
  waves (~6+ lanes), prefer per-phase gates over one monolithic final gate; if a
76
80
  final gate must cover the whole wave, scope its prompt to the integration
77
81
  diff plus the review-chain artifacts, not a re-review of every lane.
82
+ **Gate dispatch posture (standing rule alongside rules 6 and 8):** dispatch
83
+ gates in the BACKGROUND by default with a completion watcher because
84
+ orchestrator-host foreground ceilings (for example, 600 seconds) are shorter than
85
+ legitimate wave-scoped reviews. Use foreground only for demonstrably short scopes.
86
+ Rule 8 remains the recovery path; it worked on the one timeout in Orc W2 and was
87
+ not needed again in W2–W4.
78
88
  7. **Guard every formatter-ignored-file × staged-glob interaction:** a
79
89
  single-glob staged-file task can fail when every matched file is ignored by
80
90
  the repo's formatter. Audit every glob task and pair canonical-file
@@ -93,10 +103,26 @@ cross-lane synthesis, the end-of-run synthesis, and all user checkpoints.
93
103
  oxfmt re-padding makes it silently no-op. Use anchored regex + a substitution
94
104
  count assertion + a post-state grep, every time. This discipline caught its
95
105
  own subsequent no-ops twice in wave 2; treat an assert failure as normal
96
- operation, not an incident.
106
+ operation, not an incident. Orc reproduced the failure at wave-close: regex
107
+ replacement missed oxfmt padding, and an asserted line-based transform was
108
+ required.
97
109
  10. **Integration gates after every fan-in:** they are the only detector for
98
110
  cumulative-timing defect classes. Never skip them because every lane passed
99
111
  independently; the wave-5 embed-teardown defect was caught only after fan-in.
112
+ 11. **Fix rounds are APPEND-ONLY:** never amend a reviewed SHA; amendment
113
+ invalidates stored review verdicts that cite that commit. Every fix-round brief
114
+ MUST state that fixes land in an append-only commit. A worker that refuses an
115
+ instruction to amend a reviewed SHA is honoring its role contract (Orc p10
116
+ precedent).
117
+ 12. **Piped DoD/gate verification must preserve the raw failure:** run every piped
118
+ verification chain under `set -o pipefail`, or capture the raw command's exit
119
+ code before filtering. In Orc W4, `pnpm test | grep` returned the filter's zero
120
+ while the test run contained one failure.
121
+ 13. **Review artifacts are single-writer until committed:** an uncommitted review
122
+ artifact is exclusively owned by whichever agent is live on it. Orchestrator
123
+ dispositions land as immediate commits or wait until every agent touching the
124
+ artifact terminates. Do not use lock or timestamp-suffix conventions; they
125
+ fragment the review chain that final gates audit (Orc W4 final-gate evidence).
100
126
 
101
127
  Plus inherited invariants: commit-verification via `git log` before retrying after
102
128
  any ambiguous hook outcome; every agent runs the repo's formatter on markdown it
@@ -155,7 +181,12 @@ reconciliation that waives a source-plan requirement is a plan-gate Important
155
181
 
156
182
  ### Step 3: Scaffold the wrapper project
157
183
 
158
- 1. `oat project new wave-N-execution --mode quick --no-commit`.
184
+ 1. Probe the installed scaffold interface first with `oat project new --help`.
185
+ If `--no-commit` is present, run
186
+ `oat project new wave-N-execution --mode quick --no-commit`. If the flag is
187
+ absent because of version skew, run the command without it, expect the scaffold
188
+ to auto-commit, record that generated commit, and land the wrapper artifacts in
189
+ a follow-up commit (Orc W1 scaffold evidence).
159
190
  2. **Verify scaffold substitution AND advance the lifecycle** in `state.md`.
160
191
  On oat ≥0.1.65, verify that the basic scaffold placeholders
161
192
  (`{ OAT_HILL_CHECKPOINTS }`, `{ OAT_PHASE }`, `{ OAT_WORKFLOW_MODE }`) were
@@ -196,8 +227,12 @@ Run the cross-runtime artifact gate with a **bounded** prompt (rule 6): review t
196
227
  wrapper artifacts for plan invariants, contract consistency, frontmatter validity,
197
228
  and whether any task restates/narrows its source plan — the external plans are
198
229
  immutable inputs, NOT review targets. Disposition findings in-artifact
199
- (gate-invoked artifact review), commit, and proceed at `fixes_completed` per
200
- wave-0/1 precedent.
230
+ (gate-invoked artifact review) and commit. A plan gate MAY PROCEED at
231
+ `fixes_completed` per the wave-0/1 precedent, but that is a proceed point, not a
232
+ terminal state. Every gate row MUST flip to `passed` once all fix dispositions
233
+ carry the stored verification records required by the fix-disposition contract below;
234
+ `passed` is the only
235
+ terminal state for gate rows (Orc operator-audit S8).
201
236
 
202
237
  ### Step 5: Execute via `oat-project-implement`
203
238
 
@@ -264,10 +299,13 @@ The lifecycle skill owns execution. This skill contributes the templates it uses
264
299
  example: `pnpm format:fix`).
265
300
  - **Merge choreography:** after all group verdicts — serialized `git merge
266
301
  --no-ff` in plan order, rebasing each phase branch on the updated tip first
267
- (rules 2–3). Immediately before EVERY `git merge`, run `pwd` and
268
- `git branch --show-current` and assert that they identify the intended repo
269
- root and integration branch; stop on either mismatch. This closes the
270
- cwd-persistence wrong-branch failure observed in wave 5. Integration DoD gates
302
+ (rules 2–3). Compound the hard pre-merge guard and merge into ONE shell
303
+ invocation immediately before EVERY merge:
304
+ `cd /abs/repo/root && [ "$(git branch --show-current)" = "wave-N-execution" ] || exit 1 && git merge --no-ff …`.
305
+ The explicit `cd` repairs the healable cwd dimension; branch drift is
306
+ non-healable and hard-aborts. Advisory `pwd`/branch prints in separate
307
+ invocations proved worthless in the Orc W2 incident; this guard prevented two
308
+ repeats there, including p10. Integration DoD gates
271
309
  after fan-in run TO COMPLETION BEFORE any group bookkeeping edits start
272
310
  (DR-260714-integration-gates-run-before);
273
311
  then the group bookkeeping commit. Before dispatch, inspect every worktree's
@@ -299,6 +337,10 @@ archival and before the project-archive seal (`oat-project-complete`) — never
299
337
  archive anything first.
300
338
 
301
339
  1. **Final verification** — integration DoD gates green on the integration branch.
340
+ If the repo has no CI, record a one-line explicit waiver in the wave plan:
341
+ `merge gate = local DoD only`. The CI-introducing wave's first green run
342
+ certifies the cumulative merged tree and MUST be recorded as closure of that
343
+ waiver; do not re-run earlier gates retroactively (Orc W1–W2 evidence).
302
344
  2. **End-of-run synthesis in `orchestration-log.md`, then roll it up into
303
345
  `summary.md`** (this is the "before any archive step" gate): convention
304
346
  verdicts with evidence, adjustments-as-rules for later waves, graduated-entries
@@ -306,28 +348,88 @@ archive anything first.
306
348
  3. **Serialized backlog archival** — `oat backlog archive` with real summaries,
307
349
  one commit.
308
350
  4. **Root final review.**
309
- 5. **Cross-runtime final gate** — judgment-sweep dispositions; watch for the known
310
- gate row-stomp on the final Reviews row (restore `passed` if regressed).
351
+ 5. **Cross-runtime final gate** — judgment-sweep dispositions; after every fix
352
+ disposition has its required stored verification record, flip the row to
353
+ `passed`. A final
354
+ gate MUST NOT remain at `fixes_completed`: `passed` is the only terminal
355
+ state for gate rows (Orc operator-audit S8; confirmed convergently by stoa
356
+ W6's final-row handling). The historical row-stomp restore-watch is RETIRED:
357
+ the upstream stomp class was fixed in oat 0.1.65 and stoa's W6 supplied the
358
+ final clean observation (three gate rounds, zero stomps, watch never fired,
359
+ 2026-07-20).
311
360
  6. **Pre-approval sequence** per `workflow.postImplementSequence`, then a single
312
361
  HiLL. File follow-up-ledger backlog items at closeout (on main post-merge, or
313
362
  pre-gate if the operator prefers them in the PR).
314
- 7. **`oat-project-complete` BEFORE merge** (standing order: review → complete →
315
- merge; an open PR is expected, not a blocker — the archive-aware PR body sync
316
- handles it).
363
+ 7. **The full `oat-project-complete` PROCESS, with an explicit autonomous
364
+ deferral branch.** Interactive runs retain the standing per-wave order
365
+ review → complete → merge (an open PR is expected, not a blocker — the
366
+ archive-aware PR body sync handles it). The requirement remains the whole
367
+ completion process, named explicitly: `oat project complete-state` →
368
+ `oat project archive` (the CLI owns the local archive move, the summary
369
+ export, and the S3 sync when `s3SyncOnComplete` is configured) →
370
+ active-project pointer clear → the completion bookkeeping commit. Running
371
+ `oat project complete-state` ALONE does NOT satisfy this step: in the Orc
372
+ first run all four wrapper projects were left lifecycle-complete but
373
+ unarchived until an operator audit asked (S10).
374
+
375
+ Under autonomous execution, each wave MUST still run
376
+ `oat project complete-state` and its then-current project bookkeeping. The
377
+ archive tail — `oat project archive` (including configured S3 sync) →
378
+ active-project pointer clear → completion bookkeeping commit — MAY be
379
+ deferred to the program boundary so the wave can merge and execution can
380
+ continue. Record every such choice in the wave ledger exactly as
381
+ `completion tail: deferred to program close`; deferral is an outstanding
382
+ disposition, never satisfaction of the full-tail requirement. Interactive
383
+ per-wave full-tail completion remains valid.
384
+
385
+ The interactive completion skill is model-invisible
386
+ (`disable-model-invocation: true`), so an autonomous orchestrator executes
387
+ its `SKILL.md` as a document, resolving its gates from config
388
+ (`workflow.archiveOnComplete`, `workflow.createPrOnComplete`), until an
389
+ `oat-project-complete-auto` companion ships
390
+ (BL-260720-add-oat-project-complete-auto). If the archive tail is deferred,
391
+ that execution occurs after the one human-gated program-end checkpoint in
392
+ `oat-wave-program`, across every deferred wave wrapper.
393
+
317
394
  8. **After the operator merges:** reconcile (squash-merge means content-diff the
318
395
  branch vs main; cherry-pick stragglers), reset the working branch, clean stale
319
396
  phase branches, and run `oat-wave-program` `wave-close <wave-id>` so the
320
397
  program ledger records the merge (PR, SHA, completion-record link) and flips
321
- the wave's plan rows to `done`. Optionally generate the program recap using
322
- the mechanical explainer caller below.
398
+ the wave's plan rows to `done`. Per-wave recaps are default-OFF: run one only
399
+ on explicit operator request; otherwise record
400
+ `recap: deferred to program close` in the wave ledger. When this wave
401
+ completes the final pending wave, offer or run the program recap using the
402
+ mechanical explainer caller below. The program recap is generated from the
403
+ reconciled program artifact and ALL wave records.
323
404
 
324
- #### Optional program-recap explainer caller
405
+ #### Program-close recap explainer caller
325
406
 
326
- The orchestrator owns fact-base synthesis. It synthesizes an
407
+ The orchestrator owns fact-base synthesis. At program close it synthesizes an
327
408
  `explainer-kit.fact-base/v1` document from the reconciled execution-program
328
- artifact, wave summaries, and completion records. Its required keys are exactly:
409
+ artifact, ALL wave summaries, and ALL completion records. Its required keys are
410
+ exactly:
329
411
  `schemaVersion, generatedAt, mode, freshnessPolicy, sources, claims, unresolvedClaims, overrides`.
330
412
 
413
+ The caller also owns CONTENT AUTHORING, exactly as it owns critic execution and
414
+ fact-base synthesis: the kit's pipeline validates structure and fact
415
+ consistency, but nothing in it owns prose quality. An unattended recap run
416
+ without a caller-supplied authoring path emits raw federated artifact text as
417
+ deck prose (stoa W6 live evidence, run-19af6e55: implementation.md pasted
418
+ verbatim, frontmatter included, tables flattened to run-on prose — every
419
+ automated gate passed it). The explainer-kit now enforces this seam: every
420
+ unattended run requires exactly one provider-neutral author seam — in-process
421
+ callers supply an `author(request)` callback; JSON/CLI callers supply
422
+ `authorModulePath` naming a module with an `author` function export. The core
423
+ invokes it once per recipe artifact with an `explainer-kit.author-request/v1`
424
+ document and expects an `explainer-kit.author-result/v1` reply; runs fail if
425
+ the author is absent, returns an invalid result, or copies excessive verbatim
426
+ source text. Recap callers MUST satisfy that seam by authoring content from
427
+ the synthesized fact base plus the recipe outline (LLM-authored from
428
+ summary/synthesis material, as the operator-approved W6 rebuild demonstrates)
429
+ or NOT run the unattended build, recording the skip disposition per the
430
+ optional-step rule. Callbacks and module paths never enter the persisted run
431
+ request.
432
+
331
433
  The mechanical caller constructs an `explainer-kit.run-request/v1` document whose
332
434
  required keys are exactly:
333
435
  `schemaVersion, recipe, slug, outputRoot, factBase, mode`. Set `recipe` to
@@ -340,8 +442,9 @@ synthesized fact-base file through `factBase` with the required keys
340
442
  After the run, read the `explainer-kit.manifest/v1` document. Its required keys
341
443
  are exactly:
342
444
  `schemaVersion, runId, slug, recipe, createdAt, source, theme, artifacts, immutableHashes, outcome, buildRecord, warnings`.
343
- Record the manifest's `runId` and `outcome` in the wave ledger row. Publishing is
344
- human-gated; this caller never invokes publish.
445
+ Record the default program recap's manifest `runId` and `outcome` in the
446
+ program ledger; use a wave ledger row only for an explicitly requested per-wave
447
+ recap. Publishing is human-gated; this caller never invokes publish.
345
448
 
346
449
  ## Success Criteria
347
450
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: oat-wave-program
3
- version: 1.2.1
3
+ version: 1.3.1
4
4
  description: Use when decomposing a corpus of external implementation plans into an ordered wave program — coverage inventory, dependency mapping, wave composition, and the durable execution-program artifact that oat-wave-execute consumes and updates.
5
5
  argument-hint: '[new|refresh|wave-close <wave-id>] (default: refresh against the current artifact)'
6
6
  disable-model-invocation: false
@@ -104,17 +104,51 @@ target (same disclaimer as the plan indexes).
104
104
  2. Update the status ledger row: PR, merge SHA, completion-record link.
105
105
  3. Note next-wave unblocks ("W3 merged → W4 token-cost unblocked").
106
106
  4. Commit with the wave's closeout bookkeeping.
107
- 5. Optionally run the mechanical program-recap explainer caller described below,
108
- then add its manifest `runId` and `outcome` to the wave ledger row.
107
+ 5. Default recap scope is the PROGRAM, not the individual wave. Until the wave
108
+ that completes the final pending wave, run a per-wave recap only on explicit
109
+ operator request; otherwise record `recap: deferred to program close` in that
110
+ wave's ledger row. At program close, offer or run the program-recap caller
111
+ below from the reconciled execution-program artifact and ALL wave records,
112
+ then record its manifest `runId` and `outcome` in the program ledger. If the
113
+ program recap is not run, record `recap: not run — {reason}` there. Every
114
+ optional step gets an explicit disposition; silence is indistinguishable
115
+ from oversight (Orc program-recap evidence).
116
+ 6. When the final wave's ledger row flips to `done` and all wave merges are
117
+ recorded, stop at exactly one HUMAN-GATED program completion checkpoint,
118
+ including in autonomous runs:
119
+ "All waves are merged and the program is complete. Run the completion tail
120
+ (oat-project-complete: archive + S3 + pointer clear) across all N wave wrapper
121
+ projects now?" On yes, run the full deferred tail for each wrapper via
122
+ `oat-project-complete-auto` when it ships, or execute the interactive skill's
123
+ `SKILL.md` as a document until then, and flip every
124
+ `completion tail: deferred to program close` ledger disposition to `done`. On
125
+ no or defer, record the standing deferral and its owner in the program ledger.
126
+ This is the program completion gate and mirrors the recap publish gate; never
127
+ answer it autonomously or repeat it once per wave.
109
128
 
110
129
  ### Program-close explainer caller
111
130
 
112
- At wave-close or program-close, the orchestrator owns fact-base synthesis. It
113
- synthesizes an `explainer-kit.fact-base/v1` document from the reconciled
114
- execution-program artifact, wave summaries, and completion records. Its required
115
- keys are exactly:
131
+ At program close by default, or for a per-wave recap explicitly requested by the
132
+ operator, the orchestrator owns fact-base synthesis. For the default program
133
+ recap it synthesizes an `explainer-kit.fact-base/v1` document from the reconciled
134
+ execution-program artifact, ALL wave summaries, and ALL completion records. Its
135
+ required keys are exactly:
116
136
  `schemaVersion, generatedAt, mode, freshnessPolicy, sources, claims, unresolvedClaims, overrides`.
117
137
 
138
+ The caller also owns CONTENT AUTHORING, exactly as it owns critic execution and
139
+ fact-base synthesis: the kit's pipeline validates structure and fact
140
+ consistency, but nothing in it owns prose quality. An unattended recap run
141
+ without a caller-supplied authoring path emits raw federated artifact text as
142
+ deck prose (stoa W6 live evidence, run-19af6e55: implementation.md pasted
143
+ verbatim, frontmatter included, tables flattened to run-on prose — every
144
+ automated gate passed it). Until the explainer-kit ships its authoring seam (a
145
+ caller-supplied author callback / `authorModulePath`, pending upstream),
146
+ wave-close/program-close recap callers MUST either author the content document
147
+ from the synthesized fact base plus the recipe outline (LLM-authored from
148
+ summary/synthesis material, as the operator-approved W6 rebuild demonstrates)
149
+ or NOT run the unattended build, recording the skip disposition per the
150
+ optional-step rule.
151
+
118
152
  The mechanical caller constructs an `explainer-kit.run-request/v1` document whose
119
153
  required keys are exactly:
120
154
  `schemaVersion, recipe, slug, outputRoot, factBase, mode`. Set `recipe` to
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AAezC,OAAO,EAML,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAehB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC3B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmGpC,UAAU,yBAAyB;IACjC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAC/C,cAAc,CAAC;IACpB,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,kBAAkB,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,mCAAmC,EAAE,OAAO,mCAAmC,CAAC;IAChF,0BAA0B,EAAE,OAAO,0BAA0B,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AA61ED,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAsKT"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/config/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,iCAAiC,CAAC;AAezC,OAAO,EAML,KAAK,SAAS,EACd,KAAK,cAAc,EAGnB,KAAK,UAAU,EAehB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,8BAA8B,EACnC,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACL,mCAAmC,EACnC,0BAA0B,EAC3B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoGpC,UAAU,yBAAyB;IACjC,mBAAmB,EAAE,CACnB,OAAO,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,KAC/C,cAAc,CAAC;IACpB,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,KACnB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/D,eAAe,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9E,mBAAmB,EAAE,CACnB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,iBAAiB,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IACzC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE,kBAAkB,EAAE,CAClB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,8BAA8B,CAAC,CAAC;IAC7C,mCAAmC,EAAE,OAAO,mCAAmC,CAAC;IAChF,0BAA0B,EAAE,OAAO,0BAA0B,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AA63ED,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAsKT"}
@@ -37,6 +37,7 @@ const KEY_ORDER = [
37
37
  'documentation.tooling',
38
38
  'documentation.config',
39
39
  'documentation.requireForProjectCompletion',
40
+ 'explainers.defaults.style',
40
41
  'explainers.defaults.palette',
41
42
  'explainers.defaults.visualProfile',
42
43
  'explainers.defaults.themeBundlePath',
@@ -322,27 +323,38 @@ const CONFIG_CATALOG = [
322
323
  owningCommand: 'oat tools install / oat tools update',
323
324
  description: 'Whether the workflows tool pack is installed.',
324
325
  },
326
+ {
327
+ key: 'explainers.defaults.style',
328
+ group: 'Explainer Defaults (3-layer: local > shared > user)',
329
+ file: '.oat/config.local.json | .oat/config.json | ~/.oat/config.json',
330
+ scope: 'local, shared, or user',
331
+ type: 'clean-neutral | business-corporate | navy-ocean | dark-edgy',
332
+ defaultValue: 'clean-neutral',
333
+ mutability: 'read/write',
334
+ owningCommand: 'oat config set explainers.defaults.style <style> [--local|--shared|--user]',
335
+ description: 'Curated default style for explainer builds; this is the primary visual-selection front door.',
336
+ },
325
337
  {
326
338
  key: 'explainers.defaults.palette',
327
339
  group: 'Explainer Defaults (3-layer: local > shared > user)',
328
340
  file: '.oat/config.local.json | .oat/config.json | ~/.oat/config.json',
329
341
  scope: 'local, shared, or user',
330
- type: 'non-empty string',
331
- defaultValue: 'neutral',
342
+ type: 'non-empty string | null',
343
+ defaultValue: 'null',
332
344
  mutability: 'read/write',
333
345
  owningCommand: 'oat config set explainers.defaults.palette <value> [--local|--shared|--user]',
334
- description: 'Named default color palette for explainer builds.',
346
+ description: 'Deprecated nullable compatibility selection for a named color palette; prefer explainers.defaults.style.',
335
347
  },
336
348
  {
337
349
  key: 'explainers.defaults.visualProfile',
338
350
  group: 'Explainer Defaults (3-layer: local > shared > user)',
339
351
  file: '.oat/config.local.json | .oat/config.json | ~/.oat/config.json',
340
352
  scope: 'local, shared, or user',
341
- type: 'non-empty string',
342
- defaultValue: 'clean',
353
+ type: 'non-empty string | null',
354
+ defaultValue: 'null',
343
355
  mutability: 'read/write',
344
356
  owningCommand: 'oat config set explainers.defaults.visualProfile <value> [--local|--shared|--user]',
345
- description: 'Named default visual profile for explainer builds.',
357
+ description: 'Deprecated nullable compatibility selection for a named visual profile; prefer explainers.defaults.style.',
346
358
  },
347
359
  {
348
360
  key: 'explainers.defaults.themeBundlePath',
@@ -841,6 +853,18 @@ function parseExplainerValue(key, rawValue, surface) {
841
853
  }
842
854
  return value;
843
855
  }
856
+ if (key === 'explainers.defaults.style') {
857
+ const styles = [
858
+ 'clean-neutral',
859
+ 'business-corporate',
860
+ 'navy-ocean',
861
+ 'dark-edgy',
862
+ ];
863
+ if (!styles.includes(value)) {
864
+ throw new Error(`Invalid value for ${key}: expected one of ${styles.join(' | ')}, got '${rawValue}'.`);
865
+ }
866
+ return value;
867
+ }
844
868
  if (key === 'explainers.publish.provider') {
845
869
  if (value !== 's3-static') {
846
870
  throw new Error(`Invalid value for ${key}: expected 's3-static', got '${rawValue}'.`);
@@ -929,7 +953,8 @@ function validateSurfaceForKey(key, surface) {
929
953
  return;
930
954
  }
931
955
  if (key.startsWith('explainers.')) {
932
- const allowed = key === 'explainers.defaults.palette' ||
956
+ const allowed = key === 'explainers.defaults.style' ||
957
+ key === 'explainers.defaults.palette' ||
933
958
  key === 'explainers.defaults.visualProfile'
934
959
  ? ['shared', 'local', 'user']
935
960
  : key === 'explainers.defaults.themeBundlePath'
@@ -976,7 +1001,8 @@ function defaultSurfaceForKey(key) {
976
1001
  if (key === 'updateNotifications') {
977
1002
  return 'user';
978
1003
  }
979
- if (key === 'explainers.defaults.palette' ||
1004
+ if (key === 'explainers.defaults.style' ||
1005
+ key === 'explainers.defaults.palette' ||
980
1006
  key === 'explainers.defaults.visualProfile' ||
981
1007
  key === 'explainers.defaults.themeBundlePath' ||
982
1008
  key === 'explainers.publish.awsProfile') {
@@ -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":"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"}
@@ -292,9 +292,20 @@ function parseProjectRecapManifest(contents) {
292
292
  if (!isProjectRecapManifestV1(value)) {
293
293
  throw new CliError('Selected project recap manifest does not match the explainer-kit manifest contract.');
294
294
  }
295
+ const requiredProvenancePaths = [
296
+ 'run-request.json',
297
+ 'source/content-approval.json',
298
+ ];
299
+ const recordedImmutablePaths = Object.keys(value.immutableHashes);
300
+ const missingLegacyPaths = requiredProvenancePaths.filter((relativePath) => !(relativePath in value.immutableHashes));
301
+ if (missingLegacyPaths.length > 0) {
302
+ throw new CliError(`Selected project recap uses a legacy manifest missing immutable coverage for ${missingLegacyPaths.join(', ')}; regenerate the recap package before archival.`);
303
+ }
295
304
  const expectedImmutablePaths = new Set([
305
+ ...requiredProvenancePaths,
296
306
  value.source.factBasePath,
297
307
  'source/fact-base.md',
308
+ ...(value.source.authorResultPaths ?? []),
298
309
  value.theme.path,
299
310
  ...value.artifacts.flatMap((artifact) => [
300
311
  artifact.contentPath,
@@ -304,13 +315,9 @@ function parseProjectRecapManifest(contents) {
304
315
  : []),
305
316
  ]),
306
317
  ]);
307
- const recordedImmutablePaths = Object.keys(value.immutableHashes);
308
318
  if (expectedImmutablePaths.size === 0 ||
309
319
  expectedImmutablePaths.size !== recordedImmutablePaths.length ||
310
320
  [...expectedImmutablePaths].some((relativePath) => !(relativePath in value.immutableHashes)) ||
311
- value.source.factBaseHash !==
312
- value.immutableHashes[value.source.factBasePath] ||
313
- value.theme.hash !== value.immutableHashes[value.theme.path] ||
314
321
  value.artifacts.some((artifact) => artifact.status === 'built' &&
315
322
  typeof artifact.renderedPath === 'string' &&
316
323
  artifact.hash !== value.immutableHashes[artifact.renderedPath])) {
@@ -344,10 +351,12 @@ function isProjectRecapManifestV1(value) {
344
351
  !isNonEmptyString(value.recipe.id) ||
345
352
  !isNonEmptyString(value.recipe.version) ||
346
353
  !isRecord(value.source) ||
347
- !hasExactKeys(value.source, ['factBasePath', 'factBaseHash', 'inputHashes'], ['sourceRevision']) ||
354
+ !hasExactKeys(value.source, ['factBasePath', 'factBaseHash', 'inputHashes'], ['sourceRevision', 'authorResultPaths']) ||
348
355
  !isSafeRelativePath(value.source.factBasePath) ||
349
356
  !isSha256(value.source.factBaseHash) ||
350
357
  !isHashMap(value.source.inputHashes) ||
358
+ (value.source.authorResultPaths !== undefined &&
359
+ !isUniqueSafePathArray(value.source.authorResultPaths)) ||
351
360
  (value.source.sourceRevision !== undefined &&
352
361
  !isNonEmptyString(value.source.sourceRevision)) ||
353
362
  !isRecord(value.theme) ||
@@ -18,7 +18,9 @@ export interface OatArchiveConfig {
18
18
  awsProfile?: string;
19
19
  awsRegion?: string;
20
20
  }
21
+ export type OatExplainerStyle = 'clean-neutral' | 'business-corporate' | 'navy-ocean' | 'dark-edgy';
21
22
  export interface OatExplainerDefaultsConfig {
23
+ style?: OatExplainerStyle;
22
24
  palette?: string;
23
25
  visualProfile?: string;
24
26
  themeBundlePath?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"oat-config.d.ts","sourceRoot":"","sources":["../../src/config/oat-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oat-config.d.ts","sourceRoot":"","sources":["../../src/config/oat-config.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,12 @@ const VALID_POST_IMPLEMENT_STEPS = [
22
22
  'document',
23
23
  'pr',
24
24
  ];
25
+ const VALID_EXPLAINER_STYLES = [
26
+ 'clean-neutral',
27
+ 'business-corporate',
28
+ 'navy-ocean',
29
+ 'dark-edgy',
30
+ ];
25
31
  const LEGACY_POST_IMPLEMENT_SEQUENCES = {
26
32
  wait: { preApproval: [], postApproval: [] },
27
33
  summary: { preApproval: ['summary'], postApproval: [] },
@@ -252,6 +258,11 @@ function normalizeExplainersConfig(parsed, scope) {
252
258
  const next = {};
253
259
  if (isRecord(parsed.defaults)) {
254
260
  const defaults = {};
261
+ const style = trimNonEmptyString(parsed.defaults.style);
262
+ if (style !== undefined &&
263
+ VALID_EXPLAINER_STYLES.includes(style)) {
264
+ defaults.style = style;
265
+ }
255
266
  const palette = trimNonEmptyString(parsed.defaults.palette);
256
267
  if (palette !== undefined) {
257
268
  defaults.palette = palette;
@@ -1 +1 @@
1
- {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,OAAO,GACP,MAAM,GACN,KAAK,GACL,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,kCAAkC;IACjD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAChE;AAwGD,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,SAAS,GAAE,OAAO,CAAC,kCAAkC,CAAM,GAC1D,OAAO,CAAC,cAAc,CAAC,CAgFzB;AAED,wBAAgB,WAAW,CACzB,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,MAAM,GAChB,UAAU,GAAG,IAAI,CAcnB;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,cAAc,GACxB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAY5B;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,cAAc,GACxB,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAoDxC"}
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/config/resolve.ts"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,EAChB,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,oBAAoB,GAC5B,QAAQ,GACR,OAAO,GACP,MAAM,GACN,KAAK,GACL,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,kCAAkC;IACjD,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;IACxD,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IAClE,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CAChE;AAyGD,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,SAAS,GAAE,OAAO,CAAC,kCAAkC,CAAM,GAC1D,OAAO,CAAC,cAAc,CAAC,CAgFzB;AAED,wBAAgB,WAAW,CACzB,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE,MAAM,GAChB,UAAU,GAAG,IAAI,CAcnB;AAED,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,cAAc,GACxB,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAY5B;AAED,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,gBAAgB,CAAC;IACzB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,cAAc,GACxB,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAoDxC"}
@@ -19,8 +19,9 @@ const DEFAULT_SHARED_CONFIG = {
19
19
  },
20
20
  explainers: {
21
21
  defaults: {
22
- palette: 'neutral',
23
- visualProfile: 'clean',
22
+ style: 'clean-neutral',
23
+ palette: null,
24
+ visualProfile: null,
24
25
  themeBundlePath: null,
25
26
  },
26
27
  publish: {
@@ -1 +1 @@
1
- {"version":3,"file":"config-merge.d.ts","sourceRoot":"","sources":["../../../../src/providers/codex/codec/config-merge.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,8BAA8B;IAC7C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAqCD,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAIvE;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,EAC/B,eAAe,EACf,YAAY,EACZ,iBAAsB,EACtB,iBAAiB,GAClB,EAAE,oBAAoB,GAAG,sBAAsB,CA8C/C;AAED,6EAA6E;AAC7E,wBAAgB,uBAAuB,CAAC,EACtC,eAAe,EACf,IAAI,EACJ,iBAAsB,EACtB,iBAAiB,GAClB,EAAE,8BAA8B,GAAG,sBAAsB,CAOzD"}
1
+ {"version":3,"file":"config-merge.d.ts","sourceRoot":"","sources":["../../../../src/providers/codex/codec/config-merge.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACvC,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,8BAA8B;IAC7C,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,EAAE,sBAAsB,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AA8FD,4EAA4E;AAC5E,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAIvE;AAED,0EAA0E;AAC1E,wBAAgB,gBAAgB,CAAC,EAC/B,eAAe,EACf,YAAY,EACZ,iBAAsB,EACtB,iBAAiB,GAClB,EAAE,oBAAoB,GAAG,sBAAsB,CAgD/C;AAED,6EAA6E;AAC7E,wBAAgB,uBAAuB,CAAC,EACtC,eAAe,EACf,IAAI,EACJ,iBAAsB,EACtB,iBAAiB,GAClB,EAAE,8BAA8B,GAAG,sBAAsB,CAOzD"}
@@ -1,6 +1,44 @@
1
1
  import { CliError } from '../../../errors/index.js';
2
2
  import TOML from '@iarna/toml';
3
3
  import { stringifyToml } from './shared.js';
4
+ function isEscapedBasicStringDelimiter(line, index) {
5
+ let backslashCount = 0;
6
+ for (let cursor = index - 1; cursor >= 0 && line[cursor] === '\\'; cursor--) {
7
+ backslashCount += 1;
8
+ }
9
+ return backslashCount % 2 === 1;
10
+ }
11
+ function scanMultilineStringDelimiter(line, initialDelimiter) {
12
+ let delimiter = initialDelimiter;
13
+ for (let index = 0; index < line.length - 2; index++) {
14
+ if (delimiter === null) {
15
+ const candidate = line.slice(index, index + 3);
16
+ if ((candidate === '"""' && !isEscapedBasicStringDelimiter(line, index)) ||
17
+ candidate === "'''") {
18
+ delimiter = candidate;
19
+ index += 2;
20
+ }
21
+ continue;
22
+ }
23
+ if (line.startsWith(delimiter, index) &&
24
+ (delimiter === "'''" || !isEscapedBasicStringDelimiter(line, index))) {
25
+ delimiter = null;
26
+ index += 2;
27
+ }
28
+ }
29
+ return delimiter;
30
+ }
31
+ function normalizeCodexConfigIndentation(content) {
32
+ let multilineDelimiter = null;
33
+ return content
34
+ .split('\n')
35
+ .map((line) => {
36
+ const normalizedLine = multilineDelimiter === null ? line.trimStart() : line;
37
+ multilineDelimiter = scanMultilineStringDelimiter(normalizedLine, multilineDelimiter);
38
+ return normalizedLine;
39
+ })
40
+ .join('\n');
41
+ }
4
42
  function parseConfig(content) {
5
43
  if (!content || content.trim() === '') {
6
44
  return {};
@@ -64,7 +102,7 @@ export function mergeCodexConfig({ existingContent, desiredRoles, staleManagedRo
64
102
  removedRoles.push(staleRole);
65
103
  }
66
104
  }
67
- const mergedContent = stringifyToml(nextConfig);
105
+ const mergedContent = normalizeCodexConfigIndentation(stringifyToml(nextConfig));
68
106
  const changed = (existingContent ?? '').trimEnd() !== mergedContent.trimEnd();
69
107
  return {
70
108
  mergedContent,