zidane 5.4.3 → 5.5.0

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 (76) hide show
  1. package/README.md +30 -1
  2. package/dist/{agent-Yu8uhpy-.d.ts → agent-CvImMxMQ.d.ts} +183 -3
  3. package/dist/agent-CvImMxMQ.d.ts.map +1 -0
  4. package/dist/chat.d.ts +93 -15
  5. package/dist/chat.d.ts.map +1 -1
  6. package/dist/chat.js +3 -2
  7. package/dist/contexts/docker.d.ts +1 -1
  8. package/dist/contexts-DhmMlT2W.js +472 -0
  9. package/dist/contexts-DhmMlT2W.js.map +1 -0
  10. package/dist/contexts.d.ts +3 -3
  11. package/dist/contexts.js +1 -1
  12. package/dist/{index-DklfxeYy.d.ts → index-B0uc2C5x.d.ts} +3 -3
  13. package/dist/{index-DklfxeYy.d.ts.map → index-B0uc2C5x.d.ts.map} +1 -1
  14. package/dist/{index-BiO_5Hm4.d.ts → index-CbS75MD3.d.ts} +2 -2
  15. package/dist/index-CbS75MD3.d.ts.map +1 -0
  16. package/dist/{index-j9tY28ah.d.ts → index-CtXksgqb.d.ts} +60 -4
  17. package/dist/index-CtXksgqb.d.ts.map +1 -0
  18. package/dist/index.d.ts +6 -6
  19. package/dist/index.js +8 -8
  20. package/dist/{interpolate-CmtjEyRJ.js → interpolate-BaaKaKzN.js} +2 -2
  21. package/dist/{interpolate-CmtjEyRJ.js.map → interpolate-BaaKaKzN.js.map} +1 -1
  22. package/dist/{login-DxyAERe1.js → login-iTy-0wYz.js} +2 -2
  23. package/dist/{login-DxyAERe1.js.map → login-iTy-0wYz.js.map} +1 -1
  24. package/dist/mcp.d.ts +1 -1
  25. package/dist/{presets-D9IbaI40.js → presets-h6UWhghO.js} +3 -2
  26. package/dist/presets-h6UWhghO.js.map +1 -0
  27. package/dist/presets.d.ts +2 -2
  28. package/dist/presets.js +1 -1
  29. package/dist/{providers-CEzRFYtS.js → providers-G0VBZK9j.js} +2 -2
  30. package/dist/{providers-CEzRFYtS.js.map → providers-G0VBZK9j.js.map} +1 -1
  31. package/dist/providers.d.ts +1 -1
  32. package/dist/providers.js +1 -1
  33. package/dist/session/sqlite.d.ts +1 -1
  34. package/dist/session/sqlite.d.ts.map +1 -1
  35. package/dist/session/sqlite.js +1 -0
  36. package/dist/session/sqlite.js.map +1 -1
  37. package/dist/{session-kwsNnOmt.js → session-CbkiJDlH.js} +2 -1
  38. package/dist/session-CbkiJDlH.js.map +1 -0
  39. package/dist/session.d.ts +1 -1
  40. package/dist/session.js +1 -1
  41. package/dist/skills.d.ts +2 -2
  42. package/dist/skills.js +1 -1
  43. package/dist/{tools-BK2vG9UX.js → tools-D_icxa-V.js} +668 -256
  44. package/dist/tools-D_icxa-V.js.map +1 -0
  45. package/dist/tools.d.ts +3 -3
  46. package/dist/tools.js +2 -2
  47. package/dist/{transcript-anchors-DnaBcJej.d.ts → transcript-anchors-3FFw2xuk.d.ts} +49 -10
  48. package/dist/transcript-anchors-3FFw2xuk.d.ts.map +1 -0
  49. package/dist/tui.d.ts +27 -5
  50. package/dist/tui.d.ts.map +1 -1
  51. package/dist/tui.js +239 -39
  52. package/dist/tui.js.map +1 -1
  53. package/dist/{turn-operations-OzKEOXul.js → turn-operations-CtgBlBHn.js} +178 -79
  54. package/dist/turn-operations-CtgBlBHn.js.map +1 -0
  55. package/dist/types-IcokUOyC.js.map +1 -1
  56. package/dist/types-KukEp-mi.d.ts +253 -0
  57. package/dist/types-KukEp-mi.d.ts.map +1 -0
  58. package/dist/types.d.ts +4 -4
  59. package/docs/ARCHITECTURE.md +21 -0
  60. package/docs/CHAT.md +3 -1
  61. package/docs/RUN_IN_BACKGROUND.md +612 -0
  62. package/docs/SKILL.md +59 -0
  63. package/docs/TUI.md +16 -2
  64. package/package.json +2 -2
  65. package/dist/agent-Yu8uhpy-.d.ts.map +0 -1
  66. package/dist/contexts-BwiHIr2w.js +0 -129
  67. package/dist/contexts-BwiHIr2w.js.map +0 -1
  68. package/dist/index-BiO_5Hm4.d.ts.map +0 -1
  69. package/dist/index-j9tY28ah.d.ts.map +0 -1
  70. package/dist/presets-D9IbaI40.js.map +0 -1
  71. package/dist/session-kwsNnOmt.js.map +0 -1
  72. package/dist/tools-BK2vG9UX.js.map +0 -1
  73. package/dist/transcript-anchors-DnaBcJej.d.ts.map +0 -1
  74. package/dist/turn-operations-OzKEOXul.js.map +0 -1
  75. package/dist/types-Ce78ds4h.d.ts +0 -88
  76. package/dist/types-Ce78ds4h.d.ts.map +0 -1
