experimental-agent 0.2.1 → 0.3.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 (71) hide show
  1. package/README.md +55 -254
  2. package/dist/adapter-BigchkkI.d.mts +201 -0
  3. package/dist/adapter-BigchkkI.d.ts +201 -0
  4. package/dist/chunk-BFFNCESS.mjs +302 -0
  5. package/dist/chunk-C4VSUEY2.mjs +72 -0
  6. package/dist/chunk-DOD4MC5D.mjs +196 -0
  7. package/dist/chunk-ELWIUJUK.mjs +96 -0
  8. package/dist/chunk-GKASMIBR.mjs +50 -0
  9. package/dist/chunk-JO3JDCH5.mjs +107 -0
  10. package/dist/chunk-MSWINCCM.mjs +128 -0
  11. package/dist/chunk-RT72C52I.mjs +324 -0
  12. package/dist/chunk-ZUFJJYC4.mjs +150 -0
  13. package/dist/{handler-FRUPZ4LX.mjs → docker-QPCLWLYR.mjs} +3 -4
  14. package/dist/entry-BmQ8FO-5.d.ts +36 -0
  15. package/dist/entry-CZd9aAwn.d.mts +36 -0
  16. package/dist/index.d.mts +415 -18
  17. package/dist/index.d.ts +415 -18
  18. package/dist/index.js +3036 -5494
  19. package/dist/index.mjs +3264 -1142
  20. package/dist/lifecycle-workflow-steps.d.mts +5 -0
  21. package/dist/lifecycle-workflow-steps.d.ts +5 -0
  22. package/dist/lifecycle-workflow-steps.js +263 -0
  23. package/dist/lifecycle-workflow-steps.mjs +9 -0
  24. package/dist/lifecycle-workflow.d.mts +6 -6
  25. package/dist/lifecycle-workflow.d.ts +6 -6
  26. package/dist/lifecycle-workflow.js +192 -905
  27. package/dist/lifecycle-workflow.mjs +3 -1
  28. package/dist/local-KJ3BSIFJ.mjs +8 -0
  29. package/dist/next/loader.d.mts +1 -0
  30. package/dist/next/loader.d.ts +1 -0
  31. package/dist/next/loader.js +44 -18
  32. package/dist/next/loader.mjs +18 -13
  33. package/dist/next.js +32 -9
  34. package/dist/next.mjs +6 -4
  35. package/dist/{process-manager-JDUJDYGU.mjs → process-manager-WQHAIVRB.mjs} +1 -1
  36. package/dist/sandbox.d.mts +6 -0
  37. package/dist/sandbox.d.ts +6 -0
  38. package/dist/sandbox.js +1070 -0
  39. package/dist/sandbox.mjs +19 -0
  40. package/dist/steps-BnkRQKlc.d.ts +173 -0
  41. package/dist/steps-u-mGDbP_.d.mts +173 -0
  42. package/dist/storage.d.mts +11 -0
  43. package/dist/storage.d.ts +11 -0
  44. package/dist/storage.js +234 -0
  45. package/dist/storage.mjs +12 -0
  46. package/dist/vercel-QZ6INPMV.mjs +11 -0
  47. package/package.json +26 -5
  48. package/dist/agent-workflow.d.mts +0 -30
  49. package/dist/agent-workflow.d.ts +0 -30
  50. package/dist/agent-workflow.js +0 -5433
  51. package/dist/agent-workflow.mjs +0 -14
  52. package/dist/chunk-AML2VCQS.mjs +0 -1287
  53. package/dist/chunk-FQ67QZOI.mjs +0 -75
  54. package/dist/chunk-NO7RHGTH.mjs +0 -2367
  55. package/dist/chunk-NXDVNJRS.mjs +0 -106
  56. package/dist/chunk-OZZVS6L5.mjs +0 -139
  57. package/dist/chunk-QRWGDFFY.mjs +0 -75
  58. package/dist/chunk-SJVFFE5D.mjs +0 -402
  59. package/dist/chunk-TAXLUVIC.mjs +0 -1
  60. package/dist/chunk-TGNVXSMX.mjs +0 -399
  61. package/dist/chunk-YRYXN7W4.mjs +0 -48
  62. package/dist/chunk-ZIAHPXOJ.mjs +0 -595
  63. package/dist/client-BKA7XBGW.mjs +0 -15
  64. package/dist/client-CEeSFGva.d.mts +0 -2376
  65. package/dist/client-CEeSFGva.d.ts +0 -2376
  66. package/dist/docker-FB2MJTHJ.mjs +0 -12
  67. package/dist/local-fs-handlers-SYOCKTPN.mjs +0 -447
  68. package/dist/sandbox-UENKQV3T.mjs +0 -21
  69. package/dist/storage-LSDMRW73.mjs +0 -20
  70. package/dist/vercel-SD3JTECG.mjs +0 -20
  71. package/dist/vercel-sdk-I6A4MVAN.mjs +0 -8
