vibes-diy 14.3.6 → 14.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/cli/cmd-evento.d.ts +183 -161
  2. package/cli/cmd-evento.js +2 -1
  3. package/cli/cmd-evento.js.map +1 -1
  4. package/cli/cmds/app/anon-write-cmd.d.ts +62 -0
  5. package/cli/cmds/app/anon-write-cmd.js +173 -0
  6. package/cli/cmds/app/anon-write-cmd.js.map +1 -0
  7. package/cli/cmds/app/anon-write-cmd.test.js +90 -0
  8. package/cli/cmds/app/anon-write-cmd.test.js.map +1 -0
  9. package/cli/cmds/app/index.d.ts +29 -0
  10. package/cli/cmds/app/index.js +4 -1
  11. package/cli/cmds/app/index.js.map +1 -1
  12. package/cli/cmds/edit-cmd.js +216 -184
  13. package/cli/cmds/edit-cmd.js.map +1 -1
  14. package/cli/cmds/edit-cmd.test.js +129 -8
  15. package/cli/cmds/edit-cmd.test.js.map +1 -1
  16. package/cli/cmds/fixtures/edit-agent-lane-edge-vision-gen.json.gz +0 -0
  17. package/cli/cmds/follow-chat-build.js +12 -0
  18. package/cli/cmds/follow-chat-build.js.map +1 -1
  19. package/cli/cmds/follow-chat-build.test.js +30 -0
  20. package/cli/cmds/follow-chat-build.test.js.map +1 -1
  21. package/cli/cmds/format-no-files-error.d.ts +1 -0
  22. package/cli/cmds/format-no-files-error.js +3 -0
  23. package/cli/cmds/format-no-files-error.js.map +1 -1
  24. package/cli/cmds/generate-core.js.map +1 -1
  25. package/cli/cmds/push-from-dir.js +2 -2
  26. package/cli/cmds/push-from-dir.js.map +1 -1
  27. package/cli/cmds/push-from-dir.test.js +1 -1
  28. package/cli/cmds/push-from-dir.test.js.map +1 -1
  29. package/cli/main.js +13 -1
  30. package/cli/main.js.map +1 -1
  31. package/package.json +8 -8
  32. package/cli/cmds/resolved-model.d.ts +0 -2
  33. package/cli/cmds/resolved-model.js +0 -15
  34. package/cli/cmds/resolved-model.js.map +0 -1
  35. package/cli/cmds/resolved-model.test.js +0 -70
  36. package/cli/cmds/resolved-model.test.js.map +0 -1
  37. /package/cli/cmds/{resolved-model.test.d.ts → app/anon-write-cmd.test.d.ts} +0 -0
@@ -71,151 +71,23 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
71
71
  appSlug?: string | undefined;
72
72
  output: string;
73
73
  }> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
74
- type: "vibes-diy.cli.edit";
75
- appSlug: string;
76
- prompt: string;
77
- ownerHandle: string;
78
- instantJoin?: boolean | undefined;
79
- verbose: boolean;
80
- dir: string;
81
- apiUrl: string;
82
- dryRun: boolean;
83
- transcript: boolean;
84
- directBuild?: boolean | undefined;
85
- focusPath?: string | undefined;
86
- model?: string | undefined;
87
- apiKey?: string | undefined;
88
- }, {
89
- appSlug: string;
90
- ownerHandle: string;
91
- mode: "dev" | "production";
92
- fsId: string;
93
- type: "vibes.diy.res-ensure-app-slug";
94
- env: Record<string, string>;
95
- fileSystem: {
96
- fileName: string;
97
- mimeType: string;
98
- assetId: string;
99
- assetURI: string;
100
- transform?: {
101
- type: "jsx-to-js";
102
- transformedAssetId: string;
103
- } | {
104
- type: "imports";
105
- importMapAssetId: string;
106
- } | {
107
- type: "import-map";
108
- fromAssetIds: string[];
109
- } | {
110
- type: "transformed";
111
- action: "jsx-to-js";
112
- transformedAssetId: string;
113
- } | {
114
- type: "tailwind-css";
115
- } | undefined;
116
- entryPoint?: boolean | undefined;
117
- size: number;
118
- kind?: "asset" | undefined;
119
- }[];
120
- } | {
121
- type: "vibes.diy.res-error";
122
- error: {
123
- message: string;
124
- code: "require-login";
125
- };
126
- } | {
127
- type: "vibes.diy.res-error";
128
- error: {
129
- message: string;
130
- code: "user-slug-invalid";
131
- };
132
- } | {
133
- type: "vibes.diy.res-error";
134
- error: {
135
- message: string;
136
- code: "app-slug-invalid";
137
- };
138
- } | {
139
- type: "vibes.diy.res-error";
140
- error: {
141
- message: string;
142
- code: "max-app-slugs-reached";
143
- };
144
- } | {
145
- type: "vibes.diy.res-error";
146
- error: {
147
- message: string;
148
- code: "handle-required";
149
- };
150
- } | {
151
- type: "vibes.diy.res-error";
152
- error: {
153
- message: string;
154
- code: "from-not-owned";
155
- };
156
- } | {
157
- type: "vibes.diy.res-error";
158
- error: {
159
- message: string;
160
- code: "from-carry-failed";
161
- };
162
- } | {
163
- type: "vibes-diy.cli.res-edit";
164
- appSlug: string;
165
- ownerHandle: string;
166
- url: string;
167
- directory: string;
168
- restyled?: boolean | undefined;
169
- }> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
170
- type: "vibes-diy.cli.assets-ls";
171
- appSlug: string;
172
- ownerHandle: string;
74
+ type: "vibes-diy.cli.list";
173
75
  apiUrl: string;
