darwin-langgraph 0.2.0-alpha.1 → 0.4.0-alpha.1

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 (39) hide show
  1. package/CHANGELOG.md +348 -0
  2. package/README.md +108 -3
  3. package/dist/create-darwin-node.d.ts +55 -0
  4. package/dist/create-darwin-node.d.ts.map +1 -1
  5. package/dist/create-darwin-node.js +56 -1
  6. package/dist/create-darwin-node.js.map +1 -1
  7. package/dist/darwin-accumulating-annotation.d.ts +81 -0
  8. package/dist/darwin-accumulating-annotation.d.ts.map +1 -0
  9. package/dist/darwin-accumulating-annotation.js +144 -0
  10. package/dist/darwin-accumulating-annotation.js.map +1 -0
  11. package/dist/darwin-callback-handler.d.ts +161 -2
  12. package/dist/darwin-callback-handler.d.ts.map +1 -1
  13. package/dist/darwin-callback-handler.js +417 -25
  14. package/dist/darwin-callback-handler.js.map +1 -1
  15. package/dist/errors.d.ts +16 -0
  16. package/dist/errors.d.ts.map +1 -1
  17. package/dist/errors.js +19 -0
  18. package/dist/errors.js.map +1 -1
  19. package/dist/index.d.ts +7 -3
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +11 -3
  22. package/dist/index.js.map +1 -1
  23. package/dist/to-otel-attributes.d.ts +49 -0
  24. package/dist/to-otel-attributes.d.ts.map +1 -1
  25. package/dist/to-otel-attributes.js +38 -2
  26. package/dist/to-otel-attributes.js.map +1 -1
  27. package/dist/to-w3c-trace-context.d.ts +81 -0
  28. package/dist/to-w3c-trace-context.d.ts.map +1 -0
  29. package/dist/to-w3c-trace-context.js +134 -0
  30. package/dist/to-w3c-trace-context.js.map +1 -0
  31. package/dist/token-budget.d.ts +141 -0
  32. package/dist/token-budget.d.ts.map +1 -0
  33. package/dist/token-budget.js +225 -0
  34. package/dist/token-budget.js.map +1 -0
  35. package/dist/with-darwin-evolution.d.ts +40 -0
  36. package/dist/with-darwin-evolution.d.ts.map +1 -1
  37. package/dist/with-darwin-evolution.js +55 -1
  38. package/dist/with-darwin-evolution.js.map +1 -1
  39. package/package.json +2 -2