@@ -0,0 +1,19 @@
1
+ import {
2
+ vercelSandbox
3
+ } from "./chunk-RT72C52I.mjs";
4
+ import {
5
+ dockerSandbox
6
+ } from "./chunk-BFFNCESS.mjs";
7
+ import {
8
+ localSandbox
9
+ } from "./chunk-ZUFJJYC4.mjs";
10
+ import "./chunk-GKASMIBR.mjs";
11
+ import "./chunk-JO3JDCH5.mjs";
12
+ import "./chunk-MSWINCCM.mjs";
13
+ import "./chunk-BJTO5JO5.mjs";
14
+ export {
15
+ dockerSandbox,
16
+ localSandbox,
17
+ vercelSandbox
18
+ };
19
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K
@@ -0,0 +1,173 @@
1
+ import * as _vercel_sandbox from '@vercel/sandbox';
2
+ import { e as Storage, a as Sandbox } from './adapter-BigchkkI.js';
3
+
4
+ type LogLevel = "info" | "warn" | "error" | "silent";
5
+ type LogContext = {
6
+ sessionId?: string;
7
+ messageId?: string;
8
+ sandboxId?: string;
9
+ [key: string]: unknown;
10
+ };
11
+ type LoggingConfig = {
12
+ level?: LogLevel;
13
+ /**
14
+ * Top-level label for all log lines.
15
+ * @default "agent"
16
+ * @example "my-app" → [my-app:default:workflow]
17
+ */
18
+ prefix?: string;
19
+ name?: string;
20
+ };
21
+ declare class Logger {
22
+ readonly subsystem: string;
23
+ private readonly config;
24
+ private readonly context;
25
+ constructor({ subsystem, config, context, }: {
26
+ subsystem: string;
27
+ config: LoggingConfig;
28
+ context?: LogContext;
29
+ });
30
+ child({ subsystem, context, }: {
31
+ subsystem?: string;
32
+ context?: LogContext;
33
+ }): Logger;
34
+ withContext(context: LogContext): Logger;
35
+ info(message: string, data?: Record<string, unknown>): void;
36
+ warn(message: string, data?: Record<string, unknown>): void;
37
+ error(message: string, data?: Record<string, unknown>): void;
38
+ /**
39
+ * Returns a function that, when called, logs the elapsed time at info level.
40
+ * Pass `logOnStart: true` to also log when the timer begins.
41
+ *
42
+ * @example
43
+ * const done = log.time("sandbox setup", { sandboxId }, { logOnStart: true });
44
+ * await setup();
45
+ * done(); // start: [agent:default:sandbox] sandbox setup { sandboxId: '...' }
46
+ * // end: [agent:default:sandbox] sandbox setup { sandboxId: '...', durationMs: 123 }
47
+ */
48
+ time(message: string, data?: Record<string, unknown>, opts?: {
49
+ logOnStart?: boolean;
50
+ }): (endData?: Record<string, unknown>) => void;
51
+ }
52
+
53
+ type ExecResult = {
54
+ commandId: string;
55
+ logs: () => AsyncIterable<{
56
+ stream: "stdout" | "stderr";
57
+ data: string;
58
+ }>;
59
+ result: Promise<{
60
+ stdout: string;
61
+ stderr: string;
62
+ exitCode: number;
63
+ }>;
64
+ };
65
+ type UploadableFile = {
66
+ path: string;
67
+ content: string | Buffer;
68
+ };
69
+ interface SandboxInstance {
70
+ readonly cwd: string;
71
+ exec(opts: {
72
+ command: string;
73
+ args?: string[];
74
+ cwd?: string;
75
+ env?: Record<string, string>;
76
+ sudo?: boolean;
77
+ signal?: AbortSignal;
78
+ }): Promise<ExecResult>;
79
+ readFile(opts: {
80
+ path: string;
81
+ signal?: AbortSignal;
82
+ }): Promise<Buffer | null>;
83
+ writeFiles(opts: {
84
+ files: UploadableFile[];
85
+ destPath: string;
86
+ signal?: AbortSignal;
87
+ }): Promise<void>;
88
+ getDomain(opts: {
89
+ port: number;
90
+ signal?: AbortSignal;
91
+ }): Promise<string>;
92
+ updateNetworkPolicy(opts: {
93
+ policy: _vercel_sandbox.NetworkPolicy;
94
+ signal?: AbortSignal;
95
+ }): Promise<_vercel_sandbox.NetworkPolicy>;
96
+ start(opts?: {
97
+ signal?: AbortSignal;
98
+ }): Promise<void>;
99
+ stop(opts?: {
100
+ signal?: AbortSignal;
101
+ }): Promise<void>;
102
+ snapshot(opts?: {
103
+ signal?: AbortSignal;
104
+ }): Promise<{
105
+ snapshotId: string;
106
+ }>;
107
+ kill(opts: {
108
+ commandId: string;
109
+ signal?: AbortSignal;
110
+ }): Promise<void>;
111
+ getStatus(opts?: {
112
+ signal?: AbortSignal;
113
+ }): Promise<"pending" | "running" | "stopping" | "stopped" | "failed">;
114
+ }
115
+ type SandboxAgentRef = {
116
+ name: string;
117
+ storage: Storage;
118
+ options: {
119
+ logging?: Omit<LoggingConfig, "name">;
120
+ };
121
+ };
122
+ type WithConfig<TConfig> = unknown extends TConfig ? {
123
+ config?: Record<string, unknown>;
124
+ } : Partial<TConfig> extends TConfig ? {
125
+ config?: TConfig;
126
+ } : {
127
+ config: TConfig;
128
+ };
129
+ type SandboxSetupFields = Omit<Sandbox["setup"], "binding" | "completedAt">;
130
+ type SandboxBinding<TType extends string = string, TConfig = any, TMetadata = any> = {
131
+ type: TType;
132
+ create(opts: {
133
+ cwd: string;
134
+ agent: SandboxAgentRef;
135
+ setup: SandboxSetupFields & {
136
+ run?: (sandbox: SandboxInstance) => Promise<void>;
137
+ } & WithConfig<TConfig>;
138
+ record?: Sandbox;
139
+ signal?: AbortSignal;
140
+ log: Logger;
141
+ }): Promise<{
142
+ instance: SandboxInstance;
143
+ metadata: TMetadata;
144
+ }>;
145
+ connect(opts: {
146
+ agent: SandboxAgentRef;
147
+ metadata: TMetadata;
148
+ signal?: AbortSignal;
149
+ log: Logger;
150
+ }): Promise<SandboxInstance>;
151
+ };
152
+
153
+ type LifecycleStepResult = {
154
+ action: "continue";
155
+ nextPollMs: number;
156
+ } | {
157
+ action: "exit";
158
+ reason: "sandboxId_changed" | "idle" | "timeout" | "not_found";
159
+ };
160
+ type LifecycleConfig = {
161
+ pollIntervalMs?: number;
162
+ stopAfterInactiveMs?: number;
163
+ snapshotBeforeTimeoutMs?: number;
164
+ };
165
+ type LifecycleInput = {
166
+ agent: SandboxAgentRef;
167
+ sandboxId: string;
168
+ vercelSandboxId: string;
169
+ config?: LifecycleConfig;
170
+ };
171
+ declare function checkAndSnapshotStep(input: LifecycleInput): Promise<Error | LifecycleStepResult>;
172
+
173
+ export { type ExecResult as E, type LifecycleInput as L, type SandboxBinding as S, type UploadableFile as U, type WithConfig as W, type SandboxSetupFields as a, type SandboxInstance as b, type LoggingConfig as c, type SandboxAgentRef as d, type LifecycleConfig as e, type LifecycleStepResult as f, checkAndSnapshotStep as g };
@@ -0,0 +1,173 @@
1
+ import * as _vercel_sandbox from '@vercel/sandbox';
2
+ import { e as Storage, a as Sandbox } from './adapter-BigchkkI.mjs';
3
+
4
+ type LogLevel = "info" | "warn" | "error" | "silent";
5
+ type LogContext = {
6
+ sessionId?: string;
7
+ messageId?: string;
8
+ sandboxId?: string;
9
+ [key: string]: unknown;
10
+ };
11
+ type LoggingConfig = {
12
+ level?: LogLevel;
13
+ /**
14
+ * Top-level label for all log lines.
15
+ * @default "agent"
16
+ * @example "my-app" → [my-app:default:workflow]
17
+ */
18
+ prefix?: string;
19
+ name?: string;
20
+ };
21
+ declare class Logger {
22
+ readonly subsystem: string;
23
+ private readonly config;
24
+ private readonly context;
25
+ constructor({ subsystem, config, context, }: {
26
+ subsystem: string;
27
+ config: LoggingConfig;
28
+ context?: LogContext;
29
+ });
30
+ child({ subsystem, context, }: {
31
+ subsystem?: string;
32
+ context?: LogContext;
33
+ }): Logger;
34
+ withContext(context: LogContext): Logger;
35
+ info(message: string, data?: Record<string, unknown>): void;
36
+ warn(message: string, data?: Record<string, unknown>): void;
37
+ error(message: string, data?: Record<string, unknown>): void;
38
+ /**
39
+ * Returns a function that, when called, logs the elapsed time at info level.
40
+ * Pass `logOnStart: true` to also log when the timer begins.
41
+ *
42
+ * @example
43
+ * const done = log.time("sandbox setup", { sandboxId }, { logOnStart: true });
44
+ * await setup();
45
+ * done(); // start: [agent:default:sandbox] sandbox setup { sandboxId: '...' }
46
+ * // end: [agent:default:sandbox] sandbox setup { sandboxId: '...', durationMs: 123 }
47
+ */
48
+ time(message: string, data?: Record<string, unknown>, opts?: {
49
+ logOnStart?: boolean;
50
+ }): (endData?: Record<string, unknown>) => void;
51
+ }
52
+
53
+ type ExecResult = {
54
+ commandId: string;
55
+ logs: () => AsyncIterable<{
56
+ stream: "stdout" | "stderr";
57
+ data: string;
58
+ }>;
59
+ result: Promise<{
60
+ stdout: string;
61
+ stderr: string;
62
+ exitCode: number;
63
+ }>;
64
+ };
65
+ type UploadableFile = {
66
+ path: string;
67
+ content: string | Buffer;
68
+ };
69
+ interface SandboxInstance {
70
+ readonly cwd: string;
71
+ exec(opts: {
72
+ command: string;
73
+ args?: string[];
74
+ cwd?: string;
75
+ env?: Record<string, string>;
76
+ sudo?: boolean;
77
+ signal?: AbortSignal;
78
+ }): Promise<ExecResult>;
79
+ readFile(opts: {
80
+ path: string;
81
+ signal?: AbortSignal;
82
+ }): Promise<Buffer | null>;
83
+ writeFiles(opts: {
84
+ files: UploadableFile[];
85
+ destPath: string;
86
+ signal?: AbortSignal;
87
+ }): Promise<void>;
88
+ getDomain(opts: {
89
+ port: number;
90
+ signal?: AbortSignal;
91
+ }): Promise<string>;
92
+ updateNetworkPolicy(opts: {
93
+ policy: _vercel_sandbox.NetworkPolicy;
94
+ signal?: AbortSignal;
95
+ }): Promise<_vercel_sandbox.NetworkPolicy>;
96
+ start(opts?: {
97
+ signal?: AbortSignal;
98
+ }): Promise<void>;
99
+ stop(opts?: {
100
+ signal?: AbortSignal;
101
+ }): Promise<void>;
102
+ snapshot(opts?: {
103
+ signal?: AbortSignal;
104
+ }): Promise<{
105
+ snapshotId: string;
106
+ }>;
107
+ kill(opts: {
108
+ commandId: string;
109
+ signal?: AbortSignal;
110
+ }): Promise<void>;
111
+ getStatus(opts?: {
112
+ signal?: AbortSignal;
113
+ }): Promise<"pending" | "running" | "stopping" | "stopped" | "failed">;
114
+ }
115
+ type SandboxAgentRef = {
116
+ name: string;
117
+ storage: Storage;
118
+ options: {
119
+ logging?: Omit<LoggingConfig, "name">;
120
+ };
121
+ };
122
+ type WithConfig<TConfig> = unknown extends TConfig ? {
123
+ config?: Record<string, unknown>;
124
+ } : Partial<TConfig> extends TConfig ? {
125
+ config?: TConfig;
126
+ } : {
127
+ config: TConfig;
128
+ };
129
+ type SandboxSetupFields = Omit<Sandbox["setup"], "binding" | "completedAt">;
130
+ type SandboxBinding<TType extends string = string, TConfig = any, TMetadata = any> = {
131
+ type: TType;
132
+ create(opts: {
133
+ cwd: string;
134
+ agent: SandboxAgentRef;
135
+ setup: SandboxSetupFields & {
136
+ run?: (sandbox: SandboxInstance) => Promise<void>;
137
+ } & WithConfig<TConfig>;
138
+ record?: Sandbox;
139
+ signal?: AbortSignal;
140
+ log: Logger;
141
+ }): Promise<{
142
+ instance: SandboxInstance;
143
+ metadata: TMetadata;
144
+ }>;
145
+ connect(opts: {
146
+ agent: SandboxAgentRef;
147
+ metadata: TMetadata;
148
+ signal?: AbortSignal;
149
+ log: Logger;
150
+ }): Promise<SandboxInstance>;
151
+ };
152
+
153
+ type LifecycleStepResult = {
154
+ action: "continue";
155
+ nextPollMs: number;
156
+ } | {
157
+ action: "exit";
158
+ reason: "sandboxId_changed" | "idle" | "timeout" | "not_found";
159
+ };
160
+ type LifecycleConfig = {
161
+ pollIntervalMs?: number;
162
+ stopAfterInactiveMs?: number;
163
+ snapshotBeforeTimeoutMs?: number;
164
+ };
165
+ type LifecycleInput = {
166
+ agent: SandboxAgentRef;
167
+ sandboxId: string;
168
+ vercelSandboxId: string;
169
+ config?: LifecycleConfig;
170
+ };
171
+ declare function checkAndSnapshotStep(input: LifecycleInput): Promise<Error | LifecycleStepResult>;
172
+
173
+ export { type ExecResult as E, type LifecycleInput as L, type SandboxBinding as S, type UploadableFile as U, type WithConfig as W, type SandboxSetupFields as a, type SandboxInstance as b, type LoggingConfig as c, type SandboxAgentRef as d, type LifecycleConfig as e, type LifecycleStepResult as f, checkAndSnapshotStep as g };
@@ -0,0 +1,11 @@
1
+ import { S as StorageHandlers } from './adapter-BigchkkI.mjs';
2
+ export { M as Message, P as Part, a as Sandbox, b as Session, c as Setup, d as SetupSnapshot, e as Storage, f as StorageCall, g as StorageStep, h as StorageStepFunction, t as toStorage } from './adapter-BigchkkI.mjs';
3
+ import '@workflow/serde';
4
+ import '@vercel/sandbox';
5
+ import 'ai';
6
+
7
+ declare function localStorage(opts?: {
8
+ dir?: string;
9
+ }): StorageHandlers;
10
+
11
+ export { StorageHandlers, localStorage };
@@ -0,0 +1,11 @@
1
+ import { S as StorageHandlers } from './adapter-BigchkkI.js';
2
+ export { M as Message, P as Part, a as Sandbox, b as Session, c as Setup, d as SetupSnapshot, e as Storage, f as StorageCall, g as StorageStep, h as StorageStepFunction, t as toStorage } from './adapter-BigchkkI.js';
3
+ import '@workflow/serde';
4
+ import '@vercel/sandbox';
5
+ import 'ai';
6
+
7
+ declare function localStorage(opts?: {
8
+ dir?: string;
9
+ }): StorageHandlers;
10
+
11
+ export { StorageHandlers, localStorage };
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/storage/entry.ts
31
+ var entry_exports = {};
32
+ __export(entry_exports, {
33
+ StorageStep: () => StorageStep,
34
+ localStorage: () => localStorage,
35
+ toStorage: () => toStorage
36
+ });
37
+ module.exports = __toCommonJS(entry_exports);
38
+
39
+ // src/storage/adapter.ts
40
+ var import_serde = require("@workflow/serde");
41
+ var StorageStep = class _StorageStep {
42
+ event;
43
+ constructor(event) {
44
+ this.event = event;
45
+ }
46
+ static [import_serde.WORKFLOW_SERIALIZE](instance) {
47
+ return { event: instance.event };
48
+ }
49
+ static [import_serde.WORKFLOW_DESERIALIZE](data) {
50
+ return new _StorageStep(data.event);
51
+ }
52
+ // biome-ignore lint/suspicious/noExplicitAny: safe dispatch — event.method selects the matching handler
53
+ on(handlers) {
54
+ return handlers[this.event.method](this.event);
55
+ }
56
+ };
57
+ function isStepFunction(h) {
58
+ return typeof h === "function";
59
+ }
60
+ function fromStepFunction(fn) {
61
+ return {
62
+ session: {
63
+ get: (id) => fn(new StorageStep({ method: "session.get", id })),
64
+ set: (id, value) => fn(new StorageStep({ method: "session.set", id, value })),
65
+ update: (id, updates) => fn(new StorageStep({ method: "session.update", id, updates }))
66
+ },
67
+ message: {
68
+ get: (id) => fn(new StorageStep({ method: "message.get", id })),
69
+ set: (id, value) => fn(new StorageStep({ method: "message.set", id, value })),
70
+ update: (id, updates) => fn(new StorageStep({ method: "message.update", id, updates })),
71
+ listBySession: (sessionId) => fn(new StorageStep({ method: "message.listBySession", sessionId }))
72
+ },
73
+ part: {
74
+ get: (id) => fn(new StorageStep({ method: "part.get", id })),
75
+ set: (id, value) => fn(new StorageStep({ method: "part.set", id, value })),
76
+ listBySession: (sessionId) => fn(new StorageStep({ method: "part.listBySession", sessionId }))
77
+ },
78
+ sandbox: {
79
+ get: (id) => fn(new StorageStep({ method: "sandbox.get", id })),
80
+ set: (id, value) => fn(new StorageStep({ method: "sandbox.set", id, value })),
81
+ update: (id, updates) => fn(new StorageStep({ method: "sandbox.update", id, updates }))
82
+ },
83
+ setup: {
84
+ get: (id) => fn(new StorageStep({ method: "setup.get", id })),
85
+ set: (id, value) => fn(new StorageStep({ method: "setup.set", id, value }))
86
+ }
87
+ };
88
+ }
89
+ function fromHandlers(h) {
90
+ return {
91
+ session: {
92
+ get: (id) => h["session.get"]({ id }),
93
+ set: (id, value) => h["session.set"]({ id, value }),
94
+ update: (id, updates) => h["session.update"]({ id, updates })
95
+ },
96
+ message: {
97
+ get: (id) => h["message.get"]({ id }),
98
+ set: (id, value) => h["message.set"]({ id, value }),
99
+ update: (id, updates) => h["message.update"]({ id, updates }),
100
+ listBySession: (sessionId) => h["message.listBySession"]({ sessionId })
101
+ },
102
+ part: {
103
+ get: (id) => h["part.get"]({ id }),
104
+ set: (id, value) => h["part.set"]({ id, value }),
105
+ listBySession: (sessionId) => h["part.listBySession"]({ sessionId })
106
+ },
107
+ sandbox: {
108
+ get: (id) => h["sandbox.get"]({ id }),
109
+ set: (id, value) => h["sandbox.set"]({ id, value }),
110
+ update: (id, updates) => h["sandbox.update"]({ id, updates })
111
+ },
112
+ setup: {
113
+ get: (id) => h["setup.get"]({ id }),
114
+ set: (id, value) => h["setup.set"]({ id, value })
115
+ }
116
+ };
117
+ }
118
+ function toStorage(h) {
119
+ return isStepFunction(h) ? fromStepFunction(h) : fromHandlers(h);
120
+ }
121
+
122
+ // src/storage/bindings/local.ts
123
+ var _fs;
124
+ var _path;
125
+ async function fs() {
126
+ if (!_fs) {
127
+ _fs = await import("fs/promises");
128
+ }
129
+ return _fs;
130
+ }
131
+ async function path() {
132
+ if (!_path) {
133
+ _path = await import("path");
134
+ }
135
+ return _path;
136
+ }
137
+ function createStore(dir) {
138
+ const filePath = async (key) => (await path()).join(dir, `${key}.json`);
139
+ return {
140
+ async get(key) {
141
+ try {
142
+ const data = await (await fs()).readFile(await filePath(key), "utf-8");
143
+ return JSON.parse(data);
144
+ } catch {
145
+ return null;
146
+ }
147
+ },
148
+ async set(key, value) {
149
+ const p = await filePath(key);
150
+ const { mkdir, writeFile } = await fs();
151
+ const { dirname } = await path();
152
+ await mkdir(dirname(p), { recursive: true });
153
+ await writeFile(p, JSON.stringify(value, null, 2));
154
+ },
155
+ async update(key, updates) {
156
+ const p = await filePath(key);
157
+ const { readFile, mkdir, writeFile } = await fs();
158
+ const { dirname } = await path();
159
+ let existing;
160
+ try {
161
+ const data = await readFile(p, "utf-8");
162
+ existing = JSON.parse(data);
163
+ } catch {
164
+ throw new Error(`Not found: ${key}`);
165
+ }
166
+ const updated = { ...existing, ...updates };
167
+ await mkdir(dirname(p), { recursive: true });
168
+ await writeFile(p, JSON.stringify(updated, null, 2));
169
+ return updated;
170
+ }
171
+ };
172
+ }
173
+ async function readAllFromDir(dir) {
174
+ const { readdir, readFile } = await fs();
175
+ const { join } = await path();
176
+ let files;
177
+ try {
178
+ files = await readdir(dir);
179
+ } catch {
180
+ return [];
181
+ }
182
+ const result = [];
183
+ for (const file of files) {
184
+ if (!file.endsWith(".json")) {
185
+ continue;
186
+ }
187
+ try {
188
+ const data = await readFile(join(dir, file), "utf-8");
189
+ result.push(JSON.parse(data));
190
+ } catch {
191
+ }
192
+ }
193
+ return result;
194
+ }
195
+ function localStorage(opts) {
196
+ const dir = opts?.dir ?? ".agent";
197
+ const sessionStore = createStore(`${dir}/session`);
198
+ const messageStore = createStore(`${dir}/message`);
199
+ const partStore = createStore(`${dir}/part`);
200
+ const sandboxStore = createStore(`${dir}/sandbox`);
201
+ const setupStore = createStore(`${dir}/setup`);
202
+ const messageDir = `${dir}/message`;
203
+ const partDir = `${dir}/part`;
204
+ return {
205
+ "session.get": ({ id }) => sessionStore.get(id),
206
+ "session.set": ({ id, value }) => sessionStore.set(id, value),
207
+ "session.update": ({ id, updates }) => sessionStore.update(id, updates),
208
+ "message.get": ({ id }) => messageStore.get(id),
209
+ "message.set": ({ id, value }) => messageStore.set(id, value),
210
+ "message.update": ({ id, updates }) => messageStore.update(id, updates),
211
+ "message.listBySession": async ({ sessionId }) => {
212
+ const all = await readAllFromDir(messageDir);
213
+ return all.filter((m) => m.sessionId === sessionId);
214
+ },
215
+ "part.get": ({ id }) => partStore.get(id),
216
+ "part.set": ({ id, value }) => partStore.set(id, value),
217
+ "part.listBySession": async ({ sessionId }) => {
218
+ const all = await readAllFromDir(partDir);
219
+ return all.filter((p) => p.sessionId === sessionId);
220
+ },
221
+ "sandbox.get": ({ id }) => sandboxStore.get(id),
222
+ "sandbox.set": ({ id, value }) => sandboxStore.set(id, value),
223
+ "sandbox.update": ({ id, updates }) => sandboxStore.update(id, updates),
224
+ "setup.get": ({ id }) => setupStore.get(id),
225
+ "setup.set": ({ id, value }) => setupStore.set(id, value)
226
+ };
227
+ }
228
+ // Annotate the CommonJS export names for ESM import in node:
229
+ 0 && (module.exports = {
230
+ StorageStep,
231
+ localStorage,
232
+ toStorage
233
+ });
234
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3N0b3JhZ2UvZW50cnkudHMiLCAiLi4vc3JjL3N0b3JhZ2UvYWRhcHRlci50cyIsICIuLi9zcmMvc3RvcmFnZS9iaW5kaW5ncy9sb2NhbC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiZXhwb3J0IHR5cGUgeyBTdG9yYWdlLCBTdG9yYWdlQ2FsbCwgU3RvcmFnZUhhbmRsZXJzLCBTdG9yYWdlU3RlcEZ1bmN0aW9uIH0gZnJvbSBcIi4vYWRhcHRlclwiO1xuZXhwb3J0IHsgU3RvcmFnZVN0ZXAsIHRvU3RvcmFnZSB9IGZyb20gXCIuL2FkYXB0ZXJcIjtcbmV4cG9ydCB7IGxvY2FsU3RvcmFnZSB9IGZyb20gXCIuL2JpbmRpbmdzL2xvY2FsXCI7XG5leHBvcnQgdHlwZSB7IE1lc3NhZ2UsIFBhcnQsIFNhbmRib3gsIFNlc3Npb24sIFNldHVwLCBTZXR1cFNuYXBzaG90IH0gZnJvbSBcIi4vdHlwZXNcIjtcbiIsICJpbXBvcnQgeyBXT1JLRkxPV19ERVNFUklBTElaRSwgV09SS0ZMT1dfU0VSSUFMSVpFIH0gZnJvbSBcIkB3b3JrZmxvdy9zZXJkZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXNzYWdlLCBQYXJ0LCBTYW5kYm94LCBTZXNzaW9uLCBTZXR1cCB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8vIFx1MjUwMFx1MjUwMFx1MjUwMCBTdG9yYWdlSGFuZGxlcnMgKHB1YmxpYywgZmxhdCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCB0eXBlIFN0b3JhZ2VIYW5kbGVycyA9IHtcbiAgXCJzZXNzaW9uLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTZXNzaW9uIHwgbnVsbD47XG4gIFwic2Vzc2lvbi5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTZXNzaW9uIH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInNlc3Npb24udXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxTZXNzaW9uPjtcbiAgfSk6IFByb21pc2U8U2Vzc2lvbj47XG5cbiAgXCJtZXNzYWdlLmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNZXNzYWdlIHwgbnVsbD47XG4gIFwibWVzc2FnZS5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBNZXNzYWdlIH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcIm1lc3NhZ2UudXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxNZXNzYWdlPjtcbiAgfSk6IFByb21pc2U8TWVzc2FnZT47XG4gIFwibWVzc2FnZS5saXN0QnlTZXNzaW9uXCIocDogeyBzZXNzaW9uSWQ6IHN0cmluZyB9KTogUHJvbWlzZTxNZXNzYWdlW10+O1xuXG4gIFwicGFydC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8UGFydCB8IG51bGw+O1xuICBcInBhcnQuc2V0XCIocDogeyBpZDogc3RyaW5nOyB2YWx1ZTogUGFydCB9KTogUHJvbWlzZTx2b2lkPjtcbiAgXCJwYXJ0Lmxpc3RCeVNlc3Npb25cIihwOiB7IHNlc3Npb25JZDogc3RyaW5nIH0pOiBQcm9taXNlPFBhcnRbXT47XG5cbiAgXCJzYW5kYm94LmdldFwiKHA6IHsgaWQ6IHN0cmluZyB9KTogUHJvbWlzZTxTYW5kYm94IHwgbnVsbD47XG4gIFwic2FuZGJveC5zZXRcIihwOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBTYW5kYm94IH0pOiBQcm9taXNlPHZvaWQ+O1xuICBcInNhbmRib3gudXBkYXRlXCIocDoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdXBkYXRlczogUGFydGlhbDxTYW5kYm94PjtcbiAgfSk6IFByb21pc2U8U2FuZGJveD47XG5cbiAgXCJzZXR1cC5nZXRcIihwOiB7IGlkOiBzdHJpbmcgfSk6IFByb21pc2U8U2V0dXAgfCBudWxsPjtcbiAgXCJzZXR1cC5zZXRcIihwOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB2YWx1ZTogU2V0dXA7XG4gIH0pOiBQcm9taXNlPHZvaWQ+O1xufTtcblxuLy8gXHUyNTAwXHUyNTAwXHUyNTAwIFN0b3JhZ2VDYWxsIChkZXJpdmVkIGZyb20gU3RvcmFnZUhhbmRsZXJzKSBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcdTI1MDBcblxuZXhwb3J0IHR5cGUgU3RvcmFnZUNhbGwgPSB7XG4gIFtLIGluIGtleW9mIFN0b3JhZ2VIYW5kbGVyc106IHsgbWV0aG9kOiBLIH0gJiBQYXJhbWV0ZXJzPFxuICAgIFN0b3JhZ2VIYW5kbGVyc1tLXVxuICA+WzBdO1xufVtrZXlvZiBTdG9yYWdlSGFuZGxlcnNdO1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZVN0ZXAgKHNlcmlhbGl6YWJsZSBhY3Jvc3Mgd29ya2Zsb3cgYm91bmRhcnkpIFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFx1MjUwMFxuXG5leHBvcnQgY2xhc3MgU3RvcmFnZVN0ZXAge1xuICBldmVudDogU3RvcmFnZUNhbGw7XG5cbiAgY29uc3RydWN0b3IoZXZlbnQ6IFN0b3JhZ2VDYWxsKSB7XG4gICAgdGhpcy5ldmVudCA9IGV2ZW50O1xuICB9XG5cbiAgc3RhdGljIFtXT1JLRkxPV19TRVJJQUxJWkVdKGluc3RhbmNlOiBTdG9yYWdlU3RlcCkge1xuICAgIHJldHVybiB7IGV2ZW50OiBpbnN0YW5jZS5ldmVudCB9O1xuICB9XG5cbiAgc3RhdGljIFtXT1JLRkxPV19ERVNFUklBTElaRV0oZGF0YTogeyBldmVudDogU3RvcmFnZUNhbGwgfSkge1xuICAgIHJldHVybiBuZXcgU3RvcmFnZVN0ZXAoZGF0YS5ldmVudCk7XG4gIH1cblxuICAvLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IHNhZmUgZGlzcGF0Y2ggXHUyMDE0IGV2ZW50Lm1ldGhvZCBzZWxlY3RzIHRoZSBtYXRjaGluZyBoYW5kbGVyXG4gIG9uKGhhbmRsZXJzOiBTdG9yYWdlSGFuZGxlcnMpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIGJpb21lLWlnbm9yZSBsaW50L3N1c3BpY2lvdXMvbm9FeHBsaWNpdEFueTogc2VlIGFib3ZlXG4gICAgcmV0dXJuIChoYW5kbGVyc1t0aGlzLmV2ZW50Lm1ldGhvZF0gYXMgYW55KSh0aGlzLmV2ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIEEgc2luZ2xlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBhbGwgc3RvcmFnZSBvcGVyYXRpb25zLiBJbnRlbmRlZCB0byBiZVxuICogbWFya2VkIHdpdGggYFwidXNlIHN0ZXBcImAgc28gdGhhdCBpdHMgYm9keSAoYW5kIE5vZGUuanMtZGVwZW5kZW50XG4gKiBpbXBvcnRzIGxpa2UgZGF0YWJhc2UgY2xpZW50cykgaXMgZXh0cmFjdGVkIGJ5IHRoZSB3b3JrZmxvdyBidW5kbGVyXG4gKiBhbmQgcnVucyBzZXJ2ZXItc2lkZS5cbiAqXG4gKiBUaGUgc3RlcCByZWNlaXZlcyBhIGBTdG9yYWdlU3RlcGAgaW5zdGFuY2UgKHNlcmlhbGl6YWJsZSB2aWFcbiAqIGBAd29ya2Zsb3cvc2VyZGVgKSBhbmQgc2hvdWxkIGNhbGwgYHN0ZXAuaGFuZGxlKHsgLi4uIH0pYCB3aXRoIGFcbiAqIGBTdG9yYWdlSGFuZGxlcnNgIG1hcC5cbiAqL1xuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBzdGVwIGZ1bmN0aW9uIGlzIGEgZGlzcGF0Y2hlcjsgdHlwZSBzYWZldHkgaXMgYXQgdGhlIGhhbmRsZXJzIGxldmVsXG5leHBvcnQgdHlwZSBTdG9yYWdlU3RlcEZ1bmN0aW9uID0gKHN0b3JlOiBTdG9yYWdlU3RlcCkgPT4gUHJvbWlzZTxhbnk+O1xuXG4vLyBcdTI1MDBcdTI1MDBcdTI1MDAgU3RvcmFnZSAoaW50ZXJuYWwsIG5lc3RlZCkgXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXHUyNTAwXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RvcmFnZSB7XG4gIHNlc3Npb246IHtcbiAgICBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPFNlc3Npb24gfCBudWxsPjtcbiAgICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBTZXNzaW9uKTogUHJvbWlzZTx2b2lkPjtcbiAgICB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8U2Vzc2lvbj4pOiBQcm9taXNlPFNlc3Npb24+O1xuICB9O1xuICBtZXNzYWdlOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlIHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogTWVzc2FnZSk6IFByb21pc2U8dm9pZD47XG4gICAgdXBkYXRlKGtleTogc3RyaW5nLCB1cGRhdGVzOiBQYXJ0aWFsPE1lc3NhZ2U+KTogUHJvbWlzZTxNZXNzYWdlPjtcbiAgICBsaXN0QnlTZXNzaW9uKHNlc3Npb25JZDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlW10+O1xuICB9O1xuICBwYXJ0OiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxQYXJ0IHwgbnVsbD47XG4gICAgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogUGFydCk6IFByb21pc2U8dm9pZD47XG4gICAgbGlzdEJ5U2Vzc2lvbihzZXNzaW9uSWQ6IHN0cmluZyk6IFByb21pc2U8UGFydFtdPjtcbiAgfTtcbiAgc2FuZGJveDoge1xuICAgIGdldChrZXk6IHN0cmluZyk6IFByb21pc2U8U2FuZGJveCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFNhbmRib3gpOiBQcm9taXNlPHZvaWQ+O1xuICAgIHVwZGF0ZShrZXk6IHN0cmluZywgdXBkYXRlczogUGFydGlhbDxTYW5kYm94Pik6IFByb21pc2U8U2FuZGJveD47XG4gIH07XG4gIHNldHVwOiB7XG4gICAgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxTZXR1cCB8IG51bGw+O1xuICAgIHNldChrZXk6IHN0cmluZywgdmFsdWU6IFNldHVwKTogUHJvbWlzZTx2b2lkPjtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgU3RvcmFnZUlucHV0ID0gU3RvcmFnZUhhbmRsZXJzIHwgU3RvcmFnZVN0ZXBGdW5jdGlvbjtcblxuZnVuY3Rpb24gaXNTdGVwRnVuY3Rpb24oaDogU3RvcmFnZUlucHV0KTogaCBpcyBTdG9yYWdlU3RlcEZ1bmN0aW9uIHtcbiAgcmV0dXJuIHR5cGVvZiBoID09PSBcImZ1bmN0aW9uXCI7XG59XG5cbmZ1bmN0aW9uIGZyb21TdGVwRnVuY3Rpb24oZm46IFN0b3JhZ2VTdGVwRnVuY3Rpb24pOiBTdG9yYWdlIHtcbiAgcmV0dXJuIHtcbiAgICBzZXNzaW9uOiB7XG4gICAgICBnZXQ6IChpZCkgPT4gZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNlc3Npb24uZ2V0XCIsIGlkIH0pKSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNlc3Npb24uc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInNlc3Npb24udXBkYXRlXCIsIGlkLCB1cGRhdGVzIH0pKSxcbiAgICB9LFxuICAgIG1lc3NhZ2U6IHtcbiAgICAgIGdldDogKGlkKSA9PiBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS5zZXRcIiwgaWQsIHZhbHVlIH0pKSxcbiAgICAgIHVwZGF0ZTogKGlkLCB1cGRhdGVzKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwibWVzc2FnZS51cGRhdGVcIiwgaWQsIHVwZGF0ZXMgfSkpLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcIm1lc3NhZ2UubGlzdEJ5U2Vzc2lvblwiLCBzZXNzaW9uSWQgfSkpLFxuICAgIH0sXG4gICAgcGFydDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0LmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJwYXJ0LnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgbGlzdEJ5U2Vzc2lvbjogKHNlc3Npb25JZCkgPT5cbiAgICAgICAgZm4obmV3IFN0b3JhZ2VTdGVwKHsgbWV0aG9kOiBcInBhcnQubGlzdEJ5U2Vzc2lvblwiLCBzZXNzaW9uSWQgfSkpLFxuICAgIH0sXG4gICAgc2FuZGJveDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzYW5kYm94LmdldFwiLCBpZCB9KSksXG4gICAgICBzZXQ6IChpZCwgdmFsdWUpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzYW5kYm94LnNldFwiLCBpZCwgdmFsdWUgfSkpLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+XG4gICAgICAgIGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzYW5kYm94LnVwZGF0ZVwiLCBpZCwgdXBkYXRlcyB9KSksXG4gICAgfSxcbiAgICBzZXR1cDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGZuKG5ldyBTdG9yYWdlU3RlcCh7IG1ldGhvZDogXCJzZXR1cC5nZXRcIiwgaWQgfSkpLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PlxuICAgICAgICBmbihuZXcgU3RvcmFnZVN0ZXAoeyBtZXRob2Q6IFwic2V0dXAuc2V0XCIsIGlkLCB2YWx1ZSB9KSksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZnJvbUhhbmRsZXJzKGg6IFN0b3JhZ2VIYW5kbGVycyk6IFN0b3JhZ2Uge1xuICByZXR1cm4ge1xuICAgIHNlc3Npb246IHtcbiAgICAgIGdldDogKGlkKSA9PiBoW1wic2Vzc2lvbi5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNlc3Npb24uc2V0XCJdKHsgaWQsIHZhbHVlIH0pLFxuICAgICAgdXBkYXRlOiAoaWQsIHVwZGF0ZXMpID0+IGhbXCJzZXNzaW9uLnVwZGF0ZVwiXSh7IGlkLCB1cGRhdGVzIH0pLFxuICAgIH0sXG4gICAgbWVzc2FnZToge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJtZXNzYWdlLmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wibWVzc2FnZS5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT4gaFtcIm1lc3NhZ2UudXBkYXRlXCJdKHsgaWQsIHVwZGF0ZXMgfSksXG4gICAgICBsaXN0QnlTZXNzaW9uOiAoc2Vzc2lvbklkKSA9PiBoW1wibWVzc2FnZS5saXN0QnlTZXNzaW9uXCJdKHsgc2Vzc2lvbklkIH0pLFxuICAgIH0sXG4gICAgcGFydDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJwYXJ0LmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wicGFydC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICBsaXN0QnlTZXNzaW9uOiAoc2Vzc2lvbklkKSA9PiBoW1wicGFydC5saXN0QnlTZXNzaW9uXCJdKHsgc2Vzc2lvbklkIH0pLFxuICAgIH0sXG4gICAgc2FuZGJveDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJzYW5kYm94LmdldFwiXSh7IGlkIH0pLFxuICAgICAgc2V0OiAoaWQsIHZhbHVlKSA9PiBoW1wic2FuZGJveC5zZXRcIl0oeyBpZCwgdmFsdWUgfSksXG4gICAgICB1cGRhdGU6IChpZCwgdXBkYXRlcykgPT4gaFtcInNhbmRib3gudXBkYXRlXCJdKHsgaWQsIHVwZGF0ZXMgfSksXG4gICAgfSxcbiAgICBzZXR1cDoge1xuICAgICAgZ2V0OiAoaWQpID0+IGhbXCJzZXR1cC5nZXRcIl0oeyBpZCB9KSxcbiAgICAgIHNldDogKGlkLCB2YWx1ZSkgPT4gaFtcInNldHVwLnNldFwiXSh7IGlkLCB2YWx1ZSB9KSxcbiAgICB9LFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9TdG9yYWdlKGg6IFN0b3JhZ2VJbnB1dCk6IFN0b3JhZ2Uge1xuICByZXR1cm4gaXNTdGVwRnVuY3Rpb24oaCkgPyBmcm9tU3RlcEZ1bmN0aW9uKGgpIDogZnJvbUhhbmRsZXJzKGgpO1xufVxuIiwgImltcG9ydCB0eXBlIHtcbiAgTWVzc2FnZSxcbiAgUGFydCxcbiAgU2FuZGJveCxcbiAgU2Vzc2lvbixcbiAgU2V0dXAsXG59IGZyb20gXCIuLi90eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBTdG9yYWdlSGFuZGxlcnMgfSBmcm9tIFwiLi4vYWRhcHRlclwiO1xuXG5sZXQgX2ZzOiB0eXBlb2YgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKSB8IHVuZGVmaW5lZDtcbmxldCBfcGF0aDogdHlwZW9mIGltcG9ydChcIm5vZGU6cGF0aFwiKSB8IHVuZGVmaW5lZDtcblxuYXN5bmMgZnVuY3Rpb24gZnMoKSB7XG4gIGlmICghX2ZzKSB7XG4gICAgX2ZzID0gYXdhaXQgaW1wb3J0KFwibm9kZTpmcy9wcm9taXNlc1wiKTtcbiAgfVxuICByZXR1cm4gX2ZzO1xufVxuYXN5bmMgZnVuY3Rpb24gcGF0aCgpIHtcbiAgaWYgKCFfcGF0aCkge1xuICAgIF9wYXRoID0gYXdhaXQgaW1wb3J0KFwibm9kZTpwYXRoXCIpO1xuICB9XG4gIHJldHVybiBfcGF0aDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RvcmU8VD4oZGlyOiBzdHJpbmcpIHtcbiAgY29uc3QgZmlsZVBhdGggPSBhc3luYyAoa2V5OiBzdHJpbmcpID0+XG4gICAgKGF3YWl0IHBhdGgoKSkuam9pbihkaXIsIGAke2tleX0uanNvbmApO1xuXG4gIHJldHVybiB7XG4gICAgYXN5bmMgZ2V0KGtleTogc3RyaW5nKTogUHJvbWlzZTxUIHwgbnVsbD4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IChhd2FpdCBmcygpKS5yZWFkRmlsZShhd2FpdCBmaWxlUGF0aChrZXkpLCBcInV0Zi04XCIpO1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKSBhcyBUO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgc2V0KGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGZpbGVQYXRoKGtleSk7XG4gICAgICBjb25zdCB7IG1rZGlyLCB3cml0ZUZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gICAgICBjb25zdCB7IGRpcm5hbWUgfSA9IGF3YWl0IHBhdGgoKTtcbiAgICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUocCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgd3JpdGVGaWxlKHAsIEpTT04uc3RyaW5naWZ5KHZhbHVlLCBudWxsLCAyKSk7XG4gICAgfSxcbiAgICBhc3luYyB1cGRhdGUoa2V5OiBzdHJpbmcsIHVwZGF0ZXM6IFBhcnRpYWw8VD4pOiBQcm9taXNlPFQ+IHtcbiAgICAgIGNvbnN0IHAgPSBhd2FpdCBmaWxlUGF0aChrZXkpO1xuICAgICAgY29uc3QgeyByZWFkRmlsZSwgbWtkaXIsIHdyaXRlRmlsZSB9ID0gYXdhaXQgZnMoKTtcbiAgICAgIGNvbnN0IHsgZGlybmFtZSB9ID0gYXdhaXQgcGF0aCgpO1xuICAgICAgbGV0IGV4aXN0aW5nOiBUO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRGaWxlKHAsIFwidXRmLThcIik7XG4gICAgICAgIGV4aXN0aW5nID0gSlNPTi5wYXJzZShkYXRhKSBhcyBUO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTm90IGZvdW5kOiAke2tleX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVwZGF0ZWQgPSB7IC4uLmV4aXN0aW5nLCAuLi51cGRhdGVzIH07XG4gICAgICBhd2FpdCBta2RpcihkaXJuYW1lKHApLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShwLCBKU09OLnN0cmluZ2lmeSh1cGRhdGVkLCBudWxsLCAyKSk7XG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9LFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsRnJvbURpcjxUPihkaXI6IHN0cmluZyk6IFByb21pc2U8VFtdPiB7XG4gIGNvbnN0IHsgcmVhZGRpciwgcmVhZEZpbGUgfSA9IGF3YWl0IGZzKCk7XG4gIGNvbnN0IHsgam9pbiB9ID0gYXdhaXQgcGF0aCgpO1xuICBsZXQgZmlsZXM6IHN0cmluZ1tdO1xuICB0cnkge1xuICAgIGZpbGVzID0gYXdhaXQgcmVhZGRpcihkaXIpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgY29uc3QgcmVzdWx0OiBUW10gPSBbXTtcbiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlYWRGaWxlKGpvaW4oZGlyLCBmaWxlKSwgXCJ1dGYtOFwiKTtcbiAgICAgIHJlc3VsdC5wdXNoKEpTT04ucGFyc2UoZGF0YSkgYXMgVCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBza2lwIGNvcnJ1cHQgZmlsZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvY2FsU3RvcmFnZShvcHRzPzogeyBkaXI/OiBzdHJpbmcgfSk6IFN0b3JhZ2VIYW5kbGVycyB7XG4gIGNvbnN0IGRpciA9IG9wdHM/LmRpciA/PyBcIi5hZ2VudFwiO1xuXG4gIGNvbnN0IHNlc3Npb25TdG9yZSA9IGNyZWF0ZVN0b3JlPFNlc3Npb24+KGAke2Rpcn0vc2Vzc2lvbmApO1xuICBjb25zdCBtZXNzYWdlU3RvcmUgPSBjcmVhdGVTdG9yZTxNZXNzYWdlPihgJHtkaXJ9L21lc3NhZ2VgKTtcbiAgY29uc3QgcGFydFN0b3JlID0gY3JlYXRlU3RvcmU8UGFydD4oYCR7ZGlyfS9wYXJ0YCk7XG4gIGNvbnN0IHNhbmRib3hTdG9yZSA9IGNyZWF0ZVN0b3JlPFNhbmRib3g+KGAke2Rpcn0vc2FuZGJveGApO1xuICBjb25zdCBzZXR1cFN0b3JlID0gY3JlYXRlU3RvcmU8U2V0dXA+KGAke2Rpcn0vc2V0dXBgKTtcbiAgY29uc3QgbWVzc2FnZURpciA9IGAke2Rpcn0vbWVzc2FnZWA7XG4gIGNvbnN0IHBhcnREaXIgPSBgJHtkaXJ9L3BhcnRgO1xuXG4gIHJldHVybiB7XG4gICAgXCJzZXNzaW9uLmdldFwiOiAoeyBpZCB9KSA9PiBzZXNzaW9uU3RvcmUuZ2V0KGlkKSxcbiAgICBcInNlc3Npb24uc2V0XCI6ICh7IGlkLCB2YWx1ZSB9KSA9PiBzZXNzaW9uU3RvcmUuc2V0KGlkLCB2YWx1ZSksXG4gICAgXCJzZXNzaW9uLnVwZGF0ZVwiOiAoeyBpZCwgdXBkYXRlcyB9KSA9PiBzZXNzaW9uU3RvcmUudXBkYXRlKGlkLCB1cGRhdGVzKSxcblxuICAgIFwibWVzc2FnZS5nZXRcIjogKHsgaWQgfSkgPT4gbWVzc2FnZVN0b3JlLmdldChpZCksXG4gICAgXCJtZXNzYWdlLnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT4gbWVzc2FnZVN0b3JlLnNldChpZCwgdmFsdWUpLFxuICAgIFwibWVzc2FnZS51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT4gbWVzc2FnZVN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcyksXG4gICAgXCJtZXNzYWdlLmxpc3RCeVNlc3Npb25cIjogYXN5bmMgKHsgc2Vzc2lvbklkIH0pID0+IHtcbiAgICAgIGNvbnN0IGFsbCA9IGF3YWl0IHJlYWRBbGxGcm9tRGlyPE1lc3NhZ2U+KG1lc3NhZ2VEaXIpO1xuICAgICAgcmV0dXJuIGFsbC5maWx0ZXIoKG0pID0+IG0uc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgIH0sXG5cbiAgICBcInBhcnQuZ2V0XCI6ICh7IGlkIH0pID0+IHBhcnRTdG9yZS5nZXQoaWQpLFxuICAgIFwicGFydC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IHBhcnRTdG9yZS5zZXQoaWQsIHZhbHVlKSxcbiAgICBcInBhcnQubGlzdEJ5U2Vzc2lvblwiOiBhc3luYyAoeyBzZXNzaW9uSWQgfSkgPT4ge1xuICAgICAgY29uc3QgYWxsID0gYXdhaXQgcmVhZEFsbEZyb21EaXI8UGFydD4ocGFydERpcik7XG4gICAgICByZXR1cm4gYWxsLmZpbHRlcigocCkgPT4gcC5zZXNzaW9uSWQgPT09IHNlc3Npb25JZCk7XG4gICAgfSxcblxuICAgIFwic2FuZGJveC5nZXRcIjogKHsgaWQgfSkgPT4gc2FuZGJveFN0b3JlLmdldChpZCksXG4gICAgXCJzYW5kYm94LnNldFwiOiAoeyBpZCwgdmFsdWUgfSkgPT4gc2FuZGJveFN0b3JlLnNldChpZCwgdmFsdWUpLFxuICAgIFwic2FuZGJveC51cGRhdGVcIjogKHsgaWQsIHVwZGF0ZXMgfSkgPT4gc2FuZGJveFN0b3JlLnVwZGF0ZShpZCwgdXBkYXRlcyksXG5cbiAgICBcInNldHVwLmdldFwiOiAoeyBpZCB9KSA9PiBzZXR1cFN0b3JlLmdldChpZCksXG4gICAgXCJzZXR1cC5zZXRcIjogKHsgaWQsIHZhbHVlIH0pID0+IHNldHVwU3RvcmUuc2V0KGlkLCB2YWx1ZSksXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUEsbUJBQXlEO0FBaURsRCxJQUFNLGNBQU4sTUFBTSxhQUFZO0FBQUEsRUFDdkI7QUFBQSxFQUVBLFlBQVksT0FBb0I7QUFDOUIsU0FBSyxRQUFRO0FBQUEsRUFDZjtBQUFBLEVBRUEsUUFBUSwrQkFBa0IsRUFBRSxVQUF1QjtBQUNqRCxXQUFPLEVBQUUsT0FBTyxTQUFTLE1BQU07QUFBQSxFQUNqQztBQUFBLEVBRUEsUUFBUSxpQ0FBb0IsRUFBRSxNQUE4QjtBQUMxRCxXQUFPLElBQUksYUFBWSxLQUFLLEtBQUs7QUFBQSxFQUNuQztBQUFBO0FBQUEsRUFHQSxHQUFHLFVBQXlDO0FBRTFDLFdBQVEsU0FBUyxLQUFLLE1BQU0sTUFBTSxFQUFVLEtBQUssS0FBSztBQUFBLEVBQ3hEO0FBQ0Y7QUErQ0EsU0FBUyxlQUFlLEdBQTJDO0FBQ2pFLFNBQU8sT0FBTyxNQUFNO0FBQ3RCO0FBRUEsU0FBUyxpQkFBaUIsSUFBa0M7QUFDMUQsU0FBTztBQUFBLElBQ0wsU0FBUztBQUFBLE1BQ1AsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxRQUFRLGVBQWUsR0FBRyxDQUFDLENBQUM7QUFBQSxNQUM5RCxLQUFLLENB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
@@ -0,0 +1,12 @@
1
+ import {
2
+ StorageStep,
3
+ localStorage,
4
+ toStorage
5
+ } from "./chunk-DOD4MC5D.mjs";
6
+ import "./chunk-BJTO5JO5.mjs";
7
+ export {
8
+ StorageStep,
9
+ localStorage,
10
+ toStorage
11
+ };
12
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFtdLAogICJzb3VyY2VzQ29udGVudCI6IFtdLAogICJtYXBwaW5ncyI6ICIiLAogICJuYW1lcyI6IFtdCn0K