@picoflow/ezgraph 0.0.6 → 0.0.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 (32) hide show
  1. package/README.md +172 -88
  2. package/dist/framework/base-graph.js +1 -1
  3. package/dist/framework/conversation-node.js +1 -1
  4. package/dist/framework/conversation-runner.js +1 -1
  5. package/dist/framework/graph-engine.js +1 -1
  6. package/dist/framework/graph-node.js +1 -1
  7. package/dist/framework/graph-state.js +1 -1
  8. package/dist/framework/langchain-llm-gateway.js +1 -1
  9. package/dist/framework/langchain-provider.adapter.js +1 -1
  10. package/dist/framework/node-invocation.js +1 -0
  11. package/dist/framework/node-outcome.js +1 -1
  12. package/dist/framework/node-state.js +1 -1
  13. package/dist/framework/persistence/session-manager.js +1 -1
  14. package/dist/framework/state-graph-ext.js +1 -1
  15. package/dist/framework/tool-response.js +1 -0
  16. package/dist/index.js +1 -1
  17. package/dist/types/npmlib/src/index.d.ts +4 -4
  18. package/dist/types/src/framework/base-graph.d.ts +8 -0
  19. package/dist/types/src/framework/conversation-node.d.ts +8 -14
  20. package/dist/types/src/framework/conversation-runner.d.ts +3 -3
  21. package/dist/types/src/framework/graph-node.d.ts +24 -21
  22. package/dist/types/src/framework/graph-registry.d.ts +3 -0
  23. package/dist/types/src/framework/graph-state.d.ts +0 -2
  24. package/dist/types/src/framework/node-invocation.d.ts +12 -0
  25. package/dist/types/src/framework/node-outcome.d.ts +1 -30
  26. package/dist/types/src/framework/node-state.d.ts +2 -1
  27. package/dist/types/src/framework/persistence/session-manager.d.ts +1 -0
  28. package/dist/types/src/framework/state-graph-ext.d.ts +2 -8
  29. package/dist/types/src/framework/tool-response.d.ts +25 -0
  30. package/package.json +1 -1
  31. package/dist/framework/conversation-tool-result.js +0 -1
  32. package/dist/types/src/framework/conversation-tool-result.d.ts +0 -19
