diff --git a/docs/plans/README.md b/docs/plans/README.md index d969171a5..c8f19262e 100644 --- a/docs/plans/README.md +++ b/docs/plans/README.md @@ -2,14 +2,14 @@ This directory is the source of truth for Aiden's implementation plans. The engineer changing a plan owns its status row and should update it in the same change when a meaningful milestone lands. -Last refreshed 2026-10-19 against `main` at `4eb30658` (0.58.0 release). "On main" means merged after 0.58.0 and not yet in a release. +Last refreshed 2026-10-20 against `main` at `126c2dd1` (0.59.0 release). "On main" means merged after 0.59.0 and not yet in a release. Research addition 2026-10-03 against `main` at `3f86d41af` (0.52.0): [all-PR inventory and improvement audit](aiden-pr-improvement-audit-20261003.md), [implemented Aiden knowledge/actions MVP (PR #312)](https://github.com/sambitcreate/aiden-agent/pull/312), and [json-render research and interactive chat controls specification](aiden-chat-controls-json-render-research.md). The implemented MVP includes desktop, iOS, Android and CLI TUI controls. This adds research and the bounded implementation; older release-status rows have not been globally reconciled. The Pi 1.0 stack (#299–#307) merged through PR #357 (Pi 1.0.3, 0.54.0), main pinned Pi 1.2.0 in 0.57.0 (PR #471) and now pins Pi 1.3.0 (PR #505, 0.58.0); only the frozen legacy journal harness stays on 0.87.1. ## Active and partial - [Built-in Aiden knowledge and app actions](aiden-app-knowledge-actions-plan.md) — Merged in [PR #312](https://github.com/sambitcreate/aiden-agent/pull/312) (2026-10-15); shipped in 0.57.0. Physical release acceptance remains open. Bundled offline help and owned skill, real json-render desktop cards, native iOS/Android paired-host controls and Pi CLI selectors/admin commands. Remote revision 19, explicit owner consent, domain gates, replay receipts and registered behavioral tests. Built on Pi 0.87.1 public APIs and merged onto main's Pi 1.2.0 pins; wider actions remain separate follow-ups. [Contract research](aiden-chat-controls-json-render-research.md). -- [Interactive visuals on phones](phone-visual-viewer-plan.md) — In progress (2026-10-16) on `claude/project-thread-jxkc0z`. Owner chose tap to open: phones keep the inline snapshot and open a visual full screen in a locked-down web view served by the Mac (`GET /chats/{chatId}/visuals/{visualId}/document`, Remote revision 35 provisional, `chat-visual-viewer-v1`). Covers `render_ui` and `render_artifact`; follow-ups confirm on the phone and only fill the composer. +- [Interactive visuals on phones](phone-visual-viewer-plan.md) — Merged in [PR #514](https://github.com/sambitcreate/aiden-agent/pull/514) (2026-10-19); desktop host side shipped in 0.59.0, phones need a new TestFlight/Android build. Owner chose tap to open: phones keep the inline snapshot and open a visual full screen in a locked-down web view served by the Mac (`GET /chats/{chatId}/visuals/{visualId}/document`, Remote revision 35, `chat-visual-viewer-v1`). Covers `render_ui` and `render_artifact`; follow-ups confirm on the phone and only fill the composer. - [Quick View cards](../superpowers/plans/2026-10-15-quick-view-cards.md) — Merged in [PR #487](https://github.com/sambitcreate/aiden-agent/pull/487) (2026-10-15); shipped in 0.57.0. Quick View becomes Claude-Code-style stacked cards (Environment, Changes, Context, Subagents) at `SidebarListItem` density. - **Behaviour:** cards start collapsed and reorder by a right-edge grip. Each has three tiers: a summary, inline detail, and an open-in-sidebar or open-external button. - **Visibility:** cards and rows appear only once relevant. Changes needs work or a PR, the PR row needs a created PR, Context needs the first message, and Subagents needs a run started. @@ -55,7 +55,7 @@ Research addition 2026-10-03 against `main` at `3f86d41af` (0.52.0): [all-PR inv | Plan | Status | Current state | | -------------------------------------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [Workspace Artifacts](workspace-artifacts-plan.md) | In review | Plan written and built 2026-10-19 in PR #554 (all five phases, each reviewed); user guide in [docs/workspace-artifacts.md](../workspace-artifacts.md). Persistent, interactive Aiden UI pages owned by a workspace, shown in an **Artifacts** tab of the Environment panel (offered in the tools launcher) that appears only once an artifact exists. Built on the `render_ui` catalog, with host-run data sources (shell commands and workspace files) under the chat's own workspace permission, a `workspace_artifact` agent tool, and a built-in skill. Desktop (macOS and Linux) only for v1; no CLI, phone or Remote protocol change. | +| [Workspace Artifacts](workspace-artifacts-plan.md) | Implemented | Plan written and built 2026-10-19 in PR #554 (all five phases, each reviewed), merged 2026-10-19 and shipped in 0.59.0; Playwright e2e coverage is a follow-up; user guide in [docs/workspace-artifacts.md](../workspace-artifacts.md). Persistent, interactive Aiden UI pages owned by a workspace, shown in an **Artifacts** tab of the Environment panel (offered in the tools launcher) that appears only once an artifact exists. Built on the `render_ui` catalog, with host-run data sources (shell commands and workspace files) under the chat's own workspace permission, a `workspace_artifact` agent tool, and a built-in skill. Desktop (macOS and Linux) only for v1; no CLI, phone or Remote protocol change. | | [Cache-first loading states](cache-first-loading-states-plan.md) | Active | Plan approved (2026-10-17) with desktop read snapshots, recent-chat prefetch and queued sends. iOS Home (I1) and cache-first chat open (part of I2) shipped in PR #516 (merged 2026-10-17). Audits every blank or text-only loading state on iOS, Android and the desktop renderer, and proposes one rule: saved data first, shaped skeletons only for a true first read, empty only when confirmed, quiet connection status. Starts with the iOS home screen, which hides cached Recents behind "Connecting to Aiden Agent…". No Remote protocol change. | | [Aiden CLI](aiden-cli-plan.md) | Active | Merged to main in PR #121 (2026-09-26) and shipped in 0.50.0 on pinned Pi 0.87.1; now pinned to Pi 1.3.0 (PR #505, 0.58.0). Phases 0–6 implementation complete; macOS/Linux CLI (57 tests each), Linux native helpers, complete shared subagent suites, root TypeScript/lint, and Android client checks pass. Physical iPhone acceptance is pending an unlocked device. Phase 6 delivered QR remote pairing, scheduled-run notifications (mobile push + desktop), shared desktop memory, daemon autostart, and prebuilt binaries; see the [checklist](aiden-cli-parity-checklist.md). | | [Simulator Devices](simulator-devices-plan.md) | Partial | Phases 0–7 merged in PR #252 (2026-09-26) and shipped in 0.50.0 behind `AIDEN_EXPERIMENTAL_DEVICES`; on by default on macOS from 0.55.0 (2026-10-07), with `AIDEN_EXPERIMENTAL_DEVICES=0` as the kill switch. Environment **Simulator** tab plus `device_*` agent tools, ported from T3 Code (MIT, `1c127066`). Consent-gated pinned `expo-device-hub@0.12.0` + `agent-device@0.21.12`; token-authenticated loopback proxy. Phases 0–3 done (spike, flagged tab shell, main-process toolchain/host/proxy/service/IPC, live stream viewer with controls and screenshot-to-chat; `test:devices` 96 pass; fake-hub Electron E2E; real-Mac acceptance passed). Phase 4 (agent `device_*` tools), Phase 5 (simulators on paired Macs over Aiden Remote; [plan](simulator-devices-phase-5-peers.md)) and Phase 6 (procedural 3D device frames; [plan](simulator-devices-phase-6-3d.md)) done. Phase 7 done: Settings → **Simulator** (consent switches, pinned/installed helper versions, prune, remove installed tools) and [`docs/devices.md`](../devices.md); onboarding coverage is a follow-up now that the flag defaults on. Agent guidance prefers `device_*`/`agent-device` for the watched device but allows shell `xcrun simctl`/`xcodebuild`/`adb` for builds, installs, logs, port forwarding, and diagnostics (T3 #13908; PR #263, 0.51.0). Remaining: real-Mac acceptance for Phases 4–6 (the flag was defaulted on before it). Android emulators and SSH hosts shipped with the [T3 parity upgrade](simulator-devices-t3-parity-plan.md) (PR #391, 0.55.0). | diff --git a/native/subagent-shell-runner/setsid-fixture.c b/native/subagent-shell-runner/setsid-fixture.c index 20680e204..e86c62b3e 100644 --- a/native/subagent-shell-runner/setsid-fixture.c +++ b/native/subagent-shell-runner/setsid-fixture.c @@ -24,7 +24,7 @@ static long long monotonic_ms(void) { static int await_publication(int fd) { long long started = monotonic_ms(); if (started < 0) return 0; - long long deadline = started + 1500; + long long deadline = started + 1000; for (;;) { long long now = monotonic_ms(); if (now < 0 || now >= deadline) return 0; @@ -41,11 +41,11 @@ static int await_publication(int fd) { int main(int argc, char **argv) { if (argc != 2 && argc != 3) return 64; - unsigned int detach_delay = 0; + long detach_delay_ms = 0; int stall_publication = 0; if (argc == 3) { - if (strcmp(argv[2], "--delay-detach") == 0) detach_delay = 1; - else if (strcmp(argv[2], "--stall-detach") == 0) detach_delay = 3; + if (strcmp(argv[2], "--delay-detach") == 0) detach_delay_ms = 200; + else if (strcmp(argv[2], "--stall-detach") == 0) detach_delay_ms = 3000; else if (strcmp(argv[2], "--stall-publish") == 0) stall_publication = 1; else return 64; } @@ -59,7 +59,8 @@ int main(int argc, char **argv) { close(ready[1]); close(grant[0]); // Stay in the command until detachment and PID publication are confirmed. - // Bound the wait below the shell test's existing two-second deadline. + // Bound the wait to half the shell test's two-second deadline, leaving + // the other half for process startup on a loaded runner. int confirmed = await_publication(ready[0]); close(ready[0]); unsigned char allowed = 1; @@ -78,7 +79,10 @@ int main(int argc, char **argv) { } close(ready[0]); close(grant[1]); - if (detach_delay) sleep(detach_delay); + if (detach_delay_ms) { + struct timespec delay = {.tv_sec = detach_delay_ms / 1000, .tv_nsec = (detach_delay_ms % 1000) * 1000000L}; + while (nanosleep(&delay, &delay) < 0 && errno == EINTR) {} + } if (setsid() < 0) _exit(71); pid_t second = fork(); if (second < 0) _exit(72); diff --git a/package-lock.json b/package-lock.json index 9a7cbc22a..f782a7b2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "aiden-agent", - "version": "0.58.0", + "version": "0.59.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "aiden-agent", - "version": "0.58.0", + "version": "0.59.0", "hasInstallScript": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 592a164a5..dd88669ce 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aiden-agent", - "version": "0.58.0", + "version": "0.59.0", "private": true, "description": "A desktop AI workspace agent for local and hosted models", "keywords": [ diff --git a/prebuilt/native/darwin-universal/manifest.json b/prebuilt/native/darwin-universal/manifest.json index b50cab278..2c575d90b 100644 --- a/prebuilt/native/darwin-universal/manifest.json +++ b/prebuilt/native/darwin-universal/manifest.json @@ -16,7 +16,7 @@ }, "subagent-shell-runner": { "sha256": "cdf992e9a63d104577a27c0ddc2833fdd50bb65c123c925a4ff73a15f0dfb18e", - "source": "6679af2569fb7fea609dce1eedf99059481256f0e57c2bd7946aa59194d70575" + "source": "4dbcd343b4f0c0546f7a64b21d67c3115d29f50128e03c02d9ca149cc62b8cb7" }, "subagent-file-mutator": { "sha256": "44b6f97501f6a1fd77a214c97d79c96422c145b52ce85706ca13cf7a3b73fa9a", diff --git a/prebuilt/native/linux-arm64/manifest.json b/prebuilt/native/linux-arm64/manifest.json index 2895273fd..b3ad91d1e 100644 --- a/prebuilt/native/linux-arm64/manifest.json +++ b/prebuilt/native/linux-arm64/manifest.json @@ -16,7 +16,7 @@ }, "subagent-shell-runner": { "sha256": "e400f70cf0e118b28a0028917f72beb36be3349af6ade0c9d5adc8c75981f644", - "source": "6679af2569fb7fea609dce1eedf99059481256f0e57c2bd7946aa59194d70575" + "source": "4dbcd343b4f0c0546f7a64b21d67c3115d29f50128e03c02d9ca149cc62b8cb7" }, "subagent-file-mutator": { "sha256": "3f877ba4817854a5e520130da35a8a9580800823f32107da0823a75d1c694337", diff --git a/prebuilt/native/linux-x64/manifest.json b/prebuilt/native/linux-x64/manifest.json index 1b519a2aa..8345f4c99 100644 --- a/prebuilt/native/linux-x64/manifest.json +++ b/prebuilt/native/linux-x64/manifest.json @@ -16,7 +16,7 @@ }, "subagent-shell-runner": { "sha256": "190ea6353dc8e26a137cafd718df76238dc23a8134535fa61c044863cc025c48", - "source": "6679af2569fb7fea609dce1eedf99059481256f0e57c2bd7946aa59194d70575" + "source": "4dbcd343b4f0c0546f7a64b21d67c3115d29f50128e03c02d9ca149cc62b8cb7" }, "subagent-file-mutator": { "sha256": "878bf58134892ba9f2b00c743fd1bc04fe3728db141e6941767c6393c79bde98",