@open-agent-toolkit/cli 0.2.51 → 0.2.53

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 (218) hide show
  1. package/assets/bundle-metadata.json +1 -1
  2. package/assets/docs/cli-utilities/bootstrap.md +6 -2
  3. package/assets/docs/cli-utilities/tool-packs.md +87 -33
  4. package/assets/docs/provider-sync/commands.md +30 -2
  5. package/assets/docs/provider-sync/config.md +19 -0
  6. package/assets/docs/provider-sync/manifest-and-drift.md +37 -0
  7. package/assets/docs/provider-sync/providers.md +69 -2
  8. package/assets/docs/provider-sync/scope-and-surface.md +44 -0
  9. package/assets/docs/reference/cli-reference.md +1 -0
  10. package/assets/docs/reference/oat-directory-structure.md +11 -4
  11. package/assets/docs/workflows/projects/evidence-layers.md +110 -1
  12. package/assets/docs/workflows/projects/implementation-execution.md +13 -0
  13. package/assets/docs/workflows/projects/orchestration-model.md +18 -0
  14. package/assets/public-package-versions.json +4 -4
  15. package/assets/skills/oat-dispatch-subagents/SKILL.md +57 -1
  16. package/assets/skills/oat-dispatch-subagents/references/record-schema.md +77 -1
  17. package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
  18. package/assets/skills/oat-project-dispatch-subagents/SKILL.md +24 -1
  19. package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
  20. package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +11 -0
  21. package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
  22. package/assets/skills/oat-project-plan-writing/SKILL.md +12 -1
  23. package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
  24. package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
  25. package/assets/skills/oat-project-review-provide/SKILL.md +12 -1
  26. package/assets/skills/oat-project-review-provide-remote/SKILL.md +12 -1
  27. package/dist/agents/canonical/index.d.ts +2 -0
  28. package/dist/agents/canonical/index.d.ts.map +1 -1
  29. package/dist/agents/canonical/index.js +1 -0
  30. package/dist/agents/canonical/resolve.d.ts +45 -0
  31. package/dist/agents/canonical/resolve.d.ts.map +1 -0
  32. package/dist/agents/canonical/resolve.js +175 -0
  33. package/dist/commands/decision/agents-guidance.d.ts +2 -2
  34. package/dist/commands/decision/agents-guidance.d.ts.map +1 -1
  35. package/dist/commands/decision/agents-guidance.js +1 -4
  36. package/dist/commands/decision/index.d.ts.map +1 -1
  37. package/dist/commands/decision/index.js +25 -6
  38. package/dist/commands/docs/init/index.d.ts +7 -1
  39. package/dist/commands/docs/init/index.d.ts.map +1 -1
  40. package/dist/commands/docs/init/index.js +53 -20
  41. package/dist/commands/doctor/index.d.ts +8 -2
  42. package/dist/commands/doctor/index.d.ts.map +1 -1
  43. package/dist/commands/doctor/index.js +157 -46
  44. package/dist/commands/init/index.d.ts +8 -3
  45. package/dist/commands/init/index.d.ts.map +1 -1
  46. package/dist/commands/init/index.js +66 -28
  47. package/dist/commands/init/tools/index.d.ts +12 -12
  48. package/dist/commands/init/tools/index.d.ts.map +1 -1
  49. package/dist/commands/init/tools/index.js +430 -99
  50. package/dist/commands/init/tools/install-state.d.ts +2 -0
  51. package/dist/commands/init/tools/install-state.d.ts.map +1 -1
  52. package/dist/commands/init/tools/install-state.js +11 -0
  53. package/dist/commands/init/tools/project-guidance.d.ts +49 -0
  54. package/dist/commands/init/tools/project-guidance.d.ts.map +1 -0
  55. package/dist/commands/init/tools/project-guidance.js +144 -0
  56. package/dist/commands/init/tools/workflows/index.d.ts +7 -0
  57. package/dist/commands/init/tools/workflows/index.d.ts.map +1 -1
  58. package/dist/commands/init/tools/workflows/index.js +160 -7
  59. package/dist/commands/pjm/index.d.ts.map +1 -1
  60. package/dist/commands/pjm/index.js +28 -3
  61. package/dist/commands/pjm/init.d.ts +5 -0
  62. package/dist/commands/pjm/init.d.ts.map +1 -1
  63. package/dist/commands/pjm/init.js +19 -3
  64. package/dist/commands/project/dispatch/index.d.ts +10 -0
  65. package/dist/commands/project/dispatch/index.d.ts.map +1 -0
  66. package/dist/commands/project/dispatch/index.js +137 -0
  67. package/dist/commands/project/dispatch/record.d.ts +91 -0
  68. package/dist/commands/project/dispatch/record.d.ts.map +1 -0
  69. package/dist/commands/project/dispatch/record.js +402 -0
  70. package/dist/commands/project/index.d.ts.map +1 -1
  71. package/dist/commands/project/index.js +2 -0
  72. package/dist/commands/providers/inspect/inspect.d.ts +8 -1
  73. package/dist/commands/providers/inspect/inspect.d.ts.map +1 -1
  74. package/dist/commands/providers/inspect/inspect.js +146 -26
  75. package/dist/commands/providers/list/list.d.ts +8 -1
  76. package/dist/commands/providers/list/list.d.ts.map +1 -1
  77. package/dist/commands/providers/list/list.js +139 -23
  78. package/dist/commands/providers/providers.types.d.ts +25 -1
  79. package/dist/commands/providers/providers.types.d.ts.map +1 -1
  80. package/dist/commands/providers/set/index.d.ts +9 -1
  81. package/dist/commands/providers/set/index.d.ts.map +1 -1
  82. package/dist/commands/providers/set/index.js +43 -33
  83. package/dist/commands/remove/skill/remove-skill.d.ts.map +1 -1
  84. package/dist/commands/remove/skill/remove-skill.js +11 -0
  85. package/dist/commands/shared/agents-md.d.ts +42 -14
  86. package/dist/commands/shared/agents-md.d.ts.map +1 -1
  87. package/dist/commands/shared/agents-md.js +364 -70
  88. package/dist/commands/status/index.d.ts +8 -3
  89. package/dist/commands/status/index.d.ts.map +1 -1
  90. package/dist/commands/status/index.js +149 -37
  91. package/dist/commands/sync/apply.d.ts.map +1 -1
  92. package/dist/commands/sync/apply.js +220 -29
  93. package/dist/commands/sync/dry-run.d.ts.map +1 -1
  94. package/dist/commands/sync/dry-run.js +30 -6
  95. package/dist/commands/sync/index.d.ts +17 -2
  96. package/dist/commands/sync/index.d.ts.map +1 -1
  97. package/dist/commands/sync/index.js +108 -43
  98. package/dist/commands/sync/sync.types.d.ts +39 -2
  99. package/dist/commands/sync/sync.types.d.ts.map +1 -1
  100. package/dist/commands/sync/sync.utils.d.ts +5 -1
  101. package/dist/commands/sync/sync.utils.d.ts.map +1 -1
  102. package/dist/commands/sync/sync.utils.js +73 -0
  103. package/dist/commands/tools/info/info-tool.d.ts +2 -0
  104. package/dist/commands/tools/info/info-tool.d.ts.map +1 -1
  105. package/dist/commands/tools/info/info-tool.js +34 -12
  106. package/dist/commands/tools/install/index.d.ts.map +1 -1
  107. package/dist/commands/tools/install/index.js +19 -3
  108. package/dist/commands/tools/list/list-tools.d.ts +2 -0
  109. package/dist/commands/tools/list/list-tools.d.ts.map +1 -1
  110. package/dist/commands/tools/list/list-tools.js +36 -7
  111. package/dist/commands/tools/remove/index.d.ts.map +1 -1
  112. package/dist/commands/tools/remove/index.js +150 -21
  113. package/dist/commands/tools/remove/remove-tools.d.ts +20 -0
  114. package/dist/commands/tools/remove/remove-tools.d.ts.map +1 -1
  115. package/dist/commands/tools/remove/remove-tools.js +122 -1
  116. package/dist/commands/tools/shared/format-pack-inventory.d.ts +19 -0
  117. package/dist/commands/tools/shared/format-pack-inventory.d.ts.map +1 -1
  118. package/dist/commands/tools/shared/format-pack-inventory.js +109 -0
  119. package/dist/commands/tools/shared/pack-evidence.d.ts +66 -0
  120. package/dist/commands/tools/shared/pack-evidence.d.ts.map +1 -0
  121. package/dist/commands/tools/shared/pack-evidence.js +132 -0
  122. package/dist/commands/tools/shared/pack-inventory.d.ts +1 -0
  123. package/dist/commands/tools/shared/pack-inventory.d.ts.map +1 -1
  124. package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts +44 -0
  125. package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts.map +1 -0
  126. package/dist/commands/tools/shared/pack-lifecycle-outcome.js +91 -0
  127. package/dist/commands/tools/update/index.d.ts.map +1 -1
  128. package/dist/commands/tools/update/index.js +74 -4
  129. package/dist/commands/tools/update/update-tools.d.ts +5 -0
  130. package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
  131. package/dist/commands/tools/update/update-tools.js +64 -2
  132. package/dist/config/oat-config.d.ts +5 -0
  133. package/dist/config/oat-config.d.ts.map +1 -1
  134. package/dist/config/oat-config.js +17 -5
  135. package/dist/config/user-sync-config.d.ts +1 -0
  136. package/dist/config/user-sync-config.d.ts.map +1 -1
  137. package/dist/config/user-sync-config.js +8 -0
  138. package/dist/drift/detector.d.ts +2 -2
  139. package/dist/drift/detector.d.ts.map +1 -1
  140. package/dist/drift/detector.js +18 -0
  141. package/dist/drift/strays.d.ts.map +1 -1
  142. package/dist/drift/strays.js +5 -0
  143. package/dist/engine/collection-sync.d.ts +14 -0
  144. package/dist/engine/collection-sync.d.ts.map +1 -0
  145. package/dist/engine/collection-sync.js +282 -0
  146. package/dist/engine/compute-plan.d.ts +8 -1
  147. package/dist/engine/compute-plan.d.ts.map +1 -1
  148. package/dist/engine/compute-plan.js +303 -12
  149. package/dist/engine/engine.types.d.ts +61 -0
  150. package/dist/engine/engine.types.d.ts.map +1 -1
  151. package/dist/engine/execute-plan.d.ts +22 -2
  152. package/dist/engine/execute-plan.d.ts.map +1 -1
  153. package/dist/engine/execute-plan.js +459 -27
  154. package/dist/engine/index.d.ts +1 -1
  155. package/dist/engine/index.d.ts.map +1 -1
  156. package/dist/engine/index.js +1 -1
  157. package/dist/engine/provider-path-safety.d.ts +1 -0
  158. package/dist/engine/provider-path-safety.d.ts.map +1 -1
  159. package/dist/engine/provider-path-safety.js +15 -0
  160. package/dist/engine/scanner.d.ts +9 -2
  161. package/dist/engine/scanner.d.ts.map +1 -1
  162. package/dist/engine/scanner.js +58 -4
  163. package/dist/fs/io.d.ts +67 -0
  164. package/dist/fs/io.d.ts.map +1 -1
  165. package/dist/fs/io.js +536 -3
  166. package/dist/manifest/index.d.ts +2 -2
  167. package/dist/manifest/index.d.ts.map +1 -1
  168. package/dist/manifest/index.js +1 -1
  169. package/dist/manifest/manager.d.ts +2 -2
  170. package/dist/manifest/manager.d.ts.map +1 -1
  171. package/dist/manifest/manager.js +20 -3
  172. package/dist/manifest/manifest.types.d.ts +704 -13
  173. package/dist/manifest/manifest.types.d.ts.map +1 -1
  174. package/dist/manifest/manifest.types.js +131 -15
  175. package/dist/providers/codex/codec/sync-extension.d.ts +1 -1
  176. package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
  177. package/dist/providers/codex/codec/sync-extension.js +48 -17
  178. package/dist/providers/cursor/codec/sync-extension.d.ts +1 -1
  179. package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -1
  180. package/dist/providers/cursor/codec/sync-extension.js +52 -23
  181. package/dist/providers/identity/absolute-paths.d.ts +68 -0
  182. package/dist/providers/identity/absolute-paths.d.ts.map +1 -0
  183. package/dist/providers/identity/absolute-paths.js +144 -0
  184. package/dist/providers/identity/claude-runtime-observation.d.ts +105 -0
  185. package/dist/providers/identity/claude-runtime-observation.d.ts.map +1 -0
  186. package/dist/providers/identity/claude-runtime-observation.fixtures.d.ts +40 -0
  187. package/dist/providers/identity/claude-runtime-observation.fixtures.d.ts.map +1 -0
  188. package/dist/providers/identity/claude-runtime-observation.fixtures.js +146 -0
  189. package/dist/providers/identity/claude-runtime-observation.js +229 -0
  190. package/dist/providers/identity/codex-runtime-observation.d.ts +75 -0
  191. package/dist/providers/identity/codex-runtime-observation.d.ts.map +1 -0
  192. package/dist/providers/identity/codex-runtime-observation.fixtures.d.ts +37 -0
  193. package/dist/providers/identity/codex-runtime-observation.fixtures.d.ts.map +1 -0
  194. package/dist/providers/identity/codex-runtime-observation.fixtures.js +539 -0
  195. package/dist/providers/identity/codex-runtime-observation.js +255 -0
  196. package/dist/providers/identity/generic-dispatch-record.d.ts +313 -0
  197. package/dist/providers/identity/generic-dispatch-record.d.ts.map +1 -0
  198. package/dist/providers/identity/generic-dispatch-record.js +539 -0
  199. package/dist/providers/identity/oat-dispatch-record.d.ts +1964 -0
  200. package/dist/providers/identity/oat-dispatch-record.d.ts.map +1 -0
  201. package/dist/providers/identity/oat-dispatch-record.js +691 -0
  202. package/dist/providers/identity/runtime-observation.d.ts +100 -0
  203. package/dist/providers/identity/runtime-observation.d.ts.map +1 -0
  204. package/dist/providers/identity/runtime-observation.js +169 -0
  205. package/dist/providers/shared/index.d.ts +2 -0
  206. package/dist/providers/shared/index.d.ts.map +1 -1
  207. package/dist/providers/shared/index.js +1 -0
  208. package/dist/providers/shared/materialization-extension.d.ts +12 -0
  209. package/dist/providers/shared/materialization-extension.d.ts.map +1 -1
  210. package/dist/providers/shared/registry.d.ts +69 -0
  211. package/dist/providers/shared/registry.d.ts.map +1 -0
  212. package/dist/providers/shared/registry.js +252 -0
  213. package/dist/providers/shared/restart-adviser.d.ts +26 -0
  214. package/dist/providers/shared/restart-adviser.d.ts.map +1 -0
  215. package/dist/providers/shared/restart-adviser.js +96 -0
  216. package/dist/shared/types.d.ts +4 -0
  217. package/dist/shared/types.d.ts.map +1 -1
  218. package/package.json +2 -2