174
- published: boolean;
175
76
  }, {
176
- type: "vibes-diy.cli.res-assets-ls";
177
- appSlug: string;
178
- ownerHandle: string;
179
- fsId: string;
77
+ type: "vibes-diy.cli.res-list";
180
78
  items: {
181
- path: string;
182
- mime: string;
183
- size: number;
184
- cid: string;
185
- safety: "error" | "high" | "low" | "pending" | "unknown";
186
- }[];
187
- }> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
188
- type: "vibes-diy.cli.app-logs";
189
- appSlug: string;
190
- ownerHandle: string;
191
- apiUrl: string;
192
- since: string;
193
- level: string;
194
- limit: number;
195
- tail: boolean;
196
- }, {
197
- type: "vibes-diy.cli.res-app-logs";
198
- appSlug: string;
199
- ownerHandle: string;
200
- events: {
201
- id: string;
202
- ts: string;
203
- lane: string;
204
- level: string;
205
- trigger: string;
206
- fsId: string;
207
- body: string;
208
- sessionId: string | null;
209
- viewerHandle: string | null;
79
+ ownerHandle: string;
80
+ appSlug: string;
81
+ updated: string;
82
+ title?: string | undefined;
83
+ icon?: {
84
+ cid: string;
85
+ mime: string;
86
+ } | undefined;
87
+ pinnedAt?: string | undefined;
88
+ neverPublished?: boolean | undefined;
89
+ unpublishedAt?: string | undefined;
210
90
  }[];
211
- priorFsId: string | null;
212
- nextCursor: string | null;
213
- tail: boolean;
214
- latestTs?: string | null | undefined;
215
- since: string;
216
- level: string;
217
- sinceTs?: string | undefined;
218
- firstPage: boolean;
219
91
  }> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
220
92
  type: "vibes-diy.cli.app-status";
221
93
  appSlug: string;
@@ -237,6 +109,20 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
237
109
  graceMs: number;
238
110
  overdueMs: number;
239
111
  healed: boolean;
112
+ }> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
113
+ type: "vibes-diy.cli.app-chips";
114
+ appSlug: string;
115
+ ownerHandle: string;
116
+ apiUrl: string;
117
+ chips: string[];
118
+ fsId: string;
119
+ }, {
120
+ type: "vibes-diy.cli.res-app-chips";
121
+ appSlug: string;
122
+ ownerHandle: string;
123
+ fsId: string;
124
+ releaseSeq: number;
125
+ chips: string[];
240
126
  }> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
241
127
  type: "vibes-diy.cli.app-rearm";
242
128
  appSlug: string;
@@ -261,19 +147,37 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
261
147
  state: "dead" | "healthy" | "overdue" | "running" | "unscheduled";
262
148
  intervalMs: number | null;
263
149
  }> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
264
- type: "vibes-diy.cli.app-chips";
150
+ type: "vibes-diy.cli.app-logs";
265
151
  appSlug: string;
266
152
  ownerHandle: string;
267
153
  apiUrl: string;
268
- chips: string[];
269
- fsId: string;
154
+ since: string;
155
+ level: string;
156
+ limit: number;
157
+ tail: boolean;
270
158
  }, {
271
- type: "vibes-diy.cli.res-app-chips";
159
+ type: "vibes-diy.cli.res-app-logs";
272
160
  appSlug: string;
273
161
  ownerHandle: string;
274
- fsId: string;
275
- releaseSeq: number;
276
- chips: string[];
162
+ events: {
163
+ id: string;
164
+ ts: string;
165
+ lane: string;
166
+ level: string;
167
+ trigger: string;
168
+ fsId: string;
169
+ body: string;
170
+ sessionId: string | null;
171
+ viewerHandle: string | null;
172
+ }[];
173
+ priorFsId: string | null;
174
+ nextCursor: string | null;
175
+ tail: boolean;
176
+ latestTs?: string | null | undefined;
177
+ since: string;
178
+ level: string;
179
+ sinceTs?: string | undefined;
180
+ firstPage: boolean;
277
181
  }> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
