@crowdedkingdoms/crowdyjs 15.12.1 → 16.0.0-dev.1

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 (119) hide show
  1. package/MIGRATION.md +55 -0
  2. package/README.md +67 -41
  3. package/dist/client.d.ts +1 -0
  4. package/dist/client.d.ts.map +1 -1
  5. package/dist/client.js +3 -0
  6. package/dist/crowdy-client.d.ts +2 -3
  7. package/dist/crowdy-client.d.ts.map +1 -1
  8. package/dist/crowdy-client.js +9 -11
  9. package/dist/crowdy-dsh/bridge.d.ts +156 -0
  10. package/dist/crowdy-dsh/bridge.d.ts.map +1 -0
  11. package/dist/crowdy-dsh/bridge.js +523 -0
  12. package/dist/crowdy-dsh/index.d.ts +11 -0
  13. package/dist/crowdy-dsh/index.d.ts.map +1 -0
  14. package/dist/crowdy-dsh/index.js +10 -0
  15. package/dist/crowdy-dsh/pane.d.ts +64 -0
  16. package/dist/crowdy-dsh/pane.d.ts.map +1 -0
  17. package/dist/crowdy-dsh/pane.js +247 -0
  18. package/dist/crowdy-dsh/protocol.d.ts +249 -0
  19. package/dist/crowdy-dsh/protocol.d.ts.map +1 -0
  20. package/dist/crowdy-dsh/protocol.js +39 -0
  21. package/dist/crowdy-dsh/transport.d.ts +66 -0
  22. package/dist/crowdy-dsh/transport.d.ts.map +1 -0
  23. package/dist/crowdy-dsh/transport.js +88 -0
  24. package/dist/crowdy-studio/controller.d.ts +8 -0
  25. package/dist/crowdy-studio/controller.d.ts.map +1 -1
  26. package/dist/crowdy-studio/controller.js +33 -1
  27. package/dist/crowdy-studio/dom-shell.d.ts +21 -4
  28. package/dist/crowdy-studio/dom-shell.d.ts.map +1 -1
  29. package/dist/crowdy-studio/dom-shell.js +32 -17
  30. package/dist/crowdy-studio/embed/index.d.ts +1 -1
  31. package/dist/crowdy-studio/embed/index.d.ts.map +1 -1
  32. package/dist/crowdy-studio/embed/panel.d.ts +18 -18
  33. package/dist/crowdy-studio/embed/panel.d.ts.map +1 -1
  34. package/dist/crowdy-studio/embed/panel.js +7 -21
  35. package/dist/crowdy-studio/index.d.ts +2 -3
  36. package/dist/crowdy-studio/index.d.ts.map +1 -1
  37. package/dist/crowdy-studio/index.js +1 -2
  38. package/dist/crowdy-studio/mount.d.ts +29 -14
  39. package/dist/crowdy-studio/mount.d.ts.map +1 -1
  40. package/dist/crowdy-studio/mount.js +39 -126
  41. package/dist/crowdy-studio/styles.d.ts +1 -1
  42. package/dist/crowdy-studio/styles.d.ts.map +1 -1
  43. package/dist/crowdy-studio/styles.js +5 -0
  44. package/dist/default-origin.d.ts +6 -6
  45. package/dist/default-origin.d.ts.map +1 -1
  46. package/dist/default-origin.js +6 -6
  47. package/dist/generated/graphql.d.ts +76 -2438
  48. package/dist/generated/graphql.d.ts.map +1 -1
  49. package/dist/generated/graphql.js +0 -50
  50. package/dist/index.d.ts +1 -1
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +1 -1
  53. package/dist/kit/npcs.d.ts.map +1 -1
  54. package/dist/kit/social.d.ts.map +1 -1
  55. package/dist/{crowdy-agent/errors.d.ts → player-host/agent-errors.d.ts} +1 -1
  56. package/dist/player-host/agent-errors.d.ts.map +1 -0
  57. package/dist/player-host/agent-types.d.ts +18 -0
  58. package/dist/player-host/agent-types.d.ts.map +1 -0
  59. package/dist/player-host/agent-types.js +7 -0
  60. package/dist/player-host/index.d.ts +12 -4
  61. package/dist/player-host/index.d.ts.map +1 -1
  62. package/dist/player-host/index.js +11 -4
  63. package/dist/{crowdy-agent/schema.d.ts → player-host/json-schema.d.ts} +1 -1
  64. package/dist/player-host/json-schema.d.ts.map +1 -0
  65. package/dist/{crowdy-agent/schema.js → player-host/json-schema.js} +1 -1
  66. package/dist/player-host/schemas.d.ts +1 -1
  67. package/dist/player-host/schemas.d.ts.map +1 -1
  68. package/dist/player-host/schemas.js +2 -2
  69. package/dist/player-host/types.d.ts +2 -2
  70. package/dist/player-host/types.d.ts.map +1 -1
  71. package/package.json +5 -7
  72. package/dist/crowdy-agent/browser-dispatcher.d.ts +0 -41
  73. package/dist/crowdy-agent/browser-dispatcher.d.ts.map +0 -1
  74. package/dist/crowdy-agent/browser-dispatcher.js +0 -264
  75. package/dist/crowdy-agent/controller.d.ts +0 -152
  76. package/dist/crowdy-agent/controller.d.ts.map +0 -1
  77. package/dist/crowdy-agent/controller.js +0 -1289
  78. package/dist/crowdy-agent/errors.d.ts.map +0 -1
  79. package/dist/crowdy-agent/graphql-transport.d.ts +0 -154
  80. package/dist/crowdy-agent/graphql-transport.d.ts.map +0 -1
  81. package/dist/crowdy-agent/graphql-transport.js +0 -854
  82. package/dist/crowdy-agent/index.d.ts +0 -17
  83. package/dist/crowdy-agent/index.d.ts.map +0 -1
  84. package/dist/crowdy-agent/index.js +0 -16
  85. package/dist/crowdy-agent/registry.d.ts +0 -29
  86. package/dist/crowdy-agent/registry.d.ts.map +0 -1
  87. package/dist/crowdy-agent/registry.js +0 -281
  88. package/dist/crowdy-agent/schema.d.ts.map +0 -1
  89. package/dist/crowdy-agent/session-resume.d.ts +0 -24
  90. package/dist/crowdy-agent/session-resume.d.ts.map +0 -1
  91. package/dist/crowdy-agent/session-resume.js +0 -76
  92. package/dist/crowdy-agent/studio-tools.d.ts +0 -15
  93. package/dist/crowdy-agent/studio-tools.d.ts.map +0 -1
  94. package/dist/crowdy-agent/studio-tools.js +0 -280
  95. package/dist/crowdy-agent/tool-descriptors.d.ts +0 -4
  96. package/dist/crowdy-agent/tool-descriptors.d.ts.map +0 -1
  97. package/dist/crowdy-agent/tool-descriptors.js +0 -1049
  98. package/dist/crowdy-agent/transport.d.ts +0 -152
  99. package/dist/crowdy-agent/transport.d.ts.map +0 -1
  100. package/dist/crowdy-agent/transport.js +0 -27
  101. package/dist/crowdy-agent/types.d.ts +0 -328
  102. package/dist/crowdy-agent/types.d.ts.map +0 -1
  103. package/dist/crowdy-agent/types.js +0 -37
  104. package/dist/crowdy-studio/agent-dom-shell.d.ts +0 -68
  105. package/dist/crowdy-studio/agent-dom-shell.d.ts.map +0 -1
  106. package/dist/crowdy-studio/agent-dom-shell.js +0 -418
  107. package/dist/player-host/control-banner.d.ts +0 -40
  108. package/dist/player-host/control-banner.d.ts.map +0 -1
  109. package/dist/player-host/control-banner.js +0 -252
  110. package/dist/player-host/control-gate.d.ts +0 -77
  111. package/dist/player-host/control-gate.d.ts.map +0 -1
  112. package/dist/player-host/control-gate.js +0 -197
  113. package/dist/player-host/lease-manager.d.ts +0 -66
  114. package/dist/player-host/lease-manager.d.ts.map +0 -1
  115. package/dist/player-host/lease-manager.js +0 -428
  116. package/dist/player-host/tools.d.ts +0 -13
  117. package/dist/player-host/tools.d.ts.map +0 -1
  118. package/dist/player-host/tools.js +0 -79
  119. /package/dist/{crowdy-agent/errors.js → player-host/agent-errors.js} +0 -0
