@open-agent-toolkit/cli 0.2.51 → 0.2.52
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.
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/bootstrap.md +6 -2
- package/assets/docs/cli-utilities/tool-packs.md +87 -33
- package/assets/docs/provider-sync/commands.md +30 -2
- package/assets/docs/provider-sync/config.md +19 -0
- package/assets/docs/provider-sync/manifest-and-drift.md +37 -0
- package/assets/docs/provider-sync/providers.md +69 -2
- package/assets/docs/provider-sync/scope-and-surface.md +44 -0
- package/assets/docs/reference/cli-reference.md +1 -0
- package/assets/docs/reference/oat-directory-structure.md +11 -4
- package/assets/docs/workflows/projects/evidence-layers.md +110 -1
- package/assets/docs/workflows/projects/implementation-execution.md +13 -0
- package/assets/docs/workflows/projects/orchestration-model.md +18 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-dispatch-subagents/SKILL.md +57 -1
- package/assets/skills/oat-dispatch-subagents/references/record-schema.md +77 -1
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +1 -1
- package/assets/skills/oat-project-dispatch-subagents/SKILL.md +24 -1
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +11 -0
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-plan-writing/SKILL.md +12 -1
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +1 -1
- package/assets/skills/oat-project-review-provide/SKILL.md +12 -1
- package/assets/skills/oat-project-review-provide-remote/SKILL.md +12 -1
- package/dist/agents/canonical/index.d.ts +2 -0
- package/dist/agents/canonical/index.d.ts.map +1 -1
- package/dist/agents/canonical/index.js +1 -0
- package/dist/agents/canonical/resolve.d.ts +45 -0
- package/dist/agents/canonical/resolve.d.ts.map +1 -0
- package/dist/agents/canonical/resolve.js +175 -0
- package/dist/commands/decision/agents-guidance.d.ts +2 -2
- package/dist/commands/decision/agents-guidance.d.ts.map +1 -1
- package/dist/commands/decision/agents-guidance.js +1 -4
- package/dist/commands/decision/index.d.ts.map +1 -1
- package/dist/commands/decision/index.js +25 -6
- package/dist/commands/docs/init/index.d.ts +7 -1
- package/dist/commands/docs/init/index.d.ts.map +1 -1
- package/dist/commands/docs/init/index.js +53 -20
- package/dist/commands/doctor/index.d.ts +8 -2
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +157 -46
- package/dist/commands/init/index.d.ts +8 -3
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +64 -26
- package/dist/commands/init/tools/index.d.ts +12 -12
- package/dist/commands/init/tools/index.d.ts.map +1 -1
- package/dist/commands/init/tools/index.js +430 -99
- package/dist/commands/init/tools/install-state.d.ts +2 -0
- package/dist/commands/init/tools/install-state.d.ts.map +1 -1
- package/dist/commands/init/tools/install-state.js +11 -0
- package/dist/commands/init/tools/project-guidance.d.ts +49 -0
- package/dist/commands/init/tools/project-guidance.d.ts.map +1 -0
- package/dist/commands/init/tools/project-guidance.js +144 -0
- package/dist/commands/init/tools/workflows/index.d.ts +7 -0
- package/dist/commands/init/tools/workflows/index.d.ts.map +1 -1
- package/dist/commands/init/tools/workflows/index.js +160 -7
- package/dist/commands/pjm/index.d.ts.map +1 -1
- package/dist/commands/pjm/index.js +28 -3
- package/dist/commands/pjm/init.d.ts +5 -0
- package/dist/commands/pjm/init.d.ts.map +1 -1
- package/dist/commands/pjm/init.js +19 -3
- package/dist/commands/project/dispatch/index.d.ts +10 -0
- package/dist/commands/project/dispatch/index.d.ts.map +1 -0
- package/dist/commands/project/dispatch/index.js +137 -0
- package/dist/commands/project/dispatch/record.d.ts +91 -0
- package/dist/commands/project/dispatch/record.d.ts.map +1 -0
- package/dist/commands/project/dispatch/record.js +402 -0
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +2 -0
- package/dist/commands/providers/inspect/inspect.d.ts +8 -1
- package/dist/commands/providers/inspect/inspect.d.ts.map +1 -1
- package/dist/commands/providers/inspect/inspect.js +146 -26
- package/dist/commands/providers/list/list.d.ts +8 -1
- package/dist/commands/providers/list/list.d.ts.map +1 -1
- package/dist/commands/providers/list/list.js +139 -23
- package/dist/commands/providers/providers.types.d.ts +25 -1
- package/dist/commands/providers/providers.types.d.ts.map +1 -1
- package/dist/commands/providers/set/index.d.ts +9 -1
- package/dist/commands/providers/set/index.d.ts.map +1 -1
- package/dist/commands/providers/set/index.js +43 -33
- package/dist/commands/remove/skill/remove-skill.d.ts.map +1 -1
- package/dist/commands/remove/skill/remove-skill.js +11 -0
- package/dist/commands/shared/agents-md.d.ts +42 -14
- package/dist/commands/shared/agents-md.d.ts.map +1 -1
- package/dist/commands/shared/agents-md.js +364 -70
- package/dist/commands/status/index.d.ts +8 -3
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +147 -32
- package/dist/commands/sync/apply.d.ts.map +1 -1
- package/dist/commands/sync/apply.js +220 -29
- package/dist/commands/sync/dry-run.d.ts.map +1 -1
- package/dist/commands/sync/dry-run.js +30 -6
- package/dist/commands/sync/index.d.ts +17 -2
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +106 -41
- package/dist/commands/sync/sync.types.d.ts +39 -2
- package/dist/commands/sync/sync.types.d.ts.map +1 -1
- package/dist/commands/sync/sync.utils.d.ts +5 -1
- package/dist/commands/sync/sync.utils.d.ts.map +1 -1
- package/dist/commands/sync/sync.utils.js +73 -0
- package/dist/commands/tools/info/info-tool.d.ts +2 -0
- package/dist/commands/tools/info/info-tool.d.ts.map +1 -1
- package/dist/commands/tools/info/info-tool.js +34 -12
- package/dist/commands/tools/install/index.d.ts.map +1 -1
- package/dist/commands/tools/install/index.js +19 -3
- package/dist/commands/tools/list/list-tools.d.ts +2 -0
- package/dist/commands/tools/list/list-tools.d.ts.map +1 -1
- package/dist/commands/tools/list/list-tools.js +36 -7
- package/dist/commands/tools/remove/index.d.ts.map +1 -1
- package/dist/commands/tools/remove/index.js +150 -21
- package/dist/commands/tools/remove/remove-tools.d.ts +20 -0
- package/dist/commands/tools/remove/remove-tools.d.ts.map +1 -1
- package/dist/commands/tools/remove/remove-tools.js +122 -1
- package/dist/commands/tools/shared/format-pack-inventory.d.ts +19 -0
- package/dist/commands/tools/shared/format-pack-inventory.d.ts.map +1 -1
- package/dist/commands/tools/shared/format-pack-inventory.js +109 -0
- package/dist/commands/tools/shared/pack-evidence.d.ts +66 -0
- package/dist/commands/tools/shared/pack-evidence.d.ts.map +1 -0
- package/dist/commands/tools/shared/pack-evidence.js +132 -0
- package/dist/commands/tools/shared/pack-inventory.d.ts +1 -0
- package/dist/commands/tools/shared/pack-inventory.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts +44 -0
- package/dist/commands/tools/shared/pack-lifecycle-outcome.d.ts.map +1 -0
- package/dist/commands/tools/shared/pack-lifecycle-outcome.js +91 -0
- package/dist/commands/tools/update/index.d.ts.map +1 -1
- package/dist/commands/tools/update/index.js +74 -4
- package/dist/commands/tools/update/update-tools.d.ts +5 -0
- package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
- package/dist/commands/tools/update/update-tools.js +64 -2
- package/dist/config/oat-config.d.ts +5 -0
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +17 -5
- package/dist/config/user-sync-config.d.ts +1 -0
- package/dist/config/user-sync-config.d.ts.map +1 -1
- package/dist/config/user-sync-config.js +8 -0
- package/dist/drift/detector.d.ts +2 -2
- package/dist/drift/detector.d.ts.map +1 -1
- package/dist/drift/detector.js +18 -0
- package/dist/drift/strays.d.ts.map +1 -1
- package/dist/drift/strays.js +5 -0
- package/dist/engine/collection-sync.d.ts +14 -0
- package/dist/engine/collection-sync.d.ts.map +1 -0
- package/dist/engine/collection-sync.js +282 -0
- package/dist/engine/compute-plan.d.ts +8 -1
- package/dist/engine/compute-plan.d.ts.map +1 -1
- package/dist/engine/compute-plan.js +303 -12
- package/dist/engine/engine.types.d.ts +61 -0
- package/dist/engine/engine.types.d.ts.map +1 -1
- package/dist/engine/execute-plan.d.ts +22 -2
- package/dist/engine/execute-plan.d.ts.map +1 -1
- package/dist/engine/execute-plan.js +459 -27
- package/dist/engine/provider-path-safety.d.ts +1 -0
- package/dist/engine/provider-path-safety.d.ts.map +1 -1
- package/dist/engine/provider-path-safety.js +15 -0
- package/dist/engine/scanner.d.ts +2 -2
- package/dist/engine/scanner.d.ts.map +1 -1
- package/dist/engine/scanner.js +21 -4
- package/dist/fs/io.d.ts +67 -0
- package/dist/fs/io.d.ts.map +1 -1
- package/dist/fs/io.js +536 -3
- package/dist/manifest/index.d.ts +2 -2
- package/dist/manifest/index.d.ts.map +1 -1
- package/dist/manifest/index.js +1 -1
- package/dist/manifest/manager.d.ts +2 -2
- package/dist/manifest/manager.d.ts.map +1 -1
- package/dist/manifest/manager.js +20 -3
- package/dist/manifest/manifest.types.d.ts +704 -13
- package/dist/manifest/manifest.types.d.ts.map +1 -1
- package/dist/manifest/manifest.types.js +131 -15
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +41 -10
- package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/cursor/codec/sync-extension.js +41 -10
- package/dist/providers/identity/absolute-paths.d.ts +68 -0
- package/dist/providers/identity/absolute-paths.d.ts.map +1 -0
- package/dist/providers/identity/absolute-paths.js +144 -0
- package/dist/providers/identity/claude-runtime-observation.d.ts +105 -0
- package/dist/providers/identity/claude-runtime-observation.d.ts.map +1 -0
- package/dist/providers/identity/claude-runtime-observation.fixtures.d.ts +40 -0
- package/dist/providers/identity/claude-runtime-observation.fixtures.d.ts.map +1 -0
- package/dist/providers/identity/claude-runtime-observation.fixtures.js +146 -0
- package/dist/providers/identity/claude-runtime-observation.js +229 -0
- package/dist/providers/identity/codex-runtime-observation.d.ts +75 -0
- package/dist/providers/identity/codex-runtime-observation.d.ts.map +1 -0
- package/dist/providers/identity/codex-runtime-observation.fixtures.d.ts +37 -0
- package/dist/providers/identity/codex-runtime-observation.fixtures.d.ts.map +1 -0
- package/dist/providers/identity/codex-runtime-observation.fixtures.js +539 -0
- package/dist/providers/identity/codex-runtime-observation.js +255 -0
- package/dist/providers/identity/generic-dispatch-record.d.ts +313 -0
- package/dist/providers/identity/generic-dispatch-record.d.ts.map +1 -0
- package/dist/providers/identity/generic-dispatch-record.js +539 -0
- package/dist/providers/identity/oat-dispatch-record.d.ts +1964 -0
- package/dist/providers/identity/oat-dispatch-record.d.ts.map +1 -0
- package/dist/providers/identity/oat-dispatch-record.js +691 -0
- package/dist/providers/identity/runtime-observation.d.ts +100 -0
- package/dist/providers/identity/runtime-observation.d.ts.map +1 -0
- package/dist/providers/identity/runtime-observation.js +169 -0
- package/dist/providers/shared/index.d.ts +2 -0
- package/dist/providers/shared/index.d.ts.map +1 -1
- package/dist/providers/shared/index.js +1 -0
- package/dist/providers/shared/materialization-extension.d.ts +12 -0
- package/dist/providers/shared/materialization-extension.d.ts.map +1 -1
- package/dist/providers/shared/registry.d.ts +69 -0
- package/dist/providers/shared/registry.d.ts.map +1 -0
- package/dist/providers/shared/registry.js +252 -0
- package/dist/providers/shared/restart-adviser.d.ts +26 -0
- package/dist/providers/shared/restart-adviser.d.ts.map +1 -0
- package/dist/providers/shared/restart-adviser.js +96 -0
- package/dist/shared/types.d.ts +4 -0
- package/dist/shared/types.d.ts.map +1 -1
- 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"}
|