@crowdedkingdoms/crowdyjs 10.0.0 → 11.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/MIGRATION.md +48 -48
  2. package/README.md +24 -21
  3. package/dist/crowdy-client.d.ts +3 -3
  4. package/dist/crowdy-client.d.ts.map +1 -1
  5. package/dist/crowdy-client.js +2 -2
  6. package/dist/crowdy-studio/controller.d.ts +188 -0
  7. package/dist/crowdy-studio/controller.d.ts.map +1 -0
  8. package/dist/{mod-studio → crowdy-studio}/controller.js +22 -22
  9. package/dist/crowdy-studio/diagnostics.d.ts +22 -0
  10. package/dist/crowdy-studio/diagnostics.d.ts.map +1 -0
  11. package/dist/{mod-studio → crowdy-studio}/diagnostics.js +2 -2
  12. package/dist/{mod-studio → crowdy-studio}/dom-shell.d.ts +4 -4
  13. package/dist/crowdy-studio/dom-shell.d.ts.map +1 -0
  14. package/dist/{mod-studio → crowdy-studio}/dom-shell.js +31 -31
  15. package/dist/crowdy-studio/editor.d.ts +17 -0
  16. package/dist/crowdy-studio/editor.d.ts.map +1 -0
  17. package/dist/crowdy-studio/index.d.ts +10 -0
  18. package/dist/crowdy-studio/index.d.ts.map +1 -0
  19. package/dist/{mod-studio → crowdy-studio}/index.js +4 -4
  20. package/dist/crowdy-studio/models.d.ts +149 -0
  21. package/dist/crowdy-studio/models.d.ts.map +1 -0
  22. package/dist/{mod-studio → crowdy-studio}/models.js +10 -10
  23. package/dist/{mod-studio → crowdy-studio}/monaco-editor.d.ts +3 -3
  24. package/dist/crowdy-studio/monaco-editor.d.ts.map +1 -0
  25. package/dist/{mod-studio → crowdy-studio}/monaco-editor.js +4 -4
  26. package/dist/crowdy-studio/mount.d.ts +17 -0
  27. package/dist/crowdy-studio/mount.d.ts.map +1 -0
  28. package/dist/{mod-studio → crowdy-studio}/mount.js +14 -14
  29. package/dist/crowdy-studio/starter-projects.d.ts +11 -0
  30. package/dist/crowdy-studio/starter-projects.d.ts.map +1 -0
  31. package/dist/{mod-studio → crowdy-studio}/starter-projects.js +2 -2
  32. package/dist/crowdy-studio/styles.d.ts +2 -0
  33. package/dist/crowdy-studio/styles.d.ts.map +1 -0
  34. package/dist/crowdy-studio/styles.js +14 -0
  35. package/dist/crowdy-studio/textarea-editor.d.ts +8 -0
  36. package/dist/crowdy-studio/textarea-editor.d.ts.map +1 -0
  37. package/dist/{mod-studio → crowdy-studio}/textarea-editor.js +3 -3
  38. package/dist/domains/crowdyStudio.d.ts +27 -0
  39. package/dist/domains/crowdyStudio.d.ts.map +1 -0
  40. package/dist/domains/{playerCodeProjects.js → crowdyStudio.js} +47 -45
  41. package/dist/domains/playerCompute.d.ts +1 -1
  42. package/dist/domains/playerCompute.js +1 -1
  43. package/dist/generated/graphql.d.ts +670 -670
  44. package/dist/generated/graphql.d.ts.map +1 -1
  45. package/dist/generated/graphql.js +57 -57
  46. package/dist/index.d.ts +3 -3
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +3 -3
  49. package/dist/kit/npcs.d.ts.map +1 -1
  50. package/dist/kit/social.d.ts.map +1 -1
  51. package/dist/live-coding/rust-analysis.js +1 -1
  52. package/package.json +4 -4
  53. package/dist/domains/playerCodeProjects.d.ts +0 -25
  54. package/dist/domains/playerCodeProjects.d.ts.map +0 -1
  55. package/dist/mod-studio/controller.d.ts +0 -188
  56. package/dist/mod-studio/controller.d.ts.map +0 -1
  57. package/dist/mod-studio/diagnostics.d.ts +0 -22
  58. package/dist/mod-studio/diagnostics.d.ts.map +0 -1
  59. package/dist/mod-studio/dom-shell.d.ts.map +0 -1
  60. package/dist/mod-studio/editor.d.ts +0 -17
  61. package/dist/mod-studio/editor.d.ts.map +0 -1
  62. package/dist/mod-studio/index.d.ts +0 -10
  63. package/dist/mod-studio/index.d.ts.map +0 -1
  64. package/dist/mod-studio/models.d.ts +0 -149
  65. package/dist/mod-studio/models.d.ts.map +0 -1
  66. package/dist/mod-studio/monaco-editor.d.ts.map +0 -1
  67. package/dist/mod-studio/mount.d.ts +0 -17
  68. package/dist/mod-studio/mount.d.ts.map +0 -1
  69. package/dist/mod-studio/starter-projects.d.ts +0 -11
  70. package/dist/mod-studio/starter-projects.d.ts.map +0 -1
  71. package/dist/mod-studio/styles.d.ts +0 -2
  72. package/dist/mod-studio/styles.d.ts.map +0 -1
  73. package/dist/mod-studio/styles.js +0 -14
  74. package/dist/mod-studio/textarea-editor.d.ts +0 -8
  75. package/dist/mod-studio/textarea-editor.d.ts.map +0 -1
  76. /package/dist/{mod-studio → crowdy-studio}/editor.js +0 -0
