@geekbeer/minion 3.57.0 → 3.58.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.
@@ -504,7 +504,7 @@ POST `/api/threads` body (プロジェクト紐づきディスカッション):
504
504
  | `thread_type` | string | No | `help`(デフォルト)or `discussion` |
505
505
  | `title` | string | Yes | スレッドの要約 |
506
506
  | `content` | string | Yes | スレッド本文(thread_messagesの最初のメッセージとして保存) |
507
- | `mentions` | string[] | No | メンション対象。形式: `role:engineer`, `role:pm`, `minion:<minion_id>`, `user` |
507
+ | `mentions` | string[] | No | メンション対象。形式: `user:<auth_user_id>` (個別指名・推奨), `role:engineer`, `role:pm`, `role:accountant`, `minion:<minion_id>`, `user` (誰でも良い場合のフォールバック) |
508
508
  | `context` | object | No | 任意のメタデータ(category, urgency, dag_execution_id等) |
509
509
 
510
510
  **プロジェクト紐づけの使い分け:**
@@ -520,7 +520,11 @@ POST `/api/threads` body (プロジェクト紐づきディスカッション):
520
520
  - メンションされたミニオンは優先的にスレッドを評価する
521
521
  - メンションがない場合、全チームメンバーがLLMで関連性を判定してから参加
522
522
  - トークン消費を抑えるため、当事者が明確な場合はメンションを推奨
523
- - ミニオンが自力で解決できない場合、`@user` メンション付きで返信して人間に助けを求める
523
+
524
+ **人間へのメンション (重要):**
525
+ 1. **個別指名 `user:<auth_user_id>`** を最優先で使う。`/api/minion/me/project/:id/members` または `/api/minion/workspaces/:id/members` で人間メンバーの `user_id` を引いてから指定する。同名 `display_name` が複数いるワークスペースでも誤通知しない
526
+ 2. **`role:pm` / `role:engineer` / `role:accountant`** はプロジェクトの該当ロール全員に届く(プロジェクト紐づきスレッドのみ)
527
+ 3. **`user` (generic)** はプロジェクトメンバーの人間全員に届く。プロジェクト紐づきでないワークスペーススレッドでは workspace_members 全員。「誰でも良い」場合のフォールバック扱いで、原則 1 か 2 を先に検討する
524
528
 
525
529
  POST `/api/threads/:id/messages` body:
