Repository navigation
feat(core): トークン節約を系統別の環境変数で入り切りできるようにする - #5479
Merged
Merged
Conversation
応答の質の劣化が節約によるものか切り分けるため、節約を系統ごとに環境変数で入り切りできるようにする。 - ALTEROID_TOKEN_SAVING_FOLD_FIXED_TEXT(既定 切り): 固定文の畳み。DigestSessionDelta の disabled と、束の中の畳み、状況の説明の畳みを止める - ALTEROID_TOKEN_SAVING_COMPACTION(既定 切り): 自動の要約の窓、要約後の記憶の差分再表示、要約後の軽い再表示 - ALTEROID_TOKEN_SAVING_EXCERPT(既定 入り): 報告本文の 8,000 字の切り、配送の抜粋、止めた報告の一覧の枠、ダイジェストの件数の絞り 既存の畳みの試験は harness 経由で明示的に有効にして、アサーションは弱めない。
- 畳み(FOLD_FIXED_TEXT)を切ったとき、全ての畳みの出口(manager_list・situation・tick・確認の参照・台帳・報告の封筒・inbox 滞留・束の中の畳み)が全文になることを検証する - compaction を切ったとき、窓の設定・記憶の全文の載せ直しが節約の前の形になることを検証する - 抜粋を切ったとき、報告本文の上限・報告の全文配信・退避の一覧の予算・履歴の節の件数が節約の前の形になることを検証する - スイッチの綴りの解決、DigestSessionDelta の disabled の単体テスト - 既定値を APP_ENV_VAR_DEFAULTS と compose.yaml へ載せる
takecchi
marked this pull request as draft
October 28, 2026 23:25
Owner
Author
|
レビュー NG(head 097643e)。
|
takecchi
marked this pull request as ready for review
October 28, 2026 23:26
- FOLD_FIXED_TEXT が無効(既定)でも、COMPACTION=1 なら要約直後の軽い全文(isLean と renderDigest の lean の分岐)が効く。畳みが無効の間は、軽い全文の省略だけを掛け、前回との差分や参照は出さない - 読めない値の痕跡は、同じ名前・同じ値なら1プロセスで1回だけ残す(セッションを組むたびに autoCompactWindowSettings から繰り返し出ない) - 試験: FOLD=0 かつ COMPACTION=1 で軽い全文になる、COMPACTION=0 なら出ない、DigestSessionDelta 単体、痕跡が1回だけ - docs/architecture.md の表を合わせる
This was referenced Oct 29, 2026
takecchi
added a commit
that referenced
this pull request
Oct 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
トークン節約の改修が応答の質を下げていないかを切り分けるため、節約を系統別の環境変数で入り切りできるようにする(オーナーの依頼)。名前・既定・効く所は
docs/architecture.mdの「トークン節約の入り切り」に書いた。値はon/1/true(有効)、off/0/false(無効)。未設定・空は既定。読めない綴りは既定へ倒して stderr に1行残す(同じ名前・同じ値の痕跡は1プロセスで1回だけ。起動は落とさない)。Cloneは構築時にenv ?? process.envから1回だけ読む。ALTEROID_TOKEN_SAVING_FOLD_FIXED_TEXTALTEROID_TOKEN_SAVING_COMPACTIONALTEROID_TOKEN_SAVING_EXCERPT既定が「無効」の2系統は、この PR をマージするとデーモンの挙動が変わる(畳み・compaction の節約が止まる)。切り分けのためにオーナーが既定を無効と指定した。節約を戻すには
ALTEROID_TOKEN_SAVING_FOLD_FIXED_TEXT=on/ALTEROID_TOKEN_SAVING_COMPACTION=on。CLAUDE_CODE_AUTO_COMPACT_WINDOWが空でなければ、compaction 系統が有効のときも従来どおりそちらが勝つ。系統2と系統4は独立している。 要約直後の軽い再掲(
isLeanとrenderDigestの lean の分岐)は系統4の変数だけで決まり、畳み(系統2)が無効でもCOMPACTION=1なら効く(畳みが無効の間は、省く節の参照だけが出て、前回との差分や参照は出ない)。最小の切り口
DigestSessionDeltaにdisabledを足し、全ての出口(fixed/fixedInTurn/foldParagraphs/foldStandingRows/requestSeenAt/reportShown(At)/renderDigestの畳み /importState)を全文に倒す。呼び出し側の約30か所に分岐は足していない。別の控えを持つ situation はexplainedを渡さない1点、DigestSessionDeltaの外にある混合の束の中の畳み(perf: 混合の束で、起点が同じ2件目以降の固定の枠を畳む #5401)はCloneで別に門を掛けた。autoCompactWindowSettingsが{}を返す、recordBakedMemoryを呼ばない、reset('compaction')を'full'にする、の3点。DigestSessionDeltaの lean は disabled から外した。MANAGER_REPORT_BODY_LIMIT(perf(core): クローンへ出す報告の本文を 8,000 字で切る(全文は manager_report / journal_read) #5466)を無限にする、reportDeliveryTextOfの代わりにreportFullTextOf(perf: マネージャーの報告はクローンへ最後の発言だけを配り、全文は台帳と日誌に残す #5269)、退避の一覧の予算を 600→1,500 字へ戻す(perf: 畳んだ報告の末尾注記の抜粋を新しい側の2本までに絞る(1,620 字 → 800 字) #5414)、buildActivityDigestのtrimHistory: false(perf: 窓より前に終端した failed の担当を1行に畳む #5331 の窓より前の終端の畳み、perf: 要約の履歴系の節の上限を下げる #5332 の履歴の節の件数 5→15)。切れないもの
環境変数の袋・compose
APP_ENV_VAR_DEFAULTSへ3つとも播種した(値はコードの既定と同じなので、行を置かなくても挙動は変わらない)。理由:/env-varsに見える、変更に再起動が要ることを画面が名乗る、コンテナの env が先に勝つ。alteroid credential set <名前> <値>で袋に置けば、起動時にデーモンのprocess.envへ写される(Cloneはそこから1回読む)ので、変えたらデーモンの再起動が要る。マネージャー層の窓は runner 側の env を読む。compose.yamlに3つを空の既定で通す(${NAME:-})。PR の全表
基準は origin/main 98bb42c(#5466 まで)。PR 本文と変更ファイルを
gh pr viewで読んで分類した。マージ済み
DigestSessionDelta(報告の包み・起点の会話の説明)explainedfixed('commitment-notice-*')foldParagraphs/fixedfixedfixedfixedreportShown/reportShownAtfixedfixedfixed('human-action-guidance')fixedrenderDigestfoldFixed(fixedInTurn)Cloneの束の中の畳み(別の門)fixed('digest:counts-line-labels')foldFixedfoldFixedfixedInTurn(supersedes)foldFixedfoldFixed。後半は切らないfoldStandingRowskeepStandingRowIfSame(#5448 の補強)reportDeliveryTextOf/reportFullTextOf(マネージャー側の配信の選択だけ切る)buildActivityDigestのtrimHistorybuildActivityDigestのtrimHistoryManagerPoolOptions.tokenSavingExcerpt)MANAGER_REPORT_BODY_LIMIT(#reportBodyLimit())autoCompactWindowSettingsrecordBakedMemoryrecordBakedMemoryreset('compaction')/isLean(畳みとは独立)ALTEROID_INBOX_SETTLE_MS/ALTEROID_REPORT_SETTLE_MS(対象外)未マージ(この PR では扱わない)
claude-provider.tsの窓の部分と衝突しうるので、触ったのはautoCompactWindowSettingsの門の1行だけfoldFixedを通るなら自動で切れる実測(代表1ケース: situation の1ターン目→2ターン目)
createCloneと偽の SDK で、同じ場面の入力の全文の字数を測った(clone-situation-notice.test.ts)。他の出口の有効時の実測は、定期 tick の入力 9803→792 字、確認の入力 2448→789 字、台帳の2行 217→90 字。無効のときはどれも同じ長さのまま。
テスト
CLAUDE_CODE_AUTO_COMPACT_WINDOWが勝つ、要約後に記憶の索引を全文で載せ直す、軽い全文にしない。畳み無効(未設定・0・off)かつCOMPACTION=1で軽い全文になる、COMPACTION=0なら畳みの入り切りによらず出ない(Clone 単位とDigestSessionDelta単体)。clone-test-harness.tsのTOKEN_SAVING_ENABLED_ENV)か明示の env で畳みを有効にして、アサートは弱めていない。DigestSessionDeltaの disabled を無視させると 37 件、situation の門で 4 件、perf: 混合の束で、起点が同じ2件目以降の固定の枠を畳む #5401 の門で 3 件、compaction の3点で 9 件、抜粋の3点で 6 件、lean を disabled に縛り直すと 4 件(畳み無効+COMPACTION=1 の Clone 3 件と単体 1 件)が落ちる。pnpm test(1802 ファイル 25955 テスト通過、3 ファイル 11 テストは skip)を通した。