@langchain/langgraph-sdk 1.8.3 → 1.8.5
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/dist/ui/class-messages.d.cts +26 -5
- package/dist/ui/class-messages.d.cts.map +1 -1
- package/dist/ui/class-messages.d.ts +26 -5
- package/dist/ui/class-messages.d.ts.map +1 -1
- package/dist/ui/hitl-interrupt-payload.cjs +25 -17
- package/dist/ui/hitl-interrupt-payload.cjs.map +1 -1
- package/dist/ui/hitl-interrupt-payload.d.cts +3 -2
- package/dist/ui/hitl-interrupt-payload.d.cts.map +1 -1
- package/dist/ui/hitl-interrupt-payload.d.ts +3 -2
- package/dist/ui/hitl-interrupt-payload.d.ts.map +1 -1
- package/dist/ui/hitl-interrupt-payload.js +25 -17
- package/dist/ui/hitl-interrupt-payload.js.map +1 -1
- package/dist/ui/interrupts.cjs +2 -1
- package/dist/ui/interrupts.cjs.map +1 -1
- package/dist/ui/interrupts.d.cts +2 -1
- package/dist/ui/interrupts.d.cts.map +1 -1
- package/dist/ui/interrupts.d.ts +2 -1
- package/dist/ui/interrupts.d.ts.map +1 -1
- package/dist/ui/interrupts.js +2 -1
- package/dist/ui/interrupts.js.map +1 -1
- package/dist/ui/messages.cjs.map +1 -1
- package/dist/ui/messages.d.cts +5 -3
- package/dist/ui/messages.d.cts.map +1 -1
- package/dist/ui/messages.d.ts +5 -3
- package/dist/ui/messages.d.ts.map +1 -1
- package/dist/ui/messages.js.map +1 -1
- package/dist/ui/stream/index.d.cts +0 -1
- package/dist/ui/stream/index.d.cts.map +1 -1
- package/dist/ui/stream/index.d.ts +0 -1
- package/dist/ui/stream/index.d.ts.map +1 -1
- package/dist/ui/subagents.cjs +6 -9
- package/dist/ui/subagents.cjs.map +1 -1
- package/dist/ui/subagents.d.cts +5 -8
- package/dist/ui/subagents.d.cts.map +1 -1
- package/dist/ui/subagents.d.ts +5 -8
- package/dist/ui/subagents.d.ts.map +1 -1
- package/dist/ui/subagents.js +6 -9
- package/dist/ui/subagents.js.map +1 -1
- package/package.json +5 -5
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { ThreadState } from "../schema.cjs";
|
|
1
2
|
import { DefaultToolCall, ToolCallWithResult } from "../types.messages.cjs";
|
|
2
3
|
import { AcceptBaseMessages, MessageMetadata, SubagentStreamInterface } from "./types.cjs";
|
|
3
|
-
import {
|
|
4
|
+
import { QueueInterface } from "./queue.cjs";
|
|
5
|
+
import { HistoryWithBaseMessages, StateWithBaseMessages } from "./messages.cjs";
|
|
4
6
|
import { AIMessage, BaseMessage, ToolMessage } from "@langchain/core/messages";
|
|
5
7
|
|
|
6
8
|
//#region src/ui/class-messages.d.ts
|
|
@@ -22,9 +24,23 @@ type ClassToolCallWithResult<T> = T extends ToolCallWithResult<infer TC, unknown
|
|
|
22
24
|
* Framework SDKs use class message instances end-to-end; this type is
|
|
23
25
|
* the subagent counterpart of {@link WithClassMessages}.
|
|
24
26
|
*/
|
|
25
|
-
type ClassSubagentStreamInterface<StateType = Record<string, unknown>, ToolCall = DefaultToolCall, SubagentName extends string = string> = Omit<SubagentStreamInterface<StateType, ToolCall, SubagentName>, "messages"> & {
|
|
27
|
+
type ClassSubagentStreamInterface<StateType = Record<string, unknown>, ToolCall = DefaultToolCall, SubagentName extends string = string> = Omit<SubagentStreamInterface<StateType, ToolCall, SubagentName>, "messages" | "values"> & {
|
|
26
28
|
messages: BaseMessage[];
|
|
29
|
+
values: StateWithBaseMessages<StateType>;
|
|
27
30
|
};
|
|
31
|
+
type StreamState<T> = T extends {
|
|
32
|
+
getMessagesMetadata: (message: unknown, index?: number) => MessageMetadata<infer S> | undefined;
|
|
33
|
+
} ? S extends Record<string, unknown> ? S : Record<string, unknown> : T extends {
|
|
34
|
+
history: ThreadState<infer S>[];
|
|
35
|
+
} ? S extends Record<string, unknown> ? S : Record<string, unknown> : T extends {
|
|
36
|
+
values: infer V;
|
|
37
|
+
} ? V extends Record<string, unknown> ? V : Record<string, unknown> : Record<string, unknown>;
|
|
38
|
+
type ClassOptimisticValues<StateType> = StateType extends Record<string, unknown> ? Partial<StateWithBaseMessages<StateType>> | ((prev: StateWithBaseMessages<StateType>) => Partial<StateWithBaseMessages<StateType>>) : never;
|
|
39
|
+
type WithClassSubmitOptions<StateType, Options> = Options extends {
|
|
40
|
+
optimisticValues?: unknown;
|
|
41
|
+
} ? Omit<Options, "optimisticValues"> & {
|
|
42
|
+
optimisticValues?: ClassOptimisticValues<StateType>;
|
|
43
|
+
} : Options;
|
|
28
44
|
/**
|
|
29
45
|
* Maps a stream interface to use `@langchain/core` {@link BaseMessage}
|
|
30
46
|
* class instances instead of plain SDK {@link Message} objects.
|
|
@@ -43,15 +59,20 @@ type ClassSubagentStreamInterface<StateType = Record<string, unknown>, ToolCall
|
|
|
43
59
|
* additional `Ref`/`ComputedRef` wrapping on top of the shared helper
|
|
44
60
|
* types.
|
|
45
61
|
*/
|
|
46
|
-
type WithClassMessages<T> = Omit<T, "messages" | "history" | "getMessagesMetadata" | "toolCalls" | "getToolCalls" | "submit" | "subagents" | "activeSubagents" | "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage"> & {
|
|
62
|
+
type WithClassMessages<T> = Omit<T, "messages" | "values" | "history" | "getMessagesMetadata" | "toolCalls" | "getToolCalls" | "submit" | "queue" | "subagents" | "activeSubagents" | "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage"> & {
|
|
47
63
|
messages: BaseMessage[];
|
|
48
|
-
|
|
64
|
+
values: StateWithBaseMessages<StreamState<T>>;
|
|
65
|
+
getMessagesMetadata: (message: BaseMessage, index?: number) => MessageMetadata<StateWithBaseMessages<StreamState<T>>> | undefined;
|
|
49
66
|
} & ("history" extends keyof T ? {
|
|
50
67
|
history: HistoryWithBaseMessages<T["history"]>;
|
|
51
68
|
} : unknown) & ("submit" extends keyof T ? {
|
|
52
69
|
submit: T extends {
|
|
53
70
|
submit: (values: infer V, options?: infer O) => infer Ret;
|
|
54
|
-
} ? (values: AcceptBaseMessages<Exclude<V, null | undefined>> | null | undefined, options?: O) => Ret : never;
|
|
71
|
+
} ? (values: AcceptBaseMessages<Exclude<V, null | undefined>> | null | undefined, options?: WithClassSubmitOptions<StreamState<T>, O>) => Ret : never;
|
|
72
|
+
} : unknown) & ("queue" extends keyof T ? {
|
|
73
|
+
queue: T extends {
|
|
74
|
+
queue: QueueInterface<infer S, infer O>;
|
|
75
|
+
} ? QueueInterface<StateWithBaseMessages<S>, WithClassSubmitOptions<S, O>> : never;
|
|
55
76
|
} : unknown) & ("toolCalls" extends keyof T ? {
|
|
56
77
|
toolCalls: T extends {
|
|
57
78
|
toolCalls: (infer TC)[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-messages.d.cts","names":[],"sources":["../../src/ui/class-messages.ts"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"class-messages.d.cts","names":[],"sources":["../../src/ui/class-messages.ts"],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { ThreadState } from "../schema.js";
|
|
1
2
|
import { DefaultToolCall, ToolCallWithResult } from "../types.messages.js";
|
|
2
3
|
import { AcceptBaseMessages, MessageMetadata, SubagentStreamInterface } from "./types.js";
|
|
3
|
-
import {
|
|
4
|
+
import { QueueInterface } from "./queue.js";
|
|
5
|
+
import { HistoryWithBaseMessages, StateWithBaseMessages } from "./messages.js";
|
|
4
6
|
import { AIMessage, BaseMessage, ToolMessage } from "@langchain/core/messages";
|
|
5
7
|
|
|
6
8
|
//#region src/ui/class-messages.d.ts
|
|
@@ -22,9 +24,23 @@ type ClassToolCallWithResult<T> = T extends ToolCallWithResult<infer TC, unknown
|
|
|
22
24
|
* Framework SDKs use class message instances end-to-end; this type is
|
|
23
25
|
* the subagent counterpart of {@link WithClassMessages}.
|
|
24
26
|
*/
|
|
25
|
-
type ClassSubagentStreamInterface<StateType = Record<string, unknown>, ToolCall = DefaultToolCall, SubagentName extends string = string> = Omit<SubagentStreamInterface<StateType, ToolCall, SubagentName>, "messages"> & {
|
|
27
|
+
type ClassSubagentStreamInterface<StateType = Record<string, unknown>, ToolCall = DefaultToolCall, SubagentName extends string = string> = Omit<SubagentStreamInterface<StateType, ToolCall, SubagentName>, "messages" | "values"> & {
|
|
26
28
|
messages: BaseMessage[];
|
|
29
|
+
values: StateWithBaseMessages<StateType>;
|
|
27
30
|
};
|
|
31
|
+
type StreamState<T> = T extends {
|
|
32
|
+
getMessagesMetadata: (message: unknown, index?: number) => MessageMetadata<infer S> | undefined;
|
|
33
|
+
} ? S extends Record<string, unknown> ? S : Record<string, unknown> : T extends {
|
|
34
|
+
history: ThreadState<infer S>[];
|
|
35
|
+
} ? S extends Record<string, unknown> ? S : Record<string, unknown> : T extends {
|
|
36
|
+
values: infer V;
|
|
37
|
+
} ? V extends Record<string, unknown> ? V : Record<string, unknown> : Record<string, unknown>;
|
|
38
|
+
type ClassOptimisticValues<StateType> = StateType extends Record<string, unknown> ? Partial<StateWithBaseMessages<StateType>> | ((prev: StateWithBaseMessages<StateType>) => Partial<StateWithBaseMessages<StateType>>) : never;
|
|
39
|
+
type WithClassSubmitOptions<StateType, Options> = Options extends {
|
|
40
|
+
optimisticValues?: unknown;
|
|
41
|
+
} ? Omit<Options, "optimisticValues"> & {
|
|
42
|
+
optimisticValues?: ClassOptimisticValues<StateType>;
|
|
43
|
+
} : Options;
|
|
28
44
|
/**
|
|
29
45
|
* Maps a stream interface to use `@langchain/core` {@link BaseMessage}
|
|
30
46
|
* class instances instead of plain SDK {@link Message} objects.
|
|
@@ -43,15 +59,20 @@ type ClassSubagentStreamInterface<StateType = Record<string, unknown>, ToolCall
|
|
|
43
59
|
* additional `Ref`/`ComputedRef` wrapping on top of the shared helper
|
|
44
60
|
* types.
|
|
45
61
|
*/
|
|
46
|
-
type WithClassMessages<T> = Omit<T, "messages" | "history" | "getMessagesMetadata" | "toolCalls" | "getToolCalls" | "submit" | "subagents" | "activeSubagents" | "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage"> & {
|
|
62
|
+
type WithClassMessages<T> = Omit<T, "messages" | "values" | "history" | "getMessagesMetadata" | "toolCalls" | "getToolCalls" | "submit" | "queue" | "subagents" | "activeSubagents" | "getSubagent" | "getSubagentsByType" | "getSubagentsByMessage"> & {
|
|
47
63
|
messages: BaseMessage[];
|
|
48
|
-
|
|
64
|
+
values: StateWithBaseMessages<StreamState<T>>;
|
|
65
|
+
getMessagesMetadata: (message: BaseMessage, index?: number) => MessageMetadata<StateWithBaseMessages<StreamState<T>>> | undefined;
|
|
49
66
|
} & ("history" extends keyof T ? {
|
|
50
67
|
history: HistoryWithBaseMessages<T["history"]>;
|
|
51
68
|
} : unknown) & ("submit" extends keyof T ? {
|
|
52
69
|
submit: T extends {
|
|
53
70
|
submit: (values: infer V, options?: infer O) => infer Ret;
|
|
54
|
-
} ? (values: AcceptBaseMessages<Exclude<V, null | undefined>> | null | undefined, options?: O) => Ret : never;
|
|
71
|
+
} ? (values: AcceptBaseMessages<Exclude<V, null | undefined>> | null | undefined, options?: WithClassSubmitOptions<StreamState<T>, O>) => Ret : never;
|
|
72
|
+
} : unknown) & ("queue" extends keyof T ? {
|
|
73
|
+
queue: T extends {
|
|
74
|
+
queue: QueueInterface<infer S, infer O>;
|
|
75
|
+
} ? QueueInterface<StateWithBaseMessages<S>, WithClassSubmitOptions<S, O>> : never;
|
|
55
76
|
} : unknown) & ("toolCalls" extends keyof T ? {
|
|
56
77
|
toolCalls: T extends {
|
|
57
78
|
toolCalls: (infer TC)[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"class-messages.d.ts","names":[],"sources":["../../src/ui/class-messages.ts"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"file":"class-messages.d.ts","names":[],"sources":["../../src/ui/class-messages.ts"],"mappings":"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"}
|
|
@@ -5,42 +5,50 @@
|
|
|
5
5
|
* camelCase. Normalize known HITL fields on interrupt payloads at read time.
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
|
-
* Copy a plain object
|
|
8
|
+
* Copy a plain object and expose both casing styles for a field.
|
|
9
|
+
*
|
|
10
|
+
* camelCase is treated as canonical when both keys are present so newer
|
|
11
|
+
* consumers keep the current behavior while legacy snake_case access still
|
|
12
|
+
* resolves to the same value.
|
|
9
13
|
*/
|
|
10
|
-
function
|
|
14
|
+
function aliasCasePair(item, camel, snake) {
|
|
11
15
|
if (item === null || typeof item !== "object" || Array.isArray(item)) return item;
|
|
12
16
|
const o = item;
|
|
13
17
|
const merged = o[camel] ?? o[snake];
|
|
14
|
-
const next = {};
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
next[
|
|
18
|
+
const next = { ...o };
|
|
19
|
+
if (merged !== void 0) {
|
|
20
|
+
next[camel] = merged;
|
|
21
|
+
next[snake] = merged;
|
|
18
22
|
}
|
|
19
|
-
if (merged !== void 0) next[camel] = merged;
|
|
20
23
|
return next;
|
|
21
24
|
}
|
|
22
25
|
function mapArrayAlias(raw, camel, snake) {
|
|
23
26
|
if (!Array.isArray(raw)) return raw;
|
|
24
|
-
return raw.map((item) =>
|
|
27
|
+
return raw.map((item) => aliasCasePair(item, camel, snake));
|
|
25
28
|
}
|
|
26
29
|
/**
|
|
27
|
-
* If `value` looks like a HITL request object
|
|
28
|
-
*
|
|
30
|
+
* If `value` looks like a HITL request object, expose both the new camelCase
|
|
31
|
+
* keys and the deprecated snake_case aliases so older apps keep working while
|
|
32
|
+
* migrating to the new shape.
|
|
29
33
|
*/
|
|
30
34
|
function normalizeHitlInterruptPayload(value) {
|
|
31
35
|
if (value === null || typeof value !== "object") return value;
|
|
32
36
|
if (Array.isArray(value)) return value.map((v) => normalizeHitlInterruptPayload(v));
|
|
33
37
|
const obj = value;
|
|
34
38
|
if (!("action_requests" in obj || "actionRequests" in obj || "review_configs" in obj || "reviewConfigs" in obj)) return value;
|
|
35
|
-
const next = {};
|
|
36
|
-
for (const [k, v] of Object.entries(obj)) {
|
|
37
|
-
if (k === "action_requests" || k === "actionRequests" || k === "review_configs" || k === "reviewConfigs") continue;
|
|
38
|
-
next[k] = v;
|
|
39
|
-
}
|
|
39
|
+
const next = { ...obj };
|
|
40
40
|
const actionRequestsRaw = obj.actionRequests ?? obj.action_requests;
|
|
41
|
-
if (actionRequestsRaw !== void 0)
|
|
41
|
+
if (actionRequestsRaw !== void 0) {
|
|
42
|
+
const actionRequests = mapArrayAlias(actionRequestsRaw, "name", "action_name");
|
|
43
|
+
next.actionRequests = actionRequests;
|
|
44
|
+
next.action_requests = actionRequests;
|
|
45
|
+
}
|
|
42
46
|
const reviewConfigsRaw = obj.reviewConfigs ?? obj.review_configs;
|
|
43
|
-
if (reviewConfigsRaw !== void 0)
|
|
47
|
+
if (reviewConfigsRaw !== void 0) {
|
|
48
|
+
const reviewConfigs = mapArrayAlias(reviewConfigsRaw, "allowedDecisions", "allowed_decisions");
|
|
49
|
+
next.reviewConfigs = reviewConfigs;
|
|
50
|
+
next.review_configs = reviewConfigs;
|
|
51
|
+
}
|
|
44
52
|
return next;
|
|
45
53
|
}
|
|
46
54
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hitl-interrupt-payload.cjs","names":[],"sources":["../../src/ui/hitl-interrupt-payload.ts"],"sourcesContent":["/**\n * Human-in-the-loop interrupt values from the LangGraph API may use\n * snake_case (Python server) while JS clients and LangChain types expect\n * camelCase. Normalize known HITL fields on interrupt payloads at read time.\n */\n\n/**\n * Copy a plain object
|
|
1
|
+
{"version":3,"file":"hitl-interrupt-payload.cjs","names":[],"sources":["../../src/ui/hitl-interrupt-payload.ts"],"sourcesContent":["/**\n * Human-in-the-loop interrupt values from the LangGraph API may use\n * snake_case (Python server) while JS clients and LangChain types expect\n * camelCase. Normalize known HITL fields on interrupt payloads at read time.\n */\n\n/**\n * Copy a plain object and expose both casing styles for a field.\n *\n * camelCase is treated as canonical when both keys are present so newer\n * consumers keep the current behavior while legacy snake_case access still\n * resolves to the same value.\n */\nfunction aliasCasePair(item: unknown, camel: string, snake: string): unknown {\n if (item === null || typeof item !== \"object\" || Array.isArray(item)) {\n return item;\n }\n const o = item as Record<string, unknown>;\n const merged = o[camel] ?? o[snake];\n const next: Record<string, unknown> = { ...o };\n if (merged !== undefined) {\n next[camel] = merged;\n next[snake] = merged;\n }\n return next;\n}\n\nfunction mapArrayAlias(raw: unknown, camel: string, snake: string): unknown {\n if (!Array.isArray(raw)) return raw;\n return raw.map((item) => aliasCasePair(item, camel, snake));\n}\n\n/**\n * If `value` looks like a HITL request object, expose both the new camelCase\n * keys and the deprecated snake_case aliases so older apps keep working while\n * migrating to the new shape.\n */\nexport function normalizeHitlInterruptPayload(value: unknown): unknown {\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((v) => normalizeHitlInterruptPayload(v));\n }\n const obj = value as Record<string, unknown>;\n const isHitlLike =\n \"action_requests\" in obj ||\n \"actionRequests\" in obj ||\n \"review_configs\" in obj ||\n \"reviewConfigs\" in obj;\n if (!isHitlLike) {\n return value;\n }\n\n const next: Record<string, unknown> = { ...obj };\n\n const actionRequestsRaw = obj.actionRequests ?? obj.action_requests;\n if (actionRequestsRaw !== undefined) {\n const actionRequests = mapArrayAlias(\n actionRequestsRaw,\n \"name\",\n \"action_name\"\n );\n next.actionRequests = actionRequests;\n next.action_requests = actionRequests;\n }\n const reviewConfigsRaw = obj.reviewConfigs ?? obj.review_configs;\n if (reviewConfigsRaw !== undefined) {\n const reviewConfigs = mapArrayAlias(\n reviewConfigsRaw,\n \"allowedDecisions\",\n \"allowed_decisions\"\n );\n next.reviewConfigs = reviewConfigs;\n next.review_configs = reviewConfigs;\n }\n return next;\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,SAAS,cAAc,MAAe,OAAe,OAAwB;AAC3E,KAAI,SAAS,QAAQ,OAAO,SAAS,YAAY,MAAM,QAAQ,KAAK,CAClE,QAAO;CAET,MAAM,IAAI;CACV,MAAM,SAAS,EAAE,UAAU,EAAE;CAC7B,MAAM,OAAgC,EAAE,GAAG,GAAG;AAC9C,KAAI,WAAW,KAAA,GAAW;AACxB,OAAK,SAAS;AACd,OAAK,SAAS;;AAEhB,QAAO;;AAGT,SAAS,cAAc,KAAc,OAAe,OAAwB;AAC1E,KAAI,CAAC,MAAM,QAAQ,IAAI,CAAE,QAAO;AAChC,QAAO,IAAI,KAAK,SAAS,cAAc,MAAM,OAAO,MAAM,CAAC;;;;;;;AAQ7D,SAAgB,8BAA8B,OAAyB;AACrE,KAAI,UAAU,QAAQ,OAAO,UAAU,SACrC,QAAO;AAET,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,KAAK,MAAM,8BAA8B,EAAE,CAAC;CAE3D,MAAM,MAAM;AAMZ,KAAI,EAJF,qBAAqB,OACrB,oBAAoB,OACpB,oBAAoB,OACpB,mBAAmB,KAEnB,QAAO;CAGT,MAAM,OAAgC,EAAE,GAAG,KAAK;CAEhD,MAAM,oBAAoB,IAAI,kBAAkB,IAAI;AACpD,KAAI,sBAAsB,KAAA,GAAW;EACnC,MAAM,iBAAiB,cACrB,mBACA,QACA,cACD;AACD,OAAK,iBAAiB;AACtB,OAAK,kBAAkB;;CAEzB,MAAM,mBAAmB,IAAI,iBAAiB,IAAI;AAClD,KAAI,qBAAqB,KAAA,GAAW;EAClC,MAAM,gBAAgB,cACpB,kBACA,oBACA,oBACD;AACD,OAAK,gBAAgB;AACrB,OAAK,iBAAiB;;AAExB,QAAO"}
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* camelCase. Normalize known HITL fields on interrupt payloads at read time.
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
|
-
* If `value` looks like a HITL request object
|
|
9
|
-
*
|
|
8
|
+
* If `value` looks like a HITL request object, expose both the new camelCase
|
|
9
|
+
* keys and the deprecated snake_case aliases so older apps keep working while
|
|
10
|
+
* migrating to the new shape.
|
|
10
11
|
*/
|
|
11
12
|
declare function normalizeHitlInterruptPayload(value: unknown): unknown;
|
|
12
13
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hitl-interrupt-payload.d.cts","names":[],"sources":["../../src/ui/hitl-interrupt-payload.ts"],"mappings":";;AAqCA
|
|
1
|
+
{"version":3,"file":"hitl-interrupt-payload.d.cts","names":[],"sources":["../../src/ui/hitl-interrupt-payload.ts"],"mappings":";;AAqCA;;;;;;;;;iBAAgB,6BAAA,CAA8B,KAAA"}
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
* camelCase. Normalize known HITL fields on interrupt payloads at read time.
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
|
-
* If `value` looks like a HITL request object
|
|
9
|
-
*
|
|
8
|
+
* If `value` looks like a HITL request object, expose both the new camelCase
|
|
9
|
+
* keys and the deprecated snake_case aliases so older apps keep working while
|
|
10
|
+
* migrating to the new shape.
|
|
10
11
|
*/
|
|
11
12
|
declare function normalizeHitlInterruptPayload(value: unknown): unknown;
|
|
12
13
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hitl-interrupt-payload.d.ts","names":[],"sources":["../../src/ui/hitl-interrupt-payload.ts"],"mappings":";;AAqCA
|
|
1
|
+
{"version":3,"file":"hitl-interrupt-payload.d.ts","names":[],"sources":["../../src/ui/hitl-interrupt-payload.ts"],"mappings":";;AAqCA;;;;;;;;;iBAAgB,6BAAA,CAA8B,KAAA"}
|
|
@@ -5,42 +5,50 @@
|
|
|
5
5
|
* camelCase. Normalize known HITL fields on interrupt payloads at read time.
|
|
6
6
|
*/
|
|
7
7
|
/**
|
|
8
|
-
* Copy a plain object
|
|
8
|
+
* Copy a plain object and expose both casing styles for a field.
|
|
9
|
+
*
|
|
10
|
+
* camelCase is treated as canonical when both keys are present so newer
|
|
11
|
+
* consumers keep the current behavior while legacy snake_case access still
|
|
12
|
+
* resolves to the same value.
|
|
9
13
|
*/
|
|
10
|
-
function
|
|
14
|
+
function aliasCasePair(item, camel, snake) {
|
|
11
15
|
if (item === null || typeof item !== "object" || Array.isArray(item)) return item;
|
|
12
16
|
const o = item;
|
|
13
17
|
const merged = o[camel] ?? o[snake];
|
|
14
|
-
const next = {};
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
next[
|
|
18
|
+
const next = { ...o };
|
|
19
|
+
if (merged !== void 0) {
|
|
20
|
+
next[camel] = merged;
|
|
21
|
+
next[snake] = merged;
|
|
18
22
|
}
|
|
19
|
-
if (merged !== void 0) next[camel] = merged;
|
|
20
23
|
return next;
|
|
21
24
|
}
|
|
22
25
|
function mapArrayAlias(raw, camel, snake) {
|
|
23
26
|
if (!Array.isArray(raw)) return raw;
|
|
24
|
-
return raw.map((item) =>
|
|
27
|
+
return raw.map((item) => aliasCasePair(item, camel, snake));
|
|
25
28
|
}
|
|
26
29
|
/**
|
|
27
|
-
* If `value` looks like a HITL request object
|
|
28
|
-
*
|
|
30
|
+
* If `value` looks like a HITL request object, expose both the new camelCase
|
|
31
|
+
* keys and the deprecated snake_case aliases so older apps keep working while
|
|
32
|
+
* migrating to the new shape.
|
|
29
33
|
*/
|
|
30
34
|
function normalizeHitlInterruptPayload(value) {
|
|
31
35
|
if (value === null || typeof value !== "object") return value;
|
|
32
36
|
if (Array.isArray(value)) return value.map((v) => normalizeHitlInterruptPayload(v));
|
|
33
37
|
const obj = value;
|
|
34
38
|
if (!("action_requests" in obj || "actionRequests" in obj || "review_configs" in obj || "reviewConfigs" in obj)) return value;
|
|
35
|
-
const next = {};
|
|
36
|
-
for (const [k, v] of Object.entries(obj)) {
|
|
37
|
-
if (k === "action_requests" || k === "actionRequests" || k === "review_configs" || k === "reviewConfigs") continue;
|
|
38
|
-
next[k] = v;
|
|
39
|
-
}
|
|
39
|
+
const next = { ...obj };
|
|
40
40
|
const actionRequestsRaw = obj.actionRequests ?? obj.action_requests;
|
|
41
|
-
if (actionRequestsRaw !== void 0)
|
|
41
|
+
if (actionRequestsRaw !== void 0) {
|
|
42
|
+
const actionRequests = mapArrayAlias(actionRequestsRaw, "name", "action_name");
|
|
43
|
+
next.actionRequests = actionRequests;
|
|
44
|
+
next.action_requests = actionRequests;
|
|
45
|
+
}
|
|
42
46
|
const reviewConfigsRaw = obj.reviewConfigs ?? obj.review_configs;
|
|
43
|
-
if (reviewConfigsRaw !== void 0)
|
|
47
|
+
if (reviewConfigsRaw !== void 0) {
|
|
48
|
+
const reviewConfigs = mapArrayAlias(reviewConfigsRaw, "allowedDecisions", "allowed_decisions");
|
|
49
|
+
next.reviewConfigs = reviewConfigs;
|
|
50
|
+
next.review_configs = reviewConfigs;
|
|
51
|
+
}
|
|
44
52
|
return next;
|
|
45
53
|
}
|
|
46
54
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hitl-interrupt-payload.js","names":[],"sources":["../../src/ui/hitl-interrupt-payload.ts"],"sourcesContent":["/**\n * Human-in-the-loop interrupt values from the LangGraph API may use\n * snake_case (Python server) while JS clients and LangChain types expect\n * camelCase. Normalize known HITL fields on interrupt payloads at read time.\n */\n\n/**\n * Copy a plain object
|
|
1
|
+
{"version":3,"file":"hitl-interrupt-payload.js","names":[],"sources":["../../src/ui/hitl-interrupt-payload.ts"],"sourcesContent":["/**\n * Human-in-the-loop interrupt values from the LangGraph API may use\n * snake_case (Python server) while JS clients and LangChain types expect\n * camelCase. Normalize known HITL fields on interrupt payloads at read time.\n */\n\n/**\n * Copy a plain object and expose both casing styles for a field.\n *\n * camelCase is treated as canonical when both keys are present so newer\n * consumers keep the current behavior while legacy snake_case access still\n * resolves to the same value.\n */\nfunction aliasCasePair(item: unknown, camel: string, snake: string): unknown {\n if (item === null || typeof item !== \"object\" || Array.isArray(item)) {\n return item;\n }\n const o = item as Record<string, unknown>;\n const merged = o[camel] ?? o[snake];\n const next: Record<string, unknown> = { ...o };\n if (merged !== undefined) {\n next[camel] = merged;\n next[snake] = merged;\n }\n return next;\n}\n\nfunction mapArrayAlias(raw: unknown, camel: string, snake: string): unknown {\n if (!Array.isArray(raw)) return raw;\n return raw.map((item) => aliasCasePair(item, camel, snake));\n}\n\n/**\n * If `value` looks like a HITL request object, expose both the new camelCase\n * keys and the deprecated snake_case aliases so older apps keep working while\n * migrating to the new shape.\n */\nexport function normalizeHitlInterruptPayload(value: unknown): unknown {\n if (value === null || typeof value !== \"object\") {\n return value;\n }\n if (Array.isArray(value)) {\n return value.map((v) => normalizeHitlInterruptPayload(v));\n }\n const obj = value as Record<string, unknown>;\n const isHitlLike =\n \"action_requests\" in obj ||\n \"actionRequests\" in obj ||\n \"review_configs\" in obj ||\n \"reviewConfigs\" in obj;\n if (!isHitlLike) {\n return value;\n }\n\n const next: Record<string, unknown> = { ...obj };\n\n const actionRequestsRaw = obj.actionRequests ?? obj.action_requests;\n if (actionRequestsRaw !== undefined) {\n const actionRequests = mapArrayAlias(\n actionRequestsRaw,\n \"name\",\n \"action_name\"\n );\n next.actionRequests = actionRequests;\n next.action_requests = actionRequests;\n }\n const reviewConfigsRaw = obj.reviewConfigs ?? obj.review_configs;\n if (reviewConfigsRaw !== undefined) {\n const reviewConfigs = mapArrayAlias(\n reviewConfigsRaw,\n \"allowedDecisions\",\n \"allowed_decisions\"\n );\n next.reviewConfigs = reviewConfigs;\n next.review_configs = reviewConfigs;\n }\n return next;\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,SAAS,cAAc,MAAe,OAAe,OAAwB;AAC3E,KAAI,SAAS,QAAQ,OAAO,SAAS,YAAY,MAAM,QAAQ,KAAK,CAClE,QAAO;CAET,MAAM,IAAI;CACV,MAAM,SAAS,EAAE,UAAU,EAAE;CAC7B,MAAM,OAAgC,EAAE,GAAG,GAAG;AAC9C,KAAI,WAAW,KAAA,GAAW;AACxB,OAAK,SAAS;AACd,OAAK,SAAS;;AAEhB,QAAO;;AAGT,SAAS,cAAc,KAAc,OAAe,OAAwB;AAC1E,KAAI,CAAC,MAAM,QAAQ,IAAI,CAAE,QAAO;AAChC,QAAO,IAAI,KAAK,SAAS,cAAc,MAAM,OAAO,MAAM,CAAC;;;;;;;AAQ7D,SAAgB,8BAA8B,OAAyB;AACrE,KAAI,UAAU,QAAQ,OAAO,UAAU,SACrC,QAAO;AAET,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,MAAM,KAAK,MAAM,8BAA8B,EAAE,CAAC;CAE3D,MAAM,MAAM;AAMZ,KAAI,EAJF,qBAAqB,OACrB,oBAAoB,OACpB,oBAAoB,OACpB,mBAAmB,KAEnB,QAAO;CAGT,MAAM,OAAgC,EAAE,GAAG,KAAK;CAEhD,MAAM,oBAAoB,IAAI,kBAAkB,IAAI;AACpD,KAAI,sBAAsB,KAAA,GAAW;EACnC,MAAM,iBAAiB,cACrB,mBACA,QACA,cACD;AACD,OAAK,iBAAiB;AACtB,OAAK,kBAAkB;;CAEzB,MAAM,mBAAmB,IAAI,iBAAiB,IAAI;AAClD,KAAI,qBAAqB,KAAA,GAAW;EAClC,MAAM,gBAAgB,cACpB,kBACA,oBACA,oBACD;AACD,OAAK,gBAAgB;AACrB,OAAK,iBAAiB;;AAExB,QAAO"}
|
package/dist/ui/interrupts.cjs
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
const require_hitl_interrupt_payload = require("./hitl-interrupt-payload.cjs");
|
|
2
2
|
//#region src/ui/interrupts.ts
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Normalizes HITL interrupt payloads to expose camelCase fields plus deprecated
|
|
5
|
+
* snake_case aliases for compatibility during migration.
|
|
5
6
|
*/
|
|
6
7
|
function normalizeInterruptForClient(interrupt) {
|
|
7
8
|
if (interrupt.value === void 0) return interrupt;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interrupts.cjs","names":["normalizeHitlInterruptPayload"],"sources":["../../src/ui/interrupts.ts"],"sourcesContent":["import { normalizeHitlInterruptPayload } from \"./hitl-interrupt-payload.js\";\nimport { Interrupt, ThreadState } from \"../schema.js\";\n\n/**\n *
|
|
1
|
+
{"version":3,"file":"interrupts.cjs","names":["normalizeHitlInterruptPayload"],"sources":["../../src/ui/interrupts.ts"],"sourcesContent":["import { normalizeHitlInterruptPayload } from \"./hitl-interrupt-payload.js\";\nimport { Interrupt, ThreadState } from \"../schema.js\";\n\n/**\n * Normalizes HITL interrupt payloads to expose camelCase fields plus deprecated\n * snake_case aliases for compatibility during migration.\n */\nexport function normalizeInterruptForClient<T = unknown>(\n interrupt: Interrupt<T>\n): Interrupt<T> {\n if (interrupt.value === undefined) {\n return interrupt;\n }\n return {\n ...interrupt,\n value: normalizeHitlInterruptPayload(interrupt.value) as T,\n };\n}\n\n/**\n * Applies {@link normalizeInterruptForClient} to each interrupt.\n */\nexport function normalizeInterruptsList<T = unknown>(\n interrupts: Interrupt<T>[]\n): Interrupt<T>[] {\n return interrupts.map((i) => normalizeInterruptForClient(i));\n}\n\nexport function extractInterrupts<InterruptType = unknown>(\n values: unknown,\n options?: {\n isLoading: boolean;\n threadState: ThreadState | undefined;\n error: unknown;\n }\n): Interrupt<InterruptType> | undefined {\n if (\n typeof values === \"object\" &&\n values != null &&\n \"__interrupt__\" in values &&\n Array.isArray(values.__interrupt__)\n ) {\n const valueInterrupts = values.__interrupt__ as Interrupt<InterruptType>[];\n if (valueInterrupts.length === 0) return { when: \"breakpoint\" };\n if (valueInterrupts.length === 1) {\n return normalizeInterruptForClient(valueInterrupts[0]);\n }\n\n // TODO: fix the typing of interrupts if multiple interrupts are returned\n const normalized = valueInterrupts.map((i) =>\n normalizeInterruptForClient(i)\n );\n return normalized as unknown as Interrupt<InterruptType> | undefined;\n }\n\n // If we're deferring to old interrupt detection logic, don't show the interrupt if the stream is loading\n if (options?.isLoading) return undefined;\n\n const interrupts = options?.threadState?.tasks?.at(-1)?.interrupts;\n if (interrupts == null || interrupts.length === 0) {\n // check if there's a next task present\n const next = options?.threadState?.next ?? [];\n if (!next.length || options?.error != null) return undefined;\n return { when: \"breakpoint\" };\n }\n\n // Return only the current interrupt\n return normalizeInterruptForClient(\n interrupts.at(-1) as Interrupt<InterruptType>\n );\n}\n"],"mappings":";;;;;;AAOA,SAAgB,4BACd,WACc;AACd,KAAI,UAAU,UAAU,KAAA,EACtB,QAAO;AAET,QAAO;EACL,GAAG;EACH,OAAOA,+BAAAA,8BAA8B,UAAU,MAAM;EACtD;;;;;AAMH,SAAgB,wBACd,YACgB;AAChB,QAAO,WAAW,KAAK,MAAM,4BAA4B,EAAE,CAAC;;AAG9D,SAAgB,kBACd,QACA,SAKsC;AACtC,KACE,OAAO,WAAW,YAClB,UAAU,QACV,mBAAmB,UACnB,MAAM,QAAQ,OAAO,cAAc,EACnC;EACA,MAAM,kBAAkB,OAAO;AAC/B,MAAI,gBAAgB,WAAW,EAAG,QAAO,EAAE,MAAM,cAAc;AAC/D,MAAI,gBAAgB,WAAW,EAC7B,QAAO,4BAA4B,gBAAgB,GAAG;AAOxD,SAHmB,gBAAgB,KAAK,MACtC,4BAA4B,EAAE,CAC/B;;AAKH,KAAI,SAAS,UAAW,QAAO,KAAA;CAE/B,MAAM,aAAa,SAAS,aAAa,OAAO,GAAG,GAAG,EAAE;AACxD,KAAI,cAAc,QAAQ,WAAW,WAAW,GAAG;AAGjD,MAAI,EADS,SAAS,aAAa,QAAQ,EAAE,EACnC,UAAU,SAAS,SAAS,KAAM,QAAO,KAAA;AACnD,SAAO,EAAE,MAAM,cAAc;;AAI/B,QAAO,4BACL,WAAW,GAAG,GAAG,CAClB"}
|
package/dist/ui/interrupts.d.cts
CHANGED
|
@@ -2,7 +2,8 @@ import { Interrupt, ThreadState } from "../schema.cjs";
|
|
|
2
2
|
|
|
3
3
|
//#region src/ui/interrupts.d.ts
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Normalizes HITL interrupt payloads to expose camelCase fields plus deprecated
|
|
6
|
+
* snake_case aliases for compatibility during migration.
|
|
6
7
|
*/
|
|
7
8
|
declare function normalizeInterruptForClient<T = unknown>(interrupt: Interrupt<T>): Interrupt<T>;
|
|
8
9
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interrupts.d.cts","names":[],"sources":["../../src/ui/interrupts.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"interrupts.d.cts","names":[],"sources":["../../src/ui/interrupts.ts"],"mappings":";;;;;AAOA;;iBAAgB,2BAAA,aAAA,CACd,SAAA,EAAW,SAAA,CAAU,CAAA,IACpB,SAAA,CAAU,CAAA;;;;iBAaG,uBAAA,aAAA,CACd,UAAA,EAAY,SAAA,CAAU,CAAA,MACrB,SAAA,CAAU,CAAA;AAAA,iBAIG,iBAAA,yBAAA,CACd,MAAA,WACA,OAAA;EACE,SAAA;EACA,WAAA,EAAa,WAAA;EACb,KAAA;AAAA,IAED,SAAA,CAAU,aAAA"}
|
package/dist/ui/interrupts.d.ts
CHANGED
|
@@ -2,7 +2,8 @@ import { Interrupt, ThreadState } from "../schema.js";
|
|
|
2
2
|
|
|
3
3
|
//#region src/ui/interrupts.d.ts
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
5
|
+
* Normalizes HITL interrupt payloads to expose camelCase fields plus deprecated
|
|
6
|
+
* snake_case aliases for compatibility during migration.
|
|
6
7
|
*/
|
|
7
8
|
declare function normalizeInterruptForClient<T = unknown>(interrupt: Interrupt<T>): Interrupt<T>;
|
|
8
9
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interrupts.d.ts","names":[],"sources":["../../src/ui/interrupts.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"interrupts.d.ts","names":[],"sources":["../../src/ui/interrupts.ts"],"mappings":";;;;;AAOA;;iBAAgB,2BAAA,aAAA,CACd,SAAA,EAAW,SAAA,CAAU,CAAA,IACpB,SAAA,CAAU,CAAA;;;;iBAaG,uBAAA,aAAA,CACd,UAAA,EAAY,SAAA,CAAU,CAAA,MACrB,SAAA,CAAU,CAAA;AAAA,iBAIG,iBAAA,yBAAA,CACd,MAAA,WACA,OAAA;EACE,SAAA;EACA,WAAA,EAAa,WAAA;EACb,KAAA;AAAA,IAED,SAAA,CAAU,aAAA"}
|
package/dist/ui/interrupts.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { normalizeHitlInterruptPayload } from "./hitl-interrupt-payload.js";
|
|
2
2
|
//#region src/ui/interrupts.ts
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Normalizes HITL interrupt payloads to expose camelCase fields plus deprecated
|
|
5
|
+
* snake_case aliases for compatibility during migration.
|
|
5
6
|
*/
|
|
6
7
|
function normalizeInterruptForClient(interrupt) {
|
|
7
8
|
if (interrupt.value === void 0) return interrupt;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interrupts.js","names":[],"sources":["../../src/ui/interrupts.ts"],"sourcesContent":["import { normalizeHitlInterruptPayload } from \"./hitl-interrupt-payload.js\";\nimport { Interrupt, ThreadState } from \"../schema.js\";\n\n/**\n *
|
|
1
|
+
{"version":3,"file":"interrupts.js","names":[],"sources":["../../src/ui/interrupts.ts"],"sourcesContent":["import { normalizeHitlInterruptPayload } from \"./hitl-interrupt-payload.js\";\nimport { Interrupt, ThreadState } from \"../schema.js\";\n\n/**\n * Normalizes HITL interrupt payloads to expose camelCase fields plus deprecated\n * snake_case aliases for compatibility during migration.\n */\nexport function normalizeInterruptForClient<T = unknown>(\n interrupt: Interrupt<T>\n): Interrupt<T> {\n if (interrupt.value === undefined) {\n return interrupt;\n }\n return {\n ...interrupt,\n value: normalizeHitlInterruptPayload(interrupt.value) as T,\n };\n}\n\n/**\n * Applies {@link normalizeInterruptForClient} to each interrupt.\n */\nexport function normalizeInterruptsList<T = unknown>(\n interrupts: Interrupt<T>[]\n): Interrupt<T>[] {\n return interrupts.map((i) => normalizeInterruptForClient(i));\n}\n\nexport function extractInterrupts<InterruptType = unknown>(\n values: unknown,\n options?: {\n isLoading: boolean;\n threadState: ThreadState | undefined;\n error: unknown;\n }\n): Interrupt<InterruptType> | undefined {\n if (\n typeof values === \"object\" &&\n values != null &&\n \"__interrupt__\" in values &&\n Array.isArray(values.__interrupt__)\n ) {\n const valueInterrupts = values.__interrupt__ as Interrupt<InterruptType>[];\n if (valueInterrupts.length === 0) return { when: \"breakpoint\" };\n if (valueInterrupts.length === 1) {\n return normalizeInterruptForClient(valueInterrupts[0]);\n }\n\n // TODO: fix the typing of interrupts if multiple interrupts are returned\n const normalized = valueInterrupts.map((i) =>\n normalizeInterruptForClient(i)\n );\n return normalized as unknown as Interrupt<InterruptType> | undefined;\n }\n\n // If we're deferring to old interrupt detection logic, don't show the interrupt if the stream is loading\n if (options?.isLoading) return undefined;\n\n const interrupts = options?.threadState?.tasks?.at(-1)?.interrupts;\n if (interrupts == null || interrupts.length === 0) {\n // check if there's a next task present\n const next = options?.threadState?.next ?? [];\n if (!next.length || options?.error != null) return undefined;\n return { when: \"breakpoint\" };\n }\n\n // Return only the current interrupt\n return normalizeInterruptForClient(\n interrupts.at(-1) as Interrupt<InterruptType>\n );\n}\n"],"mappings":";;;;;;AAOA,SAAgB,4BACd,WACc;AACd,KAAI,UAAU,UAAU,KAAA,EACtB,QAAO;AAET,QAAO;EACL,GAAG;EACH,OAAO,8BAA8B,UAAU,MAAM;EACtD;;;;;AAMH,SAAgB,wBACd,YACgB;AAChB,QAAO,WAAW,KAAK,MAAM,4BAA4B,EAAE,CAAC;;AAG9D,SAAgB,kBACd,QACA,SAKsC;AACtC,KACE,OAAO,WAAW,YAClB,UAAU,QACV,mBAAmB,UACnB,MAAM,QAAQ,OAAO,cAAc,EACnC;EACA,MAAM,kBAAkB,OAAO;AAC/B,MAAI,gBAAgB,WAAW,EAAG,QAAO,EAAE,MAAM,cAAc;AAC/D,MAAI,gBAAgB,WAAW,EAC7B,QAAO,4BAA4B,gBAAgB,GAAG;AAOxD,SAHmB,gBAAgB,KAAK,MACtC,4BAA4B,EAAE,CAC/B;;AAKH,KAAI,SAAS,UAAW,QAAO,KAAA;CAE/B,MAAM,aAAa,SAAS,aAAa,OAAO,GAAG,GAAG,EAAE;AACxD,KAAI,cAAc,QAAQ,WAAW,WAAW,GAAG;AAGjD,MAAI,EADS,SAAS,aAAa,QAAQ,EAAE,EACnC,UAAU,SAAS,SAAS,KAAM,QAAO,KAAA;AACnD,SAAO,EAAE,MAAM,cAAc;;AAI/B,QAAO,4BACL,WAAW,GAAG,GAAG,CAClB"}
|
package/dist/ui/messages.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.cjs","names":["HumanMessageChunk","AIMessageChunk","SystemMessageChunk","ToolMessageChunk","RemoveMessage"],"sources":["../../src/ui/messages.ts"],"sourcesContent":["import {\n type BaseMessage,\n BaseMessageChunk,\n RemoveMessage,\n convertToChunk,\n coerceMessageLikeToMessage,\n isBaseMessageChunk,\n HumanMessageChunk,\n SystemMessageChunk,\n AIMessageChunk,\n ToolMessageChunk,\n} from \"@langchain/core/messages\";\n\nimport type { Message } from \"../types.messages.js\";\nimport type { ThreadState } from \"../schema.js\";\n\n/**\n * Replaces the `messages` property in a state type with `BaseMessage[]`.\n * Used by framework SDKs to reflect that `ensureHistoryMessageInstances`\n * converts plain message objects to class instances at runtime.\n */\nexport type StateWithBaseMessages<S>
|
|
1
|
+
{"version":3,"file":"messages.cjs","names":["HumanMessageChunk","AIMessageChunk","SystemMessageChunk","ToolMessageChunk","RemoveMessage"],"sources":["../../src/ui/messages.ts"],"sourcesContent":["import {\n type BaseMessage,\n BaseMessageChunk,\n RemoveMessage,\n convertToChunk,\n coerceMessageLikeToMessage,\n isBaseMessageChunk,\n HumanMessageChunk,\n SystemMessageChunk,\n AIMessageChunk,\n ToolMessageChunk,\n} from \"@langchain/core/messages\";\n\nimport type { Message } from \"../types.messages.js\";\nimport type { ThreadState } from \"../schema.js\";\n\n/**\n * Replaces the `messages` property in a state type with `BaseMessage[]`.\n * Used by framework SDKs to reflect that `ensureHistoryMessageInstances`\n * converts plain message objects to class instances at runtime.\n */\nexport type StateWithBaseMessages<S> = S extends { messages: unknown }\n ? Omit<S, \"messages\"> & { messages: BaseMessage[] }\n : S;\n\n/**\n * Maps a `ThreadState<StateType>[]` so that the `messages` field inside\n * `values` is typed as `BaseMessage[]` instead of `Message[]`.\n */\nexport type HistoryWithBaseMessages<T> = T extends ThreadState<infer S>[]\n ? ThreadState<StateWithBaseMessages<S>>[]\n : T;\n\nexport function tryConvertToChunk(\n message: BaseMessage | BaseMessageChunk\n): BaseMessageChunk | null {\n try {\n if (isBaseMessageChunk(message)) return message;\n return convertToChunk(message);\n } catch {\n return null;\n }\n}\n\nexport function tryCoerceMessageLikeToMessage(\n message: Omit<Message, \"type\"> & { type: string }\n): BaseMessage | BaseMessageChunk {\n if (message.type === \"human\" || message.type === \"user\") {\n return new HumanMessageChunk(message);\n }\n\n if (message.type === \"ai\" || message.type === \"assistant\") {\n return new AIMessageChunk(message);\n }\n\n if (message.type === \"system\") {\n return new SystemMessageChunk(message);\n }\n\n if (message.type === \"tool\" && \"tool_call_id\" in message) {\n return new ToolMessageChunk({\n ...message,\n tool_call_id: message.tool_call_id as string,\n });\n }\n\n if (message.type === \"remove\" && message.id != null) {\n return new RemoveMessage({ ...message, id: message.id });\n }\n\n return coerceMessageLikeToMessage(message);\n}\n\nexport class MessageTupleManager {\n chunks: Record<\n string,\n {\n chunk?: BaseMessageChunk | BaseMessage;\n metadata?: Record<string, unknown>;\n index?: number;\n }\n > = {};\n\n constructor() {\n this.chunks = {};\n }\n\n add(\n serialized: Message,\n metadata: Record<string, unknown> | undefined\n ): string | null {\n // TODO: this is sometimes sent from the API\n // figure out how to prevent this or move this to LC.js\n if (serialized.type.endsWith(\"MessageChunk\")) {\n // eslint-disable-next-line no-param-reassign\n serialized.type = serialized.type\n .slice(0, -\"MessageChunk\".length)\n .toLowerCase() as Message[\"type\"];\n }\n\n const message = tryCoerceMessageLikeToMessage(serialized);\n const chunk = tryConvertToChunk(message);\n\n const { id } = chunk ?? message;\n if (!id) {\n console.warn(\n \"No message ID found for chunk, ignoring in state\",\n serialized\n );\n return null;\n }\n\n this.chunks[id] ??= {};\n this.chunks[id].metadata = metadata ?? this.chunks[id].metadata;\n if (chunk) {\n const prev = this.chunks[id].chunk;\n this.chunks[id].chunk =\n (isBaseMessageChunk(prev) ? prev : null)?.concat(chunk) ?? chunk;\n } else {\n this.chunks[id].chunk = message;\n }\n\n return id;\n }\n\n clear() {\n this.chunks = {};\n }\n\n get(id: string | null | undefined, defaultIndex?: number) {\n if (id == null) return null;\n if (this.chunks[id] == null) return null;\n if (defaultIndex != null) this.chunks[id].index ??= defaultIndex;\n return this.chunks[id];\n }\n}\n\nexport const toMessageDict = (chunk: BaseMessage): Message => {\n const { type, data } = chunk.toDict();\n return { ...data, type } as Message;\n};\n\n/**\n * Identity converter that keeps @langchain/core class instances.\n * Used by framework SDKs to expose BaseMessage instances instead of plain dicts.\n */\nexport const toMessageClass = (chunk: BaseMessage): BaseMessage => chunk;\n\n/**\n * Ensures all messages in an array are BaseMessage class instances.\n * Messages that are already class instances pass through unchanged.\n * Plain message objects (e.g. from API values/history) are converted\n * via {@link tryCoerceMessageLikeToMessage}.\n */\nexport function ensureMessageInstances(\n messages: (Message | BaseMessage)[]\n): (BaseMessage | BaseMessageChunk)[] {\n return messages.map((msg) => {\n if (typeof (msg as BaseMessage).getType === \"function\") {\n return msg as BaseMessage;\n }\n return tryCoerceMessageLikeToMessage(\n msg as Omit<Message, \"type\"> & { type: string }\n );\n });\n}\n\n/**\n * Converts plain message objects within each history state's values\n * to proper BaseMessage class instances. Returns a new array with\n * shallow-copied states whose messages have been coerced.\n */\nexport function ensureHistoryMessageInstances<\n StateType extends Record<string, unknown>,\n>(\n history: ThreadState<StateType>[],\n messagesKey: string = \"messages\"\n): ThreadState<StateType>[] {\n return history.map((state) => {\n if (state.values == null) return state;\n const messages = state.values[messagesKey];\n if (!Array.isArray(messages)) return state;\n return {\n ...state,\n values: {\n ...state.values,\n [messagesKey]: ensureMessageInstances(messages),\n },\n };\n });\n}\n"],"mappings":";;;AAiCA,SAAgB,kBACd,SACyB;AACzB,KAAI;AACF,OAAA,GAAA,yBAAA,oBAAuB,QAAQ,CAAE,QAAO;AACxC,UAAA,GAAA,yBAAA,gBAAsB,QAAQ;SACxB;AACN,SAAO;;;AAIX,SAAgB,8BACd,SACgC;AAChC,KAAI,QAAQ,SAAS,WAAW,QAAQ,SAAS,OAC/C,QAAO,IAAIA,yBAAAA,kBAAkB,QAAQ;AAGvC,KAAI,QAAQ,SAAS,QAAQ,QAAQ,SAAS,YAC5C,QAAO,IAAIC,yBAAAA,eAAe,QAAQ;AAGpC,KAAI,QAAQ,SAAS,SACnB,QAAO,IAAIC,yBAAAA,mBAAmB,QAAQ;AAGxC,KAAI,QAAQ,SAAS,UAAU,kBAAkB,QAC/C,QAAO,IAAIC,yBAAAA,iBAAiB;EAC1B,GAAG;EACH,cAAc,QAAQ;EACvB,CAAC;AAGJ,KAAI,QAAQ,SAAS,YAAY,QAAQ,MAAM,KAC7C,QAAO,IAAIC,yBAAAA,cAAc;EAAE,GAAG;EAAS,IAAI,QAAQ;EAAI,CAAC;AAG1D,SAAA,GAAA,yBAAA,4BAAkC,QAAQ;;AAG5C,IAAa,sBAAb,MAAiC;CAC/B,SAOI,EAAE;CAEN,cAAc;AACZ,OAAK,SAAS,EAAE;;CAGlB,IACE,YACA,UACe;AAGf,MAAI,WAAW,KAAK,SAAS,eAAe,CAE1C,YAAW,OAAO,WAAW,KAC1B,MAAM,GAAG,IAAuB,CAChC,aAAa;EAGlB,MAAM,UAAU,8BAA8B,WAAW;EACzD,MAAM,QAAQ,kBAAkB,QAAQ;EAExC,MAAM,EAAE,OAAO,SAAS;AACxB,MAAI,CAAC,IAAI;AACP,WAAQ,KACN,oDACA,WACD;AACD,UAAO;;AAGT,OAAK,OAAO,QAAQ,EAAE;AACtB,OAAK,OAAO,IAAI,WAAW,YAAY,KAAK,OAAO,IAAI;AACvD,MAAI,OAAO;GACT,MAAM,OAAO,KAAK,OAAO,IAAI;AAC7B,QAAK,OAAO,IAAI,UAAA,GAAA,yBAAA,oBACM,KAAK,GAAG,OAAO,OAAO,OAAO,MAAM,IAAI;QAE7D,MAAK,OAAO,IAAI,QAAQ;AAG1B,SAAO;;CAGT,QAAQ;AACN,OAAK,SAAS,EAAE;;CAGlB,IAAI,IAA+B,cAAuB;AACxD,MAAI,MAAM,KAAM,QAAO;AACvB,MAAI,KAAK,OAAO,OAAO,KAAM,QAAO;AACpC,MAAI,gBAAgB,KAAM,MAAK,OAAO,IAAI,UAAU;AACpD,SAAO,KAAK,OAAO;;;AAIvB,MAAa,iBAAiB,UAAgC;CAC5D,MAAM,EAAE,MAAM,SAAS,MAAM,QAAQ;AACrC,QAAO;EAAE,GAAG;EAAM;EAAM;;;;;;AAO1B,MAAa,kBAAkB,UAAoC;;;;;;;AAQnE,SAAgB,uBACd,UACoC;AACpC,QAAO,SAAS,KAAK,QAAQ;AAC3B,MAAI,OAAQ,IAAoB,YAAY,WAC1C,QAAO;AAET,SAAO,8BACL,IACD;GACD;;;;;;;AAQJ,SAAgB,8BAGd,SACA,cAAsB,YACI;AAC1B,QAAO,QAAQ,KAAK,UAAU;AAC5B,MAAI,MAAM,UAAU,KAAM,QAAO;EACjC,MAAM,WAAW,MAAM,OAAO;AAC9B,MAAI,CAAC,MAAM,QAAQ,SAAS,CAAE,QAAO;AACrC,SAAO;GACL,GAAG;GACH,QAAQ;IACN,GAAG,MAAM;KACR,cAAc,uBAAuB,SAAS;IAChD;GACF;GACD"}
|
package/dist/ui/messages.d.cts
CHANGED
|
@@ -9,9 +9,11 @@ import { BaseMessage, BaseMessageChunk } from "@langchain/core/messages";
|
|
|
9
9
|
* Used by framework SDKs to reflect that `ensureHistoryMessageInstances`
|
|
10
10
|
* converts plain message objects to class instances at runtime.
|
|
11
11
|
*/
|
|
12
|
-
type StateWithBaseMessages<S> = S extends
|
|
12
|
+
type StateWithBaseMessages<S> = S extends {
|
|
13
|
+
messages: unknown;
|
|
14
|
+
} ? Omit<S, "messages"> & {
|
|
13
15
|
messages: BaseMessage[];
|
|
14
|
-
} : S
|
|
16
|
+
} : S;
|
|
15
17
|
/**
|
|
16
18
|
* Maps a `ThreadState<StateType>[]` so that the `messages` field inside
|
|
17
19
|
* `values` is typed as `BaseMessage[]` instead of `Message[]`.
|
|
@@ -52,5 +54,5 @@ declare function ensureMessageInstances(messages: (Message | BaseMessage)[]): (B
|
|
|
52
54
|
*/
|
|
53
55
|
declare function ensureHistoryMessageInstances<StateType extends Record<string, unknown>>(history: ThreadState<StateType>[], messagesKey?: string): ThreadState<StateType>[];
|
|
54
56
|
//#endregion
|
|
55
|
-
export { HistoryWithBaseMessages, MessageTupleManager, ensureHistoryMessageInstances, ensureMessageInstances, toMessageClass, toMessageDict };
|
|
57
|
+
export { HistoryWithBaseMessages, MessageTupleManager, StateWithBaseMessages, ensureHistoryMessageInstances, ensureMessageInstances, toMessageClass, toMessageDict };
|
|
56
58
|
//# sourceMappingURL=messages.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.cts","names":[],"sources":["../../src/ui/messages.ts"],"mappings":";;;;;;;;;AAqBA;;KAAY,qBAAA,
|
|
1
|
+
{"version":3,"file":"messages.d.cts","names":[],"sources":["../../src/ui/messages.ts"],"mappings":";;;;;;;;;AAqBA;;KAAY,qBAAA,MAA2B,CAAA;EAAY,QAAA;AAAA,IAC/C,IAAA,CAAK,CAAA;EAAmB,QAAA,EAAU,WAAA;AAAA,IAClC,CAAA;;;;;KAMQ,uBAAA,MAA6B,CAAA,SAAU,WAAA,cAC/C,WAAA,CAAY,qBAAA,CAAsB,CAAA,OAClC,CAAA;AAAA,cA0CS,mBAAA;EACX,MAAA,EAAQ,MAAA;IAGJ,KAAA,GAAQ,gBAAA,GAAmB,WAAA;IAC3B,QAAA,GAAW,MAAA;IACX,KAAA;EAAA;EAIJ,WAAA,CAAA;EAIA,GAAA,CACE,UAAA,EAAY,OAAA,EACZ,QAAA,EAAU,MAAA;EAoCZ,KAAA,CAAA;EAIA,GAAA,CAAI,EAAA,6BAA+B,YAAA;mEAxCjB,yBAAA,CAAA,cAAA;;;;;cAgDP,aAAA,GAAa,KAAA,EAAA,WAAA,CAAA,yBAAA,CAAA,gBAAA,CAGzB,yBAAA,CAHyB,cAAA,GAAA,yBAAA,CAAA,WAAA,MAAA,OAAA;;;;;cASb,cAAA,GAAc,KAAA,EAAA,WAAA,CAAA,yBAAA,CAAA,gBAAA,CAA6C,yBAAA,CAA7C,cAAA,GAAA,yBAAA,CAAA,WAAA,MAAA,WAAA,CAAA,yBAAA,CAAA,gBAAA,CAAA,yBAAA,CAAA,cAAA,GAAA,yBAAA,CAAA,WAAA;;;;;AAzE3B;;iBAiFgB,sBAAA,CACd,QAAA,GAAW,OAAA,GAAU,WAAA,OACnB,WAAA,GAAc,gBAAA;;;;;;iBAgBF,6BAAA,mBACI,MAAA,kBAAA,CAElB,OAAA,EAAS,WAAA,CAAY,SAAA,KACrB,WAAA,YACC,WAAA,CAAY,SAAA"}
|
package/dist/ui/messages.d.ts
CHANGED
|
@@ -9,9 +9,11 @@ import { BaseMessage, BaseMessageChunk } from "@langchain/core/messages";
|
|
|
9
9
|
* Used by framework SDKs to reflect that `ensureHistoryMessageInstances`
|
|
10
10
|
* converts plain message objects to class instances at runtime.
|
|
11
11
|
*/
|
|
12
|
-
type StateWithBaseMessages<S> = S extends
|
|
12
|
+
type StateWithBaseMessages<S> = S extends {
|
|
13
|
+
messages: unknown;
|
|
14
|
+
} ? Omit<S, "messages"> & {
|
|
13
15
|
messages: BaseMessage[];
|
|
14
|
-
} : S
|
|
16
|
+
} : S;
|
|
15
17
|
/**
|
|
16
18
|
* Maps a `ThreadState<StateType>[]` so that the `messages` field inside
|
|
17
19
|
* `values` is typed as `BaseMessage[]` instead of `Message[]`.
|
|
@@ -52,5 +54,5 @@ declare function ensureMessageInstances(messages: (Message | BaseMessage)[]): (B
|
|
|
52
54
|
*/
|
|
53
55
|
declare function ensureHistoryMessageInstances<StateType extends Record<string, unknown>>(history: ThreadState<StateType>[], messagesKey?: string): ThreadState<StateType>[];
|
|
54
56
|
//#endregion
|
|
55
|
-
export { HistoryWithBaseMessages, MessageTupleManager, ensureHistoryMessageInstances, ensureMessageInstances, toMessageClass, toMessageDict };
|
|
57
|
+
export { HistoryWithBaseMessages, MessageTupleManager, StateWithBaseMessages, ensureHistoryMessageInstances, ensureMessageInstances, toMessageClass, toMessageDict };
|
|
56
58
|
//# sourceMappingURL=messages.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","names":[],"sources":["../../src/ui/messages.ts"],"mappings":";;;;;;;;;AAqBA;;KAAY,qBAAA,
|
|
1
|
+
{"version":3,"file":"messages.d.ts","names":[],"sources":["../../src/ui/messages.ts"],"mappings":";;;;;;;;;AAqBA;;KAAY,qBAAA,MAA2B,CAAA;EAAY,QAAA;AAAA,IAC/C,IAAA,CAAK,CAAA;EAAmB,QAAA,EAAU,WAAA;AAAA,IAClC,CAAA;;;;;KAMQ,uBAAA,MAA6B,CAAA,SAAU,WAAA,cAC/C,WAAA,CAAY,qBAAA,CAAsB,CAAA,OAClC,CAAA;AAAA,cA0CS,mBAAA;EACX,MAAA,EAAQ,MAAA;IAGJ,KAAA,GAAQ,gBAAA,GAAmB,WAAA;IAC3B,QAAA,GAAW,MAAA;IACX,KAAA;EAAA;EAIJ,WAAA,CAAA;EAIA,GAAA,CACE,UAAA,EAAY,OAAA,EACZ,QAAA,EAAU,MAAA;EAoCZ,KAAA,CAAA;EAIA,GAAA,CAAI,EAAA,6BAA+B,YAAA;mEAxCjB,yBAAA,CAAA,cAAA;;;;;cAgDP,aAAA,GAAa,KAAA,EAAA,WAAA,CAAA,yBAAA,CAAA,gBAAA,CAGzB,yBAAA,CAHyB,cAAA,GAAA,yBAAA,CAAA,WAAA,MAAA,OAAA;;;;;cASb,cAAA,GAAc,KAAA,EAAA,WAAA,CAAA,yBAAA,CAAA,gBAAA,CAA6C,yBAAA,CAA7C,cAAA,GAAA,yBAAA,CAAA,WAAA,MAAA,WAAA,CAAA,yBAAA,CAAA,gBAAA,CAAA,yBAAA,CAAA,cAAA,GAAA,yBAAA,CAAA,WAAA;;;;;AAzE3B;;iBAiFgB,sBAAA,CACd,QAAA,GAAW,OAAA,GAAU,WAAA,OACnB,WAAA,GAAc,gBAAA;;;;;;iBAgBF,6BAAA,mBACI,MAAA,kBAAA,CAElB,OAAA,EAAS,WAAA,CAAY,SAAA,KACrB,WAAA,YACC,WAAA,CAAY,SAAA"}
|