@crowdedkingdoms/crowdyjs 15.12.1 → 16.0.0-test.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.
- package/MIGRATION.md +55 -0
- package/README.md +67 -41
- package/dist/client.d.ts +1 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +3 -0
- package/dist/crowdy-client.d.ts +2 -3
- package/dist/crowdy-client.d.ts.map +1 -1
- package/dist/crowdy-client.js +9 -11
- package/dist/crowdy-dsh/bridge.d.ts +156 -0
- package/dist/crowdy-dsh/bridge.d.ts.map +1 -0
- package/dist/crowdy-dsh/bridge.js +523 -0
- package/dist/crowdy-dsh/index.d.ts +11 -0
- package/dist/crowdy-dsh/index.d.ts.map +1 -0
- package/dist/crowdy-dsh/index.js +10 -0
- package/dist/crowdy-dsh/pane.d.ts +64 -0
- package/dist/crowdy-dsh/pane.d.ts.map +1 -0
- package/dist/crowdy-dsh/pane.js +247 -0
- package/dist/crowdy-dsh/protocol.d.ts +249 -0
- package/dist/crowdy-dsh/protocol.d.ts.map +1 -0
- package/dist/crowdy-dsh/protocol.js +39 -0
- package/dist/crowdy-dsh/transport.d.ts +66 -0
- package/dist/crowdy-dsh/transport.d.ts.map +1 -0
- package/dist/crowdy-dsh/transport.js +88 -0
- package/dist/crowdy-studio/controller.d.ts +8 -0
- package/dist/crowdy-studio/controller.d.ts.map +1 -1
- package/dist/crowdy-studio/controller.js +33 -1
- package/dist/crowdy-studio/dom-shell.d.ts +21 -4
- package/dist/crowdy-studio/dom-shell.d.ts.map +1 -1
- package/dist/crowdy-studio/dom-shell.js +32 -17
- package/dist/crowdy-studio/embed/index.d.ts +1 -1
- package/dist/crowdy-studio/embed/index.d.ts.map +1 -1
- package/dist/crowdy-studio/embed/panel.d.ts +18 -18
- package/dist/crowdy-studio/embed/panel.d.ts.map +1 -1
- package/dist/crowdy-studio/embed/panel.js +7 -21
- package/dist/crowdy-studio/index.d.ts +2 -3
- package/dist/crowdy-studio/index.d.ts.map +1 -1
- package/dist/crowdy-studio/index.js +1 -2
- package/dist/crowdy-studio/mount.d.ts +29 -14
- package/dist/crowdy-studio/mount.d.ts.map +1 -1
- package/dist/crowdy-studio/mount.js +39 -126
- package/dist/crowdy-studio/styles.d.ts +1 -1
- package/dist/crowdy-studio/styles.d.ts.map +1 -1
- package/dist/crowdy-studio/styles.js +5 -0
- package/dist/default-origin.d.ts +6 -6
- package/dist/default-origin.js +6 -6
- package/dist/generated/graphql.d.ts +76 -2438
- package/dist/generated/graphql.d.ts.map +1 -1
- package/dist/generated/graphql.js +0 -50
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/kit/npcs.d.ts.map +1 -1
- package/dist/kit/social.d.ts.map +1 -1
- package/dist/{crowdy-agent/errors.d.ts → player-host/agent-errors.d.ts} +1 -1
- package/dist/player-host/agent-errors.d.ts.map +1 -0
- package/dist/player-host/agent-types.d.ts +18 -0
- package/dist/player-host/agent-types.d.ts.map +1 -0
- package/dist/player-host/agent-types.js +7 -0
- package/dist/player-host/index.d.ts +12 -4
- package/dist/player-host/index.d.ts.map +1 -1
- package/dist/player-host/index.js +11 -4
- package/dist/{crowdy-agent/schema.d.ts → player-host/json-schema.d.ts} +1 -1
- package/dist/player-host/json-schema.d.ts.map +1 -0
- package/dist/{crowdy-agent/schema.js → player-host/json-schema.js} +1 -1
- package/dist/player-host/schemas.d.ts +1 -1
- package/dist/player-host/schemas.d.ts.map +1 -1
- package/dist/player-host/schemas.js +2 -2
- package/dist/player-host/types.d.ts +2 -2
- package/dist/player-host/types.d.ts.map +1 -1
- package/package.json +5 -7
- package/dist/crowdy-agent/browser-dispatcher.d.ts +0 -41
- package/dist/crowdy-agent/browser-dispatcher.d.ts.map +0 -1
- package/dist/crowdy-agent/browser-dispatcher.js +0 -264
- package/dist/crowdy-agent/controller.d.ts +0 -152
- package/dist/crowdy-agent/controller.d.ts.map +0 -1
- package/dist/crowdy-agent/controller.js +0 -1289
- package/dist/crowdy-agent/errors.d.ts.map +0 -1
- package/dist/crowdy-agent/graphql-transport.d.ts +0 -154
- package/dist/crowdy-agent/graphql-transport.d.ts.map +0 -1
- package/dist/crowdy-agent/graphql-transport.js +0 -854
- package/dist/crowdy-agent/index.d.ts +0 -17
- package/dist/crowdy-agent/index.d.ts.map +0 -1
- package/dist/crowdy-agent/index.js +0 -16
- package/dist/crowdy-agent/registry.d.ts +0 -29
- package/dist/crowdy-agent/registry.d.ts.map +0 -1
- package/dist/crowdy-agent/registry.js +0 -281
- package/dist/crowdy-agent/schema.d.ts.map +0 -1
- package/dist/crowdy-agent/session-resume.d.ts +0 -24
- package/dist/crowdy-agent/session-resume.d.ts.map +0 -1
- package/dist/crowdy-agent/session-resume.js +0 -76
- package/dist/crowdy-agent/studio-tools.d.ts +0 -15
- package/dist/crowdy-agent/studio-tools.d.ts.map +0 -1
- package/dist/crowdy-agent/studio-tools.js +0 -280
- package/dist/crowdy-agent/tool-descriptors.d.ts +0 -4
- package/dist/crowdy-agent/tool-descriptors.d.ts.map +0 -1
- package/dist/crowdy-agent/tool-descriptors.js +0 -1049
- package/dist/crowdy-agent/transport.d.ts +0 -152
- package/dist/crowdy-agent/transport.d.ts.map +0 -1
- package/dist/crowdy-agent/transport.js +0 -27
- package/dist/crowdy-agent/types.d.ts +0 -328
- package/dist/crowdy-agent/types.d.ts.map +0 -1
- package/dist/crowdy-agent/types.js +0 -37
- package/dist/crowdy-studio/agent-dom-shell.d.ts +0 -68
- package/dist/crowdy-studio/agent-dom-shell.d.ts.map +0 -1
- package/dist/crowdy-studio/agent-dom-shell.js +0 -418
- package/dist/player-host/control-banner.d.ts +0 -40
- package/dist/player-host/control-banner.d.ts.map +0 -1
- package/dist/player-host/control-banner.js +0 -252
- package/dist/player-host/control-gate.d.ts +0 -77
- package/dist/player-host/control-gate.d.ts.map +0 -1
- package/dist/player-host/control-gate.js +0 -197
- package/dist/player-host/lease-manager.d.ts +0 -66
- package/dist/player-host/lease-manager.d.ts.map +0 -1
- package/dist/player-host/lease-manager.js +0 -428
- package/dist/player-host/tools.d.ts +0 -13
- package/dist/player-host/tools.d.ts.map +0 -1
- package/dist/player-host/tools.js +0 -79
- /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.
|
|
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,
|
|
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
|
|
681
|
-
|
|
682
|
-
`
|
|
683
|
-
|
|
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
|
-
###
|
|
691
|
-
|
|
692
|
-
The agent
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
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
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
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
|
-
|
|
728
|
-
|
|
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}.
|
package/dist/client.d.ts.map
CHANGED
|
@@ -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}.
|
package/dist/crowdy-client.d.ts
CHANGED
|
@@ -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":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAK5C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EACL,SAAS,EACT,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAClF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"crowdy-client.d.ts","sourceRoot":"","sources":["../src/crowdy-client.ts"],"names":[],"mappings":"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"}
|
package/dist/crowdy-client.js
CHANGED
|
@@ -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`
|
|
93
|
-
//
|
|
94
|
-
//
|
|
95
|
-
//
|
|
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
|
|
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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"}
|