@tyhld/conductor 0.12.3 → 0.12.4

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/cli.js CHANGED
@@ -373,7 +373,7 @@ function runSetupCommand(argv) {
373
373
  if (!existsSync(setup)) {
374
374
  fail(`インストーラが見つかりません: ${setup}\n` +
375
375
  ' 配布物が壊れている可能性があります。次の1行で入れ直してください:\n' +
376
- ' npm i -g @tyhld/conductor');
376
+ ' npm i -g @tyhld/conductor --@tyhld:registry=https://registry.npmjs.org');
377
377
  }
378
378
  const r = spawnSync('bash', [setup, ...argv], { stdio: 'inherit' });
379
379
  process.exit(r.status ?? 1);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tyhld/conductor",
3
- "version": "0.12.3",
3
+ "version": "0.12.4",
4
4
  "description": "采配くん管制の見守りアプリ(conductor-agent)。各PCで常駐し、中央(devlog-tracker)へ定期的に生存報告(heartbeat)を送る常駐CLI。",
5
5
  "type": "module",
6
6
  "bin": {
@@ -261,6 +261,57 @@ conductor_version() {
261
261
  fi
262
262
  }
263
263
 
264
+ # ═════════════════════════════════════════════════════════════════════════════
265
+ # ★采配くん本体の取得元(この4行と2つの関数が【正本】・えふさん確定 2026-09-16)
266
+ #
267
+ # 【なぜ要るか(実測 2026-09-16・便 9858450b)】
268
+ # 開発機は私設の部品(@tyhld/auth 等)を GitHub Packages から取るため、
269
+ # `@tyhld` の取得先そのものが GitHub Packages を向いている。
270
+ # npm config get @tyhld:registry -> https://npm.pkg.github.com
271
+ # npm view @tyhld/conductor version -> 0.5.0 (GitHub Packages の古い版)
272
+ # npm view @tyhld/conductor version --@tyhld:registry=https://registry.npmjs.org
273
+ # -> 0.12.3 (公開 npm の今の版)
274
+ # この状態で `npm update -g @tyhld/conductor` を打つと、GitHub Packages の 0.5.0 を
275
+ # 入れ直す。だから「更新しました」と出たあとに「版が古すぎます」で止まっていた。
276
+ #
277
+ # 【決めたこと】★`@tyhld` の設定そのものは変えない(他の社内部品は GitHub Packages のまま)。
278
+ # 本体を取る・更新する・版を問い合わせるときだけ、そのコマンド1回に限って公開 npm を
279
+ # 明示する。`--@tyhld:registry=…` はそのコマンドの中だけで効き、~/.npmrc も
280
+ # npm の全体設定も1文字も書き換えない。
281
+ # ★この指定は「そのコマンドで @tyhld のものを取るとき」に効くので、本体と他の社内部品を
282
+ # 【同じ1回のコマンドで】入れてはいけない。下の関数は本体だけを扱う。
283
+ #
284
+ # 【お客さま機では何も変わらない】`@tyhld` の設定を持たない機は、もともと公開 npm を見る。
285
+ # 明示しても指す先は同じなので、動きは1ミリも変わらない。
286
+ # ═════════════════════════════════════════════════════════════════════════════
287
+ # >>> registry-pin >>> ★この印の間が正本。2つの台本で1文字も違わないことをテストが固定する。
288
+ CONDUCTOR_PKG="@tyhld/conductor"
289
+ CONDUCTOR_REGISTRY="https://registry.npmjs.org"
290
+ # ★npm へ渡す1個の旗。これを付けた回だけ、本体の取得先が公開 npm になる。
291
+ CONDUCTOR_REGISTRY_ARG="--@tyhld:registry=${CONDUCTOR_REGISTRY}"
292
+
293
+ # 公開 npm が「いま配っている版」を問い合わせる(取れなければ空)。
294
+ # ★これが「今回入れるはずの版」の正本。固定の下限ではなく、取得元に聞いた値を使う。
295
+ conductor_published_version() {
296
+ local v
297
+ v="$(npm view "$CONDUCTOR_PKG" version "$CONDUCTOR_REGISTRY_ARG" 2>/dev/null | tr -d '[:space:]')"
298
+ if [[ "$v" =~ ^[0-9]+\.[0-9]+\.[0-9]+ ]]; then
299
+ printf '%s' "${BASH_REMATCH[0]}"
300
+ fi
301
+ }
302
+
303
+ # 本体を入れる/更新する。引数があればその版、無ければ公開 npm の今の版。
304
+ # ★版を決め打ちで渡すので「@latest と書いたのに別の版が入った」が起こせない。
305
+ conductor_npm_install() {
306
+ local want="${1:-}"
307
+ if [[ -z "$want" ]]; then
308
+ npm install -g "$CONDUCTOR_PKG" "$CONDUCTOR_REGISTRY_ARG"
309
+ else
310
+ npm install -g "${CONDUCTOR_PKG}@${want}" "$CONDUCTOR_REGISTRY_ARG"
311
+ fi
312
+ }
313
+ # <<< registry-pin <<<
314
+
264
315
  # apt の道具が「もう使える」か。
265
316
  #
266
317
  # ★名前が入っているかだけでは足りない。python3-venv は【まとめ役の名前】で、実体は
@@ -366,7 +417,7 @@ if [[ "${2:-}" == --profile* ]]; then
366
417
 
367
418
  試作の現場を作るときは、先に采配くんを入れてから次のように打ってください:
368
419
 
369
- npm i -g @tyhld/conductor
420
+ npm i -g @tyhld/conductor --@tyhld:registry=https://registry.npmjs.org
370
421
  conductor setup ${SITE} --profile proto
371
422
 
372
423
  USAGE
@@ -392,7 +443,7 @@ Mac をお使いのようです。この1行の入口は Windows(WSL2 + Ubuntu
392
443
 
393
444
  Mac では、次の2行で設置してください。
394
445
 
395
- npm i -g @tyhld/conductor
446
+ npm i -g @tyhld/conductor --@tyhld:registry=https://registry.npmjs.org
396
447
  conductor setup <お仕事の名前>
397
448
 
398
449
  (先に Homebrew で tmux を、npm で Claude Code を入れてログインしておいてください)
@@ -742,27 +793,56 @@ step '⑨ 采配くん本体を入れる'
742
793
  # 公開 npm には 0.3.0 しか出ておらず、お客さまはそれを掴んでいた。0.3.0 は古い鍵名
743
794
  # (CONDUCTOR_SHARED_SECRET)を読むので、いまの接続情報では「未設定です」で落ちる。
744
795
  # =ここで気づかないと「設置は成功したのに指示が1つも届かない」で終わる。
796
+ # ★入れる版は「公開 npm に聞いた版」(えふさん確定 2026-09-16)。取得元は上の正本に任せる。
797
+ CONDUCTOR_WANT="$(conductor_published_version)"
798
+
745
799
  if [[ "$DRY_RUN" == "1" ]]; then
746
800
  if have conductor; then
747
801
  CONDUCTOR_VER="$(conductor_version)"
748
- if [[ -n "$CONDUCTOR_VER" ]] && ! version_lt "$CONDUCTOR_VER" "$MIN_CONDUCTOR_VERSION"; then
749
- skip "采配くん本体は入っています(${CONDUCTOR_VER} ≧ ${MIN_CONDUCTOR_VERSION})"
802
+ if [[ -n "$CONDUCTOR_WANT" && "$CONDUCTOR_VER" == "$CONDUCTOR_WANT" ]]; then
803
+ skip "采配くん本体は入っています(${CONDUCTOR_VER} = 公開 npm の ${CONDUCTOR_WANT})"
750
804
  else
751
- plan "采配くん本体が古いので更新します(いま ${CONDUCTOR_VER:-不明} → ${MIN_CONDUCTOR_VERSION} 以上)"
805
+ plan "采配くん本体を ${CONDUCTOR_WANT:-最新版} へ揃えます(いま ${CONDUCTOR_VER:-不明})"
752
806
  fi
753
807
  else
754
- plan '采配くん本体を入れます(npm i -g @tyhld/conductor)'
808
+ plan "采配くん本体を入れます(${CONDUCTOR_PKG}@${CONDUCTOR_WANT:-最新版}・取得先 ${CONDUCTOR_REGISTRY})"
755
809
  fi
756
- elif have conductor && [[ -n "$(conductor_version)" ]] \
757
- && ! version_lt "$(conductor_version)" "$MIN_CONDUCTOR_VERSION"; then
758
- skip "采配くん本体は入っています($(conductor_version) ≧ ${MIN_CONDUCTOR_VERSION})"
810
+ elif have conductor && [[ -n "$CONDUCTOR_WANT" ]] && [[ "$(conductor_version)" == "$CONDUCTOR_WANT" ]]; then
811
+ # ★一致していれば何もしない。下限ではなく「公開 npm の今の版と同じか」で見る。
812
+ skip "采配くん本体は入っています($(conductor_version) = 公開 npm の ${CONDUCTOR_WANT})"
759
813
  record "采配くん本体: 済み($(conductor_version))"
760
- elif have conductor; then
761
- say " いま入っている版: $(conductor_version || echo '読み取れません')(${MIN_CONDUCTOR_VERSION} 以上が必要です)"
762
- run '采配くん本体を新しくします' npm install -g @tyhld/conductor@latest \
763
- || die '采配くん本体を新しくできませんでした(インターネット接続をご確認ください)'
814
+ else
815
+ if have conductor; then
816
+ say " いま入っている版: $(conductor_version || echo '読み取れません')(公開 npm は ${CONDUCTOR_WANT:-不明})"
817
+ doing '采配くん本体を新しくします'
818
+ else
819
+ doing '采配くん本体を入れます'
820
+ fi
821
+ conductor_npm_install "$CONDUCTOR_WANT" \
822
+ || die "采配くん本体を入れられませんでした(取得先 ${CONDUCTOR_REGISTRY}・インターネット接続をご確認ください)"
823
+ have conductor || die '采配くん本体を入れましたが呼び出せません(PATH の設定をご確認ください)'
764
824
  CONDUCTOR_VER="$(conductor_version)"
825
+ # ★入れた版と、実際に動く版が一致するか(★この便の要・便 9858450b)。
826
+ # 合否は固定の下限ではなく、取得元に聞いた版との一致で決める。
827
+ if [[ -n "$CONDUCTOR_WANT" && -n "$CONDUCTOR_VER" && "$CONDUCTOR_VER" != "$CONDUCTOR_WANT" ]]; then
828
+ halt "$(cat <<MSG
829
+ 入れた版と、実際に動く版が違います。
830
+
831
+ 期待した版(${CONDUCTOR_REGISTRY} が配っている版): ${CONDUCTOR_WANT}
832
+ 実際に動く版 : ${CONDUCTOR_VER}
833
+ 実行ファイルの場所:
834
+ $(command -v -a conductor 2>/dev/null | sed 's/^/ /' || echo ' (見つかりません)')
835
+
836
+ ★別の取得先から入った物が、PATH の先にいます。次の1行で入れ直してください。
837
+
838
+ npm install -g ${CONDUCTOR_PKG}@${CONDUCTOR_WANT} ${CONDUCTOR_REGISTRY_ARG}
839
+
840
+ それでも直らないときは、この画面をそのままサポートへお送りください。
841
+ MSG
842
+ )"
843
+ fi
765
844
  if [[ -n "$CONDUCTOR_VER" ]] && version_lt "$CONDUCTOR_VER" "$MIN_CONDUCTOR_VERSION"; then
845
+ # ★下限の確認は今までの役割のまま残す(配布そのものが止まっている場合の受け皿)。
766
846
  halt "$(cat <<MSG
767
847
  采配くん本体の版が古すぎます(いま ${CONDUCTOR_VER} / ${MIN_CONDUCTOR_VERSION} 以上が必要です)。
768
848
  新しくしようとしましたが、取ってこられませんでした。
@@ -771,18 +851,13 @@ elif have conductor; then
771
851
 
772
852
  次の1行をお試しください。
773
853
 
774
- npm install -g @tyhld/conductor@latest
854
+ npm install -g ${CONDUCTOR_PKG}@latest ${CONDUCTOR_REGISTRY_ARG}
775
855
 
776
856
  それでも直らないときは、この画面をそのままサポートへお送りください。
777
857
  MSG
778
858
  )"
