@langchain/langgraph-sdk 1.8.5 → 1.8.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.
Files changed (55) hide show
  1. package/dist/headless-tools.cjs +134 -0
  2. package/dist/headless-tools.cjs.map +1 -0
  3. package/dist/headless-tools.d.cts +81 -0
  4. package/dist/headless-tools.d.cts.map +1 -0
  5. package/dist/headless-tools.d.ts +81 -0
  6. package/dist/headless-tools.d.ts.map +1 -0
  7. package/dist/headless-tools.js +127 -0
  8. package/dist/headless-tools.js.map +1 -0
  9. package/dist/index.cjs +9 -0
  10. package/dist/index.d.cts +2 -1
  11. package/dist/index.d.ts +2 -1
  12. package/dist/index.js +2 -1
  13. package/dist/react/index.cjs +9 -0
  14. package/dist/react/index.d.cts +2 -1
  15. package/dist/react/index.d.ts +2 -1
  16. package/dist/react/index.js +2 -1
  17. package/dist/react/stream.custom.cjs +20 -5
  18. package/dist/react/stream.custom.cjs.map +1 -1
  19. package/dist/react/stream.custom.d.cts.map +1 -1
  20. package/dist/react/stream.custom.d.ts.map +1 -1
  21. package/dist/react/stream.custom.js +21 -6
  22. package/dist/react/stream.custom.js.map +1 -1
  23. package/dist/react/stream.lgp.cjs +25 -7
  24. package/dist/react/stream.lgp.cjs.map +1 -1
  25. package/dist/react/stream.lgp.js +26 -8
  26. package/dist/react/stream.lgp.js.map +1 -1
  27. package/dist/ui/index.cjs +2 -0
  28. package/dist/ui/index.d.cts +2 -2
  29. package/dist/ui/index.d.ts +2 -2
  30. package/dist/ui/index.js +2 -2
  31. package/dist/ui/interrupts.cjs +25 -3
  32. package/dist/ui/interrupts.cjs.map +1 -1
  33. package/dist/ui/interrupts.d.cts +3 -1
  34. package/dist/ui/interrupts.d.cts.map +1 -1
  35. package/dist/ui/interrupts.d.ts +3 -1
  36. package/dist/ui/interrupts.d.ts.map +1 -1
  37. package/dist/ui/interrupts.js +24 -4
  38. package/dist/ui/interrupts.js.map +1 -1
  39. package/dist/ui/orchestrator-custom.cjs +15 -5
  40. package/dist/ui/orchestrator-custom.cjs.map +1 -1
  41. package/dist/ui/orchestrator-custom.d.cts.map +1 -1
  42. package/dist/ui/orchestrator-custom.d.ts.map +1 -1
  43. package/dist/ui/orchestrator-custom.js +16 -6
  44. package/dist/ui/orchestrator-custom.js.map +1 -1
  45. package/dist/ui/orchestrator.cjs +23 -7
  46. package/dist/ui/orchestrator.cjs.map +1 -1
  47. package/dist/ui/orchestrator.d.cts.map +1 -1
  48. package/dist/ui/orchestrator.d.ts.map +1 -1
  49. package/dist/ui/orchestrator.js +24 -8
  50. package/dist/ui/orchestrator.js.map +1 -1
  51. package/dist/ui/types.d.cts +15 -1
  52. package/dist/ui/types.d.cts.map +1 -1
  53. package/dist/ui/types.d.ts +15 -1
  54. package/dist/ui/types.d.ts.map +1 -1
  55. package/package.json +2 -2
