monster-orchestrator 3.3.0 → 3.5.0
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-obf/.buildinfo +5 -5
- package/dist-obf/governor-tick.js +1 -1
- package/dist-obf/index.js +1 -1
- package/dist-obf/manifest.json +278 -10
- package/dist-obf/package.json +4 -4
- package/dist-obf/supervisor-notify-tick.js +1 -1
- package/manifest.json +278 -10
- package/package.json +1 -1
- package/scripts/monster-deathcheck +17 -150
- package/scripts/monster-stop-hook +15 -2
package/dist-obf/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mcpId": "monster-orchestrator",
|
|
3
3
|
"name": "Monster Orchestrator",
|
|
4
|
-
"version": "3.
|
|
5
|
-
"description": "Claude Code CLI を独立サブプロセス(tmux session)として起動・送信・監視・停止する。v2.0.0 から ready signal polling / spawn_timeout / events.log NDJSON + ローテーション / Claude Code 5種 hook 注入 / 60秒ごとの session.log スナップショットに対応。v2.1 から spawn / stop / list は BlueLamp 認証(X-CLI-Token)必須で、皆伝(tenant_rank>=4)以上が利用可能。同時稼働数の上限値はここに書かない(実装更新で腐るため)——拒否する上限はサーバ側 quota が、ローカルの暴走 spawn backstop は `MONSTER_MAX_CONCURRENT`(正本は `resolveMaxConcurrent()`)が正本で、この 2 つは別物。v2.3 から agent 別の events 確認カーソル(state.json.cursors)と mark_events_seen tool を追加し、未確認 awaiting_input / stopped を能動把握できる(推奨運用: get_monster_events に agent_id を渡し、取得後 max_event_ts を mark_events_seen で記録)。v2.4.0 から backend を mikoto-company-api に完全移管(Phase 53C)。受講生 PC は BLUELAMP_CLI_TOKEN → bluelampportal /api/auth/exchange → RS256 JWT → mikoto-company-api /api/monster/* の 2 段構えで認証。主エージェントが複数 monster を並列制御する汎用オーケストレータ。v3.3.0 から memory governor(艦隊の赤信号ブレーキ)を同梱: 常駐 tick(scripts/governor-tick.sh・30 秒)が機体のメモリ圧力を ~/.claude/monsters/governor.json に書き、critical(red)のときだけ spawn_monster が `MEMORY_CRITICAL` で拒否し、scripts/governor-wait.sh が重い検査の開始を待つ。走行中は触らない。計器が無い/古いときは fail-open で従来どおり動き、その事実を footer / governor_notice に出す。設置は docs/governor-launchd.md。",
|
|
4
|
+
"version": "3.5.0",
|
|
5
|
+
"description": "Claude Code CLI を独立サブプロセス(tmux session)として起動・送信・監視・停止する。v2.0.0 から ready signal polling / spawn_timeout / events.log NDJSON + ローテーション / Claude Code 5種 hook 注入 / 60秒ごとの session.log スナップショットに対応。v2.1 から spawn / stop / list は BlueLamp 認証(X-CLI-Token)必須で、皆伝(tenant_rank>=4)以上が利用可能。同時稼働数の上限値はここに書かない(実装更新で腐るため)——拒否する上限はサーバ側 quota が、ローカルの暴走 spawn backstop は `MONSTER_MAX_CONCURRENT`(正本は `resolveMaxConcurrent()`)が正本で、この 2 つは別物。v2.3 から agent 別の events 確認カーソル(state.json.cursors)と mark_events_seen tool を追加し、未確認 awaiting_input / stopped を能動把握できる(推奨運用: get_monster_events に agent_id を渡し、取得後 max_event_ts を mark_events_seen で記録)。v2.4.0 から backend を mikoto-company-api に完全移管(Phase 53C)。受講生 PC は BLUELAMP_CLI_TOKEN → bluelampportal /api/auth/exchange → RS256 JWT → mikoto-company-api /api/monster/* の 2 段構えで認証。主エージェントが複数 monster を並列制御する汎用オーケストレータ。v3.3.0 から memory governor(艦隊の赤信号ブレーキ)を同梱: 常駐 tick(scripts/governor-tick.sh・30 秒)が機体のメモリ圧力を ~/.claude/monsters/governor.json に書き、critical(red)のときだけ spawn_monster が `MEMORY_CRITICAL` で拒否し、scripts/governor-wait.sh が重い検査の開始を待つ。走行中は触らない。計器が無い/古いときは fail-open で従来どおり動き、その事実を footer / governor_notice に出す。設置は docs/governor-launchd.md。v3.4.0 から席の生死を「席の実在」でなく機能で実測する assess_liveness(直近活動・ロール読込・巡回 cron の 3 点すべて真で alive・tmux を見ない)と spawn 直後の着任確認 await_onboarding、4 値ログ ~/.claude/monsters/selfheal.log を追加(板 #608・夜間自己修復便の誤検知対策)。板 #662/A30 で assess_liveness を 3 値化(alive / dead / unmeasurable): 起動子 bluelampNN が載せたロール(バナー)を ② の証拠に数え、その席だけ tmux の pane まで見る。tmux 不到達は dead でなく unmeasurable へ倒す。板 L5「計器と門」(2026-09-18)で verdict の根拠を生死の指標(① 直近活動・④ pane)だけにし、ロール読込・巡回 cron の不備は別欄 operational_issues へ移した。否定と肯定の証拠が同時に在るときは unmeasurable(dead へ倒さない)。",
|
|
6
6
|
"category": "automation",
|
|
7
7
|
"tier": 2,
|
|
8
8
|
"tenantSlug": "yamatovision",
|
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
"BLUELAMP_PORTAL_API_BASE_URL",
|
|
19
19
|
"MIKOTO_API_BASE_URL",
|
|
20
20
|
"MONSTER_MAX_CONCURRENT",
|
|
21
|
-
"MONSTER_DEFAULT_TIMEOUT_MIN",
|
|
22
21
|
"MONSTER_CLAUDE_BIN",
|
|
23
22
|
"MONSTER_HOOK_PATH",
|
|
24
23
|
"MONSTER_GOVERNOR_RED_LEVEL",
|
|
@@ -46,31 +45,300 @@
|
|
|
46
45
|
"tools": [
|
|
47
46
|
{
|
|
48
47
|
"name": "spawn_monster",
|
|
49
|
-
"description": "新しい monster(Claude Code CLI tmux session)を起動し初回 task を送信する。ready signal を 45 秒以内に検出できなければ spawn_timeout 応答を返す。BlueLamp backend の authorize-spawn で皆伝(tenant_rank>=4)以上であることと同時稼働 quota を enforce(超過は `QUOTA_EXCEEDED`)。上限の数値はここに書かない(実装更新で腐るため)。ローカル側の暴走 spawn backstop は `MONSTER_MAX_CONCURRENT`(正本は `resolveMaxConcurrent()`)で、サーバの拒否上限とは別物。なお `workdir` 引数は monster の cwd ではなく `--add-dir` で読み書き許可される追加 path。cwd は monster home(~/.claude/monsters/{id}/)に固定され、hook 設定の解決のためこの設計は意図的。`launcher` 引数(任意)でこの呼び出しだけ起動子を差し替えられる(許可形式は `claude` / `bluelampNN`(NN=1〜999・先頭ゼロなし)のみ・形式外や未導入の値は spawn を拒否しフォールバックしない・解決順序: launcher 引数 > MONSTER_CLAUDE_BIN > `claude`)。例: `bluelamp51`。番号とロールの対応は `
|
|
48
|
+
"description": "新しい monster(Claude Code CLI tmux session)を起動し初回 task を送信する。ready signal を 45 秒以内に検出できなければ spawn_timeout 応答を返す。BlueLamp backend の authorize-spawn で皆伝(tenant_rank>=4)以上であることと同時稼働 quota を enforce(超過は `QUOTA_EXCEEDED`)。上限の数値はここに書かない(実装更新で腐るため)。ローカル側の暴走 spawn backstop は `MONSTER_MAX_CONCURRENT`(正本は `resolveMaxConcurrent()`)で、サーバの拒否上限とは別物。なお `workdir` 引数は monster の cwd ではなく `--add-dir` で読み書き許可される追加 path。cwd は monster home(~/.claude/monsters/{id}/)に固定され、hook 設定の解決のためこの設計は意図的。`launcher` 引数(任意)でこの呼び出しだけ起動子を差し替えられる(許可形式は `claude` / `bluelampNN`(NN=1〜999・先頭ゼロなし)のみ・形式外や未導入の値は spawn を拒否しフォールバックしない・解決順序: launcher 引数 > MONSTER_CLAUDE_BIN > `claude`)。例: `bluelamp51`。番号とロールの対応は `agents` MCP の `list_agents`(placement は tenant:<テナントID>) の「種別: オーケストレーター (bluelampNN)」欄が正本。ここに対応表を書かない(実装更新で腐るため)。v3.3.0 から機体のメモリ圧力が critical(governor.json が red)のときは spawn せず `code: MEMORY_CRITICAL` / `refused: memory_critical` で拒否する(走行中は触らない・自動再試行しない・green に戻れば同じ引数で通る)。計器が無い/古いときは fail-open で spawn し `governor_notice` を添える。",
|
|
49
|
+
"inputSchema": {
|
|
50
|
+
"type": "object",
|
|
51
|
+
"properties": {
|
|
52
|
+
"task": {
|
|
53
|
+
"type": "string",
|
|
54
|
+
"description": "初回指示(複数行可)"
|
|
55
|
+
},
|
|
56
|
+
"workdir": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"description": "monster の cwd ではなく `--add-dir` で読み書き許可される追加 path(絶対パス)。cwd は monster home(~/.claude/monsters/{id}/)に固定(hook 設定の解決のため意図的)。省略時は ~/.claude/monsters/{id}/workspace/ を新規作成し --add-dir 対象とする。"
|
|
59
|
+
},
|
|
60
|
+
"initial_context": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"description": "CLAUDE.md に書き込む追加コンテキスト(任意)"
|
|
63
|
+
},
|
|
64
|
+
"launcher": {
|
|
65
|
+
"type": "string",
|
|
66
|
+
"pattern": "^(claude|bluelamp[1-9]\\d{0,2})$",
|
|
67
|
+
"description": "この呼び出しだけ起動子を差し替える(任意)。許可形式は `claude` または `bluelampNN`(NN=1〜999・先頭ゼロなし)のみで、形式外・未導入の値は spawn を拒否する(claude へはフォールバックしない)。解決順序: launcher 引数 > MONSTER_CLAUDE_BIN > `claude`。省略時は従来と同一挙動。例: `bluelamp51`。番号とロールの対応は `agents` MCP の `list_agents`(placement は tenant:<テナントID>) の「種別: オーケストレーター (bluelampNN)」欄が正本。ここに対応表を書かない(実装更新で腐るため)"
|
|
68
|
+
},
|
|
69
|
+
"model": {
|
|
70
|
+
"type": "string",
|
|
71
|
+
"pattern": "^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$",
|
|
72
|
+
"description": "この monster が使うモデル(任意)。monster home の `.claude/settings.json` に `model` として書かれ、グローバル既定より優先される。形式は英数字始まり・英数字/`.`/`_`/`-`・64 文字以内(例: `opus` / `fable`)。形式外は spawn を拒否する(既定へはフォールバックしない)。モデル名の実在 allowlist は持たない。省略時は model を**書かない**=子は機体の `~/.claude/settings.json` の model(正本 1 行)を継承する(板 #585・主君裁定 2026-09-03「世代非依存」)。指定するなら世代 ID でなくエイリアス(`fable` / `opus`)で。応答と state.json には実際に書いた model だけを記録する(書かなければキー不在)。"
|
|
73
|
+
},
|
|
74
|
+
"bl_tenant_id": {
|
|
75
|
+
"type": "string",
|
|
76
|
+
"description": "monster が動作する BlueLamp テナントの UUID(任意)。指定すると MUSUHI_TENANT_ID として注入され、monster の load_knowledge 等がそのテナントで解決される(@テックリードプラス 等のテナントエージェントをメンバー権限で読める・rank gate で判定・越境なし)。@CTO/司令塔 が「このモンスターをどのテナントとして動かすか」を明示する用途。省略時は従来どおり active_tenant_id 依存。"
|
|
77
|
+
},
|
|
78
|
+
"supervisorSession": {
|
|
79
|
+
"type": "string",
|
|
80
|
+
"description": "呼び出し元(監督エージェント)自身の tmux session 名(任意)。渡すと、この monster が停止(awaiting_input / stopped)した時点で supervisor-notify watcher が当該セッションへ状況通知を自動注入する(監督のポーリングが不要になる)。取得方法: `tmux display-message -p '#S'`。⚠️ MCP サーバプロセスには TMUX 環境変数が無いため自動検出はできず、この明示引数が唯一の実用経路。省略すると spawn は続行するが「未配線 spawn」として supervisor-notify.log に警告が残る(意図的に監督を付けない場合は unsupervised: true を宣言すること)。注入される文面は固定テンプレの状況通知のみで、承認・裁定・指示は一切運ばない。"
|
|
81
|
+
},
|
|
82
|
+
"supervisorHost": {
|
|
83
|
+
"type": "string",
|
|
84
|
+
"description": "監督が**別機体**に居るときの宛先の別名(任意・supervisorSession と対で使う)。別名が指す SSH の宛先はこの機体の ~/.claude/monsters/supervisor-remotes.json にだけ書く(ホスト名を引数に渡さない)。宛先表に無い別名は記録せず、未配線として警告する。省略時は同じ機体の session として扱う(従来どおり)。"
|
|
85
|
+
},
|
|
86
|
+
"unsupervised": {
|
|
87
|
+
"type": "boolean",
|
|
88
|
+
"description": "意図的に監督を付けずに起動することの明示宣言(既定 false = 監督へ配線する)。true を宣言した spawn だけが「未配線でも正常」として扱われ、警告が出ない。宣言せずに supervisorSession も渡さなかった場合、spawn は続行するが『この monster が止まっても誰にも通知されない』旨の警告が supervisor-notify.log に残る(BACKLOG #35: 黙って未配線にしない)。supervisorSession と同時に渡した場合は配線が優先される。"
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"required": [
|
|
92
|
+
"task"
|
|
93
|
+
]
|
|
94
|
+
}
|
|
50
95
|
},
|
|
51
96
|
{
|
|
52
97
|
"name": "list_monsters",
|
|
53
|
-
"description": "稼働中・停止済みを含む全 monster を列挙し、未読イベント最新 5 件を添付する。手元の active tmux session を backend に報告して stale 検知も走らせる。v3.3.0 から応答に `governor` 欄(memory governor の state / level / available_pct / native_level / ts / age_sec)が付く。"
|
|
98
|
+
"description": "稼働中・停止済みを含む全 monster を列挙し、未読イベント最新 5 件を添付する。手元の active tmux session を backend に報告して stale 検知も走らせる。v3.3.0 から応答に `governor` 欄(memory governor の state / level / available_pct / native_level / ts / age_sec)が付く。",
|
|
99
|
+
"inputSchema": {
|
|
100
|
+
"type": "object",
|
|
101
|
+
"properties": {
|
|
102
|
+
"include_stopped": {
|
|
103
|
+
"type": "boolean",
|
|
104
|
+
"description": "停止済みを含める(default false)"
|
|
105
|
+
},
|
|
106
|
+
"since_ts": {
|
|
107
|
+
"type": "string",
|
|
108
|
+
"description": "ISO 8601 時刻。この時刻以降のイベントを付与"
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
54
112
|
},
|
|
55
113
|
{
|
|
56
114
|
"name": "query_monster",
|
|
57
|
-
"description": "monster の tmux pane 末尾 N 行を取得する(ANSI strip 済、デフォルト 50
|
|
115
|
+
"description": "monster の tmux pane 末尾 N 行を取得する(ANSI strip 済、デフォルト 50 行・秘密の型は伏せて返す)。",
|
|
116
|
+
"inputSchema": {
|
|
117
|
+
"type": "object",
|
|
118
|
+
"properties": {
|
|
119
|
+
"id": {
|
|
120
|
+
"type": "string",
|
|
121
|
+
"description": "monster_id(UUID)または short_id(8 文字)"
|
|
122
|
+
},
|
|
123
|
+
"tail_lines": {
|
|
124
|
+
"type": "number",
|
|
125
|
+
"description": "取得行数。default 50、max 500。"
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
"required": [
|
|
129
|
+
"id"
|
|
130
|
+
]
|
|
131
|
+
}
|
|
58
132
|
},
|
|
59
133
|
{
|
|
60
134
|
"name": "send_to_monster",
|
|
61
|
-
"description": "monster に追加指示を送信する(tmux
|
|
135
|
+
"description": "monster に追加指示を送信する(tmux の bracketed paste=load-buffer → paste-buffer -p -r で本文を 1 回の貼り付けとして入れる)。同一本文を 10 分以内に別の席へも送ると、2 席目以降の 1 行目に【同報 N 席/実務の担当: X】を足し、1 席目へ同じ印の追報を送る(送り手の申告に依らない・送信は止めない。X は任意引数 assignee・省略時は未指定)。",
|
|
136
|
+
"inputSchema": {
|
|
137
|
+
"type": "object",
|
|
138
|
+
"properties": {
|
|
139
|
+
"id": {
|
|
140
|
+
"type": "string",
|
|
141
|
+
"description": "monster_id または short_id"
|
|
142
|
+
},
|
|
143
|
+
"message": {
|
|
144
|
+
"type": "string",
|
|
145
|
+
"description": "送信するメッセージ(改行可)"
|
|
146
|
+
},
|
|
147
|
+
"assignee": {
|
|
148
|
+
"type": "string",
|
|
149
|
+
"description": "同報のときの実務の担当 short_id(任意)。同一本文を 10 分以内に別の席へも送ると、orchestrator が 2 席目以降の 1 行目に`【同報 N 席/実務の担当: <これ>】` を足し、1 席目へ同じ印の追報を送る(書き忘れても印は付く・省略時は「未指定」)"
|
|
150
|
+
}
|
|
151
|
+
},
|
|
152
|
+
"required": [
|
|
153
|
+
"id",
|
|
154
|
+
"message"
|
|
155
|
+
]
|
|
156
|
+
}
|
|
62
157
|
},
|
|
63
158
|
{
|
|
64
159
|
"name": "stop_monster",
|
|
65
|
-
"description": "monster を停止(tmux kill-session)し watcher を detach する。backend 側 session 行も stopped に更新。"
|
|
160
|
+
"description": "monster を停止(tmux kill-session)し watcher を detach する。backend 側 session 行も stopped に更新。",
|
|
161
|
+
"inputSchema": {
|
|
162
|
+
"type": "object",
|
|
163
|
+
"properties": {
|
|
164
|
+
"id": {
|
|
165
|
+
"type": "string",
|
|
166
|
+
"description": "monster_id または short_id"
|
|
167
|
+
},
|
|
168
|
+
"reason": {
|
|
169
|
+
"type": "string",
|
|
170
|
+
"description": "events.log に記録される停止理由"
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
"required": [
|
|
174
|
+
"id"
|
|
175
|
+
]
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"name": "reassign_supervisor",
|
|
180
|
+
"description": "走行中の monster の監督(通知先 tmux session)を付け替える。監督席が世代交代・閉席したときに、配下が死んだ席を指したまま supervisor_gone を鳴らし続ける状態を止めるための手当て(BACKLOG #154)。単発(monster_id)と席まるごと一括(from_session)のどちらでも指定でき、対象は稼働中の席のみ。継承先が実在しない場合は付け替えを拒否し、実在を測定できなかった場合は拒否ではなく中止する。同じ付け替えを 2 回撃っても壊れない(2 回目は no-op)。付け替えの前後は list_monsters の supervisor_session で観測できる。",
|
|
181
|
+
"inputSchema": {
|
|
182
|
+
"type": "object",
|
|
183
|
+
"properties": {
|
|
184
|
+
"monster_id": {
|
|
185
|
+
"type": "string",
|
|
186
|
+
"description": "単発で付け替える monster_id または short_id。from_session とは排他(同時指定はエラー)。"
|
|
187
|
+
},
|
|
188
|
+
"from_session": {
|
|
189
|
+
"type": "string",
|
|
190
|
+
"description": "この監督 session を指している稼働中の席を**まとめて**付け替える(例: 閉じた cto-ami-9)。monster_id とは排他。"
|
|
191
|
+
},
|
|
192
|
+
"to_session": {
|
|
193
|
+
"type": "string",
|
|
194
|
+
"description": "継承先の監督 tmux session 名(必須)。実在しない session は拒否する。取得方法は `tmux display-message -p '#S'`。"
|
|
195
|
+
},
|
|
196
|
+
"from_host": {
|
|
197
|
+
"type": "string",
|
|
198
|
+
"description": "from_session の監督が別機体に居る場合の宛先の別名(任意)。省略時は同じ機体の監督を指す席だけを選ぶ。"
|
|
199
|
+
},
|
|
200
|
+
"to_host": {
|
|
201
|
+
"type": "string",
|
|
202
|
+
"description": "継承先の監督が**別機体**に居る場合の宛先の別名(任意)。この機体の supervisor-remotes.json に在る別名だけを受け付け、その機体に SSH で入って継承先 session の実在を測ってから付け替える。"
|
|
203
|
+
},
|
|
204
|
+
"actor": {
|
|
205
|
+
"type": "string",
|
|
206
|
+
"description": "付け替えを撃った席の名乗り(任意)。supervisor-notify.log の監査行に残る。検証はできない自己申告なので、省略時は「不明」と記録される。"
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
"required": [
|
|
210
|
+
"to_session"
|
|
211
|
+
]
|
|
212
|
+
}
|
|
66
213
|
},
|
|
67
214
|
{
|
|
68
215
|
"name": "get_monster_events",
|
|
69
|
-
"description": "events.log(+ rotate 済ファイル)から NDJSON イベントをページング取得する(since_ts / event_types / limit フィルタ対応)。v2.3.0 から agent_id を渡すと since_ts 省略時に state.json.cursors[agent_id] を自動 fallback として使い、未確認イベントだけを返す。テックリード型 agent は agent_id='tech-lead-main'(皆伝個別なら 'tech-lead-mikoto-kaiden-{slug}')を毎ターン渡し、取得後 max_event_ts で mark_events_seen を呼ぶ運用が標準。"
|
|
216
|
+
"description": "events.log(+ rotate 済ファイル)から NDJSON イベントをページング取得する(since_ts / event_types / limit フィルタ対応)。v2.3.0 から agent_id を渡すと since_ts 省略時に state.json.cursors[agent_id] を自動 fallback として使い、未確認イベントだけを返す。テックリード型 agent は agent_id='tech-lead-main'(皆伝個別なら 'tech-lead-mikoto-kaiden-{slug}')を毎ターン渡し、取得後 max_event_ts で mark_events_seen を呼ぶ運用が標準。",
|
|
217
|
+
"inputSchema": {
|
|
218
|
+
"type": "object",
|
|
219
|
+
"properties": {
|
|
220
|
+
"monster_id": {
|
|
221
|
+
"type": "string",
|
|
222
|
+
"description": "UUID または short_id。省略時は全 monster。"
|
|
223
|
+
},
|
|
224
|
+
"since_ts": {
|
|
225
|
+
"type": "string",
|
|
226
|
+
"description": "ISO 8601 時刻。この時刻以降を返す。"
|
|
227
|
+
},
|
|
228
|
+
"event_types": {
|
|
229
|
+
"type": "array",
|
|
230
|
+
"items": {
|
|
231
|
+
"type": "string",
|
|
232
|
+
"enum": [
|
|
233
|
+
"spawned",
|
|
234
|
+
"spawn_timeout",
|
|
235
|
+
"idle",
|
|
236
|
+
"awaiting_input",
|
|
237
|
+
"user_prompt",
|
|
238
|
+
"session_end",
|
|
239
|
+
"subagent_stop",
|
|
240
|
+
"stopped",
|
|
241
|
+
"error",
|
|
242
|
+
"supervisor_gone"
|
|
243
|
+
]
|
|
244
|
+
}
|
|
245
|
+
},
|
|
246
|
+
"limit": {
|
|
247
|
+
"type": "number",
|
|
248
|
+
"description": "最大件数。default 50、max 500。"
|
|
249
|
+
},
|
|
250
|
+
"agent_id": {
|
|
251
|
+
"type": "string",
|
|
252
|
+
"description": "呼び出し元 agent の識別子(例: tech-lead-main / tech-lead-mikoto-kaiden-XX)。since_ts 省略時のみ参照され、cursors[agent_id] を自動 fallback として使用。空または未指定なら cursor を使わず全件 scan(後方互換)。"
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
70
256
|
},
|
|
71
257
|
{
|
|
72
258
|
"name": "mark_events_seen",
|
|
73
|
-
"description": "agent ごとの events 確認カーソルを更新する(state.json.cursors[agent_id] = ts)。get_monster_events で取得した max_event_ts を渡すことで、次回呼び出しが「未確認イベントのみ」を返す。Stop hook (~/.claude/hooks/check-monster-events.sh) と協調し重複報告を防止。agent_id は呼び出し元 agent が自由に命名(例: tech-lead-main / tech-lead-mikoto-kaiden-XX)。"
|
|
259
|
+
"description": "agent ごとの events 確認カーソルを更新する(state.json.cursors[agent_id] = ts)。get_monster_events で取得した max_event_ts を渡すことで、次回呼び出しが「未確認イベントのみ」を返す。Stop hook (~/.claude/hooks/check-monster-events.sh) と協調し重複報告を防止。agent_id は呼び出し元 agent が自由に命名(例: tech-lead-main / tech-lead-mikoto-kaiden-XX)。",
|
|
260
|
+
"inputSchema": {
|
|
261
|
+
"type": "object",
|
|
262
|
+
"properties": {
|
|
263
|
+
"agent_id": {
|
|
264
|
+
"type": "string",
|
|
265
|
+
"description": "呼び出し元 agent の識別子(例: tech-lead-main)。空文字不可。"
|
|
266
|
+
},
|
|
267
|
+
"ts": {
|
|
268
|
+
"type": "string",
|
|
269
|
+
"description": "ISO 8601 時刻。通常は直前 get_monster_events の max_event_ts をそのまま渡す。"
|
|
270
|
+
}
|
|
271
|
+
},
|
|
272
|
+
"required": [
|
|
273
|
+
"agent_id",
|
|
274
|
+
"ts"
|
|
275
|
+
]
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"name": "assess_liveness",
|
|
280
|
+
"description": "席の生死を「席の実在」でなく機能で実測する(板 #608・#662/A30)。判定は alive / dead / unmeasurable の 3 値。① 直近活動(events.log 最終 ts と transcript mtime の新しい方が activity_window_min(既定 30 分)以内)② ロール読込(transcript に load_knowledge の成功結果、または起動子 bluelampNN が最初の user 行に書く成功バナー「本体プロンプトは読み込み済み」が 1 件以上・Prompt not found / ❌ / 失敗バナーは失敗)③ 巡回 cron(assistant tool_use の CronCreate(recurring が false でないもの=省略も登録)件数 > CronDelete 件数)の 3 点すべて真で alive・1 つでも偽なら dead で理由を全部 reasons に列挙する。④ launcher=bluelampNN の席だけ tmux の pane に Claude Code の画面(footer)が在るかまで見る: 不到達(ソケットに届かない)と不在(can't find session)は別物で、不到達・不在だが pane pid 生存・画面判読不能は unmeasurable(dead と読まない)、不在かつ pane pid 死亡だけ dead。claude 起動の席は tmux を見ない。transcript 0 本は ②③ とも偽(fail-closed)。副作用は selfheal.log への 1 行だけ(stop / spawn はしない)。",
|
|
281
|
+
"inputSchema": {
|
|
282
|
+
"type": "object",
|
|
283
|
+
"properties": {
|
|
284
|
+
"id": {
|
|
285
|
+
"type": "string",
|
|
286
|
+
"description": "monster_id(UUID)または short_id(8 文字)"
|
|
287
|
+
},
|
|
288
|
+
"activity_window_min": {
|
|
289
|
+
"type": "number",
|
|
290
|
+
"description": "① 直近活動の窓(分)。default 30、min 1、max 1440。範囲外は端に収め、実効値を evidence.activity_window_min に載せる。"
|
|
291
|
+
}
|
|
292
|
+
},
|
|
293
|
+
"required": [
|
|
294
|
+
"id"
|
|
295
|
+
]
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
"name": "await_onboarding",
|
|
300
|
+
"description": "spawn 直後の席がロールを読めたか(着任)を transcript の poll で実測する(板 #608)。load_knowledge の結果が出た時点で即返す: 成功 → onboarded=true(keyword / ts)/失敗 → reason=role_load_failed(detail)/何も出ないまま timeout_sec(既定 120・上限 300)→ reason=timeout。既に成功済みなら即返す(冪等・短い timeout_sec で呼び直す運用でよい)。tmux は見ない。副作用は selfheal.log への 1 行(spawned(successor=…) / spawn_failed(…))だけで、再 spawn・障害メモは呼び出し側の責務。",
|
|
301
|
+
"inputSchema": {
|
|
302
|
+
"type": "object",
|
|
303
|
+
"properties": {
|
|
304
|
+
"id": {
|
|
305
|
+
"type": "string",
|
|
306
|
+
"description": "monster_id(UUID)または short_id(8 文字)"
|
|
307
|
+
},
|
|
308
|
+
"timeout_sec": {
|
|
309
|
+
"type": "number",
|
|
310
|
+
"description": "待つ上限(秒)。default 120、max 300(超えは 300 に丸める)。結果が出れば timeout を待たずに返る。"
|
|
311
|
+
},
|
|
312
|
+
"poll_sec": {
|
|
313
|
+
"type": "number",
|
|
314
|
+
"description": "poll 間隔(秒)。default 5、min 1。"
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
"required": [
|
|
318
|
+
"id"
|
|
319
|
+
]
|
|
320
|
+
}
|
|
321
|
+
},
|
|
322
|
+
{
|
|
323
|
+
"name": "list_accounts",
|
|
324
|
+
"description": "各席がいまどの口座で動いているかを 1 表(席/種別/口座/要る操作)で出し、切り替えが要る席だけを名指しする(箱 #1848 ②)。種別は pane pid の `ps eww` に変数名 CLAUDE_CODE_OAUTH_TOKEN が在るかだけで決め(値は見ない・返さない)、機体の共有口座は env を外した `claude auth status` 1 回で出す。止まっているかは既存の events(idle / awaiting_input)で決める。要る操作は 3 値: none(Keychain 追従・走行中)/send_line(止まっている席へ 1 行)/restart(env トークン付きの旧席・案内のみ)。測れなかった席は unknown(切り替え不要と読まない)。別機体は supervisor-remotes.json の別名ごとに ssh で同じ式を撃つ(遠隔の口座欄は測定不能固定)。実行するのは nudge:true のときの 1 行送信だけで、再起動・/login は実行しない。",
|
|
325
|
+
"inputSchema": {
|
|
326
|
+
"type": "object",
|
|
327
|
+
"properties": {
|
|
328
|
+
"nudge": {
|
|
329
|
+
"type": "boolean",
|
|
330
|
+
"description": "true なら `required_action === \"send_line\"` の席へ 1 行送る(既定 false=表を出すだけ)。①③には送らない。"
|
|
331
|
+
},
|
|
332
|
+
"message": {
|
|
333
|
+
"type": "string",
|
|
334
|
+
"description": "②で送る本文(任意)。既定は「次のリクエストを起こすだけ・作業は変えない」旨の 1 行。"
|
|
335
|
+
},
|
|
336
|
+
"include_remote": {
|
|
337
|
+
"type": "boolean",
|
|
338
|
+
"description": "宛先表の別機体も見る(既定 true・宛先表が無ければ 0 件)。false で ssh を撃たない。"
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
74
342
|
}
|
|
75
343
|
]
|
|
76
344
|
}
|
package/dist-obf/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "monster-orchestrator",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist-obf/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -39,8 +39,8 @@
|
|
|
39
39
|
"vitest": "^4.1.5"
|
|
40
40
|
},
|
|
41
41
|
"buildInfo": {
|
|
42
|
-
"builtFromCommit": "
|
|
43
|
-
"builtAt": "2026-09-
|
|
44
|
-
"srcSha256": "
|
|
42
|
+
"builtFromCommit": "39980ed",
|
|
43
|
+
"builtAt": "2026-09-24T09:04:04Z",
|
|
44
|
+
"srcSha256": "5b36cb1f7fc0188ba0060ebf1aeea01cdb38b2235dccc6ea3b0f5769a166b535"
|
|
45
45
|
}
|
|
46
46
|
}
|