agent-inspect 4.2.0 → 4.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/docs/API.md +3 -0
  3. package/docs/CLI.md +36 -0
  4. package/docs/SCHEMA.md +27 -1
  5. package/package.json +1 -1
  6. package/packages/cli/dist/{chunk-5VSPJEZ7.mjs → chunk-ORHDQUT6.mjs} +385 -10
  7. package/packages/cli/dist/chunk-ORHDQUT6.mjs.map +1 -0
  8. package/packages/cli/dist/index.cjs +2548 -1567
  9. package/packages/cli/dist/index.cjs.map +1 -1
  10. package/packages/cli/dist/index.mjs +2028 -1495
  11. package/packages/cli/dist/index.mjs.map +1 -1
  12. package/packages/cli/dist/{src-VQT7QLGV.mjs → src-FJOHPC4X.mjs} +3 -3
  13. package/packages/cli/dist/{src-VQT7QLGV.mjs.map → src-FJOHPC4X.mjs.map} +1 -1
  14. package/packages/core/dist/advanced.cjs +397 -12
  15. package/packages/core/dist/advanced.cjs.map +1 -1
  16. package/packages/core/dist/advanced.d.cts +105 -9
  17. package/packages/core/dist/advanced.d.ts +105 -9
  18. package/packages/core/dist/advanced.mjs +219 -17
  19. package/packages/core/dist/advanced.mjs.map +1 -1
  20. package/packages/core/dist/checks.cjs +117 -18
  21. package/packages/core/dist/checks.cjs.map +1 -1
  22. package/packages/core/dist/checks.d.cts +11 -3
  23. package/packages/core/dist/checks.d.ts +11 -3
  24. package/packages/core/dist/checks.mjs +42 -1
  25. package/packages/core/dist/checks.mjs.map +1 -1
  26. package/packages/core/dist/{chunk-2ZXEMWGK.mjs → chunk-3USJVBLA.mjs} +3 -3
  27. package/packages/core/dist/{chunk-2ZXEMWGK.mjs.map → chunk-3USJVBLA.mjs.map} +1 -1
  28. package/packages/core/dist/{chunk-HY7H3CQM.mjs → chunk-CAWPF22J.mjs} +4 -3
  29. package/packages/core/dist/chunk-CAWPF22J.mjs.map +1 -0
  30. package/packages/core/dist/{chunk-XUNJMAPD.mjs → chunk-KNYL56KZ.mjs} +38 -3
  31. package/packages/core/dist/chunk-KNYL56KZ.mjs.map +1 -0
  32. package/packages/core/dist/{chunk-IZBJAZGF.mjs → chunk-P366CCL2.mjs} +34 -3
  33. package/packages/core/dist/chunk-P366CCL2.mjs.map +1 -0
  34. package/packages/core/dist/{chunk-4JVGFNQH.mjs → chunk-ULCGIRTC.mjs} +95 -8
  35. package/packages/core/dist/chunk-ULCGIRTC.mjs.map +1 -0
  36. package/packages/core/dist/chunk-VFO76UH3.mjs +228 -0
  37. package/packages/core/dist/chunk-VFO76UH3.mjs.map +1 -0
  38. package/packages/core/dist/{chunk-NQZPZ2FN.mjs → chunk-WRE4CNPF.mjs} +6 -3
  39. package/packages/core/dist/chunk-WRE4CNPF.mjs.map +1 -0
  40. package/packages/core/dist/{chunk-A4V2H3YU.mjs → chunk-ZWA5RWMV.mjs} +40 -4
  41. package/packages/core/dist/chunk-ZWA5RWMV.mjs.map +1 -0
  42. package/packages/core/dist/{context-DjY-jvQk.d.cts → context-BbfkMYjz.d.cts} +5 -3
  43. package/packages/core/dist/{context-BDZmi53V.d.ts → context-Cp8NRbBX.d.ts} +5 -3
  44. package/packages/core/dist/diff.cjs.map +1 -1
  45. package/packages/core/dist/diff.d.cts +3 -3
  46. package/packages/core/dist/diff.d.ts +3 -3
  47. package/packages/core/dist/diff.mjs +1 -1
  48. package/packages/core/dist/exporters.cjs +137 -1
  49. package/packages/core/dist/exporters.cjs.map +1 -1
  50. package/packages/core/dist/exporters.d.cts +6 -3
  51. package/packages/core/dist/exporters.d.ts +6 -3
  52. package/packages/core/dist/exporters.mjs +71 -6
  53. package/packages/core/dist/exporters.mjs.map +1 -1
  54. package/packages/core/dist/index.cjs +181 -6
  55. package/packages/core/dist/index.cjs.map +1 -1
  56. package/packages/core/dist/index.d.cts +14 -7
  57. package/packages/core/dist/index.d.ts +14 -7
  58. package/packages/core/dist/index.mjs +51 -7
  59. package/packages/core/dist/index.mjs.map +1 -1
  60. package/packages/core/dist/{inspect-event-CYAV7Hxm.d.cts → inspect-event-IqwOHbGo.d.cts} +1 -1
  61. package/packages/core/dist/{inspect-event-CYAV7Hxm.d.ts → inspect-event-IqwOHbGo.d.ts} +1 -1
  62. package/packages/core/dist/{log-config-BNQ9UTmP.d.cts → log-config-CW8w5YQ9.d.cts} +1 -1
  63. package/packages/core/dist/{log-config-D3Yp1SZN.d.ts → log-config-SRA4xTp8.d.ts} +1 -1
  64. package/packages/core/dist/logs.d.cts +3 -3
  65. package/packages/core/dist/logs.d.ts +3 -3
  66. package/packages/core/dist/{persisted-inspect-event-BLvb0jSX.d.ts → persisted-inspect-event-DruwqARZ.d.ts} +1 -1
  67. package/packages/core/dist/{persisted-inspect-event-D5SjBz9b.d.cts → persisted-inspect-event-Gd-W8vB7.d.cts} +1 -1
  68. package/packages/core/dist/persisted.cjs +67 -1
  69. package/packages/core/dist/persisted.cjs.map +1 -1
  70. package/packages/core/dist/persisted.d.cts +5 -5
  71. package/packages/core/dist/persisted.d.ts +5 -5
  72. package/packages/core/dist/persisted.mjs +3 -3
  73. package/packages/core/dist/readers.cjs +72 -3
  74. package/packages/core/dist/readers.cjs.map +1 -1
  75. package/packages/core/dist/readers.d.cts +2 -2
  76. package/packages/core/dist/readers.d.ts +2 -2
  77. package/packages/core/dist/readers.mjs +5 -5
  78. package/packages/core/dist/readers.mjs.map +1 -1
  79. package/packages/core/dist/{types-CQun9LW6.d.ts → types-B1X87dUW.d.cts} +16 -2
  80. package/packages/core/dist/{types-C-llnPH0.d.cts → types-BVkjSd0q.d.ts} +16 -2
  81. package/packages/core/dist/types-CvsKGweN.d.cts +12 -0
  82. package/packages/core/dist/types-CvsKGweN.d.ts +12 -0
  83. package/packages/core/dist/writers.cjs +2 -1
  84. package/packages/core/dist/writers.cjs.map +1 -1
  85. package/packages/core/dist/writers.d.cts +2 -2
  86. package/packages/core/dist/writers.d.ts +2 -2
  87. package/packages/core/dist/writers.mjs +3 -4
  88. package/packages/core/dist/writers.mjs.map +1 -1
  89. package/packages/cli/dist/chunk-5VSPJEZ7.mjs.map +0 -1
  90. package/packages/core/dist/chunk-4JVGFNQH.mjs.map +0 -1
  91. package/packages/core/dist/chunk-A4V2H3YU.mjs.map +0 -1
  92. package/packages/core/dist/chunk-EDTQHZPM.mjs +0 -88
  93. package/packages/core/dist/chunk-EDTQHZPM.mjs.map +0 -1
  94. package/packages/core/dist/chunk-HY7H3CQM.mjs.map +0 -1
  95. package/packages/core/dist/chunk-IZBJAZGF.mjs.map +0 -1
  96. package/packages/core/dist/chunk-NQZPZ2FN.mjs.map +0 -1
  97. package/packages/core/dist/chunk-XUNJMAPD.mjs.map +0 -1