779
859
  fi
780
- record "采配くん本体: 新しくした(${CONDUCTOR_VER:-不明})"
781
- else
782
- run '采配くん本体を入れます' npm install -g @tyhld/conductor \
783
- || die '采配くん本体を入れられませんでした(インターネット接続をご確認ください)'
784
- have conductor || die '采配くん本体を入れましたが呼び出せません(PATH の設定をご確認ください)'
785
- record "采配くん本体: 入れた($(conductor_version))"
860
+ record "采配くん本体: 用意した(${CONDUCTOR_VER:-不明})"
786
861
  fi
787
862
 
788
863
  # ═════════════════════════════════════════════════════════════════════════════
@@ -134,6 +134,57 @@ conductor_version() {
134
134
  printf '%s' "${BASH_REMATCH[0]}"
135
135
  fi
136
136
  }
137
+ # ═════════════════════════════════════════════════════════════════════════════
138
+ # ★采配くん本体の取得元(この4行と2つの関数が【正本】・えふさん確定 2026-09-16)
139
+ #
140
+ # 【なぜ要るか(実測 2026-09-16・便 9858450b)】
141
+ # 開発機は私設の部品(@tyhld/auth 等)を GitHub Packages から取るため、
142
+ # `@tyhld` の取得先そのものが GitHub Packages を向いている。
143
+ # npm config get @tyhld:registry -> https://npm.pkg.github.com
144
+ # npm view @tyhld/conductor version -> 0.5.0 (GitHub Packages の古い版)
145
+ # npm view @tyhld/conductor version --@tyhld:registry=https://registry.npmjs.org
146
+ # -> 0.12.3 (公開 npm の今の版)
147
+ # この状態で `npm update -g @tyhld/conductor` を打つと、GitHub Packages の 0.5.0 を
148
+ # 入れ直す。だから「更新しました」と出たあとに「版が古すぎます」で止まっていた。
149
+ #
150
+ # 【決めたこと】★`@tyhld` の設定そのものは変えない(他の社内部品は GitHub Packages のまま)。
151
+ # 本体を取る・更新する・版を問い合わせるときだけ、そのコマンド1回に限って公開 npm を
152
+ # 明示する。`--@tyhld:registry=…` はそのコマンドの中だけで効き、~/.npmrc も
153
+ # npm の全体設定も1文字も書き換えない。
154
+ # ★この指定は「そのコマンドで @tyhld のものを取るとき」に効くので、本体と他の社内部品を
155
+ # 【同じ1回のコマンドで】入れてはいけない。下の関数は本体だけを扱う。
156
+ #
157
+ # 【お客さま機では何も変わらない】`@tyhld` の設定を持たない機は、もともと公開 npm を見る。
158
+ # 明示しても指す先は同じなので、動きは1ミリも変わらない。
159
+ # ═════════════════════════════════════════════════════════════════════════════
160
+ # >>> registry-pin >>> ★この印の間が正本。2つの台本で1文字も違わないことをテストが固定する。
161
+ CONDUCTOR_PKG="@tyhld/conductor"
162
+ CONDUCTOR_REGISTRY="https://registry.npmjs.org"
163
+ # ★npm へ渡す1個の旗。これを付けた回だけ、本体の取得先が公開 npm になる。
164
+ CONDUCTOR_REGISTRY_ARG="--@tyhld:registry=${CONDUCTOR_REGISTRY}"
165
+
166
+ # 公開 npm が「いま配っている版」を問い合わせる(取れなければ空)。
167
+ # ★これが「今回入れるはずの版」の正本。固定の下限ではなく、取得元に聞いた値を使う。
168
+ conductor_published_version() {
169
+ local v
170
+ v="$(npm view "$CONDUCTOR_PKG" version "$CONDUCTOR_REGISTRY_ARG" 2>/dev/null | tr -d '[:space:]')"
171
+ if [[ "$v" =~ ^[0-9]+\.[0-9]+\.[0-9]+ ]]; then
172
+ printf '%s' "${BASH_REMATCH[0]}"
173
+ fi
174
+ }
175
+
176
+ # 本体を入れる/更新する。引数があればその版、無ければ公開 npm の今の版。
177
+ # ★版を決め打ちで渡すので「@latest と書いたのに別の版が入った」が起こせない。
178
+ conductor_npm_install() {
179
+ local want="${1:-}"
180
+ if [[ -z "$want" ]]; then
181
+ npm install -g "$CONDUCTOR_PKG" "$CONDUCTOR_REGISTRY_ARG"
182
+ else
183
+ npm install -g "${CONDUCTOR_PKG}@${want}" "$CONDUCTOR_REGISTRY_ARG"
184
+ fi
185
+ }
186
+ # <<< registry-pin <<<
187
+
137
188
  step() { echo; echo "══════════════════════════════════════════════════════════"; echo "[setup] $1"; echo "══════════════════════════════════════════════════════════"; }