package/MIGRATION.md CHANGED
@@ -1,3 +1,58 @@
1
+ # CrowdyJS v16.0 — the Crowdy Agent dock is replaced by the in-browser DeepSeek Harness
2
+
3
+ **Breaking.** `16.0.0` (2026-09-11). Tracks the ck-api release that carries
4
+ the metered model endpoint (first dev release after `v1.98.0`): the 21
5
+ `crowdyStudioAgent*` session/run/lease/tool root fields this SDK used are gone
6
+ from that API, so a 15.x client loses its agent dock the moment it deploys,
7
+ whether or not the client upgrades.
8
+
9
+ Removed:
10
+
11
+ - `client.crowdyStudioAgent` (`CrowdyAgentGraphQLTransport`) and everything
12
+ under `@crowdedkingdoms/crowdyjs/crowdy-agent`: `CrowdyStudioAgentController`,
13
+ `CrowdyAgentToolRegistry`, `CrowdyAgentBrowserToolDispatcher`,
14
+ `createCrowdyStudioAgentTools`, `CROWDY_AGENT_TOOL_REGISTRY_V1`, session
15
+ resume, the `CrowdyStudioAgent.graphql` operations.
16
+ - The `agent` option of `mountCrowdyStudio` / `createCrowdyStudioEmbed`
17
+ (`MountCrowdyStudioAgentOptions`) and the agent dock (`agent-dom-shell`).
18
+ - From `@crowdedkingdoms/crowdyjs/player-host`: `AgentControlLeaseManager`,
19
+ `PlayerControlGate`, `AgentControlBanner`, `createPlayerHostAgentTools`.
20
+ `PlayerHostAdapterV1`, its schemas, `CrowdyAgentError` and the preemption
21
+ reason vocabulary stay (moved to `player-host/agent-errors.js` and
22
+ `player-host/agent-types.js`).
23
+
24
+ Added:
25
+
26
+ - The `dsh` option of `mountCrowdyStudio` / `createCrowdyStudioEmbed`
27
+ (`MountCrowdyStudioDshOptions`): `graphql`, `webBase`, `graphqlUrl`,
28
+ `apiOrigin`, `getToken`, `persistScope`, `studioOrigin?`. `toggle` accepts
29
+ `playerHost` (observe only) and `dshHost` (`captureFrame`, `describeView`,
30
+ `clientLogs`).
31
+ - `@crowdedkingdoms/crowdyjs/crowdy-dsh`: `CrowdyStudioDshPane`,
32
+ `StudioDshBridge`, `CrowdyStudioDshTransport` (`models`, `consent`,
33
+ `setConsent`, `usage`; `modelBaseUrl` for `/v1/model`), the bridge protocol
34
+ (`CROWDY_DSH_PROTOCOL_VERSION = 2`).
35
+ - `client.graphqlEndpoint`.
36
+ - `CrowdyStudioController.reloadProject()`; `dom-shell` takes a generic `dock`
37
+ factory and an `onFixWithAi` hook.
38
+
39
+ Behaviour worth knowing:
40
+
41
+ - The harness runs in the player's browser and talks to the model through the
42
+ tier's metered endpoint with the player's app token; usage is billed to the
43
+ player's wallet by default, or the app's org wallet when its billing admin
44
+ elected that. The token travels over the page/worker channel only and is
45
+ never written to a seed file, the worker's filesystem or OPFS.
46
+ - A live deploy requested by the agent waits for the player to confirm in the
47
+ pane (`confirmLiveDeploy` on `StudioDshBridgeOptions`); without that hook the
48
+ request is refused.
49
+ - The agent iframe is same-origin (`BroadcastChannel`, OPFS) and carries
50
+ `sandbox="allow-scripts allow-same-origin"`, which does not isolate it; the
51
+ host's CSP on `/dsh/*` is the control. Serving the harness from its own
52
+ origin over a `MessageChannel` relay is a tracked follow-up.
53
+ - Games ship the harness from the published `@crowdedkingdoms/crowdy-dsh`
54
+ package (`dist/dsh-web/`), copied under a same-origin path at build time.
55
+
1
56
  # CrowdyJS v15.11 — GitHub repositories for Crowdy Studio projects