@@ -0,0 +1,134 @@
1
+ //#region src/headless-tools.ts
2
+ /**
3
+ * Parses a headless-tool interrupt `value` from the graph. Accepts both
4
+ * `toolCall` (LangChain JS) and `tool_call` (Python / JSON snake_case).
5
+ */
6
+ function parseHeadlessToolInterruptPayload(value) {
7
+ if (typeof value !== "object" || value == null) return null;
8
+ const v = value;
9
+ if (v.type !== "tool") return null;
10
+ const rawTc = v.toolCall ?? v.tool_call;
11
+ if (typeof rawTc !== "object" || rawTc == null) return null;
12
+ const tc = rawTc;
13
+ if (typeof tc.name !== "string") return null;
14
+ return {
15
+ type: "tool",
16
+ toolCall: {
17
+ id: typeof tc.id === "string" ? tc.id : void 0,
18
+ name: tc.name,
19
+ args: tc.args
20
+ }
21
+ };
22
+ }
23
+ /**
24
+ * Strip headless-tool interrupts from a user-facing interrupt list.
25
+ */
26
+ function filterOutHeadlessToolInterrupts(interrupts) {
27
+ return interrupts.filter((interrupt) => interrupt.value == null || !isHeadlessToolInterrupt(interrupt.value));
28
+ }
29
+ function isHeadlessToolInterrupt(interrupt) {
30
+ return parseHeadlessToolInterruptPayload(interrupt) != null;
31
+ }
32
+ function findHeadlessTool(tools, name) {
33
+ return tools.find((tool) => tool.tool.name === name);
34
+ }
35
+ async function executeHeadlessTool(implementation, args, onTool) {
36
+ const startTime = Date.now();
37
+ onTool?.({
38
+ phase: "start",
39
+ name: implementation.tool.name,
40
+ args
41
+ });
42
+ try {
43
+ const result = await implementation.execute(args);
44
+ const duration = Date.now() - startTime;
45
+ onTool?.({
46
+ phase: "success",
47
+ name: implementation.tool.name,
48
+ args,
49
+ result,
50
+ duration
51
+ });
52
+ return {
53
+ success: true,
54
+ result
55
+ };
56
+ } catch (err) {
57
+ const error = err instanceof Error ? err : new Error(String(err));
58
+ const duration = Date.now() - startTime;
59
+ onTool?.({
60
+ phase: "error",
61
+ name: implementation.tool.name,
62
+ args,
63
+ error,
64
+ duration
65
+ });
66
+ return {
67
+ success: false,
68
+ error
69
+ };
70
+ }
71
+ }
72
+ async function handleHeadlessToolInterrupt(interrupt, tools, onTool) {
73
+ const { toolCall } = interrupt;
74
+ const implementation = findHeadlessTool(tools, toolCall.name);
75
+ if (!implementation) {
76
+ const error = /* @__PURE__ */ new Error(`Headless tool "${toolCall.name}" is not registered. Available tools: ${tools.map((tool) => tool.tool.name).join(", ") || "none"}`);
77
+ onTool?.({
78
+ phase: "error",
79
+ name: toolCall.name,
80
+ args: toolCall.args,
81
+ error,
82
+ duration: 0
83
+ });
84
+ return {
85
+ toolCallId: toolCall.id,
86
+ value: { error: error.message }
87
+ };
88
+ }
89
+ const result = await executeHeadlessTool(implementation, toolCall.args, onTool);
90
+ if (result.success) return {
91
+ toolCallId: toolCall.id,
92
+ value: result.result
93
+ };
94
+ return {
95
+ toolCallId: toolCall.id,
96
+ value: { error: result.error.message }
97
+ };
98
+ }
99
+ function headlessToolResumeCommand(result) {
100
+ return { resume: result.toolCallId ? { [result.toolCallId]: result.value } : result.value };
101
+ }
102
+ /**
103
+ * Execute and resume all newly seen headless-tool interrupts from a values
104
+ * payload. Callers own `handledIds` and should clear it when the thread changes.
105
+ */
106
+ function flushPendingHeadlessToolInterrupts(values, tools, handledIds, options) {
107
+ if (!tools?.length || !values) return;
108
+ const interrupts = values.__interrupt__;
109
+ if (!Array.isArray(interrupts) || interrupts.length === 0) return;
110
+ const defer = options.defer ?? ((run) => run());
111
+ for (const interrupt of interrupts) {
112
+ const headlessInterrupt = parseHeadlessToolInterruptPayload(interrupt.value);
113
+ if (!headlessInterrupt) continue;
114
+ const interruptId = interrupt.id ?? headlessInterrupt.toolCall.id ?? "";
115
+ if (handledIds.has(interruptId)) continue;
116
+ handledIds.add(interruptId);
117
+ defer(() => {
118
+ handleHeadlessToolInterrupt(headlessInterrupt, tools, options.onTool).then((result) => {
119
+ options.resumeSubmit(headlessToolResumeCommand(result));
120
+ });
121
+ });
122
+ }
123
+ }
124
+ //#endregion
125
+ exports.executeHeadlessTool = executeHeadlessTool;
126
+ exports.filterOutHeadlessToolInterrupts = filterOutHeadlessToolInterrupts;
127
+ exports.findHeadlessTool = findHeadlessTool;
128
+ exports.flushPendingHeadlessToolInterrupts = flushPendingHeadlessToolInterrupts;
129
+ exports.handleHeadlessToolInterrupt = handleHeadlessToolInterrupt;
130
+ exports.headlessToolResumeCommand = headlessToolResumeCommand;
131
+ exports.isHeadlessToolInterrupt = isHeadlessToolInterrupt;
132
+ exports.parseHeadlessToolInterruptPayload = parseHeadlessToolInterruptPayload;
133
+
134
+ //# sourceMappingURL=headless-tools.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless-tools.cjs","names":[],"sources":["../src/headless-tools.ts"],"sourcesContent":["import type { Interrupt } from \"./schema.js\";\n\n/**\n * Represents a headless tool interrupt payload emitted by LangChain's\n * schema-only `tool({ ... })` overload.\n *\n * Servers may serialize the nested tool call as `toolCall` (JS) or\n * `tool_call` (Python). Use {@link parseHeadlessToolInterruptPayload} to\n * normalize either shape before reading fields.\n */\nexport interface HeadlessToolInterrupt {\n type: \"tool\";\n toolCall: {\n id: string | undefined;\n name: string;\n args: unknown;\n };\n}\n\n/**\n * Parses a headless-tool interrupt `value` from the graph. Accepts both\n * `toolCall` (LangChain JS) and `tool_call` (Python / JSON snake_case).\n */\nexport function parseHeadlessToolInterruptPayload(\n value: unknown\n): HeadlessToolInterrupt | null {\n if (typeof value !== \"object\" || value == null) {\n return null;\n }\n const v = value as Record<string, unknown>;\n if (v.type !== \"tool\") {\n return null;\n }\n\n const rawTc = v.toolCall ?? v.tool_call;\n if (typeof rawTc !== \"object\" || rawTc == null) {\n return null;\n }\n const tc = rawTc as Record<string, unknown>;\n if (typeof tc.name !== \"string\") {\n return null;\n }\n\n const id = typeof tc.id === \"string\" ? tc.id : undefined;\n\n return {\n type: \"tool\",\n toolCall: {\n id,\n name: tc.name,\n args: tc.args,\n },\n };\n}\n\n/**\n * Client-side implementation returned by `headlessTool.implement(...)`.\n */\nexport interface HeadlessToolImplementation<Args = unknown, Output = unknown> {\n tool: {\n name: string;\n };\n execute: (args: Args) => Promise<Output>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyHeadlessToolImplementation = HeadlessToolImplementation<\n any,\n any\n>;\n\nexport interface ToolEvent {\n phase: \"start\" | \"success\" | \"error\";\n name: string;\n args: unknown;\n result?: unknown;\n error?: Error;\n duration?: number;\n}\n\nexport type OnToolCallback = (event: ToolEvent) => void;\n\n/**\n * Strip headless-tool interrupts from a user-facing interrupt list.\n */\nexport function filterOutHeadlessToolInterrupts<T extends { value?: unknown }>(\n interrupts: readonly T[]\n): T[] {\n return interrupts.filter(\n (interrupt) =>\n interrupt.value == null || !isHeadlessToolInterrupt(interrupt.value)\n );\n}\n\nexport function isHeadlessToolInterrupt(\n interrupt: unknown\n): interrupt is HeadlessToolInterrupt {\n return parseHeadlessToolInterruptPayload(interrupt) != null;\n}\n\nexport function findHeadlessTool<Args = unknown, Output = unknown>(\n tools: HeadlessToolImplementation[],\n name: string\n): HeadlessToolImplementation<Args, Output> | undefined {\n return tools.find((tool) => tool.tool.name === name) as\n | HeadlessToolImplementation<Args, Output>\n | undefined;\n}\n\nexport async function executeHeadlessTool<Args = unknown, Output = unknown>(\n implementation: HeadlessToolImplementation<Args, Output>,\n args: Args,\n onTool?: OnToolCallback\n): Promise<\n { success: true; result: Output } | { success: false; error: Error }\n> {\n const startTime = Date.now();\n\n onTool?.({\n phase: \"start\",\n name: implementation.tool.name,\n args,\n });\n\n try {\n const result = await implementation.execute(args);\n const duration = Date.now() - startTime;\n\n onTool?.({\n phase: \"success\",\n name: implementation.tool.name,\n args,\n result,\n duration,\n });\n\n return { success: true, result };\n } catch (err) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n const error = err instanceof Error ? err : new Error(String(err));\n const duration = Date.now() - startTime;\n\n onTool?.({\n phase: \"error\",\n name: implementation.tool.name,\n args,\n error,\n duration,\n });\n\n return { success: false, error };\n }\n}\n\nexport async function handleHeadlessToolInterrupt(\n interrupt: HeadlessToolInterrupt,\n tools: HeadlessToolImplementation[],\n onTool?: OnToolCallback\n): Promise<{ toolCallId: string | undefined; value: unknown }> {\n const { toolCall } = interrupt;\n const implementation = findHeadlessTool(tools, toolCall.name);\n\n if (!implementation) {\n const error = new Error(\n `Headless tool \"${toolCall.name}\" is not registered. ` +\n `Available tools: ${tools.map((tool) => tool.tool.name).join(\", \") || \"none\"}`\n );\n\n onTool?.({\n phase: \"error\",\n name: toolCall.name,\n args: toolCall.args,\n error,\n duration: 0,\n });\n\n return {\n toolCallId: toolCall.id,\n value: { error: error.message },\n };\n }\n\n const result = await executeHeadlessTool(\n implementation,\n toolCall.args as never,\n onTool\n );\n\n if (result.success) {\n return {\n toolCallId: toolCall.id,\n value: result.result,\n };\n }\n\n return {\n toolCallId: toolCall.id,\n value: { error: result.error.message },\n };\n}\n\nexport function headlessToolResumeCommand(result: {\n toolCallId: string | undefined;\n value: unknown;\n}): { resume: unknown } {\n return {\n resume: result.toolCallId\n ? { [result.toolCallId]: result.value }\n : result.value,\n };\n}\n\nexport interface FlushPendingHeadlessToolInterruptsOptions {\n onTool?: OnToolCallback;\n resumeSubmit: (command: { resume: unknown }) => void | Promise<void>;\n defer?: (run: () => void) => void;\n}\n\n/**\n * Execute and resume all newly seen headless-tool interrupts from a values\n * payload. Callers own `handledIds` and should clear it when the thread changes.\n */\nexport function flushPendingHeadlessToolInterrupts(\n values: Record<string, unknown> | null | undefined,\n tools: HeadlessToolImplementation[] | undefined,\n handledIds: Set<string>,\n options: FlushPendingHeadlessToolInterruptsOptions\n): void {\n if (!tools?.length || !values) return;\n\n const interrupts = values.__interrupt__;\n if (!Array.isArray(interrupts) || interrupts.length === 0) return;\n\n const defer = options.defer ?? ((run) => run());\n\n for (const interrupt of interrupts as Interrupt[]) {\n const headlessInterrupt = parseHeadlessToolInterruptPayload(\n interrupt.value\n );\n if (!headlessInterrupt) continue;\n\n const interruptId = interrupt.id ?? headlessInterrupt.toolCall.id ?? \"\";\n if (handledIds.has(interruptId)) continue;\n handledIds.add(interruptId);\n\n defer(() => {\n void handleHeadlessToolInterrupt(\n headlessInterrupt,\n tools,\n options.onTool\n ).then((result) => {\n void options.resumeSubmit(headlessToolResumeCommand(result));\n });\n });\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ //#region src/headless-tools.d.ts
2
+ /**
3
+ * Represents a headless tool interrupt payload emitted by LangChain's
4
+ * schema-only `tool({ ... })` overload.
5
+ *
6
+ * Servers may serialize the nested tool call as `toolCall` (JS) or
7
+ * `tool_call` (Python). Use {@link parseHeadlessToolInterruptPayload} to
8
+ * normalize either shape before reading fields.
9
+ */
10
+ interface HeadlessToolInterrupt {
11
+ type: "tool";
12
+ toolCall: {
13
+ id: string | undefined;
14
+ name: string;
15
+ args: unknown;
16
+ };
17
+ }
18
+ /**
19
+ * Parses a headless-tool interrupt `value` from the graph. Accepts both
20
+ * `toolCall` (LangChain JS) and `tool_call` (Python / JSON snake_case).
21
+ */
22
+ declare function parseHeadlessToolInterruptPayload(value: unknown): HeadlessToolInterrupt | null;
23
+ /**
24
+ * Client-side implementation returned by `headlessTool.implement(...)`.
25
+ */
26
+ interface HeadlessToolImplementation<Args = unknown, Output = unknown> {
27
+ tool: {
28
+ name: string;
29
+ };
30
+ execute: (args: Args) => Promise<Output>;
31
+ }
32
+ type AnyHeadlessToolImplementation = HeadlessToolImplementation<any, any>;
33
+ interface ToolEvent {
34
+ phase: "start" | "success" | "error";
35
+ name: string;
36
+ args: unknown;
37
+ result?: unknown;
38
+ error?: Error;
39
+ duration?: number;
40
+ }
41
+ type OnToolCallback = (event: ToolEvent) => void;
42
+ /**
43
+ * Strip headless-tool interrupts from a user-facing interrupt list.
44
+ */
45
+ declare function filterOutHeadlessToolInterrupts<T extends {
46
+ value?: unknown;
47
+ }>(interrupts: readonly T[]): T[];
48
+ declare function isHeadlessToolInterrupt(interrupt: unknown): interrupt is HeadlessToolInterrupt;
49
+ declare function findHeadlessTool<Args = unknown, Output = unknown>(tools: HeadlessToolImplementation[], name: string): HeadlessToolImplementation<Args, Output> | undefined;
50
+ declare function executeHeadlessTool<Args = unknown, Output = unknown>(implementation: HeadlessToolImplementation<Args, Output>, args: Args, onTool?: OnToolCallback): Promise<{
51
+ success: true;
52
+ result: Output;
53
+ } | {
54
+ success: false;
55
+ error: Error;
56
+ }>;
57
+ declare function handleHeadlessToolInterrupt(interrupt: HeadlessToolInterrupt, tools: HeadlessToolImplementation[], onTool?: OnToolCallback): Promise<{
58
+ toolCallId: string | undefined;
59
+ value: unknown;
60
+ }>;
61
+ declare function headlessToolResumeCommand(result: {
62
+ toolCallId: string | undefined;
63
+ value: unknown;
64
+ }): {
65
+ resume: unknown;
66
+ };
67
+ interface FlushPendingHeadlessToolInterruptsOptions {
68
+ onTool?: OnToolCallback;
69
+ resumeSubmit: (command: {
70
+ resume: unknown;
71
+ }) => void | Promise<void>;
72
+ defer?: (run: () => void) => void;
73
+ }
74
+ /**
75
+ * Execute and resume all newly seen headless-tool interrupts from a values
76
+ * payload. Callers own `handledIds` and should clear it when the thread changes.
77
+ */
78
+ declare function flushPendingHeadlessToolInterrupts(values: Record<string, unknown> | null | undefined, tools: HeadlessToolImplementation[] | undefined, handledIds: Set<string>, options: FlushPendingHeadlessToolInterruptsOptions): void;
79
+ //#endregion
80
+ export { AnyHeadlessToolImplementation, FlushPendingHeadlessToolInterruptsOptions, HeadlessToolImplementation, HeadlessToolInterrupt, OnToolCallback, ToolEvent, executeHeadlessTool, filterOutHeadlessToolInterrupts, findHeadlessTool, flushPendingHeadlessToolInterrupts, handleHeadlessToolInterrupt, headlessToolResumeCommand, isHeadlessToolInterrupt, parseHeadlessToolInterruptPayload };
81
+ //# sourceMappingURL=headless-tools.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless-tools.d.cts","names":[],"sources":["../src/headless-tools.ts"],"mappings":";;AAUA;;;;;;;UAAiB,qBAAA;EACf,IAAA;EACA,QAAA;IACE,EAAA;IACA,IAAA;IACA,IAAA;EAAA;AAAA;;AA2CJ;;;iBAnCgB,iCAAA,CACd,KAAA,YACC,qBAAA;;;;UAiCc,0BAAA;EACf,IAAA;IACE,IAAA;EAAA;EAEF,OAAA,GAAU,IAAA,EAAM,IAAA,KAAS,OAAA,CAAQ,MAAA;AAAA;AAAA,KAIvB,6BAAA,GAAgC,0BAAA;AAAA,UAK3B,SAAA;EACf,KAAA;EACA,IAAA;EACA,IAAA;EACA,MAAA;EACA,KAAA,GAAQ,KAAA;EACR,QAAA;AAAA;AAAA,KAGU,cAAA,IAAkB,KAAA,EAAO,SAAA;;AATrC;;iBAcgB,+BAAA;EAA4C,KAAA;AAAA,EAAA,CAC1D,UAAA,WAAqB,CAAA,KACpB,CAAA;AAAA,iBAOa,uBAAA,CACd,SAAA,YACC,SAAA,IAAa,qBAAA;AAAA,iBAIA,gBAAA,kCAAA,CACd,KAAA,EAAO,0BAAA,IACP,IAAA,WACC,0BAAA,CAA2B,IAAA,EAAM,MAAA;AAAA,iBAMd,mBAAA,kCAAA,CACpB,cAAA,EAAgB,0BAAA,CAA2B,IAAA,EAAM,MAAA,GACjD,IAAA,EAAM,IAAA,EACN,MAAA,GAAS,cAAA,GACR,OAAA;EACC,OAAA;EAAe,MAAA,EAAQ,MAAA;AAAA;EAAa,OAAA;EAAgB,KAAA,EAAO,KAAA;AAAA;AAAA,iBAwCzC,2BAAA,CACpB,SAAA,EAAW,qBAAA,EACX,KAAA,EAAO,0BAAA,IACP,MAAA,GAAS,cAAA,GACR,OAAA;EAAU,UAAA;EAAgC,KAAA;AAAA;AAAA,iBA2C7B,yBAAA,CAA0B,MAAA;EACxC,UAAA;EACA,KAAA;AAAA;EACI,MAAA;AAAA;AAAA,UAQW,yCAAA;EACf,MAAA,GAAS,cAAA;EACT,YAAA,GAAe,OAAA;IAAW,MAAA;EAAA,aAA6B,OAAA;EACvD,KAAA,IAAS,GAAA;AAAA;;;;;iBAOK,kCAAA,CACd,MAAA,EAAQ,MAAA,sCACR,KAAA,EAAO,0BAAA,gBACP,UAAA,EAAY,GAAA,UACZ,OAAA,EAAS,yCAAA"}
@@ -0,0 +1,81 @@
1
+ //#region src/headless-tools.d.ts
2
+ /**
3
+ * Represents a headless tool interrupt payload emitted by LangChain's
4
+ * schema-only `tool({ ... })` overload.
5
+ *
6
+ * Servers may serialize the nested tool call as `toolCall` (JS) or
7
+ * `tool_call` (Python). Use {@link parseHeadlessToolInterruptPayload} to
8
+ * normalize either shape before reading fields.
9
+ */
10
+ interface HeadlessToolInterrupt {
11
+ type: "tool";
12
+ toolCall: {
13
+ id: string | undefined;
14
+ name: string;
15
+ args: unknown;
16
+ };
17
+ }
18
+ /**
19
+ * Parses a headless-tool interrupt `value` from the graph. Accepts both
20
+ * `toolCall` (LangChain JS) and `tool_call` (Python / JSON snake_case).
21
+ */
22
+ declare function parseHeadlessToolInterruptPayload(value: unknown): HeadlessToolInterrupt | null;
23
+ /**
24
+ * Client-side implementation returned by `headlessTool.implement(...)`.
25
+ */
26
+ interface HeadlessToolImplementation<Args = unknown, Output = unknown> {
27
+ tool: {
28
+ name: string;
29
+ };
30
+ execute: (args: Args) => Promise<Output>;
31
+ }
32
+ type AnyHeadlessToolImplementation = HeadlessToolImplementation<any, any>;
33
+ interface ToolEvent {
34
+ phase: "start" | "success" | "error";
35
+ name: string;
36
+ args: unknown;
37
+ result?: unknown;
38
+ error?: Error;
39
+ duration?: number;
40
+ }
41
+ type OnToolCallback = (event: ToolEvent) => void;
42
+ /**
43
+ * Strip headless-tool interrupts from a user-facing interrupt list.
44
+ */
45
+ declare function filterOutHeadlessToolInterrupts<T extends {
46
+ value?: unknown;
47
+ }>(interrupts: readonly T[]): T[];
48
+ declare function isHeadlessToolInterrupt(interrupt: unknown): interrupt is HeadlessToolInterrupt;
49
+ declare function findHeadlessTool<Args = unknown, Output = unknown>(tools: HeadlessToolImplementation[], name: string): HeadlessToolImplementation<Args, Output> | undefined;
50
+ declare function executeHeadlessTool<Args = unknown, Output = unknown>(implementation: HeadlessToolImplementation<Args, Output>, args: Args, onTool?: OnToolCallback): Promise<{
51
+ success: true;
52
+ result: Output;
53
+ } | {
54
+ success: false;
55
+ error: Error;
56
+ }>;
57
+ declare function handleHeadlessToolInterrupt(interrupt: HeadlessToolInterrupt, tools: HeadlessToolImplementation[], onTool?: OnToolCallback): Promise<{
58
+ toolCallId: string | undefined;
59
+ value: unknown;
60
+ }>;
61
+ declare function headlessToolResumeCommand(result: {
62
+ toolCallId: string | undefined;
63
+ value: unknown;
64
+ }): {
65
+ resume: unknown;
66
+ };
67
+ interface FlushPendingHeadlessToolInterruptsOptions {
68
+ onTool?: OnToolCallback;
69
+ resumeSubmit: (command: {
70
+ resume: unknown;
71
+ }) => void | Promise<void>;
72
+ defer?: (run: () => void) => void;
73
+ }
74
+ /**
75
+ * Execute and resume all newly seen headless-tool interrupts from a values
76
+ * payload. Callers own `handledIds` and should clear it when the thread changes.
77
+ */
78
+ declare function flushPendingHeadlessToolInterrupts(values: Record<string, unknown> | null | undefined, tools: HeadlessToolImplementation[] | undefined, handledIds: Set<string>, options: FlushPendingHeadlessToolInterruptsOptions): void;
79
+ //#endregion
80
+ export { AnyHeadlessToolImplementation, FlushPendingHeadlessToolInterruptsOptions, HeadlessToolImplementation, HeadlessToolInterrupt, OnToolCallback, ToolEvent, executeHeadlessTool, filterOutHeadlessToolInterrupts, findHeadlessTool, flushPendingHeadlessToolInterrupts, handleHeadlessToolInterrupt, headlessToolResumeCommand, isHeadlessToolInterrupt, parseHeadlessToolInterruptPayload };
81
+ //# sourceMappingURL=headless-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless-tools.d.ts","names":[],"sources":["../src/headless-tools.ts"],"mappings":";;AAUA;;;;;;;UAAiB,qBAAA;EACf,IAAA;EACA,QAAA;IACE,EAAA;IACA,IAAA;IACA,IAAA;EAAA;AAAA;;AA2CJ;;;iBAnCgB,iCAAA,CACd,KAAA,YACC,qBAAA;;;;UAiCc,0BAAA;EACf,IAAA;IACE,IAAA;EAAA;EAEF,OAAA,GAAU,IAAA,EAAM,IAAA,KAAS,OAAA,CAAQ,MAAA;AAAA;AAAA,KAIvB,6BAAA,GAAgC,0BAAA;AAAA,UAK3B,SAAA;EACf,KAAA;EACA,IAAA;EACA,IAAA;EACA,MAAA;EACA,KAAA,GAAQ,KAAA;EACR,QAAA;AAAA;AAAA,KAGU,cAAA,IAAkB,KAAA,EAAO,SAAA;;AATrC;;iBAcgB,+BAAA;EAA4C,KAAA;AAAA,EAAA,CAC1D,UAAA,WAAqB,CAAA,KACpB,CAAA;AAAA,iBAOa,uBAAA,CACd,SAAA,YACC,SAAA,IAAa,qBAAA;AAAA,iBAIA,gBAAA,kCAAA,CACd,KAAA,EAAO,0BAAA,IACP,IAAA,WACC,0BAAA,CAA2B,IAAA,EAAM,MAAA;AAAA,iBAMd,mBAAA,kCAAA,CACpB,cAAA,EAAgB,0BAAA,CAA2B,IAAA,EAAM,MAAA,GACjD,IAAA,EAAM,IAAA,EACN,MAAA,GAAS,cAAA,GACR,OAAA;EACC,OAAA;EAAe,MAAA,EAAQ,MAAA;AAAA;EAAa,OAAA;EAAgB,KAAA,EAAO,KAAA;AAAA;AAAA,iBAwCzC,2BAAA,CACpB,SAAA,EAAW,qBAAA,EACX,KAAA,EAAO,0BAAA,IACP,MAAA,GAAS,cAAA,GACR,OAAA;EAAU,UAAA;EAAgC,KAAA;AAAA;AAAA,iBA2C7B,yBAAA,CAA0B,MAAA;EACxC,UAAA;EACA,KAAA;AAAA;EACI,MAAA;AAAA;AAAA,UAQW,yCAAA;EACf,MAAA,GAAS,cAAA;EACT,YAAA,GAAe,OAAA;IAAW,MAAA;EAAA,aAA6B,OAAA;EACvD,KAAA,IAAS,GAAA;AAAA;;;;;iBAOK,kCAAA,CACd,MAAA,EAAQ,MAAA,sCACR,KAAA,EAAO,0BAAA,gBACP,UAAA,EAAY,GAAA,UACZ,OAAA,EAAS,yCAAA"}
@@ -0,0 +1,127 @@
1
+ //#region src/headless-tools.ts
2
+ /**
3
+ * Parses a headless-tool interrupt `value` from the graph. Accepts both
4
+ * `toolCall` (LangChain JS) and `tool_call` (Python / JSON snake_case).
5
+ */
6
+ function parseHeadlessToolInterruptPayload(value) {
7
+ if (typeof value !== "object" || value == null) return null;
8
+ const v = value;
9
+ if (v.type !== "tool") return null;
10
+ const rawTc = v.toolCall ?? v.tool_call;
11
+ if (typeof rawTc !== "object" || rawTc == null) return null;
12
+ const tc = rawTc;
13
+ if (typeof tc.name !== "string") return null;
14
+ return {
15
+ type: "tool",
16
+ toolCall: {
17
+ id: typeof tc.id === "string" ? tc.id : void 0,
18
+ name: tc.name,
19
+ args: tc.args
20
+ }
21
+ };
22
+ }
23
+ /**
24
+ * Strip headless-tool interrupts from a user-facing interrupt list.
25
+ */
26
+ function filterOutHeadlessToolInterrupts(interrupts) {
27
+ return interrupts.filter((interrupt) => interrupt.value == null || !isHeadlessToolInterrupt(interrupt.value));
28
+ }
29
+ function isHeadlessToolInterrupt(interrupt) {
30
+ return parseHeadlessToolInterruptPayload(interrupt) != null;
31
+ }
32
+ function findHeadlessTool(tools, name) {
33
+ return tools.find((tool) => tool.tool.name === name);
34
+ }
35
+ async function executeHeadlessTool(implementation, args, onTool) {
36
+ const startTime = Date.now();
37
+ onTool?.({
38
+ phase: "start",
39
+ name: implementation.tool.name,
40
+ args
41
+ });
42
+ try {
43
+ const result = await implementation.execute(args);
44
+ const duration = Date.now() - startTime;
45
+ onTool?.({
46
+ phase: "success",
47
+ name: implementation.tool.name,
48
+ args,
49
+ result,
50
+ duration
51
+ });
52
+ return {
53
+ success: true,
54
+ result
55
+ };
56
+ } catch (err) {
57
+ const error = err instanceof Error ? err : new Error(String(err));
58
+ const duration = Date.now() - startTime;
59
+ onTool?.({
60
+ phase: "error",
61
+ name: implementation.tool.name,
62
+ args,
63
+ error,
64
+ duration
65
+ });
66
+ return {
67
+ success: false,
68
+ error
69
+ };
70
+ }
71
+ }
72
+ async function handleHeadlessToolInterrupt(interrupt, tools, onTool) {
73
+ const { toolCall } = interrupt;
74
+ const implementation = findHeadlessTool(tools, toolCall.name);
75
+ if (!implementation) {
76
+ const error = /* @__PURE__ */ new Error(`Headless tool "${toolCall.name}" is not registered. Available tools: ${tools.map((tool) => tool.tool.name).join(", ") || "none"}`);
77
+ onTool?.({
78
+ phase: "error",
79
+ name: toolCall.name,
80
+ args: toolCall.args,
81
+ error,
82
+ duration: 0
83
+ });
84
+ return {
85
+ toolCallId: toolCall.id,
86
+ value: { error: error.message }
87
+ };
88
+ }
89
+ const result = await executeHeadlessTool(implementation, toolCall.args, onTool);
90
+ if (result.success) return {
91
+ toolCallId: toolCall.id,
92
+ value: result.result
93
+ };
94
+ return {
95
+ toolCallId: toolCall.id,
96
+ value: { error: result.error.message }
97
+ };
98
+ }
99
+ function headlessToolResumeCommand(result) {
100
+ return { resume: result.toolCallId ? { [result.toolCallId]: result.value } : result.value };
101
+ }
102
+ /**
103
+ * Execute and resume all newly seen headless-tool interrupts from a values
104
+ * payload. Callers own `handledIds` and should clear it when the thread changes.
105
+ */
106
+ function flushPendingHeadlessToolInterrupts(values, tools, handledIds, options) {
107
+ if (!tools?.length || !values) return;
108
+ const interrupts = values.__interrupt__;
109
+ if (!Array.isArray(interrupts) || interrupts.length === 0) return;
110
+ const defer = options.defer ?? ((run) => run());
111
+ for (const interrupt of interrupts) {
112
+ const headlessInterrupt = parseHeadlessToolInterruptPayload(interrupt.value);
113
+ if (!headlessInterrupt) continue;
114
+ const interruptId = interrupt.id ?? headlessInterrupt.toolCall.id ?? "";
115
+ if (handledIds.has(interruptId)) continue;
116
+ handledIds.add(interruptId);
117
+ defer(() => {
118
+ handleHeadlessToolInterrupt(headlessInterrupt, tools, options.onTool).then((result) => {
119
+ options.resumeSubmit(headlessToolResumeCommand(result));
120
+ });
121
+ });
122
+ }
123
+ }
124
+ //#endregion
125
+ export { executeHeadlessTool, filterOutHeadlessToolInterrupts, findHeadlessTool, flushPendingHeadlessToolInterrupts, handleHeadlessToolInterrupt, headlessToolResumeCommand, isHeadlessToolInterrupt, parseHeadlessToolInterruptPayload };
126
+
127
+ //# sourceMappingURL=headless-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless-tools.js","names":[],"sources":["../src/headless-tools.ts"],"sourcesContent":["import type { Interrupt } from \"./schema.js\";\n\n/**\n * Represents a headless tool interrupt payload emitted by LangChain's\n * schema-only `tool({ ... })` overload.\n *\n * Servers may serialize the nested tool call as `toolCall` (JS) or\n * `tool_call` (Python). Use {@link parseHeadlessToolInterruptPayload} to\n * normalize either shape before reading fields.\n */\nexport interface HeadlessToolInterrupt {\n type: \"tool\";\n toolCall: {\n id: string | undefined;\n name: string;\n args: unknown;\n };\n}\n\n/**\n * Parses a headless-tool interrupt `value` from the graph. Accepts both\n * `toolCall` (LangChain JS) and `tool_call` (Python / JSON snake_case).\n */\nexport function parseHeadlessToolInterruptPayload(\n value: unknown\n): HeadlessToolInterrupt | null {\n if (typeof value !== \"object\" || value == null) {\n return null;\n }\n const v = value as Record<string, unknown>;\n if (v.type !== \"tool\") {\n return null;\n }\n\n const rawTc = v.toolCall ?? v.tool_call;\n if (typeof rawTc !== \"object\" || rawTc == null) {\n return null;\n }\n const tc = rawTc as Record<string, unknown>;\n if (typeof tc.name !== \"string\") {\n return null;\n }\n\n const id = typeof tc.id === \"string\" ? tc.id : undefined;\n\n return {\n type: \"tool\",\n toolCall: {\n id,\n name: tc.name,\n args: tc.args,\n },\n };\n}\n\n/**\n * Client-side implementation returned by `headlessTool.implement(...)`.\n */\nexport interface HeadlessToolImplementation<Args = unknown, Output = unknown> {\n tool: {\n name: string;\n };\n execute: (args: Args) => Promise<Output>;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyHeadlessToolImplementation = HeadlessToolImplementation<\n any,\n any\n>;\n\nexport interface ToolEvent {\n phase: \"start\" | \"success\" | \"error\";\n name: string;\n args: unknown;\n result?: unknown;\n error?: Error;\n duration?: number;\n}\n\nexport type OnToolCallback = (event: ToolEvent) => void;\n\n/**\n * Strip headless-tool interrupts from a user-facing interrupt list.\n */\nexport function filterOutHeadlessToolInterrupts<T extends { value?: unknown }>(\n interrupts: readonly T[]\n): T[] {\n return interrupts.filter(\n (interrupt) =>\n interrupt.value == null || !isHeadlessToolInterrupt(interrupt.value)\n );\n}\n\nexport function isHeadlessToolInterrupt(\n interrupt: unknown\n): interrupt is HeadlessToolInterrupt {\n return parseHeadlessToolInterruptPayload(interrupt) != null;\n}\n\nexport function findHeadlessTool<Args = unknown, Output = unknown>(\n tools: HeadlessToolImplementation[],\n name: string\n): HeadlessToolImplementation<Args, Output> | undefined {\n return tools.find((tool) => tool.tool.name === name) as\n | HeadlessToolImplementation<Args, Output>\n | undefined;\n}\n\nexport async function executeHeadlessTool<Args = unknown, Output = unknown>(\n implementation: HeadlessToolImplementation<Args, Output>,\n args: Args,\n onTool?: OnToolCallback\n): Promise<\n { success: true; result: Output } | { success: false; error: Error }\n> {\n const startTime = Date.now();\n\n onTool?.({\n phase: \"start\",\n name: implementation.tool.name,\n args,\n });\n\n try {\n const result = await implementation.execute(args);\n const duration = Date.now() - startTime;\n\n onTool?.({\n phase: \"success\",\n name: implementation.tool.name,\n args,\n result,\n duration,\n });\n\n return { success: true, result };\n } catch (err) {\n // oxlint-disable-next-line no-instanceof/no-instanceof\n const error = err instanceof Error ? err : new Error(String(err));\n const duration = Date.now() - startTime;\n\n onTool?.({\n phase: \"error\",\n name: implementation.tool.name,\n args,\n error,\n duration,\n });\n\n return { success: false, error };\n }\n}\n\nexport async function handleHeadlessToolInterrupt(\n interrupt: HeadlessToolInterrupt,\n tools: HeadlessToolImplementation[],\n onTool?: OnToolCallback\n): Promise<{ toolCallId: string | undefined; value: unknown }> {\n const { toolCall } = interrupt;\n const implementation = findHeadlessTool(tools, toolCall.name);\n\n if (!implementation) {\n const error = new Error(\n `Headless tool \"${toolCall.name}\" is not registered. ` +\n `Available tools: ${tools.map((tool) => tool.tool.name).join(\", \") || \"none\"}`\n );\n\n onTool?.({\n phase: \"error\",\n name: toolCall.name,\n args: toolCall.args,\n error,\n duration: 0,\n });\n\n return {\n toolCallId: toolCall.id,\n value: { error: error.message },\n };\n }\n\n const result = await executeHeadlessTool(\n implementation,\n toolCall.args as never,\n onTool\n );\n\n if (result.success) {\n return {\n toolCallId: toolCall.id,\n value: result.result,\n };\n }\n\n return {\n toolCallId: toolCall.id,\n value: { error: result.error.message },\n };\n}\n\nexport function headlessToolResumeCommand(result: {\n toolCallId: string | undefined;\n value: unknown;\n}): { resume: unknown } {\n return {\n resume: result.toolCallId\n ? { [result.toolCallId]: result.value }\n : result.value,\n };\n}\n\nexport interface FlushPendingHeadlessToolInterruptsOptions {\n onTool?: OnToolCallback;\n resumeSubmit: (command: { resume: unknown }) => void | Promise<void>;\n defer?: (run: () => void) => void;\n}\n\n/**\n * Execute and resume all newly seen headless-tool interrupts from a values\n * payload. Callers own `handledIds` and should clear it when the thread changes.\n */\nexport function flushPendingHeadlessToolInterrupts(\n values: Record<string, unknown> | null | undefined,\n tools: HeadlessToolImplementation[] | undefined,\n handledIds: Set<string>,\n options: FlushPendingHeadlessToolInterruptsOptions\n): void {\n if (!tools?.length || !values) return;\n\n const interrupts = values.__interrupt__;\n if (!Array.isArray(interrupts) || interrupts.length === 0) return;\n\n const defer = options.defer ?? ((run) => run());\n\n for (const interrupt of interrupts as Interrupt[]) {\n const headlessInterrupt = parseHeadlessToolInterruptPayload(\n interrupt.value\n );\n if (!headlessInterrupt) continue;\n\n const interruptId = interrupt.id ?? headlessInterrupt.toolCall.id ?? \"\";\n if (handledIds.has(interruptId)) continue;\n handledIds.add(interruptId);\n\n defer(() => {\n void handleHeadlessToolInterrupt(\n headlessInterrupt,\n tools,\n options.onTool\n ).then((result) => {\n void options.resumeSubmit(headlessToolResumeCommand(result));\n });\n });\n }\n}\n"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -2,7 +2,16 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_fetch = require("./singletons/fetch.cjs");
3
3
  const require_client = require("./client.cjs");
