@codeworksh/plugin 0.0.1-dev.20260922103030

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 (93) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +111 -0
  3. package/error-ClDISWlT.d.mts +11 -0
  4. package/event-rIZpnOTo.d.mts +895 -0
  5. package/event.d.mts +2 -0
  6. package/event.mjs +125 -0
  7. package/event.mjs.map +1 -0
  8. package/filesystem-Cp-KapCE.d.mts +142 -0
  9. package/ids-CHjmAdTc.d.mts +43 -0
  10. package/ids.d.mts +2 -0
  11. package/ids.mjs +48 -0
  12. package/ids.mjs.map +1 -0
  13. package/index.d.mts +3 -0
  14. package/index.mjs +3 -0
  15. package/io-BYs7hbiY.d.mts +497 -0
  16. package/location-D4hAfuXF.d.mts +61 -0
  17. package/location.d.mts +2 -0
  18. package/location.mjs +48 -0
  19. package/location.mjs.map +1 -0
  20. package/package.json +200 -0
  21. package/plugin/prompt.d.mts +2 -0
  22. package/plugin/prompt.mjs +7 -0
  23. package/plugin/prompt.mjs.map +1 -0
  24. package/plugin/tool.d.mts +2 -0
  25. package/plugin/tool.mjs +29 -0
  26. package/plugin/tool.mjs.map +1 -0
  27. package/plugin-DbJEpY3M.d.mts +140 -0
  28. package/plugin-lorpq7Oi.mjs +41 -0
  29. package/plugin-lorpq7Oi.mjs.map +1 -0
  30. package/plugin.d.mts +4 -0
  31. package/plugin.mjs +4 -0
  32. package/posix.d.mts +6 -0
  33. package/posix.mjs +8 -0
  34. package/posix.mjs.map +1 -0
  35. package/project-CLGsIFD-.d.mts +21 -0
  36. package/project.d.mts +2 -0
  37. package/project.mjs +22 -0
  38. package/project.mjs.map +1 -0
  39. package/prompt-BcpagjGh.d.mts +10 -0
  40. package/repo.d.mts +42 -0
  41. package/repo.mjs +46 -0
  42. package/repo.mjs.map +1 -0
  43. package/rolldown-runtime-D7D4PA-g.mjs +13 -0
  44. package/sandbox/driver.d.mts +2 -0
  45. package/sandbox/driver.mjs +63 -0
  46. package/sandbox/driver.mjs.map +1 -0
  47. package/sandbox/error.d.mts +7 -0
  48. package/sandbox/error.mjs +15 -0
  49. package/sandbox/error.mjs.map +1 -0
  50. package/sandbox/errors.d.mts +2 -0
  51. package/sandbox/errors.mjs +160 -0
  52. package/sandbox/errors.mjs.map +1 -0
  53. package/sandbox/filesystem.d.mts +2 -0
  54. package/sandbox/filesystem.mjs +142 -0
  55. package/sandbox/filesystem.mjs.map +1 -0
  56. package/sandbox/instance.d.mts +2 -0
  57. package/sandbox/instance.mjs +144 -0
  58. package/sandbox/instance.mjs.map +1 -0
  59. package/sandbox/io.d.mts +2 -0
  60. package/sandbox/io.mjs +127 -0
  61. package/sandbox/io.mjs.map +1 -0
  62. package/sandbox/resource.d.mts +28 -0
  63. package/sandbox/resource.mjs +29 -0
  64. package/sandbox/resource.mjs.map +1 -0
  65. package/sandbox/shell.d.mts +2 -0
  66. package/sandbox/shell.mjs +93 -0
  67. package/sandbox/shell.mjs.map +1 -0
  68. package/sandbox.d.mts +17 -0
  69. package/sandbox.mjs +39 -0
  70. package/sandbox.mjs.map +1 -0
  71. package/schema.d.mts +91 -0
  72. package/schema.mjs +105 -0
  73. package/schema.mjs.map +1 -0
  74. package/settings-CYL6yyDD.d.mts +193 -0
  75. package/settings.d.mts +2 -0
  76. package/settings.mjs +102 -0
  77. package/settings.mjs.map +1 -0
  78. package/shell-CZ6Y4lNU.d.mts +109 -0
  79. package/space-CR-9UxdT.d.mts +25 -0
  80. package/space.d.mts +2 -0
  81. package/space.mjs +33 -0
  82. package/space.mjs.map +1 -0
  83. package/tool/error.d.mts +2 -0
  84. package/tool/error.mjs +11 -0
  85. package/tool/error.mjs.map +1 -0
  86. package/tool/progress.d.mts +2 -0
  87. package/tool/progress.mjs +11 -0
  88. package/tool/progress.mjs.map +1 -0
  89. package/tool-BoVqkYvL.d.mts +287 -0
  90. package/tool-DuYBgiJf.d.mts +142 -0
  91. package/tool.d.mts +2 -0
  92. package/tool.mjs +71 -0
  93. package/tool.mjs.map +1 -0
