@nexalab/agent-sdk 0.1.5 → 0.1.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 (85) hide show
  1. package/README.md +66 -0
  2. package/dist/file-storage.d.ts +3 -0
  3. package/dist/file-storage.d.ts.map +1 -1
  4. package/dist/file-storage.js +9 -0
  5. package/dist/file-storage.js.map +1 -1
  6. package/dist/guided-flows/define-flow.d.ts +4 -0
  7. package/dist/guided-flows/define-flow.d.ts.map +1 -0
  8. package/dist/guided-flows/define-flow.js +34 -0
  9. package/dist/guided-flows/define-flow.js.map +1 -0
  10. package/dist/guided-flows/errors.d.ts +11 -0
  11. package/dist/guided-flows/errors.d.ts.map +1 -0
  12. package/dist/guided-flows/errors.js +15 -0
  13. package/dist/guided-flows/errors.js.map +1 -0
  14. package/dist/guided-flows/events.d.ts +20 -0
  15. package/dist/guided-flows/events.d.ts.map +1 -0
  16. package/dist/guided-flows/events.js +17 -0
  17. package/dist/guided-flows/events.js.map +1 -0
  18. package/dist/guided-flows/index.d.ts +10 -0
  19. package/dist/guided-flows/index.d.ts.map +1 -0
  20. package/dist/guided-flows/index.js +6 -0
  21. package/dist/guided-flows/index.js.map +1 -0
  22. package/dist/guided-flows/persistence.d.ts +32 -0
  23. package/dist/guided-flows/persistence.d.ts.map +1 -0
  24. package/dist/guided-flows/persistence.js +37 -0
  25. package/dist/guided-flows/persistence.js.map +1 -0
  26. package/dist/guided-flows/requirements.d.ts +8 -0
  27. package/dist/guided-flows/requirements.d.ts.map +1 -0
  28. package/dist/guided-flows/requirements.js +21 -0
  29. package/dist/guided-flows/requirements.js.map +1 -0
  30. package/dist/guided-flows/runtime.d.ts +104 -0
  31. package/dist/guided-flows/runtime.d.ts.map +1 -0
  32. package/dist/guided-flows/runtime.js +433 -0
  33. package/dist/guided-flows/runtime.js.map +1 -0
  34. package/dist/guided-flows/state.d.ts +30 -0
  35. package/dist/guided-flows/state.d.ts.map +1 -0
  36. package/dist/guided-flows/state.js +84 -0
  37. package/dist/guided-flows/state.js.map +1 -0
  38. package/dist/guided-flows/steps.d.ts +12 -0
  39. package/dist/guided-flows/steps.d.ts.map +1 -0
  40. package/dist/guided-flows/steps.js +37 -0
  41. package/dist/guided-flows/steps.js.map +1 -0
  42. package/dist/guided-flows/tool-policy.d.ts +16 -0
  43. package/dist/guided-flows/tool-policy.d.ts.map +1 -0
  44. package/dist/guided-flows/tool-policy.js +33 -0
  45. package/dist/guided-flows/tool-policy.js.map +1 -0
  46. package/dist/guided-flows/types.d.ts +141 -0
  47. package/dist/guided-flows/types.d.ts.map +1 -0
  48. package/dist/guided-flows/types.js +2 -0
  49. package/dist/guided-flows/types.js.map +1 -0
  50. package/dist/hooks.d.ts +52 -0
  51. package/dist/hooks.d.ts.map +1 -1
  52. package/dist/hooks.js.map +1 -1
  53. package/dist/index.d.ts +1 -0
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/index.js +1 -0
  56. package/dist/index.js.map +1 -1
  57. package/dist/kernel.d.ts +29 -0
  58. package/dist/kernel.d.ts.map +1 -1
  59. package/dist/kernel.js +70 -4
  60. package/dist/kernel.js.map +1 -1
  61. package/dist/manifest.d.ts +3 -2
  62. package/dist/manifest.d.ts.map +1 -1
  63. package/dist/manifest.js +1 -0
  64. package/dist/manifest.js.map +1 -1
  65. package/dist/postgres-storage.d.ts +3 -0
  66. package/dist/postgres-storage.d.ts.map +1 -1
  67. package/dist/postgres-storage.js +9 -0
  68. package/dist/postgres-storage.js.map +1 -1
  69. package/dist/redis-storage.d.ts +3 -0
  70. package/dist/redis-storage.d.ts.map +1 -1
  71. package/dist/redis-storage.js +9 -0
  72. package/dist/redis-storage.js.map +1 -1
  73. package/dist/sessions.d.ts +7 -1
  74. package/dist/sessions.d.ts.map +1 -1
  75. package/dist/sessions.js +2 -2
  76. package/dist/sessions.js.map +1 -1
  77. package/dist/sqlite-storage.d.ts +3 -0
  78. package/dist/sqlite-storage.d.ts.map +1 -1
  79. package/dist/sqlite-storage.js +13 -1
  80. package/dist/sqlite-storage.js.map +1 -1
  81. package/dist/storage.d.ts +4 -0
  82. package/dist/storage.d.ts.map +1 -1
  83. package/dist/storage.js +8 -0
  84. package/dist/storage.js.map +1 -1
  85. package/package.json +16 -4
