@langchain/langgraph 0.4.5 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @langchain/langgraph
2
2
 
3
+ ## 0.4.7
4
+
5
+ ### Patch Changes
6
+
7
+ - 60e9258: fix(langgraph): task result from stream mode debug / tasks should match format from getStateHistory / getState
8
+ - 07a5b2f: fix(langgraph): avoid accepting incorrect keys in withLangGraph
9
+ - Updated dependencies [b5f14d0]
10
+ - @langchain/langgraph-sdk@0.0.111
11
+
12
+ ## 0.4.6
13
+
14
+ ### Patch Changes
15
+
16
+ - 5f1db81: fix(langgraph): `withConfig` should accept `context`
17
+ - c53ca47: Avoid iterating on channels if no managed values are present
18
+ - a3707fb: fix(langgraph): allow `updateState` after resuming from an interrupt
19
+ - Updated dependencies [e8b4540]
20
+ - Updated dependencies [9c57526]
21
+ - @langchain/langgraph-sdk@0.0.109
22
+
3
23
  ## 0.4.5
4
24
 
5
25
  ### Patch Changes
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BaseChannel = void 0;
4
4
  exports.isBaseChannel = isBaseChannel;
5
+ exports.getOnlyChannels = getOnlyChannels;
5
6
  exports.emptyChannels = emptyChannels;
6
7
  exports.createCheckpoint = createCheckpoint;
7
8
  const langgraph_checkpoint_1 = require("@langchain/langgraph-checkpoint");
@@ -70,15 +71,32 @@ class BaseChannel {
70
71
  }
71
72
  }
72
73
  exports.BaseChannel = BaseChannel;
74
+ const IS_ONLY_BASE_CHANNEL = Symbol.for("LG_IS_ONLY_BASE_CHANNEL");
75
+ function getOnlyChannels(channels) {
76
+ // @ts-expect-error - we know it's a record of base channels
77
+ if (channels[IS_ONLY_BASE_CHANNEL] === true)
78
+ return channels;
79
+ const newChannels = {};
80
+ for (const k in channels) {
81
+ if (!Object.prototype.hasOwnProperty.call(channels, k))
82
+ continue;
83
+ const value = channels[k];
84
+ if (isBaseChannel(value))
85
+ newChannels[k] = value;
86
+ }
87
+ Object.assign(newChannels, { [IS_ONLY_BASE_CHANNEL]: true });
88
+ return newChannels;
89
+ }
73
90
  function emptyChannels(channels, checkpoint) {
74
- const filteredChannels = Object.fromEntries(Object.entries(channels).filter(([, value]) => isBaseChannel(value)));
91
+ const filteredChannels = getOnlyChannels(channels);
75
92
  const newChannels = {};
76
93
  for (const k in filteredChannels) {
77
- if (Object.prototype.hasOwnProperty.call(filteredChannels, k)) {
78
- const channelValue = checkpoint.channel_values[k];
79
- newChannels[k] = filteredChannels[k].fromCheckpoint(channelValue);
80
- }
94
+ if (!Object.prototype.hasOwnProperty.call(filteredChannels, k))
95
+ continue;
96
+ const channelValue = checkpoint.channel_values[k];
97
+ newChannels[k] = filteredChannels[k].fromCheckpoint(channelValue);
81
98
  }
99
+ Object.assign(newChannels, { [IS_ONLY_BASE_CHANNEL]: true });
82
100
  return newChannels;
83
101
  }
