@open-agent-toolkit/cli 0.2.25 → 0.2.26

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 (25) hide show
  1. package/assets/docs/cli-utilities/configuration.md +42 -11
  2. package/assets/docs/workflows/projects/dispatch-ceiling.md +67 -16
  3. package/assets/public-package-versions.json +4 -4
  4. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
  5. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
  6. package/assets/skills/oat-project-implement/SKILL.md +9 -11
  7. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +18 -9
  8. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
  9. package/assets/skills/oat-project-implement/references/phase-execution.md +13 -4
  10. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
  11. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
  12. package/dist/commands/config/index.d.ts.map +1 -1
  13. package/dist/commands/config/index.js +27 -3
  14. package/dist/commands/project/dispatch-ceiling/index.d.ts.map +1 -1
  15. package/dist/commands/project/dispatch-ceiling/index.js +90 -0
  16. package/dist/config/dispatch-notices.d.ts +8 -0
  17. package/dist/config/dispatch-notices.d.ts.map +1 -0
  18. package/dist/config/dispatch-notices.js +79 -0
  19. package/dist/config/dispatch-policy-options.d.ts +2 -0
  20. package/dist/config/dispatch-policy-options.d.ts.map +1 -1
  21. package/dist/config/dispatch-policy-options.js +14 -2
  22. package/dist/providers/identity/dispatch-report.d.ts +17 -0
  23. package/dist/providers/identity/dispatch-report.d.ts.map +1 -1
  24. package/dist/providers/identity/dispatch-report.js +30 -0
  25. package/package.json +2 -2
@@ -233,7 +233,7 @@ remains immutable baseline evidence for the original p01-t01 verification.
233
233
  | `oat-project-design/references/selective-review-pass.md` | `d4956192b82e -> DES-06`; `7d6e1f926ecb -> DES-06`; `04f918a5fcac -> DES-07` |
234
234
  | `oat-project-plan/SKILL.md` | `5eb3949f32e1 -> NG`; `64a08153bb9e -> NG`; `655d61df0a8f -> NG`; `56b37486f09d -> PLAN-01`; `cf317c17c586 -> PLAN-02`; `781643b0f2c3 -> NG`; `01fd7cca8253 -> PLAN-04`; `7bc7fa3f2cbb -> NG`; `da28ce0a5f2e -> NG`; `e334f94c4d35 -> NG`; `1fa55762c038 -> NG`; `c0935b5484a2 -> NG`; `6008163054f8 -> PLAN-05`; `571271f4d71b -> PLAN-06`; `746b760289e4 -> PLAN-06`; `de195590ff83 -> NG`; `49640510829a -> PLAN-07`; `4bef7afa7a71 -> PLAN-08`; `e5886632533e -> PLAN-08`; `4cfe1df14372 -> NG`; `d116c97a500c -> PLAN-10`; `aa62facff547 -> PLAN-10`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> PLAN-11`; `1734b2c85c5d -> NG`; `b4af2220eb91 -> PLAN-11` |
235
235
  | `oat-project-import-plan/SKILL.md` | `f7ca8635452f -> NG`; `c2e5fa410069 -> NG`; `655d61df0a8f -> NG`; `dceff5cc04b5 -> NG`; `1af4957a1af2 -> IMPORT-01`; `45b699c1c0b5 -> IMPORT-01`; `ba6d120791c1 -> IMPORT-01`; `070ebc5259af -> IMPORT-03`; `c11552696e2e -> IMPORT-03`; `cfe661966baf -> IMPORT-04`; `baa91c0a0bf8 -> NG`; `e364e84b2702 -> NG`; `39031985a945 -> IMPORT-06`; `f106aa29a217 -> IMPORT-07`; `65038450aee3 -> IMPORT-07`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> IMPORT-09` |
