@oni.bot/core 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/README.md +308 -0
  2. package/dist/agents/context.d.ts +24 -0
  3. package/dist/agents/context.d.ts.map +1 -0
  4. package/dist/agents/context.js +93 -0
  5. package/dist/agents/context.js.map +1 -0
  6. package/dist/agents/define-agent.d.ts +10 -0
  7. package/dist/agents/define-agent.d.ts.map +1 -0
  8. package/dist/agents/define-agent.js +121 -0
  9. package/dist/agents/define-agent.js.map +1 -0
  10. package/dist/agents/functional-agent.d.ts +12 -0
  11. package/dist/agents/functional-agent.d.ts.map +1 -0
  12. package/dist/agents/functional-agent.js +115 -0
  13. package/dist/agents/functional-agent.js.map +1 -0
  14. package/dist/agents/index.d.ts +6 -0
  15. package/dist/agents/index.d.ts.map +1 -0
  16. package/dist/agents/index.js +7 -0
  17. package/dist/agents/index.js.map +1 -0
  18. package/dist/agents/types.d.ts +62 -0
  19. package/dist/agents/types.d.ts.map +1 -0
  20. package/dist/agents/types.js +8 -0
  21. package/dist/agents/types.js.map +1 -0
  22. package/dist/checkpoint.d.ts +27 -0
  23. package/dist/checkpoint.d.ts.map +1 -0
  24. package/dist/checkpoint.js +91 -0
  25. package/dist/checkpoint.js.map +1 -0
  26. package/dist/checkpointers/index.d.ts +4 -0
  27. package/dist/checkpointers/index.d.ts.map +1 -0
  28. package/dist/checkpointers/index.js +5 -0
  29. package/dist/checkpointers/index.js.map +1 -0
  30. package/dist/checkpointers/namespaced.d.ts +12 -0
  31. package/dist/checkpointers/namespaced.d.ts.map +1 -0
  32. package/dist/checkpointers/namespaced.js +37 -0
  33. package/dist/checkpointers/namespaced.js.map +1 -0
  34. package/dist/checkpointers/postgres.d.ts +13 -0
  35. package/dist/checkpointers/postgres.d.ts.map +1 -0
  36. package/dist/checkpointers/postgres.js +100 -0
  37. package/dist/checkpointers/postgres.js.map +1 -0
  38. package/dist/checkpointers/sqlite.d.ts +14 -0
  39. package/dist/checkpointers/sqlite.d.ts.map +1 -0
  40. package/dist/checkpointers/sqlite.js +98 -0
  41. package/dist/checkpointers/sqlite.js.map +1 -0
  42. package/dist/context.d.ts +24 -0
  43. package/dist/context.d.ts.map +1 -0
  44. package/dist/context.js +47 -0
  45. package/dist/context.js.map +1 -0
  46. package/dist/coordination/index.d.ts +3 -0
  47. package/dist/coordination/index.d.ts.map +1 -0
  48. package/dist/coordination/index.js +3 -0
  49. package/dist/coordination/index.js.map +1 -0
  50. package/dist/coordination/pubsub.d.ts +38 -0
  51. package/dist/coordination/pubsub.d.ts.map +1 -0
  52. package/dist/coordination/pubsub.js +73 -0
  53. package/dist/coordination/pubsub.js.map +1 -0
  54. package/dist/coordination/request-reply.d.ts +40 -0
  55. package/dist/coordination/request-reply.d.ts.map +1 -0
  56. package/dist/coordination/request-reply.js +77 -0
  57. package/dist/coordination/request-reply.js.map +1 -0
  58. package/dist/errors.d.ts +27 -0
  59. package/dist/errors.d.ts.map +1 -0
  60. package/dist/errors.js +41 -0
  61. package/dist/errors.js.map +1 -0
  62. package/dist/events/bus.d.ts +13 -0
  63. package/dist/events/bus.d.ts.map +1 -0
  64. package/dist/events/bus.js +52 -0
  65. package/dist/events/bus.js.map +1 -0
  66. package/dist/events/index.d.ts +3 -0
  67. package/dist/events/index.d.ts.map +1 -0
  68. package/dist/events/index.js +3 -0
  69. package/dist/events/index.js.map +1 -0
  70. package/dist/events/types.d.ts +87 -0
  71. package/dist/events/types.d.ts.map +1 -0
  72. package/dist/events/types.js +2 -0
  73. package/dist/events/types.js.map +1 -0
  74. package/dist/functional.d.ts +36 -0
  75. package/dist/functional.d.ts.map +1 -0
  76. package/dist/functional.js +103 -0
  77. package/dist/functional.js.map +1 -0
  78. package/dist/graph.d.ts +74 -0
  79. package/dist/graph.d.ts.map +1 -0
  80. package/dist/graph.js +119 -0
  81. package/dist/graph.js.map +1 -0
  82. package/dist/guardrails/audit.d.ts +13 -0
  83. package/dist/guardrails/audit.d.ts.map +1 -0
  84. package/dist/guardrails/audit.js +31 -0
  85. package/dist/guardrails/audit.js.map +1 -0
  86. package/dist/guardrails/budget.d.ts +30 -0
  87. package/dist/guardrails/budget.d.ts.map +1 -0
  88. package/dist/guardrails/budget.js +154 -0
  89. package/dist/guardrails/budget.js.map +1 -0
  90. package/dist/guardrails/filters.d.ts +24 -0
  91. package/dist/guardrails/filters.d.ts.map +1 -0
  92. package/dist/guardrails/filters.js +87 -0
  93. package/dist/guardrails/filters.js.map +1 -0
  94. package/dist/guardrails/index.d.ts +8 -0
  95. package/dist/guardrails/index.d.ts.map +1 -0
  96. package/dist/guardrails/index.js +9 -0
  97. package/dist/guardrails/index.js.map +1 -0
  98. package/dist/guardrails/permissions.d.ts +9 -0
  99. package/dist/guardrails/permissions.d.ts.map +1 -0
  100. package/dist/guardrails/permissions.js +29 -0
  101. package/dist/guardrails/permissions.js.map +1 -0
  102. package/dist/guardrails/types.d.ts +30 -0
  103. package/dist/guardrails/types.d.ts.map +1 -0
  104. package/dist/guardrails/types.js +2 -0
  105. package/dist/guardrails/types.js.map +1 -0
  106. package/dist/hitl/index.d.ts +5 -0
  107. package/dist/hitl/index.d.ts.map +1 -0
  108. package/dist/hitl/index.js +3 -0
  109. package/dist/hitl/index.js.map +1 -0
  110. package/dist/hitl/interrupt.d.ts +81 -0
  111. package/dist/hitl/interrupt.d.ts.map +1 -0
  112. package/dist/hitl/interrupt.js +116 -0
  113. package/dist/hitl/interrupt.js.map +1 -0
  114. package/dist/hitl/resume.d.ts +33 -0
  115. package/dist/hitl/resume.d.ts.map +1 -0
  116. package/dist/hitl/resume.js +72 -0
  117. package/dist/hitl/resume.js.map +1 -0
  118. package/dist/index.d.ts +57 -0
  119. package/dist/index.d.ts.map +1 -0
  120. package/dist/index.js +58 -0
  121. package/dist/index.js.map +1 -0
  122. package/dist/injected.d.ts +26 -0
  123. package/dist/injected.d.ts.map +1 -0
  124. package/dist/injected.js +25 -0
  125. package/dist/injected.js.map +1 -0
  126. package/dist/inspect.d.ts +31 -0
  127. package/dist/inspect.d.ts.map +1 -0
  128. package/dist/inspect.js +139 -0
  129. package/dist/inspect.js.map +1 -0
  130. package/dist/messages/index.d.ts +66 -0
  131. package/dist/messages/index.d.ts.map +1 -0
  132. package/dist/messages/index.js +123 -0
  133. package/dist/messages/index.js.map +1 -0
  134. package/dist/models/anthropic.d.ts +6 -0
  135. package/dist/models/anthropic.d.ts.map +1 -0
  136. package/dist/models/anthropic.js +317 -0
  137. package/dist/models/anthropic.js.map +1 -0
  138. package/dist/models/google.d.ts +3 -0
  139. package/dist/models/google.d.ts.map +1 -0
  140. package/dist/models/google.js +310 -0
  141. package/dist/models/google.js.map +1 -0
  142. package/dist/models/index.d.ts +6 -0
  143. package/dist/models/index.d.ts.map +1 -0
  144. package/dist/models/index.js +5 -0
  145. package/dist/models/index.js.map +1 -0
  146. package/dist/models/ollama.d.ts +7 -0
  147. package/dist/models/ollama.d.ts.map +1 -0
  148. package/dist/models/ollama.js +205 -0
  149. package/dist/models/ollama.js.map +1 -0
  150. package/dist/models/openai.d.ts +3 -0
  151. package/dist/models/openai.d.ts.map +1 -0
  152. package/dist/models/openai.js +331 -0
  153. package/dist/models/openai.js.map +1 -0
  154. package/dist/models/types.d.ts +77 -0
  155. package/dist/models/types.d.ts.map +1 -0
  156. package/dist/models/types.js +2 -0
  157. package/dist/models/types.js.map +1 -0
  158. package/dist/prebuilt/index.d.ts +5 -0
  159. package/dist/prebuilt/index.d.ts.map +1 -0
  160. package/dist/prebuilt/index.js +4 -0
  161. package/dist/prebuilt/index.js.map +1 -0
  162. package/dist/prebuilt/react-agent.d.ts +35 -0
  163. package/dist/prebuilt/react-agent.d.ts.map +1 -0
  164. package/dist/prebuilt/react-agent.js +55 -0
  165. package/dist/prebuilt/react-agent.js.map +1 -0
  166. package/dist/prebuilt/tool-node.d.ts +15 -0
  167. package/dist/prebuilt/tool-node.d.ts.map +1 -0
  168. package/dist/prebuilt/tool-node.js +61 -0
  169. package/dist/prebuilt/tool-node.js.map +1 -0
  170. package/dist/pregel.d.ts +48 -0
  171. package/dist/pregel.d.ts.map +1 -0
  172. package/dist/pregel.js +583 -0
  173. package/dist/pregel.js.map +1 -0
  174. package/dist/retry.d.ts +3 -0
  175. package/dist/retry.d.ts.map +1 -0
  176. package/dist/retry.js +40 -0
  177. package/dist/retry.js.map +1 -0
  178. package/dist/store/index.d.ts +90 -0
  179. package/dist/store/index.d.ts.map +1 -0
  180. package/dist/store/index.js +214 -0
  181. package/dist/store/index.js.map +1 -0
  182. package/dist/stream-events.d.ts +15 -0
  183. package/dist/stream-events.d.ts.map +1 -0
  184. package/dist/stream-events.js +53 -0
  185. package/dist/stream-events.js.map +1 -0
  186. package/dist/streaming.d.ts +56 -0
  187. package/dist/streaming.d.ts.map +1 -0
  188. package/dist/streaming.js +143 -0
  189. package/dist/streaming.js.map +1 -0
  190. package/dist/swarm/graph.d.ts +184 -0
  191. package/dist/swarm/graph.d.ts.map +1 -0
  192. package/dist/swarm/graph.js +534 -0
  193. package/dist/swarm/graph.js.map +1 -0
  194. package/dist/swarm/index.d.ts +11 -0
  195. package/dist/swarm/index.d.ts.map +1 -0
  196. package/dist/swarm/index.js +10 -0
  197. package/dist/swarm/index.js.map +1 -0
  198. package/dist/swarm/mailbox.d.ts +12 -0
  199. package/dist/swarm/mailbox.d.ts.map +1 -0
  200. package/dist/swarm/mailbox.js +36 -0
  201. package/dist/swarm/mailbox.js.map +1 -0
  202. package/dist/swarm/pool.d.ts +27 -0
  203. package/dist/swarm/pool.d.ts.map +1 -0
  204. package/dist/swarm/pool.js +87 -0
  205. package/dist/swarm/pool.js.map +1 -0
  206. package/dist/swarm/registry.d.ts +37 -0
  207. package/dist/swarm/registry.d.ts.map +1 -0
  208. package/dist/swarm/registry.js +115 -0
  209. package/dist/swarm/registry.js.map +1 -0
  210. package/dist/swarm/supervisor.d.ts +18 -0
  211. package/dist/swarm/supervisor.d.ts.map +1 -0
  212. package/dist/swarm/supervisor.js +117 -0
  213. package/dist/swarm/supervisor.js.map +1 -0
  214. package/dist/swarm/types.d.ts +111 -0
  215. package/dist/swarm/types.d.ts.map +1 -0
  216. package/dist/swarm/types.js +16 -0
  217. package/dist/swarm/types.js.map +1 -0
  218. package/dist/tools/define.d.ts +14 -0
  219. package/dist/tools/define.d.ts.map +1 -0
  220. package/dist/tools/define.js +39 -0
  221. package/dist/tools/define.js.map +1 -0
  222. package/dist/tools/index.d.ts +3 -0
  223. package/dist/tools/index.d.ts.map +1 -0
  224. package/dist/tools/index.js +2 -0
  225. package/dist/tools/index.js.map +1 -0
  226. package/dist/tools/types.d.ts +23 -0
  227. package/dist/tools/types.d.ts.map +1 -0
  228. package/dist/tools/types.js +2 -0
  229. package/dist/tools/types.js.map +1 -0
  230. package/dist/types.d.ts +204 -0
  231. package/dist/types.d.ts.map +1 -0
  232. package/dist/types.js +45 -0
  233. package/dist/types.js.map +1 -0
  234. package/package.json +108 -0