4
4
  const require_errors = require("./ui/errors.cjs");
5
+ const require_headless_tools = require("./headless-tools.cjs");
5
6
  exports.Client = require_client.Client;
6
7
  exports.StreamError = require_errors.StreamError;
8
+ exports.executeHeadlessTool = require_headless_tools.executeHeadlessTool;
9
+ exports.filterOutHeadlessToolInterrupts = require_headless_tools.filterOutHeadlessToolInterrupts;
10
+ exports.findHeadlessTool = require_headless_tools.findHeadlessTool;
11
+ exports.flushPendingHeadlessToolInterrupts = require_headless_tools.flushPendingHeadlessToolInterrupts;
7
12
  exports.getApiKey = require_client.getApiKey;
13
+ exports.handleHeadlessToolInterrupt = require_headless_tools.handleHeadlessToolInterrupt;
14
+ exports.headlessToolResumeCommand = require_headless_tools.headlessToolResumeCommand;
15
+ exports.isHeadlessToolInterrupt = require_headless_tools.isHeadlessToolInterrupt;
8
16
  exports.overrideFetchImplementation = require_fetch.overrideFetchImplementation;
17
+ exports.parseHeadlessToolInterruptPayload = require_headless_tools.parseHeadlessToolInterruptPayload;
package/dist/index.d.cts CHANGED
@@ -5,9 +5,10 @@ import { Command, OnConflictBehavior, RunsInvokePayload, StreamEvent } from "./t
5
5
  import { Client, ClientConfig, RequestHook, getApiKey } from "./client.cjs";