@@ -0,0 +1,225 @@
1
+ /**
2
+ * Surface 10 (V0.4) — `createTokenBudgetCallbacks(budget, onExceed)`.
3
+ *
4
+ * Production-pattern from the LangGraph TypeScript Production Guide
5
+ * (langgraphjs.guide/production): a token budget enforced per-invocation
6
+ * across ALL LLM calls inside a graph, throwing when the budget is
7
+ * exceeded. Mirrors the canonical example with two differences:
8
+ *
9
+ * 1. Returned as a `BaseCallbackHandler` subclass so it composes with
10
+ * {@link DarwinCallbackHandler} via the standard `{ callbacks: [...] }`
11
+ * option — no model-side patching required, works against any
12
+ * LangChain provider that emits `handleLLMEnd`.
13
+ * 2. Throws a typed {@link DarwinTokenBudgetExceededError} so consumers
14
+ * can `instanceof`-check without parsing message text.
15
+ *
16
+ * The handler tracks BOTH the LangChain-canonical `output.llmOutput.tokenUsage`
17
+ * shape (used by `ChatOpenAI`, `ChatAnthropic`, etc.) AND the per-message
18
+ * usage shape (`generations[0][0].message.usage_metadata`) some providers
19
+ * emit. The total is monotonically non-decreasing across `handleLLMEnd`
20
+ * events; once the budget is crossed the throw happens INSIDE
21
+ * `handleLLMEnd`, which LangChain surfaces back to the caller of
22
+ * `graph.invoke` / `graph.stream`.
23
+ *
24
+ * IMPORTANT: the throw is the only reliable abort signal — LangGraph's
25
+ * node-level retry policy may still re-fire the budget-exceeded path.
26
+ * The `onExceed` callback fires once per handler instance regardless of
27
+ * how many times the throw is observed (use it for logging / alerting,
28
+ * not retry).
29
+ *
30
+ * NEW V0.4 (S1235).
31
+ */
32
+ import { BaseCallbackHandler } from "@langchain/core/callbacks/base";
33
+ import { DarwinTokenBudgetExceededError } from "./errors.js";
34
+ /**
35
+ * Internal helper — extract a usable token total from an LLMResult.
36
+ * Prefers `output.llmOutput.tokenUsage.totalTokens` (LangChain canonical
37
+ * for OpenAI + Anthropic) and falls back to summing the per-generation
38
+ * `usage_metadata` (some providers).
39
+ *
40
+ * Returns 0 on a malformed shape rather than throwing — a token-budget
41
+ * handler should never break the graph itself.
42
+ */
43
+ function extractTokenDelta(output) {
44
+ // Canonical LangChain shape (ChatOpenAI / ChatAnthropic / etc.).
45
+ const top = output;
46
+ const canonical = top.llmOutput?.tokenUsage?.totalTokens;
47
+ if (typeof canonical === "number" && Number.isFinite(canonical) && canonical >= 0) {
48
+ return canonical;
49
+ }
50
+ // Fallback: per-message `usage_metadata` (Anthropic native, some others).
51
+ let summed = 0;
52
+ if (output.generations && Array.isArray(output.generations)) {
53
+ for (const generationGroup of output.generations) {
54
+ if (!Array.isArray(generationGroup))
55
+ continue;
56
+ for (const gen of generationGroup) {
57
+ const m = gen.message;
58
+ const usage = (m && m.usage_metadata);
59
+ if (!usage)
60
+ continue;
61
+ if (typeof usage.total_tokens === "number" && Number.isFinite(usage.total_tokens)) {
62
+ summed += usage.total_tokens;
63
+ }
64
+ else {
65
+ const i = typeof usage.input_tokens === "number" && Number.isFinite(usage.input_tokens)
66
+ ? usage.input_tokens
67
+ : 0;
68
+ const o = typeof usage.output_tokens === "number" && Number.isFinite(usage.output_tokens)
69
+ ? usage.output_tokens
70
+ : 0;
71
+ summed += i + o;
72
+ }
73
+ }
74
+ }
75
+ }
76
+ return summed;
77
+ }
78
+ function extractProviderHint(output) {
79
+ const top = output;
80
+ const a = top.llmOutput?.modelName;
81
+ if (typeof a === "string" && a.length > 0)
82
+ return a;
83
+ const b = top.llmOutput?.model_name;
84
+ if (typeof b === "string" && b.length > 0)
85
+ return b;
86
+ return undefined;
87
+ }
88
+ /**
89
+ * LangChain `BaseCallbackHandler` that enforces a hard token budget
90
+ * across all LLM calls observed during its lifetime.
91
+ *
92
+ * Construct once per `graph.invoke` call (do NOT reuse across requests —
93
+ * the running total is per-handler-instance). The
94
+ * {@link createTokenBudgetCallbacks} factory makes the per-invocation
95
+ * shape ergonomic.
96
+ */
97
+ export class TokenBudgetCallbackHandler extends BaseCallbackHandler {
98
+ name = "DarwinTokenBudgetHandler";
99
+ /**
100
+ * V0.4 R1 P2-3 fix (S1235): `awaitHandlers = true` is required so
101
+ * LangChain's callback manager AWAITS this handler before continuing
102
+ * — the synchronous `throw` from `handleLLMEnd` MUST reach the
103
+ * `graph.invoke` caller. With `awaitHandlers = false` the throw may
104
+ * surface as an unhandled rejection in some LangChain versions
105
+ * rather than aborting the graph, which is the entire point of a
106
+ * token budget.
107
+ */
108
+ awaitHandlers = true;
109
+ budget;
110
+ onExceed;
111
+ onTick;
112
+ totalTokens = 0;
113
+ exceedWarned = false;
114
+ exceedFired = false;
115
+ tickErrorWarned = false;
116
+ constructor(opts) {
117
+ super();
118
+ if (typeof opts?.budget !== "number" ||
119
+ !Number.isFinite(opts.budget) ||
120
+ opts.budget <= 0 ||
121
+ !Number.isInteger(opts.budget)) {
122
+ // R1-self-check: misconfigured budget is a deploy bug, not a
123
+ // runtime hiccup — fail loud on construction so it surfaces in
124
+ // CI / dev rather than at the first LLM call in prod.
125
+ throw new DarwinTokenBudgetExceededError(`createTokenBudgetCallbacks: budget must be a finite positive integer, got ${String(opts?.budget)}.`, typeof opts?.budget === "number" ? opts.budget : 0, 0, undefined);
126
+ }
127
+ this.budget = opts.budget;
128
+ this.onExceed = opts.onExceed;
129
+ this.onTick = opts.onTick;
130
+ }
131
+ handleLLMEnd(output) {
132
+ const delta = extractTokenDelta(output);
133
+ const providerHint = extractProviderHint(output);
134
+ // Tick logic — fire even when delta is 0 so dashboards see steady
135
+ // ticks (helpful for "is the agent stuck?" detection).
136
+ this.totalTokens += delta;
137
+ const remaining = Math.max(0, this.budget - this.totalTokens);
138
+ if (this.onTick) {
139
+ try {
140
+ this.onTick({
141
+ budget: this.budget,
142
+ totalTokens: this.totalTokens,
143
+ deltaTokens: delta,
144
+ remainingTokens: remaining,
145
+ providerHint,
146
+ });
147
+ }
148
+ catch (err) {
149
+ this.warnTick(err);
150
+ }
151
+ }
152
+ if (this.totalTokens > this.budget) {
153
+ if (this.onExceed && !this.exceedFired) {
154
+ this.exceedFired = true;
155
+ try {
156
+ this.onExceed({
157
+ budget: this.budget,
158
+ totalTokens: this.totalTokens,
159
+ providerHint,
160
+ });
161
+ }
162
+ catch (err) {
163
+ if (!this.exceedWarned) {
164
+ this.exceedWarned = true;
165
+ console.warn(`[darwin-langgraph] TokenBudgetCallbackHandler.onExceed threw — ` +
166
+ `swallowed to keep the budget throw visible. Subsequent throws ` +
167
+ `from onExceed are silent. Original error: ` +
168
+ `${err instanceof Error ? err.message : String(err)}`);
169
+ }
170
+ }
171
+ }
172
+ throw new DarwinTokenBudgetExceededError(`Token budget exceeded: ${this.totalTokens}/${this.budget} ` +
173
+ `(provider: ${providerHint ?? "unknown"}).`, this.budget, this.totalTokens, providerHint);
174
+ }
175
+ }
176
+ warnTick(err) {
177
+ if (this.tickErrorWarned)
178
+ return;
179
+ this.tickErrorWarned = true;
180
+ console.warn(`[darwin-langgraph] TokenBudgetCallbackHandler.onTick threw — swallowed. ` +
181
+ `Subsequent throws from onTick are silent. Original error: ` +
182
+ `${err instanceof Error ? err.message : String(err)}`);
183
+ }
184
+ /** Helper for tests + debug introspection. */
185
+ getTotalTokens() {
186
+ return this.totalTokens;
187
+ }
188
+ }
189
+ /**
190
+ * Factory that returns a single-element `BaseCallbackHandler[]` ready to
191
+ * be passed via the standard LangGraph `{ callbacks: [...] }` option.
192
+ * Returning an array is the ergonomic shape — most consumers spread it
193
+ * into a larger callbacks array next to {@link DarwinCallbackHandler}.
194
+ *
195
+ * @example
196
+ * ```ts
197
+ * import {
198
+ * DarwinCallbackHandler,
199
+ * createTokenBudgetCallbacks,
200
+ * DarwinTokenBudgetExceededError,
201
+ * } from "darwin-langgraph";
202
+ *
203
+ * try {
204
+ * const result = await graph.invoke({ task: "..." }, {
205
+ * callbacks: [
206
+ * new DarwinCallbackHandler({ nodeMap, onTrajectory }),
207
+ * ...createTokenBudgetCallbacks({
208
+ * budget: 20_000,
209
+ * onExceed: ({ totalTokens, providerHint }) => {
210
+ * console.error(`Budget breach: ${totalTokens} tok (${providerHint})`);
211
+ * },
212
+ * }),
213
+ * ],
214
+ * });
215
+ * } catch (err) {
216
+ * if (err instanceof DarwinTokenBudgetExceededError) {
217
+ * // ... graceful degradation, fallback model, etc.
218
+ * }
219
+ * }
220
+ * ```
221
+ */
222
+ export function createTokenBudgetCallbacks(opts) {
223
+ return [new TokenBudgetCallbackHandler(opts)];
224
+ }
225
+ //# sourceMappingURL=token-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-budget.js","sourceRoot":"","sources":["../src/token-budget.ts"],"names":[],"mappings":"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"}
@@ -50,6 +50,46 @@ export interface DarwinTrajectoryEvent {
50
50
  * state and corrupts subsequent runs (R1 Critic Finding 4, S1185).
51
51
  */
52
52
  finalState: Readonly<Record<string, unknown>>;
53
+ /**
54
+ * LangChain runId of the node-chain that produced this trajectory.
55
+ * Only populated by {@link DarwinCallbackHandler} (v0.2+) where the
56
+ * runId is part of the LangChain callback contract. Undefined for the
57
+ * legacy `withDarwinEvolution` monkey-patch path (no runId there).
58
+ *
59
+ * Stable identifier suitable for correlation with OTEL spans, Langfuse
60
+ * traces, LangSmith runs, or custom run-id-based logging.
61
+ *
62
+ * NEW V0.3 (S1187).
63
+ */
64
+ runId?: string;
65
+ /**
66
+ * LangChain parentRunId — the runId of the chain that invoked this
67
+ * node-chain. For top-level graph invokes the parent is the graph
68
+ * itself. For child graphs / nested invocations the parent is the
69
+ * outer graph's runId. Only populated by {@link DarwinCallbackHandler}.
70
+ *
71
+ * Use this to build span/trace hierarchies in OTEL exporters,
72
+ * Langfuse, etc.
73
+ *
74
+ * NEW V0.3 (S1187).
75
+ */
76
+ parentRunId?: string;
77
+ /**
78
+ * `true` when the trajectory's serialised size exceeded the configured
79
+ * `maxTrajectoryBytes` cap and was replaced with a structurally
80
+ * compatible BUT minimal stub by {@link DarwinCallbackHandler}. The
81
+ * stub preserves `version`, all aggregate counts (`turnCount` /
82
+ * `textBlockCount` / `mcpInvocations`), `capturedAt`, and any captured
83
+ * `tokenUsage`, but replaces `toolCalls` and `errors` with empty
84
+ * arrays. Use this flag to branch on degraded payloads in OTEL exporters
85
+ * or alerting.
86
+ *
87
+ * Omitted (not `false`) when the trajectory passed through unchanged
88
+ * — consumers should treat the absence of the field as "intact".
89
+ *
90
+ * NEW V0.4 (S1235).
91
+ */
92
+ trajectoryTruncated?: boolean;
53
93
  }