@@ -0,0 +1,87 @@
1
+ import type { TokenUsage } from "../models/types.js";
2
+ export interface AgentStartEvent {
3
+ type: "agent.start";
4
+ agent: string;
5
+ timestamp: number;
6
+ step: number;
7
+ }
8
+ export interface AgentEndEvent {
9
+ type: "agent.end";
10
+ agent: string;
11
+ timestamp: number;
12
+ step: number;
13
+ duration: number;
14
+ usage?: TokenUsage;
15
+ }
16
+ export interface LLMRequestEvent {
17
+ type: "llm.request";
18
+ agent: string;
19
+ model: string;
20
+ timestamp: number;
21
+ messageCount: number;
22
+ hasTools: boolean;
23
+ }
24
+ export interface LLMResponseEvent {
25
+ type: "llm.response";
26
+ agent: string;
27
+ model: string;
28
+ timestamp: number;
29
+ duration: number;
30
+ usage: TokenUsage;
31
+ stopReason: string;
32
+ hasToolCalls: boolean;
33
+ }
34
+ export interface ToolCallEvent {
35
+ type: "tool.call";
36
+ agent: string;
37
+ tool: string;
38
+ timestamp: number;
39
+ input: Record<string, unknown>;
40
+ }
41
+ export interface ToolResultEvent {
42
+ type: "tool.result";
43
+ agent: string;
44
+ tool: string;
45
+ timestamp: number;
46
+ duration: number;
47
+ status: "success" | "error";
48
+ output?: unknown;
49
+ error?: string;
50
+ }
51
+ export interface HandoffEvent {
52
+ type: "handoff";
53
+ from: string;
54
+ to: string;
55
+ timestamp: number;
56
+ message?: string;
57
+ }
58
+ export interface FilterBlockedEvent {
59
+ type: "filter.blocked";
60
+ filter: string;
61
+ agent: string;
62
+ direction: "input" | "output";
63
+ reason: string;
64
+ timestamp: number;
65
+ }
66
+ export interface BudgetWarningEvent {
67
+ type: "budget.warning";
68
+ agent: string;
69
+ percentUsed: number;
70
+ metric: string;
71
+ timestamp: number;
72
+ }
73
+ export interface ErrorEvent {
74
+ type: "error";
75
+ agent?: string;
76
+ error: Error;
77
+ timestamp: number;
78
+ }
79
+ export type LifecycleEvent = AgentStartEvent | AgentEndEvent | LLMRequestEvent | LLMResponseEvent | ToolCallEvent | ToolResultEvent | HandoffEvent | FilterBlockedEvent | BudgetWarningEvent | ErrorEvent;
80
+ export type EventType = LifecycleEvent["type"];
81
+ export type EventHandler<T extends LifecycleEvent = LifecycleEvent> = (event: T) => void;
82
+ export type EventListeners = {
83
+ [K in EventType]?: EventHandler<Extract<LifecycleEvent, {
84
+ type: K;
85
+ }>>;
86
+ };
87
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/events/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import type { ChannelSchema, ONIConfig, ONICheckpointer } from "./types.js";
2
+ import type { ONISkeletonV3 } from "./graph.js";
3
+ export interface TaskOptions {
4
+ /** Retry policy */
5
+ maxAttempts?: number;
6
+ initialDelay?: number;
7
+ }
8
+ export interface TaskDef<TInput, TOutput> {
9
+ name: string;
10
+ invoke: (input: TInput, config?: ONIConfig) => Promise<TOutput>;
11
+ }
12
+ export declare function task<TInput, TOutput>(name: string, fn: (input: TInput, config?: ONIConfig) => Promise<TOutput> | TOutput, opts?: TaskOptions): TaskDef<TInput, TOutput>;
13
+ export interface EntrypointOptions<S extends Record<string, unknown>> {
14
+ channels: ChannelSchema<S>;
15
+ checkpointer?: ONICheckpointer<S>;
16
+ /** Node name (default: "entrypoint") */
17
+ name?: string;
18
+ }
19
+ /**
20
+ * Create a compiled skeleton from a single async function.
21
+ * The function receives full state and returns a partial update.
22
+ *
23
+ * @example
24
+ * const app = entrypoint(
25
+ * { channels: { query: lastValue(() => ""), answer: lastValue(() => "") } },
26
+ * async (state) => {
27
+ * const answer = await myLLM(state.query);
28
+ * return { answer };
29
+ * }
30
+ * );
31
+ */
32
+ export declare function entrypoint<S extends Record<string, unknown>>(opts: EntrypointOptions<S>, fn: (state: S, config?: ONIConfig) => Promise<Partial<S>> | Partial<S>): ONISkeletonV3<S>;
33
+ export declare function pipe<S extends Record<string, unknown>>(opts: EntrypointOptions<S>, ...tasks: Array<(state: S, config?: ONIConfig) => Promise<Partial<S>> | Partial<S>>): ONISkeletonV3<S>;
34
+ export declare function branch<S extends Record<string, unknown>>(condition: (state: S) => string, branches: Record<string, (state: S, config?: ONIConfig) => Promise<Partial<S>> | Partial<S>>, opts: EntrypointOptions<S>): ONISkeletonV3<S>;
35
+ export { interrupt, getUserInput, getUserApproval, getUserSelection } from "./hitl/interrupt.js";
36
+ //# sourceMappingURL=functional.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functional.d.ts","sourceRoot":"","sources":["../src/functional.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAe,eAAe,EAAE,MAAM,YAAY,CAAC;AACzF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAQhD,MAAM,WAAW,WAAW;IAC1B,mBAAmB;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,OAAO,CAAC,MAAM,EAAE,OAAO;IACtC,IAAI,EAAI,MAAM,CAAC;IACf,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACjE;AAED,wBAAgB,IAAI,CAAC,MAAM,EAAE,OAAO,EAClC,IAAI,EAAI,MAAM,EACd,EAAE,EAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,EACzE,IAAI,CAAC,EAAG,WAAW,GAClB,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAuB1B;AAMD,MAAM,WAAW,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAClE,QAAQ,EAAO,aAAa,CAAC,CAAC,CAAC,CAAC;IAChC,YAAY,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IAClC,wCAAwC;IACxC,IAAI,CAAC,EAAU,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC1D,IAAI,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC1B,EAAE,EAAI,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvE,aAAa,CAAC,CAAC,CAAC,CASlB;AAMD,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpD,IAAI,EAAG,iBAAiB,CAAC,CAAC,CAAC,EAC3B,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAClF,aAAa,CAAC,CAAC,CAAC,CAgBlB;AAMD,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtD,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,EAC/B,QAAQ,EAAG,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAC7F,IAAI,EAAO,iBAAiB,CAAC,CAAC,CAAC,GAC9B,aAAa,CAAC,CAAC,CAAC,CAclB;AAGD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,103 @@
1
+ // ============================================================
2
+ // @oni.bot/core — Functional API
3
+ // ============================================================
4
+ // Alternative to the builder pattern. Compose agent skeletons
5
+ // using decorated functions instead of StateGraph.addNode().
6
+ //
7
+ // @example
8
+ // const search = task("search", async (query: string) => {
9
+ // return { results: await searchWeb(query) };
10
+ // });
11
+ //
12
+ // const agent = entrypoint(
13
+ // { channels: myChannels, checkpointer },
14
+ // async (state: MyState) => {
15
+ // const results = await search(state.query);
16
+ // return { ...results };
17
+ // }
18
+ // );
19
+ //
20
+ // const result = await agent.invoke({ query: "hello" });
21
+ // ============================================================
22
+ import { StateGraph } from "./graph.js";
23
+ import { START, END } from "./types.js";
24
+ export function task(name, fn, opts) {
25
+ return {
26
+ name,
27
+ async invoke(input, config) {
28
+ if (opts?.maxAttempts && opts.maxAttempts > 1) {
29
+ let last;
30
+ let delay = opts.initialDelay ?? 500;
31
+ for (let i = 0; i < opts.maxAttempts; i++) {
32
+ try {
33
+ return await fn(input, config);
34
+ }
35
+ catch (err) {
36
+ last = err instanceof Error ? err : new Error(String(err));
37
+ if (i < opts.maxAttempts - 1) {
38
+ await new Promise((r) => setTimeout(r, delay));
39
+ delay *= 2;
40
+ }
41
+ }
42
+ }
43
+ throw last;
44
+ }
45
+ return fn(input, config);
46
+ },
47
+ };
48
+ }
49
+ /**
50
+ * Create a compiled skeleton from a single async function.
51
+ * The function receives full state and returns a partial update.
52
+ *
53
+ * @example
54
+ * const app = entrypoint(
55
+ * { channels: { query: lastValue(() => ""), answer: lastValue(() => "") } },
56
+ * async (state) => {
57
+ * const answer = await myLLM(state.query);
58
+ * return { answer };
59
+ * }
60
+ * );
61
+ */
62
+ export function entrypoint(opts, fn) {
63
+ const nodeName = opts.name ?? "entrypoint";
64
+ const graph = new StateGraph({ channels: opts.channels });
65
+ graph.addNode(nodeName, fn);
66
+ graph.addEdge(START, nodeName);
67
+ graph.addEdge(nodeName, END);
68
+ return graph.compile({ checkpointer: opts.checkpointer });
69
+ }
70
+ // ----------------------------------------------------------------
71
+ // pipe() — compose multiple tasks into a linear pipeline
72
+ // ----------------------------------------------------------------
73
+ export function pipe(opts, ...tasks) {
74
+ const graph = new StateGraph({ channels: opts.channels });
75
+ const names = tasks.map((_, i) => `step_${i}`);
76
+ for (let i = 0; i < tasks.length; i++) {
77
+ graph.addNode(names[i], tasks[i]);
78
+ }
79
+ graph.addEdge(START, names[0]);
80
+ for (let i = 0; i < names.length - 1; i++) {
81
+ graph.addEdge(names[i], names[i + 1]);
82
+ }
83
+ graph.addEdge(names[names.length - 1], END);
84
+ return graph.compile({ checkpointer: opts.checkpointer });
85
+ }
86
+ // ----------------------------------------------------------------
87
+ // branch() — conditional routing shorthand
88
+ // ----------------------------------------------------------------
89
+ export function branch(condition, branches, opts) {
90
+ const graph = new StateGraph({ channels: opts.channels });
91
+ for (const [name, fn] of Object.entries(branches)) {
92
+ graph.addNode(name, fn);
93
+ graph.addEdge(name, END);
94
+ }
95
+ // Router node
96
+ graph.addNode("__router__", async (state) => state);
97
+ graph.addEdge(START, "__router__");
98
+ graph.addConditionalEdges("__router__", condition);
99
+ return graph.compile({ checkpointer: opts.checkpointer });
100
+ }
101
+ // Re-export interrupt for functional API users
102
+ export { interrupt, getUserInput, getUserApproval, getUserSelection } from "./hitl/interrupt.js";
103
+ //# sourceMappingURL=functional.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functional.js","sourceRoot":"","sources":["../src/functional.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { type NodeName, type NodeFn, type ChannelSchema, type ONIConfig, type ONISkeleton, type ONICheckpointer, type RetryPolicy, type CachePolicy } from "./types.js";
2
+ import type { AgentNode } from "./agents/types.js";
3
+ import type { HITLSession } from "./hitl/index.js";
4
+ import type { BaseStore } from "./store/index.js";
5
+ import type { GuardrailsConfig } from "./guardrails/types.js";
6
+ import type { EventListeners } from "./events/types.js";
7
+ export interface ONISkeletonV3<S> extends ONISkeleton<S> {
8
+ /**
9
+ * Resume a paused execution by providing a response to an interrupt.
10
+ * The resumeId comes from the HITLInterruptException.interrupt.resumeId.
11
+ */
12
+ resume(config: {
13
+ threadId: string;
14
+ resumeId: string;
15
+ }, value: unknown): Promise<S>;
16
+ /** Get all pending interrupt sessions for a thread */
17
+ getPendingInterrupts(config: {
18
+ threadId: string;
19
+ }): HITLSession<S>[];
20
+ }
21
+ export declare class StateGraph<S extends Record<string, unknown>> {
22
+ private nodes;
23
+ private edges;
24
+ private readonly channels;
25
+ constructor(schema: {
26
+ channels: ChannelSchema<S>;
27
+ });
28
+ addNode(name: string, fn: NodeFn<S>, opts?: {
29
+ retry?: RetryPolicy;
30
+ cache?: boolean | CachePolicy;
31
+ }): this;
32
+ addSubgraph(name: string, subgraph: ONISkeleton<S>, opts?: {
33
+ retry?: RetryPolicy;
34
+ }): this;
35
+ addAgent(agentNode: AgentNode<any>): this;
36
+ addEdge(from: NodeName, to: NodeName | NodeName[]): this;
37
+ addConditionalEdges(from: NodeName, condition: (state: S, config?: ONIConfig) => NodeName | NodeName[], pathMap?: Record<string, NodeName>): this;
38
+ private validate;
39
+ compile(options?: CompileOptions<S>): ONISkeletonV3<S>;
40
+ toMermaid(): string;
41
+ }
42
+ export interface CompileOptions<S> {
43
+ checkpointer?: ONICheckpointer<S>;
44
+ interruptBefore?: string[];
45
+ interruptAfter?: string[];
46
+ store?: BaseStore;
47
+ guardrails?: GuardrailsConfig;
48
+ listeners?: EventListeners;
49
+ }
50
+ export interface ONIMessage {
51
+ role: "user" | "assistant" | "system" | "tool";
52
+ content: string;
53
+ name?: string;
54
+ tool_call_id?: string;
55
+ tool_calls?: ONIToolCall[];
56
+ }
57
+ export interface ONIToolCall {
58
+ id: string;
59
+ name: string;
60
+ args: Record<string, unknown>;
61
+ }
62
+ export type MessageState = {
63
+ messages: ONIMessage[];
64
+ };
65
+ export declare class MessageGraph extends StateGraph<MessageState> {
66
+ constructor();
67
+ }
68
+ declare module "./graph.js" {
69
+ interface StateGraph<S> {
70
+ getGraph(): import("./inspect.js").GraphDescriptor;
71
+ toMermaidDetailed(): string;
72
+ }
73
+ }
74
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
package/dist/graph.js ADDED
@@ -0,0 +1,119 @@
1
+ // ============================================================
2
+ // @oni.bot/core — StateGraph v3
3
+ // New: HITL resume(), getPendingInterrupts(), token streaming
4
+ // ============================================================
5
+ import { START, END, appendList, } from "./types.js";
6
+ import { InvalidSkeletonError, EdgeConflictError, NodeNotFoundError } from "./errors.js";
7
+ import { ONIPregelRunner } from "./pregel.js";
8
+ // ----------------------------------------------------------------
9
+ // StateGraph
10
+ // ----------------------------------------------------------------
11
+ export class StateGraph {
12
+ nodes = new Map();
13
+ edges = [];
14
+ channels;
15
+ constructor(schema) {
16
+ this.channels = schema.channels;
17
+ }
18
+ addNode(name, fn, opts) {
19
+ if (name === START || name === END)
20
+ throw new InvalidSkeletonError(`"${name}" is reserved.`);
21
+ if (this.nodes.has(name))
22
+ throw new InvalidSkeletonError(`Node "${name}" already registered.`);
23
+ this.nodes.set(name, { name, fn, retry: opts?.retry, cache: opts?.cache });
24
+ return this;
25
+ }
26
+ addSubgraph(name, subgraph, opts) {
27
+ if (this.nodes.has(name))
28
+ throw new InvalidSkeletonError(`Node "${name}" already registered.`);
29
+ const fn = async (state, config) => subgraph.invoke(state, config);
30
+ this.nodes.set(name, { name, fn, retry: opts?.retry, subgraph });
31
+ return this;
32
+ }
33
+ addAgent(agentNode) {
34
+ return this.addNode(agentNode.name, agentNode._nodeFn);
35
+ }
36
+ addEdge(from, to) {
37
+ const targets = Array.isArray(to) ? to : [to];
38
+ for (const t of targets) {
39
+ const dup = this.edges.find((e) => e.type === "static" && e.from === from && e.to === t);
40
+ if (dup)
41
+ throw new EdgeConflictError(from, t);
42
+ this.edges.push({ type: "static", from, to: t });
43
+ }
44
+ return this;
45
+ }
46
+ addConditionalEdges(from, condition, pathMap) {
47
+ this.edges.push({ type: "conditional", from, condition, pathMap });
48
+ return this;
49
+ }
50
+ validate() {
51
+ if (!this.edges.some((e) => e.from === START))
52
+ throw new InvalidSkeletonError("Skeleton must have at least one edge from START.");
53
+ for (const edge of this.edges) {
54
+ if (edge.type !== "static")
55
+ continue;
56
+ if (edge.to !== END && !this.nodes.has(edge.to))
57
+ throw new NodeNotFoundError(edge.to);
58
+ if (edge.from !== START && !this.nodes.has(edge.from))
59
+ throw new NodeNotFoundError(edge.from);
60
+ }
61
+ }
62
+ compile(options = {}) {
63
+ this.validate();
64
+ const runner = new ONIPregelRunner(this.nodes, this.edges, this.channels, { interruptBefore: options.interruptBefore, interruptAfter: options.interruptAfter }, options.checkpointer ?? null, options.store ?? null, options.guardrails, options.listeners);
65
+ const skeleton = {
66
+ invoke: (input, config) => runner.invoke(input, config),
67
+ stream: (input, config) => runner.stream(input, config),
68
+ batch: (inputs, config) => runner.batch(inputs, config),
69
+ getState: (cfg) => runner.getState(cfg.threadId),
70
+ updateState: (cfg, update) => runner.updateState(cfg.threadId, update),
71
+ getStateAt: (cfg) => runner.getStateAt(cfg.threadId, cfg.step),
72
+ getHistory: (cfg) => runner.getHistory(cfg.threadId),
73
+ forkFrom: (cfg) => runner.forkFrom(cfg.threadId, cfg.step, cfg.newThreadId),
74
+ // ---- HITL ----
75
+ async resume(cfg, value) {
76
+ // Inject the resume value into the config so the node receives it
77
+ return runner.invoke({}, {
78
+ threadId: cfg.threadId,
79
+ __resumeValues: { [runner.getPendingInterrupts(cfg.threadId)[0]?.node ?? ""]: value },
80
+ });
81
+ },
82
+ getPendingInterrupts(cfg) {
83
+ return runner.getPendingInterrupts(cfg.threadId);
84
+ },
85
+ };
86
+ // Attach runner as internal property for subgraph Command.PARENT support
87
+ skeleton._runner = runner;
88
+ return skeleton;
89
+ }
90
+ toMermaid() {
91
+ const lines = ["graph TD"];
92
+ const lbl = (n) => n === START ? "__start__" : n === END ? "__end__" : n;
93
+ for (const edge of this.edges) {
94
+ lines.push(edge.type === "static"
95
+ ? ` ${lbl(edge.from)} --> ${lbl(edge.to)}`
96
+ : ` ${lbl(edge.from)} -->|?| conditional_${lbl(edge.from)}`);
97
+ }
98
+ lines.push(` style __start__ fill:#7c3aed,color:#fff`);
99
+ lines.push(` style __end__ fill:#1e1e2e,color:#fff`);
100
+ return lines.join("\n");
101
+ }
102
+ }
103
+ export class MessageGraph extends StateGraph {
104
+ constructor() {
105
+ super({ channels: { messages: appendList(() => []) } });
106
+ }
107
+ }
108
+ // ----------------------------------------------------------------
109
+ // Re-export getGraph helper — called via skeleton.getGraph()
110
+ // ----------------------------------------------------------------
111
+ import { buildGraphDescriptor, toMermaidDetailed } from "./inspect.js";
112
+ StateGraph.prototype.getGraph = function () {
113
+ return buildGraphDescriptor(this.nodes, this.edges);
114
+ };
115
+ StateGraph.prototype.toMermaidDetailed = function () {
116
+ const desc = buildGraphDescriptor(this.nodes, this.edges);
117
+ return toMermaidDetailed(desc);
118
+ };
119
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { AuditEntry } from "./types.js";
2
+ export declare class AuditLog {
3
+ private logs;
4
+ record(threadId: string, entry: AuditEntry): void;
5
+ getLog(threadId: string): AuditEntry[];
6
+ getByAgent(threadId: string, agent: string): AuditEntry[];
7
+ getByAction(threadId: string, action: AuditEntry["action"]): AuditEntry[];
8
+ clear(threadId: string): void;
9
+ clearAll(): void;
10
+ toJSON(threadId: string): string;
11
+ fromJSON(threadId: string, json: string): void;
12
+ }
13
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/guardrails/audit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,qBAAa,QAAQ;IACnB,OAAO,CAAC,IAAI,CAAwC;IAEpD,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAMjD,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE;IAItC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE;IAIzD,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,GAAG,UAAU,EAAE;IAIzE,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAI7B,QAAQ,IAAI,IAAI;IAIhB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIhC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;CAI/C"}
@@ -0,0 +1,31 @@
1
+ export class AuditLog {
2
+ logs = new Map();
3
+ record(threadId, entry) {
4
+ const existing = this.logs.get(threadId) ?? [];
5
+ existing.push(entry);
6
+ this.logs.set(threadId, existing);
7
+ }
8
+ getLog(threadId) {
9
+ return this.logs.get(threadId) ?? [];
10
+ }
11
+ getByAgent(threadId, agent) {
12
+ return this.getLog(threadId).filter(e => e.agent === agent);
13
+ }
14
+ getByAction(threadId, action) {
15
+ return this.getLog(threadId).filter(e => e.action === action);
16
+ }
17
+ clear(threadId) {
18
+ this.logs.delete(threadId);
19
+ }
20
+ clearAll() {
21
+ this.logs.clear();
22
+ }
23
+ toJSON(threadId) {
24
+ return JSON.stringify(this.getLog(threadId));
25
+ }
26
+ fromJSON(threadId, json) {
27
+ const entries = JSON.parse(json);
28
+ this.logs.set(threadId, entries);
29
+ }
30
+ }
31
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/guardrails/audit.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,QAAQ;IACX,IAAI,GAA8B,IAAI,GAAG,EAAE,CAAC;IAEpD,MAAM,CAAC,QAAgB,EAAE,KAAiB;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC/C,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,QAAgB;QACrB,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,UAAU,CAAC,QAAgB,EAAE,KAAa;QACxC,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,WAAW,CAAC,QAAgB,EAAE,MAA4B;QACxD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,QAAgB;QACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,QAAgB;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,QAAQ,CAAC,QAAgB,EAAE,IAAY;QACrC,MAAM,OAAO,GAAiB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,30 @@
1
+ import type { TokenUsage } from "../models/types.js";
2
+ import type { BudgetConfig, AuditEntry } from "./types.js";
3
+ export declare class BudgetExceededError extends Error {
4
+ readonly kind: "agent" | "run" | "cost";
5
+ readonly current: number;
6
+ readonly limit: number;
7
+ constructor(kind: "agent" | "run" | "cost", current: number, limit: number);
8
+ }
9
+ /** Per-million-token pricing: [input, output] */
10
+ export interface ModelPricing {
11
+ input: number;
12
+ output: number;
13
+ }
14
+ /** Default pricing per million tokens for common models */
15
+ export declare const DEFAULT_PRICING: Record<string, ModelPricing>;
16
+ export declare class BudgetTracker {
17
+ private agentTokens;
18
+ private totalInput;
19
+ private totalOutput;
20
+ private totalCost;
21
+ private pricing;
22
+ private config;
23
+ constructor(config: BudgetConfig, customPricing?: Record<string, ModelPricing>);
24
+ record(agentName: string, modelId: string, usage: TokenUsage): AuditEntry[];
25
+ getAgentTokens(name: string): number;
26
+ getTotalTokens(): number;
27
+ getTotalCost(): number;
28
+ isOverBudget(): boolean;
29
+ }
30
+ //# sourceMappingURL=budget.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"budget.d.ts","sourceRoot":"","sources":["../../src/guardrails/budget.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE3D,qBAAa,mBAAoB,SAAQ,KAAK;aAE1B,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM;aAC9B,OAAO,EAAE,MAAM;aACf,KAAK,EAAE,MAAM;gBAFb,IAAI,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,EAC9B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM;CAShC;AAED,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,2DAA2D;AAC3D,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAMxD,CAAC;AAEF,qBAAa,aAAa;IACxB,OAAO,CAAC,WAAW,CAA6D;IAChF,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAK9E,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,EAAE;IAmG3E,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKpC,cAAc,IAAI,MAAM;IAIxB,YAAY,IAAI,MAAM;IAItB,YAAY,IAAI,OAAO;CAkBxB"}