@open-agent-toolkit/cli 0.3.9 → 0.3.11

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 (193) hide show
  1. package/README.md +2 -1
  2. package/assets/bundle-metadata.json +1 -1
  3. package/assets/config/dispatch-matrix-recommendation.json +6 -6
  4. package/assets/docs/cli-utilities/configuration.md +12 -8
  5. package/assets/docs/cli-utilities/meta.json +13 -0
  6. package/assets/docs/cli-utilities/tool-packs.md +8 -2
  7. package/assets/docs/cli-utilities/workflow-gates.md +14 -1
  8. package/assets/docs/contributing/code.md +8 -2
  9. package/assets/docs/contributing/documentation.md +7 -1
  10. package/assets/docs/contributing/meta.json +15 -0
  11. package/assets/docs/contributing/updating-model-guidance.md +34 -6
  12. package/assets/docs/contributing/verifying-cursor-pins.md +38 -9
  13. package/assets/docs/docs-tooling/add-docs-to-a-repo.md +14 -5
  14. package/assets/docs/docs-tooling/commands.md +26 -8
  15. package/assets/docs/docs-tooling/meta.json +4 -0
  16. package/assets/docs/docs-tooling/workflows.md +2 -2
  17. package/assets/docs/guide/meta.json +4 -0
  18. package/assets/docs/meta.json +14 -0
  19. package/assets/docs/provider-sync/instruction-sync.md +8 -0
  20. package/assets/docs/provider-sync/meta.json +11 -0
  21. package/assets/docs/provider-sync/providers.md +4 -4
  22. package/assets/docs/provider-sync/scope-and-surface.md +3 -4
  23. package/assets/docs/reference/cli-reference.md +5 -2
  24. package/assets/docs/reference/docs-index-contract.md +22 -6
  25. package/assets/docs/reference/file-locations.md +7 -2
  26. package/assets/docs/reference/index.md +1 -1
  27. package/assets/docs/reference/meta.json +10 -0
  28. package/assets/docs/reference/troubleshooting.md +41 -6
  29. package/assets/docs/workflows/ideas/meta.json +4 -0
  30. package/assets/docs/workflows/meta.json +4 -0
  31. package/assets/docs/workflows/projects/cursor-cloud.md +8 -3
  32. package/assets/docs/workflows/projects/dispatch-ceiling.md +21 -14
  33. package/assets/docs/workflows/projects/evidence-layers.md +6 -8
  34. package/assets/docs/workflows/projects/implementation-execution.md +34 -5
  35. package/assets/docs/workflows/projects/lifecycle.md +7 -1
  36. package/assets/docs/workflows/projects/meta.json +25 -0
  37. package/assets/docs/workflows/projects/orchestration-model.md +5 -6
  38. package/assets/docs/workflows/skills/meta.json +10 -0
  39. package/assets/docs/workflows/skills/recon.md +28 -3
  40. package/assets/public-package-versions.json +4 -4
  41. package/assets/skills/oat-cursor-cloud-projects/SKILL.md +30 -16
  42. package/assets/skills/oat-dispatch-subagents/SKILL.md +4 -12
  43. package/assets/skills/oat-dispatch-subagents/references/managed-claude-example.json +1 -1
  44. package/assets/skills/oat-dispatch-subagents/references/provider-codex.md +51 -0
  45. package/assets/skills/oat-dispatch-subagents/references/provider-cursor.md +5 -2
  46. package/assets/skills/oat-dispatch-subagents/references/record-schema.md +8 -7
  47. package/assets/skills/oat-docs-analyze/SKILL.md +28 -3
  48. package/assets/skills/oat-docs-apply/SKILL.md +3 -3
  49. package/assets/skills/oat-docs-authoring/SKILL.md +1 -1
  50. package/assets/skills/oat-docs-authoring/references/oat-fumadocs-contract.md +5 -2
  51. package/assets/skills/oat-docs-bootstrap/SKILL.md +4 -3
  52. package/assets/skills/oat-docs-bootstrap/assets/AGENTS.md.template +3 -3
  53. package/assets/skills/oat-pjm-decision/SKILL.md +3 -2
  54. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +4 -4
  55. package/assets/skills/oat-project-complete/SKILL.md +47 -2
  56. package/assets/skills/oat-project-design/SKILL.md +10 -6
  57. package/assets/skills/oat-project-discover/SKILL.md +3 -3
  58. package/assets/skills/oat-project-dispatch-subagents/SKILL.md +3 -10
  59. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +4 -4
  60. package/assets/skills/oat-project-implement/SKILL.md +1 -1
  61. package/assets/skills/oat-project-implement/references/completion-and-closeout.md +135 -3
  62. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +8 -10
  63. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +4 -4
  64. package/assets/skills/oat-project-implement/references/plan-and-resume.md +1 -1
  65. package/assets/skills/oat-project-import-plan/SKILL.md +3 -3
  66. package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +4 -4
  67. package/assets/skills/oat-project-new/SKILL.md +3 -3
  68. package/assets/skills/oat-project-next/SKILL.md +50 -7
  69. package/assets/skills/oat-project-plan/SKILL.md +4 -4
  70. package/assets/skills/oat-project-plan-writing/SKILL.md +4 -4
  71. package/assets/skills/oat-project-pr-final/SKILL.md +11 -1
  72. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +4 -4
  73. package/assets/skills/oat-project-promote-spec-driven/SKILL.md +2 -2
  74. package/assets/skills/oat-project-quick-start/SKILL.md +12 -8
  75. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +4 -4
  76. package/assets/skills/oat-project-retro/SKILL.md +6 -3
  77. package/assets/skills/oat-project-review-provide/SKILL.md +2 -2
  78. package/assets/skills/oat-project-review-provide-remote/SKILL.md +2 -2
  79. package/assets/skills/oat-project-spec/SKILL.md +3 -3
  80. package/assets/skills/oat-project-summary/SKILL.md +22 -3
  81. package/assets/skills/oat-repo-improve/SKILL.md +2 -2
  82. package/assets/skills/recon/SKILL.md +24 -3
  83. package/assets/skills/recon/references/packet-contract.md +36 -6
  84. package/assets/skills/recon/references/profiles.md +3 -0
  85. package/assets/skills/recon/references/worker-contract.md +16 -3
  86. package/assets/skills/recon/scripts/create-review-brief.mjs +17 -86
  87. package/assets/skills/recon/scripts/lib/contracts.mjs +158 -41
  88. package/assets/skills/recon/scripts/lib/review-binding.mjs +123 -0
  89. package/assets/skills/recon/scripts/lib/routing.mjs +5 -2
  90. package/assets/skills/recon/scripts/reconcile-ledger.mjs +18 -7
  91. package/assets/skills/recon/scripts/render-packet.mjs +93 -1
  92. package/assets/skills/recon/scripts/validate-packet.mjs +119 -88
  93. package/assets/skills/subagent-orchestration/SKILL.md +1 -1
  94. package/assets/skills/subagent-orchestration/references/evidence-and-refresh.md +20 -8
  95. package/assets/skills/subagent-orchestration/references/provider-claude.md +25 -12
  96. package/assets/skills/subagent-orchestration/references/provider-codex.md +27 -18
  97. package/assets/skills/subagent-orchestration/references/provider-cursor.md +40 -10
  98. package/assets/templates/state.md +1 -0
  99. package/dist/commands/backlog/new.d.ts +2 -2
  100. package/dist/commands/backlog/new.d.ts.map +1 -1
  101. package/dist/commands/backlog/new.js +2 -2
  102. package/dist/commands/decision/new.d.ts +2 -2
  103. package/dist/commands/decision/new.d.ts.map +1 -1
  104. package/dist/commands/decision/new.js +2 -2
  105. package/dist/commands/docs/nav/contents.d.ts +9 -0
  106. package/dist/commands/docs/nav/contents.d.ts.map +1 -1
  107. package/dist/commands/docs/nav/contents.js +7 -2
  108. package/dist/commands/docs/nav/fumadocs.d.ts +51 -0
  109. package/dist/commands/docs/nav/fumadocs.d.ts.map +1 -0
  110. package/dist/commands/docs/nav/fumadocs.js +301 -0
  111. package/dist/commands/docs/nav/sync.d.ts +31 -1
  112. package/dist/commands/docs/nav/sync.d.ts.map +1 -1
  113. package/dist/commands/docs/nav/sync.js +163 -6
  114. package/dist/commands/index.d.ts.map +1 -1
  115. package/dist/commands/index.js +2 -0
  116. package/dist/commands/instructions/instructions.utils.d.ts +19 -0
  117. package/dist/commands/instructions/instructions.utils.d.ts.map +1 -1
  118. package/dist/commands/instructions/instructions.utils.js +89 -17
  119. package/dist/commands/instructions/sync/sync.d.ts.map +1 -1
  120. package/dist/commands/instructions/sync/sync.js +49 -2
  121. package/dist/commands/pjm/init.d.ts.map +1 -1
  122. package/dist/commands/pjm/init.js +2 -2
  123. package/dist/commands/project/closeout-check/closeout-invariant.d.ts +97 -0
  124. package/dist/commands/project/closeout-check/closeout-invariant.d.ts.map +1 -0
  125. package/dist/commands/project/closeout-check/closeout-invariant.js +301 -0
  126. package/dist/commands/project/closeout-check/index.d.ts +38 -0
  127. package/dist/commands/project/closeout-check/index.d.ts.map +1 -0
  128. package/dist/commands/project/closeout-check/index.js +117 -0
  129. package/dist/commands/project/complete-state/index.d.ts +4 -0
  130. package/dist/commands/project/complete-state/index.d.ts.map +1 -1
  131. package/dist/commands/project/complete-state/index.js +11 -13
  132. package/dist/commands/project/dispatch/index.d.ts.map +1 -1
  133. package/dist/commands/project/dispatch/index.js +6 -30
  134. package/dist/commands/project/dispatch/record.d.ts +9 -18
  135. package/dist/commands/project/dispatch/record.d.ts.map +1 -1
  136. package/dist/commands/project/dispatch/record.js +15 -212
  137. package/dist/commands/project/index.d.ts.map +1 -1
  138. package/dist/commands/project/index.js +2 -0
  139. package/dist/commands/project/new/scaffold.d.ts +0 -1
  140. package/dist/commands/project/new/scaffold.d.ts.map +1 -1
  141. package/dist/commands/project/new/scaffold.js +19 -20
  142. package/dist/commands/project/promote/promote.d.ts +2 -2
  143. package/dist/commands/project/promote/promote.d.ts.map +1 -1
  144. package/dist/commands/project/promote/promote.js +13 -11
  145. package/dist/commands/shared/frontmatter.d.ts +21 -0
  146. package/dist/commands/shared/frontmatter.d.ts.map +1 -1
  147. package/dist/commands/shared/frontmatter.js +70 -4
  148. package/dist/commands/shared/template-source.d.ts +29 -0
  149. package/dist/commands/shared/template-source.d.ts.map +1 -0
  150. package/dist/commands/{pjm → shared}/template-source.js +24 -7
  151. package/dist/commands/state/generate.js +2 -2
  152. package/dist/commands/template/index.d.ts +10 -0
  153. package/dist/commands/template/index.d.ts.map +1 -0
  154. package/dist/commands/template/index.js +87 -0
  155. package/dist/commands/template/resolve.d.ts +31 -0
  156. package/dist/commands/template/resolve.d.ts.map +1 -0
  157. package/dist/commands/template/resolve.js +86 -0
  158. package/dist/fs/io.d.ts +0 -41
  159. package/dist/fs/io.d.ts.map +1 -1
  160. package/dist/fs/io.js +2 -414
  161. package/dist/providers/claude/dispatch-envelope.d.ts.map +1 -1
  162. package/dist/providers/claude/dispatch-envelope.js +1 -0
  163. package/dist/providers/claude/targets.d.ts +1 -0
  164. package/dist/providers/claude/targets.d.ts.map +1 -1
  165. package/dist/providers/claude/targets.js +3 -1
  166. package/dist/providers/codex/codec/shared.d.ts +3 -0
  167. package/dist/providers/codex/codec/shared.d.ts.map +1 -1
  168. package/dist/providers/codex/codec/shared.js +4 -0
  169. package/dist/providers/cursor/codec/catalog.d.ts +2 -2
  170. package/dist/providers/cursor/codec/catalog.d.ts.map +1 -1
  171. package/dist/providers/cursor/codec/catalog.js +45 -0
  172. package/dist/providers/cursor/codec/mapping-validation.d.ts +4 -0
  173. package/dist/providers/cursor/codec/mapping-validation.d.ts.map +1 -0
  174. package/dist/providers/cursor/codec/mapping-validation.js +25 -0
  175. package/dist/providers/cursor/codec/materialize.d.ts.map +1 -1
  176. package/dist/providers/cursor/codec/materialize.js +2 -11
  177. package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -1
  178. package/dist/providers/cursor/codec/sync-extension.js +2 -11
  179. package/dist/providers/identity/absolute-paths.d.ts +4 -13
  180. package/dist/providers/identity/absolute-paths.d.ts.map +1 -1
  181. package/dist/providers/identity/absolute-paths.js +4 -17
  182. package/dist/providers/identity/generic-dispatch-record.d.ts +1 -1
  183. package/dist/providers/identity/generic-dispatch-record.js +2 -2
  184. package/dist/providers/identity/oat-dispatch-record.d.ts +4 -357
  185. package/dist/providers/identity/oat-dispatch-record.d.ts.map +1 -1
  186. package/dist/providers/identity/oat-dispatch-record.js +4 -236
  187. package/dist/release/public-package-contract.d.ts.map +1 -1
  188. package/dist/release/public-package-contract.js +12 -4
  189. package/dist/validation/skills.d.ts.map +1 -1
  190. package/dist/validation/skills.js +32 -6
  191. package/package.json +2 -2
  192. package/dist/commands/pjm/template-source.d.ts +0 -14
  193. package/dist/commands/pjm/template-source.d.ts.map +0 -1