6
6
  import { overrideFetchImplementation } from "./singletons/fetch.cjs";
7
7
  import { BagTemplate } from "./types.template.cjs";
8
+ import { AnyHeadlessToolImplementation, FlushPendingHeadlessToolInterruptsOptions, HeadlessToolImplementation, HeadlessToolInterrupt, OnToolCallback, ToolEvent, executeHeadlessTool, filterOutHeadlessToolInterrupts, findHeadlessTool, flushPendingHeadlessToolInterrupts, handleHeadlessToolInterrupt, headlessToolResumeCommand, isHeadlessToolInterrupt, parseHeadlessToolInterruptPayload } from "./headless-tools.cjs";
8
9
  import { BaseStream } from "./ui/stream/base.cjs";
9
10
  import { UseAgentStream, UseAgentStreamOptions } from "./ui/stream/agent.cjs";
10
11
  import { UseDeepAgentStream, UseDeepAgentStreamOptions } from "./ui/stream/deep-agent.cjs";
11
12
  import { InferBag, InferNodeNames, InferNodeReturnTypes, InferStateType, InferSubagentStates, InferToolCalls, ResolveStreamInterface, ResolveStreamOptions } from "./ui/stream/index.cjs";
12
13
  import { StreamError } from "./ui/errors.cjs";
