@earzbook/openclaw 0.1.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 (42) hide show
  1. package/README.md +46 -0
  2. package/dist/adapter.d.ts +29 -0
  3. package/dist/adapter.d.ts.map +1 -0
  4. package/dist/adapter.js +368 -0
  5. package/dist/adapter.js.map +1 -0
  6. package/dist/config.d.ts +7 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +84 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/dispatch.d.ts +48 -0
  11. package/dist/dispatch.d.ts.map +1 -0
  12. package/dist/dispatch.js +261 -0
  13. package/dist/dispatch.js.map +1 -0
  14. package/dist/index.d.ts +2 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +571 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/lockfile.d.ts +20 -0
  19. package/dist/lockfile.d.ts.map +1 -0
  20. package/dist/lockfile.js +113 -0
  21. package/dist/lockfile.js.map +1 -0
  22. package/dist/logging.d.ts +5 -0
  23. package/dist/logging.d.ts.map +1 -0
  24. package/dist/logging.js +98 -0
  25. package/dist/logging.js.map +1 -0
  26. package/dist/platform/launchd.d.ts +12 -0
  27. package/dist/platform/launchd.d.ts.map +1 -0
  28. package/dist/platform/launchd.js +37 -0
  29. package/dist/platform/launchd.js.map +1 -0
  30. package/dist/platform/systemd.d.ts +10 -0
  31. package/dist/platform/systemd.d.ts.map +1 -0
  32. package/dist/platform/systemd.js +18 -0
  33. package/dist/platform/systemd.js.map +1 -0
  34. package/dist/self-update.d.ts +36 -0
  35. package/dist/self-update.d.ts.map +1 -0
  36. package/dist/self-update.js +151 -0
  37. package/dist/self-update.js.map +1 -0
  38. package/dist/types.d.ts +236 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +22 -0
  41. package/dist/types.js.map +1 -0
  42. package/package.json +48 -0
