Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ The roadmap is maintained in [the plan index](docs/plans/README.md). These bulle
- **Design Studio and Create Images** - early work exists behind the default-off `AIDEN_EXPERIMENTAL_DESIGN_STUDIO` and `AIDEN_EXPERIMENTAL_CREATE_IMAGES` flags. The former Designer Mode flow (select UI in a local Vite app, request a bounded change, approve, review the diff) is now phase DS-4 "Connected app", and its Phase 0 go/no-go gate is a DS-4 entry criterion. See the [Design Studio + Create Images plan](docs/plans/design-studio-create-images-rebuild-plan.md).
- **Provider completion** - Pi built-in discovery, encrypted credentials, provider-owned authentication, native streaming, validated pi.dev catalog overlays with an offline cache, custom provider composition, canonical assistant provenance, and voice credential lookup already ship. Remaining work is scalable large-catalog UX and rollout cleanup. See the [Pi Provider Integration](docs/plans/pi-provider-integration-plan.md) plan.
- **Truthful generation progress notes** - no progress-note runtime exists yet. The plan would show one temporary acknowledgement after an otherwise-silent start, using an explicitly selected on-device or verified hosted route without exposing hidden reasoning. See the [Generation Progress Notes plan](docs/plans/generation-progress-notes-plan.md).
- **Long-session context** - model-aware compaction with Pi-native checkpoints, crash recovery, visible compaction activity, and busy-composer Steer/Queue already ship. Remaining work includes durable-versus-working memory separation and provider-native compaction paths. See the [Compaction](docs/plans/compaction-plan.md) and [Pi Compaction and Durable Memory Upgrade](docs/plans/pi-compaction-memory-upgrade-plan.md) plans.
- **Long-session context** - model-aware compaction with Pi-native checkpoints, crash recovery, visible compaction activity, compaction when you return to a large chat whose prompt cache expired (automatic with pi-vcc, a "Compact first?" prompt with LLM compaction), and busy-composer Steer/Queue already ship. Remaining work includes durable-versus-working memory separation and provider-native compaction paths. See the [Compaction](docs/plans/compaction-plan.md) and [Pi Compaction and Durable Memory Upgrade](docs/plans/pi-compaction-memory-upgrade-plan.md) plans.
- **Simulator devices** - on macOS, the Environment **Simulator** tab streams and controls iOS Simulators and Android Emulators on this Mac, a paired Mac, or an SSH host, with optional procedural 3D frames and consent-gated `device_*` agent tools. On by default since 0.55.0; `AIDEN_EXPERIMENTAL_DEVICES=0` is the kill switch. Remaining work is real-Mac acceptance for agent tools, paired Macs and 3D frames. See [Simulator devices](docs/devices.md).
- **Whole-app performance, durability, and battery gates** - atomic/recoverable chat storage and several bounded lifecycles already ship. The broader program still needs production-equivalent baselines, recovery and hard bounds across the remaining stores and payloads, zero-idle Git/renderer scheduling, cancellable heavy helpers, and enforceable packaged release budgets. See the [Performance, Stability, Battery, and Efficiency plan](docs/plans/performance-stability-efficiency-plan.md).

