@uzuhq/code-cli 0.5.6 → 0.5.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dev-server/game-room.js +6 -5
- package/dist/dev.js +1 -1
- package/dist/harness/mount.js +7 -3
- package/package.json +1 -1
|
@@ -15,17 +15,17 @@ import { randomUUID } from 'crypto';
|
|
|
15
15
|
import { compare, applyJsonMergePatch, applyJsonPatch } from './json-patch.js';
|
|
16
16
|
import { SeededRandomImpl } from './random.js';
|
|
17
17
|
/**
|
|
18
|
-
*
|
|
18
|
+
* roster の申告を player だけに落とす。 壊れた申告は null。
|
|
19
19
|
*
|
|
20
20
|
* 観測者は roster に載らない。 旧ホストは観測席も載せてくるので、 配役に混ざらないよう
|
|
21
21
|
* ここで落とす。
|
|
22
22
|
*/
|
|
23
|
-
function parseRoster(
|
|
24
|
-
if (!
|
|
23
|
+
function parseRoster(rosterParam) {
|
|
24
|
+
if (!rosterParam)
|
|
25
25
|
return null;
|
|
26
26
|
let raw;
|
|
27
27
|
try {
|
|
28
|
-
raw = JSON.parse(
|
|
28
|
+
raw = JSON.parse(rosterParam);
|
|
29
29
|
}
|
|
30
30
|
catch {
|
|
31
31
|
return null;
|
|
@@ -278,7 +278,8 @@ export class GameRoom {
|
|
|
278
278
|
// constructor 注入 (server 権威) が無い場合のみ、 接続クエリの申告 roster に
|
|
279
279
|
// fallback する (本番 DO と同じ経路)。 dev harness では常に注入済みなので
|
|
280
280
|
// ここは通らない。
|
|
281
|
-
|
|
281
|
+
// 移行期: 旧 SDK を同梱したシナリオは `seats=` を送り続ける。
|
|
282
|
+
const declared = parseRoster(url.searchParams.get('players') ?? url.searchParams.get('seats'));
|
|
282
283
|
if (declared && declared.length > 0) {
|
|
283
284
|
this.players = declared;
|
|
284
285
|
console.log(`[GameRoom] 📋 Roster pinned: ${this.players.map((p) => p.id).join(', ')}`);
|
package/dist/dev.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* 2. child stdout/stderr を line-by-line で監視し、 `dev.readyPattern` (default vite 向け)
|
|
7
7
|
* の regex match をトリガに scenario dev server の URL を確定
|
|
8
8
|
* 3. harness http+WebSocket server を立て、 iframe grid + HUD を親 frame に描画
|
|
9
|
-
* 4. `?server=ws://localhost:<port>&roomId=<key>&seatId=dev_N&
|
|
9
|
+
* 4. `?server=ws://localhost:<port>&roomId=<key>&seatId=dev_N&players=<json>&revisionId=dev`
|
|
10
10
|
* を子 iframe URL に組み立てて mount。 SDK は既存 online mode でそのまま接続する
|
|
11
11
|
* 5. `window.__uzu_dev` は harness page が dev-server の管理 channel と WS で会話して expose
|
|
12
12
|
*/
|
package/dist/harness/mount.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Dev harness の iframe grid を parent frame に描画する。
|
|
3
3
|
*
|
|
4
4
|
* 子 iframe URL には `?server=ws://localhost:<port>&roomId=<key>&seatId=dev_N&
|
|
5
|
-
*
|
|
5
|
+
* players=<json>&revisionId=dev` を付ける。 SDK は既存 online mode で dev-server に
|
|
6
6
|
* 接続する (本番 Cloudflare Worker と同じ shape)。
|
|
7
7
|
*/
|
|
8
8
|
import qrcode from 'qrcode-generator';
|
|
@@ -275,7 +275,7 @@ function createLifecycleStatusRow() {
|
|
|
275
275
|
}
|
|
276
276
|
/**
|
|
277
277
|
* roster に載らない観測席の pane。 席の中身は固定なので manifest の宣言から起こす。
|
|
278
|
-
* grid の中だけの存在で、 GameRoom にも iframe の `?
|
|
278
|
+
* grid の中だけの存在で、 GameRoom にも iframe の `?players=` にも渡らない。
|
|
279
279
|
*/
|
|
280
280
|
function observerPanes(opts) {
|
|
281
281
|
const pane = (id, nickname, seatKind) => ({
|
|
@@ -329,7 +329,11 @@ function buildIframeUrl(opts, playerIndex) {
|
|
|
329
329
|
url.searchParams.set('roomId', opts.roomKey);
|
|
330
330
|
url.searchParams.set('seatId', pane.id);
|
|
331
331
|
// roster は player 席だけ。 観測席の iframe も同じ roster を送る (自分は載らない)。
|
|
332
|
-
|
|
332
|
+
// 移行期: 手元の scenario が同梱する SDK が旧版 (0.7.3 等) だと `?seats=` が無いだけで
|
|
333
|
+
// run() の入口が throw する。 旧名も併せて載せる。
|
|
334
|
+
const roster = JSON.stringify(opts.players.map(toWireSeat));
|
|
335
|
+
url.searchParams.set('players', roster);
|
|
336
|
+
url.searchParams.set('seats', roster);
|
|
333
337
|
// 自分の席種別。 観測席で GM ビューと観戦ビューを出し分けるのに要る (state からは
|
|
334
338
|
// 導けない)。 iframe URL 限定で WebSocket には出さない。
|
|
335
339
|
url.searchParams.set('seatKind', pane.seatKind);
|