236
- | `oat-project-implement/SKILL.md` | `18980f6bc1a6 -> NG`; `ffb3af0ba8ef -> NG`; `e0355c7a05e9 -> IMPLEMENT-11+IMPLEMENT-13+IMPLEMENT-16`; `6296f41ae11c -> NG`; `a167d03559fa -> NG`; `cf317c17c586 -> IMPLEMENT-01`; `8ce8a09feca4 -> NG`; `bd0cb4988188 -> NG`; `28af4ee0055d -> NG` |
236
+ | `oat-project-implement/SKILL.md` | `18980f6bc1a6 -> NG`; `e0355c7a05e9 -> IMPLEMENT-11+IMPLEMENT-13+IMPLEMENT-16`; `6296f41ae11c -> NG`; `a167d03559fa -> NG`; `cf317c17c586 -> IMPLEMENT-01`; `8ce8a09feca4 -> NG`; `bd0cb4988188 -> NG`; `28af4ee0055d -> NG` |
237
237
  | `oat-project-implement/references/completion-and-closeout.md` | `f7dab9c1f96c -> IMPLEMENT-12`; `c69c17a069a8 -> IMPLEMENT-14`; `a97fa5634a68 -> IMPLEMENT-14`; `3af58881811c -> IMPLEMENT-14`; `4203e1f49d0f -> IMPLEMENT-14`; `c3bd2458a3d3 -> IMPLEMENT-13`; `95b5eafc070d -> IMPLEMENT-13`; `25ecbe9c998b -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f6f24fd71da4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f18283bc1cf9 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `2c1ffc4a82dd -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `3454a07aa843 -> IMPLEMENT-16`; `0d86e2098cfb -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d5fe597d266f -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `55a152e944c1 -> IMPLEMENT-16`; `effac7cbd573 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d2a34d8b148 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d27462aaed26 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d52ecb17268 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `5b91aabe3757 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `fd0ad919f702 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `63bf28df1474 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a4ed471dbc78 -> IMPLEMENT-16`; `6b7a64cec6e5 -> IMPLEMENT-16`; `0a4fdba0ebc0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a5033c2aada5 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `e77609eddba0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `351156e8dde4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `51d45bd2bbd1 -> IMPLEMENT-16`; `f7796ffcc804 -> IMPLEMENT-16`; `990d730cb494 -> IMPLEMENT-16`; `6ed28bb7d384 -> IMPLEMENT-16`; `8b7d4b5bcf1b -> IMPLEMENT-16`; `88aad500e6e9 -> IMPLEMENT-16`; `877e3e3f9eda -> IMPLEMENT-16`; `fc03c97f834e -> IMPLEMENT-16`; `12939a3da5e0 -> IMPLEMENT-16`; `bdb418335a88 -> IMPLEMENT-16`; `fba97e596ebd -> IMPLEMENT-16`; `3d0b5e2f14f0 -> IMPLEMENT-17`; `87f1424a8692 -> NG`; `6b1ec05182f0 -> IMPLEMENT-11`; `e6d696a27c91 -> NG`; `c77f8ccb52ad -> NG`; `48de2614c0ba -> IMPLEMENT-11`; `32d53f5212e5 -> IMPLEMENT-11`; `7cdb4a9c57b7 -> IMPLEMENT-11`; `16ffc0aa099b -> IMPLEMENT-11`; `d6868ea10b3f -> IMPLEMENT-11`; `4f05ff5567be -> IMPLEMENT-11`; `c70b47ae7a6d -> IMPLEMENT-11`; `5fafd093b58e -> NG`; `567d43ab0c2e -> NG`; `21ceaf7e658a -> NG`; `249427a9f475 -> NG`; `8a7ec13a9b7c -> NG`; `9aeb7fce2012 -> IMPLEMENT-18`; `f11a7cdda220 -> IMPLEMENT-18`; `4523ac029152 -> NG`; `6e87b08c4046 -> NG`; `baa6052c7f0a -> IMPLEMENT-18`; `27d3fad116b1 -> IMPLEMENT-18`; `2cfbeb4388a5 -> IMPLEMENT-18`; `c56ea56a56db -> NG`; `43e2e3c1380d -> IMPLEMENT-17`; `b49690277fb5 -> NG`; `df12304d6a36 -> NG`; `52eacac11fef -> IMPLEMENT-17`; `60092df6b17b -> IMPLEMENT-17`; `361872c6b00e -> IMPLEMENT-17`; `d2bc711a75fb -> IMPLEMENT-17` |
238
238
  | `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG`; `2df3adae4120 -> NG`; `e75df892b55c -> NG`; `8ba5dbd2a0d8 -> NG` |
239
239
  | `oat-project-implement/references/docs/autonomy-contract.md` | `* -> NG` |
@@ -233,7 +233,7 @@ remains immutable baseline evidence for the original p01-t01 verification.
233
233
  | `oat-project-design/references/selective-review-pass.md` | `d4956192b82e -> DES-06`; `7d6e1f926ecb -> DES-06`; `04f918a5fcac -> DES-07` |
234
234
  | `oat-project-plan/SKILL.md` | `5eb3949f32e1 -> NG`; `64a08153bb9e -> NG`; `655d61df0a8f -> NG`; `56b37486f09d -> PLAN-01`; `cf317c17c586 -> PLAN-02`; `781643b0f2c3 -> NG`; `01fd7cca8253 -> PLAN-04`; `7bc7fa3f2cbb -> NG`; `da28ce0a5f2e -> NG`; `e334f94c4d35 -> NG`; `1fa55762c038 -> NG`; `c0935b5484a2 -> NG`; `6008163054f8 -> PLAN-05`; `571271f4d71b -> PLAN-06`; `746b760289e4 -> PLAN-06`; `de195590ff83 -> NG`; `49640510829a -> PLAN-07`; `4bef7afa7a71 -> PLAN-08`; `e5886632533e -> PLAN-08`; `4cfe1df14372 -> NG`; `d116c97a500c -> PLAN-10`; `aa62facff547 -> PLAN-10`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> PLAN-11`; `1734b2c85c5d -> NG`; `b4af2220eb91 -> PLAN-11` |
235
235
  | `oat-project-import-plan/SKILL.md` | `f7ca8635452f -> NG`; `c2e5fa410069 -> NG`; `655d61df0a8f -> NG`; `dceff5cc04b5 -> NG`; `1af4957a1af2 -> IMPORT-01`; `45b699c1c0b5 -> IMPORT-01`; `ba6d120791c1 -> IMPORT-01`; `070ebc5259af -> IMPORT-03`; `c11552696e2e -> IMPORT-03`; `cfe661966baf -> IMPORT-04`; `baa91c0a0bf8 -> NG`; `e364e84b2702 -> NG`; `39031985a945 -> IMPORT-06`; `f106aa29a217 -> IMPORT-07`; `65038450aee3 -> IMPORT-07`; `bee4c4aa34c6 -> NG`; `3f0b53056edd -> IMPORT-09` |