package/README.md CHANGED
@@ -20,6 +20,26 @@ For local workspace use:
20
20
  }
21
21
  ```
22
22
 
23
+ ## Documentation
24
+
25
+ The full documentation site is built with VitePress and lives in `docs/`. The API reference under `docs/api` is generated automatically from the TypeScript sources with TypeDoc:
26
+
27
+ ```bash
28
+ # Regenerate the API reference markdown from src/ into docs/api
29
+ pnpm docs:generate
30
+
31
+ # Develop the docs site (regenerates the API reference, then starts a dev server)
32
+ pnpm docs:dev
33
+
34
+ # Production build (regenerates the API reference, then builds the static site)
35
+ pnpm docs:build
36
+
37
+ # Preview the production build locally
38
+ pnpm docs:preview
39
+ ```
40
+
41
+ `docs:build` requires a successful `docs:generate` and is also validated in CI for every push/PR. The generated `docs/api` directory is not committed — it is always produced from source.
42
+
23
43
  ## Quick Start
24
44
 
25
45
  ### Premium `agent({...})` Kernel API
@@ -193,8 +213,54 @@ import { createSession, loadSession } from "@nexalab/agent-sdk/sessions";
193
213
  import { defineGuardrail, runInputGuardrails, runOutputGuardrails } from "@nexalab/agent-sdk/guardrails";
194
214
  import { createHookDispatcher } from "@nexalab/agent-sdk/hooks";
195
215
  import { zodSchemaToJsonSchema, parseStructuredOutput } from "@nexalab/agent-sdk/structured-output";
216
+ import { defineFlow } from "@nexalab/agent-sdk/guided-flows";
217
+ ```
218
+
219
+ ## Guided Flows
220
+
221
+ Build stateful, multi-turn conversations that must satisfy explicit requirements before completion.
222
+
223
+ Guided Flows combine natural conversation with typed state, step-specific tools, validation, branching, confirmations, and structured final outputs. Attach one or more to `agent({ flows })`; the runtime fills state from free-form messages in any order, never re-asks for what it already has, scopes tool availability per step (never beyond what the agent itself is permitted), and only returns a Zod-validated structured `output` once every requirement holds.
224
+
225
+ ```ts
226
+ import { agent, defineFlow } from "@nexalab/agent-sdk";
227
+ import { z } from "zod";
228
+
229
+ const gasOrderFlow = defineFlow({
230
+ id: "gas-order",
231
+ version: 1,
232
+ name: "Gas order",
233
+ goal: "Crear un pedido de gas valido y confirmado",
234
+ stateSchema: z.object({
235
+ customerName: z.string().optional(),
236
+ phone: z.string().optional(),
237
+ confirmed: z.boolean().default(false),
238
+ orderId: z.string().optional()
239
+ }),
240
+ initialState: { confirmed: false },
241
+ requirements: [
242
+ { id: "customer", description: "Customer identity known", satisfied: ({ state }) => Boolean(state.customerName && state.phone) },
243
+ { id: "confirmation", description: "Order confirmed", satisfied: ({ state }) => state.confirmed === true }
244
+ ],
245
+ steps: [
246
+ { id: "identify_customer", collect: ["customerName", "phone"] },
247
+ { id: "confirmation", collect: ["confirmed"], exit: ({ state }) => state.confirmed === true, tools: { denied: ["order.create"] } },
248
+ { id: "create_order", when: ({ state }) => state.confirmed === true, tools: { required: ["order.create"] }, exit: ({ state }) => Boolean(state.orderId) }
249
+ ],
250
+ protectedFields: { orderId: ["tool"] },
251
+ tools: { bindings: { "order.create": { applyResult: ({ result }) => ({ set: { orderId: result.output.orderId }, source: "tool" } as const) } } },
252
+ completion: ({ requirements, state }) => requirements.every((r) => r.satisfied) && Boolean(state.orderId),
253
+ outputSchema: z.object({ type: z.literal("gas_order"), orderId: z.string() }),
254
+ mapOutput: ({ state }) => ({ type: "gas_order" as const, orderId: state.orderId! })
255
+ });
256
+
257
+ const salesAgent = await agent({ name: "gas-sales-agent", model: "openai:gpt-4o-mini", flows: [gasOrderFlow], tools: [orderCreateTool] });
258
+ const result = await salesAgent.session("whatsapp:5214771234567").run("Quiero pedir gas");
259
+ console.log(result.text, result.flow, result.state, result.output);
196
260
  ```
197
261
 
262
+ See the full guide at [docs/guide/guided-flows.md](./docs/guide/guided-flows.md) and a complete runnable conversation at [`examples/guided-gas-order`](./examples/guided-gas-order) (`pnpm demo:guided-flow`).
263
+
198
264
  ## Agent Manifests + CLI
199
265
 
200
266
  Agents can be declared as YAML and run without writing code for the identity/model/instructions surface:
@@ -4,6 +4,7 @@ import type { MemoryRecord } from "./memory.js";
4
4
  import type { NexaStorage } from "./storage.js";
