Commits
300 commits:
78878daechore(release): bump version to 2.1.2df25fa44test(integration): /goal set defaults to manual autonomy6f50b0affix(video_gen): inline file:// and artifact references for input_image9acb5316docs: describe the tool media policy in the custom-modules guidec913c274feat(frontend): honour the tool media policy and file references in previewsa8aa0d99feat(read): reference images in place instead of persisting a copyb8df9a53feat(api): serve raw workspace files for file:// media previews04dcddf2feat(llm): inline file:// media references at the provider boundaryed3bd514feat(tool): let tools declare a media policy for their resultsc6aae282fix(attach): drop duplicated drive keys from the stream metadata whitelistd544c36bfix(web): no creatures tab, count, or glow for a solo session20efe3f0feat(web): drives and creatures in the default layout8c1583b7feat(web): distinct panel names, hidden legacy aliases, picker descriptionsd8e7f175feat(api): start and stop a creature in place6a1db04afeat(cli,tui): create goals and walk creatures inside the drive panelsb085268efeat(web): reachable drives panel, per-creature groups, goal form5b564785fix(web): keep a saved layout preset and switch presets on the visible tab01a9a71efeat(ui): mark drive-triggered turns in every transcriptadc5ea67fix(goal): manual default, graph-wide list, resume that wakes0241ff22fix(drive): pause a drive when the user interrupts its turn99be04e2fix(drive): heal stale transactions instead of poisoning the connectionda051c03test: run the release-meta test on Linux and macOS only1953edebfix: preserve tool history across interrupt and edit reruns8139b048fix(test): run the release-meta step with this interpreter on PATH9272ad09fix(ci): stop release notes inventing contributors, and re-anchor nightlies1229aa72ci: make release the only workflow that builds or publishes66dce330fix(test): probe daemon liveness without signalling it on Windows58ddb565docs: describe the gated prompt system and the comment-density hook32e29430feat(prompt): gate every framework section and tier tool documentation5533eac7test: stop the real-config guard failing when a KT daemon is runningfc0e4bf8refactor(tools): move json_read / json_write out to examples785e66a6fix(packages): make kt update work for marketplace-installed packages692acd51feat(llm): add gpt-6-astra, context-window variants, and fix default@vars5fa494f6ci(nightly): derive the version from pyproject and publish to PyPI442bdefcfix(chat): supersede the pending lookahead on a scroll-triggered expansionc8225965fix(chat): anchor history-expansion compensation to a live message element816fc961fix(chat): fence history-expansion continuations after dispose or scope switch740ec873fix(launcher): run the first-launch splash on the main threadd201eabefix(cli_rich): persist provider-qualified default model656cc83afix(frontend): allow built-in presets to be set as default010cf121fix(api): resolve default-model requests to provider/namec28c4b6cperf(chat): auto-expand history on continuous upward scrollc80a8edctest(chat): split long-session panel coverage59a9ae78fix(chat): preserve pending message jumpsa8cf2076fix(tools): harden Codex subscription search898f0a22fix(chat): restore reachable long-session historyff4d25a8feat(tools): add Codex subscription web searchfd8b83e2fix(chat): preserve message bubble sizingc6632680perf(chat): reduce long-session dashboard stalls1381c27bfix(logging): keep KTLogger._log substitutable for Logger._log924868b6feat(logging): type structured fields on KTLogger level methods69da1f49fix(logging): copy caller-supplied extra instead of mutating it575ccccffix(llm): detect installed Grok CLI version36a04768fix(subagent): bound tool output before model injection37c2f988perf(chat): coalesce streaming scroll updatescf134389perf(markdown): defer highlighting open fences8f99d366perf(chat): linearize history replayd4aea897fix(ui): close remaining attention lifecycle gaps5a0af9fdperf(frontend): lazy-render full reasoning textb56e5410fix(ui): clarify desktop attention capabilities1a47cf46fix(ui): organize attention preferences15209521fix(frontend): preserve reasoning disclosure marker05adb5b9style(frontend): format reasoning preview changes3aa7851bfix(frontend): preview reasoning in collapsed rowsbdfe3b71fix(ui): close attention lifecycle gapsea7b61a7fix(ui): satisfy attention CI guardsc54bc1cffeat(ui): add opt-in external attention channelsc8d84371feat(ui): add cross-surface attention indicators29766c3dfix(session): skip tool feedback during metadata backfill94aaa63cchore(release): bump version to 2.1.1967c7962fix(frontend): open external links outside the desktop shell8c963920test(packaging): read pyproject.toml as UTF-8260bc507feat(ci): auto-cut a patch release when stable falls behind0299a1d7feat(ci): publish release notes as a plain commit list7b9f0025fix(ci): build desktop bundles against the wheel from the same runc3f6da2cfeat(sessions): surface sub-agent conversations across trace events2a55f56cfix(triggers): converge trigger snapshot before cancellable teardownf663c44bfix(triggers): persist resumable-trigger snapshot on removal446381fffix(session): preserve tool pairs during edit replayfb54dd56fix(llm): refresh GLM Coding Plan model catalog3baca4b6refactor(terrarium): split engine_cli TUI helpers below size cap84761d91fix(sessions): select ambiguous sub-agent conversationscd82389cfix(desktop): restore native window icons4352d02cfix(status): limit config identity to local sessions6c86fcffchore(ci): remove stale import allowlist entryc5070fc5perf(agent): reuse package metadata during buildsbfa41208perf(desktop): overlap backend and window startup42f10a6dperf(cli): defer terminal runtime importsc41d1ba8perf(web): defer runtime-only application importsc3e60db1perf(desktop): show loading shell before server startup9e617c56perf(startup): defer public and CLI importsb41f5536perf(startup): add opt-in startup tracing73b6d89efix(sessions): retarget sub-agent persistence on rename5574192dfix(sessions): open exact sub-agent conversationsf0bc13b0refactor(studio): extract remote roster metadataace23816fix(status): preserve creature config identityf979e90efix(options): reject non-finite numeric limitsf22c716dfix(frontend): avoid false default model failure54bbc7c8fix(budget): preserve system message orderinge564a3d4fix(llm): disable image generation for Codex Spark75a72dd0feat(llm): add Codex Spark subscription preset5ac63f79test: compare inline attachment paths structurallye6e13220fix: retain inline attachments for live sessionsf0606976fix: trust controller-owned inline attachmentsfbbd0371fix: surface background tool failures to models4b441900fix(desktop): upgrade pywebview to 6.2.147776f66fix(grok): resolve attached images from agent historybb69b6c5test(grok): cover subscription backend workflows1c88d6d7fix(grok): normalize image inputs for video6b053685fix(grok): refresh CLI credentials before expiry9b3aeb77fix(grok): harden subscription media integration4a5a2c76feat(grok): add subscription media support1053ca23fix(tui): show horizontal markdown scrollbarse4952f15fix(tui): show complete safe tool argumentsfd90a836test(ui): pin hint tooltip box sizingb7f5fce3fix(ui): wrap long hint tooltips within viewport466c0dd1fix(compact): honor yaml controls and clarify eager triggerddecdc50fix(ui): escape dynamic markup fragmentsbe8fe03bfix(cli): preserve foreign shim filesb51944d8fix(launcher): lock a stable update anchore22cf18dfix(cli): configure UTF-8 at startupb572ddaffix(cli): hide interactive API key input8c45da23fix(read): guard paths before type dispatche5a6be8cfix(frontend): cache model switcher inventorya102aeb9fix(tui): settle modal waits during shutdown5c4cf958fix(android): ignore callbacks after activity destroyde9c328afix(cli): report resume outcomes accurately92ed5ccbfix(cli): preserve serve restart lifecycleda180693fix(tui): target running jobs by content rowed8cfd34fix(bash): clean output files on spawn failurefc2027catest(write): skip POSIX mode assertion on Windows3b91f091fix(bash): clean complete raw output files91b86d19fix(write): replace files atomicallyd3897056fix(cli): reject conflicting session flags9cabefb9fix(cli): coerce heartbeat intervals as floats81a72dc7fix(cli): reject empty host token files155198a9test(android): keep release policy tables alignedd814cfe4fix(android): align version code with release versionaaf1e18efix(frontend): address reading size review feedback7c539514feat(frontend): add reading size controls9b84ff2dfix(frontend): improve subagent input contrastc1b2fb28fix(trace): page long-session turnsd6f68c10fix(prompt): clarify background task continuationa062d137perf(frontend): separate timeline geometry from metadatabc63b0f1fix(trace): preserve and classify tool failures8351ba63fix(frontend): ignore stale trace store loadsff3670e7test(controller): move registry import to module scope6798b562perf(frontend): rasterize trace timeline rendering7d879374perf(frontend): eliminate timeline hover style invalidationda7aeac7fix(subagents): require self-contained task contextd01e722fchore(release): bump version to 2.1.0299505bbfeat(subagent): add user-level model defaultscb62b8f6fix(frontend): advance reasoning cursor across rounds without reasoning9863edc2fix(frontend): keep multi-round chain-of-thought in arrival order5bffe175fix(sessions): address review findings on trace timeline6932f967fix(sessions): satisfy CI format guards for the trace timeline72968a45style: black-format timeline viewer files95f3a416feat(sessions): lane timeline with focus filtering, search, and virtualization in trace tab1f4f9dfefeat(sessions): expose ordered chain-of-thought in chat, trace, and inspector (#166)6f9dd699fix(frontend): settle tool call status indicators on terminal (#164)1330f24bfeat(plugins): add per-request tool catalog visibility contributions (#163)5078683bperf(session): make long-session persistence incremental (#161)f80cd066perf(frontend): fix long-session chat rendering degradation (#160)84f42cf5feat: add configurable DeepSeek web search backend (#157)57b345f3fix(bash): avoid serial lock head-of-line blocking (#155)f4d8e7befix(session): fix edit & rerun breaking history — restore turn metadata + branch-aware compaction (#112)08d389e1fix: refresh CLI state from current runtime (#148)42087302fix: isolate trace streams across view changes (#147)7ad27e94fix: roll back failed creature startup (#146)9b9ffebffix: enforce pwd guard for JSON tools (#145)ba6290cdfix(tui): refresh live slash command hints (#144)3c1088d7fix(cli): decode Kitty functional keys (#143)173b25d4fix(compact): enforce a target live-zone budget (#142)a7474885fix(goal): let operator users manage creature-owned goals (#141)bef1f9fefix(drive): guide goal creation and assignee transitions in tool docs (#140)a13c925dfix(cli): resolve virtualenv service scripts (#139)794a83b2fix(tui): route history and clean up inputs (#138)59d0d303fix(core): clean up executor task lifecycle (#137)dfd9d968fix(tools): initialize function tools (#136)879bc793fix(subagent): attribute same-name tool results to their own calls (#131)eac0b5abfix(bash): keep bash tool independent from user login shell (#129)d9c7e5bcFix per-creature Rich CLI turn state (#127)ad1bf0ecFix dynamic TUI tab lifecycle (#126)a458e000fix(cli): preserve multi-creature output routing (#122)60e833fafix(tui): make exit commands close the session (#121)dff77ca0fix(tui): render slash command results (#117)9d25c41ffix(terrarium): creature removal survives a closed drive repository (#114)f33f00a0fix(session): derive provider-safe tool name from job id on resume replay (#110)307da3a2feat(core): persist model/plugin selections across resume (#106)53a2a33efix(studio): self-heal stale closed session stores after graph merge (#108)9779c19erefactor(core): make tool-result elision a compact companion (#104)26afae26fix: address runtime logging and input regressions (#102)18a155f5fix(web): align slash interactions with chat UI (#95)cf08e55ffix(frontend): remove stopped creatures from live views (#94)03c22c6afix(session): preflight workspaces before resume (#92)5d429c22feat(core): bridge global mcp_servers.yaml into creature config (#101)42fd7035fix(core): make tool-output truncation/elision recoverable and context-aware (#99)5909b454fix(utils): root-directory workspaces no longer block every path (#97)13a5e14cfix(terrarium): make recipe application atomic (#88)bf074f9afix(ci): restore MCP v1 and file-size compatibility (#93)37dab981feat(studio): add open conversations rail (#91)041f1483feat(web): add slash command and skill completion (#90)c46e1409fix(session): rerun from canonical uncompacted message history (#89)66b13a4efix(terrarium): enforce graph-local routing identities (#87)224c8930fix(ci): restore deterministic cross-platform unit tests (#86)710da4c1add ws support for openai response api, fix preset gaps5db0146cfix python tool and bash tool issuebdfb4c72test(tui): settle-poll the drive-panel reload assertiona5d3bb27style(frontend): format chat.js00a9c50drefactor(terrarium): split runtime-option delegates out of multi_node_servicee04d8d1etest(terrarium): match the cancelled-stop stub to the stop(requested=) contract11ab7d79fix(frontend): reconcile branch operations safely08e29695fix(branching): align local and remote chat contractsbe7434e1fix(terrarium): stabilize idle creature lifecycle61e2ca11fix(core): drain deferred mid-turn events781586bfupdate CI/CD to avoid nightly flood16ae85caresolve regression caused by new graph persistence designe1b1a49eformatting and linting and dep graph resolution8578f340style(python): normalize source formatting54087a88fix(terrarium): refresh merge and split sessions37ced0a2feat(terrarium): resume graphs from manifests72fae3b6feat(terrarium): checkpoint graph mutations95a28dc8feat(terrarium): add live graph manifest model19f59593fix(lint): match dep-graph allowlist by function+target, not line9398392bredundant comment cleanupf3b10b6bredundant comment cleanup1ae1a7e1refactor(compact): remove the dead target configceb7adc0feat(core): elide stale tool results from controller context9e332daefix(frontend): route live frames to the root tab aliasb1a6bfe9fix(terrarium): banner group_send deliveries and unmix wire frame coordinatesa4ea8ffffix(frontend): drop the static sub-agent roster from the creatures rail16e5a62afeat(persistence): serve live-session reads through the engine-attached store4eca18e9fix(drive): open the legacy same-file probe immutable to protect live WAL state5921422dfix(frontend): reconcile queued chat and canonical history0bee039efeat(frontend): reuse the session viewer for live inspectioncc003c79fix(cost): include whole-graph and sub-agent usagebc8f311afeat(persistence): inspect live sessions through viewer routes4decb8e6feat(subagent): support per-child model selection8879bbc9feat(subagent): inspect and message live child runs2eab850dfeat(identity): fetch live Codex usage and redeem reset credits36f9f979fix(api): resolve creatures across clustered session graphs9e400965feat(cli): resume sessions in the selected terminal surface18619c9dfix(attach): route UI replies to the prompting creature0caa062dfix(tools): avoid blocking without an interactive respondere395b2a7fix(executor): relax impossible manual-read gatesb6db48eafix(session): preserve streamed text and cumulative usagee76b7b5dfeat(terrarium): add child spawning and warm lifecycle controls620a1cf0feat(core): serialize agent events through one inboxcfc4496cfix(terrarium): repair Drive split/merge lifecycle races (SQLite I/O + closed repo)94b7971dtest(e2e): align journey expectations to Drive-default-on behavior3f44ae04refactor(core,drive): keep agent.py and delivery.py under the file-size capbc919cc3fix(terrarium): derive creature is_running from status, not the input-loop flag195d7d87fix(ci): repair integration failures and raise macOS fd limit0dc070aafix(drive): honor direct goals and user interruptsb8191dfffix(drive): wake goals across runtime surfacescd72b630fix(tests): align drive defaults and idsdb20a530fix(drive): make goals and tools user-facingfbd073d6fix(drive): enable goals across product surfacesa7c49f2efix(tests): update compatibility warning coveragedf243e0efix(imports): remove terrarium initialization cycles6d7cc5f7feat(goal): enable goal plugin for terrarium creatures937aada3docs(drive): document commitments and verification439e1a6bfix(presets): drop unsupported ultra reasoning aliascb049c87fix(session-index): close vault tables through supported APIs5421fc94feat(lab): preserve drive errors across the wireace15649fix(commands): preserve principal context for slash commandsfd9b49b8feat(catalog): expose drive registration extensions09f0d966feat(frontend): add drive workspace and settings UIbb35d81cfeat(cli): expose drive management surfacesf8e532edfeat(goal): add drive-backed goal plugin and commands0652e47bfeat(studio): manage drive settings and session recordsf93c8fa9feat(drive): route commitments across laboratory nodesca588428feat(drive): integrate runtime with terrarium lifecyclec49e4545feat(drive): persist commitments with crash recovery864170fbfeat(drive): define durable commitment contracts118d8234fix(frontend): reconcile chat branches and background jobs6580e672fix(resume): recover missing workdirs across local and remote hostsf99f6a14fix(session): make resume and topology recovery transactionaldd183032fix(core): harden turn lifecycle and compaction656a0763Update presets for new models such as gpt5.6ca6d7313feat(cli): show per-creature models in agent overlay25b0c24ffix(tui): target active tab for model and module actions38093aa6fix(chat): scope model state to each creature tab8b33c616fix(ui-prefs): debounce backend sync and prune null keys66bd91a3fix CI issue45c939b8fix CI issue7162559ffix(frontend): stabilize chat input and tab focusf2c0c825fix(session): prevent concurrent session writers9aa85273feat(llm): support custom codex responses endpoints2cad7b1ffix(llm): inline local artifact image URLsbc6de71crefactor(config): share env interpolation helper19a233b8build: refresh pyproject packaging config32e4bd5ffeat(cli): add terminal shimsa9c1c12efeat(cli): add standalone cli and tui front doors225ea9ebfix(api): mount studio router under api prefixa98dd050fix API broken issueb8a3eca9docs(zh-TW): update v2 API documentationf967a4b2docs(zh-CN): update v2 API documentation4176651cdocs(internal): refresh subsystem README notes8499e085docs(api): update English v2 API docs
(list truncated)