236
- | `oat-project-implement/SKILL.md` | `18980f6bc1a6 -> NG`; `ffb3af0ba8ef -> NG`; `e0355c7a05e9 -> IMPLEMENT-11+IMPLEMENT-13+IMPLEMENT-16`; `6296f41ae11c -> NG`; `a167d03559fa -> NG`; `cf317c17c586 -> IMPLEMENT-01`; `8ce8a09feca4 -> NG`; `bd0cb4988188 -> NG`; `28af4ee0055d -> NG` |
236
+ | `oat-project-implement/SKILL.md` | `18980f6bc1a6 -> NG`; `e0355c7a05e9 -> IMPLEMENT-11+IMPLEMENT-13+IMPLEMENT-16`; `6296f41ae11c -> NG`; `a167d03559fa -> NG`; `cf317c17c586 -> IMPLEMENT-01`; `8ce8a09feca4 -> NG`; `bd0cb4988188 -> NG`; `28af4ee0055d -> NG` |
237
237
  | `oat-project-implement/references/completion-and-closeout.md` | `f7dab9c1f96c -> IMPLEMENT-12`; `c69c17a069a8 -> IMPLEMENT-14`; `a97fa5634a68 -> IMPLEMENT-14`; `3af58881811c -> IMPLEMENT-14`; `4203e1f49d0f -> IMPLEMENT-14`; `c3bd2458a3d3 -> IMPLEMENT-13`; `95b5eafc070d -> IMPLEMENT-13`; `25ecbe9c998b -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f6f24fd71da4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `f18283bc1cf9 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `2c1ffc4a82dd -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `3454a07aa843 -> IMPLEMENT-16`; `0d86e2098cfb -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d5fe597d266f -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `55a152e944c1 -> IMPLEMENT-16`; `effac7cbd573 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d2a34d8b148 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `d27462aaed26 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `9d52ecb17268 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `5b91aabe3757 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `fd0ad919f702 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `63bf28df1474 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a4ed471dbc78 -> IMPLEMENT-16`; `6b7a64cec6e5 -> IMPLEMENT-16`; `0a4fdba0ebc0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `a5033c2aada5 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `e77609eddba0 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `351156e8dde4 -> IMPLEMENT-13+IMPLEMENT-14+IMPLEMENT-15+IMPLEMENT-16`; `51d45bd2bbd1 -> IMPLEMENT-16`; `f7796ffcc804 -> IMPLEMENT-16`; `990d730cb494 -> IMPLEMENT-16`; `6ed28bb7d384 -> IMPLEMENT-16`; `8b7d4b5bcf1b -> IMPLEMENT-16`; `88aad500e6e9 -> IMPLEMENT-16`; `877e3e3f9eda -> IMPLEMENT-16`; `fc03c97f834e -> IMPLEMENT-16`; `12939a3da5e0 -> IMPLEMENT-16`; `bdb418335a88 -> IMPLEMENT-16`; `fba97e596ebd -> IMPLEMENT-16`; `3d0b5e2f14f0 -> IMPLEMENT-17`; `87f1424a8692 -> NG`; `6b1ec05182f0 -> IMPLEMENT-11`; `e6d696a27c91 -> NG`; `c77f8ccb52ad -> NG`; `48de2614c0ba -> IMPLEMENT-11`; `32d53f5212e5 -> IMPLEMENT-11`; `7cdb4a9c57b7 -> IMPLEMENT-11`; `16ffc0aa099b -> IMPLEMENT-11`; `d6868ea10b3f -> IMPLEMENT-11`; `4f05ff5567be -> IMPLEMENT-11`; `c70b47ae7a6d -> IMPLEMENT-11`; `5fafd093b58e -> NG`; `567d43ab0c2e -> NG`; `21ceaf7e658a -> NG`; `249427a9f475 -> NG`; `8a7ec13a9b7c -> NG`; `9aeb7fce2012 -> IMPLEMENT-18`; `f11a7cdda220 -> IMPLEMENT-18`; `4523ac029152 -> NG`; `6e87b08c4046 -> NG`; `baa6052c7f0a -> IMPLEMENT-18`; `27d3fad116b1 -> IMPLEMENT-18`; `2cfbeb4388a5 -> IMPLEMENT-18`; `c56ea56a56db -> NG`; `43e2e3c1380d -> IMPLEMENT-17`; `b49690277fb5 -> NG`; `df12304d6a36 -> NG`; `52eacac11fef -> IMPLEMENT-17`; `60092df6b17b -> IMPLEMENT-17`; `361872c6b00e -> IMPLEMENT-17`; `d2bc711a75fb -> IMPLEMENT-17` |
238
238
  | `oat-project-implement/references/dispatch-and-dry-run.md` | `21b85f5e4daa -> IMPLEMENT-08`; `74c92b32bb2a -> IMPLEMENT-08`; `8efd2d0517ab -> IMPLEMENT-09`; `461ed9b3e495 -> IMPLEMENT-09`; `b5ad64fd744d -> NG`; `14ce436cfffa -> NG`; `043ca36da3e2 -> NG`; `a23e45c1dc8d -> NG`; `498143bb41a7 -> NG`; `4fe3eb179023 -> NG`; `7f75485e5a33 -> NG`; `8ec3a96df029 -> NG`; `16c3f96e758d -> NG`; `5915c41fe058 -> NG`; `f51e43eeac56 -> NG`; `fd41c25623cb -> NG`; `58a932ed6453 -> NG`; `4718bd3ce12d -> NG`; `58c444a2126b -> NG`; `2df3adae4120 -> NG`; `e75df892b55c -> NG`; `8ba5dbd2a0d8 -> NG` |
239
239
  | `oat-project-implement/references/docs/autonomy-contract.md` | `* -> NG` |
@@ -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;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"}
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;AAmBzC,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;AAE1C,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;AA46ED,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,OAAO,CAAC,yBAAyB,CAAM,GACjD,OAAO,CAsKT"}
@@ -6,6 +6,7 @@ import { confirmAction, } from '../shared/shared.prompts.js';
6
6
  import { readGlobalOptions } from '../shared/shared.utils.js';
7
7
  import { compileDispatchCeilingPreset } from '../../config/dispatch-ceiling-preset.js';
8
8
  import { normalizeDispatchMatrix, validateDispatchRouteTarget, walkDispatchMatrix, } from '../../config/dispatch-matrix.js';
9
+ import { formatDispatchNotices, terminalReviewerNoticesForMatrix, } from '../../config/dispatch-notices.js';
9
10
  import { dispatchPolicyModeDescription, dispatchPolicyPolicyDescription, managedDispatchPolicyValueList, } from '../../config/dispatch-policy-options.js';
10
11
  import { VALID_DISPATCH_POLICY_MODES, VALID_MANAGED_DISPATCH_POLICIES, MAX_GATE_TIMEOUT_MS, MIN_GATE_TIMEOUT_MS, isValidGateTimeoutMs, normalizeWorkflowPostImplementSequence, readOatConfig, readOatLocalConfig, readUserConfig, writeOatConfig, writeOatLocalConfig, writeUserConfig, } from '../../config/oat-config.js';
11
12
  import { resolveEffectiveConfig, } from '../../config/resolve.js';
@@ -1698,45 +1699,65 @@ function applyDispatchMatrixRecommendation(workflow, recommendation) {
1698
1699
  },
1699
1700
  };
1700
1701
  }
