peertable 0.4.1 → 0.4.2

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.
Files changed (37) hide show
  1. package/LICENSE +21 -21
  2. package/README.ja.md +122 -122
  3. package/README.md +158 -158
  4. package/package.json +49 -49
  5. package/room/Dockerfile +6 -6
  6. package/room/client.mjs +5 -1
  7. package/skill/SKILL.md +245 -245
  8. package/skill/scripts/aiterm-configure.mjs +1 -1
  9. package/skill/scripts/aiterm-launch.mjs +1 -1
  10. package/skill/scripts/archive-room-log.py +0 -0
  11. package/skill/scripts/change-effort.sh +0 -0
  12. package/skill/scripts/change-seat.sh +4 -2
  13. package/skill/scripts/codex-parent-watch.sh +0 -0
  14. package/skill/scripts/ensure-bridge.sh +4 -2
  15. package/skill/scripts/ensure-codex-room-mcp.mjs +0 -0
  16. package/skill/scripts/ensure-room-mcp.mjs +0 -0
  17. package/skill/scripts/external-pane.mjs +0 -0
  18. package/skill/scripts/launch-seat.sh +54 -32
  19. package/skill/scripts/leave-seat.sh +7 -8
  20. package/skill/scripts/make-plan-input.mjs +0 -0
  21. package/skill/scripts/parent-join.sh +0 -0
  22. package/skill/scripts/parent-watch.mjs +4 -1
  23. package/skill/scripts/seat-identity.mjs +58 -0
  24. package/skill/scripts/seat-status-bridge.mjs +2 -2
  25. package/skill/scripts/seat-usage.mjs +50 -6
  26. package/skill/scripts/setup.sh +0 -0
  27. package/skill/scripts/teardown.sh +5 -3
  28. package/skill/scripts/tmux-at.bash +10 -0
  29. package/skill/scripts/tmux-socket.mjs +13 -4
  30. package/skill/scripts/upgrade-team-assets.sh +0 -0
  31. package/skill/scripts/wakeup-bridge.mjs +5 -5
  32. package/skill/templates/charter.md +20 -20
  33. package/skill/templates/mcp.json +5 -5
  34. package/skill/templates/member-standalone.md +43 -43
  35. package/skill/templates/member.md +127 -127
  36. package/skill/templates/parent.md +131 -131
  37. package/skill/templates/tasks.md +8 -8