package/MIGRATION.md CHANGED
@@ -1,28 +1,38 @@
1
- # CrowdyJS v10project-first Mod Studio (BREAKING)
2
-
3
- This migration is implemented on the feature branch but is **not versioned or
4
- published yet**.
5
-
6
- The session-only live-coding API was removed. There are deliberately no
7
- compatibility aliases.
8
-
9
- Removed exports:
10
-
11
- - `mountLiveCodingIDE`
12
- - `mountLiveCoding`
13
- - `LiveCodingController`
14
- - `MountLiveCodingOptions`
15
- - `PLAYER_CODE_TEMPLATES` / `templateById`
16
- - the `moduleName` and `draftByDefault` mount options
17
- - the `@crowdedkingdoms/crowdyjs/live-coding` package subpath
18
-
19
- Replace the old mount with a cloud project provider and the new subpath:
1
+ # CrowdyJS v11Crowdy Studio rename (BREAKING)
2
+
3
+ Version 11 removes the previous Mod Studio names completely. There are no
4
+ compatibility exports, client properties, package subpaths, GraphQL operations,
5
+ schema types, or CSS aliases.
6
+
7
+ Rename imports and API access:
8
+
9
+ - `@crowdedkingdoms/crowdyjs/mod-studio` →
10
+ `@crowdedkingdoms/crowdyjs/crowdy-studio`
11
+ - `mountModStudio` → `mountCrowdyStudio`
12
+ - `ModStudioController` → `CrowdyStudioController`
13
+ - `MountModStudioOptions` → `MountCrowdyStudioOptions`
14
+ - `ModStudioHandle` → `CrowdyStudioHandle`
15
+ - every other public `ModStudio*` model, error, diagnostic, and editor type →
16
+ its `CrowdyStudio*` equivalent
17
+ - `modStudioFileKey`, `modStudioFileUri`, and `normalizeModStudioPath` →
18
+ `crowdyStudioFileKey`, `crowdyStudioFileUri`, and
19
+ `normalizeCrowdyStudioPath`
20
+ - `client.playerCodeProjects` → `client.crowdyStudio`
21
+ - `PlayerCodeProjectsAPI` → `CrowdyStudioAPI`
22
+ - CSS classes under `ck-mod-studio*` → `ck-crowdy-studio*`
23
+
24
+ The matching Game API schema is required. Its project roots changed from
25
+ `playerCodeProjects`, `playerCodeProject`, `playerCodeProjectCreate`,
26
+ `playerCodeProjectSave`, `playerCodeLibraryFiles`, `playerCodeLibrarySave`,
27
+ `playerCodeCommonFiles`, and `playerCodeProjectImportFile` to the corresponding
28
+ `crowdyStudio*` roots. Project, library, common-file, input, and enum schema
29
+ types likewise use `CrowdyStudio` in place of `PlayerCode`.
20
30
 
21
31
  ```ts
22
- import { mountModStudio } from '@crowdedkingdoms/crowdyjs/mod-studio';
32
+ import { mountCrowdyStudio } from '@crowdedkingdoms/crowdyjs/crowdy-studio';
23
33
 
24
- const studio = await mountModStudio(host, {
25
- projectProvider: game.playerCodeProjects,
34
+ const studio = await mountCrowdyStudio(host, {
35
+ projectProvider: game.crowdyStudio,
26
36
  playerCompute: game.playerCompute,
27
37
  playerWallet: identity.playerWallet,
28
38
  appId,
@@ -33,36 +43,26 @@ const studio = await mountModStudio(host, {
33
43
  });
34
44
  ```