@@ -1,9 +1,10 @@
1
- import { I as InspectRunOptions, S as StepOptions, O as ObserveOptions } from './types-C-llnPH0.cjs';
2
- export { E as ErrorInfo, R as RedactionProfile, a as Run, b as RunStatus, c as Step, d as StepMetadata, e as StepStatus, f as StepType, T as TokenMetadata, g as TraceCorrelationMetadata } from './types-C-llnPH0.cjs';
3
- export { C as CreateInspectorOptions, I as Inspector, a as InspectorCaptureOptions, b as InspectorObserveOptions, c as InspectorRunOptions, d as InspectorStepOptions, e as createInspector, g as getCurrentCorrelationMetadata, m as maybeInspectRun } from './context-DjY-jvQk.cjs';
4
- import './log-config-BNQ9UTmP.cjs';
5
- import './inspect-event-CYAV7Hxm.cjs';
6
- import './persisted-inspect-event-D5SjBz9b.cjs';
1
+ import { I as InspectRunOptions, S as StepOptions, O as ObserveOptions } from './types-B1X87dUW.cjs';
2
+ export { E as ErrorInfo, R as RedactionProfile, a as Run, b as RunStatus, c as Step, d as StepMetadata, e as StepStatus, f as StepType, T as TokenMetadata, g as TraceCorrelationMetadata } from './types-B1X87dUW.cjs';
3
+ export { C as CreateInspectorOptions, I as Inspector, a as InspectorCaptureOptions, b as InspectorObserveOptions, c as InspectorRunOptions, d as InspectorStepOptions, e as createInspector, g as getCurrentCorrelationMetadata, m as maybeInspectRun } from './context-BbfkMYjz.cjs';
4
+ import { O as ObserveOutcomeOptions } from './types-CvsKGweN.cjs';
5
+ import './log-config-CW8w5YQ9.cjs';
6
+ import './inspect-event-IqwOHbGo.cjs';
7
+ import './persisted-inspect-event-Gd-W8vB7.cjs';
7
8
  import './writers.cjs';
8
9
 
9
10
  /**
@@ -42,4 +43,10 @@ declare const step: StepFunction;
42
43
  */
43
44
  declare function observe<T>(agent: T, options?: ObserveOptions): T;
44
45
 
45
- export { InspectRunOptions, ObserveOptions, StepOptions, inspectRun, observe, step };
46
+ /**
47
+ * Records an observed real-world outcome inside an active `inspectRun` context.
48
+ * Outside a run, logs a warning and returns without throwing.
49
+ */
50
+ declare function observeOutcome(name: string, options: ObserveOutcomeOptions): Promise<void>;
51
+
52
+ export { InspectRunOptions, ObserveOptions, ObserveOutcomeOptions, StepOptions, inspectRun, observe, observeOutcome, step };
@@ -1,9 +1,10 @@
1
- import { I as InspectRunOptions, S as StepOptions, O as ObserveOptions } from './types-CQun9LW6.js';
2
- export { E as ErrorInfo, R as RedactionProfile, a as Run, b as RunStatus, c as Step, d as StepMetadata, e as StepStatus, f as StepType, T as TokenMetadata, g as TraceCorrelationMetadata } from './types-CQun9LW6.js';
3
- export { C as CreateInspectorOptions, I as Inspector, a as InspectorCaptureOptions, b as InspectorObserveOptions, c as InspectorRunOptions, d as InspectorStepOptions, e as createInspector, g as getCurrentCorrelationMetadata, m as maybeInspectRun } from './context-BDZmi53V.js';
4
- import './log-config-D3Yp1SZN.js';
5
- import './inspect-event-CYAV7Hxm.js';
6
- import './persisted-inspect-event-BLvb0jSX.js';
1
+ import { I as InspectRunOptions, S as StepOptions, O as ObserveOptions } from './types-BVkjSd0q.js';
2
+ export { E as ErrorInfo, R as RedactionProfile, a as Run, b as RunStatus, c as Step, d as StepMetadata, e as StepStatus, f as StepType, T as TokenMetadata, g as TraceCorrelationMetadata } from './types-BVkjSd0q.js';
3
+ export { C as CreateInspectorOptions, I as Inspector, a as InspectorCaptureOptions, b as InspectorObserveOptions, c as InspectorRunOptions, d as InspectorStepOptions, e as createInspector, g as getCurrentCorrelationMetadata, m as maybeInspectRun } from './context-Cp8NRbBX.js';
4
+ import { O as ObserveOutcomeOptions } from './types-CvsKGweN.js';
5
+ import './log-config-SRA4xTp8.js';
6
+ import './inspect-event-IqwOHbGo.js';
7
+ import './persisted-inspect-event-DruwqARZ.js';
7
8
  import './writers.js';