13
- export { type AIMessage, type Assistant, type AssistantBase, type AssistantGraph, type AssistantVersion, type AssistantsSearchResponse, type BagTemplate, BaseStream, type Checkpoint, Client, type ClientConfig, type Command, type Config, type Cron, type CronCreateForThreadResponse, type CronCreateResponse, type CustomStreamEvent, type DebugStreamEvent, type DefaultToolCall, type DefaultValues, type ErrorStreamEvent, type EventsStreamEvent, type FeedbackStreamEvent, type FunctionMessage, type GraphSchema, type HumanMessage, InferBag, InferNodeNames, InferNodeReturnTypes, InferStateType, InferSubagentStates, InferToolCalls, type Interrupt, type Item, type ListNamespaceResponse, type Message, type MessagesStreamEvent, type MessagesTupleStreamEvent, type Metadata, type MetadataStreamEvent, type OnConflictBehavior, type RemoveMessage, type RequestHook, ResolveStreamInterface, ResolveStreamOptions, type Run, type RunsInvokePayload, type SearchItem, type SearchItemsResponse, StreamError, type StreamEvent, type StreamMode, type SystemMessage, type Thread, type ThreadState, type ThreadStatus, type ThreadTask, type ToolCallFromTool, type ToolCallState, type ToolCallWithResult, type ToolCallsFromTools, type ToolMessage, type ToolProgress, type ToolsStreamEvent, type UpdatesStreamEvent, UseAgentStream, UseAgentStreamOptions, UseDeepAgentStream, UseDeepAgentStreamOptions, type ValuesStreamEvent, getApiKey, overrideFetchImplementation };
14
+ export { type AIMessage, type AnyHeadlessToolImplementation, type Assistant, type AssistantBase, type AssistantGraph, type AssistantVersion, type AssistantsSearchResponse, type BagTemplate, BaseStream, type Checkpoint, Client, type ClientConfig, type Command, type Config, type Cron, type CronCreateForThreadResponse, type CronCreateResponse, type CustomStreamEvent, type DebugStreamEvent, type DefaultToolCall, type DefaultValues, type ErrorStreamEvent, type EventsStreamEvent, type FeedbackStreamEvent, type FlushPendingHeadlessToolInterruptsOptions, type FunctionMessage, type GraphSchema, type HeadlessToolImplementation, type HeadlessToolInterrupt, type HumanMessage, InferBag, InferNodeNames, InferNodeReturnTypes, InferStateType, InferSubagentStates, InferToolCalls, type Interrupt, type Item, type ListNamespaceResponse, type Message, type MessagesStreamEvent, type MessagesTupleStreamEvent, type Metadata, type MetadataStreamEvent, type OnConflictBehavior, type OnToolCallback, type RemoveMessage, type RequestHook, ResolveStreamInterface, ResolveStreamOptions, type Run, type RunsInvokePayload, type SearchItem, type SearchItemsResponse, StreamError, type StreamEvent, type StreamMode, type SystemMessage, type Thread, type ThreadState, type ThreadStatus, type ThreadTask, type ToolCallFromTool, type ToolCallState, type ToolCallWithResult, type ToolCallsFromTools, type ToolEvent, type ToolMessage, type ToolProgress, type ToolsStreamEvent, type UpdatesStreamEvent, UseAgentStream, UseAgentStreamOptions, UseDeepAgentStream, UseDeepAgentStreamOptions, type ValuesStreamEvent, executeHeadlessTool, filterOutHeadlessToolInterrupts, findHeadlessTool, flushPendingHeadlessToolInterrupts, getApiKey, handleHeadlessToolInterrupt, headlessToolResumeCommand, isHeadlessToolInterrupt, overrideFetchImplementation, parseHeadlessToolInterruptPayload };
package/dist/index.d.ts CHANGED
@@ -5,9 +5,10 @@ import { Command, OnConflictBehavior, RunsInvokePayload, StreamEvent } from "./t
5
5
  import { Client, ClientConfig, RequestHook, getApiKey } from "./client.js";
