@open-agent-toolkit/cli 0.2.71 → 0.2.73

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.
@@ -48,8 +48,75 @@ function bulletLines(values, empty = 'None.') {
48
48
  : [`- ${empty}`];
49
49
  }
50
50
 
51
+ const targetAxisLabels = [
52
+ ['provider', 'provider'],
53
+ ['route', 'route'],
54
+ ['role', 'role'],
55
+ ['model', 'model'],
56
+ ['effort', 'effort'],
57
+ ['reasoningMode', 'reasoning mode'],
58
+ ['serviceTier', 'service tier'],
59
+ ];
60
+
61
+ function formatIntendedTarget(target) {
62
+ return targetAxisLabels
63
+ .map(([field, label]) => {
64
+ const value =
65
+ target[field] === null
66
+ ? 'unsupported / not independently requested'
67
+ : target[field];
68
+ return `${label}=${escapeInline(value)}`;
69
+ })
70
+ .join('; ');
71
+ }
72
+
73
+ function intendedRoutingLines(routing) {
74
+ return routing.waves.map((wave) => {
75
+ return `- **${escapeInline(wave.waveId)}** — mode=${escapeInline(wave.mode)}; class/floor=${escapeInline(wave.taskClass)}/${escapeInline(wave.classFloor)}; lanes=${wave.lanes.length}; conditional=${wave.conditional ? 'yes' : 'no'}; ${formatIntendedTarget(wave.target)}; rationale=${escapeInline(wave.selectionReason)}`;
76
+ });
77
+ }
78
+
79
+ function conditionalOutcomeLines(manifest, routing) {
80
+ const outcomesById = new Map(
81
+ (manifest.conditionOutcomes ?? []).map((outcome) => [
82
+ outcome.conditionId,
83
+ outcome,
84
+ ]),
85
+ );
86
+ return routing.conditions.map((condition) => {
87
+ const outcome = outcomesById.get(condition.conditionId);
88
+ const evidence = outcome.evidence
89
+ .map((reference) => escapeInline(reference.path))
90
+ .join(', ');
91
+ return `- **${escapeInline(condition.conditionId)}** — ${escapeInline(condition.predicate)} → ${escapeInline(condition.destinationWaveId)}: **${escapeInline(outcome.disposition)}** — ${escapeInline(outcome.reason)}; predecessor evidence: ${evidence || 'none'}`;
92
+ });
93
+ }
94
+
95
+ function intendedRoutingSection(manifest, routing) {
96
+ return [
97
+ '',
98
+ '## Intended Routing',
99
+ '',
100
+ `- **Manifest routing version:** ${routing.sourceSchemaVersion}`,
101
+ `- **Approved authority:** ${escapeInline(routing.authority)}`,
102
+ `- **Approved limits:** ${routing.waves.length} waves; ${routing.waves.reduce((count, wave) => count + wave.lanes.length, 0)} lanes; concurrency ${routing.maxConcurrency}; deadline ${routing.deadlineSeconds}s; retries ${routing.retryLimit}`,
103
+ '- **Evidence boundary:** These are normalized approved intended targets and root-recorded condition dispositions. They are not launcher receipts or observations of native runtime identity, usage, cost, or conclusion correctness.',
104
+ '',
105
+ '### Waves',
106
+ '',
107
+ ...intendedRoutingLines(routing),
108
+ '',
109
+ '### Conditional Outcomes',
110
+ '',
111
+ ...bulletLines(
112
+ conditionalOutcomeLines(manifest, routing),
113
+ 'None declared.',
114
+ ),
115
+ ];
116
+ }
117
+
51
118
  export function renderPacketDocument(validatedRun) {
52
- const { manifest, ledger } = assertValidatedRun(validatedRun);
119
+ const { manifest, ledger, routing } = assertValidatedRun(validatedRun);
53
120
  const evidenceById = new Map(
54
121
  ledger.evidence.map((evidence) => [evidence.id, evidence]),
55
122
  );
@@ -143,6 +210,7 @@ export function renderPacketDocument(validatedRun) {
143
210
  (gap) => `**${escapeInline(gap.code)}:** ${escapeInline(gap.message)}`,
144
211
  ),
145
212
  ),
213
+ ...intendedRoutingSection(manifest, routing),
146
214
  '',
147
215
  '## Provenance',
148
216
  '',