278
182
  type: "vibes-diy.cli.app-screenshot";
279
183
  appSlug: string;
@@ -316,6 +220,25 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
316
220
  wroteVariety: boolean;
317
221
  clearedVariety: boolean;
318
222
  relayout: boolean;
223
+ }> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
224
+ type: "vibes-diy.cli.app-anon-write";
225
+ appSlug: string;
226
+ ownerHandle: string;
227
+ apiUrl: string;
228
+ set: "" | "off" | "on";
229
+ }, {
230
+ type: "vibes-diy.cli.res-app-anon-write";
231
+ ownerHandle: string;
232
+ appSlug: string;
233
+ wrote: boolean;
234
+ posture: string;
235
+ anonWrite: "explicit" | "legacy" | "off";
236
+ wildcardWrite: string[];
237
+ restrictedDbs: {
238
+ dbName: string;
239
+ provenance: "platform-default" | "your-pin";
240
+ write: string[];
241
+ }[];
319
242
  }> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
320
243
  type: "vibes-diy.cli.developer";
321
244
  apiUrl: string;
@@ -509,6 +432,9 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
509
432
  fbc: string;
510
433
  clickedAt: number;
511
434
  updatedAt: string;
435
+ } | {
436
+ type: "lastVisit";
437
+ day: string;
512
438
  } | {
513
439
  type: "defaultHandle";
514
440
  ownerHandle: string;
@@ -810,23 +736,101 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
810
736
  type: "vibes-diy.cli.res-codegen-log-response";
811
737
  output: string;
812
738
  }> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
813
- type: "vibes-diy.cli.list";
739
+ type: "vibes-diy.cli.edit";
740
+ appSlug: string;
741
+ prompt: string;
742
+ ownerHandle: string;
743
+ instantJoin?: boolean | undefined;
744
+ verbose: boolean;
745
+ dir: string;
814
746
  apiUrl: string;
