-
Notifications
You must be signed in to change notification settings - Fork 16
R1: chat actions on the durable engine #81
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
76 commits
Select commit
Hold shift + click to select a range
80fd8c8
docs(computer-use): approach - replicate the mobile-use stack on desktop
siddWednesday 3739d6e
docs(computer-use): build plan with dated timeline
siddWednesday 562f2ee
docs(computer-use): compress timeline for solo AI-assisted development
siddWednesday a9ac675
docs(computer-use): phase 0 shared-repo setup + mobile sequencing note
siddWednesday 34d0290
docs(computer-use): record decision status; break out the after-v1 mo…
siddWednesday 259095c
docs(computer-use): per-phase repo column + write-access dependency
siddWednesday eb96d1c
docs(computer-use): agent-browser rail, reuse list, brand guidelines,…
siddWednesday 0a4e563
feat(actions): transport-agnostic approval seam with risk classes
siddWednesday 2aa9411
feat(packaging): TCC usage strings for the computer-use semantic rail
siddWednesday 8f4cfc4
docs(computer-use): lock @offgrid/use package name (lead confirmed)
siddWednesday 614b79f
feat(actions): native helper invoker + EventKit calendar backend
siddWednesday acb0f0a
feat(actions): wire calendar tools into the chat loop, gated + shipped
siddWednesday 45b7283
feat(actions): add Reminders to the semantic rail
siddWednesday 85e88c2
feat(actions): add Contacts lookup to the semantic rail
siddWednesday 421b9df
feat(actions): add Messages and Mail send to the semantic rail
siddWednesday 0fde34b
feat(actions): add open_url to the semantic rail
siddWednesday c5205ec
build(mac): stage the native actions helper in local builds
siddWednesday 4fa6ec6
fix(actions): accept timezone-less local times in the helper
siddWednesday ab803db
Merge remote-tracking branch 'origin/main' into feat/computer-use
siddWednesday c5fb3c6
docs(computer-use): reframe around the proactive assistant model
siddWednesday 493212d
docs(computer-use): compress the plan to a 2-week sprint
siddWednesday 9c7b3e7
docs(computer-use): design brief for the proactive-assistant demo
siddWednesday 5f7bd02
docs(computer-use): ground the demo brief in the real app
siddWednesday ba3b95c
docs(computer-use): competitive + prior-art research
siddWednesday 50025ec
docs(computer-use): add PBD research blueprint + two sharper lessons
siddWednesday e94f6d9
docs(computer-use): make the demo brief match the real app + add evid…
siddWednesday 9926bca
docs(assistant): high-level act-pipeline architecture + decisions + o…
siddWednesday 11d9bd5
docs(assistant): name the actuation layer 'the rails' (canonical)
siddWednesday 6644d4b
docs(assistant): add the brain-and-rails component diagram (ports and…
siddWednesday 1329fe7
docs(assistant): TRD/PRD diagrams - C4 sys arch, swimlane, user flows
siddWednesday ed8ba94
docs(assistant): fold C4/swimlane/user-flow diagrams into the archite…
siddWednesday 6f7780a
docs(assistant): reshape plan to release-led + Windows from day 1
siddWednesday 27d01bb
docs(assistant): make it a 12-day plan (Windows heavy-rail parity as …
siddWednesday 40fd7cc
docs(assistant): port-from map (incl. mobile) + shorten to a 10-day plan
siddWednesday 6dc8c01
docs(assistant): deep port-vs-bespoke research map across the whole s…
siddWednesday a2d65a3
docs(plan): name the specific ports per release (from PORTING_MAP)
siddWednesday acb9699
docs: sanitize the assistant doc set; crown the plan as the build doc
siddWednesday db3185b
docs(r1): execution checklist - 19 commit-sized boxes with done-when …
siddWednesday c24ff46
feat(use): consume @offgrid/use from the shared sibling (R1 box 1)
siddWednesday 1b43ed3
docs(r1): tick box 1 - @offgrid/use scaffolded and consumed
siddWednesday b91dbc5
chore(use): record @offgrid/use's zod dependency in the lock
siddWednesday 6621b93
docs(r1): tick box 2 - the Action contract is in; box 1 wording match…
siddWednesday 84deb91
chore(use): record @offgrid/use's xstate dependency in the lock
siddWednesday b8c89b8
docs(r1): tick box 3 - the lifecycle machine is in with crash-resume …
siddWednesday fa345b8
chore(use): lock refresh for @offgrid/use manifest
siddWednesday bfc7a12
docs(r1): tick box 4 - the durable queue is in; Day 1 of R1 complete
siddWednesday 3372941
chore(use): record @offgrid/use's @noble/hashes dependency in the lock
siddWednesday 1c2eeac
docs(r1): tick boxes 5 and 6 - retry policy and the bound gate are in
siddWednesday 85f23ac
docs: three fixes from external review - offline scope, escalation ru…
siddWednesday cf68106
docs(r1): tick box 7 - the port, the registry, and the effect journal…
siddWednesday 5ad4f4b
docs(porting): evaluate OpenWorkflow - right shape, wrong storage, st…
siddWednesday 0b4538e
docs(r1): tick box 8 - the engine checkpoint passes; Day 2 of R1 comp…
siddWednesday 260a05a
feat(actions): the use-engine storage adapter on the app database (R1…
siddWednesday f19caf9
docs(r1): tick box 9 - the engine runs on the app database
siddWednesday 9189ee7
feat(actions): the semantic rail behind the DeviceController port (R1…
siddWednesday 894bb4e
docs(r1): tick box 10 - the semantic rail is mapped and guarded
siddWednesday be3bfcd
feat(actions): the gate host - the engine's approval callback on the …
siddWednesday 2363fa5
docs(r1): tick box 11 - the gate host bridges the engine to the appro…
siddWednesday 92d4a37
feat(actions): emission hardening - schema wire, SAP repair ladder, b…
siddWednesday 01a49fa
docs(r1): tick box 12 - emission hardening is in
siddWednesday 78d6827
feat(actions): chat mutations run through the durable engine (R1 box 13)
siddWednesday 3cc40b6
docs(r1): tick box 13 - chat mutations are durable; app-testable on m…
siddWednesday e216c4f
feat(tools): assistant actions are Tools, on by default; Connectors s…
siddWednesday 2b023f9
feat(actions): read-back verification - done means observed (R1 box 14)
siddWednesday e1b5f9d
docs(r1): tick box 14 - read-back verification is live
siddWednesday 15021fc
test(e2e): the R1 golden path - a chat ask becomes a durable, verifie…
siddWednesday 51f2b39
docs(r1): tick box 15 - golden-path evidence captured and validated
siddWednesday 35f2320
fix(test): green the suite in core-only + Electron-hosted environment…
siddWednesday cdd4aba
fix(test): await startModelServer before fetching it - a scheduling race
siddWednesday 0fc8c9c
test(actions): close the new-code coverage gaps - all four floors met
siddWednesday 7da5867
chore(pro): stop tracking six pro test files that belong to desktop-pro
siddWednesday 32d7147
ci(win): windows-build checks out shared; both workflows build @offgr…
siddWednesday 58340a7
feat(actions): the Windows semantic rail - local Outlook first (R1 bo…
siddWednesday 9a7f212
docs(r1): tick box 16 - the Windows CI build of this branch is green
siddWednesday e83198a
fix(tools): break the tools <-> extension-select cycle structurally
siddWednesday 763439e
docs(plan): the re-cut - R2 is full rails + Approval UX v2; reasoning…
siddWednesday File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
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
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
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
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,118 @@ | ||
| # The proactive assistant - build plan and timeline | ||
|
|
||
| Companion to `COMPUTER_USE.md` (the product model), `ASSISTANT_ARCHITECTURE.md` (the system design), and `PORTING_MAP.md` (the port-vs-bespoke research). | ||
|
|
||
| > **This is the doc to build from.** Work release by release, top to bottom: a release is not done until its checkpoint passes, and the next release does not start until it does. The other three docs are references. Adjust the plan here at each checkpoint; never fork a second plan. | ||
|
|
||
| **Re-cut (August 14, 2026 - the lead's steer + R1 field feedback).** The release after R1 is **all four rails, chat-driven, on both platforms**, plus the approval UX rebuild the R1 pro-path test demanded. The reasoning engine (proactive) and routines move after it. R1 itself is done: 17/19 checklist boxes, both PRs open and green (OGAD #81, shared #4). | ||
|
|
||
| **Standing assumptions** | ||
|
|
||
| - Solo developer, AI authoring the code end to end. | ||
| - Release-led: each release is a real, demoable, shippable increment. Desktop = macOS + Windows. | ||
| - **Port the plumbing, build the product** - each release names its ports (all MIT / Apache-2.0 / BSD, all in-process); the full map is `PORTING_MAP.md`. | ||
| - **Offline scope, stated precisely.** The brain runs with zero network on every platform. An action whose effect lives on an external service needs that service reachable at execution time - so the rails prefer local apps whose writes land locally and sync later (EventKit / Mail on macOS, local Outlook on Windows), and online-only actions are labeled honestly. | ||
| - **Reliability rules the router must honor** (architecture doc, Section 4): effect-verification lives in the engine; a cross-rail escalation is a re-fire under the same retry policy - a non-retryable action never escalates. The DeviceController routing is a thin layer over these. | ||
| - Checkpoint discipline: a checkpoint is a verifiable, demoable milestone. | ||
|
|
||
| ## Build guidelines (standing, all releases) | ||
|
|
||
| - **Design** - `off-grid-ai/brand` `DESIGN_PHILOSOPHY.md`: brutalist/terminal, Menlo, emerald-only accent, black/white base, hierarchy by size and weight not color, no gradients, no emojis. All values from `@offgrid/design` tokens. Desktop density per `docs/DESIGN.md`. | ||
| - **Copy** - `off-grid-ai/brand` `brand_tone_voice.md` + outcomes-first: no em dashes, no curly quotes, no exclamation marks, banned-word list applies. | ||
| - **Cross-platform from the seam.** Callers depend on the `DeviceController` port and the shared engine, never on a concrete OS. | ||
| - **Port before writing.** Check `PORTING_MAP.md` / `COMPUTER_USE.md` Section 9 first; verify the license at the point of adoption; honor the AGPL / source-available avoid-list. | ||
|
|
||
| ## Releases | ||
|
|
||
| | Release | What ships | Status | | ||
| | --- | --- | --- | | ||
| | **R1. Chat actions on the durable engine** | The semantic rail in chat on macOS (reminders, calendar, messages, mail, open, lookups) through the `@offgrid/use` engine: durable queue, payload-hash gate, retry-once-with-verify, read-back verification, effect journal. Windows toolchain green (installer artifact); the Windows semantic rail (local Outlook COM) built behind the port. | **Done.** PRs: OGAD #81, shared #4. Record: `R1_CHECKLIST.md` | | ||
| | **R2. Full rails in chat, both platforms + Approval UX v2** | Windows chat exposure; the browser rail (watched web tasks, takeover at login); the vision rail (supervised GUI actions, UI-TARS-1.5-7B); the approval experience rebuilt (inline in chat, outcome feedback, risk-tiered auto-run); the safety pass. ~5-6 working days. | **next** | | ||
| | **R3. Notices you** (was R2) | Reasoning + resolve + gate: commitment/gap detection over Replay, memory-resolved slots with confidence, the proactive Day surface. Cross-platform (memory + LLM). Pro-side code lands in desktop-pro (access in place). ~3 days. | after R2 | | ||
| | **R4. Routines** (was R3) | Record-by-showing + self-healing, per-step-verified replay (OpenAdapt design). macOS-first; the Windows UIA adapter as the fast-follow (napi-rs over the `uiautomation` crate + SendInput, Terminator head-start). ~2-3 days + fast-follow. | after R3 | | ||
|
|
||
| The split: `shared` holds the durable cross-platform brain (`@offgrid/use`, reused by mobile later); this repo holds the rails, surfaces, and product integration; pro business logic lands in `desktop-pro`. | ||
|
|
||
| ## R1 - chat actions on the durable engine (DONE) | ||
|
|
||
| Shipped scope, guarantees, and evidence live in `R1_CHECKLIST.md` and the PR bodies. Merge order: **shared #4 before OGAD #81** (main's CI resolves `@offgrid/use` from shared main). The release DISPATCH waits for R2 per the re-cut - one versioned release ships both. | ||
|
|
||
| **R1 field verdicts driving R2** (from the pro-path smoke test): | ||
|
|
||
| - Approving a card gives no completion feedback - the chat message says "pending" forever and nothing reports the run. (The engine path already reports verified outcomes; the legacy pro path is the old system.) | ||
| - Reversible simple actions (a reminder) should not need a human gate at all. | ||
| - Chat-originated approvals belong INLINE in the conversation, not on a separate screen; the Actions screen's job is unattended actions (proactive, scheduled) plus the audit log. | ||
|
|
||
| ## R2 - full rails in chat, both platforms + Approval UX v2 (~5-6 days) | ||
|
|
||
| Everything chat-drivable on both OSes, honestly tiered, with an approval experience that reads like a conversation instead of a queue. | ||
|
|
||
| ### A. Windows chat exposure (~1 day) | ||
|
|
||
| - Per-platform tool specs: win32 exposes the engine-routed set the Outlook rail supports (calendar_create_event, reminders_create, mail_send, open_url); reads stay macOS-only until the Outlook read verbs land. | ||
| - A win32 inline runner for open/navigate; the engine path handles mutations end to end (the rail shipped in R1). | ||
| - Outlook read-back verifiers (list verbs mirroring the mac ones) so Windows gets verified outcomes too. | ||
|
|
||
| ### B. Approval UX v2 (~1-1.5 days, core + desktop-pro) | ||
|
|
||
| - **Inline approval card in chat**: resolved values + Approve / Edit / Reject in the conversation flow, driven by the engine gate (`resolveActionGate`). The Actions screen remains the queue for unattended actions plus the audit log. | ||
| - **Outcome feedback everywhere**: approve -> the engine executes -> the verified result lands back in the chat turn and on the card ("Created - verified", or the honest failure). This is the pro approval-executor migration: pro's queue resolves the engine gate instead of running its own executor, so payload binding and verification hold on the pro path too. | ||
| - **Risk-tiered gating** (decision 8.3's lean, now policy): reads/navigate free; reversible mutations (reminder, calendar) auto-run with a verified confirmation and an Undo affordance; sends and irreversible actions keep the gate. | ||
|
|
||
| ### C. The browser rail (~1.5-2 days) - cross-platform on arrival | ||
|
|
||
| - Embedded pane over Electron's `webContents.debugger` (raw CDP): **nanobrowser's** TS dom module + overlay as starting code, **browser-use's** snapshot + AX-merge + numeric-index as the algorithm, **Stagehand's** act/observe/extract + Zod as the API. | ||
| - Chat-drivable web tasks (check-in, ordering) - watched live, takeover at any login/identity step, gated at the identity boundary. | ||
|
|
||
| ### D. The vision rail (~1.5-2 days) - the supervised tier, labeled so | ||
|
|
||
| - **UI-TARS-1.5-7B** catalog entry (Apache-2.0, GGUF + mmproj published; a ~5GB download via the Models screen); **OmniParser v3** (MIT) set-of-marks fallback for the bundled model. | ||
| - The operator spine from **@ui-tars/sdk** (nut.js swapped for **@nut-tree-fork**/robotjs); mac input via CGEvent, Windows via SendInput. | ||
| - Supervised UX: the ScreenMarker-style overlay, pause-on-user-input, the kill switch (Esc halts with the keypress consumed). | ||
| - The WhatsApp file-share recipe as the showcase (behind the gate). | ||
|
|
||
| ### E. Safety pass + the release | ||
|
|
||
| - Injection-resistance review (screen content is untrusted input), kill-switch e2e, per-rail verification depth honored, release-readiness checklist. | ||
| - **Checkpoint / release dispatch:** on macOS AND Windows - a semantic action, a watched web task with takeover, and a supervised vision action all run from chat, gated by tier, with verified outcomes reported inline. One versioned release: the signed/notarized .dmg + the Windows NSIS .exe (unsigned until the cert - decision open with the lead). | ||
|
|
||
| **R2 risks:** the vision tier on a 7B local grounder is best-effort - ship it labeled supervised or not at all; Windows browser/vision needs a human on a real Windows machine (CI proves builds, not clicks); the model download adds a Models-screen surface; Approval UX v2 touches the live chat surface (the R1 lesson stands - behavior tests per branch, the plain path untouched for non-action turns). | ||
|
|
||
| ## R3 - notices you (was R2, ~3 days) | ||
|
|
||
| Scope unchanged: commitment and gap detection over the Replay observation + entity spine; the resolve layer (RAG over memory returning value + confidence); proposals surfacing on the Day feed and executing through the same engine and inline approval UX. Ports: sqlite-vec (inside the app DB), LlamaIndex.TS memory blocks, Mem0's dedup loop, Orama hybrid ranking; techniques: HippoRAG PageRank, bi-temporal facts, the WSDM commitment rubric. Pro-side code (reasoning, resolve policy, feed UI) lands in desktop-pro. Checkpoint: on a seeded profile, on both OSes, an un-actioned commitment surfaces and "send the deck I promised" resolves from context and runs, gated by tier. | ||
|
|
||
| ## R4 - routines (was R3, ~2-3 days + the Windows fast-follow) | ||
|
|
||
| Record-by-showing + faithful replay per the OpenAdapt design (compiled-step schema, resolution ladder, postconditions, repair-as-diff); Playwright codegen for the browser lane; memory-resolved variable slots; the plain-language review UI. macOS AX-as-eyes with actuation capped at press/set-value; the Windows UIA adapter (reader + SendInput) as the fast-follow. Checkpoint: record a routine once; it replays per-step-verified with a slot resolved from memory at run time. | ||
|
|
||
| ## Dependencies | ||
|
|
||
| | What | Needed by | Note | | ||
| | --- | --- | --- | | ||
| | shared #4 merged before OGAD #81 | now | main's CI resolves `@offgrid/use` from shared main | | ||
| | Windows signing cert | R2 release | wiring exists (WIN_CSC_LINK secrets); publishes unsigned until then | | ||
| | A human on a real Windows machine | R2 | browser/vision click-through + the model-load smoke (`WINDOWS_TEST_PLAN.md`) | | ||
| | UI-TARS-1.5-7B GGUF + mmproj catalog entry | R2-D | the vision model install | | ||
| | desktop-pro access | R2-B, R3 | in place (cloned at pro/) | | ||
| | Seeded memory fixtures | R3 | detection + resolution tests without a live profile | | ||
| | OpenAdapt trace/replay port + the `axuielement` napi addon | R4 | the recorder + the mac AX read | | ||
|
|
||
| ## Risks | ||
|
|
||
| | Risk | Mitigation | | ||
| | --- | --- | | ||
| | Vision reliability (the frontier ceiling) on a local 7B | supervised tier, labeled; cheapest-rail-first routing; set-of-marks fallback; the gate on everything consequential | | ||
| | Approval UX v2 touches the live chat surface | behavior tests per branch; the plain path stays untouched for non-action turns | | ||
| | The Windows human-testing gap | recorded dependency; release notes honest about machine-verified vs human-verified | | ||
| | Solo schedule | releases independently valuable; scope trims at the tail (the vision showcase, Windows polish), never the shipped core | | ||
|
|
||
| ## Out of scope (unchanged) | ||
|
|
||
| The mobile adapter (post-v1: Appium/WebdriverIO + DroidRun Portal + GUI-Owl-1.5/Qwen3-VL), background/headless autonomous runs, store distribution. | ||
|
|
||
| ## Tracking | ||
|
|
||
| - R1 record: `R1_CHECKLIST.md`. R2 gets its own checklist when it starts. | ||
| - Small commits per verified unit, merge not squash. PR evidence rules apply. | ||
| - Checkpoint review against this doc at each release; plan changes are edits here. |
Oops, something went wrong.
Oops, something went wrong.
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The new shared-repository checkout uses mutable
actions/checkout@v4while receivingCI_CROSS_REPO_TOKEN, leaving branch packaging credentials and installer output exposed to an upstream tag repoint; pin this step and its fallback to the immutable checkout SHA already used inrelease.yml.How this was verified: The changed checkout steps pass
CI_CROSS_REPO_TOKENtoactions/checkout@v4, while the equivalent release steps use a full commit SHA.