Releases: kitepon-rgb/Throughline
v0.5.0 — close transcript injection investigation, lock path C
This release closes out the v0.5 transcript-injection investigation and
locks in path C (resume-context.mjs v2.1 header + 現在地 anchor) as
the plugin-scope completion form for Throughline.
Changed
- Strengthened the Claude
/clearresume context header with two new
short-message handling rules so the cleared-me side stops misreading
follow-up shorts as fresh requests:- 短文/相槌の判定: any user message that is ≤50 chars or built solely
out of acknowledgment / agreement / prompt words (はい / うん / 了解 /
OK / やって / 進めて / 続き / 次) must be treated as a GO sign on the
previous assistant's proposed next move, not a new request, and the
cleared-me must not ask back, re-list options, or pivot to other work. - 古い番号リストの再実行禁止: when the latest user references an
older numbered list (e.g.2 をやれ) but the most recent assistant turn
already executed that item, the cleared-me must respond with a result
confirmation / next move, not by re-executing the already-done item.
The latest assistant utterance outranks any older numbered list
referenced from it.
- 短文/相槌の判定: any user message that is ≤50 chars or built solely
Research (no shipped behavior change)
Two alternative injection routes were spiked end-to-end against real
Claude Code (v2.1.145) and both confirmed dead, locking path C as the
plugin-scope ceiling.
- D route — transcript JSONL append (Phase 0-2 / Phase 0-5): four
real-machine runs acrossSessionStart(chainnullorphan) and
UserPromptSubmit(chainbreachable-from-attachment) timings, with
both synthetic and real Claude model names. All four runs produced
「ない」when the cleared-me was asked to quote the spike tracer. Root
cause: Claude Code decides each new turn'sparentUuidfrom its
in-process memory state and never re-reads the JSONL, so any text a
hook writes totranscript_pathlives on a parallel chain that the
next prompt's parent-walk never reaches. hookSpecificOutput.initialUserMessageroute (Phase 0-6): real
Claude Code interactive run on 2026-05-24 13:33 (tracer9220a79c,
session0979ad20-…) returned 「ない」, empirically confirming the
openclaude source comment thatinitialUserMessageis consumed only
for headless orchestrator sessions, not for the interactive/clear
scenario this project needs.
Both routes are kept in-tree behind marker files
(~/.throughline/spike-inject.flag,
~/.throughline/spike-prompt.flag,
~/.throughline/initial-user-message-test.flag) as research
infrastructure for future re-evaluation; they are no-op when the flags
are absent and have no effect on the shipped path.
Added
docs/THROUGHLINE_TRANSCRIPT_INJECTION_PLAN.md: full Phase 0 plan and
result log for the D /initialUserMessageinvestigation.docs/RAG/: third-party spec knowledge base (Claude Code hooks
reference, Anthropic Messages API, sessions docs, openclaude
initialUserMessagesource extract) used as the grounding for the
no-go calls above.
v0.4.11 - Codex new-thread handoff + Homebrew node path fix
Changed
- Codex automatic current-thread refresh disabled. The Codex
UserPromptSubmit,PostToolUse, andStophooks now capture rollout memory and monitor state, then returncodex_auto_refresh_disabledwithout injecting$throughlineor sending rollback/inject. The lower-level auto-refresh helper is also default-disabled. $throughlineis back to a new-thread handoff flow. Bare$throughlinenow runsthroughline codex-handoff-start --execute, which creates a new Codex app-server thread, injects developer handoff memory, and opens the selected host. Explicitthroughline trim --execute --host codexremains available as a diagnostic current-thread rollback / inject command.
Fixed
- Codex hook Node path now resolves through
PATHon Homebrew macOS.throughline installpreviously hard-codedprocess.execPathinto~/.codex/hooks.json, which on Homebrew points at a Cellar-versioned binary that disappears on the nextbrew upgrade. The new resolver prefers a stablePATHentry (e.g./opt/homebrew/bin/node) thatrealpaths to the same binary, falling back toprocess.execPathonly when nothing inPATHmatches.
Full Changelog: v0.4.10...v0.4.11
v0.4.10 - Fix Codex trim turn-count adjustment
[0.4.10] — 2026-05-09
Fixed
- Codex current-thread trim no longer refuses execution solely because the
rollout active turn count differs from the Codex app-server count. When
thread/readandthread/resumeagree, Throughline now treats the mismatch
as diagnostics and adjuststhread/rollback.numTurnsby the app-server delta.
For example,expectedTurns = 6andreadTurns = resumedTurns = 7under
--allnow sendsnumTurns: 7. trim --preflight --host codexnow reports the same rollback adjustment
preview instead of returningpreflight-refusedfor this recoverable
mismatch.
v0.4.9 - natural resume context
[0.4.9] — 2026-05-09
Changed
- Resume context overhaul. The Claude
/clearresume injection no longer
carries a verbose meta-instruction ("respond with: I have inherited the prior
task..."). The header now contains only a one-line natural-continuation cue
and theBashinvocation contract forthroughline detail HH:MM:SS. The L2
active-work thread is anchored at the very bottom of the injected context so
Claude's attention falls on the most recent turn instead of on a recap line.
Older L1 summaries are now timestamped with the original turn body time
(bodies.created_atMIN) instead of the skeleton row's summarization time,
so detail commands derived from L1 lines actually resolve. - L3 references collapsed into per-line
(詳細:…)suffixes. Both the
Claude resume context and the Codex active-work / new-thread handoff
renderers no longer print a standalone### L3 詳細参照/
### Detail Referencessection. Instead, every L1 / L2 line ends with a
compact(詳細:…)suffix that aggregates the L3 evidence belonging to that
turn (本文, tool name,思考,画像, etc.), with×Nonly when count > 1.
The same-turn user / assistant pair only emits the suffix on the last role to
avoid duplicating the per-turn L3 hint. MCP tool names are shortened to the
trailing function name (mcp__plugin_..._playwright__browser_navigate→
browser_navigate) so namespace noise does not dominate the suffix. - Codex auto-refresh and current-session
$throughlinetrigger now use a 75%
verified-usage threshold instead of 80%, so Throughline can fire before Codex
native auto-compact wins the race. throughline doctor --codexnow reads the Codex hook trust gate from
~/.codex/config.toml([hooks.state."<hooks.json>:event:i:j"].trusted_hash)
and reports a top-levelCodex hook trust:summary plus per-hook
trusted: yes/no. A registered hook that is not yet trusted in the Codex
hook acceptance menu may not actually run.
Added
src/l3-summary.mjs: shared helpers (shortenMcpToolName,localizeL3Part,
groupL3ByTurn,buildPartsSummary) used by both the Claude resume context
and the Codex handoff renderers to build the per-line(詳細:…)suffix.
Notes
- The Codex
--max-detail-refsCLI flag is preserved for backwards
compatibility but is now a validated no-op: the new per-line suffix
aggregates L3 references at turn granularity, so a separate cap on a
standalone Detail References list is no longer meaningful. codex-handoff-smokenow reportsrenderedDetailSuffixesinstead of
renderedDetailCommands/uniqueRenderedDetailCommands. The
detail_commands_deduplicatedcheck has been retired because the new
rendering aggregates L3 by turn structurally and cannot emit duplicate
detail commands for the same turn.
This release rolls up the intermediate 0.4.8 patch:
[0.4.8] — 2026-05-09
Changed
- Codex install now registers
UserPromptSubmitandPostToolUsehooks in
addition to the Stop hook. These hooks read the current Codex rollout
token_countdirectly and, at the verified 80% threshold, inject a
current-session$throughlineinstruction before the assistant answers or
continues a tool loop. This keeps automatic refresh independent of
token-monitor and available to users who never run the monitor. throughline installnow enables both[features].codex_hooks = trueand
[features].hooks = truefor Codex hook compatibility.
v0.4.7 - Codex monitor fixes
[0.4.7] — 2026-05-09
Changed
- Codex Stop hook auto-refresh now uses an 80% verified-usage threshold instead
of 90%, so Throughline can refresh before Codex native auto-compact while
still staying above the monitor's 70% warning band. Estimate-only usage and
estimated context windows still do not mutate the thread. - Token monitor now discovers active Codex rollout files directly from
~/.codex/sessions/**/rollout-*.jsonl, so current Codex sessions appear even
when the Codex Stop hook has not written a Throughline state file. - Token monitor now displays Codex session ids as the raw first 8 thread-id
characters (019e085c) instead of the confusing prefixed slice (codex:01).
Codex in-flight turns still overlay transientoutput_tokensin the token
count, but the model column no longer adds a separatelive+<tokens>marker.
This release rolls up intermediate same-day patches that were published to npm but not individually tagged on GitHub:
[0.4.6] — 2026-05-09
Changed
- Codex monitor usage now overlays transient
output_tokenswhile a Codex turn
is open. During an in-flight turn the row displaysinput_tokens + output_tokensand marks the model withlive+<tokens>; aftertask_complete
the row drops back to verifiedinput_tokensonly.
[0.4.5] — 2026-05-09
Fixed
- VS Code detection now treats
VSCODE_HANDLES_SIGPIPEas a VS Code-family
environment signal. This letsthroughline installprovision the monitor task
in Codex / VS Code sessions whereTERM_PROGRAM,VSCODE_PID, and
VSCODE_IPC_HOOK_CLIare absent.
[0.4.4] — 2026-05-09
Changed
- Token monitor now treats Claude transcript and Codex rollout files as live
inputs. State-fileusagesnapshots remain a fallback, but the display and
stale hiding no longer wait for Stop hook completion when the live files are
still changing. throughline installnow provisions or repairs the current project's VS Code
Throughline Monitortask when running under VS Code / Cursor / VSCodium, so
monitor auto-start setup no longer depends solely on the first hook event.
[0.4.3] — 2026-05-09
Changed
- Changed the installed Codex
$throughlineskill so bare$throughlineruns
the scripted current-thread refresh directly:
throughline trim --execute --host codex --all --json. Doctor, dry-run,
preflight, restore-safety analysis, host primitive audit, and fresh-thread
handoff remain available only when explicitly requested instead of being the
normal skill path.
[0.4.2] — 2026-05-09
Fixed
- Codex trim no longer falls back to the latest project session when
--session
is omitted. For--host codex, the default memory session is now the current
Codex thread (codex:<thread_id>from--codex-thread-id,
CODEX_THREAD_ID, orTHROUGHLINE_CODEX_THREAD_ID), so Claude-side work
cannot accidentally become the injected memory for a Codex rollback.
v0.4.1 — /clear writes baton for deterministic handoff
[0.4.1] — 2026-05-09
Changed
/clearも baton を書き込むように変更。UserPromptSubmit hook で/clear
を検出した時点で当該セッションのsession_idをhandoff_batonsに書き、
次の新規 SessionStart が確定的にそのセッションを引き継ぐ。これにより、複数
VSCode ウィンドウなどで「最新更新セッション ≠ /clear したセッション」になる
シナリオでfindLatestClaudePredecessorheuristic が誤った前任を選ぶ問題を
解消。- 2 経路の優先順位を入れ替え: baton path が primary、
source='clear'
の auto path は fallback。auto path は/clearが UserPromptSubmit hook
に届かない経路 (例: VSCode 拡張のメニュー由来) のためのフォールバック扱い。
Added
src/prompt-submit.mjs:isClearCommand判定 (/clear,/clear ...,
前後空白許容、/cleared//clearcache等の prefix 偽陽性は拒否)。~/.throughline/logs/baton-write.logのtriggerフィールドに
'tl' | 'clear'を記録。src/prompt-submit.test.mjs:isBatonCommand/isClearCommandの判定
テスト 14 件。src/hook-entrypoints.test.mjs:/clearbaton の subprocess+DB 実体テスト
3 件 (/clear書き込み //tl→/clear後勝ち上書き / 通常 prompt は no-op)。
Notes
- 既存の
THROUGHLINE_DISABLE_AUTO_HANDOFF=1env は fallback path のみに作用
するようになった。typed/clearは env に関係なく baton 書き込み → 引継ぎ発火
する (= ユーザーが明示的に/clearを打った時点で「続けたい」という意思表示
と解釈する)。auto path (VSCode メニュー由来) には引き続き env が効く。
Repository hygiene
.vscode/tasks.jsonを git 追跡から外す (.gitignoreに追加)。
ensureMonitorTaskFileが hook 発火ごとに絶対パスを書き換えるため、追跡
対象に置くと別 OS / 別マシンで毎回 dirty diff が出続けていた。各マシンでは
初回 hook 発火時に自動生成される。
v0.4.0 — /clear auto-handoff (breaking)
[0.4.0] — 2026-05-08
Breaking changes
/clearで自動引継ぎがデフォルト ON に変更。Claude Code 2.1.128 で
SessionStart hook のsource='clear'が reliable になったため、/clear後の
新セッションは自動的に前セッションの memory を merge + 注入する。
(GitHub issue #49937
は解決済み)THROUGHLINE_DISABLE_AUTO_HANDOFF=1env var で auto path を OFF にできる。/tlの役割を明示意思マーカーに簡素化。memo 4 項目入力の指示を削除し、
baton を立てるだけの slash command に。/tlは env で auto OFF にしている
ユーザー、または/clearを経由しない引継ぎに使う逃げ道。/tl-trimslash command 廃止。memo 入力 + dry-run preview の役割を持って
いたが、memo 廃止と軽量化方針で役割なしに。Codex 経路のthroughline trim
CLI は維持 (--host codexでの guarded execute / preflight など)。throughline save-inflightCLI 削除。memo 廃止に伴う除去。updateBatonMemo関数削除。src/baton.mjsの export から外した。- schema v8 migration:
handoff_batons.memo_text列を drop。 - 注入内容を L1 + L2 + L3 references のみに簡素化。memo セクション、
中断直前 thinking セクション、Claude 向け footer の使い方説明を削除。L2 全文
に「次に何をしようとしていたか」が含まれているため redundant。
Added
src/db.mjs: schema v8 migration (handoff_batons.memo_text 列 drop)。src/session-start.mjs: 引継ぎ判定の 2 経路ロジック:- baton path:
consumeBaton先発で baton ありなら merge + 注入 - auto path: baton 無し +
source='clear'+ env disable 無し で同 project の
最新 Claude unmerged session を自動 predecessor に merge + 注入
- baton path:
inheritance-decision.logにtriggered_path/auto_handoff_disabled
フィールドを追加。baton_has_memoフィールドは削除。src/resume-context.mjs: L3 references 一覧を注入テキストに追加
(CodexrenderCodexRolloutMemoryPreview形式の- ${kind}: \throughline detail ``)。Reading Contract / Continuation Instruction
も Codex 風 framing に揃えた。
Notes
src/handoff-record.mjsの memo / thinking projection は 維持: Codex 側
(codex-handoff.mjs,codex-resume.mjs,codex-handoff-smoke.mjsなど) が
memory.inflightMemo/memory.latestThinkingを参照しているため。Claude
側は resume-context.mjs で「使わない」だけ。src/cli/trim.mjsは 維持: Codex 経路 (--host codex) と doctor
(--trim --host claude) で使うdescribeTrimHost('claude')の dry-run 表示
が依存しているため。/tl-trimslash command が無くなっても CLI は残る。- 既存
~/.throughline/logs/inflight-memo.logファイルは新版で書き込まれない。
ユーザー側で手動削除可能。
v0.3.25 — Codex sidecar groundwork + Codex primary trim foundations
[0.3.25] — 2026-05-08
Added
- Claude-primary / Codex-sidecar groundwork:
HandoffRecordprojection,throughline handoff-preview,
throughline_handoffexample context, andcodex-sidecar-diagnostics/
codex-sidecar-dry-runcommand surfaces. - Optional
codex-sidecarL2→L1 summarization path. When the sidecar is
configured for thesummarize-l1preset, Throughline uses it for the only
subagent-like external model call; disabled/unavailable/run-failed sidecar
states keep the existing Claude Haiku route. /tl-trimdry-run surface:
throughline trim --dry-run,--host,--keep-recent,--all,
--memo-stdin,--codex-thread-id, andthroughline doctor --trim.- Codex app-server protocol helpers for the verified trim flow: newline JSON
framing, initialize / resume / rollback / inject / turn-start request
builders, and parser coverage. - Codex rollout-backed trim source for explicit
--codex-thread-idplans.
This lets Codex dry-run / preflight / guarded execute use the active rollout
even when the Throughline DB has no Codexbodiesrows. throughline codex-capture, which captures explicit Codex rollout active
turns into a namespacedcodex:<thread_id>Throughline DB session. Re-capture
rebuilds that session so rolled-back tail turns do not survive as current L2.- Codex capture now stores rollout function-call L3 details as well as L2
bodies:function_callbecomesdetails.kind = tool_input, and
function_call_outputbecomesdetails.kind = tool_output. - Host-mode L2→L1 backend selection. Claude-primary keeps the existing
codex-sidecar/ Claude Haiku compatibility route, while Codex-primary uses
the Codex CLI backend and reports failure explicitly instead of falling back. throughline codex-summarize, which writes L1 skeletons for captured
codex:<thread_id>sessions through the Codex CLI backend once the captured
body count exceeds the L2 window.throughline codex-resume, which renders capturedcodex:<thread_id>memory
as Codex active-work context.--format handoffemits a concise fresh-thread
handoff prompt for safe continuation without mutating the current Codex
thread; the handoff view caps recent L2 entries, long body text, and detail
references while preserving the full context in the normal text renderer.
--format item-jsonemits a Codex developer message item so hosts can
inject the memory as current-task context instead of a passive archive.
--memo-stdinprepends a Codex-primary in-flight memo without touching Claude
/tlbatons.throughline codex-handoff-smoke, a read-only validator for the
codex-resume --format handoffprompt. It checks fresh-thread header /
current-task contract / source session / start instruction / mutation
boundary / prompt size / detail-command deduplication before a user starts a
new Codex thread with that prompt.throughline codex-handoff-model-smoke, an explicit opt-in model smoke for
the same handoff prompt. It first requires the structural handoff smoke to be
ready, then runscodex exec --ephemeral --ignore-user-config --ignore-rules --sandbox read-onlywith a marker prompt.--dry-runinspects the exact
readiness / command boundary without starting Codex exec, and
--print-promptcan include the combined prompt for audit. Live model smoke
requiresTHROUGHLINE_EXPERIMENTAL_CODEX_HANDOFF_MODEL_SMOKE=1and does not
mutate the current Codex thread.throughline codex-handoff-start, a guided read-only fresh-thread start plan
for Codex handoff. It reports the structural smoke command, model-smoke dry-run
boundary, handoff render command, optional live model smoke command, and can
include the handoff prompt with--print-prompt. When--memo-stdinis used,
the replay commands include--memo-stdinand the output reminds callers to
pipe the same memo.throughline doctor --codex, a read-only Codex-primary diagnostic that shows
current thread env identity, rollout candidates for the cwd, captured
codex:<thread_id>DB sessions, context refresh blockage, new-thread
handoff readiness, and the next capture/resume commands.- Global
throughline installnow also registers the Codex Stop hook in
~/.codex/hooks.jsonwith absolute node + installedbin/throughline.mjs,
async: false, andtimeoutSec: 300, and enables
[features].codex_hooks = truein~/.codex/config.toml. Existing non-
Throughline Codex hooks, including Caveat / Spotter hooks, are preserved. - Global install now also installs a
$throughlineCodex skill under
~/.codex/skills/throughline, giving Codex a natural-language entrypoint for
Throughline status, resume, summarize, dry-run, preflight, and explicit
execute workflows. The rollback / inject execute path is enabled again after
controlled rollback model-visible smokes failed to reproduce rollback marker
resurrection. - A bare
$throughlineCodex skill invocation now runs the safe inspection
shape:doctor --codex, guarded dry-run, and preflight. Explicit
trim --execute --host codex --allmutates the current Codex thread when the
user asks for it and the guard checks pass. - Codex Stop hook automatic refresh now attempts guarded rollback + Throughline
DB memory injection at the 90% verified-usage threshold. Estimate-only usage
still never triggers mutation. throughline codex-visibility-smoke, an experimental opt-in Codex app-server
smoke that injects the Codex active-work developer message and starts a
marker-check model turn. It requires
THROUGHLINE_EXPERIMENTAL_CODEX_MODEL_VISIBLE_SMOKE=1and supports explicit
model-turn timeouts with--request-timeout-ms/--timeout-ms; it also
accepts the same--memo-stdinactive-work memo surface ascodex-resume.
--resume-after-injectre-runsthread/resumeafter injection before
starting the marker turn, so resume persistence can be checked explicitly.- Codex-first roadmap docs that set the next implementation order: Codex
primary support with a Codex CLI L2→L1 backend, then Codex rewind-compatible
trim, then Claude rewind finalization.
Changed
- Resume context now frames recent L2 as an active work thread with explicit
reading/continuation instructions at both the top and bottom of injected
memory. Older L2 entries may be superseded by later entries and are not
blindly treated as still-current truth. - Hook entry modules are import-safe and expose
run()so subprocess tests can
cover the Claude path without touching the user's real database. - VSCode task tests suppress Claude-facing
<system-reminder>notices by
default and opt in only for notice assertions, keeping test output from
looking like fresh user-facing instructions. codex-sidecarsubprocess calls now shell-wrap on Windows so npm global
.cmdshims resolve consistently, matching the existing Claude CLI handling.- L2→L1 sidecar summarization accepts the stable
SidecarResultJSON shape
(summarywithoutstatus: "ok") as well as the older test fixture shape. codex-sidecar-dry-run --turn-timeout-msnow forwards the timeout into the
normalized sidecar request instead of only changing the local subprocess
timeout..codex-sidecar.ymlno longer denies every path containingtoken, so
legitimate source files such assrc/token-monitor.mjsremain reviewable..codex-sidecar.ymlallows release docs and Claude slash commands, so
review/risk-check sidecars can inspect the same contract surfaces that are
shipped in the npm tarball..codex-sidecar/logs/is ignored as a runtime artifact from real sidecar
smoke runs.- Codex trim host status now distinguishes verified app-server rollback/inject
primitives from guarded execution requirements. Codex Stop hook automatic
refresh is enabled only at the 90% verified-usage threshold and still uses the
same explicit thread identity, injectable DB memory, and rollout/app-server
turn-count guards. - Trim dry-run now carries an explicit Codex thread identity separately from
the Claude/Throughlinesession_id, avoiding latest-rollout guessing. - Codex trim can now use
THROUGHLINE_CODEX_THREAD_IDorCODEX_THREAD_IDas
a current-thread identity signal when--codex-thread-idis omitted; the CLI
flag remains authoritative and Throughline still does not guess from the
latest rollout. throughline doctor --trim --host codexnow reports whether a current Codex
thread id is available from env and adjusts its dry-run example accordingly.throughline doctor --trim --host codexnow also reports the read-only host
primitive audit status as diagnostic evidence rather than an execute blocker.throughline trim --preflight --host codex --codex-thread-id <id>now
performs a guarded Codex app-server initialize/read/resume check and stops
before sending rollback or inject. When the plan source iscodex-rollout,
preflight compares rollout active turns with app-server read/resume turns and
refuses the plan if they differ.- Codex rollout-backed trim source now excludes the current in-flight turn from
rollback planning, including the latest post-rollback assistant continuation.
This keeps preflight aligned with app-serverthread/read/thread/resume,
which only report completed host-visible turns during an ongoing Codex turn. throughline trim --execute --host codex --codex-thread-id <id>no longer
requiresTHROUGHLINE_EXPERIMENTAL_CODEX_TRIM_EXECUTE=1and no longer treats
host primitive audit or restore-safety diagnostics as mutation blockers.
Execute still refuses before mutation when Codex thread identity, injectable
Throughline DB memory, or rollout/app-server turn-count agreement is missing.- Codex guarded execute now polls post-inject
thread/readuntil the injected
memory item is visible when the app-server reports an injected turn count, and
reports `postInjectVisibilityChe...
v0.3.24 — gitignore recommendation
Added
shouldRecommendGitignorein src/vscode-task.mjs:
whenensureMonitorTaskFiletransitions tocreated/merged/repaired
inside a git repository whose.gitignorelacks a.vscode/tasks.json-
matching entry, emit a one-time<system-reminder>to stdout recommending
.gitignoreregistration. Suppressed by a.throughline-gitignore-noted
marker so it does not repeat. Negation patterns (!.vscode/tasks.json) are
treated as explicit-track intent and still trigger the recommendation.
Why
.vscode/tasks.jsonalways contains environment-specific absolute paths
(process.execPath, the install location ofthroughline.mjs). Even though
v0.3.23 auto-repairs stale paths after the fact, the right answer is to not
commit it in the first place. The published npm tarball was already clean of
absolute paths (filesfield excludes.vscode/, no hardcoded paths in
source); this release strengthens runtime advice for the consumer side.
v0.3.23 — cross-environment fixes
Added
- Cross-environment
.vscode/tasks.jsonrepair: when an existing Monitor task
references absolute paths that don't exist on the current machine
(e.g. a Windows path on a WSL2 clone),ensureMonitorTaskFilenow rewrites
justcommand/argswhile preserving anylabel/presentation/
isBackgroundcustomization. New helpersfindMonitorTaskIndexand
isMonitorTaskBroken(absolute-path + non-existent test) drive the new
action: 'repaired'branch, andbuildSetupNotice('repaired')returns a
one-timeReload Windownotice. resolveThroughlineOnPathin src/cli/install.mjs:
afterthroughline installcompletes, walk PATH to confirmthroughline
resolves. If not, print a stderr fix recipe (npm prefix -g→ add to
~/.bashrc→ re-rundoctor). Catches the silent-fail case where
~/.npm-global/binis exported in~/.profilebut not~/.bashrc(VSCode's
interactive non-login bash skips.profile).
Documentation
- README Troubleshooting now covers PATH resolution, WSL2 ↔ Windows PATH
crossover, cross-OS DB separation (eachos.homedir()is its own DB), and
the auto-repair behavior for stale tasks.