8
9
 
9
10
  /**
@@ -42,4 +43,10 @@ declare const step: StepFunction;
42
43
  */
43
44
  declare function observe<T>(agent: T, options?: ObserveOptions): T;
44
45
 
45
- export { InspectRunOptions, ObserveOptions, StepOptions, inspectRun, observe, step };
46
+ /**
47
+ * Records an observed real-world outcome inside an active `inspectRun` context.
48
+ * Outside a run, logs a warning and returns without throwing.
49
+ */
50
+ declare function observeOutcome(name: string, options: ObserveOutcomeOptions): Promise<void>;
51
+
52
+ export { InspectRunOptions, ObserveOptions, ObserveOutcomeOptions, StepOptions, inspectRun, observe, observeOutcome, step };
@@ -1,12 +1,12 @@
1
- import { getCurrentContext, getCurrentDepth, getParentStepId, getTraceSafetyFromContext, runWithStepContext, printStepStart, printStepComplete, printError, printFailedAt, inspectRun } from './chunk-A4V2H3YU.mjs';
2
- export { createInspector, getCurrentCorrelationMetadata, inspectRun, maybeInspectRun } from './chunk-A4V2H3YU.mjs';
1
+ import { getCurrentContext, getCurrentDepth, getParentStepId, getTraceSafetyFromContext, runWithStepContext, printStepStart, printStepComplete, printError, printFailedAt, inspectRun } from './chunk-ZWA5RWMV.mjs';
2
+ export { createInspector, getCurrentCorrelationMetadata, inspectRun, maybeInspectRun } from './chunk-ZWA5RWMV.mjs';
3
+ import { normalizeObserveOutcomeInput, prepareOutcomeEventForDisk } from './chunk-VFO76UH3.mjs';
3
4
  import './chunk-BT7CATSD.mjs';
4
- import { prepareTraceEventForDisk, writeTraceEvent } from './chunk-4JVGFNQH.mjs';
5
- import './chunk-EDTQHZPM.mjs';
5
+ import { prepareTraceEventForDisk, writeTraceEvent } from './chunk-ULCGIRTC.mjs';
6
6
  import './chunk-VU6O5QAH.mjs';
7
7
  import './chunk-S4YWKV4G.mjs';
8
- import { warn, createStepId, formatError, truncateName } from './chunk-NQZPZ2FN.mjs';
9
- import './chunk-IZBJAZGF.mjs';
8
+ import { warn, createStepId, formatError, truncateName } from './chunk-WRE4CNPF.mjs';
9
+ import './chunk-P366CCL2.mjs';
10
10
  import './chunk-7TGZLWEE.mjs';
11
11
 
12
12
  // packages/core/src/step.ts
@@ -208,6 +208,50 @@ function observe(agent, options) {
208
208
  }
209
209
  }
210
210
 
211
- export { observe, step };
211
+ // packages/core/src/observe-outcome.ts
212
+ async function safeWrite(label, op) {
213
+ try {
214
+ await op();
215
+ } catch (error) {
216
+ warn(`observeOutcome: ${label}`, error);
217
+ }
218
+ }
219
+ async function observeOutcome(name, options) {
220
+ const context = getCurrentContext();
221
+ if (!context) {
222
+ warn("observeOutcome() called outside inspectRun(); skipping");
223
+ return;
224
+ }
225
+ let normalized;
226
+ try {
227
+ normalized = normalizeObserveOutcomeInput(name, options);
228
+ } catch (error) {
229
+ warn("observeOutcome() invalid arguments", error);
230
+ return;
231
+ }
232
+ const traceSafety = getTraceSafetyFromContext();
233
+ const parentId = getParentStepId();
234
+ const event = {
235
+ schemaVersion: "0.1",
236
+ event: "outcome_observed",
237
+ timestamp: normalized.observedAt,
238
+ runId: context.runId,
239
+ outcomeId: createStepId(),
240
+ ...parentId !== void 0 ? { parentId } : {},
241
+ name: normalized.name,
242
+ expectation: normalized.expectation,
243
+ status: normalized.status,
244
+ ...normalized.method !== void 0 ? { method: normalized.method } : {},
245
+ ...normalized.actual !== void 0 ? { actual: normalized.actual } : {},
246
+ ...normalized.evidence !== void 0 ? { evidence: normalized.evidence } : {},
247
+ observedAt: normalized.observedAt
248
+ };
249
+ const prepared = traceSafety !== void 0 ? prepareOutcomeEventForDisk(event, traceSafety) : event;
250
+ await safeWrite("writeTraceEvent", async () => {
251
+ await writeTraceEvent(prepared, context.traceDir);
252
+ });
253
+ }
254
+
255
+ export { observe, observeOutcome, step };
212
256
  //# sourceMappingURL=index.mjs.map