2
57
 
3
58
  **Nothing removed.** `15.11.0` (2026-09-09). Tracks ck-api `v1.96.0`.
package/README.md CHANGED
@@ -221,7 +221,7 @@ never told about, so a native refresh without it is a re-placement.
221
221
  | `client.playerWallet` | Player spend: balance, spend caps, card setup, policy, charges. |
222
222
  | `client.marketplace` | Player-code store/install/consent flows plus player-authorized grid claims (`claimGridOwnership`, `claimGridChunk`, `releaseClaimedGrid`) and client-mod artifact fetches. |
223
223
  | `client.crowdyStudio` | Cloud project, personal-library, and common-file APIs for Crowdy Studio: target-scoped files, metadata/module names, optimistic revisions, copy-by-value imports, atomic saves. |
224
- | `client.crowdyStudioAgent` | Generated, app-token Game API transport for durable agent sessions: history/session pages, descriptors/budgets, approvals, tool results, heartbeat, control mutations, ordered event subscriptions. |
224
+ | `client.crowdyStudioGitHub` | GitHub repository loop for Crowdy Studio projects: status, bind, tree, `getFile`, SHA-guarded `putFile`. The Studio agent treats a bound repository as the source of truth. |
225
225
  | `client.udp` | UDP proxy subscriptions + spatial mutations (`sendActorUpdate`, `sendVoxelUpdate`, `sendAudioPacket`, `sendVideoPacket` / `sendVideoFrame`, `sendTextPacket`, `sendClientEvent`, `sendSingleActorMessage`, `sendChannelMessage`). |
226
226
  | `client.realtime` | Connection status, manual `connect()` / `disconnect()`, `onStatus()` listener. |
227
227
  | `client.refreshGameplayToken()` | Safely rotates an active game client's app token (see [Token refresh](#token-refresh-during-gameplay)). |