747
+ dryRun: boolean;
748
+ transcript: boolean;
749
+ directBuild?: boolean | undefined;
750
+ focusPath?: string | undefined;
751
+ model?: string | undefined;
752
+ apiKey?: string | undefined;
815
753
  }, {
816
- type: "vibes-diy.cli.res-list";
817
- items: {
818
- ownerHandle: string;
819
- appSlug: string;
820
- updated: string;
821
- title?: string | undefined;
822
- icon?: {
823
- cid: string;
824
- mime: string;
754
+ appSlug: string;
755
+ ownerHandle: string;
756
+ mode: "dev" | "production";
757
+ fsId: string;
758
+ type: "vibes.diy.res-ensure-app-slug";
759
+ env: Record<string, string>;
760
+ fileSystem: {
761
+ fileName: string;
762
+ mimeType: string;
763
+ assetId: string;
764
+ assetURI: string;
765
+ transform?: {
766
+ type: "jsx-to-js";
767
+ transformedAssetId: string;
768
+ } | {
769
+ type: "imports";
770
+ importMapAssetId: string;
771
+ } | {
772
+ type: "import-map";
773
+ fromAssetIds: string[];
774
+ } | {
775
+ type: "transformed";
776
+ action: "jsx-to-js";
777
+ transformedAssetId: string;
778
+ } | {
779
+ type: "tailwind-css";
825
780
  } | undefined;
826
- pinnedAt?: string | undefined;
827
- neverPublished?: boolean | undefined;
828
- unpublishedAt?: string | undefined;
781
+ entryPoint?: boolean | undefined;
782
+ size: number;
783
+ kind?: "asset" | undefined;
829
784
  }[];
785
+ } | {
786
+ type: "vibes.diy.res-error";
787
+ error: {
788
+ message: string;
789
+ code: "require-login";
790
+ };
791
+ } | {
792
+ type: "vibes.diy.res-error";
793
+ error: {
794
+ message: string;
795
+ code: "user-slug-invalid";
796
+ };
797
+ } | {
798
+ type: "vibes.diy.res-error";
799
+ error: {
800
+ message: string;
801
+ code: "app-slug-invalid";
802
+ };
803
+ } | {
804
+ type: "vibes.diy.res-error";
805
+ error: {
806
+ message: string;
807
+ code: "max-app-slugs-reached";
808
+ };
809
+ } | {
810
+ type: "vibes.diy.res-error";
811
+ error: {
812
+ message: string;
813
+ code: "handle-required";
814
+ };
815
+ } | {
816
+ type: "vibes.diy.res-error";
817
+ error: {
818
+ message: string;
819
+ code: "from-not-owned";
820
+ };
821
+ } | {
822
+ type: "vibes.diy.res-error";
823
+ error: {
824
+ message: string;
825
+ code: "from-carry-failed";
826
+ };
827
+ } | {
828
+ type: "vibes-diy.cli.res-edit";
829
+ appSlug: string;
830
+ ownerHandle: string;
831
+ url: string;
832
+ directory: string;
833
+ restyled?: boolean | undefined;
830
834
  }> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
831
835
  type: "vibes-diy.cli.pull";
832
836
  appSlug: string;
@@ -862,6 +866,24 @@ export declare function cliEventoHandlers(): (import("@adviser/cement").EventoHa
862
866
  created: string;
863
867
  published: boolean;
864
868
  }[];
869
+ }> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
870
+ type: "vibes-diy.cli.assets-ls";
871
+ appSlug: string;
872
+ ownerHandle: string;
873
+ apiUrl: string;
874
+ published: boolean;
875
+ }, {
876
+ type: "vibes-diy.cli.res-assets-ls";
877
+ appSlug: string;
878
+ ownerHandle: string;
879
+ fsId: string;
880
+ items: {
881
+ path: string;
882
+ mime: string;
883
+ size: number;
884
+ cid: string;
885
+ safety: "error" | "high" | "low" | "pending" | "unknown";
886
+ }[];
865
887
  }> | import("@adviser/cement").EventoHandler<WrapCmdTSMsg<unknown>, {
866
888
  type: "vibes-diy.cli.set-unpublish";
867
889
  appSlug: string;
package/cli/cmd-evento.js CHANGED
@@ -16,7 +16,7 @@ import { listEvento } from "./cmds/list-cmd.js";
16
16
  import { pullEvento } from "./cmds/pull-cmd.js";
17
17
  import { versionsEvento } from "./cmds/versions-cmd.js";
18
18
  import { assetsLsEvento } from "./cmds/assets-cmd.js";
19
- import { appStatusEvento, appRearmEvento, appScheduleOffEvento, appLogsEvento, appChipsEvento, appScreenshotEvento, appLookEvento, } from "./cmds/app/index.js";
19
+ import { appStatusEvento, appRearmEvento, appScheduleOffEvento, appLogsEvento, appChipsEvento, appScreenshotEvento, appLookEvento, appAnonWriteEvento, } from "./cmds/app/index.js";
20
20
  import { setUnpublishEvento, publishEvento } from "./cmds/unpublish-cmd.js";
21
21
  import { secretsEvento } from "./cmds/secrets/secrets-cmd.js";
22
22
  import { recommendEvento } from "./cmds/recommend/recommend-cmd.js";
@@ -51,6 +51,7 @@ export function cliEventoHandlers() {
51
51
  appLogsEvento,
52
52
  appChipsEvento,
53
53
  appLookEvento,
54
+ appAnonWriteEvento,
54
55
  setUnpublishEvento,
55
56
  publishEvento,
56
57
  secretsEvento,
@@ -1 +1 @@
1
- {"version":3,"file":"cmd-evento.js","sourceRoot":"","sources":["../../jsr/cli/cmd-evento.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC3H,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,aAAa,GACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EACL,aAAa,EACb,eAAe,EACf,OAAO,EACP,YAAY,GAIb,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAOhD,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,kBAAkB;QAClB,YAAY;QACZ,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,UAAU;QACV,WAAW;QACX,iBAAiB;QACjB,cAAc;QACd,cAAc;QACd,cAAc;QACd,gBAAgB;QAChB,UAAU;QACV,UAAU;QACV,UAAU;QACV,cAAc;QACd,cAAc;QACd,eAAe;QACf,cAAc;QACd,mBAAmB;QACnB,oBAAoB;QACpB,aAAa;QACb,cAAc;QACd,aAAa;QACb,kBAAkB;QAClB,aAAa;QACb,aAAa;QACb,eAAe;QACf,eAAe;QACf,sBAAsB;QACtB,oBAAoB;QACpB,sBAAsB;QACtB,YAAY;QACZ,WAAW;QACX,WAAW;QACX,WAAW;QACX,aAAa;QACb,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,eAAe,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"cmd-evento.js","sourceRoot":"","sources":["../../jsr/cli/cmd-evento.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC3H,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EACL,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,aAAa,EACb,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EACL,aAAa,EACb,eAAe,EACf,OAAO,EACP,YAAY,GAIb,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;AAOhD,MAAM,UAAU,iBAAiB;IAC/B,OAAO;QACL,kBAAkB;QAClB,YAAY;QACZ,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,UAAU;QACV,WAAW;QACX,iBAAiB;QACjB,cAAc;QACd,cAAc;QACd,cAAc;QACd,gBAAgB;QAChB,UAAU;QACV,UAAU;QACV,UAAU;QACV,cAAc;QACd,cAAc;QACd,eAAe;QACf,cAAc;QACd,mBAAmB;QACnB,oBAAoB;QACpB,aAAa;QACb,cAAc;QACd,aAAa;QACb,kBAAkB;QAClB,kBAAkB;QAClB,aAAa;QACb,aAAa;QACb,eAAe;QACf,eAAe;QACf,sBAAsB;QACtB,oBAAoB;QACpB,sBAAsB;QACtB,YAAY;QACZ,WAAW;QACX,WAAW;QACX,WAAW;QACX,aAAa;QACb,iBAAiB;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,eAAe,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { Result, EventoHandler } from "@adviser/cement";
2
+ import type { AppEnvelopeReadout, AnonWriteMode } from "@vibes.diy/api-types";
3
+ import { CliCtx } from "../../cli-ctx.js";
4
+ import { WrapCmdTSMsg } from "../../cmd-evento.js";
5
+ export declare const ANON_WRITE_WORDS: readonly ["on", "off"];
6
+ export type AnonWriteWord = (typeof ANON_WRITE_WORDS)[number];
7
+ export declare function anonWriteModeFor(word: AnonWriteWord): AnonWriteMode;
8
+ export declare const ReqAppAnonWrite: import("arktype/internal/variants/object.ts").ObjectType<{
9
+ type: "vibes-diy.cli.app-anon-write";
10
+ appSlug: string;
11
+ ownerHandle: string;
12
+ apiUrl: string;
13
+ set: "" | "off" | "on";
14
+ }, {}>;
15
+ export type ReqAppAnonWrite = typeof ReqAppAnonWrite.infer;
16
+ export declare function isReqAppAnonWrite(obj: unknown): obj is ReqAppAnonWrite;
17
+ export declare const ResAppAnonWriteCli: import("arktype/internal/variants/object.ts").ObjectType<{
18
+ type: "vibes-diy.cli.res-app-anon-write";
19
+ ownerHandle: string;
20
+ appSlug: string;
21
+ wrote: boolean;
22
+ posture: string;
23
+ anonWrite: "explicit" | "legacy" | "off";
24
+ wildcardWrite: string[];
25
+ restrictedDbs: {
26
+ dbName: string;
27
+ provenance: "platform-default" | "your-pin";
28
+ write: string[];
29
+ }[];
30
+ }, {}>;
31
+ export type ResAppAnonWriteCli = typeof ResAppAnonWriteCli.infer;
32
+ export declare function isResAppAnonWriteCli(obj: unknown): obj is ResAppAnonWriteCli;
33
+ export declare function appAnonWriteFromEnvelope(input: {
34
+ readonly ownerHandle: string;
35
+ readonly appSlug: string;
36
+ readonly wrote: boolean;
37
+ readonly envelope: AppEnvelopeReadout;
38
+ }): ResAppAnonWriteCli;
39
+ export declare function renderAppAnonWriteLines(msg: ResAppAnonWriteCli): string[];
40
+ export declare const appAnonWriteEvento: EventoHandler<WrapCmdTSMsg<unknown>, ReqAppAnonWrite, ResAppAnonWriteCli>;
41
+ export declare function parseAnonWriteWord(raw: string | undefined): Result<"" | AnonWriteWord>;
42
+ export declare function appAnonWriteCmd(ctx: CliCtx): Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
43
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
44
+ apiUrl: string;
45
+ json: boolean;
46
+ text: boolean;
47
+ appSlug: string | undefined;
48
+ mode: string | undefined;
49
+ vibe: string;
50
+ handle: string;
51
+ }>>;
52
+ } & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
53
+ apiUrl: string;
54
+ json: boolean;
55
+ text: boolean;
56
+ appSlug: string | undefined;
57
+ mode: string | undefined;
58
+ vibe: string;
59
+ handle: string;
60
+ }, never> & {
61
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<never>>;
62
+ } & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;
@@ -0,0 +1,173 @@
1
+ import { command, option, optional, positional, string } from "cmd-ts";
2
+ import { Result, Option } from "@adviser/cement";
3
+ import { type } from "arktype";
4
+ import { cmdTsDefaultArgs } from "../../cli-ctx.js";
5
+ import { sendMsg } from "../../cmd-evento.js";
6
+ import { resolveHandle } from "../../resolve-handle.js";
7
+ import { resolveVibePositionals } from "../../parse-vibe.js";
8
+ import { formatErr } from "../format-err.js";
9
+ import { HANDLE_REQUIRED_CLI_MESSAGE } from "../../handle-required.js";
10
+ export const ANON_WRITE_WORDS = ["on", "off"];
11
+ export function anonWriteModeFor(word) {
12
+ return word === "on" ? "explicit" : "off";
13
+ }
14
+ export const ReqAppAnonWrite = type({
15
+ type: "'vibes-diy.cli.app-anon-write'",
16
+ appSlug: "string",
17
+ ownerHandle: "string",
18
+ apiUrl: "string",
19
+ set: "'' | 'on' | 'off'",
20
+ });
21
+ export function isReqAppAnonWrite(obj) {
22
+ return !(ReqAppAnonWrite(obj) instanceof type.errors);
23
+ }
24
+ const DbWriteRow = type({ dbName: "string", provenance: "'platform-default' | 'your-pin'", write: "string[]" });
25
+ export const ResAppAnonWriteCli = type({
26
+ type: "'vibes-diy.cli.res-app-anon-write'",
27
+ ownerHandle: "string",
28
+ appSlug: "string",
29
+ wrote: "boolean",
30
+ posture: "string",
31
+ anonWrite: "'explicit' | 'legacy' | 'off'",
32
+ wildcardWrite: "string[]",
33
+ restrictedDbs: DbWriteRow.array(),
34
+ });
35
+ export function isResAppAnonWriteCli(obj) {
36
+ return !(ResAppAnonWriteCli(obj) instanceof type.errors);
37
+ }
38
+ export function appAnonWriteFromEnvelope(input) {
39
+ const wildcardWrite = [...(input.envelope.wildcard.write ?? [])];
40
+ const restrictedDbs = input.envelope.dbs
41
+ .filter((row) => row.absorbed === false)
42
+ .map((row) => ({ dbName: row.dbName, provenance: row.provenance, write: [...(row.effective.write ?? [])] }));
43
+ return {
44
+ type: "vibes-diy.cli.res-app-anon-write",
45
+ ownerHandle: input.ownerHandle,
46
+ appSlug: input.appSlug,
47
+ wrote: input.wrote,
48
+ posture: input.envelope.posture,
49
+ anonWrite: input.envelope.anonWrite,
50
+ wildcardWrite,
51
+ restrictedDbs,
52
+ };
53
+ }
54
+ function subjects(list) {
55
+ return list.length === 0 ? "(owner only)" : list.join(", ");
56
+ }
57
+ export function renderAppAnonWriteLines(msg) {
58
+ const admits = msg.anonWrite === "explicit" || msg.anonWrite === "legacy";
59
+ const lines = [
60
+ `${msg.ownerHandle}/${msg.appSlug}`,
61
+ ` anonWrite ${msg.anonWrite}${msg.anonWrite === "legacy" ? " (grandfathered by migration)" : ""}`,
62
+ ` posture ${msg.posture}`,
63
+ ` wildcard.write ${subjects(msg.wildcardWrite)}`,
64
+ ];
65
+ for (const row of msg.restrictedDbs) {
66
+ lines.push(` db ${row.dbName} write ${subjects(row.write)} (${row.provenance})`);
67
+ }
68
+ if (msg.wrote) {
69
+ lines.push(admits
70
+ ? "Signed-out visitors can now write, wherever access.js allows it (allowAnonymous: true). Revoke with `off`."
71
+ : "Signed-out writes now stay on the visitor's device. Turn them back on with `on`.");
72
+ }
73
+ if (admits && msg.posture === "private") {
74
+ lines.push("Note: this app is private, so signed-out visitors cannot open it. Push with --access open or gated to reach them.");
75
+ }
76
+ return lines;
77
+ }
78
+ export const appAnonWriteEvento = {
79
+ hash: "vibes-diy.cli.app-anon-write",
80
+ validate: (ctx) => {
81
+ if (isReqAppAnonWrite(ctx.enRequest)) {
82
+ return Promise.resolve(Result.Ok(Option.Some(ctx.enRequest)));
83
+ }
84
+ return Promise.resolve(Result.Ok(Option.None()));
85
+ },
86
+ handle: async (ctx) => {
87
+ const ectx = ctx.ctx.getOrThrow("cliCtx");
88
+ if (!ectx.vibesDiyApiFactory) {
89
+ return Result.Err("Not logged in. Run 'vibes-diy login' first.");
90
+ }
91
+ const args = ctx.validated;
92
+ const api = ectx.vibesDiyApiFactory(args.apiUrl);
93
+ const ownerHandle = await resolveHandle(api, args.ownerHandle === "" ? undefined : args.ownerHandle);
94
+ if (ownerHandle === undefined) {
95
+ return Result.Err(HANDLE_REQUIRED_CLI_MESSAGE);
96
+ }
97
+ if (args.appSlug === "") {
98
+ return Result.Err("Missing vibe — pass an app slug or handle/app-slug.");
99
+ }
100
+ const wrote = args.set !== "";
101
+ const rRes = await api.ensureAppSettings({
102
+ appSlug: args.appSlug,
103
+ ownerHandle,
104
+ ...(wrote ? { anonWrite: anonWriteModeFor(args.set) } : {}),
105
+ });
106
+ if (rRes.isErr()) {
107
+ return Result.Err(formatErr(rRes.Err()));
108
+ }
109
+ const res = rRes.Ok();
110
+ if (res.error !== undefined) {
111
+ return Result.Err(res.error);
112
+ }
113
+ if (res.envelope === undefined) {
114
+ return Result.Err(`${ownerHandle}/${args.appSlug}: the server returned no envelope readout; the dial state is unknown.`);
115
+ }
116
+ return sendMsg(ctx, appAnonWriteFromEnvelope({ ownerHandle, appSlug: args.appSlug, wrote, envelope: res.envelope }));
117
+ },
118
+ };
119
+ export function parseAnonWriteWord(raw) {
120
+ if (raw === undefined || raw === "")
121
+ return Result.Ok("");
122
+ if (ANON_WRITE_WORDS.includes(raw))
123
+ return Result.Ok(raw);
124
+ return Result.Err(`Expected on or off (got "${raw}"). Run with no argument to read the current state.`);
125
+ }
126
+ export function appAnonWriteCmd(ctx) {
127
+ return command({
128
+ name: "anon-write",
129
+ description: "Read or set whether signed-out visitors' writes reach the server (owner, or a developer they delegated). `on` admits them wherever access.js allows it; `off` keeps them on the visitor's device. No argument reads. Default is off.",
130
+ args: {
131
+ ...cmdTsDefaultArgs(ctx),
132
+ appSlug: positional({
133
+ displayName: "vibe",
134
+ description: "App slug or handle/app-slug (e.g. jchris/guestbook)",
135
+ type: optional(string),
136
+ }),
137
+ mode: positional({
138
+ displayName: "on|off",
139
+ description: "on = admit anonymous writes, off = revoke. Omit to read.",
140
+ type: optional(string),
141
+ }),
142
+ vibe: option({
143
+ long: "vibe",
144
+ description: "Vibe identifier as handle/app-slug",
145
+ type: string,
146
+ defaultValue: () => "",
147
+ defaultValueIsSerializable: true,
148
+ }),
149
+ handle: option({
150
+ long: "handle",
151
+ description: "Act as this bound handle for this call only (leaves your default handle unchanged)",
152
+ type: string,
153
+ defaultValue: () => "",
154
+ defaultValueIsSerializable: true,
155
+ }),
156
+ },
157
+ handler: ctx.cliStream.enqueue((args) => {
158
+ const resolved = resolveVibePositionals({ vibe: args.vibe, handle: args.handle, positionals: [args.appSlug, args.mode] });
159
+ const rWord = parseAnonWriteWord(resolved.trailing[0]);
160
+ if (rWord.isErr()) {
161
+ throw new Error(rWord.Err().message);
162
+ }
163
+ return {
164
+ type: "vibes-diy.cli.app-anon-write",
165
+ appSlug: resolved.appSlug,
166
+ ownerHandle: resolved.handle,
167
+ apiUrl: args.apiUrl,
168
+ set: rWord.Ok(),
169
+ };
170
+ }),
171
+ });
172
+ }
173
+ //# sourceMappingURL=anon-write-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anon-write-cmd.js","sourceRoot":"","sources":["../../../../jsr/cli/cmds/app/anon-write-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACvE,OAAO,EAAsB,MAAM,EAAoB,MAAM,EAAmC,MAAM,iBAAiB,CAAC;AACxH,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EAAU,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAgB,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAavE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAI,EAAE,KAAK,CAAU,CAAC;AAIvD,MAAM,UAAU,gBAAgB,CAAC,IAAmB;IAClD,OAAO,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;IAClC,IAAI,EAAE,gCAAgC;IACtC,OAAO,EAAE,QAAQ;IACjB,WAAW,EAAE,QAAQ;IACrB,MAAM,EAAE,QAAQ;IAEhB,GAAG,EAAE,mBAAmB;CACzB,CAAC,CAAC;AAEH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,OAAO,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,GAAG,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,iCAAiC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;AAEhH,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,CAAC;IACrC,IAAI,EAAE,oCAAoC;IAC1C,WAAW,EAAE,QAAQ;IACrB,OAAO,EAAE,QAAQ;IACjB,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,QAAQ;IACjB,SAAS,EAAE,+BAA+B;IAE1C,aAAa,EAAE,UAAU;IAGzB,aAAa,EAAE,UAAU,CAAC,KAAK,EAAE;CAClC,CAAC,CAAC;AAEH,MAAM,UAAU,oBAAoB,CAAC,GAAY;IAC/C,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,MAAM,CAAC,CAAC;AAC3D,CAAC;AAGD,MAAM,UAAU,wBAAwB,CAAC,KAKxC;IACC,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IACjE,MAAM,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,GAAG;SACrC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,KAAK,KAAK,CAAC;SACvC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/G,OAAO;QACL,IAAI,EAAE,kCAAkC;QACxC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,QAAQ,CAAC,OAAO;QAC/B,SAAS,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS;QACnC,aAAa;QACb,aAAa;KACd,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,IAAuB;IACvC,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAGD,MAAM,UAAU,uBAAuB,CAAC,GAAuB;IAC7D,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,KAAK,UAAU,IAAI,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC;IAC1E,MAAM,KAAK,GAAa;QACtB,GAAG,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,OAAO,EAAE;QACnC,qBAAqB,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,EAAE,EAAE;QACxG,qBAAqB,GAAG,CAAC,OAAO,EAAE;QAClC,qBAAqB,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;KACnD,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,aAAa,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,WAAW,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC;IACrF,CAAC;IACD,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CACR,MAAM;YACJ,CAAC,CAAC,4GAA4G;YAC9G,CAAC,CAAC,kFAAkF,CACvF,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,mHAAmH,CAAC,CAAC;IAClI,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,MAAM,kBAAkB,GAA8E;IAC3G,IAAI,EAAE,8BAA8B;IACpC,QAAQ,EAAE,CAAC,GAAmF,EAAE,EAAE;QAChG,IAAI,iBAAiB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,EAAE,KAAK,EACX,GAAiF,EAC9C,EAAE;QACrC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,UAAU,CAAS,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QACnE,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEjD,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACrG,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,OAAO,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,EAAE,EAAE,CAAC;YACxB,OAAO,MAAM,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QAC3E,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,iBAAiB,CAAC;YACvC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW;YACX,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAoB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7E,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;QAEtB,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC5B,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,IAAI,IAAI,CAAC,OAAO,uEAAuE,CAAC,CAAC;QAC3H,CAAC;QACD,OAAO,OAAO,CAAC,GAAG,EAAE,wBAAwB,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACvH,CAAC;CACF,CAAC;AAGF,MAAM,UAAU,kBAAkB,CAAC,GAAuB;IACxD,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC1D,IAAK,gBAAsC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,EAAE,CAAC,GAAoB,CAAC,CAAC;IAClG,OAAO,MAAM,CAAC,GAAG,CAAC,4BAA4B,GAAG,qDAAqD,CAAC,CAAC;AAC1G,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,OAAO,CAAC;QACb,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,sOAAsO;QACxO,IAAI,EAAE;YACJ,GAAG,gBAAgB,CAAC,GAAG,CAAC;YACxB,OAAO,EAAE,UAAU,CAAC;gBAClB,WAAW,EAAE,MAAM;gBACnB,WAAW,EAAE,qDAAqD;gBAClE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;aACvB,CAAC;YACF,IAAI,EAAE,UAAU,CAAC;gBACf,WAAW,EAAE,QAAQ;gBACrB,WAAW,EAAE,0DAA0D;gBACvE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC;aACvB,CAAC;YACF,IAAI,EAAE,MAAM,CAAC;gBACX,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,oCAAoC;gBACjD,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE;gBACtB,0BAA0B,EAAE,IAAI;aACjC,CAAC;YACF,MAAM,EAAE,MAAM,CAAC;gBACb,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oFAAoF;gBACjG,IAAI,EAAE,MAAM;gBACZ,YAAY,EAAE,GAAG,EAAE,CAAC,EAAE;gBACtB,0BAA0B,EAAE,IAAI;aACjC,CAAC;SACH;QACD,OAAO,EAAE,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACtC,MAAM,QAAQ,GAAG,sBAAsB,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1H,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;YACvC,CAAC;YACD,OAAO;gBACL,IAAI,EAAE,8BAA8B;gBACpC,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,WAAW,EAAE,QAAQ,CAAC,MAAM;gBAC5B,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;aACU,CAAC;QAC9B,CAAC,CAAC;KACH,CAAC,CAAC;AACL,CAAC"}