213
257
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/step.ts","../src/observe.ts"],"names":["endTime","durationMs"],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n getCurrentContext,\n getCurrentDepth,\n getParentStepId,\n getTraceSafetyFromContext,\n runWithStepContext,\n} from \"./context.js\";\nimport type { StepOptions, StepType, TraceEvent } from \"./types.js\";\nimport { writeTraceEvent } from \"./storage.js\";\nimport { printFailedAt, printError, printStepComplete, printStepStart } from \"./terminal.js\";\nimport { prepareTraceEventForDisk } from \"./trace-event-safety.js\";\nimport { createStepId, formatError, truncateName, warn } from \"./utils.js\";\n\nfunction normalizeStepName(name: unknown): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed-step\";\n }\n return truncateName(name.trim(), 100);\n}\n\nasync function safeInstrumentation(\n label: string,\n op: () => void | Promise<void>,\n): Promise<void> {\n try {\n await Promise.resolve(op());\n } catch (e) {\n warn(`step: ${label}`, e);\n }\n}\n\nasync function stepImpl<T>(\n name: string,\n fn: () => Promise<T> | T,\n options?: StepOptions,\n): Promise<T> {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"step requires `fn` to be a function\");\n }\n\n const stepName = normalizeStepName(name);\n const context = getCurrentContext();\n\n if (!context) {\n warn(\"step() called outside inspectRun(); executing without instrumentation\");\n return Promise.resolve(fn());\n }\n\n const stepId = createStepId();\n const renderDepth = getCurrentDepth();\n const parentId = getParentStepId();\n const stepType: StepType = options?.type ?? \"logic\";\n const metadata = options?.metadata;\n const traceSafety = getTraceSafetyFromContext();\n const startTime = Date.now();\n\n await safeInstrumentation(\"writeTraceEvent(step_started)\", async () => {\n const started: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"step_started\",\n timestamp: startTime,\n runId: context.runId,\n stepId,\n ...(typeof parentId === \"string\" && parentId.trim() !== \"\"\n ? { parentId }\n : {}),\n name: stepName,\n type: stepType,\n startTime,\n ...(metadata !== undefined ? { metadata } : {}),\n };\n const safe =\n traceSafety !== undefined\n ? prepareTraceEventForDisk(started, traceSafety)\n : started;\n await writeTraceEvent(safe, context.traceDir);\n });\n\n await safeInstrumentation(\"printStepStart\", () => {\n printStepStart(stepName, renderDepth);\n });\n\n let result: T;\n try {\n result = await runWithStepContext(stepId, async () => {\n return await Promise.resolve(fn());\n });\n } catch (userError) {\n const endTime = Date.now();\n const durationMs = endTime - startTime;\n const formatted = formatError(userError);\n\n await safeInstrumentation(\"writeTraceEvent(step_completed error)\", async () => {\n const completed: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp: endTime,\n runId: context.runId,\n stepId,\n status: \"error\",\n endTime,\n durationMs,\n error: formatted,\n };\n const safe =\n traceSafety !== undefined\n ? prepareTraceEventForDisk(completed, traceSafety)\n : completed;\n await writeTraceEvent(safe, context.traceDir);\n });\n\n await safeInstrumentation(\"printStepComplete(error)\", () => {\n printStepComplete(stepName, durationMs, \"error\", renderDepth);\n });\n await safeInstrumentation(\"printError\", () => {\n printError(formatted, renderDepth);\n });\n await safeInstrumentation(\"printFailedAt\", () => {\n printFailedAt(stepName);\n });\n\n throw userError;\n }\n\n const endTime = Date.now();\n const durationMs = endTime - startTime;\n\n await safeInstrumentation(\"writeTraceEvent(step_completed success)\", async () => {\n const completed: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp: endTime,\n runId: context.runId,\n stepId,\n status: \"success\",\n endTime,\n durationMs,\n };\n const safe =\n traceSafety !== undefined\n ? prepareTraceEventForDisk(completed, traceSafety)\n : completed;\n await writeTraceEvent(safe, context.traceDir);\n });\n\n await safeInstrumentation(\"printStepComplete(success)\", () => {\n printStepComplete(stepName, durationMs, \"success\", renderDepth);\n });\n\n return result;\n}\n\n/**\n * Stable v1.0 API for instrumenting a named step inside an AgentInspect run.\n *\n * Callable step tracer plus {@link step.llm} and {@link step.tool} shortcuts.\n */\nexport type StepFunction = {\n <T>(name: string, fn: () => Promise<T> | T, options?: StepOptions): Promise<T>;\n llm: <T>(model: string, fn: () => Promise<T> | T) => Promise<T>;\n tool: <T>(toolName: string, fn: () => Promise<T> | T) => Promise<T>;\n};\n\nasync function stepLlm<T>(model: string, fn: () => Promise<T> | T): Promise<T> {\n const modelName =\n typeof model === \"string\" && model.trim() !== \"\"\n ? model.trim()\n : \"unknown-model\";\n return stepImpl<T>(`llm:${modelName}`, fn, {\n type: \"llm\",\n metadata: { model: modelName },\n });\n}\n\nasync function stepTool<T>(\n toolName: string,\n fn: () => Promise<T> | T,\n): Promise<T> {\n const normalized =\n typeof toolName === \"string\" && toolName.trim() !== \"\"\n ? toolName.trim()\n : \"unknown-tool\";\n return stepImpl<T>(`tool:${normalized}`, fn, {\n type: \"tool\",\n metadata: { toolName: normalized },\n });\n}\n\n/**\n * Traces a named unit of work inside `inspectRun` (`step_started` / `step_completed`, optional terminal).\n * Outside a run, executes `fn` with a warn only. Preserves return values and rethrows user errors unchanged.\n *\n * - `step.llm(model, fn)` — `type: \"llm\"`, `metadata.model` (no SDK calls or token counting).\n * - `step.tool(toolName, fn)` — `type: \"tool\"`, `metadata.toolName` (no framework interception).\n */\nexport const step = Object.assign(stepImpl, {\n llm: stepLlm,\n tool: stepTool,\n}) as StepFunction;\n","import { inspectRun } from \"./inspect-run.js\";\nimport type { ObserveOptions } from \"./types.js\";\nimport { truncateName, warn } from \"./utils.js\";\n\nconst INSTRUMENTABLE_METHODS = [\"run\", \"execute\", \"invoke\"] as const;\n\nfunction isInstrumentableProp(\n prop: string | symbol,\n): prop is (typeof INSTRUMENTABLE_METHODS)[number] {\n if (typeof prop !== \"string\") return false;\n return (INSTRUMENTABLE_METHODS as readonly string[]).includes(prop);\n}\n\nfunction getAgentLabel(target: object): string {\n try {\n const ctor = Reflect.get(target, \"constructor\") as { name?: string } | undefined;\n const name = ctor?.name;\n if (typeof name === \"string\" && name.trim() !== \"\" && name !== \"Object\") {\n return name.trim();\n }\n } catch {\n /* ignore */\n }\n return \"Agent\";\n}\n\nfunction buildRunName(target: object, methodKey: string): string {\n const label = getAgentLabel(target);\n return truncateName(`${label}.${methodKey}`, 100);\n}\n\n/**\n * Stable v1.0 API for observing agent-like objects locally.\n *\n * Returns a Proxy that traces top-level `run`, `execute`, and `invoke` via {@link inspectRun}.\n * Other properties pass through; function members are bound to the real target so class private fields work.\n * Invalid agents are returned unchanged (with a warn); this function never throws.\n */\nexport function observe<T>(agent: T, options?: ObserveOptions): T {\n if (agent === null || agent === undefined) {\n warn(\"observe() requires an object\");\n return agent;\n }\n const agentType = typeof agent;\n if (agentType !== \"object\" && agentType !== \"function\") {\n warn(\"observe() requires an object\");\n return agent;\n }\n\n const target = agent as object;\n\n const handlers: ProxyHandler<object> = {\n get(proxyTarget, prop, receiver) {\n try {\n const value = Reflect.get(proxyTarget, prop, receiver);\n\n if (isInstrumentableProp(prop)) {\n if (typeof value !== \"function\") {\n return value;\n }\n const methodKey = prop;\n return function observedWrapper(...args: unknown[]) {\n let runName: string;\n try {\n runName = buildRunName(proxyTarget, methodKey);\n } catch (e) {\n warn(\"observe() method wrapping failed\", e);\n return value.apply(proxyTarget, args);\n }\n return inspectRun(runName, () => value.apply(proxyTarget, args), options);\n };\n }\n\n if (typeof value === \"function\" && prop !== \"constructor\") {\n return value.bind(proxyTarget);\n }\n return value;\n } catch (e) {\n warn(\"observe() method wrapping failed\", e);\n try {\n return Reflect.get(proxyTarget, prop, receiver);\n } catch {\n return undefined;\n }\n }\n },\n };\n\n try {\n return new Proxy(target, handlers) as T;\n } catch (e) {\n warn(\"observe() failed\", e);\n return agent;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/step.ts","../src/observe.ts","../src/observe-outcome.ts"],"names":["endTime","durationMs"],"mappings":"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","file":"index.mjs","sourcesContent":["import {\n getCurrentContext,\n getCurrentDepth,\n getParentStepId,\n getTraceSafetyFromContext,\n runWithStepContext,\n} from \"./context.js\";\nimport type { StepOptions, StepType, TraceEvent } from \"./types.js\";\nimport { writeTraceEvent } from \"./storage.js\";\nimport { printFailedAt, printError, printStepComplete, printStepStart } from \"./terminal.js\";\nimport { prepareTraceEventForDisk } from \"./trace-event-safety.js\";\nimport { createStepId, formatError, truncateName, warn } from \"./utils.js\";\n\nfunction normalizeStepName(name: unknown): string {\n if (typeof name !== \"string\" || name.trim() === \"\") {\n return \"unnamed-step\";\n }\n return truncateName(name.trim(), 100);\n}\n\nasync function safeInstrumentation(\n label: string,\n op: () => void | Promise<void>,\n): Promise<void> {\n try {\n await Promise.resolve(op());\n } catch (e) {\n warn(`step: ${label}`, e);\n }\n}\n\nasync function stepImpl<T>(\n name: string,\n fn: () => Promise<T> | T,\n options?: StepOptions,\n): Promise<T> {\n if (typeof fn !== \"function\") {\n throw new TypeError(\"step requires `fn` to be a function\");\n }\n\n const stepName = normalizeStepName(name);\n const context = getCurrentContext();\n\n if (!context) {\n warn(\"step() called outside inspectRun(); executing without instrumentation\");\n return Promise.resolve(fn());\n }\n\n const stepId = createStepId();\n const renderDepth = getCurrentDepth();\n const parentId = getParentStepId();\n const stepType: StepType = options?.type ?? \"logic\";\n const metadata = options?.metadata;\n const traceSafety = getTraceSafetyFromContext();\n const startTime = Date.now();\n\n await safeInstrumentation(\"writeTraceEvent(step_started)\", async () => {\n const started: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"step_started\",\n timestamp: startTime,\n runId: context.runId,\n stepId,\n ...(typeof parentId === \"string\" && parentId.trim() !== \"\"\n ? { parentId }\n : {}),\n name: stepName,\n type: stepType,\n startTime,\n ...(metadata !== undefined ? { metadata } : {}),\n };\n const safe =\n traceSafety !== undefined\n ? prepareTraceEventForDisk(started, traceSafety)\n : started;\n await writeTraceEvent(safe, context.traceDir);\n });\n\n await safeInstrumentation(\"printStepStart\", () => {\n printStepStart(stepName, renderDepth);\n });\n\n let result: T;\n try {\n result = await runWithStepContext(stepId, async () => {\n return await Promise.resolve(fn());\n });\n } catch (userError) {\n const endTime = Date.now();\n const durationMs = endTime - startTime;\n const formatted = formatError(userError);\n\n await safeInstrumentation(\"writeTraceEvent(step_completed error)\", async () => {\n const completed: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp: endTime,\n runId: context.runId,\n stepId,\n status: \"error\",\n endTime,\n durationMs,\n error: formatted,\n };\n const safe =\n traceSafety !== undefined\n ? prepareTraceEventForDisk(completed, traceSafety)\n : completed;\n await writeTraceEvent(safe, context.traceDir);\n });\n\n await safeInstrumentation(\"printStepComplete(error)\", () => {\n printStepComplete(stepName, durationMs, \"error\", renderDepth);\n });\n await safeInstrumentation(\"printError\", () => {\n printError(formatted, renderDepth);\n });\n await safeInstrumentation(\"printFailedAt\", () => {\n printFailedAt(stepName);\n });\n\n throw userError;\n }\n\n const endTime = Date.now();\n const durationMs = endTime - startTime;\n\n await safeInstrumentation(\"writeTraceEvent(step_completed success)\", async () => {\n const completed: TraceEvent = {\n schemaVersion: \"0.1\",\n event: \"step_completed\",\n timestamp: endTime,\n runId: context.runId,\n stepId,\n status: \"success\",\n endTime,\n durationMs,\n };\n const safe =\n traceSafety !== undefined\n ? prepareTraceEventForDisk(completed, traceSafety)\n : completed;\n await writeTraceEvent(safe, context.traceDir);\n });\n\n await safeInstrumentation(\"printStepComplete(success)\", () => {\n printStepComplete(stepName, durationMs, \"success\", renderDepth);\n });\n\n return result;\n}\n\n/**\n * Stable v1.0 API for instrumenting a named step inside an AgentInspect run.\n *\n * Callable step tracer plus {@link step.llm} and {@link step.tool} shortcuts.\n */\nexport type StepFunction = {\n <T>(name: string, fn: () => Promise<T> | T, options?: StepOptions): Promise<T>;\n llm: <T>(model: string, fn: () => Promise<T> | T) => Promise<T>;\n tool: <T>(toolName: string, fn: () => Promise<T> | T) => Promise<T>;\n};\n\nasync function stepLlm<T>(model: string, fn: () => Promise<T> | T): Promise<T> {\n const modelName =\n typeof model === \"string\" && model.trim() !== \"\"\n ? model.trim()\n : \"unknown-model\";\n return stepImpl<T>(`llm:${modelName}`, fn, {\n type: \"llm\",\n metadata: { model: modelName },\n });\n}\n\nasync function stepTool<T>(\n toolName: string,\n fn: () => Promise<T> | T,\n): Promise<T> {\n const normalized =\n typeof toolName === \"string\" && toolName.trim() !== \"\"\n ? toolName.trim()\n : \"unknown-tool\";\n return stepImpl<T>(`tool:${normalized}`, fn, {\n type: \"tool\",\n metadata: { toolName: normalized },\n });\n}\n\n/**\n * Traces a named unit of work inside `inspectRun` (`step_started` / `step_completed`, optional terminal).\n * Outside a run, executes `fn` with a warn only. Preserves return values and rethrows user errors unchanged.\n *\n * - `step.llm(model, fn)` — `type: \"llm\"`, `metadata.model` (no SDK calls or token counting).\n * - `step.tool(toolName, fn)` — `type: \"tool\"`, `metadata.toolName` (no framework interception).\n */\nexport const step = Object.assign(stepImpl, {\n llm: stepLlm,\n tool: stepTool,\n}) as StepFunction;\n","import { inspectRun } from \"./inspect-run.js\";\nimport type { ObserveOptions } from \"./types.js\";\nimport { truncateName, warn } from \"./utils.js\";\n\nconst INSTRUMENTABLE_METHODS = [\"run\", \"execute\", \"invoke\"] as const;\n\nfunction isInstrumentableProp(\n prop: string | symbol,\n): prop is (typeof INSTRUMENTABLE_METHODS)[number] {\n if (typeof prop !== \"string\") return false;\n return (INSTRUMENTABLE_METHODS as readonly string[]).includes(prop);\n}\n\nfunction getAgentLabel(target: object): string {\n try {\n const ctor = Reflect.get(target, \"constructor\") as { name?: string } | undefined;\n const name = ctor?.name;\n if (typeof name === \"string\" && name.trim() !== \"\" && name !== \"Object\") {\n return name.trim();\n }\n } catch {\n /* ignore */\n }\n return \"Agent\";\n}\n\nfunction buildRunName(target: object, methodKey: string): string {\n const label = getAgentLabel(target);\n return truncateName(`${label}.${methodKey}`, 100);\n}\n\n/**\n * Stable v1.0 API for observing agent-like objects locally.\n *\n * Returns a Proxy that traces top-level `run`, `execute`, and `invoke` via {@link inspectRun}.\n * Other properties pass through; function members are bound to the real target so class private fields work.\n * Invalid agents are returned unchanged (with a warn); this function never throws.\n */\nexport function observe<T>(agent: T, options?: ObserveOptions): T {\n if (agent === null || agent === undefined) {\n warn(\"observe() requires an object\");\n return agent;\n }\n const agentType = typeof agent;\n if (agentType !== \"object\" && agentType !== \"function\") {\n warn(\"observe() requires an object\");\n return agent;\n }\n\n const target = agent as object;\n\n const handlers: ProxyHandler<object> = {\n get(proxyTarget, prop, receiver) {\n try {\n const value = Reflect.get(proxyTarget, prop, receiver);\n\n if (isInstrumentableProp(prop)) {\n if (typeof value !== \"function\") {\n return value;\n }\n const methodKey = prop;\n return function observedWrapper(...args: unknown[]) {\n let runName: string;\n try {\n runName = buildRunName(proxyTarget, methodKey);\n } catch (e) {\n warn(\"observe() method wrapping failed\", e);\n return value.apply(proxyTarget, args);\n }\n return inspectRun(runName, () => value.apply(proxyTarget, args), options);\n };\n }\n\n if (typeof value === \"function\" && prop !== \"constructor\") {\n return value.bind(proxyTarget);\n }\n return value;\n } catch (e) {\n warn(\"observe() method wrapping failed\", e);\n try {\n return Reflect.get(proxyTarget, prop, receiver);\n } catch {\n return undefined;\n }\n }\n },\n };\n\n try {\n return new Proxy(target, handlers) as T;\n } catch (e) {\n warn(\"observe() failed\", e);\n return agent;\n }\n}\n","import {\n getCurrentContext,\n getParentStepId,\n getTraceSafetyFromContext,\n} from \"./context.js\";\nimport {\n normalizeObserveOutcomeInput,\n prepareOutcomeEventForDisk,\n type ObserveOutcomeOptions,\n} from \"./outcomes/index.js\";\nimport type { OutcomeObservedEvent } from \"./types.js\";\nimport { writeTraceEvent } from \"./storage.js\";\nimport { createStepId, warn } from \"./utils.js\";\n\nasync function safeWrite(label: string, op: () => Promise<void>): Promise<void> {\n try {\n await op();\n } catch (error) {\n warn(`observeOutcome: ${label}`, error);\n }\n}\n\n/**\n * Records an observed real-world outcome inside an active `inspectRun` context.\n * Outside a run, logs a warning and returns without throwing.\n */\nexport async function observeOutcome(\n name: string,\n options: ObserveOutcomeOptions,\n): Promise<void> {\n const context = getCurrentContext();\n if (!context) {\n warn(\"observeOutcome() called outside inspectRun(); skipping\");\n return;\n }\n\n let normalized;\n try {\n normalized = normalizeObserveOutcomeInput(name, options);\n } catch (error) {\n warn(\"observeOutcome() invalid arguments\", error);\n return;\n }\n\n const traceSafety = getTraceSafetyFromContext();\n const parentId = getParentStepId();\n const event: OutcomeObservedEvent = {\n schemaVersion: \"0.1\",\n event: \"outcome_observed\",\n timestamp: normalized.observedAt,\n runId: context.runId,\n outcomeId: createStepId(),\n ...(parentId !== undefined ? { parentId } : {}),\n name: normalized.name,\n expectation: normalized.expectation,\n status: normalized.status,\n ...(normalized.method !== undefined ? { method: normalized.method } : {}),\n ...(normalized.actual !== undefined ? { actual: normalized.actual } : {}),\n ...(normalized.evidence !== undefined ? { evidence: normalized.evidence } : {}),\n observedAt: normalized.observedAt,\n };\n\n const prepared =\n traceSafety !== undefined\n ? prepareOutcomeEventForDisk(event, traceSafety)\n : event;\n\n await safeWrite(\"writeTraceEvent\", async () => {\n await writeTraceEvent(prepared, context.traceDir);\n });\n}\n\nexport type { ObserveOutcomeOptions } from \"./outcomes/index.js\";\n"]}
@@ -1,5 +1,5 @@
1
1
  type AttributionConfidence = "explicit" | "correlated" | "heuristic" | "unknown";