@@ -0,0 +1,255 @@
1
+ import { observationIdentifier as observedValue } from './oat-dispatch-record.js';
2
+ /**
3
+ * Codex rollout metadata parsing.
4
+ *
5
+ * Field paths here are taken from captured Codex 0.152.1 rollouts, not from
6
+ * assumption; see `codex-runtime-observation.fixtures.ts` for the sanitized
7
+ * captures the tests run against.
8
+ *
9
+ * Four accepted paths are UNVERIFIED against any captured rollout and appear
10
+ * zero times in the operator's local corpus (1,596 rollouts spanning cli_version
11
+ * 0.142.4-0.152.x, as of 2026-09-02, on the capturing operator's machine): `turn_context.service_tier`,
12
+ * `turn_context.serviceTier`, `turn_context.reasoning_effort`, and
13
+ * `session_meta.request_id`. They are retained as forward-compatible readers
14
+ * and all fail closed to `null`, so no Codex rollout observed to date reports a
15
+ * service tier, and Codex request correlation is caller-asserted in practice.
16
+ * They are labelled here for the same reason `CLAUDE_INIT_KEYS` is labelled:
17
+ * an unverified path must not read as a captured one. An earlier revision of this parser read
18
+ * `payload.parent_id` and `payload.role`, which Codex does not emit, so every
19
+ * subagent was misreported as a root with no role while hand-written fixtures
20
+ * agreed with the parser instead of with the world.
21
+ *
22
+ * The parser reads session and turn metadata only. Entries are classified by
23
+ * their `type` discriminator alone, and the payload of any entry outside
24
+ * {@link CODEX_METADATA_ENTRY_TYPES} is never touched, so conversation content,
25
+ * instructions, and tool output cannot be reached from here. Every extracted
26
+ * value is a short provider identifier validated against a closed shape before
27
+ * it can become durable evidence.
28
+ *
29
+ * Everything this module produces is per-run, non-authoritative corroboration.
30
+ * A failed or partial parse yields `not-reported`; it never falls back to the
31
+ * configured invocation, so a requested value cannot masquerade as an
32
+ * observation.
33
+ */
34
+ /** Entry types whose payloads are metadata rather than conversation content. */
35
+ export const CODEX_METADATA_ENTRY_TYPES = [
36
+ 'session_meta',
37
+ 'turn_context',
38
+ ];
39
+ export const CODEX_OBSERVATION_SOURCE = 'codex-rollout-metadata';
40
+ const MAX_AGENT_PATH_LENGTH = 1024;
41
+ const MAX_AGENT_PATH_SEGMENTS = 64;
42
+ function isRecord(value) {
43
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
44
+ }
45
+ function nonNegativeInteger(value) {
46
+ return typeof value === 'number' && Number.isInteger(value) && value >= 0
47
+ ? value
48
+ : null;
49
+ }
50
+ function metadataEntryType(entry) {
51
+ if (!isRecord(entry))
52
+ return null;
53
+ const type = entry.type;
54
+ return typeof type === 'string' &&
55
+ CODEX_METADATA_ENTRY_TYPES.includes(type)
56
+ ? type
57
+ : null;
58
+ }
59
+ function metadataPayload(entry) {
60
+ const payload = entry.payload;
61
+ return isRecord(payload) ? payload : null;
62
+ }
63
+ /**
64
+ * `source` is either a plain string for a user-started session (`exec`, `cli`,
65
+ * `vscode`) or a tagged object for a spawned one. Only the tagged object form
66
+ * carries spawn metadata.
67
+ */
68
+ function threadSpawn(payload) {
69
+ const source = payload.source;
70
+ if (!isRecord(source))
71
+ return null;
72
+ const subagent = source.subagent;
73
+ if (!isRecord(subagent))
74
+ return null;
75
+ const spawn = subagent.thread_spawn;
76
+ return isRecord(spawn) ? spawn : null;
77
+ }
78
+ /**
79
+ * Depth implied by `agent_path`, whose first segment is the root. Used only to
80
+ * corroborate a declared depth; it is never stored and never stands alone.
81
+ */
82
+ function agentPathDepth(value) {
83
+ if (typeof value !== 'string')
84
+ return null;
85
+ if (value.length === 0 || value.length > MAX_AGENT_PATH_LENGTH)
86
+ return null;
87
+ const segments = value.split('/').filter((segment) => segment.length > 0);
88
+ if (segments.length === 0 || segments.length > MAX_AGENT_PATH_SEGMENTS) {
89
+ return null;
90
+ }
91
+ return segments.length - 1;
92
+ }
93
+ function sessionFrame(payload) {
94
+ const spawn = threadSpawn(payload);
95
+ return {
96
+ id: observedValue(payload.id),
97
+ parentThreadId: observedValue(payload.parent_thread_id) ??
98
+ observedValue(spawn?.parent_thread_id),
99
+ forkedFromId: observedValue(payload.forked_from_id),
100
+ threadSource: observedValue(payload.thread_source),
101
+ subagentSource: spawn !== null,
102
+ declaredDepth: nonNegativeInteger(spawn?.depth),
103
+ agentPathSegments: agentPathDepth(payload.agent_path) ?? agentPathDepth(spawn?.agent_path),
104
+ role: observedValue(payload.agent_role) ?? observedValue(spawn?.agent_role),
105
+ // UNVERIFIED path; Codex declares no OAT request id in any capture.
106
+ requestId: observedValue(payload.request_id),
107
+ historyStartOrdinal: nonNegativeInteger(payload.subagent_history_start_ordinal),
108
+ };
109
+ }
110
+ /**
111
+ * A session is a child when it says so, when it carries spawn metadata, or when
112
+ * it names a parent thread. Root is the absence of all three — never the
113
+ * presence of a `session_id`, which on a subagent holds the *root's* id and
114
+ * would classify every child as a root.
115
+ */
116
+ function isChildSession(frame) {
117
+ return (frame.threadSource === 'subagent' ||
118
+ frame.subagentSource ||
119
+ frame.parentThreadId !== null);
120
+ }
121
+ /**
122
+ * Resolve lineage for the applicable session.
123
+ *
124
+ * The provider-declared `depth` is authoritative: it is a fact the runtime
125
+ * states about itself, so it is used rather than re-derived. When `agent_path`
126
+ * is also present the two are reconciled, and a disagreement yields
127
+ * `depth-unknown` rather than a choice between two contradictory sources. The
128
+ * parent-thread chain walk is only a fallback for a child that declares no
129
+ * depth, and a parent named but absent from this rollout stays `depth-unknown`.
130
+ */
131
+ function childLineage(frame, byId) {
132
+ if (!isChildSession(frame))
133
+ return 'root';
134
+ if (frame.declaredDepth !== null) {
135
+ if (frame.agentPathSegments !== null &&
136
+ frame.agentPathSegments !== frame.declaredDepth) {
137
+ return 'depth-unknown';
138
+ }
139
+ return frame.declaredDepth === 0 ? 'root' : `depth-${frame.declaredDepth}`;
140
+ }
141
+ if (frame.parentThreadId === null)
142
+ return 'depth-unknown';
143
+ let depth = 0;
144
+ let current = frame;
145
+ const visited = new Set();
146
+ while (current.parentThreadId !== null) {
147
+ if (current.id !== null) {
148
+ if (visited.has(current.id))
149
+ return 'depth-unknown';
150
+ visited.add(current.id);
151
+ }
152
+ const parent = byId.get(current.parentThreadId);
153
+ depth += 1;
154
+ if (!parent || depth > MAX_AGENT_PATH_SEGMENTS)
155
+ return 'depth-unknown';
156
+ current = parent;
157
+ }
158
+ return `depth-${depth}`;
159
+ }
160
+ /**
161
+ * Select the turn contexts that belong to the applicable session.
162
+ *
163
+ * A subagent rollout embeds its parent's history, including the parent's turn
164
+ * context. `subagent_history_start_ordinal` marks where the session's own
165
+ * records begin, which is how a depth-1 rollout is kept from reporting its
166
+ * parent's model. Confirmed against the captured depth-1 rollout, whose
167
+ * embedded parent turn context sits below that ordinal and whose own turn
168
+ * context sits above it.
169
+ */
170
+ function applicableTurns(turns, historyStartOrdinal) {
171
+ if (historyStartOrdinal === null)
172
+ return turns;
173
+ const own = turns.filter((turn) => turn.ordinal !== null && turn.ordinal >= historyStartOrdinal);
174
+ return own.length > 0 ? own : turns;
175
+ }
176
+ /**
177
+ * Extract the applicable child's metadata from Codex rollout entries.
178
+ *
179
+ * The applicable session is the *first* `session_meta`: a rollout's own header
180
+ * is written at ordinal 0, and any embedded parent history follows it.
181
+ */
182
+ export function extractCodexRuntimeMetadata(entries) {
183
+ if (!Array.isArray(entries))
184
+ return null;
185
+ const frames = [];
186
+ const turns = [];
187
+ for (const entry of entries) {
188
+ // Classification is by discriminator alone. A conversation entry's payload
189
+ // is never read.
190
+ const type = metadataEntryType(entry);
191
+ if (type === null)
192
+ continue;
193
+ const record = entry;
194
+ const payload = metadataPayload(record);
195
+ if (payload === null)
196
+ continue;
197
+ if (type === 'session_meta') {
198
+ frames.push(sessionFrame(payload));
199
+ continue;
200
+ }
201
+ turns.push({
202
+ ordinal: nonNegativeInteger(record.ordinal),
203
+ model: observedValue(payload.model),
204
+ effort: observedValue(payload.effort) ??
205
+ observedValue(payload.reasoning_effort),
206
+ serviceTier: observedValue(payload.service_tier) ??
207
+ observedValue(payload.serviceTier),
208
+ });
209
+ }
210
+ const applicable = frames[0];
211
+ if (!applicable)
212
+ return null;
213
+ const byId = new Map();
214
+ for (const frame of frames) {
215
+ if (frame.id !== null && !byId.has(frame.id))
216
+ byId.set(frame.id, frame);
217
+ }
218
+ let model = null;
219
+ let effort = null;
220
+ let serviceTier = null;
221
+ for (const turn of applicableTurns(turns, applicable.historyStartOrdinal)) {
222
+ model = turn.model ?? model;
223
+ effort = turn.effort ?? effort;
224
+ serviceTier = turn.serviceTier ?? serviceTier;
225
+ }
226
+ return {
227
+ childLineage: childLineage(applicable, byId),
228
+ role: applicable.role,
229
+ model,
230
+ effort,
231
+ serviceTier,
232
+ requestId: applicable.requestId,
233
+ threadSource: applicable.threadSource,
234
+ forkedFromId: applicable.forkedFromId,
235
+ };
236
+ }
237
+ /**
238
+ * Neutral observation facts for the cross-provider projection.
239
+ *
240
+ * Nothing of the rollout's own shape escapes this module: the caller receives
241
+ * only the closed fact set owned by `runtime-observation.ts`.
242
+ */
243
+ export function observeCodexRuntimeFacts(entries) {
244
+ const metadata = extractCodexRuntimeMetadata(entries);
245
+ if (metadata === null)
246
+ return null;
247
+ return {
248
+ lineage: metadata.childLineage,
249
+ role: metadata.role,
250
+ model: metadata.model,
251
+ effort: metadata.effort,
252
+ serviceTier: metadata.serviceTier,
253
+ correlation: metadata.requestId,
254
+ };
255
+ }
@@ -0,0 +1,313 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Whole-record ceiling, applied at every parse entry point so no combination
4
+ * of individually legal fields can produce an unbounded journal revision.
5
+ */
6
+ export declare function assertBoundedDispatchRecordSize(value: unknown): void;
7
+ export declare const genericDispatchRecordSchema: z.ZodEffects<z.ZodObject<{
8
+ request_id: z.ZodString;
9
+ caller: z.ZodString;
10
+ scope: z.ZodString;
11
+ objective: z.ZodString;
12
+ action: z.ZodString;
13
+ role_name: z.ZodString;
14
+ role_class: z.ZodString;
15
+ provider: z.ZodString;
16
+ dispatch_context: z.ZodString;
17
+ dispatch_policy: z.ZodOptional<z.ZodNullable<z.ZodString>>;
18
+ dispatch_ceiling: z.ZodOptional<z.ZodNullable<z.ZodString>>;
19
+ catalog_snapshot: z.ZodObject<{
20
+ id: z.ZodString;
21
+ source: z.ZodString;
22
+ observed_at: z.ZodString;
23
+ }, "strict", z.ZodTypeAny, {
24
+ id: string;
25
+ source: string;
26
+ observed_at: string;
27
+ }, {
28
+ id: string;
29
+ source: string;
30
+ observed_at: string;
31
+ }>;
32
+ authority: z.ZodString;
33
+ role_selector: z.ZodNullable<z.ZodString>;
34
+ model_selector: z.ZodNullable<z.ZodString>;
35
+ model_selector_granularity: z.ZodNullable<z.ZodString>;
36
+ effort_selector: z.ZodNullable<z.ZodString>;
37
+ reasoning_mode_selector: z.ZodOptional<z.ZodNullable<z.ZodString>>;
38
+ service_tier_selector: z.ZodOptional<z.ZodNullable<z.ZodString>>;
39
+ guidance_reference: z.ZodOptional<z.ZodString>;
40
+ guidance_version: z.ZodOptional<z.ZodString>;
41
+ guidance_verified_at: z.ZodOptional<z.ZodString>;
42
+ guidance_status: z.ZodOptional<z.ZodEnum<["fresh", "review-required", "stale"]>>;
43
+ selection_source: z.ZodEnum<["native-default", "policy-resolved", "explicit-user"]>;
44
+ candidates_considered: z.ZodArray<z.ZodString, "many">;
45
+ selection_reason: z.ZodEnum<["native-catalog", "native-catalog-unsatisfying", "pre-start-rejection", "inherit", "gate-target"]>;
46
+ selected_route: z.ZodString;
47
+ deadline_seconds: z.ZodNumber;
48
+ retry_limit: z.ZodNumber;
49
+ payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
50
+ launch_status: z.ZodEnum<["planned", "accepted", "blocked-before-start"]>;
51
+ child_outcome: z.ZodNullable<z.ZodString>;
52
+ configured_invocation_evidence: z.ZodArray<z.ZodUnknown, "many">;
53
+ runtime_confirmation: z.ZodString;
54
+ diagnostics: z.ZodArray<z.ZodString, "many">;
55
+ continuation_events: z.ZodArray<z.ZodUnknown, "many">;
56
+ fallback: z.ZodOptional<z.ZodObject<{
57
+ mode: z.ZodString;
58
+ target: z.ZodOptional<z.ZodString>;
59
+ allow_below_task_class_floor: z.ZodOptional<z.ZodBoolean>;
60
+ }, "strict", z.ZodTypeAny, {
61
+ mode: string;
62
+ target?: string | undefined;
63
+ allow_below_task_class_floor?: boolean | undefined;
64
+ }, {
65
+ mode: string;
66
+ target?: string | undefined;
67
+ allow_below_task_class_floor?: boolean | undefined;
68
+ }>>;
69
+ task_class: z.ZodOptional<z.ZodEnum<["mechanical-recon", "intelligent-recon", "default-implementation", "hard-reasoning", "consequential"]>>;
70
+ model_class_floor: z.ZodOptional<z.ZodString>;
71
+ classification_source: z.ZodOptional<z.ZodLiteral<"caller">>;
72
+ classification_reason: z.ZodOptional<z.ZodString>;
73
+ floor_satisfaction: z.ZodOptional<z.ZodEnum<["satisfied", "unsatisfied"]>>;
74
+ authorization_scope: z.ZodOptional<z.ZodString>;
75
+ expected_output: z.ZodOptional<z.ZodString>;
76
+ verification_evidence: z.ZodOptional<z.ZodString>;
77
+ escalate_when: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
78
+ }, "strict", z.ZodTypeAny, {
79
+ request_id: string;
80
+ caller: string;
81
+ scope: string;
82
+ objective: string;
83
+ action: string;
84
+ role_name: string;
85
+ role_class: string;
86
+ provider: string;
87
+ dispatch_context: string;
88
+ dispatch_policy?: string | null | undefined;
89
+ dispatch_ceiling?: string | null | undefined;
90
+ catalog_snapshot: {
91
+ id: string;
92
+ source: string;
93
+ observed_at: string;
94
+ };
95
+ authority: string;
96
+ role_selector: string | null;
97
+ model_selector: string | null;
98
+ model_selector_granularity: string | null;
99
+ effort_selector: string | null;
100
+ reasoning_mode_selector?: string | null | undefined;
101
+ service_tier_selector?: string | null | undefined;
102
+ guidance_reference?: string | undefined;
103
+ guidance_version?: string | undefined;
104
+ guidance_verified_at?: string | undefined;
105
+ guidance_status?: "fresh" | "review-required" | "stale" | undefined;
106
+ selection_source: "explicit-user" | "native-default" | "policy-resolved";
107
+ candidates_considered: string[];
108
+ selection_reason: "gate-target" | "inherit" | "native-catalog" | "native-catalog-unsatisfying" | "pre-start-rejection";
109
+ selected_route: string;
110
+ deadline_seconds: number;
111
+ retry_limit: number;
112
+ payload: Record<string, unknown>;
113
+ launch_status: "accepted" | "blocked-before-start" | "planned";
114
+ child_outcome: string | null;
115
+ configured_invocation_evidence: unknown[];
116
+ runtime_confirmation: string;
117
+ diagnostics: string[];
118
+ continuation_events: unknown[];
119
+ fallback?: {
120
+ mode: string;
121
+ target?: string | undefined;
122
+ allow_below_task_class_floor?: boolean | undefined;
123
+ } | undefined;
124
+ task_class?: "consequential" | "default-implementation" | "hard-reasoning" | "intelligent-recon" | "mechanical-recon" | undefined;
125
+ model_class_floor?: string | undefined;
126
+ classification_source?: "caller" | undefined;
127
+ classification_reason?: string | undefined;
128
+ floor_satisfaction?: "satisfied" | "unsatisfied" | undefined;
129
+ authorization_scope?: string | undefined;
130
+ expected_output?: string | undefined;
131
+ verification_evidence?: string | undefined;
132
+ escalate_when?: string[] | undefined;
133
+ }, {
134
+ request_id: string;
135
+ caller: string;
136
+ scope: string;
137
+ objective: string;
138
+ action: string;
139
+ role_name: string;
140
+ role_class: string;
141
+ provider: string;
142
+ dispatch_context: string;
143
+ dispatch_policy?: string | null | undefined;
144
+ dispatch_ceiling?: string | null | undefined;
145
+ catalog_snapshot: {
146
+ id: string;
147
+ source: string;
148
+ observed_at: string;
149
+ };
150
+ authority: string;
151
+ role_selector: string | null;
152
+ model_selector: string | null;
153
+ model_selector_granularity: string | null;
154
+ effort_selector: string | null;
155
+ reasoning_mode_selector?: string | null | undefined;
156
+ service_tier_selector?: string | null | undefined;
157
+ guidance_reference?: string | undefined;
158
+ guidance_version?: string | undefined;
159
+ guidance_verified_at?: string | undefined;
160
+ guidance_status?: "fresh" | "review-required" | "stale" | undefined;
161
+ selection_source: "explicit-user" | "native-default" | "policy-resolved";
162
+ candidates_considered: string[];
163
+ selection_reason: "gate-target" | "inherit" | "native-catalog" | "native-catalog-unsatisfying" | "pre-start-rejection";
164
+ selected_route: string;
165
+ deadline_seconds: number;
166
+ retry_limit: number;
167
+ payload: Record<string, unknown>;
168
+ launch_status: "accepted" | "blocked-before-start" | "planned";
169
+ child_outcome: string | null;
170
+ configured_invocation_evidence: unknown[];
171
+ runtime_confirmation: string;
172
+ diagnostics: string[];
173
+ continuation_events: unknown[];
174
+ fallback?: {
175
+ mode: string;
176
+ target?: string | undefined;
177
+ allow_below_task_class_floor?: boolean | undefined;
178
+ } | undefined;
179
+ task_class?: "consequential" | "default-implementation" | "hard-reasoning" | "intelligent-recon" | "mechanical-recon" | undefined;
180
+ model_class_floor?: string | undefined;
181
+ classification_source?: "caller" | undefined;
182
+ classification_reason?: string | undefined;
183
+ floor_satisfaction?: "satisfied" | "unsatisfied" | undefined;
184
+ authorization_scope?: string | undefined;
185
+ expected_output?: string | undefined;
186
+ verification_evidence?: string | undefined;
187
+ escalate_when?: string[] | undefined;
188
+ }>, {
189
+ request_id: string;
190
+ caller: string;
191
+ scope: string;
192
+ objective: string;
193
+ action: string;
194
+ role_name: string;
195
+ role_class: string;
196
+ provider: string;
197
+ dispatch_context: string;
198
+ dispatch_policy?: string | null | undefined;
199
+ dispatch_ceiling?: string | null | undefined;
200
+ catalog_snapshot: {
201
+ id: string;
202
+ source: string;
203
+ observed_at: string;
204
+ };
205
+ authority: string;
206
+ role_selector: string | null;
207
+ model_selector: string | null;
208
+ model_selector_granularity: string | null;
209
+ effort_selector: string | null;
210
+ reasoning_mode_selector?: string | null | undefined;
211
+ service_tier_selector?: string | null | undefined;
212
+ guidance_reference?: string | undefined;
213
+ guidance_version?: string | undefined;
214
+ guidance_verified_at?: string | undefined;
215
+ guidance_status?: "fresh" | "review-required" | "stale" | undefined;
216
+ selection_source: "explicit-user" | "native-default" | "policy-resolved";
217
+ candidates_considered: string[];
218
+ selection_reason: "gate-target" | "inherit" | "native-catalog" | "native-catalog-unsatisfying" | "pre-start-rejection";
219
+ selected_route: string;
220
+ deadline_seconds: number;
221
+ retry_limit: number;
222
+ payload: Record<string, unknown>;
223
+ launch_status: "accepted" | "blocked-before-start" | "planned";
224
+ child_outcome: string | null;
225
+ configured_invocation_evidence: unknown[];
226
+ runtime_confirmation: string;
227
+ diagnostics: string[];
228
+ continuation_events: unknown[];
229
+ fallback?: {
230
+ mode: string;
231
+ target?: string | undefined;
232
+ allow_below_task_class_floor?: boolean | undefined;
233
+ } | undefined;
234
+ task_class?: "consequential" | "default-implementation" | "hard-reasoning" | "intelligent-recon" | "mechanical-recon" | undefined;
235
+ model_class_floor?: string | undefined;
236
+ classification_source?: "caller" | undefined;
237
+ classification_reason?: string | undefined;
238
+ floor_satisfaction?: "satisfied" | "unsatisfied" | undefined;
239
+ authorization_scope?: string | undefined;
240
+ expected_output?: string | undefined;
241
+ verification_evidence?: string | undefined;
242
+ escalate_when?: string[] | undefined;
243
+ }, {
244
+ request_id: string;
245
+ caller: string;
246
+ scope: string;
247
+ objective: string;
248
+ action: string;
249
+ role_name: string;
250
+ role_class: string;
251
+ provider: string;
252
+ dispatch_context: string;
253
+ dispatch_policy?: string | null | undefined;
254
+ dispatch_ceiling?: string | null | undefined;
255
+ catalog_snapshot: {
256
+ id: string;
257
+ source: string;
258
+ observed_at: string;
259
+ };
260
+ authority: string;
261
+ role_selector: string | null;
262
+ model_selector: string | null;
263
+ model_selector_granularity: string | null;
264
+ effort_selector: string | null;
265
+ reasoning_mode_selector?: string | null | undefined;
266
+ service_tier_selector?: string | null | undefined;
267
+ guidance_reference?: string | undefined;
268
+ guidance_version?: string | undefined;
269
+ guidance_verified_at?: string | undefined;
270
+ guidance_status?: "fresh" | "review-required" | "stale" | undefined;
271
+ selection_source: "explicit-user" | "native-default" | "policy-resolved";
272
+ candidates_considered: string[];
273
+ selection_reason: "gate-target" | "inherit" | "native-catalog" | "native-catalog-unsatisfying" | "pre-start-rejection";
274
+ selected_route: string;
275
+ deadline_seconds: number;
276
+ retry_limit: number;
277
+ payload: Record<string, unknown>;
278
+ launch_status: "accepted" | "blocked-before-start" | "planned";
279
+ child_outcome: string | null;
280
+ configured_invocation_evidence: unknown[];
281
+ runtime_confirmation: string;
282
+ diagnostics: string[];
283
+ continuation_events: unknown[];
284
+ fallback?: {
285
+ mode: string;
286
+ target?: string | undefined;
287
+ allow_below_task_class_floor?: boolean | undefined;
288
+ } | undefined;
289
+ task_class?: "consequential" | "default-implementation" | "hard-reasoning" | "intelligent-recon" | "mechanical-recon" | undefined;
290
+ model_class_floor?: string | undefined;
291
+ classification_source?: "caller" | undefined;
292
+ classification_reason?: string | undefined;
293
+ floor_satisfaction?: "satisfied" | "unsatisfied" | undefined;
294
+ authorization_scope?: string | undefined;
295
+ expected_output?: string | undefined;
296
+ verification_evidence?: string | undefined;
297
+ escalate_when?: string[] | undefined;
298
+ }>;
299
+ export type GenericDispatchRecord = z.infer<typeof genericDispatchRecordSchema>;
300
+ export declare function normalizeDispatchKey(key: string): string;
301
+ export declare function isSensitiveDispatchKey(key: string): boolean;
302
+ export declare function assertNoSensitiveDispatchContent(value: unknown, path?: string): void;
303
+ /**
304
+ * The persistence-boundary path sanitizer for the generic record.
305
+ *
306
+ * NFR1 is enforced here rather than in each producer, for the same reason
307
+ * redaction became a boundary in Phase 6: a guarantee implemented as a
308
+ * per-producer obligation regresses the moment a call site is added.
309
+ */
310
+ export declare function identityFieldsOf(record: GenericDispatchRecord): Record<string, unknown>;
311
+ export declare function sanitizeDispatchRecordPaths(record: GenericDispatchRecord): GenericDispatchRecord;
312
+ export declare function parseGenericDispatchRecord(value: unknown): GenericDispatchRecord;
313
+ //# sourceMappingURL=generic-dispatch-record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-dispatch-record.d.ts","sourceRoot":"","sources":["../../../src/providers/identity/generic-dispatch-record.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA4KxB;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAOpE;AAUD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6HpC,CAAC;AAEL,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAwFhF,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAuGD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAS3D;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,OAAO,EACd,IAAI,SAAa,GAChB,IAAI,CAwBN;AAyBD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,qBAAqB,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,qBAAqB,GAC5B,qBAAqB,CAYvB;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,GACb,qBAAqB,CAavB"}