35
45
 
36
- Custom UIs instantiate `ModStudioController` directly. Move all source state
37
- into `ModStudioProjectProvider`: project files are typed
38
- `{ target: 'SERVER' | 'CLIENT', path, content }`, and full-stack files share one
39
- revision/save. Module names and pairing preference are project settings.
40
- Do not stringify source maps in callers; Mod Studio creates `sourceFilesJson`
41
- only at the existing `playerCompute.deploy` wire boundary.
42
-
43
- Action semantics are now explicit:
44
-
45
- - **Test draft** saves atomically, compiles, and runs with draft egress rules.
46
- - **Deploy live** saves and runs the live project.
47
- - **Stop project** attempts `setEnabled(false)`, client broker shutdown, and
48
- polling cleanup, and returns partial failures instead of hiding them.
46
+ Provider behavior, optimistic saves, target permissions, the credential-free
47
+ worker, full-stack deploy ordering, and stop semantics are unchanged.
49
48
 
50
- Full-stack order is CLIENT compile SERVER compile → `setRequires` (only after
51
- both succeed) → SERVER enable → exact-version CLIENT artifact hot-swap.
49
+ # CrowdyJS v10 project-first authoring (historical)
52
50
 
53
- The local Rust worker remains credential-free and server-free. Monaco now uses
54
- target-prefixed URIs and loads project, personal-library, and common Rust files
55
- for cross-file completion/hover/symbols/definition. If Monaco/Worker/WASM fails,
56
- `mountModStudio` keeps a target/file-aware textarea inside the same project UI;
57
- there is no standalone fallback API.
51
+ Version 10 replaced the session-only live-coding API with cloud projects. It
52
+ removed `mountLiveCodingIDE`, `mountLiveCoding`, `LiveCodingController`,
53
+ `MountLiveCodingOptions`, `PLAYER_CODE_TEMPLATES`, `templateById`, the
54
+ `moduleName` and `draftByDefault` mount options, and the
55
+ `@crowdedkingdoms/crowdyjs/live-coding` package subpath.
58
56
 
59
- The Game API project contract is exposed through `PlayerCodeProjectsAPI`.
60
- Generated operations cover `playerCodeProjects`, `playerCodeProject`,
61
- `playerCodeProjectCreate`, `playerCodeProjectSave`,
62
- `playerCodeLibraryFiles`, `playerCodeLibrarySave`,
63
- `playerCodeCommonFiles`, and `playerCodeProjectImportFile`.
57
+ Projects introduced one shared optimistic revision for SERVER and CLIENT files,
58
+ project metadata and module names, personal-library/common-file imports, atomic
59
+ autosave, and explicit **Test draft**, **Deploy live**, and **Stop project**
60
+ actions. Full-stack deployment was ordered CLIENT compile → SERVER compile →
61
+ `setRequires` SERVER enable → exact-version CLIENT artifact hot-swap.
64
62
 
65
- This branch is versioned `10.0.0` for the coordinated major release.
63
+ The browser Rust worker remained credential-free and server-free. Monaco used
64
+ target-prefixed URIs for cross-file language features and retained the
65
+ target/file-aware textarea fallback.
66
66
 
67
67
  # CrowdyJS v8.10 Notes
68
68
 