@@ -659,7 +659,7 @@ import { createCrowdyStudioEmbed } from '@crowdedkingdoms/crowdyjs/crowdy-studio
659
659
  import workerUrl from '@crowdedkingdoms/crowdyjs/player-glue-worker?worker&url';
660
660
 
661
661
  const studio = createCrowdyStudioEmbed({
662
- client: game, // CrowdyClient: crowdyStudio, playerCompute, playerWallet, crowdyStudioAgent
662
+ client: game, // CrowdyClient: crowdyStudio, playerCompute, playerWallet, crowdyStudioGitHub
663
663
  appId,
664
664
  gameName: 'My Game',
665
665
  suppressGameplayInput: () => pauseInput(),
@@ -677,55 +677,81 @@ studio.toggle({
677
677
  ```
678
678
 
679
679
  The embed renders a resizable right dock on desktop and a focus-trapped
680
- fullscreen modal on narrow screens, and mounts the agent dock automatically
681
- when the client exposes `crowdyStudioAgent` and the game passes a
682
- `playerHost`. For custom chrome, call `mountCrowdyStudio(host, options)`
683
- directly; for a headless integration, use `new CrowdyStudioController(options)`.
684
- New games should start SERVER-only. Untrusted HUD payloads always render as
685
- text, never HTML.
680
+ fullscreen modal on narrow screens. For custom chrome, call
681
+ `mountCrowdyStudio(host, options)` directly; for a headless integration, use
682
+ `new CrowdyStudioController(options)`. New games should start SERVER-only.
683
+ Untrusted HUD payloads always render as text, never HTML.
686
684
 
687
685
  See [Crowdy Studio & player client mods](https://docs.crowdedkingdoms.com/crowdyjs/player-client-mods)
688
686
  and [Embed Crowdy Studio in your game](https://docs.crowdedkingdoms.com/crowdyjs/crowdy-studio-embed).
689
687
 
690
- ### Agentic Crowdy Studio
691
-
692
- The agent surface adds an Ask/Build/Play AI dock on top of Crowdy Studio,
693
- built from three browser contracts (`crowdy.studio-agent/1`,
694
- `crowdy.agent-tools/1`, `crowdy.player-host/1`):
695
-
696
- - `@crowdedkingdoms/crowdyjs/agent` exports `CrowdyStudioAgentController` (the
697
- durable session client: contiguous event ordering, replay/gap fill,
698
- attach-epoch fencing, exact approval hashes, budgets, pause/resume/stop) and
699
- `CROWDY_AGENT_TOOL_REGISTRY_V1`, an immutable digest-pinned registry of
700
- bounded, schema-validated tools. There is deliberately no raw GraphQL
701
- executor, DOM driver, `fetch`, shell, or unrestricted SDK bridge in these
702
- surfaces.
703
- - `client.crowdyStudioAgent` is the production GraphQL transport for durable
704
- agent sessions; pass it (plus a `playerHost` adapter) to the Studio mount's
705
- `agent` option to get the integrated dock.
706
- - `@crowdedkingdoms/crowdyjs/player-host` exports the generic game
707
- observation/control contract: implement `PlayerHostAdapterV1` over your
708
- game's typed intent methods, and the exported `AgentControlLeaseManager`,
709
- `PlayerControlGate`, and `AgentControlBanner` enforce scoped leases, TTLs,
710
- synchronous human preemption, and always-visible Pause/Stop chrome.
688
+ ### The Studio agent (DeepSeek Harness in the browser)
689
+
690
+ The agent pane docks beside the editor and runs the
691
+ [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) entirely
692
+ in the player's browser: the stock harness web UI in a same-origin iframe, the
693
+ harness plugin tree in a Web Worker, and a filesystem whose files are the open
694
+ Crowdy Studio project (the bound GitHub repository when the project has one).
695
+ The model is reached through the tier's metered endpoint
696
+ (`POST /v1/model/chat/completions`) with the player's own app token, so usage
697
+ is priced per request at the app's rate card and billed to the player's wallet
698
+ by default (or the app's org wallet when its billing admin chose that). The
699
+ harness worker holds that token in memory to call the API as the player; it is
700
+ sent over the page/worker channel, never written to a seed file, the worker's
701
+ virtual filesystem or OPFS, and no tool exposes it to the model. The model has
702
+ no shell and no network of its own; what it can do in the game runs through
703
+ this SDK on the page, and a live deploy additionally waits for the player to
704
+ confirm in the pane.
705
+
706
+ A game enables the pane with the `dsh` option and ships the packed harness from
707
+ the published `@crowdedkingdoms/crowdy-dsh` npm package (`dist/dsh-web/`,
708
+ stamped with `BUILD.json`) under a same-origin path, usually by copying it into
709
+ `public/dsh/` at build time:
711
710
 
712
711
  ```ts
713
- import { CrowdyStudioAgentController } from '@crowdedkingdoms/crowdyjs/agent';
714
-
715
- const agent = new CrowdyStudioAgentController({
716
- transport: game.crowdyStudioAgent,
717
- createSession: {
718
- appId, projectId, gridId,
719
- mode: 'BUILD',
720
- providerDataConsent: true,
721
- idempotencyKey: crypto.randomUUID(),
712
+ const studio = createCrowdyStudioEmbed({
713
+ client: game,
714
+ appId,
715
+ dsh: {
716
+ graphql: game.graphql,
717
+ webBase: '/dsh/', // where dist/dsh-web is served
718
+ graphqlUrl: `${apiOrigin}/graphql`,
719
+ apiOrigin,
720
+ getToken: () => game.getToken(),
721
+ persistScope: `${appId}/${userId}`, // browser-side session persistence key
722
+ studioOrigin: 'https://studio.crowdedkingdoms.com',
723
+ },
724
+ });
725
+
726
+ // Per open: what the model may see.
727
+ studio.toggle({
728
+ gridId,
729
+ targetPermissions,
730
+ playerHost, // PlayerHostAdapterV1 → game_observe
731
+ dshHost: {
732
+ captureFrame: () => renderer.captureFrame(), // screenshot tool + auto-capture after draft tests
733
+ describeView: () => hud.summary(),
734
+ clientLogs: () => modLogs.tail(200),
722
735
  },
723
736
  });
724
- await agent.initialize(); // attach epoch → durable replay/gap fill → live tail
725
737
  ```
726
738
 
727
- See [Agentic Crowdy Studio](https://docs.crowdedkingdoms.com/crowdyjs/agentic-crowdy-studio)
728
- for the full session, lease, and approval model.
739
+ The pane shows a provider-data notice once per app (recorded with
740
+ `crowdyStudioSetProviderConsent`), a Screenshot button, and today's spend
741
+ against the policy ceiling. "Fix with AI" on any problem queues a prompt into
742
+ the agent. `@crowdedkingdoms/crowdyjs/crowdy-dsh` exports the pieces
743
+ (`CrowdyStudioDshPane`, `StudioDshBridge`, `CrowdyStudioDshTransport`, the
744
+ bridge protocol) for custom chrome; `@crowdedkingdoms/crowdyjs/player-host`
745
+ keeps the `PlayerHostAdapterV1` observation contract and its schemas.
746
+
747
+ The host document must allow the iframe (`frame-src 'self'`) and serve the
748
+ harness path with `script-src 'self' 'unsafe-eval' 'unsafe-inline' blob:`,
749
+ `connect-src 'self' blob:`, `worker-src 'self' blob:` and
750
+ `frame-ancestors 'self'`; the game page's own policy stays strict. The iframe
751
+ is same-origin by design (`BroadcastChannel` and OPFS are origin-scoped), so
752
+ its `sandbox="allow-scripts allow-same-origin"` does not isolate it from the
753
+ page; that CSP is the control. See the
754
+ [`@crowdedkingdoms/crowdy-dsh` README on npm](https://www.npmjs.com/package/@crowdedkingdoms/crowdy-dsh).
729
755
 
730
756
  ## Errors
731
757
 
package/dist/client.d.ts CHANGED
@@ -91,6 +91,7 @@ export declare class GraphQLClient {
91
91
  private readonly logger;
92
92
  private readonly lbCookieStore?;
93
93
  private onWrongDatacenter?;
94
+ get endpoint(): string;
94
95
  /**
95
96
  * @param config - Endpoint, timeout, and logger options; see
96
97
  * {@link GraphQLClientConfig}.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAahD,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,aAAa;IACxB,yEAAyE;IACzE,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAgB;IAC/C,OAAO,CAAC,iBAAiB,CAAC,CAEM;IAEhC;;;;;;OAMG;gBACS,MAAM,EAAE,mBAAmB,YAAK,EAAE,OAAO,EAAE,YAAY;IAkBnE;;;;;;;OAOG;IACH,yBAAyB,CACvB,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAC5D,IAAI;IAIP;;;;OAIG;IACH,WAAW,IAAI,MAAM;IAIrB;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,OAAO,CAAC,OAAO,EAAE,UAAU,EAC/B,QAAQ,EAAE,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,EAChD,SAAS,CAAC,EAAE,UAAU,EACtB,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GACrC,OAAO,CAAC,OAAO,CAAC;IASnB;;;;;;;;;;;;;;;;;;;OAmBG;IACG,KAAK,CAAC,CAAC,GAAG,GAAG,EACjB,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACvC,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GACrC,OAAO,CAAC,CAAC,CAAC;IA0Cb,0EAA0E;YAC5D,OAAO;CAyEtB;AAED;;;GAGG;AACH,OAAO,EAAE,aAAa,IAAI,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAahD,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAG1D;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACzE;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,aAAa;IACxB,yEAAyE;IACzE,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAgB;IAC/C,OAAO,CAAC,iBAAiB,CAAC,CAEM;IAEhC,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;;;;;OAMG;gBACS,MAAM,EAAE,mBAAmB,YAAK,EAAE,OAAO,EAAE,YAAY;IAkBnE;;;;;;;OAOG;IACH,yBAAyB,CACvB,OAAO,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAC5D,IAAI;IAIP;;;;OAIG;IACH,WAAW,IAAI,MAAM;IAIrB;;;;;;;;;;;OAWG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,OAAO,CAAC,OAAO,EAAE,UAAU,EAC/B,QAAQ,EAAE,iBAAiB,CAAC,OAAO,EAAE,UAAU,CAAC,EAChD,SAAS,CAAC,EAAE,UAAU,EACtB,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GACrC,OAAO,CAAC,OAAO,CAAC;IASnB;;;;;;;;;;;;;;;;;;;OAmBG;IACG,KAAK,CAAC,CAAC,GAAG,GAAG,EACjB,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACvC,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GACrC,OAAO,CAAC,CAAC,CAAC;IA0Cb,0EAA0E;YAC5D,OAAO;CAyEtB;AAED;;;GAGG;AACH,OAAO,EAAE,aAAa,IAAI,gBAAgB,EAAE,CAAC"}
package/dist/client.js CHANGED
@@ -33,6 +33,9 @@ import { CROWDY_DEFAULT_HTTP_ORIGIN } from './default-origin.js';
33
33
  * Also exported under the alias {@link GraphQLTransport}.
34
34
  */
35
35
  export class GraphQLClient {
36
+ get endpoint() {
37
+ return this.graphqlEndpoint;
38
+ }
36
39
  /**
37
40
  * @param config - Endpoint, timeout, and logger options; see
38
41
  * {@link GraphQLClientConfig}.
@@ -59,7 +59,6 @@ import { GameModelAPI } from './domains/gameModel.js';
59
59
  import { ComputeAPI } from './domains/compute.js';
60
60
  import { PlayerComputeAPI } from './domains/playerCompute.js';
61
61
  import { CrowdyStudioAPI } from './domains/crowdyStudio.js';
62
- import { CrowdyAgentGraphQLTransport } from './crowdy-agent/graphql-transport.js';
63
62
  import { CrowdyStudioGitHubTransport } from './crowdy-studio/github/transport.js';
64
63
  import { PlayerWalletAPI } from './domains/playerWallet.js';
65
64
  import { MarketplaceAPI } from './domains/marketplace.js';
@@ -260,8 +259,6 @@ export declare class CrowdyClient {
260
259
  readonly playerCompute: PlayerComputeAPI;
261
260
  /** Crowdy Studio cloud projects, libraries, and common source files. */
262
261
  readonly crowdyStudio: CrowdyStudioAPI;
263
- /** Durable typed Agentic Crowdy Studio GraphQL transport. */
264
- readonly crowdyStudioAgent: CrowdyAgentGraphQLTransport;
265
262
  /** GitHub repository loop for Crowdy Studio projects (same session; the API resolves the repo from the bind). */
266
263
  readonly crowdyStudioGitHub: CrowdyStudioGitHubTransport;
267
264
  /** P4a marketplace (free mode): store, installs, consent, claim flows. */
@@ -342,6 +339,8 @@ export declare class CrowdyClient {
342
339
  kit(appId: string, options?: GameKitOptions): GameKitClient;
343
340
  /** Closes the WebSocket and clears the in-memory auth token. */
344
341
  close(): void;
342
+ /** The configured or discovered GraphQL endpoint URL. */
343
+ get graphqlEndpoint(): string;
345
344
  }
346
345
  export declare function createCrowdyClient(config?: CrowdyClientConfig): CrowdyClient;
347
346
  //# sourceMappingURL=crowdy-client.d.ts.map
@@ -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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"}
@@ -60,7 +60,6 @@ import { GameModelAPI } from './domains/gameModel.js';
60
60
  import { ComputeAPI } from './domains/compute.js';
61
61
  import { PlayerComputeAPI } from './domains/playerCompute.js';
62
62
  import { CrowdyStudioAPI } from './domains/crowdyStudio.js';
63
- import { CrowdyAgentGraphQLTransport } from './crowdy-agent/graphql-transport.js';
64
63
  import { CrowdyStudioGitHubTransport } from './crowdy-studio/github/transport.js';
65
64
  import { PlayerWalletAPI } from './domains/playerWallet.js';
66
65
  import { MarketplaceAPI } from './domains/marketplace.js';
@@ -89,13 +88,13 @@ export class CrowdyClient {
89
88
  // invented around it, because the alternative is worse than having no
90
89
  // default: `createCrowdyClient({ httpUrl: 'https://my-host' })` would get
91
90
  // HTTP on their host and the WEBSOCKET on the tier default, splitting one
92
- // session across two origins while looking connected. `gameModel` and
93
- // `crowdyStudioAgent` refuse a missing wsUrl loudly today and must go on
94
- // doing so — a refusal replaced by a silent wrong answer is a bad trade even
95
- // when the wrong answer is a live host.
91
+ // session across two origins while looking connected. `gameModel` refuses
92
+ // a missing wsUrl loudly today and must go on doing so — a refusal
93
+ // replaced by a silent wrong answer is a bad trade even when the wrong
94
+ // answer is a live host.
96
95
  //
97
96
  // Resolved ONCE here so every sub-client below agrees. Applied per-transport
98
- // it reached two of five: `gameModel` and `crowdyStudioAgent` were handed
97
+ // it reached some transports and not others: `gameModel` was handed
99
98
  // `undefined` while the two transports had an answer, and a default that
100
99
  // reaches some members of a set and not others is a third configuration
101
100
  // nothing was designed for.
@@ -213,10 +212,6 @@ export class CrowdyClient {
213
212
  this.playerCompute = new PlayerComputeAPI(this.graphql);
214
213
  this.crowdyStudio = new CrowdyStudioAPI(this.graphql);
215
214
  this.crowdyStudioGitHub = new CrowdyStudioGitHubTransport(this.graphql);
216
- this.crowdyStudioAgent = new CrowdyAgentGraphQLTransport(this.graphql, {
217
- wsUrl: config.wsEndpoint ?? toGraphqlEndpoint(wsUrl, 'graphql'),
218
- getToken: () => this.session.getToken(),
219
- });
220
215
  this.playerWallet = new PlayerWalletAPI(this.graphql);
221
216
  this.marketplace = new MarketplaceAPI(this.graphql);
222
217
  this.playerModel = new PlayerModelAPI(this.graphql);
@@ -346,10 +341,13 @@ export class CrowdyClient {
346
341
  }
347
342
  /** Closes the WebSocket and clears the in-memory auth token. */
348
343
  close() {
349
- this.crowdyStudioAgent.close();
350
344
  this.realtime.close();
351
345
  this.session.setToken(null);
352
346
  }
347
+ /** The configured or discovered GraphQL endpoint URL. */
348
+ get graphqlEndpoint() {
349
+ return this.graphql.endpoint;
350
+ }
353
351
  }
354
352
  export function createCrowdyClient(config = {}) {
355
353
  return new CrowdyClient(config);
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Page half of the Studio ↔ harness bridge.
3
+ *
4
+ * Owns the iframe handshake (seed files, persistence scope, boot nonce), the
5
+ * `BroadcastChannel` the worker's tools call into, and the mapping from those
6
+ * calls onto the headless `CrowdyStudioController` and the game's
7
+ * `PlayerHostAdapterV1` (observe only). Everything the model asks for runs
8
+ * here with the player's own authority, through the same controller methods
9
+ * the human buttons use; a live deploy additionally waits for the player to
10
+ * confirm on the page.
11
+ *
12
+ * Where the player's app token goes, precisely: the harness worker needs it
13
+ * to call the metered model endpoint and the GraphQL API as the player. It is
14
+ * sent over the channel (`page.hello`, `page.token`), held in the worker's
15
+ * memory as `process.env.CROWDY_APP_TOKEN`, and never written to a seed file,
16
+ * the virtual filesystem or OPFS. The model has no tool that reads the
17
+ * environment, and the Crowdy filesystem backend serves only the project
18
+ * mount, so `read_file` cannot reach it either.
19
+ *
20
+ * The iframe is same-origin by design: `BroadcastChannel` and OPFS are both
21
+ * origin-scoped. A `sandbox` attribute therefore cannot isolate it, and the
22
+ * Content-Security-Policy the host serves on `/dsh/*` is the control that
23
+ * matters (see the-construct's `security-headers.mjs`). Moving the harness to
24
+ * its own origin with a `MessageChannel` relay is tracked as a follow-up.
25
+ */
26
+ import type { CrowdyStudioController } from '../crowdy-studio/controller.js';
27
+ import type { PlayerHostAdapterV1 } from '../player-host/types.js';
28
+ import { type DshScreenshotResult } from './protocol.js';
29
+ import type { CrowdyStudioDshTransport, CrowdyStudioModelCatalogEntry } from './transport.js';
30
+ /** What the game supplies so the model can see and act. */
31
+ export interface CrowdyStudioDshHost {
32
+ /**
33
+ * Capture what the player sees. The game decides how (usually the WebGL
34
+ * canvas right after a frame); the bridge downscales to `maxSide` and
35
+ * encodes PNG. Omit when the game cannot capture; `screenshot` then fails
36
+ * with a clear message.
37
+ */
38
+ captureFrame?(): Promise<HTMLCanvasElement | ImageBitmap | Blob | null>;
39
+ /** One-line description of the current view, attached beside a capture. */
40
+ describeView?(): string | undefined;
41
+ /**
42
+ * Structured world observation; the `game_observe` tool and `context/`.
43
+ * Observe only: the bridge has no request that dispatches a command, so a
44
+ * host may pass its full `PlayerHostAdapterV1` or just `{ observe }`.
45
+ */
46
+ playerHost?: Pick<PlayerHostAdapterV1, 'observe'>;
47
+ /** Recent `crowdy::log` lines from the CLIENT module and browser runtime errors. */
48
+ clientLogs?(): readonly string[];
49
+ }
50
+ export interface StudioDshBridgeOptions {
51
+ controller: CrowdyStudioController;
52
+ transport: CrowdyStudioDshTransport;
53
+ appId: string;
54
+ /** Stable per-player key for session persistence; never a token. */
55
+ persistScope: string;
56
+ getToken(): string | null;
57
+ /** GraphQL endpoint the harness reads/writes project files through. */
58
+ graphqlUrl: string;
59
+ host?: CrowdyStudioDshHost;
60
+ /** Longest screenshot side, in pixels. */
61
+ maxCaptureSide?: number;
62
+ /**
63
+ * Ask the player, on the page, whether the agent may deploy live. Resolves
64
+ * `true` to proceed. Without it `studio.deployLive` is refused: the approval
65
+ * inside the harness UI is not visible to the page and cannot stand in for
66
+ * this one.
67
+ */
68
+ confirmLiveDeploy?(summary: {
69
+ projectName: string;
70
+ }): Promise<boolean>;
71
+ /** Called when the worker changed a project file, after the controller reloaded. */
72
+ onFileChanged?(change: {
73
+ target: 'SERVER' | 'CLIENT';
74
+ path: string;
75
+ }): void;
76
+ onWarning?(message: string): void;
77
+ onStatus?(status: StudioDshBridgeStatus): void;
78
+ }
79
+ export type StudioDshBridgeStatus = {
80
+ phase: 'idle';
81
+ } | {
82
+ phase: 'waiting-for-frame';
83
+ } | {
84
+ phase: 'booting';
85
+ } | {
86
+ phase: 'ready';
87
+ store?: string;
88
+ } | {
89
+ phase: 'failed';
90
+ message: string;
91
+ };
92
+ export declare class StudioDshBridge {
93
+ private readonly options;
94
+ /** Unguessable: any same-origin script can open a `BroadcastChannel` by name. */
95
+ readonly channelName: string;
96
+ /**
97
+ * One-time secret carried by every frame on the channel. The iframe boot
98
+ * message delivers it to the worker; a host that boots the harness itself
99
+ * (tests, a native shell) reads it here and must pass it along.
100
+ */
101
+ readonly nonce: string;
102
+ private channel;
103
+ private frameListener;
104
+ private booted;
105
+ private lastHelloAt;
106
+ private lastToken;
107
+ private lastProjectId;
108
+ private lastSaveState;
109
+ private unsubscribeState;
110
+ private tokenTimer;
111
+ private captureCounter;
112
+ private readonly inflight;
113
+ private models;
114
+ private status;
115
+ /** One live-deploy question at a time: a second request must not replace the first prompt. */
116
+ private liveDeployPending;
117
+ constructor(options: StudioDshBridgeOptions);
118
+ get currentStatus(): StudioDshBridgeStatus;
119
+ /** The models the harness was booted with. */
120
+ get catalog(): readonly CrowdyStudioModelCatalogEntry[];
121
+ /**
122
+ * Attach to the iframe: answer its `ready` with the boot files and start the
123
+ * broadcast channel. Resolves once the harness reports it booted.
124
+ */
125
+ attach(frame: HTMLIFrameElement): Promise<void>;
126
+ /**
127
+ * Join the broadcast channel and start mirroring controller state, without
128
+ * an iframe handshake. `attach` calls this; a host that boots the harness
129
+ * itself (tests, a native shell) calls it directly.
130
+ */
131
+ connect(): void;
132
+ detach(): void;
133
+ /** Push a capture the player took from the pane header into `captures/`. */
134
+ shareCapture(label?: string): Promise<DshScreenshotResult>;
135
+ /** Queue text into the agent's current session (e.g. "Fix with AI"). */
136
+ prompt(text: string, mode?: 'queue' | 'steer'): void;
137
+ /** Re-send the token (the page refreshed it). */
138
+ tokenChanged(): void;
139
+ private bootMessage;
140
+ private openChannel;
141
+ private hello;
142
+ private emit;
143
+ private reply;
144
+ private fail;
145
+ private handle;
146
+ private onWorkerEvent;
147
+ private dispatch;
148
+ private build;
149
+ private runtimeStatus;
150
+ private screenshot;
151
+ private watchController;
152
+ private setStatus;
153
+ }
154
+ /** Render the harness settings that point its native adapter at the metered endpoint. */
155
+ export declare function renderSettingsYaml(modelBaseUrl: string, models: readonly CrowdyStudioModelCatalogEntry[]): string;
156
+ //# sourceMappingURL=bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/crowdy-dsh/bridge.ts"],"names":[],"mappings":"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"}