@tangle-network/agent-eval 0.138.0 → 0.139.0

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 (164) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +2 -1
  3. package/dist/analyst/index.d.ts +41 -94
  4. package/dist/analyst/index.d.ts.map +1 -1
  5. package/dist/analyst/index.js +9 -24
  6. package/dist/analyst/index.js.map +1 -1
  7. package/dist/{benchmark-D8dkki-J.js → benchmark-CYtcIF2V.js} +2 -2
  8. package/dist/{benchmark-D8dkki-J.js.map → benchmark-CYtcIF2V.js.map} +1 -1
  9. package/dist/{benchmark-DlQgU_XI.d.ts → benchmark-DDVdWcwA.d.ts} +3 -3
  10. package/dist/{benchmark-DlQgU_XI.d.ts.map → benchmark-DDVdWcwA.d.ts.map} +1 -1
  11. package/dist/{benchmark-command-CMqVqReF.js → benchmark-command-BKfjOBJ5.js} +243 -38
  12. package/dist/benchmark-command-BKfjOBJ5.js.map +1 -0
  13. package/dist/benchmarks/index.d.ts +1 -1
  14. package/dist/benchmarks/index.js +1 -1
  15. package/dist/{benchmarks-BJ_xK5rQ.js → benchmarks-zxhy1QV3.js} +4 -4
  16. package/dist/{benchmarks-BJ_xK5rQ.js.map → benchmarks-zxhy1QV3.js.map} +1 -1
  17. package/dist/campaign/index.d.ts +5 -5
  18. package/dist/campaign/index.js +4 -3
  19. package/dist/{campaign-BIBS-NHV.js → campaign-DrS6_hLd.js} +10 -9
  20. package/dist/campaign-DrS6_hLd.js.map +1 -0
  21. package/dist/canonical-D011XM8r.js +86 -0
  22. package/dist/canonical-D011XM8r.js.map +1 -0
  23. package/dist/cli.js +3 -3
  24. package/dist/{client-BwPKohkJ.d.ts → client-BohnDFBq.d.ts} +4 -4
  25. package/dist/{client-BwPKohkJ.d.ts.map → client-BohnDFBq.d.ts.map} +1 -1
  26. package/dist/{completion-verifier-B4-IMYcS.d.ts → completion-verifier-IPoP4fQO.d.ts} +178 -4
  27. package/dist/completion-verifier-IPoP4fQO.d.ts.map +1 -0
  28. package/dist/contract/index.d.ts +10 -10
  29. package/dist/contract/index.js +8 -7
  30. package/dist/contract/index.js.map +1 -1
  31. package/dist/control.d.ts +2 -2
  32. package/dist/{cost-ledger-CHDLA0Ss.js → cost-ledger-CZ9diLxY.js} +7 -7
  33. package/dist/cost-ledger-CZ9diLxY.js.map +1 -0
  34. package/dist/{cost-ledger-B1D3COAc.d.ts → cost-ledger-DKgyIWRj.d.ts} +5 -2
  35. package/dist/cost-ledger-DKgyIWRj.d.ts.map +1 -0
  36. package/dist/default-registry-B8vf7Rmf.d.ts +118 -0
  37. package/dist/default-registry-B8vf7Rmf.d.ts.map +1 -0
  38. package/dist/{default-registry-lp5R0lve.js → default-registry-BgJJItGr.js} +57 -1532
  39. package/dist/default-registry-BgJJItGr.js.map +1 -0
  40. package/dist/dspy-rlm-engine-DTkVyDX-.js +344 -0
  41. package/dist/dspy-rlm-engine-DTkVyDX-.js.map +1 -0
  42. package/dist/{eval-campaign-9MozgKL7.js → eval-campaign-BmptJj50.js} +2 -2
  43. package/dist/{eval-campaign-9MozgKL7.js.map → eval-campaign-BmptJj50.js.map} +1 -1
  44. package/dist/{exact-types-Dpw2LeHA.d.ts → exact-types-MaaFcllV.d.ts} +2 -2
  45. package/dist/{exact-types-Dpw2LeHA.d.ts.map → exact-types-MaaFcllV.d.ts.map} +1 -1
  46. package/dist/external-optimizer-contracts-BrxY2Sli.d.ts +32 -0
  47. package/dist/external-optimizer-contracts-BrxY2Sli.d.ts.map +1 -0
  48. package/dist/{extract-usage-CS391dOE.js → extract-usage-DZs601Va.js} +2 -2
  49. package/dist/{extract-usage-CS391dOE.js.map → extract-usage-DZs601Va.js.map} +1 -1
  50. package/dist/{feedback-trajectory-CoNep7rl.d.ts → feedback-trajectory-BJUWOkJM.d.ts} +3 -3
  51. package/dist/{feedback-trajectory-CoNep7rl.d.ts.map → feedback-trajectory-BJUWOkJM.d.ts.map} +1 -1
  52. package/dist/fuzz.d.ts +1 -1
  53. package/dist/fuzz.js +1 -1
  54. package/dist/{hf-dataset-DBJXXoY1.js → hf-dataset-XggBupCr.js} +2 -2
  55. package/dist/{hf-dataset-DBJXXoY1.js.map → hf-dataset-XggBupCr.js.map} +1 -1
  56. package/dist/hosted/index.d.ts +3 -3
  57. package/dist/{index-D0cxAdaV.d.ts → index-BTm_P9aC.d.ts} +11 -11
  58. package/dist/{index-D0cxAdaV.d.ts.map → index-BTm_P9aC.d.ts.map} +1 -1
  59. package/dist/{index-B2-IxCMB.d.ts → index-CWOPCJiw.d.ts} +2 -2
  60. package/dist/{index-B2-IxCMB.d.ts.map → index-CWOPCJiw.d.ts.map} +1 -1
  61. package/dist/{index-sMN_hI4E.d.ts → index-CtR1xh4V.d.ts} +3 -3
  62. package/dist/{index-sMN_hI4E.d.ts.map → index-CtR1xh4V.d.ts.map} +1 -1
  63. package/dist/{index-CjVYlVBK.d.ts → index-_66rVpwN.d.ts} +5 -5
  64. package/dist/{index-CjVYlVBK.d.ts.map → index-_66rVpwN.d.ts.map} +1 -1
  65. package/dist/index.d.ts +35 -56
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +51 -176
  68. package/dist/index.js.map +1 -1
  69. package/dist/{insight-report-CXd8VBDR.d.ts → insight-report-Bu5Wi9tG.d.ts} +4 -4
  70. package/dist/{insight-report-CXd8VBDR.d.ts.map → insight-report-Bu5Wi9tG.d.ts.map} +1 -1
  71. package/dist/{integrity-B-MLFz0I.d.ts → integrity-COTh3DTH.d.ts} +2 -2
  72. package/dist/{integrity-B-MLFz0I.d.ts.map → integrity-COTh3DTH.d.ts.map} +1 -1
  73. package/dist/kind-factory-CFxA0JQX.js +2133 -0
  74. package/dist/kind-factory-CFxA0JQX.js.map +1 -0
  75. package/dist/ledger-core/index.js +2 -1
  76. package/dist/{ledger-core-C0Yx1I14.js → ledger-core-Dxz0Rkwa.js} +3 -85
  77. package/dist/ledger-core-Dxz0Rkwa.js.map +1 -0
  78. package/dist/{llm-client-Cj3c7PEm.js → llm-client-bkztEfIx.js} +2 -2
  79. package/dist/{llm-client-Cj3c7PEm.js.map → llm-client-bkztEfIx.js.map} +1 -1
  80. package/dist/meta-eval/index.d.ts +2 -2
  81. package/dist/multishot/index.d.ts +2 -2
  82. package/dist/openapi.json +1 -1
  83. package/dist/{release-report-CoyvyLBs.d.ts → release-report-fZarvIm-.d.ts} +3 -3
  84. package/dist/{release-report-CoyvyLBs.d.ts.map → release-report-fZarvIm-.d.ts.map} +1 -1
  85. package/dist/{replay-DbIYwso6.d.ts → replay-DjG4IG60.d.ts} +34 -143
  86. package/dist/replay-DjG4IG60.d.ts.map +1 -0
  87. package/dist/{replay-Cb-4Vf0k.js → replay-SA4OB7O7.js} +48 -137
  88. package/dist/replay-SA4OB7O7.js.map +1 -0
  89. package/dist/reporting.d.ts +4 -4
  90. package/dist/{researcher-BCeOEjtR.d.ts → researcher-BxhtGfKa.d.ts} +5 -5
  91. package/dist/{researcher-BCeOEjtR.d.ts.map → researcher-BxhtGfKa.d.ts.map} +1 -1
  92. package/dist/{reward-hacking-sE2l_NV6.d.ts → reward-hacking-CqSLiV51.d.ts} +2 -2
  93. package/dist/{reward-hacking-sE2l_NV6.d.ts.map → reward-hacking-CqSLiV51.d.ts.map} +1 -1
  94. package/dist/rl.d.ts +5 -5
  95. package/dist/rl.js +1 -1
  96. package/dist/rollout/index.d.ts +1 -1
  97. package/dist/rollout/index.js +2 -2
  98. package/dist/{rollout-DQFl0UXA.js → rollout-8nj3mYvx.js} +2 -2
  99. package/dist/{rollout-DQFl0UXA.js.map → rollout-8nj3mYvx.js.map} +1 -1
  100. package/dist/{rubric-predictive-validity-w2klGv1u.d.ts → rubric-predictive-validity-DQBQj6uV.d.ts} +2 -2
  101. package/dist/{rubric-predictive-validity-w2klGv1u.d.ts.map → rubric-predictive-validity-DQBQj6uV.d.ts.map} +1 -1
  102. package/dist/{run-evidence-CbE0A8Xg.d.ts → run-evidence-C4RcRQT5.d.ts} +3 -3
  103. package/dist/{run-evidence-CbE0A8Xg.d.ts.map → run-evidence-C4RcRQT5.d.ts.map} +1 -1
  104. package/dist/{run-record-DwHMk1Ai.d.ts → run-record-CztDMXVF.d.ts} +2 -2
  105. package/dist/{run-record-DwHMk1Ai.d.ts.map → run-record-CztDMXVF.d.ts.map} +1 -1
  106. package/dist/{semantic-concept-judge-DYXDPZW0.js → semantic-concept-judge-BuIJ9IfB.js} +43 -6
  107. package/dist/semantic-concept-judge-BuIJ9IfB.js.map +1 -0
  108. package/dist/{server-DLEvyW2z.js → server-DaCpLfi0.js} +3 -3
  109. package/dist/{server-DLEvyW2z.js.map → server-DaCpLfi0.js.map} +1 -1
  110. package/dist/single-run-lock-BTTtPZ9N.js +989 -0
  111. package/dist/single-run-lock-BTTtPZ9N.js.map +1 -0
  112. package/dist/{skill-usage-Bv3G4VkA.d.ts → skill-usage-B-BFS8M2.d.ts} +54 -39
  113. package/dist/skill-usage-B-BFS8M2.d.ts.map +1 -0
  114. package/dist/{skillopt-optimization-method-CjKMZy0d.js → skillopt-optimization-method-BbGnCC53.js} +18 -802
  115. package/dist/skillopt-optimization-method-BbGnCC53.js.map +1 -0
  116. package/dist/{skillopt-optimization-method-CzfnA8O-.d.ts → skillopt-optimization-method-_s0Tub7Y.d.ts} +11 -39
  117. package/dist/skillopt-optimization-method-_s0Tub7Y.d.ts.map +1 -0
  118. package/dist/{statistics-mf70aXKp.d.ts → statistics-B5d0Zd-z.d.ts} +2 -2
  119. package/dist/{statistics-mf70aXKp.d.ts.map → statistics-B5d0Zd-z.d.ts.map} +1 -1
  120. package/dist/store-otlp-DX4fGIcf.js +757 -0
  121. package/dist/store-otlp-DX4fGIcf.js.map +1 -0
  122. package/dist/{summary-report-BKinV4yD.d.ts → summary-report-Cg7BifAM.d.ts} +3 -3
  123. package/dist/{summary-report-BKinV4yD.d.ts.map → summary-report-Cg7BifAM.d.ts.map} +1 -1
  124. package/dist/tool-groups-CdYq22lX.d.ts +258 -0
  125. package/dist/tool-groups-CdYq22lX.d.ts.map +1 -0
  126. package/dist/traces.d.ts +7 -6
  127. package/dist/traces.js +5 -5
  128. package/dist/{types-zFYez3PK.d.ts → types-BBFNHxSK.d.ts} +5 -5
  129. package/dist/{types-zFYez3PK.d.ts.map → types-BBFNHxSK.d.ts.map} +1 -1
  130. package/dist/{types-BtJhn8v6.d.ts → types-DoEYskCd.d.ts} +5 -5
  131. package/dist/{types-BtJhn8v6.d.ts.map → types-DoEYskCd.d.ts.map} +1 -1
  132. package/dist/{types-5q2T25iW.d.ts → types-uPrS6mD-.d.ts} +2 -2
  133. package/dist/{types-5q2T25iW.d.ts.map → types-uPrS6mD-.d.ts.map} +1 -1
  134. package/dist/usage-receipt-CgxMEBZq.js +134 -0
  135. package/dist/usage-receipt-CgxMEBZq.js.map +1 -0
  136. package/dist/wire/index.d.ts +3 -3
  137. package/dist/wire/index.js +1 -1
  138. package/docs/trace-analysis.md +170 -484
  139. package/package.json +1 -2
  140. package/dist/analyze-runs-CPYxfPWT.d.ts +0 -72
  141. package/dist/analyze-runs-CPYxfPWT.d.ts.map +0 -1
  142. package/dist/benchmark-command-CMqVqReF.js.map +0 -1
  143. package/dist/campaign-BIBS-NHV.js.map +0 -1
  144. package/dist/completion-verifier-B4-IMYcS.d.ts.map +0 -1
  145. package/dist/cost-ledger-B1D3COAc.d.ts.map +0 -1
  146. package/dist/cost-ledger-CHDLA0Ss.js.map +0 -1
  147. package/dist/default-registry-PUhIVRWz.d.ts +0 -215
  148. package/dist/default-registry-PUhIVRWz.d.ts.map +0 -1
  149. package/dist/default-registry-lp5R0lve.js.map +0 -1
  150. package/dist/ledger-core-C0Yx1I14.js.map +0 -1
  151. package/dist/registry-C4yJTza7.d.ts +0 -178
  152. package/dist/registry-C4yJTza7.d.ts.map +0 -1
  153. package/dist/replay-Cb-4Vf0k.js.map +0 -1
  154. package/dist/replay-DbIYwso6.d.ts.map +0 -1
  155. package/dist/semantic-concept-judge-DYXDPZW0.js.map +0 -1
  156. package/dist/single-run-lock-D_bS5xhj.js +0 -318
  157. package/dist/single-run-lock-D_bS5xhj.js.map +0 -1
  158. package/dist/skill-usage-Bv3G4VkA.d.ts.map +0 -1
  159. package/dist/skillopt-optimization-method-CjKMZy0d.js.map +0 -1
  160. package/dist/skillopt-optimization-method-CzfnA8O-.d.ts.map +0 -1
  161. package/dist/store-otlp-BenKynPE.js +0 -1688
  162. package/dist/store-otlp-BenKynPE.js.map +0 -1
  163. package/dist/tools-DZGdROtG.js +0 -255
  164. package/dist/tools-DZGdROtG.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools-DZGdROtG.js","names":[],"sources":["../src/trace-analyst/loop.ts","../src/trace-analyst/tools.ts"],"sourcesContent":["import {\n type AxAgentActorTurnCallback,\n type AxAIService,\n type AxFunction,\n AxJSRuntime,\n agent,\n} from '@ax-llm/ax'\nimport { TraceFileMissingError } from './store-otlp'\n\nconst TRACE_ANALYSIS_TOOL_INSTRUCTION = `Gather the evidence needed for the report with the trace tools.\nWhen the evidence is sufficient, call final(task, evidence) and let the response stage produce the declared report and findings fields.`\n\nconst TRACE_ANALYSIS_CONTEXT_INSTRUCTION = `The complete bounded trace data is available as inputs.context.\nInspect it in the runtime, then call respond(task, evidence) and let the response stage produce the declared report and findings fields.`\n\nconst TRACE_ANALYSIS_RESPONDER_INSTRUCTION = `Use only evidence produced by the analysis stage.\nDo not invent trace ids, span ids, steps, tool results, or final verification outcomes.`\n\nexport interface TraceAnalysisLoopResult<TFinding> {\n report: string\n findings: TFinding[]\n usage: {\n actor: readonly unknown[]\n responder: readonly unknown[]\n }\n chatLog: {\n actor: readonly unknown[]\n responder: readonly unknown[]\n }\n turnCount: number\n}\n\nexport class TraceAnalysisTurnLimitError extends Error {\n readonly analystId: string\n readonly stage: 'distiller' | 'executor'\n readonly maxTurns: number\n\n constructor(analystId: string, stage: 'distiller' | 'executor', maxTurns: number) {\n super(\n `Trace analyst '${analystId}' reached maxTurns=${maxTurns} in the ${stage} stage without explicit completion`,\n )\n this.name = 'TraceAnalysisTurnLimitError'\n this.analystId = analystId\n this.stage = stage\n this.maxTurns = maxTurns\n }\n}\n\ninterface TraceAnalysisLoopOptions {\n id: string\n description: string\n prompt: string\n question: string\n context?: string\n ai: AxAIService\n model?: string\n tools: readonly AxFunction[]\n maxSubqueries: number\n maxParallelSubqueries: number\n maxTurns: number\n maxRuntimeChars: number\n signal?: AbortSignal\n onTurn?: AxAgentActorTurnCallback\n}\n\nexport function runTraceAnalysisLoop(\n options: TraceAnalysisLoopOptions & { findingType: 'string' },\n): Promise<TraceAnalysisLoopResult<string>>\nexport function runTraceAnalysisLoop(\n options: TraceAnalysisLoopOptions & { findingType: 'object' },\n): Promise<TraceAnalysisLoopResult<unknown>>\nexport async function runTraceAnalysisLoop(\n options: TraceAnalysisLoopOptions & { findingType: 'string' | 'object' },\n): Promise<TraceAnalysisLoopResult<unknown>> {\n validateLoopLimits(options)\n\n let turnCount = 0\n const completedStages = new Set<'distiller' | 'executor'>()\n const onTurn: AxAgentActorTurnCallback = async (turn) => {\n if (turn.stage === 'executor') turnCount = Math.max(turnCount, turn.turn)\n if (isExplicitCompletionTurn(turn)) completedStages.add(turn.stage)\n await options.onTurn?.(turn)\n if (turn.turn >= options.maxTurns && !completedStages.has(turn.stage)) {\n throw new TraceAnalysisTurnLimitError(options.id, turn.stage, options.maxTurns)\n }\n }\n const hasPreparedContext = options.context !== undefined\n const config = {\n agentIdentity: { name: options.id, description: options.description },\n contextFields: hasPreparedContext ? (['context'] as const) : ([] as const),\n runtime: new AxJSRuntime({\n permissions: [],\n blockDynamicImport: true,\n allowedModules: [],\n freezeIntrinsics: true,\n blockShadowRealm: true,\n preventGlobalThisExtensions: false,\n }),\n maxSubAgentCalls: options.maxSubqueries,\n maxTurns: options.maxTurns,\n maxRuntimeChars: options.maxRuntimeChars,\n maxBatchedLlmQueryConcurrency: options.maxParallelSubqueries,\n promptLevel: 'detailed' as const,\n contextPolicy: { preset: 'full' as const, budget: 'balanced' as const },\n directResponse:\n hasPreparedContext && options.tools.length === 0 ? ('auto' as const) : ('off' as const),\n functions: options.tools,\n executorOptions: {\n description: `${options.prompt.trim()}\\n\\n${\n hasPreparedContext ? TRACE_ANALYSIS_CONTEXT_INSTRUCTION : TRACE_ANALYSIS_TOOL_INSTRUCTION\n }`,\n ...(options.model ? { model: options.model } : {}),\n showThoughts: false,\n thinkingTokenBudget: 'none' as const,\n },\n responderOptions: {\n description: `${TRACE_ANALYSIS_RESPONDER_INSTRUCTION}\\n\\n${options.prompt.trim()}`,\n ...(options.model ? { model: options.model } : {}),\n showThoughts: false,\n thinkingTokenBudget: 'none' as const,\n },\n actorTurnCallback: onTurn,\n bubbleErrors: [TraceFileMissingError],\n }\n const analyst = hasPreparedContext\n ? options.findingType === 'string'\n ? agent('context:string, question:string -> report:string, findings:string[]', config)\n : agent('context:string, question:string -> report:string, findings:json[]', config)\n : options.findingType === 'string'\n ? agent('question:string -> report:string, findings:string[]', config)\n : agent('question:string -> report:string, findings:json[]', config)\n\n const output = hasPreparedContext\n ? await analyst.forward(\n options.ai,\n { context: options.context!, question: options.question } as never,\n options.signal ? { abortSignal: options.signal } : undefined,\n )\n : await analyst.forward(\n options.ai,\n { question: options.question },\n options.signal ? { abortSignal: options.signal } : undefined,\n )\n assertStageDidNotExhaust(\n options.id,\n 'distiller',\n options.maxTurns,\n analyst.distiller?.getState()?.actionLogEntries,\n )\n assertStageDidNotExhaust(\n options.id,\n 'executor',\n options.maxTurns,\n analyst.executor?.getState()?.actionLogEntries,\n )\n const completed =\n options.findingType === 'string'\n ? readTraceAnalysisOutput(output, 'string')\n : readTraceAnalysisOutput(output, 'object')\n const usage = analyst.getUsage()\n const chatLog = splitChatLog(analyst.getChatLog())\n\n return {\n ...completed,\n usage: {\n actor: usage.actor,\n responder: usage.responder,\n },\n chatLog,\n turnCount,\n }\n}\n\nfunction isExplicitCompletionTurn(turn: Parameters<AxAgentActorTurnCallback>[0]): boolean {\n return !turn.isError && isExplicitCompletionCode(turn.code)\n}\n\nfunction isExplicitCompletionCode(code: string): boolean {\n const executable = trimLeadingComments(code)\n return /^(?:await\\s+)?(?:final|respond|askClarification)\\s*\\(/.test(executable)\n}\n\nfunction assertStageDidNotExhaust(\n analystId: string,\n stage: 'distiller' | 'executor',\n maxTurns: number,\n entries:\n | readonly {\n code: string\n tags: readonly string[]\n }[]\n | undefined,\n): void {\n if (!entries || entries.length < maxTurns) return\n const last = entries.at(-1)\n if (last && !last.tags.includes('error') && isExplicitCompletionCode(last.code)) return\n throw new TraceAnalysisTurnLimitError(analystId, stage, maxTurns)\n}\n\nfunction trimLeadingComments(code: string): string {\n let remaining = code.trimStart()\n while (remaining.startsWith('//') || remaining.startsWith('/*')) {\n if (remaining.startsWith('//')) {\n const lineEnd = remaining.indexOf('\\n')\n if (lineEnd === -1) return ''\n remaining = remaining.slice(lineEnd + 1).trimStart()\n continue\n }\n const commentEnd = remaining.indexOf('*/', 2)\n if (commentEnd === -1) return ''\n remaining = remaining.slice(commentEnd + 2).trimStart()\n }\n return remaining\n}\n\nfunction splitChatLog(entries: readonly unknown[]): {\n actor: readonly unknown[]\n responder: readonly unknown[]\n} {\n const actor: unknown[] = []\n const responder: unknown[] = []\n for (const entry of entries) {\n const name =\n entry && typeof entry === 'object' && 'name' in entry\n ? (entry as { name?: unknown }).name\n : undefined\n if (typeof name === 'string' && (name === 'responder' || name.endsWith('.responder'))) {\n responder.push(entry)\n } else {\n actor.push(entry)\n }\n }\n return { actor, responder }\n}\n\ninterface CompletedTraceAnalysis<TFinding> {\n report: string\n findings: TFinding[]\n}\n\nexport function readTraceAnalysisOutput(\n value: unknown,\n findingType: 'string',\n): CompletedTraceAnalysis<string>\nexport function readTraceAnalysisOutput(\n value: unknown,\n findingType: 'object',\n): CompletedTraceAnalysis<unknown>\nexport function readTraceAnalysisOutput(\n value: unknown,\n findingType: 'string' | 'object',\n): CompletedTraceAnalysis<unknown> {\n if (!value || typeof value !== 'object') {\n throw new Error('Trace analyst response must contain report and findings')\n }\n const { report, findings } = value as { report?: unknown; findings?: unknown }\n if (typeof report !== 'string' || !Array.isArray(findings)) {\n throw new Error('Trace analyst response must contain report and findings')\n }\n if (findingType === 'string') {\n if (findings.some((finding) => typeof finding !== 'string')) {\n throw new Error('Trace analyst response must contain string findings')\n }\n return { report, findings: findings as string[] }\n }\n return { report, findings }\n}\n\nfunction validateLoopLimits(options: TraceAnalysisLoopOptions): void {\n if (!Number.isSafeInteger(options.maxSubqueries) || options.maxSubqueries < 0) {\n throw new TypeError('maxSubqueries must be a non-negative integer')\n }\n if (!Number.isSafeInteger(options.maxParallelSubqueries) || options.maxParallelSubqueries < 1) {\n throw new TypeError('maxParallelSubqueries must be a positive integer')\n }\n}\n","/**\n * Canonical transport-neutral trace tools plus the Ax adapter used by the\n * built-in analyst. Schemas and handlers originate here; provider adapters\n * only translate descriptor fields and cancellation context.\n */\n\nimport type { AxFunction } from '@ax-llm/ax'\n\nimport type { EvalToolDef } from '../eval-tools'\nimport {\n type BoundedTraceAnalysisStoreOptions,\n createBoundedTraceAnalysisStore,\n TRACE_ANALYSIS_LIMITS,\n type TraceAnalysisStore,\n} from './store'\nimport { parseTraceInput, toTraceJsonSchema, traceStoreInputSchemas } from './store-schemas'\n\nexport const TRACE_ANALYST_TOOL_NAMESPACE = 'traces' as const\n\nexport interface BuildTraceAnalysisToolsOptions extends BoundedTraceAnalysisStoreOptions {\n store: TraceAnalysisStore\n}\n\nexport interface TraceAnalysisToolDescriptor extends EvalToolDef {\n namespace: typeof TRACE_ANALYST_TOOL_NAMESPACE\n}\n\n/** Bind all seven trace reads without exposing an agent framework type. */\nexport function buildTraceAnalysisToolDescriptors(\n options: BuildTraceAnalysisToolsOptions,\n): TraceAnalysisToolDescriptor[] {\n const store = createBoundedTraceAnalysisStore(options.store, { budgets: options.budgets })\n\n return [\n {\n namespace: TRACE_ANALYST_TOOL_NAMESPACE,\n name: 'getDatasetOverview',\n description:\n 'Dataset rollup: total traces, raw_jsonl_bytes, services, agents, models, tools, ' +\n 'and sample_trace_ids. Always call this first without a regex_pattern.',\n parameters: toTraceJsonSchema(traceStoreInputSchemas.getOverview),\n handler: async (args, context) => {\n const { filters } = parseTraceInput(\n 'getDatasetOverview',\n traceStoreInputSchemas.getOverview,\n args ?? {},\n )\n return store.getOverview(filters, context)\n },\n },\n {\n namespace: TRACE_ANALYST_TOOL_NAMESPACE,\n name: 'queryTraces',\n description:\n `Paginated trace summaries, at most ${TRACE_ANALYSIS_LIMITS.queryTraces} per call. ` +\n 'Each summary carries raw_jsonl_bytes; narrow with indexed filters before regex_pattern.',\n parameters: toTraceJsonSchema(traceStoreInputSchemas.queryTraces),\n handler: async (args, context) => {\n const input = parseTraceInput('queryTraces', traceStoreInputSchemas.queryTraces, args)\n return store.queryTraces(input, context)\n },\n },\n {\n namespace: TRACE_ANALYST_TOOL_NAMESPACE,\n name: 'countTraces',\n description:\n 'Count traces matching filters. Use as a cheap pre-flight before a regex_pattern scan.',\n parameters: toTraceJsonSchema(traceStoreInputSchemas.countTraces),\n handler: async (args, context) => {\n const { filters } = parseTraceInput(\n 'countTraces',\n traceStoreInputSchemas.countTraces,\n args ?? {},\n )\n return store.countTraces(filters, context)\n },\n },\n {\n namespace: TRACE_ANALYST_TOOL_NAMESPACE,\n name: 'viewTrace',\n description:\n 'Return all spans for one trace with bounded attributes. Oversized responses carry ' +\n 'an oversized summary instead of spans; continue with searchTrace or viewSpans.',\n parameters: toTraceJsonSchema(\n traceStoreInputSchemas.viewTrace.omit({\n per_attribute_byte_cap: true,\n }),\n ),\n handler: async (args, context) => {\n const input = parseTraceInput(\n 'viewTrace',\n traceStoreInputSchemas.viewTrace.omit({ per_attribute_byte_cap: true }),\n args,\n )\n return store.viewTrace(input, context)\n },\n },\n {\n namespace: TRACE_ANALYST_TOOL_NAMESPACE,\n name: 'viewSpans',\n description:\n `Read 1..${TRACE_ANALYSIS_LIMITS.viewSpans} specific spans. Every requested id is ` +\n 'accounted for in spans, missing_span_ids, or omitted_span_ids; retry omitted ids.',\n parameters: toTraceJsonSchema(\n traceStoreInputSchemas.viewSpans.omit({\n per_attribute_byte_cap: true,\n }),\n ),\n handler: async (args, context) => {\n const input = parseTraceInput(\n 'viewSpans',\n traceStoreInputSchemas.viewSpans.omit({ per_attribute_byte_cap: true }),\n args,\n )\n return store.viewSpans(input, context)\n },\n },\n {\n namespace: TRACE_ANALYST_TOOL_NAMESPACE,\n name: 'searchTrace',\n description:\n `Regex search across one trace, bounded to ${TRACE_ANALYSIS_LIMITS.searchMatches} hits. ` +\n 'When has_more is true, refine the regex instead of treating the result as complete.',\n parameters: toTraceJsonSchema(traceStoreInputSchemas.searchTrace),\n handler: async (args, context) => {\n const input = parseTraceInput('searchTrace', traceStoreInputSchemas.searchTrace, args)\n return store.searchTrace(input, context)\n },\n },\n {\n namespace: TRACE_ANALYST_TOOL_NAMESPACE,\n name: 'searchSpan',\n description:\n `Regex search inside one span, bounded to ${TRACE_ANALYSIS_LIMITS.searchMatches} hits. ` +\n 'Use after viewSpans omits or truncates a large span payload.',\n parameters: toTraceJsonSchema(traceStoreInputSchemas.searchSpan),\n handler: async (args, context) => {\n const input = parseTraceInput('searchSpan', traceStoreInputSchemas.searchSpan, args)\n return store.searchSpan(input, context)\n },\n },\n ]\n}\n\n/** Adapt the canonical descriptors into Ax functions used by the built-in analyst. */\nexport function buildTraceAnalystTools(options: BuildTraceAnalysisToolsOptions): AxFunction[] {\n return buildTraceAnalysisToolDescriptors(options).map((descriptor) => ({\n namespace: descriptor.namespace,\n name: descriptor.name,\n description: descriptor.description,\n parameters: descriptor.parameters as AxFunction['parameters'],\n func: (args, extra) =>\n descriptor.handler(args, extra?.abortSignal ? { signal: extra.abortSignal } : undefined),\n }))\n}\n\nexport function traceAnalystFunctionGroup(options: BuildTraceAnalysisToolsOptions): {\n namespace: string\n title: string\n selectionCriteria: string\n description: string\n functions: AxFunction[]\n} {\n return {\n namespace: TRACE_ANALYST_TOOL_NAMESPACE,\n title: 'Trace Analysis',\n selectionCriteria: 'Use for any inspection of OTLP-shaped trace data.',\n description:\n 'Discovery, narrowing, and bounded deep reads over a JSONL trace dataset. ' +\n 'Always call getDatasetOverview first.',\n functions: buildTraceAnalystTools(options),\n }\n}\n"],"mappings":"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"}