@@ -0,0 +1,497 @@
1
+ import { c as filesystem_d_exports, s as Service } from "./filesystem-Cp-KapCE.mjs";
2
+ import { i as Shell$1 } from "./shell-CZ6Y4lNU.mjs";
3
+ import { Context, Effect, Layer, Option, Schema } from "effect";
4
+ declare namespace instance_d_exports {
5
+ export { ID, Info, Kind, Ownership, PersistedError, instance_d_exports as SandboxInstance, Status, Usage, fromColumn, fromField, isMountable, mountable, toColumn, toField };
6
+ }
7
+ /**
8
+ * A Sandbox instance is a **durable filesystem namespace** plus whatever compute
9
+ * acts on it — a device in Unix terms, which exists whether or not anything has
10
+ * it mounted. `Sandbox.Controller` is the only thing that creates,
11
+ * stops, or destroys one; this module is just its identity and state model.
12
+ *
13
+ * The application ID is deliberately separate from the driver's own resource
14
+ * locator: callers never parse a Vercel name or a Daytona ID, driver formats may
15
+ * change, and a destroyed resource must stay identifiable in Project/Session
16
+ * history. A missing resource is never recreated under an existing ID — a new
17
+ * resource is a new namespace and therefore a new ID.
18
+ */
19
+ declare const ID: Schema.brand<Schema.String, "SandboxInstance.ID"> & {
20
+ /**
21
+ * The host. Reserved, and never written to a column — see {@link toColumn}.
22
+ * It exists at runtime so nothing has to branch on "is this the host": it is
23
+ * what identity reads, what logs show, and what the transport cache keys on.
24
+ */
25
+ local: string & import("effect/Brand").Brand<"SandboxInstance.ID">;
26
+ /** A fresh identity for a namespace nothing has named yet. */
27
+ create: () => string & import("effect/Brand").Brand<"SandboxInstance.ID">;
28
+ };
29
+ type ID = typeof ID.Type;
30
+ /**
31
+ * The storage boundary for namespace references, in one place.
32
+ *
33
+ * The host filesystem exists whether or not a row describes it, so it gets no
34
+ * row and `NULL` is the only spelling of it — the Unix analogue is exact, since
35
+ * `/` has no entry in the mount table you consult to find other mounts. That
36
+ * makes a session or directory writable before any namespace is registered (the
37
+ * foreign key is skipped on NULL), makes `SET sandbox_instance_id = NULL` a
38
+ * meaningful "revert to the host", and leaves the host impossible to tombstone,
39
+ * collect, or destroy, because there is nothing to point at.
40
+ *
41
+ * Two SQLite consequences ride on this and break correctness silently if missed:
42
+ * unique indexes treat NULLs as distinct, so every uniqueness constraint
43
+ * spanning a namespace column coalesces to `'local'`; and `= NULL` never
44
+ * matches, so namespace-scoped reads use `IS`.
45
+ */
46
+ declare const toColumn: (id: ID) => string | null;
47
+ declare const fromColumn: (value: string | null) => ID;
48
+ /**
49
+ * The same mapping for row models, whose optional columns are `Option` rather
50
+ * than `null`. Kept beside {@link toColumn} so the boundary stays one place:
51
+ * `toColumn`/`fromColumn` for SQL parameters, these for `Model.FieldOption`.
52
+ */
53
+ declare const toField: (id: ID) => Option.Option<ID>;
54
+ declare const fromField: (value: Option.Option<ID>) => ID;
55
+ /**
56
+ * Filesystem-class taxonomy, mirroring Unix: disk, tmpfs/procfs, NFS/CIFS.
57
+ * Stored on the row rather than derived from the registered driver, so reading
58
+ * an instance never depends on the registry — which matters most when a driver
59
+ * is *not* configured and you need to list or clean up its rows.
60
+ */
61
+ declare const Kind: Schema.Literals<readonly ["local", "virtual", "remote"]>;
62
+ type Kind = typeof Kind.Type;
63
+ declare const Ownership: Schema.Literals<readonly ["managed", "external"]>;
64
+ type Ownership = typeof Ownership.Type;
65
+ /**
66
+ * Lifecycle state, in ZFS pool vocabulary. This is the **last observed** value,
67
+ * not live driver truth: Daytona auto-stops and auto-archives, Vercel sandboxes
68
+ * expire on their own timeout, so drift is normal. `stateObservedAt` carries the
69
+ * freshness and `Controller.refresh` updates it without waking anything.
70
+ *
71
+ * `removed` and `unavail` are deliberately distinct. `removed` means we deleted
72
+ * it; `unavail` means the driver claims it is gone. A "not found" is frequently a
73
+ * misclassification — wrong region, wrong API url, a revoked key answering 404,
74
+ * eventual consistency right after create — so it must never be recorded as if we
75
+ * had destroyed the resource ourselves.
76
+ */
77
+ declare const Status: Schema.Literals<readonly ["provisioning", "online", "offline", "suspending", "removing", "removed", "unavail", "faulted"]>;
78
+ type Status = typeof Status.Type;
79
+ /**
80
+ * The statuses a `mount` may proceed from. This is the predicate every
81
+ * conditional write depends on, so it is enumerated once here rather than
82
+ * restated as prose at each call site.
83
+ *
84
+ * `offline` qualifies because mounting wakes.
85
+ * `faulted` qualifies because a fault is a *usability* condition, not an identity one — see {@link Status}.
86
+ *
87
+ * There is no `resuming`: it would exist to be observed by nothing, since
88
+ * mounting wakes, `offline` is already mountable, and waking is not destructive
89
+ * so it needs no claim. `suspending` and `removing` stay because they *are*
90
+ * compare-and-set claims, blocking a concurrent mount mid-destruction.
91
+ */
92
+ declare const mountable: ReadonlySet<Status>;
93
+ declare const isMountable: (status: Status) => boolean;
94
+ /**
95
+ * Reference state, derived — never stored. `busy` carries its `umount` meaning:
96
+ * something holds this and destruction must not proceed unforced.
97
+ *
98
+ * `pinned` is the kernel sense of the word: never reclaimable. It short-circuits
99
+ * counting entirely for instances that cannot be stopped or destroyed (the local
100
+ * host), which is what keeps them out of any future collector by construction
101
+ * rather than by an ownership check happening to catch them.
102
+ */
103
+ declare const Usage: Schema.Literals<readonly ["idle", "busy", "pinned"]>;
104
+ type Usage = typeof Usage.Type;
105
+ /** Sanitized driver failure. The only error shape allowed to be persisted or logged. */
106
+ declare const PersistedError: Schema.Struct<{
107
+ readonly name: Schema.String;
108
+ readonly message: Schema.String;
109
+ readonly code: Schema.optional<Schema.String>;
110
+ }>;
111
+ type PersistedError = typeof PersistedError.Type;
112
+ /** Durable metadata, safe to return and persist. Assembled by the control plane. */
113
+ interface Info {
114
+ readonly id: ID;
115
+ readonly driver: Name;
116
+ readonly kind: Kind;
117
+ readonly providerResourceId: Option.Option<string>;
118
+ readonly ownership: Ownership;
119
+ readonly status: Status;
120
+ readonly usage: Usage;
121
+ /** References held by *this* control plane. Process-local; see the transport cache. */
122
+ readonly refCount: number;
123
+ readonly providerStatus: Option.Option<string>;
124
+ readonly metadata: Readonly<Record<string, string>>;
125
+ readonly lastError: Option.Option<PersistedError>;
126
+ readonly createdAt: Date;
127
+ readonly updatedAt: Date;
128
+ readonly stateObservedAt: Date;
129
+ readonly lastMountedAt: Option.Option<Date>;
130
+ readonly lastUnmountedAt: Option.Option<Date>;
131
+ readonly lastUsedAt: Option.Option<Date>;
132
+ readonly removedAt: Option.Option<Date>;
133
+ }
134
+ declare namespace errors_d_exports {
135
+ export { Redactor, SandboxBusyError, SandboxCreateError, SandboxDestroyError, SandboxDriverLoadError, SandboxDriverLoadPhase, SandboxDriverNotRegisteredError, SandboxDriverRegistrationError, errors_d_exports as SandboxError, SandboxMountError, SandboxMustBeStoppedError, SandboxNotFoundError, SandboxProviderError, SandboxReadError, SandboxRefreshError, SandboxRegisterError, SandboxRemovedError, SandboxStopError, SandboxTransitionConflictError, SandboxUnavailError, SandboxUnsupportedError, SandboxWakeError, makeRedactor, providerError, providerErrorCause, providerErrorIsNotFound, sanitizeError };
136
+ }
137
+ declare const SandboxNotFoundError_base: Schema.Class<SandboxNotFoundError, Schema.TaggedStruct<"SandboxNotFoundError", {
138
+ readonly id: Schema.brand<Schema.String, "SandboxInstance.ID"> & {
139
+ local: string & import("effect/Brand").Brand<"SandboxInstance.ID">;
140
+ create: () => string & import("effect/Brand").Brand<"SandboxInstance.ID">;
141
+ };
142
+ }>, import("effect/Cause").YieldableError>;
143
+ /**
144
+ * Lifecycle errors are confined to the control plane. Once a mount succeeds,
145
+ * consumers continue to see only FileSystemError and ShellError.
146
+ */
147
+ declare class SandboxNotFoundError extends SandboxNotFoundError_base {}
148
+ declare const SandboxDriverNotRegisteredError_base: Schema.Class<SandboxDriverNotRegisteredError, Schema.TaggedStruct<"SandboxDriverNotRegisteredError", {
149
+ readonly driver: Schema.String;
150
+ readonly registered: Schema.optional<Schema.$Array<Schema.String>>;
151
+ }>, import("effect/Cause").YieldableError>;
152
+ declare class SandboxDriverNotRegisteredError extends SandboxDriverNotRegisteredError_base {}
153
+ declare const SandboxDriverRegistrationError_base: Schema.Class<SandboxDriverRegistrationError, Schema.TaggedStruct<"SandboxDriverRegistrationError", {
154
+ readonly driver: Schema.String;
155
+ readonly reason: Schema.String;
156
+ }>, import("effect/Cause").YieldableError>;
157
+ declare class SandboxDriverRegistrationError extends SandboxDriverRegistrationError_base {}
158
+ declare const SandboxDriverLoadPhase: Schema.Literals<readonly ["resolve", "import", "module", "api-version", "options", "factory", "registration"]>;
159
+ type SandboxDriverLoadPhase = typeof SandboxDriverLoadPhase.Type;
160
+ declare const SandboxDriverLoadError_base: Schema.Class<SandboxDriverLoadError, Schema.TaggedStruct<"SandboxDriverLoadError", {
161
+ readonly specifier: Schema.String;
162
+ readonly phase: Schema.Literals<readonly ["resolve", "import", "module", "api-version", "options", "factory", "registration"]>;
163
+ readonly driver: Schema.optional<Schema.String>;
164
+ readonly reason: Schema.String;
165
+ }>, import("effect/Cause").YieldableError>;
166
+ declare class SandboxDriverLoadError extends SandboxDriverLoadError_base {}
167
+ declare const SandboxBusyError_base: Schema.Class<SandboxBusyError, Schema.TaggedStruct<"SandboxBusyError", {
168
+ readonly id: Schema.brand<Schema.String, "SandboxInstance.ID"> & {
169
+ local: string & import("effect/Brand").Brand<"SandboxInstance.ID">;
170
+ create: () => string & import("effect/Brand").Brand<"SandboxInstance.ID">;
171
+ };
172
+ readonly refCount: Schema.Int;
173
+ }>, import("effect/Cause").YieldableError>;
174
+ declare class SandboxBusyError extends SandboxBusyError_base {}
175
+ declare const SandboxMustBeStoppedError_base: Schema.Class<SandboxMustBeStoppedError, Schema.TaggedStruct<"SandboxMustBeStoppedError", {
176
+ readonly id: Schema.brand<Schema.String, "SandboxInstance.ID"> & {
177
+ local: string & import("effect/Brand").Brand<"SandboxInstance.ID">;
178
+ create: () => string & import("effect/Brand").Brand<"SandboxInstance.ID">;
179
+ };
180
+ readonly status: Schema.Literals<readonly ["provisioning", "online", "offline", "suspending", "removing", "removed", "unavail", "faulted"]>;
181
+ }>, import("effect/Cause").YieldableError>;
182
+ declare class SandboxMustBeStoppedError extends SandboxMustBeStoppedError_base {}
183
+ declare const SandboxRemovedError_base: Schema.Class<SandboxRemovedError, Schema.TaggedStruct<"SandboxRemovedError", {
184
+ readonly id: Schema.brand<Schema.String, "SandboxInstance.ID"> & {
185
+ local: string & import("effect/Brand").Brand<"SandboxInstance.ID">;
186
+ create: () => string & import("effect/Brand").Brand<"SandboxInstance.ID">;
187
+ };
188
+ readonly removedAt: Schema.optional<Schema.DateTimeUtc>;
189
+ }>, import("effect/Cause").YieldableError>;
190
+ declare class SandboxRemovedError extends SandboxRemovedError_base {}
191
+ declare const SandboxUnavailError_base: Schema.Class<SandboxUnavailError, Schema.TaggedStruct<"SandboxUnavailError", {
192
+ readonly id: Schema.brand<Schema.String, "SandboxInstance.ID"> & {
193
+ local: string & import("effect/Brand").Brand<"SandboxInstance.ID">;
194
+ create: () => string & import("effect/Brand").Brand<"SandboxInstance.ID">;
195
+ };
196
+ readonly reason: Schema.String;
197
+ }>, import("effect/Cause").YieldableError>;
198
+ declare class SandboxUnavailError extends SandboxUnavailError_base {}
199
+ declare const SandboxUnsupportedError_base: Schema.Class<SandboxUnsupportedError, Schema.TaggedStruct<"SandboxUnsupportedError", {
200
+ readonly id: Schema.optional<Schema.brand<Schema.String, "SandboxInstance.ID"> & {
201
+ local: string & import("effect/Brand").Brand<"SandboxInstance.ID">;
202
+ create: () => string & import("effect/Brand").Brand<"SandboxInstance.ID">;
203
+ }>;
204
+ readonly driver: Schema.String;
205
+ readonly operation: Schema.String;
206
+ }>, import("effect/Cause").YieldableError>;
207
+ declare class SandboxUnsupportedError extends SandboxUnsupportedError_base {}
208
+ declare const SandboxTransitionConflictError_base: Schema.Class<SandboxTransitionConflictError, Schema.TaggedStruct<"SandboxTransitionConflictError", {
209
+ readonly id: Schema.brand<Schema.String, "SandboxInstance.ID"> & {
210
+ local: string & import("effect/Brand").Brand<"SandboxInstance.ID">;
211
+ create: () => string & import("effect/Brand").Brand<"SandboxInstance.ID">;
212
+ };
213
+ readonly expected: Schema.$Array<Schema.Literals<readonly ["provisioning", "online", "offline", "suspending", "removing", "removed", "unavail", "faulted"]>>;
214
+ readonly actual: Schema.Literals<readonly ["provisioning", "online", "offline", "suspending", "removing", "removed", "unavail", "faulted"]>;
215
+ }>, import("effect/Cause").YieldableError>;
216
+ declare class SandboxTransitionConflictError extends SandboxTransitionConflictError_base {}
217
+ declare const SandboxProviderError_base: Schema.Class<SandboxProviderError, Schema.TaggedStruct<"SandboxProviderError", {
218
+ readonly driver: Schema.String;
219
+ readonly operation: Schema.String;
220
+ readonly sanitized: Schema.Struct<{
221
+ readonly name: Schema.String;
222
+ readonly message: Schema.String;
223
+ readonly code: Schema.optional<Schema.String>;
224
+ }>;
225
+ }>, import("effect/Cause").YieldableError>;
226
+ /**
227
+ * A lifecycle failure safe to serialize, persist, or log.
228
+ *
229
+ * The raw SDK defect is deliberately absent from the schema. It is retained on
230
+ * a non-enumerable symbol by {@link providerError}, so Effect's default
231
+ * formatting and JSON serialization cannot expose credentials nested in it.
232
+ */
233
+ declare class SandboxProviderError extends SandboxProviderError_base {}
234
+ declare const providerErrorCause: (error: SandboxProviderError) => unknown;
235
+ declare const providerErrorIsNotFound: (error: SandboxProviderError) => boolean;
236
+ type Redactor = (value: string) => string;
237
+ /**
238
+ * Conservative text redaction shared by every driver sanitizer.
239
+ *
240
+ * Disclaimer: This can really leak. Its never safe
241
+ *
242
+ * Configured secrets are removed exactly. Common authorization/header and URL
243
+ * query shapes are masked as a second line of defence for values the caller did
244
+ * not explicitly seed.
245
+ *
246
+ * Note: add support for diff regex as needed.
247
+ */
248
+ declare const makeRedactor: (secrets?: Iterable<string>) => Redactor;
249
+ declare const sanitizeError: (cause: unknown, redact?: Redactor) => PersistedError;
250
+ declare const providerError: (input: {
251
+ readonly driver: string;
252
+ readonly operation: string;
253
+ readonly cause: unknown;
254
+ readonly redact?: Redactor;
255
+ readonly sanitize?: (cause: unknown, redact: Redactor) => PersistedError;
256
+ readonly notFound?: boolean;
257
+ }) => SandboxProviderError;
258
+ type SandboxMountError = SandboxNotFoundError | SandboxDriverNotRegisteredError | SandboxUnavailError | SandboxRemovedError | SandboxProviderError;
259
+ type SandboxCreateError = SandboxDriverNotRegisteredError | SandboxDriverRegistrationError | SandboxProviderError;
260
+ type SandboxRegisterError = SandboxDriverNotRegisteredError | SandboxDriverRegistrationError | SandboxUnsupportedError | SandboxProviderError;
261
+ type SandboxReadError = never;
262
+ type SandboxRefreshError = SandboxNotFoundError | SandboxDriverNotRegisteredError | SandboxUnavailError | SandboxUnsupportedError | SandboxProviderError;
263
+ type SandboxWakeError = SandboxRefreshError | SandboxRemovedError;
264
+ type SandboxStopError = SandboxWakeError | SandboxBusyError | SandboxTransitionConflictError;
265
+ type SandboxDestroyError = SandboxStopError | SandboxMustBeStoppedError;
266
+ declare namespace driver_d_exports {
267
+ export { AbsolutePath, ApiVersion, Capabilities, Definition, Driver, Module, ModuleDefinition, Name, Observed, Provisioned, Registered, Registration, RuntimeConfigBase, RuntimeInput, driver_d_exports as SandboxDriver, Source, apiVersion, driver, erase, defineModule as module, withSource };
268
+ }
269
+ /** Version of the loadable sandbox-driver module ABI. */
270
+ declare const apiVersion: 1;
271
+ type ApiVersion = typeof apiVersion;
272
+ /** Open driver identity. Adding a driver never extends a union in core. */
273
+ declare const Name: Schema.brand<Schema.String, "SandboxDriver.Name">;
274
+ type Name = typeof Name.Type;
275
+ /** A path whose coordinate system is the mounted namespace. */
276
+ declare const AbsolutePath: Schema.brand<Schema.String, "SandboxDriver.AbsolutePath">;
277
+ type AbsolutePath = typeof AbsolutePath.Type;
278
+ declare const RuntimeConfigBase: Schema.Struct<{
279
+ readonly defaultCwd: Schema.brand<Schema.String, "SandboxDriver.AbsolutePath">;
280
+ }>;
281
+ interface RuntimeConfigBase extends Schema.Schema.Type<typeof RuntimeConfigBase> {}
282
+ interface Capabilities {
283
+ readonly inspect: boolean;
284
+ readonly reattach: boolean;
285
+ readonly wake: boolean;
286
+ readonly stop: boolean;
287
+ readonly destroy: boolean;
288
+ readonly cancels: boolean;
289
+ }
290
+ interface Observed {
291
+ readonly status: Status;
292
+ readonly providerStatus?: string | undefined;
293
+ readonly metadata?: Readonly<Record<string, string>> | undefined;
294
+ }
295
+ interface Provisioned<RuntimeConfig extends RuntimeConfigBase> {
296
+ readonly providerResourceId?: string | undefined;
297
+ readonly providerStatus?: string | undefined;
298
+ readonly runtimeConfig: RuntimeConfig;
299
+ readonly metadata?: Readonly<Record<string, string>> | undefined;
300
+ }
301
+ interface RuntimeInput<RuntimeConfig extends RuntimeConfigBase> {
302
+ readonly id: ID;
303
+ readonly providerResourceId: Option.Option<string>;
304
+ readonly runtimeConfig: RuntimeConfig;
305
+ }
306
+ interface Driver<CreateConfig, RuntimeConfig extends RuntimeConfigBase> {
307
+ readonly name: Name;
308
+ readonly kind: Exclude<Kind, "local">;
309
+ readonly capabilities: Capabilities;
310
+ readonly createConfigCodec: Schema.Codec<CreateConfig, unknown>;
311
+ readonly runtimeConfigCodec: Schema.Codec<RuntimeConfig, unknown>;
312
+ readonly create: (input: {
313
+ readonly instanceId: ID;
314
+ readonly config: CreateConfig;
315
+ }) => Effect.Effect<Provisioned<RuntimeConfig>, SandboxProviderError>;
316
+ readonly runtimeConfigFor?: ((input: {
317
+ readonly providerResourceId: string;
318
+ readonly overrides?: Partial<RuntimeConfig> | undefined;
319
+ }) => Effect.Effect<RuntimeConfig, SandboxProviderError>) | undefined;
320
+ readonly attach: (input: RuntimeInput<RuntimeConfig>) => Layer.Layer<FileSystem | Shell, SandboxProviderError>;
321
+ readonly inspect?: (input: RuntimeInput<RuntimeConfig>) => Effect.Effect<Observed, SandboxProviderError>;
322
+ readonly wake?: (input: RuntimeInput<RuntimeConfig>) => Effect.Effect<Observed, SandboxProviderError>;
323
+ readonly stop?: (input: RuntimeInput<RuntimeConfig>) => Effect.Effect<Observed, SandboxProviderError>;
324
+ readonly destroy?: (input: RuntimeInput<RuntimeConfig>) => Effect.Effect<void, SandboxProviderError>;
325
+ }
326
+ type Definition<CreateConfig, RuntimeConfig extends RuntimeConfigBase> = Pick<Driver<CreateConfig, RuntimeConfig>, "name" | "createConfigCodec" | "runtimeConfigCodec">;
327
+ /** Registry-only erased shape. Driver authors construct it via {@link driver}. */
328
+ interface Registered {
329
+ readonly name: Name;
330
+ readonly kind: Exclude<Kind, "local">;
331
+ readonly capabilities: Capabilities;
332
+ readonly createConfigCodec: Schema.Codec<unknown, unknown>;
333
+ readonly runtimeConfigCodec: Schema.Codec<RuntimeConfigBase, unknown>;
334
+ readonly create: (input: {
335
+ readonly instanceId: ID;
336
+ readonly config: unknown;
337
+ }) => Effect.Effect<Provisioned<RuntimeConfigBase>, SandboxProviderError>;
338
+ readonly runtimeConfigFor?: ((input: {
339
+ readonly providerResourceId: string;
340
+ readonly overrides?: Readonly<Record<string, unknown>> | undefined;
341
+ }) => Effect.Effect<RuntimeConfigBase, SandboxProviderError>) | undefined;
342
+ readonly attach: (input: RuntimeInput<RuntimeConfigBase>) => Layer.Layer<FileSystem | Shell, SandboxProviderError>;
343
+ readonly inspect?: (input: RuntimeInput<RuntimeConfigBase>) => Effect.Effect<Observed, SandboxProviderError>;
344
+ readonly wake?: (input: RuntimeInput<RuntimeConfigBase>) => Effect.Effect<Observed, SandboxProviderError>;
345
+ readonly stop?: (input: RuntimeInput<RuntimeConfigBase>) => Effect.Effect<Observed, SandboxProviderError>;
346
+ readonly destroy?: (input: RuntimeInput<RuntimeConfigBase>) => Effect.Effect<void, SandboxProviderError>;
347
+ }
348
+ declare const erase: <CreateConfig, RuntimeConfig extends RuntimeConfigBase>(value: Driver<CreateConfig, RuntimeConfig>) => Registered;
349
+ type Source = "core" | "builtin" | "package" | "file";
350
+ interface Registration {
351
+ readonly registered: Registered;
352
+ readonly apiVersion: ApiVersion;
353
+ readonly source: Source;
354
+ }
355
+ interface Module<Options> {
356
+ readonly apiVersion: ApiVersion;
357
+ readonly name: Name;
358
+ readonly options: Schema.Codec<Options, unknown>;
359
+ readonly make: (options: Options) => Registration;
360
+ }
361
+ interface ModuleDefinition<Options> {
362
+ readonly apiVersion: ApiVersion;
363
+ readonly name: string | Name;
364
+ readonly options: Schema.Codec<Options, unknown>;
365
+ readonly make: (options: Options) => Registration;
366
+ }
367
+ /** Define the default export of a loadable sandbox package. */
368
+ declare const defineModule: <Options>(value: ModuleDefinition<Options>) => Module<Options>;
369
+ /** Construct a driver and its registry contribution. */
370
+ declare const driver: <CreateConfig, RuntimeConfig extends RuntimeConfigBase>(value: Driver<CreateConfig, RuntimeConfig>) => Driver<CreateConfig, RuntimeConfig> & Registration;
371
+ /** Attach trusted origin metadata without changing the driver implementation. */
372
+ declare const withSource: (registration: Registration, source: Source) => Registration;
373
+ declare namespace io_d_exports {
374
+ export { Current, FileSystem, Identity, Layer$1 as Layer, Provides, io_d_exports as SandboxIO, Shell, host, hostLayer, identityLayer, mount, remote, resolveMountCwd, virtual };
375
+ }
376
+ /**
377
+ * `SandboxIO` is a **mount**: a filesystem, a shell, and the identity and
378
+ * working directory they act on.
379
+ *
380
+ * It is the whole vocabulary a consumer needs. Project, Git, Copy, Location, and
381
+ * every tool ask for `SandboxIO.FileSystem`, `SandboxIO.Shell`, and
382
+ * `SandboxIO.Current` — never for a driver, an address, or a provider SDK — so
383
+ * a host directory, an in-memory VFS, and a remote microVM are interchangeable
384
+ * behind one contract.
385
+ *
386
+ * The mount neither creates nor destroys infrastructure. `SandboxInstance` is
387
+ * the durable namespace it acts on — a device, which exists whether or not
388
+ * anything has it mounted — and `Sandbox.Controller` is the only path that
389
+ * creates, stops, or destroys one.
390
+ */
391
+ /**
392
+ * The filesystem tag. Re-exported here so consumers import one namespace —
393
+ * Project, Git, Copy, and the runner ask for `SandboxIO.FileSystem`, never for
394
+ * the module that happens to define it. Code *inside* `sandbox/` keeps importing
395
+ * the tag directly, since `io.ts` is built on top of it.
396
+ */
397
+ declare const FileSystem: typeof Service;
398
+ type FileSystem = Service;
399
+ /** The shell tag. Re-exported here so consumers import one namespace. */
400
+ declare const Shell: typeof Shell$1;
401
+ type Shell = Shell$1;
402
+ /**
403
+ * What a mount sees: immutable identity, plus the working directory resolved for
404
+ * *this* mount.
405
+ *
406
+ * Nothing mutable belongs here. `status`, `usage`, and reference counts all
407
+ * change while a mount is open, so a mount-time snapshot of them would be wrong
408
+ * by construction — runtime code that needs live management state asks the
409
+ * control plane. The driver's own resource locator is likewise absent: consumers
410
+ * never parse a Vercel name or a Daytona id.
411
+ */
412
+ interface Identity {
413
+ readonly id: ID;
414
+ readonly driver: Name;
415
+ readonly kind: Kind;
416
+ /** Absolute, and always a path in *this* namespace. */
417
+ readonly cwd: string;
418
+ }
419
+ declare const Current_base: Context.ServiceClass<Current, "@codeworksh/plugin/sandbox/io/Current", Identity>;
420
+ /** Identity and working directory of the current mount. */
421
+ declare class Current extends Current_base {}
422
+ /** Everything a mount provides. */
423
+ type Provides = Current | Service | Shell$1;
424
+ /** A built mount. */
425
+ type Layer$1<E = never, RIn = never> = Layer.Layer<Provides, E, RIn>;
426
+ /**
427
+ * Resolve a mount's cwd without consulting ambient process state.
428
+ *
429
+ * The default is supplied by the namespace adapter:
430
+ * provider metadata remotely, `/` for a virtual filesystem, and `process.cwd()` for the host adapter.
431
+ * An explicit absolute cwd replaces it; a relative cwd is resolved inside it. The
432
+ * result is therefore always the one concrete absolute path `Current` requires.
433
+ *
434
+ * A non-absolute default throws rather than failing typed. It is the one
435
+ * defect-level guard in this module, and deliberately so:
436
+ * Adapters reading a value from a provider call this inside their own error channel,
437
+ * where the throw becomes their typed failure (see `EnvDaytona.mountCwd`).
438
+ */
439
+ declare const resolveMountCwd: (defaultCwd: string, cwd?: string) => string;
440
+ /**
441
+ * Bind a cwd-neutral transport to one mount.
442
+ *
443
+ * The transport underneath is shared between
444
+ * mounts and stays rooted at the namespace root, and everything directory-shaped
445
+ * happens here, once per mount. Two mounts of one namespace at different working
446
+ * directories therefore coexist without seeing or moving each other's.
447
+ *
448
+ * It consumes the same two tags it provides — the transport is supplied by the
449
+ * layer this is composed over, not by itself.
450
+ */
451
+ declare const mount: (identity: Identity) => Layer.Layer<Provides, never, Service | Shell$1>;
452
+ /**
453
+ * Just the identity tag, with no filesystem or shell beneath it. For consumers
454
+ * assembled from stubs — a test that runs `Project` over a fake filesystem still
455
+ * needs to know which namespace it is in.
456
+ */
457
+ declare const identityLayer: (identity: Identity) => Layer.Layer<Current, never, never>;
458
+ /** The host identity alone. See {@link identityLayer}. */
459
+ declare const hostLayer: (cwd: string) => Layer.Layer<Current, never, never>;
460
+ /**
461
+ * The host, rooted at `cwd`. Always `SandboxInstance.ID.local`: the working
462
+ * directory selects where relative paths resolve, it does not make a second host
463
+ * namespace — two mounts rooted at different directories still agree on absolute
464
+ * paths.
465
+ *
466
+ * The host coordinate is explicit so a caller cannot accidentally substitute ambient process
467
+ * state for the application or session directory it owns.
468
+ */
469
+ declare const host: (cwd: string) => Identity;
470
+ /**
471
+ * A VFS-backed namespace. The id is minted per call unless one is named, because
472
+ * building one of these builds a fresh VFS: N unnamed calls are N distinct
473
+ * namespaces, none of which outlives the process. A file-backed store is the
474
+ * exception — its file is the state, so whoever knows the file supplies the id
475
+ * it was registered under.
476
+ */
477
+ declare const virtual: (input: {
478
+ readonly driver: string;
479
+ readonly id?: ID;
480
+ readonly defaultCwd?: string;
481
+ readonly cwd?: string;
482
+ }) => Identity;
483
+ /**
484
+ * A provider-hosted namespace. The id is always supplied: a remote resource's
485
+ * durable identity is minted and recorded by whoever provisioned it, never
486
+ * derived here from the provider's own locator.
487
+ */
488
+ declare const remote: (input: {
489
+ readonly driver: string;
490
+ readonly id: ID;
491
+ /** Namespace-intrinsic default supplied or discovered by the driver. */
492
+ readonly defaultCwd: string;
493
+ readonly cwd?: string;
494
+ }) => Identity;
495
+ //#endregion
496
+ export { SandboxTransitionConflictError as $, apiVersion as A, SandboxDriverLoadError as B, Observed as C, RuntimeConfigBase as D, Registration as E, withSource as F, SandboxMustBeStoppedError as G, SandboxDriverNotRegisteredError as H, Redactor as I, SandboxReadError as J, SandboxNotFoundError as K, SandboxBusyError as L, driver as M, driver_d_exports as N, RuntimeInput as O, erase as P, SandboxStopError as Q, SandboxCreateError as R, Name as S, toField as St, Registered as T, SandboxDriverRegistrationError as U, SandboxDriverLoadPhase as V, SandboxMountError as W, SandboxRegisterError as X, SandboxRefreshError as Y, SandboxRemovedError as Z, Capabilities as _, fromField as _t, Provides as a, providerError as at, Module as b, mountable as bt, hostLayer as c, sanitizeError as ct, mount as d, Kind as dt, SandboxUnavailError as et, remote as f, Ownership as ft, ApiVersion as g, fromColumn as gt, AbsolutePath as h, Usage as ht, Layer$1 as i, makeRedactor as it, defineModule as j, Source as k, identityLayer as l, ID as lt, virtual as m, Status as mt, FileSystem as n, SandboxWakeError as nt, Shell as o, providerErrorCause as ot, resolveMountCwd as p, PersistedError as pt, SandboxProviderError as q, Identity as r, errors_d_exports as rt, host as s, providerErrorIsNotFound as st, Current as t, SandboxUnsupportedError as tt, io_d_exports as u, Info as ut, Definition as v, instance_d_exports as vt, Provisioned as w, ModuleDefinition as x, toColumn as xt, Driver as y, isMountable as yt, SandboxDestroyError as z };
497
+ //# sourceMappingURL=io-BYs7hbiY.d.mts.map
@@ -0,0 +1,61 @@
1
+ import { i as project_d_exports, n as Info$1 } from "./project-CLGsIFD-.mjs";
2
+ import { a as space_d_exports, n as Info$2 } from "./space-CR-9UxdT.mjs";
3
+ import { Context, Schema } from "effect";
4
+ //#region src/location.d.ts
5
+ /**
6
+ * Where work happens: a directory inside a space.
7
+ *
8
+ * The pair (space, directory) is the key. A path alone does not name a place —
9
+ * `/app/repo` on the host and `/app/repo` inside a remote sandbox are different
10
+ * trees wearing the same spelling — so the space carries the env and the
11
+ * root it lives under (`space.location`), and `directory` is the absolute cwd
12
+ * equal to or beneath that root. Sessions sharing a space share the project;
13
+ * worktree relationships stay a Project concern beneath it.
14
+ *
15
+ * **Both halves come from the mount, so `Ref` is overrides and nothing else.**
16
+ * A Location is a directory *within* a mounted namespace — the mount has to be
17
+ * resolved first, the way a volume is mounted before any path on it means
18
+ * anything — and once it is, the namespace and the working directory are already
19
+ * in scope. Re-declaring them would be two spellings of one value, free to drift;
20
+ * a Location pointing somewhere its own shell is not becomes unrepresentable
21
+ * rather than merely avoided by discipline.
22
+ *
23
+ * Only the shape and the service tag live here. Building one needs Project, Space, Repo and Git,
24
+ * which belong to the harness; a plugin receives a resolved `Info` on its context and asks for
25
+ * {@link Service} when it needs the live one.
26
+ */
27
+ declare const Ref: Schema.Struct<{
28
+ /** Defaults to the mount's cwd. Set it to work in a subdirectory of the mount. */
29
+ readonly directory: Schema.optional<Schema.brand<Schema.String, "AbsolutePath">>;
30
+ }>;
31
+ type Ref = typeof Ref.Type;
32
+ declare const Info_base: Schema.Class<Info, Schema.Struct<{
33
+ /** The absolute cwd tools run in; `space.location` is the root it lives under. */
34
+ readonly directory: Schema.brand<Schema.String, "AbsolutePath">;
35
+ readonly space: typeof Info$2;
36
+ readonly project: typeof Info$1;
37
+ }>, {}>;
38
+ declare class Info extends Info_base {}
39
+ interface Interface extends Info {}
40
+ declare const Service_base: Context.ServiceClass<Service, "@codeworksh/plugin/location/Service", Interface>;
41
+ declare class Service extends Service_base {}
42
+ declare const DirectoryNotFoundError_base: Schema.Class<DirectoryNotFoundError, Schema.TaggedStruct<"Location.DirectoryNotFoundError", {
43
+ directory: Schema.brand<Schema.String, "AbsolutePath">;
44
+ sandboxInstanceId: Schema.brand<Schema.String, "SandboxInstance.ID"> & {
45
+ local: string & import("effect/Brand").Brand<"SandboxInstance.ID">;
46
+ create: () => string & import("effect/Brand").Brand<"SandboxInstance.ID">;
47
+ };
48
+ }>, import("effect/Cause").YieldableError>;
49
+ declare class DirectoryNotFoundError extends DirectoryNotFoundError_base {}
50
+ declare const NotDirectoryError_base: Schema.Class<NotDirectoryError, Schema.TaggedStruct<"Location.NotDirectoryError", {
51
+ directory: Schema.brand<Schema.String, "AbsolutePath">;
52
+ sandboxInstanceId: Schema.brand<Schema.String, "SandboxInstance.ID"> & {
53
+ local: string & import("effect/Brand").Brand<"SandboxInstance.ID">;
54
+ create: () => string & import("effect/Brand").Brand<"SandboxInstance.ID">;
55
+ };
56
+ }>, import("effect/Cause").YieldableError>;
57
+ declare class NotDirectoryError extends NotDirectoryError_base {}
58
+ type Error = DirectoryNotFoundError | NotDirectoryError;
59
+ //#endregion
60
+ export { NotDirectoryError as a, Interface as i, Error as n, Ref as o, Info as r, Service as s, DirectoryNotFoundError as t };
61
+ //# sourceMappingURL=location-D4hAfuXF.d.mts.map
package/location.d.mts ADDED
@@ -0,0 +1,2 @@
1
+ import { a as NotDirectoryError, i as Interface, n as Error, o as Ref, r as Info, s as Service, t as DirectoryNotFoundError } from "./location-D4hAfuXF.mjs";
2
+ export { DirectoryNotFoundError, Error, Info, Interface, NotDirectoryError, Ref, Service };
package/location.mjs ADDED
@@ -0,0 +1,48 @@
1
+ import { AbsolutePath } from "./schema.mjs";
2
+ import { Info as Info$1 } from "./project.mjs";
3
+ import { ID } from "./sandbox/instance.mjs";
4
+ import { Info as Info$2 } from "./space.mjs";
5
+ import { Context, Schema } from "effect";
6
+ //#region src/location.ts
7
+ /**
8
+ * Where work happens: a directory inside a space.
9
+ *
10
+ * The pair (space, directory) is the key. A path alone does not name a place —
11
+ * `/app/repo` on the host and `/app/repo` inside a remote sandbox are different
12
+ * trees wearing the same spelling — so the space carries the env and the
13
+ * root it lives under (`space.location`), and `directory` is the absolute cwd
14
+ * equal to or beneath that root. Sessions sharing a space share the project;
15
+ * worktree relationships stay a Project concern beneath it.
16
+ *
17
+ * **Both halves come from the mount, so `Ref` is overrides and nothing else.**
18
+ * A Location is a directory *within* a mounted namespace — the mount has to be
19
+ * resolved first, the way a volume is mounted before any path on it means
20
+ * anything — and once it is, the namespace and the working directory are already
21
+ * in scope. Re-declaring them would be two spellings of one value, free to drift;
22
+ * a Location pointing somewhere its own shell is not becomes unrepresentable
23
+ * rather than merely avoided by discipline.
24
+ *
25
+ * Only the shape and the service tag live here. Building one needs Project, Space, Repo and Git,
26
+ * which belong to the harness; a plugin receives a resolved `Info` on its context and asks for
27
+ * {@link Service} when it needs the live one.
28
+ */
29
+ const Ref = Schema.Struct({
30
+ /** Defaults to the mount's cwd. Set it to work in a subdirectory of the mount. */
31
+ directory: Schema.optional(AbsolutePath) }).annotate({ identifier: "Location.Ref" });
32
+ var Info = class extends Schema.Class("Location.Info")({
33
+ /** The absolute cwd tools run in; `space.location` is the root it lives under. */
34
+ directory: AbsolutePath,
35
+ space: Info$2,
36
+ project: Info$1
37
+ }) {};
38
+ var Service = class extends Context.Service()("@codeworksh/plugin/location/Service") {};
39
+ const Fields = {
40
+ directory: AbsolutePath,
41
+ sandboxInstanceId: ID
42
+ };
43
+ var DirectoryNotFoundError = class extends Schema.TaggedError()("Location.DirectoryNotFoundError", Fields) {};
44
+ var NotDirectoryError = class extends Schema.TaggedError()("Location.NotDirectoryError", Fields) {};
45
+ //#endregion
46
+ export { DirectoryNotFoundError, Info, NotDirectoryError, Ref, Service };
47
+
48
+ //# sourceMappingURL=location.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"location.mjs","names":["SpaceSchema.Info","ProjectSchema.Info","SandboxInstance.ID"],"sources":["../../src/location.ts"],"sourcesContent":["import { Context, Schema } from \"effect\";\nimport { ProjectSchema } from \"./project.ts\";\nimport { AbsolutePath } from \"./schema.ts\";\nimport { SandboxInstance } from \"./sandbox/instance.ts\";\nimport { SpaceSchema } from \"./space.ts\";\n\n/**\n * Where work happens: a directory inside a space.\n *\n * The pair (space, directory) is the key. A path alone does not name a place —\n * `/app/repo` on the host and `/app/repo` inside a remote sandbox are different\n * trees wearing the same spelling — so the space carries the env and the\n * root it lives under (`space.location`), and `directory` is the absolute cwd\n * equal to or beneath that root. Sessions sharing a space share the project;\n * worktree relationships stay a Project concern beneath it.\n *\n * **Both halves come from the mount, so `Ref` is overrides and nothing else.**\n * A Location is a directory *within* a mounted namespace — the mount has to be\n * resolved first, the way a volume is mounted before any path on it means\n * anything — and once it is, the namespace and the working directory are already\n * in scope. Re-declaring them would be two spellings of one value, free to drift;\n * a Location pointing somewhere its own shell is not becomes unrepresentable\n * rather than merely avoided by discipline.\n *\n * Only the shape and the service tag live here. Building one needs Project, Space, Repo and Git,\n * which belong to the harness; a plugin receives a resolved `Info` on its context and asks for\n * {@link Service} when it needs the live one.\n */\nexport const Ref = Schema.Struct({\n\t/** Defaults to the mount's cwd. Set it to work in a subdirectory of the mount. */\n\tdirectory: Schema.optional(AbsolutePath),\n}).annotate({ identifier: \"Location.Ref\" });\nexport type Ref = typeof Ref.Type;\n\nexport class Info extends Schema.Class<Info>(\"Location.Info\")({\n\t/** The absolute cwd tools run in; `space.location` is the root it lives under. */\n\tdirectory: AbsolutePath,\n\tspace: SpaceSchema.Info,\n\tproject: ProjectSchema.Info,\n}) {}\n\nexport interface Interface extends Info {}\n\nexport class Service extends Context.Service<Service, Interface>()(\"@codeworksh/plugin/location/Service\") {}\n\nconst Fields = {\n\tdirectory: AbsolutePath,\n\tsandboxInstanceId: SandboxInstance.ID,\n};\n\nexport class DirectoryNotFoundError extends Schema.TaggedError<DirectoryNotFoundError>()(\n\t\"Location.DirectoryNotFoundError\",\n\tFields,\n) {}\n\nexport class NotDirectoryError extends Schema.TaggedError<NotDirectoryError>()(\"Location.NotDirectoryError\", Fields) {}\n\nexport type Error = DirectoryNotFoundError | NotDirectoryError;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,MAAa,MAAM,OAAO,OAAO;;AAEhC,WAAW,OAAO,SAAS,YAAY,EACxC,CAAC,CAAC,CAAC,SAAS,EAAE,YAAY,eAAe,CAAC;AAG1C,IAAa,OAAb,cAA0B,OAAO,MAAY,eAAe,CAAC,CAAC;;CAE7D,WAAW;CACX,OAAOA;CACP,SAASC;AACV,CAAC,CAAC,CAAC,CAAC;AAIJ,IAAa,UAAb,cAA6B,QAAQ,QAA4B,CAAC,CAAC,qCAAqC,CAAC,CAAC,CAAC;AAE3G,MAAM,SAAS;CACd,WAAW;CACX,mBAAmBC;AACpB;AAEA,IAAa,yBAAb,cAA4C,OAAO,YAAoC,CAAC,CACvF,mCACA,MACD,CAAC,CAAC,CAAC;AAEH,IAAa,oBAAb,cAAuC,OAAO,YAA+B,CAAC,CAAC,8BAA8B,MAAM,CAAC,CAAC,CAAC"}