54
94
  /** Options for {@link withDarwinEvolution}. */
55
95
  export interface DarwinEvolutionOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"with-darwin-evolution.d.ts","sourceRoot":"","sources":["../src/with-darwin-evolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,gFAAgF;AAChF,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD,sEAAsE;AACtE,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,UAAU,EAAE,cAAc,CAAC;IAC3B;;;;;;OAMG;IACH,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC/C;AAED,+CAA+C;AAC/C,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;;;;OAYG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC5C;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,mGAAmG;IACnG,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,yEAAyE;AACzE,UAAU,cAAc;IACtB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;CAC3E;AAkCD,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,cAAc,EAC1D,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,sBAAsB,GAC3B,CAAC,CA2PH"}
1
+ {"version":3,"file":"with-darwin-evolution.d.ts","sourceRoot":"","sources":["../src/with-darwin-evolution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpD,gFAAgF;AAChF,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GACN;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjD,sEAAsE;AACtE,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,UAAU,EAAE,cAAc,CAAC;IAC3B;;;;;;OAMG;IACH,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9C;;;;;;;;;;OAUG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,+CAA+C;AAC/C,MAAM,WAAW,sBAAsB;IACrC;;;;;;;;;;;;OAYG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC5C;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,mGAAmG;IACnG,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,yEAAyE;AACzE,UAAU,cAAc;IACtB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;CAC3E;AAyDD,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,cAAc,EAC1D,KAAK,EAAE,CAAC,EACR,IAAI,EAAE,sBAAsB,GAC3B,CAAC,CAgSH"}
@@ -58,8 +58,29 @@ import { DarwinEvolutionHookError } from "./errors.js";
58
58
  * first warn we go silent — never spam.
59
59
  *
60
60
  * R1 V0.2 Research Finding 7 + Analyst Observation 2 (S1185).
61
+ *
62
+ * Exported for tests via `vi.resetModules()` re-import.
61
63
  */
62
64
  let withDarwinEvolutionDeprecationWarned = false;
65
+ /**
66
+ * Process-wide double-wrap warning flag. Fires once per process if a
67
+ * caller wraps the same graph twice with `withDarwinEvolution`. Catches
68
+ * the silent footgun where the SECOND wrap chains on top of the first
69
+ * — both hooks fire per run, often producing duplicate evolution
70
+ * trajectories and confusing test failures.
71
+ *
72
+ * NEW V0.3 (S1187).
73
+ */
74
+ let withDarwinEvolutionDoubleWrapWarned = false;
75
+ /**
76
+ * Sentinel symbol stamped on graphs that have already been wrapped.
77
+ * Looked up at the start of each `withDarwinEvolution` call to detect
78
+ * double-wrap. Using a Symbol (not a string) so it cannot be cleared
79
+ * accidentally by `JSON.parse(JSON.stringify(graph))` style cloning.
80
+ *
81
+ * NEW V0.3 (S1187).
82
+ */
83
+ const DARWIN_EVOLUTION_WRAPPED = Symbol.for("darwin-langgraph.evolution.wrapped");
63
84
  export function withDarwinEvolution(graph, opts) {
64
85
  if (!withDarwinEvolutionDeprecationWarned) {
65
86
  withDarwinEvolutionDeprecationWarned = true;
@@ -67,6 +88,23 @@ export function withDarwinEvolution(graph, opts) {
67
88
  "and will be removed in v1.0.0. Migrate to DarwinCallbackHandler — " +
68
89
  "see https://github.com/studiomeyer-io/darwin-langgraph#migration");
69
90
  }
91
+ // V0.3 (S1187): double-wrap detection. If the graph carries our
92
+ // sentinel, the caller passed a wrapped graph through `withDarwinEvolution`
93
+ // again — both hooks will fire and produce duplicate trajectories. Warn
94
+ // once per process and continue (some users may legitimately layer
95
+ // multiple wrappers with different `nodeMap` slices, so we don't
96
+ // throw — but the warning is loud).
97
+ const wrappedGraph = graph;
98
+ if (wrappedGraph[DARWIN_EVOLUTION_WRAPPED] === true) {
99
+ if (!withDarwinEvolutionDoubleWrapWarned) {
100
+ withDarwinEvolutionDoubleWrapWarned = true;
101
+ console.warn("[darwin-langgraph] withDarwinEvolution(): graph appears to be wrapped " +
102
+ "twice — both hooks will fire per run, producing duplicate trajectories. " +
103
+ "If this is intentional, ignore this warning; otherwise wrap only once " +
104
+ "or migrate to DarwinCallbackHandler which supports multiple handlers " +
105
+ "natively via callbacks: [h1, h2]. Subsequent double-wraps are silent.");
106
+ }
107
+ }
70
108
  if (!opts || !opts.nodeMap || Object.keys(opts.nodeMap).length === 0) {
71
109
  throw new DarwinEvolutionHookError("withDarwinEvolution: opts.nodeMap is required and must contain at least one entry.");
72
110
  }
@@ -115,7 +153,15 @@ export function withDarwinEvolution(graph, opts) {
115
153
  const frozen = Object.freeze({ ...stateObj });
116
154
  for (const [nodeName, { agentName, trajectoryKey }] of resolved) {
117
155
  const trajectory = stateObj[trajectoryKey];
118
- if (!trajectory || typeof trajectory !== "object" || trajectory.version !== 1) {
156
+ // R2 self-check (S1235): mirror the forward-compat `version >= 1`
157
+ // gate used by `isExecutionTrace` and the accumulator reducer.
158
+ // The legacy `withDarwinEvolution` wrapper would otherwise
159
+ // silently drop v=2 trajectories that the new code paths emit.
160
+ if (!trajectory ||
161
+ typeof trajectory !== "object" ||
162
+ typeof trajectory.version !== "number" ||
163
+ !Number.isFinite(trajectory.version) ||
164
+ trajectory.version < 1) {
119
165
  continue;
120
166
  }
121
167
  try {
@@ -279,6 +325,14 @@ export function withDarwinEvolution(graph, opts) {
279
325
  configurable: true,
280
326
  enumerable: false,
281
327
  });
328
+ // V0.3 (S1187): stamp the sentinel so a subsequent call detects the
329
+ // double-wrap. Non-enumerable so it doesn't leak in JSON/log dumps.
330
+ Object.defineProperty(graph, DARWIN_EVOLUTION_WRAPPED, {
331
+ value: true,
332
+ writable: false,
333
+ configurable: true,
334
+ enumerable: false,
335
+ });
282
336
  }
283
337
  catch (err) {
284
338
  throw new DarwinEvolutionHookError("withDarwinEvolution: could not wrap graph.invoke / graph.stream " +
@@ -1 +1 @@
1
- {"version":3,"file":"with-darwin-evolution.js","sourceRoot":"","sources":["../src/with-darwin-evolution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"with-darwin-evolution.js","sourceRoot":"","sources":["../src/with-darwin-evolution.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "darwin-langgraph",
3
- "version": "0.2.0-alpha.1",
4
- "description": "LangGraph.js adapter for darwin-agents — wrap self-evolving Darwin agents as StateGraph nodes with zero hard deps.",
3
+ "version": "0.4.0-alpha.1",
4
+ "description": "LangGraph.js adapter for darwin-agents — wrap self-evolving Darwin agents as StateGraph nodes with zero hard deps. V0.4 adds tool-event capture, OpenTelemetry GenAI LangGraph attributes, W3C trace context, token-budget enforcement, and an accumulating trajectory annotation.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",