[{"name":"custom-provider-anthropic","kind":"directory","size":0,"lastCommitHash":"915c78f42c248b08238dd27fcd4bcab32c60beab","lastCommitWhen":"2026-09-06T12:42:06+02:00","lastCommitMessage":"chore: prepare v0.9.3 release (#2078)"},{"name":"custom-provider-gitlab-duo","kind":"directory","size":0,"lastCommitHash":"915c78f42c248b08238dd27fcd4bcab32c60beab","lastCommitWhen":"2026-09-06T12:42:06+02:00","lastCommitMessage":"chore: prepare v0.9.3 release (#2078)"},{"name":"doom-overlay","kind":"directory","size":0,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"dynamic-resources","kind":"directory","size":0,"lastCommitHash":"2127573ac82a88c6c631fce92bd323edde4d7421","lastCommitWhen":"2026-06-11T12:53:54-07:00","lastCommitMessage":"unify tool rendering into a labeled background panel (#137)"},{"name":"plan-mode","kind":"directory","size":0,"lastCommitHash":"4a7a55c9a1f053f0bc3500066c6a65b2d0ea4636","lastCommitWhen":"2026-05-08T15:34:55-07:00","lastCommitMessage":"make ipython default and remove legacy tools (#3)\n\n* chore: strip legacy tools\n\n* docs: remove stale read tool references"},{"name":"sandbox","kind":"directory","size":0,"lastCommitHash":"915c78f42c248b08238dd27fcd4bcab32c60beab","lastCommitWhen":"2026-09-06T12:42:06+02:00","lastCommitMessage":"chore: prepare v0.9.3 release (#2078)"},{"name":"subagent","kind":"directory","size":0,"lastCommitHash":"ea7dbd1f103ffc9457e3f4a06ed1845ca5aa0a21","lastCommitWhen":"2026-09-10T19:14:32+02:00","lastCommitMessage":"make recursive subagent spawning an explicit rlm.spawn call (#2152)\n\n* rename rlm.run to rlm.spawn and drop the callable shim\n\nThe kernel API for spawning a child is now the single explicit call\nawait rlm.spawn(prompt, ...). Calling rlm(...) raises a TypeError that\nnames the replacement, so a model imitating an older transcript can\ncorrect itself in one turn. The host request type stays \"rlm.run\" so\nkernels and hosts of different versions keep working.\n\n* teach rlm.spawn in the system prompt and host errors\n\nThe system prompt, subagent guidance, refinement guidance, and spawn\nerror messages now name rlm.spawn instead of the removed callable form.\nThe kernel readiness check requires rlm.spawn and rejects a runtime that\nstill exposes rlm.run, so a stale kernel venv is rebuilt instead of\nserving the old surface.\n\n* update docs to the rlm.spawn call form\n\nDocs, README, the subagent example, and the Python skill reference now\nshow await rlm.spawn(...). The runtime doc keeps the \"rlm.run\" host\nrequest type where it describes the wire protocol.\n\n* keep one comment for the unchanged rlm.run wire type\n\nThe runtime comment at the host_request call is the only place the\nspawn/wire name difference needs explaining.\n\n* require an explicit child name and finish the rename cleanup\n\nrlm.spawn(prompt, *, name, model=None, thinking=None) now rejects a\nnameless spawn at the Python signature, so every child gets a stable\nname the parent chose. The host keeps its generated-name fallback for\nwire payloads without a name, because older kernels still send those.\n\nReading the removed rlm.run attribute now raises an AttributeError that\nnames rlm.spawn, matching the not-callable error, so both stale habits\nrecover in one turn. Docs no longer describe rlm as callable, and the\nbootstrap failure text says an interrupted upgrade rebuild needs network\nonce more.\n\n* name the child in the runtime sequence diagram\n\nThe diagram showed a spawn call that now fails at the signature."},{"name":"with-deps","kind":"directory","size":0,"lastCommitHash":"915c78f42c248b08238dd27fcd4bcab32c60beab","lastCommitWhen":"2026-09-06T12:42:06+02:00","lastCommitMessage":"chore: prepare v0.9.3 release (#2078)"},{"name":"auto-commit-on-exit.ts","kind":"file","size":1385,"lastCommitHash":"032e3ee74574ca16efaf8745a1394b821256a5d0","lastCommitWhen":"2026-08-18T12:17:35+02:00","lastCommitMessage":"chore: remove redundant comments and unused internals (#1505)\n\n* chore: remove redundant comments\n\n* chore(tui): remove redundant export comments\n\n* chore(coding-agent): remove redundant example comments\n\n* chore(ai): remove redundant comments\n\n* chore(coding-agent): remove obsolete core comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(coding-agent): remove redundant rpc test comments\n\n* chore(coding-agent): remove redundant CLI comments\n\n* chore(agent): remove redundant comments\n\n* chore(tui): remove redundant source comments\n\n* chore(coding-agent): remove redundant mode comments\n\n* chore(coding-agent): remove redundant mode comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(ai): remove redundant source comments\n\n* chore(coding-agent): remove redundant session comments\n\n* chore(coding-agent): remove redundant core comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(tests): remove redundant test comments\n\n* chore: remove unused internal helpers\n\n* docs: restore public API contracts\n\n* chore(coding-agent): restore invariant documentation\n\n* chore(coding-agent): clarify agent family contracts\n\n* style(coding-agent): format restored contracts\n\n* fix: restore intentional catch explanations"},{"name":"bash-spawn-hook.ts","kind":"file","size":696,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"bookmark.ts","kind":"file","size":1491,"lastCommitHash":"032e3ee74574ca16efaf8745a1394b821256a5d0","lastCommitWhen":"2026-08-18T12:17:35+02:00","lastCommitMessage":"chore: remove redundant comments and unused internals (#1505)\n\n* chore: remove redundant comments\n\n* chore(tui): remove redundant export comments\n\n* chore(coding-agent): remove redundant example comments\n\n* chore(ai): remove redundant comments\n\n* chore(coding-agent): remove obsolete core comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(coding-agent): remove redundant rpc test comments\n\n* chore(coding-agent): remove redundant CLI comments\n\n* chore(agent): remove redundant comments\n\n* chore(tui): remove redundant source comments\n\n* chore(coding-agent): remove redundant mode comments\n\n* chore(coding-agent): remove redundant mode comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(ai): remove redundant source comments\n\n* chore(coding-agent): remove redundant session comments\n\n* chore(coding-agent): remove redundant core comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(tests): remove redundant test comments\n\n* chore: remove unused internal helpers\n\n* docs: restore public API contracts\n\n* chore(coding-agent): restore invariant documentation\n\n* chore(coding-agent): clarify agent family contracts\n\n* style(coding-agent): format restored contracts\n\n* fix: restore intentional catch explanations"},{"name":"border-status-editor.ts","kind":"file","size":4511,"lastCommitHash":"5d66ab91326db0b93a8f0044e0fff51834b19929","lastCommitWhen":"2026-09-14T08:27:54+02:00","lastCommitMessage":"feat(coding-agent): host-owned extension ctx timers (#2095)\n\n* feat(coding-agent): host-owned extension ctx timers\n\nctx.setTimeout/ctx.setInterval (+ clears) run callbacks through the\nextension error boundary and are cancelled on unload, so a throwing\nself-scheduled callback can no longer kill a daemon session worker.\n\nRefs RES-1315\n\n* docs(coding-agent): document ctx timers and use them in example extensions\n\nRaw global timers stay unsupported for scheduling extension work.\n\nRefs RES-1315\n\n* fix(coding-agent): retire replaced extension runners and neutralize fired timeout handles\n\nReview follow-ups: _buildRuntime rebuilds (/reload, runtime swaps) now retire\nthe old runner (stale ctx, timers cancelled) without staling the shared or\nreused runtime object, and a fired ctx timeout is cleared at fire time so\nhandle.refresh() cannot re-arm it outside host ownership.\n\nRefs RES-1315\n\n* fix(coding-agent): weakly track host timers and label replaced-session timer owners\n\nGlobally cleared ctx timers are dropped by GC instead of retained until\nunload; replaced-session contexts label their timers <session-replacement>;\nremoved the now-unused wrapToolDefinitions batch helper.\n\nRefs RES-1315\n\n* fix(coding-agent): scope runner retirement to extension-world restarts\n\nRuntime-only rebuilds (MCP set changes, heartbeat controller) keep the same\nextension load and never re-emit session_start, so retiring there cancelled\nextension timers with no re-schedule path. The replacement runner now adopts\nthe live timer registry on runtime-only rebuilds and retires the old runner\nonly when the extension world restarts. Also dropped the per-schedule WeakRef\nsweep (quadratic); dead refs are freed at unload, which iterates anyway.\n\nRefs RES-1315\n\n* fix(coding-agent): route adopted timers through the current timer host\n\nAdoption now hands over one shared timer-host object (registry + current\nowner): adopted callbacks report errors through the adopting runner (whose\nerror listener is live) and scheduling is gated on the current owner, so a\nctx captured before a runtime-only rebuild cannot arm work for an extension\nworld that a later reload has unloaded.\n\nRefs RES-1315\n\n* fix(coding-agent): coerce ctx timer callback results with Promise.resolve\n\ninstanceof Promise missed cross-realm promises and userland thenables, so a\nrejected thenable returned from a timer callback escaped the error boundary.\nPromise.resolve assimilates any thenable into the boundary catch. Handler\ninvocations already use await, which is thenable-safe.\n\nRefs RES-1315\n\n* chore(coding-agent): tighten timer comments and dedupe reload pin\n\nComments cut to one-line invariants; the standalone reload-cancellation test\nwas a strict subset of the MCP runtime-only rebuild pin, which already proves\nreload freezes adopted timers and gates stale scheduling.\n\nRefs RES-1315"},{"name":"built-in-tool-renderer.ts","kind":"file","size":5412,"lastCommitHash":"4a7a55c9a1f053f0bc3500066c6a65b2d0ea4636","lastCommitWhen":"2026-05-08T15:34:55-07:00","lastCommitMessage":"make ipython default and remove legacy tools (#3)\n\n* chore: strip legacy tools\n\n* docs: remove stale read tool references"},{"name":"claude-rules.ts","kind":"file","size":2476,"lastCommitHash":"4a7a55c9a1f053f0bc3500066c6a65b2d0ea4636","lastCommitWhen":"2026-05-08T15:34:55-07:00","lastCommitMessage":"make ipython default and remove legacy tools (#3)\n\n* chore: strip legacy tools\n\n* docs: remove stale read tool references"},{"name":"commands.ts","kind":"file","size":2594,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"confirm-destructive.ts","kind":"file","size":1680,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"custom-compaction.ts","kind":"file","size":4279,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"custom-footer.ts","kind":"file","size":2149,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"custom-header.ts","kind":"file","size":2399,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"custom-refinement.ts","kind":"file","size":4001,"lastCommitHash":"108eff32ea843baf4337e1de9d9ccb3cec6d97fa","lastCommitWhen":"2026-08-21T10:59:31-07:00","lastCommitMessage":"feat(coding-agent): session_before_refine extension hook (#1558)\n\n* feat(coding-agent): session_before_refine extension hook\n\nLet extensions customize continual-harness refinement the same way\nsession_before_compact customizes compaction. The hook fires before the\nplanning LLM call for /refine and auto-refine with the planning inputs\n(trigger, instructions, scope, planning harness state, refinement\nhistory, serialized conversation). An extension can return a\nRefinementProposal to replace the built-in planner (edits still pass\napply-time validation and baseline conflict rejection), return\n{ skip: true } to suppress the round, or return nothing to fall back to\nthe default planner. Rollback refinements bypass the hook.\n\nIncludes examples/extensions/custom-refinement.ts (planning with a\ncheaper model, covering discussion #1464) and documents the existing\nrefine_complete event.\n\n* Update queue-test refine call assertions for the trigger argument\n\n* Propagate the auto trigger and skip semantics through serialized refine paths\n\nSerialized auto-refine now reaches session_before_refine with trigger\n\"auto\", an extension skip there stamps the cooldown without emitting\nrefine_failed, and a skipped explicit refine.run surfaces the\nRefineSkippedError instead of passing as a silent reviewer decline. The\nexample planner now labels entry ids with their scope and tells the\nmodel other-scope entries are read-only.\n\n* fix(coding-agent): consume skipped auto-refine rounds\n\n* fix(coding-agent): report skipped refine during disposal\n\n* fix(coding-agent): normalize extension refine proposals\n\n---------\n\nCo-authored-by: Seth <seth@primeintellect.ai>"},{"name":"dirty-repo-guard.ts","kind":"file","size":1336,"lastCommitHash":"032e3ee74574ca16efaf8745a1394b821256a5d0","lastCommitWhen":"2026-08-18T12:17:35+02:00","lastCommitMessage":"chore: remove redundant comments and unused internals (#1505)\n\n* chore: remove redundant comments\n\n* chore(tui): remove redundant export comments\n\n* chore(coding-agent): remove redundant example comments\n\n* chore(ai): remove redundant comments\n\n* chore(coding-agent): remove obsolete core comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(coding-agent): remove redundant rpc test comments\n\n* chore(coding-agent): remove redundant CLI comments\n\n* chore(agent): remove redundant comments\n\n* chore(tui): remove redundant source comments\n\n* chore(coding-agent): remove redundant mode comments\n\n* chore(coding-agent): remove redundant mode comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(ai): remove redundant source comments\n\n* chore(coding-agent): remove redundant session comments\n\n* chore(coding-agent): remove redundant core comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(tests): remove redundant test comments\n\n* chore: remove unused internal helpers\n\n* docs: restore public API contracts\n\n* chore(coding-agent): restore invariant documentation\n\n* chore(coding-agent): clarify agent family contracts\n\n* style(coding-agent): format restored contracts\n\n* fix: restore intentional catch explanations"},{"name":"dynamic-tools.ts","kind":"file","size":2211,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"event-bus.ts","kind":"file","size":1348,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"file-trigger.ts","kind":"file","size":1033,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"git-checkpoint.ts","kind":"file","size":1468,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"github-issue-autocomplete.ts","kind":"file","size":5282,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"handoff.ts","kind":"file","size":6127,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"hello.ts","kind":"file","size":640,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"hidden-thinking-label.ts","kind":"file","size":1614,"lastCommitHash":"370c56235dce1f52b89c4e20b25f714b6f4e8dc1","lastCommitWhen":"2026-09-11T18:58:05-07:00","lastCommitMessage":"add verbosity controls + clean ui (#2193)\n\n* fix(tui): soften assistant output text color\n\n* fix(tui): dim the assistant output text further\n\n* fix(tui): lighten the thinking block styling\n\n* fix(tui): dim the collapsed tool call previews\n\n* fix(tui): lighten bold usage in the conversation surface\n\n* fix(tui): refine the conversation row text hierarchy\n\n* fix(tui): hide thinking rows by default\n\n* fix(tui): reveal all thinking blocks on the toggle\n\n* Revert \"fix(tui): reveal all thinking blocks on the toggle\"\n\nThis reverts commit e6709eff476aa40f3859944a0f782e4cba066ecb.\n\n* Revert \"fix(tui): hide thinking rows by default\"\n\nThis reverts commit 2aa2e3cde6bfe9225a4e22ed7476d7502fef4b78.\n\n* Revert \"fix(tui): refine the conversation row text hierarchy\"\n\nThis reverts commit 209b1d7e936bc9fbbc3255cf14b6f5823c0d21ba.\n\n* Revert \"fix(tui): lighten bold usage in the conversation surface\"\n\nThis reverts commit ba8b4dc63dadbeed57e5d61361c8b969db340384.\n\n* Revert \"fix(tui): lighten the thinking block styling\"\n\nThis reverts commit 101952046b37af549c0b79a73437c0a235999878.\n\n* fix(tui): revert the tool preview dim from this lane\n\n* fix(tui): fold the quiet conversation changes back into this pr\n\n* feat(tui): cycle conversation detail with Ctrl+O\n\nfixes #2193\n\n* fix(tui): compact shell completions and conversation detail\n\nfixes #2193\n\n* fix(tui): keep detail shortcut guidance in help\n\nfixes #2193\n\n* feat(tui): show conversation detail mode in status bar\n\nfixes #2193\n\n* fix(tui): remove separate agent message shortcut\n\nfixes #2193\n\n* fix(tui): align shell completions and gate agent messages by detail\n\nfixes #2193\n\n* test(tui): preserve compact agent message notices\n\nfixes #2193\n\n* fix(tui): retain compact agent message notices in overview\n\nfixes #2193\n\n* fix(tui): preserve multiline Python string highlighting\n\nKeep string bodies out of collapsed previews and restore ANSI continuation state before source-line gutters. fixes #2193\n\n* fix(tui): preserve shell notification chronology (fixes #2193)\n\n* fix(tui): keep follow hint aligned over expanded output, fixes #2193\n\n* fix(tui): nest expanded Python input and mark output (fixes #2193)\n\n* fix(tui): base conversation spacing on visible output (fixes #2193)\n\n* test(tui): preserve originating tool in live spacing fixture (fixes #2193)\n\n* fix(tui): separate compact shell notices from visible events (fixes #2193)\n\n* fix(tui): harden transcript rendering and remove obsolete controls (fixes #2193)\n\n* fix(tui): stop stale animation for ambiguous shell completions (fixes #2193)\n\n* docs(tui): clarify deprecated thinking label hook (fixes #2193)\n\n* test(tui): align chat fixtures with merged prompt and compaction UI (fixes #2193)\n\n* fix(tui): preserve statements after multiline strings (fixes #2193)\n\n* fix(tui): ignore closing delimiters in code previews (fixes #2193)"},{"name":"inline-bash.ts","kind":"file","size":2958,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"input-transform.ts","kind":"file","size":1444,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"interactive-shell.ts","kind":"file","size":4780,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"mac-system-theme.ts","kind":"file","size":1216,"lastCommitHash":"5d66ab91326db0b93a8f0044e0fff51834b19929","lastCommitWhen":"2026-09-14T08:27:54+02:00","lastCommitMessage":"feat(coding-agent): host-owned extension ctx timers (#2095)\n\n* feat(coding-agent): host-owned extension ctx timers\n\nctx.setTimeout/ctx.setInterval (+ clears) run callbacks through the\nextension error boundary and are cancelled on unload, so a throwing\nself-scheduled callback can no longer kill a daemon session worker.\n\nRefs RES-1315\n\n* docs(coding-agent): document ctx timers and use them in example extensions\n\nRaw global timers stay unsupported for scheduling extension work.\n\nRefs RES-1315\n\n* fix(coding-agent): retire replaced extension runners and neutralize fired timeout handles\n\nReview follow-ups: _buildRuntime rebuilds (/reload, runtime swaps) now retire\nthe old runner (stale ctx, timers cancelled) without staling the shared or\nreused runtime object, and a fired ctx timeout is cleared at fire time so\nhandle.refresh() cannot re-arm it outside host ownership.\n\nRefs RES-1315\n\n* fix(coding-agent): weakly track host timers and label replaced-session timer owners\n\nGlobally cleared ctx timers are dropped by GC instead of retained until\nunload; replaced-session contexts label their timers <session-replacement>;\nremoved the now-unused wrapToolDefinitions batch helper.\n\nRefs RES-1315\n\n* fix(coding-agent): scope runner retirement to extension-world restarts\n\nRuntime-only rebuilds (MCP set changes, heartbeat controller) keep the same\nextension load and never re-emit session_start, so retiring there cancelled\nextension timers with no re-schedule path. The replacement runner now adopts\nthe live timer registry on runtime-only rebuilds and retires the old runner\nonly when the extension world restarts. Also dropped the per-schedule WeakRef\nsweep (quadratic); dead refs are freed at unload, which iterates anyway.\n\nRefs RES-1315\n\n* fix(coding-agent): route adopted timers through the current timer host\n\nAdoption now hands over one shared timer-host object (registry + current\nowner): adopted callbacks report errors through the adopting runner (whose\nerror listener is live) and scheduling is gated on the current owner, so a\nctx captured before a runtime-only rebuild cannot arm work for an extension\nworld that a later reload has unloaded.\n\nRefs RES-1315\n\n* fix(coding-agent): coerce ctx timer callback results with Promise.resolve\n\ninstanceof Promise missed cross-realm promises and userland thenables, so a\nrejected thenable returned from a timer callback escaped the error boundary.\nPromise.resolve assimilates any thenable into the boundary catch. Handler\ninvocations already use await, which is thenable-safe.\n\nRefs RES-1315\n\n* chore(coding-agent): tighten timer comments and dedupe reload pin\n\nComments cut to one-line invariants; the standalone reload-cancellation test\nwas a strict subset of the MCP runtime-only rebuild pin, which already proves\nreload freezes adopted timers and gates stale scheduling.\n\nRefs RES-1315"},{"name":"message-renderer.ts","kind":"file","size":1670,"lastCommitHash":"032e3ee74574ca16efaf8745a1394b821256a5d0","lastCommitWhen":"2026-08-18T12:17:35+02:00","lastCommitMessage":"chore: remove redundant comments and unused internals (#1505)\n\n* chore: remove redundant comments\n\n* chore(tui): remove redundant export comments\n\n* chore(coding-agent): remove redundant example comments\n\n* chore(ai): remove redundant comments\n\n* chore(coding-agent): remove obsolete core comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(coding-agent): remove redundant rpc test comments\n\n* chore(coding-agent): remove redundant CLI comments\n\n* chore(agent): remove redundant comments\n\n* chore(tui): remove redundant source comments\n\n* chore(coding-agent): remove redundant mode comments\n\n* chore(coding-agent): remove redundant mode comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(ai): remove redundant source comments\n\n* chore(coding-agent): remove redundant session comments\n\n* chore(coding-agent): remove redundant core comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(tests): remove redundant test comments\n\n* chore: remove unused internal helpers\n\n* docs: restore public API contracts\n\n* chore(coding-agent): restore invariant documentation\n\n* chore(coding-agent): clarify agent family contracts\n\n* style(coding-agent): format restored contracts\n\n* fix: restore intentional catch explanations"},{"name":"minimal-mode.ts","kind":"file","size":4748,"lastCommitHash":"4a7a55c9a1f053f0bc3500066c6a65b2d0ea4636","lastCommitWhen":"2026-05-08T15:34:55-07:00","lastCommitMessage":"make ipython default and remove legacy tools (#3)\n\n* chore: strip legacy tools\n\n* docs: remove stale read tool references"},{"name":"modal-editor.ts","kind":"file","size":2417,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"model-status.ts","kind":"file","size":802,"lastCommitHash":"032e3ee74574ca16efaf8745a1394b821256a5d0","lastCommitWhen":"2026-08-18T12:17:35+02:00","lastCommitMessage":"chore: remove redundant comments and unused internals (#1505)\n\n* chore: remove redundant comments\n\n* chore(tui): remove redundant export comments\n\n* chore(coding-agent): remove redundant example comments\n\n* chore(ai): remove redundant comments\n\n* chore(coding-agent): remove obsolete core comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(coding-agent): remove redundant rpc test comments\n\n* chore(coding-agent): remove redundant CLI comments\n\n* chore(agent): remove redundant comments\n\n* chore(tui): remove redundant source comments\n\n* chore(coding-agent): remove redundant mode comments\n\n* chore(coding-agent): remove redundant mode comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(ai): remove redundant source comments\n\n* chore(coding-agent): remove redundant session comments\n\n* chore(coding-agent): remove redundant core comments\n\n* chore(coding-agent): remove redundant test comments\n\n* chore(tests): remove redundant test comments\n\n* chore: remove unused internal helpers\n\n* docs: restore public API contracts\n\n* chore(coding-agent): restore invariant documentation\n\n* chore(coding-agent): clarify agent family contracts\n\n* style(coding-agent): format restored contracts\n\n* fix: restore intentional catch explanations"},{"name":"notify.ts","kind":"file","size":1912,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"overlay-qa-tests.ts","kind":"file","size":41852,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"overlay-test.ts","kind":"file","size":5371,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"permission-gate.ts","kind":"file","size":1019,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"pirate.ts","kind":"file","size":1461,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"preset.ts","kind":"file","size":14233,"lastCommitHash":"6323ff156b8d3ee90fc5bccb129b2484f1cf05e1","lastCommitWhen":"2026-06-23T11:08:08-07:00","lastCommitMessage":"add max thinking level so opus can match claude code's max reasoning (#229)\n\n* feat(ai): add max thinking level with accurate per-family Claude effort mapping\n\nThe unified thinking scale topped out at xhigh, so Opus could not be run in\n\"max\" mode for parity with Claude Code, and Opus 4.7/4.8 could not distinguish\nxhigh from max. Add max as a first-class top reasoning level and map each Claude\nfamily to the efforts its API actually supports:\n\n- Opus 4.6 / Sonnet 4.6: max (no xhigh)\n- Opus 4.7 / Opus 4.8 / Fable 5 / Mythos 5: xhigh and max\n- Mythos Preview: max\n- Older budget-based Claude models: unchanged\n\nAnthropic and Bedrock adaptive-thinking detection now also covers Opus 4.8 and\nthe Fable/Mythos families. OpenAI-family reasoningEffort unions accept max\n(translated via thinkingLevelMap); google clamps exclude max. The TUI thinking\nselector, --thinking flag, settings, and model-registry schema expose max.\n\n* fix(ai): clamp thinking level to model support before mapping effort\n\ncallers passing reasoning: xhigh directly bypass clampThinkingLevel, so\nopus 4.6 / sonnet 4.6 (no native xhigh) could send an unsupported\neffort: xhigh; clamp first so xhigh resolves to max on those models."},{"name":"prompt-customizer.ts","kind":"file","size":2878,"lastCommitHash":"4a7a55c9a1f053f0bc3500066c6a65b2d0ea4636","lastCommitWhen":"2026-05-08T15:34:55-07:00","lastCommitMessage":"make ipython default and remove legacy tools (#3)\n\n* chore: strip legacy tools\n\n* docs: remove stale read tool references"},{"name":"protected-paths.ts","kind":"file","size":767,"lastCommitHash":"4a7a55c9a1f053f0bc3500066c6a65b2d0ea4636","lastCommitWhen":"2026-05-08T15:34:55-07:00","lastCommitMessage":"make ipython default and remove legacy tools (#3)\n\n* chore: strip legacy tools\n\n* docs: remove stale read tool references"},{"name":"provider-payload.ts","kind":"file","size":671,"lastCommitHash":"f1dc7394a3ef3bcabac95c3fc8edaf641f6fc581","lastCommitWhen":"2026-05-14T15:56:52-07:00","lastCommitMessage":"move config under prime agent (#32)\n\n* move config under prime agent\n\nrefs ENG-3630, ENG-3633\n\n* trim docs from config change\n\nrefs ENG-3630, ENG-3633\n\n* remove nonessential branding changes\n\nrefs ENG-3630, ENG-3633\n\n* drop optional aliases and comments\n\nrefs ENG-3630, ENG-3633\n\n* fix prime-agent config paths\n\n* fix prime-agent test expectations\n\n* test github release version parsing\n\n* test prime-agent env constants\n\n* fix extension loader package fallback\n\n* remove repo-local agent resources\n\n* narrow config directory migration\n\n* minimize config path diff\n\n* fix config path help output\n\n* fix tui log config path\n\n* fix tui log filenames\n\n* fix remaining prime agent config paths"},{"name":"qna.ts","kind":"file","size":3735,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"question.ts","kind":"file","size":7778,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"questionnaire.ts","kind":"file","size":12821,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"rainbow-editor.ts","kind":"file","size":2386,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"README.md","kind":"file","size":9579,"lastCommitHash":"370c56235dce1f52b89c4e20b25f714b6f4e8dc1","lastCommitWhen":"2026-09-11T18:58:05-07:00","lastCommitMessage":"add verbosity controls + clean ui (#2193)\n\n* fix(tui): soften assistant output text color\n\n* fix(tui): dim the assistant output text further\n\n* fix(tui): lighten the thinking block styling\n\n* fix(tui): dim the collapsed tool call previews\n\n* fix(tui): lighten bold usage in the conversation surface\n\n* fix(tui): refine the conversation row text hierarchy\n\n* fix(tui): hide thinking rows by default\n\n* fix(tui): reveal all thinking blocks on the toggle\n\n* Revert \"fix(tui): reveal all thinking blocks on the toggle\"\n\nThis reverts commit e6709eff476aa40f3859944a0f782e4cba066ecb.\n\n* Revert \"fix(tui): hide thinking rows by default\"\n\nThis reverts commit 2aa2e3cde6bfe9225a4e22ed7476d7502fef4b78.\n\n* Revert \"fix(tui): refine the conversation row text hierarchy\"\n\nThis reverts commit 209b1d7e936bc9fbbc3255cf14b6f5823c0d21ba.\n\n* Revert \"fix(tui): lighten bold usage in the conversation surface\"\n\nThis reverts commit ba8b4dc63dadbeed57e5d61361c8b969db340384.\n\n* Revert \"fix(tui): lighten the thinking block styling\"\n\nThis reverts commit 101952046b37af549c0b79a73437c0a235999878.\n\n* fix(tui): revert the tool preview dim from this lane\n\n* fix(tui): fold the quiet conversation changes back into this pr\n\n* feat(tui): cycle conversation detail with Ctrl+O\n\nfixes #2193\n\n* fix(tui): compact shell completions and conversation detail\n\nfixes #2193\n\n* fix(tui): keep detail shortcut guidance in help\n\nfixes #2193\n\n* feat(tui): show conversation detail mode in status bar\n\nfixes #2193\n\n* fix(tui): remove separate agent message shortcut\n\nfixes #2193\n\n* fix(tui): align shell completions and gate agent messages by detail\n\nfixes #2193\n\n* test(tui): preserve compact agent message notices\n\nfixes #2193\n\n* fix(tui): retain compact agent message notices in overview\n\nfixes #2193\n\n* fix(tui): preserve multiline Python string highlighting\n\nKeep string bodies out of collapsed previews and restore ANSI continuation state before source-line gutters. fixes #2193\n\n* fix(tui): preserve shell notification chronology (fixes #2193)\n\n* fix(tui): keep follow hint aligned over expanded output, fixes #2193\n\n* fix(tui): nest expanded Python input and mark output (fixes #2193)\n\n* fix(tui): base conversation spacing on visible output (fixes #2193)\n\n* test(tui): preserve originating tool in live spacing fixture (fixes #2193)\n\n* fix(tui): separate compact shell notices from visible events (fixes #2193)\n\n* fix(tui): harden transcript rendering and remove obsolete controls (fixes #2193)\n\n* fix(tui): stop stale animation for ambiguous shell completions (fixes #2193)\n\n* docs(tui): clarify deprecated thinking label hook (fixes #2193)\n\n* test(tui): align chat fixtures with merged prompt and compaction UI (fixes #2193)\n\n* fix(tui): preserve statements after multiline strings (fixes #2193)\n\n* fix(tui): ignore closing delimiters in code previews (fixes #2193)"},{"name":"reload-runtime.ts","kind":"file","size":1155,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"rpc-demo.ts","kind":"file","size":3632,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"send-user-message.ts","kind":"file","size":2832,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"session-name.ts","kind":"file","size":785,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"shutdown-command.ts","kind":"file","size":2045,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"snake.ts","kind":"file","size":9413,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"space-invaders.ts","kind":"file","size":15166,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"ssh.ts","kind":"file","size":5511,"lastCommitHash":"4a7a55c9a1f053f0bc3500066c6a65b2d0ea4636","lastCommitWhen":"2026-05-08T15:34:55-07:00","lastCommitMessage":"make ipython default and remove legacy tools (#3)\n\n* chore: strip legacy tools\n\n* docs: remove stale read tool references"},{"name":"status-line.ts","kind":"file","size":937,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"structured-output.ts","kind":"file","size":2187,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"summarize.ts","kind":"file","size":5218,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"system-prompt-header.ts","kind":"file","size":528,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"tic-tac-toe.ts","kind":"file","size":35374,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"timed-confirm.ts","kind":"file","size":2246,"lastCommitHash":"5d66ab91326db0b93a8f0044e0fff51834b19929","lastCommitWhen":"2026-09-14T08:27:54+02:00","lastCommitMessage":"feat(coding-agent): host-owned extension ctx timers (#2095)\n\n* feat(coding-agent): host-owned extension ctx timers\n\nctx.setTimeout/ctx.setInterval (+ clears) run callbacks through the\nextension error boundary and are cancelled on unload, so a throwing\nself-scheduled callback can no longer kill a daemon session worker.\n\nRefs RES-1315\n\n* docs(coding-agent): document ctx timers and use them in example extensions\n\nRaw global timers stay unsupported for scheduling extension work.\n\nRefs RES-1315\n\n* fix(coding-agent): retire replaced extension runners and neutralize fired timeout handles\n\nReview follow-ups: _buildRuntime rebuilds (/reload, runtime swaps) now retire\nthe old runner (stale ctx, timers cancelled) without staling the shared or\nreused runtime object, and a fired ctx timeout is cleared at fire time so\nhandle.refresh() cannot re-arm it outside host ownership.\n\nRefs RES-1315\n\n* fix(coding-agent): weakly track host timers and label replaced-session timer owners\n\nGlobally cleared ctx timers are dropped by GC instead of retained until\nunload; replaced-session contexts label their timers <session-replacement>;\nremoved the now-unused wrapToolDefinitions batch helper.\n\nRefs RES-1315\n\n* fix(coding-agent): scope runner retirement to extension-world restarts\n\nRuntime-only rebuilds (MCP set changes, heartbeat controller) keep the same\nextension load and never re-emit session_start, so retiring there cancelled\nextension timers with no re-schedule path. The replacement runner now adopts\nthe live timer registry on runtime-only rebuilds and retires the old runner\nonly when the extension world restarts. Also dropped the per-schedule WeakRef\nsweep (quadratic); dead refs are freed at unload, which iterates anyway.\n\nRefs RES-1315\n\n* fix(coding-agent): route adopted timers through the current timer host\n\nAdoption now hands over one shared timer-host object (registry + current\nowner): adopted callbacks report errors through the adopting runner (whose\nerror listener is live) and scheduling is gated on the current owner, so a\nctx captured before a runtime-only rebuild cannot arm work for an extension\nworld that a later reload has unloaded.\n\nRefs RES-1315\n\n* fix(coding-agent): coerce ctx timer callback results with Promise.resolve\n\ninstanceof Promise missed cross-realm promises and userland thenables, so a\nrejected thenable returned from a timer callback escaped the error boundary.\nPromise.resolve assimilates any thenable into the boundary catch. Handler\ninvocations already use await, which is thenable-safe.\n\nRefs RES-1315\n\n* chore(coding-agent): tighten timer comments and dedupe reload pin\n\nComments cut to one-line invariants; the standalone reload-cancellation test\nwas a strict subset of the MCP runtime-only rebuild pin, which already proves\nreload freezes adopted timers and gates stale scheduling.\n\nRefs RES-1315"},{"name":"titlebar-spinner.ts","kind":"file","size":1627,"lastCommitHash":"5d66ab91326db0b93a8f0044e0fff51834b19929","lastCommitWhen":"2026-09-14T08:27:54+02:00","lastCommitMessage":"feat(coding-agent): host-owned extension ctx timers (#2095)\n\n* feat(coding-agent): host-owned extension ctx timers\n\nctx.setTimeout/ctx.setInterval (+ clears) run callbacks through the\nextension error boundary and are cancelled on unload, so a throwing\nself-scheduled callback can no longer kill a daemon session worker.\n\nRefs RES-1315\n\n* docs(coding-agent): document ctx timers and use them in example extensions\n\nRaw global timers stay unsupported for scheduling extension work.\n\nRefs RES-1315\n\n* fix(coding-agent): retire replaced extension runners and neutralize fired timeout handles\n\nReview follow-ups: _buildRuntime rebuilds (/reload, runtime swaps) now retire\nthe old runner (stale ctx, timers cancelled) without staling the shared or\nreused runtime object, and a fired ctx timeout is cleared at fire time so\nhandle.refresh() cannot re-arm it outside host ownership.\n\nRefs RES-1315\n\n* fix(coding-agent): weakly track host timers and label replaced-session timer owners\n\nGlobally cleared ctx timers are dropped by GC instead of retained until\nunload; replaced-session contexts label their timers <session-replacement>;\nremoved the now-unused wrapToolDefinitions batch helper.\n\nRefs RES-1315\n\n* fix(coding-agent): scope runner retirement to extension-world restarts\n\nRuntime-only rebuilds (MCP set changes, heartbeat controller) keep the same\nextension load and never re-emit session_start, so retiring there cancelled\nextension timers with no re-schedule path. The replacement runner now adopts\nthe live timer registry on runtime-only rebuilds and retires the old runner\nonly when the extension world restarts. Also dropped the per-schedule WeakRef\nsweep (quadratic); dead refs are freed at unload, which iterates anyway.\n\nRefs RES-1315\n\n* fix(coding-agent): route adopted timers through the current timer host\n\nAdoption now hands over one shared timer-host object (registry + current\nowner): adopted callbacks report errors through the adopting runner (whose\nerror listener is live) and scheduling is gated on the current owner, so a\nctx captured before a runtime-only rebuild cannot arm work for an extension\nworld that a later reload has unloaded.\n\nRefs RES-1315\n\n* fix(coding-agent): coerce ctx timer callback results with Promise.resolve\n\ninstanceof Promise missed cross-realm promises and userland thenables, so a\nrejected thenable returned from a timer callback escaped the error boundary.\nPromise.resolve assimilates any thenable into the boundary catch. Handler\ninvocations already use await, which is thenable-safe.\n\nRefs RES-1315\n\n* chore(coding-agent): tighten timer comments and dedupe reload pin\n\nComments cut to one-line invariants; the standalone reload-cancellation test\nwas a strict subset of the MCP runtime-only rebuild pin, which already proves\nreload freezes adopted timers and gates stale scheduling.\n\nRefs RES-1315"},{"name":"todo.ts","kind":"file","size":8840,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"tool-override.ts","kind":"file","size":4499,"lastCommitHash":"4a7a55c9a1f053f0bc3500066c6a65b2d0ea4636","lastCommitWhen":"2026-05-08T15:34:55-07:00","lastCommitMessage":"make ipython default and remove legacy tools (#3)\n\n* chore: strip legacy tools\n\n* docs: remove stale read tool references"},{"name":"tools.ts","kind":"file","size":3766,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"trigger-compact.ts","kind":"file","size":1350,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"truncated-tool.ts","kind":"file","size":6403,"lastCommitHash":"4a7a55c9a1f053f0bc3500066c6a65b2d0ea4636","lastCommitWhen":"2026-05-08T15:34:55-07:00","lastCommitMessage":"make ipython default and remove legacy tools (#3)\n\n* chore: strip legacy tools\n\n* docs: remove stale read tool references"},{"name":"widget-placement.ts","kind":"file","size":367,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"working-indicator.ts","kind":"file","size":3426,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"},{"name":"working-message-test.ts","kind":"file","size":904,"lastCommitHash":"3e5ad67e0f325d4888f82f9b82966218eb4407f5","lastCommitWhen":"2026-05-07T15:59:42+02:00","lastCommitMessage":"chore: migrate pi packages to earendil works scope\n"}]