package/README.md CHANGED
@@ -33,10 +33,13 @@ CrowdyJS v4 targets browsers by default and uses native `fetch`, `WebSocket`, `c
33
33
  > **Player-code authoring DX:** `playerCompute.setRequires`,
34
34
  > `marketplace.trustGridAuthor`, self-authored `gridClientMods` fields, and
35
35
  > version-keyed client artifact fetches require the 2026-07-22 authoring-DX
36
- > migration. The v9 `mountModStudio` surface is project-first: cloud project
36
+ > migration. The v11 `mountCrowdyStudio` surface is project-first: cloud project
37
37
  > revisions, target-scoped files, atomic autosave, and explicit draft/live/stop
38
38
  > orchestration. Its Rust language worker receives source plus the committed
39
39
  > platform index only—never a credential and never a server connection.
40
+ > CrowdyJS 11 requires the matching Crowdy Studio Game API schema; the previous
41
+ > package subpath, exports, client property, GraphQL roots, and schema types were
42
+ > removed without aliases.
40
43
 
41
44
  > **v8.10 inventory authority:** generated craft/barter transactions work on
42
45
  > existing Model servers. Compute-refereed durable commits require Compute SDK
@@ -140,7 +143,7 @@ If `managementUrl` is omitted, the SDK falls back to `httpUrl` for backwards-com
140
143
  | `client.gameModel` | Abstract game model: containers, properties, functions (incl. model-driven `notify_*` effects), sessions, and **automations / NPCs** (`upsertAutomation`, `runAutomation`, `automationRuns`, `automationStats`, …). |
141
144
  | `client.compute` | **Compute Modules** — server-side Rust/WASM logic: author + deploy source (`upsertModule`, `deployVersion`, `waitForCompile`), triggers + policy, synchronous `invoke`, and monitoring (`moduleRuns`, `moduleStats`, `moduleLogs`, `appDiagnostics`). Modules run server-only; see [Compute Modules docs](https://docs.crowdedkingdoms.com/game-api/compute-modules). |
142
145
  | `client.playerCompute` | Player-authored SERVER/CLIENT Rust/WASM bound to player-owned grids: deploy source, activate/deactivate, list modules/versions, and delete self-authored modules. |
143
- | `client.playerCodeProjects` | Cloud project, personal-library, and common-file APIs for Mod Studio: target-scoped files, metadata/module names, pairing preference, optimistic revisions, copy-by-value imports, and atomic metadata/file saves. Generated operations are pinned to the committed merged SDL. |
146
+ | `client.crowdyStudio` | Cloud project, personal-library, and common-file APIs for Crowdy Studio: target-scoped files, metadata/module names, pairing preference, optimistic revisions, copy-by-value imports, and atomic metadata/file saves. Generated operations are pinned to the committed merged SDL. |
144
147
  | `client.playerModel` | Player-owned flexible model containers and grid-confined automations (`containers`, `createContainer`, `setProperty`, `automations`, `createAutomation`, …). |
145
148
  | `client.marketplace` | Player-code store/install/consent flows plus player-authorized grid claims: `claimGridOwnership` preserves the existing-grid policy flow, while `claimGridChunk` atomically creates and owns one chunk under `SELF_CLAIM` and `releaseClaimedGrid` releases an eligible owner-created claim. |
146
149
  | `client.udp` | UDP proxy subscriptions + spatial mutations (`sendActorUpdate`, `sendVoxelUpdate`, `sendAudioPacket`, `sendTextPacket`, `sendClientEvent`). |
@@ -151,23 +154,23 @@ If `managementUrl` is omitted, the SDK falls back to `httpUrl` for backwards-com
151
154
  `PlayerCodeBroker` transfers
152
155
  compiled client artifacts to a platform-owned worker, keeps tokens on the page,
153
156
  allow-lists host calls, and locally clamps chunk-targeted effects to the owned
154
- grid before the normal SDK path reaches server authorization. Mod Studio
157
+ grid before the normal SDK path reaches server authorization. Crowdy Studio
155
158
  hot-swaps only the exact version-keyed artifact returned after a successful
156
159
  CLIENT compile.
157
160
 
158
- ## Player-code Mod Studio
161
+ ## Crowdy Studio
159
162
 
160
- `mountModStudio` is the project-first SERVER/CLIENT Rust authoring surface. A
163
+ `mountCrowdyStudio` is the project-first SERVER/CLIENT Rust authoring surface. A
161
164
  project has one cloud revision, target-scoped files, project metadata, separate
162
165
  server/client module names, and a pairing preference. Full-stack edits autosave
163
166
  as one optimistic-concurrency write; the UI renders **Saving**, **Saved**,
164
167
  **Conflict**, or **Offline**, with retry and conflict-resolution actions.
165
168
 
166
169
  ```ts
167
- import { mountModStudio } from '@crowdedkingdoms/crowdyjs/mod-studio';
170
+ import { mountCrowdyStudio } from '@crowdedkingdoms/crowdyjs/crowdy-studio';
168
171
 