2
- type InspectKind = "RUN" | "AGENT" | "LLM" | "TOOL" | "CHAIN" | "RETRIEVER" | "DECISION" | "RESULT" | "ERROR" | "LOGIC" | "LOG";
2
+ type InspectKind = "RUN" | "AGENT" | "LLM" | "TOOL" | "CHAIN" | "RETRIEVER" | "DECISION" | "RESULT" | "ERROR" | "LOGIC" | "LOG" | "OUTCOME";
3
3
  interface EventSource {
4
4
  type: "manual" | "json-log" | "log4js" | "pino" | "winston" | "adapter";
5
5
  file?: string;
@@ -1,5 +1,5 @@
1
1
  type AttributionConfidence = "explicit" | "correlated" | "heuristic" | "unknown";
2
- type InspectKind = "RUN" | "AGENT" | "LLM" | "TOOL" | "CHAIN" | "RETRIEVER" | "DECISION" | "RESULT" | "ERROR" | "LOGIC" | "LOG";
2
+ type InspectKind = "RUN" | "AGENT" | "LLM" | "TOOL" | "CHAIN" | "RETRIEVER" | "DECISION" | "RESULT" | "ERROR" | "LOGIC" | "LOG" | "OUTCOME";
3
3
  interface EventSource {
4
4
  type: "manual" | "json-log" | "log4js" | "pino" | "winston" | "adapter";
5
5
  file?: string;
@@ -1,4 +1,4 @@
1
- import { I as InspectKind } from './inspect-event-CYAV7Hxm.cjs';
1
+ import { I as InspectKind } from './inspect-event-IqwOHbGo.cjs';
2
2
 
3
3
  interface LogEventMapping {
4
4
  kind?: InspectKind;
@@ -1,4 +1,4 @@
1
- import { I as InspectKind } from './inspect-event-CYAV7Hxm.js';
1
+ import { I as InspectKind } from './inspect-event-IqwOHbGo.js';
2
2
 
3
3
  interface LogEventMapping {
4
4
  kind?: InspectKind;
@@ -1,6 +1,6 @@
1
- import { L as LogIngestConfig, a as LogEventMapping, R as RedactionRule } from './log-config-BNQ9UTmP.cjs';
2
- export { b as RedactionStrategy } from './log-config-BNQ9UTmP.cjs';
3
- import { a as InspectEvent, b as InspectRunTree } from './inspect-event-CYAV7Hxm.cjs';
1
+ import { L as LogIngestConfig, a as LogEventMapping, R as RedactionRule } from './log-config-CW8w5YQ9.cjs';
2
+ export { b as RedactionStrategy } from './log-config-CW8w5YQ9.cjs';
3
+ import { a as InspectEvent, b as InspectRunTree } from './inspect-event-IqwOHbGo.cjs';
4
4
 
5
5
  type ParserWarningCode = "MALFORMED_JSON" | "MISSING_RUN_ID" | "MISSING_EVENT" | "MISSING_TIMESTAMP" | "UNSUPPORTED_LOG4JS_PAYLOAD" | "CONFIG_ERROR" | "UNKNOWN";
6
6
  interface ParserWarning {
@@ -1,6 +1,6 @@
1
- import { L as LogIngestConfig, a as LogEventMapping, R as RedactionRule } from './log-config-D3Yp1SZN.js';
2
- export { b as RedactionStrategy } from './log-config-D3Yp1SZN.js';
3
- import { a as InspectEvent, b as InspectRunTree } from './inspect-event-CYAV7Hxm.js';
1
+ import { L as LogIngestConfig, a as LogEventMapping, R as RedactionRule } from './log-config-SRA4xTp8.js';
2
+ export { b as RedactionStrategy } from './log-config-SRA4xTp8.js';
3
+ import { a as InspectEvent, b as InspectRunTree } from './inspect-event-IqwOHbGo.js';
4
4
 
5
5
  type ParserWarningCode = "MALFORMED_JSON" | "MISSING_RUN_ID" | "MISSING_EVENT" | "MISSING_TIMESTAMP" | "UNSUPPORTED_LOG4JS_PAYLOAD" | "CONFIG_ERROR" | "UNKNOWN";
6
6
  interface ParserWarning {
@@ -1,4 +1,4 @@
1
- import { I as InspectKind, A as AttributionConfidence } from './inspect-event-CYAV7Hxm.js';
1
+ import { I as InspectKind, A as AttributionConfidence } from './inspect-event-IqwOHbGo.js';
2
2
 
3
3
  type PersistedSchemaVersion = "0.2" | "1.0";
4
4
  type PersistedEventSourceType = "manual" | "json-log" | "log4js" | "adapter" | "ai-sdk" | "otel";
@@ -1,4 +1,4 @@
1
- import { I as InspectKind, A as AttributionConfidence } from './inspect-event-CYAV7Hxm.cjs';
1
+ import { I as InspectKind, A as AttributionConfidence } from './inspect-event-IqwOHbGo.cjs';
2
2
 
3
3
  type PersistedSchemaVersion = "0.2" | "1.0";
4
4
  type PersistedEventSourceType = "manual" | "json-log" | "log4js" | "adapter" | "ai-sdk" | "otel";
@@ -12,7 +12,8 @@ var INSPECT_KINDS = [
12
12
  "RESULT",
13
13
  "ERROR",
14
14
  "LOGIC",
15
- "LOG"
15
+ "LOG",
16
+ "OUTCOME"
16
17
  ];
17
18
  var ATTRIBUTION_CONFIDENCES = [
18
19
  "explicit",
@@ -201,6 +202,8 @@ function nodeIdForEvent(event) {
201
202
  case "step_started":
202
203
  case "step_completed":
203
204
  return event.stepId;
205
+ case "outcome_observed":
206
+ return event.outcomeId;
204
207
  default:
205
208
  return "unknown";
206
209
  }
@@ -384,6 +387,39 @@ function traceEventToPersistedInspectEvent(event, options) {
384
387
  error
385
388
  };
386
389
  }
390
+ case "outcome_observed": {
391
+ const tsObserved = toIsoTimestamp(event.observedAt);
392
+ const attributes = compactAttributes({
393
+ legacyEvent: "outcome_observed",
394
+ outcomeId: event.outcomeId,
395
+ outcomeStatus: event.status,
396
+ expectation: event.expectation,
397
+ method: event.method,
398
+ actual: event.actual,
399
+ evidence: event.evidence,
400
+ observedAt: tsObserved.iso,
401
+ invalidTimestamp: tsMain.invalidTimestamp || tsObserved.invalidTimestamp ? true : void 0
402
+ });
403
+ const out = {
404
+ schemaVersion: "0.2",
405
+ eventId,
406
+ runId: event.runId,
407
+ kind: "OUTCOME",
408
+ name: event.name,
409
+ status: event.status === "failed" ? "error" : "ok",
410
+ timestamp: tsMain.iso,
411
+ confidence: "explicit",
412
+ source,
413
+ attributes
414
+ };
415
+ if (event.parentId !== void 0) {
416
+ out.parentId = event.parentId;
417
+ }
418
+ if (event.actual !== void 0) {
419
+ out.outputSummary = event.actual;
420
+ }
421
+ return out;
422
+ }
387
423
  default: {
388
424
  const _exhaustive = event;
389
425
  throw new Error(`Unsupported trace event: ${_exhaustive.event}`);
@@ -852,6 +888,32 @@ function fromLegacyStepCompleted(event) {
852
888
  if (error) out.error = error;
853
889
  return out;
854
890
  }
891
+ function fromLegacyOutcomeObserved(event) {
892
+ const attrs = event.attributes ?? {};
893
+ const observedAtRaw = attrs.observedAt;
894
+ const observedAt = typeof observedAtRaw === "string" ? Date.parse(observedAtRaw) : typeof observedAtRaw === "number" && Number.isFinite(observedAtRaw) ? observedAtRaw : resolveTimes(event).timestamp;
895
+ const status = attrs.outcomeStatus;
896
+ const out = {
897
+ schemaVersion: "0.1",
898
+ event: "outcome_observed",
899
+ timestamp: observedAt,
900
+ runId: event.runId,
901
+ outcomeId: typeof attrs.outcomeId === "string" ? attrs.outcomeId : event.eventId,
902
+ name: event.name,
903
+ expectation: typeof attrs.expectation === "string" ? attrs.expectation : event.name,
904
+ status: status === "passed" || status === "failed" || status === "unknown" || status === "skipped" ? status : "unknown",
905
+ observedAt
906
+ };
907
+ if (event.parentId !== void 0) out.parentId = event.parentId;
908
+ if (typeof attrs.method === "string") out.method = attrs.method;
909
+ if (attrs.actual !== void 0) out.actual = attrs.actual;
910
+ if (event.outputSummary !== void 0) out.actual = event.outputSummary;
911
+ if (attrs.evidence !== void 0) out.evidence = attrs.evidence;
912
+ return out;
913
+ }
914
+ function fromNativeOutcome(event) {
915
+ return [fromLegacyOutcomeObserved(event)];
916
+ }
855
917
  function fromNativeRun(event) {
856
918
  const { timestamp, startTime, endTime } = resolveTimes(event);
857
919
  const runStatus = mapPersistedStatusToRunStatus(event.status);
@@ -939,9 +1001,13 @@ function persistedInspectEventToTraceEvents(event) {
939
1001
  if (legacyEvent === "run_completed") return [fromLegacyRunCompleted(event)];
940
1002
  if (legacyEvent === "step_started") return [fromLegacyStepStarted(event)];
941
1003
  if (legacyEvent === "step_completed") return [fromLegacyStepCompleted(event)];
1004
+ if (legacyEvent === "outcome_observed") return [fromLegacyOutcomeObserved(event)];
942
1005
  if (event.kind === "RUN") {
943
1006
  return fromNativeRun(event);
944
1007
  }
1008
+ if (event.kind === "OUTCOME") {
1009
+ return fromNativeOutcome(event);
1010
+ }
945
1011
  return fromNativeStep(event);
946
1012
  }
947
1013
  function persistedInspectEventsToTraceEvents(events, options) {