1702
+ async function effectiveTerminalReviewerNotices(repoRoot, userConfigDir, dependencies) {
1703
+ const resolved = await dependencies.resolveEffectiveConfig(repoRoot, userConfigDir, dependencies.processEnv);
1704
+ const effectiveProviders = {};
1705
+ for (const config of [resolved.user, resolved.shared, resolved.local]) {
1706
+ for (const [provider, value] of Object.entries(config.workflow?.dispatchCeiling?.providers ?? {})) {
1707
+ const existing = effectiveProviders[provider];
1708
+ effectiveProviders[provider] =
1709
+ isRecord(existing) && isRecord(value)
1710
+ ? { ...existing, ...value }
1711
+ : value;
1712
+ }
1713
+ }
1714
+ return terminalReviewerNoticesForMatrix(effectiveProviders);
1715
+ }
1701
1716
  async function adoptDispatchMatrixRecommendation(repoRoot, userConfigDir, options, context, dependencies) {
1702
1717
  const source = options.surface === 'auto' ? 'local' : options.surface;
1703
1718
  const recommendation = await loadDispatchMatrixRecommendation(dependencies);
1704
1719
  if (source === 'user') {
1705
1720
  const userConfig = await dependencies.readUserConfig(userConfigDir);
1706
1721
  await validateRecommendationCells(repoRoot, recommendation, dependencies, context.logger.warn);
1722
+ const workflow = applyDispatchMatrixRecommendation(userConfig.workflow, recommendation);
1707
1723
  await dependencies.writeUserConfig(userConfigDir, {
1708
1724
  ...userConfig,
1709
- workflow: applyDispatchMatrixRecommendation(userConfig.workflow, recommendation),
1725
+ workflow,
1710
1726
  });
1711
1727
  return {
1712
1728
  key: 'workflow.dispatchCeiling.providers',
1713
1729
  value: recommendation.version,
1714
1730
  source,
1731
+ notices: await effectiveTerminalReviewerNotices(repoRoot, userConfigDir, dependencies),
1715
1732
  };
1716
1733
  }
1717
1734
  if (source === 'local') {
1718
1735
  const localConfig = await dependencies.readOatLocalConfig(repoRoot);
1719
1736
  await validateRecommendationCells(repoRoot, recommendation, dependencies, context.logger.warn);
1737
+ const workflow = applyDispatchMatrixRecommendation(localConfig.workflow, recommendation);
1720
1738
  await dependencies.writeOatLocalConfig(repoRoot, {
1721
1739
  ...localConfig,
1722
- workflow: applyDispatchMatrixRecommendation(localConfig.workflow, recommendation),
1740
+ workflow,
1723
1741
  });
1724
1742
  return {
1725
1743
  key: 'workflow.dispatchCeiling.providers',
1726
1744
  value: recommendation.version,
1727
1745
  source,
1746
+ notices: await effectiveTerminalReviewerNotices(repoRoot, userConfigDir, dependencies),
1728
1747
  };
1729
1748
  }
1730
1749
  const sharedConfig = await dependencies.readOatConfig(repoRoot);
1731
1750
  await validateRecommendationCells(repoRoot, recommendation, dependencies, context.logger.warn);
1751
+ const workflow = applyDispatchMatrixRecommendation(sharedConfig.workflow, recommendation);
1732
1752
  await dependencies.writeOatConfig(repoRoot, {
1733
1753
  ...sharedConfig,
1734
- workflow: applyDispatchMatrixRecommendation(sharedConfig.workflow, recommendation),
1754
+ workflow,
1735
1755
  });
1736
1756
  return {
1737
1757
  key: 'workflow.dispatchCeiling.providers',
1738
1758
  value: recommendation.version,
1739
1759
  source,
1760
+ notices: await effectiveTerminalReviewerNotices(repoRoot, userConfigDir, dependencies),
1740
1761
  };
1741
1762
  }
1742
1763
  function formatList(values) {
@@ -1870,6 +1891,9 @@ async function runAdopt(templateArg, options, context, dependencies) {
1870
1891
  }
1871
1892
  else {
1872
1893
  context.logger.info(`Adopted dispatch matrix recommendation ${result.value} to ${result.source} config.`);
1894
+ if (result.notices.length > 0) {
1895
+ context.logger.info(formatDispatchNotices(result.notices));
1896
+ }
1873
1897
  }
1874
1898
  process.exitCode = 0;
1875
1899
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/dispatch-ceiling/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAa9B,OAAO,EAUL,KAAK,uBAAuB,EAY7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAsBzB,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAiC5C,UAAU,2BAA2B;IACnC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,oBAAoB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC7E,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAmnFD,wBAAgB,mCAAmC,CACjD,SAAS,GAAE,OAAO,CAAC,2BAA2B,CAAM,GACnD,OAAO,CAkGT"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/commands/project/dispatch-ceiling/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,sBAAsB,CAAC;AAkB9B,OAAO,EAUL,KAAK,uBAAuB,EAY7B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAyBzB,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAiC5C,UAAU,2BAA2B;IACnC,mBAAmB,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,cAAc,CAAC;IAChE,kBAAkB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACrD,sBAAsB,EAAE,CACtB,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,MAAM,EACrB,GAAG,EAAE,MAAM,CAAC,UAAU,KACnB,OAAO,CAAC,cAAc,CAAC,CAAC;IAC7B,oBAAoB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC7E,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5C,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;CAC/B;AAkwFD,wBAAgB,mCAAmC,CACjD,SAAS,GAAE,OAAO,CAAC,2BAA2B,CAAM,GACnD,OAAO,CA0GT"}
@@ -5,6 +5,7 @@ import { getFrontmatterBlock } from '../../shared/frontmatter.js';
5
5
  import { readGlobalOptions } from '../../shared/shared.utils.js';
6
6
  import { compileDispatchPolicyPreset, } from '../../../config/dispatch-ceiling-preset.js';
7
7
  import { normalizeDispatchMatrix } from '../../../config/dispatch-matrix.js';
8
+ import { effectiveTerminalReviewerTarget, formatDispatchNotices, terminalReviewerNoticeForTarget, } from '../../../config/dispatch-notices.js';
8
9
  import { getDispatchPolicyChoices, managedDispatchPolicyValueList, renderDispatchPolicyChoicesMarkdown, } from '../../../config/dispatch-policy-options.js';