6
6
  import { overrideFetchImplementation } from "./singletons/fetch.js";
7
7
  import { BagTemplate } from "./types.template.js";
8
+ import { AnyHeadlessToolImplementation, FlushPendingHeadlessToolInterruptsOptions, HeadlessToolImplementation, HeadlessToolInterrupt, OnToolCallback, ToolEvent, executeHeadlessTool, filterOutHeadlessToolInterrupts, findHeadlessTool, flushPendingHeadlessToolInterrupts, handleHeadlessToolInterrupt, headlessToolResumeCommand, isHeadlessToolInterrupt, parseHeadlessToolInterruptPayload } from "./headless-tools.js";
8
9
  import { BaseStream } from "./ui/stream/base.js";
9
10
  import { UseAgentStream, UseAgentStreamOptions } from "./ui/stream/agent.js";
10
11
  import { UseDeepAgentStream, UseDeepAgentStreamOptions } from "./ui/stream/deep-agent.js";
11
12
  import { InferBag, InferNodeNames, InferNodeReturnTypes, InferStateType, InferSubagentStates, InferToolCalls, ResolveStreamInterface, ResolveStreamOptions } from "./ui/stream/index.js";
12
13
  import { StreamError } from "./ui/errors.js";
13
- export { type AIMessage, type Assistant, type AssistantBase, type AssistantGraph, type AssistantVersion, type AssistantsSearchResponse, type BagTemplate, BaseStream, type Checkpoint, Client, type ClientConfig, type Command, type Config, type Cron, type CronCreateForThreadResponse, type CronCreateResponse, type CustomStreamEvent, type DebugStreamEvent, type DefaultToolCall, type DefaultValues, type ErrorStreamEvent, type EventsStreamEvent, type FeedbackStreamEvent, type FunctionMessage, type GraphSchema, type HumanMessage, InferBag, InferNodeNames, InferNodeReturnTypes, InferStateType, InferSubagentStates, InferToolCalls, type Interrupt, type Item, type ListNamespaceResponse, type Message, type MessagesStreamEvent, type MessagesTupleStreamEvent, type Metadata, type MetadataStreamEvent, type OnConflictBehavior, type RemoveMessage, type RequestHook, ResolveStreamInterface, ResolveStreamOptions, type Run, type RunsInvokePayload, type SearchItem, type SearchItemsResponse, StreamError, type StreamEvent, type StreamMode, type SystemMessage, type Thread, type ThreadState, type ThreadStatus, type ThreadTask, type ToolCallFromTool, type ToolCallState, type ToolCallWithResult, type ToolCallsFromTools, type ToolMessage, type ToolProgress, type ToolsStreamEvent, type UpdatesStreamEvent, UseAgentStream, UseAgentStreamOptions, UseDeepAgentStream, UseDeepAgentStreamOptions, type ValuesStreamEvent, getApiKey, overrideFetchImplementation };
14
+ export { type AIMessage, type AnyHeadlessToolImplementation, type Assistant, type AssistantBase, type AssistantGraph, type AssistantVersion, type AssistantsSearchResponse, type BagTemplate, BaseStream, type Checkpoint, Client, type ClientConfig, type Command, type Config, type Cron, type CronCreateForThreadResponse, type CronCreateResponse, type CustomStreamEvent, type DebugStreamEvent, type DefaultToolCall, type DefaultValues, type ErrorStreamEvent, type EventsStreamEvent, type FeedbackStreamEvent, type FlushPendingHeadlessToolInterruptsOptions, type FunctionMessage, type GraphSchema, type HeadlessToolImplementation, type HeadlessToolInterrupt, type HumanMessage, InferBag, InferNodeNames, InferNodeReturnTypes, InferStateType, InferSubagentStates, InferToolCalls, type Interrupt, type Item, type ListNamespaceResponse, type Message, type MessagesStreamEvent, type MessagesTupleStreamEvent, type Metadata, type MetadataStreamEvent, type OnConflictBehavior, type OnToolCallback, type RemoveMessage, type RequestHook, ResolveStreamInterface, ResolveStreamOptions, type Run, type RunsInvokePayload, type SearchItem, type SearchItemsResponse, StreamError, type StreamEvent, type StreamMode, type SystemMessage, type Thread, type ThreadState, type ThreadStatus, type ThreadTask, type ToolCallFromTool, type ToolCallState, type ToolCallWithResult, type ToolCallsFromTools, type ToolEvent, type ToolMessage, type ToolProgress, type ToolsStreamEvent, type UpdatesStreamEvent, UseAgentStream, UseAgentStreamOptions, UseDeepAgentStream, UseDeepAgentStreamOptions, type ValuesStreamEvent, executeHeadlessTool, filterOutHeadlessToolInterrupts, findHeadlessTool, flushPendingHeadlessToolInterrupts, getApiKey, handleHeadlessToolInterrupt, headlessToolResumeCommand, isHeadlessToolInterrupt, overrideFetchImplementation, parseHeadlessToolInterruptPayload };
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { overrideFetchImplementation } from "./singletons/fetch.js";
2
2
  import { Client, getApiKey } from "./client.js";