@@ -3,28 +3,19 @@ import { join } from 'node:path';
3
3
  import { CliError } from '../../../errors/index.js';
4
4
  import { validateRealPathWithinScope } from '../../../fs/paths.js';
5
5
  import YAML from 'yaml';
6
+ import { assertApprovedCursorModelPinMapping } from './mapping-validation.js';
6
7
  import { buildCursorMaterializedRoleName, isOatManagedCursorRoleFile, normalizeCursorRoleName, renderCursorManagedComments, } from './shared.js';
7
8
  const CURSOR_AGENT_DISCOVERY_DIRECTORIES = [
8
9
  '.cursor/agents',
9
10
  '.claude/agents',
10
11
  '.codex/agents',
11
12
  ];
12
- function assertApprovedMapping(mapping) {
13
- if (mapping.gateEvidence.gate !== 'g01' ||
14
- mapping.gateEvidence.disposition !== 'approved' ||
15
- !mapping.gateEvidence.probeName.trim()) {
16
- throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: mapping-specific gate g01 approval is required.`);
17
- }
18
- if (!/\[[^\]]+\]$/.test(mapping.frontmatterModel)) {
19
- throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: frontmatter model must include a non-empty bracket segment.`);
20
- }
21
- }
22
13
  function optionalCursorBoolean(agent, field) {
23
14
  const value = field === 'readonly' ? agent.readonly : agent.frontmatter[field];
24
15
  return typeof value === 'boolean' ? value : undefined;
25
16
  }