Expand Down
2 changes: 1 addition & 1 deletion docs/chatgpt-desktop-ui-inspiration.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ labels recorded usage. Appearance can hide the meter without hiding the tool.
| Card layout | Each section is its own borderless raised card with a title, a chevron after the label, a trailing summary while collapsed, and a header button left of a right-edge grip. There is no `+` menu: cards start collapsed and appear only when relevant. | The grip shows on hover and keyboard focus. Drag it, or press ArrowUp or ArrowDown on it, to reorder; a polite status announces the new position. Order and the cards the user opened persist on this device. A card that appears mid-session fades and scales in; Reduce Motion removes the motion. |
| Folder | The first Environment row shows the workspace folder and its parent, with a preferred-editor action when one is installed. Its card header offers an open-external button that reveals the folder in Finder (Files off macOS). | The row opens Files on this workspace. Open failures surface as a toast. The row is disabled without file access and absent when the workspace has no folder. |
| Pull request | A Changes row names the chat's pull request number and state (open, draft, merged, closed). It appears only once a pull request exists for this chat, and there is no Create PR button. | Activating it opens the pull request on GitHub. A merged pull request without a title is named by its branch. |
| Context | A card that appears after the first message. Collapsed, it shows the percentage beside a 10-pip meter, the same one the composer uses. Expanded, 100 tiles lay out the whole context window, each tile 1% of it: used tiles colored by category, then free space, then the hatched response reserve. Below, each category has its own row with tokens and a bar relative to the largest one, followed by quieter Reserved, Free and deferred rows. | Deferred MCP tools are marked "not counted", since they only count once used, and a fold lists them per server. A soft status pill covers compaction. For models whose provider documents a fixed prompt cache lifetime (Claude, OpenAI GPT-5.6 and later, Kimi K3, MiniMax M2, Copilot), a countdown shows how long the cache stays warm after the last request; providers that only give a range show none. Without a breakdown it falls back to Messages and System prompt & tools. The header button opens the Context tool in the sidebar, which shows the same tiles as a square beside the bars, next to Session and Recorded usage cards. |
| Context | A card that appears after the first message. Collapsed, it shows the percentage beside a 10-pip meter, the same one the composer uses. Expanded, 100 tiles lay out the whole context window, each tile 1% of it: used tiles colored by category, then free space, then the hatched response reserve. Below, each category has its own row with tokens and a bar relative to the largest one, followed by quieter Reserved, Free and deferred rows. | Deferred MCP tools are marked "not counted", since they only count once used, and a fold lists them per server. A soft status pill covers compaction. For models whose provider documents a fixed prompt cache lifetime (Claude, OpenAI GPT-5.6 and later, Kimi K3, MiniMax M2, Copilot), a countdown shows how long the cache stays warm after the last request; providers that only give a range show none. Once that cache has expired on a chat over 100K tokens, the composer's status row offers "Compact first?" with a dismiss button when LLM compaction is selected; pi-vcc compacts on return instead and shows its usual compacting status. Without a breakdown it falls back to Messages and System prompt & tools. The header button opens the Context tool in the sidebar, which shows the same tiles as a square beside the bars, next to Session and Recorded usage cards. |
| Subagents | A card that appears once the chat has started a subagent and stays for the session. Collapsed, it summarizes active and finished runs. Expanded, runs are grouped Running, Needs attention, Failed, Stopped and Completed. | Completed starts folded behind one disclosure row. Active foreground runs reveal Stop on hover or focus. A row opens that run, and the header button opens the Subagents tool in the sidebar. |

### Review panel states
Expand Down
2 changes: 2 additions & 0 deletions docs/plans/compaction-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ The delivered boundary includes append-only private chat journals, current-turn-

The broader plan intentionally remains Partial. The production-driven [Pi compaction compatibility follow-on](completed/compaction-reliability-plan.md) removed Aiden-only checkpoint acceptance rules so the adapter matches the audited Pi upstream 1:1, and added persisted safe provider-failure categories. Durable cross-task memory, semantic identifier/latest-request audits, provider-native compaction, replay benchmarks, rollout telemetry, and per-model policy tuning remain later work rather than being implied by the completed Pi parity delivery.

Update 2026-10-20: returning to a chat whose prompt cache has expired now compacts it when the next request would carry at least 100K tokens. Returns are opening the chat, bringing the window back, or starting to type, and they count only once the cache has lapsed; a draft does not count toward the 100K. The pi-vcc engine compacts on its own because it makes no model call; the LLM engine shows a "Compact first?" offer in the composer instead. Each cache window is handled at most once, remembered across restarts, and Aiden does not compact idle chats before expiry, since keeping a 5-minute cache warm costs more than it saves. Expiry comes from the same lifetime as the Context panel countdown (`main/services/prompt-cache-lifetimes.ts`). Desktop chats only; Bots, paired-Mac chats, phones and the CLI are unchanged.

I treated **“Py” as Pi**, and I also included **PydanticAI**, because its newer tiered-compaction design captures many of the best ideas in one framework.

