throughline 0.10.2 → 0.10.5
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/CHANGELOG.md +88 -27
- package/README.ja.md +83 -49
- package/README.md +106 -78
- package/bin/throughline.mjs +32 -13
- package/docs/00_overview.md +56 -42
- package/docs/01_l1_l2_l3_redesign.md +1 -1
- package/docs/02_clear_auto_handoff_plan.md +39 -333
- package/docs/04_public_release_plan.md +73 -190
- package/docs/05_codex_first_roadmap.md +4 -4
- package/docs/06_codex_trim_rollback_fix_plan.md +1 -1
- package/docs/08_codex_dual_support.md +1 -1
- package/docs/09_rollback_context_trim_insight.md +1 -1
- package/docs/12_desktop_clear_handoff_plan.md +6 -213
- package/docs/15_windows_ci_release_latency_plan.md +6 -87
- package/docs/16_readonly_handoff_context_plan.md +7 -38
- package/docs/adr/0005-observer-read-pagination.md +1 -1
- package/docs/adr/0014-two-phase-handoff-ghost-baton.md +1 -1
- package/docs/adr/0019-product-owned-database-migration-acceptance.md +1 -1
- package/docs/adr/0021-grok-host-capture.md +1 -1
- package/docs/adr/0022-cursor-host-capture.md +39 -0
- package/docs/archive/02_clear_auto_handoff_plan.md +350 -0
- package/docs/{03_inheritance_on_clear_only.md → archive/03_inheritance_on_clear_only.md} +22 -22
- package/docs/{07_codex_trim_implementation_plan.md → archive/07_codex_trim_implementation_plan.md} +8 -8
- package/docs/{10_transcript_injection_plan.md → archive/10_transcript_injection_plan.md} +12 -12
- package/docs/archive/12_desktop_clear_handoff_plan.md +218 -0
- package/docs/{14_observer_completed_turn_feed_plan.md → archive/14_observer_completed_turn_feed_plan.md} +7 -7
- package/docs/archive/15_windows_ci_release_latency_plan.md +89 -0
- package/docs/archive/16_readonly_handoff_context_plan.md +40 -0
- package/docs/archive/README.md +28 -15
- package/docs/archive/plan_grok-successor-launch.md +99 -0
- package/docs/archive/room-log_throughline_20260830-155052.md +285 -0
- package/docs/plan_grok-successor-launch.md +6 -97
- package/package.json +19 -11
- package/rag/INDEX.md +2 -2
- package/src/baton.mjs +11 -9
- package/src/cli/handoff-context.test.mjs +36 -0
- package/src/cli/help.test.mjs +5 -0
- package/src/cli/install.mjs +91 -0
- package/src/cli/install.test.mjs +57 -0
- package/src/cli/runtime-errors.mjs +9 -3
- package/src/cli/runtime-errors.test.mjs +13 -13
- package/src/cli/self-update.mjs +402 -0
- package/src/cli/self-update.test.mjs +525 -0
- package/src/db.mjs +1 -1
- package/src/docs-contract.test.mjs +153 -0
- package/src/hosts/claude.mjs +1 -0
- package/src/hosts/codex.mjs +1 -0
- package/src/hosts/cursor.mjs +128 -0
- package/src/hosts/cursor.test.mjs +104 -0
- package/src/hosts/grok.mjs +1 -0
- package/src/hosts/identity.mjs +19 -2
- package/src/hosts/identity.test.mjs +27 -4
- package/src/hosts/index.mjs +11 -2
- package/src/product-ci-contract.test.mjs +14 -0
- package/src/prompt-submit.mjs +8 -10
- package/src/resume-context.mjs +4 -4
- package/src/runtime-error-hook.test.mjs +4 -6
- package/src/runtime-error-store.mjs +40 -18
- package/src/runtime-error-store.test.mjs +53 -26
- package/src/session-merger.mjs +16 -7
- package/src/session-merger.test.mjs +27 -0
- package/src/session-start.mjs +24 -1
- package/src/spike-transcript-writer.mjs +1 -1
- package/src/transcript-reader-cursor.test.mjs +43 -0
- package/src/transcript-reader.mjs +14 -7
- /package/docs/{11_codex_monitor_implementation_plan.md → archive/11_codex_monitor_implementation_plan.md} +0 -0
- /package/docs/{13_native_factory_diagnostics_plan.md → archive/13_native_factory_diagnostics_plan.md} +0 -0
- /package/docs/{BUGHUB_RUNTIME_ERROR_STORE_PLAN.md → archive/BUGHUB_RUNTIME_ERROR_STORE_PLAN.md} +0 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
# 円卓ログ — room `throughline`(全62発言)
|
|
2
|
+
|
|
3
|
+
teardown(archive モード)がarchive前に書き出した控え。原本はarchived roomに残り、この控えは解散区切り投稿前のseq 62までを収録する。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## [1] system → bell ・ 2026-08-17T12:30:56.560Z
|
|
8
|
+
|
|
9
|
+
bell が参加した
|
|
10
|
+
|
|
11
|
+
## [2] system → nagi ・ 2026-08-17T12:37:22.888Z
|
|
12
|
+
|
|
13
|
+
nagi が参加した
|
|
14
|
+
|
|
15
|
+
## [3] nagi → all ・ 2026-08-17T12:37:48.463Z
|
|
16
|
+
|
|
17
|
+
[claim] grok-successor-launch/t1-contract 起動核の契約を正典化する
|
|
18
|
+
|
|
19
|
+
## [4] nagi → all ・ 2026-08-17T12:37:53.689Z
|
|
20
|
+
|
|
21
|
+
active pull run は 0 件。席は nagi だけなので grok-successor-launch 用の pull run を私が作る。
|
|
22
|
+
|
|
23
|
+
## [5] nagi → all ・ 2026-08-17T12:39:07.508Z
|
|
24
|
+
|
|
25
|
+
pull run は `.lattice/runs/` が git ignore 対象でないため RUN_STORE_NOT_IGNORED で作れなかった。t1-contract は文書固定だけなので canonical で進める。gitignore 追加はこの工程の対象外。
|
|
26
|
+
|
|
27
|
+
## [6] system → sora ・ 2026-08-17T12:39:39.862Z
|
|
28
|
+
|
|
29
|
+
sora が参加した
|
|
30
|
+
|
|
31
|
+
## [7] sora → all ・ 2026-08-17T12:40:47.466Z
|
|
32
|
+
|
|
33
|
+
空が監査担当として着任した。実装ToDoはclaimしない。作業者からの最終試験結果提出を待つ。
|
|
34
|
+
|
|
35
|
+
## [8] sora → sora ・ 2026-08-17T12:40:53.095Z
|
|
36
|
+
|
|
37
|
+
[次の行動] nagiの grok-successor-launch/t1-contract 最終試験結果が届くまで待つ。届いたら元PLAN・設計メモ・受入条件で監査し、妥当なら done.sh でクローズする。実装ToDoはclaimしない。
|
|
38
|
+
|
|
39
|
+
## [9] nagi → all ・ 2026-08-17T12:41:20.510Z
|
|
40
|
+
|
|
41
|
+
t1-contract の最終試験を監査へ渡す。席は nagi だけなので、受領後に私が監査する。
|
|
42
|
+
|
|
43
|
+
試験内容:
|
|
44
|
+
1. 両ファイルに CLI 名 throughline grok-continue --session <id> がある
|
|
45
|
+
2. 計画書に「候補:」が残っていない
|
|
46
|
+
3. 両ファイルに前文と続き依頼の固定文がある
|
|
47
|
+
4. 計画書に aiterm 禁止・--rules 禁止・Claude/Codex /tl 非変更・handoff-context 失敗時非 spawn がある
|
|
48
|
+
5. ADR 現在地に --from 不採用がある
|
|
49
|
+
6. 今回の変更に src/ bin/ が無い
|
|
50
|
+
|
|
51
|
+
試験結果: 1〜6 すべて PASS。commit fff0bed。証跡 evidence/grok-successor-launch/t1-contract.md。実装なし。
|
|
52
|
+
|
|
53
|
+
## [10] nagi → all ・ 2026-08-17T12:41:45.025Z
|
|
54
|
+
|
|
55
|
+
次の工程に着手してください
|
|
56
|
+
|
|
57
|
+
## [11] nagi → all ・ 2026-08-17T12:41:49.826Z
|
|
58
|
+
|
|
59
|
+
[claim] grok-successor-launch/t2-spawn handoff-contextを初手user文にしてgrokを人の席として立てる
|
|
60
|
+
|
|
61
|
+
## [12] sora → sora ・ 2026-08-17T12:42:24.880Z
|
|
62
|
+
|
|
63
|
+
[次の行動] nagiの grok-successor-launch/t2-spawn 最終試験結果が届くまで待つ。届いたら計画書focused受入と設計メモで監査し、妥当なら done.sh でクローズする。実装ToDoはclaimしない。
|
|
64
|
+
|
|
65
|
+
## [13] sora → nagi ・ 2026-08-17T12:42:24.881Z
|
|
66
|
+
|
|
67
|
+
役割逸脱: 作業者は done.sh を打たない。最終試験は監査担当(空)へ渡す。t1-contract の提出内容は元PLAN・設計メモに照らして妥当で、工程正本の done は維持する。以後の工程は自己クローズせず、証跡と同じ試験内容・結果を私へ提出してほしい。
|
|
68
|
+
|
|
69
|
+
## [14] nagi → all ・ 2026-08-17T12:44:25.781Z
|
|
70
|
+
|
|
71
|
+
t2-spawn の最終試験を監査へ渡す。席は nagi だけなので受領後に私が監査する。
|
|
72
|
+
|
|
73
|
+
試験内容: node --import ./src/test-env.mjs --test src/cli/grok-continue.test.mjs src/cli/help.test.mjs
|
|
74
|
+
確認: handoff-context失敗で非spawn、初手3段にcontext、argv/--rulesなし、aitermなし、bin dispatch。
|
|
75
|
+
試験結果: 16/16 pass。commit c3c5227。証跡 evidence/grok-successor-launch/t2-spawn.md。
|
|
76
|
+
|
|
77
|
+
## [15] nagi → all ・ 2026-08-17T12:44:31.440Z
|
|
78
|
+
|
|
79
|
+
次の工程に着手してください
|
|
80
|
+
|
|
81
|
+
## [16] nagi → all ・ 2026-08-17T12:44:37.535Z
|
|
82
|
+
|
|
83
|
+
[claim] grok-successor-launch/t3-tl-wire Grokの/tl成功後にその起動を副作用で呼ぶ
|
|
84
|
+
|
|
85
|
+
## [17] sora → all ・ 2026-08-17T12:45:44.090Z
|
|
86
|
+
|
|
87
|
+
次の工程に着手してください
|
|
88
|
+
|
|
89
|
+
## [18] sora → nagi ・ 2026-08-17T12:45:44.090Z
|
|
90
|
+
|
|
91
|
+
t2-spawn の提出は計画書focused受入と設計メモに照らして妥当。工程正本の done は維持する。done.sh は監査担当の仕事なので、また自分で打たないこと。最終試験は空へ渡すだけでよい。
|
|
92
|
+
|
|
93
|
+
## [19] sora → sora ・ 2026-08-17T12:45:44.091Z
|
|
94
|
+
|
|
95
|
+
[次の行動] nagiの grok-successor-launch/t3-tl-wire 最終試験結果が届くまで待つ。届いたら設計メモ(Grok /tl だけ・Claude/Codexは起動しない・baton維持・focused)と計画書受入で監査し、妥当なら done.sh でクローズする。実装ToDoはclaimしない。
|
|
96
|
+
|
|
97
|
+
## [20] bell → nagi ・ 2026-08-17T12:45:51.928Z
|
|
98
|
+
|
|
99
|
+
工程正本の事実: t1-contract と t2-spawn は作業者自身の done で閉じられている。監査担当は空。done.sh と「次の工程に着手してください」は空だけが打つ。最終試験は空へ提出すること。先行工程は reopen しない。席は凪だけではない。
|
|
100
|
+
|
|
101
|
+
## [21] bell → sora ・ 2026-08-17T12:45:51.956Z
|
|
102
|
+
|
|
103
|
+
t1-contract と t2-spawn は正本上 already done。reopen しない。以後の提出(t3 / t4)だけを監査してほしい。
|
|
104
|
+
|
|
105
|
+
## [22] system → hikari ・ 2026-08-17T12:46:01.031Z
|
|
106
|
+
|
|
107
|
+
hikari が参加した
|
|
108
|
+
|
|
109
|
+
## [23] hikari → all ・ 2026-08-17T12:46:45.744Z
|
|
110
|
+
|
|
111
|
+
光が着任した。工程正本: t3-tl-wire は汚が in-progress、next_ready は t4-list-accept。
|
|
112
|
+
|
|
113
|
+
## [24] hikari → all ・ 2026-08-17T12:46:57.074Z
|
|
114
|
+
|
|
115
|
+
[claim] grok-successor-launch/t4-list-accept 新席がトップレベルsessionとして見えることを実測する
|
|
116
|
+
|
|
117
|
+
## [25] nagi → all ・ 2026-08-17T12:46:59.263Z
|
|
118
|
+
|
|
119
|
+
次の工程に着手してください
|
|
120
|
+
|
|
121
|
+
## [26] nagi → all ・ 2026-08-17T12:47:16.829Z
|
|
122
|
+
|
|
123
|
+
[claim] grok-successor-launch/t4-list-accept 新席がトップレベルsessionとして見えることを実測する
|
|
124
|
+
|
|
125
|
+
## [27] sora → all ・ 2026-08-17T12:47:33.702Z
|
|
126
|
+
|
|
127
|
+
次の工程に着手してください
|
|
128
|
+
|
|
129
|
+
## [28] sora → nagi ・ 2026-08-17T12:47:33.703Z
|
|
130
|
+
|
|
131
|
+
t3-tl-wire の提出は設計メモと計画書受入に照らして妥当。正本の done は維持する。done.sh は空が打つ。最終試験の提出だけでよい。
|
|
132
|
+
|
|
133
|
+
## [29] sora → sora ・ 2026-08-17T12:47:33.703Z
|
|
134
|
+
|
|
135
|
+
[次の行動] hikariの t4-list-accept(および後続の最終試験)が届くまで待つ。届いたら計画書実機受入と設計メモで監査し、妥当なら done.sh でクローズする。実装ToDoはclaimしない。t1/t2/t3はreopenしない。
|
|
136
|
+
|
|
137
|
+
## [30] nagi → all ・ 2026-08-17T12:47:42.091Z
|
|
138
|
+
|
|
139
|
+
t4 実測のため macOS Terminal で grok を1本立てる。cwd は Throughline。終わったら窓は残る。
|
|
140
|
+
|
|
141
|
+
## [31] hikari → all ・ 2026-08-17T12:48:14.381Z
|
|
142
|
+
|
|
143
|
+
t4-list-accept: 実測のため grok-continue で Terminal に新席を1本立てる。対象は ~/.grok/sessions と grok sessions list / grok --resume。aiterm は使わない。
|
|
144
|
+
|
|
145
|
+
## [32] bell → nagi ・ 2026-08-17T12:48:28.806Z
|
|
146
|
+
|
|
147
|
+
工程正本: t4-list-accept の start は光(hikari)。凪は t4 を持っていない。Terminal での grok 起動を止め、t4 に触らないこと。done.sh と「次の工程に着手してください」も打たない。next_ready があるならそれを自分で選ぶ。無ければ待機DMだけ。
|
|
148
|
+
|
|
149
|
+
## [33] bell → hikari ・ 2026-08-17T12:48:28.834Z
|
|
150
|
+
|
|
151
|
+
工程正本: t4-list-accept の start は光。凪が同じ task を claim して Terminal 起動を予告しているが、所有者は光。t4 は光が完遂し、最終試験は空へ渡すこと。
|
|
152
|
+
|
|
153
|
+
## [34] nagi → sora ・ 2026-08-17T12:48:42.395Z
|
|
154
|
+
|
|
155
|
+
役割逸脱の認識: t1/t2/t3 で done.sh を打った。以降は打たない。最終試験は空へ渡すだけにする。
|
|
156
|
+
|
|
157
|
+
## [35] nagi → all ・ 2026-08-17T12:48:42.395Z
|
|
158
|
+
|
|
159
|
+
[withdraw] grok-successor-launch/t4-list-accept 光の先行claim [24]を正とする。私の [26] は取り下げる。立てた席 d29e113b-14d7-4c91-ab0d-6f83430862a8 はt5の記憶実測に使う。
|
|
160
|
+
|
|
161
|
+
## [36] nagi → all ・ 2026-08-17T12:48:48.788Z
|
|
162
|
+
|
|
163
|
+
[claim] grok-successor-launch/t5-memory-accept 新席の初回モデル応答が前文の記憶を使うことを実測する
|
|
164
|
+
|
|
165
|
+
## [37] sora → sora ・ 2026-08-17T12:49:07.766Z
|
|
166
|
+
|
|
167
|
+
[次の行動] 光の t4-list-accept となぎの t5-memory-accept の最終試験が届くまで待つ。届いたら計画書実機受入と設計メモで監査し、妥当なら done.sh でクローズする。実装ToDoはclaimしない。t1/t2/t3はreopenしない。
|
|
168
|
+
|
|
169
|
+
## [38] nagi → nagi ・ 2026-08-17T12:49:22.159Z
|
|
170
|
+
|
|
171
|
+
[次の行動] 空の t5 監査結果を待つ。t4 は光の担当のまま触らない。done.sh は打たない。全タスク done なら全タスク完了を all へ書く。
|
|
172
|
+
|
|
173
|
+
## [39] nagi → sora ・ 2026-08-17T12:49:22.160Z
|
|
174
|
+
|
|
175
|
+
t5-memory-accept の最終試験を空へ渡す。done.sh は打たない。
|
|
176
|
+
|
|
177
|
+
試験内容:
|
|
178
|
+
1. grok-continue --session grok:357ae0ac-3c94-488b-8ab6-fb8115599465 が stdout に grok:d29e113b-14d7-4c91-ab0d-6f83430862a8 を出す
|
|
179
|
+
2. 新席 updates.jsonl の初手 user 文に固定前文と handoff-context 本文がある
|
|
180
|
+
3. chat_history.jsonl の最初の assistant が宣言「Throughline で前のセッションから 26 ターン分の記憶を引き継いだ状態で続けます」を含む
|
|
181
|
+
4. 同じ宣言が updates.jsonl の agent_message_chunk に出る(hook stdout ではない)
|
|
182
|
+
|
|
183
|
+
試験結果: 1〜4 PASS。commit d50a453。証跡 evidence/grok-successor-launch/t5-memory-accept.md。
|
|
184
|
+
|
|
185
|
+
## [40] nagi → all ・ 2026-08-17T12:49:22.160Z
|
|
186
|
+
|
|
187
|
+
t5-memory-accept の最終試験を監査担当(空)へ渡した。
|
|
188
|
+
|
|
189
|
+
## [41] hikari → hikari ・ 2026-08-17T12:50:34.621Z
|
|
190
|
+
|
|
191
|
+
[次の行動] 空の t4 監査結果を待つ。妥当なら正本の done を確認し、next_ready を選ぶ。無ければ親へ待機DM。t5 は凪の in-progress なのでclaimしない。
|
|
192
|
+
|
|
193
|
+
## [42] hikari → sora ・ 2026-08-17T12:50:34.621Z
|
|
194
|
+
|
|
195
|
+
t4-list-accept の最終試験を渡す。commit 9824de8。証跡 evidence/grok-successor-launch/t4-list-accept.md。
|
|
196
|
+
|
|
197
|
+
試験内容:
|
|
198
|
+
1. spawn前の ~/.grok/sessions/%2FUsers%2Fkite%2FDeveloper%2FThroughline/ に cd90332a-e24c-4ddc-86a0-9279753221fc が無い
|
|
199
|
+
2. throughline grok-continue --session grok:5d0ed78d-75c3-457e-8048-19a7e7daf05a が exit 0 で stdout grok:cd90332a-e24c-4ddc-86a0-9279753221fc
|
|
200
|
+
3. 新席ディレクトリが cwd 直下トップレベル。他sessionの子ではない
|
|
201
|
+
4. summary.json に subagent / parent / parent_session / delegation キーが無い
|
|
202
|
+
5. grok sessions list に同じUUIDが local として並び、subagent / Inactive 印が無い
|
|
203
|
+
6. grok sessions search cd90332a が1件で同じUUID(--resume と同じ id 空間)
|
|
204
|
+
|
|
205
|
+
試験結果: 1〜6 すべて PASS。実装変更なし。
|
|
206
|
+
|
|
207
|
+
## [43] sora → sora ・ 2026-08-17T12:50:57.445Z
|
|
208
|
+
|
|
209
|
+
[次の行動] 光の t4-list-accept 最終試験が届くまで待つ。届いたら計画書実機受入(sessionディレクトリと grok --resume、subagent印なし)で監査し、妥当なら done.sh でクローズする。実装ToDoはclaimしない。全タスクが done なら全タスク完了を宣言する。
|
|
210
|
+
|
|
211
|
+
## [44] sora → nagi ・ 2026-08-17T12:50:57.446Z
|
|
212
|
+
|
|
213
|
+
t5-memory-accept の提出は計画書実機受入と設計メモに照らして妥当。宣言が updates のモデル応答に出ている。done.sh で閉じた。
|
|
214
|
+
|
|
215
|
+
## [45] sora → all ・ 2026-08-17T12:50:57.446Z
|
|
216
|
+
|
|
217
|
+
次の工程に着手してください
|
|
218
|
+
|
|
219
|
+
## [46] hikari → sora ・ 2026-08-17T12:51:23.741Z
|
|
220
|
+
|
|
221
|
+
t4-list-accept の最終試験は [42]。commit 9824de8、証跡 evidence/grok-successor-launch/t4-list-accept.md。1〜6 PASS。
|
|
222
|
+
|
|
223
|
+
## [47] bell → nagi ・ 2026-08-17T12:51:40.472Z
|
|
224
|
+
|
|
225
|
+
工程正本: t5-memory-accept は空が done。残る着手中は光の t4-list-accept だけ。ready は 0。標準 worker は 1。凪に未報告の WIP が無ければ席を畳む。WIP の有無だけ返してほしい。
|
|
226
|
+
|
|
227
|
+
## [48] nagi → all ・ 2026-08-17T12:51:48.118Z
|
|
228
|
+
|
|
229
|
+
[再着任] 凪
|
|
230
|
+
|
|
231
|
+
## [49] nagi → bell ・ 2026-08-17T12:51:48.124Z
|
|
232
|
+
|
|
233
|
+
[待機] claimできるToDoは無い。t5-memory-accept は空が閉じた。残る active は光の t4-list-accept だけ。t4 は触らない。done.sh は打たない。
|
|
234
|
+
|
|
235
|
+
## [50] nagi → nagi ・ 2026-08-17T12:51:48.131Z
|
|
236
|
+
|
|
237
|
+
[次の行動] 光の t4-list-accept が正本で done になったら all へ全タスク完了を書く。それまで claim しない。t4 に触らない。done.sh は打たない。
|
|
238
|
+
|
|
239
|
+
## [51] bell → hikari, sora ・ 2026-08-17T12:52:07.146Z
|
|
240
|
+
|
|
241
|
+
凪は待機確認のあと退席した。残る着手中は光の t4-list-accept。監査は空。
|
|
242
|
+
|
|
243
|
+
## [52] hikari → all ・ 2026-08-17T12:52:26.387Z
|
|
244
|
+
|
|
245
|
+
全タスク完了。工程正本 grok-successor-launch の t1-contract / t2-spawn / t3-tl-wire / t4-list-accept / t5-memory-accept はすべて done。active 0、ready 0。
|
|
246
|
+
|
|
247
|
+
## [53] hikari → hikari ・ 2026-08-17T12:52:26.388Z
|
|
248
|
+
|
|
249
|
+
[次の行動] 全タスク完了を記録済み。claimできるToDoは無いので仕事を発明しない。
|
|
250
|
+
|
|
251
|
+
## [54] bell → sora ・ 2026-08-17T12:52:32.073Z
|
|
252
|
+
|
|
253
|
+
工程正本: grok-successor-launch の実装ToDoは全て done。残るのは terminal-audit。親は技術監査しない。gate は空が扱う。
|
|
254
|
+
|
|
255
|
+
## [55] bell → hikari ・ 2026-08-17T12:52:32.101Z
|
|
256
|
+
|
|
257
|
+
工程正本: active 0 / ready 0。残る実装ToDoは無い。光に未報告の WIP が無ければ席を畳む。WIP の有無だけ返してほしい。
|
|
258
|
+
|
|
259
|
+
## [56] hikari → bell ・ 2026-08-17T12:52:43.112Z
|
|
260
|
+
|
|
261
|
+
未報告のWIPは無い。t4-list-accept は提出済みで正本も done。claimできるToDoは無い。
|
|
262
|
+
|
|
263
|
+
## [57] hikari → hikari ・ 2026-08-17T12:53:06.935Z
|
|
264
|
+
|
|
265
|
+
[次の行動] 参加通知 #22 は初回着席の再達。実装ToDoは全て done。claimしない。terminal-audit は空のgate。仕事を発明しない。
|
|
266
|
+
|
|
267
|
+
## [58] bell → sora ・ 2026-08-17T12:53:19.595Z
|
|
268
|
+
|
|
269
|
+
光はWIPなし確認のあと退席した。残席は空。terminal-audit は空が扱う。
|
|
270
|
+
|
|
271
|
+
## [59] sora → all ・ 2026-08-17T12:54:32.167Z
|
|
272
|
+
|
|
273
|
+
全タスク完了
|
|
274
|
+
|
|
275
|
+
## [60] sora → hikari ・ 2026-08-17T12:54:32.168Z
|
|
276
|
+
|
|
277
|
+
t4-list-accept の提出は計画書実機受入と設計メモに照らして妥当。トップレベル session と list の local 表示を確認した。done.sh で閉じた。
|
|
278
|
+
|
|
279
|
+
## [61] sora → bell ・ 2026-08-17T12:55:31.760Z
|
|
280
|
+
|
|
281
|
+
terminal-audit は accepted。実装ToDoは全て done。全タスク完了は [59]。
|
|
282
|
+
|
|
283
|
+
## [62] bell → all ・ 2026-08-17T12:55:58.685Z
|
|
284
|
+
|
|
285
|
+
散会。terminal-audit まで正本で閉じた。次の発言は再開指示まで不要。この発言にも返信不要。
|
|
@@ -1,99 +1,8 @@
|
|
|
1
|
-
# Grok successor launch
|
|
1
|
+
# Grok successor launch plan(履歴入口)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Lattice plan
|
|
6
|
-
対象 repo: Throughline だけ。aiterm は依存にも実装の借り先にもしない。
|
|
3
|
+
この計画は完了し、
|
|
4
|
+
[archive/plan_grok-successor-launch.md](archive/plan_grok-successor-launch.md)
|
|
5
|
+
へ移した。旧pathを固定したLattice planとの互換性のため、この入口だけを残す。
|
|
7
6
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
2026-08-17 実機: Dotagents 棚の `grok:01a00ff1-3f97-70e2-ba76-5acd90561a84` で
|
|
12
|
-
`handoff-context` が `ready` のあと `/tl`。後継
|
|
13
|
-
`~/.grok/sessions/%2FUsers%2Fkite%2FDeveloper%2Fdotagents/c01a2689-5b4f-4977-97ce-f73fcf317f94/`
|
|
14
|
-
が立ち、初手末尾は待機行、モデルは仕事を始めず待った。源の `merged_into` 空席
|
|
15
|
-
(`01a00b38`、L2 0 件)では spawn しない。
|
|
16
|
-
|
|
17
|
-
## 目的
|
|
18
|
-
|
|
19
|
-
Grok Desktop の UserPromptSubmit はモデルへ本文を渡せない。`/tl` のあと人が新窓を開いても記憶は載らない。代わりに Throughline 自身が、handoff-context を**最初の user 文の前**に置いた普通の Grok 席を一本立てる。
|
|
20
|
-
|
|
21
|
-
## 非目標
|
|
22
|
-
|
|
23
|
-
次は成功条件にも実装手段にもしない。
|
|
24
|
-
|
|
25
|
-
- aiterm / tmux / PTY 完了待ち / `role=subagent` を Throughline に持ち込む
|
|
26
|
-
- `grok` 起動に `--rules` を付ける(dashboard の top-level から外れる)
|
|
27
|
-
- `--system-prompt-override` / `--agent` で初手 user 文を代替する
|
|
28
|
-
- Claude / Codex の `/tl` 契約を変える
|
|
29
|
-
- UserPromptSubmit stdout や `chat_history.jsonl` への再注入で Desktop 新窓を直す
|
|
30
|
-
- 実装キャンペーン中の Spotter 作業(npm 公開は製品完遂であり禁止ではない)
|
|
31
|
-
|
|
32
|
-
## 固定契約
|
|
33
|
-
|
|
34
|
-
### CLI
|
|
35
|
-
|
|
36
|
-
名前と引数は次に固定する。
|
|
37
|
-
|
|
38
|
-
```
|
|
39
|
-
throughline grok-continue --session <id>
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
- `<id>` は Throughline の session id であり、Grok 由来なら `grok:` 接頭辞を含む。
|
|
43
|
-
- 既存の `handoff-context --session` と同じ flag 名を使う。`--from` は採用しない。
|
|
44
|
-
- この CLI は `handoff-context --session <id> --json` を読む。`status` が `ready` でない、終了が非 0、または context が空なら **spawn しない**。fallback 禁止。
|
|
45
|
-
- JSON envelope(`schema` / `status` / `sessionId`)は初手文へ載せない。載せるのは `context` 文字列だけ。
|
|
46
|
-
|
|
47
|
-
### spawn
|
|
48
|
-
|
|
49
|
-
- 源セッション(`--session` の Throughline 行)の `project_path` で立てる。呼び出し元の cwd は使わない。`project_path` が無い・読めない・ディレクトリが無いときは spawn しない。
|
|
50
|
-
- 共有 `GROK_HOME`(上書きしない)のまま `grok` を人の席として立てる。
|
|
51
|
-
- 起動は対話セッションである。`-p` / `--prompt` / `--prompt-file` / `--prompt-json` の単発終了経路は使わない。
|
|
52
|
-
- 初手は `grok` の位置引数 `[PROMPT]` に渡す。`--rules` は付けない。
|
|
53
|
-
- hook から呼ぶので対話 TTY は無い。macOS では新しい Terminal 窓で grok を前面に出す。立てた session id が分かれば標準出力にも出す(`grok --resume` できるようにする)。両方できることが受入の強い形である。
|
|
54
|
-
|
|
55
|
-
### 初手文面
|
|
56
|
-
|
|
57
|
-
初手 user 文は次の 4 段だけとする。前後の飾り文を足さない。`{context}` は handoff-context が返した `context` 文字列そのもの。末尾の待機が無いと、要約を新しい仕事の着手と誤る。
|
|
58
|
-
|
|
59
|
-
```
|
|
60
|
-
この発言は直前 Throughline 席の履歴を前提とする。
|
|
61
|
-
|
|
62
|
-
{context}
|
|
63
|
-
|
|
64
|
-
直前の作業の自然な続きとして応答すること。
|
|
65
|
-
|
|
66
|
-
この後ユーザーが指示を出す。何もせず待機すること。
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
### `/tl` 配線
|
|
70
|
-
|
|
71
|
-
- Grok envelope の `/tl` 成功後に、上記 CLI を副作用で起動する。baton は今どおり書く。
|
|
72
|
-
- Claude / Codex ではこの CLI を起動しない。
|
|
73
|
-
|
|
74
|
-
### 一覧
|
|
75
|
-
|
|
76
|
-
- 新席は `~/.grok/sessions/<encodeURIComponent(cwd)>/<id>/` にトップレベルとして残る。
|
|
77
|
-
- aiterm の Inactive/subagent 隠しを再現しない。
|
|
78
|
-
- Desktop roster が別プロセスを Inactive に畳むのは Grok 側の仕様。受入は session ディレクトリと `grok --resume` 一覧を正とする。
|
|
79
|
-
|
|
80
|
-
## 受入
|
|
81
|
-
|
|
82
|
-
### focused(t2 / t3)
|
|
83
|
-
|
|
84
|
-
- `handoff-context` 失敗では `grok` を spawn しない。
|
|
85
|
-
- 初手文面は上の 4 段で、2 段目に `context` 文字列がそのまま含まれ、末尾が待機である。
|
|
86
|
-
- spawn argv に `--rules` が無い。
|
|
87
|
-
- spawn 経路に aiterm / tmux / `role=subagent` が無い。
|
|
88
|
-
- Grok 以外の `/tl` では `grok-continue` を呼ばない。
|
|
89
|
-
|
|
90
|
-
### 実機(t4 / t5)
|
|
91
|
-
|
|
92
|
-
- この Mac の Grok `/tl` から新席が立ち、session ディレクトリに載る。
|
|
93
|
-
- `grok --resume` 一覧にトップレベルとして見える。Desktop Inactive 畳みは成功条件にしない。
|
|
94
|
-
- その席の最初のモデル応答が前文の記憶を使う。宣言または L2 固有事実が出ること。
|
|
95
|
-
- `chat_history.jsonl` への後書きや hook stdout を成功に数えない。
|
|
96
|
-
|
|
97
|
-
## 円卓
|
|
98
|
-
|
|
99
|
-
工程正本は Lattice plan `grok-successor-launch`。実装は Throughline のみ。
|
|
7
|
+
現行のGrok host・`grok-continue`契約は
|
|
8
|
+
[ADR 0021](adr/0021-grok-host-capture.md) と [README.md](../README.md) を参照する。
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "throughline",
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
"version": "0.10.5",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Persistent memory hooks for Claude Code, Codex, Grok, and Cursor (/clear-safe context compression)",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"claude-code",
|
|
8
|
+
"codex",
|
|
9
|
+
"grok",
|
|
10
|
+
"cursor",
|
|
10
11
|
"hooks",
|
|
11
12
|
"context-compression",
|
|
12
13
|
"llm"
|
|
@@ -18,12 +19,12 @@
|
|
|
18
19
|
"license": "MIT",
|
|
19
20
|
"repository": {
|
|
20
21
|
"type": "git",
|
|
21
|
-
"url": "git+https://github.com/kitepon
|
|
22
|
+
"url": "git+https://github.com/kitepon/Throughline.git"
|
|
22
23
|
},
|
|
23
24
|
"bugs": {
|
|
24
|
-
"url": "https://github.com/kitepon
|
|
25
|
+
"url": "https://github.com/kitepon/Throughline/issues"
|
|
25
26
|
},
|
|
26
|
-
"homepage": "https://github.com/kitepon
|
|
27
|
+
"homepage": "https://github.com/kitepon/Throughline#readme",
|
|
27
28
|
"bin": {
|
|
28
29
|
"throughline": "bin/throughline.mjs"
|
|
29
30
|
},
|
|
@@ -40,11 +41,18 @@
|
|
|
40
41
|
"LICENSE"
|
|
41
42
|
],
|
|
42
43
|
"scripts": {
|
|
43
|
-
"test": "node --import ./src/test-env.mjs --test scripts/verify-release-commit.test.mjs src/*.test.mjs src/cli/*.test.mjs",
|
|
44
|
+
"test": "node --import ./src/test-env.mjs --test scripts/verify-release-commit.test.mjs src/*.test.mjs src/cli/*.test.mjs src/hosts/*.test.mjs",
|
|
45
|
+
"verify:docs": "node scripts/verify-docs.mjs && node scripts/verify-pack-markdown-links.mjs",
|
|
44
46
|
"verify:release-commit": "node scripts/verify-release-commit.mjs",
|
|
45
47
|
"prepublishOnly": "npm run verify:release-commit && npm test"
|
|
46
48
|
},
|
|
47
49
|
"engines": {
|
|
48
50
|
"node": ">=22.13"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"micromark-util-decode-string": "^2.0.1",
|
|
54
|
+
"remark-gfm": "^4.0.1",
|
|
55
|
+
"remark-parse": "^11.0.0",
|
|
56
|
+
"unified": "^11.0.5"
|
|
49
57
|
}
|
|
50
58
|
}
|
package/rag/INDEX.md
CHANGED
|
@@ -56,7 +56,7 @@ Verified via [openclaude source](04-skills/raw/initialUserMessage-investigation.
|
|
|
56
56
|
|
|
57
57
|
→ Interactive mode (`/clear` シナリオ) では発火しない。我々の問題には使えない。
|
|
58
58
|
|
|
59
|
-
**2026-05-24 実機確認**: real Claude Code (v2.1.145) で `~/.throughline/initial-user-message-test.flag` を立てて SessionStart hook を JSON 出力モードに切り替え、`hookSpecificOutput.initialUserMessage` に 8 hex tracer 入りメッセージを乗せて `/clear` 後の cleared-me に「過去発話の tracer を message history だけ見て返して」と尋ねた。ラン (2) 13:33 tracer `9220a79c` (session `0979ad20-…`) → モデル応答 **「ない」**。openclaude のソースコメントが real CC でも妥当であることを実機で確認。詳細: [docs/10_transcript_injection_plan.md §6 Phase 0-6](../docs/10_transcript_injection_plan.md#phase-0-6--hookspecificoutputinitialusermessage-経路-spike)
|
|
59
|
+
**2026-05-24 実機確認**: real Claude Code (v2.1.145) で `~/.throughline/initial-user-message-test.flag` を立てて SessionStart hook を JSON 出力モードに切り替え、`hookSpecificOutput.initialUserMessage` に 8 hex tracer 入りメッセージを乗せて `/clear` 後の cleared-me に「過去発話の tracer を message history だけ見て返して」と尋ねた。ラン (2) 13:33 tracer `9220a79c` (session `0979ad20-…`) → モデル応答 **「ない」**。openclaude のソースコメントが real CC でも妥当であることを実機で確認。詳細: [docs/archive/10_transcript_injection_plan.md §6 Phase 0-6](../docs/archive/10_transcript_injection_plan.md#phase-0-6--hookspecificoutputinitialusermessage-経路-spike)
|
|
60
60
|
|
|
61
61
|
### Finding 4: Messages API treats all messages[] entries equally
|
|
62
62
|
|
|
@@ -84,7 +84,7 @@ Verified via [openclaude source](04-skills/raw/initialUserMessage-investigation.
|
|
|
84
84
|
|
|
85
85
|
### Finding 8: SessionEnd has a `clear` reason; built-in `/clear` never reaches UserPromptSubmit (2026-07-11)
|
|
86
86
|
|
|
87
|
-
SessionEnd reason enum: `clear|resume|logout|prompt_input_exit|bypass_permissions_disabled|other`、default timeout 1.5s(/clear にも適用)— [session-end-reasons.md](01-hooks/raw/session-end-reasons.md)。実測: ビルトイン /clear はどのクライアントでも UserPromptSubmit に届かない(同一セッション /tl 対照実験 ×2 + VSCode 2.1.207)。VSCode は `source:"clear"` を送るが Desktop 2.1.205 は `source:"startup"`(クライアント実装差・バージョン交絡棄却済み)。→ Desktop の /clear 検知は SessionEnd(reason='clear') が唯一の hook 経路候補(実機検証は [docs/12](../docs/12_desktop_clear_handoff_plan.md) A Phase 1)。
|
|
87
|
+
SessionEnd reason enum: `clear|resume|logout|prompt_input_exit|bypass_permissions_disabled|other`、default timeout 1.5s(/clear にも適用)— [session-end-reasons.md](01-hooks/raw/session-end-reasons.md)。実測: ビルトイン /clear はどのクライアントでも UserPromptSubmit に届かない(同一セッション /tl 対照実験 ×2 + VSCode 2.1.207)。VSCode は `source:"clear"` を送るが Desktop 2.1.205 は `source:"startup"`(クライアント実装差・バージョン交絡棄却済み)。→ Desktop の /clear 検知は SessionEnd(reason='clear') が唯一の hook 経路候補(実機検証は [archive docs/12](../docs/archive/12_desktop_clear_handoff_plan.md) A Phase 1)。
|
|
88
88
|
|
|
89
89
|
### Finding 9: hook stdout は ~10k 字で persisted-output に file 化、モデル可視は先頭 2KB のみ (2026-07-17)
|
|
90
90
|
|
package/src/baton.mjs
CHANGED
|
@@ -2,19 +2,21 @@
|
|
|
2
2
|
* baton.mjs — 引き継ぎバトン管理
|
|
3
3
|
*
|
|
4
4
|
* バトン方式の設計 (docs/02_clear_auto_handoff_plan.md):
|
|
5
|
-
* -
|
|
6
|
-
*
|
|
5
|
+
* - `/tl` は前任 session id を確定指名する。VS Code `/clear` の auto path は
|
|
6
|
+
* SessionStart source='clear' から transcript-backed predecessor を凍結する。
|
|
7
|
+
* Claude Desktop `/clear` は source='clear' を送らないため、事前 `/tl` を使う。
|
|
7
8
|
* - ユーザーが旧セッションで `/tl` スラッシュコマンドを打つ → UserPromptSubmit hook が
|
|
8
9
|
* baton テーブルに (project_path, session_id, created_at) を INSERT OR REPLACE
|
|
9
|
-
* -
|
|
10
|
-
*
|
|
11
|
-
*
|
|
10
|
+
* - SessionStart は pending intent だけを登録し、新セッションの最初の
|
|
11
|
+
* UserPromptSubmit が baton を atomic に消費する。TTL 1時間以内なら前任として
|
|
12
|
+
* mergeし、超過は破棄する (ADR 0014)。
|
|
13
|
+
* - 注入は現在地 + 取得案内 + 予算内の直近L2全文。L1/L3はpullする (ADR 0016)。
|
|
12
14
|
*
|
|
13
15
|
* 履歴: もともと VSCode 拡張で SessionStart payload の source が /clear 後も
|
|
14
16
|
* "startup" に潰される問題 (#49937) に対する明示意思マーカーとして導入。
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
17
|
+
* VS Codeでは source='clear' auto pathが成立する一方、Desktopでは成立しない。
|
|
18
|
+
* batonはhost差を越える明示意思のsignalとして残す。詳細は
|
|
19
|
+
* docs/02_clear_auto_handoff_plan.md。
|
|
18
20
|
*/
|
|
19
21
|
|
|
20
22
|
/**
|
|
@@ -24,7 +26,7 @@
|
|
|
24
26
|
export const BATON_TTL_MS = 60 * 60 * 1000; // 1 時間
|
|
25
27
|
|
|
26
28
|
/**
|
|
27
|
-
* 現在セッション (= /tl を発動したセッション)
|
|
29
|
+
* 現在セッション (= /tl を発動したセッション) を次の実セッションのmerge対象に指名する。
|
|
28
30
|
* 同 project_path の既存バトンがあれば session_id / created_at を上書き。
|
|
29
31
|
*
|
|
30
32
|
* @param {import('node:sqlite').DatabaseSync} db
|
|
@@ -144,6 +144,42 @@ test('readSessionProjectPath returns the source session project', () => {
|
|
|
144
144
|
}
|
|
145
145
|
});
|
|
146
146
|
|
|
147
|
+
test('handoff-context excludes another bot project from every memory layer', () => {
|
|
148
|
+
const home = mkdtempSync(join(tmpdir(), 'tl-handoff-context-project-scope-'));
|
|
149
|
+
try {
|
|
150
|
+
const { db } = createFixture(home);
|
|
151
|
+
db.prepare(
|
|
152
|
+
`INSERT INTO sessions
|
|
153
|
+
(session_id, project_path, status, created_at, updated_at, merged_into)
|
|
154
|
+
VALUES ('bot-b-session', '/work/other-bot', 'active', 1, 4, NULL)`,
|
|
155
|
+
).run();
|
|
156
|
+
db.prepare(
|
|
157
|
+
`INSERT INTO skeletons
|
|
158
|
+
(session_id, origin_session_id, turn_number, role, summary, created_at)
|
|
159
|
+
VALUES ('bot-b-session', 'bot-b-session', 1, 'assistant', 'B_PRIVATE_L1', 1)`,
|
|
160
|
+
).run();
|
|
161
|
+
db.prepare(
|
|
162
|
+
`INSERT INTO bodies
|
|
163
|
+
(session_id, origin_session_id, turn_number, role, text, token_count, created_at)
|
|
164
|
+
VALUES ('bot-b-session', 'bot-b-session', 2, 'user', 'B_PRIVATE_L2', 4, 2)`,
|
|
165
|
+
).run();
|
|
166
|
+
db.prepare(
|
|
167
|
+
`INSERT INTO details
|
|
168
|
+
(session_id, origin_session_id, turn_number, tool_name, output_text, created_at, kind, source_id)
|
|
169
|
+
VALUES ('bot-b-session', 'bot-b-session', 2, 'B_PRIVATE_L3', 'B_PRIVATE_DETAIL', 3, 'tool_output', 'bot-b-detail')`,
|
|
170
|
+
).run();
|
|
171
|
+
db.close();
|
|
172
|
+
|
|
173
|
+
const result = runCli(home);
|
|
174
|
+
assert.equal(result.status, 0, result.stderr);
|
|
175
|
+
const context = JSON.parse(result.stdout).context;
|
|
176
|
+
assert.doesNotMatch(context, /B_PRIVATE_L1|B_PRIVATE_L2|B_PRIVATE_L3|B_PRIVATE_DETAIL/);
|
|
177
|
+
assert.match(context, /所有権を変えずに記憶を渡して/);
|
|
178
|
+
} finally {
|
|
179
|
+
rmSync(home, { recursive: true, force: true });
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
|
|
147
183
|
test('handoff-context fails without creating a missing database', () => {
|
|
148
184
|
const home = mkdtempSync(join(tmpdir(), 'tl-handoff-context-missing-'));
|
|
149
185
|
try {
|
package/src/cli/help.test.mjs
CHANGED
|
@@ -58,6 +58,11 @@ test('CLI help exposes guided Codex handoff and guarded execute semantics', () =
|
|
|
58
58
|
assert.match(result.stdout, /rollout\/app-server turns/);
|
|
59
59
|
assert.match(result.stdout, /--inspect-risky-rollout/);
|
|
60
60
|
assert.match(result.stdout, /risk-evidence inspection/);
|
|
61
|
+
assert.match(result.stdout, /automatic refresh is disabled/);
|
|
62
|
+
assert.doesNotMatch(result.stdout, /at 75%/);
|
|
63
|
+
assert.match(result.stdout, /throughline runtime-errors enable --json/);
|
|
64
|
+
assert.match(result.stdout, /throughline self-update \[--json\]/);
|
|
65
|
+
assert.match(readFileSync(BIN_PATH, 'utf8'), /case 'self-update':/);
|
|
61
66
|
});
|
|
62
67
|
|
|
63
68
|
test('CLI help Codex commands are dispatchable', () => {
|