26
17
  export function materializeCursorAgent({ agent, mapping, owner, }) {
27
- assertApprovedMapping(mapping);
18
+ assertApprovedCursorModelPinMapping(mapping);
28
19
  const roleName = buildCursorMaterializedRoleName({
29
20
  agentName: agent.name,
30
21
  ladderModelId: mapping.ladderModelId,
@@ -1 +1 @@
1
- {"version":3,"file":"sync-extension.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/sync-extension.ts"],"names":[],"mappings":"AAqBA,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAIvB,OAAO,EAIL,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EACnC,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,WAAW,CAAC;AAMnB,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,wBAAyB,SAAQ,wBAAwB,CACxE,QAAQ,EACR,qBAAqB,CACtB;IACC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,6BAA8B,SAAQ,6BAA6B,CAClF,QAAQ,EACR,qBAAqB,CACtB;IACC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,eAAe,EAAE,CAAC;IACjC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB,CAC9D,QAAQ,EACR,qBAAqB,EACrB,2BAA2B,CAC5B;IACC,UAAU,EAAE,6BAA6B,EAAE,CAAC;CAC7C;AAED,MAAM,MAAM,0BAA0B,GAAG,0BAA0B,CAAC;AAQpE,MAAM,WAAW,kCAAkC;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACjD,gBAAgB,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACrD;AAiWD,wBAAsB,iCAAiC,CACrD,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,EAClC,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAChC,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,mBAAmB,CAAC,CAmH9B;AA6DD,wBAAsB,+BAA+B,CACnD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,0BAA0B,CAAC,CA4DrC;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAE5E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,GAAG;IACnE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB,CAEA;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,mBAAmB,GACxB,wBAAwB,EAAE,CAM5B;AAED,eAAO,MAAM,8BAA8B,EAAE,wBAAwB,CACnE,mBAAmB,EACnB,sBAAsB,CAAC,kCAAkC,CAAC,CAY3D,CAAC"}
1
+ {"version":3,"file":"sync-extension.d.ts","sourceRoot":"","sources":["../../../../src/providers/cursor/codec/sync-extension.ts"],"names":[],"mappings":"AAqBA,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,eAAe,CAAC;AAIvB,OAAO,EAIL,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,EACnC,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAIL,KAAK,qBAAqB,EAC3B,MAAM,WAAW,CAAC;AAOnB,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,UAAU,CAAC;AAElB,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,wBAAyB,SAAQ,wBAAwB,CACxE,QAAQ,EACR,qBAAqB,CACtB;IACC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,6BAA8B,SAAQ,6BAA6B,CAClF,QAAQ,EACR,qBAAqB,CACtB;IACC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,EAAE,eAAe,EAAE,CAAC;IACjC,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB,CAC9D,QAAQ,EACR,qBAAqB,EACrB,2BAA2B,CAC5B;IACC,UAAU,EAAE,6BAA6B,EAAE,CAAC;CAC7C;AAED,MAAM,MAAM,0BAA0B,GAAG,0BAA0B,CAAC;AAQpE,MAAM,WAAW,kCAAkC;IACjD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACjD,gBAAgB,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACrD;AAgVD,wBAAsB,iCAAiC,CACrD,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,cAAc,EAAE,EAClC,qBAAqB,CAAC,EAAE,MAAM,EAAE,EAChC,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,mBAAmB,CAAC,CAmH9B;AA6DD,wBAAsB,+BAA+B,CACnD,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,0BAA0B,CAAC,CA4DrC;AAED,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAE5E;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,GAAG;IACnE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;CACjB,CAEA;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,mBAAmB,GACxB,wBAAwB,EAAE,CAM5B;AAED,eAAO,MAAM,8BAA8B,EAAE,wBAAwB,CACnE,mBAAmB,EACnB,sBAAsB,CAAC,kCAAkC,CAAC,CAY3D,CAAC"}
@@ -12,6 +12,7 @@ import { validateRealPathWithinScope } from '../../../fs/paths.js';
12
12
  import { hasMaterializationChanges, summarizeMaterializationPlan, toMaterializationOperations, } from '../../shared/index.js';
13
13
  import YAML from 'yaml';
14
14
  import { CURSOR_MODEL_PIN_MAPPINGS, SUPPORTED_CURSOR_BASE_ROLES, SUPPORTED_CURSOR_ROLE_TARGETS, } from './catalog.js';
15
+ import { assertApprovedCursorModelPinMapping } from './mapping-validation.js';
15
16
  import { assertNoUnmanagedCursorAgentCollisions, materializeCursorAgent, } from './materialize.js';
16
17
  import { isOatManagedCursorRoleFile, readOatManagedCursorRoleOwner, readOatManagedCursorRoleName, } from './shared.js';
17
18
  const OWNER_PRECEDENCE = {
@@ -29,22 +30,12 @@ function isUserCursorScope(scopeRoot, options) {
29
30
  return Boolean(options.userConfigDir &&
30
31
  resolve(scopeRoot) === resolve(options.userConfigDir, '..'));
31
32
  }
32
- function assertApprovedMapping(mapping) {
33
- if (mapping.gateEvidence.gate !== 'g01' ||
34
- mapping.gateEvidence.disposition !== 'approved' ||
35
- !mapping.gateEvidence.probeName.trim()) {
36
- throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: mapping-specific gate g01 approval is required.`);
37
- }
38
- if (!/\[[^\]]+\]$/.test(mapping.frontmatterModel)) {
39
- throw new CliError(`Cannot materialize Cursor model ${mapping.ladderModelId}: approved mapping must include a non-empty bracket segment.`);
40
- }
41
- }
42
33
  function addCursorTarget(ladderModelId, owner, source, targets, mappings) {
43
34
  const mapping = mappings.find((candidate) => candidate.ladderModelId === ladderModelId);
44
35
  if (!mapping) {
45
36
  throw new CliError(`Cannot materialize unknown Cursor model mapping "${ladderModelId}" from ${source}. Add mapping-specific gate g01 evidence before using this target.`);
46
37
  }
47
- assertApprovedMapping(mapping);
38
+ assertApprovedCursorModelPinMapping(mapping);
48
39
  const existing = targets.get(ladderModelId);
49
40
  if (!existing ||
50
41
  OWNER_PRECEDENCE[owner] >= OWNER_PRECEDENCE[existing.owner]) {
@@ -11,9 +11,10 @@
11
11
  *
12
12
  * Before this module there were two independent notions of
13
13
  * "looks like a path": a regex inside `redactDispatchMessage`, which only
14
- * scrubbed error text, and nothing at all on the persistence boundary. The
15
- * durable journal is committed to a shared repository, so a username or local
16
- * layout that reaches it is in git history permanently.
14
+ * scrubbed error text, and nothing at all on the record boundary. A validated
15
+ * record is printed verbatim and a caller may copy it into a committed
16
+ * artifact, so a username or local layout that reaches it can land in git
17
+ * history permanently.
17
18
  *
18
19
  * Message redaction and record sanitization now share this detector, because
19
20
  * the gap between them is precisely what allowed paths to be scrubbed from a
@@ -68,14 +69,4 @@ export declare function collectAbsolutePathViolations(value: unknown, path: stri
68
69
  * corrupt the identifier it claims to be.
69
70
  */
70
71
  export declare function assertNoAbsolutePath(value: unknown, path: string): void;
71
- /**
72
- * The publication postcondition, scoped to what is actually guaranteed.
73
- *
74
- * It hard-fails on a path in an identity or control field, which is the half of
75
- * NFR1 that is enforceable. It deliberately does **not** claim that no absolute
76
- * path remains anywhere in the revision: prose redaction is best-effort, and a
77
- * postcondition that asserted more than the sanitizer can deliver would be a
78
- * false guarantee rather than a check.
79
- */
80
- export declare function assertJournalIdentityHasNoAbsolutePath(identityFields: Readonly<Record<string, unknown>>): void;
81
72
  //# sourceMappingURL=absolute-paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"absolute-paths.d.ts","sourceRoot":"","sources":["../../../src/providers/identity/absolute-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AA6BH,6EAA6E;AAC7E,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAM/C;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AAYD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOzD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CActD;AAED,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,GACX,sBAAsB,EAAE,CAoB1B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAGvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,sCAAsC,CACpD,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAChD,IAAI,CAIN"}
1
+ {"version":3,"file":"absolute-paths.d.ts","sourceRoot":"","sources":["../../../src/providers/identity/absolute-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AA6BH,6EAA6E;AAC7E,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAM/C;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AAYD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOzD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CActD;AAED,4EAA4E;AAC5E,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,MAAM,GACX,sBAAsB,EAAE,CAoB1B;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAGvE"}
@@ -11,9 +11,10 @@
11
11
  *
12
12
  * Before this module there were two independent notions of
13
13
  * "looks like a path": a regex inside `redactDispatchMessage`, which only
14
- * scrubbed error text, and nothing at all on the persistence boundary. The
15
- * durable journal is committed to a shared repository, so a username or local
16
- * layout that reaches it is in git history permanently.
14
+ * scrubbed error text, and nothing at all on the record boundary. A validated
15
+ * record is printed verbatim and a caller may copy it into a committed
16
+ * artifact, so a username or local layout that reaches it can land in git
17
+ * history permanently.
17
18
  *
18
19
  * Message redaction and record sanitization now share this detector, because
19
20
  * the gap between them is precisely what allowed paths to be scrubbed from a
@@ -141,17 +142,3 @@ export function assertNoAbsolutePath(value, path) {
141
142
  if (first)
142
143
  throw new Error(first.message);
143
144
  }
144
- /**
145
- * The publication postcondition, scoped to what is actually guaranteed.
146
- *
147
- * It hard-fails on a path in an identity or control field, which is the half of
148
- * NFR1 that is enforceable. It deliberately does **not** claim that no absolute
149
- * path remains anywhere in the revision: prose redaction is best-effort, and a
150
- * postcondition that asserted more than the sanitizer can deliver would be a
151
- * false guarantee rather than a check.
152
- */
153
- export function assertJournalIdentityHasNoAbsolutePath(identityFields) {
154
- for (const [field, value] of Object.entries(identityFields)) {
155
- assertNoAbsolutePath(value, `<journal>.${field}`);
156
- }
157
- }
@@ -2,7 +2,7 @@ import { z } from 'zod';
2
2
  import { type DispatchValueViolation } from './absolute-paths.js';
3
3
  /**
4
4
  * Whole-record ceiling, applied at every parse entry point so no combination
5
- * of individually legal fields can produce an unbounded journal revision.
5
+ * of individually legal fields can produce an unbounded record.
6
6
  */
7
7
  export declare function assertBoundedDispatchRecordSize(value: unknown): void;
8
8
  /**
@@ -34,7 +34,7 @@ const optionalSelector = identifier().nullable();
34
34
  /**
35
35
  * Every generic container field is validated as a closed, bounded JSON
36
36
  * projection so prompt bodies, transcripts, and other free-form content cannot
37
- * ride into a durable journal through an unbounded `unknown` value. `payload`
37
+ * ride into a validated record through an unbounded `unknown` value. `payload`
38
38
  * carries configured sandbox/tool controls; `candidates_considered`,
39
39
  * `configured_invocation_evidence`, `continuation_events`, `diagnostics`, and
40
40
  * `escalate_when` carry short references and identifiers, not narrative text.
@@ -134,7 +134,7 @@ function projectionAggregateViolation(value, path) {
134
134
  }
135
135
  /**
136
136
  * Whole-record ceiling, applied at every parse entry point so no combination
137
- * of individually legal fields can produce an unbounded journal revision.
137
+ * of individually legal fields can produce an unbounded record.
138
138
  */
139
139
  export function assertBoundedDispatchRecordSize(value) {
140
140
  const bytes = publishedByteLength(value);
@@ -8,60 +8,6 @@ import { type GenericDispatchRecord } from './generic-dispatch-record.js';
8
8
  */
9
9
  export declare const QUALIFYING_PRE_START_REJECTION_CODES: readonly ['native-role-unavailable', 'native-target-unavailable', 'native-selector-unsupported', 'native-catalog-unsatisfying', 'capability-unresolved-or-unsupported', 'wrapper-payload-rejected', 'wrapper-launch-refused'];
10
10
  export type QualifyingPreStartRejectionCode = (typeof QUALIFYING_PRE_START_REJECTION_CODES)[number];
11
- /**
12
- * Immutable configured controls across a fallback link.
13
- *
14
- * The rule, so a newly added generic field has a default: a field is immutable
15
- * when it describes the configured selection, the authorization for that
16
- * selection, or the evidence that justified it. A field is mutable when it
17
- * describes this record's own identity, how the work is briefed to its own
18
- * child, its own launch lifecycle, or its own child's observed behaviour. When
19
- * a new field is ambiguous, treat it as immutable — a false "controls
20
- * preserved" claim is worse than a false mismatch.
21
- *
22
- * All 46 generic fields are accounted for. The 31 immutable ones are listed
23
- * below. The 15 mutable ones, each with its reason:
24
- * - `request_id`: the fallback is a distinct request and must have its own ID.
25
- * - `caller`: the adapter layer that launches the fallback may differ.
26
- * - `objective`: a canonical-instruction fallback necessarily rebriefs the work
27
- * for a generic child rather than a resolved role.
28
- * - `role_name`, `role_selector`: the fallback deliberately targets a generic
29
- * worker; substituting the role is the whole point of the approximation, and
30
- * the resolved role identity is bound separately through `roleInstructions`.
31
- * - `candidates_considered`: the fallback evaluated a different candidate set.
32
- * - `selection_reason`: constrained separately — a fallback must declare
33
- * `pre-start-rejection`, which by definition differs from the trigger's.
34
- * - `launch_status`, `child_outcome`: each record's own lifecycle state.
35
- * - `runtime_confirmation`: observation of that record's own child. The
36
- * fallback is a different child, so equality would be a false assertion.
37
- * - `diagnostics`: per-record narration. A fallback legitimately explains why
38
- * it exists.
39
- * - `continuation_events`: continuation linkage belongs to the record that
40
- * owns the handle.
41
- * - `expected_output`, `verification_evidence`, `escalate_when`: the brief
42
- * given to this record's own child, in the same class as `objective`.
43
- *
44
- * Included even though they are evidence rather than controls, because they
45
- * record why the preserved selection was allowed:
46
- * - `configured_invocation_evidence`: names the configuration that authorized
47
- * the preserved route.
48
- * - `catalog_snapshot`: names the catalog the selection was made against.
49
- * - `guidance_reference`, `guidance_version`, `guidance_verified_at`,
50
- * `guidance_status`: name the dated model guidance behind the selection and
51
- * how fresh it was; a fallback restating `stale` as `fresh` would misstate
52
- * provenance for a preserved target.
53
- * - `classification_reason`: the rationale for `task_class`, which is itself a
54
- * compared authorization control.
55
- */
56
- export declare const IMMUTABLE_FALLBACK_CONTROL_FIELDS: readonly ["provider", "selection_source", "model_selector", "model_selector_granularity", "effort_selector", "reasoning_mode_selector", "service_tier_selector", "selected_route", "authority", "authorization_scope", "deadline_seconds", "retry_limit", "payload", "fallback", "catalog_snapshot", "configured_invocation_evidence", "guidance_reference", "guidance_version", "guidance_verified_at", "guidance_status", "dispatch_context", "dispatch_policy", "dispatch_ceiling", "scope", "action", "role_class", "task_class", "model_class_floor", "classification_source", "classification_reason", "floor_satisfaction"];
57
- /**
58
- * The mutable complement, kept executable rather than only described above so a
59
- * newly added generic field fails `covers every generic dispatch field` until
60
- * somebody records a decision for it.
61
- */
62
- export declare const MUTABLE_FALLBACK_CONTROL_FIELDS: readonly ["request_id", "caller", "objective", "role_name", "role_selector", "candidates_considered", "selection_reason", "launch_status", "child_outcome", "runtime_confirmation", "diagnostics", "continuation_events", "expected_output", "verification_evidence", "escalate_when"];
63
- export declare function canonicalEvidenceJson(value: unknown): string;
64
- export declare function configuredControlDigest(record: GenericDispatchRecord): string;
65
11
  declare const exactTargetSchema: z.ZodObject<{
66
12
  provider: z.ZodString;
67
13
  modelSelector: z.ZodNullable<z.ZodString>;
@@ -395,9 +341,10 @@ export declare function buildRuntimeObservation(input: {
395
341
  configured?: ConfiguredInvocationForObservation | null;
396
342
  }): RuntimeObservation;
397
343
  /**
398
- * The rejected trigger owns the single-fallback right. Publishing a fallback
399
- * record requires this durable claim on the trigger first, so two concurrent
400
- * callers cannot each observe "no fallback yet" and then create their own.
344
+ * Record shape only. The fallback claim and the fallback link were published
345
+ * through the removed dispatch journal; no event kind writes either now, so a
346
+ * validated record carries `fallbackClaim: null` and a `not-applicable`
347
+ * fallback. The fields stay so the validated output keeps its shape.
401
348
  */
402
349
  declare const fallbackClaimSchema: z.ZodObject<{
403
350
  fallbackRequestId: z.ZodString;
@@ -1561,304 +1508,6 @@ declare const oatDispatchEvidenceEventSchema: z.ZodDiscriminatedUnion<"kind", [z
1561
1508
  rejectedAt: string;
1562
1509
  provesNoChildStarted: true;
1563
1510
  };
1564
- }>, z.ZodObject<{
1565
- kind: z.ZodLiteral<"fallback-claim">;
1566
- requestId: z.ZodString;
1567
- source: z.ZodLiteral<"provider-wrapper">;
1568
- claim: z.ZodObject<{
1569
- fallbackRequestId: z.ZodString;
1570
- claimedAt: z.ZodString;
1571
- }, "strict", z.ZodTypeAny, {
1572
- fallbackRequestId: string;
1573
- claimedAt: string;
1574
- }, {
1575
- fallbackRequestId: string;
1576
- claimedAt: string;
1577
- }>;
1578
- }, "strict", z.ZodTypeAny, {
1579
- kind: "fallback-claim";
1580
- requestId: string;
1581
- source: "provider-wrapper";
1582
- claim: {
1583
- fallbackRequestId: string;
1584
- claimedAt: string;
1585
- };
1586
- }, {
1587
- kind: "fallback-claim";
1588
- requestId: string;
1589
- source: "provider-wrapper";
1590
- claim: {
1591
- fallbackRequestId: string;
1592
- claimedAt: string;
1593
- };
1594
- }>, z.ZodObject<{
1595
- kind: z.ZodLiteral<"fallback-link">;
1596
- requestId: z.ZodString;
1597
- source: z.ZodLiteral<"provider-wrapper">;
1598
- evidence: z.ZodObject<{
1599
- status: z.ZodLiteral<"fallback-dispatch">;
1600
- triggerRequestId: z.ZodString;
1601
- fallbackRequestId: z.ZodString;
1602
- trigger: z.ZodLiteral<"pre-start-rejection">;
1603
- fallbackReason: z.ZodString;
1604
- kind: z.ZodLiteral<"canonical-instruction-fresh-child">;
1605
- approximation: z.ZodLiteral<true>;
1606
- preservedTarget: z.ZodObject<{
1607
- provider: z.ZodString;
1608
- modelSelector: z.ZodNullable<z.ZodString>;
1609
- effortSelector: z.ZodNullable<z.ZodString>;
1610
- reasoningModeSelector: z.ZodNullable<z.ZodString>;
1611
- serviceTierSelector: z.ZodNullable<z.ZodString>;
1612
- selectedRoute: z.ZodString;
1613
- }, "strict", z.ZodTypeAny, {
1614
- provider: string;
1615
- modelSelector: string | null;
1616
- effortSelector: string | null;
1617
- reasoningModeSelector: string | null;
1618
- serviceTierSelector: string | null;
1619
- selectedRoute: string;
1620
- }, {
1621
- provider: string;
1622
- modelSelector: string | null;
1623
- effortSelector: string | null;
1624
- reasoningModeSelector: string | null;
1625
- serviceTierSelector: string | null;
1626
- selectedRoute: string;
1627
- }>;
1628
- rejection: z.ZodObject<{
1629
- code: z.ZodEffects<z.ZodString, string, string>;
1630
- rejectedAt: z.ZodString;
1631
- provesNoChildStarted: z.ZodLiteral<true>;
1632
- } & {
1633
- source: z.ZodLiteral<"provider-wrapper">;
1634
- }, "strict", z.ZodTypeAny, {
1635
- code: string;
1636
- rejectedAt: string;
1637
- provesNoChildStarted: true;
1638
- source: "provider-wrapper";
1639
- }, {
1640
- code: string;
1641
- rejectedAt: string;
1642
- provesNoChildStarted: true;
1643
- source: "provider-wrapper";
1644
- }>;
1645
- roleInstructions: z.ZodObject<{
1646
- status: z.ZodLiteral<"resolved">;
1647
- dependency: z.ZodString;
1648
- canonicalRole: z.ZodString;
1649
- tier: z.ZodEnum<["loaded", "user", "project"]>;
1650
- validation: z.ZodEnum<["direct-canonical", "exact-canonical-symlink"]>;
1651
- canonicalPath: z.ZodString;
1652
- selectedPath: z.ZodString;
1653
- roleVersion: z.ZodString;
1654
- contentDigest: z.ZodString;
1655
- candidateMisses: z.ZodArray<z.ZodObject<{
1656
- tier: z.ZodEnum<["loaded", "user", "project"]>;
1657
- candidate: z.ZodString;
1658
- outcome: z.ZodEnum<["missing", "broken-symlink", "escaping-symlink", "noncanonical-copy", "wrong-target", "invalid-role"]>;
1659
- }, "strict", z.ZodTypeAny, {
1660
- tier: "loaded" | "project" | "user";
1661
- candidate: string;
1662
- outcome: "broken-symlink" | "escaping-symlink" | "invalid-role" | "missing" | "noncanonical-copy" | "wrong-target";
1663
- }, {
1664
- tier: "loaded" | "project" | "user";
1665
- candidate: string;
1666
- outcome: "broken-symlink" | "escaping-symlink" | "invalid-role" | "missing" | "noncanonical-copy" | "wrong-target";
1667
- }>, "many">;
1668
- }, "strict", z.ZodTypeAny, {
1669
- status: "resolved";
1670
- dependency: string;
1671
- canonicalRole: string;
1672
- tier: "loaded" | "project" | "user";
1673
- validation: "direct-canonical" | "exact-canonical-symlink";
1674
- canonicalPath: string;
1675
- selectedPath: string;
1676
- roleVersion: string;
1677
- contentDigest: string;
1678
- candidateMisses: {
1679
- tier: "loaded" | "project" | "user";
1680
- candidate: string;
1681
- outcome: "broken-symlink" | "escaping-symlink" | "invalid-role" | "missing" | "noncanonical-copy" | "wrong-target";
1682
- }[];
1683
- }, {
1684
- status: "resolved";
1685
- dependency: string;
1686
- canonicalRole: string;
1687
- tier: "loaded" | "project" | "user";
1688
- validation: "direct-canonical" | "exact-canonical-symlink";
1689
- canonicalPath: string;
1690
- selectedPath: string;
1691
- roleVersion: string;
1692
- contentDigest: string;
1693
- candidateMisses: {
1694
- tier: "loaded" | "project" | "user";
1695
- candidate: string;
1696
- outcome: "broken-symlink" | "escaping-symlink" | "invalid-role" | "missing" | "noncanonical-copy" | "wrong-target";
1697
- }[];
1698
- }>;
1699
- }, "strict", z.ZodTypeAny, {
1700
- status: "fallback-dispatch";
1701
- triggerRequestId: string;
1702
- fallbackRequestId: string;
1703
- trigger: "pre-start-rejection";
1704
- fallbackReason: string;
1705
- kind: "canonical-instruction-fresh-child";
1706
- approximation: true;
1707
- preservedTarget: {
1708
- provider: string;
1709
- modelSelector: string | null;
1710
- effortSelector: string | null;
1711
- reasoningModeSelector: string | null;
1712
- serviceTierSelector: string | null;
1713
- selectedRoute: string;
1714
- };
1715
- rejection: {
1716
- code: string;
1717
- rejectedAt: string;
1718
- provesNoChildStarted: true;
1719
- source: "provider-wrapper";
1720
- };
1721
- roleInstructions: {
1722
- status: "resolved";
1723
- dependency: string;
1724
- canonicalRole: string;
1725
- tier: "loaded" | "project" | "user";
1726
- validation: "direct-canonical" | "exact-canonical-symlink";
1727
- canonicalPath: string;
1728
- selectedPath: string;
1729
- roleVersion: string;
1730
- contentDigest: string;
1731
- candidateMisses: {
1732
- tier: "loaded" | "project" | "user";
1733
- candidate: string;
1734
- outcome: "broken-symlink" | "escaping-symlink" | "invalid-role" | "missing" | "noncanonical-copy" | "wrong-target";
1735
- }[];
1736
- };
1737
- }, {
1738
- status: "fallback-dispatch";
1739
- triggerRequestId: string;
1740
- fallbackRequestId: string;
1741
- trigger: "pre-start-rejection";
1742
- fallbackReason: string;
1743
- kind: "canonical-instruction-fresh-child";
1744
- approximation: true;
1745
- preservedTarget: {
1746
- provider: string;
1747
- modelSelector: string | null;
1748
- effortSelector: string | null;
1749
- reasoningModeSelector: string | null;
1750
- serviceTierSelector: string | null;
1751
- selectedRoute: string;
1752
- };
1753
- rejection: {
1754
- code: string;
1755
- rejectedAt: string;
1756
- provesNoChildStarted: true;
1757
- source: "provider-wrapper";
1758
- };
1759
- roleInstructions: {
1760
- status: "resolved";
1761
- dependency: string;
1762
- canonicalRole: string;
1763
- tier: "loaded" | "project" | "user";
1764
- validation: "direct-canonical" | "exact-canonical-symlink";
1765
- canonicalPath: string;
1766
- selectedPath: string;
1767
- roleVersion: string;
1768
- contentDigest: string;
1769
- candidateMisses: {
1770
- tier: "loaded" | "project" | "user";
1771
- candidate: string;
1772
- outcome: "broken-symlink" | "escaping-symlink" | "invalid-role" | "missing" | "noncanonical-copy" | "wrong-target";
1773
- }[];
1774
- };
1775
- }>;
1776
- }, "strict", z.ZodTypeAny, {
1777
- kind: "fallback-link";
1778
- requestId: string;
1779
- source: "provider-wrapper";
1780
- evidence: {
1781
- status: "fallback-dispatch";
1782
- triggerRequestId: string;
1783
- fallbackRequestId: string;
1784
- trigger: "pre-start-rejection";
1785
- fallbackReason: string;
1786
- kind: "canonical-instruction-fresh-child";
1787
- approximation: true;
1788
- preservedTarget: {
1789
- provider: string;
1790
- modelSelector: string | null;
1791
- effortSelector: string | null;
1792
- reasoningModeSelector: string | null;
1793
- serviceTierSelector: string | null;
1794
- selectedRoute: string;
1795
- };
1796
- rejection: {
1797
- code: string;
1798
- rejectedAt: string;
1799
- provesNoChildStarted: true;
1800
- source: "provider-wrapper";
1801
- };
1802
- roleInstructions: {
1803
- status: "resolved";
1804
- dependency: string;
1805
- canonicalRole: string;
1806
- tier: "loaded" | "project" | "user";
1807
- validation: "direct-canonical" | "exact-canonical-symlink";
1808
- canonicalPath: string;
1809
- selectedPath: string;
1810
- roleVersion: string;
1811
- contentDigest: string;
1812
- candidateMisses: {
1813
- tier: "loaded" | "project" | "user";
1814
- candidate: string;
1815
- outcome: "broken-symlink" | "escaping-symlink" | "invalid-role" | "missing" | "noncanonical-copy" | "wrong-target";
1816
- }[];
1817
- };
1818
- };
1819
- }, {
1820
- kind: "fallback-link";
1821
- requestId: string;
1822
- source: "provider-wrapper";
1823
- evidence: {
1824
- status: "fallback-dispatch";
1825
- triggerRequestId: string;
1826
- fallbackRequestId: string;
1827
- trigger: "pre-start-rejection";
1828
- fallbackReason: string;
1829
- kind: "canonical-instruction-fresh-child";
1830
- approximation: true;
1831
- preservedTarget: {
1832
- provider: string;
1833
- modelSelector: string | null;
1834
- effortSelector: string | null;
1835
- reasoningModeSelector: string | null;
1836
- serviceTierSelector: string | null;
1837
- selectedRoute: string;
1838
- };
1839
- rejection: {
1840
- code: string;
1841
- rejectedAt: string;
1842
- provesNoChildStarted: true;
1843
- source: "provider-wrapper";
1844
- };
1845
- roleInstructions: {
1846
- status: "resolved";
1847
- dependency: string;
1848
- canonicalRole: string;
1849
- tier: "loaded" | "project" | "user";
1850
- validation: "direct-canonical" | "exact-canonical-symlink";
1851
- canonicalPath: string;
1852
- selectedPath: string;
1853
- roleVersion: string;
1854
- contentDigest: string;
1855
- candidateMisses: {
1856
- tier: "loaded" | "project" | "user";
1857
- candidate: string;
1858
- outcome: "broken-symlink" | "escaping-symlink" | "invalid-role" | "missing" | "noncanonical-copy" | "wrong-target";
1859
- }[];
1860
- };
1861
- };
1862
1511
  }>, z.ZodObject<{
1863
1512
  kind: z.ZodLiteral<"runtime-observation">;
1864
1513
  requestId: z.ZodString;
@@ -1962,8 +1611,6 @@ export declare function parsePersistedOatDispatchRecord(value: unknown): Persist
1962
1611
  export declare function augmentDispatchRecord(input: {
1963
1612
  record: GenericDispatchRecord | PersistedOatDispatchRecordV1;
1964
1613
  event: OatDispatchEvidenceEvent;
1965
- triggerRecord?: PersistedOatDispatchRecordV1;
1966
- relatedRecords?: readonly PersistedOatDispatchRecordV1[];
1967
1614
  }): PersistedOatDispatchRecordV1;
1968
1615
  export {};
1969
1616
  //# sourceMappingURL=oat-dispatch-record.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"oat-dispatch-record.d.ts","sourceRoot":"","sources":["../../../src/providers/identity/oat-dispatch-record.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oat-dispatch-record.d.ts","sourceRoot":"","sources":["../../../src/providers/identity/oat-dispatch-record.ts"],"names":[],"mappings":"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"}