@@ -33,6 +33,7 @@ export type BeginTurnResult<State extends GraphState = GraphState> = Readonly<{
33
33
  export type SessionWriteOptions = Readonly<{
34
34
  owner?: string;
35
35
  expectedRevision?: number;
36
+ keepTurn?: boolean;
36
37
  }>;
37
38
  export type SessionGraphStatus = 'in_progress' | 'completed' | 'error';
38
39
  export type SessionGraphDocument<State extends GraphState = GraphState> = {
@@ -1,11 +1,10 @@
1
- import { END, type ExtractStateType, type ExtractUpdateType, START, type StateDefinitionInit } from '@langchain/langgraph';
1
+ import { type Command, END, type ExtractStateType, type ExtractUpdateType, START, type StateDefinitionInit } from '@langchain/langgraph';
2
2
  import { GRAPH_NODE_CLASS } from './graph-node.js';
3
3
  export type RegisteredNode<State, Update> = {
4
4
  readonly id: string;
5
- readonly invoke: (state: State) => Promise<Update>;
5
+ readonly invoke: (state: State) => Promise<Update | Command<unknown, Update & Record<string, unknown>, string>>;
6
6
  route(state: State): string;
7
7
  validateTools?(): void;
8
- readonly supportsAutomaticOutcomeRouting?: boolean;
9
8
  };
10
9
  export type GraphNodeClass = {
11
10
  readonly name: string;
@@ -33,10 +32,7 @@ export declare class StateGraphExt<StateDefinition extends StateDefinitionInit>
33
32
  private readonly graph;
34
33
  private readonly addedNodeIds;
35
34
  private readonly nodeClasses;
36
- private readonly explicitConditionalNodeIds;
37
35
  private readonly nodeInstances;
38
- private automaticOutcomeRoutingRequested;
39
- private automaticOutcomeRoutesAdded;
40
36
  constructor(state: StateDefinition, createGraphNode?: GraphNodeFactory<ExtractStateType<StateDefinition>, ExtractUpdateType<StateDefinition>> | undefined, endNode?: string);
41
37
  addNode(NodeClass: GraphNodeClass): this;
42
38
  nodes(...NodeClasses: readonly GraphNodeClass[]): this;
@@ -44,12 +40,10 @@ export declare class StateGraphExt<StateDefinition extends StateDefinitionInit>
44
40
  addEdge(source: GraphEndpoint | readonly GraphEndpoint[], target: GraphEndpoint): this;
45
41
  branch<NodeClass extends GraphNodeClass, Destinations extends Readonly<Record<RouteOf<NodeClass>, GraphEndpoint>>>(NodeClass: NodeClass, destinations: BranchDestinations<NodeClass, Destinations>): this;
46
42
  branchBy(NodeClass: GraphNodeClass, options: CurrentNodeBranchOptions): this;
47
- configAutoRoute(): this;
48
43
  registerTurns(...NodeClasses: readonly GraphNodeClass[]): this;
49
44
  compile(): import("@langchain/langgraph").CompiledStateGraph<ExtractStateType<StateDefinition, StateDefinition> extends infer T ? { [K in keyof T]: T[K]; } : never, ExtractUpdateType<StateDefinition, StateDefinition> extends infer T_1 ? { [K_1 in keyof T_1]: T_1[K_1]; } : never, string, StateDefinition extends import("@langchain/langgraph").AnyStateSchema ? StateDefinition : StateDefinition extends StateDefinitionInit ? import("@langchain/langgraph").ToStateDefinition<StateDefinition> : import("@langchain/langgraph").StateDefinition, StateDefinition extends import("@langchain/langgraph").AnyStateSchema ? StateDefinition : StateDefinition extends StateDefinitionInit ? import("@langchain/langgraph").ToStateDefinition<StateDefinition> : import("@langchain/langgraph").StateDefinition, import("@langchain/langgraph").StateDefinition, unknown, unknown, unknown, []>;
50
45
  private addConditionalEdge;
51
46
  private registerNode;
52
- private addAutomaticOutcomeRoutes;
53
47
  private assertSource;
54
48
  private assertTarget;
55
49
  private assertAddedNode;
@@ -0,0 +1,25 @@
1
+ import type { BaseMessage } from '@langchain/core/messages';
2
+ import type { GraphNodeLocalState, GraphNodeTarget } from './node-outcome.js';
3
+ export type ToolResponseKind = 'go' | 'stay' | 'direct' | 'finish';
4
+ export type ToolResponse = Readonly<{
5
+ kind: ToolResponseKind;
6
+ target?: GraphNodeTarget;
7
+ feedback?: string;
8
+ state?: Record<string, unknown>;
9
+ message?: BaseMessage;
10
+ messages?: readonly BaseMessage[];
11
+ cleanup?: () => Promise<void>;
12
+ response?: string;
13
+ }>;
14
+ export type ToolResponseBuilder<NodeClass extends GraphNodeTarget> = ToolResponse & {
15
+ withState(state: Partial<GraphNodeLocalState<NodeClass>>): ToolResponseBuilder<NodeClass>;
16
+ withMessage(message: BaseMessage): ToolResponseBuilder<NodeClass>;
17
+ withMessages(messages: readonly BaseMessage[]): ToolResponseBuilder<NodeClass>;
18
+ withCleanup(cleanup: () => Promise<void>): ToolResponseBuilder<NodeClass>;
19
+ withToolFeedback(feedback: string): ToolResponseBuilder<NodeClass>;
20
+ };
21
+ export declare function go<NodeClass extends GraphNodeTarget>(target: NodeClass): ToolResponseBuilder<NodeClass>;
22
+ export declare function stay(feedback?: string): ToolResponseBuilder<GraphNodeTarget>;
23
+ export declare function direct(content: string | object): ToolResponseBuilder<GraphNodeTarget>;
24
+ export declare function finish(content: string | object): ToolResponseBuilder<GraphNodeTarget>;
25
+ export declare function isToolResponse(value: unknown): value is ToolResponse;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picoflow/ezgraph",
3
- "version": "0.0.6",
3
+ "version": "0.0.7",
4
4
  "description": "Provider-neutral graph primitives built on LangGraph and LangChain.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1 +0,0 @@
1
- var i=Object.defineProperty;var n=(o,t)=>i(o,"name",{value:t,configurable:!0});const u=Symbol("TOOL_RESULT_EFFECTS");function p(o){return l({output:o},{context:[],stops:[]})}n(p,"createConversationToolResult");function b(o,t){const s=o[u];if(!s)return o;for(const e of s.context){const r=typeof e=="function"?e(t):e;if(!r||typeof r!="object"||Array.isArray(r))throw new Error("withContext() must produce an object patch.");Object.assign(t,r)}const a=s.stops.some(e=>typeof e=="function"?e(t):e);return{...o,...a?{stopAfterBatch:!0}:{}}}n(b,"resolveConversationToolResult");function l(o,t){const s={...o},a=n((e,r=t)=>l({...o,...e},r),"derive");return Object.defineProperties(s,{[u]:{enumerable:!1,value:t},withContext:{enumerable:!1,value:n(e=>a({},{...t,context:[...t.context,e]}),"value")},withMessages:{enumerable:!1,value:n(e=>{const r=Array.isArray(e)?[...e]:[e];return a({messages:[...o.messages??[],...r]})},"value")},withCleanup:{enumerable:!1,value:n(e=>a({cleanup:e}),"value")},haltAfterBatch:{enumerable:!1,value:n(()=>a({},{...t,stops:[...t.stops,!0]}),"value")},stopAfterBatchWhen:{enumerable:!1,value:n(e=>a({},{...t,stops:[...t.stops,e]}),"value")}}),s}n(l,"createBuilder");export{p as createConversationToolResult,b as resolveConversationToolResult};
@@ -1,19 +0,0 @@
1
- import type { BaseMessage } from '@langchain/core/messages';
2
- export type ConversationToolResult = {
3
- output: unknown;
4
- messages?: BaseMessage[];
5
- cleanup?: () => Promise<void>;
6
- stopAfterBatch?: boolean;
7
- };
8
- type ContextEffect<Context extends object> = Partial<Context> | ((context: Readonly<Context>) => Partial<Context>);
9
- type StopPredicate<Context extends object> = boolean | ((context: Readonly<Context>) => boolean);
10
- export type ConversationToolResultBuilder<Context extends object> = ConversationToolResult & {
11
- withContext(effect: ContextEffect<Context>): ConversationToolResultBuilder<Context>;
12
- withMessages(messages: BaseMessage | readonly BaseMessage[]): ConversationToolResultBuilder<Context>;
13
- withCleanup(cleanup: () => Promise<void>): ConversationToolResultBuilder<Context>;
14
- haltAfterBatch(): ConversationToolResultBuilder<Context>;
15
- stopAfterBatchWhen(predicate: StopPredicate<Context>): ConversationToolResultBuilder<Context>;
16
- };
17
- export declare function createConversationToolResult<Context extends object>(output: unknown): ConversationToolResultBuilder<Context>;
18
- export declare function resolveConversationToolResult<Context extends object>(result: ConversationToolResult, context: Context): ConversationToolResult;
19
- export {};