package/docs/SKILL.md CHANGED
@@ -330,6 +330,8 @@ Hooks fire at every lifecycle point via [hookable](https://github.com/unjs/hooka
330
330
  | `tool:after` | Tool complete | — | `+ result: string \| ToolResultContent[], outputBytes: number, runToolCounts` |
331
331
  | `tool:error` | Tool error | **yes** (`result?`) | `+ error` — mutate `result` to substitute the payload sent back to the model |
332
332
  | `tool:cancelled` | Per-call cancel via `agent.cancelTool(callId, reason?)` (typically a TUI "cancel this tool" affordance) | — | `+ reason: string, runToolCounts` — wire result is the canonical `TOOL_USE_CANCELLED_MESSAGE` with `isError: true`; `tool:transform` + `tool:after` do **not** fire for the cancelled call |
333
+ | `background:start` | Background task spawned via `shell({ run_in_background: true })` | — | `taskId, pid, command, cwd, outputPath, startedAt` — observational; subscribe for telemetry / "task started" toasts |
334
+ | `background:exit` | Background task terminated (natural exit, `shell_kill`, or `agent.destroy()` teardown) | — | `taskId, status: 'exited' \| 'killed', exitCode, signal?, outputPath, durationMs, command` — fires at-most-once per task; the agent's internal listener queues a `<task-notification>` for injection on the next user-turn |
333
335
  | `usage` | Per-turn usage | — | `turn, turnId, usage, totalIn, totalOut` |
334
336
  | `output` | Structured output extracted | — | `output, schema` |
335
337
  | `budget:exceeded` | Per-turn tool-output bytes over `behavior.toolOutputBudget` | — | `turn, turnId, bytes, budget` |
@@ -368,6 +370,7 @@ child:stream:text / child:stream:thinking / child:stream:end
368
370
  child:tool:gate / child:mcp:tool:gate ← mutable: block/reason/result propagate to the child
369
371
  child:tool:transform ← mutable: parent can rewrite the child's tool_result
370
372
  child:tool:before / child:tool:after / child:tool:error / child:tool:cancelled
373
+ child:background:start / child:background:exit ← bubbled from subagent's background tasks
371
374
  child:turn:after
372
375
  ```
373
376
 
@@ -423,6 +426,62 @@ await agent.destroy() // clean up execution + MCP
423
426
 
424
427
  `cancelTool` returns `true` when a live call was flipped, `false` otherwise (idempotent). The matching call's `ctx.signal` aborts, `tool:cancelled` fires, and the wire result becomes `TOOL_USE_CANCELLED_MESSAGE` with `isError: true` — other parallel calls in the same batch keep running, and the assistant turn closes normally on the next batch boundary. Distinguished from `abort()` (whole-run abort, batch-layer `INTERRUPT_MESSAGE_FOR_TOOL_USE`) and `TOOL_USE_SKIPPED_MESSAGE` (steered out) so consumers can split the three causes by string match.
425
428
 
429
+ ## Background tasks
430
+
431
+ The `shell` tool accepts an optional `run_in_background: true` flag that returns immediately with a task handle (`bash_<n>`) instead of blocking the model's turn. The companion `shell_kill` tool terminates a running task. The framework owns the lifecycle:
432
+
433
+ ```ts
434
+ import { createAgent, resolveTasksDir } from 'zidane'
435
+
436
+ const tasksDir = resolveTasksDir({ userDir: '~/.zidane', sessionId: session.id })
437
+ const agent = createAgent({
438
+ provider,
439
+ session,
440
+ behavior: { tasksDir }, // host opt-in for background mode
441
+ // ... rest of options
442
+ })
443
+ ```
444
+
445
+ **Disabling background mode.** Background mode is auto-disabled at the schema level (the `run_in_background` field is dropped from the `shell` tool's input schema, and the background-mode paragraphs are dropped from its description) when either:
446
+
447
+ - `behavior.tasksDir` is **unset** — the host hasn't wired the log dir, so the model would only ever get an error if it tried. The auto-disable means the model never sees the flag in the first place; no wasted turns.
448
+ - `behavior.disableBackgroundTasks: true` is set — explicit opt-out for hosts who have `tasksDir` for some other reason (legacy fixture, integration test) but don't want the model spawning background work this run.
449
+
450
+ The path is per-session by convention (`<userDir>/<sessionId>/tasks/`) so a session delete cleans up log files alongside other session state.
451
+
452
+ The auto-rewrite only fires for the identity-equal framework `shell` tool — hosts who register a custom shell-named tool keep ownership of their spec. For explicit control, hosts can import `createShellTool({ allowBackground })` from `zidane` and register the tailored variant directly.
453
+
454
+ **Task lifecycle.**
455
+
456
+ 1. Model calls `shell({ command: 'npm run build', run_in_background: true })`.
457
+ 2. The shell tool spawns a process group via `ExecutionContext.execBackground`, opens `<tasksDir>/<task-id>.<context-timestamp>.log` (append mode), pipes stdout+stderr into it, and returns immediately with the task id + pid + log path. `background:start` fires. The `<context-timestamp>` segment (`YYYYMMDD-HHMMSS-mmm`, UTC, shared across every task in the same `ExecutionContext` instance) keeps two contexts on the same session from ever resolving to the same log file — the model-facing task id (`bash_1`) stays short.
458
+ 3. The process exits naturally OR via `shell_kill({ task_id })`. `background:exit` fires exactly once, with `status: 'exited' | 'killed'`.
459
+ 4. The agent's internal `background:exit` listener queues a `TaskExitInfo` (keyed by `taskId` in a `Map`).
460
+ 5. On the NEXT `agent.run()`, the queue drains. Each entry becomes a leading `text` content block on the seeded user turn carrying `<task-notification>…</task-notification>` XML — the model reads task completions inline with its prompt, no polling needed.
461
+
462
+ **Suppression.** The agent's `tool:after` listener watches for `shell_kill` (deletes from the queue by `task_id`) and `read_file` / `read` (deletes by matching the file's `path` against any pending entry's `outputPath`). This keeps the model from receiving a redundant `<task-notification>` for an exit it already learned about through other means.
463
+
464
+ **Output reading.** The model reads task output via the normal `read_file` tool — no special API. The file lives at the absolute path returned in the spawn result; offset + limit work for tail-watching. The file stays around until the session is deleted.
465
+
466
+ **Shutdown.** Two paths:
467
+
468
+ 1. **Clean shutdown (`agent.destroy()`)** — SIGTERMs every still-running task (entire process groups, so no orphans), awaits each log stream's flush, then tears down the execution handle. Notification queue cleared. The TUI invokes this via its session-teardown flow.
469
+ 2. **Process-exit safety net (Ctrl+C, crash)** — `ProcessContext` lazy-registers a `process.on('exit')` handler on the first spawn that synchronously SIGTERMs every still-running task's process group. Output streams may not flush their last buffer (Node's `'exit'` listeners can't await), but the children DO die — no orphan `npm run dev` outliving a Ctrl+C'd TUI. The handler is deregistered in `destroy()` so repeated session-swap cycles don't pile listeners onto the global event emitter.
470
+
471
+ **Replay.** Persisted `<task-notification>` text blocks survive in the session's turn history; `eventsFromTurns` re-synthesizes them as `'task-notification'` `StreamEvent`s on load so the TUI's banner renderer paints them the same way live + replayed.
472
+
473
+ **Subagents.** A `spawn`'d subagent can call `shell({ run_in_background: true })` — but it has no "next user-turn" of its own to receive the `<task-notification>` on (a subagent's `agent.run()` ends as soon as the model returns `done: true`). The plumbing handles this transparently:
474
+
475
+ 1. Subagent starts the task → registered under the subagent's `ExecutionHandle`.
476
+ 2. Subagent's `agent.run` finishes (the model SHOULD return a brief summary that includes the `task_id` and end its turn — the shell tool's success-result is depth-aware and tells the model exactly this).
477
+ 3. `spawn.ts`'s `finally` calls `ExecutionContext.reassignBackgroundTasks(childHandle, parentHandle, newOnExit)` BEFORE `agent.destroy()`. The task's `handleId` is rewritten to the parent's, and the task's natural-exit callback is rewired from the (about-to-be-destroyed) subagent's hook bus to the parent's. `background:reassign` fires on the parent's bus.
478
+ 4. Subagent's `destroy()` walks its registry and finds no surviving tasks (they've all been promoted), so it kills nothing.
479
+ 5. When the task eventually exits, `background:exit` fires on the PARENT's bus → enqueued → drained on the parent's next user-turn.
480
+
481
+ For nested subagents (grandchild spawns a background task while running inside a child that itself was spawned by the parent), the reassign chain runs at each spawn finally: grandchild → child at grandchild-finish, child → parent at child-finish. The task ends up owned by the top-level parent. `child:background:reassign` bubbles through so observability hooks see the full chain.
482
+
483
+ **Context support.** Background mode is OPTIONAL on `ExecutionContext` — the three new methods (`execBackground`, `killBackground`, `listBackground`) are declared as `?:` so existing contexts compile unchanged. The `ProcessContext` (in-process default) implements all three; remote sandboxes that don't support detached spawns can leave them undefined and the shell tool surfaces a clean error. The same is true for `agent.destroy()`'s teardown — it walks the registry only if the context exposes one.
484
+
426
485
  ## Sessions
427
486
 
428
487
  ```ts
package/docs/TUI.md CHANGED
@@ -3,6 +3,7 @@
3
3
  Terminal shell for the chat engine. React + OpenTUI on top of `zidane/chat`. Ships as `zidane/tui` — **Bun-only** because of `bun:sqlite` (via the session store) and OpenTUI's native bindings. A non-terminal host (Electron / Tauri / web) imports `zidane/chat` and provides its own renderer; see `docs/CHAT.md`.
4
4
 
5
5
  ```bash
6
+ bun run build
6
7
  bun run tui
7
8
  ```
8
9
 
@@ -242,9 +243,9 @@ Esc gates on the completion popup state — when the popup is visible, esc is co
242
243
 
243
244
  A subagent run emits `spawn-start` / `spawn-end` markers and a stream of tagged child events (`depth > 0`, `childId: child-N`).
244
245
 
245
- `Settings.hideSubagentOutput` (default **on**) collapses everything between the markers — the user sees `🌱 [child-1] task` … `done 213 in / 4 075 out` (the end marker's tag is `done` / `aborted` / `error` followed by token usage) and the parent's next response.
246
+ `Settings.hideSubagentOutput` (default **on**) collapses everything between the markers — the user sees `🌱 child-1 · task` … `child-1 · done 213 in / 4 075 out` (the end marker's tag is `done` / `aborted` / `error` followed by token usage) and the parent's next response. The `child-N` label renders in `COLOR.brand` with a `·` separator so it reads as part of the line, not a bracketed prefix.
246
247
 
247
- When off, consecutive child events are wrapped in a single bordered `SubagentBlock` and rendered with `depthOffset: 1` so they sit flush with the box's inner padding instead of being indented twice.
248
+ When off, consecutive child events are wrapped in a single bordered `SubagentBlock` rendered with `depthOffset: 1` (events sit flush with the box's inner padding instead of being indented twice) and a `COLOR.brand` border (the box title shares the border color — brand-tinted frame doubles as a brand-tinted label, no separate `titleColor` API needed). The box title carries the `child-N` label, so single-subagent runs drop the per-row label to avoid duplication. Multi-subagent runs (rare — happens when several `spawn` tool calls render back-to-back inside the same partitioned run) keep the per-row label for disambiguation. `SubagentBlock` threads this via `hideChildLabel = childIds.length === 1` to `EventLine`.
248
249
 
249
250
  The reload path (`eventsFromTurns(turns, runs)`) reproduces the same tagged events from persisted `SessionRun.parentRunId` chains. Live and reloaded transcripts render identically — depth ≥ 2 nesting included.
250
251
 
@@ -317,6 +318,19 @@ Modal row layout: `›` cursor glyph, tool name, truncated `callId`, optional `
317
318
 
318
319
  Distinct from the run-wide `esc abort`: the cancelled call's wire result is the canonical `TOOL_USE_CANCELLED_MESSAGE` with `isError: true`, the assistant turn closes normally on the next batch boundary, and other in-flight tools keep running. The session teardown path also clears `inFlightTools` so a switched session doesn't try to cancel calls on an agent that no longer owns them.
319
320
 
321
+ ### Background-task completion banner
322
+
323
+ `shell({ run_in_background: true })` parks a process under a `bash_<n>` handle (see [SKILL.md "Background tasks"](./SKILL.md#background-tasks) for the full lifecycle). When the task exits — naturally, via `shell_kill`, or via `agent.destroy()` — the agent queues a `<task-notification>` block that arrives on the model's next turn AND surfaces in the transcript as a one-line banner.
324
+
325
+ `TaskNotificationBlock` (`src/tui/components.tsx`) is the renderer. Layout: `⌁` glyph + task id + status (`exited 0` / `killed`) + duration (`4.2s` / `42m`) + absolute path to the log file. Status-accented:
326
+
327
+ - `exited` with code 0 → dim (success is quiet).
328
+ - `exited` with non-zero code OR `killed` → warn (model should pay attention).
329
+
330
+ The `app.tsx` host wires `behavior.tasksDir = resolveTasksDir({ userDir, sessionId })` at session activation so the framework knows where to put log files. Without this, the shell tool surfaces a clean error to the model when it tries to spawn a background task.
331
+
332
+ On replay (session reload), `eventsFromTurns` re-synthesizes `'task-notification'` `StreamEvent`s from the persisted `<task-notification>` XML in user-turn text blocks — the raw XML block is dropped from the user-prompt stream so the banner doesn't double-paint alongside it. Field decoding is tolerant: missing tags fall back to defaults so older transcripts pre-dating a field still render cleanly.
333
+
320
334
  ### Active skills — footer chip + pinned-skills persistence
321
335
 
322
336
  When at least one skill is active, the footer hint row gets a passive `✦ N skill(s)` chip (`COLOR.brand` accent). The chip is purely informational — no shortcut wired — but it gives the user a passive surface for "tool restrictions are in effect" without having to scroll back through the transcript looking for a `skills_use` call. Driven by `activeSkillNames: ReadonlySet<string>` in `App.tsx`, fed by the agent's `skills:activate` / `skills:deactivate` hooks.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zidane",
3
- "version": "5.4.3",
3
+ "version": "5.5.0",
4
4
  "description": "an agent that goes straight to the goal",
5
5
  "type": "module",
6
6
  "private": false,
@@ -81,7 +81,7 @@
81
81
  "scripts": {
82
82
  "auth": "bun run src/auth.ts",
83
83
  "start": "bun run src/start.ts",
84
- "tui": "bun --filter zidane-tui dev",
84
+ "tui": "bun --cwd=tui run dev",
85
85
  "tui:install:cross": "bun install --cpu='*' --os='*'",
86
86
  "tui:build": "bun run scripts/build-executables.ts",
87
87
  "tui:build:current": "bun run scripts/build-executables.ts --current",
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-Yu8uhpy-.d.ts","names":[],"sources":["../src/errors.ts","../src/types.ts","../src/providers/anthropic.ts","../src/providers/cerebras.ts","../src/providers/openai.ts","../src/providers/openai-compat.ts","../src/providers/openrouter.ts","../src/providers/schema-sanitize.ts","../src/providers/index.ts","../src/session/file-map.ts","../src/session/memory.ts","../src/session/messages.ts","../src/session/remote.ts","../src/session/index.ts","../src/skills/types.ts","../src/tools/read-state.ts","../src/tools/types.ts","../src/mcp/index.ts","../src/skills/activation.ts","../src/agent.ts"],"mappings":";;;;;;;;;;;;AAYA;;;;KAAY,mBAAA;AAGZ;AAAA,UAAiB,eAAA;EACf,IAAA,EAAM,mBAAA;EAAmB;EAEzB,YAAA;EAFM;EAIN,OAAA;EAAA;;;;AAQD;;EADC,SAAA;AAAA;AAAA,UAGQ,iBAAA;EAIR;EAFA,QAAA;EAMA;EAJA,YAAA;EAIS;EAFT,KAAA;EASqC;EAPrC,SAAA;AAAA;;;;;cAOW,yBAAA,SAAkC,KAAA;EAAA,SACpC,IAAA;EAAA,SACA,QAAA;EAAA,SACA,YAAA;cAEG,OAAA,UAAiB,OAAA,EAAS,iBAAA;AAAA;AAYxC;;;;AAAA,cAAa,kBAAA,SAA2B,KAAA;EAAA,SAC7B,IAAA;EAAA,SACA,QAAA;EAAA,SACA,YAAA;EAMA;;;;;EAAA,SAAA,SAAA;cAEG,OAAA,UAAiB,OAAA,EAAS,iBAAA;AAAA;;;;cAY3B,iBAAA,SAA0B,KAAA;EAAA,SAC5B,IAAA;cAEG,OAAA,WAA+B,OAAA;IAAY,KAAA;EAAA;AAAA;;;AAoBzD;;;;;;;;;;;;cAAa,qBAAA,SAA8B,KAAA;EAAA,SAChC,IAAA;EAYP;EAAA,SAVO,QAAA;EAYP;EAAA,SAVO,YAAA;EAcP;;;;;;EAAA,SAPO,OAAA,EAAS,aAAA;IAChB,IAAA;IACA,MAAA;IACA,YAAA;EAAA;cAGU,OAAA;IACV,OAAA;IACA,QAAA;IACA,YAAA;IACA,OAAA,EAAS,aAAA;MAAgB,IAAA;MAAc,MAAA;MAAiB,YAAA;IAAA;IACxD,KAAA;EAAA;AAAA;;;;;;;;;cAkBS,wBAAA,SAAiC,KAAA;EAAA,SACnC,IAAA;;WAEA,QAAA;EA4CoD;EAAA,SA1CpD,WAAA;EAqD2B;EAAA,SAnD3B,YAAA;EAmD4B;EAAA,SAjD5B,YAAA;cAEG,OAAA;IACV,QAAA;IACA,WAAA;IACA,YAAA;IACA,YAAA;IACA,KAAA;EAAA;AAAA;;;;;;;cA+BS,iCAAA,WAA4C,MAAA;;;;;iBAWzC,sBAAA,CAAuB,OAAA;;;;;;;iBAYvB,YAAA,CAAa,GAAA;;ACrM7B;;iBD8MgB,YAAA,CACd,cAAA,EAAgB,eAAA,EAChB,QAAA,UACA,KAAA,YACC,yBAAA,GAA4B,kBAAA,GAAqB,iBAAA,GAAoB,qBAAA;;;;;;AA5NxE;;;;;AAGA;;;KCOY,aAAA;;;;;;;UAYK,aAAA;EACf,IAAA;EACA,WAAA;EACA,WAAA;AAAA;AAAA,UAGe,eAAA;EDNf;ECQA,IAAA;EDJA;ECMA,SAAA;EDNS;ECQT,OAAA;EDDqC;ECGrC,IAAA;EDHkD;;;;;;;;;ECalD,GAAA,GAAM,MAAA;EDRiD;AAYzD;;;;;;ECIE,SAAA;EDDS;ECGT,GAAA;;EAEA,OAAA,GAAU,MAAA;EDG4B;;;;AAYxC;;;;;;;;;;ECAE,IAAA;EDGwE;AAoB1E;;;;;;;;ECbE,gBAAA;EDcS;ECZT,WAAA;EDgBS;;;;;;;;;;;;;ECFT,YAAA;EDmB0D;;;;ECd1D,aAAA;EDiCW;;;;;;;;ECxBX,UAAA,IAAc,IAAA;IAAQ,IAAA;IAAc,WAAA;IAA6B,WAAA;EAAA;EDsC/D;;;;;;AAiCJ;;EC9DE,UAAA;ED8DuD;;AAWzD;;;;;AAYA;;;;;AASA;;;EC9EE,WAAA,GAAc,aAAA;EDkFb;;;;;;;;;;;;;;;;;;;AClNH;;;;;AAYA;;;;;EAkJE,WAAA;AAAA;AAAA,UAOe,aAAA;EAtJJ;AAGb;;;;;;;;;EA8JE,kBAAA;EAxJA;;;;;;;EAgKA,QAAA;EAzHA;EA2HA,SAAA;EA/GA;EAiHA,cAAA;EA9FA;EAgGA,MAAA,GAAS,MAAA;EAvFa;;;;;;;;;;AA8DxB;;;;;EAyCE,KAAA;EA0Ia;;;;;;;;;;EA/Hb,gBAAA;EAaA;;;;;;;;;;;;EAAA,UAAA;EAuDI;;;;;;;;;;;;;;;;;;EApCJ,aAAA;IAAkB,SAAA;IAAmB,MAAA;IAAgB,KAAA;EAAA,MAAoB,OAAA,UAAiB,UAAA;EAySzE;AAkBnB;;;;;;;;;;;;;AAKA;;;;;AAKA;;;;;;;;;;AAUA;EAhTE,WAAA,GAAc,MAAA;IACZ,GAAA;IACA,QAAA,yBAAiC,GAAA;MAC/B,IAAA;MACA,KAAA;MACA,GAAA;IAAA;MACM,IAAA;MAAyB,OAAA;IAAA;EAAA;EAqUR;;;;AAI7B;;;;;AAKA;;;;;;;;;AAeA;;;;;AA+BA;;;;;AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA/UE,UAAA,GAAa,MAAA,UAAgB,KAAA,EAAO,MAAA;EAoXhC;;;;;;;;;;;;EAvWJ,qBAAA;EA8Ye;;;;;;;;;AAKjB;;;;;;;EAlYE,eAAA;EAwYS;;;;;;EAjYT,gBAAA;EAiZoB;;;;;EA3YpB,gBAAA;EA2Y0E;;AAE5E;;;;;;;;;;;EA/XE,eAAA;EA8ayB;;;;;;;;;;;;;;;;;;;EA1ZzB,eAAA;EA0ZiB;;;;AAwBnB;;;;;AAEA;;;;;;;;;;;;;;;;AA2CA;;EAncE,cAAA;EAifY;;;;;;;;;;;;;;;;;;;;;AAoBd;;EA7eE,UAAA;IACE,IAAA;IACA,KAAA;EAAA;EAofF;;;;;;;;AAsCF;;;;;;;;;;;;;;;EAjgBE,gBAAA;EA2iBiC;;;;;;;;;;;;EA9hBjC,mBAAA;EA2iBK;;AAIP;;;;;AAKA;;;;;EAviBE,UAAA;EA+iBA;;;;;AAkBF;;;;;AAKA;;;;;;;;;EAljBE,iBAAA;AAAA;;;;;;;;;AA0jBF;;;KAxiBY,UAAA,GACN,cAAA,GACA,eAAA,GACA,kBAAA;AAAA,UAEW,cAAA;EACf,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,eAAA;EACf,IAAA;;EAEA,SAAA;ECtiBA;EDwiBA,IAAA;ECxiBc;ED0iBd,IAAA;AAAA;AAAA,UAGe,kBAAA;EACf,IAAA;EC1iB8B;ED4iB9B,SAAA;EChfwB;EDkfxB,IAAA;EACA,QAAA;EC5iBA;ED8iBA,IAAA;AAAA;;;;;;;;;ACzDF;;;;KD4EY,iBAAA,GACN,qBAAA,GACA,sBAAA;AAAA,UAEW,qBAAA;EACf,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,sBAAA;EACf,IAAA;;EAEA,SAAA;EEhoB6B;EFkoB7B,IAAA;AAAA;;;;;;;AEnmBF;iBF6mBgB,gBAAA,CAAiB,OAAA,WAAkB,iBAAA;;;;;;;;;;;AGrnBnD;;;;;;;;;iBHopBgB,oBAAA,CAAqB,OAAA,WAAkB,iBAAA;AAAA,KAa3C,mBAAA;EACJ,IAAA;EAAc,IAAA;AAAA;EACd,IAAA;EAAe,SAAA;EAAmB,IAAA;AAAA;EAClC,IAAA;EAAmB,EAAA;EAAY,IAAA;EAAc,KAAA,EAAO,MAAA;AAAA;EAEtD,IAAA;EACA,MAAA;EI1GO;;;;EJ+GP,MAAA,WAAiB,iBAAA;EACjB,OAAA;AAAA;EAGA,IAAA;EACA,IAAA;EACA,SAAA;EIhHwB;;;AA+B9B;;EJuFM,iBAAA;AAAA;EAEE,IAAA;EAA2B,IAAA;AAAA;;;;AIEnC;;;;;AAKA;;EJKM,IAAA;EACA,QAAA;EACA,OAAA;EIgBW;;;;;EJVX,KAAA;AAAA;EILJ;;;;;;;;;;;;;AAsGF;;EJ/EM,IAAA,qBI+E4D;EJ7E5D,eAAA,qBI6EuB;EJ3EvB,OAAA,UI2E4D;EJzE5D,KAAA;EAEA,KAAA,EAAO,SAAA;EAEP,WAAA;AAAA;AAAA,UAGW,cAAA;EACf,IAAA;EACA,OAAA,EAAS,mBAAA;AAAA;AAAA,UAGM,WAAA;EK7vBA;EL+vBf,EAAA;EK/vBmC;ELiwBnC,KAAA;EACA,IAAA;EACA,OAAA,EAAS,mBAAA;EK9uBoD;ELgvB7D,KAAA,GAAQ,SAAA;EKhvBiB;ELkvBzB,SAAA;AAAA;;;;;AM3uBF;KNuvBY,UAAA,GAAa,MAAA,WAAiB,GAAA,uBAA0B,GAAA;AAAA,UAEnD,eAAA;EACf,KAAA;EM1vB+B;AAEjC;;;;;EN+vBE,MAAA,YAAkB,UAAA;EAClB,MAAA;EACA,QAAA,GAAW,aAAA;EM1vBH;EN4vBR,MAAA,GAAS,WAAA;EMzvB0B;EN2vBnC,QAAA,GAAW,aAAA;EMzvBG;EN2vBd,KAAA,GAAQ,MAAA,SAAe,OAAA;EM3vBf;;;;AA4TV;;ENscE,KAAA,GAAQ,UAAA;EMnca;;;;;ENycrB,WAAA;EMzcqB;AAuCvB;;;;ENwaE,KAAA;EMraC;;;;;;;;;;;ENibD,cAAA,GAAiB,QAAA,CAAS,MAAA;AAAA;;;;;;;AOl1B5B;;;;;;;;;;AAMA;KPo2BY,gBAAA;AAAA,UAEK,SAAA;EACf,KAAA;EACA,MAAA;EOt2BA;EPw2BA,aAAA;EOv2BO;EPy2BP,SAAA;EOz2Ba;EP22Bb,QAAA;EOx2ByB;;;;;;;EPg3BzB,IAAA;EOp1BO;AAWT;;;EP80BE,YAAA,GAAe,gBAAA;EO1zBE;AAGnB;;;EP4zBE,OAAA;EO3zBA;;;;;;;;;;AAKF;;;EPo0BE,kBAAA;AAAA;AAAA,UAGe,UAAA;EO9zBC;;;;;EPo0BhB,OAAA;EOv0BW;EPy0BX,QAAA;EOt0BA;;;;AAGF;;;;EP40BE,cAAA;EOvzBS;;;;;;EP8zBT,kBAAA;EO/0BU;;;;;;;;EPw1BV,KAAA;EOv0BA;;;;AAGF;;EP20BE,OAAA;EOt0BiB;;;;;EP40BjB,SAAA,GAAY,SAAA;EO/zBmC;;;;;EPq0B/C,IAAA;EOxzByC;EP0zBzC,QAAA,GAAW,aAAA;EOjzBsC;EPmzBjD,MAAA,GAAS,MAAA;EO11BA;;;;;;EPi2BT,oBAAA;AAAA;AAAA,UAGe,aAAA;EACf,EAAA;EACA,IAAA;EO31BkC;;;;;;EPk2BlC,KAAA,EAAO,UAAA;EO51BwC;;;;;EPk2B/C,KAAA;EO/1BgE;;;;;EPq2BhE,MAAA;EOl1BA;;;;;EPw1BA,MAAA,GAAS,MAAA;AAAA;;AQl9BX;;;;;;;;;;;;URs+BiB,eAAA;EACf,MAAA;EACA,MAAA;EQp+Bc;ERs+Bd,IAAA;EQt+ByC;ERw+BzC,WAAA;EACA,KAAA,EAAO,MAAA;EQv+Bc;;AAGvB;;;ER0+BE,KAAA;EQt+BQ;AAwEV;;;;;;;ERu6BE,WAAA;EQt6BS;;;;;;ER66BT,KAAA;AAAA;;;AShiCF;;;;;;;;UT6iCiB,kBAAA;EACf,MAAA;EACA,MAAA;EACA,MAAA;EACA,IAAA;EUx+BiD;EV0+BjD,WAAA;EACA,KAAA,EAAO,MAAA;EU3+B6E;EV6+BpF,KAAA;EU36Bc;EV66Bd,WAAA;;EAEA,KAAA;AAAA;;UAIe,kBAAA;EACf,SAAA;AAAA;;UAIe,gBAAA;EACf,EAAA;EACA,IAAA;EUv2B6C;;;;;EV62B7C,KAAA;EU72BuE;AAwEzE;;;;;;;;;;AAuEA;;EV4uBE,cAAA,GAAiB,MAAA;AAAA;;UAIF,iBAAA;EACf,MAAA;AAAA;;UAIe,uBAAA;EACf,QAAA;EACA,UAAA;EACA,MAAA;EACA,mBAAA,EAAqB,MAAA;IAA4B,MAAA;IAAgB,OAAA;IAAiB,OAAA;EAAA;EAClF,WAAA,EAAa,MAAA;IAA4B,MAAA;IAAgB,OAAA;IAAiB,OAAA;EAAA;AAAA;AAAA,KAGhE,gBAAA;;;;;;ADtmCZ;;;;;UEoCiB,0BAAA;EACf,KAAA,GAAQ,KAAA,CAAM,MAAA;EAAA,CACb,GAAA;AAAA;AAAA,UAGc,eAAA;EACf,MAAA;EACA,MAAA;EACA,OAAA;EACA,OAAA;EACA,YAAA;EF/BS;AACV;;;;EEoCC,OAAA;EF9BA;;;;;AAWF;;;;;;;;;;;EEoCE,UAAA;EF/BuD;;AAYzD;;;;;;;;;;;;;;;AAuBA;;EEgBE,iBAAA,GAAoB,0BAAA;EFhBsB;;;;;;;;;AAuB5C;;EEKE,eAAA,GAAkB,MAAA;AAAA;AAAA,iBA4bJ,SAAA,CACd,eAAA,GAAkB,eAAA,GACjB,QAAA;;;UC1iBc,cAAA;EACf,MAAA;EACA,YAAA;;;;AHKF;;EGCE,YAAA,GAAe,oBAAA;AAAA;;AHEjB;;;;;iBGqBgB,QAAA,CAAS,MAAA,GAAS,cAAA,GAAiB,QAAA;;;UCRlC,YAAA;;EAEf,MAAA;;EAEA,MAAA;EACA,OAAA;EACA,OAAA;EACA,SAAA;EACA,YAAA;EACA,SAAA;AAAA;AAAA,iBAsOc,MAAA,CAAO,MAAA,GAAS,YAAA,GAAe,QAAA;;;AJvE/C;;;;;AAWA;AAXA,cKqZa,qBAAA,SAA8B,KAAA;EAAA,SAChC,MAAA;EAAA,SACA,YAAA;EAAA,SACA,QAAA;cAEG,MAAA,UAAgB,QAAA;AAAA;;;;AL1X9B;;;;;;;iBKyZgB,yBAAA,CAA0B,GAAA,YAAe,eAAA;;;;iBA2DzC,kBAAA,CAAmB,MAAA,8BAAoC,gBAAA;;;;;;;;;;;UAgCtD,sBAAA;EACf,IAAA;EACA,MAAA;AAAA;AAAA,UAGe,kBAAA;EJvsBQ;EIysBvB,MAAA;EJ7rB4B;EI+rB5B,OAAA;EJ/rB4B;EIisB5B,YAAA;EJ/rBA;EIisBA,IAAA;EJhsBW;EIksBX,UAAA,GAAa,sBAAA;EJ/rBE;EIisBf,YAAA,GAAe,MAAA;;;;;;;;;;;EAWf,YAAA,GAAe,oBAAA;EJ1rBT;;;;;;;;;;;;;EIwsBN,gBAAA;EJroBc;;;;;;;AA8DhB;;;;;;;;;EIwlBE,iBAAA;EJrkBA;;;;;;;;;;EIglBA,eAAA,GAAkB,MAAA;AAAA;;;;;;;;;;;;;;;;;iBA6CJ,YAAA,CAAa,MAAA,EAAQ,kBAAA,GAAqB,QAAA;;;UCt0BzC,gBAAA;EACf,MAAA;EACA,YAAA;;;;ANKF;;;;;AAGA;EMEE,YAAA,GAAe,oBAAA;AAAA;;;;;;;iBAqBD,UAAA,CAAW,MAAA,GAAS,gBAAA,GAAmB,QAAA;;;;;;;;;;AN1BvD;;;;;AAGA;;;;;;;;;;;AAaC;;;;;;;;;;AAiBD;;;;;;;;;;;KOAY,qBAAA;AAAA,UAEK,qBAAA;EPGwC;EODvD,OAAA,GAAU,qBAAA;EPaoB;;;;EOR9B,QAAA;AAAA;AAAA,UAGe,oBAAA;EPcN;EOZT,MAAA,EAAQ,MAAA;EPcI;;;;;EORZ,QAAA;AAAA;;;;;;;;;;;iBAsTc,kBAAA,CACd,KAAA,WACA,OAAA,GAAS,qBAAA,GACR,oBAAA;;;;;;;;;;;iBAuCa,iBAAA;EAA8B,IAAA;EAAc,WAAA;AAAA,EAAA,CAC1D,KAAA,WAAgB,CAAA,IAChB,OAAA;EAAW,OAAA,GAAU,qBAAA;EAAuB,SAAA,IAAa,IAAA;AAAA,IACxD,CAAA;;;UCjac,QAAA;EACf,IAAA;EACA,WAAA;EACA,WAAA,EAAa,MAAA;AAAA;AAAA,UAGE,QAAA;EACf,EAAA;EACA,IAAA;EACA,KAAA,EAAO,MAAA;AAAA;AAAA,UAGQ,UAAA;EACf,EAAA;;;;;;;;EAQA,OAAA,WAAkB,iBAAA;ERGT;AACV;;;;;;;;;;AAiBD;;;;;;;EQFE,OAAA;AAAA;;;;;;ARmBF;;;UQRiB,oBAAA;ERQuB;;;;;;;;EQCtC,MAAA;ERUuD;;AAYzD;;;;;;;;EQXE,iBAAA;AAAA;AAAA,UAGe,eAAA;EACf,MAAA,GAAS,KAAA;EACT,UAAA,IAAc,KAAA;EACd,cAAA,IAAkB,GAAA,EAAK,uBAAA,YAAmC,OAAA;AAAA;AAAA,UAG3C,UAAA;ER+CJ;EQ7CX,gBAAA,EAAkB,cAAA;ERuB4B;EQrB9C,IAAA;ERqByC;EQnBzC,SAAA,EAAW,QAAA;ERsBF;EQpBT,IAAA;EACA,KAAA,EAAO,SAAA;AAAA;AAAA,UAGQ,aAAA;EACf,KAAA;EACA,MAAA;EACA,KAAA;EACA,QAAA,EAAU,cAAA;EACV,SAAA;ER6BE;EQ3BF,QAAA,GAAW,aAAA;ER4BA;EQ1BX,cAAA;ER0ByC;EQxBzC,UAAA;IAAe,IAAA;IAAoC,IAAA;EAAA;ER0BlD;AAiBH;;;;;;EQnCE,KAAA;ERwCS;EQtCT,MAAA,GAAS,WAAA;AAAA;AAAA,UAGM,QAAA;EAAA,SACN,IAAA;EAAA,SACA,IAAA;IACP,YAAA,UR0CA;IQxCA,YAAA,GAAe,oBAAA;EAAA,IACb,MAAA;ERyCH;EQtCD,WAAA,GAAc,KAAA,EAAO,QAAA;ERoEV;EQjEX,WAAA,GAAc,OAAA,aAAoB,cAAA;;EAGlC,gBAAA,GAAmB,OAAA,aAAoB,cAAA;ER8DsB;EQ3D7D,kBAAA,GAAqB,OAAA,EAAS,UAAA,OAAiB,cAAA;ERsEX;EQnEpC,MAAA,GAAS,OAAA,EAAS,aAAA,EAAe,SAAA,EAAW,eAAA,KAAoB,OAAA,CAAQ,UAAA;ERmEnC;;AAYvC;;;;;AASA;EQ9EE,aAAA,IAAiB,KAAA,EAAO,UAAA,OAAiB,cAAA;;;;;;;;EASzC,aAAA,IAAiB,GAAA,cAAiB,eAAA;AAAA;;;;;;ARlHpC;USRiB,cAAA;;EAEf,GAAA,QAAW,OAAA;IAAU,KAAA,EAAO,MAAA;EAAA;ETQnB;ESNT,IAAA,GAAO,KAAA,EAAO,MAAA,qBAA2B,OAAA;;EAEzC,MAAA,QAAc,OAAA;AAAA;AAAA,UAGC,mBAAA;ETIwC;ESFvD,SAAA;ETcW;ESZX,QAAA;AAAA;;;;;;;;;;;iBAwEc,kBAAA,CACd,OAAA,EAAS,cAAA,EACT,OAAA,GAAS,mBAAA,GACR,YAAA;;;iBCrHa,iBAAA,CAAA,GAAqB,YAAA;;;iBCyErB,aAAA,CAAc,GAAA;EAAO,IAAA;EAAc,OAAA;AAAA,IAAqB,cAAA;AAAA,iBAkExD,UAAA,CAAW,GAAA;EAAO,IAAA;EAAc,OAAA;AAAA,IAAqB,cAAA;AAAA,iBAmFrD,WAAA,CAAY,GAAA,EAAK,cAAA;EAAmB,IAAA;EAAc,OAAA;AAAA;AAAA,iBAwElD,QAAA,CAAS,GAAA,EAAK,cAAA;EAAmB,IAAA;EAAc,OAAA;AAAA;;;;AXlR9D;;;;cWyVY,iCAAA;;;;;;AXxUb;;cWiVa,2BAAA;;;;;;;cAQA,2BAAA;;;;;AXxUb;;;;;KWmVY,iBAAA;AAAA,UAQK,aAAA;EACf,IAAA,EAAM,iBAAA;EXnVG;EWqVT,MAAA;EXnVY;EWqVZ,YAAA;AAAA;AAAA,UAGe,8BAAA;EXxVwC;AAYzD;;;;;EWmVE,QAAA,IAAY,MAAA,EAAQ,aAAA;AAAA;;;;;;AX5TtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyCA;;;;;;iBW+TgB,uBAAA,CACd,QAAA,EAAU,cAAA,IACV,OAAA,GAAS,8BAAA,GACR,cAAA;;;;;;;;;;;;;AXnRH;;;;;AAWA;;;iBW6iBgB,wBAAA;EAAqC,IAAA;EAAc,OAAA,EAAS,mBAAA;AAAA,EAAA,CAC1E,KAAA,EAAO,CAAA,KACN,CAAA;;;;AX1hBH;;;;;;;;;;;;;;KW+kBY,qBAAA;;;;;;;;;iBAUI,sBAAA;EAAmC,IAAA;EAAc,OAAA,EAAS,mBAAA;AAAA,EAAA,CACxE,KAAA,EAAO,CAAA,KACN,qBAAA;AAAA,iBAwBa,oBAAA,CAAqB,GAAA;EAAO,IAAA;EAAc,OAAA;AAAA,IAAqB,cAAA;;;UCr0B9D,kBAAA;EZFf;EYIA,GAAA;EZFA;EYIA,OAAA,GAAU,MAAA;AAAA;AAAA,iBAKI,iBAAA,CAAkB,OAAA,EAAS,kBAAA,GAAqB,YAAA;;;UCV/C,UAAA;EACf,EAAA;EACA,SAAA;EACA,OAAA;EACA,MAAA;EACA,MAAA;EACA,KAAA;EACA,QAAA;EACA,SAAA;EACA,KAAA;EbCA;EaCA,SAAA,GAAY,SAAA;EbDH;EaGT,UAAA,GAAa,SAAA;EbAY;EaEzB,IAAA;EbFyB;;;;;EaQzB,WAAA;EbAS;AAOX;;;EaFE,KAAA;AAAA;AAAA,UAGe,WAAA;EACf,EAAA;EACA,OAAA;;;;;;;AbcF;;;;;;;;EaCE,WAAA;EACA,KAAA,EAAO,WAAA;EACP,IAAA,EAAM,UAAA;EACN,MAAA;EACA,QAAA,EAAU,MAAA;EACV,SAAA;EACA,SAAA;AAAA;AAAA,UAOe,YAAA;;EAEf,iBAAA,kBAAmC,OAAA;EbOE;EaJrC,cAAA,kBAAgC,OAAA;;EAGhC,IAAA,GAAO,SAAA,aAAsB,OAAA,CAAQ,WAAA;EbIkB;EaDvD,IAAA,GAAO,OAAA,EAAS,WAAA,KAAgB,OAAA;EbCwC;EaExE,MAAA,GAAS,SAAA,aAAsB,OAAA;EbkBpB;;;;;;;;EaRX,IAAA,GAAO,MAAA;IAAW,OAAA;IAAkB,KAAA;IAAgB,WAAA;EAAA,MAAkC,OAAA;EboBpE;EajBlB,WAAA,GAAc,SAAA,UAAmB,KAAA,EAAO,WAAA,OAAkB,OAAA;EbmBxD;EahBF,QAAA,GAAW,SAAA,UAAmB,IAAA,WAAe,KAAA,cAAmB,OAAA,CAAQ,WAAA;;EAGxE,SAAA,GAAY,SAAA,UAAmB,GAAA,EAAK,UAAA,KAAe,OAAA;EbmBjD;EahBF,YAAA,GAAe,SAAA,UAAmB,MAAA,EAAQ,WAAA,eAA0B,OAAA;AAAA;AAAA,UAOrD,OAAA;EbWY;EAAA,SaTlB,EAAA;EbSiD;EAAA,SaNjD,OAAA;EbEG;;;AAuBd;EAvBc,SaIH,WAAA;;WAGA,KAAA,EAAO,WAAA;EbgB4B;;;;;;EAAA,SaRnC,OAAA;EboBP;EAAA,SajBO,MAAA,EAAQ,WAAA;EbmBf;EAAA,SahBO,IAAA,EAAM,UAAA;EbkBb;EAAA,SafO,QAAA,EAAU,MAAA;EbgBlB;;AA8BH;;;EavCE,QAAA,GAAW,KAAA,UAAe,MAAA,WAAiB,MAAA;IAAW,WAAA;IAAsB,KAAA;EAAA;;EAG5E,WAAA,GAAc,KAAA,UAAe,KAAA;IAAS,KAAA;IAAe,QAAA;IAAkB,SAAA;IAAmB,SAAA,GAAY,SAAA;IAAa,IAAA;EAAA;EboErG;EAAY;;;;;;;;EazD1B,QAAA,GAAW,KAAA,UAAe,KAAA;IAAU,KAAA;IAAe,QAAA;IAAkB,SAAA;IAAmB,SAAA,GAAY,SAAA;IAAa,IAAA;EAAA;Eb6D/D;EAAoB;EazDtE,QAAA,GAAW,KAAA,UAAe,KAAA,UAAe,KAAA;IAAU,KAAA;IAAe,QAAA;IAAkB,SAAA;IAAmB,SAAA,GAAY,SAAA;IAAa,IAAA;EAAA;;EAGhI,WAAA,GAAc,KAAA,EAAO,WAAA,OAAkB,OAAA;EZ5JhB;EY+JvB,QAAA,GAAW,KAAA,EAAO,WAAA;EZnJU;;;;;;;;AAM9B;EYwJE,OAAA,GAAU,IAAA,EAAM,UAAA;;EAGhB,YAAA,GAAe,MAAA,EAAQ,WAAA,eAA0B,OAAA;EZ7HvC;EYgIV,SAAA,GAAY,GAAA,EAAK,UAAA,KAAe,OAAA;EZhDL;EYmD3B,cAAA,iBAA+B,OAAA;EZ/J/B;EYkKA,OAAA,GAAU,GAAA,UAAa,KAAA;EZ9JvB;EYiKA,IAAA,QAAY,OAAA;EZrJZ;EYwJA,MAAA,QAAc,WAAA;AAAA;AAAA,UAOC,oBAAA;EZnJf;EYqJA,EAAA;EZtIA;EYwIA,OAAA;EZ5HA;;;;;;;EYoIA,WAAA;EZ/FA;EYiGA,QAAA,GAAW,MAAA;EZjFG;EYmFd,KAAA,GAAQ,YAAA;EAER,KAAA,GAAQ,WAAA;AAAA;AZhDV;;;;AAAA,iBYuDsB,aAAA,CAAc,OAAA,GAAS,oBAAA,GAA4B,OAAA,CAAQ,OAAA;;;;iBA4L3D,WAAA,CAAY,KAAA,EAAO,YAAA,EAAc,SAAA,WAAoB,OAAA,CAAQ,OAAA;;;;;;;;;;UClalE,aAAA;EdAc;EcE7B,IAAA;EdF6B;EcI7B,IAAA;AAAA;;;;;KAWU,WAAA;;UAGK,eAAA;EACf,QAAA;EdJS;EcMT,IAAA;EdHQ;EcKR,OAAA;;EAEA,KAAA;AAAA;AAAA,UAOe,WAAA;EdRf;EcUA,IAAA;EdRS;EcUT,WAAA;EdHW;EcKX,YAAA;;;;;;EAMA,MAAA,GAAS,WAAA;;EAET,QAAA;EdRsC;EcUtC,OAAA;EdVuD;EcYvD,OAAA;EdAW;EcEX,aAAA;;;;;EAKA,QAAA,GAAW,MAAA;EdJF;EcMT,YAAA;;EAEA,SAAA,GAAY,aAAA;EdA0B;;;;EcKtC,WAAA,GAAc,eAAA;AAAA;AAAA,UAOC,YAAA;EdA2B;;;;;;EcO1C,OAAA;EdJwE;EcMxE,IAAA;EdcW;EcZX,KAAA,GAAQ,WAAA;;EAER,OAAA;EdgCW;Ec9BX,gBAAA;EdQ8C;;;;;;EcD9C,IAAA;EdakB;;;;EcRlB,SAAA;EdeE;EcbF,eAAA;EdeE;;;;;EcTF,kBAAA;AAAA;;;UC1Ee,cAAA;EACf,WAAA;;EAEA,MAAA;EACA,KAAA;EACA,QAAA;EfDuD;;AAYzD;;;;EeJE,WAAA;EfKS;EeHT,OAAA;AAAA;AAAA,KAGU,YAAA,GAAe,GAAA,SAAY,cAAA;;;;;;;AfsBvC;;;;;iBePgB,YAAA,CAAa,OAAA,EAAS,OAAA,eAAsB,YAAA;;;;;;;Af8B5D;;;iBeVgB,mBAAA,CAAoB,GAAA;EAClC,OAAA,GAAU,OAAA;EACV,SAAA,GAAY,YAAA;AAAA,IACV,YAAA;;;;;;;;;;;;;;;;;;;iBAsBY,YAAA,CAAa,GAAA,UAAa,IAAA;;;;;Af0B1C;;iBehBgB,WAAA,CAAY,IAAA;;;;;;;AftH5B;;;UgBCiB,WAAA;EhBAf;EgBEA,QAAA,EAAU,QAAA;EhBAV;EgBEA,MAAA,EAAQ,WAAA;EhBOR;EgBLA,SAAA,EAAW,gBAAA;EhBKF;EgBHT,MAAA,EAAQ,eAAA;EhBMiB;EgBJzB,KAAA,EAAO,QAAA,CAAS,UAAA;EhBIS;EgBFzB,IAAA;EhBMA;EgBJA,MAAA;EhBQA;EgBNA,KAAA,EAAO,MAAA,SAAe,OAAA;EhBMb;AAOX;;;;;;;;;EgBFE,WAAA,GAAc,MAAA;EhBOwB;EgBLtC,UAAA,GAAa,eAAA;EhBK0C;EgBHvD,MAAA,GAAS,YAAA;EhBeE;EgBbX,QAAA,GAAW,aAAA;;EAEX,MAAA;EhBWsC;EgBTtC,MAAA;EhBWS;;;;;;;;EgBFT,KAAA;EhBuBW;;;;;;;EgBfX,WAAA;EhBkBuD;;;;AAoBzD;EgBhCE,OAAA,GAAU,OAAA;;;;;;;;;;EAUV,SAAA,GAAY,YAAA;EhBkCH;;;;;EgB5BT,KAAA;AAAA;AAAA,UAGe,OAAA;EACf,IAAA,EAAM,QAAA;EhBkCJ;;;;;;;;;EgBxBF,OAAA,GAAU,KAAA,EAAO,MAAA,mBAAyB,GAAA,EAAK,WAAA,KAAgB,OAAA,UAAiB,iBAAA;EhB2C5C;;;;;;;;;;;;;;;;;;AA+CtC;;;;;AAWA;EgB5EE,iBAAA,eAAgC,KAAA,EAAO,MAAA;AAAA;AAAA,KAG7B,OAAA,GAAU,GAAA,SAAY,OAAA;;;UCzGjB,aAAA;EACf,KAAA,EAAO,MAAA,SAAe,OAAA;EACtB,KAAA,QAAa,OAAA;AAAA;;;;;;;AjBHd;;;;;;iBiB4Ge,mBAAA,CAAoB,KAAA,YAAiB,eAAA;;;;AjB3FrD;;;;;;iBiBiIgB,cAAA,CAAe,OAAA;;;;;;;;AjBhH/B;;;;;;iBiB4IgB,kBAAA,CAAmB,OAAA,YAAmB,iBAAA;;;;;;UAyKrC,wBAAA;EjB1SwC;;AAYzD;;;;;;;;;;;EiB4SE,iBAAA,IAAqB,MAAA,EAAQ,eAAA,KAAoB,mBAAA;AAAA;;;;;;;;;;;;iBAc7B,iBAAA,CACpB,OAAA,EAAS,eAAA,IACT,cAAA,SAAuB,MAAA,EACvB,KAAA,GAAQ,QAAA,CAAS,UAAA,GACjB,OAAA,GAAU,wBAAA,GACT,OAAA,CAAQ,aAAA;;;AjBxXV;AAAA,KkBEW,aAAA;;;;;;;;;AlBeZ;;;;KkBDY,kBAAA;;UAGK,WAAA;EACf,KAAA,EAAO,WAAA;EACP,WAAA;EACA,YAAA,EAAc,aAAA;AAAA;;;;AlBYhB;UkBLiB,oBAAA;;EAEf,MAAA,iBAAuB,WAAA;ElBGe;EkBDtC,QAAA,GAAW,IAAA;ElBGF;EkBDT,GAAA,GAAM,IAAA,aAAiB,WAAA;ElBQd;;;;;;EkBDT,QAAA,GAAW,KAAA,EAAO,WAAA,EAAa,GAAA,EAAK,aAAA;ElBezB;;;;EkBVX,UAAA,GAAa,IAAA,aAAiB,WAAA;ElBWrB;EkBTT,KAAA,iBAAsB,WAAA;AAAA;AAAA,UAGP,2BAAA;ElBQ4B;;;AAoB7C;EkBvBE,SAAA;AAAA;AAAA,iBAOc,0BAAA,CACd,OAAA,GAAS,2BAAA,GACR,oBAAA;;;UCrDc,UAAA;EAEf,eAAA,GAAkB,GAAA;IAAO,MAAA;EAAA;EnBzBzB;;;;;AAUD;;;;;;EmB6BC,aAAA,GAAgB,GAAA;IACd,KAAA;IACA,WAAA;IACA,KAAA;IACA,SAAA;InBhBmC;;;;;;;;ImByBnC,YAAA;IACA,SAAA;IACA,cAAA,GAAiB,QAAA,CAAS,MAAA;EAAA;EAI5B,aAAA,GAAgB,GAAA;IAAO,IAAA;IAAc,MAAA;IAAgB,OAAA,EAAS,aAAA;EAAA;EnBdxB;;;;;;;;;;;AAuBxC;;;;;;;;EmBWE,YAAA,GAAe,GAAA;IACb,IAAA;IACA,MAAA;IACA,KAAA,EAAO,SAAA;IACP,OAAA,EAAS,WAAA;IACT,UAAA;MACE,IAAA,EAAM,QAAA,CAAS,MAAA;MACf,GAAA,EAAK,QAAA,CAAS,MAAA;IAAA;InBKuB;;;;;;;;;;;;;ImBUvC,eAAA,EAAiB,QAAA;MACf,KAAA;MACA,MAAA;MACA,SAAA;MACA,aAAA;MACA,IAAA;MACA,KAAA;IAAA;EAAA;EnBEQ;;;AAuBd;;;;;;;;;EmBTE,oBAAA,GAAuB,GAAA;IACrB,IAAA;IACA,MAAA;IACA,OAAA,EAAS,WAAA,EnBoBT;ImBlBA,OAAA,WAAkB,UAAA;EAAA;EnBeR;;;AAoCd;;;;;AAWA;;EmBhDE,cAAA,GAAiB,GAAA,EAAK,iBAAA;IAAsB,SAAA;EAAA;EAC5C,aAAA,GAAgB,GAAA,EAAK,iBAAA;IAAsB,KAAA;IAAe,IAAA;EAAA;EAC1D,YAAA,GAAe,GAAA,EAAK,iBAAA;IAAsB,IAAA;EAAA;EAC1C,iBAAA,GAAoB,GAAA,EAAK,iBAAA;IAAsB,KAAA;IAAe,QAAA;EAAA;EnBsEZ;;;;;;;;;;;;;;;;;AClNpD;;;;;AAYA;EkBwJE,cAAA,GAAiB,GAAA,EAAK,iBAAA;IACpB,GAAA;IACA,UAAA;IACA,SAAA;EAAA;EAEF,eAAA,GAAkB,GAAA,EAAK,uBAAA;ElB1JZ;;AAGb;;;;;;;;;;;;;;;;;;;;;;;;;;;;EkBwLE,WAAA,GAAc,GAAA,EAAK,eAAA;IACjB,KAAA;IACA,MAAA;IACA,MAAA,YAAkB,iBAAA;IAClB,aAAA,EAAe,QAAA,CAAS,MAAA;EAAA;EAE1B,aAAA,GAAgB,GAAA,EAAK,eAAA;IACnB,SAAA;IACA,aAAA,EAAe,QAAA,CAAS,MAAA;IlBpBjB;;;;;;;IkB4BP,YAAA;EAAA;ElB9BF;;;;;;;;;;;;;;;;;;;;;;;EkBuDA,iBAAA,GAAoB,GAAA,EAAK,eAAA;IACvB,OAAA;IACA,MAAA;IACA,aAAA,EAAe,QAAA,CAAS,MAAA;EAAA;ElBuI1B;;;;;;;;;;;;;;AAuLF;;;;;;EkBxSE,YAAA,GAAe,GAAA,EAAK,eAAA;IAClB,MAAA,WAAiB,iBAAA;IACjB,WAAA;IACA,SAAA;IACA,aAAA,EAAe,QAAA,CAAS,MAAA;EAAA;ElBuSJ;AAExB;;;;;AAKA;;;EkBnSE,YAAA,GAAe,GAAA,EAAK,eAAA;IAAoB,KAAA,EAAO,KAAA;IAAO,MAAA,YAAkB,iBAAA;EAAA;EACxE,gBAAA,GAAmB,GAAA,EAAK,eAAA;IAAoB,MAAA,WAAiB,iBAAA;IAAqB,OAAA;IAAkB,WAAA;IAAqB,SAAA;EAAA;ElB4SxF;;;;;;;;AA2BnC;EkB7TE,cAAA,GAAiB,GAAA,EAAK,eAAA;IACpB,MAAA,YAAkB,iBAAA;IAClB,aAAA;EAAA;ElB+Ta;;;;;AAKjB;;;;;;;;;AAeA;;;;;AA+BA;;;;EkBzVE,gBAAA,GAAmB,GAAA,EAAK,eAAA;IACtB,MAAA;IACA,aAAA,EAAe,QAAA,CAAS,MAAA;EAAA;ElBuWgC;;;;;;EkB/V1D,mBAAA,GAAsB,GAAA,EAAK,eAAA;IACzB,MAAA;IACA,MAAA,EAAQ,MAAA;EAAA;ElB6VJ;;;;;;;;;;EkBjVN,mBAAA,GAAsB,GAAA,EAAK,eAAA;IACzB,SAAA;IACA,MAAA,EAAQ,MAAA;EAAA;EAIV,mBAAA,GAAsB,GAAA;IAAO,QAAA,EAAU,cAAA;EAAA;ElB8WnC;;;;;;;;;;;;AAsCN;;EkBrYE,kBAAA,GAAqB,GAAA;IAAO,MAAA;IAAgB,QAAA,WAAmB,cAAA;IAAkB,IAAA;IAAc,MAAA;IAAgB,OAAA,GAAU,OAAA;EAAA;EACzH,cAAA,GAAiB,GAAA;IAAO,OAAA;EAAA;EAGxB,cAAA,GAAiB,GAAA,EAAK,gBAAA;EACtB,gBAAA,GAAmB,GAAA,EAAK,aAAA;EACxB,aAAA,GAAgB,GAAA,EAAK,gBAAA;IAAqB,KAAA,EAAO,KAAA;EAAA;EAQjD,mBAAA,GAAsB,GAAA,EAAK,iBAAA;IAAsB,KAAA;IAAe,IAAA;IAAc,OAAA;IAAiB,KAAA;EAAA;EAC/F,uBAAA,GAA0B,GAAA,EAAK,iBAAA;IAAsB,KAAA;IAAe,QAAA;IAAkB,OAAA;IAAiB,KAAA;EAAA;EACvG,kBAAA,GAAqB,GAAA,EAAK,iBAAA;IAAsB,IAAA;IAAc,OAAA;IAAiB,KAAA;EAAA;;EAE/E,oBAAA,GAAuB,GAAA,EAAK,iBAAA;IAAsB,GAAA;IAAc,OAAA;IAAiB,KAAA;EAAA;ElBgazE;;;;;;;;;;;EkBpZR,iBAAA,GAAoB,GAAA,EAAK,eAAA;IACvB,KAAA;IACA,MAAA;IACA,MAAA,YAAkB,iBAAA;IAClB,aAAA,EAAe,QAAA,CAAS,MAAA;IACxB,OAAA;IACA,KAAA;EAAA;EAEF,qBAAA,GAAwB,GAAA,EAAK,kBAAA;IAC3B,KAAA;IACA,MAAA;IACA,MAAA,YAAkB,iBAAA;IAClB,OAAA;IACA,KAAA;EAAA;EAEF,mBAAA,GAAsB,GAAA,EAAK,eAAA;IACzB,SAAA;IACA,aAAA,EAAe,QAAA,CAAS,MAAA;IACxB,OAAA;IACA,KAAA;IlBwbwB;;AAE5B;;;;;;IkBjbI,YAAA;EAAA;ElBybF;;;;;;EkBjbA,uBAAA,GAA0B,GAAA,EAAK,eAAA;IAC7B,OAAA;IACA,MAAA;IACA,aAAA,EAAe,QAAA,CAAS,MAAA;IACxB,OAAA;IACA,KAAA;EAAA;EAEF,kBAAA,GAAqB,GAAA,EAAK,eAAA;IACxB,MAAA,WAAiB,iBAAA;IACjB,WAAA;IACA,SAAA;IACA,aAAA,EAAe,QAAA,CAAS,MAAA;IACxB,OAAA;IACA,KAAA;EAAA;ElB+eF;;;;;;;;EkBreA,sBAAA,GAAyB,GAAA,EAAK,eAAA;IAC5B,MAAA,WAAiB,iBAAA;IACjB,OAAA;IACA,WAAA;IACA,SAAA;IACA,OAAA;IACA,KAAA;EAAA;EAEF,kBAAA,GAAqB,GAAA,EAAK,eAAA;IAAoB,KAAA,EAAO,KAAA;IAAO,OAAA;IAAiB,KAAA;EAAA;ElBkhB7E;;;;AAoBF;;;;EkB7hBE,sBAAA,GAAyB,GAAA,EAAK,eAAA;IAC5B,MAAA;IACA,aAAA,EAAe,QAAA,CAAS,MAAA;IACxB,OAAA;IACA,KAAA;EAAA;EAEF,kBAAA,GAAqB,GAAA;IACnB,IAAA;IACA,MAAA;IACA,KAAA,EAAO,SAAA;IACP,OAAA,EAAS,WAAA;IACT,UAAA;MAAc,IAAA,EAAM,QAAA,CAAS,MAAA;MAAyB,GAAA,EAAK,QAAA,CAAS,MAAA;IAAA;IACpE,OAAA;IACA,KAAA;EAAA;ElB8jBF;;;;;;EkBpjBA,aAAA,GAAgB,GAAA;IAAO,IAAA;IAAc,SAAA;IAAmB,KAAA;IAAiB,IAAA;EAAA;EACzE,WAAA,GAAc,GAAA;IAAO,IAAA;IAAc,KAAA,EAAO,KAAA;EAAA;EAC1C,WAAA,GAAc,GAAA;IAAO,IAAA;EAAA;ElBskBrB;;;;EkBjkBA,qBAAA,GAAwB,GAAA;IAAO,IAAA;IAAc,SAAA;EAAA;;;;AlB8lB/C;;;;;;;;;EkBjlBE,mBAAA,GAAsB,GAAA;IAAO,IAAA;IAAc,SAAA;IAAmB,UAAA;EAAA;IAA0B,EAAA;IAAU,SAAA;IAAmB,IAAA;IAAgB,MAAA;EAAA;IAAuB,EAAA;IAAW,KAAA,EAAO,KAAA;EAAA;ElBylBpJ;;;;;AClkC5B;;;;;;;;;EiBwfE,mBAAA,GAAsB,GAAA;IACpB,IAAA;IACA,SAAA;IACA,MAAA;EAAA;EjBrfF;;;;;;;EiB8fA,cAAA,GAAiB,GAAA;IAAO,IAAA;IAAc,GAAA;EAAA;EjBncd;EiBqcxB,kBAAA,GAAqB,GAAA;IAAO,IAAA;EAAA;;EAE5B,gBAAA,GAAmB,GAAA;IAAO,IAAA;IAAc,KAAA,EAAO,KAAA;EAAA;EjBTtC;;;;;AC1iBX;;;;;;;EgBgkBE,kBAAA,GAAqB,GAAA;IACnB,MAAA;IACA,SAAA;IACA,KAAA,EAAO,KAAA;MAAQ,IAAA;MAAc,WAAA;MAA6B,WAAA;IAAA;EAAA;EhBpiBX;;;;;;ACRnD;;;;;;Ee4jBE,eAAA,GAAkB,GAAA,EAAK,kBAAA;IACrB,KAAA;IACA,MAAA;IACA,MAAA,YAAkB,iBAAA;EAAA;EAEpB,iBAAA,GAAoB,GAAA,EAAK,kBAAA;EACzB,gBAAA,GAAmB,GAAA,EAAK,kBAAA;IAAuB,MAAA,WAAiB,iBAAA;IAAqB,WAAA;EAAA;EACrF,oBAAA,GAAuB,GAAA,EAAK,kBAAA;IAAuB,MAAA,WAAiB,iBAAA;IAAqB,WAAA;EAAA;EACzF,gBAAA,GAAmB,GAAA,EAAK,kBAAA;IAAuB,KAAA,EAAO,KAAA;EAAA;EAGtD,gBAAA,GAAmB,GAAA;IAAO,MAAA,EAAQ,WAAA;EAAA;EAClC,gBAAA,GAAmB,GAAA;IAAO,OAAA;IAAiB,MAAA,EAAQ,WAAA;EAAA;EACnD,iBAAA,GAAoB,GAAA;IAAO,KAAA,EAAO,WAAA;IAAa,GAAA,EAAK,aAAA;EAAA;EACpD,mBAAA,GAAsB,GAAA;IAAO,KAAA,EAAO,WAAA;IAAa,MAAA,EAAQ,kBAAA;EAAA;EduB3C;;;;;AA2DhB;;;;;AAgCA;;;;;AAKA;;EcnGE,gBAAA,GAAmB,GAAA,EAAK,aAAA;IAAkB,MAAA;EAAA;Ed0H3B;;;;;;;;;;;;;;;;;;;;EcnGf,gBAAA,GAAmB,GAAA;IACjB,IAAA;IASA,KAAA;IACA,QAAA;IACA,IAAA,GAAO,QAAA,CAAS,MAAA;EAAA;EAIlB,OAAA,GAAU,GAAA;IAAO,IAAA;IAAc,MAAA;IAAgB,KAAA,EAAO,SAAA;IAAW,OAAA;IAAiB,QAAA;EAAA;EAClF,QAAA,GAAW,GAAA;IAAO,MAAA,EAAQ,MAAA;IAAyB,MAAA,EAAQ,MAAA;EAAA;Eb3pB3D;;;;;EaiqBA,iBAAA,GAAoB,GAAA;IAAO,IAAA;IAAc,MAAA;IAAgB,KAAA;IAAe,MAAA;EAAA;EbloBnB;;;;;;ACOvD;;;;;EYuoBE,sBAAA,GAAyB,GAAA;IACvB,IAAA;IACA,KAAA;IACA,GAAA;IACA,MAAA;IACA,IAAA;EAAA;EAIF,aAAA,GAAgB,GAAA;EZvoBR;AAGV;;;;;;;;EY8oBE,YAAA,GAAe,GAAA,EAAK,UAAA;EAGpB,eAAA,GAAkB,GAAA,EAAK,kBAAA;IAAuB,KAAA;IAAe,MAAA;EAAA;EAC7D,aAAA,GAAgB,GAAA,EAAK,kBAAA;IAAuB,KAAA;IAAe,MAAA,EAAQ,gBAAA;IAAkB,SAAA;EAAA;EACrF,eAAA,GAAkB,GAAA,EAAK,kBAAA;IAAuB,KAAA,EAAO,WAAA;IAAe,KAAA;EAAA;EACpE,cAAA,GAAiB,GAAA,EAAK,kBAAA;IAAuB,GAAA;IAAa,KAAA;EAAA;EAC1D,cAAA,GAAiB,GAAA,EAAK,kBAAA;AAAA;;;;;;;;;;;;KAmGZ,YAAA,GAAe,OAAA,eACb,UAAA,GAAa,UAAA,CAAW,CAAA,IAAK,UAAA,CAAW,CAAA;AAAA,UAsFrC,YAAA;EACf,QAAA,EAAU,QAAA;EXt4Ba;EWw4BvB,IAAA;EXr4BmB;EWu4BnB,MAAA;EXx4BA;EW04BA,KAAA,GAAQ,MAAA,SAAe,OAAA;EXz4BV;;;AAGf;;;;EW84BE,WAAA,GAAc,MAAA;EX54Bd;EW84BA,QAAA,GAAW,aAAA;EX74BJ;EW+4BP,SAAA,GAAY,gBAAA;EX/4BC;EWi5Bb,UAAA,GAAa,eAAA;EX94BY;EWg5BzB,OAAA,GAAU,OAAA;EXv4ByB;;;;;;;AA8BrC;;EWm3BE,SAAA,GAAY,YAAA;EX12BZ;EW42BA,MAAA,GAAS,YAAA;EX91BM;;;;;;;;;;;;;;EW62Bf,KAAA,GAAQ,YAAA;EXv2BiB;;;;;;;;EWg3BzB,YAAA,IAAgB,OAAA,EAAS,eAAA,OAAsB,OAAA,CAAQ,aAAA;EX52BvD;;;;;;;;AAQF;;;;EWi3BE,KAAA;AAAA;AAAA,UAGe,KAAA;EACf,KAAA,EAAO,QAAA,CAAS,UAAA;EAChB,GAAA,GAAM,OAAA,EAAS,eAAA,KAAoB,OAAA,CAAQ,UAAA;EAC3C,KAAA;EXp3BA;;;;;;;;;;;;;;;AAqBF;;;EWk3BE,UAAA,GAAa,MAAA,UAAgB,MAAA;EAC7B,KAAA,GAAQ,OAAA;EACR,QAAA,GAAW,OAAA;EACX,WAAA,QAAmB,OAAA;EXt2BoB;;;;;EW42BvC,KAAA,QAAa,OAAA;EXt2BmD;;;;EW22BhE,OAAA,QAAe,OAAA;EXx1BkC;;;;;;EW+1BjD,aAAA,GAAgB,IAAA,aAAiB,OAAA;EX93BjC;;;;EWm4BA,eAAA,GAAkB,IAAA,aAAiB,OAAA;EXh4BD;;;;;;;;;;EW24BlC,MAAA,QAAc,OAAA;EAAA,SACL,SAAA;EAAA,SACA,KAAA,EAAO,WAAA;EAAA,SACP,SAAA,EAAW,gBAAA;EAAA,SACX,MAAA,EAAQ,eAAA;EAAA,SACR,OAAA,EAAS,OAAA;EX73BM;EAAA,SW+3Bf,YAAA,WAAuB,WAAA;EX/3BS;;;;;;EAAA,SWs4BhC,IAAA,EAAM,QAAA,CAAS,MAAA;AAAA;AAAA,iBA4QV,WAAA,CAAA;EAAc,QAAA;EAAU,IAAA,EAAM,SAAA;EAAW,MAAA,EAAQ,WAAA;EAAa,KAAA,EAAO,UAAA;EAAY,WAAA;EAAa,QAAA,EAAU,aAAA;EAAe,SAAA;EAAW,UAAA;EAAY,OAAA;EAAS,SAAA,EAAW,cAAA;EAAgB,MAAA,EAAQ,WAAA;EAAa,YAAA;EAAc,KAAA;EAAO,KAAA,EAAO;AAAA,GAAgB,YAAA,GAAe,KAAA"}
@@ -1,129 +0,0 @@
1
- import { exec } from "node:child_process";
2
- import { mkdir, readFile, readdir, writeFile } from "node:fs/promises";
3
- import { dirname, resolve } from "node:path";
4
- import { promisify } from "node:util";
5
- //#region src/contexts/process.ts
6
- const execAsync = promisify(exec);
7
- function createProcessContext(config) {
8
- let counter = 0;
9
- const handles = /* @__PURE__ */ new Map();
10
- const defaultCwd = config?.cwd ?? process.cwd();
11
- const defaultEnv = config?.env;
12
- return {
13
- type: "process",
14
- capabilities: {
15
- shell: true,
16
- filesystem: true,
17
- network: true,
18
- gpu: false
19
- },
20
- async spawn(overrides) {
21
- const id = `process-${++counter}`;
22
- const cwd = overrides?.cwd ?? defaultCwd;
23
- await mkdir(cwd, { recursive: true });
24
- const handle = {
25
- id,
26
- type: "process",
27
- cwd
28
- };
29
- handles.set(id, handle);
30
- return handle;
31
- },
32
- async exec(handle, command, options) {
33
- const cwd = options?.cwd ? resolve(handle.cwd, options.cwd) : handle.cwd;
34
- try {
35
- const { stdout, stderr } = await execAsync(command, {
36
- cwd,
37
- env: {
38
- ...process.env,
39
- ...defaultEnv,
40
- ...options?.env
41
- },
42
- timeout: (options?.timeout ?? config?.limits?.timeout ?? 30) * 1e3,
43
- maxBuffer: 10 * 1024 * 1024
44
- });
45
- return {
46
- stdout,
47
- stderr,
48
- exitCode: 0
49
- };
50
- } catch (err) {
51
- const e = err;
52
- return {
53
- stdout: typeof e.stdout === "string" ? e.stdout : "",
54
- stderr: typeof e.stderr === "string" ? e.stderr : typeof e.message === "string" ? e.message : String(err),
55
- exitCode: typeof e.code === "number" ? e.code : 1
56
- };
57
- }
58
- },
59
- async readFile(handle, path) {
60
- return readFile(resolve(handle.cwd, path), "utf-8");
61
- },
62
- async readFileBinary(handle, path) {
63
- const buf = await readFile(resolve(handle.cwd, path));
64
- return new Uint8Array(buf);
65
- },
66
- async writeFile(handle, path, content) {
67
- const fullPath = resolve(handle.cwd, path);
68
- await mkdir(dirname(fullPath), { recursive: true });
69
- await writeFile(fullPath, content, "utf-8");
70
- },
71
- async listFiles(handle, path) {
72
- return readdir(resolve(handle.cwd, path));
73
- },
74
- async destroy(handle) {
75
- handles.delete(handle.id);
76
- }
77
- };
78
- }
79
- //#endregion
80
- //#region src/contexts/sandbox.ts
81
- function createSandboxContext(provider) {
82
- const sandboxes = /* @__PURE__ */ new Map();
83
- function getSandboxId(handle) {
84
- const id = sandboxes.get(handle.id);
85
- if (!id) throw new Error(`Sandbox ${handle.id} not found`);
86
- return id;
87
- }
88
- return {
89
- type: "sandbox",
90
- capabilities: {
91
- shell: true,
92
- filesystem: true,
93
- network: true,
94
- gpu: false
95
- },
96
- async spawn(config) {
97
- const result = await provider.spawn(config ?? {});
98
- const handle = {
99
- id: result.id,
100
- type: "sandbox",
101
- cwd: result.cwd
102
- };
103
- sandboxes.set(handle.id, result.id);
104
- return handle;
105
- },
106
- async exec(handle, command, options) {
107
- return provider.exec(getSandboxId(handle), command, options);
108
- },
109
- async readFile(handle, path) {
110
- return provider.readFile(getSandboxId(handle), path);
111
- },
112
- async writeFile(handle, path, content) {
113
- return provider.writeFile(getSandboxId(handle), path, content);
114
- },
115
- async listFiles(handle, path) {
116
- return provider.listFiles(getSandboxId(handle), path);
117
- },
118
- async destroy(handle) {
119
- const id = sandboxes.get(handle.id);
120
- if (!id) return;
121
- await provider.destroy(id);
122
- sandboxes.delete(handle.id);
123
- }
124
- };
125
- }
126
- //#endregion
127
- export { createProcessContext as n, createSandboxContext as t };
128
-
129
- //# sourceMappingURL=contexts-BwiHIr2w.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contexts-BwiHIr2w.js","names":["execCb"],"sources":["../src/contexts/process.ts","../src/contexts/sandbox.ts"],"sourcesContent":["/**\n * In-process execution context.\n *\n * Runs everything in the current Node/Bun process.\n * No isolation — fastest, used as the default.\n */\n\nimport type { ContextCapabilities, ExecResult, ExecutionContext, ExecutionHandle, SpawnConfig } from './types'\nimport { exec as execCb } from 'node:child_process'\nimport { mkdir, readdir, readFile, writeFile } from 'node:fs/promises'\nimport { dirname, resolve } from 'node:path'\nimport { promisify } from 'node:util'\n\nconst execAsync = promisify(execCb)\n\nexport function createProcessContext(config?: SpawnConfig): ExecutionContext {\n let counter = 0\n const handles = new Map<string, ExecutionHandle>()\n const defaultCwd = config?.cwd ?? process.cwd()\n const defaultEnv = config?.env\n\n return {\n type: 'process',\n\n capabilities: {\n shell: true,\n filesystem: true,\n network: true,\n gpu: false,\n } satisfies ContextCapabilities,\n\n async spawn(overrides?: SpawnConfig): Promise<ExecutionHandle> {\n const id = `process-${++counter}`\n const cwd = overrides?.cwd ?? defaultCwd\n\n await mkdir(cwd, { recursive: true })\n\n const handle: ExecutionHandle = { id, type: 'process', cwd }\n handles.set(id, handle)\n return handle\n },\n\n async exec(handle: ExecutionHandle, command: string, options?: { cwd?: string, env?: Record<string, string>, timeout?: number }): Promise<ExecResult> {\n const cwd = options?.cwd ? resolve(handle.cwd, options.cwd) : handle.cwd\n\n try {\n const { stdout, stderr } = await execAsync(command, {\n cwd,\n env: { ...process.env, ...defaultEnv, ...options?.env },\n timeout: (options?.timeout ?? config?.limits?.timeout ?? 30) * 1000,\n maxBuffer: 10 * 1024 * 1024,\n })\n return { stdout, stderr, exitCode: 0 }\n }\n catch (err) {\n // node's execAsync rejects with a decorated `Error` whose extra fields\n // carry captured output and exit code — narrow defensively so a stray\n // plain-string rejection doesn't crash the tool.\n const e = err as { stdout?: unknown, stderr?: unknown, message?: unknown, code?: unknown }\n return {\n stdout: typeof e.stdout === 'string' ? e.stdout : '',\n stderr: typeof e.stderr === 'string'\n ? e.stderr\n : (typeof e.message === 'string' ? e.message : String(err)),\n exitCode: typeof e.code === 'number' ? e.code : 1,\n }\n }\n },\n\n async readFile(handle: ExecutionHandle, path: string): Promise<string> {\n return readFile(resolve(handle.cwd, path), 'utf-8')\n },\n\n async readFileBinary(handle: ExecutionHandle, path: string): Promise<Uint8Array> {\n // No encoding → returns a Buffer (which is a Uint8Array). Used by\n // read_file to ferry image / binary content into the multimodal route.\n const buf = await readFile(resolve(handle.cwd, path))\n return new Uint8Array(buf)\n },\n\n async writeFile(handle: ExecutionHandle, path: string, content: string): Promise<void> {\n const fullPath = resolve(handle.cwd, path)\n await mkdir(dirname(fullPath), { recursive: true })\n await writeFile(fullPath, content, 'utf-8')\n },\n\n async listFiles(handle: ExecutionHandle, path: string): Promise<string[]> {\n return readdir(resolve(handle.cwd, path))\n },\n\n async destroy(handle: ExecutionHandle): Promise<void> {\n handles.delete(handle.id)\n },\n }\n}\n","/**\n * Remote sandbox execution context.\n *\n * Offloads execution to a remote sandbox API (e.g. Rivet, E2B).\n * Specific providers implement the SandboxProvider interface.\n */\n\nimport type { ContextCapabilities, ExecResult, ExecutionContext, ExecutionHandle, SpawnConfig } from './types'\n\n// ---------------------------------------------------------------------------\n// Sandbox provider interface\n// ---------------------------------------------------------------------------\n\nexport interface SandboxProvider {\n name: string\n spawn: (config: SpawnConfig) => Promise<{ id: string, cwd: string }>\n exec: (sandboxId: string, command: string, options?: { cwd?: string, env?: Record<string, string>, timeout?: number }) => Promise<ExecResult>\n readFile: (sandboxId: string, path: string) => Promise<string>\n writeFile: (sandboxId: string, path: string, content: string) => Promise<void>\n listFiles: (sandboxId: string, path: string) => Promise<string[]>\n destroy: (sandboxId: string) => Promise<void>\n}\n\n// ---------------------------------------------------------------------------\n// Sandbox execution context\n// ---------------------------------------------------------------------------\n\nexport function createSandboxContext(provider: SandboxProvider): ExecutionContext {\n const sandboxes = new Map<string, string>()\n\n function getSandboxId(handle: ExecutionHandle): string {\n const id = sandboxes.get(handle.id)\n if (!id)\n throw new Error(`Sandbox ${handle.id} not found`)\n return id\n }\n\n return {\n type: 'sandbox',\n\n capabilities: {\n shell: true,\n filesystem: true,\n network: true,\n gpu: false,\n } satisfies ContextCapabilities,\n\n async spawn(config?: SpawnConfig): Promise<ExecutionHandle> {\n const result = await provider.spawn(config ?? {})\n const handle: ExecutionHandle = { id: result.id, type: 'sandbox', cwd: result.cwd }\n sandboxes.set(handle.id, result.id)\n return handle\n },\n\n async exec(handle: ExecutionHandle, command: string, options?): Promise<ExecResult> {\n return provider.exec(getSandboxId(handle), command, options)\n },\n\n async readFile(handle: ExecutionHandle, path: string): Promise<string> {\n return provider.readFile(getSandboxId(handle), path)\n },\n\n async writeFile(handle: ExecutionHandle, path: string, content: string): Promise<void> {\n return provider.writeFile(getSandboxId(handle), path, content)\n },\n\n async listFiles(handle: ExecutionHandle, path: string): Promise<string[]> {\n return provider.listFiles(getSandboxId(handle), path)\n },\n\n async destroy(handle: ExecutionHandle): Promise<void> {\n const id = sandboxes.get(handle.id)\n if (!id)\n return\n await provider.destroy(id)\n sandboxes.delete(handle.id)\n },\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-BiO_5Hm4.d.ts","names":[],"sources":["../src/contexts/process.ts","../src/contexts/sandbox.ts"],"mappings":";;;iBAegB,oBAAA,CAAqB,MAAA,GAAS,WAAA,GAAc,gBAAA;;;UCF3C,eAAA;EACf,IAAA;EACA,KAAA,GAAQ,MAAA,EAAQ,WAAA,KAAgB,OAAA;IAAU,EAAA;IAAY,GAAA;EAAA;EACtD,IAAA,GAAO,SAAA,UAAmB,OAAA,UAAiB,OAAA;IAAY,GAAA;IAAc,GAAA,GAAM,MAAA;IAAwB,OAAA;EAAA,MAAuB,OAAA,CAAQ,UAAA;EAClI,QAAA,GAAW,SAAA,UAAmB,IAAA,aAAiB,OAAA;EAC/C,SAAA,GAAY,SAAA,UAAmB,IAAA,UAAc,OAAA,aAAoB,OAAA;EACjE,SAAA,GAAY,SAAA,UAAmB,IAAA,aAAiB,OAAA;EAChD,OAAA,GAAU,SAAA,aAAsB,OAAA;AAAA;AAAA,iBAOlB,oBAAA,CAAqB,QAAA,EAAU,eAAA,GAAkB,gBAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-j9tY28ah.d.ts","names":[],"sources":["../src/compact/messages.ts","../src/compact/prompt.ts","../src/compact/errors.ts","../src/compact/compact.ts","../src/compact/restore.ts","../src/compact/utils.ts","../src/logger.ts","../src/loop.ts","../src/loop-persistence.ts","../src/mcp/oauth-provider.ts","../src/mcp/login.ts","../src/mcp/oauth-callback.ts","../src/metrics.ts","../src/run-summary.ts","../src/stats.ts","../src/tools/edit.ts","../src/tools/glob.ts","../src/tools/grep.ts","../src/tools/interaction.ts","../src/tools/list-files.ts","../src/tools/multi-edit.ts","../src/tools/read-file.ts","../src/tools/shell.ts","../src/tools/skills-read.ts","../src/tools/skills-run-script.ts","../src/tools/skills-use.ts","../src/tools/spawn.ts","../src/tools/tool-search.ts","../src/tools/validation.ts","../src/tools/write-file.ts","../src/tracing.ts","../src/zod.ts","../src/presets/basic.ts","../src/presets/index.ts"],"mappings":";;;;;;;AAwBA;;;;;;;;AAAA,KAAY,YAAA;EAGJ,IAAA;EAAc,MAAA;AAAA;EACd,IAAA;EAAe,MAAA;AAAA;AAAA,UAEN,eAAA;EAIf;EAFA,WAAA,WAAsB,WAAA;EAES;EAA/B,SAAA,WAAoB,WAAA;AAAA;;;;;;;;;;;;;;;iBAiBN,kBAAA,CACd,KAAA,WAAgB,WAAA,IAChB,KAAA,EAAO,YAAA,EACP,SAAA,WACC,eAAA;AAuEH;;;;;;;;;AAmEA;;;;;;AAnEA,iBAAgB,oBAAA,CAAqB,KAAA,WAAgB,WAAA,KAAgB,WAAA;;;AAoLrE;;;;;AAOA;;;;;AAsBA;;;;;;;iBA9IgB,uBAAA,CAAwB,KAAA,WAAgB,WAAA,KAAgB,WAAA;;;;;AAiLxE;;cAhEa,wBAAA;;;;;;iBAOG,gBAAA,CAAiB,IAAA,EAAM,WAAA;;;;ACxSvC;;;;;AAEA;;UD4TiB,kBAAA;EC3TY;ED6T3B,OAAA;EC7TW;ED+TX,eAAA;ECxTa;ED0Tb,KAAA;EClTU;EDoTV,KAAA,EAAO,SAAA;;EAEP,WAAA;AAAA;ACzSF;;;;;AAYA;;;;;AA4BA;;;;;AAmCA;;;;;AAIA;;AA/EA,iBDkUgB,aAAA,CAAc,KAAA,EAAO,kBAAA,GAAqB,WAAA;;;;;;;;;;;AA1V1D;;;;;;;;KCPY,gBAAA;AAAA,UAEK,oBAAA;EACf,SAAA,EAAW,gBAAA;EDUmB;;;;;;ECH9B,aAAA;AAAA;;ADwBF;;;;KChBY,oBAAA,IAAwB,IAAA,EAAM,oBAAA;;;;;;cAa7B,iBAAA;;;;;;cAYA,iBAAA;;cA4BA,OAAA;AAAA,iBAmCG,sBAAA,CAAA;AAAA,iBAIA,sBAAA,CAAA;AAAA,iBAIA,sBAAA,CAAuB,aAAA;AAAA,iBAIvB,sBAAA,CAAuB,aAAA;;;AD0DvC;;;;;cC/Ca,kBAAA,EAAoB,oBAAA;;;;;;;;;;;AD1HjC;;;;;;;;;cENa,wBAAA,SAAiC,KAAA;cAChC,OAAA;AAAA;;;;;;;cAYD,yBAAA,SAAkC,KAAA;EAAA,SACA,UAAA;cAAjC,OAAA,UAAiC,UAAA;AAAA;;;UCe9B,cAAA;EHbgB;EGe/B,QAAA,EAAU,QAAA;EHEI;EGAd,KAAA,WAAgB,WAAA;;;;;EAKhB,KAAA,GAAQ,YAAA;EHDQ;;;;;EGOhB,SAAA;EHPC;EGSD,KAAA;EHTgB;AAuElB;;;;EGxDE,eAAA;EHwDmC;EGtDnC,QAAA,GAAW,aAAA;EHsDmE;EGpD9E,MAAA,GAAS,WAAA;EHuHK;;;;;EGjHd,aAAA;EHiHsE;;;AAiHxE;;EG5NE,MAAA,GAAS,oBAAA;EH4N0B;;AAOrC;;;;EG5NE,SAAA,IAAa,KAAA;IAAS,OAAA;IAAiB,IAAA;EAAA;AAAA;AAAA,UAGxB,aAAA;EHmPf;EGjPA,OAAA;EHqPA;EGnPA,KAAA,EAAO,SAAA;EHqPP;EGnPA,KAAA;EHmPW;EGjPX,UAAA;EH0Q2B;;;;;;;;EGjQ3B,iBAAA;;;AFhGF;;;;;AAEA;;;;;EE2GE,eAAA;EFnGA;EEqGA,cAAA,WAAyB,WAAA;EFrGZ;EEuGb,WAAA;EF/F8B;EEiG9B,UAAA;AAAA;AAAA,iBA2BoB,mBAAA,CAAoB,IAAA,EAAM,cAAA,GAAiB,OAAA,CAAQ,aAAA;;;;UCnFxD,UAAA;EJqHsB;EInHrC,IAAA;EJmHiF;EIjHjF,OAAA;AAAA;AAAA,UAGe,yBAAA;EJ8GkE;;AAiHnF;;;;;EIrNE,WAAA,YAAuB,UAAA;EJ4NO;;;;AAsBhC;EI3OE,YAAA,YAAwB,WAAA;;;;;;EASxB,SAAA,GAAY,gBAAA;EACZ,MAAA,GAAS,eAAA;EJ2OT;;;AAyBF;;;;;EIxPE,gBAAA;EJwPwD;;;;EInPxD,iBAAA;;EAKA,eAAA;EHnH0B;EGqH1B,mBAAA;EHrH0B;EGuH1B,iBAAA;EHrHe;EGwHf,gBAAA;;EAEA,qBAAA;EHzHA;;;;;EGkIA,YAAA;EHnH8B;;;;AAahC;EG+GE,KAAA;AAAA;;;AHnGF;;;UG2GiB,sBAAA;EH3Ga;AA4B9B;;;;;EGsFE,KAAA,WAAgB,WAAA;EHnDoB;EGqDpC,aAAA;EHrDoC;EGuDpC,cAAA;EHnDc;EGqDd,eAAA;AAAA;;;AHjDF;;;;;AAIA;;;;;AAWA;;iBGuDgB,wBAAA,CACd,SAAA,EAAW,WAAA;EAAsB,OAAA;AAAA,IACjC,GAAA,WACC,UAAA;;;;AF1LH;;;;;;;;;AAaA;;;;;iBE+MgB,sBAAA,CACd,OAAA,EAAS,OAAA,EACT,GAAA,WACC,UAAA;;;;;;;;iBAYa,iBAAA,CACd,KAAA,WAAgB,UAAA,IAChB,IAAA;EAAQ,QAAA;EAAkB,YAAA;AAAA,IACzB,UAAA;;;;;;;;;;;;;;;;iBAwImB,2BAAA,CACpB,IAAA,EAAM,yBAAA,GACL,OAAA,CAAQ,sBAAA;;;;;;;;;;;AJlXX;;;;;;;;;;AAMA;iBKVgB,cAAA,CAAe,IAAA;;cAwBlB,eAAA;;;;;;;ALOb;;;;;;iBKOgB,cAAA,CAAe,IAAA;;;KC1BnB,QAAA;AAAA,UAEK,SAAA;EACf,KAAA,EAAO,QAAA;ENgByB;EMdhC,SAAA;ENegB;EMbhB,OAAA;ENgBC;EMdD,KAAA,EAAO,MAAA;AAAA;AAAA,UAGQ,OAAA;EACf,IAAA,GAAO,MAAA,EAAQ,SAAA;AAAA;AAAA,UAGA,MAAA;EACf,KAAA,GAAQ,OAAA,UAAiB,KAAA,GAAQ,MAAA;EACjC,IAAA,GAAO,OAAA,UAAiB,KAAA,GAAQ,MAAA;EAChC,IAAA,GAAO,OAAA,UAAiB,KAAA,GAAQ,MAAA;EAChC,KAAA,GAAQ,OAAA,UAAiB,KAAA,GAAQ,MAAA;EN0EnB;;;;;EMpEd,IAAA,GAAO,KAAA,EAAO,MAAA,sBAA4B,MAAA;ENoEyB;;;AAmErE;EAnEqE,SM/D1D,cAAA,EAAgB,QAAA,CAAS,MAAA;AAAA;;;;;iBAWpB,YAAA,CACd,IAAA,EAAM,OAAA,EACN,cAAA,GAAgB,QAAA,CAAS,MAAA,qBACxB,MAAA;AAAA,UA6Bc,kBAAA;ENwMJ;;;;;EMlMX,QAAA,GAAW,QAAA;ENyMmB;EMvM9B,MAAA;IAAW,KAAA,GAAQ,KAAA;EAAA;AAAA;;;;;;;;iBAiBL,WAAA,CAAY,OAAA,GAAS,kBAAA,GAA0B,OAAA;;;;AN+O/D;iBM1NgB,QAAA,CAAS,OAAA,GAAS,kBAAA,GAA0B,OAAA;AAAA,UAqB3C,mBAAA;EACf,MAAA,EAAQ,MAAA;ENoM2B;;;;;EM9LnC,KAAA,GAAQ,QAAA;;;ALnKV;;;;;EK2KE,gBAAA;AAAA;AAAA,UAGe,cAAA;EACf,OAAA,GAAU,KAAA,EAAO,QAAA,CAAS,UAAA;AAAA;;;;;AL7J5B;;;;;AAaA;;;;;iBKiKgB,kBAAA,CAAmB,OAAA,EAAS,mBAAA,GAAsB,cAAA;;;;;;;AL/DlE;;;;cMqBa,8BAAA;;;;ALrJb;;;;cK8Ja,wBAAA;;;;;ALjJb;;;;;;;;cK+Ja,0BAAA;;;;;;;;cA2xDA,4BAAA;;;;;;;;;;;AP31Db;;;cQxEa,yBAAA;;;;;;AR2Ib;;;;;;cQ9Ha,qBAAA;;;AR+Ob;;;;;iBQ1NgB,iBAAA,CAAkB,IAAA;EAAQ,OAAA;EAAiB,SAAA;AAAA;;ARuP3D;;;;UQ1OiB,YAAA;ER8Of;EQ5OA,QAAA;ERgPA;EQ9OA,MAAA;ERgPA;EQ9OA,MAAA,WAAiB,iBAAA;ER8ON;EQ5OX,SAAA;ERqQ2B;EQnQ3B,YAAA;ERmQmE;EQjQnE,UAAA;AAAA;AAAA,KAGU,cAAA;EACJ,IAAA;EAAc,MAAA;AAAA;EACd,IAAA;EAAmB,MAAA;EAAgB,aAAA;EAAuB,aAAA;AAAA;EAC1D,IAAA;EAAe,MAAA;EAAwB,KAAA,EAAO,KAAA;AAAA;;;;;;;;APpFtD;;;;;AAaA;iBOsFsB,sBAAA,CAAuB,KAAA,EAAO,YAAA,GAAe,OAAA,CAAQ,cAAA;AAAA,UAqDjE,cAAA;EACR,QAAA;EACA,aAAA;EACA,aAAA;EACA,MAAA;AAAA;;;APvGF;;;;;AAmCA;;;;;AAIA;;;;;AAIA;;iBOkFgB,kBAAA,CAAmB,KAAA,EAAO,cAAA;;;AP9E1C;;;;;AAWA;;;iBO6FsB,uBAAA,CAAwB,WAAA,WAAsB,OAAA;;;;;;;;UC5LnD,kBAAA;EACf,MAAA,GAAS,WAAA;EACT,iBAAA,GAAoB,2BAAA;EACpB,cAAA,GAAiB,mBAAA;AAAA;AAAA,UAGF,kBAAA;EACf,IAAA,GAAO,IAAA,aAAiB,kBAAA;EACxB,IAAA,GAAO,IAAA,UAAc,KAAA,EAAO,kBAAA;EAC5B,MAAA,GAAS,IAAA;AAAA;;ATqIX;;;iBS9HgB,8BAAA,CAA+B,IAAA,GAAO,MAAA,SAAe,kBAAA,IAAsB,kBAAA;AAAA,UAS1E,uBAAA;ETqHuB;ESnHtC,IAAA;ETmHiF;ESjHjF,KAAA,EAAO,kBAAA;ETkOI;;;;ES7NX,WAAA;EToOc;;;;;AAsBhB;ESnPE,kBAAA,IAAsB,GAAA,EAAK,GAAA,YAAe,OAAA;;;;;EAK1C,UAAA;ETsPA;;;;ESjPA,KAAA;AAAA;AAAA,cAKW,gBAAA,YAA4B,mBAAA;EAAA,iBACtB,IAAA;EAAA,iBACA,KAAA;EAAA,iBACA,YAAA;EAAA,iBACA,kBAAA;EAAA,iBACA,UAAA;EAAA,iBACA,MAAA;EAAA,QAIT,iBAAA;cAEI,IAAA,EAAM,uBAAA;EAAA,IASd,WAAA,CAAA,YAAwB,GAAA;EAAA,IAIxB,cAAA,CAAA,GAAkB,mBAAA;EAgBtB,MAAA,CAAA,GAAU,WAAA;EAIV,UAAA,CAAW,MAAA,EAAQ,WAAA;EAInB,iBAAA,CAAA,GAAqB,2BAAA;EAIrB,qBAAA,CAAsB,IAAA,EAAM,2BAAA;EAI5B,cAAA,CAAA,GAAkB,mBAAA;EAIlB,kBAAA,CAAmB,KAAA,EAAO,mBAAA;EAI1B,gBAAA,CAAiB,QAAA;EAIjB,YAAA,CAAA;EAYM,uBAAA,CAAwB,GAAA,EAAK,GAAA,GAAM,OAAA;ERxKzC;;;;;AAeF;;;;EQsKQ,qBAAA,CAAsB,KAAA,2DAAgE,OAAA;EAAA,QA4BpF,KAAA;AAAA;;;;ARzKV;;;;;iBQuLgB,sBAAA,CAAuB,OAAA,EAAS,MAAA;;;UCpN/B,qBAAA;EVGK;EUDpB,KAAA,EAAO,kBAAA;EVCwB;AAiBjC;;;;;;EUVE,kBAAA,IAAsB,GAAA,EAAK,GAAA,YAAe,OAAA;EVc1B;EUZhB,MAAA,GAAS,WAAA;EVST;EUPA,KAAA,GAAQ,QAAA,CAAS,UAAA;EVQjB;EUNA,UAAA;EVQC;EUND,KAAA;EVMgB;AAuElB;;;EUxEE,YAAA;EVwEmD;;;;EUnEnD,SAAA;AAAA;AAAA,UAGe,oBAAA;;EAEf,MAAA,EAAQ,WAAA,CAAY,UAAA,CAAW,gBAAA;EViIuB;;;;;AAiHxD;;EU1OE,KAAA,EAAO,KAAA;IAAQ,IAAA;IAAc,WAAA;IAA6B,WAAA;EAAA;AAAA;;;AVuQ5D;;;;;;;;;;;;iBUpPsB,cAAA,CACpB,MAAA,EAAQ,eAAA,EACR,OAAA,EAAS,qBAAA,GACR,OAAA,CAAQ,oBAAA;;;;;;;;;;;AVtEX;;;;;;;;;;AAMA;;;;;;;;;;AAqBA;UWlBiB,mBAAA;EACf,IAAA;EACA,KAAA;AAAA;AAAA,UAGe,mBAAA;EXiBC;;;;;EWXhB,WAAA;EXUA;;;;AAwEF;;;;;;EWvEE,OAAA,EAAS,OAAA,CAAQ,mBAAA;EXuE6D;;AAmEhF;;;EWpIE,KAAA,QAAa,OAAA;AAAA;AAAA,UAGE,oBAAA;EXiIuD;EW/HtE,MAAA,GAAS,WAAA;EX+HwE;AAiHnF;;;;EW1OE,IAAA;EXiPc;;;;;EW3Od,IAAA;EXiQiC;;;;;EW3PjC,IAAA;AAAA;;;;;AX8RF;;;;;iBWnPsB,kBAAA,CACpB,IAAA,GAAM,oBAAA,GACL,OAAA,CAAQ,mBAAA;;;KCxEC,gBAAA,GAAmB,MAAA;AAAA,UAEd,OAAA;EACf,GAAA,GAAM,KAAA,UAAe,UAAA,GAAa,gBAAA;AAAA;AAAA,UAGnB,SAAA;EACf,MAAA,GAAS,KAAA,UAAe,UAAA,GAAa,gBAAA;AAAA;AAAA,UAGtB,aAAA;EACf,GAAA,GAAM,KAAA,UAAe,UAAA,GAAa,gBAAA;AAAA;AAAA,UAGnB,iBAAA;EACf,WAAA;EACA,IAAA;AAAA;;;AZgPF;;;UYxOiB,KAAA;EACf,aAAA,GAAgB,IAAA,UAAc,OAAA,GAAU,iBAAA,KAAsB,OAAA;EAC9D,eAAA,GAAkB,IAAA,UAAc,OAAA,GAAU,iBAAA,KAAsB,SAAA;EAChE,mBAAA,GAAsB,IAAA,UAAc,OAAA,GAAU,iBAAA,KAAsB,aAAA;AAAA;AAAA,UAOrD,mBAAA;EACf,KAAA,EAAO,KAAA;EZuPP;;;;;;EYhPA,SAAA;EZ+Qc;;;;;EYzQd,cAAA,GAAiB,gBAAA;EZyQuC;;;;;EYnQxD,OAAA,IAAW,IAAA,UAAc,GAAA;AAAA;AAAA,UAGV,cAAA;EACf,OAAA,GAAU,KAAA,EAAO,QAAA,CAAS,UAAA;AAAA;;AXhG5B;;;;;;;;;AAgBA;;;iBWsIgB,kBAAA,CAAmB,OAAA,EAAS,mBAAA,GAAsB,cAAA;;;UCvIjD,gBAAA;EACf,KAAA;EACA,MAAA;EACA,SAAA;EACA,aAAA;EACA,IAAA;EbcO;EaZP,MAAA;AAAA;AAAA,UAGe,iBAAA;EACf,OAAA;EACA,KAAA;EACA,MAAA;EACA,SAAA;EACA,aAAA;EACA,IAAA;EACA,KAAA;AAAA;AAAA,UAGe,eAAA;EACf,IAAA;EACA,OAAA;EACA,SAAA;EACA,MAAA;EACA,MAAA;EACA,MAAA;EACA,QAAA;EACA,OAAA;EACA,UAAA;EACA,SAAA;AAAA;AAAA,UAGe,eAAA;EACf,MAAA;EACA,QAAA;EACA,OAAA;EACA,MAAA;AAAA;AAAA,UAGe,oBAAA;EACf,MAAA;EACA,QAAA;EACA,MAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;;EAEA,QAAA;EbsOgD;EapOhD,IAAA;EACA,QAAA;EACA,KAAA;EACA,MAAA;AAAA;;;;;;UAQe,UAAA;EACf,KAAA;EACA,WAAA;EACA,KAAA;EACA,SAAA;EACA,SAAA;EACA,OAAA;EACA,UAAA;EACA,MAAA;EACA,KAAA;EACA,MAAA,EAAQ,gBAAA;EACR,OAAA,EAAS,iBAAA;EACT,MAAA,EAAQ,eAAA;EACR,MAAA,EAAQ,eAAA;EACR,iBAAA,EAAmB,oBAAA;EACnB,YAAA,EAAc,gBAAA;;EAEd,cAAA,EAAgB,MAAA;EZhGU;AAE5B;;;EYmGE,QAAA,GAAW,UAAA;AAAA;AAAA,UAOI,0BAAA;EZlGf;;;AAQF;EY+FE,SAAA,IAAa,OAAA,EAAS,UAAA;AAAA;AAAA,UAGP,mBAAA;EZlG6C;EYoG5D,OAAA,GAAU,KAAA,EAAO,QAAA,CAAS,UAAA;EZvFE;EYyF5B,MAAA,QAAc,UAAA;AAAA;;AZ7EhB;;;;;AA4BA;;;;;AAmCA;;;;;AAIA;iBY8BgB,yBAAA,CACd,OAAA,GAAS,0BAAA,GACR,mBAAA;;;AbvIH;;;;;;;AAAA,UcPiB,UAAA;EACf,KAAA;EACA,MAAA;EACA,IAAA;EACA,SAAA;EACA,aAAA;EACA,KAAA;AAAA;;AdwTF;;;;;;;;;iBcnNgB,YAAA,CAAa,KAAA,EAAO,UAAA,GAAa,SAAA;;;AdsPjD;;;;;;;iBc9NgB,YAAA,CAAa,KAAA,EAAO,UAAA,GAAa,GAAA,SAAY,UAAA;;;;;;;;;;Ad5H7D;ceVa,IAAA,EAAM,OAAA;;;cC+CN,IAAA,EAAM,OAAA;;;cClBN,IAAA,EAAM,OAAA;;;UCvBF,sBAAA;ElBUe;EkBR9B,MAAA,EAAQ,MAAA;ElBYuB;EkBV/B,IAAA;ElBQsB;EkBNtB,WAAA;ElBQoB;EkBNpB,SAAA,GAAY,OAAA,EAAS,MAAA,mBAAyB,GAAA,EAAK,WAAA,KAAgB,OAAA,CAAQ,MAAA;AAAA;AlBuB7E;;;;;;;AAAA,iBkBbgB,qBAAA,CAAsB,OAAA,EAAS,sBAAA,GAAyB,OAAA;;;cCpC3D,SAAA,EAAW,OAAA;;;cC6EX,SAAA,EAAW,OAAA;;;cC7CX,QAAA,EAAU,OAAA;;;cCsHV,KAAA,EAAO,OAAA;;;UCxIH,qBAAA;EACf,OAAA,WAAkB,WAAA;EAClB,KAAA,EAAO,oBAAA;AAAA;AAAA,iBAGO,oBAAA,CAAqB,OAAA,EAAS,qBAAA,GAAwB,OAAA;;;UCLrD,0BAAA;EACf,OAAA,WAAkB,WAAA;EAClB,KAAA,EAAO,oBAAA;ExBUD;EwBRN,eAAA;AAAA;AAAA,iBAMc,yBAAA,CAA0B,OAAA,EAAS,0BAAA,GAA6B,OAAA;;;UCK/D,oBAAA;EzBoBD;EyBlBd,OAAA,WAAkB,WAAA;;EAElB,KAAA,EAAO,oBAAA;EzBkBA;EyBhBP,KAAA,EAAO,QAAA,CAAS,UAAA;AAAA;;;;;;;;;iBAkDF,mBAAA,CAAoB,OAAA,EAAS,oBAAA,GAAuB,OAAA;;;UCrCnD,UAAA;EACf,EAAA;EACA,IAAA;EACA,SAAA;E1BEgB;E0BAhB,KAAA;AAAA;AAAA,UAGe,cAAA;;WAEN,QAAA,EAAU,WAAA,SAAoB,UAAA;E1BkEY;;;;;AAmErD;;;;;;EAnEqD,S0BtD1C,eAAA,EAAiB,QAAA,CAAS,UAAA;AAAA;AAAA,UA8RpB,gBAAA;E1BpDJ;E0BsDX,aAAA;;;;A1B/CF;;;E0BsDE,QAAA;E1BtDgD;E0BwDhD,KAAA;E1BlCiC;E0BoCjC,MAAA;E1B5BgB;E0B8BhB,QAAA;E1BlCA;E0BoCA,MAAA,GAAS,MAAA;E1BhCT;;;;;E0BsCA,SAAA;E1BX2B;;;;;;;;;;;ACjW7B;;;;;EyB6XE,OAAA;EzB3XmC;;;;;;;;AAgBrC;;;;;EyByXE,cAAA;EzB5W4B;;;;AAY9B;EyBsWE,YAAA;;EAEA,OAAA,IAAW,KAAA,EAAO,UAAA;EzBxWU;EyB0W5B,UAAA,IAAc,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,MAAA,EAAQ,WAAA,CAAY,aAAA;AAAA;;;;AzB3S1E;;;;;iByBsTgB,eAAA,CAAgB,OAAA,GAAS,gBAAA,GAAwB,OAAA,GAAU,cAAA;;;UCzZ1D,aAAA;E3BQf;;;;;E2BFA,IAAA;E3BqBc;;;;;E2Bfd,aAAA;EACA,WAAA;EACA,WAAA,EAAa,MAAA;E3BcG;E2BZhB,MAAA;AAAA;AAAA,UAGe,qBAAA;E3BWf;;;;E2BNA,OAAA,WAAkB,aAAA;E3B8EgB;;;;;;E2BvElC,QAAA,EAAU,GAAA;E3BuEoE;E2BrE9E,YAAA;AAAA;;;;;;iBA2Dc,oBAAA,CAAqB,OAAA,EAAS,qBAAA,GAAwB,OAAA;;;;;;;;;;;A3B5FtE;;;;;;;;;;AAMA;;U4BTiB,gBAAA;EACf,KAAA;E5BUA;E4BRA,KAAA;E5BUA;;;;AAiBF;E4BrBE,YAAA,GAAe,MAAA;;;;;;EAMf,SAAA;E5BgBgB;;;;;;E4BThB,YAAA,GAAe,QAAA,CAAS,MAAA;AAAA;AAAA,iBAqBV,gBAAA,CACd,KAAA,EAAO,MAAA,mBACP,MAAA,EAAQ,MAAA,oBACP,gBAAA;;;;;;;;;;A5B3CH;;;;;;;;c6BLa,SAAA,EAAW,OAAA;;;;UCyCP,IAAA;E9BqIuB;E8BnItC,GAAA;E9BmIiF;E8BjIjF,aAAA,IAAiB,KAAA,EAAO,MAAA;E9BkPb;;;;;AAOb;;E8BjPE,QAAA,IAAY,IAAA,UAAc,KAAA,GAAQ,MAAA;AAAA;;A9BuQpC;;;;;;;;;;K8BzPY,SAAA,IACV,IAAA,UACA,KAAA,GAAQ,MAAA,mBACR,aAAA,GAAgB,QAAA,CAAS,MAAA,sBACtB,IAAA;AAAA,KAEO,kBAAA;AAAA,UAEK,mBAAA;E9BoRY;E8BlR3B,SAAA,EAAW,SAAA;E9BkRwD;;;;;;E8B3QnE,SAAA;;;A7BtFF;;;;;AAEA;;;;;E6BiGE,WAAA,GAAc,kBAAA;E7BzFd;;;AAQF;;;;;AAaA;;;;E6BiFE,qBAAA;E7BrEW;;;;;AA4Bb;;E6BiDE,gBAAA;E7BjDkB;;AAmCpB;;;;;AAIA;;;E6BqBE,OAAA,IAAW,IAAA,UAAc,GAAA;E7BrBW;AAItC;;;;;AAIA;;;;;AAWA;;;;;;;;AChIA;E4BuJE,qBAAA,SAA8B,QAAA,CAAS,MAAA;;;;;;;;A5B1IzC;;;;;;E4BwJE,MAAA,IAAU,IAAA,UAAc,KAAA,UAAe,IAAA,GAAO,QAAA,CAAS,MAAA;AAAA;;UAIxC,cAAA;E5B3JgD;;;;ACejE;;E2BmJE,OAAA,GAAU,KAAA,EAAO,QAAA,CAAS,UAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;A3BlG5B;;iB2B8agB,kBAAA,CAAmB,OAAA,EAAS,mBAAA,GAAsB,cAAA;;;;;;;cA8vBrD,iBAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;A9BpvCb;;;;;;;;;iB+BNgB,eAAA,CAAgB,UAAA,EAAY,MAAA,oBAA0B,MAAA;;;;;;;;;;;A/BMtE;cgCXa,UAAA;SAAuE,OAAA;;;;;;;cAAA,QAAA;;;;;;;;;AhCWpF;;;;;;;;;;AAMA;;;;;;;KiCHY,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,YAAA;;;AjCwBlC;iBiCnBgB,YAAA,CAAa,MAAA,EAAQ,MAAA,GAAS,MAAA;;;;;;;;;;;;;;;AjC8F9C;;;;;;;;;AAmEA;;;iBiCnIgB,cAAA,CAAA,GAAkB,OAAA,EAAS,MAAA,KAAW,MAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"presets-D9IbaI40.js","names":[],"sources":["../src/presets/basic.ts","../src/presets/index.ts"],"sourcesContent":["import { definePreset } from '.'\nimport { edit, listFiles, multiEdit, readFile, shell, writeFile } from '../tools'\nimport { createSpawnTool } from '../tools/spawn'\n\n/**\n * Core tools available in every basic preset (without spawn).\n *\n * `edit` and `multi_edit` ship in the basic set because surgical edits are the\n * default modality for production agents — `write_file` is for full overwrites.\n * `glob` and `grep` are exported but opt-in: not every agent needs codebase\n * search, and shipping them by default would force `tool:gate` work onto\n * consumers that prefer the model to use `shell` + classic Unix tools.\n */\nexport const basicTools = { shell, readFile, writeFile, listFiles, edit, multiEdit }\n\nexport default definePreset({\n name: 'basic',\n system: 'You are a helpful assistant with access to shell, file reading, file writing, surgical and multi-edit tools, directory listing, and sub-agent spawning. Prefer `edit` / `multi_edit` for in-place changes and `write_file` for full file overwrites. Use them to accomplish tasks in the project directory.',\n // `persist: true` shares the parent's session with every child agent — child\n // turns land in `session.turns` tagged with their own `runId`, and the run\n // itself is recorded in `session.runs` with `parentRunId` + `depth`. That's\n // what lets a reloaded TUI session reconstruct the full subagent tree (see\n // `eventsFromTurns` in `tui/store.ts`). Hosts that want children in-memory\n // only can construct their own preset with `createSpawnTool()`.\n tools: { ...basicTools, spawn: createSpawnTool({ persist: true }) },\n})\n","import type { AgentHooks, AgentOptions } from '../agent'\n\nexport type { AgentHookMap } from '../agent'\n\n/**\n * A preset is a reusable slice of `AgentOptions` — spread it into `createAgent()`\n * to configure tools, a default system prompt, aliases, behavior defaults, and\n * agent-lifetime hooks.\n *\n * `provider`, `execution`, `session`, and internal fields are excluded so presets\n * remain shareable and composable.\n *\n * ```ts\n * import { basic } from 'zidane/presets'\n * createAgent({ ...basic, provider })\n * ```\n *\n * ### Composing multiple presets\n *\n * Bare `...spread` is shallow — `{ ...a, ...b }` overwrites every key `b`\n * defines, including `hooks`. Use {@link composePresets} when you want\n * field-aware merging (per-event hook concat, tools shallow-merge, etc.):\n *\n * ```ts\n * createAgent({ ...composePresets(basic, telemetry, mine), provider })\n * ```\n */\nexport type Preset = Omit<Partial<AgentOptions>, 'provider' | 'execution' | 'session' | 'mcpConnector'>\n\n/**\n * Identity helper for type inference when defining a preset.\n */\nexport function definePreset(config: Preset): Preset {\n return config\n}\n\n/**\n * Field-aware composition of presets. Right-most preset wins for scalar fields;\n * objects shallow-merge; arrays and hook handler lists concatenate. Designed so\n * stacking presets does the obvious thing without the spread-collision footgun:\n *\n * - `name`, `system`, `eager`, `skills` → last-defined wins\n * - `tools`, `toolAliases`, `behavior` → shallow-merge (later keys override)\n * - `behavior.dedupTools`, `behavior.toolBudgets` → **deep-merge** (per-tool-name; later wins on collision)\n * - `mcpServers` → concat with last-wins on `name` collision\n * - `hooks` → per-event concat; every handler fires\n *\n * `hooks` always emerges as `event → handler[]` so downstream registration\n * (in `createAgent`) sees a uniform shape. Order of handlers within an event\n * follows preset order: earlier presets register first.\n *\n * `mcpServers` is deduped by `name` because shipping two servers with the same\n * name would trip the connector at runtime — a later preset overriding an\n * earlier preset's `github` server is the practical intent.\n *\n * `behavior.dedupTools` and `behavior.toolBudgets` get the same per-key deep-merge\n * because they are tool-name-keyed records — a preset that ships a dedup hasher\n * for one tool should not erase a hasher another preset ships for a different\n * tool. Last-wins still applies on a per-tool collision so a downstream preset\n * can override an upstream preset's policy for one specific tool. Other\n * `behavior` fields keep last-wins semantics.\n */\nexport function composePresets(...presets: Preset[]): Preset {\n const out: Preset = {}\n const hooksByEvent: { [K in keyof AgentHooks]?: AgentHooks[K][] } = {}\n // Keep mcpServers in source-order on first sight, but allow later\n // declarations to override earlier ones with the same `name`. A `Map`\n // keyed by name gives O(1) override + stable iteration.\n const mcpByName = new Map<string, NonNullable<Preset['mcpServers']>[number]>()\n\n for (const p of presets) {\n if (p.name !== undefined)\n out.name = p.name\n if (p.system !== undefined)\n out.system = p.system\n if (p.eager !== undefined)\n out.eager = p.eager\n if (p.skills !== undefined)\n out.skills = p.skills\n if (p.tools)\n out.tools = { ...out.tools, ...p.tools }\n if (p.toolAliases)\n out.toolAliases = { ...out.toolAliases, ...p.toolAliases }\n if (p.behavior) {\n // Top-level shallow-merge first; then deep-merge the two tool-name-keyed\n // sub-records so per-tool entries from earlier presets aren't clobbered.\n const merged: NonNullable<Preset['behavior']> = { ...out.behavior, ...p.behavior }\n if (out.behavior?.dedupTools || p.behavior.dedupTools) {\n merged.dedupTools = { ...out.behavior?.dedupTools, ...p.behavior.dedupTools }\n }\n if (out.behavior?.toolBudgets || p.behavior.toolBudgets) {\n merged.toolBudgets = { ...out.behavior?.toolBudgets, ...p.behavior.toolBudgets }\n }\n out.behavior = merged\n }\n if (p.mcpServers) {\n for (const server of p.mcpServers)\n mcpByName.set(server.name, server)\n }\n if (p.hooks) {\n for (const [event, handler] of Object.entries(p.hooks)) {\n if (handler === undefined)\n continue\n const list = Array.isArray(handler) ? handler : [handler]\n const key = event as keyof AgentHooks\n // Safe cast: we read the loose `AgentHookMap` shape (handler-or-array)\n // and re-emit only as arrays. Each `list` element matches the event's\n // handler signature by construction (the input was typed `AgentHookMap`).\n const bucket = (hooksByEvent[key] ??= []) as unknown[]\n bucket.push(...(list as unknown[]))\n }\n }\n }\n\n if (mcpByName.size > 0)\n out.mcpServers = [...mcpByName.values()]\n\n if (Object.keys(hooksByEvent).length > 0)\n out.hooks = hooksByEvent\n\n return out\n}\n\nexport { default as basic, basicTools } from './basic'\n"],"mappings":";;;;;;;;;;;AAaA,MAAa,aAAa;CAAE;CAAO;CAAU;CAAW;CAAW;CAAM;CAAW;AAEpF,IAAA,gBAAe,aAAa;CAC1B,MAAM;CACN,QAAQ;CAOR,OAAO;EAAE,GAAG;EAAY,OAAO,gBAAgB,EAAE,SAAS,MAAM,CAAC;EAAE;CACpE,CAAC;;;;;;ACOF,SAAgB,aAAa,QAAwB;CACnD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BT,SAAgB,eAAe,GAAG,SAA2B;CAC3D,MAAM,MAAc,EAAE;CACtB,MAAM,eAA8D,EAAE;CAItE,MAAM,4BAAY,IAAI,KAAwD;CAE9E,KAAK,MAAM,KAAK,SAAS;EACvB,IAAI,EAAE,SAAS,KAAA,GACb,IAAI,OAAO,EAAE;EACf,IAAI,EAAE,WAAW,KAAA,GACf,IAAI,SAAS,EAAE;EACjB,IAAI,EAAE,UAAU,KAAA,GACd,IAAI,QAAQ,EAAE;EAChB,IAAI,EAAE,WAAW,KAAA,GACf,IAAI,SAAS,EAAE;EACjB,IAAI,EAAE,OACJ,IAAI,QAAQ;GAAE,GAAG,IAAI;GAAO,GAAG,EAAE;GAAO;EAC1C,IAAI,EAAE,aACJ,IAAI,cAAc;GAAE,GAAG,IAAI;GAAa,GAAG,EAAE;GAAa;EAC5D,IAAI,EAAE,UAAU;GAGd,MAAM,SAA0C;IAAE,GAAG,IAAI;IAAU,GAAG,EAAE;IAAU;GAClF,IAAI,IAAI,UAAU,cAAc,EAAE,SAAS,YACzC,OAAO,aAAa;IAAE,GAAG,IAAI,UAAU;IAAY,GAAG,EAAE,SAAS;IAAY;GAE/E,IAAI,IAAI,UAAU,eAAe,EAAE,SAAS,aAC1C,OAAO,cAAc;IAAE,GAAG,IAAI,UAAU;IAAa,GAAG,EAAE,SAAS;IAAa;GAElF,IAAI,WAAW;;EAEjB,IAAI,EAAE,YACJ,KAAK,MAAM,UAAU,EAAE,YACrB,UAAU,IAAI,OAAO,MAAM,OAAO;EAEtC,IAAI,EAAE,OACJ,KAAK,MAAM,CAAC,OAAO,YAAY,OAAO,QAAQ,EAAE,MAAM,EAAE;GACtD,IAAI,YAAY,KAAA,GACd;GACF,MAAM,OAAO,MAAM,QAAQ,QAAQ,GAAG,UAAU,CAAC,QAAQ;GACzD,MAAM,MAAM;GAKZ,CADgB,aAAa,SAAS,EAAE,EACjC,KAAK,GAAI,KAAmB;;;CAKzC,IAAI,UAAU,OAAO,GACnB,IAAI,aAAa,CAAC,GAAG,UAAU,QAAQ,CAAC;CAE1C,IAAI,OAAO,KAAK,aAAa,CAAC,SAAS,GACrC,IAAI,QAAQ;CAEd,OAAO"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-kwsNnOmt.js","names":[],"sources":["../src/session/file-map.ts","../src/session/memory.ts","../src/session/remote.ts","../src/session/index.ts"],"sourcesContent":["/**\n * File-map session store.\n *\n * Wraps a narrow 3-method adapter (`get` / `save` / `delete`) that exchanges a flat\n * map of filename → string content. Useful for embedding zidane sessions inside\n * host-provided session backends that only speak in file maps (not zidane's native\n * `SessionStore` shape).\n *\n * Serialization format:\n * - `turns.jsonl` — one `SessionTurn` per line.\n * - `meta.json` — session metadata (id, agentId, status, runs, metadata, timestamps).\n *\n * JSONL for turns keeps history inspectable with tools like `jq` and resilient to\n * partial corruption — parse up to the first bad line and you still have a valid\n * prefix. Metadata lives in its own file so large turn logs don't bloat the\n * metadata path.\n *\n * Scope: each `createFileMapStore` handles a **single session** — the adapter's\n * file map holds at most one zidane session at a time. This matches how host SDKs\n * scope their session stores per conversation.\n *\n * Divergences from the built-in memory / sqlite stores:\n * - `appendTurns` / `updateStatus` / `updateRun` auto-create a minimal `SessionData`\n * record on first write, instead of silently no-oping when the session hasn't been\n * explicitly `save()`-ed. This matches the host-SDK integration path where\n * `createSession(...)` → `agent.run(...)` directly without an explicit `save()` call.\n * - `updateRun` inserts the run if not found in the cached record (rather than\n * silently dropping). Run records therefore always reach the adapter.\n */\n\nimport type { SessionData, SessionRun, SessionStore } from '.'\nimport type { SessionTurn } from '../types'\n\n/**\n * Host-provided file-map adapter. Three methods exchanging `Record<string, string>`\n * payloads — the whole persistence surface the wrapper needs.\n */\nexport interface FileMapAdapter {\n /** Load the current file map. Returns an empty `files` record when nothing is persisted. */\n get: () => Promise<{ files: Record<string, string> }>\n /** Replace the persisted file map. Full-rewrite semantics. */\n save: (files: Record<string, string>) => Promise<void>\n /** Delete all persisted state. */\n delete: () => Promise<void>\n}\n\nexport interface FileMapStoreOptions {\n /** Filename for the JSONL turns log. Default: `turns.jsonl`. */\n turnsFile?: string\n /** Filename for the metadata JSON. Default: `meta.json`. */\n metaFile?: string\n}\n\ninterface MetaShape {\n id: string\n agentId?: string\n runs: SessionRun[]\n status: SessionData['status']\n metadata: Record<string, unknown>\n createdAt: number\n updatedAt: number\n}\n\nfunction toMeta(data: SessionData): MetaShape {\n return {\n id: data.id,\n agentId: data.agentId,\n runs: data.runs,\n status: data.status,\n metadata: data.metadata,\n createdAt: data.createdAt,\n updatedAt: data.updatedAt,\n }\n}\n\nfunction toData(meta: MetaShape, turns: SessionTurn[]): SessionData {\n return {\n id: meta.id,\n agentId: meta.agentId,\n turns,\n runs: meta.runs,\n status: meta.status,\n metadata: meta.metadata,\n createdAt: meta.createdAt,\n updatedAt: meta.updatedAt,\n }\n}\n\nfunction parseTurnsJsonl(jsonl: string): SessionTurn[] {\n if (!jsonl)\n return []\n const turns: SessionTurn[] = []\n for (const line of jsonl.split('\\n')) {\n const trimmed = line.trim()\n if (!trimmed)\n continue\n try {\n turns.push(JSON.parse(trimmed) as SessionTurn)\n }\n catch {\n // Skip malformed lines — preserves the valid prefix on partial corruption.\n }\n }\n return turns\n}\n\nfunction serializeTurnsJsonl(turns: SessionTurn[]): string {\n if (turns.length === 0)\n return ''\n return `${turns.map(t => JSON.stringify(t)).join('\\n')}\\n`\n}\n\n/**\n * Create a single-session `SessionStore` backed by a file-map adapter.\n *\n * @example\n * ```ts\n * const session = await createSession({\n * store: createFileMapStore(hostSessionStore),\n * })\n * ```\n */\nexport function createFileMapStore(\n adapter: FileMapAdapter,\n options: FileMapStoreOptions = {},\n): SessionStore {\n const turnsFile = options.turnsFile ?? 'turns.jsonl'\n const metaFile = options.metaFile ?? 'meta.json'\n\n // Cached view of the persisted session. Populated lazily on first access so the\n // factory itself doesn't do I/O.\n let cached: SessionData | null = null\n let hydrated = false\n\n async function hydrate(): Promise<void> {\n if (hydrated)\n return\n const { files } = await adapter.get()\n const metaRaw = files[metaFile]\n if (metaRaw) {\n let meta: MetaShape | null = null\n try {\n meta = JSON.parse(metaRaw) as MetaShape\n }\n catch {\n meta = null\n }\n if (meta) {\n cached = toData(meta, parseTurnsJsonl(files[turnsFile] ?? ''))\n }\n }\n hydrated = true\n }\n\n async function persist(data: SessionData): Promise<void> {\n const meta = toMeta(data)\n await adapter.save({\n [metaFile]: JSON.stringify(meta, null, 2),\n [turnsFile]: serializeTurnsJsonl(data.turns),\n })\n }\n\n // Ensure `cached` exists for `sessionId`, creating a minimal record when first written.\n // Returns false when `cached` already holds a different sessionId (request ignored).\n async function ensureCachedFor(sessionId: string): Promise<boolean> {\n await hydrate()\n if (cached) {\n return cached.id === sessionId\n }\n const now = Date.now()\n cached = {\n id: sessionId,\n turns: [],\n runs: [],\n status: 'idle',\n metadata: {},\n createdAt: now,\n updatedAt: now,\n }\n hydrated = true\n return true\n }\n\n return {\n async load(sessionId: string): Promise<SessionData | null> {\n await hydrate()\n if (!cached || cached.id !== sessionId)\n return null\n return structuredClone(cached)\n },\n\n async save(data: SessionData): Promise<void> {\n cached = structuredClone(data)\n hydrated = true\n await persist(cached)\n },\n\n async delete(sessionId: string): Promise<void> {\n await hydrate()\n if (cached && cached.id !== sessionId)\n return\n cached = null\n await adapter.delete()\n },\n\n async list(filter): Promise<string[]> {\n await hydrate()\n if (!cached)\n return []\n if (filter?.agentId && cached.agentId !== filter.agentId)\n return []\n // file-map stores exactly one session, so the projectRoot filter\n // either keeps it (match / axis off) or drops it entirely.\n if (filter && 'projectRoot' in filter) {\n const v = filter.projectRoot\n if (v === null && cached.projectRoot != null)\n return []\n if (typeof v === 'string' && cached.projectRoot !== v)\n return []\n }\n return [cached.id]\n },\n\n async appendTurns(sessionId: string, turns: SessionTurn[]): Promise<void> {\n const ok = await ensureCachedFor(sessionId)\n if (!ok)\n return\n cached!.turns.push(...structuredClone(turns))\n cached!.updatedAt = Date.now()\n await persist(cached!)\n },\n\n async getTurns(sessionId: string, from = 0, limit?: number): Promise<SessionTurn[]> {\n await hydrate()\n if (!cached || cached.id !== sessionId)\n return []\n const slice = cached.turns.slice(from, limit !== undefined ? from + limit : undefined)\n return structuredClone(slice) as SessionTurn[]\n },\n\n async updateRun(sessionId: string, run: SessionRun): Promise<void> {\n const ok = await ensureCachedFor(sessionId)\n if (!ok)\n return\n const idx = cached!.runs.findIndex(r => r.id === run.id)\n if (idx >= 0)\n cached!.runs[idx] = structuredClone(run)\n else\n cached!.runs.push(structuredClone(run))\n cached!.updatedAt = Date.now()\n await persist(cached!)\n },\n\n async updateStatus(sessionId: string, status: SessionData['status']): Promise<void> {\n const ok = await ensureCachedFor(sessionId)\n if (!ok)\n return\n cached!.status = status\n cached!.updatedAt = Date.now()\n await persist(cached!)\n },\n }\n}\n","/**\n * In-memory session store.\n * Useful for development and testing. Data is lost when the process exits.\n */\n\nimport type { SessionData, SessionRun, SessionStore } from '.'\nimport type { SessionTurn } from '../types'\n\nexport function createMemoryStore(): SessionStore {\n const sessions = new Map<string, SessionData>()\n\n return {\n async load(sessionId: string) {\n const data = sessions.get(sessionId)\n return data ? structuredClone(data) : null\n },\n\n async save(session: SessionData) {\n sessions.set(session.id, structuredClone(session))\n },\n\n async delete(sessionId: string) {\n sessions.delete(sessionId)\n },\n\n async list(filter) {\n let ids = Array.from(sessions.keys())\n if (filter?.agentId) {\n ids = ids.filter(id => sessions.get(id)?.agentId === filter.agentId)\n }\n // `projectRoot` mirrors the SQLite store's tri-state contract:\n // string → only sessions tagged with that root\n // null → only UNTAGGED sessions (legacy / pre-v3 rows)\n // undefined → axis ignored (tagged + untagged both returned)\n if (filter && 'projectRoot' in filter) {\n const v = filter.projectRoot\n if (v === null)\n ids = ids.filter(id => sessions.get(id)?.projectRoot == null)\n else if (typeof v === 'string')\n ids = ids.filter(id => sessions.get(id)?.projectRoot === v)\n }\n if (filter?.limit) {\n ids = ids.slice(0, filter.limit)\n }\n return ids\n },\n\n async appendTurns(sessionId: string, turns: SessionTurn[]) {\n const data = sessions.get(sessionId)\n if (data) {\n data.turns.push(...structuredClone(turns))\n data.updatedAt = Date.now()\n }\n },\n\n async getTurns(sessionId: string, from = 0, limit?: number) {\n const data = sessions.get(sessionId)\n if (!data)\n return []\n const sliced = data.turns.slice(from, limit !== undefined ? from + limit : undefined)\n return structuredClone(sliced) as SessionTurn[]\n },\n\n async updateRun(sessionId: string, run: SessionRun) {\n const data = sessions.get(sessionId)\n if (data) {\n const idx = data.runs.findIndex(r => r.id === run.id)\n if (idx >= 0) {\n data.runs[idx] = structuredClone(run)\n }\n data.updatedAt = Date.now()\n }\n },\n\n async updateStatus(sessionId: string, status: SessionData['status']) {\n const data = sessions.get(sessionId)\n if (data) {\n data.status = status\n data.updatedAt = Date.now()\n }\n },\n }\n}\n","/**\n * Remote session store via HTTP API.\n *\n * Expects a REST API with:\n * GET {url}/sessions/{id} -> SessionData | 404\n * PUT {url}/sessions/{id} -> save SessionData\n * DELETE {url}/sessions/{id} -> delete\n * GET {url}/sessions?agentId=&limit=&projectRoot= -> { ids: string[] }\n * `projectRoot=__null__` is the wire encoding for \"untagged only\".\n * POST {url}/sessions/{id}/turns -> append turns\n * GET {url}/sessions/{id}/turns?from=&limit= -> SessionTurn[]\n * PUT {url}/sessions/{id}/runs/{runId} -> update run\n * PATCH {url}/sessions/{id} -> { status }\n */\n\nimport type { SessionData, SessionRun, SessionStore } from '.'\nimport type { SessionTurn } from '../types'\n\nexport interface RemoteStoreOptions {\n /** Base URL of the session API */\n url: string\n /** Optional headers (e.g. for authentication) */\n headers?: Record<string, string>\n}\n\nconst TRAILING_SLASH = /\\/$/\n\nexport function createRemoteStore(options: RemoteStoreOptions): SessionStore {\n const baseUrl = options.url.replace(TRAILING_SLASH, '')\n const defaultHeaders: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...options.headers,\n }\n\n async function request(path: string, init?: RequestInit): Promise<Response> {\n const url = `${baseUrl}${path}`\n const res = await fetch(url, {\n ...init,\n headers: { ...defaultHeaders, ...init?.headers },\n })\n return res\n }\n\n return {\n async load(sessionId: string) {\n const res = await request(`/sessions/${encodeURIComponent(sessionId)}`)\n if (!res.ok) {\n if (res.status === 404)\n return null\n throw new Error(`Remote session load failed: ${res.status} ${res.statusText}`)\n }\n return await res.json() as SessionData\n },\n\n async save(session: SessionData) {\n const res = await request(`/sessions/${encodeURIComponent(session.id)}`, {\n method: 'PUT',\n body: JSON.stringify(session),\n })\n if (!res.ok) {\n throw new Error(`Remote session save failed: ${res.status} ${res.statusText}`)\n }\n },\n\n async delete(sessionId: string) {\n const res = await request(`/sessions/${encodeURIComponent(sessionId)}`, {\n method: 'DELETE',\n })\n if (!res.ok && res.status !== 404) {\n throw new Error(`Remote session delete failed: ${res.status} ${res.statusText}`)\n }\n },\n\n async list(filter) {\n const params = new URLSearchParams()\n if (filter?.agentId)\n params.set('agentId', filter.agentId)\n if (filter?.limit)\n params.set('limit', String(filter.limit))\n if (filter && 'projectRoot' in filter) {\n const v = filter.projectRoot\n if (v === null)\n params.set('projectRoot', '__null__')\n else if (typeof v === 'string')\n params.set('projectRoot', v)\n }\n\n const query = params.toString()\n const path = query ? `/sessions?${query}` : '/sessions'\n const res = await request(path)\n\n if (!res.ok) {\n throw new Error(`Remote session list failed: ${res.status} ${res.statusText}`)\n }\n\n const body = await res.json() as { ids: string[] }\n return body.ids\n },\n\n async appendTurns(sessionId: string, turns: SessionTurn[]) {\n const res = await request(`/sessions/${encodeURIComponent(sessionId)}/turns`, {\n method: 'POST',\n body: JSON.stringify(turns),\n })\n if (!res.ok) {\n throw new Error(`Remote appendTurns failed: ${res.status} ${res.statusText}`)\n }\n },\n\n async getTurns(sessionId: string, from = 0, limit?: number) {\n const params = new URLSearchParams()\n if (from)\n params.set('from', String(from))\n if (limit !== undefined)\n params.set('limit', String(limit))\n\n const query = params.toString()\n const path = `/sessions/${encodeURIComponent(sessionId)}/turns${query ? `?${query}` : ''}`\n const res = await request(path)\n\n if (!res.ok) {\n throw new Error(`Remote getTurns failed: ${res.status} ${res.statusText}`)\n }\n\n return await res.json() as SessionTurn[]\n },\n\n async updateRun(sessionId: string, run: SessionRun) {\n const res = await request(\n `/sessions/${encodeURIComponent(sessionId)}/runs/${encodeURIComponent(run.id)}`,\n {\n method: 'PUT',\n body: JSON.stringify(run),\n },\n )\n if (!res.ok) {\n throw new Error(`Remote updateRun failed: ${res.status} ${res.statusText}`)\n }\n },\n\n async updateStatus(sessionId: string, status: SessionData['status']) {\n const res = await request(`/sessions/${encodeURIComponent(sessionId)}`, {\n method: 'PATCH',\n body: JSON.stringify({ status }),\n })\n if (!res.ok) {\n throw new Error(`Remote updateStatus failed: ${res.status} ${res.statusText}`)\n }\n },\n }\n}\n","/**\n * Session management for agents.\n *\n * A session tracks identity, turn history, and run metadata.\n * Plug in any storage backend by implementing the SessionStore interface,\n * or use one of the built-in stores: memory, sqlite, remote.\n */\n\nimport type { SessionTurn, TurnUsage } from '../types'\n\nexport type { SessionContentBlock, SessionMessage, SessionTurn } from '../types'\nexport { createFileMapStore } from './file-map'\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface SessionRun {\n id: string\n startedAt: number\n endedAt?: number\n prompt: string\n status: 'running' | 'completed' | 'aborted' | 'error'\n turns?: number\n tokensIn?: number\n tokensOut?: number\n error?: string\n /** Per-turn usage breakdown */\n turnUsage?: TurnUsage[]\n /** Total usage across all turns */\n totalUsage?: TurnUsage\n /** Estimated cost in USD */\n cost?: number\n /**\n * The run that spawned this one, when the agent is a subagent sharing its\n * parent's session. Undefined on top-level `agent.run()`. Consumers can walk\n * `runs` by `parentRunId` to reconstruct the subagent tree.\n */\n parentRunId?: string\n /**\n * Zero-based subagent depth. 0 = top-level run, 1 = direct child, …\n * Recorded here so hosts can query/filter by level without walking the tree.\n */\n depth?: number\n}\n\nexport interface SessionData {\n id: string\n agentId?: string\n /**\n * Absolute path of the project this session belongs to — typically\n * the git root resolved from `cwd` at creation time, falling back to\n * `cwd` itself when not in a git repo. Set ONCE on creation and never\n * mutated thereafter (the session \"belongs\" to that project forever).\n *\n * Used by the TUI's sessions list to filter rows by current project,\n * so the user only sees conversations relevant to where they are\n * working — without needing one `.{prefix}/` directory per project.\n *\n * `undefined` on pre-tagging legacy sessions; the chat layer treats\n * those as \"untagged\" and hides them unless `Settings.showAllProjects`\n * is on.\n */\n projectRoot?: string\n turns: SessionTurn[]\n runs: SessionRun[]\n status: 'idle' | 'running' | 'completed' | 'error'\n metadata: Record<string, unknown>\n createdAt: number\n updatedAt: number\n}\n\n// ---------------------------------------------------------------------------\n// SessionStore interface (pluggable backend)\n// ---------------------------------------------------------------------------\n\nexport interface SessionStore {\n /** Optional: generate a session ID server-side (e.g. Supabase UUID). */\n generateSessionId?: () => string | Promise<string>\n\n /** Optional: generate a turn ID server-side. */\n generateTurnId?: () => string | Promise<string>\n\n /** Load a session by ID. Returns null if not found. */\n load: (sessionId: string) => Promise<SessionData | null>\n\n /** Save a session (create or update, full document). */\n save: (session: SessionData) => Promise<void>\n\n /** Delete a session. */\n delete: (sessionId: string) => Promise<void>\n\n /**\n * List session IDs, optionally filtered. `projectRoot` restricts to\n * sessions whose `SessionData.projectRoot` matches exactly — untagged\n * (legacy) sessions are NOT returned under that filter; pass `null`\n * explicitly to ask for untagged ones, or omit the field to ignore\n * the axis entirely. `agentId` filters by recorded agent; the two\n * conditions AND together when both are set.\n */\n list: (filter?: { agentId?: string, limit?: number, projectRoot?: string | null }) => Promise<string[]>\n\n /** Append new turns to a session (incremental, avoids full re-save). */\n appendTurns: (sessionId: string, turns: SessionTurn[]) => Promise<void>\n\n /** Return a slice of turns for a session. */\n getTurns: (sessionId: string, from?: number, limit?: number) => Promise<SessionTurn[]>\n\n /** Persist an updated run record (called after completeRun / abortRun / errorRun). */\n updateRun: (sessionId: string, run: SessionRun) => Promise<void>\n\n /** Update the top-level status of a session. */\n updateStatus: (sessionId: string, status: SessionData['status']) => Promise<void>\n}\n\n// ---------------------------------------------------------------------------\n// Session (live instance wrapping a SessionData)\n// ---------------------------------------------------------------------------\n\nexport interface Session {\n /** Session ID */\n readonly id: string\n\n /** Agent ID (optional label) */\n readonly agentId?: string\n\n /**\n * Project this session was created under — see {@link SessionData.projectRoot}.\n * Set once on creation; surfaces here for read-only inspection.\n */\n readonly projectRoot?: string\n\n /** Current turn history */\n readonly turns: SessionTurn[]\n\n /**\n * True when this session has no turns yet.\n *\n * Use this as a first-prompt signal when setting up a run — e.g. writing initial\n * configuration only on fresh sessions. Equivalent to `turns.length === 0`.\n */\n readonly isEmpty: boolean\n\n /** Top-level session status */\n readonly status: SessionData['status']\n\n /** All runs in this session */\n readonly runs: SessionRun[]\n\n /** Arbitrary metadata */\n readonly metadata: Record<string, unknown>\n\n /**\n * Start tracking a new run. `extras.parentRunId` + `extras.depth` are\n * populated by the spawn tool when a child agent shares its parent's\n * session; regular top-level `agent.run()` calls omit them.\n */\n startRun: (runId: string, prompt?: string, extras?: { parentRunId?: string, depth?: number }) => void\n\n /** Mark a run as completed */\n completeRun: (runId: string, stats: { turns: number, tokensIn: number, tokensOut: number, turnUsage?: TurnUsage[], cost?: number }) => void\n\n /** Mark a run as aborted */\n /**\n * Optional `stats` lets the agent backfill the run's token totals when\n * the abort happened *after* the loop accumulated meaningful usage —\n * common when the user presses esc mid-streaming. Without it, the run\n * record reads `0 in / 0 out` on reload regardless of how much was\n * spent before the abort. Same shape as `completeRun`'s stats so the\n * persisted `totalUsage` aggregate stays consistent across paths.\n */\n abortRun: (runId: string, stats?: { turns: number, tokensIn: number, tokensOut: number, turnUsage?: TurnUsage[], cost?: number }) => void\n\n /** Mark a run as errored */\n /** Optional `stats` — same rationale as `abortRun.stats`. */\n errorRun: (runId: string, error: string, stats?: { turns: number, tokensIn: number, tokensOut: number, turnUsage?: TurnUsage[], cost?: number }) => void\n\n /** Append turns to in-memory history AND persist via store.appendTurns (if store present) */\n appendTurns: (turns: SessionTurn[]) => Promise<void>\n\n /** Replace all turns in-memory (does not persist — use save() for that) */\n setTurns: (turns: SessionTurn[]) => void\n\n /**\n * Replace all runs in-memory (does not persist — use save() for that).\n * Mirrors {@link setTurns} for the fork / restore case: callers that\n * bootstrap a session from an externally-derived snapshot (e.g.\n * `onForkTurn` copying parent runs into a child session) need this so\n * the cloned runs land in `data.runs` before the first `save()`.\n * Production agent runs continue to mutate runs via `startRun` /\n * `completeRun` / `updateRun`; this is the bulk-replace escape hatch.\n */\n setRuns: (runs: SessionRun[]) => void\n\n /** Update the session status in memory AND via store.updateStatus (if store present) */\n updateStatus: (status: SessionData['status']) => Promise<void>\n\n /** Persist an updated run record via store.updateRun (if store present) */\n updateRun: (run: SessionRun) => Promise<void>\n\n /** Generate a turn ID using store.generateTurnId if available, else crypto.randomUUID() */\n generateTurnId: () => string | Promise<string>\n\n /** Set metadata key */\n setMeta: (key: string, value: unknown) => void\n\n /** Persist the full session document to the store */\n save: () => Promise<void>\n\n /** Serialize to SessionData */\n toJSON: () => SessionData\n}\n\n// ---------------------------------------------------------------------------\n// createSession\n// ---------------------------------------------------------------------------\n\nexport interface CreateSessionOptions {\n /** Session ID. If omitted and store provides generateSessionId, that is used. */\n id?: string\n /** Agent ID label */\n agentId?: string\n /**\n * Project tag — see {@link SessionData.projectRoot}. Stamped once on\n * creation; ignored when `_data` is set (restoring an existing\n * session preserves whatever was already persisted there). The TUI\n * resolves this from `findGitRoot(cwd) ?? cwd` so sessions started\n * from the same repo (no matter which subdir) share one tag.\n */\n projectRoot?: string\n /** Initial metadata */\n metadata?: Record<string, unknown>\n /** Storage backend (optional, enables save/load) */\n store?: SessionStore\n // @internal: restore from existing data (bypasses id/agentId/metadata options)\n _data?: SessionData\n}\n\n/**\n * Create a new session.\n * Async so stores that generate IDs server-side (e.g. Supabase) can be supported.\n */\nexport async function createSession(options: CreateSessionOptions = {}): Promise<Session> {\n const store = options.store\n const now = Date.now()\n\n let sessionId = options.id\n if (!sessionId && store?.generateSessionId) {\n sessionId = await store.generateSessionId()\n }\n if (!sessionId) {\n sessionId = generateId()\n }\n\n const data: SessionData = options._data ?? {\n id: sessionId,\n agentId: options.agentId,\n // Stamp the project tag at creation only — restored sessions (the\n // `_data` branch above) keep whatever was already persisted, even\n // if `options.projectRoot` differs. A session's project identity\n // is sticky for its lifetime; loading the same session from a\n // different cwd doesn't re-home it.\n ...(options.projectRoot ? { projectRoot: options.projectRoot } : {}),\n turns: [],\n runs: [],\n status: 'idle',\n metadata: options.metadata ?? {},\n createdAt: now,\n updatedAt: now,\n }\n\n function touch() {\n data.updatedAt = Date.now()\n }\n\n function findRun(runId: string): SessionRun | undefined {\n return data.runs.find(r => r.id === runId)\n }\n\n /**\n * Apply per-run usage stats onto a SessionRun. Shared by `completeRun`,\n * `abortRun`, and `errorRun` so the on-disk shape stays consistent across\n * exit paths — historically only `completeRun` filled these in, and\n * aborted/errored runs rendered `0 in / 0 out` on reload regardless of\n * how much was actually consumed.\n */\n function applyRunStats(run: SessionRun, stats: { turns: number, tokensIn: number, tokensOut: number, turnUsage?: TurnUsage[], cost?: number }) {\n run.turns = stats.turns\n run.tokensIn = stats.tokensIn\n run.tokensOut = stats.tokensOut\n if (stats.turnUsage) {\n run.turnUsage = stats.turnUsage\n const total = stats.turnUsage.reduce((acc, t) => ({\n input: acc.input + t.input,\n output: acc.output + t.output,\n cacheCreation: (acc.cacheCreation ?? 0) + (t.cacheCreation ?? 0),\n cacheRead: (acc.cacheRead ?? 0) + (t.cacheRead ?? 0),\n thinking: (acc.thinking ?? 0) + (t.thinking ?? 0),\n }), { input: 0, output: 0, cacheCreation: 0, cacheRead: 0, thinking: 0 })\n run.totalUsage = {\n input: total.input,\n output: total.output,\n ...(total.cacheCreation ? { cacheCreation: total.cacheCreation } : {}),\n ...(total.cacheRead ? { cacheRead: total.cacheRead } : {}),\n ...(total.thinking ? { thinking: total.thinking } : {}),\n }\n }\n if (stats.cost !== undefined)\n run.cost = stats.cost\n }\n\n const session: Session = {\n get id() { return data.id },\n get agentId() { return data.agentId },\n get projectRoot() { return data.projectRoot },\n get turns() { return data.turns },\n get isEmpty() { return data.turns.length === 0 },\n get status() { return data.status },\n get runs() { return data.runs },\n get metadata() { return data.metadata },\n\n startRun(runId: string, prompt?: string, extras?: { parentRunId?: string, depth?: number }) {\n data.runs.push({\n id: runId,\n startedAt: Date.now(),\n prompt: prompt ?? '',\n status: 'running',\n ...(extras?.parentRunId ? { parentRunId: extras.parentRunId } : {}),\n ...(typeof extras?.depth === 'number' ? { depth: extras.depth } : {}),\n })\n touch()\n },\n\n completeRun(runId: string, stats: { turns: number, tokensIn: number, tokensOut: number, turnUsage?: TurnUsage[], cost?: number }) {\n const run = findRun(runId)\n if (run) {\n run.status = 'completed'\n run.endedAt = Date.now()\n applyRunStats(run, stats)\n }\n touch()\n },\n\n abortRun(runId: string, stats?: { turns: number, tokensIn: number, tokensOut: number, turnUsage?: TurnUsage[], cost?: number }) {\n const run = findRun(runId)\n if (run) {\n run.status = 'aborted'\n run.endedAt = Date.now()\n // Backfill tokens when available so an aborted run's session\n // ledger reflects actual consumption rather than `0 in / 0 out`.\n if (stats)\n applyRunStats(run, stats)\n }\n touch()\n },\n\n errorRun(runId: string, error: string, stats?: { turns: number, tokensIn: number, tokensOut: number, turnUsage?: TurnUsage[], cost?: number }) {\n const run = findRun(runId)\n if (run) {\n run.status = 'error'\n run.endedAt = Date.now()\n run.error = error\n if (stats)\n applyRunStats(run, stats)\n }\n touch()\n },\n\n async appendTurns(turns: SessionTurn[]) {\n data.turns.push(...turns)\n touch()\n if (store) {\n await store.appendTurns(data.id, turns)\n }\n },\n\n setTurns(turns: SessionTurn[]) {\n data.turns = turns\n touch()\n },\n\n setRuns(runs: SessionRun[]) {\n data.runs = runs\n touch()\n },\n\n async updateStatus(status: SessionData['status']) {\n data.status = status\n touch()\n if (store) {\n await store.updateStatus(data.id, status)\n }\n },\n\n async updateRun(run: SessionRun) {\n if (store) {\n await store.updateRun(data.id, run)\n }\n },\n\n generateTurnId() {\n if (store?.generateTurnId) {\n return store.generateTurnId()\n }\n return crypto.randomUUID()\n },\n\n setMeta(key: string, value: unknown) {\n data.metadata[key] = value\n touch()\n },\n\n async save() {\n if (!store) {\n throw new Error('No SessionStore configured. Pass a store to createSession() to enable persistence.')\n }\n await store.save(data)\n },\n\n toJSON() {\n return structuredClone(data)\n },\n }\n\n return session\n}\n\n/**\n * Load an existing session from a store.\n */\nexport async function loadSession(store: SessionStore, sessionId: string): Promise<Session | null> {\n const loaded = await store.load(sessionId)\n if (!loaded)\n return null\n\n return createSession({ store, _data: loaded })\n}\n\n// ---------------------------------------------------------------------------\n// Re-export stores\n// ---------------------------------------------------------------------------\n\nexport type { FileMapAdapter, FileMapStoreOptions } from './file-map'\nexport { createMemoryStore } from './memory'\nexport { autoDetectAndConvert, fromAnthropic, fromOpenAI, toAnthropic, toOpenAI } from './messages'\nexport { createRemoteStore } from './remote'\nexport type { RemoteStoreOptions } from './remote'\n\n// NOTE: `createSqliteStore` is intentionally NOT re-exported here. It lives behind\n// the dedicated `zidane/session/sqlite` subpath so that non-Bun consumers don't\n// transitively evaluate `bun:sqlite` when they import from `zidane/session`.\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction generateId(): string {\n return `ses_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`\n}\n"],"mappings":"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"}