138
189
 
139
190
  # ─── OS の見分けと、OS ごとに違う道具(★ADR-019・案C) ───────────────────────
@@ -312,15 +363,24 @@ fi
312
363
  # ─── ② conductor 本体インストール ────────────────────────────────────────────
313
364
  step "② conductor 本体インストール"
314
365
 
315
- # @tyhld/conductor は公開 npm (registry.npmjs.org) で配布されるため、
316
- # PAT や .npmrc の設定は不要。無認証で npm i -g できる。
366
+ # 取得元は上の正本(CONDUCTOR_REGISTRY_ARG)に任せる。★ここに取得先を書かない。
367
+ #
368
+ # ★入れる版を先に決める(えふさん確定 2026-09-16・「最新版という曖昧な指定だけにしない」)。
369
+ # 公開 npm に「いま配っている版」を聞き、その版を名指しで入れる。入れ終わったら、
370
+ # PATH 上で実際に動く conductor の版と【一致するか】を見る。一致しなければ失敗にする。
371
+ # ★合否を固定の下限で決めない。取得元に聞いた値と実際の値の一致が正本。
372
+ CONDUCTOR_WANT="$(conductor_published_version)"
373
+ if [[ -z "$CONDUCTOR_WANT" ]]; then
374
+ warn "公開 npm に版を問い合わせられませんでした(ネットワークの一時的な不調)。版の名指しはせずに進みます。"
375
+ fi
376
+
317
377
  if command -v conductor >/dev/null 2>&1; then