9
10
  import { resolveActiveProject, VALID_CLAUDE_DISPATCH_CEILINGS, VALID_CODEX_DISPATCH_CEILINGS, VALID_DISPATCH_MATRIX_TIERS, VALID_MANAGED_DISPATCH_POLICIES, isWorkflowDispatchCandidateLadder, isWorkflowDispatchFallbackRoute, toWorkflowDispatchCandidateLadder, validateDispatchRouteTarget, } from '../../../config/oat-config.js';
10
11
  import { resolveEffectiveConfig, } from '../../../config/resolve.js';
@@ -21,6 +22,13 @@ const CODEX_VALUES = [
21
22
  const CLAUDE_VALUES = [
22
23
  ...VALID_CLAUDE_DISPATCH_CEILINGS,
23
24
  ];
25
+ const TASK_CLASSES = [
26
+ 'mechanical-recon',
27
+ 'intelligent-recon',
28
+ 'default-implementation',
29
+ 'hard-reasoning',
30
+ 'consequential',
31
+ ];
24
32
  const DEFAULT_DEPENDENCIES = {
25
33
  buildCommandContext,
26
34
  resolveProjectRoot,
@@ -925,6 +933,43 @@ function normalizeRequestedCandidate(provider, role, options) {
925
933
  }
926
934
  return { model };
927
935
  }
936
+ function normalizeClassification(provider, role, options) {
937
+ const hasTaskClass = options.taskClass !== undefined;
938
+ const hasTaskEffort = options.taskEffort !== undefined;
939
+ if (!hasTaskClass && !hasTaskEffort) {
940
+ return {
941
+ taskClass: null,
942
+ preferredEffort: null,
943
+ source: 'not-reported',
944
+ };
945
+ }
946
+ if (role === 'reviewer') {
947
+ throw new Error('Classification flags are not supported for reviewer routes.');
948
+ }
949
+ if (options.reportScope === undefined ||
950
+ (options.reportAction !== 'implementation' &&
951
+ options.reportAction !== 'fix')) {
952
+ throw new Error('Classification flags require --report-scope and an implementation or fix --report-action.');
953
+ }
954
+ const taskClassValue = options.taskClass?.trim() ?? '';
955
+ if (hasTaskClass &&
956
+ !TASK_CLASSES.includes(taskClassValue)) {
957
+ throw new Error(`Invalid task class "${taskClassValue}". Valid values: ${TASK_CLASSES.join(', ')}.`);
958
+ }
959
+ const taskEffort = options.taskEffort?.trim() ?? '';
960
+ if (hasTaskEffort && provider !== 'codex') {
961
+ throw new Error(`--task-effort is only valid for Codex; received ${provider}.`);
962
+ }
963
+ if (hasTaskEffort &&
964
+ !CODEX_VALUES.includes(taskEffort)) {
965
+ throw new Error(`Invalid Codex task effort "${taskEffort}". Valid values: ${CODEX_VALUES.join(', ')}.`);
966
+ }
967
+ return {
968
+ taskClass: hasTaskClass ? taskClassValue : null,
969
+ preferredEffort: hasTaskEffort ? taskEffort : null,
970
+ source: 'caller',
971
+ };
972
+ }
928
973
  function normalizeEscalationLevel(value) {
929
974
  if (value === undefined) {
930
975
  return 0;
@@ -1337,6 +1382,10 @@ async function resolveDispatchCeiling(context, dependencies, options) {
1337
1382
  const providers = {
1338
1383
  [provider]: providerResolution,
1339
1384
  };
1385
+ const terminalReviewerNotice = role === 'reviewer' || options.preflight === true
1386
+ ? terminalReviewerNoticeForTarget(effectiveTerminalReviewerTarget(provider, providerResolution.target, providerResolution.selection.selectedValue))
1387
+ : null;
1388
+ const notices = terminalReviewerNotice ? [terminalReviewerNotice] : [];
1340
1389
  if (resolvedValue) {
1341
1390
  const requiresManagedCodexDepth = options.preflight === true &&
1342
1391
  provider === 'codex' &&
@@ -1358,6 +1407,7 @@ async function resolveDispatchCeiling(context, dependencies, options) {
1358
1407
  source: resolvedValue.source,
1359
1408
  preset: resolvedValue.preset,
1360
1409
  unresolved: true,
1410
+ ...(notices.length > 0 ? { notices } : {}),
1361
1411
  projectPath,
1362
1412
  providerDefaultEffort,
1363
1413
  matrix: resolvedValue.matrix,
@@ -1399,6 +1449,7 @@ async function resolveDispatchCeiling(context, dependencies, options) {
1399
1449
  source: resolvedValue.source,
1400
1450
  preset: resolvedValue.preset,
1401
1451
  unresolved: true,
1452
+ ...(notices.length > 0 ? { notices } : {}),
1402
1453
  projectPath,
1403
1454
  providerDefaultEffort,
1404
1455
  matrix: resolvedValue.matrixCompatibility ??
@@ -1419,6 +1470,7 @@ async function resolveDispatchCeiling(context, dependencies, options) {
1419
1470
  source: resolvedValue.source,
1420
1471
  preset: resolvedValue.preset,
1421
1472
  unresolved: false,
1473
+ ...(notices.length > 0 ? { notices } : {}),
1422
1474
  projectPath,
1423
1475
  providerDefaultEffort,
1424
1476
  matrix: resolvedValue.matrixCompatibility ??
@@ -1448,6 +1500,7 @@ async function resolveDispatchCeiling(context, dependencies, options) {
1448
1500
  source: policyResolution?.source ?? null,
1449
1501
  preset: policyResolution?.preset ?? null,
1450
1502
  unresolved: true,
1503
+ ...(notices.length > 0 ? { notices } : {}),
1451
1504
  projectPath,
1452
1505
  providerDefaultEffort,
1453
1506
  matrix: reportedMatrix,
@@ -1657,6 +1710,9 @@ function writeHumanResolution(context, resolution) {
1657
1710
  context.logger.info(`Selected dispatch value: ${providerResolution.selection.selectedValue}`);
1658
1711
  }
1659
1712
  }
1713
+ if (resolution.notices && resolution.notices.length > 0) {
1714
+ context.logger.info(formatDispatchNotices(resolution.notices));
1715
+ }
1660
1716
  }
1661
1717
  function reportRole(action) {
1662
1718
  if (action === 'review') {
@@ -1686,6 +1742,9 @@ function reportControl(axis, dispatchArgs, reason) {
1686
1742
  return { value: null, mechanism: 'base-role', reason };
1687
1743
  }
1688
1744
  function buildResolutionReport(resolution, options) {
1745
+ const requestedClassification = options.taskClass !== undefined || options.taskEffort !== undefined
1746
+ ? normalizeClassification(resolution.provider, normalizeRole(options.role), options)
1747
+ : null;
1689
1748
  const hasScope = options.reportScope !== undefined;
1690
1749
  const hasAction = options.reportAction !== undefined;
1691
1750
  if (!hasScope && !hasAction) {
@@ -1708,11 +1767,40 @@ function buildResolutionReport(resolution, options) {
1708
1767
  if (providerResolution.selection.role !== expectedResolverRole) {
1709
1768
  throw new Error(`Invalid dispatch report action/role context: ${action}/${role} requires resolver role ${expectedResolverRole}, received ${providerResolution.selection.role}.`);
1710
1769
  }
1770
+ const classification = requestedClassification ??
1771
+ normalizeClassification(resolution.provider, providerResolution.selection.role, options);
1772
+ const namedManagedImplementation = resolution.status === 'resolved' &&
1773
+ resolution.policyMode === 'managed' &&
1774
+ VALID_DISPATCH_MATRIX_TIERS.includes(resolution.policy ?? '') &&
1775
+ action !== 'review' &&
1776
+ options.preflight !== true;
1777
+ const notices = [...(resolution.notices ?? [])];
1778
+ if (namedManagedImplementation &&
1779
+ providerResolution.selection.requestedCandidate === null &&
1780
+ providerResolution.selection.preferredValue === null &&
1781
+ providerResolution.selection.selectedValue !== null) {
1782
+ notices.push({
1783
+ code: 'managed-capped-selection-skipped',
1784
+ level: 'warning',
1785
+ message: 'Managed capped implementation/fix dispatch resolved without an exact candidate; pass the provider candidate flags to preserve explicit selection provenance.',
1786
+ });
1787
+ }
1788
+ if (namedManagedImplementation &&
1789
+ providerResolution.selection.requestedCandidate !== null &&
1790
+ classification.taskClass === null) {
1791
+ notices.push({
1792
+ code: 'managed-capped-classification-missing',
1793
+ level: 'warning',
1794
+ message: 'Managed capped implementation/fix dispatch selected an exact candidate without a task class; pass --task-class to preserve classification provenance.',
1795
+ });
1796
+ }
1711
1797
  return buildDispatchReport({
1712
1798
  scope,
1713
1799
  action,
1714
1800
  role,
1715
1801
  resolution,
1802
+ classification,
1803
+ notices,
1716
1804
  requestedControls: {
1717
1805
  model: reportControl(providerResolution.modelAxis, providerResolution.dispatchArgs, 'Derived from the completed resolver model-axis result.'),
1718
1806
  effort: reportControl(providerResolution.effortAxis, providerResolution.dispatchArgs, 'Derived from the completed resolver effort-axis result.'),
@@ -1800,6 +1888,8 @@ export function createProjectDispatchCeilingCommand(overrides = {}) {
1800
1888
  .addOption(new Option('--ceiling-tier <tier>', 'Invocation-only named maximum tier; never persists configuration or project state').choices([...VALID_DISPATCH_MATRIX_TIERS]))
1801
1889
  .option('--candidate-model <model>', 'Exact configured implementer candidate model beneath the named ceiling')
1802
1890
  .option('--candidate-effort <effort>', 'Exact configured Codex candidate effort paired with --candidate-model')
1891
+ .option('--task-class <class>', `Provider-neutral task classification provenance: ${TASK_CLASSES.join(', ')}`)
1892
+ .option('--task-effort <effort>', 'Codex-only task effort classification provenance; does not select a candidate')
1803
1893
  .option('--escalation-level <level>', 'Ordered route entry to select; 0 is the floor and higher values advance through escalation targets')
1804
1894
  .option('--project-path <path>', 'Read project-state policy from an explicit project path')
1805
1895
  .option('--preflight', 'Treat unresolved non-interactive resolution as an implementation block')
@@ -0,0 +1,8 @@
1
+ import type { DispatchNotice } from '../providers/identity/dispatch-report.js';
2
+ type TerminalReviewerNoticeSource = 'bundled-recommendation' | 'effective-configuration' | 'runtime';
3
+ export declare function effectiveTerminalReviewerTarget(provider: string, target: unknown, selectedValue: unknown): string | null;
4
+ export declare function terminalReviewerNoticeForTarget(target: string | null | undefined, source?: TerminalReviewerNoticeSource): DispatchNotice | null;
5
+ export declare function terminalReviewerNoticesForMatrix(providers: Record<string, unknown> | null | undefined, source?: Exclude<TerminalReviewerNoticeSource, 'runtime'>): DispatchNotice[];
6
+ export declare function formatDispatchNotices(notices: DispatchNotice[]): string;
7
+ export {};
8
+ //# sourceMappingURL=dispatch-notices.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch-notices.d.ts","sourceRoot":"","sources":["../../src/config/dispatch-notices.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAE1E,KAAK,4BAA4B,GAC7B,wBAAwB,GACxB,yBAAyB,GACzB,SAAS,CAAC;AAmDd,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,OAAO,EACf,aAAa,EAAE,OAAO,GACrB,MAAM,GAAG,IAAI,CAYf;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,MAAM,GAAE,4BAAwC,GAC/C,cAAc,GAAG,IAAI,CAgBvB;AAED,wBAAgB,gCAAgC,CAC9C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EACrD,MAAM,GAAE,OAAO,CACb,4BAA4B,EAC5B,SAAS,CACkB,GAC5B,cAAc,EAAE,CAYlB;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,CAIvE"}
@@ -0,0 +1,79 @@
1
+ function isRecord(value) {
2
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
3
+ }
4
+ function candidateTarget(candidate) {
5
+ if (typeof candidate === 'string') {
6
+ return candidate;
7
+ }
8
+ if (!isRecord(candidate)) {
9
+ return null;
10
+ }
11
+ if (Array.isArray(candidate.route)) {
12
+ return candidateTarget(candidate.route.at(-1));
13
+ }
14
+ return typeof candidate.model === 'string' ? candidate.model : null;
15
+ }
16
+ function terminalTarget(providerValue) {
17
+ if (typeof providerValue === 'string' || Array.isArray(providerValue)) {
18
+ return candidateTarget(Array.isArray(providerValue) ? providerValue.at(-1) : providerValue);
19
+ }
20
+ if (!isRecord(providerValue)) {
21
+ return null;
22
+ }
23
+ const frontier = providerValue.frontier;
24
+ if (typeof frontier === 'string' || Array.isArray(frontier)) {
25
+ return candidateTarget(Array.isArray(frontier) ? frontier.at(-1) : frontier);
26
+ }
27
+ if (!isRecord(frontier)) {
28
+ return null;
29
+ }
30
+ const candidates = frontier.candidates;
31
+ if (Array.isArray(candidates)) {
32
+ return candidateTarget(candidates.at(-1));
33
+ }
34
+ return candidateTarget(frontier);
35
+ }
36
+ function isFableTarget(target) {
37
+ return /(^|[-_.])fable($|[-_.])/i.test(target);
38
+ }
39
+ export function effectiveTerminalReviewerTarget(provider, target, selectedValue) {
40
+ const routedTarget = candidateTarget(target);
41
+ if (routedTarget) {
42
+ return routedTarget;
43
+ }
44
+ if ((provider === 'claude' || provider === 'cursor') &&
45
+ typeof selectedValue === 'string') {
46
+ return selectedValue;
47
+ }
48
+ return null;
49
+ }
50
+ export function terminalReviewerNoticeForTarget(target, source = 'runtime') {
51
+ if (!target || !isFableTarget(target)) {
52
+ return null;
53
+ }
54
+ const context = source === 'bundled-recommendation'
55
+ ? 'bundled recommendation'
56
+ : source === 'effective-configuration'
57
+ ? 'effective post-adoption configuration'
58
+ : 'effective runtime resolution';
59
+ return {
60
+ code: 'terminal-reviewer-eligibility',
61
+ level: 'advisory',
62
+ message: `Terminal reviewer target ${target} in the ${context} may require model access; the organization is responsible for confirming that its applicable retention policy permits use. OAT does not determine model access or organizational retention eligibility.`,
63
+ };
64
+ }
65
+ export function terminalReviewerNoticesForMatrix(providers, source = 'effective-configuration') {
66
+ const notices = [];
67
+ for (const providerValue of Object.values(providers ?? {})) {
68
+ const notice = terminalReviewerNoticeForTarget(terminalTarget(providerValue), source);
69
+ if (notice) {
70
+ notices.push(notice);
71
+ }
72
+ }
73
+ return notices;
74
+ }
75
+ export function formatDispatchNotices(notices) {
76
+ return notices
77
+ .map((notice) => `[${notice.level}] ${notice.code}: ${notice.message}`)
78
+ .join('\n');
79
+ }
@@ -1,3 +1,4 @@
1
+ import type { DispatchNotice } from '../providers/identity/dispatch-report.js';
1
2
  import { type WorkflowManagedDispatchPolicy } from './oat-config.js';
2
3
  export type DispatchPolicyChoiceKind = 'managed-capped' | 'managed-uncapped' | 'inherit' | 'unresolved';
3
4
  export interface DispatchPolicyChoice {
@@ -6,6 +7,7 @@ export interface DispatchPolicyChoice {
6
7
  kind: DispatchPolicyChoiceKind;
7
8
  runtimePolicy: boolean;
8
9
  description: string;
10
+ notices: DispatchNotice[];
9
11
  policy?: WorkflowManagedDispatchPolicy;
10
12
  providers?: {
11
13
  codex: string;
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch-policy-options.d.ts","sourceRoot":"","sources":["../../src/config/dispatch-policy-options.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,6BAA6B,EACnC,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,wBAAwB,GAChC,gBAAgB,GAChB,kBAAkB,GAClB,SAAS,GACT,YAAY,CAAC;AAEjB,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,wBAAwB,CAAC;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,6BAA6B,CAAC;IACvC,SAAS,CAAC,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAqDD,wBAAgB,wBAAwB,IAAI,oBAAoB,EAAE,CAoBjE;AAED,wBAAgB,8BAA8B,CAAC,SAAS,SAAQ,GAAG,MAAM,CAExE;AAED,wBAAgB,6BAA6B,IAAI,MAAM,CAOtD;AAED,wBAAgB,+BAA+B,IAAI,MAAM,CASxD;AAYD,wBAAgB,mCAAmC,CACjD,OAAO,yBAA6B,GACnC,MAAM,CASR"}
1
+ {"version":3,"file":"dispatch-policy-options.d.ts","sourceRoot":"","sources":["../../src/config/dispatch-policy-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAU1E,OAAO,EAEL,KAAK,6BAA6B,EACnC,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,wBAAwB,GAChC,gBAAgB,GAChB,kBAAkB,GAClB,SAAS,GACT,YAAY,CAAC;AAEjB,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,wBAAwB,CAAC;IAC/B,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,6BAA6B,CAAC;IACvC,SAAS,CAAC,EAAE;QACV,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AA4DD,wBAAgB,wBAAwB,IAAI,oBAAoB,EAAE,CAsBjE;AAED,wBAAgB,8BAA8B,CAAC,SAAS,SAAQ,GAAG,MAAM,CAExE;AAED,wBAAgB,6BAA6B,IAAI,MAAM,CAOtD;AAED,wBAAgB,+BAA+B,IAAI,MAAM,CASxD;AAYD,wBAAgB,mCAAmC,CACjD,OAAO,yBAA6B,GACnC,MAAM,CAaR"}
@@ -1,4 +1,5 @@
1
1
  import { dispatchPolicyProviderTargets, } from './dispatch-ceiling-preset.js';
2
+ import { formatDispatchNotices, terminalReviewerNoticeForTarget, } from './dispatch-notices.js';
2
3
  import { VALID_MANAGED_DISPATCH_POLICIES, } from './oat-config.js';
3
4
  const MANAGED_POLICY_DESCRIPTIONS = {
4
5
  economy: 'Managed capped policy for lower-cost implementation and review dispatch.',
@@ -19,14 +20,17 @@ function isCappedManagedPolicy(policy) {
19
20
  }
20
21
  function managedChoice(policy) {
21
22
  if (isCappedManagedPolicy(policy)) {
23
+ const providers = dispatchPolicyProviderTargets(policy);
24
+ const terminalNotice = terminalReviewerNoticeForTarget(providers.claude, 'bundled-recommendation');
22
25
  return {
23
26
  value: policy,
24
27
  label: MANAGED_POLICY_LABELS[policy],
25
28
  kind: 'managed-capped',
26
29
  runtimePolicy: true,
27
30
  description: MANAGED_POLICY_DESCRIPTIONS[policy],
31
+ notices: terminalNotice ? [terminalNotice] : [],
28
32
  policy,
29
- providers: dispatchPolicyProviderTargets(policy),
33
+ providers,
30
34
  };
31
35
  }
32
36
  return {
@@ -35,6 +39,7 @@ function managedChoice(policy) {
35
39
  kind: 'managed-uncapped',
36
40
  runtimePolicy: true,
37
41
  description: MANAGED_POLICY_DESCRIPTIONS[policy],
42
+ notices: [],
38
43
  policy,
39
44
  };
40
45
  }
@@ -47,6 +52,7 @@ export function getDispatchPolicyChoices() {
47
52
  kind: 'inherit',
48
53
  runtimePolicy: true,
49
54
  description: 'OAT does not choose model or effort. Subagents use the current host/provider default behavior, such as parent session model, base Codex role defaults, or provider config.',
55
+ notices: [],
50
56
  },
51
57
  {
52
58
  value: 'leave-unresolved',
@@ -54,6 +60,7 @@ export function getDispatchPolicyChoices() {
54
60
  kind: 'unresolved',
55
61
  runtimePolicy: false,
56
62
  description: 'Planning records no policy as a planning/preflight deferral. Implementation preflight must block until a policy is configured or explicitly selected.',
63
+ notices: [],
57
64
  },
58
65
  ];
59
66
  }
@@ -91,6 +98,11 @@ export function renderDispatchPolicyChoicesMarkdown(choices = getDispatchPolicyC
91
98
  return [
92
99
  'Set the dispatch policy - how OAT should choose subagent model/effort controls.',
93
100
  '',
94
- ...choices.map((choice, index) => `${index + 1}. ${choice.label} - ${providerSummary(choice)}. ${choice.description}`),
101
+ ...choices.map((choice, index) => [
102
+ `${index + 1}. ${choice.label} - ${providerSummary(choice)}. ${choice.description}`,
103
+ ...(choice.notices.length > 0
104
+ ? [formatDispatchNotices(choice.notices)]
105
+ : []),
106
+ ].join('\n')),
95
107
  ].join('\n');
96
108
  }
@@ -3,6 +3,17 @@ import type { IdentityProvenance } from './provenance.js';
3
3
  import type { DispatchAction, DispatchRole, DispatchStampRecord } from './stamp.js';
4
4
  export type DispatchReportPolicyStatus = 'resolved' | 'unresolved' | 'blocked';
5
5
  export type DispatchReportPolicyMode = 'managed' | 'inherit' | null;
6
+ export type DispatchTaskClass = 'mechanical-recon' | 'intelligent-recon' | 'default-implementation' | 'hard-reasoning' | 'consequential';
7
+ export interface DispatchReportClassification {
8
+ taskClass: DispatchTaskClass | null;
9
+ preferredEffort: string | null;
10
+ source: 'caller' | 'not-reported';
11
+ }
12
+ export interface DispatchNotice {
13
+ code: 'managed-capped-selection-skipped' | 'managed-capped-classification-missing' | 'terminal-reviewer-eligibility';
14
+ level: 'warning' | 'advisory';
15
+ message: string;
16
+ }
6
17
  export interface ResolvedDispatchTargetReport {
7
18
  harness: string;
8
19
  model?: string;
@@ -47,6 +58,7 @@ export interface DispatchReportSelectionInput {
47
58
  model: string;
48
59
  effort?: string;
49
60
  } | null;
61
+ preferredValue?: string | null;
50
62
  candidateTier: WorkflowDispatchMatrixTier | null;
51
63
  candidateIndex: number | null;
52
64
  ceilingTier: WorkflowDispatchMatrixTier | null;
@@ -92,6 +104,7 @@ export interface DispatchReportV1 {
92
104
  model: string;
93
105
  effort?: string;
94
106
  } | null;
107
+ preferredValue: string | null;
95
108
  candidateTier: WorkflowDispatchMatrixTier | null;
96
109
  candidateIndex: number | null;
97
110
  ceilingTier: WorkflowDispatchMatrixTier | null;
@@ -102,6 +115,8 @@ export interface DispatchReportV1 {
102
115
  selectionBranch: string;
103
116
  cellSource: string | null;
104
117
  };
118
+ classification: DispatchReportClassification;
119
+ notices: DispatchNotice[];
105
120
  requestedControls: DispatchRequestedControls;
106
121
  configuredDefaults: DispatchConfiguredDefaults;
107
122
  gateInvocation: Readonly<DispatchGateInvocation> | null;
@@ -114,6 +129,8 @@ export interface DispatchReportInput {
114
129
  resolution: DispatchReportResolution;
115
130
  requestedControls: DispatchRequestedControls;
116
131
  configuredDefaults: DispatchConfiguredDefaults;
132
+ classification?: DispatchReportClassification;
133
+ notices?: DispatchNotice[];
117
134
  gateInvocation?: DispatchGateInvocation | null;
118
135
  runtimeIdentity?: DispatchRuntimeIdentity;
119
136
  }