84
102
  function createCheckpoint(checkpoint, channels, step, options) {
@@ -89,7 +107,9 @@ function createCheckpoint(checkpoint, channels, step, options) {
89
107
  }
90
108
  else {
91
109
  values = {};
92
- for (const k of Object.keys(channels)) {
110
+ for (const k in channels) {
111
+ if (!Object.prototype.hasOwnProperty.call(channels, k))
112
+ continue;
93
113
  try {
94
114
  values[k] = channels[k].checkpoint();
95
115
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -104,13 +124,19 @@ function createCheckpoint(checkpoint, channels, step, options) {
104
124
  }
105
125
  }
106
126
  }
127
+ const newVersionsSeen = {};
128
+ for (const k in checkpoint.versions_seen) {
129
+ if (!Object.prototype.hasOwnProperty.call(checkpoint.versions_seen, k))
130
+ continue;
131
+ newVersionsSeen[k] = { ...checkpoint.versions_seen[k] };
132
+ }
107
133
  return {
108
134
  v: 4,
109
135
  id: options?.id ?? (0, langgraph_checkpoint_1.uuid6)(step),
110
136
  ts: new Date().toISOString(),
111
137
  channel_values: values,
112
138
  channel_versions: { ...checkpoint.channel_versions },
113
- versions_seen: (0, langgraph_checkpoint_1.deepCopy)(checkpoint.versions_seen),
139
+ versions_seen: newVersionsSeen,
114
140
  };
115
141
  }
116
142
  //# sourceMappingURL=base.js.map
@@ -68,6 +68,7 @@ export declare abstract class BaseChannel<ValueType = unknown, UpdateType = unkn
68
68
  */
69
69
  isAvailable(): boolean;
70
70
  }
71
+ export declare function getOnlyChannels(channels: Record<string, BaseChannel>): Record<string, BaseChannel>;
71
72
  export declare function emptyChannels<Cc extends Record<string, BaseChannel>>(channels: Cc, checkpoint: ReadonlyCheckpoint): Cc;
72
73
  export declare function createCheckpoint<ValueType>(checkpoint: ReadonlyCheckpoint, channels: Record<string, BaseChannel<ValueType>> | undefined, step: number, options?: {
73
74
  id?: string;
@@ -1,4 +1,4 @@
1
- import { deepCopy, uuid6, } from "@langchain/langgraph-checkpoint";
1
+ import { uuid6, } from "@langchain/langgraph-checkpoint";
2
2
  import { EmptyChannelError } from "../errors.js";
3
3
  export function isBaseChannel(obj) {
4
4
  return obj != null && obj.lg_is_channel === true;
@@ -63,15 +63,32 @@ export class BaseChannel {
63
63
  }
64
64
  }
65
65
  }
66
+ const IS_ONLY_BASE_CHANNEL = Symbol.for("LG_IS_ONLY_BASE_CHANNEL");
67
+ export function getOnlyChannels(channels) {
68
+ // @ts-expect-error - we know it's a record of base channels
69
+ if (channels[IS_ONLY_BASE_CHANNEL] === true)
70
+ return channels;
71
+ const newChannels = {};
72
+ for (const k in channels) {
73
+ if (!Object.prototype.hasOwnProperty.call(channels, k))
74
+ continue;
75
+ const value = channels[k];
76
+ if (isBaseChannel(value))
77
+ newChannels[k] = value;
78
+ }
79
+ Object.assign(newChannels, { [IS_ONLY_BASE_CHANNEL]: true });
80
+ return newChannels;
81
+ }
66
82
  export function emptyChannels(channels, checkpoint) {
67
- const filteredChannels = Object.fromEntries(Object.entries(channels).filter(([, value]) => isBaseChannel(value)));
83
+ const filteredChannels = getOnlyChannels(channels);
68
84
  const newChannels = {};
69
85
  for (const k in filteredChannels) {
70
- if (Object.prototype.hasOwnProperty.call(filteredChannels, k)) {
71
- const channelValue = checkpoint.channel_values[k];
72
- newChannels[k] = filteredChannels[k].fromCheckpoint(channelValue);
73
- }
86
+ if (!Object.prototype.hasOwnProperty.call(filteredChannels, k))
87
+ continue;
88
+ const channelValue = checkpoint.channel_values[k];
89
+ newChannels[k] = filteredChannels[k].fromCheckpoint(channelValue);
74
90
  }
91
+ Object.assign(newChannels, { [IS_ONLY_BASE_CHANNEL]: true });
75
92
  return newChannels;
76
93
  }
77
94
  export function createCheckpoint(checkpoint, channels, step, options) {
@@ -82,7 +99,9 @@ export function createCheckpoint(checkpoint, channels, step, options) {
82
99
  }
83
100
  else {
84
101
  values = {};
85
- for (const k of Object.keys(channels)) {
102
+ for (const k in channels) {
103
+ if (!Object.prototype.hasOwnProperty.call(channels, k))
104
+ continue;
86
105
  try {
87
106
  values[k] = channels[k].checkpoint();
88
107
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -97,13 +116,19 @@ export function createCheckpoint(checkpoint, channels, step, options) {
97
116
  }
98
117
  }
99
118
  }
119
+ const newVersionsSeen = {};
120
+ for (const k in checkpoint.versions_seen) {
121
+ if (!Object.prototype.hasOwnProperty.call(checkpoint.versions_seen, k))
122
+ continue;
123
+ newVersionsSeen[k] = { ...checkpoint.versions_seen[k] };
124
+ }
100
125
  return {
101
126
  v: 4,
102
127
  id: options?.id ?? uuid6(step),
103
128
  ts: new Date().toISOString(),
104
129
  channel_values: values,
105
130
  channel_versions: { ...checkpoint.channel_versions },
106
- versions_seen: deepCopy(checkpoint.versions_seen),
131
+ versions_seen: newVersionsSeen,
107
132
  };
108
133
  }
109
134
  //# sourceMappingURL=base.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/channels/base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/channels/base.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,6 @@ export interface SchemaMeta<TValue = any, TUpdate = TValue> {
23
23
  fn: (a: TValue, b: TUpdate) => TValue;
24
24
  };
25
25
  default?: () => TValue;
26
- [key: string]: unknown;
27
26
  }
28
27
  /**
29
28
  * A registry for storing and managing metadata associated with schemas.
@@ -1 +1 @@
1
- {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../src/graph/zod/meta.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,wBAAwB,EACxB,sBAAsB,EACtB,0BAA0B,EAC1B,uBAAuB,EAEvB,aAAa,EACb,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,CAAC;AA8DpD;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAA/B;QACE;;;WAGG;QACH;;;;mBAAO,IAAI,OAAO,EAA8B;WAAC;QAEjD;;;WAGG;QACH;;;;mBAAkB,IAAI,GAAG,EAAmD;WAAC;IA0K/E,CAAC;IAxKC;;;;;;OAMG;IACH,GAAG,CACD,MAA8B;QAE9B,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CACJ,MAA8B,EAC9B,SAEgC;QAEhC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAkB,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAsB;QAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,MAAsB;QACxB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAED;;;;;;;;;OASG;IACH,oBAAoB,CAClB,MAAS;QAET,MAAM,QAAQ,GAAG,EAAiC,CAAC;QACnD,MAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;QAC/C,KAAK,MAAM,CAAC,GAAG,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACrC,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;gBAClB,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,uBAAuB,CAEzC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC;YAClC,CAAC;QACH,CAAC;QACD,OAAO,QAA0C,CAAC;IACpD,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,yBAAyB,CACvB,MAAS,EACT,OAaC;QAED,+DAA+D;QAC/D,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtC,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,2EAA2E;QAC3E,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;aACrC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;aAC7B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;aACtC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aAC5B,IAAI,CAAC,GAAG,CAAC,CAAC;QAEb,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,OAAO,EAAE,CAAC;QAClE,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAO,CAAC;QAEtD,IAAI,cAAc,GAAqB,MAAM,CAAC;QAE9C,IACE,OAAO,CAAC,iBAAiB;YACzB,OAAO,CAAC,iCAAiC,EACzC,CAAC;YACD,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CACpC,wBAAwB,CAAC,MAAM,CAAC,CACjC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,EAAE;gBACtB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC9B,IAAI,YAAY,GAAG,OAAO,CAAC,iBAAiB;oBAC1C,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,IAAI,MAAM;oBACjC,CAAC,CAAC,MAAM,CAAC;gBACX,IACE,OAAO,CAAC,iCAAiC;oBACzC,IAAI,EAAE,eAAe,EACrB,CAAC;oBACD,MAAM,WAAW,GACf,oBAAoB,CAAC,YAAY,CAAC,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;oBACrE,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;wBAC/B,GAAG,IAAI,CAAC,eAAe;wBACvB,WAAW;qBACZ,CAAC,CAAC;oBACH,YAAY,GAAG,YAAY,CAAC,QAAQ,CAClC,GAAG,8BAA8B,GAAG,SAAS,EAAE,CAChD,CAAC;gBACJ,CAAC;gBACD,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;YACH,cAAc,GAAG,sBAAsB,CACrC,MAAM,EACN,MAAM,CAAC,WAAW,CAAC,eAAe,CAAC,CACpC,CAAC;YACF,IAAI,aAAa,CAAC,cAAc,CAAC,EAAE,CAAC;gBAClC,cAAc,CAAC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,cAAc,GAAG,uBAAuB,CAAC,cAAc,CAAC,CAAC;QAC3D,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAClC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,cAAc,CAAC;IACxB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAkB3D,MAAM,UAAU,aAAa,CAK3B,MAAe,EACf,IAAiC;IAEjC,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClC,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;QAC9D,IAAI,kBAAkB,IAAI,IAAI,EAAE,CAAC;YAC/B,6CAA6C;YAC7C,IAAI,CAAC,OAAO,GAAG,kBAAkB,CAAC;QACpC,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE;YAC9C,iBAAiB,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,MAAM;SAClD,CAAC,CAAC;QACH,kBAAkB,CAAC,MAAM,CAAC,iBAAiB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,iBAAiB,CAAC;IAC3B,CAAC;SAAM,CAAC;QACN,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"meta.js","sourceRoot":"","sources":["../../../src/graph/zod/meta.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,9 @@ import { type ReducedZodChannel, type SchemaMeta, type SchemaMetaRegistry } from
12
12
  * @template Meta - The type of metadata associated with each schema.
13
13
  * @template Schema - The Zod schema type.
14
14
  */
15
- export declare class LanggraphZodMetaRegistry<Meta extends SchemaMeta = SchemaMeta, Schema extends $ZodType = $ZodType> extends $ZodRegistry<Meta, Schema> {
15
+ export declare class LanggraphZodMetaRegistry<Meta extends SchemaMeta = SchemaMeta, Schema extends $ZodType = $ZodType> extends $ZodRegistry<Meta & {
16
+ [key: string]: unknown;
17
+ }, Schema> {
16
18
  protected parent: SchemaMetaRegistry;
17
19
  /**
18
20
  * Creates a new LanggraphZodMetaRegistry instance.
@@ -20,7 +22,13 @@ export declare class LanggraphZodMetaRegistry<Meta extends SchemaMeta = SchemaMe
20
22
  * @param parent - The base SchemaMetaRegistry to use for metadata storage.
21
23
  */
22
24
  constructor(parent: SchemaMetaRegistry);
23
- add<S extends Schema>(schema: S, ..._meta: undefined extends Meta ? [$replace<Meta, S>?] : [$replace<Meta, S>]): this;
25
+ add<S extends Schema>(schema: S, ..._meta: undefined extends Meta & {
26
+ [key: string]: unknown;
27
+ } ? [$replace<Meta & {
28
+ [key: string]: unknown;
29
+ }, S>?] : [$replace<Meta & {
30
+ [key: string]: unknown;
31
+ }, S>]): this;
24
32
  }
25
33
  declare module "zod/v4" {
26
34
  interface ZodType<out Output = unknown, out Input = unknown, out Internals extends core.$ZodTypeInternals<Output, Input> = core.$ZodTypeInternals<Output, Input>> extends core.$ZodType<Output, Input, Internals> {
@@ -1 +1 @@
1
- {"version":3,"file":"zod-registry.js","sourceRoot":"","sources":["../../../src/graph/zod/zod-registry.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAY,YAAY,EAAY,MAAM,aAAa,CAAC;AAC/D,OAAO,EAIL,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;GAUG;AACH,MAAM,OAAO,wBAGX,SAAQ,YAA0B;IAClC;;;;OAIG;IACH,YAAsB,MAA0B;QAC9C,KAAK,EAAE,CAAC;QADE;;;;mBAAU,MAAM;WAAoB;QAE9C,4CAA4C;QAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAA+C,CAAC;IAC1E,CAAC;IAED,GAAG,CACD,MAAS,EACT,GAAG,KAEoB;QAEvB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,SAAS,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;YACrC,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAC9D,IAAI,kBAAkB,IAAI,IAAI,EAAE,CAAC;gBAC/B,6CAA6C;gBAC7C,SAAS,CAAC,OAAO,GAAG,kBAAkB,CAAC;YACzC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC;IACrC,CAAC;CACF;AAoDD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC,kBAAkB,CAAC,CAAC"}
1
+ {"version":3,"file":"zod-registry.js","sourceRoot":"","sources":["../../../src/graph/zod/zod-registry.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAY,YAAY,EAAY,MAAM,aAAa,CAAC;AAC/D,OAAO,EAIL,kBAAkB,GACnB,MAAM,WAAW,CAAC;AAEnB;;;;;;;;;;GAUG;AACH,MAAM,OAAO,wBAGX,SAAQ,YAAuD;IAC/D;;;;OAIG;IACH,YAAsB,MAA0B;QAC9C,KAAK,EAAE,CAAC;QADE;;;;mBAAU,MAAM;WAAoB;QAE9C,4CAA4C;QAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAGvB,CAAC;IACJ,CAAC;IAED,GAAG,CACD,MAAS,EACT,GAAG,KAEiD;QAEpD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,SAAS,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC;YACrC,MAAM,kBAAkB,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;YAC9D,IAAI,kBAAkB,IAAI,IAAI,EAAE,CAAC;gBAC/B,6CAA6C;gBAC7C,SAAS,CAAC,OAAO,GAAG,kBAAkB,CAAC;YACzC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC;IACrC,CAAC;CACF;AAoDD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,wBAAwB,CAAC,kBAAkB,CAAC,CAAC"}
@@ -22,20 +22,33 @@ const increment = (current) => {
22
22
  return current !== undefined ? current + 1 : 1;
23
23
  };
24
24
  exports.increment = increment;
25
- function shouldInterrupt(checkpoint, interruptNodes, tasks) {
26
- const versionValues = Object.values(checkpoint.channel_versions);
27
- const versionType = versionValues.length > 0 ? typeof versionValues[0] : undefined;
28
- let nullVersion;
29
- if (versionType === "number") {
30
- nullVersion = 0;
31
- }
32
- else if (versionType === "string") {
33
- nullVersion = "";
25
+ // Avoids unnecessary double iteration
26
+ function maxChannelMapVersion(channelVersions) {
27
+ let maxVersion;
28
+ for (const chan in channelVersions) {
29
+ if (!Object.prototype.hasOwnProperty.call(channelVersions, chan))
30
+ continue;
31
+ if (maxVersion == null) {
32
+ maxVersion = channelVersions[chan];
33
+ }
34
+ else {
35
+ maxVersion = (0, langgraph_checkpoint_1.maxChannelVersion)(maxVersion, channelVersions[chan]);
36
+ }
34
37
  }
38
+ return maxVersion;
39
+ }
40
+ function shouldInterrupt(checkpoint, interruptNodes, tasks) {
41
+ const nullVersion = (0, index_js_1.getNullChannelVersion)(checkpoint.channel_versions);
35
42
  const seen = checkpoint.versions_seen[constants_js_1.INTERRUPT] ?? {};
36
- const anyChannelUpdated = Object.entries(checkpoint.channel_versions).some(([chan, version]) => {
37
- return version > (seen[chan] ?? nullVersion);
38
- });
43
+ let anyChannelUpdated = false;
44
+ for (const chan in checkpoint.channel_versions) {
45
+ if (!Object.prototype.hasOwnProperty.call(checkpoint.channel_versions, chan))
46
+ continue;
47
+ if (checkpoint.channel_versions[chan] > (seen[chan] ?? nullVersion)) {
48
+ anyChannelUpdated = true;
49
+ break;
50
+ }
51
+ }
39
52
  const anyTriggeredNodeInInterruptNodes = tasks.some((task) => interruptNodes === "*"
40
53
  ? !task.config?.tags?.includes(constants_js_1.TAG_HIDDEN)
41
54
  : interruptNodes.includes(task.name));
@@ -115,7 +128,7 @@ getNextVersion, triggerToNodes) {
115
128
  // so we don't do anything other than update the channels written to
116
129
  const bumpStep = tasks.some((task) => task.triggers.length > 0);
117
130
  // Filter out non instances of BaseChannel
118
- const onlyChannels = Object.fromEntries(Object.entries(channels).filter(([_, value]) => (0, base_js_1.isBaseChannel)(value)));
131
+ const onlyChannels = (0, base_js_1.getOnlyChannels)(channels);
119
132
  // Update seen versions
120
133
  for (const task of tasks) {
121
134
  checkpoint.versions_seen[task.name] ??= {};
@@ -127,10 +140,7 @@ getNextVersion, triggerToNodes) {
127
140
  }
128
141
  }
129
142
  // Find the highest version of all channels
130
- let maxVersion;
131
- if (Object.keys(checkpoint.channel_versions).length > 0) {
132
- maxVersion = (0, langgraph_checkpoint_1.maxChannelVersion)(...Object.values(checkpoint.channel_versions));
133
- }
143
+ let maxVersion = maxChannelMapVersion(checkpoint.channel_versions);
134
144
  // Consume all channels that were read
135
145
  const channelsToConsume = new Set(tasks
136
146
  .flatMap((task) => task.triggers)
@@ -156,18 +166,15 @@ getNextVersion, triggerToNodes) {
156
166
  }
157
167
  }
158
168
  // Find the highest version of all channels
159
- // TODO: figure out why we need to do this twice (Python only does this once)
160
- maxVersion = undefined;
161
- if (Object.keys(checkpoint.channel_versions).length > 0) {
162
- maxVersion = (0, langgraph_checkpoint_1.maxChannelVersion)(...Object.values(checkpoint.channel_versions));
163
- }
169
+ maxVersion = maxChannelMapVersion(checkpoint.channel_versions);
164
170
  const updatedChannels = new Set();
165
171
  // Apply writes to channels
166
172
  for (const [chan, vals] of Object.entries(pendingWritesByChannel)) {
167
173
  if (chan in onlyChannels) {
174
+ const channel = onlyChannels[chan];
168
175
  let updated;
169
176
  try {
170
- updated = onlyChannels[chan].update(vals);
177
+ updated = channel.update(vals);
171
178
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
172
179
  }
173
180
  catch (e) {
@@ -183,23 +190,24 @@ getNextVersion, triggerToNodes) {
183
190
  if (updated && getNextVersion !== undefined) {
184
191
  checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
185
192
  // unavailable channels can't trigger tasks, so don't add them
186
- if (onlyChannels[chan].isAvailable()) {
193
+ if (channel.isAvailable())
187
194
  updatedChannels.add(chan);
188
- }
189
195
  }
190
196
  }
191
197
  }
192
198
  // Channels that weren't updated in this step are notified of a new step
193
199
  if (bumpStep) {
194
- for (const chan of Object.keys(onlyChannels)) {
195
- if (onlyChannels[chan].isAvailable() && !updatedChannels.has(chan)) {
196
- const updated = onlyChannels[chan].update([]);
200
+ for (const chan in onlyChannels) {
201
+ if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan))
202
+ continue;
203
+ const channel = onlyChannels[chan];
204
+ if (channel.isAvailable() && !updatedChannels.has(chan)) {
205
+ const updated = channel.update([]);
197
206
  if (updated && getNextVersion !== undefined) {
198
207
  checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
199
208
  // unavailable channels can't trigger tasks, so don't add them
200
- if (onlyChannels[chan].isAvailable()) {
209
+ if (channel.isAvailable())
201
210
  updatedChannels.add(chan);
202
- }
203
211
  }
204
212
  }
205
213
  }
@@ -207,13 +215,15 @@ getNextVersion, triggerToNodes) {
207
215
  // If this is (tentatively) the last superstep, notify all channels of finish
208
216
  if (bumpStep &&
209
217
  !Object.keys(triggerToNodes ?? {}).some((channel) => updatedChannels.has(channel))) {
210
- for (const chan of Object.keys(onlyChannels)) {
211
- if (onlyChannels[chan].finish() && getNextVersion !== undefined) {
218
+ for (const chan in onlyChannels) {
219
+ if (!Object.prototype.hasOwnProperty.call(onlyChannels, chan))
220
+ continue;
221
+ const channel = onlyChannels[chan];
222
+ if (channel.finish() && getNextVersion !== undefined) {
212
223
  checkpoint.channel_versions[chan] = getNextVersion(maxVersion);
213
224
  // unavailable channels can't trigger tasks, so don't add them
214
- if (onlyChannels[chan].isAvailable()) {
225
+ if (channel.isAvailable())
215
226
  updatedChannels.add(chan);
216
- }
217
227
  }
218
228
  }
219
229
  }
@@ -238,7 +248,9 @@ function _prepareNextTasks(checkpoint, pendingWrites, processes, channels, confi
238
248
  }
239
249
  // Check if any processes should be run in next step
240
250
  // If so, prepare the values to be passed to them
241
- for (const name of Object.keys(processes)) {
251
+ for (const name in processes) {
252
+ if (!Object.prototype.hasOwnProperty.call(processes, name))
253
+ continue;
242
254
  const task = _prepareSingleTask([constants_js_1.PULL, name], checkpoint, pendingWrites, processes, channels, config, forExecution, extra);
243
255
  if (task !== undefined) {
244
256
  tasks[task.id] = task;
@@ -488,17 +500,15 @@ function _prepareSingleTask(taskPath, checkpoint, pendingWrites, processes, chan
488
500
  return undefined;
489
501
  }
490
502
  const seen = checkpoint.versions_seen[name] ?? {};
491
- const triggers = proc.triggers
492
- .filter((chan) => {
493
- // here we're only checking if the channel is not empty
494
- const isEmptyChannelError = !channels[chan].isAvailable();
495
- return (!isEmptyChannelError &&
496
- (checkpoint.channel_versions[chan] ?? nullVersion) >
497
- (seen[chan] ?? nullVersion));
498
- })
499
- .sort();
503
+ // Find the first trigger that is available and has a new version
504
+ const trigger = proc.triggers.find((chan) => {
505
+ if (!channels[chan].isAvailable())
506
+ return false;
507
+ return ((checkpoint.channel_versions[chan] ?? nullVersion) >
508
+ (seen[chan] ?? nullVersion));
509
+ });
500
510
  // If any of the channels read by this process were updated
501
- if (triggers.length > 0) {
511
+ if (trigger !== undefined) {
502
512
  const val = _procInput(proc, channels, forExecution);
503
513
  if (val === undefined) {
504
514
  return undefined;
@@ -511,13 +521,13 @@ function _prepareSingleTask(taskPath, checkpoint, pendingWrites, processes, chan
511
521
  step.toString(),
512
522
  name,
513
523
  constants_js_1.PULL,
514
- triggers,
524
+ [trigger],
515
525
  ]), checkpoint.id);
516
526
  const taskCheckpointNamespace = `${checkpointNamespace}${constants_js_1.CHECKPOINT_NAMESPACE_END}${taskId}`;
517
527
  let metadata = {
518
528
  langgraph_step: step,
519
529
  langgraph_node: name,
520
- langgraph_triggers: triggers,
530
+ langgraph_triggers: [trigger],
521
531
  langgraph_path: taskPath,
522
532
  langgraph_checkpoint_ns: taskCheckpointNamespace,
523
533
  };
@@ -550,7 +560,7 @@ function _prepareSingleTask(taskPath, checkpoint, pendingWrites, processes, chan
550
560
  [constants_js_1.CONFIG_KEY_READ]: (select_, fresh_ = false) => _localRead(checkpoint, channels, {
551
561
  name,
552
562
  writes: writes,
553
- triggers,
563
+ triggers: [trigger],
554
564
  path: taskPath,
555
565
  }, select_, fresh_),
556
566
  [constants_js_1.CONFIG_KEY_CHECKPOINTER]: checkpointer ?? configurable[constants_js_1.CONFIG_KEY_CHECKPOINTER],
@@ -570,7 +580,7 @@ function _prepareSingleTask(taskPath, checkpoint, pendingWrites, processes, chan
570
580
  checkpoint_ns: taskCheckpointNamespace,
571
581
  },
572
582
  }),
573
- triggers,
583
+ triggers: [trigger],
574
584
  retry_policy: proc.retryPolicy,
575
585
  cache_key: proc.cachePolicy
576
586
  ? {