169
- const studio = await mountModStudio(host, {
170
- projectProvider: game.playerCodeProjects,
172
+ const studio = await mountCrowdyStudio(host, {
173
+ projectProvider: game.crowdyStudio,
171
174
  playerCompute: game.playerCompute,
172
175
  playerWallet: identity.playerWallet,
173
176
  appId,
@@ -182,7 +185,7 @@ const studio = await mountModStudio(host, {
182
185
  studio.destroy();
183
186
  ```
184
187
 
185
- Use `new ModStudioController(options)` for a custom/headless presentation. Its
188
+ Use `new CrowdyStudioController(options)` for a custom/headless presentation. Its
186
189
  public edits are file operations (`addFile`, `renameFile`, `deleteFile`,
187
190
  `updateFile`) and project settings—there is no session-only source blob, fixed
188
191
  module name, or template JSON API. The deploy conversion to the Game API's
@@ -211,7 +214,7 @@ Build.
211
214
  The Rust worker receives source files and the strict embedded platform index
212
215
  only. It receives no credential, opens no socket/fetch path, and never falls
213
216
  back to a server language service. If Monaco, Worker, a WASM asset, or a custom
214
- platform index fails, the same Mod Studio mount keeps project/target tabs and
217
+ platform index fails, the same Crowdy Studio mount keeps project/target tabs and
215
218
  uses one file-aware textarea—never a raw JSON blob.
216
219
 
217
220
  Modern bundlers must preserve module workers and package `.wasm` assets. Custom
@@ -222,22 +225,22 @@ embedded index remains the byte-identical game export (`schemaVersion: 2`, Rust
222
225
 
223
226
  ### Game API project contract
224
227
 
225
- `PlayerCodeProjectsAPI` implements the transport-neutral
226
- `ModStudioProjectProvider`; generated GraphQL types remain inside the adapter.
228
+ `CrowdyStudioAPI` implements the transport-neutral
229
+ `CrowdyStudioProjectProvider`; generated GraphQL types remain inside the adapter.
227
230
  The committed merged schema and generated operations cover:
228
231
 
229
- - `playerCodeProjects(appId)` / `playerCodeProject(appId, projectId)`
230
- - `playerCodeProjectCreate(input)`
231
- - `playerCodeProjectSave(input)` for one atomic metadata/file delta
232
- - `playerCodeLibraryFiles(appId)` / `playerCodeLibrarySave(input)`
233
- - `playerCodeCommonFiles(appId)`
234
- - `playerCodeProjectImportFile(input)` for copy-by-value imports
232
+ - `crowdyStudioProjects(appId)` / `crowdyStudioProject(appId, projectId)`
233
+ - `crowdyStudioProjectCreate(input)`
234
+ - `crowdyStudioProjectSave(input)` for one atomic metadata/file delta
235
+ - `crowdyStudioLibraryFiles(appId)` / `crowdyStudioLibrarySave(input)`
236
+ - `crowdyStudioCommonFiles(appId)`
237
+ - `crowdyStudioProjectImportFile(input)` for copy-by-value imports
235
238
 
236
239
  The adapter maps the API's `PAIRED | INDEPENDENT | SERVER_ONLY | CLIENT_ONLY`
237
- presentation enum to Mod Studio's runtime-oriented project kind and
240
+ presentation enum to Crowdy Studio's runtime-oriented project kind and
238
241
  `REQUIRED | OPTIONAL | NONE` setting. A stale expected `revision` arrives as
239
- `CONFLICT` with `PLAYER_CODE_REVISION_CONFLICT` in the message and becomes a
240
- `ModStudioRevisionConflictError` with the latest cloud project when that
242
+ `CONFLICT` with `CROWDY_STUDIO_REVISION_CONFLICT` in the message and becomes a
243
+ `CrowdyStudioRevisionConflictError` with the latest cloud project when that
241
244
  follow-up read succeeds.
242
245
 
243
246
  | `createWorldSession(client, appId, config)` (from `@crowdedkingdoms/crowdyjs/stores`) | World Stores: opt-in, SDK-managed game state — typed codecs (`structCodec` binary DSL), your own actor with a 5 Hz send loop (`session.self`), a remote-actor registry with lanes/history/staleness (`session.actors`), attributed send errors (`session.errors`), a chunk/voxel cache with realtime merge + worldgen write-back (`session.chunks`), channel/direct-message inboxes + a typed event router, host tracking, typed save/avatar state, and a game-model container mirror. Only configured stores exist (compile-time + runtime); unimported stores tree-shake away. |
@@ -59,7 +59,7 @@ import { UdpAPI } from './domains/udp.js';
59
59
  import { GameModelAPI } from './domains/gameModel.js';
60
60
  import { ComputeAPI } from './domains/compute.js';
61
61
  import { PlayerComputeAPI } from './domains/playerCompute.js';
62
- import { PlayerCodeProjectsAPI } from './domains/playerCodeProjects.js';
62
+ import { CrowdyStudioAPI } from './domains/crowdyStudio.js';
63
63
  import { PlayerWalletAPI } from './domains/playerWallet.js';
64
64
  import { MarketplaceAPI } from './domains/marketplace.js';
65
65
  import { PlayerModelAPI } from './domains/playerModel.js';
@@ -198,8 +198,8 @@ export declare class CrowdyClient {
198
198
  readonly compute: ComputeAPI;
199
199
  /** Player-authored Rust/WASM bound to player-owned grids. */
200
200
  readonly playerCompute: PlayerComputeAPI;
201
- /** Cloud source projects consumed by the project-first Mod Studio. */
202
- readonly playerCodeProjects: PlayerCodeProjectsAPI;
201
+ /** Crowdy Studio cloud projects, libraries, and common source files. */
202
+ readonly crowdyStudio: CrowdyStudioAPI;
203
203
  /** P4a marketplace (free mode): store, installs, consent, claim flows. */
204
204
  readonly marketplace: MarketplaceAPI;
205
205
  /** Player wallet, spend caps, hourly usage charges, and player policy (P2). */
@@ -1 +1 @@
1
- {"version":3,"file":"crowdy-client.d.ts","sourceRoot":"","sources":["../src/crowdy-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"crowdy-client.d.ts","sourceRoot":"","sources":["../src/crowdy-client.ts"],"names":[],"mappings":"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"}
@@ -58,7 +58,7 @@ import { UdpAPI } from './domains/udp.js';
58
58
  import { GameModelAPI } from './domains/gameModel.js';
59
59
  import { ComputeAPI } from './domains/compute.js';
60
60
  import { PlayerComputeAPI } from './domains/playerCompute.js';
61
- import { PlayerCodeProjectsAPI } from './domains/playerCodeProjects.js';
61
+ import { CrowdyStudioAPI } from './domains/crowdyStudio.js';
62
62
  import { PlayerWalletAPI } from './domains/playerWallet.js';
63
63
  import { MarketplaceAPI } from './domains/marketplace.js';
64
64
  import { PlayerModelAPI } from './domains/playerModel.js';
@@ -121,7 +121,7 @@ export class CrowdyClient {
121
121
  });
122
122
  this.compute = new ComputeAPI(this.graphql);
123
123
  this.playerCompute = new PlayerComputeAPI(this.graphql);
124
- this.playerCodeProjects = new PlayerCodeProjectsAPI(this.graphql);
124
+ this.crowdyStudio = new CrowdyStudioAPI(this.graphql);
125
125
  this.playerWallet = new PlayerWalletAPI(this.management);
126
126
  this.marketplace = new MarketplaceAPI(this.graphql, this.management);
127
127
  this.playerModel = new PlayerModelAPI(this.graphql);
@@ -0,0 +1,188 @@
1
+ import { type PlayerCodeBrokerOptions, type PlayerCodeGridBounds } from '../player-runtime/player-code-broker.js';
2
+ import type { PlayerComputeAPI } from '../domains/playerCompute.js';
3
+ import type { PlayerWalletAPI } from '../domains/playerWallet.js';
4
+ import { type CrowdyStudioDiagnostic } from './diagnostics.js';
5
+ import { type CrowdyStudioFileRef, type CrowdyStudioPairingPreference, type CrowdyStudioProject, type CrowdyStudioProjectMetadata, type CrowdyStudioProjectProvider, type CrowdyStudioProjectSummary, type CrowdyStudioReferenceFile, type CrowdyStudioSaveState, type CrowdyStudioTarget } from './models.js';
6
+ import { type CrowdyStudioNewProjectOptions } from './starter-projects.js';
7
+ export type CrowdyStudioPhase = 'IDLE' | 'TESTING_DRAFT' | 'DEPLOYING_LIVE' | 'COMPILING' | 'ENABLING' | 'RUNNING' | 'COMPILE_FAILED' | 'STOPPING' | 'STOPPED' | 'PARTIAL_FAILURE' | 'ERROR';
8
+ export type CrowdyStudioPolledSurface = 'runs' | 'logs' | 'usage';
9
+ export interface CrowdyStudioRuntimeStatus {
10
+ phase: CrowdyStudioPhase;
11
+ target?: CrowdyStudioTarget;
12
+ message?: string;
13
+ }
14
+ export interface CrowdyStudioUsageSnapshot {
15
+ hourUnitsUsed: string;
16
+ dayUnitsUsed: string;
17
+ unitsPerHour: string | null;
18
+ unitsPerDay: string | null;
19
+ compilesThisHour: number;
20
+ maxCompilesPerHour: number;
21
+ gateStatus: string;
22
+ gateReason: string | null;
23
+ }
24
+ export interface CrowdyStudioWalletSnapshot {
25
+ balanceCents: string;
26
+ currency: string;
27
+ }
28
+ export interface CrowdyStudioRun {
29
+ runId: string;
30
+ moduleName: string;
31
+ triggerSource: string;
32
+ startedAt: string;
33
+ durationUs: number;
34
+ fuelUsed: string;
35
+ success: boolean;
36
+ errorMessage?: string | null;
37
+ }
38
+ export interface CrowdyStudioInvokeResult {
39
+ resultBase64?: string | null;
40
+ resultJson?: string | null;
41
+ fuelUsed?: string;
42
+ durationUs?: number;
43
+ }
44
+ export interface CrowdyStudioState {
45
+ projects: readonly CrowdyStudioProjectSummary[];
46
+ project: CrowdyStudioProject | null;
47
+ personalLibraryFiles: readonly CrowdyStudioReferenceFile[];
48
+ commonFiles: readonly CrowdyStudioReferenceFile[];
49
+ openFiles: readonly CrowdyStudioFileRef[];
50
+ activeFile: CrowdyStudioFileRef | null;
51
+ saveState: CrowdyStudioSaveState;
52
+ saveMessage?: string;
53
+ runtime: CrowdyStudioRuntimeStatus;
54
+ buildOutput: string;
55
+ authoritativeDiagnostics: readonly CrowdyStudioDiagnostic[];
56
+ localDiagnostics: readonly CrowdyStudioDiagnostic[];
57
+ runs: readonly CrowdyStudioRun[];
58
+ logs: readonly CrowdyStudioRun[];
59
+ usage: CrowdyStudioUsageSnapshot | null;
60
+ wallet: CrowdyStudioWalletSnapshot | null;
61
+ invokeResult: CrowdyStudioInvokeResult | null;
62
+ }
63
+ export type CrowdyStudioPlayerCompute = Pick<PlayerComputeAPI, 'deploy' | 'versions' | 'setEnabled' | 'setRequires' | 'artifactBytes' | 'usage' | 'runs' | 'logs' | 'invoke'>;
64
+ export type CrowdyStudioPlayerWallet = Pick<PlayerWalletAPI, 'balance'>;
65
+ export interface CrowdyStudioBroker {
66
+ start(bytes: ArrayBuffer): Promise<void>;
67
+ stop(): void;
68
+ }
69
+ export interface CrowdyStudioControllerOptions {
70
+ projectProvider: CrowdyStudioProjectProvider;
71
+ playerCompute: CrowdyStudioPlayerCompute;
72
+ playerWallet?: CrowdyStudioPlayerWallet;
73
+ appId: string;
74
+ gridId: string;
75
+ initialProjectId?: string;
76
+ /** Required only when a project has a CLIENT target. */
77
+ grid?: PlayerCodeGridBounds;
78
+ /** Platform-owned glue worker; required only for CLIENT execution. */
79
+ workerUrl?: string | URL;
80
+ /** Page-side allow-listed host-call router; required only for CLIENT execution. */
81
+ onHostCall?: PlayerCodeBrokerOptions['onHostCall'];
82
+ onPresentation?: PlayerCodeBrokerOptions['onPresentation'];
83
+ /** Host-visible effective permissions; server authorization remains final. */
84
+ targetPermissions?: Partial<Record<CrowdyStudioTarget, {
85
+ canWrite: boolean;
86
+ canRun: boolean;
87
+ }>>;
88
+ clientTickIntervalMs?: number;
89
+ autosaveMs?: number;
90
+ retryMs?: number;
91
+ compilePollMs?: number;
92
+ compilePollLimit?: number;
93
+ monitorPollMs?: number;
94
+ sleep?: (ms: number) => Promise<void>;
95
+ brokerFactory?: (options: PlayerCodeBrokerOptions) => CrowdyStudioBroker;
96
+ isOnline?: () => boolean;
97
+ onStateChange?: (state: CrowdyStudioState) => void;
98
+ }
99
+ export interface CrowdyStudioStopResult {
100
+ serverStopped: boolean | null;
101
+ clientStopped: boolean | null;
102
+ failures: string[];
103
+ }
104
+ /**
105
+ * Headless project-first Crowdy Studio driver. It owns optimistic project saves,
106
+ * file CRUD, deployment ordering, runtime polling, and client hot swaps; the
107
+ * DOM mount is only a view over this state.
108
+ */
109
+ export declare class CrowdyStudioController {
110
+ private readonly options;
111
+ private state;
112
+ private readonly listeners;
113
+ private autosaveTimer;
114
+ private retryTimer;
115
+ private savePromise;
116
+ private editGeneration;
117
+ private persistedGeneration;
118
+ private conflictRemote;
119
+ private broker;
120
+ private operationGeneration;
121
+ private readonly visibleSurfaces;
122
+ private readonly surfaceTimers;
123
+ private pageVisible;
124
+ private destroyed;
125
+ constructor(options: CrowdyStudioControllerOptions);
126
+ getState(): CrowdyStudioState;
127
+ subscribe(listener: (state: CrowdyStudioState) => void): () => void;
128
+ canTarget(target: CrowdyStudioTarget, action: 'write' | 'run'): boolean;
129
+ initialize(): Promise<void>;
130
+ createProject(options: Omit<CrowdyStudioNewProjectOptions, 'appId' | 'gridId'>): Promise<CrowdyStudioProject>;
131
+ switchProject(projectId: string): Promise<void>;
132
+ private loadProject;
133
+ private installProject;
134
+ openFile(ref: CrowdyStudioFileRef): void;
135
+ closeFile(ref: CrowdyStudioFileRef): void;
136
+ fileContent(ref: CrowdyStudioFileRef): string;
137
+ addFile(target: CrowdyStudioTarget, path: string, content?: string): void;
138
+ renameFile(target: CrowdyStudioTarget, path: string, nextPath: string): void;
139
+ deleteFile(target: CrowdyStudioTarget, path: string): void;
140
+ importReferenceFile(reference: CrowdyStudioReferenceFile, destinationPath?: string): Promise<void>;
141
+ saveProjectFileToLibrary(target: CrowdyStudioTarget, path: string, title?: string): Promise<CrowdyStudioReferenceFile>;
142
+ updateFile(target: CrowdyStudioTarget, path: string, content: string): void;
143
+ updateSettings(patch: Partial<Pick<CrowdyStudioProjectMetadata, 'name' | 'description' | 'serverModuleName' | 'clientModuleName' | 'pairingPreference'>>): void;
144
+ setPairingPreference(preference: CrowdyStudioPairingPreference): void;
145
+ setLocalDiagnostics(diagnostics: readonly CrowdyStudioDiagnostic[]): void;
146
+ /**
147
+ * Flush all edits in one optimistic-concurrency save. If edits arrive while
148
+ * the request is in flight, a second atomic save follows with the new
149
+ * revision instead of overwriting local content with the earlier response.
150
+ */
151
+ saveNow(): Promise<boolean>;
152
+ retrySave(): Promise<boolean>;
153
+ acceptRemoteConflict(): Promise<void>;
154
+ overwriteConflict(): Promise<boolean>;
155
+ testDraft(): Promise<void>;
156
+ deployLive(): Promise<void>;
157
+ private deployProject;
158
+ private compileTarget;
159
+ private recordBuild;
160
+ private enableServer;
161
+ private runClient;
162
+ stopProject(): Promise<CrowdyStudioStopResult>;
163
+ invoke(exportName: string, paramsJson?: string): Promise<CrowdyStudioInvokeResult>;
164
+ setSurfaceVisible(surface: CrowdyStudioPolledSurface, visible: boolean): void;
165
+ setPageVisible(visible: boolean): void;
166
+ refreshSurface(surface: CrowdyStudioPolledSurface): Promise<void>;
167
+ destroy(): void;
168
+ private performSaveLoop;
169
+ private markEdited;
170
+ private scheduleRetry;
171
+ private scheduleSurfacePoll;
172
+ private restartVisibleSurfacePolling;
173
+ private stopSurfacePolling;
174
+ private clearSurfaceTimer;
175
+ private clearSaveTimers;
176
+ private clearTimer;
177
+ private clientRuntimeOptions;
178
+ private checkOperation;
179
+ private sleep;
180
+ private requireProject;
181
+ private requireFile;
182
+ private assertProjectTarget;
183
+ private scope;
184
+ private setRuntime;
185
+ private update;
186
+ private ensureAlive;
187
+ }
188
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../src/crowdy-studio/controller.ts"],"names":[],"mappings":"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"}