Repository navigation
Releases: LandonDev/temp-code
Releases · LandonDev/temp-code
Release list
TempCode 1.0.219
TempCode 1.0.218
TempCode 1.0.217
TempCode 1.0.215
TempCode 1.0.214
TempCode 1.0.212
TempCode 1.0.210
TempCode 1.0.205
TempCode 1.0.202
- The inbox no longer says "No issues or pull requests" while its first fetch runs, and the rail's inbox dot lights only for items that wait on the user. Loading:
loadingwas!githubLoaded, which flips as soon as the stored snapshot comes back from github.inbox, even one that has never been fetched (fetchedAt null, no repos) or has no rows yet for a workspace's repo, so the list fell through t - README rewritten for the public repo: it opens with two download badges (the stable TempCode-arm64.dmg alias from the latest release, and the releases page), says what TempCode is in a paragraph and four bullets (providers, thread types, workspace, the built-in Aliax Accounts and Stats pages), keeps the install requirements (Apple silicon, macOS 12+, the agent CLIs signed in, git, JDK 21+ for Ja
- The Aliax Accounts and Stats pages left the middle sidebar standing: the store and App.tsx already treated accountsPage as a full-window view like search, inbox and notes, but Sidebar.tsx's visibility rule never looked at it, so the aside (sessions, files, changes) stayed beside the page in both layouts. The rule now lives in src/renderer/src/chrome/sidebarVisibility.ts as a pure function the Si
- release:publish uploads the artifacts under the names electron-builder actually writes: mac.artifactName is ${productName}-${version}-${arch}.${ext}, so the zip is TempCode-1.0.N-arm64.zip, not the -arm64-mac.zip Aliax's script expected, and the first publish (1.0.200) stopped at "no matches found" after a successful build and notarization and had to be finished by hand; the dmg's blockmap now r
TempCode 1.0.200
- The installed app's TypeScript language server ran as Electron-as-node and died: vtsls.js was spawned as process.execPath with ELECTRON_RUN_AS_NODE=1, which only works while the runAsNode fuse is on (dev); the packaged build turns that fuse off on purpose (a leaked ELECTRON_RUN_AS_NODE must not break the app), so the child booted a second TempCode, the single-instance lock killed it, and lsp.sta
- temp-code is ready to distribute: the repo is public at github.com/LandonDev/temp-code (every blob in the history was scanned for tokens, keys, OAuth blobs and Keychain dumps first and came up clean; .gitignore now covers .temp-code/, artifacts/, src/main/server/media/ and release/), the Mac build is signed and notarized (electron-builder.yml: hardened runtime, the Developer ID Application ident
- The gh listing paths are gone: the renderer's per-project list fetch and its 30-second memory cache (fetchInboxItems, listInboxItems, peekLastInboxList and the rest of the list cache, githubRepo, listGithubWorkItems, formatGithubQuery, the rail-project helpers and collectInboxResults in githubTasks.ts), the git_github_repo and git_github_work_items commands in native.ts, and the server's githubW
- Inbox filters and rows group by workspace: the filter menu (rows built by the pure inboxFilterMenuRows in src/renderer/src/lib/inboxFilterMenu.ts, so a test reads them) gains a Mine section on the GitHub tab, Authored by me / Assigned to me / Review requested as any-of checkboxes computed against the snapshot's viewer, stored as mine: { authored, assigned, reviewRequested } (an older assignedToM
- The inbox opens from the stored snapshot and the rail dot is right at launch: a new renderer store (src/renderer/src/lib/inboxStore.ts, connected in main.tsx beside workspaceStore) reads github.inbox once when the socket opens (SQLite on the server, never GitHub) and holds the only path to the network, refreshGithub, which InboxView alone calls: on open when the stored snapshot is older than a m
- The inbox fetches every GitHub workspace in one GraphQL pass and keeps the snapshot in SQLite: 24 repos, 60 points, 6,543 ms, 6 requests, one gh spawn (bun run script:e2e-github-inbox against the real ~/IdeaProjects checkouts). GithubInbox (src/main/server/githubInbox.ts) reads the token once through
gh auth token(ghAuthToken / forgetGhToken in github.ts, cached per process, dropped on a 401 - Workspaces know their GitHub repo: every git workspace row carries owner/name read from its origin remote in .git/config (gitRemote.ts: a worktree's .git file is followed through gitdir and commondir to the shared config; github.com over https, git@ and ssh:// map to a slug, any other host is null) with no process spawn, stored on new nullable workspaces columns github_repo and github_repo_check
- The rail's "Working" panel and the workspace shimmer stop counting threads that finished long ago: archiving a live thread (the planning thread a new implementation thread auto-archives in create()) now settles its row idle. interrupt() only asked the handle to stop and left the closing idle to its stream, and dropHandle() disposed that handle right after — a disposed claude handle stays mute,
- Research boards show evidence, and chats know a research job when they see one: a cite_source app tool (src/shared/research.ts; in-process for claude sessions inside a research tree only, over the stdio bridge for codex, app.citeSource on the WS) records the page or file an explorer read and the one-line claim it supports; a url the agent already fetched or read through curl gets the claim on it
- Research threads keep what their explorers find: every subagent spawned inside a research thread gets an app-assigned findings file beside the root's report (/.temp-code/reports//-.md, carried in its planPath, named as findingsFile in the spawn result and list_agents) with a fixed contract appended to its brief — write it early with frontmatter, evidence for every c
- Agents show HTML pages inline in threads (T3 Code's html_preview / html_render, ported): a Claude or Codex thread can build one self-contained page (chart, table, diagram, collage, mockup), check it with html_preview — a PNG screenshot, contentHeight and the page's console output with page.html:N locations, rendered in a hidden offscreen BrowserWindow on its own partition that only reaches pub
- The error banner's Continue can restart every stopped thread on another model: a chevron beside Continue / Continue all opens "Continue as" with the model picker and effort control, and Continue there switches each errored thread in the tree (errored subagents too) before its continue turn. The same provider keeps the conversation; another provider gets the transcript handoff a composer switch u
- A thread no longer sits on "Watching" behind a background task the model has forgotten: once a task is ten minutes old and a whole turn went by without the model touching it, the driver asks the model in one short hidden turn ("Checking background tasks" in the transcript) to stop what it no longer needs with TaskStop or say it is still waiting; a stopped task retires at once and the thread sett
- Threads no longer stay on "Watching" after the model says it is done: the driver now settles on the CLI's own in-flight task list, not a task level that can go stale. drivers/claude.ts trusted system/background_tasks_changed alone for the live set; in a CosmicPrisons thread the CLI stopped sending that level mid-session while fifteen more tasks started and reported, so two ids from the last leve
- A planning thread that wrote its plan and then ended its turn on a background wait reads "Plan ready" again, not "Watching". Since v184 a thread whose turn ends with a live Monitor, cron or run_in_background Bash settles as
watchinginstead of idle; usePlanReady only peeked the plan file of idle planning threads, and TabIndicator rendered the watching branch before the planReady one, so such a - A zen turn no longer shows the same line twice, once dimmed as a thought and once in white as the paragraph. Some harnesses mirror a reasoning summary as the very next assistant message word for word; groupTurnItems (transcriptActivity.ts, repeatsNextProse) now drops a reasoning block whose whitespace-normalised text equals the next non-empty assistant block, so only the white paragraph renders.
- Zen transcripts read like the Claude app: the model's prose never folds. Every assistant paragraph renders full size where it streamed, interleaved with the work, and each run of tool calls between two paragraphs (or before the first, or after the last) folds into one dimmed row titled by the calls themselves ("Read 3 files · Searched for tokens", "Ran the tests (1 failed)"), present tense whil
- An account refresh pass no longer holds the loop ~2.2 s every snapshot. After v189, each snapshot still re-picked 224 idle Claude threads between two accounts with near-equal headroom, and every moved row bumped the sessions version, so notifyMeta rebuilt the whole 3,190-row session index once per row. expectAccountsUnder (refreshAccounts and scope-pin changes) now holds the pass's meta pushes i
- The app no longer freezes for ~16 s at a time (beachball, window unresponsive) since v185. Every accounts snapshot change (the gateway nudges one on each observed response) runs refreshAccounts over every open thread, and each thread's routeFor asked registry.liveLoad, which read the whole sessions table: 1,778 threads x 3,190 rows per pass, back to back while threads stream, all on the main loo
- Streamed events cost less main-thread time: SQLite commits at synchronous=NORMAL, the threads index reads 4 KB per mirror instead of whole files, and every known synchronous section reports itself to stalls.log when it runs long.
- The server no longer re-reads and re-indexes every session row on each meta push: the session index is cached per sessions-table version.
- The sidebar, title bar, rail and Archive page do less work per session push: O(1) workspace lookups, a title bar that ignores streamed frames, one seen-mark a second, a dock badge on meta change only, and archived threads a page at a time.
- Session pushes from a running fleet cost one re-render per frame instead of one per push, and no longer flush the event batch early.
- New Fable threads spread across accounts by 5h headroom and live thread count instead of stacking on one account until its 5h window blows; the Fable window now moves on every response and a Fable-window 429 is charged to Fable, not Weekly; sign-outs from two refreshers racing on one token stop; every logged 429 names its account and model. Bumps aliax-core to d71cea3 (orderByReset takes load/ca
- Stalls are now recorded: a multi-second freeze on a thread or page switch leaves a line in /logs/stalls.log saying what was in flight, how many pushes streamed, and how many threads ran.
- Threads waiting on background work now show "Watching" instead of looking done, keep their process alive until the work lands, wake visibly, and take queued subagent reports in one turn. A Claude thread that ended its turn with a run_in_background Bash, a Monitor, a CI poll or a session cron used to read as idle, get its process (and the tasks with it) killed by the 10-minute idle sweep, and str
- Codex 0.156+ sign-in through the gateway no longer fails with "workspace routing discovery failed". Bump aliax-core to 0359612: Codex now calls accounts/check before every turn (and at the end of the ChatGPT app's Codex sign-in), addressed as /api/codex/accounts/check against a base without a /backend-api marker, and splitPath used to forward that to chatgpt.com/backend-api/api/codex/accou
- Zen mode no longer hides the answer that comes before a question. groupTurnItems (transcriptActivity.ts) treated only the trailing run of prose as the answer, so when the model wrote a long reply and then asked (an AskUserQuestion i...