@rasputin-ai/node 0.5.0-alpha.11 → 0.5.0-alpha.13

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 (28) hide show
  1. package/README.md +5 -3
  2. package/dist/auto-instrumentation/instrumentation-manifest-delta.d.ts +4 -0
  3. package/dist/auto-instrumentation/instrumentation-manifest-delta.d.ts.map +1 -1
  4. package/dist/derivation/analyze-function.d.ts +5 -0
  5. package/dist/derivation/analyze-function.d.ts.map +1 -1
  6. package/dist/derivation/build-dependency-graph.d.ts +5 -0
  7. package/dist/derivation/build-dependency-graph.d.ts.map +1 -1
  8. package/dist/derivation/derivation-ir.d.ts +5 -0
  9. package/dist/derivation/derivation-ir.d.ts.map +1 -1
  10. package/dist/derivation/emit-capture-plan.d.ts +7 -1
  11. package/dist/derivation/emit-capture-plan.d.ts.map +1 -1
  12. package/dist/derivation/plan-is-exact.d.ts +7 -0
  13. package/dist/derivation/plan-is-exact.d.ts.map +1 -0
  14. package/dist/execution-recorder/automatic-runtime.d.ts.map +1 -1
  15. package/dist/execution-recorder/execution-recorder-types.d.ts +4 -0
  16. package/dist/execution-recorder/execution-recorder-types.d.ts.map +1 -1
  17. package/dist/execution-recorder/execution-recorder.d.ts.map +1 -1
  18. package/dist/execution-recorder/runtime-state-size-budget.d.ts +14 -0
  19. package/dist/execution-recorder/runtime-state-size-budget.d.ts.map +1 -0
  20. package/dist/execution-recorder/safe-serialize.d.ts.map +1 -1
  21. package/dist/index.js +246 -7
  22. package/dist/instrument/build.js +3 -3
  23. package/dist/instrument/bun.js +3 -3
  24. package/dist/instrument/node.js +3 -3
  25. package/dist/sdk-meta.d.ts +1 -1
  26. package/package.json +2 -2
  27. package/dist/derivation/derivation-proof.d.ts +0 -14
  28. package/dist/derivation/derivation-proof.d.ts.map +0 -1
package/README.md CHANGED
@@ -149,9 +149,11 @@ Defaults work for most apps. Customize to exclude noisy sources, redact fields,
149
149
  | `maxDepth` | `3` | Maximum captured value depth |
150
150
  | `maxObjectKeys` | `30` | Maximum properties retained from one object |
151
151
  | `maxArrayElements` | `20` | Maximum items retained from one array, map, or set |
152
- | `maxStringLength` | `500` | Maximum characters retained from one string |
153
- | `maxSerializedValueBytes` | `8 KiB` | Maximum retained size of one captured value |
154
- | `redactKeys` | `[]` | Additional case-insensitive property names to redact |
152
+ | `maxStringLength` | `500` | Maximum characters retained from one string |
153
+ | `maxSerializedValueBytes` | `8 KiB` | Maximum retained size of one captured value |
154
+ | `runtimeStateTargetBytes` | `256 KiB` | Best-effort complete uncompressed runtime-state target; derivation-only roots are shed first |
155
+ | `maxRuntimeStateBytes` | `512 KiB` | Hard ceiling for the complete uncompressed runtime state; values become explicitly unavailable before call boundaries are dropped |
156
+ | `redactKeys` | `[]` | Additional case-insensitive property names to redact |
155
157
  | `excludeSources` | `[]` | Source globs or function-name patterns to exclude |
156
158
 
