@tiangong-ai/cli 0.0.26 → 0.0.28

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 (40) hide show
  1. package/AGENTS.md +2 -2
  2. package/README.md +83 -35
  3. package/dist/research/orchestration.js +38 -0
  4. package/dist/research/orchestration.js.map +1 -1
  5. package/dist/research/setup-command.js +1 -1
  6. package/dist/research/setup-command.js.map +1 -1
  7. package/dist/research/workspace/broker.d.ts +5 -0
  8. package/dist/research/workspace/broker.js +98 -9
  9. package/dist/research/workspace/broker.js.map +1 -1
  10. package/dist/research/workspace/capabilities.js +32 -11
  11. package/dist/research/workspace/capabilities.js.map +1 -1
  12. package/dist/research/workspace/credentials.d.ts +6 -1
  13. package/dist/research/workspace/credentials.js +16 -2
  14. package/dist/research/workspace/credentials.js.map +1 -1
  15. package/dist/research/workspace/executor.js +43 -3
  16. package/dist/research/workspace/executor.js.map +1 -1
  17. package/dist/research/workspace/external-skills.d.ts +31 -0
  18. package/dist/research/workspace/external-skills.js +161 -13
  19. package/dist/research/workspace/external-skills.js.map +1 -1
  20. package/dist/research/workspace/preflight.d.ts +34 -2
  21. package/dist/research/workspace/preflight.js +76 -21
  22. package/dist/research/workspace/preflight.js.map +1 -1
  23. package/dist/research/workspace/runtime.js +135 -50
  24. package/dist/research/workspace/runtime.js.map +1 -1
  25. package/dist/research/workspace/schemas.d.ts +4 -0
  26. package/dist/research/workspace/schemas.js +29 -3
  27. package/dist/research/workspace/schemas.js.map +1 -1
  28. package/dist/research/workspace/setup-catalog.d.ts +3 -2
  29. package/dist/research/workspace/setup-catalog.js +22 -1
  30. package/dist/research/workspace/setup-catalog.js.map +1 -1
  31. package/dist/research/workspace/setup-wizard.js +15 -6
  32. package/dist/research/workspace/setup-wizard.js.map +1 -1
  33. package/dist/research/workspace/setup.d.ts +4 -0
  34. package/dist/research/workspace/setup.js +84 -36
  35. package/dist/research/workspace/setup.js.map +1 -1
  36. package/dist/research/workspace/types.d.ts +2 -0
  37. package/dist/research/workspace/workspace.d.ts +2 -1
  38. package/dist/research/workspace/workspace.js +62 -13
  39. package/dist/research/workspace/workspace.js.map +1 -1
  40. package/package.json +1 -1
@@ -1,5 +1,6 @@
1
1
  import { loadCapabilityDeclarations, verifyCapabilities } from "./capabilities.js";
2
2
  import { hasPublicInternetCapability } from "./external-skills.js";
3
+ import { schemaForStage } from "./schemas.js";
3
4
  import { canonicalJson, sha256Text } from "./storage.js";
4
5
  import { loadWorkspaceConfig, verifyDoctorAttestation } from "./workspace.js";
