@rasputin-ai/node 0.5.0-alpha.8 → 0.5.0-alpha.9

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.
@@ -4,8 +4,8 @@ export type TransformSourceOptions = {
4
4
  filePath: string;
5
5
  mapLocation?: SourceLocationMapper;
6
6
  /**
7
- * analysis keeps full value capture on every hook. selective omits argument/return
8
- * serialization for exact helpers whose callers can reconstruct those values. Default: analysis.
7
+ * analysis (default): full call capture plus derivation.
8
+ * selective (experimental): omit argument/return serialization for exact helpers.
9
9
  */
10
10
  derivationMode?: DerivationCaptureMode;
11
11
  };
@@ -1 +1 @@
1
- {"version":3,"file":"analyze-function.d.ts","sourceRoot":"","sources":["../../src/derivation/analyze-function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EAGb,cAAc,EAGd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAEN,KAAK,gBAAgB,EAErB,MAAM,0BAA0B,CAAC;AAIlC,MAAM,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,KAAK,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,eAAe,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;CAC1B,CAAC;AAojBF,MAAM,MAAM,oBAAoB,GAAG;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,EAAE,CAAC,uBAAuB,GAAG;QAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAA;KAAE,CAAC;CAC5D,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAClC,YAAY,EAAE,CAAC,UAAU,EACzB,SAAS,oBAAoB,EAAE,KAC7B,gBAAgB,EAmClB,CAAC"}
1
+ {"version":3,"file":"analyze-function.d.ts","sourceRoot":"","sources":["../../src/derivation/analyze-function.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,aAAa,EAGb,cAAc,EAGd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAEN,KAAK,gBAAgB,EAErB,MAAM,0BAA0B,CAAC;AAGlC,MAAM,MAAM,WAAW,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,KAAK,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAE7D,MAAM,MAAM,SAAS,GAAG;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,eAAe,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;CAC1B,CAAC;AAojBF,MAAM,MAAM,oBAAoB,GAAG;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,EAAE,CAAC,uBAAuB,GAAG;QAAE,IAAI,EAAE,EAAE,CAAC,WAAW,CAAA;KAAE,CAAC;CAC5D,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAClC,YAAY,EAAE,CAAC,UAAU,EACzB,SAAS,oBAAoB,EAAE,KAC7B,gBAAgB,EA2ClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"execution-recorder.d.ts","sourceRoot":"","sources":["../../src/execution-recorder/execution-recorder.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAGX,wBAAwB,EAExB,iBAAiB,EACjB,MAAM,4BAA4B,CAAC;AAiRpC,wEAAwE;AACxE,eAAO,MAAM,uBAAuB,GACnC,SAAS,wBAAwB,GAAG,SAAS,KAC3C,iBA0wBF,CAAC"}
1
+ {"version":3,"file":"execution-recorder.d.ts","sourceRoot":"","sources":["../../src/execution-recorder/execution-recorder.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAGX,wBAAwB,EAExB,iBAAiB,EACjB,MAAM,4BAA4B,CAAC;AAiRpC,wEAAwE;AACxE,eAAO,MAAM,uBAAuB,GACnC,SAAS,wBAAwB,GAAG,SAAS,KAC3C,iBA4yBF,CAAC"}
package/dist/index.js CHANGED
@@ -391,6 +391,7 @@ import {
391
391
  capturedValueCompleteness,
392
392
  hashInstrumentationManifest,
393
393
  rasputinOmitted,
394
+ rasputinTagKind,
394
395
  runtimeFunctionId as runtimeFunctionId2
395
396
  } from "@rasputin-ai/core";
396
397
 
@@ -1704,21 +1705,44 @@ var createExecutionRecorder = (options) => {
1704
1705
  derivationRootBytes: recording.derivationRootBytes
1705
1706
  };
1706
1707
  };
1707
- const resolveCaptureMode = (recording) => {
1708
- if (recording.derivationRoots.length > 0) return "derivation";
1709
- const plans = snapshotInstrumentationManifest()?.derivationPlans ?? [];
1710
- if (recording.sawAutomatic && plans.some(
1711
- (plan) => !plan.fallbackReason && recording.executedFunctionIds.has(plan.functionId)
1712
- )) {
1713
- return "derivation";
1708
+ const eventsHaveOmittedValues = (events) => {
1709
+ for (const event of events) {
1710
+ if (event.type === "function_enter" && event.args.some((arg) => rasputinTagKind(arg) === "omitted")) {
1711
+ return true;
1712
+ }
1713
+ if (event.type === "function_exit" && rasputinTagKind(event.returnValue) === "omitted") {
1714
+ return true;
1715
+ }
1714
1716
  }
1715
- if (recording.sawAutomatic) return "automatic-full";
1716
- if (recording.sawManual) return "manual";
1717
- return "scope-only";
1717
+ return false;
1718
+ };
1719
+ const resolveCaptureProfile = (recording, events, truncated, capture, derivation) => {
1720
+ const source = recording.sawAutomatic ? "automatic" : recording.sawManual ? "manual" : "scope-only";
1721
+ if (source === "scope-only") {
1722
+ return {
1723
+ source,
1724
+ functionBoundaries: "none",
1725
+ functionValues: "none",
1726
+ timings: "none",
1727
+ derivation: derivation ? "available" : "none"
1728
+ };
1729
+ }
1730
+ const droppedEvents = Boolean(truncated?.eventsDropped || capture?.eventsDropped);
1731
+ return {
1732
+ source,
1733
+ functionBoundaries: droppedEvents ? "partial" : "full",
1734
+ functionValues: eventsHaveOmittedValues(events) ? "selective" : "full",
1735
+ timings: droppedEvents ? "partial" : "full",
1736
+ derivation: derivation ? "available" : "none"
1737
+ };
1718
1738
  };
1719
1739
  const derivationCapture = (recording) => {
1720
1740
  const manifest = snapshotInstrumentationManifest();
1721
1741
  if (!manifest) return void 0;
1742
+ const plans = manifest.derivationPlans ?? [];
1743
+ if (!plans.some((plan) => recording.executedFunctionIds.has(plan.functionId))) {
1744
+ return void 0;
1745
+ }
1722
1746
  return {
1723
1747
  manifestHash: hashInstrumentationManifest(manifest),
1724
1748
  roots: recording.derivationRoots.slice(),
@@ -1759,8 +1783,8 @@ var createExecutionRecorder = (options) => {
1759
1783
  }
1760
1784
  }
1761
1785
  const state = {
1762
- version: 3,
1763
- captureMode: resolveCaptureMode(recording),
1786
+ version: 4,
1787
+ captureProfile: resolveCaptureProfile(recording, events, truncated, capture, derivation),
1764
1788
  executionId: recording.executionId,
1765
1789
  startedAt: recording.startedAt,
1766
1790
  durationMs: elapsedMs2(recording.startedAtNs, endedAtNs),
@@ -2385,7 +2409,7 @@ import {
2385
2409
 
2386
2410
  // src/sdk-meta.ts
2387
2411
  var SDK_NAME = "@rasputin-ai/node";
2388
- var SDK_VERSION = "0.5.0-alpha.8";
2412
+ var SDK_VERSION = "0.5.0-alpha.9";
2389
2413
 
2390
2414
  // src/rasputin-init.ts
2391
2415
  var withExecution = (client, execution, installRuntime, manifest) => {
@@ -377,9 +377,6 @@ var emptyPlan = (functionId) => ({
377
377
  controlFacts: []
378
378
  });
379
379
 
380
- // src/derivation/derivation-proof.ts
381
- var functionIsExact = (plan) => plan.fallbackReason === void 0 && plan.captureBoundaries.length === 0 && plan.controlFacts.length === 0;
382
-
383
380
  // src/derivation/analyze-function.ts
384
381
  var loc = (node, sourceFile) => {
385
382
  const position = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));
@@ -589,7 +586,7 @@ var analyzeExpression = (ctx, node) => {
589
586
  if (!ts.isIdentifier(node.expression)) return capture(ctx, node, "dynamic_callee");
590
587
  const calleeName = node.expression.text;
591
588
  if (lookup(ctx, calleeName)) return capture(ctx, node, "opaque_call");
592
- const provenId = ctx.provenExact.get(calleeName);
589
+ const provenId = ctx.moduleCallees.get(calleeName);
593
590
  ctx.callEdges.push({
594
591
  callerFunctionId: ctx.functionId,
595
592
  calleeName,
@@ -779,7 +776,7 @@ var bindParams = (ctx, node) => {
779
776
  index++;
780
777
  }
781
778
  };
782
- var analyzeOne = (node, functionId, name, sourceFile, provenExact) => {
779
+ var analyzeOne = (node, functionId, name, sourceFile, moduleCallees) => {
783
780
  const ctx = {
784
781
  sourceFile,
785
782
  functionId,
@@ -795,7 +792,7 @@ var analyzeOne = (node, functionId, name, sourceFile, provenExact) => {
795
792
  nextAssignmentId: { value: 0 },
796
793
  hasThrow: false,
797
794
  hasCoercionGuard: false,
798
- provenExact,
795
+ moduleCallees,
799
796
  identifierParams: []
800
797
  };
801
798
  if (node.asteriskToken || node.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword)) {
@@ -852,14 +849,20 @@ var analyzeModuleFunctions = (sourceFile, targets) => {
852
849
  graph
853
850
  );
854
851
  const byId = new Map(targets.map((target) => [target.functionId, target]));
855
- const provenExact = /* @__PURE__ */ new Map();
852
+ const moduleCallees = /* @__PURE__ */ new Map();
856
853
  const analyzed = [];
857
854
  for (const functionId of order) {
858
855
  const target = byId.get(functionId);
859
856
  if (!target) continue;
860
- const result2 = analyzeOne(target.node, target.functionId, target.name, sourceFile, provenExact);
861
- if (functionIsExact(result2.plan) && nameCounts.get(result2.name) === 1) {
862
- provenExact.set(result2.name, result2.functionId);
857
+ const result2 = analyzeOne(
858
+ target.node,
859
+ target.functionId,
860
+ target.name,
861
+ sourceFile,
862
+ moduleCallees
863
+ );
864
+ if (nameCounts.get(result2.name) === 1) {
865
+ moduleCallees.set(result2.name, result2.functionId);
863
866
  }
864
867
  analyzed.push(result2);
865
868
  }
@@ -867,11 +870,16 @@ var analyzeModuleFunctions = (sourceFile, targets) => {
867
870
  (target) => !analyzed.some((fn) => fn.functionId === target.functionId)
868
871
  );
869
872
  for (const target of remaining) {
870
- analyzed.push(analyzeOne(target.node, target.functionId, target.name, sourceFile, provenExact));
873
+ analyzed.push(
874
+ analyzeOne(target.node, target.functionId, target.name, sourceFile, moduleCallees)
875
+ );
871
876
  }
872
877
  return analyzed;
873
878
  };
874
879
 
880
+ // src/derivation/derivation-proof.ts
881
+ var functionIsExact = (plan) => plan.fallbackReason === void 0 && plan.captureBoundaries.length === 0 && plan.controlFacts.length === 0;
882
+
875
883
  // src/derivation/emit-capture-plan.ts
876
884
  var captureWrapEdits = (wraps, capName) => {
877
885
  const edits = [];
@@ -211,9 +211,6 @@ var emptyPlan = (functionId) => ({
211
211
  controlFacts: []
212
212
  });
213
213
 
214
- // src/derivation/derivation-proof.ts
215
- var functionIsExact = (plan) => plan.fallbackReason === void 0 && plan.captureBoundaries.length === 0 && plan.controlFacts.length === 0;
216
-
217
214
  // src/derivation/analyze-function.ts
218
215
  var loc = (node, sourceFile) => {
219
216
  const position = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));
@@ -423,7 +420,7 @@ var analyzeExpression = (ctx, node) => {
423
420
  if (!ts.isIdentifier(node.expression)) return capture(ctx, node, "dynamic_callee");
424
421
  const calleeName = node.expression.text;
425
422
  if (lookup(ctx, calleeName)) return capture(ctx, node, "opaque_call");
426
- const provenId = ctx.provenExact.get(calleeName);
423
+ const provenId = ctx.moduleCallees.get(calleeName);
427
424
  ctx.callEdges.push({
428
425
  callerFunctionId: ctx.functionId,
429
426
  calleeName,
@@ -613,7 +610,7 @@ var bindParams = (ctx, node) => {
613
610
  index++;
614
611
  }
615
612
  };
616
- var analyzeOne = (node, functionId, name, sourceFile, provenExact) => {
613
+ var analyzeOne = (node, functionId, name, sourceFile, moduleCallees) => {
617
614
  const ctx = {
618
615
  sourceFile,
619
616
  functionId,
@@ -629,7 +626,7 @@ var analyzeOne = (node, functionId, name, sourceFile, provenExact) => {
629
626
  nextAssignmentId: { value: 0 },
630
627
  hasThrow: false,
631
628
  hasCoercionGuard: false,
632
- provenExact,
629
+ moduleCallees,
633
630
  identifierParams: []
634
631
  };
635
632
  if (node.asteriskToken || node.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword)) {
@@ -686,14 +683,20 @@ var analyzeModuleFunctions = (sourceFile, targets) => {
686
683
  graph
687
684
  );
688
685
  const byId = new Map(targets.map((target) => [target.functionId, target]));
689
- const provenExact = /* @__PURE__ */ new Map();
686
+ const moduleCallees = /* @__PURE__ */ new Map();
690
687
  const analyzed = [];
691
688
  for (const functionId of order) {
692
689
  const target = byId.get(functionId);
693
690
  if (!target) continue;
694
- const result = analyzeOne(target.node, target.functionId, target.name, sourceFile, provenExact);
695
- if (functionIsExact(result.plan) && nameCounts.get(result.name) === 1) {
696
- provenExact.set(result.name, result.functionId);
691
+ const result = analyzeOne(
692
+ target.node,
693
+ target.functionId,
694
+ target.name,
695
+ sourceFile,
696
+ moduleCallees
697
+ );
698
+ if (nameCounts.get(result.name) === 1) {
699
+ moduleCallees.set(result.name, result.functionId);
697
700
  }
698
701
  analyzed.push(result);
699
702
  }
@@ -701,11 +704,16 @@ var analyzeModuleFunctions = (sourceFile, targets) => {
701
704
  (target) => !analyzed.some((fn) => fn.functionId === target.functionId)
702
705
  );
703
706
  for (const target of remaining) {
704
- analyzed.push(analyzeOne(target.node, target.functionId, target.name, sourceFile, provenExact));
707
+ analyzed.push(
708
+ analyzeOne(target.node, target.functionId, target.name, sourceFile, moduleCallees)
709
+ );
705
710
  }
706
711
  return analyzed;
707
712
  };
708
713
 
714
+ // src/derivation/derivation-proof.ts
715
+ var functionIsExact = (plan) => plan.fallbackReason === void 0 && plan.captureBoundaries.length === 0 && plan.controlFacts.length === 0;
716
+
709
717
  // src/derivation/emit-capture-plan.ts
710
718
  var captureWrapEdits = (wraps, capName) => {
711
719
  const edits = [];
@@ -266,9 +266,6 @@ var emptyPlan = (functionId) => ({
266
266
  controlFacts: []
267
267
  });
268
268
 
269
- // src/derivation/derivation-proof.ts
270
- var functionIsExact = (plan) => plan.fallbackReason === void 0 && plan.captureBoundaries.length === 0 && plan.controlFacts.length === 0;
271
-
272
269
  // src/derivation/analyze-function.ts
273
270
  var loc = (node, sourceFile) => {
274
271
  const position = sourceFile.getLineAndCharacterOfPosition(node.getStart(sourceFile));
@@ -478,7 +475,7 @@ var analyzeExpression = (ctx, node) => {
478
475
  if (!ts.isIdentifier(node.expression)) return capture(ctx, node, "dynamic_callee");
479
476
  const calleeName = node.expression.text;
480
477
  if (lookup(ctx, calleeName)) return capture(ctx, node, "opaque_call");
481
- const provenId = ctx.provenExact.get(calleeName);
478
+ const provenId = ctx.moduleCallees.get(calleeName);
482
479
  ctx.callEdges.push({
483
480
  callerFunctionId: ctx.functionId,
484
481
  calleeName,
@@ -668,7 +665,7 @@ var bindParams = (ctx, node) => {
668
665
  index++;
669
666
  }
670
667
  };
671
- var analyzeOne = (node, functionId, name, sourceFile, provenExact) => {
668
+ var analyzeOne = (node, functionId, name, sourceFile, moduleCallees) => {
672
669
  const ctx = {
673
670
  sourceFile,
674
671
  functionId,
@@ -684,7 +681,7 @@ var analyzeOne = (node, functionId, name, sourceFile, provenExact) => {
684
681
  nextAssignmentId: { value: 0 },
685
682
  hasThrow: false,
686
683
  hasCoercionGuard: false,
687
- provenExact,
684
+ moduleCallees,
688
685
  identifierParams: []
689
686
  };
690
687
  if (node.asteriskToken || node.modifiers?.some((modifier) => modifier.kind === ts.SyntaxKind.AsyncKeyword)) {
@@ -741,14 +738,20 @@ var analyzeModuleFunctions = (sourceFile, targets) => {
741
738
  graph
742
739
  );
743
740
  const byId = new Map(targets.map((target) => [target.functionId, target]));
744
- const provenExact = /* @__PURE__ */ new Map();
741
+ const moduleCallees = /* @__PURE__ */ new Map();
745
742
  const analyzed = [];
746
743
  for (const functionId of order) {
747
744
  const target = byId.get(functionId);
748
745
  if (!target) continue;
749
- const result = analyzeOne(target.node, target.functionId, target.name, sourceFile, provenExact);
750
- if (functionIsExact(result.plan) && nameCounts.get(result.name) === 1) {
751
- provenExact.set(result.name, result.functionId);
746
+ const result = analyzeOne(
747
+ target.node,
748
+ target.functionId,
749
+ target.name,
750
+ sourceFile,
751
+ moduleCallees
752
+ );
753
+ if (nameCounts.get(result.name) === 1) {
754
+ moduleCallees.set(result.name, result.functionId);
752
755
  }
753
756
  analyzed.push(result);
754
757
  }
@@ -756,11 +759,16 @@ var analyzeModuleFunctions = (sourceFile, targets) => {
756
759
  (target) => !analyzed.some((fn) => fn.functionId === target.functionId)
757
760
  );
758
761
  for (const target of remaining) {
759
- analyzed.push(analyzeOne(target.node, target.functionId, target.name, sourceFile, provenExact));
762
+ analyzed.push(
763
+ analyzeOne(target.node, target.functionId, target.name, sourceFile, moduleCallees)
764
+ );
760
765
  }
761
766
  return analyzed;
762
767
  };
763
768
 
769
+ // src/derivation/derivation-proof.ts
770
+ var functionIsExact = (plan) => plan.fallbackReason === void 0 && plan.captureBoundaries.length === 0 && plan.controlFacts.length === 0;
771
+
764
772
  // src/derivation/emit-capture-plan.ts
765
773
  var captureWrapEdits = (wraps, capName) => {
766
774
  const edits = [];
@@ -1,4 +1,4 @@
1
1
  /** Generated by scripts/generate-sdk-meta.ts — do not edit. */
2
2
  export declare const SDK_NAME = "@rasputin-ai/node";
3
- export declare const SDK_VERSION = "0.5.0-alpha.8";
3
+ export declare const SDK_VERSION = "0.5.0-alpha.9";
4
4
  //# sourceMappingURL=sdk-meta.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rasputin-ai/node",
3
- "version": "0.5.0-alpha.8",
3
+ "version": "0.5.0-alpha.9",
4
4
  "description": "Official Rasputin AI SDK for Node and Bun.",
5
5
  "type": "module",
6
6
  "exports": {
@@ -44,7 +44,7 @@
44
44
  },
45
45
  "dependencies": {
46
46
  "@jridgewell/trace-mapping": "0.3.31",
47
- "@rasputin-ai/core": "0.5.0-alpha.8",
47
+ "@rasputin-ai/core": "0.5.0-alpha.9",
48
48
  "typescript": "5"
49
49
  },
50
50
  "devDependencies": {