@cocorograph/hub-agent 0.6.96 → 0.6.97

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.96",
3
+ "version": "0.6.97",
4
4
  "description": "Hub Hosted Cockpit のローカル常駐 agent。Hub と outbound WSS で接続し、ローカルの tmux/pty を中継する。",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
package/src/main.mjs CHANGED
@@ -890,6 +890,17 @@ async function startSessionEventWatcher({ client, logger, readinessTracker }) {
890
890
  readinessTracker.arm(sessionName)
891
891
  }
892
892
  }
893
+ // 計装 (2026-06-19): ターン境界イベントと arm を成功送信時に記録する。従来は session.event
894
+ // が WS 未接続スキップ時しかログに残らず、arm→ターン進行→ready の追跡が事後にできなかった
895
+ // (生成中/停止判定の障害が「ログから盲目」だった主因)。armed は prompt_submit/stop/idle_hint で立つ。
896
+ logger?.info(
897
+ {
898
+ session_name: sessionName,
899
+ event: data.event,
900
+ armed: readinessTracker ? readinessTracker.isArmed(sessionName) : undefined,
901
+ },
902
+ "session.event push",
903
+ )
893
904
  client.send({
894
905
  type: "session.event",
895
906
  session_name: sessionName,
@@ -1159,6 +1170,24 @@ function startStateLoop({ client, plugins, logger, intervalMs, claudeBridge, rea
1159
1170
  proc_busy: procBusy,
1160
1171
  stalled,
1161
1172
  })
1173
+ // 計装 (2026-06-19): 状態の「変化時」(差分送信なので低頻度) に値を記録する。従来は
1174
+ // session.state が WS 未接続スキップ時しかログに残らず、proc_busy/stalled/status の実値が
1175
+ // 事後追跡できなかった (生成中/停止判定の障害がログから検証不能だった主因)。childBusy と
1176
+ // outputActive を分けて出し、proc 内省と出力フローのどちらが busy を立てたか切り分け可能にする。
1177
+ logger?.info(
1178
+ {
1179
+ session_name: s.session_name,
1180
+ status,
1181
+ proc_busy: procBusy,
1182
+ child_busy: childBusy,
1183
+ output_active: outputActive,
1184
+ stalled,
1185
+ armed,
1186
+ stable,
1187
+ context_pct: contextPct,
1188
+ },
1189
+ "session.state push",
1190
+ )
1162
1191
  client.send({
1163
1192
  type: "session.state",
1164
1193
  session_name: s.session_name,
package/src/state.mjs CHANGED
@@ -134,18 +134,29 @@ function footerRegion(text, lines = 8) {
134
134
  }
135
135
 
136
136
  /**
137
- * 作業スピナー行 (ライブステータス行) の構造パターン。実機採取 (2026-06-15):
137
+ * 作業スピナー行 (ライブステータス行) の構造パターン。実機採取 (2026-06-15):
138
138
  * "· Blanching… (2m 4s · ↓ 7.5k tokens)" (出力中)
139
139
  * "✽ Scurrying… (16m 55s · ↓ 66.8k tokens)" (出力中)
140
140
  * "· Puzzling… (11m 12s · thinking)" (思考中・tokens 語が無い)
141
- * = 行頭グリフ (·/✻/✽/✶… 1 文字) + 語 + 省略記号 + 括弧で囲まれたライブ経過タイマー。
142
- * (Blanching/Puzzling/Orbiting…) は無数にあり版で増減するため語リストにしない。行頭は
143
- * 英数字・空白・本文の箇条書き記号 (-*>#|) を除く 1 文字に限定し、本文プローズ (英字始まり)
144
- * や箇条書きへの誤マッチを防ぐ。完了サマリー "✻ Brewed for 2m 52s" は省略記号も括弧タイマー
145
- * も持たないので一致しない。
141
+ * "✻ Thinking (3s)" (省略記号なし・タイマーのみ)
142
+ * Puzzling (2m · thinking)" (省略記号なし・分のみ秒省略)
143
+ * = 行頭グリフ (·/✻/✽/✶… 1 文字) + + 〔省略記号 または 括弧ライブタイマー〕の少なくとも一方。
144
+ *
145
+ * 緩和の経緯 (2026-06-19): 旧版は「省略記号 **かつ** 括弧タイマー **かつ** 秒必須」を全要求して
146
+ * いたため、claude TUI の版/フェーズで書式が少しでも変わると processing を取りこぼし、生成中なのに
147
+ * 三点リーダーが消える主因になっていた (実機相当の "✻ Thinking…"(タイマー無) / "✻ Thinking (3s)"
148
+ * (省略記号無) / "(2m · thinking)"(分のみ秒無) / 深いインデント が全て NOMATCH と実証)。そこで:
149
+ * - 省略記号 (…/...) **または** 括弧タイマーのどちらか一方で可 (両方必須をやめる)
150
+ * - タイマーは「分のみ」「秒のみ」「分秒」いずれも可 (秒必須をやめる)
151
+ * - 行頭インデント制限 (\s{0,4}) を撤廃 (背の高いペイン/折返しで字下げが深い版に備える)
152
+ * 緩めても安全な理由: 検出は必ず footerRegion + _belowIsOnlyChrome (下が入力欄チロムのみ) を
153
+ * 通すため、本文プローズ・表セル・箇条書きへの誤点灯は下チロム判定が弾く。行頭は英数字・空白・
154
+ * 本文記号 (-*>#|) を除く 1 文字に限定し、語は ASCII 英字に限る (日本語プローズは非マッチ)。
155
+ * 完了サマリー "✻ Brewed for 2m 52s" は省略記号も**括弧**タイマーも持たない (タイマーが括弧外) ため
156
+ * 引き続き一致しない。
146
157
  */
147
158
  const SPINNER_LINE_RE =
148
- /^\s{0,4}[^\sA-Za-z0-9\-*>#|]\s*[A-Za-z]+(?:…|\.\.\.)\s*\(\s*(?:\d+\s*m\s*)?\d+\s*s\b/
159
+ /^\s*[^\sA-Za-z0-9\-*>#|]\s*[A-Za-z]+(?:\s+[A-Za-z]+)*\s*(?:(?:…|\.\.\.)|\(\s*(?:\d+\s*m(?:\s*\d+\s*s)?|\d+\s*s)\b)/
149
160
 
150
161
  /**
151
162
  * スピナー行 i の「下」が入力欄チロム (空行/罫線/❯ プロンプト/tips/字下げ継続/権限バナー)