318
- echo "[setup] conductor は既にインストール済みです。更新します..."
319
- npm update -g @tyhld/conductor || warn "npm update に失敗しました。続行します。"
378
+ echo "[setup] conductor は既にインストール済みです。${CONDUCTOR_WANT:-最新版} へ揃えます..."
320
379
  else
321
- echo "[setup] @tyhld/conductor をグローバルインストールします..."
322
- npm install -g @tyhld/conductor || fail "npm install -g @tyhld/conductor に失敗しました。ネットワーク接続を確認してください。"
380
+ echo "[setup] ${CONDUCTOR_PKG} をグローバルインストールします(${CONDUCTOR_WANT:-最新版})..."
323
381
  fi
382
+ conductor_npm_install "$CONDUCTOR_WANT" \
383
+ || fail "采配くん本体を入れられませんでした(取得先: ${CONDUCTOR_REGISTRY})。ネットワーク接続をご確認ください。"
324
384
 
325
385
  # conductor コマンドの存在を再確認
326
386
  if ! command -v conductor >/dev/null 2>&1; then
@@ -328,23 +388,36 @@ if ! command -v conductor >/dev/null 2>&1; then
328
388
  fi
329
389
  echo "[setup] conductor: $(conductor --version 2>/dev/null || command -v conductor)"