157
159
  ```ts
@@ -1,3 +1,7 @@
1
+ /**
2
+ * One transformed file's contribution to the release manifest: functions, call sites, destructures,
3
+ * and derivation plans. The registry concatenates these deltas before upload.
4
+ */
1
5
  import type { DerivationPlan, InstrumentationArgIdentifier, InstrumentationParamBinding } from '@rasputin-ai/core';
2
6
  import type { EncodedFunctionPlan } from '../execution-recorder/function-plan';
3
7
  export type RawManifestCallSite = {
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation-manifest-delta.d.ts","sourceRoot":"","sources":["../../src/auto-instrumentation/instrumentation-manifest-delta.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,cAAc,EACd,4BAA4B,EAC5B,2BAA2B,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,MAAM,MAAM,mBAAmB,GAAG;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,4BAA4B,EAAE,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,2BAA2B,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACtC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IAC1C,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACvC,eAAe,EAAE,cAAc,EAAE,CAAC;CAClC,CAAC"}
1
+ {"version":3,"file":"instrumentation-manifest-delta.d.ts","sourceRoot":"","sources":["../../src/auto-instrumentation/instrumentation-manifest-delta.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EACX,cAAc,EACd,4BAA4B,EAC5B,2BAA2B,EAC3B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAE/E,MAAM,MAAM,mBAAmB,GAAG;IACjC,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,4BAA4B,EAAE,CAAC;CAC/C,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,2BAA2B,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,IAAI,EAAE,mBAAmB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,2BAA2B,EAAE,CAAC;IACtC,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IAC1C,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,YAAY,EAAE,sBAAsB,EAAE,CAAC;IACvC,eAAe,EAAE,cAAc,EAAE,CAAC;CAClC,CAAC"}
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Walks a module's functions and decides what can be reconstructed later versus what must be
3
+ * captured at runtime. The result is a derivation plan plus wrap sites the transformer injects, so
4
+ * investigation can recover locals without recording every assignment in production.
5
+ */
1
6
  import type { CaptureReason, DerivationPlan } from '@rasputin-ai/core';
2
7
  import ts from 'typescript';
3
8
  import { type FunctionCallEdge } from './build-dependency-graph';
@@ -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;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
+ {"version":3,"file":"analyze-function.d.ts","sourceRoot":"","sources":["../../src/derivation/analyze-function.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,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,3 +1,8 @@
1
+ /**
2
+ * Same-module calls can be inlined into a caller's derivation plan only after callees are proven
3
+ * first. This graph and topological order let analysis reuse exact helper proofs instead of treating
4
+ * every local call as opaque.
5
+ */
1
6
  export type FunctionCallEdge = {
2
7
  callerFunctionId: string;
3
8
  calleeName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"build-dependency-graph.d.ts","sourceRoot":"","sources":["../../src/derivation/build-dependency-graph.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACrC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACvC,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,oBAAoB,GAChC,WAAW,KAAK,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EACtD,OAAO,gBAAgB,EAAE,KACvB,uBAcF,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,wBAAwB,GACpC,WAAW,KAAK,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EACtD,OAAO,uBAAuB,KAC5B,MAAM,EA8CR,CAAC"}
1
+ {"version":3,"file":"build-dependency-graph.d.ts","sourceRoot":"","sources":["../../src/derivation/build-dependency-graph.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC9B,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACrC,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACvC,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,oBAAoB,GAChC,WAAW,KAAK,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EACtD,OAAO,gBAAgB,EAAE,KACvB,uBAcF,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,wBAAwB,GACpC,WAAW,KAAK,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EACtD,OAAO,uBAAuB,KAC5B,MAAM,EA8CR,CAAC"}
@@ -1,3 +1,8 @@
1
+ /**
2
+ * Derivation plans are a numbered expression graph, not the TypeScript AST. This builder assigns
3
+ * stable ids as a function is analyzed so capture wraps and later investigation refer to the same
4
+ * nodes. emptyPlan is the shell the analyzer fills with expressions, variables, and boundaries.
5
+ */
1
6
  import type { DerivationBinaryOp, DerivationExpression, DerivationPlan, DerivationUnaryOp, PrimitiveConst } from '@rasputin-ai/core';
2
7
  export declare class DerivationIrBuilder {
3
8
  readonly expressions: DerivationExpression[];
@@ -1 +1 @@
1
- {"version":3,"file":"derivation-ir.d.ts","sourceRoot":"","sources":["../../src/derivation/derivation-ir.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,mBAAmB;IAC/B,QAAQ,CAAC,WAAW,EAAE,oBAAoB,EAAE,CAAM;IAClD,OAAO,CAAC,MAAM,CAAK;IAEnB,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM;IAIzC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI5B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI5B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI3B,MAAM,CACL,EAAE,EAAE,kBAAkB,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,MAAM,GACrC,MAAM;IAIT,KAAK,CAAC,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAIrD,OAAO,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAI1E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAIjE,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,MAAM;IAIjE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,MAAM;IAIzD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAIzC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAI3C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;IAI1D,QAAQ,CACP,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,GACnF,MAAM;IAIT,OAAO,CAAC,GAAG;CAIX;AAED,eAAO,MAAM,SAAS,GAAI,YAAY,MAAM,KAAG,cAO7C,CAAC"}
1
+ {"version":3,"file":"derivation-ir.d.ts","sourceRoot":"","sources":["../../src/derivation/derivation-ir.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EACX,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,MAAM,mBAAmB,CAAC;AAE3B,qBAAa,mBAAmB;IAC/B,QAAQ,CAAC,WAAW,EAAE,oBAAoB,EAAE,CAAM;IAClD,OAAO,CAAC,MAAM,CAAK;IAEnB,UAAU,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM;IAIzC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAI5B,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAI5B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI3B,MAAM,CACL,EAAE,EAAE,kBAAkB,EACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,MAAM,GACrC,MAAM;IAIT,KAAK,CAAC,EAAE,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAIrD,OAAO,CAAC,EAAE,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAI1E,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM;IAIjE,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,MAAM;IAIjE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,MAAM;IAIzD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAIzC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAI3C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;IAI1D,QAAQ,CACP,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,GACnF,MAAM;IAIT,OAAO,CAAC,GAAG;CAIX;AAED,eAAO,MAAM,SAAS,GAAI,YAAY,MAAM,KAAG,cAO7C,CAAC"}
@@ -1,8 +1,14 @@
1
+ /**
2
+ * Turns capture boundaries from analysis into source edits. The transformer wraps those expressions
3
+ * with a runtime capture call so the recorder stores a root instead of trying to reconstruct an
4
+ * opaque or unknown value.
5
+ */
1
6
  import type { CaptureWrap } from './analyze-function';
2
- export type SourceEdit = {
7
+ type SourceEdit = {
3
8
  position: number;
4
9
  text: string;
5
10
  order: number;
6
11
  };
7
12
  export declare const captureWrapEdits: (wraps: CaptureWrap[], capName: string) => SourceEdit[];
13
+ export {};
8
14
  //# sourceMappingURL=emit-capture-plan.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"emit-capture-plan.d.ts","sourceRoot":"","sources":["../../src/derivation/emit-capture-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,MAAM,MAAM,UAAU,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,eAAO,MAAM,gBAAgB,GAAI,OAAO,WAAW,EAAE,EAAE,SAAS,MAAM,KAAG,UAAU,EAgBlF,CAAC"}
1
+ {"version":3,"file":"emit-capture-plan.d.ts","sourceRoot":"","sources":["../../src/derivation/emit-capture-plan.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,KAAK,UAAU,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpE,eAAO,MAAM,gBAAgB,GAAI,OAAO,WAAW,EAAE,EAAE,SAAS,MAAM,KAAG,UAAU,EAgBlF,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * A function is exact when nothing in its body needs a runtime root or control fact. Selective
3
+ * capture uses this to omit helper argument and return snapshots when the parent can reconstruct them.
4
+ */
5
+ import type { DerivationPlan } from '@rasputin-ai/core';
6
+ export declare const functionIsExact: (plan: DerivationPlan) => boolean;
7
+ //# sourceMappingURL=plan-is-exact.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-is-exact.d.ts","sourceRoot":"","sources":["../../src/derivation/plan-is-exact.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,eAAO,MAAM,eAAe,GAAI,MAAM,cAAc,KAAG,OAGxB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"automatic-runtime.d.ts","sourceRoot":"","sources":["../../src/execution-recorder/automatic-runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,eAAO,MAAM,wBAAwB,kCAAkC,CAAC;AAIxE,KAAK,YAAY,GAAG,CAAC,CAAC,EACrB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,EACxB,QAAQ,EAAE,MAAM,CAAC,EACjB,UAAU,CAAC,EAAE,OAAO,KAChB,CAAC,CAAC;AAEP,KAAK,YAAY,GAAG;IACnB,GAAG,EAAE,YAAY,CAAC;CAClB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACvB,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACtC,IAAI,EAAE,YAAY,CAAC;CACnB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACvB,IAAI,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACzD,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC/B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,KAAK,YAAY,CAAC;IAClE,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACzD,CAAC;AAqCF,eAAO,MAAM,2BAA2B,QAAO,wBAY9C,CAAC;AAEF,eAAO,MAAM,8BAA8B,QAAO,IAEjD,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,gCAAgC,GAAI,WAAW,iBAAiB,KAAG,CAAC,MAAM,IAAI,CA2B1F,CAAC"}
1
+ {"version":3,"file":"automatic-runtime.d.ts","sourceRoot":"","sources":["../../src/execution-recorder/automatic-runtime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D,eAAO,MAAM,wBAAwB,kCAAkC,CAAC;AAIxE,KAAK,YAAY,GAAG,CAAC,CAAC,EACrB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,CAAC,OAAO,CAAC,EACxB,QAAQ,EAAE,MAAM,CAAC,EACjB,UAAU,CAAC,EAAE,OAAO,KAChB,CAAC,CAAC;AAEP,KAAK,YAAY,GAAG;IACnB,GAAG,EAAE,YAAY,CAAC;CAClB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACvB,KAAK,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACtC,IAAI,EAAE,YAAY,CAAC;CACnB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACvB,IAAI,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACzD,CAAC;AAEF,KAAK,wBAAwB,GAAG;IAC/B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,mBAAmB,EAAE,KAAK,YAAY,CAAC;IAClE,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;CACzD,CAAC;AAqCF,eAAO,MAAM,2BAA2B,QAAO,wBAY9C,CAAC;AAEF,eAAO,MAAM,8BAA8B,QAAO,IAEjD,CAAC;AAEF,sEAAsE;AACtE,eAAO,MAAM,gCAAgC,GAAI,WAAW,iBAAiB,KAAG,CAAC,MAAM,IAAI,CAyB1F,CAAC"}
@@ -31,6 +31,10 @@ export type ExecutionRecorderOptions = {
31
31
  maxArrayElements?: number;
32
32
  maxStringLength?: number;
33
33
  maxSerializedValueBytes?: number;
34
+ /** Best-effort uncompressed compact-JSON runtime-state target. Default: 256 KiB. */
35
+ runtimeStateTargetBytes?: number;
36
+ /** Absolute uncompressed compact-JSON runtime-state ceiling. Default: 512 KiB. */
37
+ maxRuntimeStateBytes?: number;
34
38
  };
35
39
  export type ExecutionMetadata = RuntimeExecutionMetadata;
36
40
  export type ExecutionKind = RuntimeExecutionKind;
@@ -1 +1 @@
1
- {"version":3,"file":"execution-recorder-types.d.ts","sourceRoot":"","sources":["../../src/execution-recorder/execution-recorder-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"execution-recorder-types.d.ts","sourceRoot":"","sources":["../../src/execution-recorder/execution-recorder-types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
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;AAgRpC,wEAAwE;AACxE,eAAO,MAAM,uBAAuB,GACnC,SAAS,wBAAwB,GAAG,SAAS,KAC3C,iBAk0BF,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,iBAi1BF,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type RuntimeExecutionState } from '@rasputin-ai/core';
2
+ export declare const DEFAULT_RUNTIME_STATE_TARGET_BYTES: number;
3
+ export declare const DEFAULT_MAX_RUNTIME_STATE_BYTES: number;
4
+ /**
5
+ * Bound the complete compact-JSON runtime state after materialization. Derivation-only roots are
6
+ * sacrificed first. Captured function values are only omitted above the hard ceiling; call
7
+ * boundaries and timings remain until a final pathological-metadata fallback is required.
8
+ */
9
+ export declare const enforceRuntimeStateSizeBudget: (input: RuntimeExecutionState, options?: {
10
+ targetBytes?: number;
11
+ maximumBytes?: number;
12
+ }) => RuntimeExecutionState;
13
+ export declare const runtimeStateEncodedBytes: (value: unknown) => number;
14
+ //# sourceMappingURL=runtime-state-size-budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-state-size-budget.d.ts","sourceRoot":"","sources":["../../src/execution-recorder/runtime-state-size-budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,KAAK,qBAAqB,EAG1B,MAAM,mBAAmB,CAAC;AAE3B,eAAO,MAAM,kCAAkC,QAAa,CAAC;AAC7D,eAAO,MAAM,+BAA+B,QAAa,CAAC;AAkI1D;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,GACzC,OAAO,qBAAqB,EAC5B,UAAS;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAO,KAC3D,qBAqIF,CAAC;AAEF,eAAO,MAAM,wBAAwB,UA5QR,OAAO,WA4QgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"safe-serialize.d.ts","sourceRoot":"","sources":["../../src/execution-recorder/safe-serialize.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAoG3E,eAAO,MAAM,oBAAoB,GAAI,OAAO,OAAO,KAAG,MAkCrD,CAAC;AA4EF,MAAM,MAAM,mBAAmB,GAAG;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,4FAA4F;IAC5F,YAAY,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IACvC,kBAAkB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,mBAAmB,CAAC;CAC5D,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,UAAS,wBAA6B,KAAG,cAuU7E,CAAC;AAYF,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,GAClC,OAAO,OAAO,EACd,UAAS,wBAA6B,KACpC,mBAIyB,CAAC;AAE7B,0EAA0E;AAC1E,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,EAAE,UAAS,wBAA6B,KAAG,OAC1C,CAAC"}
1
+ {"version":3,"file":"safe-serialize.d.ts","sourceRoot":"","sources":["../../src/execution-recorder/safe-serialize.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAoG3E,eAAO,MAAM,oBAAoB,GAAI,OAAO,OAAO,KAAG,MAkCrD,CAAC;AA4EF,MAAM,MAAM,mBAAmB,GAAG;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,4FAA4F;IAC5F,YAAY,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,SAAS,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;IACvC,kBAAkB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,mBAAmB,CAAC;CAC5D,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAAI,UAAS,wBAA6B,KAAG,cAwU7E,CAAC;AAYF,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,GAClC,OAAO,OAAO,EACd,UAAS,wBAA6B,KACpC,mBAIyB,CAAC;AAE7B,0EAA0E;AAC1E,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,EAAE,UAAS,wBAA6B,KAAG,OAC1C,CAAC"}
package/dist/index.js CHANGED
@@ -899,6 +899,234 @@ var RecorderMemoryBudget = class {
899
899
  }
900
900
  };
901
901
 
902
+ // src/execution-recorder/runtime-state-size-budget.ts
903
+ import {
904
+ rasputinUnavailable
905
+ } from "@rasputin-ai/core";
906
+ var DEFAULT_RUNTIME_STATE_TARGET_BYTES = 256 * 1024;
907
+ var DEFAULT_MAX_RUNTIME_STATE_BYTES = 512 * 1024;
908
+ var SIZE_METADATA_HEADROOM_BYTES = 256;
909
+ var VALUE_OMITTED_REASON = "runtime_state_size_budget";
910
+ var encodedBytes = (value) => Buffer.byteLength(JSON.stringify(value), "utf8");
911
+ var boundedLimit = (value, fallback) => Number.isFinite(value) ? Math.max(4 * 1024, Math.floor(value)) : fallback;
912
+ var sizeMetadata = (originalBytes, targetBytes, maximumBytes) => ({
913
+ reason: "runtime_state_size_budget",
914
+ originalBytes,
915
+ finalBytes: 0,
916
+ targetBytes,
917
+ maximumBytes,
918
+ derivationRootsDropped: 0,
919
+ derivationControlFactsDropped: 0,
920
+ eventValuesDropped: 0,
921
+ eventsDropped: 0,
922
+ functionDefinitionsDropped: 0
923
+ });
924
+ var withSizeMetadata = (state, size) => ({
925
+ ...state,
926
+ truncated: {
927
+ eventsDropped: state.truncated?.eventsDropped ?? 0,
928
+ ...state.truncated,
929
+ size
930
+ }
931
+ });
932
+ var settleFinalBytes = (state) => {
933
+ const size = state.truncated?.size;
934
+ if (!size) return state;
935
+ for (let attempt = 0; attempt < 4; attempt++) {
936
+ const bytes = encodedBytes(state);
937
+ if (size.finalBytes === bytes) break;
938
+ size.finalBytes = bytes;
939
+ }
940
+ return state;
941
+ };
942
+ var dropEventValues = (events) => {
943
+ let dropped = 0;
944
+ const marker = () => rasputinUnavailable(VALUE_OMITTED_REASON);
945
+ const bounded = events.map((event) => {
946
+ if (event.type === "function_enter") {
947
+ dropped += event.args.length;
948
+ return { ...event, args: event.args.map(marker) };
949
+ }
950
+ if (event.type === "function_exit" && "returnValue" in event) {
951
+ dropped++;
952
+ return { ...event, returnValue: marker() };
953
+ }
954
+ if (event.type === "function_throw" && "error" in event) {
955
+ dropped++;
956
+ return { ...event, error: marker() };
957
+ }
958
+ return { ...event };
959
+ });
960
+ return { events: bounded, dropped };
961
+ };
962
+ var truncateUtf8 = (value, maximumBytes) => {
963
+ if (value === void 0 || Buffer.byteLength(value, "utf8") <= maximumBytes) return value;
964
+ let low = 0;
965
+ let high = value.length;
966
+ while (low < high) {
967
+ const middle = Math.ceil((low + high) / 2);
968
+ if (Buffer.byteLength(value.slice(0, middle), "utf8") <= maximumBytes) low = middle;
969
+ else high = middle - 1;
970
+ }
971
+ return value.slice(0, low);
972
+ };
973
+ var minimalState = (state, size) => {
974
+ const request = state.execution.request;
975
+ const execution = {
976
+ kind: state.execution.kind,
977
+ ...state.execution.name === void 0 ? {} : { name: truncateUtf8(state.execution.name, 4 * 1024) },
978
+ ...request ? {
979
+ request: {
980
+ ...request.method == null ? {} : { method: truncateUtf8(request.method, 1024) },
981
+ ...request.route == null ? {} : { route: truncateUtf8(request.route, 4 * 1024) },
982
+ ...request.status == null ? {} : { status: request.status }
983
+ }
984
+ } : {}
985
+ };
986
+ return withSizeMetadata(
987
+ {
988
+ version: 4,
989
+ captureProfile: {
990
+ source: state.captureProfile.source,
991
+ functionBoundaries: state.captureProfile.functionBoundaries === "none" ? "none" : "partial",
992
+ functionValues: "none",
993
+ timings: state.captureProfile.timings === "none" ? "none" : "partial",
994
+ derivation: "none"
995
+ },
996
+ executionId: truncateUtf8(state.executionId, 256) ?? "",
997
+ startedAt: truncateUtf8(state.startedAt, 128) ?? "",
998
+ durationMs: Number.isFinite(state.durationMs) ? state.durationMs : 0,
999
+ recorder: {
1000
+ inlineWallTimeMs: Number.isFinite(state.recorder?.inlineWallTimeMs) ? state.recorder.inlineWallTimeMs : 0
1001
+ },
1002
+ execution,
1003
+ functions: [],
1004
+ events: [],
1005
+ ...state.capture ? { capture: { ...state.capture } } : {}
1006
+ },
1007
+ size
1008
+ );
1009
+ };
1010
+ var enforceRuntimeStateSizeBudget = (input, options = {}) => {
1011
+ const maximumBytes = boundedLimit(options.maximumBytes, DEFAULT_MAX_RUNTIME_STATE_BYTES);
1012
+ const targetBytes = Math.min(
1013
+ maximumBytes,
1014
+ boundedLimit(options.targetBytes, DEFAULT_RUNTIME_STATE_TARGET_BYTES)
1015
+ );
1016
+ const initialBytes = encodedBytes(input);
1017
+ const existingSize = input.truncated?.size;
1018
+ if (existingSize && initialBytes <= maximumBytes) return settleFinalBytes(input);
1019
+ if (initialBytes <= targetBytes) return input;
1020
+ const originalBytes = existingSize?.originalBytes ?? initialBytes;
1021
+ const size = sizeMetadata(originalBytes, targetBytes, maximumBytes);
1022
+ let state = input;
1023
+ const roots = input.derivation?.roots ?? [];
1024
+ const controlFacts = input.derivation?.controlFacts ?? [];
1025
+ if (input.derivation && (roots.length > 0 || controlFacts.length > 0)) {
1026
+ const targetWithHeadroom = Math.max(0, targetBytes - SIZE_METADATA_HEADROOM_BYTES);
1027
+ const candidate = (retainedRoots, retainControlFacts) => {
1028
+ const derivationRoots = retainedRoots === 0 ? [] : roots.slice(roots.length - retainedRoots);
1029
+ const candidateSize = {
1030
+ ...size,
1031
+ derivationRootsDropped: roots.length - retainedRoots,
1032
+ derivationControlFactsDropped: retainControlFacts ? 0 : controlFacts.length
1033
+ };
1034
+ return withSizeMetadata(
1035
+ {
1036
+ ...input,
1037
+ derivation: {
1038
+ ...input.derivation,
1039
+ roots: derivationRoots,
1040
+ controlFacts: retainControlFacts ? controlFacts.slice() : []
1041
+ }
1042
+ },
1043
+ candidateSize
1044
+ );
1045
+ };
1046
+ let low = 0;
1047
+ let high = roots.length;
1048
+ let best = null;
1049
+ while (low <= high) {
1050
+ const retained = Math.floor((low + high) / 2);
1051
+ const attempt = candidate(retained, true);
1052
+ if (encodedBytes(attempt) <= targetWithHeadroom) {
1053
+ best = attempt;
1054
+ low = retained + 1;
1055
+ } else {
1056
+ high = retained - 1;
1057
+ }
1058
+ }
1059
+ state = best ?? candidate(0, false);
1060
+ Object.assign(size, state.truncated.size);
1061
+ }
1062
+ if (size.derivationRootsDropped === 0 && size.derivationControlFactsDropped === 0 && initialBytes <= maximumBytes) {
1063
+ return input;
1064
+ }
1065
+ state = settleFinalBytes(withSizeMetadata(state, size));
1066
+ if (encodedBytes(state) <= maximumBytes) return state;
1067
+ const stripped = dropEventValues(state.events);
1068
+ size.eventValuesDropped += stripped.dropped;
1069
+ state = settleFinalBytes(
1070
+ withSizeMetadata(
1071
+ {
1072
+ ...state,
1073
+ captureProfile: {
1074
+ ...state.captureProfile,
1075
+ functionValues: state.captureProfile.functionValues === "none" ? "none" : "selective"
1076
+ },
1077
+ events: stripped.events
1078
+ },
1079
+ size
1080
+ )
1081
+ );
1082
+ if (encodedBytes(state) <= maximumBytes) return state;
1083
+ size.eventsDropped += state.events.length;
1084
+ size.functionDefinitionsDropped += state.functions.length;
1085
+ state = settleFinalBytes(
1086
+ withSizeMetadata(
1087
+ {
1088
+ ...state,
1089
+ captureProfile: {
1090
+ ...state.captureProfile,
1091
+ functionBoundaries: state.captureProfile.functionBoundaries === "none" ? "none" : "partial",
1092
+ functionValues: "none",
1093
+ timings: state.captureProfile.timings === "none" ? "none" : "partial",
1094
+ derivation: "none"
1095
+ },
1096
+ functions: [],
1097
+ events: [],
1098
+ derivation: void 0,
1099
+ truncated: {
1100
+ eventsDropped: (state.truncated?.eventsDropped ?? 0) + size.eventsDropped,
1101
+ size
1102
+ }
1103
+ },
1104
+ size
1105
+ )
1106
+ );
1107
+ if (encodedBytes(state) <= maximumBytes) return state;
1108
+ state = settleFinalBytes(minimalState(state, size));
1109
+ if (encodedBytes(state) <= maximumBytes) return state;
1110
+ const emergency = {
1111
+ version: 4,
1112
+ captureProfile: {
1113
+ source: state.captureProfile.source,
1114
+ functionBoundaries: "partial",
1115
+ functionValues: "none",
1116
+ timings: "partial",
1117
+ derivation: "none"
1118
+ },
1119
+ executionId: "",
1120
+ startedAt: "",
1121
+ durationMs: 0,
1122
+ execution: { kind: state.execution.kind },
1123
+ functions: [],
1124
+ events: [],
1125
+ truncated: { eventsDropped: size.eventsDropped, size }
1126
+ };
1127
+ return settleFinalBytes(emergency);
1128
+ };
1129
+
902
1130
  // src/execution-recorder/safe-serialize.ts
903
1131
  import { Buffer as Buffer2 } from "node:buffer";
904
1132
  var DEFAULT_REDACT_KEYS = [
@@ -1165,7 +1393,6 @@ var createSafeSerializer = (options = {}) => {
1165
1393
  if (typeof value === "function") {
1166
1394
  return writeTypeMarker(metrics, store, "function", value.name || "anonymous");
1167
1395
  }
1168
- if (depth >= limits.maxDepth) return writeTruncation(metrics, store, "max_depth");
1169
1396
  if (typeof value !== "object") return writeTypeMarker(metrics, store, typeof value);
1170
1397
  if (path.has(value)) return writeTypeMarker(metrics, store, "circular");
1171
1398
  path.add(value);
@@ -1173,6 +1400,10 @@ var createSafeSerializer = (options = {}) => {
1173
1400
  const oversizeBefore = metrics.oversize;
1174
1401
  try {
1175
1402
  const childAllocate = allocate && !metrics.oversize;
1403
+ if (value instanceof Date) {
1404
+ return writeTypeMarker(metrics, childAllocate, "Date", value.toISOString());
1405
+ }
1406
+ if (depth >= limits.maxDepth) return writeTruncation(metrics, childAllocate, "max_depth");
1176
1407
  if (value instanceof Error) {
1177
1408
  const object2 = openObject(metrics, childAllocate);
1178
1409
  writeLiteralField(metrics, object2, "__rasputin_type", "Error");
@@ -1193,9 +1424,6 @@ var createSafeSerializer = (options = {}) => {
1193
1424
  }
1194
1425
  return object2.target;
1195
1426
  }
1196
- if (value instanceof Date) {
1197
- return writeTypeMarker(metrics, childAllocate, "Date", value.toISOString());
1198
- }
1199
1427
  if (Buffer2.isBuffer(value)) {
1200
1428
  return writeTypeMarker(metrics, childAllocate, "Buffer", {
1201
1429
  byteLength: value.byteLength,
@@ -1605,6 +1833,10 @@ var createExecutionRecorder = (options) => {
1605
1833
  const serializer = createSafeSerializer(options);
1606
1834
  const excludesSource = createSourceExclusionMatcher(options.excludeSources);
1607
1835
  const journalPool = new ExecutionJournalPool(maxEventsPerExecution);
1836
+ const runtimeStateSizeBudget = {
1837
+ targetBytes: options.runtimeStateTargetBytes,
1838
+ maximumBytes: options.maxRuntimeStateBytes
1839
+ };
1608
1840
  const plansByRuntimeId = [];
1609
1841
  let executionCounter = 0;
1610
1842
  let nextRuntimePlanId = 1;
@@ -1802,12 +2034,19 @@ var createExecutionRecorder = (options) => {
1802
2034
  };
1803
2035
  if (phaseTimingEnabled)
1804
2036
  addPhase("materializeNs", process.hrtime.bigint() - recorderStartedAtNs);
1805
- addRecorderTime(recording, process.hrtime.bigint() - recorderStartedAtNs);
2037
+ const sizeBudgetStartedAtNs = process.hrtime.bigint();
2038
+ addRecorderTime(recording, sizeBudgetStartedAtNs - recorderStartedAtNs);
1806
2039
  state.recorder = {
1807
2040
  inlineWallTimeMs: roundedMilliseconds2(recording.inlineRecorderTimeNs),
1808
2041
  derivation: derivationMetrics(recording)
1809
2042
  };
1810
- return state;
2043
+ const boundedState = enforceRuntimeStateSizeBudget(state, runtimeStateSizeBudget);
2044
+ addRecorderTime(recording, process.hrtime.bigint() - sizeBudgetStartedAtNs);
2045
+ boundedState.recorder = {
2046
+ inlineWallTimeMs: roundedMilliseconds2(recording.inlineRecorderTimeNs),
2047
+ derivation: derivationMetrics(recording)
2048
+ };
2049
+ return boundedState.truncated?.size ? enforceRuntimeStateSizeBudget(boundedState, runtimeStateSizeBudget) : boundedState;
1811
2050
  };
1812
2051
  const rememberError = (error, recording) => {
1813
2052
  recording.hasError = true;
@@ -2423,7 +2662,7 @@ import {
2423
2662
 
2424
2663
  // src/sdk-meta.ts
2425
2664
  var SDK_NAME = "@rasputin-ai/node";
2426
- var SDK_VERSION = "0.5.0-alpha.11";
2665
+ var SDK_VERSION = "0.5.0-alpha.13";
2427
2666
 
2428
2667
  // src/rasputin-init.ts
2429
2668
  var withExecution = (client, execution, installRuntime, manifest) => {
@@ -877,9 +877,6 @@ var analyzeModuleFunctions = (sourceFile, targets) => {
877
877
  return analyzed;
878
878
  };
879
879
 
880
- // src/derivation/derivation-proof.ts
881
- var functionIsExact = (plan) => plan.fallbackReason === void 0 && plan.captureBoundaries.length === 0 && plan.controlFacts.length === 0;
882
-
883
880
  // src/derivation/emit-capture-plan.ts
884
881
  var captureWrapEdits = (wraps, capName) => {
885
882
  const edits = [];
@@ -899,6 +896,9 @@ var captureWrapEdits = (wraps, capName) => {
899
896
  return edits;
900
897
  };
901
898
 
899
+ // src/derivation/plan-is-exact.ts
900
+ var functionIsExact = (plan) => plan.fallbackReason === void 0 && plan.captureBoundaries.length === 0 && plan.controlFacts.length === 0;
901
+
902
902
  // src/execution-recorder/automatic-runtime.ts
903
903
  var AUTOMATIC_RUNTIME_SYMBOL = "rasputin.execution.runtime.v2";
904
904
  var runtimeSymbol = Symbol.for(AUTOMATIC_RUNTIME_SYMBOL);
@@ -711,9 +711,6 @@ var analyzeModuleFunctions = (sourceFile, targets) => {
711
711
  return analyzed;
712
712
  };
713
713
 
714
- // src/derivation/derivation-proof.ts
715
- var functionIsExact = (plan) => plan.fallbackReason === void 0 && plan.captureBoundaries.length === 0 && plan.controlFacts.length === 0;
716
-
717
714
  // src/derivation/emit-capture-plan.ts
718
715
  var captureWrapEdits = (wraps, capName) => {
719
716
  const edits = [];
@@ -733,6 +730,9 @@ var captureWrapEdits = (wraps, capName) => {
733
730
  return edits;
734
731
  };
735
732
 
733
+ // src/derivation/plan-is-exact.ts
734
+ var functionIsExact = (plan) => plan.fallbackReason === void 0 && plan.captureBoundaries.length === 0 && plan.controlFacts.length === 0;
735
+
736
736
  // src/execution-recorder/automatic-runtime.ts
737
737
  var AUTOMATIC_RUNTIME_SYMBOL = "rasputin.execution.runtime.v2";
738
738
  var runtimeSymbol = Symbol.for(AUTOMATIC_RUNTIME_SYMBOL);
@@ -766,9 +766,6 @@ var analyzeModuleFunctions = (sourceFile, targets) => {
766
766
  return analyzed;
767
767
  };
768
768
 
769
- // src/derivation/derivation-proof.ts
770
- var functionIsExact = (plan) => plan.fallbackReason === void 0 && plan.captureBoundaries.length === 0 && plan.controlFacts.length === 0;
771
-
772
769
  // src/derivation/emit-capture-plan.ts
773
770
  var captureWrapEdits = (wraps, capName) => {
774
771
  const edits = [];
@@ -788,6 +785,9 @@ var captureWrapEdits = (wraps, capName) => {
788
785
  return edits;
789
786
  };
790
787
 
788
+ // src/derivation/plan-is-exact.ts
789
+ var functionIsExact = (plan) => plan.fallbackReason === void 0 && plan.captureBoundaries.length === 0 && plan.controlFacts.length === 0;
790
+
791
791
  // src/execution-recorder/automatic-runtime.ts
792
792
  var AUTOMATIC_RUNTIME_SYMBOL = "rasputin.execution.runtime.v2";
793
793
  var runtimeSymbol = Symbol.for(AUTOMATIC_RUNTIME_SYMBOL);
@@ -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.11";
3
+ export declare const SDK_VERSION = "0.5.0-alpha.13";
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.11",
3
+ "version": "0.5.0-alpha.13",
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.11",
47
+ "@rasputin-ai/core": "0.5.0-alpha.13",
48
48
  "typescript": "5"
49
49
  },
50
50
  "devDependencies": {
@@ -1,14 +0,0 @@
1
- import type { DerivationFallbackReason, DerivationPlan } from '@rasputin-ai/core';
2
- export type Derivability = {
3
- kind: 'exact';
4
- expressionId: number;
5
- shape: 'primitive' | 'object' | 'array' | 'unknown';
6
- } | {
7
- kind: 'capture_root';
8
- reason: import('@rasputin-ai/core').CaptureReason;
9
- } | {
10
- kind: 'fallback_function';
11
- reason: DerivationFallbackReason;
12
- };
13
- export declare const functionIsExact: (plan: DerivationPlan) => boolean;
14
- //# sourceMappingURL=derivation-proof.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"derivation-proof.d.ts","sourceRoot":"","sources":["../../src/derivation/derivation-proof.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAElF,MAAM,MAAM,YAAY,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAA;CAAE,GAC5F;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,MAAM,EAAE,OAAO,mBAAmB,EAAE,aAAa,CAAA;CAAE,GAC3E;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,MAAM,EAAE,wBAAwB,CAAA;CAAE,CAAC;AAEnE,eAAO,MAAM,eAAe,GAAI,MAAM,cAAc,KAAG,OAGxB,CAAC"}