5
6
  export const RESEARCH_AGENT_PROTOCOL_OVERHEAD_TOKENS = {
@@ -8,9 +9,11 @@ export const RESEARCH_AGENT_PROTOCOL_OVERHEAD_TOKENS = {
8
9
  };
9
10
  export const RESEARCH_ESTIMATED_BYTES_PER_TOKEN = 3;
10
11
  export const RESEARCH_MAX_REPAIR_SOURCE_BYTES = 32_000;
11
- export const RESEARCH_STRUCTURED_OUTPUT_MAX_TURNS = 2;
12
+ export const RESEARCH_CODEX_STRUCTURED_OUTPUT_MAX_TURNS = 2;
13
+ export const RESEARCH_CLAUDE_STRUCTURED_OUTPUT_MAX_TURNS = 3;
12
14
  export const RESEARCH_BROKER_MAX_TURNS = 6;
13
15
  export const RESEARCH_REPAIR_MAX_TURNS = 1;
16
+ const RESEARCH_PREFLIGHT_PROMPT_ALLOWANCE_TOKENS = 3_000;
14
17
  export async function evaluateProjectPreflight(root, question, requirements, inputPlan) {
15
18
  const config = await loadWorkspaceConfig(root);
16
19
  const capabilities = await loadCapabilityDeclarations(root);
@@ -21,6 +24,7 @@ export async function evaluateProjectPreflight(root, question, requirements, inp
21
24
  .map((capability) => ({
22
25
  id: capability.id,
23
26
  allowedHosts: capability.allowedHosts,
27
+ endpoint: capability.http?.endpoint ?? null,
24
28
  accept: capability.http?.accept ?? null,
25
29
  maxResponseBytes: capability.http?.maxResponseBytes ?? null,
26
30
  maxItems: capability.http?.maxItems ?? null,
@@ -83,7 +87,14 @@ export async function evaluateProjectPreflight(root, question, requirements, inp
83
87
  gaps.push(`package-output-repair-reservation-exceeds-${stage}:${outputAndRepairReservation}/${tokens}`);
84
88
  }
85
89
  }
86
- const embeddedStageContextReservation = config.budget.maxOutputTokens * 2;
90
+ const stageContextTokenReservations = {
91
+ analyze: config.budget.maxOutputTokens,
92
+ synthesize: config.budget.maxOutputTokens * 2,
93
+ review: config.budget.maxInputContextTokens + config.budget.maxOutputTokens * 3,
94
+ };
95
+ const producerStructuredOutputMaxTurns = researchStructuredOutputMaxTurns(config.producer);
96
+ const reviewerStructuredOutputMaxTurns = researchStructuredOutputMaxTurns(config.reviewer);
97
+ const embeddedStageContextReservation = stageContextTokenReservations.synthesize;
87
98
  if (embeddedStageContextReservation > config.budget.maxInputContextTokens) {
88
99
  gaps.push(`embedded-stage-context-reservation-exceeds-total:${embeddedStageContextReservation}/${config.budget.maxInputContextTokens}`);
89
100
  }
@@ -100,17 +111,26 @@ export async function evaluateProjectPreflight(root, question, requirements, inp
100
111
  const maxTurns = {
101
112
  discover: networkCapabilities.length
102
113
  ? RESEARCH_BROKER_MAX_TURNS
103
- : RESEARCH_STRUCTURED_OUTPUT_MAX_TURNS,
104
- analyze: RESEARCH_STRUCTURED_OUTPUT_MAX_TURNS,
105
- synthesize: RESEARCH_STRUCTURED_OUTPUT_MAX_TURNS,
106
- review: RESEARCH_STRUCTURED_OUTPUT_MAX_TURNS,
114
+ : producerStructuredOutputMaxTurns,
115
+ analyze: producerStructuredOutputMaxTurns,
116
+ synthesize: producerStructuredOutputMaxTurns,
117
+ review: reviewerStructuredOutputMaxTurns,
107
118
  repair: RESEARCH_REPAIR_MAX_TURNS,
108
119
  };
120
+ const schemaTokens = Object.fromEntries(["discover", "analyze", "synthesize", "review"].map((stage) => [
121
+ stage,
122
+ Math.ceil(Buffer.byteLength(JSON.stringify(schemaForStage(stage, null, stage === "discover" && networkCapabilities.length === 0
123
+ ? { inputOnlyProvenanceIds: inputPlan?.inputs.map((input) => input.id) ?? [] }
124
+ : {})), "utf8") / RESEARCH_ESTIMATED_BYTES_PER_TOKEN),
125
+ ]));
126
+ const capabilityDocumentationReservation = networkCapabilities.length
127
+ ? config.budget.maxInputContextTokens
128
+ : 0;
109
129
  const preCallTokenReservations = {
110
- discover: estimatedStageTokenReservation(config.producer, estimatedInputContextTokens, maxTurns.discover, config, config.budget.maxBrokerContextTokens * maxTurns.discover),
111
- analyze: estimatedStageTokenReservation(config.producer, config.budget.maxOutputTokens, RESEARCH_STRUCTURED_OUTPUT_MAX_TURNS, config),
112
- synthesize: estimatedStageTokenReservation(config.producer, config.budget.maxOutputTokens * 2, RESEARCH_STRUCTURED_OUTPUT_MAX_TURNS, config),
113
- review: estimatedStageTokenReservation(config.reviewer, estimatedInputContextTokens + config.budget.maxOutputTokens * 3 + 2_000, RESEARCH_STRUCTURED_OUTPUT_MAX_TURNS, config),
130
+ discover: estimatedStageTokenReservation(config.producer, estimatedInputContextTokens + capabilityDocumentationReservation, schemaTokens.discover, maxTurns.discover, config, config.budget.maxBrokerContextTokens * config.budget.maxBrokerCalls),
131
+ analyze: estimatedStageTokenReservation(config.producer, config.budget.maxOutputTokens, schemaTokens.analyze, producerStructuredOutputMaxTurns, config),
132
+ synthesize: estimatedStageTokenReservation(config.producer, config.budget.maxOutputTokens * 2, schemaTokens.synthesize, producerStructuredOutputMaxTurns, config),
133
+ review: estimatedStageTokenReservation(config.reviewer, stageContextTokenReservations.review, schemaTokens.review, reviewerStructuredOutputMaxTurns, config),
114
134
  };
115
135
  for (const [stage, reservation] of Object.entries(preCallTokenReservations)) {
116
136
  const configured = packageTokens[stage];
@@ -162,13 +182,18 @@ export async function evaluateProjectPreflight(root, question, requirements, inp
162
182
  maxTokens: config.budget.maxTokens,
163
183
  maxCostUsd: config.budget.maxCostUsd,
164
184
  maxWallSeconds: config.budget.maxWallSeconds,
185
+ packageMaxTokens: config.budget.packageMaxTokens,
165
186
  confirmationCostUsd: config.budget.confirmationCostUsd,
166
187
  confirmationRequired: config.budget.maxCostUsd > config.budget.confirmationCostUsd,
167
188
  estimatedMaxCostUsd,
168
189
  maxBrokerContextTokens: config.budget.maxBrokerContextTokens,
190
+ maxBrokerCalls: config.budget.maxBrokerCalls,
191
+ maxOutputTokens: config.budget.maxOutputTokens,
192
+ maxRepairTokens: config.budget.maxRepairTokens,
169
193
  estimatedInputContextTokens,
170
194
  maxInputContextTokens: config.budget.maxInputContextTokens,
171
195
  embeddedStageContextReservation,
196
+ stageContextTokenReservations,
172
197
  recommendedDiscoverOutputTokens,
173
198
  outputTokenLimitEnforcement: {
174
199
  producer: "post-execution",
@@ -201,17 +226,47 @@ export async function evaluateProjectPreflight(root, question, requirements, inp
201
226
  };
202
227
  return { ...result, preflightSha256: sha256Text(canonicalJson(result)) };
203
228
  }
204
- function estimatedStageTokenReservation(route, embeddedContextTokens, primaryMaxTurns, config, potentialToolContextTokens = 0) {
205
- const protocolOverhead = RESEARCH_AGENT_PROTOCOL_OVERHEAD_TOKENS[route.agent];
206
- const primaryPromptAndSchemaAllowance = 4_000;
207
- const primaryInput = (protocolOverhead + embeddedContextTokens + primaryPromptAndSchemaAllowance) * primaryMaxTurns;
208
- const repairInput = protocolOverhead +
209
- Math.ceil((RESEARCH_MAX_REPAIR_SOURCE_BYTES + 2_048) / RESEARCH_ESTIMATED_BYTES_PER_TOKEN);
210
- return (primaryInput +
211
- potentialToolContextTokens +
212
- config.budget.maxOutputTokens +
213
- repairInput * RESEARCH_REPAIR_MAX_TURNS +
214
- config.budget.maxRepairTokens);
229
+ export function researchStructuredOutputMaxTurns(route) {
230
+ return route.agent === "claude"
231
+ ? RESEARCH_CLAUDE_STRUCTURED_OUTPUT_MAX_TURNS
232
+ : RESEARCH_CODEX_STRUCTURED_OUTPUT_MAX_TURNS;
233
+ }
234
+ function estimatedStageTokenReservation(route, embeddedContextTokens, schemaTokens, primaryMaxTurns, config, potentialToolContextTokens = 0) {
235
+ return calculateAgentCallTokenReservation({
236
+ route,
237
+ primaryPayloadTokens: embeddedContextTokens + schemaTokens + RESEARCH_PREFLIGHT_PROMPT_ALLOWANCE_TOKENS,
238
+ repairPayloadTokens: schemaTokens +
239
+ Math.ceil((RESEARCH_MAX_REPAIR_SOURCE_BYTES + 2_048) / RESEARCH_ESTIMATED_BYTES_PER_TOKEN),
240
+ maxTurns: primaryMaxTurns,
241
+ maxOutputTokens: config.budget.maxOutputTokens,
242
+ maxToolContextTokens: potentialToolContextTokens,
243
+ maxRepairTokens: config.budget.maxRepairTokens,
244
+ reserveRepair: true,
245
+ }).totalTokens;
246
+ }
247
+ export function calculateAgentCallTokenReservation(input) {
248
+ const protocolOverhead = RESEARCH_AGENT_PROTOCOL_OVERHEAD_TOKENS[input.route.agent];
249
+ const alreadyUsedTokens = input.alreadyUsedTokens ?? 0;
250
+ const estimatedCallInputTokensPerTurn = protocolOverhead + input.primaryPayloadTokens;
251
+ const estimatedCallInputTokens = estimatedCallInputTokensPerTurn * input.maxTurns;
252
+ const potentialRepairTokens = input.reserveRepair
253
+ ? (protocolOverhead + input.repairPayloadTokens) * RESEARCH_REPAIR_MAX_TURNS +
254
+ input.maxRepairTokens
255
+ : 0;
256
+ return {
257
+ alreadyUsedTokens,
258
+ maxTurns: input.maxTurns,
259
+ estimatedCallInputTokensPerTurn,
260
+ estimatedCallInputTokens,
261
+ outputTokens: input.maxOutputTokens,
262
+ potentialToolContextTokens: input.maxToolContextTokens,
263
+ potentialRepairTokens,
264
+ totalTokens: alreadyUsedTokens +
265
+ estimatedCallInputTokens +
266
+ input.maxToolContextTokens +
267
+ input.maxOutputTokens +
268
+ potentialRepairTokens,
269
+ };
215
270
  }
216
271
  export function reservedAgentPackageCost(route, tokens, config) {
217
272
  if (!route.pricing)
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../../src/research/workspace/preflight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../../src/research/workspace/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,EAAE,2BAA2B,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAQzD,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAE9E,MAAM,CAAC,MAAM,uCAAuC,GAAwC;IAC1F,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,MAAM;CACf,CAAC;AACF,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,CAAC;AACpD,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAC;AACvD,MAAM,CAAC,MAAM,0CAA0C,GAAG,CAAC,CAAC;AAC5D,MAAM,CAAC,MAAM,2CAA2C,GAAG,CAAC,CAAC;AAC7D,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAC3C,MAAM,0CAA0C,GAAG,KAAK,CAAC;AAEzD,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAY,EACZ,QAAgB,EAChB,YAAgD,EAChD,SAA0C;IAE1C,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC/C,MAAM,YAAY,GAAG,MAAM,0BAA0B,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,sBAAsB,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,iBAAiB,GACrB,MAAM,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAC,CAAC,MAAM,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACrF,MAAM,mBAAmB,GAAG,YAAY,CAAC,YAAY;SAClD,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC;SAC3E,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACpB,EAAE,EAAE,UAAU,CAAC,EAAE;QACjB,YAAY,EAAE,UAAU,CAAC,YAAY;QACrC,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI;QAC3C,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,IAAI,IAAI;QACvC,gBAAgB,EAAE,UAAU,CAAC,IAAI,EAAE,gBAAgB,IAAI,IAAI;QAC3D,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,QAAQ,IAAI,IAAI;QAC3C,oBAAoB,EAAE,UAAU,CAAC,oBAAoB;QACrD,QAAQ,EAAE,UAAU,CAAC,QAAQ;KAC9B,CAAC,CAAC,CAAC;IACN,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC;IACrD,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7F,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAC/E,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,EAC3B,CAAC,CACF,CAAC;IACF,MAAM,mBAAmB,GACvB,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO;QAChD,CAAC,CAAC,UAAU,CACR,wBAAwB,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC;YACvE,wBAAwB,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC;YACxE,wBAAwB,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC;YAC3E,wBAAwB,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAC1E;QACH,CAAC,CAAC,IAAI,CAAC;IACX,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,MAAM,CAAC,IAAI,KAAK,qBAAqB,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACtD,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,qBAAqB,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAChG,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC7C,CAAC;IACD,IACE,MAAM,CAAC,IAAI,KAAK,qBAAqB;QACrC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EACpD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,qBAAqB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAChD,CAAC;IACD,IACE,MAAM,CAAC,IAAI,KAAK,qBAAqB;QACrC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EACtD,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,KAAK,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IACzF,IAAI,MAAM,CAAC,IAAI,KAAK,qBAAqB,IAAI,CAAC,2BAA2B,CAAC,YAAY,CAAC,EAAE,CAAC;QACxF,IAAI,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,sBAAsB,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,sBAAsB,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI,CACP,2CAA2C,gBAAgB,IAAI,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,CACzF,CAAC;IACJ,CAAC;IACD,IAAI,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QACnD,IAAI,CAAC,IAAI,CACP,0CAA0C,eAAe,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,CAC5F,CAAC;IACJ,CAAC;IACD,IAAI,mBAAmB,KAAK,IAAI,IAAI,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACnF,IAAI,CAAC,IAAI,CACP,0CAA0C,mBAAmB,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAC5F,CAAC;IACJ,CAAC;IACD,MAAM,0BAA0B,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC;IACjG,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC5D,IAAI,MAAM,GAAG,0BAA0B,EAAE,CAAC;YACxC,IAAI,CAAC,IAAI,CACP,6CAA6C,KAAK,IAAI,0BAA0B,IAAI,MAAM,EAAE,CAC7F,CAAC;QACJ,CAAC;IACH,CAAC;IACD,MAAM,6BAA6B,GAAG;QACpC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe;QACtC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,GAAG,CAAC;QAC7C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,GAAG,CAAC;KAChF,CAAC;IACF,MAAM,gCAAgC,GAAG,gCAAgC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3F,MAAM,gCAAgC,GAAG,gCAAgC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3F,MAAM,+BAA+B,GAAG,6BAA6B,CAAC,UAAU,CAAC;IACjF,IAAI,+BAA+B,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;QAC1E,IAAI,CAAC,IAAI,CACP,oDAAoD,+BAA+B,IAAI,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAC7H,CAAC;IACJ,CAAC;IACD,MAAM,+BAA+B,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,GAAG,YAAY,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAClG,IACE,MAAM,CAAC,IAAI,KAAK,qBAAqB;QACrC,+BAA+B,KAAK,IAAI;QACxC,MAAM,CAAC,MAAM,CAAC,eAAe,GAAG,+BAA+B,EAC/D,CAAC;QACD,IAAI,CAAC,IAAI,CACP,2DAA2D,MAAM,CAAC,MAAM,CAAC,eAAe,IAAI,+BAA+B,EAAE,CAC9H,CAAC;IACJ,CAAC;IACD,MAAM,2BAA2B,GAC/B,SAAS,EAAE,MAAM,CAAC,MAAM,CACtB,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EACxE,CAAC,CACF,IAAI,CAAC,CAAC;IACT,IAAI,2BAA2B,GAAG,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACtE,IAAI,CAAC,IAAI,CACP,2CAA2C,2BAA2B,IAAI,MAAM,CAAC,MAAM,CAAC,qBAAqB,EAAE,CAChH,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG;QACf,QAAQ,EAAE,mBAAmB,CAAC,MAAM;YAClC,CAAC,CAAC,yBAAyB;YAC3B,CAAC,CAAC,gCAAgC;QACpC,OAAO,EAAE,gCAAgC;QACzC,UAAU,EAAE,gCAAgC;QAC5C,MAAM,EAAE,gCAAgC;QACxC,MAAM,EAAE,yBAAyB;KAClC,CAAC;IACF,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CACpC,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAW,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACxE,KAAK;QACL,IAAI,CAAC,IAAI,CACP,MAAM,CAAC,UAAU,CACf,IAAI,CAAC,SAAS,CACZ,cAAc,CACZ,KAAK,EACL,IAAI,EACJ,KAAK,KAAK,UAAU,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC;YACtD,CAAC,CAAC,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE;YAC9E,CAAC,CAAC,EAAE,CACP,CACF,EACD,MAAM,CACP,GAAG,kCAAkC,CACvC;KACF,CAAC,CACkC,CAAC;IACvC,MAAM,kCAAkC,GAAG,mBAAmB,CAAC,MAAM;QACnE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,qBAAqB;QACrC,CAAC,CAAC,CAAC,CAAC;IACN,MAAM,wBAAwB,GAAG;QAC/B,QAAQ,EAAE,8BAA8B,CACtC,MAAM,CAAC,QAAQ,EACf,2BAA2B,GAAG,kCAAkC,EAChE,YAAY,CAAC,QAAQ,EACrB,QAAQ,CAAC,QAAQ,EACjB,MAAM,EACN,MAAM,CAAC,MAAM,CAAC,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CACpE;QACD,OAAO,EAAE,8BAA8B,CACrC,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,MAAM,CAAC,eAAe,EAC7B,YAAY,CAAC,OAAO,EACpB,gCAAgC,EAChC,MAAM,CACP;QACD,UAAU,EAAE,8BAA8B,CACxC,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,MAAM,CAAC,eAAe,GAAG,CAAC,EACjC,YAAY,CAAC,UAAU,EACvB,gCAAgC,EAChC,MAAM,CACP;QACD,MAAM,EAAE,8BAA8B,CACpC,MAAM,CAAC,QAAQ,EACf,6BAA6B,CAAC,MAAM,EACpC,YAAY,CAAC,MAAM,EACnB,gCAAgC,EAChC,MAAM,CACP;KACF,CAAC;IACF,KAAK,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC,EAAE,CAAC;QAC5E,MAAM,UAAU,GAAG,aAAa,CAAC,KAA0B,CAAC,CAAC;QAC7D,IAAI,WAAW,GAAG,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,uCAAuC,KAAK,IAAI,WAAW,IAAI,UAAU,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IACD,IAAI,YAAY,EAAE,CAAC;QACjB,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAC7E,CAAC;IACD,MAAM,MAAM,GAAG;QACb,aAAa,EAAE,CAAU;QACzB,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,cAAc,EAAE,UAAU,CAAC,QAAQ,CAAC;QACpC,oBAAoB,EAAE,YAAY;QAClC,YAAY,EAAE,mBAAmB;QACjC,SAAS,EACP,SAAS,KAAK,IAAI;YAChB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC;gBACE,MAAM,EAAE,SAAS,CAAC,MAAM;gBACxB,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;oBACvC,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,aAAa,EAAE,KAAK,CAAC,aAAa;oBAClC,YAAY,EAAE,KAAK,CAAC,YAAY;oBAChC,aAAa,EAAE,KAAK,CAAC,aAAa,IAAI,IAAI;oBAC1C,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,UAAU,EAAE,KAAK,CAAC,UAAU;oBAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,eAAe,EAAE,KAAK,CAAC,eAAe;iBACvC,CAAC,CAAC;aACJ;QACP,sBAAsB;QACtB,iBAAiB,EACf,iBAAiB,KAAK,IAAI;YACxB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC;gBACE,MAAM,EAAE,iBAAiB,CAAC,MAAM;gBAChC,MAAM,EAAE,iBAAiB,CAAC,MAAM;gBAChC,iBAAiB,EAAE,iBAAiB,CAAC,WAAW,EAAE,iBAAiB,IAAI,IAAI;gBAC3E,SAAS,EAAE,iBAAiB,CAAC,WAAW,EAAE,SAAS,IAAI,IAAI;gBAC3D,SAAS,EAAE,iBAAiB,CAAC,WAAW,EAAE,SAAS,IAAI,IAAI;aAC5D;QACP,IAAI;QACJ,MAAM,EAAE;YACN,gBAAgB;YAChB,eAAe;YACf,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,SAAS;YAClC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU;YACpC,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc;YAC5C,gBAAgB,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB;YAChD,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,mBAAmB;YACtD,oBAAoB,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB;YAClF,mBAAmB;YACnB,sBAAsB,EAAE,MAAM,CAAC,MAAM,CAAC,sBAAsB;YAC5D,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,cAAc;YAC5C,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe;YAC9C,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe;YAC9C,2BAA2B;YAC3B,qBAAqB,EAAE,MAAM,CAAC,MAAM,CAAC,qBAAqB;YAC1D,+BAA+B;YAC/B,6BAA6B;YAC7B,+BAA+B;YAC/B,2BAA2B,EAAE;gBAC3B,QAAQ,EAAE,gBAAgB;gBAC1B,QAAQ,EAAE,gBAAgB;aAC3B;YACD,wBAAwB;YACxB,QAAQ;SACT;QACD,eAAe,EAAE;YACf,QAAQ,EAAE;gBACR,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;gBAC5B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;gBAC5B,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI;gBACtC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI;gBAC5C,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBACjE,oBAAoB,EAClB,MAAM,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,gCAAgC;aACrF;YACD,QAAQ,EAAE;gBACR,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;gBAC5B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;gBAC5B,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI;gBACtC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,IAAI;gBAC5C,mBAAmB,EAAE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC;gBACjE,oBAAoB,EAClB,MAAM,CAAC,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,gCAAgC;aACrF;SACF;QACD,iBAAiB,EACf,sBAAsB,CAAC,MAAM,KAAK,UAAU;YAC5C,CAAC,MAAM,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,KAAK,CAAC;KACpB,CAAC;IACF,OAAO,EAAE,GAAG,MAAM,EAAE,eAAe,EAAE,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,KAAgC;IAC/E,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC7B,CAAC,CAAC,2CAA2C;QAC7C,CAAC,CAAC,0CAA0C,CAAC;AACjD,CAAC;AAED,SAAS,8BAA8B,CACrC,KAAiB,EACjB,qBAA6B,EAC7B,YAAoB,EACpB,eAAuB,EACvB,MAAuB,EACvB,0BAA0B,GAAG,CAAC;IAE9B,OAAO,kCAAkC,CAAC;QACxC,KAAK;QACL,oBAAoB,EAClB,qBAAqB,GAAG,YAAY,GAAG,0CAA0C;QACnF,mBAAmB,EACjB,YAAY;YACZ,IAAI,CAAC,IAAI,CAAC,CAAC,gCAAgC,GAAG,KAAK,CAAC,GAAG,kCAAkC,CAAC;QAC5F,QAAQ,EAAE,eAAe;QACzB,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe;QAC9C,oBAAoB,EAAE,0BAA0B;QAChD,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe;QAC9C,aAAa,EAAE,IAAI;KACpB,CAAC,CAAC,WAAW,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,KAUlD;IACC,MAAM,gBAAgB,GAAG,uCAAuC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpF,MAAM,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,IAAI,CAAC,CAAC;IACvD,MAAM,+BAA+B,GAAG,gBAAgB,GAAG,KAAK,CAAC,oBAAoB,CAAC;IACtF,MAAM,wBAAwB,GAAG,+BAA+B,GAAG,KAAK,CAAC,QAAQ,CAAC;IAClF,MAAM,qBAAqB,GAAG,KAAK,CAAC,aAAa;QAC/C,CAAC,CAAC,CAAC,gBAAgB,GAAG,KAAK,CAAC,mBAAmB,CAAC,GAAG,yBAAyB;YAC1E,KAAK,CAAC,eAAe;QACvB,CAAC,CAAC,CAAC,CAAC;IACN,OAAO;QACL,iBAAiB;QACjB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,+BAA+B;QAC/B,wBAAwB;QACxB,YAAY,EAAE,KAAK,CAAC,eAAe;QACnC,0BAA0B,EAAE,KAAK,CAAC,oBAAoB;QACtD,qBAAqB;QACrB,WAAW,EACT,iBAAiB;YACjB,wBAAwB;YACxB,KAAK,CAAC,oBAAoB;YAC1B,KAAK,CAAC,eAAe;YACrB,qBAAqB;KACxB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,KAAiB,EACjB,MAAc,EACd,MAAuC;IAEvC,IAAI,CAAC,KAAK,CAAC,OAAO;QAAE,OAAO,CAAC,CAAC;IAC7B,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAClC,MAAM,EACN,MAAM,CAAC,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,CAC9D,CAAC;IACF,MAAM,kBAAkB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CACxB,KAAK,CAAC,OAAO,CAAC,wBAAwB,EACtC,KAAK,CAAC,OAAO,CAAC,8BAA8B,CAC7C,CAAC;IACF,OAAO,CACL,CAAC,kBAAkB,GAAG,SAAS;QAC7B,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,yBAAyB,CAAC;QAChE,SAAS,CACV,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAc,EACd,YAAyC,EACzC,SAA0C,EAC1C,mBAOE;IAEF,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE,CAClE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CACjD,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;QACzB,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;QAC9D,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KAClE,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;QAC1B,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;QAC/D,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;KAC9D,CAAC,CAAC;IACH,KAAK,MAAM,SAAS,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,qCAAqC,SAAS,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,YAAY,CAAC,WAAW,EAAE,CAAC;QAClD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,IAAI,CAAC,uCAAuC,UAAU,EAAE,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IACD,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnF,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;IACxF,MAAM,iBAAiB,GAAG,SAAS,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IACxD,MAAM,oBAAoB,GAAG,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;IAC7F,MAAM,iBAAiB,GACrB,SAAS,EAAE,MAAM,CAAC,MAAM,CACtB,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,eAAe,KAAK,IAAI;QAC9B,CAAC,YAAY,CAAC,mBAAmB,KAAK,IAAI;YACxC,KAAK,CAAC,eAAe,IAAI,YAAY,CAAC,mBAAmB,CAAC;QAC5D,CAAC,YAAY,CAAC,iBAAiB,KAAK,IAAI;YACtC,KAAK,CAAC,eAAe,IAAI,YAAY,CAAC,iBAAiB,CAAC,CAC7D,CAAC,MAAM,IAAI,CAAC,CAAC;IAChB,IAAI,CAAC,mBAAmB,CAAC,MAAM,IAAI,iBAAiB,GAAG,YAAY,CAAC,UAAU,EAAE,CAAC;QAC/E,IAAI,CAAC,IAAI,CACP,0CAA0C,iBAAiB,IAAI,YAAY,CAAC,UAAU,EAAE,CACzF,CAAC;IACJ,CAAC;IACD,IAAI,YAAY,CAAC,kBAAkB,GAAG,oBAAoB,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACnF,IAAI,CAAC,IAAI,CACP,wCAAwC,oBAAoB,IAAI,YAAY,CAAC,kBAAkB,EAAE,CAClG,CAAC;IACJ,CAAC;IACD,IAAI,YAAY,CAAC,eAAe,GAAG,iBAAiB,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC1E,IAAI,CAAC,IAAI,CACP,4CAA4C,iBAAiB,IAAI,YAAY,CAAC,eAAe,EAAE,CAChG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;AACnD,CAAC"}
@@ -8,8 +8,8 @@ import { loadProjectEvidenceReceipts, stageProjectEvidence } from "./evidence.js
8
8
  import { executeAgent } from "./executor.js";
9
9
  import { requiredDiscoveryCapabilityIds } from "./external-skills.js";
10
10
  import { renderInputLineContext } from "./input-plan.js";
11
- import { appendJournalEvent, verifyJournal } from "./journal.js";
12
- import { RESEARCH_AGENT_PROTOCOL_OVERHEAD_TOKENS, RESEARCH_BROKER_MAX_TURNS, RESEARCH_ESTIMATED_BYTES_PER_TOKEN, RESEARCH_MAX_REPAIR_SOURCE_BYTES, RESEARCH_REPAIR_MAX_TURNS, RESEARCH_STRUCTURED_OUTPUT_MAX_TURNS, reservedAgentPackageCost, } from "./preflight.js";
11
+ import { appendJournalEvent, readJournal, verifyJournal } from "./journal.js";
12
+ import { calculateAgentCallTokenReservation, RESEARCH_BROKER_MAX_TURNS, RESEARCH_ESTIMATED_BYTES_PER_TOKEN, RESEARCH_MAX_REPAIR_SOURCE_BYTES, RESEARCH_REPAIR_MAX_TURNS, researchStructuredOutputMaxTurns, reservedAgentPackageCost, } from "./preflight.js";
13
13
  import { listProjects, loadProject, nextReadyPackage, packageById, refreshProject, saveProject, } from "./projects.js";
14
14
  import { configuredResearchSecrets, sanitizeResearchRecord, sanitizeResearchText, } from "./sanitization.js";
15
15
  import { parseStructuredStageOutput, schemaForStage, StructuredOutputError } from "./schemas.js";
@@ -145,7 +145,7 @@ async function executeWorkPackage(root, projectId, packageId, config, options, r
145
145
  options,
146
146
  requestId,
147
147
  purpose: "primary",
148
- prompt: packagePrompt(project, workPackage, capsule.inputManifest, capsule.stagedSkills, capsule.capabilityDocumentation, capsule.reviewPacketSha256, capsule.contextBundle, capsule.contextBundleContent, stageContextContent),
148
+ prompt: packagePrompt(project, workPackage, capsule.inputManifest, capsule.stagedSkills, capsule.capabilityDocumentation, capsule.reviewPacketSha256, capsule.contextBundle, capsule.contextBundleContent, stageContextContent, config.budget.maxBrokerCalls),
149
149
  brokerUrl: primaryBrokerUrl,
150
150
  inputOnlyProvenance,
151
151
  maxOutputTokens: Math.min(config.budget.maxOutputTokens, reservation.tokens),
@@ -414,7 +414,7 @@ async function createCapsule(root, project, workPackage, runId, config) {
414
414
  const stagedSkills = await stageLockedCapabilities(root, join(capsuleProject, "skills"));
415
415
  const capabilityDocumentation = await buildCapabilityDocumentation(capsuleProject, stagedSkills, config.budget.maxInputContextTokens * RESEARCH_ESTIMATED_BYTES_PER_TOKEN);
416
416
  const reviewEvidenceContext = workPackage.stage === "review"
417
- ? await writeReviewEvidenceContext(root, project.id, capsuleProject, contextBundleContent, evidenceReceipts)
417
+ ? await writeReviewEvidenceContext(root, project.id, capsuleProject, contextBundleContent, evidenceReceipts, config.budget.maxInputContextTokens * RESEARCH_ESTIMATED_BYTES_PER_TOKEN)
418
418
  : null;
419
419
  const reviewPacket = reviewEvidenceContext
420
420
  ? await writeReviewPacket(root, capsuleProject, project, inputManifest, evidenceReceipts, reviewEvidenceContext.persistent)
@@ -518,11 +518,17 @@ async function writeReviewPacket(root, capsuleProject, project, inputManifest, e
518
518
  const record = await persistReviewPacket(root, project.id, completePacket, packetSha256);
519
519
  return { sha256: packetSha256, record };
520
520
  }
521
- async function writeReviewEvidenceContext(root, projectId, capsuleProject, inputContextBundle, evidenceReceipts) {
522
- const sections = [
521
+ async function writeReviewEvidenceContext(root, projectId, capsuleProject, inputContextBundle, evidenceReceipts, maxBytes) {
522
+ const header = [
523
523
  "TIANGONG REVIEW EVIDENCE CONTEXT v1",
524
- "The following are exact, hash-verified bounded views. Full objects are bound in the review packet.",
525
- inputContextBundle.trimEnd(),
524
+ "The following are deterministic excerpts from hash-verified bounded views. Full objects and original bounded contexts remain bound in the review packet.",
525
+ ].join("\n");
526
+ const views = [
527
+ {
528
+ prefix: "--- LOCAL INPUT CONTEXT BUNDLE ---\n--- BEGIN BOUNDED REVIEW EXCERPT ---\n",
529
+ content: inputContextBundle.trimEnd(),
530
+ suffix: "\n--- END BOUNDED REVIEW EXCERPT ---",
531
+ },
526
532
  ];
527
533
  const seen = new Set();
528
534
  for (const receipt of [...evidenceReceipts].sort((left, right) => left.attemptId.localeCompare(right.attemptId))) {
@@ -533,17 +539,42 @@ async function writeReviewEvidenceContext(root, projectId, capsuleProject, input
533
539
  const content = reviewableTextContentType(receipt.contentType)
534
540
  ? await readFile(resolveContained(capsuleProject, receipt.contextLocator), "utf8")
535
541
  : "[Binary bounded view omitted from model context; verify the bound file mechanically.]";
536
- sections.push([
537
- `--- BROKER RECEIPT ${receipt.attemptId} ---`,
538
- `metadata: ${JSON.stringify(metadata)}`,
539
- "--- BEGIN BOUNDED VIEW ---",
540
- content.trimEnd(),
541
- "--- END BOUNDED VIEW ---",
542
- ].join("\n"));
542
+ views.push({
543
+ prefix: [
544
+ `--- BROKER RECEIPT ${receipt.attemptId} ---`,
545
+ `metadata: ${JSON.stringify(metadata)}`,
546
+ "--- BEGIN BOUNDED REVIEW EXCERPT ---",
547
+ "",
548
+ ].join("\n"),
549
+ content: content.trimEnd(),
550
+ suffix: "\n--- END BOUNDED REVIEW EXCERPT ---",
551
+ });
552
+ }
553
+ const fixedContent = [header, ...views.map((view) => `${view.prefix}${view.suffix}`)].join("\n\n");
554
+ const fixedBytes = Buffer.byteLength(`${fixedContent}\n`, "utf8");
555
+ if (fixedBytes > maxBytes) {
556
+ throw new CliError("Review evidence metadata exceeds the configured context budget.", {
557
+ code: "RESEARCH_REVIEW_CONTEXT_BUDGET_EXCEEDED",
558
+ exitCode: 3,
559
+ details: { fixedBytes, maxBytes, views: views.length },
560
+ });
543
561
  }
562
+ const contentBudgetPerView = Math.floor((maxBytes - fixedBytes) / views.length);
563
+ const sections = [
564
+ header,
565
+ ...views.map((view) => `${view.prefix}${boundedUtf8ReviewExcerpt(view.content, contentBudgetPerView)}${view.suffix}`),
566
+ ];
544
567
  const logicalPath = "inputs/review-evidence-context.txt";
545
568
  const path = resolveContained(capsuleProject, logicalPath);
546
569
  const content = `${sections.join("\n\n")}\n`;
570
+ const actualBytes = Buffer.byteLength(content, "utf8");
571
+ if (actualBytes > maxBytes) {
572
+ throw new CliError("Review evidence context exceeded its deterministic byte budget.", {
573
+ code: "RESEARCH_REVIEW_CONTEXT_BUDGET_EXCEEDED",
574
+ exitCode: 3,
575
+ details: { actualBytes, maxBytes },
576
+ });
577
+ }
547
578
  await writeTextAtomic(path, content);
548
579
  const capsule = await fileRecord(path, logicalPath);
549
580
  const persistentLogicalPath = `review/contexts/${capsule.sha256}.txt`;
@@ -569,6 +600,29 @@ async function writeReviewEvidenceContext(root, projectId, capsuleProject, input
569
600
  function reviewableTextContentType(contentType) {
570
601
  return /^(?:text\/|application\/(?:[^;]+\+)?(?:json|xml|javascript|xhtml\+xml|csv))(?:;|$)/i.test(contentType);
571
602
  }
603
+ function boundedUtf8ReviewExcerpt(value, maxBytes) {
604
+ if (Buffer.byteLength(value, "utf8") <= maxBytes)
605
+ return value;
606
+ const suffix = "\n[TRUNCATED: the full object and original bounded context remain hash-bound in the persistent review packet.]";
607
+ const suffixBytes = Buffer.byteLength(suffix, "utf8");
608
+ if (maxBytes <= suffixBytes)
609
+ return utf8Prefix(suffix, maxBytes);
610
+ return `${utf8Prefix(value, maxBytes - suffixBytes)}${suffix}`;
611
+ }
612
+ function utf8Prefix(value, maxBytes) {
613
+ if (maxBytes <= 0)
614
+ return "";
615
+ let bytes = 0;
616
+ let result = "";
617
+ for (const character of value) {
618
+ const characterBytes = Buffer.byteLength(character, "utf8");
619
+ if (bytes + characterBytes > maxBytes)
620
+ break;
621
+ result += character;
622
+ bytes += characterBytes;
623
+ }
624
+ return result;
625
+ }
572
626
  async function persistReviewPacket(root, projectId, packet, packetSha256) {
573
627
  const logicalPath = `review/packets/${packetSha256}.json`;
574
628
  const path = resolveContained(projectRoot(root, projectId), logicalPath);
@@ -712,7 +766,7 @@ function agentRequest(input) {
712
766
  ? RESEARCH_REPAIR_MAX_TURNS
713
767
  : input.brokerUrl
714
768
  ? RESEARCH_BROKER_MAX_TURNS
715
- : RESEARCH_STRUCTURED_OUTPUT_MAX_TURNS;
769
+ : researchStructuredOutputMaxTurns(input.route);
716
770
  return {
717
771
  route: input.route,
718
772
  prompt: input.prompt,
@@ -729,7 +783,7 @@ function agentRequest(input) {
729
783
  maxTurns,
730
784
  maxOutputTokens: input.maxOutputTokens,
731
785
  maxToolContextTokens: input.brokerUrl
732
- ? input.config.budget.maxBrokerContextTokens * maxTurns
786
+ ? input.config.budget.maxBrokerContextTokens * input.config.budget.maxBrokerCalls
733
787
  : 0,
734
788
  maxCostUsd: input.maxCostUsd,
735
789
  expectedRuntime: input.expectedRuntime,
@@ -764,6 +818,14 @@ async function materializeAndValidateStageOutput(root, project, capsuleProject,
764
818
  : parsed.fileContent;
765
819
  await writeTextAtomic(destination, fileContent);
766
820
  await validateOutputShape(root, project, workPackage, destination, reviewPacketSha256);
821
+ if (parsed.normalizations.length > 0) {
822
+ await appendJournalEvent(workspacePaths(root).journal, "package.output.normalized", project.id, {
823
+ projectId: project.id,
824
+ packageId: workPackage.id,
825
+ stage: workPackage.stage,
826
+ normalizations: parsed.normalizations,
827
+ });
828
+ }
767
829
  }
768
830
  async function validateAndImportOutputs(root, project, workPackage, capsuleProject, config, reviewPacketSha256) {
769
831
  const admitted = [];
@@ -998,10 +1060,41 @@ async function assertEvidenceCoverage(root, project) {
998
1060
  const gaps = [...computed.mechanicalGaps];
999
1061
  const requiredCapabilities = requiredDiscoveryCapabilityIds(await loadCapabilityDeclarations(root));
1000
1062
  const exercisedCapabilities = new Set((await loadProjectEvidenceReceipts(root, project.id)).map((receipt) => receipt.capabilityId));
1063
+ const journalEvents = await readJournal(workspacePaths(root).journal);
1064
+ const attemptedCapabilities = new Map();
1065
+ for (const event of journalEvents) {
1066
+ if (event.scope !== project.id || event.type !== "capability.fetch.attempted")
1067
+ continue;
1068
+ const capabilityId = event.payload.capabilityId;
1069
+ if (typeof capabilityId !== "string")
1070
+ continue;
1071
+ const current = attemptedCapabilities.get(capabilityId) ?? {
1072
+ attempts: 0,
1073
+ failureKinds: new Set(),
1074
+ };
1075
+ current.attempts += 1;
1076
+ attemptedCapabilities.set(capabilityId, current);
1077
+ }
1078
+ for (const event of journalEvents) {
1079
+ if (event.scope !== project.id || event.type !== "capability.fetch.failed")
1080
+ continue;
1081
+ const capabilityId = event.payload.capabilityId;
1082
+ const failureKind = event.payload.failureKind;
1083
+ if (typeof capabilityId !== "string" || typeof failureKind !== "string")
1084
+ continue;
1085
+ attemptedCapabilities.get(capabilityId)?.failureKinds.add(failureKind);
1086
+ }
1001
1087
  for (const capabilityId of requiredCapabilities) {
1002
- if (!exercisedCapabilities.has(capabilityId)) {
1088
+ if (exercisedCapabilities.has(capabilityId))
1089
+ continue;
1090
+ const attempted = attemptedCapabilities.get(capabilityId);
1091
+ if (!attempted) {
1003
1092
  gaps.push(`required discovery capability was not exercised: ${capabilityId}`);
1093
+ continue;
1004
1094
  }
1095
+ const failureKinds = [...attempted.failureKinds].sort();
1096
+ const detail = failureKinds.length ? `; failure kinds: ${failureKinds.join(", ")}` : "";
1097
+ gaps.push(`required discovery capability produced no admissible receipt after ${attempted.attempts} attempt(s): ${capabilityId}${detail}`);
1005
1098
  }
1006
1099
  if (canonicalJson(declared.dimensions) !== canonicalJson(computed.dimensions) ||
1007
1100
  canonicalJson(declared.sourceTypes) !== canonicalJson(computed.sourceTypes) ||
@@ -1144,7 +1237,6 @@ async function stageContextForPackage(capsuleProject, workPackage, config) {
1144
1237
  ? ["outputs/evidence.json", "outputs/analysis.json"]
1145
1238
  : workPackage.stage === "review"
1146
1239
  ? [
1147
- "inputs/review-packet.json",
1148
1240
  "inputs/review-evidence-context.txt",
1149
1241
  "outputs/evidence.json",
1150
1242
  "outputs/analysis.json",
@@ -1157,26 +1249,33 @@ async function stageContextForPackage(capsuleProject, workPackage, config) {
1157
1249
  sections.push(`### ${logicalPath}\n${content.trimEnd()}`);
1158
1250
  }
1159
1251
  const bundled = sections.join("\n\n");
1160
- const estimatedTokens = Math.ceil(Buffer.byteLength(bundled, "utf8") / 4);
1161
- if (estimatedTokens > config.budget.maxInputContextTokens) {
1252
+ const estimatedTokens = Math.ceil(Buffer.byteLength(bundled, "utf8") / RESEARCH_ESTIMATED_BYTES_PER_TOKEN);
1253
+ const maxStageContextTokens = workPackage.stage === "review"
1254
+ ? config.budget.maxInputContextTokens + config.budget.maxOutputTokens * 3
1255
+ : workPackage.stage === "synthesize"
1256
+ ? config.budget.maxOutputTokens * 2
1257
+ : workPackage.stage === "analyze"
1258
+ ? config.budget.maxOutputTokens
1259
+ : 0;
1260
+ if (estimatedTokens > maxStageContextTokens) {
1162
1261
  throw new CliError(`Admitted stage context exceeds the configured input context limit for ${workPackage.id}.`, {
1163
1262
  code: "RESEARCH_INPUT_CONTEXT_BUDGET_EXCEEDED",
1164
1263
  exitCode: 3,
1165
1264
  details: {
1166
1265
  packageId: workPackage.id,
1167
1266
  estimatedTokens,
1168
- maxInputContextTokens: config.budget.maxInputContextTokens,
1267
+ maxStageContextTokens,
1169
1268
  },
1170
1269
  });
1171
1270
  }
1172
1271
  return bundled;
1173
1272
  }
1174
- function packagePrompt(project, workPackage, inputs, stagedSkills, capabilityDocumentation, reviewPacketSha256, contextBundle, contextBundleContent, stageContextContent) {
1273
+ function packagePrompt(project, workPackage, inputs, stagedSkills, capabilityDocumentation, reviewPacketSha256, contextBundle, contextBundleContent, stageContextContent, maxBrokerCalls) {
1175
1274
  const stageInstructions = {
1176
1275
  discover: "Return the evidence object defined by the supplied JSON Schema. Cite only declared inputs or broker receipts. Each source.id is your concise evidence label; it must not be reused as provenance.id. For declared inputs, provenance must use the exact id and path shown in the declared input manifest, with locator=path. Every declared input binds an exact registered full source, so fullTextAvailable=true even when fullTextStaged=false; that flag means the producer receives only its bounded context while independent review binds both the verified full-file hash and the exact bounded review view. For broker evidence, provenance.id must be the exact receipt attemptId and locator must be the receipt locator (not contextLocator); use contextLocator only to inspect the bounded view. Include source type, retrieval metadata, an excerpt or JSON Pointer when available, quality, applicability, coverage dimensions, limitations, and an honest coverage assessment. A partial dimension is usable but incomplete; missing means no admitted source covers it. coverage.gaps records qualitative limitations and does not alone force an insufficient decision. The CLI mechanically derives local-input full-text availability, sourceTypes, counts, date range, sourceIds, and the pass/insufficient decision from admitted sources and declared minimums. Never place credentials or sensitive URL parameters in any field.",
1177
1276
  analyze: "Use only the complete embedded admitted evidence below and return the schema-defined analysis object. Every finding must cite admitted evidence source IDs and state uncertainty and applicability.",
1178
- synthesize: "Use only the complete embedded admitted evidence and findings below. Return the schema-defined object whose reportMarkdown separates supported conclusions, uncertainty, limitations, and next actions.",
1179
- review: `Independently inspect the complete embedded review packet, artifacts, and exact bounded evidence views. The CLI has already verified every bound full evidence object's size and SHA-256 and persistently stored the review packet; do not claim to have read beyond the embedded views. Return the schema-defined review bound to packetSha256 ${reviewPacketSha256 ?? "unavailable"}. Use pass only when every material claim is traceable within the admitted evidence and clearly scoped to its limitations.`,
1277
+ synthesize: "Use only the complete embedded admitted evidence and findings below. Return the schema-defined object whose reportMarkdown separates supported conclusions, uncertainty, limitations, and next actions. Use real Markdown line breaks encoded exactly once for JSON; never place literal /n or double-escaped \\n markers in reportMarkdown. When the admitted publication-date range is narrower than the requested range, state the exact admitted range and missing interval prominently in the opening summary.",
1278
+ review: `Independently inspect the complete embedded artifacts and globally bounded evidence excerpts. The CLI has already verified every bound full evidence object's size and SHA-256 and persistently stored the complete review packet; its hash is schema-bound even though the packet metadata is not duplicated in model context. Do not claim to have read beyond the embedded excerpts. Return the schema-defined review bound to packetSha256 ${reviewPacketSha256 ?? "unavailable"}. Use pass only when every material claim is traceable within the admitted evidence and clearly scoped to its limitations.`,
1180
1279
  close: "No agent action is allowed for mechanical closure.",
1181
1280
  };
1182
1281
  const prompt = [
@@ -1192,7 +1291,7 @@ function packagePrompt(project, workPackage, inputs, stagedSkills, capabilityDoc
1192
1291
  ? "The exact capability manifest and each staged external SKILL.md are embedded below. Use this documentation directly; filesystem tools are disabled."
1193
1292
  : "Capability files are provenance-bound but are not available as execution tools in this stage.",
1194
1293
  workPackage.stage === "discover"
1195
- ? "Use the broker only. Do not execute a staged Skill's curl/CLI examples or read provider environment variables. Invoke fetch_candidate_source with the manifest capability ID and obey its exact declared HTTP method. GET capabilities use only declared query parameters; POST capabilities require request_body containing only the documented non-secret request JSON. Never place API keys, tokens, authorization data, cookies, or other credential-like fields in request_body. The broker injects the sole declared logical credential, disables caching for credentialed requests, and never persists the POST body (only its hash). The tool result includes the exact bounded context together with its receipt; use that inline context and its provenance fields. Exercise every manifest capability with requiredForDiscovery=true, or the mechanical coverage gate will stop downstream work."
1294
+ ? `Use the broker only, with at most ${maxBrokerCalls} total fetch_candidate_source calls. Prefer broad, high-yield queries and stop querying once the declared coverage minimums are met. Do not execute a staged Skill's curl/CLI examples or read provider environment variables. Invoke fetch_candidate_source with the manifest capability ID and obey its exact declared HTTP method. GET capabilities use only declared query parameters; POST capabilities require request_body containing only the documented non-secret request JSON. Never place API keys, tokens, authorization data, cookies, or other credential-like fields in request_body. The broker injects the sole declared logical credential, disables caching for credentialed requests, and never persists the POST body (only its hash). The tool result includes the exact bounded context together with its receipt and remaining call budget; use that inline context and its provenance fields. Exercise every manifest capability with requiredForDiscovery=true, or the mechanical coverage gate will stop downstream work.`
1196
1295
  : "Use only the complete embedded stage context; no tools or additional source reads are allowed.",
1197
1296
  stageInstructions[workPackage.stage],
1198
1297
  "Do not write stage output files directly. Your final response must be only the JSON object required by the supplied output schema; the CLI will validate and atomically materialize it.",
@@ -1219,31 +1318,17 @@ function repairPrompt(workPackage, raw, error) {
1219
1318
  function assertPreCallTokenReservation(project, workPackage, config, request, alreadyUsedTokens, reserveRepair) {
1220
1319
  const schemaBytes = Buffer.byteLength(JSON.stringify(request.outputSchema), "utf8");
1221
1320
  const promptBytes = Buffer.byteLength(request.prompt, "utf8");
1222
- const protocolOverhead = RESEARCH_AGENT_PROTOCOL_OVERHEAD_TOKENS[request.route.agent];
1223
- const callInputTokensPerTurn = protocolOverhead + Math.ceil((schemaBytes + promptBytes) / RESEARCH_ESTIMATED_BYTES_PER_TOKEN);
1224
- const callInputTokens = callInputTokensPerTurn * request.maxTurns;
1225
- const potentialToolContextTokens = request.maxToolContextTokens ?? 0;
1226
- const repairTokens = reserveRepair
1227
- ? (protocolOverhead +
1228
- Math.ceil((schemaBytes + RESEARCH_MAX_REPAIR_SOURCE_BYTES + 2_048) /
1229
- RESEARCH_ESTIMATED_BYTES_PER_TOKEN)) *
1230
- RESEARCH_REPAIR_MAX_TURNS +
1231
- config.budget.maxRepairTokens
1232
- : 0;
1233
- const reservation = {
1234
- alreadyUsedTokens,
1321
+ const reservation = calculateAgentCallTokenReservation({
1322
+ route: request.route,
1323
+ primaryPayloadTokens: Math.ceil((schemaBytes + promptBytes) / RESEARCH_ESTIMATED_BYTES_PER_TOKEN),
1324
+ repairPayloadTokens: Math.ceil((schemaBytes + RESEARCH_MAX_REPAIR_SOURCE_BYTES + 2_048) / RESEARCH_ESTIMATED_BYTES_PER_TOKEN),
1235
1325
  maxTurns: request.maxTurns,
1236
- estimatedCallInputTokensPerTurn: callInputTokensPerTurn,
1237
- estimatedCallInputTokens: callInputTokens,
1238
- outputTokens: request.maxOutputTokens,
1239
- potentialToolContextTokens,
1240
- potentialRepairTokens: repairTokens,
1241
- totalTokens: alreadyUsedTokens +
1242
- callInputTokens +
1243
- potentialToolContextTokens +
1244
- request.maxOutputTokens +
1245
- repairTokens,
1246
- };
1326
+ maxOutputTokens: request.maxOutputTokens,
1327
+ maxToolContextTokens: request.maxToolContextTokens ?? 0,
1328
+ maxRepairTokens: config.budget.maxRepairTokens,
1329
+ reserveRepair,
1330
+ alreadyUsedTokens,
1331
+ });
1247
1332
  const packageMaxTokens = config.budget.packageMaxTokens[workPackage.stage];
1248
1333
  const projectRemainingTokens = Math.max(0, config.budget.maxTokens - project.usage.tokens);
1249
1334
  if (reservation.totalTokens > packageMaxTokens ||