330
390
 
331
- # --- ★版が古すぎないかを確かめる(古い版は動かない・実測 2026-09-04) --------
332
- # 上で `npm update -g` は済んでいる。それでもまだ古いなら、取りに行った先に新しい版が
333
- # 無い(=配布が止まっている)ということなので、ここで止めて人へ渡す。
334
- # ★このまま進めると「設置は成功したのに指示が1つも届かない」で終わる。
335
- # お客さまがいちばん困る形なので、必ずここで気づかせる(ADR-017 と同じ考え方)。
391
+ # --- ★入れた版と、実際に動く版が一致するかを確かめる(★この便の要) ----------
392
+ # 【なぜ要るか(実測 2026-09-16・便 9858450b)】開発機は @tyhld の取得先が GitHub Packages を
393
+ # 向いているため、`npm update -g @tyhld/conductor` が古い 0.5.0 を入れ直していた。
394
+ # 「更新しました」と出たあとに「版が古すぎます」で止まる、という分かりにくい形だった。
395
+ # ★取得先を明示しただけでは足りない。入れ終わったあとに【実際に動く版】を見て、
396
+ # 期待と違えば成功にしない。これが再発を構造的に止める。
397
+ # ★一致判定なので、期待より新しい版が動いていても失敗にする(別経路の取り違えが見える)。
398
+ # >>> version-match >>> ★この印の間はテストが切り出して単体で流す。動かすときは消さない。
336
399
  CONDUCTOR_VER="$(conductor_version)"
