Repository navigation
Release 0.7.0 - #40
Merged
Merged
Conversation
OpenCode 2 reads a model's limits from its entry under `providers`, and assumes 200,000 context and 32,000 output for one that says none. The provider enowX writes there carried only a name, so a session on a config with 1,000,000 context showed its footer against 200,000 (42.7K was 21%). Both counts go in together, as its schema requires them, with 1.x's defaults when a model gives only one, so both forms in the file agree. Co-Authored-By: Claude Code <noreply@anthropic.com>
OMP reads its providers and models from models.yml in its agent folder, and names the key as a variable rather than holding it. A config's sessions now get an agent folder of their own (PI_CODING_AGENT_DIR) holding that file, so the user's ~/.omp/agent is neither read nor written; OMP_SKIP_SETUP keeps a fresh folder from running its setup wizard first. Co-Authored-By: Claude Code <noreply@anthropic.com>
Retrieval only happened when a project's Context switch was on, and its query's embedding was never recorded: ragTokens ran only after an index, with the tokens Index() reported, so the usage page showed an index's calls and nothing of any prompt's search. core/rag now tells whoever built the engine about each request to the embedder as it happens, for an index and for a search, so both are counted and a failed batch that still cost tokens is not lost. The start-of-prompt hook searches every prompt of a session whose project is indexed: the switch is no longer read and the judge is no longer asked which parts bear on it. Consent still gates it, the four results and 6000 characters are kept, the search is bounded at 3 seconds, and a failed embedder falls back to the index's words, marked as such, with the reason kept in RAGStatus.ContextError and logged. Co-Authored-By: Claude Code <noreply@anthropic.com>
The switch "Give prompts the parts that bear on them" and the judge's use "RAG: context or not" no longer exist, so the Index tool and the settings' project details stop offering them: turning a project on now turns on only the memory offer, and the Index tool says every prompt gets four parts up to 6000 characters where its agent has a start-of-prompt hook. A failed prompt search shows there too, from RAGStatus.ContextError. Co-Authored-By: Claude Code <noreply@anthropic.com>
A tab created under an existing session copied its parent's lease verbatim and never asked the app for a credential, so a Claude Platform tab under a shell session held no agent key and the agent printed "no API key: add one in enowX (Settings, vault, platform anthropic)" although the vault had one. vaultSessionEnv now takes the account, and when a tab's own agent has a VaultPlatform and the lease holds none of that platform's key, it asks the app for it through the same proto.VaultSession path a new session uses (askSession), filtered to that platform's credentials. The parent's other credentials, env and secrets are copied unchanged, and the key lands only in the tab's agent-only channel. The lease also records the agent it was made for, so a restart or a switch hands it to the right agent; switchAgent, goaStartOnAgent and the GOA pre-flight now go through restartVaultEnv, which re-asks when another agent's key is wanted. Co-Authored-By: Claude Code <noreply@anthropic.com>
A team's one-time re-check (teamRecheck) marked itself done only after the last page, so a pull that timed out at ?after=869 after 3m27s started again from seq 0 at every refresh. An open chat asks every 5 s, so the daemon re-read the whole space, about 12 MB a request: 31.65 GB allocated by cloudclient.(*Client).Items, 100% of Client.call's allocations. The recheck now records the seq it reached (RecheckAt) before each page and marks itself done only once no page follows, and a chat's refresh within 3 s of a completed sync is answered from what that sync took. sync.conflicts was already fixed in 83f15e8; left alone. Co-Authored-By: Claude Code <noreply@anthropic.com>
The store read every day file into memory on the first scan and kept it: 45.6 MB of the Mac daemon's heap for 126,000 calls, when a week of summaries needs 333 rows. Only the last two days are held as calls now (hotDays); an older day is read from its file when a summary needs it and summed by everything a summary splits by, a few dozen rows. A summary's ends are read call by call, so a range cut mid-day stays exact, and the summed days are priced by a table key, so a changed price table sums them again. A call's ID is still remembered across days (whereDays), so one kept again on another day counts once. Every split, day row, budget and session badge adds up to the same figures the calls do. Co-Authored-By: Claude Code <noreply@anthropic.com>
The daemon's own memory is mostly one scrollback a session, and docs/performance.md measured 5 full ones at 65 MB at 10 MiB against 10 MB at 2 MiB: about 11 MB a full session, so 30 full sessions went from about 406 to about 76 MB. A long build's log is cut sooner; an agent's chat isn't affected, being read from its transcript. The doc now records the change and the three fixes as done, with what was measured and what is estimated: the scrollback number is from the scenario, the cloud pull and token store ones from the owner's Mac profile, not from a build of this branch. Co-Authored-By: Claude Code <noreply@anthropic.com>
A session took the newest transcript of its folder that changed after it was created. A new session spawned where an older one is at work so took that one's whole conversation, then kept its id, so resuming went on with it too. Claims on files didn't help: they are in memory, and first come. Being recently changed says nothing of whose a file is, so now: a session's own folder when it has one; a conversation known by id is that file alone (Claude Code's SessionStart names it, even before writing it); otherwise one that began after the session and no other session is on. The chat, resume, fork, transfer, handoffs and the model watcher all go by this. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
enowX typed /model and /effort into a running session. Claude Code 2.1.318 saves both in ~/.claude/settings.json as the default for new sessions, so switching one worker changed every later session's model. A new daemon method, session.settings, changes a session's model and effort by starting its agent again on its conversation with its flags, for agents whose commands save (Settings.SavesDefaults: Claude Code, Codex). Claude Platform's commands hold for its session, so it is still typed to. switch, the chat's composer, goa delegate and the board's Change model all use it, and Route.Switch no longer offers those commands. A restart is refused while the agent is at work or asking, when stopping would lose what it runs, and on a config, which decides its model. The transcript is read from where it stood at the switch, as it goes on naming the old model until the next answer. The permission mode isn't affected: Shift+Tab doesn't write the settings file. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude Platform, Project Docs, the community library at ui.enowx.ai, Claude Code always in bypass, RAG retrieval on every prompt, 2 MiB of scrollback and the memory work, a session's model switched on its own conversation, and the seven finished branches. Co-Authored-By: Claude Code <noreply@anthropic.com>
TestPlatformE2E looked for the agent's program, the sleep a tool ran, and the key on any command line by reading /proc, which macOS doesn't have, so its InterruptMidTool, HibernateWakeAndKill, MCP and SystemPrompt parts waited 20 seconds for a process they could never see. They go through core/procstat, which reads ps's processes on macOS and /proc on Linux. Co-Authored-By: Claude Code <noreply@anthropic.com>
fix/chat-own-transcript replaced transcript.FindIn with Find (an agent's default folder) and Stored (a session's own folder), and daemon/transcript.go reads one then the other. The package's test still called FindIn, so core/transcript didn't build and every job of the release's CI failed there. The test now asks the same two questions, so it still checks both places. Co-Authored-By: Claude Code <noreply@anthropic.com>
The test asserted that the first of two refreshes read the space, but the sync loop's own pull can end within pullEvery of it and answer both from what it took, so it read nothing and failed. It now asks again, past pullEvery, until a refresh really reads the space, then checks that the one right after it is answered from that read. What it asserts is unchanged: consecutive refreshes of one chat cost one read. Co-Authored-By: Claude Code <noreply@anthropic.com>
A session's turn ending now moves its task to turn-ended on the board (goaWorkerChanged), so the task the test added as working was no longer a task under way when hibernate() looked, and the session hibernated. The test waits for that move, then puts the task back as working, as one just typed into a session still saying done, and checks hibernation stays off it. Co-Authored-By: Claude Code <noreply@anthropic.com>
The check that hibernation stayed off could pass because the session still read as active rather than because of the task, so the test now also asks the plan to name that task. What it asserts is unchanged. Co-Authored-By: Claude Code <noreply@anthropic.com>
This was referenced Nov 5, 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.
Merges the seven finished branches and publishes 0.7.0.
Branches merged (no conflicts):
feat/omp-model-api,fix/opencode2-context-limit,fix/rag-retrieve-always,fix/platform-tab-key,fix/chat-own-transcript,fix/daemon-memory-mac,fix/switch-keeps-user-default.Version:
cmd/enowx/mygo.json0.7.0,version.String0.7.0, and theCHANGELOG.mdsection the update dialog and the release notes read.Protocol record:
proto/testdata/api.txtwas regenerated withgo test ./proto -run API -update; the hand edit was already correct, so the regeneration changed nothing.Fixes for
main's red CI (run 41923133123) come in their own commits, each a real fix rather than a weakened test.🤖 Generated with Claude Code