The strongest approach is **not** “summarize the entire conversation when the window is full.” The better architecture is a **layered, transactional context-management pipeline**:
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@
"test:provider-failure": "tsx --test main/services/provider-failure.test.ts",
"test:web-search": "tsx --test main/services/web-search.test.ts main/services/web-search-core.test.ts main/services/web-search-exa-core.test.ts main/services/web-search-provider-registry-core.test.ts main/services/web-search-provider-registry.test.ts main/services/web-search-credential-core.test.ts main/services/web-search-auth-reuse.test.ts main/services/web-search-rollout.test.ts main/services/web-search-wave1-adapters.test.ts main/services/web-search-wave1-ai.test.ts main/services/web-search-wave2-batch-a.test.ts main/services/web-search-wave2-batch-b.test.ts main/services/web-search-wave4-batch-a.test.ts main/services/web-search-wave4-batch-b.test.ts main/handlers/web-search-contract.test.ts renderer/components/settings/web-search-settings.test.tsx renderer/lib/settings-section.test.ts main/services/web-search-key-pool-core.test.ts main/handlers/web-search-key-pool.test.ts renderer/components/settings/web-search-key-pool.test.tsx",
"test:concentrate": "tsx --test main/services/concentrate-provider.test.ts",
"test:compaction": "npm run test:vcc && tsx --test main/services/memory-shared.test.ts main/services/pi-runtime-events.test.ts main/services/pi-cache-warming.test.ts main/services/pi-agent-runtime-harness.test.ts main/services/pi-codemode.test.ts main/services/context-pressure-tools.test.ts main/services/pi-tool-discovery.test.ts main/services/bounded-json.test.ts main/services/pi-compaction-core.test.ts main/services/pi-legacy-session.test.ts main/services/pi-session-migration.test.ts main/services/pi-session-v4-upgrade.test.ts main/services/pi-session-port.test.ts main/services/context-lifecycle-service.test.ts main/services/context-lifecycle-surface-matrix.test.ts main/services/telegram/telegram-session.test.ts main/services/generation-emergency-outcome.test.ts main/services/pi-runtime-effect-store.test.ts main/services/generation-context.test.ts main/services/prompt-cache-lifetimes.test.ts main/services/memory-store.test.ts main/services/memory-context.test.ts main/services/memory-surface-matrix.test.ts main/services/pi-upgrade-evaluation.test.ts main/services/subagents/agent-compatibility.test.ts renderer/lib/ipc-stream.test.ts renderer/main/chat-transition.test.tsx main/services/pi-journal-fork.test.ts main/services/fork-summary-service.test.ts renderer/components/settings/compaction-budget-settings.test.tsx",
"test:compaction": "npm run test:vcc && tsx --test main/services/memory-shared.test.ts main/services/pi-runtime-events.test.ts main/services/pi-cache-warming.test.ts main/services/pi-agent-runtime-harness.test.ts main/services/pi-codemode.test.ts main/services/context-pressure-tools.test.ts main/services/pi-tool-discovery.test.ts main/services/bounded-json.test.ts main/services/pi-compaction-core.test.ts main/services/pi-legacy-session.test.ts main/services/pi-session-migration.test.ts main/services/pi-session-v4-upgrade.test.ts main/services/pi-session-port.test.ts main/services/context-lifecycle-service.test.ts main/services/context-lifecycle-surface-matrix.test.ts main/services/telegram/telegram-session.test.ts main/services/generation-emergency-outcome.test.ts main/services/pi-runtime-effect-store.test.ts main/services/generation-context.test.ts main/services/prompt-cache-lifetimes.test.ts main/services/memory-store.test.ts main/services/memory-context.test.ts main/services/memory-surface-matrix.test.ts main/services/pi-upgrade-evaluation.test.ts main/services/subagents/agent-compatibility.test.ts renderer/lib/ipc-stream.test.ts renderer/main/chat-transition.test.tsx main/services/pi-journal-fork.test.ts main/services/fork-summary-service.test.ts renderer/components/settings/compaction-budget-settings.test.tsx renderer/lib/expired-cache-return.test.ts",
"test:compaction:packaged": "node --import tsx scripts/pi-session-packaged-restart-acceptance.mjs",
"test:compaction:evaluate": "node --import tsx scripts/pi-upgrade-evaluation.mjs",
"pi-upgrade:advance": "node --import tsx scripts/pi-upgrade-advance.mjs",
Expand Down
Loading
Loading