diff --git a/CHANGELOG.md b/CHANGELOG.md index 64fed11..53529cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,31 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.6.0] - 2026-09-23 + +### Added + +- Channels can opt into Session presentation, per-channel Default/Comfy/Compact density, and Default/By active ordering without changing the underlying conversation model. +- Board now uses authoritative operational lanes—Working, Needs you, Scheduled, Failed, and Complete—with idle and archived sessions kept in collapsed history. +- Messages expose a direct Copy action, and ordinary Work Log steps show user-local timestamps. +- Native vision sends supported human image uploads to compatible models as image content and lets resident agents inspect workspace images through the bounded `view_image` tool. +- Clients record the user's IANA time zone so agent invocations receive both user-local time and the exact UTC instant. + +### Changed + +- Thread navigation is latest-intent-wins, deduplicates duplicate destinations, paints bounded cached snapshots immediately, loads channel and thread data concurrently, and server-paginates long threads while preserving the visible anchor when older replies load. +- Board and thread listings use lightweight bounded payloads so large channels avoid unnecessary database, transfer, and browser work. +- Provider cache policy is applied after the actual route is selected. Claude receives reusable stable and rolling breakpoints; ChatGPT and xAI receive stable thread-scoped cache keys; provider usage is normalized into cache reads, cache writes, uncached input, and logical input. +- Embedded ReRouted advances to 0.5.15 with bounded model validation, Claude Code 2.1.280 OAuth compatibility, cross-turn Claude cache reuse, and valid atomic serialization of parallel Claude tool results. + +### Fixed + +- Reader-controlled conversation and Work Log scrolling remains stable through live updates, sidebar changes, message expansion, reconnects, foreground recovery, and growing streamed replies. +- Stopping or cancelling a running scheduled wake authoritatively cancels its durable follow-up, prevents finalization from re-arming it, and keeps cancellation controls visible while it runs. +- Manual provider model tests time out cleanly instead of remaining indefinitely in a testing state. +- Photon outages no longer restart the entire 1Helm service. +- Saved channel density is authoritative on rendered session cards. + ## [1.5.0] - 2026-09-06 ### Added diff --git a/config/module-budgets.json b/config/module-budgets.json index 5829b35..ba7c6cb 100644 --- a/config/module-budgets.json +++ b/config/module-budgets.json @@ -6,37 +6,30 @@ }, "legacy": { "lines": { - "src/client/app.ts": 3672, - "src/client/channel.ts": 1202, - "src/client/cowork.ts": 879, - "src/client/routing.ts": 864, - "src/client/settings.ts": 812, - "src/server/agents.ts": 1353, - "src/server/bots.ts": 2189, + "src/client/app.ts": 3907, + "src/client/channel.ts": 1056, + "src/client/cowork.ts": 878, + "src/client/routing.ts": 821, + "src/server/agents.ts": 1347, + "src/server/bots.ts": 2176, "src/server/channel-computers.ts": 2217, "src/server/db.ts": 1158, - "src/server/index.ts": 2284, - "src/server/routing.ts": 1303 + "src/server/index.ts": 2334, + "src/server/routing.ts": 1247, + "src/server/store.ts": 808 }, "fanIn": { - "src/client/api.ts": 11, - "src/client/dom.ts": 9, + "src/client/api.ts": 12, + "src/client/dom.ts": 10, "src/server/agents.ts": 10, - "src/server/db.ts": 30, + "src/server/db.ts": 32, "src/server/store.ts": 9 }, "fanOut": { - "src/server/bots.ts": 23, - "src/server/index.ts": 33 + "src/server/bots.ts": 24, + "src/server/index.ts": 35 }, "cycles": [ - [ - "src/client/app.ts", - "src/client/channel.ts", - "src/client/cowork.ts", - "src/client/settings.ts", - "src/client/term.ts" - ], [ "src/server/bots.ts", "src/server/followups.ts" diff --git a/docs/VISION.md b/docs/VISION.md index 39eea60..1bcfa33 100644 --- a/docs/VISION.md +++ b/docs/VISION.md @@ -41,6 +41,17 @@ sole visual home for recurring work and its chronological run history; workflow runs do not spill into Chat, Board, or Threads, while each run remains a normal interactive thread when opened. +## Session presentation and operational truth + +Channels may opt into Session mode without changing navigation or information +architecture. The same Chat tab, sessions, order, content, labels, colors, and +thread behavior remain; only top-level Chat rows receive a compact bordered-card +presentation. Turning the mode off restores the standard Chat presentation. + +Board uses operational states for every channel, regardless of Session mode. +Runtime records—not generated prose or the ambiguous database `open` value—own +Working, Needs you, Scheduled, Failed, Complete, Idle, and Archived. + ## Honest model usage A thread's primary token indicator answers how much input context the latest model call processed, not how many repeated prompt-token encounters accumulated across an agent loop. 1Helm calculates this itself from the structured messages and tool schemas it sends, using one stable provider-neutral approximation. Cached is the unchanged leading context shared with the preceding call; output counts response text and tool-call payloads received by 1Helm; calls count successful invocations. These product metrics never depend on provider usage reports. Lifetime output and model-call count remain cumulative because they represent newly generated work and actual invocations; cumulative prompt traffic is never presented as the size of a conversation. diff --git a/package-lock.json b/package-lock.json index 89da80c..54ecb95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "1helm", - "version": "1.5.0", + "version": "1.6.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "1helm", - "version": "1.5.0", + "version": "1.6.0", "hasInstallScript": true, "license": "AGPL-3.0-only", "dependencies": { @@ -29,7 +29,7 @@ "@codemirror/lang-sql": "6.10.0", "@codemirror/lang-yaml": "6.1.3", "@excalidraw/excalidraw": "0.18.1", - "@gitcommit90/rerouted": "github:gitcommit90/rerouted#e200e457ad2c6abe17f8f6c2e00d8026ea027e09", + "@gitcommit90/rerouted": "github:gitcommit90/rerouted#df7fd909f2f0d499f7d3e4657df93b780c3837ac", "@opencoredev/loginwithchatgpt-server": "^0.2.0", "codemirror": "6.0.2", "docx": "9.7.1", @@ -1675,8 +1675,9 @@ "license": "MIT" }, "node_modules/@gitcommit90/rerouted": { - "version": "0.5.14", - "resolved": "git+ssh://git@github.com/gitcommit90/rerouted.git#e200e457ad2c6abe17f8f6c2e00d8026ea027e09", + "version": "0.5.15", + "resolved": "git+ssh://git@github.com/gitcommit90/rerouted.git#df7fd909f2f0d499f7d3e4657df93b780c3837ac", + "integrity": "sha512-rhrSbpWZXbEevlR9LredPBUMlOj4TTH32RJlWbjDezzK4/EKFmWYiIb1BdEzz6MfqKJqPnN/pdyBBK4j8LAecg==", "license": "MIT", "bin": { "rerouted": "src/cli/index.js" diff --git a/package.json b/package.json index 5916f7f..27891cf 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "1helm", "productName": "1Helm", - "version": "1.5.0", + "version": "1.6.0", "private": true, "type": "module", "license": "AGPL-3.0-only", @@ -87,7 +87,7 @@ "@codemirror/lang-sql": "6.10.0", "@codemirror/lang-yaml": "6.1.3", "@excalidraw/excalidraw": "0.18.1", - "@gitcommit90/rerouted": "github:gitcommit90/rerouted#e200e457ad2c6abe17f8f6c2e00d8026ea027e09", + "@gitcommit90/rerouted": "github:gitcommit90/rerouted#df7fd909f2f0d499f7d3e4657df93b780c3837ac", "@opencoredev/loginwithchatgpt-server": "^0.2.0", "codemirror": "6.0.2", "docx": "9.7.1", diff --git a/public/index.html b/public/index.html index 1eb785f..b6940b6 100644 --- a/public/index.html +++ b/public/index.html @@ -30,10 +30,10 @@ document.querySelectorAll('meta[name="theme-color"]').forEach(function (m) { m.setAttribute("content", color); }); })(); - +
- +