337
400
  if [[ -z "$CONDUCTOR_VER" ]]; then
338
401
  warn "conductor の版を読み取れませんでした(続行します)。"
402
+ elif [[ -n "$CONDUCTOR_WANT" && "$CONDUCTOR_VER" != "$CONDUCTOR_WANT" ]]; then
403
+ fail "入れた版と、実際に動く版が違います。
404
+ 期待した版(${CONDUCTOR_REGISTRY} が配っている版): ${CONDUCTOR_WANT}
405
+ 実際に動く版 : ${CONDUCTOR_VER}
406
+ 実行ファイルの場所 :
407
+ $(command -v -a conductor 2>/dev/null | sed 's/^/ /' || echo ' (見つかりません)')
408
+ ★別の取得先から入った物が PATH の先にいます。次の1行で入れ直してください:
409
+ npm install -g ${CONDUCTOR_PKG}@${CONDUCTOR_WANT} ${CONDUCTOR_REGISTRY_ARG}"
339
410
  elif version_lt "$CONDUCTOR_VER" "$MIN_CONDUCTOR_VERSION"; then
411
+ # ★下限の確認は今までの役割のまま残す(配布そのものが止まっている場合の受け皿)。
340
412
  fail "采配くん本体の版が古すぎます(いま ${CONDUCTOR_VER} / ${MIN_CONDUCTOR_VERSION} 以上が必要です)。
341
413
  更新を試しましたが、新しい版を取ってこられませんでした。
342
414
  ★古い版のままでは、設置できても指示が1つも届きません(鍵の名前が違うため)。
343
415
  次の1行をお試しのうえ、それでも直らないときはサポートへご連絡ください:
344
- npm install -g @tyhld/conductor@latest"
416
+ npm install -g ${CONDUCTOR_PKG}@latest ${CONDUCTOR_REGISTRY_ARG}"
345
417
  else
346
- echo "[setup] conductor の版: OK(${CONDUCTOR_VER} ≧ ${MIN_CONDUCTOR_VERSION})"
418
+ echo "[setup] conductor の版: OK(${CONDUCTOR_VER}${CONDUCTOR_WANT:+ = 公開 npm の ${CONDUCTOR_WANT}})"
347
419
  fi
420
+ # <<< version-match <<<
348
421
 
349
422
  # ─── ③ node symlink ──────────────────────────────────────────────────────────
350
423
  step "③ node の場所を常駐から見えるようにする"
@@ -710,7 +783,7 @@ PROTO_GEN="$SCRIPT_DIR/../dist/proto-profile.js"
710
783
  if [[ "$PROFILE" == "proto" ]]; then
711
784
  [[ -f "$PROTO_GEN" ]] || fail "試作の型の正本が見つかりません: $PROTO_GEN
712
785
  配布物が壊れている可能性があります。次の1行で入れ直してください:
713
- npm i -g @tyhld/conductor"
786
+ npm i -g @tyhld/conductor --@tyhld:registry=https://registry.npmjs.org"
714
787
  PROTO_SETTINGS="$CLAUDE_DIR/.settings.proto.$$"
715
788
  node "$PROTO_GEN" settings > "$PROTO_SETTINGS" \
716
789
  || fail "試作の型の設定を作れませんでした(node \"$PROTO_GEN\" settings)"