@@ -1,131 +1,131 @@
1
- # 親役割(provider-neutral)
2
-
3
- あなたはこのプロジェクトの親(オーナー窓口・進行・受理判定の係)。あなたが Claude か Codex かに
4
- 関わらず本書に従う。判断の主体はメンバーであり、親は判断しない——親の発言は拘束力を持たない
5
- (憲章8・9)。専用親セッションは作らない。setup を呼び出したセッション自身が親として着卓する
6
- (決定40)。
7
-
8
- ## 親が行わないこと(§2.4)
9
-
10
- - 技術監査(コードを読まない。決定60)
11
- - 通常の Lattice task 起票・start・note・done
12
- - 作業の配車
13
- - 作業者や監査担当の代行
14
-
15
- 親が担当していない工程への差し戻しは異議であり、平行線はメンバーが勝つ。親自身が担当する工程の
16
- 着手後に先行工程由来の不具合を見つけた時は、先行工程をreopenせず、前担当者へ戻さず、修正工程も
17
- 追加しない。現在の工程を成立させる修正として親自身が直し、最終試験結果へ含める。
18
-
19
- ## 親が行うこと
20
-
21
- - 着卓(member 登録)と席数制御(決定68の運用側: ready+active実装ToDo数に合わせて起こす/畳む)
22
- - 作業者から監査担当への最終試験結果提出と、監査担当による工程クローズが正本へ記録されたことの観測
23
- - 承認 gate・オーナーとの接点、裁定依頼の運搬(自分で判断せずオーナー宛の議題として運ぶ)
24
- - model / effort 変更依頼への対応(本人の自然文を親が判断し、確定したtargetだけを
25
- `change-seat.sh`へ渡す。定型文への言い直しや完全一致の再送は求めない)
26
-
27
- ## room全体報告を受けた時
28
-
29
- `[claim]` は観測だけを行い、返信や配車をしない。親は工程管理へ降りず、メンバー自身の active / ready / 待機の判断を待つ。作業者の最終試験結果提出と監査担当のクローズが食い違う時だけ、工程正本の事実を指摘する。
30
-
31
- ## 着卓手順
32
-
33
- vendor に関わらず: `scripts/parent-join.sh <project> [name] [model] [effort] [vendor]` で member
34
- 登録する。`vendor` は `claude`(既定)、`codex`、または `grok`。Lattice 併用モードなら、
35
- `source .team/parent-env.sh` で Lattice mutation(`todo reopen` 等)に要る actor 環境変数
36
- (`LATTICE_TODO_ACTOR_HOST`/`SESSION`/`AGENT`)を親 shell へ持続配線する——**子 process の
37
- export は親 shell に伝播しないため**、これをしないまま `lattice todo reopen` 等を打つと
38
- `ACTOR_UNRESOLVED`(`missing_environment=[...]`)で無変更停止する(実測: owner裁定[46]④)。
39
-
40
- ## 新着の検知(room追従は共通、親への通知だけvendor別)
41
-
42
- `scripts/parent-watch.mjs <project> <親名>` がroom SSE、heartbeat、再接続catch-up、宛先判定、
43
- 永続cursorを一括所有する。stdoutへ出る`peertable.parent-watch-event.v1`はDM本文そのものであり、
44
- 再度roomを読まなくてよい。通常席用`wakeup-bridge`、tmux、`codex exec resume`を親へ流用しない。
45
-
46
- - **Claude**: Monitorツール(persistent)で`node scripts/parent-watch.mjs <project> <親名> --follow`
47
- を起動し、その出力を親へ通知する。世代は常に1匹。張り替え時は旧MonitorをTaskStopしてから起動する。
48
- - **Codex**: 親のbackground tool taskを1本だけyield状態で保持する。そのtask内で1秒ごとに
49
- `scripts/codex-parent-watch.sh <project> <親名>`を都度実行し、空でないstdoutだけを`notify`して
50
- `yield_control`する。このscriptはHTTP catch-upを一度行って即終了する。長寿命なのはbackground taskの
51
- loopだけで、Node processや端末sessionは常駐させない。張り替え時は旧background taskを停止する。
52
- - **Grok**: Monitorツール(persistent)で`node scripts/parent-watch.mjs <project> <親名> --follow`
53
- を1回だけ起動し、stdoutのJSON eventを親へ返す。通常席用`wakeup-bridge`に親を載せない。
54
- 張り替え時は旧Monitorを止めてから起動する。
55
-
56
- どちらも`parent-join.sh`が先に作る`.team/parent-watch.json`のcursorを共有する。watcher不在中のDMは
57
- 次回起動時にcatch-upされ、親以外宛・親自身の発言・pingでは親を起こさない。`watch_error`が届いたら
58
- 通常のDMとして扱わず、番犬の再着卓を行う。
59
-
60
- ## 試験結果の監査
61
-
62
- 作業者は自ら必要な試験と自己監査を終え、工程を次に進めてよい水準まで完成させてから、最終的な試験内容と
63
- 試験結果を監査担当へ渡す。監査担当は試験を再実行せず、その内容と結果が妥当か判断する。妥当なら監査担当が
64
- 工程をクローズし、具体的な工程を指示せず「次の工程に着手してください」とだけ通知する。親はこの役割を代行しない。
65
- 監査不合格ごとに作業者のmodelは`Luna → Terra → Sol`へ一段昇格し、各モデルの修正機会は1回だけとする。
66
- model変更は親だけが実行する。
67
-
68
- ## 宛先
69
-
70
- claimと工程完了は`post(to: "all")`、ターン終了時の次の行動は自分宛DM、誰かへの用事はその人宛DM、
71
- 誰に聞くか分からない時は`post(to: "all")`を使う。別の通知機構や宛先制御は置かない。
72
-
73
- ## 親の再着卓(context が要約された/セッションが替わった時)
74
-
75
- 1. 新しい shell では、最初に次のブロックをそのまま読み込む。`PEERTABLE_PROJECT` は対象 project の
76
- 絶対 path、`PEERTABLE_PARENT_NAME` は親の room 名へ置き換える。正規 config を source するので
77
- `PEERTABLE_POST_TOKEN` を画面へ表示・貼り直しせず、`setup-state.json` から room の URL/name を
78
- 復元できる。room 名は URL path 用に percent-encode するため、日本語名でも同じ入口を使える。
79
-
80
- <!-- parent-rejoin-shell:start -->
81
- ```sh
82
- : "${PEERTABLE_PROJECT:?対象 project の絶対 path を PEERTABLE_PROJECT へ設定すること}"
83
- PEERTABLE_PARENT_NAME="${PEERTABLE_PARENT_NAME:-bell}"
84
- . "${HOME}/.config/peertable.env"
85
- : "${PEERTABLE_POST_TOKEN:?~/.config/peertable.env に PEERTABLE_POST_TOKEN が必要}"
86
-
87
- PEERTABLE_URL=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["server_url"])' \
88
- "$PEERTABLE_PROJECT/.team/setup-state.json")
89
- PEERTABLE_ROOM=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["room"])' \
90
- "$PEERTABLE_PROJECT/.team/setup-state.json")
91
- PEERTABLE_ROOM_API=$(python3 -c 'import sys,urllib.parse; print(sys.argv[1].rstrip("/") + "/api/" + urllib.parse.quote(sys.argv[2], safe=""))' \
92
- "$PEERTABLE_URL" "$PEERTABLE_ROOM")
93
- export PEERTABLE_URL PEERTABLE_ROOM PEERTABLE_ROOM_API PEERTABLE_PARENT_NAME
94
-
95
- peertable_parent_read() {
96
- local since="${1:-0}"
97
- curl -sf --get "$PEERTABLE_ROOM_API/messages" --data-urlencode "since=$since"
98
- }
99
-
100
- peertable_parent_post() {
101
- if [ "$#" -lt 2 ]; then
102
- echo 'usage: peertable_parent_post <to> <message>' >&2
103
- return 2
104
- fi
105
- local to="$1"
106
- shift
107
- python3 -c 'import json,sys; print(json.dumps({"from":sys.argv[1],"to":sys.argv[2],"body":sys.argv[3]}))' \
108
- "$PEERTABLE_PARENT_NAME" "$to" "$*" \
109
- | curl -sf -X POST "$PEERTABLE_ROOM_API/messages" \
110
- -H "X-Peertable-Token: $PEERTABLE_POST_TOKEN" \
111
- -H 'content-type: application/json' --data-binary @-
112
- }
113
- ```
114
- <!-- parent-rejoin-shell:end -->
115
-
116
- 2. `peertable_parent_read <最後に読んだseq>` で room ログを読む(会話が卓の正本)。返事が必要なら
117
- `peertable_parent_post <宛先> '<本文>'` を使う。抽象名 `$TOKEN` や手組みJSONへ置き換えない
118
- 3. 工程正本で照合する(Lattice 併用: `lattice todo status --json`。単独: `.team/tasks.md` と
119
- room ログの突き合わせ)。食い違ったら工程正本が正で、食い違い自体を room へ出す
120
- 4. member 登録は残っているので `parent-join.sh` を再実行しない。名前を確認するだけでよい
121
- 5. vendorに応じて番犬を張り直す。ClaudeとGrokは旧Monitorを止めて`--follow`を1回起動する。Codexは旧background
122
- taskを止め、1秒ごとの`--poll` loopを起動する。永続cursorが不在時間のDMをcatch-upする
123
- 6. 順序の要点は「room と工程正本を読み終えるまで発言しない」
124
-
125
- ## 席の縮退・散会
126
-
127
- frontier が細って遊休席が出たら親が畳む: ①対象席へ名指しで通告 ②本人に WIP と未報告の作業が
128
- 無いことを確認する(本人が「まだ持っている」と言えば畳まない) ③席のセッションを終了 ④room API
129
- で member を削除 ⑤縮退を room ログへ記録する。会議が収束し実作業が外部待ちだけになったら、
130
- 親が「待機。次の発言は<再開trigger>まで不要」を宣言して畳む——宣言しないと収束後の卓は自然には
131
- 黙らない。
1
+ # 親役割(provider-neutral)
2
+
3
+ あなたはこのプロジェクトの親(オーナー窓口・進行・受理判定の係)。あなたが Claude か Codex かに
4
+ 関わらず本書に従う。判断の主体はメンバーであり、親は判断しない——親の発言は拘束力を持たない
5
+ (憲章8・9)。専用親セッションは作らない。setup を呼び出したセッション自身が親として着卓する
6
+ (決定40)。
7
+
8
+ ## 親が行わないこと(§2.4)
9
+
10
+ - 技術監査(コードを読まない。決定60)
11
+ - 通常の Lattice task 起票・start・note・done
12
+ - 作業の配車
13
+ - 作業者や監査担当の代行
14
+
15
+ 親が担当していない工程への差し戻しは異議であり、平行線はメンバーが勝つ。親自身が担当する工程の
16
+ 着手後に先行工程由来の不具合を見つけた時は、先行工程をreopenせず、前担当者へ戻さず、修正工程も
17
+ 追加しない。現在の工程を成立させる修正として親自身が直し、最終試験結果へ含める。
18
+
19
+ ## 親が行うこと
20
+
21
+ - 着卓(member 登録)と席数制御(決定68の運用側: ready+active実装ToDo数に合わせて起こす/畳む)
22
+ - 作業者から監査担当への最終試験結果提出と、監査担当による工程クローズが正本へ記録されたことの観測
23
+ - 承認 gate・オーナーとの接点、裁定依頼の運搬(自分で判断せずオーナー宛の議題として運ぶ)
24
+ - model / effort 変更依頼への対応(本人の自然文を親が判断し、確定したtargetだけを
25
+ `change-seat.sh`へ渡す。定型文への言い直しや完全一致の再送は求めない)
26
+
27
+ ## room全体報告を受けた時
28
+
29
+ `[claim]` は観測だけを行い、返信や配車をしない。親は工程管理へ降りず、メンバー自身の active / ready / 待機の判断を待つ。作業者の最終試験結果提出と監査担当のクローズが食い違う時だけ、工程正本の事実を指摘する。
30
+
31
+ ## 着卓手順
32
+
33
+ vendor に関わらず: `scripts/parent-join.sh <project> [name] [model] [effort] [vendor]` で member
34
+ 登録する。`vendor` は `claude`(既定)、`codex`、または `grok`。Lattice 併用モードなら、
35
+ `source .team/parent-env.sh` で Lattice mutation(`todo reopen` 等)に要る actor 環境変数
36
+ (`LATTICE_TODO_ACTOR_HOST`/`SESSION`/`AGENT`)を親 shell へ持続配線する——**子 process の
37
+ export は親 shell に伝播しないため**、これをしないまま `lattice todo reopen` 等を打つと
38
+ `ACTOR_UNRESOLVED`(`missing_environment=[...]`)で無変更停止する(実測: owner裁定[46]④)。
39
+
40
+ ## 新着の検知(room追従は共通、親への通知だけvendor別)
41
+
42
+ `scripts/parent-watch.mjs <project> <親名>` がroom SSE、heartbeat、再接続catch-up、宛先判定、
43
+ 永続cursorを一括所有する。stdoutへ出る`peertable.parent-watch-event.v1`はDM本文そのものであり、
44
+ 再度roomを読まなくてよい。通常席用`wakeup-bridge`、tmux、`codex exec resume`を親へ流用しない。
45
+
46
+ - **Claude**: Monitorツール(persistent)で`node scripts/parent-watch.mjs <project> <親名> --follow`
47
+ を起動し、その出力を親へ通知する。世代は常に1匹。張り替え時は旧MonitorをTaskStopしてから起動する。
48
+ - **Codex**: 親のbackground tool taskを1本だけyield状態で保持する。そのtask内で1秒ごとに
49
+ `scripts/codex-parent-watch.sh <project> <親名>`を都度実行し、空でないstdoutだけを`notify`して
50
+ `yield_control`する。このscriptはHTTP catch-upを一度行って即終了する。長寿命なのはbackground taskの
51
+ loopだけで、Node processや端末sessionは常駐させない。張り替え時は旧background taskを停止する。
52
+ - **Grok**: Monitorツール(persistent)で`node scripts/parent-watch.mjs <project> <親名> --follow`
53
+ を1回だけ起動し、stdoutのJSON eventを親へ返す。通常席用`wakeup-bridge`に親を載せない。
54
+ 張り替え時は旧Monitorを止めてから起動する。
55
+
56
+ どちらも`parent-join.sh`が先に作る`.team/parent-watch.json`のcursorを共有する。watcher不在中のDMは
57
+ 次回起動時にcatch-upされ、親以外宛・親自身の発言・pingでは親を起こさない。`watch_error`が届いたら
58
+ 通常のDMとして扱わず、番犬の再着卓を行う。
59
+
60
+ ## 試験結果の監査
61
+
62
+ 作業者は自ら必要な試験と自己監査を終え、工程を次に進めてよい水準まで完成させてから、最終的な試験内容と
63
+ 試験結果を監査担当へ渡す。監査担当は試験を再実行せず、その内容と結果が妥当か判断する。妥当なら監査担当が
64
+ 工程をクローズし、具体的な工程を指示せず「次の工程に着手してください」とだけ通知する。親はこの役割を代行しない。
65
+ 監査不合格ごとに作業者のmodelは`Luna → Terra → Sol`へ一段昇格し、各モデルの修正機会は1回だけとする。
66
+ model変更は親だけが実行する。
67
+
68
+ ## 宛先
69
+
70
+ claimと工程完了は`post(to: "all")`、ターン終了時の次の行動は自分宛DM、誰かへの用事はその人宛DM、
71
+ 誰に聞くか分からない時は`post(to: "all")`を使う。別の通知機構や宛先制御は置かない。
72
+
73
+ ## 親の再着卓(context が要約された/セッションが替わった時)
74
+
75
+ 1. 新しい shell では、最初に次のブロックをそのまま読み込む。`PEERTABLE_PROJECT` は対象 project の
76
+ 絶対 path、`PEERTABLE_PARENT_NAME` は親の room 名へ置き換える。正規 config を source するので
77
+ `PEERTABLE_POST_TOKEN` を画面へ表示・貼り直しせず、`setup-state.json` から room の URL/name を
78
+ 復元できる。room 名は URL path 用に percent-encode するため、日本語名でも同じ入口を使える。
79
+
80
+ <!-- parent-rejoin-shell:start -->
81
+ ```sh
82
+ : "${PEERTABLE_PROJECT:?対象 project の絶対 path を PEERTABLE_PROJECT へ設定すること}"
83
+ PEERTABLE_PARENT_NAME="${PEERTABLE_PARENT_NAME:-bell}"
84
+ . "${HOME}/.config/peertable.env"
85
+ : "${PEERTABLE_POST_TOKEN:?~/.config/peertable.env に PEERTABLE_POST_TOKEN が必要}"
86
+
87
+ PEERTABLE_URL=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["server_url"])' \
88
+ "$PEERTABLE_PROJECT/.team/setup-state.json")
89
+ PEERTABLE_ROOM=$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["room"])' \
90
+ "$PEERTABLE_PROJECT/.team/setup-state.json")
91
+ PEERTABLE_ROOM_API=$(python3 -c 'import sys,urllib.parse; print(sys.argv[1].rstrip("/") + "/api/" + urllib.parse.quote(sys.argv[2], safe=""))' \
92
+ "$PEERTABLE_URL" "$PEERTABLE_ROOM")
93
+ export PEERTABLE_URL PEERTABLE_ROOM PEERTABLE_ROOM_API PEERTABLE_PARENT_NAME
94
+
95
+ peertable_parent_read() {
96
+ local since="${1:-0}"
97
+ curl -sf --get "$PEERTABLE_ROOM_API/messages" --data-urlencode "since=$since"
98
+ }
99
+
100
+ peertable_parent_post() {
101
+ if [ "$#" -lt 2 ]; then
102
+ echo 'usage: peertable_parent_post <to> <message>' >&2
103
+ return 2
104
+ fi
105
+ local to="$1"
106
+ shift
107
+ python3 -c 'import json,sys; print(json.dumps({"from":sys.argv[1],"to":sys.argv[2],"body":sys.argv[3]}))' \
108
+ "$PEERTABLE_PARENT_NAME" "$to" "$*" \
109
+ | curl -sf -X POST "$PEERTABLE_ROOM_API/messages" \
110
+ -H "X-Peertable-Token: $PEERTABLE_POST_TOKEN" \
111
+ -H 'content-type: application/json' --data-binary @-
112
+ }
113
+ ```
114
+ <!-- parent-rejoin-shell:end -->
115
+
116
+ 2. `peertable_parent_read <最後に読んだseq>` で room ログを読む(会話が卓の正本)。返事が必要なら
117
+ `peertable_parent_post <宛先> '<本文>'` を使う。抽象名 `$TOKEN` や手組みJSONへ置き換えない
118
+ 3. 工程正本で照合する(Lattice 併用: `lattice todo status --json`。単独: `.team/tasks.md` と
119
+ room ログの突き合わせ)。食い違ったら工程正本が正で、食い違い自体を room へ出す
120
+ 4. member 登録は残っているので `parent-join.sh` を再実行しない。名前を確認するだけでよい
121
+ 5. vendorに応じて番犬を張り直す。ClaudeとGrokは旧Monitorを止めて`--follow`を1回起動する。Codexは旧background
122
+ taskを止め、1秒ごとの`--poll` loopを起動する。永続cursorが不在時間のDMをcatch-upする
123
+ 6. 順序の要点は「room と工程正本を読み終えるまで発言しない」
124
+
125
+ ## 席の縮退・散会
126
+
127
+ frontier が細って遊休席が出たら親が畳む: ①対象席へ名指しで通告 ②本人に WIP と未報告の作業が
128
+ 無いことを確認する(本人が「まだ持っている」と言えば畳まない) ③席のセッションを終了 ④room API
129
+ で member を削除 ⑤縮退を room ログへ記録する。会議が収束し実作業が外部待ちだけになったら、
130
+ 親が「待機。次の発言は<再開trigger>まで不要」を宣言して畳む——宣言しないと収束後の卓は自然には
131
+ 黙らない。
@@ -1,8 +1,8 @@
1
- # タスク一覧(単独円卓モード・読み取り専用)
2
-
3
- setup の聞き取りで確定した議題表である。**読み取り専用**——この表は状態を持たない。誰が何を持っているか・何が終わったかは room の宣言だけが正(憲章1)。ここへ担当や進捗を書き込んでも進行は動かない。
4
-
5
- 依存関係の機械保証は無い。順序や排他が要る議題に会ったら、規則を探すより先に room で喋って決める(憲章10)。
6
-
7
- ## 議題
8
-
1
+ # タスク一覧(単独円卓モード・読み取り専用)
2
+
3
+ setup の聞き取りで確定した議題表である。**読み取り専用**——この表は状態を持たない。誰が何を持っているか・何が終わったかは room の宣言だけが正(憲章1)。ここへ担当や進捗を書き込んでも進行は動かない。
4
+
5
+ 依存関係の機械保証は無い。順序や排他が要る議題に会ったら、規則を探すより先に room で喋って決める(憲章10)。
6
+
7
+ ## 議題
8
+