@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.
@@ -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
- * `?seats=` player だけの roster に落とす。 壊れた申告は null。
18
+ * roster の申告を player だけに落とす。 壊れた申告は null。
19
19
  *
20
20
  * 観測者は roster に載らない。 旧ホストは観測席も載せてくるので、 配役に混ざらないよう
21
21
  * ここで落とす。
22
22
  */
23
- function parseRoster(seatsParam) {
24
- if (!seatsParam)
23
+ function parseRoster(rosterParam) {
24
+ if (!rosterParam)
25
25
  return null;
26
26
  let raw;
27
27
  try {
28
- raw = JSON.parse(seatsParam);
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
- const declared = parseRoster(url.searchParams.get('seats'));
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&seats=<json>&revisionId=dev`
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
  */
@@ -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
- * seats=<json>&revisionId=dev` を付ける。 SDK は既存 online mode で dev-server に
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 の `?seats=` にも渡らない。
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
- url.searchParams.set('seats', JSON.stringify(opts.players.map(toWireSeat)));
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uzuhq/code-cli",
3
- "version": "0.5.6",
3
+ "version": "0.5.7",
4
4
  "description": "UZU ゲーム開発 CLI - ビルド・パブリッシュ・プロジェクト作成ツール",
5
5
  "type": "module",
6
6
  "bin": {