@@ -0,0 +1,261 @@
1
+ // Dispatch an inbound user_message into the local OpenClaw agent and
2
+ // return the agent's reply text.
3
+ //
4
+ // We spawn `openclaw agent --agent <id> --message <text> --json --timeout
5
+ // <s>` per inbound, capture stdout, and extract the reply text. This is
6
+ // the same path a user would invoke by hand — we're just automating it.
7
+ //
8
+ // Concurrency: callers (index.ts) MUST serialize dispatches. A single
9
+ // sidecar = single user = single OpenClaw agent session; running two
10
+ // `openclaw agent` invocations concurrently against the same session is
11
+ // not supported by OpenClaw 2026.5.22.
12
+ //
13
+ // Timeout: hard-kill the child after agentTimeoutMs (default 120s). On
14
+ // timeout we surface a user-visible error reply so the app doesn't hang
15
+ // on the "thinking" indicator forever.
16
+ import { spawn } from "node:child_process";
17
+ import { log, warn, errLog } from "./logging.js";
18
+ const TAG = "[earzbook-sidecar:dispatch]";
19
+ /**
20
+ * Session-key namespace for ALL Earzbook-originated agent invocations.
21
+ *
22
+ * v1 (legacy / no-sessionKey-from-app): the sidecar uses bare
23
+ * `earzbook-app` — a single shared session for the user. Earlier in the
24
+ * project this was a hardcoded isolation invariant (no override allowed)
25
+ * to keep the chat context clean of unrelated CLI traffic.
26
+ *
27
+ * v1 multi-session (this change): the app now sends a `sessionKey` per
28
+ * inbound user_message. The sidecar resolves the OpenClaw session key as
29
+ * `earzbook-app:<sessionKey>` — same namespace prefix preserves isolation
30
+ * from non-Earzbook OpenClaw use on the same machine, while the suffix
31
+ * gives every chat its own dedicated trajectory file on disk (and thus
32
+ * its own isolated AI memory context).
33
+ *
34
+ * The bare `SESSION_KEY` constant is kept as the fallback for inbound
35
+ * frames that don't carry a sessionKey — this keeps old app versions
36
+ * working during rollout.
37
+ *
38
+ * The original "isolated from heartbeat / wake-up" guarantee still holds:
39
+ * the gateway's default session is `main`, ours starts with
40
+ * `earzbook-app`, so they never collide regardless of suffix.
41
+ */
42
+ const SESSION_KEY = "earzbook-app";
43
+ /**
44
+ * Build the final --session-key argv value. Pure function; safe to test.
45
+ * Returns the legacy constant when no per-frame sessionKey is given.
46
+ */
47
+ export function resolveSessionKey(perFrameSessionKey) {
48
+ if (!perFrameSessionKey)
49
+ return SESSION_KEY;
50
+ return `${SESSION_KEY}:${perFrameSessionKey}`;
51
+ }
52
+ /** Run one agent turn and return the reply text. */
53
+ export function dispatchToAgent(input) {
54
+ const timeoutMs = input.timeoutMs ?? 120_000;
55
+ const spawnFn = input.spawnFn ?? spawn;
56
+ const start = Date.now();
57
+ return new Promise(resolve => {
58
+ let resolved = false;
59
+ function finish(r) {
60
+ if (resolved)
61
+ return;
62
+ resolved = true;
63
+ resolve(r);
64
+ }
65
+ const resolvedSessionKey = resolveSessionKey(input.sessionKey);
66
+ log(TAG, `spawning openclaw agent agentId=${input.agentId} chars=${input.text.length} sessionKey=${resolvedSessionKey} (perFrame=${input.sessionKey ?? "(none)"})`);
67
+ let child;
68
+ try {
69
+ // ── Sidecar non-restriction policy ──────────────────────────────
70
+ // The argv below contains ONLY:
71
+ // - the protocol invariants (`agent`, `--message`, `--json`)
72
+ // - user-overridable plumbing (`--agent`, `--timeout`)
73
+ // - the session-key (per-message isolation — see resolveSessionKey
74
+ // above; v1 multi-session uses `earzbook-app:<sessionKey>` to
75
+ // give every app-side chat its own trajectory file).
76
+ //
77
+ // Anything else that affects OpenClaw behavior — model selection,
78
+ // thinking level, skills, workspace files, channels — must NOT be
79
+ // added here. Those are user choices that belong in the user's
80
+ // own ~/.openclaw/openclaw.json. If a future maintainer is
81
+ // tempted to add e.g. `--model` or `--thinking` to this argv,
82
+ // STOP — that's the sidecar dictating OpenClaw behavior to the
83
+ // end user, which is exactly the restriction we removed.
84
+ // ───────────────────────────────────────────────────────────────
85
+ child = spawnFn("openclaw", [
86
+ "agent",
87
+ "--agent",
88
+ input.agentId,
89
+ "--message",
90
+ input.text,
91
+ "--json",
92
+ // Per-message session isolation. See resolveSessionKey() docs.
93
+ "--session-key",
94
+ resolvedSessionKey,
95
+ // OpenClaw's --timeout is in seconds; ours in ms.
96
+ "--timeout",
97
+ String(Math.ceil(timeoutMs / 1000)),
98
+ ], { stdio: ["ignore", "pipe", "pipe"] });
99
+ }
100
+ catch (e) {
101
+ const msg = e instanceof Error ? e.message : String(e);
102
+ errLog(TAG, `spawn threw: ${msg}`);
103
+ finish({
104
+ ok: false,
105
+ userVisibleError: `Earzbook couldn't start the local OpenClaw agent (${msg}). Is openclaw on your PATH?`,
106
+ durationMs: Date.now() - start,
107
+ });
108
+ return;
109
+ }
110
+ let stdout = "";
111
+ let stderr = "";
112
+ child.stdout?.on("data", (chunk) => {
113
+ stdout += chunk.toString();
114
+ });
115
+ child.stderr?.on("data", (chunk) => {
116
+ stderr += chunk.toString();
117
+ });
118
+ const killTimer = setTimeout(() => {
119
+ warn(TAG, `agent run exceeded ${timeoutMs}ms — killing`);
120
+ try {
121
+ child.kill("SIGKILL");
122
+ }
123
+ catch {
124
+ /* ignore */
125
+ }
126
+ finish({
127
+ ok: false,
128
+ userVisibleError: `The agent took longer than ${Math.round(timeoutMs / 1000)}s and was stopped.`,
129
+ durationMs: Date.now() - start,
130
+ });
131
+ }, timeoutMs);
132
+ child.on("error", (e) => {
133
+ clearTimeout(killTimer);
134
+ errLog(TAG, `child error: ${e.message}`);
135
+ finish({
136
+ ok: false,
137
+ userVisibleError: `Earzbook couldn't invoke OpenClaw: ${e.message}`,
138
+ durationMs: Date.now() - start,
139
+ });
140
+ });
141
+ child.on("close", code => {
142
+ clearTimeout(killTimer);
143
+ const durationMs = Date.now() - start;
144
+ if (code !== 0) {
145
+ const tail = (stderr || stdout).slice(-400).trim();
146
+ warn(TAG, `agent exit code=${code} durationMs=${durationMs} stderr-tail="${tail}"`);
147
+ finish({
148
+ ok: false,
149
+ userVisibleError: friendlyAgentError(code, tail),
150
+ durationMs,
151
+ });
152
+ return;
153
+ }
154
+ const text = extractReplyText(stdout);
155
+ log(TAG, `agent ok chars=${text.length} durationMs=${durationMs}`);
156
+ finish({ ok: true, replyText: text, durationMs });
157
+ });
158
+ });
159
+ }
160
+ /**
161
+ * Pull the reply text out of `openclaw agent --json` stdout.
162
+ *
163
+ * OpenClaw 2026.5.22 emits this shape on success (verified against a real
164
+ * run):
165
+ * {
166
+ * "payloads": [{"text": "...", "mediaUrl": null}],
167
+ * "meta": { ..., "finalAssistantVisibleText": "...", ... }
168
+ * }
169
+ *
170
+ * `payloads[0].text` is the canonical reply text. `finalAssistantVisibleText`
171
+ * is a meta mirror — usually identical, but we treat it as a fallback.
172
+ * Older candidates (output/reply/text at top level) stay in the list so we
173
+ * don't break if OpenClaw changes the shape.
174
+ */
175
+ export function extractReplyText(stdout) {
176
+ const trimmed = stdout.trim();
177
+ if (trimmed.length === 0)
178
+ return "(no response)";
179
+ // Try whole-stdout JSON first.
180
+ try {
181
+ const parsed = JSON.parse(trimmed);
182
+ // OpenClaw's canonical shape: payloads[].text (may have multiple
183
+ // payloads for multi-part replies; concatenate the text fields).
184
+ const payloads = parsed.payloads;
185
+ if (Array.isArray(payloads) && payloads.length > 0) {
186
+ const texts = [];
187
+ for (const p of payloads) {
188
+ if (p && typeof p === "object") {
189
+ const t = p.text;
190
+ if (typeof t === "string")
191
+ texts.push(t);
192
+ }
193
+ }
194
+ const joined = texts.join("\n").trim();
195
+ if (joined.length > 0)
196
+ return joined;
197
+ }
198
+ // Meta fallback — same text as payloads[].text in practice.
199
+ const meta = parsed.meta;
200
+ if (meta) {
201
+ const candidates = [
202
+ meta.finalAssistantVisibleText,
203
+ meta.finalAssistantRawText,
204
+ ];
205
+ for (const c of candidates) {
206
+ if (typeof c === "string" && c.length > 0)
207
+ return c;
208
+ }
209
+ }
210
+ // Older / alternate shapes — kept for forward compat.
211
+ const candidates = [
212
+ parsed.output,
213
+ parsed.reply,
214
+ parsed.text,
215
+ parsed.message,
216
+ parsed.result?.text,
217
+ parsed.result?.output,
218
+ ];
219
+ for (const c of candidates) {
220
+ if (typeof c === "string" && c.length > 0)
221
+ return c;
222
+ }
223
+ }
224
+ catch {
225
+ /* not whole-doc JSON — try line-delimited */
226
+ }
227
+ // Fallback: look for the LAST line that parses as a JSON object with a
228
+ // text-ish field (OpenClaw streams JSON events in some modes).
229
+ const lines = trimmed.split("\n").reverse();
230
+ for (const line of lines) {
231
+ const l = line.trim();
232
+ if (!l.startsWith("{"))
233
+ continue;
234
+ try {
235
+ const parsed = JSON.parse(l);
236
+ const c = parsed.text ?? parsed.output ?? parsed.reply;
237
+ if (typeof c === "string" && c.length > 0)
238
+ return c;
239
+ }
240
+ catch {
241
+ /* skip non-JSON */
242
+ }
243
+ }
244
+ // Last resort: return the raw stdout — better than dropping the reply.
245
+ return trimmed;
246
+ }
247
+ /** Map common agent exit failures to user-readable copy. */
248
+ function friendlyAgentError(code, tail) {
249
+ const lower = tail.toLowerCase();
250
+ if (lower.includes("credit balance is too low") || lower.includes("billing")) {
251
+ return "Your Anthropic credits are depleted. Top up at console.anthropic.com to continue chatting.";
252
+ }
253
+ if (lower.includes("gateway") && lower.includes("connect")) {
254
+ return "Your local OpenClaw gateway isn't reachable. Try `openclaw gateway restart`.";
255
+ }
256
+ if (code === 127) {
257
+ return "The `openclaw` command wasn't found on PATH for the sidecar.";
258
+ }
259
+ return `OpenClaw agent run failed (exit ${code ?? "?"}).`;
260
+ }
261
+ //# sourceMappingURL=dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dispatch.js","sourceRoot":"","sources":["../src/dispatch.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,iCAAiC;AACjC,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,wEAAwE;AACxE,EAAE;AACF,sEAAsE;AACtE,qEAAqE;AACrE,wEAAwE;AACxE,uCAAuC;AACvC,EAAE;AACF,uEAAuE;AACvE,wEAAwE;AACxE,uCAAuC;AAEvC,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,GAAG,GAAG,6BAA6B,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,GAAG,cAAc,CAAC;AAEnC;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,kBAA2B;IAC3D,IAAI,CAAC,kBAAkB;QAAE,OAAO,WAAW,CAAC;IAC5C,OAAO,GAAG,WAAW,IAAI,kBAAkB,EAAE,CAAC;AAChD,CAAC;AAqBD,oDAAoD;AACpD,MAAM,UAAU,eAAe,CAAC,KAAoB;IAClD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,OAAO,CAAC;IAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC;IACvC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,OAAO,IAAI,OAAO,CAAiB,OAAO,CAAC,EAAE;QAC3C,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,SAAS,MAAM,CAAC,CAAiB;YAC/B,IAAI,QAAQ;gBAAE,OAAO;YACrB,QAAQ,GAAG,IAAI,CAAC;YAChB,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC;QAED,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/D,GAAG,CACD,GAAG,EACH,mCAAmC,KAAK,CAAC,OAAO,UAAU,KAAK,CAAC,IAAI,CAAC,MAAM,eAAe,kBAAkB,cAAc,KAAK,CAAC,UAAU,IAAI,QAAQ,GAAG,CAC1J,CAAC;QACF,IAAI,KAAmB,CAAC;QACxB,IAAI,CAAC;YACH,mEAAmE;YACnE,gCAAgC;YAChC,+DAA+D;YAC/D,yDAAyD;YACzD,qEAAqE;YACrE,kEAAkE;YAClE,yDAAyD;YACzD,EAAE;YACF,kEAAkE;YAClE,kEAAkE;YAClE,+DAA+D;YAC/D,2DAA2D;YAC3D,8DAA8D;YAC9D,+DAA+D;YAC/D,yDAAyD;YACzD,kEAAkE;YAClE,KAAK,GAAG,OAAO,CACb,UAAU,EACV;gBACE,OAAO;gBACP,SAAS;gBACT,KAAK,CAAC,OAAO;gBACb,WAAW;gBACX,KAAK,CAAC,IAAI;gBACV,QAAQ;gBACR,+DAA+D;gBAC/D,eAAe;gBACf,kBAAkB;gBAClB,kDAAkD;gBAClD,WAAW;gBACX,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;aACpC,EACD,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CACtC,CAAC;QACJ,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,CAAC,GAAG,EAAE,gBAAgB,GAAG,EAAE,CAAC,CAAC;YACnC,MAAM,CAAC;gBACL,EAAE,EAAE,KAAK;gBACT,gBAAgB,EAAE,qDAAqD,GAAG,8BAA8B;gBACxG,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC/B,CAAC,CAAC;YACH,OAAO;QACT,CAAC;QAED,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACzC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,IAAI,CAAC,GAAG,EAAE,sBAAsB,SAAS,cAAc,CAAC,CAAC;YACzD,IAAI,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;YACD,MAAM,CAAC;gBACL,EAAE,EAAE,KAAK;gBACT,gBAAgB,EAAE,8BAA8B,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,oBAAoB;gBAChG,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC/B,CAAC,CAAC;QACL,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAQ,EAAE,EAAE;YAC7B,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,MAAM,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACzC,MAAM,CAAC;gBACL,EAAE,EAAE,KAAK;gBACT,gBAAgB,EAAE,sCAAsC,CAAC,CAAC,OAAO,EAAE;gBACnE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC/B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;YACvB,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;YACtC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;gBACnD,IAAI,CAAC,GAAG,EAAE,mBAAmB,IAAI,eAAe,UAAU,iBAAiB,IAAI,GAAG,CAAC,CAAC;gBACpF,MAAM,CAAC;oBACL,EAAE,EAAE,KAAK;oBACT,gBAAgB,EAAE,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC;oBAChD,UAAU;iBACX,CAAC,CAAC;gBACH,OAAO;YACT,CAAC;YACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACtC,GAAG,CAAC,GAAG,EAAE,kBAAkB,IAAI,CAAC,MAAM,eAAe,UAAU,EAAE,CAAC,CAAC;YACnE,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,eAAe,CAAC;IACjD,+BAA+B;IAC/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;QAC9D,iEAAiE;QACjE,iEAAiE;QACjE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAC/B,MAAM,CAAC,GAAI,CAA6B,CAAC,IAAI,CAAC;oBAC9C,IAAI,OAAO,CAAC,KAAK,QAAQ;wBAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,MAAM,CAAC;QACvC,CAAC;QACD,4DAA4D;QAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,IAA2C,CAAC;QAChE,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,UAAU,GAAmB;gBACjC,IAAI,CAAC,yBAAyB;gBAC9B,IAAI,CAAC,qBAAqB;aAC3B,CAAC;YACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;gBAC3B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;oBAAE,OAAO,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QACD,sDAAsD;QACtD,MAAM,UAAU,GAAmB;YACjC,MAAM,CAAC,MAAM;YACb,MAAM,CAAC,KAAK;YACZ,MAAM,CAAC,IAAI;YACX,MAAM,CAAC,OAAO;YACb,MAAM,CAAC,MAA8C,EAAE,IAAI;YAC3D,MAAM,CAAC,MAA8C,EAAE,MAAM;SAC/D,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC3B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;IACD,uEAAuE;IACvE,+DAA+D;IAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACjC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAA4B,CAAC;YACxD,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC;YACvD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;gBAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,mBAAmB;QACrB,CAAC;IACH,CAAC;IACD,uEAAuE;IACvE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4DAA4D;AAC5D,SAAS,kBAAkB,CAAC,IAAmB,EAAE,IAAY;IAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACjC,IAAI,KAAK,CAAC,QAAQ,CAAC,2BAA2B,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7E,OAAO,4FAA4F,CAAC;IACtG,CAAC;IACD,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3D,OAAO,8EAA8E,CAAC;IACxF,CAAC;IACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;QACjB,OAAO,8DAA8D,CAAC;IACxE,CAAC;IACD,OAAO,mCAAmC,IAAI,IAAI,GAAG,IAAI,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}