@tangle-network/agent-eval 0.109.1 → 0.110.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.
- package/dist/analyst/index.d.ts +10 -12
- package/dist/analyst/index.js +8 -11
- package/dist/analyst/index.js.map +1 -1
- package/dist/{analyze-runs-DJYpep3L.d.ts → analyze-runs-Dmz6LA9e.d.ts} +4 -4
- package/dist/{baseline-Bbid3WoO.d.ts → baseline-DsNteOgR.d.ts} +32 -2
- package/dist/belief-state/index.d.ts +6 -6
- package/dist/benchmarks/index.d.ts +4 -4
- package/dist/benchmarks/index.js +7 -8
- package/dist/builder-eval/index.d.ts +4 -4
- package/dist/builder-eval/index.js +1 -2
- package/dist/builder-eval/index.js.map +1 -1
- package/dist/{calibration-BPmzuVPk.d.ts → calibration-Dz8TQV4y.d.ts} +2 -2
- package/dist/campaign/index.d.ts +16 -19
- package/dist/campaign/index.js +7 -8
- package/dist/{chunk-LOJ2QVCE.js → chunk-2IY4ILP4.js} +2 -2
- package/dist/{chunk-LIEJUH2I.js → chunk-6PL5MGDL.js} +9 -9
- package/dist/{chunk-2OGPXHOB.js → chunk-7NX6ZSBG.js} +36 -7
- package/dist/chunk-7NX6ZSBG.js.map +1 -0
- package/dist/{chunk-OVPVM4JC.js → chunk-GTERJI6Q.js} +4 -4
- package/dist/{chunk-YEHAEDUD.js → chunk-IMWDSFUM.js} +604 -2
- package/dist/chunk-IMWDSFUM.js.map +1 -0
- package/dist/{chunk-JZXGWLK5.js → chunk-MHNQWM4I.js} +62 -6
- package/dist/chunk-MHNQWM4I.js.map +1 -0
- package/dist/{chunk-QRVS7MX4.js → chunk-OW47B5WA.js} +3 -5
- package/dist/{chunk-QRVS7MX4.js.map → chunk-OW47B5WA.js.map} +1 -1
- package/dist/{chunk-DBDRR6GF.js → chunk-PLOMR3HP.js} +48 -2
- package/dist/chunk-PLOMR3HP.js.map +1 -0
- package/dist/{chunk-GDZAWO2I.js → chunk-QFGTU7MT.js} +2 -2
- package/dist/{chunk-R6D7NEYJ.js → chunk-RNB2NICW.js} +11 -11
- package/dist/{chunk-V7HNA47Z.js → chunk-RSVSSZKF.js} +5 -5
- package/dist/{chunk-5PK3626Q.js → chunk-XRGOKCMO.js} +88 -17
- package/dist/chunk-XRGOKCMO.js.map +1 -0
- package/dist/{code-agent-session-rnJKlqmT.d.ts → code-agent-session-yitf9I-F.d.ts} +1 -1
- package/dist/contract/index.d.ts +20 -23
- package/dist/contract/index.js +11 -13
- package/dist/contract/index.js.map +1 -1
- package/dist/{control-B8UthSBL.d.ts → control-U8LBKUES.d.ts} +5 -6
- package/dist/control.d.ts +8 -9
- package/dist/control.js +6 -8
- package/dist/{dataset-DS7ytHZU.d.ts → dataset-NENEzRgk.d.ts} +1 -1
- package/dist/{default-registry-BswHCXnU.d.ts → default-registry-Bcf1uKVI.d.ts} +1 -2
- package/dist/{emitter-C2rqGH_l.d.ts → emitter-BRchAAAx.d.ts} +2 -2
- package/dist/{failure-cluster-DH9Flgcf.d.ts → failure-cluster-C48PiReX.d.ts} +2 -2
- package/dist/feedback-trajectory-pDcz1lQ1.d.ts +348 -0
- package/dist/{gepa-B3x5Ulcv.d.ts → gepa-BUNP3606.d.ts} +143 -2
- package/dist/hosted/index.d.ts +7 -7
- package/dist/{index-pPtfoIJO.d.ts → index-Dc3VLGhp.d.ts} +2 -2
- package/dist/index.d.ts +645 -61
- package/dist/index.js +1282 -190
- package/dist/index.js.map +1 -1
- package/dist/{insight-report-B4xrdwEK.d.ts → insight-report-D4cXFsLt.d.ts} +1 -1
- package/dist/{integrity-DqGZg3st.d.ts → integrity-qemeBAyx.d.ts} +1 -1
- package/dist/{types-D1ytG0Yg.d.ts → kind-factory-20hcaYpf.d.ts} +169 -2
- package/dist/meta-eval/index.d.ts +5 -5
- package/dist/meta-eval/index.js +1 -2
- package/dist/meta-eval/index.js.map +1 -1
- package/dist/{multi-layer-verifier-CI4jdX-q.d.ts → multi-layer-verifier-BsqKuLyN.d.ts} +1 -1
- package/dist/multishot/index.d.ts +3 -3
- package/dist/openapi.json +1 -1
- package/dist/pipelines/index.d.ts +6 -7
- package/dist/pipelines/index.js +3 -6
- package/dist/pipelines/index.js.map +1 -1
- package/dist/{policy-edit-DQUXYMDm.d.ts → policy-edit-D2bBDZDf.d.ts} +2 -2
- package/dist/{pre-registration-BUhVPzE7.d.ts → pre-registration-BepVVa6P.d.ts} +3 -3
- package/dist/{provenance-DdDhf6cg.d.ts → provenance-DMvsfknv.d.ts} +3 -5
- package/dist/{query-0aTmbmQe.d.ts → query-Ck190MOd.d.ts} +2 -2
- package/dist/{release-report-DeJpsBiA.d.ts → release-report-oBfOz8ku.d.ts} +3 -3
- package/dist/reporting.d.ts +8 -8
- package/dist/{researcher-Wc7dx6GM.d.ts → researcher-CaH0CwFC.d.ts} +6 -6
- package/dist/rl.d.ts +568 -15
- package/dist/rl.js +4 -4
- package/dist/{rubric-predictive-validity-DPnyG-CE.d.ts → rubric-predictive-validity-C-fMteAW.d.ts} +1 -1
- package/dist/{run-record-I-Z3JNvO.d.ts → run-record-DksGsfgv.d.ts} +1 -1
- package/dist/{runtime-trajectory-iW9IhV3e.d.ts → runtime-trajectory-h5i0SZUj.d.ts} +1 -1
- package/dist/{schema-m0gsnbt3.d.ts → schema-SGWcK9wa.d.ts} +1 -1
- package/dist/{semantic-concept-judge-BmNZPB_j.d.ts → semantic-concept-judge-D7z6JCLZ.d.ts} +57 -4
- package/dist/{store-BcFXE6LG.d.ts → store-BsVi7ncX.d.ts} +1 -1
- package/dist/storyboard/index.d.ts +1 -1
- package/dist/{summary-report-QMZVe3P-.d.ts → summary-report-Bz-0-t8v.d.ts} +2 -2
- package/dist/{test-graded-scenario-DeODGLra.d.ts → test-graded-scenario-mzYBKspu.d.ts} +3 -3
- package/dist/traces.d.ts +54 -11
- package/dist/traces.js +25 -27
- package/dist/{types-BdIv5dvA.d.ts → types-v--ctu-b.d.ts} +2 -2
- package/dist/wire/index.d.ts +5 -6
- package/package.json +1 -71
- package/dist/adapters/http.d.ts +0 -142
- package/dist/adapters/http.js +0 -203
- package/dist/adapters/http.js.map +0 -1
- package/dist/adapters/langchain.d.ts +0 -95
- package/dist/adapters/langchain.js +0 -34
- package/dist/adapters/langchain.js.map +0 -1
- package/dist/adapters/otel.d.ts +0 -112
- package/dist/adapters/otel.js +0 -110
- package/dist/adapters/otel.js.map +0 -1
- package/dist/chunk-2OGPXHOB.js.map +0 -1
- package/dist/chunk-45EEMHTC.js +0 -35
- package/dist/chunk-45EEMHTC.js.map +0 -1
- package/dist/chunk-5BKGXME7.js +0 -65
- package/dist/chunk-5BKGXME7.js.map +0 -1
- package/dist/chunk-5PK3626Q.js.map +0 -1
- package/dist/chunk-6SK5VFYK.js +0 -100
- package/dist/chunk-6SK5VFYK.js.map +0 -1
- package/dist/chunk-DBDRR6GF.js.map +0 -1
- package/dist/chunk-DJWX3GVS.js +0 -81
- package/dist/chunk-DJWX3GVS.js.map +0 -1
- package/dist/chunk-FOUG2VVS.js +0 -855
- package/dist/chunk-FOUG2VVS.js.map +0 -1
- package/dist/chunk-JZXGWLK5.js.map +0 -1
- package/dist/chunk-K7QEIHHJ.js +0 -613
- package/dist/chunk-K7QEIHHJ.js.map +0 -1
- package/dist/chunk-KKHDIONI.js +0 -414
- package/dist/chunk-KKHDIONI.js.map +0 -1
- package/dist/chunk-KMPRBJK4.js +0 -74
- package/dist/chunk-KMPRBJK4.js.map +0 -1
- package/dist/chunk-Q2JRAWRI.js +0 -196
- package/dist/chunk-Q2JRAWRI.js.map +0 -1
- package/dist/chunk-RZTMDUO7.js +0 -49
- package/dist/chunk-RZTMDUO7.js.map +0 -1
- package/dist/chunk-STGVSCDH.js +0 -202
- package/dist/chunk-STGVSCDH.js.map +0 -1
- package/dist/chunk-YEHAEDUD.js.map +0 -1
- package/dist/control-runtime-Acf9CGhw.d.ts +0 -182
- package/dist/corpus-eBVwhCp1.d.ts +0 -560
- package/dist/counterfactual-DlOz8PBx.d.ts +0 -85
- package/dist/diagnose.d.ts +0 -252
- package/dist/diagnose.js +0 -382
- package/dist/diagnose.js.map +0 -1
- package/dist/feedback-trajectory-C9KCo8ag.d.ts +0 -169
- package/dist/governance/index.d.ts +0 -135
- package/dist/governance/index.js +0 -18
- package/dist/governance/index.js.map +0 -1
- package/dist/groundedness/index.d.ts +0 -112
- package/dist/groundedness/index.js +0 -77
- package/dist/groundedness/index.js.map +0 -1
- package/dist/harness-optimizer-mOl9XX_O.d.ts +0 -106
- package/dist/kind-factory-DvIGo_cP.d.ts +0 -171
- package/dist/knowledge/index.d.ts +0 -103
- package/dist/knowledge/index.js +0 -18
- package/dist/knowledge/index.js.map +0 -1
- package/dist/pareto-E-pembql.d.ts +0 -81
- package/dist/perf/index.d.ts +0 -123
- package/dist/perf/index.js +0 -18
- package/dist/perf/index.js.map +0 -1
- package/dist/prm/index.d.ts +0 -104
- package/dist/prm/index.js +0 -265
- package/dist/prm/index.js.map +0 -1
- package/dist/product-benchmark/index.d.ts +0 -247
- package/dist/product-benchmark/index.js +0 -37
- package/dist/product-benchmark/index.js.map +0 -1
- package/dist/red-team-KmmiqBlY.d.ts +0 -63
- package/dist/redact-B40YG2M_.d.ts +0 -45
- package/dist/rubric-Cc6UHvUb.d.ts +0 -73
- package/dist/run-critic-CmMf05uV.d.ts +0 -56
- package/dist/sink-fetch-B1Yg4Til.d.ts +0 -101
- package/dist/telemetry/file.d.ts +0 -19
- package/dist/telemetry/file.js +0 -45
- package/dist/telemetry/file.js.map +0 -1
- package/dist/telemetry/index.d.ts +0 -38
- package/dist/telemetry/index.js +0 -130
- package/dist/telemetry/index.js.map +0 -1
- package/dist/testing-C21CHsq2.d.ts +0 -20
- package/dist/testing.d.ts +0 -1
- package/dist/testing.js +0 -8
- package/dist/testing.js.map +0 -1
- package/dist/trajectory-2TkpSEVh.d.ts +0 -33
- package/dist/workflow/index.d.ts +0 -496
- package/dist/workflow/index.js +0 -2178
- package/dist/workflow/index.js.map +0 -1
- /package/dist/{chunk-LOJ2QVCE.js.map → chunk-2IY4ILP4.js.map} +0 -0
- /package/dist/{chunk-LIEJUH2I.js.map → chunk-6PL5MGDL.js.map} +0 -0
- /package/dist/{chunk-OVPVM4JC.js.map → chunk-GTERJI6Q.js.map} +0 -0
- /package/dist/{chunk-GDZAWO2I.js.map → chunk-QFGTU7MT.js.map} +0 -0
- /package/dist/{chunk-R6D7NEYJ.js.map → chunk-RNB2NICW.js.map} +0 -0
- /package/dist/{chunk-V7HNA47Z.js.map → chunk-RSVSSZKF.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/workflow/event-schema.ts","../../src/workflow/schema.ts","../../src/workflow/feedback-pack.ts","../../src/workflow/sanitize.ts","../../src/workflow/trace-event-fields.ts","../../src/workflow/phase-graph.ts","../../src/workflow/summary.ts","../../src/workflow/intelligence-export.ts","../../src/workflow/run-record.ts","../../src/workflow/trajectory.ts","../../src/workflow/partner-report.ts","../../src/workflow/promotion-gate.ts","../../src/workflow/runtime-adapter.ts"],"sourcesContent":["import { ValidationError } from '../errors'\nimport type { WorkflowTraceEventKind } from './types'\n\nconst WORKFLOW_EVENT_KINDS = [\n 'workflow.started',\n 'workflow.phase',\n 'workflow.log',\n 'workflow.parallel.started',\n 'workflow.parallel.ended',\n 'workflow.pipeline.started',\n 'workflow.pipeline.ended',\n 'workflow.branch.started',\n 'workflow.branch.ended',\n 'workflow.branch.failed',\n 'workflow.agent.started',\n 'workflow.agent.ended',\n 'workflow.agent.failed',\n 'workflow.loop.started',\n 'workflow.loop.ended',\n 'workflow.loop.failed',\n 'workflow.verifier.started',\n 'workflow.verifier.ended',\n 'workflow.verifier.failed',\n 'workflow.analyst.started',\n 'workflow.analyst.ended',\n 'workflow.analyst.failed',\n 'workflow.reviewer.started',\n 'workflow.reviewer.ended',\n 'workflow.reviewer.failed',\n 'workflow.failed',\n 'workflow.ended',\n] as const satisfies readonly WorkflowTraceEventKind[]\n\nexport const WORKFLOW_TRACE_EVENT_KINDS: readonly WorkflowTraceEventKind[] = WORKFLOW_EVENT_KINDS\n\nconst WORKFLOW_EVENT_KIND_SET = new Set<string>(WORKFLOW_EVENT_KINDS)\nconst BRANCH_OPERATIONS = new Set(['parallel', 'pipeline'])\n\nexport function validateWorkflowTraceEventKind(kind: string): WorkflowTraceEventKind {\n if (!WORKFLOW_EVENT_KIND_SET.has(kind)) {\n throw new ValidationError(`unknown workflow trace event kind: ${kind}`)\n }\n return kind as WorkflowTraceEventKind\n}\n\nexport function validateWorkflowTraceEventPayload(\n kind: WorkflowTraceEventKind,\n payload: Record<string, unknown>,\n): Record<string, unknown> {\n switch (kind) {\n case 'workflow.started':\n requireRecord(payload.meta, `${kind}.payload.meta`)\n requireInteger(payload.depth, `${kind}.payload.depth`, { min: 0 })\n requireRecord(payload.caps, `${kind}.payload.caps`)\n return payload\n case 'workflow.phase':\n requireString(payload.title, `${kind}.payload.title`)\n return payload\n case 'workflow.log':\n requireString(payload.message, `${kind}.payload.message`)\n optionalString(payload.phase, `${kind}.payload.phase`)\n return payload\n case 'workflow.parallel.started':\n requireInteger(payload.branchCount, `${kind}.payload.branchCount`, { min: 0 })\n optionalString(payload.phase, `${kind}.payload.phase`)\n return payload\n case 'workflow.parallel.ended':\n requireInteger(payload.branchCount, `${kind}.payload.branchCount`, { min: 0 })\n requireNonNegativeNumber(payload.durationMs, `${kind}.payload.durationMs`)\n optionalString(payload.phase, `${kind}.payload.phase`)\n return payload\n case 'workflow.pipeline.started':\n requireInteger(payload.itemCount, `${kind}.payload.itemCount`, { min: 0 })\n requireInteger(payload.stageCount, `${kind}.payload.stageCount`, { min: 1 })\n optionalString(payload.phase, `${kind}.payload.phase`)\n return payload\n case 'workflow.pipeline.ended':\n requireInteger(payload.itemCount, `${kind}.payload.itemCount`, { min: 0 })\n requireInteger(payload.stageCount, `${kind}.payload.stageCount`, { min: 1 })\n requireNonNegativeNumber(payload.durationMs, `${kind}.payload.durationMs`)\n optionalString(payload.phase, `${kind}.payload.phase`)\n return payload\n case 'workflow.branch.started':\n validateBranchPayload(kind, payload, { terminal: false })\n return payload\n case 'workflow.branch.ended':\n validateBranchPayload(kind, payload, { terminal: true })\n return payload\n case 'workflow.branch.failed':\n validateBranchPayload(kind, payload, { terminal: true })\n requireString(payload.message, `${kind}.payload.message`)\n optionalString(payload.code, `${kind}.payload.code`)\n if (payload.stageIndex !== undefined) {\n requireInteger(payload.stageIndex, `${kind}.payload.stageIndex`, { min: 0 })\n }\n return payload\n case 'workflow.agent.started':\n validateIndexedPayload(kind, payload)\n requireInteger(payload.promptChars, `${kind}.payload.promptChars`, { min: 0 })\n optionalRecord(payload.metadata, `${kind}.payload.metadata`)\n return payload\n case 'workflow.agent.ended':\n validateDelegateEndedPayload(kind, payload)\n return payload\n case 'workflow.agent.failed':\n validateDelegateFailedPayload(kind, payload)\n return payload\n case 'workflow.loop.started':\n case 'workflow.verifier.started':\n case 'workflow.analyst.started':\n case 'workflow.reviewer.started':\n validateIndexedPayload(kind, payload)\n optionalRecord(payload.metadata, `${kind}.payload.metadata`)\n return payload\n case 'workflow.loop.ended':\n case 'workflow.verifier.ended':\n case 'workflow.analyst.ended':\n case 'workflow.reviewer.ended':\n validateDelegateEndedPayload(kind, payload)\n return payload\n case 'workflow.loop.failed':\n case 'workflow.verifier.failed':\n case 'workflow.analyst.failed':\n case 'workflow.reviewer.failed':\n validateDelegateFailedPayload(kind, payload)\n return payload\n case 'workflow.failed':\n requireString(payload.message, `${kind}.payload.message`)\n optionalString(payload.code, `${kind}.payload.code`)\n optionalString(payload.phase, `${kind}.payload.phase`)\n return payload\n case 'workflow.ended':\n requireNonNegativeNumber(payload.durationMs, `${kind}.payload.durationMs`)\n requireNonNegativeNumber(payload.costUsd, `${kind}.payload.costUsd`)\n validateTokenUsage(payload.tokenUsage, `${kind}.payload.tokenUsage`)\n requireInteger(payload.agentCalls, `${kind}.payload.agentCalls`, { min: 0 })\n requireInteger(payload.loopCalls, `${kind}.payload.loopCalls`, { min: 0 })\n return payload\n }\n}\n\nfunction validateBranchPayload(\n kind: WorkflowTraceEventKind,\n payload: Record<string, unknown>,\n options: { terminal: boolean },\n): void {\n const operation = requireString(payload.operation, `${kind}.payload.operation`)\n if (!BRANCH_OPERATIONS.has(operation)) {\n throw new ValidationError(`${kind}.payload.operation: expected parallel or pipeline`)\n }\n requireInteger(payload.branchIndex, `${kind}.payload.branchIndex`, { min: 0 })\n optionalString(payload.phase, `${kind}.payload.phase`)\n if (payload.stageCount !== undefined) {\n requireInteger(payload.stageCount, `${kind}.payload.stageCount`, { min: 1 })\n }\n if (options.terminal) {\n requireNonNegativeNumber(payload.durationMs, `${kind}.payload.durationMs`)\n }\n}\n\nfunction validateIndexedPayload(\n kind: WorkflowTraceEventKind,\n payload: Record<string, unknown>,\n): void {\n requireInteger(payload.index, `${kind}.payload.index`, { min: 0 })\n optionalString(payload.label, `${kind}.payload.label`)\n optionalString(payload.phase, `${kind}.payload.phase`)\n}\n\nfunction validateDelegateEndedPayload(\n kind: WorkflowTraceEventKind,\n payload: Record<string, unknown>,\n): void {\n validateIndexedPayload(kind, payload)\n requireNonNegativeNumber(payload.durationMs, `${kind}.payload.durationMs`)\n requireNonNegativeNumber(payload.costUsd, `${kind}.payload.costUsd`)\n validateTokenUsage(payload.tokenUsage, `${kind}.payload.tokenUsage`)\n}\n\nfunction validateDelegateFailedPayload(\n kind: WorkflowTraceEventKind,\n payload: Record<string, unknown>,\n): void {\n validateIndexedPayload(kind, payload)\n requireNonNegativeNumber(payload.durationMs, `${kind}.payload.durationMs`)\n requireString(payload.message, `${kind}.payload.message`)\n optionalString(payload.code, `${kind}.payload.code`)\n}\n\nfunction validateTokenUsage(value: unknown, path: string): void {\n const tokenUsage = requireRecord(value, path)\n requireNonNegativeNumber(tokenUsage.input, `${path}.input`)\n requireNonNegativeNumber(tokenUsage.output, `${path}.output`)\n if (tokenUsage.cached !== undefined) {\n requireNonNegativeNumber(tokenUsage.cached, `${path}.cached`)\n }\n}\n\nfunction requireRecord(value: unknown, path: string): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new ValidationError(`${path}: expected object`)\n }\n return value as Record<string, unknown>\n}\n\nfunction optionalRecord(value: unknown, path: string): void {\n if (value !== undefined) requireRecord(value, path)\n}\n\nfunction requireString(value: unknown, path: string): string {\n if (typeof value !== 'string' || value.length === 0) {\n throw new ValidationError(`${path}: expected non-empty string`)\n }\n return value\n}\n\nfunction optionalString(value: unknown, path: string): void {\n if (value !== undefined) requireString(value, path)\n}\n\nfunction requireNonNegativeNumber(value: unknown, path: string): number {\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n throw new ValidationError(`${path}: expected finite non-negative number`)\n }\n return value\n}\n\nfunction requireInteger(value: unknown, path: string, options: { min?: number } = {}): number {\n if (typeof value !== 'number' || !Number.isInteger(value)) {\n throw new ValidationError(`${path}: expected integer`)\n }\n if (options.min !== undefined && value < options.min) {\n throw new ValidationError(`${path}: expected integer >= ${options.min}`)\n }\n return value\n}\n","import { ValidationError } from '../errors'\nimport { validateWorkflowTraceEventKind, validateWorkflowTraceEventPayload } from './event-schema'\nimport type {\n WorkflowTraceEnvelope,\n WorkflowTraceEvent,\n WorkflowTraceSummary,\n WorkflowTraceVersion,\n} from './types'\n\nconst TRACE_VERSION: WorkflowTraceVersion = 'workflow-trace-v1'\n\nexport function validateWorkflowTraceEvent(input: unknown): WorkflowTraceEvent {\n const obj = expectRecord(input, 'event')\n const kind = validateWorkflowTraceEventKind(expectString(obj.kind, 'event.kind'))\n const runId = expectString(obj.runId, 'event.runId')\n const timestamp = expectFinite(obj.timestamp, 'event.timestamp')\n const payload = validateWorkflowTraceEventPayload(\n kind,\n expectRecord(obj.payload, 'event.payload'),\n )\n return { kind, runId, timestamp, payload }\n}\n\nexport function validateWorkflowTraceEnvelope(input: unknown): WorkflowTraceEnvelope {\n const obj = expectRecord(input, 'workflow trace envelope')\n if (obj.traceVersion !== TRACE_VERSION) {\n throw new ValidationError(`workflow traceVersion must be ${TRACE_VERSION}`)\n }\n const runId = expectString(obj.runId, 'workflow trace runId')\n if (!Array.isArray(obj.events) || obj.events.length === 0) {\n throw new ValidationError('workflow trace envelope must include at least one event')\n }\n const events = obj.events.map(validateWorkflowTraceEvent)\n for (const event of events) {\n if (event.runId !== runId) {\n throw new ValidationError(`workflow trace event runId ${event.runId} does not match ${runId}`)\n }\n }\n validateWorkflowTraceLifecycle(events)\n return {\n traceVersion: TRACE_VERSION,\n runId,\n ...(obj.topology !== undefined ? { topology: obj.topology as never } : {}),\n events,\n ...(obj.artifacts !== undefined ? { artifacts: validateArtifacts(obj.artifacts) } : {}),\n ...(obj.metadata !== undefined ? { metadata: expectRecord(obj.metadata, 'metadata') } : {}),\n }\n}\n\nfunction validateWorkflowTraceLifecycle(events: readonly WorkflowTraceEvent[]): void {\n const first = events[0]\n if (first?.kind !== 'workflow.started') {\n throw new ValidationError('workflow trace first event must be workflow.started')\n }\n for (let index = 1; index < events.length; index += 1) {\n if (events[index]!.timestamp < events[index - 1]!.timestamp) {\n throw new ValidationError(`workflow trace timestamps must be nondecreasing at event ${index}`)\n }\n }\n const terminalEvents = events.filter(\n (event) => event.kind === 'workflow.ended' || event.kind === 'workflow.failed',\n )\n if (terminalEvents.length !== 1) {\n throw new ValidationError(\n `workflow trace must include exactly one terminal event, got ${terminalEvents.length}`,\n )\n }\n const last = events.at(-1)\n if (last?.kind !== terminalEvents[0]?.kind) {\n throw new ValidationError('workflow trace terminal event must be last')\n }\n}\n\nexport function summarizeWorkflowTrace(\n input: WorkflowTraceEnvelope | unknown,\n): WorkflowTraceSummary {\n const envelope = validateWorkflowTraceEnvelope(input)\n const started = envelope.events.find((e) => e.kind === 'workflow.started')\n const ended = envelope.events.find((e) => e.kind === 'workflow.ended')\n const failed = envelope.events.find((e) => e.kind === 'workflow.failed')\n const endedPayload = ended?.payload ?? {}\n const tokenUsage = tokenUsageOf(endedPayload.tokenUsage)\n return {\n runId: envelope.runId,\n startedAt: started?.timestamp,\n endedAt: ended?.timestamp,\n durationMs: finiteOr(endedPayload.durationMs, durationFromEvents(envelope.events)),\n costUsd: finiteOr(endedPayload.costUsd, 0),\n tokenUsage,\n phaseCount: envelope.events.filter((e) => e.kind === 'workflow.phase').length,\n branchCount: envelope.events.filter((e) => e.kind === 'workflow.branch.ended').length,\n failedBranchCount: envelope.events.filter((e) => e.kind === 'workflow.branch.failed').length,\n agentCalls: finiteOr(\n endedPayload.agentCalls,\n countEvents(envelope.events, 'workflow.agent.ended', 'workflow.agent.failed'),\n ),\n loopCalls: finiteOr(\n endedPayload.loopCalls,\n countEvents(envelope.events, 'workflow.loop.ended', 'workflow.loop.failed'),\n ),\n verifierCalls: countEvents(\n envelope.events,\n 'workflow.verifier.ended',\n 'workflow.verifier.failed',\n ),\n analystCalls: countEvents(envelope.events, 'workflow.analyst.ended', 'workflow.analyst.failed'),\n reviewerCalls: countEvents(\n envelope.events,\n 'workflow.reviewer.ended',\n 'workflow.reviewer.failed',\n ),\n agentFailures: countEvents(envelope.events, 'workflow.agent.failed'),\n loopFailures: countEvents(envelope.events, 'workflow.loop.failed'),\n verifierFailures: countEvents(envelope.events, 'workflow.verifier.failed'),\n analystFailures: countEvents(envelope.events, 'workflow.analyst.failed'),\n reviewerFailures: countEvents(envelope.events, 'workflow.reviewer.failed'),\n eventCount: envelope.events.length,\n failed: failed !== undefined,\n failureMessage:\n typeof failed?.payload.message === 'string' ? failed.payload.message : undefined,\n }\n}\n\nfunction countEvents(\n events: readonly WorkflowTraceEvent[],\n ...kinds: readonly WorkflowTraceEvent['kind'][]\n): number {\n const allowed = new Set(kinds)\n return events.filter((event) => allowed.has(event.kind)).length\n}\n\nfunction validateArtifacts(value: unknown): WorkflowTraceEnvelope['artifacts'] {\n if (!Array.isArray(value)) throw new ValidationError('workflow artifacts must be an array')\n return value.map((artifact, index) => {\n const obj = expectRecord(artifact, `artifacts[${index}]`)\n return {\n kind: expectString(obj.kind, `artifacts[${index}].kind`),\n uri: expectString(obj.uri, `artifacts[${index}].uri`),\n ...(obj.contentType !== undefined\n ? { contentType: expectString(obj.contentType, `artifacts[${index}].contentType`) }\n : {}),\n ...(obj.sha256 !== undefined\n ? { sha256: expectString(obj.sha256, `artifacts[${index}].sha256`) }\n : {}),\n ...(obj.metadata !== undefined\n ? { metadata: expectRecord(obj.metadata, `artifacts[${index}].metadata`) }\n : {}),\n }\n })\n}\n\nfunction durationFromEvents(events: readonly WorkflowTraceEvent[]): number {\n const first = events[0]?.timestamp\n const last = events.at(-1)?.timestamp\n if (!Number.isFinite(first) || !Number.isFinite(last)) return 0\n return Math.max(0, (last as number) - (first as number))\n}\n\nfunction tokenUsageOf(value: unknown): { input: number; output: number; cached?: number } {\n const obj = value && typeof value === 'object' ? (value as Record<string, unknown>) : {}\n const cached = finiteOrUndefined(obj.cached)\n return {\n input: finiteOr(obj.input, 0),\n output: finiteOr(obj.output, 0),\n ...(cached !== undefined ? { cached } : {}),\n }\n}\n\nfunction finiteOr(value: unknown, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : fallback\n}\n\nfunction finiteOrUndefined(value: unknown): number | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined\n}\n\nfunction expectRecord(value: unknown, path: string): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new ValidationError(`${path}: expected object`)\n }\n return value as Record<string, unknown>\n}\n\nfunction expectString(value: unknown, path: string): string {\n if (typeof value !== 'string' || value.length === 0) {\n throw new ValidationError(`${path}: expected non-empty string`)\n }\n return value\n}\n\nfunction expectFinite(value: unknown, path: string): number {\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n throw new ValidationError(`${path}: expected finite number`)\n }\n return value\n}\n","import type { AnalystFinding, AnalystSeverity, EvidenceRef } from '../analyst/types'\nimport type { FailureClusterInsight } from '../contract/insight-report'\nimport type { LayerResult, VerificationReport } from '../multi-layer-verifier'\nimport type { FailureClusterReport } from '../pipelines/failure-cluster'\nimport { summarizeWorkflowTrace, validateWorkflowTraceEnvelope } from './schema'\nimport type { WorkflowTraceEnvelope, WorkflowTraceSummary } from './types'\n\nexport type WorkflowFeedbackPackVersion = 'workflow-feedback-pack-v1'\n\nexport type WorkflowFeedbackSeverity = AnalystSeverity\n\nexport interface WorkflowToolUsageSummary {\n totalCalls: number\n erroredCalls: number\n byTool: Record<string, { calls: number; errors: number }>\n}\n\nexport interface WorkflowVerifierFindingSummary {\n severity: WorkflowFeedbackSeverity\n message: string\n evidence?: string\n detail?: Record<string, unknown>\n}\n\nexport interface WorkflowVerifierLayerSummary {\n layer: string\n status: LayerResult['status']\n score?: number\n durationMs: number\n reason?: string\n findings: WorkflowVerifierFindingSummary[]\n diagnostics?: Record<string, number | null>\n}\n\nexport interface WorkflowVerifierSummary {\n allPass: boolean\n blendedScore: number\n durationMs: number\n failedLayers: string[]\n layers: WorkflowVerifierLayerSummary[]\n}\n\nexport interface WorkflowFailureClusterInput {\n id: string\n name: string\n share?: number\n runCount?: number\n exemplars?: readonly string[]\n suggestedFix?: string\n metadata?: Record<string, unknown>\n}\n\nexport interface WorkflowFailureClusterSummary {\n id: string\n name: string\n share: number\n runCount?: number\n exemplars: string[]\n suggestedFix?: string\n source: 'failure-cluster-view' | 'insight-report' | 'custom'\n metadata?: Record<string, unknown>\n}\n\nexport interface WorkflowAnalystFindingSummary {\n findingId: string\n analystId: string\n severity: WorkflowFeedbackSeverity\n area: string\n claim: string\n confidence: number\n subject?: string\n recommendedAction?: string\n evidenceRefs: EvidenceRef[]\n}\n\nexport interface WorkflowAnalystFeedbackPack {\n schemaVersion: WorkflowFeedbackPackVersion\n runId: string\n generatedAt: string\n summary: WorkflowTraceSummary\n verifier?: WorkflowVerifierSummary\n toolUsage: WorkflowToolUsageSummary\n failureClusters: WorkflowFailureClusterSummary[]\n findings: WorkflowAnalystFindingSummary[]\n recommendations: string[]\n driverContextLines: string[]\n}\n\nexport interface WorkflowFeedbackPackLimits {\n findings?: number\n clusters?: number\n layerFindings?: number\n recommendations?: number\n contextLines?: number\n}\n\nexport interface BuildWorkflowAnalystFeedbackPackOptions {\n envelope: WorkflowTraceEnvelope | unknown\n verifier?: VerificationReport\n analystFindings?: readonly AnalystFinding[]\n failureClusters?:\n | FailureClusterReport\n | FailureClusterInsight\n | readonly WorkflowFailureClusterInput[]\n generatedAt?: string\n limits?: WorkflowFeedbackPackLimits\n}\n\nconst PACK_VERSION: WorkflowFeedbackPackVersion = 'workflow-feedback-pack-v1'\n\nconst DEFAULT_LIMITS: Required<WorkflowFeedbackPackLimits> = {\n findings: 12,\n clusters: 8,\n layerFindings: 5,\n recommendations: 10,\n contextLines: 24,\n}\n\nexport function buildWorkflowAnalystFeedbackPack(\n options: BuildWorkflowAnalystFeedbackPackOptions,\n): WorkflowAnalystFeedbackPack {\n const limits = { ...DEFAULT_LIMITS, ...(options.limits ?? {}) }\n const envelope = validateWorkflowTraceEnvelope(options.envelope)\n const summary = summarizeWorkflowTrace(envelope)\n const verifier = options.verifier ? summarizeVerifier(options.verifier, limits) : undefined\n const toolUsage = summarizeToolUsage(envelope)\n const failureClusters = normalizeFailureClusters(options.failureClusters)\n .sort((a, b) => b.share - a.share)\n .slice(0, limits.clusters)\n const findings = summarizeFindings(options.analystFindings ?? [])\n .sort(compareFindings)\n .slice(0, limits.findings)\n const recommendations = uniqueStrings([\n ...recommendFromVerifier(verifier),\n ...failureClusters.flatMap((cluster) => (cluster.suggestedFix ? [cluster.suggestedFix] : [])),\n ...findings.flatMap((finding) =>\n finding.recommendedAction ? [finding.recommendedAction] : [],\n ),\n ...(summary.failed && summary.failureMessage\n ? [`Inspect workflow failure: ${summary.failureMessage}`]\n : []),\n ]).slice(0, limits.recommendations)\n\n const pack: WorkflowAnalystFeedbackPack = {\n schemaVersion: PACK_VERSION,\n runId: envelope.runId,\n generatedAt: options.generatedAt ?? new Date().toISOString(),\n summary,\n ...(verifier ? { verifier } : {}),\n toolUsage,\n failureClusters,\n findings,\n recommendations,\n driverContextLines: [],\n }\n return {\n ...pack,\n driverContextLines: renderDriverContextLines(pack).slice(0, limits.contextLines),\n }\n}\n\nexport function renderWorkflowFeedbackPack(\n pack: WorkflowAnalystFeedbackPack,\n options: { maxChars?: number } = {},\n): string {\n const lines = [\n `Workflow feedback pack for ${pack.runId}`,\n `status=${pack.summary.failed ? 'failed' : 'completed'} durationMs=${pack.summary.durationMs} costUsd=${pack.summary.costUsd.toFixed(6)} tokens=${pack.summary.tokenUsage.input}/${pack.summary.tokenUsage.output} events=${pack.summary.eventCount}`,\n renderDelegateFailureCounts(pack.summary),\n pack.verifier\n ? `verifier=${pack.verifier.allPass ? 'pass' : 'fail'} blendedScore=${pack.verifier.blendedScore.toFixed(3)} failedLayers=${pack.verifier.failedLayers.join(',') || 'none'}`\n : undefined,\n pack.toolUsage.totalCalls > 0\n ? `tools=${pack.toolUsage.totalCalls} errors=${pack.toolUsage.erroredCalls} byTool=${formatToolUsage(pack.toolUsage)}`\n : undefined,\n pack.failureClusters.length > 0 ? 'Failure clusters:' : undefined,\n ...pack.failureClusters.map(\n (cluster) =>\n `- ${cluster.name} share=${cluster.share.toFixed(3)} exemplars=${cluster.exemplars.join(',') || 'none'}${cluster.suggestedFix ? ` fix=${cluster.suggestedFix}` : ''}`,\n ),\n pack.findings.length > 0 ? 'Analyst findings:' : undefined,\n ...pack.findings.map(\n (finding) =>\n `- ${finding.severity} ${finding.area}: ${finding.claim}${finding.recommendedAction ? ` action=${finding.recommendedAction}` : ''}`,\n ),\n pack.recommendations.length > 0 ? 'Recommended next moves:' : undefined,\n ...pack.recommendations.map((recommendation) => `- ${recommendation}`),\n ].filter((line): line is string => Boolean(line))\n const rendered = lines.join('\\n')\n const maxChars = options.maxChars\n if (maxChars === undefined || rendered.length <= maxChars) return rendered\n if (maxChars <= 1) return rendered.slice(0, Math.max(0, maxChars))\n return `${rendered.slice(0, maxChars - 1)}…`\n}\n\nfunction renderDelegateFailureCounts(summary: WorkflowTraceSummary): string | undefined {\n const entries: Array<[string, number]> = [\n ['agent', summary.agentFailures],\n ['loop', summary.loopFailures],\n ['verifier', summary.verifierFailures],\n ['analyst', summary.analystFailures],\n ['reviewer', summary.reviewerFailures],\n ]\n const failures = entries.filter((entry) => entry[1] > 0)\n if (failures.length === 0) return undefined\n return `delegateFailures=${failures.map(([kind, count]) => `${kind}:${count}`).join(',')}`\n}\n\nfunction summarizeVerifier(\n verifier: VerificationReport,\n limits: Required<WorkflowFeedbackPackLimits>,\n): WorkflowVerifierSummary {\n const layers = verifier.layers.map((layer) => ({\n layer: layer.layer,\n status: layer.status,\n ...(layer.score !== undefined ? { score: layer.score } : {}),\n durationMs: layer.durationMs,\n ...(layer.reason ? { reason: layer.reason } : {}),\n findings: layer.findings\n .map((finding) => ({\n severity: verifierSeverity(finding.severity),\n message: finding.message,\n ...(finding.evidence ? { evidence: finding.evidence } : {}),\n ...(finding.detail ? { detail: finding.detail } : {}),\n }))\n .slice(0, limits.layerFindings),\n ...(layer.diagnostics ? { diagnostics: layer.diagnostics } : {}),\n }))\n return {\n allPass: verifier.allPass,\n blendedScore: verifier.blendedScore,\n durationMs: verifier.durationMs,\n failedLayers: verifier.layers\n .filter(\n (layer) =>\n layer.status === 'fail' || layer.status === 'error' || layer.status === 'timeout',\n )\n .map((layer) => layer.layer),\n layers,\n }\n}\n\nfunction summarizeToolUsage(envelope: WorkflowTraceEnvelope): WorkflowToolUsageSummary {\n const summary: WorkflowToolUsageSummary = { totalCalls: 0, erroredCalls: 0, byTool: {} }\n for (const event of envelope.events) {\n collectToolUsagePayload(summary, event.payload.toolUsage)\n collectToolCalls(summary, event.payload.toolCalls)\n collectSingleTool(summary, event.payload)\n }\n return summary\n}\n\nfunction collectToolUsagePayload(summary: WorkflowToolUsageSummary, value: unknown): void {\n if (!isRecord(value)) return\n if (!isRecord(value.byTool)) {\n summary.totalCalls += finiteNumber(value.totalCalls)\n summary.erroredCalls += finiteNumber(value.erroredCalls)\n return\n }\n let addedByTool = false\n for (const [tool, raw] of Object.entries(value.byTool)) {\n if (!isRecord(raw)) continue\n const calls = finiteNumber(raw.calls)\n const errors = finiteNumber(raw.errors)\n addTool(summary, tool, calls, errors)\n addedByTool ||= calls > 0 || errors > 0\n }\n if (!addedByTool) {\n summary.totalCalls += finiteNumber(value.totalCalls)\n summary.erroredCalls += finiteNumber(value.erroredCalls)\n }\n}\n\nfunction collectToolCalls(summary: WorkflowToolUsageSummary, value: unknown): void {\n if (!Array.isArray(value)) return\n for (const call of value) {\n if (!isRecord(call)) continue\n const name = stringValue(call.toolName) ?? stringValue(call.name)\n if (!name) continue\n const errored =\n call.status === 'error' ||\n call.error !== undefined ||\n call.ok === false ||\n call.success === false\n addTool(summary, name, 1, errored ? 1 : 0)\n }\n}\n\nfunction collectSingleTool(\n summary: WorkflowToolUsageSummary,\n payload: Record<string, unknown>,\n): void {\n const name = stringValue(payload.toolName)\n if (!name) return\n const errored =\n payload.status === 'error' ||\n payload.error !== undefined ||\n payload.ok === false ||\n payload.success === false\n addTool(summary, name, 1, errored ? 1 : 0)\n}\n\nfunction addTool(\n summary: WorkflowToolUsageSummary,\n name: string,\n calls: number,\n errors: number,\n): void {\n if (calls === 0 && errors === 0) return\n const current = summary.byTool[name] ?? { calls: 0, errors: 0 }\n current.calls += calls\n current.errors += errors\n summary.byTool[name] = current\n summary.totalCalls += calls\n summary.erroredCalls += errors\n}\n\nfunction normalizeFailureClusters(\n input:\n | FailureClusterReport\n | FailureClusterInsight\n | readonly WorkflowFailureClusterInput[]\n | undefined,\n): WorkflowFailureClusterSummary[] {\n if (!input) return []\n if (Array.isArray(input)) {\n return input.map((cluster) => ({\n id: cluster.id,\n name: cluster.name,\n share: clamp01(cluster.share ?? 0),\n ...(cluster.runCount !== undefined ? { runCount: cluster.runCount } : {}),\n exemplars: [...(cluster.exemplars ?? [])],\n ...(cluster.suggestedFix ? { suggestedFix: cluster.suggestedFix } : {}),\n source: 'custom',\n ...(cluster.metadata ? { metadata: cluster.metadata } : {}),\n }))\n }\n const report = input as FailureClusterReport | FailureClusterInsight\n const clusters = report.clusters ?? []\n const first = clusters[0] as unknown\n if (isRecord(first) && typeof first.failureClass === 'string') {\n const failureReport = report as FailureClusterReport\n return failureReport.clusters.map((cluster) => ({\n id: [\n cluster.failureClass,\n cluster.toolName ?? '',\n cluster.argPrefix ?? '',\n cluster.dimension ?? '',\n ].join('|'),\n name: [\n cluster.failureClass,\n cluster.toolName ? `tool:${cluster.toolName}` : undefined,\n cluster.dimension ? `dimension:${cluster.dimension}` : undefined,\n ]\n .filter(Boolean)\n .join(' '),\n share: failureReport.totalFailures > 0 ? cluster.runCount / failureReport.totalFailures : 0,\n runCount: cluster.runCount,\n exemplars: [cluster.exampleRunId],\n source: 'failure-cluster-view',\n metadata: {\n scenarioIds: cluster.scenarioIds,\n exampleError: cluster.exampleError,\n argPrefix: cluster.argPrefix,\n },\n }))\n }\n const insight = report as FailureClusterInsight\n return insight.clusters.map((cluster) => ({\n id: cluster.id,\n name: cluster.name,\n share: clamp01(cluster.share),\n exemplars: [...cluster.exemplars],\n ...(cluster.suggestedFix ? { suggestedFix: cluster.suggestedFix } : {}),\n source: 'insight-report',\n }))\n}\n\nfunction summarizeFindings(findings: readonly AnalystFinding[]): WorkflowAnalystFindingSummary[] {\n return findings.map((finding) => ({\n findingId: finding.finding_id,\n analystId: finding.analyst_id,\n severity: finding.severity,\n area: finding.area,\n claim: finding.claim,\n confidence: clamp01(finding.confidence),\n ...(finding.subject ? { subject: finding.subject } : {}),\n ...(finding.recommended_action ? { recommendedAction: finding.recommended_action } : {}),\n evidenceRefs: finding.evidence_refs,\n }))\n}\n\nfunction recommendFromVerifier(verifier: WorkflowVerifierSummary | undefined): string[] {\n if (!verifier || verifier.allPass) return []\n return verifier.layers\n .filter((layer) => verifier.failedLayers.includes(layer.layer))\n .map((layer) => {\n const firstFinding = layer.findings[0]?.message\n const detail = layer.reason ?? firstFinding ?? layer.status\n return `Fix verifier layer \"${layer.layer}\": ${detail}`\n })\n}\n\nfunction renderDriverContextLines(pack: WorkflowAnalystFeedbackPack): string[] {\n return renderWorkflowFeedbackPack(pack)\n .split('\\n')\n .map((line) => line.trim())\n .filter(Boolean)\n}\n\nfunction compareFindings(\n left: WorkflowAnalystFindingSummary,\n right: WorkflowAnalystFindingSummary,\n): number {\n const severityDelta = severityRank(right.severity) - severityRank(left.severity)\n if (severityDelta !== 0) return severityDelta\n return right.confidence - left.confidence\n}\n\nfunction verifierSeverity(severity: string): WorkflowFeedbackSeverity {\n switch (severity) {\n case 'critical':\n return 'critical'\n case 'major':\n return 'high'\n case 'minor':\n return 'low'\n case 'info':\n return 'info'\n default:\n return 'medium'\n }\n}\n\nfunction severityRank(severity: WorkflowFeedbackSeverity): number {\n switch (severity) {\n case 'critical':\n return 5\n case 'high':\n return 4\n case 'medium':\n return 3\n case 'low':\n return 2\n case 'info':\n return 1\n }\n}\n\nfunction uniqueStrings(values: readonly string[]): string[] {\n const out: string[] = []\n const seen = new Set<string>()\n for (const value of values) {\n const trimmed = value.trim()\n if (trimmed.length === 0 || seen.has(trimmed)) continue\n seen.add(trimmed)\n out.push(trimmed)\n }\n return out\n}\n\nfunction formatToolUsage(summary: WorkflowToolUsageSummary): string {\n return Object.entries(summary.byTool)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([tool, usage]) => `${tool}:${usage.calls}/${usage.errors}`)\n .join(',')\n}\n\nfunction finiteNumber(value: unknown): number {\n return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : 0\n}\n\nfunction clamp01(value: number): number {\n if (!Number.isFinite(value)) return 0\n return Math.max(0, Math.min(1, value))\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n","import { createHash } from 'node:crypto'\n\nimport {\n DEFAULT_REDACTION_RULES,\n type RedactionReport,\n type RedactionRule,\n redactString,\n} from '../trace/redact'\nimport { validateWorkflowTraceEnvelope } from './schema'\nimport type { WorkflowTraceArtifact, WorkflowTraceEnvelope, WorkflowTraceEvent } from './types'\n\nexport interface WorkflowTraceSanitizationReport extends RedactionReport {\n hashedArgs: number\n truncatedStrings: number\n droppedPayloadKeys: Record<string, number>\n droppedArtifactContents: number\n}\n\nexport interface SanitizeWorkflowTraceEnvelopeOptions {\n rules?: readonly RedactionRule[]\n maxStringLength?: number\n hashSalt?: string\n approvedArtifactUris?: readonly string[]\n approvedArtifactKinds?: readonly string[]\n}\n\nexport interface SanitizedWorkflowTraceEnvelopeResult {\n envelope: WorkflowTraceEnvelope\n report: WorkflowTraceSanitizationReport\n}\n\nconst DEFAULT_MAX_STRING_LENGTH = 600\n\nconst SECRET_KEY_RE =\n /^(authorization|cookie|set-cookie|x-api-key|api[-_]?key|token|access[-_]?token|refresh[-_]?token|secret|password|passwd|session|credential|credentials)$/i\nconst ARG_KEY_RE = /^(args|arguments|rawargs|raw_args|toolargs|tool_args|inputargs|input_args)$/i\nconst FILE_CONTENT_KEY_RE = /^(filecontent|filecontents|file_content|file_contents|contents)$/i\nconst FILE_HINT_KEY_RE = /^(path|filepath|file_path|filename|file|uri)$/i\n\nexport function sanitizeWorkflowTraceEnvelope(\n input: WorkflowTraceEnvelope | unknown,\n options: SanitizeWorkflowTraceEnvelopeOptions = {},\n): SanitizedWorkflowTraceEnvelopeResult {\n const envelope = validateWorkflowTraceEnvelope(input)\n const report = emptyReport()\n const ctx: SanitizeContext = {\n rules: [...(options.rules ?? DEFAULT_REDACTION_RULES)],\n maxStringLength: options.maxStringLength ?? DEFAULT_MAX_STRING_LENGTH,\n hashSalt: options.hashSalt ?? '',\n approvedArtifactUris: new Set(options.approvedArtifactUris ?? []),\n approvedArtifactKinds: new Set(options.approvedArtifactKinds ?? []),\n report,\n }\n\n return {\n envelope: {\n traceVersion: envelope.traceVersion,\n runId: envelope.runId,\n ...(envelope.topology ? { topology: sanitizeValue(envelope.topology, ctx) as never } : {}),\n events: envelope.events.map((event) => sanitizeWorkflowTraceEvent(event, ctx)),\n ...(envelope.artifacts ? { artifacts: sanitizeArtifacts(envelope.artifacts, ctx) } : {}),\n ...(envelope.metadata\n ? { metadata: sanitizeRecord(envelope.metadata, ctx) as Record<string, unknown> }\n : {}),\n },\n report,\n }\n}\n\nfunction sanitizeWorkflowTraceEvent(\n event: WorkflowTraceEvent,\n ctx: SanitizeContext,\n): WorkflowTraceEvent {\n return {\n kind: event.kind,\n runId: event.runId,\n timestamp: event.timestamp,\n payload: sanitizeRecord(event.payload, ctx) as Record<string, unknown>,\n }\n}\n\nfunction sanitizeArtifacts(\n artifacts: readonly WorkflowTraceArtifact[],\n ctx: SanitizeContext,\n): WorkflowTraceArtifact[] {\n return artifacts.map((artifact) => {\n const approved =\n ctx.approvedArtifactUris.has(artifact.uri) || ctx.approvedArtifactKinds.has(artifact.kind)\n const metadata = artifact.metadata\n ? sanitizeRecord(artifact.metadata, ctx, { artifactApproved: approved })\n : undefined\n return {\n kind: artifact.kind,\n uri: sanitizeString(artifact.uri, ctx),\n ...(artifact.contentType ? { contentType: sanitizeString(artifact.contentType, ctx) } : {}),\n ...(artifact.sha256 ? { sha256: artifact.sha256 } : {}),\n ...(metadata ? { metadata: metadata as Record<string, unknown> } : {}),\n }\n })\n}\n\nfunction sanitizeRecord(\n record: Record<string, unknown>,\n ctx: SanitizeContext,\n options: { artifactApproved?: boolean } = {},\n): Record<string, unknown> {\n const out: Record<string, unknown> = {}\n const hasFileHint = Object.keys(record).some((key) => FILE_HINT_KEY_RE.test(key))\n for (const [key, value] of Object.entries(record)) {\n if (SECRET_KEY_RE.test(key)) {\n out[key] = `[redacted:${key}]`\n increment(ctx.report.droppedPayloadKeys, key)\n continue\n }\n if (ARG_KEY_RE.test(key)) {\n out[key] = hashedValue(value, ctx)\n ctx.report.hashedArgs += 1\n continue\n }\n if (!options.artifactApproved && isFileContentKey(key, hasFileHint)) {\n out[key] = hashedValue(value, ctx)\n ctx.report.droppedArtifactContents += 1\n continue\n }\n out[key] = sanitizeValue(value, ctx)\n }\n return out\n}\n\nfunction sanitizeValue(value: unknown, ctx: SanitizeContext): unknown {\n if (typeof value === 'string') return sanitizeString(value, ctx)\n if (Array.isArray(value)) return value.map((item) => sanitizeValue(item, ctx))\n if (isRecord(value)) return sanitizeRecord(value, ctx)\n return value\n}\n\nfunction sanitizeString(value: string, ctx: SanitizeContext): string {\n const redacted = redactString(value, ctx.rules)\n ctx.report.redactionCount += redacted.report.redactionCount\n for (const [rule, count] of Object.entries(redacted.report.byRule)) {\n ctx.report.byRule[rule] = (ctx.report.byRule[rule] ?? 0) + count\n }\n if (redacted.output.length <= ctx.maxStringLength) return redacted.output\n ctx.report.truncatedStrings += 1\n return `${redacted.output.slice(0, Math.max(0, ctx.maxStringLength - 1))}…`\n}\n\nfunction hashedValue(value: unknown, ctx: SanitizeContext): Record<string, unknown> {\n return {\n redacted: true,\n sha256: sha256Stable(value, ctx.hashSalt),\n shape: valueShape(value),\n }\n}\n\nfunction sha256Stable(value: unknown, salt: string): string {\n return createHash('sha256').update(salt).update(stableStringify(value)).digest('hex')\n}\n\nfunction stableStringify(value: unknown): string {\n if (Array.isArray(value)) return `[${value.map(stableStringify).join(',')}]`\n if (isRecord(value)) {\n return `{${Object.keys(value)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${stableStringify(value[key])}`)\n .join(',')}}`\n }\n return JSON.stringify(value)\n}\n\nfunction valueShape(value: unknown): unknown {\n if (Array.isArray(value)) return { type: 'array', length: value.length }\n if (isRecord(value)) {\n return {\n type: 'object',\n keys: Object.keys(value).sort(),\n }\n }\n return { type: typeof value }\n}\n\nfunction isFileContentKey(key: string, hasFileHint: boolean): boolean {\n if (FILE_CONTENT_KEY_RE.test(key)) return true\n return hasFileHint && /^(content|source|diff)$/i.test(key)\n}\n\nfunction emptyReport(): WorkflowTraceSanitizationReport {\n return {\n redactionCount: 0,\n byRule: {},\n hashedArgs: 0,\n truncatedStrings: 0,\n droppedPayloadKeys: {},\n droppedArtifactContents: 0,\n }\n}\n\nfunction increment(record: Record<string, number>, key: string): void {\n record[key] = (record[key] ?? 0) + 1\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n\ninterface SanitizeContext {\n rules: RedactionRule[]\n maxStringLength: number\n hashSalt: string\n approvedArtifactUris: Set<string>\n approvedArtifactKinds: Set<string>\n report: WorkflowTraceSanitizationReport\n}\n","import type { RunTokenUsage } from '../run-record'\n\nexport function objectRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null\n}\n\nexport function stringField(record: Record<string, unknown>, key: string): string | null {\n const value = record[key]\n return typeof value === 'string' ? value : null\n}\n\nexport function numberField(record: Record<string, unknown>, key: string): number | null {\n const value = record[key]\n return typeof value === 'number' && Number.isFinite(value) ? value : null\n}\n\nexport function tokenUsageField(value: unknown): RunTokenUsage | null {\n const record = objectRecord(value)\n if (!record) return null\n const input = numberField(record, 'input')\n const output = numberField(record, 'output')\n if (input === null || output === null) return null\n const cached = numberField(record, 'cached')\n return {\n input,\n output,\n ...(cached !== null ? { cached } : {}),\n }\n}\n","import type { RunTokenUsage } from '../run-record'\nimport { numberField, stringField, tokenUsageField } from './trace-event-fields'\nimport type { WorkflowTraceEvent } from './types'\n\nexport interface WorkflowPhaseGraphNode {\n id: string\n title: string\n startedAt?: number\n endedAt?: number\n eventCount: number\n branchCount: number\n failedBranchCount: number\n agentCalls: number\n loopCalls: number\n verifierCalls: number\n analystCalls: number\n reviewerCalls: number\n agentFailures: number\n loopFailures: number\n verifierFailures: number\n analystFailures: number\n reviewerFailures: number\n costUsd: number\n tokenUsage: RunTokenUsage\n}\n\nexport interface WorkflowPhaseGraphBranch {\n id: string\n operation: string\n branchIndex: number\n phase: string | null\n status: 'started' | 'ended' | 'failed'\n startedAt?: number\n endedAt?: number\n durationMs?: number\n stageCount?: number\n stageIndex?: number\n message?: string\n code?: string\n}\n\nexport interface WorkflowPhaseGraph {\n nodes: WorkflowPhaseGraphNode[]\n branches: WorkflowPhaseGraphBranch[]\n}\n\ntype MutableWorkflowPhaseGraphNode = WorkflowPhaseGraphNode\ntype MutableWorkflowPhaseGraphBranch = WorkflowPhaseGraphBranch\n\nexport function workflowPhaseGraph(events: readonly WorkflowTraceEvent[]): WorkflowPhaseGraph {\n const nodes = new Map<string, MutableWorkflowPhaseGraphNode>()\n const branches: MutableWorkflowPhaseGraphBranch[] = []\n\n for (const event of events) {\n const phaseTitle = phaseTitleForEvent(event)\n if (phaseTitle) observePhaseEvent(phaseNode(nodes, phaseTitle), event)\n\n if (event.kind === 'workflow.branch.started') {\n branches.push(branchStarted(event, branches.length))\n continue\n }\n\n if (event.kind === 'workflow.branch.ended' || event.kind === 'workflow.branch.failed') {\n const branch = openBranchFor(branches, event) ?? branchStarted(event, branches.length)\n if (!branches.includes(branch)) branches.push(branch)\n observeBranchTerminal(branch, event)\n }\n }\n\n return {\n nodes: Array.from(nodes.values()).map(readonlyPhaseNode),\n branches: branches.map(readonlyBranch),\n }\n}\n\nfunction phaseNode(\n nodes: Map<string, MutableWorkflowPhaseGraphNode>,\n title: string,\n): MutableWorkflowPhaseGraphNode {\n const existing = nodes.get(title)\n if (existing) return existing\n const node: MutableWorkflowPhaseGraphNode = {\n id: `phase-${nodes.size}`,\n title,\n eventCount: 0,\n branchCount: 0,\n failedBranchCount: 0,\n agentCalls: 0,\n loopCalls: 0,\n verifierCalls: 0,\n analystCalls: 0,\n reviewerCalls: 0,\n agentFailures: 0,\n loopFailures: 0,\n verifierFailures: 0,\n analystFailures: 0,\n reviewerFailures: 0,\n costUsd: 0,\n tokenUsage: { input: 0, output: 0 },\n }\n nodes.set(title, node)\n return node\n}\n\nfunction observePhaseEvent(node: MutableWorkflowPhaseGraphNode, event: WorkflowTraceEvent): void {\n node.eventCount += 1\n node.startedAt = minDefined(node.startedAt, event.timestamp)\n node.endedAt = maxDefined(node.endedAt, event.timestamp)\n\n switch (event.kind) {\n case 'workflow.branch.ended':\n node.branchCount += 1\n break\n case 'workflow.branch.failed':\n node.failedBranchCount += 1\n break\n case 'workflow.agent.ended':\n node.agentCalls += 1\n break\n case 'workflow.agent.failed':\n node.agentCalls += 1\n node.agentFailures += 1\n break\n case 'workflow.loop.ended':\n node.loopCalls += 1\n break\n case 'workflow.loop.failed':\n node.loopCalls += 1\n node.loopFailures += 1\n break\n case 'workflow.verifier.ended':\n node.verifierCalls += 1\n break\n case 'workflow.verifier.failed':\n node.verifierCalls += 1\n node.verifierFailures += 1\n break\n case 'workflow.analyst.ended':\n node.analystCalls += 1\n break\n case 'workflow.analyst.failed':\n node.analystCalls += 1\n node.analystFailures += 1\n break\n case 'workflow.reviewer.ended':\n node.reviewerCalls += 1\n break\n case 'workflow.reviewer.failed':\n node.reviewerCalls += 1\n node.reviewerFailures += 1\n break\n }\n\n const costUsd = numberField(event.payload, 'costUsd')\n if (costUsd !== null) node.costUsd += costUsd\n const tokenUsage = tokenUsageField(event.payload.tokenUsage)\n if (tokenUsage) addTokenUsage(node.tokenUsage, tokenUsage)\n}\n\nfunction phaseTitleForEvent(event: WorkflowTraceEvent): string | null {\n return event.kind === 'workflow.phase'\n ? stringField(event.payload, 'title')\n : stringField(event.payload, 'phase')\n}\n\nfunction branchStarted(event: WorkflowTraceEvent, index: number): MutableWorkflowPhaseGraphBranch {\n const branch: MutableWorkflowPhaseGraphBranch = {\n id: `branch-${index}`,\n operation: stringField(event.payload, 'operation') ?? 'unknown',\n branchIndex: numberField(event.payload, 'branchIndex') ?? -1,\n phase: stringField(event.payload, 'phase'),\n status: 'started',\n }\n const stageCount = numberField(event.payload, 'stageCount')\n if (stageCount !== null) branch.stageCount = stageCount\n branch.startedAt = event.timestamp\n return branch\n}\n\nfunction openBranchFor(\n branches: readonly MutableWorkflowPhaseGraphBranch[],\n event: WorkflowTraceEvent,\n): MutableWorkflowPhaseGraphBranch | null {\n const operation = stringField(event.payload, 'operation') ?? 'unknown'\n const branchIndex = numberField(event.payload, 'branchIndex') ?? -1\n const phase = stringField(event.payload, 'phase')\n\n for (let i = branches.length - 1; i >= 0; i -= 1) {\n const branch = branches[i]\n if (\n branch?.status === 'started' &&\n branch.operation === operation &&\n branch.branchIndex === branchIndex &&\n branch.phase === phase\n ) {\n return branch\n }\n }\n return null\n}\n\nfunction observeBranchTerminal(\n branch: MutableWorkflowPhaseGraphBranch,\n event: WorkflowTraceEvent,\n): void {\n branch.status = event.kind === 'workflow.branch.failed' ? 'failed' : 'ended'\n branch.endedAt = event.timestamp\n\n const durationMs = numberField(event.payload, 'durationMs')\n if (durationMs !== null) {\n branch.durationMs = durationMs\n } else if (branch.startedAt !== undefined) {\n branch.durationMs = Math.max(0, event.timestamp - branch.startedAt)\n }\n\n const stageCount = numberField(event.payload, 'stageCount')\n if (stageCount !== null) branch.stageCount = stageCount\n const stageIndex = numberField(event.payload, 'stageIndex')\n if (stageIndex !== null) branch.stageIndex = stageIndex\n const message = stringField(event.payload, 'message')\n if (message) branch.message = message\n const code = stringField(event.payload, 'code')\n if (code) branch.code = code\n}\n\nfunction readonlyPhaseNode(node: MutableWorkflowPhaseGraphNode): WorkflowPhaseGraphNode {\n const result: WorkflowPhaseGraphNode = {\n id: node.id,\n title: node.title,\n eventCount: node.eventCount,\n branchCount: node.branchCount,\n failedBranchCount: node.failedBranchCount,\n agentCalls: node.agentCalls,\n loopCalls: node.loopCalls,\n verifierCalls: node.verifierCalls,\n analystCalls: node.analystCalls,\n reviewerCalls: node.reviewerCalls,\n agentFailures: node.agentFailures,\n loopFailures: node.loopFailures,\n verifierFailures: node.verifierFailures,\n analystFailures: node.analystFailures,\n reviewerFailures: node.reviewerFailures,\n costUsd: node.costUsd,\n tokenUsage: node.tokenUsage,\n }\n if (node.startedAt !== undefined) result.startedAt = node.startedAt\n if (node.endedAt !== undefined) result.endedAt = node.endedAt\n return result\n}\n\nfunction readonlyBranch(branch: MutableWorkflowPhaseGraphBranch): WorkflowPhaseGraphBranch {\n const result: WorkflowPhaseGraphBranch = {\n id: branch.id,\n operation: branch.operation,\n branchIndex: branch.branchIndex,\n phase: branch.phase,\n status: branch.status,\n }\n if (branch.startedAt !== undefined) result.startedAt = branch.startedAt\n if (branch.endedAt !== undefined) result.endedAt = branch.endedAt\n if (branch.durationMs !== undefined) result.durationMs = branch.durationMs\n if (branch.stageCount !== undefined) result.stageCount = branch.stageCount\n if (branch.stageIndex !== undefined) result.stageIndex = branch.stageIndex\n if (branch.message !== undefined) result.message = branch.message\n if (branch.code !== undefined) result.code = branch.code\n return result\n}\n\nfunction minDefined(current: number | undefined, next: number): number {\n return current === undefined ? next : Math.min(current, next)\n}\n\nfunction maxDefined(current: number | undefined, next: number): number {\n return current === undefined ? next : Math.max(current, next)\n}\n\nfunction addTokenUsage(target: RunTokenUsage, value: RunTokenUsage): void {\n target.input += value.input\n target.output += value.output\n if (value.cached !== undefined) target.cached = (target.cached ?? 0) + value.cached\n}\n","import type { RunTokenUsage } from '../run-record'\nimport { type WorkflowPhaseGraph, workflowPhaseGraph } from './phase-graph'\nimport { summarizeWorkflowTrace, validateWorkflowTraceEnvelope } from './schema'\nimport { numberField, objectRecord, stringField, tokenUsageField } from './trace-event-fields'\nimport type { WorkflowTraceEnvelope, WorkflowTraceEvent, WorkflowTraceSummary } from './types'\n\nexport interface WorkflowDelegateTraceSummary {\n index: number | null\n label: string | null\n phase: string | null\n costUsd: number | null\n tokenUsage: RunTokenUsage | null\n trace: unknown\n}\n\nexport interface WorkflowDelegateFailureSummary {\n index: number | null\n label: string | null\n phase: string | null\n durationMs: number | null\n message: string | null\n code: string | null\n}\n\nexport interface WorkflowCheckpointTraceSummary extends WorkflowDelegateTraceSummary {\n output: unknown\n}\n\nexport interface WorkflowExecutionSummary extends WorkflowTraceSummary {\n source?: string\n eventKinds: Record<string, number>\n phases: string[]\n phaseGraph: WorkflowPhaseGraph\n agentRuns: WorkflowDelegateTraceSummary[]\n loopRuns: WorkflowDelegateTraceSummary[]\n verifierOutputs: WorkflowCheckpointTraceSummary[]\n analystOutputs: WorkflowCheckpointTraceSummary[]\n reviewerOutputs: WorkflowCheckpointTraceSummary[]\n agentFailureDetails: WorkflowDelegateFailureSummary[]\n loopFailureDetails: WorkflowDelegateFailureSummary[]\n verifierFailureDetails: WorkflowDelegateFailureSummary[]\n analystFailureDetails: WorkflowDelegateFailureSummary[]\n reviewerFailureDetails: WorkflowDelegateFailureSummary[]\n}\n\nexport interface SummarizeWorkflowExecutionOptions {\n source?: string\n}\n\nexport function summarizeWorkflowExecution(\n input: WorkflowTraceEnvelope | unknown,\n options: SummarizeWorkflowExecutionOptions = {},\n): WorkflowExecutionSummary {\n const envelope = validateWorkflowTraceEnvelope(input)\n const base = summarizeWorkflowTrace(envelope)\n return {\n ...base,\n ...(options.source !== undefined ? { source: options.source } : {}),\n eventKinds: workflowEventKinds(envelope.events),\n phases: workflowPhaseTitles(envelope.events),\n phaseGraph: workflowPhaseGraph(envelope.events),\n agentRuns: workflowDelegateTraceSummaries(envelope.events, 'workflow.agent.ended'),\n loopRuns: workflowDelegateTraceSummaries(envelope.events, 'workflow.loop.ended'),\n verifierOutputs: workflowCheckpointTraceSummaries(envelope.events, 'workflow.verifier.ended'),\n analystOutputs: workflowCheckpointTraceSummaries(envelope.events, 'workflow.analyst.ended'),\n reviewerOutputs: workflowCheckpointTraceSummaries(envelope.events, 'workflow.reviewer.ended'),\n agentFailureDetails: workflowDelegateFailureSummaries(envelope.events, 'workflow.agent.failed'),\n loopFailureDetails: workflowDelegateFailureSummaries(envelope.events, 'workflow.loop.failed'),\n verifierFailureDetails: workflowDelegateFailureSummaries(\n envelope.events,\n 'workflow.verifier.failed',\n ),\n analystFailureDetails: workflowDelegateFailureSummaries(\n envelope.events,\n 'workflow.analyst.failed',\n ),\n reviewerFailureDetails: workflowDelegateFailureSummaries(\n envelope.events,\n 'workflow.reviewer.failed',\n ),\n }\n}\n\nfunction workflowEventKinds(events: readonly WorkflowTraceEvent[]): Record<string, number> {\n return events.reduce<Record<string, number>>((acc, event) => {\n acc[event.kind] = (acc[event.kind] ?? 0) + 1\n return acc\n }, {})\n}\n\nfunction workflowPhaseTitles(events: readonly WorkflowTraceEvent[]): string[] {\n const titles: string[] = []\n const seen = new Set<string>()\n for (const event of events) {\n const title =\n event.kind === 'workflow.phase'\n ? stringField(event.payload, 'title')\n : stringField(event.payload, 'phase')\n if (!title || seen.has(title)) continue\n seen.add(title)\n titles.push(title)\n }\n return titles\n}\n\nfunction workflowDelegateTraceSummaries(\n events: readonly WorkflowTraceEvent[],\n endedKind: WorkflowTraceEvent['kind'],\n): WorkflowDelegateTraceSummary[] {\n return events\n .filter((event) => event.kind === endedKind)\n .map((event) => ({\n index: numberField(event.payload, 'index'),\n label: stringField(event.payload, 'label'),\n phase: stringField(event.payload, 'phase'),\n costUsd: numberField(event.payload, 'costUsd'),\n tokenUsage: tokenUsageField(event.payload.tokenUsage),\n trace: event.payload.trace ?? null,\n }))\n}\n\nfunction workflowCheckpointTraceSummaries(\n events: readonly WorkflowTraceEvent[],\n endedKind: WorkflowTraceEvent['kind'],\n): WorkflowCheckpointTraceSummary[] {\n return workflowDelegateTraceSummaries(events, endedKind).map((summary) => ({\n ...summary,\n output: checkpointOutput(summary.trace),\n }))\n}\n\nfunction workflowDelegateFailureSummaries(\n events: readonly WorkflowTraceEvent[],\n failedKind: WorkflowTraceEvent['kind'],\n): WorkflowDelegateFailureSummary[] {\n return events\n .filter((event) => event.kind === failedKind)\n .map((event) => ({\n index: numberField(event.payload, 'index'),\n label: stringField(event.payload, 'label'),\n phase: stringField(event.payload, 'phase'),\n durationMs: numberField(event.payload, 'durationMs'),\n message: stringField(event.payload, 'message'),\n code: stringField(event.payload, 'code'),\n }))\n}\n\nfunction checkpointOutput(trace: unknown): unknown {\n const record = objectRecord(trace)\n if (record && Object.hasOwn(record, 'checkpointOutput')) {\n return record.checkpointOutput\n }\n if (record && Object.hasOwn(record, 'output')) return record.output\n return trace\n}\n","import { ValidationError } from '../errors'\nimport {\n type SanitizedWorkflowTraceEnvelopeResult,\n type SanitizeWorkflowTraceEnvelopeOptions,\n sanitizeWorkflowTraceEnvelope,\n type WorkflowTraceSanitizationReport,\n} from './sanitize'\nimport { validateWorkflowTraceEnvelope } from './schema'\nimport { summarizeWorkflowExecution, type WorkflowExecutionSummary } from './summary'\nimport type { WorkflowTraceEnvelope, WorkflowTraceEvent, WorkflowTraceExportLinks } from './types'\n\nexport type WorkflowTraceIntelligenceEnvelopeVersion = 'workflow-trace-intelligence-envelope-v1'\nexport type WorkflowTraceExportGrantScope = 'workflow-trace:export' | 'workflow-trace:read' | '*'\nexport type WorkflowTraceExportGrantSubject = 'product' | 'partner' | 'tenant'\n\nexport interface WorkflowTraceExportGrant {\n grantId: string\n subject: WorkflowTraceExportGrantSubject\n subjectId: string\n scopes: readonly WorkflowTraceExportGrantScope[]\n grantedAt?: string\n expiresAt?: string\n metadata?: Record<string, unknown>\n}\n\nexport interface WorkflowTraceHashEvidence {\n path: string\n sha256: string\n shape?: unknown\n}\n\nexport interface WorkflowTraceArtifactEvidence {\n kind: string\n uri: string\n contentType?: string\n sha256?: string\n}\n\nexport interface WorkflowTraceCompactEvidence {\n eventKinds: Record<string, number>\n phases: string[]\n toolNames: string[]\n redactedHashes: WorkflowTraceHashEvidence[]\n artifacts: WorkflowTraceArtifactEvidence[]\n failureMessage?: string\n}\n\nexport interface WorkflowTraceIntelligenceEnvelope {\n schemaVersion: WorkflowTraceIntelligenceEnvelopeVersion\n destination: string\n generatedAt: string\n productId: string\n partnerId?: string\n runId: string\n grantIds: string[]\n traceEnvelope: WorkflowTraceEnvelope\n summary: WorkflowExecutionSummary\n compactEvidence: WorkflowTraceCompactEvidence\n sanitization: SanitizedWorkflowTraceEnvelopeResult['report']\n links?: WorkflowTraceExportLinks\n}\n\nexport interface BuildWorkflowTraceIntelligenceEnvelopeOptions {\n envelope: WorkflowTraceEnvelope | unknown\n productId: string\n partnerId?: string\n grants: readonly WorkflowTraceExportGrant[]\n generatedAt?: string\n destination?: string\n sanitize?: SanitizeWorkflowTraceEnvelopeOptions\n links?: WorkflowTraceExportLinks\n metadata?: Record<string, unknown>\n}\n\nconst ENVELOPE_VERSION: WorkflowTraceIntelligenceEnvelopeVersion =\n 'workflow-trace-intelligence-envelope-v1'\nconst DEFAULT_DESTINATION = 'intelligence.tangle.tools'\n\nexport function buildWorkflowTraceIntelligenceEnvelope(\n options: BuildWorkflowTraceIntelligenceEnvelopeOptions,\n): WorkflowTraceIntelligenceEnvelope {\n const productId = requireNonEmpty(options.productId, 'productId')\n const partnerId =\n options.partnerId !== undefined ? requireNonEmpty(options.partnerId, 'partnerId') : undefined\n const generatedAt = options.generatedAt ?? new Date().toISOString()\n const grantIds = activeExportGrantIds({\n grants: options.grants,\n productId,\n partnerId,\n nowMs: Date.parse(generatedAt),\n })\n const base = validateWorkflowTraceEnvelope(options.envelope)\n const sourceEnvelope: WorkflowTraceEnvelope =\n options.metadata === undefined\n ? base\n : {\n ...base,\n metadata: {\n ...(base.metadata ?? {}),\n intelligenceExport: options.metadata,\n },\n }\n const sanitized = sanitizeWorkflowTraceEnvelope(sourceEnvelope, options.sanitize)\n const summary = summarizeWorkflowExecution(sanitized.envelope)\n return {\n schemaVersion: ENVELOPE_VERSION,\n destination: options.destination ?? DEFAULT_DESTINATION,\n generatedAt,\n productId,\n ...(partnerId ? { partnerId } : {}),\n runId: sanitized.envelope.runId,\n grantIds,\n traceEnvelope: sanitized.envelope,\n summary,\n compactEvidence: compactEvidence(sanitized.envelope, summary),\n sanitization: sanitized.report,\n ...(options.links ? { links: options.links } : {}),\n }\n}\n\nexport function validateWorkflowTraceIntelligenceEnvelope(\n input: unknown,\n): WorkflowTraceIntelligenceEnvelope {\n const obj = expectRecord(input, 'workflow intelligence envelope')\n if (obj.schemaVersion !== ENVELOPE_VERSION) {\n throw new ValidationError(`workflow intelligence schemaVersion must be ${ENVELOPE_VERSION}`)\n }\n const destination = expectString(obj.destination, 'destination')\n const generatedAt = expectString(obj.generatedAt, 'generatedAt')\n const productId = expectString(obj.productId, 'productId')\n const partnerId =\n obj.partnerId !== undefined ? expectString(obj.partnerId, 'partnerId') : undefined\n const runId = expectString(obj.runId, 'runId')\n const grantIds = expectStringArray(obj.grantIds, 'grantIds')\n const traceEnvelope = validateWorkflowTraceEnvelope(obj.traceEnvelope)\n if (traceEnvelope.runId !== runId) {\n throw new ValidationError(`workflow intelligence runId ${runId} does not match trace envelope`)\n }\n const summary = summarizeWorkflowExecution(traceEnvelope)\n const compact = validateCompactEvidence(obj.compactEvidence)\n const expectedCompact = compactEvidence(traceEnvelope, summary)\n assertCompactEvidenceEqual(compact, expectedCompact)\n const sanitization = validateSanitizationReport(obj.sanitization)\n return {\n schemaVersion: ENVELOPE_VERSION,\n destination,\n generatedAt,\n productId,\n ...(partnerId ? { partnerId } : {}),\n runId,\n grantIds,\n traceEnvelope,\n summary,\n compactEvidence: expectedCompact,\n sanitization,\n ...(obj.links !== undefined ? { links: validateLinks(obj.links) } : {}),\n }\n}\n\nfunction activeExportGrantIds(args: {\n grants: readonly WorkflowTraceExportGrant[]\n productId: string\n partnerId?: string\n nowMs: number\n}): string[] {\n if (!Array.isArray(args.grants) || args.grants.length === 0) {\n throw new ValidationError('workflow intelligence export requires at least one opt-in grant')\n }\n const nowMs = Number.isFinite(args.nowMs) ? args.nowMs : Date.now()\n const ids = args.grants\n .filter((grant) => grantMatchesSubject(grant, args.productId, args.partnerId))\n .filter((grant) => grant.scopes.includes('workflow-trace:export') || grant.scopes.includes('*'))\n .filter((grant) => !grantExpired(grant, nowMs))\n .map((grant) => grant.grantId)\n .filter((id) => id.length > 0)\n if (ids.length === 0) {\n throw new ValidationError(\n 'workflow intelligence export requires an active workflow-trace:export grant for the product or partner',\n )\n }\n return ids\n}\n\nfunction grantMatchesSubject(\n grant: WorkflowTraceExportGrant,\n productId: string,\n partnerId: string | undefined,\n): boolean {\n if (grant.subject === 'product') return grant.subjectId === productId\n if (grant.subject === 'partner') return partnerId !== undefined && grant.subjectId === partnerId\n return grant.subjectId === productId || grant.subjectId === partnerId\n}\n\nfunction grantExpired(grant: WorkflowTraceExportGrant, nowMs: number): boolean {\n if (!grant.expiresAt) return false\n const expiresAt = Date.parse(grant.expiresAt)\n return Number.isFinite(expiresAt) && expiresAt <= nowMs\n}\n\nfunction compactEvidence(\n envelope: WorkflowTraceEnvelope,\n summary: WorkflowExecutionSummary,\n): WorkflowTraceCompactEvidence {\n return {\n eventKinds: summary.eventKinds,\n phases: summary.phases,\n toolNames: toolNames(envelope.events),\n redactedHashes: redactedHashes(envelope),\n artifacts: (envelope.artifacts ?? []).map((artifact) => ({\n kind: artifact.kind,\n uri: artifact.uri,\n ...(artifact.contentType ? { contentType: artifact.contentType } : {}),\n ...(artifact.sha256 ? { sha256: artifact.sha256 } : {}),\n })),\n ...(summary.failureMessage ? { failureMessage: summary.failureMessage } : {}),\n }\n}\n\nfunction toolNames(events: readonly WorkflowTraceEvent[]): string[] {\n const names = new Set<string>()\n for (const event of events) collectToolNames(event.payload, names)\n return [...names].sort()\n}\n\nfunction collectToolNames(value: unknown, names: Set<string>): void {\n if (Array.isArray(value)) {\n value.forEach((item) => {\n collectToolNames(item, names)\n })\n return\n }\n if (!isRecord(value)) return\n const direct = stringValue(value.toolName) ?? stringValue(value.name)\n if (direct && looksLikeToolRecord(value)) names.add(direct)\n if (isRecord(value.byTool)) {\n for (const key of Object.keys(value.byTool)) names.add(key)\n }\n for (const child of Object.values(value)) collectToolNames(child, names)\n}\n\nfunction looksLikeToolRecord(value: Record<string, unknown>): boolean {\n return (\n 'toolName' in value ||\n 'toolArgs' in value ||\n 'args' in value ||\n 'status' in value ||\n 'error' in value ||\n 'success' in value\n )\n}\n\nfunction redactedHashes(envelope: WorkflowTraceEnvelope): WorkflowTraceHashEvidence[] {\n const out: WorkflowTraceHashEvidence[] = []\n envelope.events.forEach((event, index) => {\n collectHashEvidence(event.payload, `events[${index}].payload`, out)\n })\n const artifacts = envelope.artifacts ?? []\n artifacts.forEach((artifact, index) => {\n collectHashEvidence(artifact.metadata, `artifacts[${index}].metadata`, out)\n })\n collectHashEvidence(envelope.metadata, 'metadata', out)\n return out\n}\n\nfunction collectHashEvidence(value: unknown, path: string, out: WorkflowTraceHashEvidence[]): void {\n if (Array.isArray(value)) {\n value.forEach((item, index) => {\n collectHashEvidence(item, `${path}[${index}]`, out)\n })\n return\n }\n if (!isRecord(value)) return\n if (value.redacted === true && typeof value.sha256 === 'string') {\n out.push({\n path,\n sha256: value.sha256,\n ...(value.shape !== undefined ? { shape: value.shape } : {}),\n })\n return\n }\n for (const [key, child] of Object.entries(value)) {\n collectHashEvidence(child, `${path}.${key}`, out)\n }\n}\n\nfunction validateCompactEvidence(value: unknown): WorkflowTraceCompactEvidence {\n const obj = expectRecord(value, 'compactEvidence')\n return {\n eventKinds: expectNumberRecord(obj.eventKinds, 'compactEvidence.eventKinds'),\n phases: expectStringArray(obj.phases, 'compactEvidence.phases'),\n toolNames: expectStringArray(obj.toolNames, 'compactEvidence.toolNames'),\n redactedHashes: expectArray(obj.redactedHashes, 'compactEvidence.redactedHashes').map(\n (item, index) => {\n const record = expectRecord(item, `compactEvidence.redactedHashes[${index}]`)\n return {\n path: expectString(record.path, `compactEvidence.redactedHashes[${index}].path`),\n sha256: expectString(record.sha256, `compactEvidence.redactedHashes[${index}].sha256`),\n ...(record.shape !== undefined ? { shape: record.shape } : {}),\n }\n },\n ),\n artifacts: expectArray(obj.artifacts, 'compactEvidence.artifacts').map((item, index) => {\n const record = expectRecord(item, `compactEvidence.artifacts[${index}]`)\n return {\n kind: expectString(record.kind, `compactEvidence.artifacts[${index}].kind`),\n uri: expectString(record.uri, `compactEvidence.artifacts[${index}].uri`),\n ...(record.contentType !== undefined\n ? {\n contentType: expectString(\n record.contentType,\n `compactEvidence.artifacts[${index}].contentType`,\n ),\n }\n : {}),\n ...(record.sha256 !== undefined\n ? {\n sha256: expectString(record.sha256, `compactEvidence.artifacts[${index}].sha256`),\n }\n : {}),\n }\n }),\n ...(obj.failureMessage !== undefined\n ? { failureMessage: expectString(obj.failureMessage, 'compactEvidence.failureMessage') }\n : {}),\n }\n}\n\nfunction assertCompactEvidenceEqual(\n actual: WorkflowTraceCompactEvidence,\n expected: WorkflowTraceCompactEvidence,\n): void {\n assertNumberRecordEqual(actual.eventKinds, expected.eventKinds, 'compactEvidence.eventKinds')\n assertStringArrayEqual(actual.phases, expected.phases, 'compactEvidence.phases')\n assertStringArrayEqual(actual.toolNames, expected.toolNames, 'compactEvidence.toolNames')\n assertJsonArrayEqual(\n actual.redactedHashes,\n expected.redactedHashes,\n 'compactEvidence.redactedHashes',\n )\n assertJsonArrayEqual(actual.artifacts, expected.artifacts, 'compactEvidence.artifacts')\n if (actual.failureMessage !== expected.failureMessage) {\n throw new ValidationError('compactEvidence.failureMessage does not match trace envelope')\n }\n}\n\nfunction validateSanitizationReport(value: unknown): WorkflowTraceSanitizationReport {\n const obj = expectRecord(value, 'sanitization')\n return {\n redactionCount: expectNonNegativeNumber(obj.redactionCount, 'sanitization.redactionCount'),\n byRule: expectNumberRecord(obj.byRule, 'sanitization.byRule'),\n hashedArgs: expectNonNegativeNumber(obj.hashedArgs, 'sanitization.hashedArgs'),\n truncatedStrings: expectNonNegativeNumber(\n obj.truncatedStrings,\n 'sanitization.truncatedStrings',\n ),\n droppedPayloadKeys: expectNumberRecord(\n obj.droppedPayloadKeys,\n 'sanitization.droppedPayloadKeys',\n ),\n droppedArtifactContents: expectNonNegativeNumber(\n obj.droppedArtifactContents,\n 'sanitization.droppedArtifactContents',\n ),\n }\n}\n\nfunction validateLinks(value: unknown): WorkflowTraceExportLinks {\n const obj = expectRecord(value, 'links')\n return {\n ...(obj.traceArtifactUri !== undefined\n ? { traceArtifactUri: expectString(obj.traceArtifactUri, 'links.traceArtifactUri') }\n : {}),\n ...(obj.exportBundleUri !== undefined\n ? { exportBundleUri: expectString(obj.exportBundleUri, 'links.exportBundleUri') }\n : {}),\n ...(obj.partnerReportUri !== undefined\n ? { partnerReportUri: expectString(obj.partnerReportUri, 'links.partnerReportUri') }\n : {}),\n ...(obj.intelligenceRunUri !== undefined\n ? { intelligenceRunUri: expectString(obj.intelligenceRunUri, 'links.intelligenceRunUri') }\n : {}),\n }\n}\n\nfunction requireNonEmpty(value: string, field: string): string {\n if (typeof value !== 'string' || value.length === 0) {\n throw new ValidationError(`workflow intelligence ${field} must be a non-empty string`)\n }\n return value\n}\n\nfunction expectRecord(value: unknown, path: string): Record<string, unknown> {\n if (!isRecord(value)) throw new ValidationError(`${path}: expected object`)\n return value\n}\n\nfunction expectArray(value: unknown, path: string): unknown[] {\n if (!Array.isArray(value)) throw new ValidationError(`${path}: expected array`)\n return value\n}\n\nfunction expectStringArray(value: unknown, path: string): string[] {\n return expectArray(value, path).map((item, index) => expectString(item, `${path}[${index}]`))\n}\n\nfunction expectNumberRecord(value: unknown, path: string): Record<string, number> {\n const record = expectRecord(value, path)\n const out: Record<string, number> = {}\n for (const [key, item] of Object.entries(record)) {\n out[key] = expectNonNegativeNumber(item, `${path}.${key}`)\n }\n return out\n}\n\nfunction expectString(value: unknown, path: string): string {\n if (typeof value !== 'string' || value.length === 0) {\n throw new ValidationError(`${path}: expected non-empty string`)\n }\n return value\n}\n\nfunction expectNonNegativeNumber(value: unknown, path: string): number {\n if (typeof value !== 'number' || !Number.isFinite(value) || value < 0) {\n throw new ValidationError(`${path}: expected non-negative number`)\n }\n return value\n}\n\nfunction assertNumberRecordEqual(\n actual: Record<string, number>,\n expected: Record<string, number>,\n path: string,\n): void {\n const actualKeys = Object.keys(actual).sort()\n const expectedKeys = Object.keys(expected).sort()\n assertStringArrayEqual(actualKeys, expectedKeys, path)\n for (const key of expectedKeys) {\n if (actual[key] !== expected[key]) {\n throw new ValidationError(`${path}.${key} does not match trace envelope`)\n }\n }\n}\n\nfunction assertStringArrayEqual(\n actual: readonly string[],\n expected: readonly string[],\n path: string,\n): void {\n if (actual.length !== expected.length || actual.some((item, index) => item !== expected[index])) {\n throw new ValidationError(`${path} does not match trace envelope`)\n }\n}\n\nfunction assertJsonArrayEqual(\n actual: readonly unknown[],\n expected: readonly unknown[],\n path: string,\n): void {\n if (\n actual.length !== expected.length ||\n actual.some((item, index) => JSON.stringify(item) !== JSON.stringify(expected[index]))\n ) {\n throw new ValidationError(`${path} does not match trace envelope`)\n }\n}\n\nfunction stringValue(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return value !== null && typeof value === 'object' && !Array.isArray(value)\n}\n","import { type RunRecord, validateRunRecord } from '../run-record'\nimport { summarizeWorkflowTrace, validateWorkflowTraceEnvelope } from './schema'\nimport type { WorkflowTraceEnvelope, WorkflowTraceProjectionMetadata } from './types'\n\nexport interface WorkflowTraceRunRecordOptions extends WorkflowTraceProjectionMetadata {\n runId?: string\n score?: number\n raw?: Record<string, number>\n failureMode?: string\n judgeMetadata?: RunRecord['judgeMetadata']\n agentProfile?: RunRecord['agentProfile']\n}\n\nexport function workflowTraceToRunRecord(\n input: WorkflowTraceEnvelope | unknown,\n options: WorkflowTraceRunRecordOptions,\n): RunRecord {\n const envelope = validateWorkflowTraceEnvelope(input)\n const summary = summarizeWorkflowTrace(envelope)\n const score = clampScore(options.score ?? (summary.failed ? 0 : 1))\n const raw = {\n ...finiteOnly(options.raw ?? {}),\n score,\n workflow_failed: summary.failed ? 1 : 0,\n workflow_events: summary.eventCount,\n workflow_phases: summary.phaseCount,\n workflow_branches: summary.branchCount,\n workflow_branch_failures: summary.failedBranchCount,\n workflow_agent_calls: summary.agentCalls,\n workflow_loop_calls: summary.loopCalls,\n workflow_verifier_calls: summary.verifierCalls,\n workflow_analyst_calls: summary.analystCalls,\n workflow_reviewer_calls: summary.reviewerCalls,\n workflow_agent_failures: summary.agentFailures,\n workflow_loop_failures: summary.loopFailures,\n workflow_verifier_failures: summary.verifierFailures,\n workflow_analyst_failures: summary.analystFailures,\n workflow_reviewer_failures: summary.reviewerFailures,\n }\n const outcome =\n options.splitTag === 'holdout' ? { holdoutScore: score, raw } : { searchScore: score, raw }\n\n return validateRunRecord({\n runId: options.runId ?? envelope.runId,\n experimentId: options.experimentId,\n candidateId: options.candidateId,\n seed: options.seed,\n model: options.model,\n promptHash: options.promptHash,\n configHash: options.configHash,\n commitSha: options.commitSha,\n wallMs: summary.durationMs,\n costUsd: summary.costUsd,\n tokenUsage: summary.tokenUsage,\n ...(options.judgeMetadata ? { judgeMetadata: options.judgeMetadata } : {}),\n outcome,\n failureMode: options.failureMode ?? (summary.failed ? 'workflow_failed' : undefined),\n splitTag: options.splitTag,\n ...(options.scenarioId ? { scenarioId: options.scenarioId } : {}),\n ...(options.agentProfile ? { agentProfile: options.agentProfile } : {}),\n })\n}\n\nfunction finiteOnly(values: Record<string, number>): Record<string, number> {\n const out: Record<string, number> = {}\n for (const [key, value] of Object.entries(values)) {\n if (Number.isFinite(value)) out[key] = value\n }\n return out\n}\n\nfunction clampScore(value: number): number {\n if (!Number.isFinite(value)) return 0\n return Math.max(0, Math.min(1, value))\n}\n","import type { DatasetSplit } from '../dataset'\nimport type { FeedbackAttempt, FeedbackTrajectory } from '../feedback-trajectory'\nimport { summarizeWorkflowTrace, validateWorkflowTraceEnvelope } from './schema'\nimport type { WorkflowTraceEnvelope, WorkflowTraceEvent } from './types'\n\nexport interface WorkflowTraceTrajectoryOptions {\n projectId?: string\n scenarioId?: string\n task: string\n split?: DatasetSplit\n tags?: Record<string, string>\n score?: number\n success?: boolean\n metadata?: Record<string, unknown>\n}\n\nexport function workflowTraceToFeedbackTrajectory(\n input: WorkflowTraceEnvelope | unknown,\n options: WorkflowTraceTrajectoryOptions,\n): FeedbackTrajectory {\n const envelope = validateWorkflowTraceEnvelope(input)\n const summary = summarizeWorkflowTrace(envelope)\n const createdAt = iso(envelope.events[0]?.timestamp)\n const updatedAt = iso(envelope.events.at(-1)?.timestamp)\n return {\n id: envelope.runId,\n projectId: options.projectId,\n scenarioId: options.scenarioId,\n task: {\n intent: options.task,\n context: {\n topology: envelope.topology,\n metadata: envelope.metadata,\n },\n },\n attempts: workflowEventsToAttempts(envelope.events),\n labels: [],\n outcome: {\n success: options.success ?? !summary.failed,\n score: options.score,\n costUsd: summary.costUsd,\n observedAt: updatedAt,\n detail: summary.failureMessage,\n metrics: {\n workflow_events: summary.eventCount,\n workflow_phases: summary.phaseCount,\n workflow_branches: summary.branchCount,\n workflow_branch_failures: summary.failedBranchCount,\n workflow_agent_calls: summary.agentCalls,\n workflow_loop_calls: summary.loopCalls,\n workflow_verifier_calls: summary.verifierCalls,\n workflow_analyst_calls: summary.analystCalls,\n workflow_reviewer_calls: summary.reviewerCalls,\n workflow_agent_failures: summary.agentFailures,\n workflow_loop_failures: summary.loopFailures,\n workflow_verifier_failures: summary.verifierFailures,\n workflow_analyst_failures: summary.analystFailures,\n workflow_reviewer_failures: summary.reviewerFailures,\n workflow_tokens_input: summary.tokenUsage.input,\n workflow_tokens_output: summary.tokenUsage.output,\n },\n metadata: {\n durationMs: summary.durationMs,\n ...(options.metadata ?? {}),\n },\n },\n split: options.split,\n tags: options.tags,\n createdAt,\n updatedAt,\n metadata: {\n traceVersion: envelope.traceVersion,\n artifacts: envelope.artifacts,\n },\n }\n}\n\nfunction workflowEventsToAttempts(events: readonly WorkflowTraceEvent[]): FeedbackAttempt[] {\n const attempts: FeedbackAttempt[] = []\n for (const event of events) {\n const artifactType = artifactTypeForWorkflowEvent(event.kind)\n if (!artifactType) continue\n const stepIndex = attempts.length\n attempts.push({\n id: `${event.runId}:${stepIndex}`,\n stepIndex,\n artifactType,\n artifact: event.payload.trace ?? event.payload,\n createdAt: iso(event.timestamp),\n metadata: {\n eventKind: event.kind,\n label: event.payload.label,\n phase: event.payload.phase,\n costUsd: event.payload.costUsd,\n tokenUsage: event.payload.tokenUsage,\n ...(event.kind.endsWith('.failed')\n ? { failed: true, message: event.payload.message, code: event.payload.code }\n : {}),\n },\n })\n }\n return attempts\n}\n\nfunction artifactTypeForWorkflowEvent(\n kind: WorkflowTraceEvent['kind'],\n): FeedbackAttempt['artifactType'] | null {\n switch (kind) {\n case 'workflow.agent.ended':\n case 'workflow.agent.failed':\n return 'action'\n case 'workflow.analyst.ended':\n case 'workflow.analyst.failed':\n return 'data'\n case 'workflow.loop.ended':\n case 'workflow.verifier.ended':\n case 'workflow.reviewer.ended':\n case 'workflow.loop.failed':\n case 'workflow.verifier.failed':\n case 'workflow.reviewer.failed':\n return 'decision'\n default:\n return null\n }\n}\n\nfunction iso(timestamp: number | undefined): string {\n return new Date(Number.isFinite(timestamp) ? timestamp! : 0).toISOString()\n}\n","import type { AnalystSeverity, EvidenceRef } from '../analyst/types'\nimport { ValidationError } from '../errors'\nimport { type RunRecord, validateRunRecord } from '../run-record'\nimport {\n type BuildWorkflowAnalystFeedbackPackOptions,\n buildWorkflowAnalystFeedbackPack,\n} from './feedback-pack'\nimport { type WorkflowTraceRunRecordOptions, workflowTraceToRunRecord } from './run-record'\nimport {\n type SanitizedWorkflowTraceEnvelopeResult,\n type SanitizeWorkflowTraceEnvelopeOptions,\n sanitizeWorkflowTraceEnvelope,\n} from './sanitize'\nimport { summarizeWorkflowTrace, validateWorkflowTraceEnvelope } from './schema'\nimport {\n type WorkflowTraceTrajectoryOptions,\n workflowTraceToFeedbackTrajectory,\n} from './trajectory'\nimport type { WorkflowTraceEnvelope, WorkflowTraceExportLinks, WorkflowTraceSummary } from './types'\n\nexport type WorkflowPartnerReportVersion = 'workflow-partner-report-v1'\n\nexport interface WorkflowPartnerFinding {\n source: 'analyst' | 'verifier' | 'failure-cluster'\n severity: AnalystSeverity\n area: string\n claim: string\n evidence: EvidenceRef[]\n recommendedAction?: string\n metadata?: Record<string, unknown>\n}\n\nexport interface WorkflowPartnerReport {\n schemaVersion: WorkflowPartnerReportVersion\n runId: string\n generatedAt: string\n summary: WorkflowTraceSummary\n docsApiGaps: WorkflowPartnerFinding[]\n prReadyFindings: WorkflowPartnerFinding[]\n failureClusters: ReturnType<typeof buildWorkflowAnalystFeedbackPack>['failureClusters']\n recommendations: string[]\n traceArtifacts: WorkflowTraceEnvelope['artifacts']\n links?: WorkflowTraceExportLinks\n exportBundle: {\n traceEnvelope: WorkflowTraceEnvelope\n sanitization: SanitizedWorkflowTraceEnvelopeResult['report']\n feedbackPack: ReturnType<typeof buildWorkflowAnalystFeedbackPack>\n trajectory: ReturnType<typeof workflowTraceToFeedbackTrajectory>\n runRecord?: RunRecord\n }\n}\n\nexport interface BuildWorkflowPartnerReportOptions\n extends Omit<BuildWorkflowAnalystFeedbackPackOptions, 'envelope'> {\n envelope: WorkflowTraceEnvelope | unknown\n sanitize?: SanitizeWorkflowTraceEnvelopeOptions\n trajectory: WorkflowTraceTrajectoryOptions\n runRecord?: WorkflowTraceRunRecordOptions\n links?: WorkflowTraceExportLinks\n}\n\nconst REPORT_VERSION: WorkflowPartnerReportVersion = 'workflow-partner-report-v1'\n\nexport function buildWorkflowPartnerReport(\n options: BuildWorkflowPartnerReportOptions,\n): WorkflowPartnerReport {\n const sanitized = sanitizeWorkflowTraceEnvelope(options.envelope, options.sanitize)\n const feedbackPack = buildWorkflowAnalystFeedbackPack({\n ...options,\n envelope: sanitized.envelope,\n })\n const trajectory = workflowTraceToFeedbackTrajectory(sanitized.envelope, options.trajectory)\n const runRecord = options.runRecord\n ? workflowTraceToRunRecord(sanitized.envelope, {\n ...options.runRecord,\n runId: sanitized.envelope.runId,\n })\n : undefined\n const analystFindings: WorkflowPartnerFinding[] = feedbackPack.findings.map((finding) => ({\n source: 'analyst' as const,\n severity: finding.severity,\n area: finding.area,\n claim: finding.claim,\n evidence: finding.evidenceRefs,\n ...(finding.recommendedAction ? { recommendedAction: finding.recommendedAction } : {}),\n metadata: {\n findingId: finding.findingId,\n analystId: finding.analystId,\n confidence: finding.confidence,\n ...(finding.subject ? { subject: finding.subject } : {}),\n },\n }))\n const verifierFindings: WorkflowPartnerFinding[] = (feedbackPack.verifier?.layers ?? []).flatMap(\n (layer) =>\n layer.findings.map((finding) => ({\n source: 'verifier' as const,\n severity: finding.severity,\n area: layer.layer,\n claim: finding.message,\n evidence: finding.evidence\n ? ([{ kind: 'artifact', uri: finding.evidence }] satisfies EvidenceRef[])\n : [],\n ...(layer.reason\n ? { recommendedAction: `Fix verifier layer \"${layer.layer}\": ${layer.reason}` }\n : {}),\n metadata: {\n status: layer.status,\n score: layer.score,\n },\n })),\n )\n const clusterFindings: WorkflowPartnerFinding[] = feedbackPack.failureClusters.map((cluster) => ({\n source: 'failure-cluster' as const,\n severity: 'medium' as const,\n area: 'failure-cluster',\n claim: `${cluster.name} affects ${(cluster.share * 100).toFixed(1)}% of failed workflow runs`,\n evidence: cluster.exemplars.map((runId) => ({\n kind: 'artifact' as const,\n uri: `run://${runId}`,\n })),\n ...(cluster.suggestedFix ? { recommendedAction: cluster.suggestedFix } : {}),\n metadata: {\n clusterId: cluster.id,\n runCount: cluster.runCount,\n source: cluster.source,\n },\n }))\n const allFindings = [...analystFindings, ...verifierFindings, ...clusterFindings].sort(\n comparePartnerFindings,\n )\n\n return {\n schemaVersion: REPORT_VERSION,\n runId: sanitized.envelope.runId,\n generatedAt: options.generatedAt ?? feedbackPack.generatedAt,\n summary: feedbackPack.summary,\n docsApiGaps: allFindings.filter(isDocsApiGap),\n prReadyFindings: allFindings.filter(isPrReadyFinding),\n failureClusters: feedbackPack.failureClusters,\n recommendations: feedbackPack.recommendations,\n traceArtifacts: sanitized.envelope.artifacts,\n ...(options.links ? { links: options.links } : {}),\n exportBundle: {\n traceEnvelope: sanitized.envelope,\n sanitization: sanitized.report,\n feedbackPack,\n trajectory,\n ...(runRecord ? { runRecord } : {}),\n },\n }\n}\n\nexport function validateWorkflowPartnerReport(input: unknown): WorkflowPartnerReport {\n const obj = expectRecord(input, 'workflow partner report')\n if (obj.schemaVersion !== REPORT_VERSION) {\n throw new ValidationError(`workflow partner report schemaVersion must be ${REPORT_VERSION}`)\n }\n\n const runId = expectString(obj.runId, 'runId')\n const generatedAt = expectString(obj.generatedAt, 'generatedAt')\n const exportBundle = validateExportBundle(obj.exportBundle, runId)\n const expectedSummary = summarizeWorkflowTrace(exportBundle.traceEnvelope)\n assertJsonEqual(expectRecord(obj.summary, 'summary'), expectedSummary, 'summary')\n assertJsonEqual(\n exportBundle.feedbackPack.summary,\n expectedSummary,\n 'exportBundle.feedbackPack.summary',\n )\n\n const traceArtifacts = validateOptionalArtifacts(obj.traceArtifacts, 'traceArtifacts')\n assertJsonEqual(\n traceArtifacts ?? [],\n exportBundle.traceEnvelope.artifacts ?? [],\n 'traceArtifacts',\n )\n\n return {\n schemaVersion: REPORT_VERSION,\n runId,\n generatedAt,\n summary: expectedSummary,\n docsApiGaps: expectArray(obj.docsApiGaps, 'docsApiGaps') as WorkflowPartnerFinding[],\n prReadyFindings: expectArray(\n obj.prReadyFindings,\n 'prReadyFindings',\n ) as WorkflowPartnerFinding[],\n failureClusters: expectArray(\n obj.failureClusters,\n 'failureClusters',\n ) as WorkflowPartnerReport['failureClusters'],\n recommendations: expectStringArray(obj.recommendations, 'recommendations'),\n traceArtifacts,\n ...(obj.links !== undefined ? { links: validateLinks(obj.links) } : {}),\n exportBundle,\n }\n}\n\nexport function renderWorkflowPartnerReport(\n report: WorkflowPartnerReport,\n options: { maxFindings?: number } = {},\n): string {\n const maxFindings = options.maxFindings ?? 8\n const lines = [\n `Workflow partner report for ${report.runId}`,\n `status=${report.summary.failed ? 'failed' : 'completed'} scoreEvidence events=${report.summary.eventCount} agents=${report.summary.agentCalls} verifier=${report.summary.verifierCalls} analyst=${report.summary.analystCalls} reviewer=${report.summary.reviewerCalls} costUsd=${report.summary.costUsd.toFixed(6)}`,\n report.failureClusters.length > 0 ? 'Failure clusters:' : undefined,\n ...report.failureClusters\n .slice(0, maxFindings)\n .map(\n (cluster) =>\n `- ${cluster.name} share=${cluster.share.toFixed(3)} exemplars=${cluster.exemplars.join(',')}`,\n ),\n report.docsApiGaps.length > 0 ? 'Docs/API gaps:' : undefined,\n ...report.docsApiGaps\n .slice(0, maxFindings)\n .map((finding) => `- ${finding.severity} ${finding.area}: ${finding.claim}`),\n report.prReadyFindings.length > 0 ? 'PR-ready findings:' : undefined,\n ...report.prReadyFindings\n .slice(0, maxFindings)\n .map((finding) => `- ${finding.severity} ${finding.area}: ${finding.claim}`),\n report.recommendations.length > 0 ? 'Recommendations:' : undefined,\n ...report.recommendations.slice(0, maxFindings).map((recommendation) => `- ${recommendation}`),\n ].filter((line): line is string => Boolean(line))\n return lines.join('\\n')\n}\n\nfunction validateExportBundle(\n value: unknown,\n runId: string,\n): WorkflowPartnerReport['exportBundle'] {\n const obj = expectRecord(value, 'exportBundle')\n const traceEnvelope = validateWorkflowTraceEnvelope(obj.traceEnvelope)\n if (traceEnvelope.runId !== runId) {\n throw new ValidationError('exportBundle.traceEnvelope.runId must match report runId')\n }\n\n const feedbackPack = expectRecord(obj.feedbackPack, 'exportBundle.feedbackPack')\n if (feedbackPack.schemaVersion !== 'workflow-feedback-pack-v1') {\n throw new ValidationError(\n 'exportBundle.feedbackPack.schemaVersion must be workflow-feedback-pack-v1',\n )\n }\n if (feedbackPack.runId !== runId) {\n throw new ValidationError('exportBundle.feedbackPack.runId must match report runId')\n }\n expectRecord(feedbackPack.toolUsage, 'exportBundle.feedbackPack.toolUsage')\n expectArray(feedbackPack.failureClusters, 'exportBundle.feedbackPack.failureClusters')\n expectArray(feedbackPack.findings, 'exportBundle.feedbackPack.findings')\n expectStringArray(feedbackPack.recommendations, 'exportBundle.feedbackPack.recommendations')\n expectStringArray(feedbackPack.driverContextLines, 'exportBundle.feedbackPack.driverContextLines')\n\n const trajectory = expectRecord(obj.trajectory, 'exportBundle.trajectory')\n if (trajectory.id !== runId) {\n throw new ValidationError('exportBundle.trajectory.id must match report runId')\n }\n expectArray(trajectory.attempts, 'exportBundle.trajectory.attempts')\n expectArray(trajectory.labels, 'exportBundle.trajectory.labels')\n\n const runRecord =\n obj.runRecord === undefined\n ? undefined\n : validateWorkflowRunRecord(obj.runRecord, traceEnvelope)\n expectRecord(obj.sanitization, 'exportBundle.sanitization')\n\n return {\n traceEnvelope,\n sanitization: obj.sanitization as WorkflowPartnerReport['exportBundle']['sanitization'],\n feedbackPack: obj.feedbackPack as WorkflowPartnerReport['exportBundle']['feedbackPack'],\n trajectory: obj.trajectory as WorkflowPartnerReport['exportBundle']['trajectory'],\n ...(runRecord ? { runRecord } : {}),\n }\n}\n\nfunction validateWorkflowRunRecord(value: unknown, envelope: WorkflowTraceEnvelope): RunRecord {\n const record = validateRunRecord(value)\n const summary = summarizeWorkflowTrace(envelope)\n if (record.runId !== envelope.runId) {\n throw new ValidationError('exportBundle.runRecord.runId must match trace envelope runId')\n }\n if (record.outcome.raw.workflow_events !== summary.eventCount) {\n throw new ValidationError('exportBundle.runRecord outcome does not match trace event count')\n }\n return record\n}\n\nfunction validateLinks(value: unknown): WorkflowTraceExportLinks {\n const obj = expectRecord(value, 'links')\n return {\n ...(obj.traceArtifactUri !== undefined\n ? { traceArtifactUri: expectString(obj.traceArtifactUri, 'links.traceArtifactUri') }\n : {}),\n ...(obj.exportBundleUri !== undefined\n ? { exportBundleUri: expectString(obj.exportBundleUri, 'links.exportBundleUri') }\n : {}),\n ...(obj.partnerReportUri !== undefined\n ? { partnerReportUri: expectString(obj.partnerReportUri, 'links.partnerReportUri') }\n : {}),\n ...(obj.intelligenceRunUri !== undefined\n ? { intelligenceRunUri: expectString(obj.intelligenceRunUri, 'links.intelligenceRunUri') }\n : {}),\n }\n}\n\nfunction validateOptionalArtifacts(\n value: unknown,\n path: string,\n): WorkflowTraceEnvelope['artifacts'] {\n if (value === undefined) return undefined\n return expectArray(value, path).map((item, index) => {\n const itemPath = `${path}[${index}]`\n const obj = expectRecord(item, itemPath)\n return {\n kind: expectString(obj.kind, `${itemPath}.kind`),\n uri: expectString(obj.uri, `${itemPath}.uri`),\n ...(obj.contentType !== undefined\n ? { contentType: expectString(obj.contentType, `${itemPath}.contentType`) }\n : {}),\n ...(obj.sha256 !== undefined\n ? { sha256: expectString(obj.sha256, `${itemPath}.sha256`) }\n : {}),\n ...(obj.metadata !== undefined\n ? { metadata: expectRecord(obj.metadata, `${itemPath}.metadata`) }\n : {}),\n }\n })\n}\n\nfunction expectRecord(value: unknown, path: string): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n throw new ValidationError(`${path}: expected object`)\n }\n return value as Record<string, unknown>\n}\n\nfunction expectArray(value: unknown, path: string): unknown[] {\n if (!Array.isArray(value)) throw new ValidationError(`${path}: expected array`)\n return value\n}\n\nfunction expectString(value: unknown, path: string): string {\n if (typeof value !== 'string' || value.length === 0) {\n throw new ValidationError(`${path}: expected non-empty string`)\n }\n return value\n}\n\nfunction expectStringArray(value: unknown, path: string): string[] {\n return expectArray(value, path).map((item, index) => expectString(item, `${path}[${index}]`))\n}\n\nfunction assertJsonEqual(actual: unknown, expected: unknown, path: string): void {\n if (JSON.stringify(stableJson(actual)) !== JSON.stringify(stableJson(expected))) {\n throw new ValidationError(`${path} does not match trace envelope`)\n }\n}\n\nfunction stableJson(value: unknown): unknown {\n if (Array.isArray(value)) return value.map(stableJson)\n if (!value || typeof value !== 'object') return value\n return Object.fromEntries(\n Object.entries(value as Record<string, unknown>)\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([key, child]) => [key, stableJson(child)]),\n )\n}\n\nfunction isDocsApiGap(finding: WorkflowPartnerFinding): boolean {\n const haystack = [\n finding.area,\n finding.claim,\n finding.recommendedAction,\n typeof finding.metadata?.subject === 'string' ? finding.metadata.subject : undefined,\n ]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n return /\\b(api|sdk|docs?|documentation|reference|integration|example|quickstart)\\b/.test(haystack)\n}\n\nfunction isPrReadyFinding(finding: WorkflowPartnerFinding): boolean {\n return (\n finding.recommendedAction !== undefined ||\n finding.severity === 'critical' ||\n finding.severity === 'high'\n )\n}\n\nfunction comparePartnerFindings(\n left: WorkflowPartnerFinding,\n right: WorkflowPartnerFinding,\n): number {\n const severityDelta = severityRank(right.severity) - severityRank(left.severity)\n if (severityDelta !== 0) return severityDelta\n return left.area.localeCompare(right.area)\n}\n\nfunction severityRank(severity: AnalystSeverity): number {\n switch (severity) {\n case 'critical':\n return 5\n case 'high':\n return 4\n case 'medium':\n return 3\n case 'low':\n return 2\n case 'info':\n return 1\n }\n}\n","import { ValidationError } from '../errors'\nimport { type RunRecord, validateRunRecord } from '../run-record'\nimport { type PairedBootstrapResult, pairedBootstrap } from '../statistics'\n\nexport type WorkflowDriverPromotionDecisionVersion = 'workflow-driver-promotion-v1'\n\nexport type WorkflowDriverPromotionRejectionCode =\n | 'missing_baseline_records'\n | 'missing_candidate_records'\n | 'missing_holdout_pairs'\n | 'few_pairs'\n | 'insufficient_lift'\n | 'cost_ceiling'\n\nexport interface WorkflowDriverPromotionPair {\n key: string\n scenarioId: string\n seed: number\n baselineRunId: string\n candidateRunId: string\n baselineScore: number\n candidateScore: number\n delta: number\n}\n\nexport interface WorkflowDriverPromotionEvidence {\n pairedRuns: number\n expectedScenarioIds: string[]\n pairedScenarioIds: string[]\n missingScenarioIds: string[]\n baselineMean: number\n candidateMean: number\n lift: number\n liftCi: { low: number; high: number }\n bootstrap: PairedBootstrapResult\n confidence: number\n resamples: number\n statistic: 'mean' | 'median'\n deltaThreshold: number\n baselineMedianCostUsd: number\n candidateMedianCostUsd: number\n pairs: WorkflowDriverPromotionPair[]\n}\n\nexport interface WorkflowDriverPromotionDecision {\n schemaVersion: WorkflowDriverPromotionDecisionVersion\n generatedAt: string\n baselineStrategyId: string\n candidateStrategyId: string\n promote: boolean\n rejectionCode: WorkflowDriverPromotionRejectionCode | null\n reason: string\n evidence: WorkflowDriverPromotionEvidence\n}\n\nexport interface DecideWorkflowDriverPromotionOptions {\n records: readonly RunRecord[] | readonly unknown[]\n baselineStrategyId?: string\n candidateStrategyId?: string\n expectedScenarioIds?: readonly string[]\n minPairedHoldoutRuns?: number\n deltaThreshold?: number\n confidence?: number\n resamples?: number\n seed?: number\n statistic?: 'mean' | 'median'\n costPerRunCeiling?: number\n generatedAt?: string\n}\n\nconst DECISION_VERSION: WorkflowDriverPromotionDecisionVersion = 'workflow-driver-promotion-v1'\nconst DEFAULT_BASELINE_STRATEGY = 'reviewer-loop-v1'\nconst DEFAULT_CANDIDATE_STRATEGY = 'workflow-driver-v1'\n\nexport function decideWorkflowDriverPromotion(\n options: DecideWorkflowDriverPromotionOptions,\n): WorkflowDriverPromotionDecision {\n const records = options.records.map(validateRunRecord)\n const baselineStrategyId = options.baselineStrategyId ?? DEFAULT_BASELINE_STRATEGY\n const candidateStrategyId = options.candidateStrategyId ?? DEFAULT_CANDIDATE_STRATEGY\n const confidence = options.confidence ?? 0.95\n const resamples = options.resamples ?? 2000\n const statistic = options.statistic ?? 'mean'\n const deltaThreshold = options.deltaThreshold ?? 0\n const minPairedHoldoutRuns = options.minPairedHoldoutRuns ?? 3\n validateOptions({ confidence, resamples, deltaThreshold, minPairedHoldoutRuns }, options)\n\n const baseline = records.filter((record) => record.candidateId === baselineStrategyId)\n const candidate = records.filter((record) => record.candidateId === candidateStrategyId)\n const baselineHoldout = baseline.filter(isScoredHoldout)\n const candidateHoldout = candidate.filter(isScoredHoldout)\n const expectedScenarioIds = expectedScenarios(options.expectedScenarioIds, [\n ...baselineHoldout,\n ...candidateHoldout,\n ])\n const expectedScenarioIdSet = new Set(expectedScenarioIds)\n const pairs = pairHoldoutRuns(baselineHoldout, candidateHoldout).filter(\n (pair) => expectedScenarioIdSet.size === 0 || expectedScenarioIdSet.has(pair.scenarioId),\n )\n const pairedScenarioIds = [...new Set(pairs.map((pair) => pair.scenarioId))].sort()\n const missingScenarioIds = expectedScenarioIds.filter((id) => !pairedScenarioIds.includes(id))\n const evidence = buildEvidence({\n pairs,\n expectedScenarioIds,\n pairedScenarioIds,\n missingScenarioIds,\n baseline,\n candidate,\n confidence,\n resamples,\n statistic,\n deltaThreshold,\n seed: options.seed,\n })\n\n if (baselineHoldout.length === 0) {\n return decision({\n options,\n baselineStrategyId,\n candidateStrategyId,\n evidence,\n promote: false,\n rejectionCode: 'missing_baseline_records',\n reason: `missing_baseline_records: no holdout RunRecords for baseline \"${baselineStrategyId}\"`,\n })\n }\n if (candidateHoldout.length === 0) {\n return decision({\n options,\n baselineStrategyId,\n candidateStrategyId,\n evidence,\n promote: false,\n rejectionCode: 'missing_candidate_records',\n reason: `missing_candidate_records: no holdout RunRecords for candidate \"${candidateStrategyId}\"`,\n })\n }\n if (missingScenarioIds.length > 0) {\n return decision({\n options,\n baselineStrategyId,\n candidateStrategyId,\n evidence,\n promote: false,\n rejectionCode: 'missing_holdout_pairs',\n reason: `missing_holdout_pairs: no paired baseline/candidate holdout record for scenario(s) [${missingScenarioIds.join(', ')}]`,\n })\n }\n if (pairs.length < minPairedHoldoutRuns) {\n return decision({\n options,\n baselineStrategyId,\n candidateStrategyId,\n evidence,\n promote: false,\n rejectionCode: 'few_pairs',\n reason: `few_pairs: ${pairs.length} paired holdout run(s) < min ${minPairedHoldoutRuns}`,\n })\n }\n if (!(evidence.liftCi.low > deltaThreshold)) {\n return decision({\n options,\n baselineStrategyId,\n candidateStrategyId,\n evidence,\n promote: false,\n rejectionCode: 'insufficient_lift',\n reason:\n `insufficient_lift: heldout ${statistic} lift=${fmt(evidence.lift)} ` +\n `CI=[${fmt(evidence.liftCi.low)}, ${fmt(evidence.liftCi.high)}] does not clear threshold ${fmt(deltaThreshold)}`,\n })\n }\n if (\n options.costPerRunCeiling !== undefined &&\n Number.isFinite(evidence.candidateMedianCostUsd) &&\n evidence.candidateMedianCostUsd > options.costPerRunCeiling\n ) {\n return decision({\n options,\n baselineStrategyId,\n candidateStrategyId,\n evidence,\n promote: false,\n rejectionCode: 'cost_ceiling',\n reason:\n `cost_ceiling: candidate median cost $${fmt(evidence.candidateMedianCostUsd)} ` +\n `exceeds ceiling $${fmt(options.costPerRunCeiling)}`,\n })\n }\n\n return decision({\n options,\n baselineStrategyId,\n candidateStrategyId,\n evidence,\n promote: true,\n rejectionCode: null,\n reason:\n `promote: ${candidateStrategyId} beats ${baselineStrategyId} on paired heldout workflows ` +\n `lift=${fmt(evidence.lift)} CI=[${fmt(evidence.liftCi.low)}, ${fmt(evidence.liftCi.high)}] ` +\n `over ${pairs.length} pair(s)`,\n })\n}\n\nfunction validateOptions(\n normalized: {\n confidence: number\n resamples: number\n deltaThreshold: number\n minPairedHoldoutRuns: number\n },\n options: DecideWorkflowDriverPromotionOptions,\n): void {\n if (options.records.length === 0) {\n throw new ValidationError('workflow promotion gate requires at least one RunRecord')\n }\n if (normalized.confidence <= 0 || normalized.confidence >= 1) {\n throw new ValidationError('workflow promotion gate confidence must be in (0,1)')\n }\n if (!Number.isInteger(normalized.resamples) || normalized.resamples <= 0) {\n throw new ValidationError('workflow promotion gate resamples must be a positive integer')\n }\n if (!Number.isFinite(normalized.deltaThreshold)) {\n throw new ValidationError('workflow promotion gate deltaThreshold must be finite')\n }\n if (!Number.isInteger(normalized.minPairedHoldoutRuns) || normalized.minPairedHoldoutRuns < 1) {\n throw new ValidationError(\n 'workflow promotion gate minPairedHoldoutRuns must be a positive integer',\n )\n }\n if (\n options.costPerRunCeiling !== undefined &&\n (!Number.isFinite(options.costPerRunCeiling) || options.costPerRunCeiling <= 0)\n ) {\n throw new ValidationError('workflow promotion gate costPerRunCeiling must be positive')\n }\n}\n\nfunction isScoredHoldout(record: RunRecord): boolean {\n return record.splitTag === 'holdout' && typeof record.outcome.holdoutScore === 'number'\n}\n\nfunction expectedScenarios(\n requested: readonly string[] | undefined,\n records: readonly RunRecord[],\n): string[] {\n const values = (requested ?? records.map((record) => record.scenarioId)).filter(isString)\n return [...new Set(values)].sort()\n}\n\nfunction pairHoldoutRuns(\n baseline: readonly RunRecord[],\n candidate: readonly RunRecord[],\n): WorkflowDriverPromotionPair[] {\n const baselineByKey = indexByPairKey(baseline, 'baseline')\n const out: WorkflowDriverPromotionPair[] = []\n for (const candidateRun of candidate) {\n const key = holdoutPairKey(candidateRun, 'candidate')\n const baselineRun = baselineByKey.get(key)\n if (!baselineRun) continue\n const baselineScore = baselineRun.outcome.holdoutScore!\n const candidateScore = candidateRun.outcome.holdoutScore!\n out.push({\n key,\n scenarioId: candidateRun.scenarioId!,\n seed: candidateRun.seed,\n baselineRunId: baselineRun.runId,\n candidateRunId: candidateRun.runId,\n baselineScore,\n candidateScore,\n delta: candidateScore - baselineScore,\n })\n }\n return out.sort((a, b) => a.key.localeCompare(b.key))\n}\n\nfunction indexByPairKey(\n records: readonly RunRecord[],\n side: 'baseline' | 'candidate',\n): Map<string, RunRecord> {\n const out = new Map<string, RunRecord>()\n for (const record of records) {\n const key = holdoutPairKey(record, side)\n if (out.has(key)) {\n throw new ValidationError(\n `workflow promotion gate duplicate ${side} holdout pair key: ${key}`,\n )\n }\n out.set(key, record)\n }\n return out\n}\n\nfunction holdoutPairKey(record: RunRecord, side: 'baseline' | 'candidate'): string {\n if (!record.scenarioId) {\n throw new ValidationError(\n `workflow promotion gate ${side} holdout RunRecord ${record.runId} is missing scenarioId`,\n )\n }\n return `${record.scenarioId}::${record.seed}`\n}\n\nfunction buildEvidence(args: {\n pairs: readonly WorkflowDriverPromotionPair[]\n expectedScenarioIds: string[]\n pairedScenarioIds: string[]\n missingScenarioIds: string[]\n baseline: readonly RunRecord[]\n candidate: readonly RunRecord[]\n confidence: number\n resamples: number\n statistic: 'mean' | 'median'\n deltaThreshold: number\n seed?: number\n}): WorkflowDriverPromotionEvidence {\n const before = args.pairs.map((pair) => pair.baselineScore)\n const after = args.pairs.map((pair) => pair.candidateScore)\n const bootstrap = pairedBootstrap(before, after, {\n confidence: args.confidence,\n resamples: args.resamples,\n statistic: args.statistic,\n ...(args.seed !== undefined ? { seed: args.seed } : {}),\n })\n return {\n pairedRuns: args.pairs.length,\n expectedScenarioIds: args.expectedScenarioIds,\n pairedScenarioIds: args.pairedScenarioIds,\n missingScenarioIds: args.missingScenarioIds,\n baselineMean: mean(before),\n candidateMean: mean(after),\n lift: args.statistic === 'mean' ? bootstrap.mean : bootstrap.median,\n liftCi: { low: bootstrap.low, high: bootstrap.high },\n bootstrap,\n confidence: args.confidence,\n resamples: args.resamples,\n statistic: args.statistic,\n deltaThreshold: args.deltaThreshold,\n baselineMedianCostUsd: medianFinite(args.baseline.map((record) => record.costUsd)),\n candidateMedianCostUsd: medianFinite(args.candidate.map((record) => record.costUsd)),\n pairs: [...args.pairs],\n }\n}\n\nfunction decision(args: {\n options: DecideWorkflowDriverPromotionOptions\n baselineStrategyId: string\n candidateStrategyId: string\n evidence: WorkflowDriverPromotionEvidence\n promote: boolean\n rejectionCode: WorkflowDriverPromotionRejectionCode | null\n reason: string\n}): WorkflowDriverPromotionDecision {\n return {\n schemaVersion: DECISION_VERSION,\n generatedAt: args.options.generatedAt ?? new Date().toISOString(),\n baselineStrategyId: args.baselineStrategyId,\n candidateStrategyId: args.candidateStrategyId,\n promote: args.promote,\n rejectionCode: args.rejectionCode,\n reason: args.reason,\n evidence: args.evidence,\n }\n}\n\nfunction mean(values: readonly number[]): number {\n if (values.length === 0) return Number.NaN\n return values.reduce((sum, value) => sum + value, 0) / values.length\n}\n\nfunction medianFinite(values: readonly number[]): number {\n const finite = values.filter(Number.isFinite).sort((a, b) => a - b)\n if (finite.length === 0) return Number.NaN\n const mid = Math.floor(finite.length / 2)\n return finite.length % 2 === 0 ? (finite[mid - 1]! + finite[mid]!) / 2 : finite[mid]!\n}\n\nfunction fmt(value: number): string {\n if (!Number.isFinite(value)) return String(value)\n return value.toFixed(4)\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string' && value.length > 0\n}\n","import { ValidationError } from '../errors'\nimport { validateWorkflowTraceEnvelope, validateWorkflowTraceEvent } from './schema'\nimport type { WorkflowTopology, WorkflowTraceArtifact, WorkflowTraceEnvelope } from './types'\n\nexport interface WorkflowTraceEnvelopeFromEventsOptions {\n runId?: string\n topology?: WorkflowTopology\n artifacts?: readonly WorkflowTraceArtifact[]\n metadata?: Record<string, unknown>\n}\n\nexport interface WorkflowRuntimeResultLike {\n runId?: string\n meta?: unknown\n output?: unknown\n events: readonly unknown[]\n}\n\nexport interface WorkflowRuntimeResultToTraceEnvelopeOptions\n extends Omit<WorkflowTraceEnvelopeFromEventsOptions, 'runId'> {\n runId?: string\n includeOutputInMetadata?: boolean\n}\n\nexport function workflowEventsToTraceEnvelope(\n events: readonly unknown[],\n options: WorkflowTraceEnvelopeFromEventsOptions = {},\n): WorkflowTraceEnvelope {\n if (!Array.isArray(events) || events.length === 0) {\n throw new ValidationError('workflow trace events must be a non-empty array')\n }\n const first = validateWorkflowTraceEvent(events[0])\n const runId = options.runId ?? first.runId\n return validateWorkflowTraceEnvelope({\n traceVersion: 'workflow-trace-v1',\n runId,\n ...(options.topology ? { topology: options.topology } : {}),\n events,\n ...(options.artifacts ? { artifacts: options.artifacts } : {}),\n ...(options.metadata ? { metadata: options.metadata } : {}),\n })\n}\n\nexport function workflowRuntimeResultToTraceEnvelope(\n result: WorkflowRuntimeResultLike,\n options: WorkflowRuntimeResultToTraceEnvelopeOptions = {},\n): WorkflowTraceEnvelope {\n if (!result || typeof result !== 'object') {\n throw new ValidationError('workflow runtime result must be an object')\n }\n const metadata = runtimeResultMetadata(result, options)\n return workflowEventsToTraceEnvelope(result.events, {\n runId: options.runId ?? result.runId,\n ...(options.topology ? { topology: options.topology } : {}),\n ...(options.artifacts ? { artifacts: options.artifacts } : {}),\n ...(metadata ? { metadata } : {}),\n })\n}\n\nfunction runtimeResultMetadata(\n result: WorkflowRuntimeResultLike,\n options: WorkflowRuntimeResultToTraceEnvelopeOptions,\n): Record<string, unknown> | undefined {\n const runtimeResult: Record<string, unknown> = {}\n if (result.meta !== undefined) runtimeResult.meta = result.meta\n if (options.includeOutputInMetadata && result.output !== undefined) {\n runtimeResult.output = result.output\n }\n const hasRuntimeMetadata = Object.keys(runtimeResult).length > 0\n if (!hasRuntimeMetadata && !options.metadata) return undefined\n return {\n ...(options.metadata ?? {}),\n ...(hasRuntimeMetadata ? { runtimeResult } : {}),\n }\n}\n"],"mappings":"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","names":["isRecord","expectRecord","expectString","isRecord","stringValue","expectRecord","expectString","expectArray","expectStringArray","validateLinks","severityRank"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|