3
3
  import { StreamError } from "./ui/errors.js";
4
- export { Client, StreamError, getApiKey, overrideFetchImplementation };
4
+ import { executeHeadlessTool, filterOutHeadlessToolInterrupts, findHeadlessTool, flushPendingHeadlessToolInterrupts, handleHeadlessToolInterrupt, headlessToolResumeCommand, isHeadlessToolInterrupt, parseHeadlessToolInterruptPayload } from "./headless-tools.js";
5
+ export { Client, StreamError, executeHeadlessTool, filterOutHeadlessToolInterrupts, findHeadlessTool, flushPendingHeadlessToolInterrupts, getApiKey, handleHeadlessToolInterrupt, headlessToolResumeCommand, isHeadlessToolInterrupt, overrideFetchImplementation, parseHeadlessToolInterruptPayload };
@@ -1,11 +1,20 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_headless_tools = require("../headless-tools.cjs");
2
3
  const require_subagents = require("../ui/subagents.cjs");
3
4
  const require_stream_custom = require("./stream.custom.cjs");
4
5
  const require_stream = require("./stream.cjs");
5
6
  exports.FetchStreamTransport = require_stream_custom.FetchStreamTransport;
6
7
  exports.SubagentManager = require_subagents.SubagentManager;
7
8
  exports.calculateDepthFromNamespace = require_subagents.calculateDepthFromNamespace;
9
+ exports.executeHeadlessTool = require_headless_tools.executeHeadlessTool;
8
10
  exports.extractParentIdFromNamespace = require_subagents.extractParentIdFromNamespace;
9
11
  exports.extractToolCallIdFromNamespace = require_subagents.extractToolCallIdFromNamespace;
12
+ exports.filterOutHeadlessToolInterrupts = require_headless_tools.filterOutHeadlessToolInterrupts;
13
+ exports.findHeadlessTool = require_headless_tools.findHeadlessTool;
14
+ exports.flushPendingHeadlessToolInterrupts = require_headless_tools.flushPendingHeadlessToolInterrupts;
15
+ exports.handleHeadlessToolInterrupt = require_headless_tools.handleHeadlessToolInterrupt;
16
+ exports.headlessToolResumeCommand = require_headless_tools.headlessToolResumeCommand;
17
+ exports.isHeadlessToolInterrupt = require_headless_tools.isHeadlessToolInterrupt;
10
18
  exports.isSubagentNamespace = require_subagents.isSubagentNamespace;
19
+ exports.parseHeadlessToolInterruptPayload = require_headless_tools.parseHeadlessToolInterruptPayload;
11
20
  exports.useStream = require_stream.useStream;
@@ -1,4 +1,5 @@
1
1
  import { DefaultToolCall, ToolCallFromTool, ToolCallState, ToolCallWithResult, ToolCallsFromTools } from "../types.messages.cjs";
2
+ import { AnyHeadlessToolImplementation, FlushPendingHeadlessToolInterruptsOptions, HeadlessToolImplementation, HeadlessToolInterrupt, OnToolCallback, ToolEvent, executeHeadlessTool, filterOutHeadlessToolInterrupts, findHeadlessTool, flushPendingHeadlessToolInterrupts, handleHeadlessToolInterrupt, headlessToolResumeCommand, isHeadlessToolInterrupt, parseHeadlessToolInterruptPayload } from "../headless-tools.cjs";
2
3
  import { AgentTypeConfigLike, BaseSubagentState, CompiledSubAgentLike, DeepAgentTypeConfigLike, DefaultSubagentStates, ExtractAgentConfig, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, GetToolCallsType, InferAgentToolCalls, InferDeepAgentSubagents, InferSubagentByName, InferSubagentNames, InferSubagentState, IsAgentLike, IsDeepAgentLike, MessageMetadata, SubAgentLike, SubagentStateMap, SubagentStatus, SubagentStream, SubagentStreamInterface, SubagentToolCall, UseStreamCustomOptions, UseStreamOptions, UseStreamThread, UseStreamTransport } from "../ui/types.cjs";
3
4
  import { BaseStream } from "../ui/stream/base.cjs";
4
5
  import { UseAgentStream, UseAgentStreamOptions } from "../ui/stream/agent.cjs";
@@ -8,4 +9,4 @@ import { UseStream, UseStreamCustom } from "./types.cjs";
8
9
  import { useStream } from "./stream.cjs";
9
10
  import { FetchStreamTransport } from "./stream.custom.cjs";
10
11
  import { SubagentManager, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace } from "../ui/subagents.cjs";