5
5
  import type { AgentRunSnapshot } from "./types.js";
6
6
  import type { WorkflowRun } from "./workflow.js";
7
+ import type { GuidedFlowRunState } from "./guided-flows/index.js";
7
8
  export declare class JsonFileStorage implements NexaStorage {
8
9
  private readonly rootDir;
9
10
  constructor(rootDir: string);
@@ -19,6 +20,8 @@ export declare class JsonFileStorage implements NexaStorage {
19
20
  listApprovals(status?: ApprovalRequest["status"]): Promise<ApprovalRequest[]>;
20
21
  saveWorkflow(run: WorkflowRun): Promise<void>;
21
22
  getWorkflow(id: string): Promise<WorkflowRun | undefined>;
23
+ saveFlowState(record: GuidedFlowRunState): Promise<void>;
24
+ getFlowState(sessionId: string, flowId: string): Promise<GuidedFlowRunState | undefined>;
22
25
  private path;
23
26
  }
24
27
  export declare function createJsonFileStorage(rootDir: string): JsonFileStorage;
@@ -1 +1 @@
1
- {"version":3,"file":"file-storage.d.ts","sourceRoot":"","sources":["../src/file-storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEjD,qBAAa,eAAgB,YAAW,WAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAEtC,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAI5D,QAAQ,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIvC,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/C,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAIrC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/C,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAIvC,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAStD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAI7D,aAAa,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAK7E,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAI/D,OAAO,CAAC,IAAI;CAGb;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAEtE"}
1
+ {"version":3,"file":"file-storage.d.ts","sourceRoot":"","sources":["../src/file-storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAElE,qBAAa,eAAgB,YAAW,WAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAEtC,OAAO,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAU7C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAI5D,QAAQ,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIvC,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/C,UAAU,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAIrC,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAS/C,YAAY,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAIvC,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAStD,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAI7D,aAAa,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAK7E,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAIzD,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAI9F,OAAO,CAAC,IAAI;CAGb;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAEtE"}
@@ -63,6 +63,12 @@ export class JsonFileStorage {
63
63
  async getWorkflow(id) {
64
64
  return readJson(this.path("workflows", `${id}.json`));
65
65
  }
66
+ async saveFlowState(record) {
67
+ await writeJson(this.path("guided-flows", flowStateFileName(record.sessionId, record.flowId)), record);
68
+ }
69
+ async getFlowState(sessionId, flowId) {
70
+ return readJson(this.path("guided-flows", flowStateFileName(sessionId, flowId)));
71
+ }
66
72
  path(...parts) {
67
73
  return join(this.rootDir, ...parts);
68
74
  }
@@ -97,4 +103,7 @@ async function readJsonArray(path) {
97
103
  function isMissingFile(error) {
98
104
  return Boolean(error && typeof error === "object" && "code" in error && error.code === "ENOENT");
99
105
  }
106
+ function flowStateFileName(sessionId, flowId) {
107
+ return `${encodeURIComponent(sessionId)}__${encodeURIComponent(flowId)}.json`;
108
+ }
100
109
  //# sourceMappingURL=file-storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file-storage.js","sourceRoot":"","sources":["../src/file-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQ1C,MAAM,OAAO,eAAe;IACG;IAA7B,YAA6B,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;IAEhD,KAAK,CAAC,OAAO,CAAC,GAAqB;QACjC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,KAAK,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QACpD,MAAM,QAAQ,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;YACnC,MAAM,IAAI,GAAG,CAAC,MAAM,aAAa,CAAmB,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;YACrH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACf,MAAM,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACxB,OAAO,QAAQ,CAAmB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,aAAa,CAAmB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,KAAmB;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACjD,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAe,IAAI,CAAC,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnB,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,aAAa,CAAe,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAoB;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;QACnD,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,OAAO,GAAG,CAAC,MAAM,aAAa,CAAe,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;YAC5G,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,OAAO,aAAa,CAAe,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAyB;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACpD,MAAM,QAAQ,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YAC9B,MAAM,SAAS,GAAG,CAAC,MAAM,aAAa,CAAkB,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC;YACnH,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,MAAM,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,OAAO,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAkC;QACpD,MAAM,SAAS,GAAG,MAAM,aAAa,CAAkB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAC/F,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzF,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,GAAgB;QACjC,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,EAAU;QAC1B,OAAO,QAAQ,CAAc,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,CAAC;IAEO,IAAI,CAAC,GAAG,KAAe;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC;IACtC,CAAC;CACF;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;AAElD,KAAK,UAAU,QAAQ,CAAI,IAAY,EAAE,EAAoB;IAC3D,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IACtD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAClC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,KAAc;IACnD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACvE,CAAC;AAED,KAAK,UAAU,QAAQ,CAAI,IAAY;IACrC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAM,CAAC;IACvD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,aAAa,CAAC,KAAK,CAAC;YAAE,OAAO,SAAS,CAAC;QAC3C,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,aAAa,CAAI,IAAY;IAC1C,OAAO,CAAC,MAAM,QAAQ,CAAM,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;AACnG,CAAC"}
1
+ {"version":3,"file":"file-storage.js","sourceRoot":"","sources":["../src/file-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { z } from "zod";
2
+ import type { GuidedFlow, GuidedFlowConfig } from "./types.js";
3
+ export declare function defineFlow<TStateSchema extends z.AnyZodObject, TOutputSchema extends z.ZodTypeAny>(config: GuidedFlowConfig<TStateSchema, TOutputSchema>): GuidedFlow<TStateSchema, TOutputSchema>;
4
+ //# sourceMappingURL=define-flow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-flow.d.ts","sourceRoot":"","sources":["../../src/guided-flows/define-flow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAE7B,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/D,wBAAgB,UAAU,CAAC,YAAY,SAAS,CAAC,CAAC,YAAY,EAAE,aAAa,SAAS,CAAC,CAAC,UAAU,EAChG,MAAM,EAAE,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC,GACpD,UAAU,CAAC,YAAY,EAAE,aAAa,CAAC,CAkCzC"}
@@ -0,0 +1,34 @@
1
+ import { GuidedFlowConfigError } from "./errors.js";
2
+ export function defineFlow(config) {
3
+ if (!config.id)
4
+ throw new GuidedFlowConfigError("defineFlow: `id` is required.");
5
+ if (!Number.isInteger(config.version) || config.version < 1) {
6
+ throw new GuidedFlowConfigError(`defineFlow(${config.id}): \`version\` must be a positive integer.`);
7
+ }
8
+ const stepIds = new Set();
9
+ for (const step of config.steps) {
10
+ if (stepIds.has(step.id))
11
+ throw new GuidedFlowConfigError(`defineFlow(${config.id}): duplicate step id "${step.id}".`);
12
+ stepIds.add(step.id);
13
+ }
14
+ const requirementIds = new Set();
15
+ for (const requirement of config.requirements) {
16
+ if (requirementIds.has(requirement.id)) {
17
+ throw new GuidedFlowConfigError(`defineFlow(${config.id}): duplicate requirement id "${requirement.id}".`);
18
+ }
19
+ requirementIds.add(requirement.id);
20
+ }
21
+ if (config.confirmation) {
22
+ const field = config.confirmation.stateField;
23
+ const shapeKeys = Object.keys(config.stateSchema.shape);
24
+ if (!shapeKeys.includes(String(field))) {
25
+ throw new GuidedFlowConfigError(`defineFlow(${config.id}): confirmation.stateField "${String(field)}" is not part of stateSchema.`);
26
+ }
27
+ }
28
+ const partialCheck = config.stateSchema.partial().safeParse(config.initialState);
29
+ if (!partialCheck.success) {
30
+ throw new GuidedFlowConfigError(`defineFlow(${config.id}): \`initialState\` does not match \`stateSchema\`: ${partialCheck.error.message}`);
31
+ }
32
+ return Object.freeze({ config, id: config.id, version: config.version });
33
+ }
34
+ //# sourceMappingURL=define-flow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-flow.js","sourceRoot":"","sources":["../../src/guided-flows/define-flow.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD,MAAM,UAAU,UAAU,CACxB,MAAqD;IAErD,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,MAAM,IAAI,qBAAqB,CAAC,+BAA+B,CAAC,CAAC;IACjF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,qBAAqB,CAAC,cAAc,MAAM,CAAC,EAAE,4CAA4C,CAAC,CAAC;IACvG,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,qBAAqB,CAAC,cAAc,MAAM,CAAC,EAAE,yBAAyB,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACvH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,KAAK,MAAM,WAAW,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QAC9C,IAAI,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,qBAAqB,CAAC,cAAc,MAAM,CAAC,EAAE,gCAAgC,WAAW,CAAC,EAAE,IAAI,CAAC,CAAC;QAC7G,CAAC;QACD,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC;QAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,qBAAqB,CAAC,cAAc,MAAM,CAAC,EAAE,+BAA+B,MAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACtI,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACjF,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,IAAI,qBAAqB,CAAC,cAAc,MAAM,CAAC,EAAE,uDAAuD,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9I,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare class GuidedFlowConfigError extends Error {
2
+ constructor(message: string);
3
+ }
4
+ export declare class GuidedFlowOutputValidationError extends Error {
5
+ readonly flowId: string;
6
+ constructor(message: string, input: {
7
+ flowId: string;
8
+ cause?: unknown;
9
+ });
10
+ }
11
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/guided-flows/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAKxE"}
@@ -0,0 +1,15 @@
1
+ export class GuidedFlowConfigError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.name = "GuidedFlowConfigError";
5
+ }
6
+ }
7
+ export class GuidedFlowOutputValidationError extends Error {
8
+ flowId;
9
+ constructor(message, input) {
10
+ super(message, input.cause !== undefined ? { cause: input.cause } : undefined);
11
+ this.name = "GuidedFlowOutputValidationError";
12
+ this.flowId = input.flowId;
13
+ }
14
+ }
15
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/guided-flows/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IAC/C,MAAM,CAAS;IAExB,YAAY,OAAe,EAAE,KAA0C;QACrE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/E,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC7B,CAAC;CACF"}
@@ -0,0 +1,20 @@
1
+ import type { EventBus } from "../event-bus.js";
2
+ import type { JsonObject } from "../types.js";
3
+ export type FlowEventType = "flow.started" | "flow.resumed" | "flow.step.entered" | "flow.step.exited" | "flow.state.updated" | "flow.requirement.satisfied" | "flow.requirement.invalidated" | "flow.tool.requested" | "flow.tool.completed" | "flow.validation.failed" | "flow.waiting_for_user" | "flow.waiting_for_approval" | "flow.completed" | "flow.cancelled" | "flow.failed";
4
+ /** Input to {@link publishFlowEvent}. */
5
+ export type PublishFlowEventInput = {
6
+ type: FlowEventType;
7
+ flowId: string;
8
+ sessionId: string;
9
+ stepId?: string;
10
+ taskId?: string;
11
+ runId?: string;
12
+ payload?: JsonObject;
13
+ };
14
+ /**
15
+ * Publishes onto the agent's existing `EventBus` (`underlying.sdk.events`),
16
+ * which is already wired to `telemetry` and to storage's `EventJournal` when
17
+ * present — no parallel event system.
18
+ */
19
+ export declare function publishFlowEvent(events: EventBus, input: PublishFlowEventInput): Promise<void>;
20
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/guided-flows/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,MAAM,aAAa,GACrB,cAAc,GACd,cAAc,GACd,mBAAmB,GACnB,kBAAkB,GAClB,oBAAoB,GACpB,4BAA4B,GAC5B,8BAA8B,GAC9B,qBAAqB,GACrB,qBAAqB,GACrB,wBAAwB,GACxB,uBAAuB,GACvB,2BAA2B,GAC3B,gBAAgB,GAChB,gBAAgB,GAChB,aAAa,CAAC;AAElB,yCAAyC;AACzC,MAAM,MAAM,qBAAqB,GAAG;IAClC,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,UAAU,CAAC;CACtB,CAAC;AAEF;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAUpG"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Publishes onto the agent's existing `EventBus` (`underlying.sdk.events`),
3
+ * which is already wired to `telemetry` and to storage's `EventJournal` when
4
+ * present — no parallel event system.
5
+ */
6
+ export async function publishFlowEvent(events, input) {
7
+ await events.publish({
8
+ type: input.type,
9
+ source: "guided-flow",
10
+ ...(input.taskId ? { taskId: input.taskId } : {}),
11
+ ...(input.runId ? { runId: input.runId } : {}),
12
+ ...(input.stepId ? { stepId: input.stepId } : {}),
13
+ visibility: input.type.includes("tool") ? "technical" : "user",
14
+ payload: { flowId: input.flowId, sessionId: input.sessionId, ...(input.payload ?? {}) }
15
+ });
16
+ }
17
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/guided-flows/events.ts"],"names":[],"mappings":"AA+BA;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAgB,EAAE,KAA4B;IACnF,MAAM,MAAM,CAAC,OAAO,CAAC;QACnB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,MAAM,EAAE,aAAa;QACrB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;QAC9D,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;KACxF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { defineFlow } from "./define-flow.js";
2
+ export type { EvaluatedRequirement, FlowPatchSource, FlowStatePatch, GuidedFlow, GuidedFlowConfig, GuidedFlowConfirmation, GuidedFlowManifestDescriptor, GuidedFlowRequirement, GuidedFlowRunMeta, GuidedFlowRunResult, GuidedFlowRunState, GuidedFlowStatus, GuidedFlowStep, GuidedFlowToolConfig, GuidedFlowTriggers, StepToolPolicy, ToolResultBinding } from "./types.js";
3
+ export { GuidedFlowConfigError, GuidedFlowOutputValidationError } from "./errors.js";
4
+ export { GuidedFlowRuntime } from "./runtime.js";
5
+ export type { GuidedFlowRuntimeOptions, GuidedFlowTurnInput, GuidedFlowTurnOutcome } from "./runtime.js";
6
+ export { createInMemoryGuidedFlowStateStore, hasGuidedFlowStateStore, InMemoryGuidedFlowStateStore, resolveGuidedFlowStateStore } from "./persistence.js";
7
+ export type { GuidedFlowStateStore } from "./persistence.js";
8
+ export { publishFlowEvent } from "./events.js";
9
+ export type { FlowEventType, PublishFlowEventInput } from "./events.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/guided-flows/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EACV,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EACtB,4BAA4B,EAC5B,qBAAqB,EACrB,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,cAAc,EACd,iBAAiB,EAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,YAAY,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACzG,OAAO,EACL,kCAAkC,EAClC,uBAAuB,EACvB,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { defineFlow } from "./define-flow.js";
2
+ export { GuidedFlowConfigError, GuidedFlowOutputValidationError } from "./errors.js";
3
+ export { GuidedFlowRuntime } from "./runtime.js";
4
+ export { createInMemoryGuidedFlowStateStore, hasGuidedFlowStateStore, InMemoryGuidedFlowStateStore, resolveGuidedFlowStateStore } from "./persistence.js";
5
+ export { publishFlowEvent } from "./events.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/guided-flows/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAoB9C,OAAO,EAAE,qBAAqB,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AACrF,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EACL,kCAAkC,EAClC,uBAAuB,EACvB,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,32 @@
1
+ import type { GuidedFlowRunState } from "./types.js";
2
+ /**
3
+ * Narrow, domain-specific storage contract — mirrors `workflow.ts`'s
4
+ * `WorkflowCheckpointStore` precedent instead of growing `NexaStorage` in
5
+ * `storage.ts`. A caller's `NexaStorage` (or any object) works automatically
6
+ * as soon as it implements these two methods (duck-typed, see
7
+ * `hasGuidedFlowStateStore` below) — `file-storage.ts`, `sqlite-storage.ts`,
8
+ * `postgres-storage.ts` and `redis-storage.ts` all implement it.
9
+ */
10
+ export type GuidedFlowStateStore = {
11
+ saveFlowState(record: GuidedFlowRunState): Promise<void> | void;
12
+ getFlowState(sessionId: string, flowId: string): Promise<GuidedFlowRunState | undefined> | GuidedFlowRunState | undefined;
13
+ listFlowStates?(sessionId: string): Promise<GuidedFlowRunState[]> | GuidedFlowRunState[];
14
+ deleteFlowState?(sessionId: string, flowId: string): Promise<void> | void;
15
+ };
16
+ export declare class InMemoryGuidedFlowStateStore implements GuidedFlowStateStore {
17
+ private readonly records;
18
+ saveFlowState(record: GuidedFlowRunState): void;
19
+ getFlowState(sessionId: string, flowId: string): GuidedFlowRunState | undefined;
20
+ listFlowStates(sessionId: string): GuidedFlowRunState[];
21
+ deleteFlowState(sessionId: string, flowId: string): void;
22
+ }
23
+ export declare function createInMemoryGuidedFlowStateStore(): InMemoryGuidedFlowStateStore;
24
+ export declare function hasGuidedFlowStateStore(value: unknown): value is GuidedFlowStateStore;
25
+ /**
26
+ * Resolves the effective store for an agent: prefers a store duck-typed off
27
+ * `config.storage` (so durable storage "just works" once configured), and
28
+ * otherwise falls back to a private in-memory store — Guided Flows always
29
+ * work with zero storage configuration.
30
+ */
31
+ export declare function resolveGuidedFlowStateStore(storage: unknown): GuidedFlowStateStore;
32
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/guided-flows/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAChE,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,GAAG,kBAAkB,GAAG,SAAS,CAAC;IAC1H,cAAc,CAAC,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,GAAG,kBAAkB,EAAE,CAAC;IACzF,eAAe,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3E,CAAC;AAEF,qBAAa,4BAA6B,YAAW,oBAAoB;IACvE,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyC;IAEjE,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAI/C,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS;IAK/E,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,kBAAkB,EAAE;IAIvD,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;CAGzD;AAED,wBAAgB,kCAAkC,IAAI,4BAA4B,CAEjF;AAMD,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAErF;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,oBAAoB,CAGlF"}
@@ -0,0 +1,37 @@
1
+ export class InMemoryGuidedFlowStateStore {
2
+ records = new Map();
3
+ saveFlowState(record) {
4
+ this.records.set(recordKey(record.sessionId, record.flowId), structuredClone(record));
5
+ }
6
+ getFlowState(sessionId, flowId) {
7
+ const record = this.records.get(recordKey(sessionId, flowId));
8
+ return record ? structuredClone(record) : undefined;
9
+ }
10
+ listFlowStates(sessionId) {
11
+ return [...this.records.values()].filter((record) => record.sessionId === sessionId).map((record) => structuredClone(record));
12
+ }
13
+ deleteFlowState(sessionId, flowId) {
14
+ this.records.delete(recordKey(sessionId, flowId));
15
+ }
16
+ }
17
+ export function createInMemoryGuidedFlowStateStore() {
18
+ return new InMemoryGuidedFlowStateStore();
19
+ }
20
+ function recordKey(sessionId, flowId) {
21
+ return `${sessionId}::${flowId}`;
22
+ }
23
+ export function hasGuidedFlowStateStore(value) {
24
+ return Boolean(value && typeof value === "object" && "saveFlowState" in value && "getFlowState" in value);
25
+ }
26
+ /**
27
+ * Resolves the effective store for an agent: prefers a store duck-typed off
28
+ * `config.storage` (so durable storage "just works" once configured), and
29
+ * otherwise falls back to a private in-memory store — Guided Flows always
30
+ * work with zero storage configuration.
31
+ */
32
+ export function resolveGuidedFlowStateStore(storage) {
33
+ if (hasGuidedFlowStateStore(storage))
34
+ return storage;
35
+ return createInMemoryGuidedFlowStateStore();
36
+ }
37
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/guided-flows/persistence.ts"],"names":[],"mappings":"AAiBA,MAAM,OAAO,4BAA4B;IACtB,OAAO,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEjE,aAAa,CAAC,MAA0B;QACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IACxF,CAAC;IAED,YAAY,CAAC,SAAiB,EAAE,MAAc;QAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,CAAC;IAED,cAAc,CAAC,SAAiB;QAC9B,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IAChI,CAAC;IAED,eAAe,CAAC,SAAiB,EAAE,MAAc;QAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,CAAC;CACF;AAED,MAAM,UAAU,kCAAkC;IAChD,OAAO,IAAI,4BAA4B,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,SAAS,CAAC,SAAiB,EAAE,MAAc;IAClD,OAAO,GAAG,SAAS,KAAK,MAAM,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,eAAe,IAAI,KAAK,IAAI,cAAc,IAAI,KAAK,CAAC,CAAC;AAC5G,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IAC1D,IAAI,uBAAuB,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IACrD,OAAO,kCAAkC,EAAE,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { z } from "zod";
2
+ import type { EvaluatedRequirement, GuidedFlowConfig } from "./types.js";
3
+ export declare function evaluateRequirements<TStateSchema extends z.AnyZodObject, TOutputSchema extends z.ZodTypeAny>(config: GuidedFlowConfig<TStateSchema, TOutputSchema>, state: z.infer<TStateSchema>): EvaluatedRequirement[];
4
+ export declare function diffRequirements(previous: EvaluatedRequirement[], next: EvaluatedRequirement[]): {
5
+ newlySatisfied: string[];
6
+ newlyInvalidated: string[];
7
+ };
8
+ //# sourceMappingURL=requirements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../../src/guided-flows/requirements.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEzE,wBAAgB,oBAAoB,CAAC,YAAY,SAAS,CAAC,CAAC,YAAY,EAAE,aAAa,SAAS,CAAC,CAAC,UAAU,EAC1G,MAAM,EAAE,gBAAgB,CAAC,YAAY,EAAE,aAAa,CAAC,EACrD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,GAC3B,oBAAoB,EAAE,CAMxB;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,GAAG;IAChG,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,CAUA"}
@@ -0,0 +1,21 @@
1
+ export function evaluateRequirements(config, state) {
2
+ return config.requirements.map((requirement) => ({
3
+ id: requirement.id,
4
+ description: requirement.description,
5
+ satisfied: Boolean(requirement.satisfied({ state }))
6
+ }));
7
+ }
8
+ export function diffRequirements(previous, next) {
9
+ const previousById = new Map(previous.map((requirement) => [requirement.id, requirement.satisfied]));
10
+ const newlySatisfied = [];
11
+ const newlyInvalidated = [];
12
+ for (const requirement of next) {
13
+ const before = previousById.get(requirement.id);
14
+ if (requirement.satisfied && before !== true)
15
+ newlySatisfied.push(requirement.id);
16
+ if (!requirement.satisfied && before === true)
17
+ newlyInvalidated.push(requirement.id);
18
+ }
19
+ return { newlySatisfied, newlyInvalidated };
20
+ }
21
+ //# sourceMappingURL=requirements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../src/guided-flows/requirements.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,oBAAoB,CAClC,MAAqD,EACrD,KAA4B;IAE5B,OAAO,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QAC/C,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,WAAW,EAAE,WAAW,CAAC,WAAW;QACpC,SAAS,EAAE,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;KACrD,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,QAAgC,EAAE,IAA4B;IAI7F,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IACrG,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,KAAK,MAAM,WAAW,IAAI,IAAI,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,WAAW,CAAC,SAAS,IAAI,MAAM,KAAK,IAAI;YAAE,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAClF,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,MAAM,KAAK,IAAI;YAAE,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,104 @@
1
+ import type { ChatMessage, OpenAICompatibleChatClient } from "../openai-compatible.js";
2
+ import type { AgentToolRegistration } from "../openai-agent.js";
3
+ import type { ModelHarness } from "../model-harness.js";
4
+ import type { HookDispatcher } from "../hooks.js";
5
+ import type { EventBus } from "../event-bus.js";
6
+ import type { SkillDefinition } from "../skills.js";
7
+ import { type TenantContext } from "../tenancy.js";
8
+ import type { JsonObject } from "../types.js";
9
+ import { type PublishFlowEventInput } from "./events.js";
10
+ import type { GuidedFlowStateStore } from "./persistence.js";
11
+ import type { FlowStatePatch, GuidedFlow, GuidedFlowRunMeta, GuidedFlowRunState } from "./types.js";
12
+ export type GuidedFlowRuntimeOptions = {
13
+ flows: GuidedFlow<any, any>[];
14
+ client: OpenAICompatibleChatClient;
15
+ providerId: string;
16
+ model: string;
17
+ toolRegistrations: AgentToolRegistration[];
18
+ skills: SkillDefinition[];
19
+ hooks: HookDispatcher;
20
+ events: EventBus;
21
+ harness?: ModelHarness;
22
+ store: GuidedFlowStateStore;
23
+ flowSelector?: (input: {
24
+ text: string;
25
+ flows: GuidedFlow<any, any>[];
26
+ }) => string | undefined | Promise<string | undefined>;
27
+ };
28
+ export type GuidedFlowTurnInput = {
29
+ text: string;
30
+ messages: ChatMessage[];
31
+ sessionId: string;
32
+ tenant?: TenantContext;
33
+ explicitFlow?: string;
34
+ /**
35
+ * Known facts to seed into `state` before this flow run's first turn —
36
+ * e.g. a `customerId` a WhatsApp gateway already resolved from the phone
37
+ * number, or a `locale` carried over from session context. Applied once,
38
+ * only while creating a brand-new flow run (`!existing` — an already
39
+ * in-progress flow ignores it; use `flows.patchState()` to update a
40
+ * running flow instead). Goes through the exact same
41
+ * `applyStatePatch`/`protectedFields` path as any other patch, with
42
+ * `source: "system"` — unknown keys are dropped, but (unlike a
43
+ * model-sourced patch) tool-reserved fields may be set, since this is the
44
+ * caller vouching for the value, not the model guessing it. Applied
45
+ * before step resolution and the extraction call, so both the active
46
+ * step and "Known so far" in the model's instructions already reflect it.
47
+ */
48
+ initialState?: JsonObject;
49
+ /** Propagated to the extraction call and the tool-scoped reply pass so a caller (e.g. the Gateway) can cancel an in-flight turn. Additive — omitting it is byte-identical to previous behavior. */
50
+ signal?: AbortSignal;
51
+ /**
52
+ * Turn-scoped event sink, called synchronously alongside every existing
53
+ * `publishFlowEvent` call in this turn — same events, same payloads,
54
+ * just also delivered directly to this caller instead of only through
55
+ * the shared `EventBus`. This is what lets a caller stream a single
56
+ * turn's events without subscribing to (and filtering) the agent-wide
57
+ * bus. Purely additive: omitting it changes nothing about how this
58
+ * turn executes or what it returns.
59
+ */
60
+ onEvent?: (event: PublishFlowEventInput) => void;
61
+ };
62
+ export type GuidedFlowTurnOutcome = {
63
+ handled: false;
64
+ } | {
65
+ handled: true;
66
+ text: string;
67
+ output?: unknown;
68
+ state: JsonObject;
69
+ flow: GuidedFlowRunMeta;
70
+ };
71
+ /**
72
+ * Drives Guided Flow turns. Constructed once per agent (by `kernel.ts` when
73
+ * `config.flows?.length`) and never streamed — `runStream()` in
74
+ * `openai-agent.ts` is untouched; internally this still uses the same
75
+ * `runNativeToolLoop`/`ModelHarness` contracts, just called directly rather
76
+ * than through `agent.run()`'s normal path.
77
+ */
78
+ export declare class GuidedFlowRuntime {
79
+ private readonly options;
80
+ constructor(options: GuidedFlowRuntimeOptions);
81
+ private flowById;
82
+ private requireFlow;
83
+ private soleFlow;
84
+ private key;
85
+ /** Publishes onto the shared EventBus (unchanged behavior) and, if this turn supplied one, also delivers the same event directly to the turn-scoped sink. */
86
+ private announce;
87
+ selectFlow(input: {
88
+ text: string;
89
+ sessionId: string;
90
+ tenant?: TenantContext;
91
+ explicitFlow?: string;
92
+ }): Promise<GuidedFlow | undefined>;
93
+ runTurn(input: GuidedFlowTurnInput): Promise<GuidedFlowTurnOutcome>;
94
+ private driveFlow;
95
+ private applyPatch;
96
+ private announceStepChange;
97
+ private forwardNativeEvent;
98
+ cancel(sessionId: string, flowId?: string, tenant?: TenantContext): Promise<void>;
99
+ resume(sessionId: string, flowId?: string, tenant?: TenantContext): Promise<GuidedFlowRunState | undefined>;
100
+ reset(sessionId: string, flowId?: string, tenant?: TenantContext): Promise<void>;
101
+ patchState(sessionId: string, flowId: string, patch: FlowStatePatch<Record<string, unknown>>, tenant?: TenantContext): Promise<GuidedFlowRunState>;
102
+ getState(sessionId: string, flowId?: string, tenant?: TenantContext): Promise<GuidedFlowRunState | undefined>;
103
+ }
104
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/guided-flows/runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAEjE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAO9C,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAEV,cAAc,EACd,UAAU,EAEV,iBAAiB,EACjB,kBAAkB,EAGnB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IAC9B,MAAM,EAAE,0BAA0B,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;IAC3C,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,KAAK,EAAE,cAAc,CAAC;IACtB,MAAM,EAAE,QAAQ,CAAC;IACjB,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAA;KAAE,KAAK,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC7H,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,mMAAmM;IACnM,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAClD,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAC7B;IAAE,OAAO,EAAE,KAAK,CAAA;CAAE,GAClB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAWlG;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,wBAAwB;IAE9D,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,GAAG;IAIX,6JAA6J;YAC/I,QAAQ;IAKhB,UAAU,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,aAAa,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IA4BtI,OAAO,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;YAO3D,SAAS;YAgOT,UAAU;YA0CV,kBAAkB;IAoBhC,OAAO,CAAC,kBAAkB;IAuBpB,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAUjF,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;IAW3G,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBhF,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAkClJ,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC;CAKpH"}