summaryrefslogtreecommitdiffhomepage
path: root/tasks.md
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-06-25 12:22:41 +0900
committerAdam Malczewski <[email protected]>2026-06-25 12:22:41 +0900
commit54db4583e66134010375a1fa94256f36034ffdff (patch)
treeec0bcd395d365741ed18e160f9b5842233051ba2 /tasks.md
parent0b154bdad4f75a091db3ca46424abd17fbbc23ff (diff)
downloaddispatch-54db4583e66134010375a1fa94256f36034ffdff.tar.gz
dispatch-54db4583e66134010375a1fa94256f36034ffdff.zip
feat(ssh): wave 1 — ExecBackend + computer data model + runtime threading
Wave 1 of transparent SSH support (parallel owner-agents on disjoint packages, plus the orchestrator-authored kernel contract seam from wave 0): - packages/wire: + Computer/ComputerEntry (read-only view over ~/.ssh/config Host aliases) + Workspace.defaultComputerId (string|null, null=local). Types only; 3 conformance tests. - packages/exec-backend (NEW core extension): the ExecBackend abstraction (spawn + minimal fs surface) the bundled tools will program against instead of node:fs/child_process. LocalExecBackend wraps today's node calls (behavior-identical; node:fs-style .code errors). execBackendHandle + ExecBackendResolver (sync; computerId undefined -> local; set -> throws until the ssh package wires remote resolution in wave 5). 20 tests. - packages/kernel (runtime only): thread computerId through dispatch.ts + run-turn.ts exactly as cwd is threaded (opaque, forwarded to ToolExecuteContext; absent = local = byte-identical to today). +2 tests. - packages/conversation-store: computer (SSH alias) assignment + resolution mirroring cwd — WorkspaceRow.defaultComputerId + setWorkspaceDefaultComputerId + getComputerId/setComputerId/clearComputerId + getEffectiveComputer (override -> per-conv -> workspace default -> null/local). Fixes the 3 Workspace literal sites the new required wire field broke. +18 tests. - orchestrator: root tsconfig.json ref for exec-backend + bun install. Verified: tsc -b EXIT 0, biome clean, 1592 vitest pass (was 1549, +43). Refs: notes/ssh-support-plan.md (decisions §0.5/§13). No merge or push.
Diffstat (limited to 'tasks.md')
-rw-r--r--tasks.md31
1 files changed, 30 insertions, 1 deletions
diff --git a/tasks.md b/tasks.md
index 8a3343d..4bbea5d 100644
--- a/tasks.md
+++ b/tasks.md
@@ -5,7 +5,36 @@
> Keep this lean and current; do not let it re-accrete a step-by-step changelog.
## Status (current)
-`tsc -b` EXIT 0 · biome clean · **1537 vitest** green.
+`tsc -b` EXIT 0 · biome clean · **1549 vitest** green. (worktree `feature/ssh-support`;
+baseline re-verified after `bun install`.)
+
+## SSH support — transparent remote execution (IN PROGRESS)
+Plan: `notes/ssh-support-plan.md` (decisions locked in §0.5/§13). Orchestrated in
+waves (ORCHESTRATOR.md §2a — pre-author the contract seam, then parallel
+owner-agents on disjoint packages).
+- [x] **Wave 0** (orchestrator): kernel contract seam — `computerId` on
+ `ToolExecuteContext` + `RunTurnInput` (additive optional; backward
+ compatible). `tsc -b` EXIT 0.
+- [x] **Wave 1** (parallel): `wire` (Computer/defaultComputerId types) +
+ `exec-backend` (NEW pkg: ExecBackend contract + LocalExecBackend + handle +
+ resolver) + `kernel` runtime (thread computerId through dispatch/run-turn) +
+ `conversation-store` (contract fan-out: defaultComputerId + getEffectiveComputer
+ + per-conv computerId get/set/clear). `tsc -b` EXIT 0, biome clean, **1592 vitest**
+ (was 1549, +43).
+- [ ] **Wave 2** (parallel): refactor `tool-shell`/`read-file`/`write-file`/
+ `edit-file` behind `ExecBackend` (local-only still).
+- [ ] **Wave 3**: `conversation-store` (defaultComputerId + getEffectiveComputer)
+ + `session-orchestrator` (resolve + thread computerId; drop lsp/mcp when
+ remote) + `transport-contract` (computerId on ChatRequest + computer types).
+- [ ] **Wave 4**: `transport-http` + `transport-ws` (computer endpoints + chat).
+- [ ] **Wave 5**: `host-bin` wiring + `ssh` package (SshConnectionPool,
+ SshExecBackend, ~/.ssh/config reader via ssh-config, known_hosts pinning).
+- [ ] **Wave 6**: `cache-warming` computerId threading + full verify.
+Key decisions: ssh2 + ssh-config (project-local deps); key-only auth from
+`~/.ssh`; auto-trust-and-pin host keys; computers discovered read-only from
+`~/.ssh/config` (no CRUD entity); computerId persisted per-conversation; LSP/MCP
+silently dropped on remote turns; edit_file works w/o diagnostics remotely.
+
## Per-edit LSP diagnostics auto-append (DONE)
After a successful `edit_file`, the extension now calls LSP `getDiagnostics` on the