11
- export { type AgentTypeConfigLike, type BaseStream, type BaseSubagentState, type CompiledSubAgentLike, type DeepAgentTypeConfigLike, type DefaultSubagentStates, type DefaultToolCall, type ExtractAgentConfig, type ExtractDeepAgentConfig, type ExtractSubAgentMiddleware, FetchStreamTransport, type GetToolCallsType, type InferAgentToolCalls, type InferBag, type InferDeepAgentSubagents, type InferNodeNames, type InferStateType, type InferSubagentByName, type InferSubagentNames, type InferSubagentState, type InferSubagentStates, type InferToolCalls, type IsAgentLike, type IsDeepAgentLike, type MessageMetadata, type ResolveStreamInterface, type ResolveStreamOptions, type SubAgentLike, SubagentManager, type SubagentStateMap, type SubagentStatus, type SubagentStream, type SubagentStreamInterface, type SubagentToolCall, type ToolCallFromTool, type ToolCallState, type ToolCallWithResult, type ToolCallsFromTools, type UseAgentStream, type UseAgentStreamOptions, type UseDeepAgentStream, type UseDeepAgentStreamOptions, type UseStream, type UseStreamCustom, type UseStreamCustomOptions, type UseStreamOptions, type UseStreamThread, type UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace, useStream };
12
+ export { type AgentTypeConfigLike, type AnyHeadlessToolImplementation, type BaseStream, type BaseSubagentState, type CompiledSubAgentLike, type DeepAgentTypeConfigLike, type DefaultSubagentStates, type DefaultToolCall, type ExtractAgentConfig, type ExtractDeepAgentConfig, type ExtractSubAgentMiddleware, FetchStreamTransport, type FlushPendingHeadlessToolInterruptsOptions, type GetToolCallsType, type HeadlessToolImplementation, type HeadlessToolInterrupt, type InferAgentToolCalls, type InferBag, type InferDeepAgentSubagents, type InferNodeNames, type InferStateType, type InferSubagentByName, type InferSubagentNames, type InferSubagentState, type InferSubagentStates, type InferToolCalls, type IsAgentLike, type IsDeepAgentLike, type MessageMetadata, type OnToolCallback, type ResolveStreamInterface, type ResolveStreamOptions, type SubAgentLike, SubagentManager, type SubagentStateMap, type SubagentStatus, type SubagentStream, type SubagentStreamInterface, type SubagentToolCall, type ToolCallFromTool, type ToolCallState, type ToolCallWithResult, type ToolCallsFromTools, type ToolEvent, type UseAgentStream, type UseAgentStreamOptions, type UseDeepAgentStream, type UseDeepAgentStreamOptions, type UseStream, type UseStreamCustom, type UseStreamCustomOptions, type UseStreamOptions, type UseStreamThread, type UseStreamTransport, calculateDepthFromNamespace, executeHeadlessTool, extractParentIdFromNamespace, extractToolCallIdFromNamespace, filterOutHeadlessToolInterrupts, findHeadlessTool, flushPendingHeadlessToolInterrupts, handleHeadlessToolInterrupt, headlessToolResumeCommand, isHeadlessToolInterrupt, isSubagentNamespace, parseHeadlessToolInterruptPayload, useStream };
@@ -1,4 +1,5 @@
1
1
  import { DefaultToolCall, ToolCallFromTool, ToolCallState, ToolCallWithResult, ToolCallsFromTools } from "../types.messages.js";
2
+ import { AnyHeadlessToolImplementation, FlushPendingHeadlessToolInterruptsOptions, HeadlessToolImplementation, HeadlessToolInterrupt, OnToolCallback, ToolEvent, executeHeadlessTool, filterOutHeadlessToolInterrupts, findHeadlessTool, flushPendingHeadlessToolInterrupts, handleHeadlessToolInterrupt, headlessToolResumeCommand, isHeadlessToolInterrupt, parseHeadlessToolInterruptPayload } from "../headless-tools.js";
2
3
  import { AgentTypeConfigLike, BaseSubagentState, CompiledSubAgentLike, DeepAgentTypeConfigLike, DefaultSubagentStates, ExtractAgentConfig, ExtractDeepAgentConfig, ExtractSubAgentMiddleware, GetToolCallsType, InferAgentToolCalls, InferDeepAgentSubagents, InferSubagentByName, InferSubagentNames, InferSubagentState, IsAgentLike, IsDeepAgentLike, MessageMetadata, SubAgentLike, SubagentStateMap, SubagentStatus, SubagentStream, SubagentStreamInterface, SubagentToolCall, UseStreamCustomOptions, UseStreamOptions, UseStreamThread, UseStreamTransport } from "../ui/types.js";
3
4
  import { BaseStream } from "../ui/stream/base.js";
4
5
  import { UseAgentStream, UseAgentStreamOptions } from "../ui/stream/agent.js";
@@ -8,4 +9,4 @@ import { UseStream, UseStreamCustom } from "./types.js";
8
9
  import { useStream } from "./stream.js";
9
10
  import { FetchStreamTransport } from "./stream.custom.js";
10
11
  import { SubagentManager, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace } from "../ui/subagents.js";
11
- export { type AgentTypeConfigLike, type BaseStream, type BaseSubagentState, type CompiledSubAgentLike, type DeepAgentTypeConfigLike, type DefaultSubagentStates, type DefaultToolCall, type ExtractAgentConfig, type ExtractDeepAgentConfig, type ExtractSubAgentMiddleware, FetchStreamTransport, type GetToolCallsType, type InferAgentToolCalls, type InferBag, type InferDeepAgentSubagents, type InferNodeNames, type InferStateType, type InferSubagentByName, type InferSubagentNames, type InferSubagentState, type InferSubagentStates, type InferToolCalls, type IsAgentLike, type IsDeepAgentLike, type MessageMetadata, type ResolveStreamInterface, type ResolveStreamOptions, type SubAgentLike, SubagentManager, type SubagentStateMap, type SubagentStatus, type SubagentStream, type SubagentStreamInterface, type SubagentToolCall, type ToolCallFromTool, type ToolCallState, type ToolCallWithResult, type ToolCallsFromTools, type UseAgentStream, type UseAgentStreamOptions, type UseDeepAgentStream, type UseDeepAgentStreamOptions, type UseStream, type UseStreamCustom, type UseStreamCustomOptions, type UseStreamOptions, type UseStreamThread, type UseStreamTransport, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace, useStream };
12
+ export { type AgentTypeConfigLike, type AnyHeadlessToolImplementation, type BaseStream, type BaseSubagentState, type CompiledSubAgentLike, type DeepAgentTypeConfigLike, type DefaultSubagentStates, type DefaultToolCall, type ExtractAgentConfig, type ExtractDeepAgentConfig, type ExtractSubAgentMiddleware, FetchStreamTransport, type FlushPendingHeadlessToolInterruptsOptions, type GetToolCallsType, type HeadlessToolImplementation, type HeadlessToolInterrupt, type InferAgentToolCalls, type InferBag, type InferDeepAgentSubagents, type InferNodeNames, type InferStateType, type InferSubagentByName, type InferSubagentNames, type InferSubagentState, type InferSubagentStates, type InferToolCalls, type IsAgentLike, type IsDeepAgentLike, type MessageMetadata, type OnToolCallback, type ResolveStreamInterface, type ResolveStreamOptions, type SubAgentLike, SubagentManager, type SubagentStateMap, type SubagentStatus, type SubagentStream, type SubagentStreamInterface, type SubagentToolCall, type ToolCallFromTool, type ToolCallState, type ToolCallWithResult, type ToolCallsFromTools, type ToolEvent, type UseAgentStream, type UseAgentStreamOptions, type UseDeepAgentStream, type UseDeepAgentStreamOptions, type UseStream, type UseStreamCustom, type UseStreamCustomOptions, type UseStreamOptions, type UseStreamThread, type UseStreamTransport, calculateDepthFromNamespace, executeHeadlessTool, extractParentIdFromNamespace, extractToolCallIdFromNamespace, filterOutHeadlessToolInterrupts, findHeadlessTool, flushPendingHeadlessToolInterrupts, handleHeadlessToolInterrupt, headlessToolResumeCommand, isHeadlessToolInterrupt, isSubagentNamespace, parseHeadlessToolInterruptPayload, useStream };
@@ -1,4 +1,5 @@
1
+ import { executeHeadlessTool, filterOutHeadlessToolInterrupts, findHeadlessTool, flushPendingHeadlessToolInterrupts, handleHeadlessToolInterrupt, headlessToolResumeCommand, isHeadlessToolInterrupt, parseHeadlessToolInterruptPayload } from "../headless-tools.js";
1
2
  import { SubagentManager, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace } from "../ui/subagents.js";
2
3
  import { FetchStreamTransport } from "./stream.custom.js";
3
4
  import { useStream } from "./stream.js";
4
- export { FetchStreamTransport, SubagentManager, calculateDepthFromNamespace, extractParentIdFromNamespace, extractToolCallIdFromNamespace, isSubagentNamespace, useStream };
5
+ export { FetchStreamTransport, SubagentManager, calculateDepthFromNamespace, executeHeadlessTool, extractParentIdFromNamespace, extractToolCallIdFromNamespace, filterOutHeadlessToolInterrupts, findHeadlessTool, flushPendingHeadlessToolInterrupts, handleHeadlessToolInterrupt, headlessToolResumeCommand, isHeadlessToolInterrupt, isSubagentNamespace, parseHeadlessToolInterruptPayload, useStream };