526
530
  ```json
@@ -811,6 +815,46 @@ Response:
811
815
 
812
816
  `role` is one of `"pm"` (project manager), `"engineer"`, or `"accountant"`.
813
817
 
818
+ ### Project Members
819
+
820
+ | Method | Endpoint | Description |
821
+ |--------|----------|-------------|
822
+ | GET | `/api/minion/me/project/[id]/members` | プロジェクトのメンバー一覧(ミニオン+人間) |
823
+
824
+ Response:
825
+ ```json
826
+ {
827
+ "minions": [
828
+ { "minion_id": "uuid", "name": "Mary", "status": "online", "role": "pm", "joined_at": "..." }
829
+ ],
830
+ "humans": [
831
+ { "user_id": "uuid", "display_name": "yunoda", "email": "yunoda@example.com", "role": "engineer", "joined_at": "..." }
832
+ ]
833
+ }
834
+ ```
835
+
836
+ スレッドに `user:<auth_user_id>` で個別指名する前に、このエンドポイントで `user_id` を引いてくる。`display_name` が重複するワークスペースで誤通知を避けるため、ミニオンは必ず `email` または既知の `user_id` で当人を特定すること。`role` はプロジェクトロール (`pm` / `engineer` / `accountant`)。
837
+
838
+ ### Workspace Members
839
+
840
+ | Method | Endpoint | Description |
841
+ |--------|----------|-------------|
842
+ | GET | `/api/minion/workspaces/[id]/members` | ワークスペースのメンバー一覧(人間+ミニオン) |
843
+
844
+ Response:
845
+ ```json
846
+ {
847
+ "humans": [
848
+ { "user_id": "uuid", "display_name": "yunoda", "email": "yunoda@example.com", "role": "owner", "joined_at": "..." }
849
+ ],
850
+ "minions": [
851
+ { "minion_id": "uuid", "name": "Mary", "status": "online", "joined_at": "..." }
852
+ ]
853
+ }
854
+ ```
855
+
856
+ プロジェクト紐づきがないワークスペーススレッド(朝作業ルーティンのブロッカー報告など)でメンション先を引きたいときに使う。`role` はワークスペースロール (`owner` / `admin` / `member`)。
857
+
814
858
  ### Project Context
815
859
 
816
860
  | Method | Endpoint | Description |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@geekbeer/minion",
3
- "version": "3.57.0",
3
+ "version": "3.58.0",
4
4
  "description": "AI Agent runtime for Minion - manages status and skill deployment on VPS",
5
5
  "main": "linux/server.js",
6
6
  "bin": {
package/roles/engineer.md CHANGED
@@ -28,7 +28,9 @@
28
28
 
29
29
  1. **まずプロジェクトメモリーを検索** — `GET /api/project-memories?project_id=...&search=キーワード` で過去の知見を確認
30
30
  2. **自己解決不可なら即ヘルプスレッドを起票** — `POST /api/threads` で `thread_type: "help"` を作成。`attempted_resolution` に試したことを記載
31
- 3. **人間にしか解決できない問題は `mentions: ["user"]` で即エスカレーション** — 認証コード、パスワード、外部承認など
31
+ 3. **人間にしか解決できない問題は即エスカレーション** — 認証コード、パスワード、外部承認など
32
+ - 当事者が特定できる場合は **`GET /api/minion/me/project/<project_id>/members` で `user_id` を引いて `mentions: ["user:<auth_user_id>"]` で個別指名** (display_name 重複時の誤通知を避けるため)
33
+ - 誰でも対応可能な問題なら `mentions: ["user"]` (generic)
32
34
  4. **解決後はスレッドを resolve し、知見をプロジェクトメモリーに保存**
33
35
 
34
36
  **スキルを失敗終了させる前に、必ずヘルプスレッドでエスカレーションすること。**
package/roles/pm.md CHANGED
@@ -48,14 +48,18 @@ PMとして、ブロッカーの解決を主導する責務がある:
48
48
 
49
49
  ### 自分がブロッカーに遭遇した場合
50
50
  1. **プロジェクトメモリーを検索** — 過去の知見で解決できないか確認
51
- 2. **自己解決不可なら `mentions: ["user"]` でヘルプスレッドを起票** — PMが解決できない問題は人間にエスカレーション
51
+ 2. **自己解決不可ならヘルプスレッドを起票** — PMが解決できない問題は人間にエスカレーション
52
+ - 特定の人にしか分からない問題なら **`GET /api/minion/me/project/<project_id>/members` で `user_id` を引いて `mentions: ["user:<auth_user_id>"]` で個別指名**
53
+ - 誰でも良い性質の問題なら `mentions: ["user"]` (generic)
52
54
  3. **解決後はスレッドを resolve し、知見をプロジェクトメモリーに保存**
53
55
 
54
56
  ### エンジニアからのヘルプスレッドに対応する場合
55
57
  1. **thread_watcher が自動で通知するので、`role:pm` 宛のスレッドに回答する**
56
- 2. **自分で解決できない場合は `@user` メンション付きで人間にエスカレーション**
58
+ 2. **自分で解決できない場合は人間にエスカレーション** — 当事者が特定できるなら個別指名 (`user:<auth_user_id>`)、不明なら `user` (generic)
57
59
  3. **解決策が汎用的なら、プロジェクトメモリーへの保存を促す**
58
60
 
61
+ display_name はワークスペース内で一意とは限らない。同名問題を避けるため、**generic `user` より個別指名 (`user:<id>`) を優先する**こと。`user_id` の取得方法は `~/.minion/docs/api-reference.md` の「Project Members / Workspace Members」セクションを参照。
62
+
59
63
  詳細は `~/.minion/rules/core.md` の「Blocker Handling」セクションを参照。
60
64
 
61
65
  ## Routine (従来方式)
package/rules/core.md CHANGED
@@ -322,7 +322,8 @@ API詳細は `~/.minion/docs/api-reference.md` の「Todos」セクションを
322
322
  "thread_type": "help",
323
323
  "title": "問題の要約(1行)",
324
324
  "content": "状況の詳細説明",
325
- "mentions": ["role:pm"],
325
+ "mentions": ["user:<auth_user_id>"], // 特定の人に聞くなら個別指名 (推奨)
326
+ // 誰でも良いなら ["user"] / ["role:pm"] 等
326
327
  "context": {
327
328
  "category": "auth|environment|external-service|information|approval",
328
329
  "attempted_resolution": "試行した内容"
@@ -336,7 +337,7 @@ API詳細は `~/.minion/docs/api-reference.md` の「Todos」セクションを
336
337
  "thread_type": "help",
337
338
  "title": "問題の要約(1行)",
338
339
  "content": "状況の詳細説明",
339
- "mentions": ["user"],
340
+ "mentions": ["user:<auth_user_id>"], // 個別指名 (推奨)。誰でも良いなら ["user"]
340
341
  "context": {
341
342
  "category": "auth|environment|external-service|information|approval",
342
343
  "attempted_resolution": "試行した内容"
@@ -366,18 +367,25 @@ API詳細は `~/.minion/docs/api-reference.md` の「Todos」セクションを
366
367
 
367
368
  ### メンションの使い分け
368
369
 
369
- | 状況 | メンション |
370
- |------|-----------|
371
- | PMに判断を仰ぐ | `["role:pm"]` |
372
- | エンジニアの知見が必要 | `["role:engineer"]` |
373
- | 特定ミニオンに聞く | `["minion:<minion_id>"]` |
374
- | 人間の介入が必要(認証コード、承認等) | `["user"]` |
375
- | チーム全体に共有 | `[]`(メンションなし) |
370
+ | 状況 | メンション | 備考 |
371
+ |------|-----------|------|
372
+ | 特定の人間を指名(推奨) | `["user:<auth_user_id>"]` | 事前に Members API で `user_id` を解決すること |
373
+ | PMに判断を仰ぐ | `["role:pm"]` | プロジェクト紐づきスレッドのみ有効 |
374
+ | エンジニアの知見が必要 | `["role:engineer"]` | プロジェクト紐づきスレッドのみ有効 |
375
+ | 特定ミニオンに聞く | `["minion:<minion_id>"]` | |
376
+ | 誰でも良いから人間に聞く | `["user"]` | プロジェクト紐づきならプロジェクト人間メンバー、紐づきがなければワークスペース人間メンバー全員 |
377
+ | チーム全体に共有 | `[]`(メンションなし) | |
378
+
379
+ **人間メンバーの user_id 解決:**
380
+ - プロジェクト紐づきスレッド: `GET /api/minion/me/project/<project_id>/members` で `humans[].user_id` を取得
381
+ - ワークスペーススレッド: `GET /api/minion/workspaces/<workspace_id>/members` で `humans[].user_id` を取得
382
+
383
+ display_name が同じユーザーが同一ワークスペースに複数いる可能性があるため、原則として個別指名 (`user:<id>`) を優先する。「誰でも良い」場合のみ generic `user` を使う。
376
384
 
377
385
  ### 重要なルール
378
386
 
379
387
  - **スレッド起票時は `attempted_resolution` を必ず含める。** 何を試したか不明だと、回答者が同じことを提案してしまう。
380
- - **人間にしか解決できない問題(認証コード入力、外部サービスのパスワード等)は即 `@user` メンション**で起票する。自己解決を試みて時間を浪費しないこと。
388
+ - **人間にしか解決できない問題(認証コード入力、外部サービスのパスワード等)は即メンション付き** で起票する。自己解決を試みて時間を浪費しないこと。特定の人にしか分からないことなら個別指名 (`user:<id>`)、誰でも良い性質の問題なら `user`(generic) を使う。
381
389
  - **ブロッカーが解決したらスレッドを `resolve` する。** 放置しない。
382
390
  - **解決策をプロジェクトメモリーに保存する。** 同じブロッカーに再度遭遇する他のミニオンの助けになる。
383
391