@cocorograph/hub-agent 0.6.90 → 0.6.92

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cocorograph/hub-agent",
3
- "version": "0.6.90",
3
+ "version": "0.6.92",
4
4
  "description": "Hub Hosted Cockpit のローカル常駐 agent。Hub と outbound WSS で接続し、ローカルの tmux/pty を中継する。",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
@@ -241,6 +241,11 @@ ensure_npm_user_prefix() {
241
241
  local cur_prefix
242
242
  cur_prefix="$(npm config get prefix 2>/dev/null || echo '')"
243
243
  if [[ "$cur_prefix" == "$HOME/.npm-global" ]]; then
244
+ # ワンライナー (bash -c) は非ログイン非対話で profile が読まれないため、
245
+ # 既存 prefix の再セットアップ時に $HOME/.npm-global/bin が PATH に乗らず
246
+ # 後段の `hub-agent` / `claude` 呼び出しが command not found になる事故があった。
247
+ # 実行中シェルの PATH を毎回明示的に整える。
248
+ export PATH="$HOME/.npm-global/bin:$PATH"
244
249
  color_ok "npm global prefix は既に $HOME/.npm-global"
245
250
  return 0
246
251
  fi
@@ -673,6 +678,28 @@ do_install_service() {
673
678
  color_ok "install-service 完了。ログ: ~/.hub/agent.log"
674
679
  }
675
680
 
681
+ # enroll で bundle 配信された ~/.claude/scripts/setup_hub_ai.py を同期実行して
682
+ # ~/.claude/CLAUDE.md と ~/.claude/settings.json を初期化する。
683
+ #
684
+ # enroll.mjs 内でも kickSetupHubAi で best-effort spawn しているが、それは
685
+ # detached + stdio ignore で完了を待たないため、続く verify_setup が
686
+ # CLAUDE.md マーカー欠落を warn として拾ってしまう。install.sh では同期実行で
687
+ # verify を成功させる。setup_hub_ai 不在 (bundle 同期失敗) のときは色付き
688
+ # warn を出して継続。再実行時は step_* が冪等処理を返すだけで害なし。
689
+ do_bootstrap_hub_ai() {
690
+ local setup_script="$HOME/.claude/scripts/setup_hub_ai.py"
691
+ if [[ ! -f "$setup_script" ]]; then
692
+ color_warn "setup_hub_ai.py 不在 (bundle 同期が失敗した可能性)。スキップ"
693
+ return 0
694
+ fi
695
+ color_step "setup_hub_ai.py --silent を実行 (~/.claude/CLAUDE.md / settings.json 初期化)"
696
+ if python3 "$setup_script" --silent; then
697
+ color_ok "Hub AI bootstrap 完了"
698
+ else
699
+ color_warn "setup_hub_ai.py --silent が exit≠0 で終了 (継続)。手動で再実行: python3 $setup_script"
700
+ fi
701
+ }
702
+
676
703
  # セットアップ最終検証。
677
704
  # 「online には見えるがバンドル未配信」「サービス起動失敗」等の半完了状態を
678
705
  # 検知してユーザーに次の手を案内する。返り値は 0 (errors > 0 でも継続)。
@@ -783,6 +810,8 @@ main() {
783
810
  ensure_claude_code
784
811
  step_header "enroll + bundle 同期"
785
812
  do_enroll
813
+ step_header "Hub AI bootstrap (CLAUDE.md / hooks 初期化)"
814
+ do_bootstrap_hub_ai
786
815
  step_header "OS サービス化"
787
816
  do_install_service
788
817
  step_header "最終検証"
package/src/enroll.mjs CHANGED
@@ -83,6 +83,20 @@ export async function enroll(enrollmentToken, opts = {}) {
83
83
  opts.logger?.warn?.({ err: err.message }, "hub bundle sync failed (enroll still ok)")
84
84
  bundleResult = { error: err.message }
85
85
  }
86
+
87
+ // bundle 同期で ~/.claude/scripts/setup_hub_ai.py が配置された直後に kick する。
88
+ // 設計穴: 初回 enroll では誰も setup_hub_ai.py を実行しないため、`step_claude_md`
89
+ // が走らず ~/.claude/CLAUDE.md がいつまでも作成されない事故があった
90
+ // (2026-06-17 toma 環境)。bundle 配信は scripts と claude_md_fragment.md は
91
+ // 含むが、CLAUDE.md と settings.json は含まないため、誰かが setup_hub_ai を
92
+ // 一度叩かないと self-bootstrap しない。enroll 直後に best-effort で 1 回叩く。
93
+ // 既存環境では step_claude_md がマーカー範囲を冪等更新するだけで害なし。
94
+ try {
95
+ const { kickSetupHubAi } = await import("./main.mjs")
96
+ kickSetupHubAi({ logger: opts.logger })
97
+ } catch (err) {
98
+ opts.logger?.warn?.({ err: err.message }, "kickSetupHubAi from enroll failed (ignored)")
99
+ }
86
100
  }
87
101
 
88
102
  return {
package/src/main.mjs CHANGED
@@ -383,6 +383,13 @@ export async function startDaemon({ version, ptyModule, claudeSdk } = {}) {
383
383
 
384
384
  await runHookBroadcast(plugins, "onAgentStart", ctx)
385
385
 
386
+ // 起動時 self-heal: 過去に CLAUDE.md / settings.json bootstrap を踏まずに使い始めた
387
+ // 既存端末(初回 enroll で setup_hub_ai を kick していなかったバージョン経由)でも、
388
+ // `hub-agent restart` だけで CLAUDE.md と hooks を自動修復できるようにする。
389
+ // 既に整っている環境では step_* がマーカー範囲を冪等更新するだけで害なし
390
+ // (detached + stdio ignore で daemon は妨げない)。WHY: 2026-06-17 toma 環境調査。
391
+ kickSetupHubAi({ logger })
392
+
386
393
  // node-pty (Microsoft 公式) は macOS arm64 で PTY master fd を spawn ごとに leak し
387
394
  // (kill/destroy でも解放されず)、kern.tty.ptmx_max=511 到達で「新規ターミナルが
388
395
  // 開けない」障害を起こした (2026-06-16)。node 20/22/24 全てで再現。API 互換の保守