From 0784b7018011575387757611a5f52c7f30d5161b Mon Sep 17 00:00:00 2001 From: Ukaykhingmarma28 Date: Mon, 12 Oct 2026 03:36:12 +0600 Subject: [PATCH 1/9] Send a hook-captured turn to the cloud right away A hook that writes the store directly drains the new rows within the sync budget; a turn delivered to atlas serve forces a drain instead of waiting for the 30 s tick. Without atlas serve nothing synced before until atlas capture sync. --- README.md | 5 +++-- cmd/atlas/hooks_cmds.go | 18 +++++++++++++++++- cmd/atlas/serve_cmds.go | 8 +++++++- docs/progress.md | 8 ++++++++ internal/hooks/deliver.go | 13 +++++++++---- internal/hooks/hooks_test.go | 6 +++--- 6 files changed, 47 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index ef8a2b8..2c99fa3 100644 --- a/README.md +++ b/README.md @@ -45,8 +45,9 @@ and Pi each ask once in their own UI. Keep `atlas` current on PATH, including At each turn end the hook reads the agent's transcript from where the turn started, diffs `git status`, and records the prompt, the reply, the tool calls with the files they wrote, token usage and the model. The hook writes to the -store itself, or hands the turn to a running `atlas serve`, or spools it when -the desktop app has the folder open. A hook never fails the agent: errors go to +store itself and sends the turn to the cloud Project right away, or hands it to +a running `atlas serve` (which syncs it at once), or spools it when the +desktop app has the folder open. A hook never fails the agent: errors go to `.atlas/cli-hooks.log` and `atlas status`. | agent | hook written to | memory server written to | diff --git a/cmd/atlas/hooks_cmds.go b/cmd/atlas/hooks_cmds.go index 22d1983..7e3ae70 100644 --- a/cmd/atlas/hooks_cmds.go +++ b/cmd/atlas/hooks_cmds.go @@ -13,6 +13,7 @@ import ( gitlink "github.com/tryatlas/atlas-cli/internal/capture/git" "github.com/tryatlas/atlas-cli/internal/capture/store" + capsync "github.com/tryatlas/atlas-cli/internal/capture/sync" "github.com/tryatlas/atlas-cli/internal/hooks" "github.com/tryatlas/atlas-cli/internal/listener" "github.com/tryatlas/atlas-cli/internal/project" @@ -77,7 +78,7 @@ func runAgentHook(a hooks.Agent, verb string) func(*cobra.Command, []string) err if !hooks.Enabled(ctx, p.Root) { return nil } - d := &hooks.Dispatcher{Root: p.Root, Version: version, Now: time.Now, Deliver: hooks.Deliver(version), Banner: banner(ctx, p.Root)} + d := &hooks.Dispatcher{Root: p.Root, Version: version, Now: time.Now, Deliver: hooks.Deliver(version, syncAfterHook), Banner: banner(ctx, p.Root)} out, err := d.Run(ctx, a, ev) if err != nil { hooks.LogError(p.Root, a.ID(), verb, err) @@ -89,6 +90,21 @@ func runAgentHook(a hooks.Agent, verb string) func(*cobra.Command, []string) err } } +// syncAfterHook sends what a direct hook write just recorded to the cloud, +// within the drain's short budget, so a turn reaches the Project without +// waiting for atlas serve or atlas capture sync. Offline or signed out it +// does nothing; the rows stay pending for the next drain. +func syncAfterHook(ctx context.Context, st *store.Store) { + b, err := st.Binding(ctx) + if err != nil || b == nil { + return + } + if _, ok := capsync.TargetOf(b); !ok || b.DrainState == store.DrainNotAuthorized { + return + } + _, _ = capsync.Drain(ctx, syncClient(), st, capsync.Budget, time.Now) +} + // banner is the SessionStart message: what is on, and which Project. func banner(ctx context.Context, root string) string { st, err := store.Open(root, false) diff --git a/cmd/atlas/serve_cmds.go b/cmd/atlas/serve_cmds.go index 2b437c2..93622d0 100644 --- a/cmd/atlas/serve_cmds.go +++ b/cmd/atlas/serve_cmds.go @@ -188,7 +188,13 @@ func runServe(cmd *cobra.Command, _ []string) error { return err } d.Root = p.Root - return hooks.Apply(ctx, h.Recorder, h.Listener.Memory, []hooks.Delivery{d}) + if err := hooks.Apply(ctx, h.Recorder, h.Listener.Memory, []hooks.Delivery{d}); err != nil { + return err + } + if d.Turn != nil && h.Sync != nil { + h.Sync.Force() // the turn goes to the cloud now, not at the next tick + } + return nil }) h.Listener.SetLinker(func(ctx context.Context) error { _, err := gitlink.Link(ctx, h.Store, p.Root, time.Now) diff --git a/docs/progress.md b/docs/progress.md index 30a5787..252145a 100644 --- a/docs/progress.md +++ b/docs/progress.md @@ -1183,3 +1183,11 @@ https://github.com/tryatlas/atlas-cli/releases/tag/v0.2.0, four archives, `checksums.txt`, `install.sh`. CI and the release workflow were green on all four native runners. The anonymous installer delivers a build with the hooks commands. + +## v0.2.1: a turn reaches the cloud right after its hook + +A hook that writes the store directly now drains the new rows to the cloud +Project within the drain's 3 s budget (signed in, cloud-bound; offline or +rate-limited rows stay pending for the next drain). A turn delivered to +`atlas serve` forces a drain instead of waiting for the 30 s tick. Before, +without `atlas serve` nothing synced until `atlas capture sync`. diff --git a/internal/hooks/deliver.go b/internal/hooks/deliver.go index 681eb71..2c9a13b 100644 --- a/internal/hooks/deliver.go +++ b/internal/hooks/deliver.go @@ -34,8 +34,10 @@ var ErrSpooled = errors.New("spooled") // SpoolDir holds deliveries waiting for a writer. func SpoolDir(root string) string { return filepath.Join(Dir(root), "spool") } -// Deliver is the default Dispatcher.Deliver. -func Deliver(version string) func(ctx context.Context, d Delivery) error { +// Deliver is the default Dispatcher.Deliver. afterDirect, when set, runs +// after a direct write with the store still open: the caller syncs the new +// rows to the cloud there, so a turn does not wait for the next atlas serve. +func Deliver(version string, afterDirect func(ctx context.Context, st *store.Store)) func(ctx context.Context, d Delivery) error { return func(ctx context.Context, d Delivery) error { if rf := listener.ReadRunFile(d.Root); rf != nil { if err := postHook(ctx, rf.Socket, d); err == nil { @@ -44,7 +46,7 @@ func Deliver(version string) func(ctx context.Context, d Delivery) error { // The listener is there but did not answer: fall through to a // direct write, which fails on its lock and spools. } - err := applyDirect(ctx, version, d.Root, []Delivery{d}) + err := applyDirect(ctx, version, d.Root, []Delivery{d}, afterDirect) if errors.Is(err, store.ErrLocked) { if serr := spool(d); serr != nil { return serr @@ -114,7 +116,7 @@ func foldChanges(ctx context.Context, mem *server.Server, g server.Grant, root s // applyDirect takes the writer lock for the duration of the write, drains // the spool first, then applies ds. -func applyDirect(ctx context.Context, version, root string, ds []Delivery) error { +func applyDirect(ctx context.Context, version, root string, ds []Delivery, after func(ctx context.Context, st *store.Store)) error { lock, err := store.Lock(root) if err != nil { return err @@ -135,6 +137,9 @@ func applyDirect(ctx context.Context, version, root string, ds []Delivery) error return err } ClearLastError(root) + if after != nil { + after(ctx, st) + } return nil } diff --git a/internal/hooks/hooks_test.go b/internal/hooks/hooks_test.go index 7ec4ebe..acfdb0e 100644 --- a/internal/hooks/hooks_test.go +++ b/internal/hooks/hooks_test.go @@ -213,7 +213,7 @@ func TestDispatcherRecordsATurnDirectly(t *testing.T) { st := enabledStore(t, root) transcript := filepath.Join(t.TempDir(), "s.jsonl") _ = os.WriteFile(transcript, []byte(`{"kind":"prompt","body":"earlier turn"}`+"\n"), 0o600) - d := &Dispatcher{Root: root, Version: "test", Now: time.Now, Deliver: Deliver("test"), Banner: "Atlas: on"} + d := &Dispatcher{Root: root, Version: "test", Now: time.Now, Deliver: Deliver("test", nil), Banner: "Atlas: on"} sess := map[string]any{"Session": "s-1", "Transcript": transcript} if out := runHook(t, d, "start", sess); string(out) != "Atlas: on" { @@ -296,7 +296,7 @@ func TestATurnThatOnlyReadRecordsNothing(t *testing.T) { st := enabledStore(t, root) transcript := filepath.Join(t.TempDir(), "s.jsonl") _ = os.WriteFile(transcript, nil, 0o600) - d := &Dispatcher{Root: root, Version: "test", Now: time.Now, Deliver: Deliver("test")} + d := &Dispatcher{Root: root, Version: "test", Now: time.Now, Deliver: Deliver("test", nil)} sess := map[string]any{"Session": "s-2", "Transcript": transcript} runHook(t, d, "start", sess) runHook(t, d, "prompt", sess) @@ -317,7 +317,7 @@ func TestSpoolWhenTheStoreIsLockedAndDrainLater(t *testing.T) { } transcript := filepath.Join(t.TempDir(), "s.jsonl") _ = os.WriteFile(transcript, []byte(`{"kind":"prompt","body":"hi"}`+"\n"+`{"kind":"text","body":"hello"}`+"\n"), 0o600) - d := &Dispatcher{Root: root, Version: "test", Now: time.Now, Deliver: Deliver("test")} + d := &Dispatcher{Root: root, Version: "test", Now: time.Now, Deliver: Deliver("test", nil)} sess := map[string]any{"Session": "s-3", "Transcript": transcript} runHook(t, d, "start", sess) runHook(t, d, "prompt", map[string]any{"Session": "s-3", "Transcript": transcript, "Prompt": "hi"}) From 8161e9c42b028043915932c3d6ff7039589c9856 Mon Sep 17 00:00:00 2001 From: Ukaykhingmarma28 Date: Mon, 12 Oct 2026 05:15:52 +0600 Subject: [PATCH 2/9] Capture per event: the prompt opens the turn, each tool call lands as its hook fires The prompt is recorded as it is submitted, every tool call as the agent's post-tool hook reports it (with the file it wrote, or for a shell call the files git saw change while it ran), and Stop closes the turn with the transcript's text and usage. Each delivery syncs to the cloud at once. - record.OpenTurn and RecordTool; CapturedTurn.Open completes an open turn; Tool.NoSample lets a transcript sighting complete a delivered row. - The dispatcher holds a per-session lock for the hook's lifetime, tracks delivered calls as key groups (id, name+arguments, command text, written paths) so the transcript read at Stop records none twice, and keeps the hook's own time on every delivery. - Post-tool hooks for all eight agents: Claude Code, Codex (code-mode exec scripts unwrapped), Cursor (afterFileEdit, afterShellExecution), Copilot (postToolUse; derived ids), OpenCode (tool.execute.after), Droid (PostToolUse), Antigravity (PostToolUse; the prompt read at PreInvocation), Pi (tool_result; the extension serialises its hooks). - Verified live for every agent but Droid. --- README.md | 16 +- cmd/atlas/hooks_cmds.go | 8 +- cmd/atlas/serve_cmds.go | 4 +- docs/RELEASE.md | 2 +- .../0013-hooks-capture-native-agent-uis.md | 14 +- docs/progress.md | 52 ++++ internal/capture/record/recorder.go | 3 + internal/capture/record/turn.go | 130 +++++++-- internal/hooks/antigravity/antigravity.go | 114 ++++++-- .../hooks/antigravity/antigravity_test.go | 180 ++++++++++++- internal/hooks/antigravity/transcript.go | 40 ++- internal/hooks/antigravity/transcript_test.go | 29 ++ internal/hooks/claude/claude.go | 45 +++- internal/hooks/claude/claude_test.go | 11 +- internal/hooks/codex/codex.go | 125 +++++++-- internal/hooks/codex/codex_test.go | 119 ++++++++- internal/hooks/codex/transcript.go | 15 +- internal/hooks/codex/transcript_test.go | 13 +- internal/hooks/copilot/copilot.go | 15 +- internal/hooks/copilot/copilot_test.go | 110 +++++++- internal/hooks/copilot/tool.go | 147 ++++++++++ internal/hooks/copilot/transcript.go | 10 +- internal/hooks/copilot/transcript_test.go | 3 + internal/hooks/cursor/cursor.go | 112 +++++++- internal/hooks/cursor/cursor_test.go | 53 +++- internal/hooks/cursor/perevent_test.go | 148 +++++++++++ internal/hooks/deliver.go | 19 +- internal/hooks/dispatch.go | 250 +++++++++++++++++- internal/hooks/droid/droid.go | 61 ++++- internal/hooks/droid/droid_test.go | 60 ++++- internal/hooks/event.go | 2 + internal/hooks/hooks_test.go | 135 +++++++++- internal/hooks/opencode/export.go | 7 +- internal/hooks/opencode/export_test.go | 4 +- internal/hooks/opencode/opencode.go | 46 +++- internal/hooks/opencode/opencode_test.go | 34 ++- internal/hooks/opencode/plugin.ts | 67 ++++- internal/hooks/pi/extension.ts | 50 +++- internal/hooks/pi/pi.go | 29 +- internal/hooks/pi/pi_test.go | 26 +- internal/hooks/state.go | 40 ++- 41 files changed, 2163 insertions(+), 185 deletions(-) create mode 100644 internal/hooks/copilot/tool.go create mode 100644 internal/hooks/cursor/perevent_test.go diff --git a/README.md b/README.md index 2c99fa3..5c92eb9 100644 --- a/README.md +++ b/README.md @@ -42,12 +42,16 @@ Agents run their project hooks only for a project you trust: Codex, Copilot and Pi each ask once in their own UI. Keep `atlas` current on PATH, including `~/.local/bin`, which some agents put first. -At each turn end the hook reads the agent's transcript from where the turn -started, diffs `git status`, and records the prompt, the reply, the tool calls -with the files they wrote, token usage and the model. The hook writes to the -store itself and sends the turn to the cloud Project right away, or hands it to -a running `atlas serve` (which syncs it at once), or spools it when the -desktop app has the folder open. A hook never fails the agent: errors go to +Capture is per event. The prompt opens the turn the moment you submit it; +each tool call lands as the agent's post-tool hook fires, with the file it +wrote; at turn end the hook reads the agent's transcript from where the turn +started, diffs `git status`, and closes the turn with the reply, token usage +and the model. Every event goes to the cloud Project right away: the hook +writes the store itself and syncs, or hands the event to a running +`atlas serve` (which syncs it at once), or spools it when the desktop app has +the folder open. Someone watching the Project sees the prompt, then the tool +cards one by one, then the reply. Text is not streamed token by token: no +agent exposes a hook for that. A hook never fails the agent: errors go to `.atlas/cli-hooks.log` and `atlas status`. | agent | hook written to | memory server written to | diff --git a/cmd/atlas/hooks_cmds.go b/cmd/atlas/hooks_cmds.go index 7e3ae70..7d61347 100644 --- a/cmd/atlas/hooks_cmds.go +++ b/cmd/atlas/hooks_cmds.go @@ -94,7 +94,7 @@ func runAgentHook(a hooks.Agent, verb string) func(*cobra.Command, []string) err // within the drain's short budget, so a turn reaches the Project without // waiting for atlas serve or atlas capture sync. Offline or signed out it // does nothing; the rows stay pending for the next drain. -func syncAfterHook(ctx context.Context, st *store.Store) { +func syncAfterHook(ctx context.Context, st *store.Store, d hooks.Delivery) { b, err := st.Binding(ctx) if err != nil || b == nil { return @@ -102,7 +102,11 @@ func syncAfterHook(ctx context.Context, st *store.Store) { if _, ok := capsync.TargetOf(b); !ok || b.DrainState == store.DrainNotAuthorized { return } - _, _ = capsync.Drain(ctx, syncClient(), st, capsync.Budget, time.Now) + budget := capsync.Budget + if d.Tool != nil { + budget = time.Second // the agent waits on a post-tool hook: keep it short + } + _, _ = capsync.Drain(ctx, syncClient(), st, budget, time.Now) } // banner is the SessionStart message: what is on, and which Project. diff --git a/cmd/atlas/serve_cmds.go b/cmd/atlas/serve_cmds.go index 93622d0..5e41f32 100644 --- a/cmd/atlas/serve_cmds.go +++ b/cmd/atlas/serve_cmds.go @@ -191,8 +191,8 @@ func runServe(cmd *cobra.Command, _ []string) error { if err := hooks.Apply(ctx, h.Recorder, h.Listener.Memory, []hooks.Delivery{d}); err != nil { return err } - if d.Turn != nil && h.Sync != nil { - h.Sync.Force() // the turn goes to the cloud now, not at the next tick + if h.Sync != nil && !d.End { + h.Sync.Force() // the prompt, call or reply goes to the cloud now, not at the next tick } return nil }) diff --git a/docs/RELEASE.md b/docs/RELEASE.md index e47ce3d..c9d1f98 100644 --- a/docs/RELEASE.md +++ b/docs/RELEASE.md @@ -55,7 +55,7 @@ Run them before tagging. Record the results in `docs/progress.md`. | 4 | `atlas agents list` | The eight agents; hook and memory "absent"; binaries on PATH named | | 5 | `atlas agents add claude-code` | "hook installed, memory server added to .mcp.json"; the git post-commit hook installed; `.claude/settings.local.json` holds six Atlas hooks | | 6 | `claude -p "Create hello.md with one line"` | The reply; `hello.md` exists; `atlas status` shows 1 session; `atlas agents sessions` lists it with `claude -r ` | -| 7 | `claude` (its own UI): a prompt that edits a file, then exit | The SessionStart banner "Atlas: capture on · memory on · …"; a second turn in the store with the tool call and the file touch | +| 7 | `claude` (its own UI): a prompt that edits a file and runs a command, then exit | The SessionStart banner "Atlas: capture on · memory on · …"; while the agent still works, `sqlite3 .atlas/sessions.db "select tool_name from tool_call"` already lists the calls (per-event); after Stop one completed turn with the prompt first, one row per call, the reply last, no `changes-N` call | | 8 | `atlas memory list` | `file_changed` entries from both turns | | 9 | Commit the file | The post-commit hook links it: `atlas status` says "Commits: linked up to " without running `atlas capture link` | | 10 | `git commit --amend -m reworded`, then `atlas capture link` | "Rewritten history: 1 relinked" | diff --git a/docs/adr/0013-hooks-capture-native-agent-uis.md b/docs/adr/0013-hooks-capture-native-agent-uis.md index 152a408..c7b25e3 100644 --- a/docs/adr/0013-hooks-capture-native-agent-uis.md +++ b/docs/adr/0013-hooks-capture-native-agent-uis.md @@ -75,9 +75,21 @@ the product. group until their removal is agreed, and are no longer documented as the product. +9. **Per event, not per turn** (added 2026-10-12). The prompt opens the turn + in the store as it is submitted; each tool call is recorded as the + agent's post-tool hook fires (Claude Code, Codex, Copilot, Droid and + Antigravity have a generic one; Cursor's file-edit and shell hooks, + OpenCode's plugin and Pi's extension carry the same information); the + turn closes at Stop with the transcript's text and usage, and transcript + tool items that duplicate a delivered call are dropped (same id, + arguments, shell command or written paths). Each delivery syncs. Token + streaming is out of reach for hooks. + ## Consequences -- Native-UI sessions get file touches and checkpoints again, live. +- Native-UI sessions get file touches and checkpoints again, live: the + prompt and each tool call reach the cloud within seconds; the reply at + turn end. - One integration per agent is the price; the external-agent protocol is a later addition. - A hook-captured turn's file changes are attributed to the tool that wrote diff --git a/docs/progress.md b/docs/progress.md index 252145a..d100742 100644 --- a/docs/progress.md +++ b/docs/progress.md @@ -1191,3 +1191,55 @@ Project within the drain's 3 s budget (signed in, cloud-bound; offline or rate-limited rows stay pending for the next drain). A turn delivered to `atlas serve` forces a drain instead of waiting for the 30 s tick. Before, without `atlas serve` nothing synced until `atlas capture sync`. + +## Per-event capture (ADR-0013 §9, 2026-10-12) + +The prompt opens the turn in the store as it is submitted; each tool call is +recorded as the agent's post-tool hook fires (with the file it wrote); Stop +closes the turn with the transcript's text runs and usage. Transcript tool +items that duplicate a delivered call are dropped (same id, canonical name + +arguments hash, shell command text, or every written path), and the files a +delivered call wrote count as explained, so no synthetic "changes" call is +made for them. Every delivery syncs: `atlas serve` forces a drain per event; +a direct write drains within the sync budget (1 s for a post-tool hook, 3 s +otherwise). A post-tool hook costs 60–180 ms locally. + +Verified live with Claude Code: `claude -p` with Write + Bash, directly and +through `atlas serve`: one completed turn, the prompt row first, one tool +row per call in order, the reply last, one file touch, no duplicates. + +Found by the per-agent live re-tests and fixed in the core: + +- Hooks of one session can fire concurrently (Pi runs six tool handlers at + once): the dispatcher now holds a per-session flock for the hook's + lifetime and writes state through a per-process temp name. +- Delivered calls are tracked as key groups, each matching at most one + transcript item; when an agent's hook ids match its transcript ids (Claude, + Pi, OpenCode) ids decide alone, so two identical `sleep 4` calls stay two + calls; otherwise arguments (never empty `{}`), command text (string or + argv) or every written path decide (Codex, Copilot, Cursor). +- A shell call's hook diffs git status right then: the files the command + changed are its touches, delivered with the call, and the baseline moves + on; no synthetic "changes" call for them. +- A delivery carries the hook's own time, so a spooled one keeps it. + +Per-agent per-event results: Claude Code, Codex (code-mode `exec` scripts +unwrapped to the inner `apply_patch`/`exec_command` so hook and rollout +match), Copilot (no call ids in its payload; a derived id, matching by +arguments, command or path), OpenCode (plugin `tool.execute.after`, ids +equal the export's `callID`), Pi (`tool_result`, ids equal the session +file's), Droid (PostToolUse added; untested live), Cursor (`afterFileEdit` +and `afterShellExecution` become Write/Edit and Shell calls, matched by +written path and command text; the TUI asks before MCP tools and +non-allowlisted commands), Antigravity (PostToolUse carries no output and +the id is derived from the planner step; the prompt is read from the +transcript's pending USER_INPUT at PreInvocation so the turn opens). A +transcript item matched by id completes the delivered row's result and +status without sampling its writes again. Ordering within a turn is prompt, +tool calls as they ran, then the reply's text runs at the end: the text is +known only at Stop. + +## v0.3.0 + +Per-event capture for all eight agents (above), the per-session lock, the +dedupe by key groups, shell changes on the shell call, hook times kept. diff --git a/internal/capture/record/recorder.go b/internal/capture/record/recorder.go index 07f84f2..ac98b38 100644 --- a/internal/capture/record/recorder.go +++ b/internal/capture/record/recorder.go @@ -221,6 +221,9 @@ type Tool struct { Binary []byte Locations []string Diffs []Diff // ACP diff content blocks + // NoSample says the call's writes were already sampled (a hook delivered + // it): this sighting only completes the row (result, status). + NoSample bool `json:"no_sample,omitempty"` } // ToolCall upserts the call; on its first completed sighting it samples the diff --git a/internal/capture/record/turn.go b/internal/capture/record/turn.go index 34963fe..eff22d0 100644 --- a/internal/capture/record/turn.go +++ b/internal/capture/record/turn.go @@ -22,7 +22,11 @@ import ( type CapturedTurn struct { Prompt string `json:"prompt"` Items []CapturedItem `json:"items,omitempty"` - Model string `json:"model,omitempty"` + // Open says the turn was opened earlier by OpenTurn (and may already + // hold tool calls from RecordTool): complete it instead of starting a + // new one. + Open bool `json:"open,omitempty"` + Model string `json:"model,omitempty"` // Usage is the turn's token usage when the transcript or the hook gave // one; nil records nothing. Usage *store.TokenTotals `json:"usage,omitempty"` @@ -58,9 +62,11 @@ func (r *Recorder) RecordTurn(ctx context.Context, s Session, t CapturedTurn) (i if at.IsZero() { at = r.Now() } - l.turn++ - if err := r.Store.BeginTurn(ctx, l.id, l.turn, at); err != nil { - return 0, err + if !t.Open || l.turn == 0 { + l.turn++ + if err := r.Store.BeginTurn(ctx, l.id, l.turn, at); err != nil { + return 0, err + } } stripped := StripUser(t.Prompt) if strings.TrimSpace(stripped) != "" { @@ -132,25 +138,8 @@ func (r *Recorder) RecordTurn(ctx context.Context, s Session, t CapturedTurn) (i } call = id } - inHead := headFiles(r.Root) - for _, p := range t.Changed { - ft := store.FileTouch{ToolCallID: call, SessionID: l.id, TurnSeq: l.turn, Path: p, ExistedBefore: inHead[p]} - if filepath.IsAbs(p) { - ft.OutOfRepo = true - } - abs := p - if !ft.OutOfRepo { - abs = filepath.Join(r.Root, filepath.FromSlash(p)) - } - if data, err := os.ReadFile(abs); err == nil { //nolint:gosec // G304: a path git reported changed - h := store.SHA256Hex(data) - ft.SHA256After, ft.SketchAfter = &h, Sketch(data) - } else { - ft.Deleted = true - } - if err := r.Store.AddFileTouch(ctx, ft, at); err != nil { - return l.turn, err - } + if err := r.touchPaths(ctx, l, call, t.Changed, at); err != nil { + return l.turn, err } } if t.Usage != nil { @@ -222,7 +211,7 @@ func (r *Recorder) recordCapturedTool(ctx context.Context, l *live, t Tool, at t if err != nil { return "", name, err } - if status == "completed" && (WritesFiles(name) || len(t.Diffs) > 0) && !l.touched[t.NativeID] { + if status == "completed" && !t.NoSample && (WritesFiles(name) || len(t.Diffs) > 0) && !l.touched[t.NativeID] { l.touched[t.NativeID] = true if err := r.sampleWrites(ctx, l, id, t.NativeID, WritePaths(t.Arguments, t.Locations, t.Diffs...), t.Arguments, t.Diffs, at); err != nil { return id, name, err @@ -230,3 +219,96 @@ func (r *Recorder) recordCapturedTool(ctx context.Context, l *live, t Tool, at t } return id, name, nil } + +// OpenTurn starts a turn as the prompt is submitted (the per-event path): the +// turn row, the title on the first turn, and the user message. The rest of +// the turn arrives through RecordTool and a CapturedTurn with Open set. +func (r *Recorder) OpenTurn(ctx context.Context, s Session, prompt string, at time.Time) (int64, error) { + r.mu.Lock() + defer r.mu.Unlock() + if !r.enabled(ctx) { + return 0, nil + } + l, err := r.session(ctx, s) + if err != nil { + return 0, err + } + if at.IsZero() { + at = r.Now() + } + l.turn++ + if err := r.Store.BeginTurn(ctx, l.id, l.turn, at); err != nil { + return 0, err + } + stripped := StripUser(prompt) + if strings.TrimSpace(stripped) == "" { + return l.turn, nil + } + if flat, err := redact.Flat(stripped); err == nil { + if title := Title(flat.Text); title != "" { + _ = r.Store.SetTitleIfAbsent(ctx, l.id, title) + } + } + body, ok := r.redactAuto(ctx, l, stripped) + if !ok { + return l.turn, nil + } + _, err = r.Store.RecordMessage(ctx, store.Message{SessionID: l.id, TurnSeq: l.turn, + NativeID: fmt.Sprintf("prompt-%d-%s", l.turn, store.SHA256Hex([]byte(prompt))), + Role: "user", Mode: "text", Body: body, CreatedAt: at}) + return l.turn, err +} + +// RecordTool upserts one tool call into the session's open turn as the +// agent's post-tool hook reports it, sampling the files it wrote; changed +// are the Project paths git saw change while a shell call ran, recorded as +// its touches. With no open turn it opens one. +func (r *Recorder) RecordTool(ctx context.Context, s Session, t Tool, changed []string, at time.Time) error { + r.mu.Lock() + defer r.mu.Unlock() + if !r.enabled(ctx) { + return nil + } + l, err := r.session(ctx, s) + if err != nil { + return err + } + if at.IsZero() { + at = r.Now() + } + if l.turn == 0 { + l.turn++ + if err := r.Store.BeginTurn(ctx, l.id, l.turn, at); err != nil { + return err + } + } + id, _, err := r.recordCapturedTool(ctx, l, t, at) + if err != nil || id == "" || len(changed) == 0 { + return err + } + return r.touchPaths(ctx, l, id, changed, at) +} + +// touchPaths records file touches for paths changed outside a known write. +func (r *Recorder) touchPaths(ctx context.Context, l *live, callID string, paths []string, at time.Time) error { + inHead := headFiles(r.Root) + for _, p := range paths { + ft := store.FileTouch{ToolCallID: callID, SessionID: l.id, TurnSeq: l.turn, Path: p, ExistedBefore: inHead[p]} + abs := p + if filepath.IsAbs(p) { + ft.OutOfRepo = true + } else { + abs = filepath.Join(r.Root, filepath.FromSlash(p)) + } + if data, err := os.ReadFile(abs); err == nil { //nolint:gosec // G304: a path git reported changed + h := store.SHA256Hex(data) + ft.SHA256After, ft.SketchAfter = &h, Sketch(data) + } else { + ft.Deleted = true + } + if err := r.Store.AddFileTouch(ctx, ft, at); err != nil { + return err + } + } + return nil +} diff --git a/internal/hooks/antigravity/antigravity.go b/internal/hooks/antigravity/antigravity.go index ee09ebb..fd04848 100644 --- a/internal/hooks/antigravity/antigravity.go +++ b/internal/hooks/antigravity/antigravity.go @@ -7,8 +7,11 @@ // names the model (modelName); the transcript is written step by step, the // USER_INPUT step before PreInvocation fires and the last PLANNER_RESPONSE // before Stop (older releases wrote it after Stop, which Settle still -// tolerates); and each PLANNER_RESPONSE step carries input_tokens, -// output_tokens and cache_read_tokens. +// tolerates); each PLANNER_RESPONSE step carries input_tokens, +// output_tokens and cache_read_tokens; and PreToolUse/PostToolUse carry the +// call (toolCall) and stepIdx, the index of the step its output will be, one +// after the PLANNER_RESPONSE that made it, which is not yet on disk when +// PostToolUse fires, so no hook sees the tool's output. package antigravity import ( @@ -18,7 +21,9 @@ import ( "os" "os/exec" "path/filepath" + "strconv" + "github.com/tryatlas/atlas-cli/internal/capture/record" "github.com/tryatlas/atlas-cli/internal/hooks" ) @@ -37,6 +42,7 @@ type Agent struct{} const ( VerbPreInvocation = "pre-invocation" VerbPreToolUse = "pre-tool-use" + VerbPostToolUse = "post-tool-use" VerbStop = "stop" ) @@ -55,7 +61,9 @@ func (Agent) Name() string { return "Antigravity" } func (Agent) Binary() string { return "agy" } // Verbs are the hook verbs the installed config invokes. -func (Agent) Verbs() []string { return []string{VerbPreInvocation, VerbPreToolUse, VerbStop} } +func (Agent) Verbs() []string { + return []string{VerbPreInvocation, VerbPreToolUse, VerbPostToolUse, VerbStop} +} // HooksPath is the workspace hooks file agy loads for a trusted workspace. func HooksPath(root string) string { return filepath.Join(root, ".agents", "hooks.json") } @@ -89,6 +97,9 @@ func render(disabled bool) entry { PreToolUse: []toolHandler{{Matcher: "*", Hooks: []hooks.CommandHook{ {Type: "command", Command: hooks.Wrap(hooks.Command(ID, VerbPreToolUse))}, }}}, + PostToolUse: []toolHandler{{Matcher: "*", Hooks: []hooks.CommandHook{ + {Type: "command", Command: hooks.Wrap(hooks.Command(ID, VerbPostToolUse))}, + }}}, PreInvocation: []plainHandler{{Type: "command", Command: hooks.Wrap(hooks.Command(ID, VerbPreInvocation))}}, Stop: []plainHandler{{Type: "command", Command: hooks.Wrap(hooks.Command(ID, VerbStop)), Timeout: stopTimeout}}, } @@ -181,9 +192,11 @@ func (Agent) Response(hooks.Kind, string) []byte { return nil } func (Agent) ResumeCommand(id string) string { return "agy --conversation " + id } // payload is the union of the fields read from agy's hook stdin. agy also -// sends artifactDirectoryPath, stepIdx, initialNumSteps, executionNum, -// terminationReason and error; only the ones below are used. modelName -// (e.g. "gemini-3.1-pro-low") is in every hook's payload on agy 1.3.3. +// sends artifactDirectoryPath, initialNumSteps, executionNum and +// terminationReason; only the ones below are used. modelName (e.g. +// "gemini-3.1-pro-low") is in every hook's payload on agy 1.3.3. stepIdx +// (Pre/PostToolUse) is the index of the step the tool's output will be +// written as; error (PostToolUse, Stop) is "" unless the tool or run failed. type payload struct { ConversationID string `json:"conversationId"` TranscriptPath string `json:"transcriptPath"` @@ -191,19 +204,23 @@ type payload struct { InvocationNum int `json:"invocationNum"` ModelName string `json:"modelName"` FullyIdle bool `json:"fullyIdle"` - ToolCall struct { - Name string `json:"name"` - Args json.RawMessage `json:"args"` - } `json:"toolCall"` + StepIdx *int `json:"stepIdx"` + Error string `json:"error"` + ToolCall toolCall `json:"toolCall"` } // Parse maps a hook verb and payload to an event: // -// - pre-invocation → TurnStart with no prompt (the dispatcher reads it -// from the transcript at turn end); agy fires one per model call, and a -// follow-up call within an open turn must not restart it; +// - pre-invocation → TurnStart. On the first model call of a turn the +// prompt is already in the transcript the payload names and no model +// step follows it, so it is read from there and opens the turn at once; +// a follow-up call within the turn (the transcript ends with model +// steps) carries no prompt, and the dispatcher keeps the turn open; // - pre-tool-use → ToolUse with the target file of a write tool, nothing // for any other tool; +// - post-tool-use → ToolUse with the completed call, keyed like the +// transcript reader keys it so the turn-end read does not record it +// twice; the payload has no output, only an error when the call failed; // - stop → TurnEnd when fullyIdle is true, nothing while background work // continues. func (Agent) Parse(verb string, raw []byte) (*hooks.Event, error) { @@ -220,13 +237,26 @@ func (Agent) Parse(verb string, raw []byte) (*hooks.Event, error) { switch verb { case VerbPreInvocation: ev.Kind = hooks.TurnStart + if p.TranscriptPath != "" { + ev.Prompt = pendingPrompt(p.TranscriptPath) + } case VerbPreToolUse: - files := writeTargets(p.ToolCall.Name, p.ToolCall.Args) + files := p.ToolCall.writeTargets() if len(files) == 0 { return nil, nil } ev.Kind = hooks.ToolUse ev.Files = files + case VerbPostToolUse: + if p.ToolCall.Name == "" || p.StepIdx == nil || *p.StepIdx < 1 { + return nil, nil + } + ev.Kind = hooks.ToolUse + ev.Tool = p.ToolCall.tool(callID(p.TranscriptPath, *p.StepIdx, p.ToolCall)) + if p.Error != "" { + msg := p.Error + ev.Tool.Status, ev.Tool.Result = "failed", &msg + } case VerbStop: if !p.FullyIdle { return nil, nil @@ -269,21 +299,63 @@ var toolKinds = map[string]string{ } // writeTargets is the file a write tool call names, or nothing. -func writeTargets(name string, args json.RawMessage) []string { - if !writeTools[name] { - return nil - } - var m map[string]json.RawMessage - if json.Unmarshal(args, &m) != nil { +func (tc toolCall) writeTargets() []string { + if !writeTools[tc.Name] { return nil } - target, _ := decodeString(m["TargetFile"]) + target, _ := decodeString(tc.Args["TargetFile"]) if target == "" { return nil } return []string{target} } +// callID is the id the transcript reader gives the call whose output step +// will be stepIdx: the PLANNER_RESPONSE step that made it (the last one +// before stepIdx, on disk before the tool runs) and the call's index in it. +// A planner step may hold several calls; their outputs follow it one step +// each in call order, so the index is the distance from the planner step. +// With no readable transcript or no step that fits, the call is taken as +// the only one of the step before. +func callID(path string, stepIdx int, tc toolCall) string { + fallback := strconv.Itoa(stepIdx-1) + "-0" + if path == "" { + return fallback + } + var planner *step + err := eachNonBlankLine(path, func(_ int, raw []byte) { + var s step + if json.Unmarshal(raw, &s) != nil || s.Type != "PLANNER_RESPONSE" || s.StepIndex >= stepIdx { + return + } + planner = &s + }) + if err != nil || planner == nil { + return fallback + } + i := stepIdx - planner.StepIndex - 1 + if i < 0 || i >= len(planner.ToolCalls) || planner.ToolCalls[i].Name != tc.Name { + return fallback + } + return strconv.Itoa(planner.StepIndex) + "-" + strconv.Itoa(i) +} + +// tool is the call as the recorder takes it, under id: the ACP kind the +// alias table cannot derive from agy's snake_case names, the arguments with +// their double encoding undone, and the target file of a write tool as its +// location. The hook payload and the transcript describe one call the same +// way, so the dispatcher's keys (id, name + arguments, written path) match. +func (tc toolCall) tool(id string) *record.Tool { + return &record.Tool{ + NativeID: id, + Name: tc.Name, + Kind: toolKinds[tc.Name], + Arguments: decodeArgs(tc.Args), + Locations: tc.writeTargets(), + Status: "completed", + } +} + // decodeString reads a string arg in either of agy's shapes: a plain JSON // string, or (its wire format) a JSON string holding a JSON-encoded string. // ok is false when the value is not a string at all. diff --git a/internal/hooks/antigravity/antigravity_test.go b/internal/hooks/antigravity/antigravity_test.go index e52c654..e23a157 100644 --- a/internal/hooks/antigravity/antigravity_test.go +++ b/internal/hooks/antigravity/antigravity_test.go @@ -1,12 +1,15 @@ package antigravity import ( + "bytes" "encoding/json" + "fmt" "os" "path/filepath" "strings" "testing" + "github.com/tryatlas/atlas-cli/internal/capture/record" "github.com/tryatlas/atlas-cli/internal/hooks" ) @@ -63,12 +66,14 @@ func TestInstallIntoEmpty(t *testing.T) { if len(file) != 1 { t.Fatalf("file has %d keys: %v", len(file), file) } + type group struct { + Matcher string `json:"matcher"` + Hooks []hooks.CommandHook `json:"hooks"` + } var e struct { - Enabled *bool `json:"enabled"` - PreToolUse []struct { - Matcher string `json:"matcher"` - Hooks []hooks.CommandHook `json:"hooks"` - } `json:"PreToolUse"` + Enabled *bool `json:"enabled"` + PreToolUse []group `json:"PreToolUse"` + PostToolUse []group `json:"PostToolUse"` PreInvocation []hooks.CommandHook `json:"PreInvocation"` Stop []hooks.CommandHook `json:"Stop"` } @@ -83,13 +88,18 @@ func TestInstallIntoEmpty(t *testing.T) { e.PreToolUse[0].Hooks[0].Type != "command" { t.Fatalf("PreToolUse = %+v", e.PreToolUse) } + if len(e.PostToolUse) != 1 || e.PostToolUse[0].Matcher != "*" || len(e.PostToolUse[0].Hooks) != 1 || + e.PostToolUse[0].Hooks[0].Command != hooks.Wrap("atlas hooks antigravity post-tool-use") || + e.PostToolUse[0].Hooks[0].Type != "command" { + t.Fatalf("PostToolUse = %+v", e.PostToolUse) + } if len(e.PreInvocation) != 1 || e.PreInvocation[0].Command != hooks.Wrap("atlas hooks antigravity pre-invocation") { t.Fatalf("PreInvocation = %+v", e.PreInvocation) } if len(e.Stop) != 1 || e.Stop[0].Command != hooks.Wrap("atlas hooks antigravity stop") || e.Stop[0].Timeout != 300 { t.Fatalf("Stop = %+v", e.Stop) } - for _, h := range []string{e.PreToolUse[0].Hooks[0].Command, e.PreInvocation[0].Command, e.Stop[0].Command} { + for _, h := range []string{e.PreToolUse[0].Hooks[0].Command, e.PostToolUse[0].Hooks[0].Command, e.PreInvocation[0].Command, e.Stop[0].Command} { if !hooks.Owned(h) { t.Fatalf("not owned: %q", h) } @@ -133,7 +143,7 @@ func TestInstallKeepsOtherEntriesAndDisabled(t *testing.T) { if len(e.Stop) != 1 || e.Stop[0].Command != hooks.Wrap("atlas hooks antigravity stop") { t.Fatalf("old Stop hook survived: %+v", e.Stop) } - if len(e.PreToolUse) != 1 || len(e.PreInvocation) != 1 { + if len(e.PreToolUse) != 1 || len(e.PostToolUse) != 1 || len(e.PreInvocation) != 1 { t.Fatalf("entry = %+v", e) } if a.State(root) != hooks.Current { @@ -217,7 +227,9 @@ func TestParse(t *testing.T) { {"write without target", VerbPreToolUse, `{"toolCall":{"name":"write_to_file","args":{"Overwrite":"true"}},` + common + `}`, 0, nil}, {"stop busy", VerbStop, `{"executionNum":1,"terminationReason":"model_stop","error":"","fullyIdle":false,` + common + `}`, 0, nil}, {"stop idle", VerbStop, `{"executionNum":1,"terminationReason":"model_stop","error":"","fullyIdle":true,` + common + `}`, hooks.TurnEnd, nil}, - {"unknown verb", "post-tool-use", `{` + common + `}`, 0, nil}, + {"post without a step", VerbPostToolUse, `{"toolCall":{"name":"run_command","args":{"CommandLine":"ls"}},"error":"",` + common + `}`, 0, nil}, + {"post without a call", VerbPostToolUse, `{"stepIdx":2,"error":"",` + common + `}`, 0, nil}, + {"unknown verb", "post-invocation", `{"invocationNum":0,` + common + `}`, 0, nil}, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { @@ -255,3 +267,155 @@ func TestParse(t *testing.T) { t.Fatalf("empty payload = %+v, %v", ev, err) } } + +// postToolUse is the payload agy 1.3.3 sends after a tool ran (captured +// 2026-10-12): the call, stepIdx (the index of the step its output will be +// written as), an empty error, and no output. +const postToolUse = `{"artifactDirectoryPath":"/home/u/.gemini/antigravity-cli/brain/ec33ebf9","error":"","stepIdx":%d,"toolCall":{"args":%s,"name":"%s"},` + common + `}` + +func TestParsePostToolUse(t *testing.T) { + a := Agent{} + writeArgs := `{"Append":false,"CodeContent":"probe","Description":"Create probe.txt","Overwrite":false,"TargetFile":"/workspace/project/probe.txt","toolAction":"Creating probe.txt","toolSummary":"File creation"}` + ev, err := a.Parse(VerbPostToolUse, []byte(fmt.Sprintf(postToolUse, 2, writeArgs, "write_to_file"))) + if err != nil || ev == nil || ev.Kind != hooks.ToolUse || ev.Tool == nil { + t.Fatalf("event = %+v, %v", ev, err) + } + if ev.SessionID != "ec33ebf9-0cba-4100-8142-c61503f6c587" || ev.Cwd != "/workspace/project" || ev.Model != "gemini-3.1-pro-low" || ev.Prompt != "" || len(ev.Files) != 0 { + t.Fatalf("event = %+v", ev) + } + w := ev.Tool + if w.NativeID != "1-0" || w.Name != "write_to_file" || w.Kind != "edit" || w.Status != "completed" || w.Result != nil || + len(w.Locations) != 1 || w.Locations[0] != "/workspace/project/probe.txt" { + t.Fatalf("tool = %+v", w) + } + var args map[string]any + if err := json.Unmarshal(w.Arguments, &args); err != nil { + t.Fatal(err) + } + if args["Append"] != false || args["CodeContent"] != "probe" || args["TargetFile"] != "/workspace/project/probe.txt" { + t.Fatalf("args = %s", w.Arguments) + } + if name := record.CanonicalToolName(w.Name, w.Title, w.Kind, w.Arguments); name != "Write" { + t.Fatalf("canonical name = %q, want Write", name) + } + + // The same call as the transcript records it: same id, arguments and + // location, so the dispatcher's keys match and it is not recorded twice. + path := filepath.Join(t.TempDir(), "transcript_full.jsonl") + line := `{"step_index":0,"source":"USER_EXPLICIT","type":"USER_INPUT","status":"DONE","content":"\nmake it\n"}` + "\n" + + `{"step_index":1,"source":"MODEL","type":"PLANNER_RESPONSE","status":"DONE","tool_calls":[{"name":"write_to_file","args":` + writeArgs + `}]}` + "\n" + + `{"step_index":2,"source":"MODEL","type":"GENERIC","status":"DONE","content":"Created"}` + "\n" + if err := os.WriteFile(path, []byte(line), 0o644); err != nil { + t.Fatal(err) + } + turn, _, err := reader{}.Read(path, 0) + if err != nil || len(turn.Items) != 1 || turn.Items[0].Tool == nil { + t.Fatalf("Read = %+v, %v", turn, err) + } + r := turn.Items[0].Tool + if r.NativeID != w.NativeID || r.Name != w.Name || r.Kind != w.Kind || !bytes.Equal(r.Arguments, w.Arguments) || + strings.Join(r.Locations, ",") != strings.Join(w.Locations, ",") { + t.Fatalf("hook tool %+v differs from transcript tool %+v", w, r) + } + + // Two calls in one planner step (seen live: write_to_file and + // run_command together in step 1, outputs at steps 2 and 3): the hook's + // stepIdx names the output step, and the id follows the reader's. + two := `{"step_index":0,"source":"USER_EXPLICIT","type":"USER_INPUT","status":"DONE","content":"\nboth\n"}` + "\n" + + `{"step_index":1,"source":"MODEL","type":"PLANNER_RESPONSE","status":"DONE","tool_calls":[{"name":"write_to_file","args":` + writeArgs + `},{"name":"run_command","args":{"CommandLine":"cat probe.txt","Cwd":"/workspace/project"}}]}` + "\n" + if err := os.WriteFile(path, []byte(two), 0o644); err != nil { + t.Fatal(err) + } + withPath := strings.Replace(postToolUse, `"transcriptPath":"/home/u/.gemini/antigravity-cli/brain/ec33ebf9/.system_generated/logs/transcript_full.jsonl"`, `"transcriptPath":%q`, 1) + for _, c := range []struct { + stepIdx int + name, args string + id string + }{ + {2, "write_to_file", writeArgs, "1-0"}, + {3, "run_command", `{"CommandLine":"cat probe.txt","Cwd":"/workspace/project"}`, "1-1"}, + {4, "run_command", `{"CommandLine":"ls"}`, "3-0"}, // no call at that index: the step before + {3, "view_file", `{"AbsolutePath":"/x"}`, "2-0"}, // a different call there: the step before + } { + ev, err := a.Parse(VerbPostToolUse, []byte(fmt.Sprintf(withPath, c.stepIdx, c.args, c.name, path))) + if err != nil || ev == nil || ev.Tool == nil || ev.Tool.NativeID != c.id { + t.Fatalf("stepIdx %d %s: event = %+v, %v; want id %s", c.stepIdx, c.name, ev, err, c.id) + } + } + turn, _, err = reader{}.Read(path, 0) + if err != nil || len(turn.Items) != 2 || turn.Items[0].Tool.NativeID != "1-0" || turn.Items[1].Tool.NativeID != "1-1" { + t.Fatalf("reader ids = %+v, %v", turn, err) + } + + // A shell call: execute kind, wire-shape (double encoded) args undone, + // and a failure reported in the payload's error. + raw := fmt.Sprintf(postToolUse, 4, `{"CommandLine":"\"cat probe.txt\"","Cwd":"/workspace/project","IsDaemon":false,"WaitMsBeforeAsync":5000}`, "run_command") + raw = strings.Replace(raw, `"error":""`, `"error":"exit status 1"`, 1) + ev, err = a.Parse(VerbPostToolUse, []byte(raw)) + if err != nil || ev == nil || ev.Tool == nil { + t.Fatalf("event = %+v, %v", ev, err) + } + run := ev.Tool + if run.NativeID != "3-0" || run.Kind != "execute" || run.Status != "failed" || run.Result == nil || *run.Result != "exit status 1" || run.Locations != nil { + t.Fatalf("tool = %+v", run) + } + if err := json.Unmarshal(run.Arguments, &args); err != nil { + t.Fatal(err) + } + if args["CommandLine"] != "cat probe.txt" || args["WaitMsBeforeAsync"] != float64(5000) { + t.Fatalf("args = %s", run.Arguments) + } + if name := record.CanonicalToolName(run.Name, run.Title, run.Kind, run.Arguments); name != "Bash" { + t.Fatalf("canonical name = %q, want Bash", name) + } +} + +// TestParsePreInvocationPrompt: the first invocation of a turn finds the +// prompt step already in the transcript and opens the turn with it; a +// follow-up invocation, whose transcript ends with the model's steps, does +// not; a transcript that is not there yet gives no prompt either. +func TestParsePreInvocationPrompt(t *testing.T) { + a := Agent{} + path := filepath.Join(t.TempDir(), "transcript_full.jsonl") + payload := func(n int) []byte { + return []byte(fmt.Sprintf(`{"invocationNum":%d,"initialNumSteps":1,"conversationId":"c1","modelName":"m","workspacePaths":["/w"],"transcriptPath":%q}`, n, path)) + } + ev, err := a.Parse(VerbPreInvocation, payload(0)) + if err != nil || ev == nil || ev.Kind != hooks.TurnStart || ev.Prompt != "" { + t.Fatalf("no transcript yet: %+v, %v", ev, err) + } + + prompt := `{"step_index":0,"source":"USER_EXPLICIT","type":"USER_INPUT","status":"DONE","content":"\nCreate rt.txt, then run: cat rt.txt\n\n\nnow\n"}` + "\n" + if err := os.WriteFile(path, []byte(prompt), 0o644); err != nil { + t.Fatal(err) + } + ev, err = a.Parse(VerbPreInvocation, payload(0)) + if err != nil || ev == nil || ev.Kind != hooks.TurnStart || ev.Prompt != "Create rt.txt, then run: cat rt.txt" { + t.Fatalf("first invocation = %+v, %v", ev, err) + } + if ev.SessionID != "c1" || ev.Transcript != path || ev.Cwd != "/w" || ev.Model != "m" { + t.Fatalf("event = %+v", ev) + } + + model := `{"step_index":1,"source":"MODEL","type":"PLANNER_RESPONSE","status":"DONE","tool_calls":[{"name":"run_command","args":{"CommandLine":"cat rt.txt"}}]}` + "\n" + + `{"step_index":2,"source":"MODEL","type":"GENERIC","status":"DONE","content":"rt"}` + "\n" + if err := os.WriteFile(path, []byte(prompt+model), 0o644); err != nil { + t.Fatal(err) + } + ev, err = a.Parse(VerbPreInvocation, payload(1)) + if err != nil || ev == nil || ev.Kind != hooks.TurnStart || ev.Prompt != "" { + t.Fatalf("follow-up invocation = %+v, %v", ev, err) + } + + // The next turn's prompt, after a finished one (and agy's bookkeeping + // step after it), is the pending one. + next := prompt + model + `{"step_index":3,"source":"USER_EXPLICIT","type":"USER_INPUT","status":"DONE","content":"\nagain\n"}` + "\n" + + `{"step_index":4,"source":"SYSTEM","type":"CONVERSATION_HISTORY","status":"DONE"}` + "\n" + if err := os.WriteFile(path, []byte(next), 0o644); err != nil { + t.Fatal(err) + } + ev, err = a.Parse(VerbPreInvocation, payload(0)) + if err != nil || ev == nil || ev.Prompt != "again" { + t.Fatalf("second turn = %+v, %v", ev, err) + } +} diff --git a/internal/hooks/antigravity/transcript.go b/internal/hooks/antigravity/transcript.go index b8a25d3..4d5cebc 100644 --- a/internal/hooks/antigravity/transcript.go +++ b/internal/hooks/antigravity/transcript.go @@ -13,7 +13,6 @@ import ( "strings" "time" - "github.com/tryatlas/atlas-cli/internal/capture/record" "github.com/tryatlas/atlas-cli/internal/hooks" ) @@ -119,6 +118,31 @@ func prompt(content string) string { return strings.TrimSpace(content) } +// pendingPrompt is the prompt of a USER_INPUT step that no model step +// follows: the turn agy is about to start answering when PreInvocation +// fires, since agy writes the prompt step before the hook. A transcript +// whose last steps are the model's (a follow-up invocation within a turn), +// or none at all, gives "". +func pendingPrompt(path string) string { + var pending string + err := eachNonBlankLine(path, func(_ int, raw []byte) { + var s step + if json.Unmarshal(raw, &s) != nil { + return + } + switch { + case s.Type == "USER_INPUT": + pending = prompt(s.Content) + case s.Source == "MODEL": + pending = "" + } + }) + if err != nil { + return "" + } + return pending +} + // Read parses the steps from a position into a turn. A step agy marks as // truncated is still read for what it holds. Usage is the sum of the steps' // token fields when any step has them. No model: the transcript names none @@ -154,20 +178,8 @@ func (reader) Read(path string, from int) (*hooks.Turn, int, error) { if tc.Name == "" { continue } - tool := &record.Tool{ - NativeID: id + "-" + strconv.Itoa(i), - Name: tc.Name, - Kind: toolKinds[tc.Name], - Arguments: decodeArgs(tc.Args), - Status: "completed", - } - if writeTools[tc.Name] { - if target, _ := decodeString(tc.Args["TargetFile"]); target != "" { - tool.Locations = []string{target} - } - } open = append(open, len(t.Items)) - t.Items = append(t.Items, hooks.Item{Tool: tool}) + t.Items = append(t.Items, hooks.Item{Tool: tc.tool(id + "-" + strconv.Itoa(i))}) } case "CONVERSATION_HISTORY", "SYSTEM_MESSAGE": // agy's own bookkeeping and injected notices. diff --git a/internal/hooks/antigravity/transcript_test.go b/internal/hooks/antigravity/transcript_test.go index 31d28dd..d37209c 100644 --- a/internal/hooks/antigravity/transcript_test.go +++ b/internal/hooks/antigravity/transcript_test.go @@ -249,6 +249,35 @@ func TestReadFromOffset(t *testing.T) { } } +func TestPendingPrompt(t *testing.T) { + if got := pendingPrompt(filepath.Join(t.TempDir(), "missing.jsonl")); got != "" { + t.Fatalf("missing transcript = %q", got) + } + // Both fixture turns are answered: nothing pending. + path := writeFixture(t) + if got := pendingPrompt(path); got != "" { + t.Fatalf("answered transcript = %q", got) + } + f, err := os.OpenFile(path, os.O_APPEND|os.O_WRONLY, 0o644) + if err != nil { + t.Fatal(err) + } + _, _ = f.WriteString(`{"step_index":12,"source":"USER_EXPLICIT","type":"USER_INPUT","status":"DONE","content":"\nnext\n"}` + "\n" + + `{"step_index":13,"source":"SYSTEM","type":"CONVERSATION_HISTORY","status":"DONE"}` + "\n") + _ = f.Close() + if got := pendingPrompt(path); got != "next" { + t.Fatalf("pending = %q, want next", got) + } + // The live shape, cut after the prompt step as PreInvocation sees it. + live1 := filepath.Join(t.TempDir(), "transcript_full.jsonl") + if err := os.WriteFile(live1, []byte(strings.SplitAfter(live, "\n")[0]), 0o644); err != nil { + t.Fatal(err) + } + if got := pendingPrompt(live1); got != "Create a file named note.txt containing the word hello" { + t.Fatalf("live pending = %q", got) + } +} + func TestPromptUnwrap(t *testing.T) { if got := prompt("no wrapper here "); got != "no wrapper here" { t.Fatalf("prompt = %q", got) diff --git a/internal/hooks/claude/claude.go b/internal/hooks/claude/claude.go index 3a524fb..466dac1 100644 --- a/internal/hooks/claude/claude.go +++ b/internal/hooks/claude/claude.go @@ -3,11 +3,13 @@ package claude import ( + "bytes" "encoding/json" "os" "os/exec" "path/filepath" + "github.com/tryatlas/atlas-cli/internal/capture/record" "github.com/tryatlas/atlas-cli/internal/hooks" ) @@ -27,6 +29,7 @@ const ( VerbStopFailure = "stop-failure" VerbPreCompact = "pre-compact" VerbSessionEnd = "session-end" + VerbPostToolUse = "post-tool-use" ) // ID is the registry key. @@ -40,7 +43,7 @@ func (Agent) Binary() string { return "claude" } // Verbs are the hook verbs the installed config invokes. func (Agent) Verbs() []string { - return []string{VerbSessionStart, VerbPromptSubmit, VerbStop, VerbStopFailure, VerbPreCompact, VerbSessionEnd} + return []string{VerbSessionStart, VerbPromptSubmit, VerbPostToolUse, VerbStop, VerbStopFailure, VerbPreCompact, VerbSessionEnd} } // SettingsPath is the local (per-machine, uncommitted) Claude settings @@ -53,6 +56,7 @@ func (a Agent) shaped(root string) hooks.ClaudeShaped { return hooks.ClaudeShaped{Path: SettingsPath(root), Types: []hooks.ClaudeHook{ {Type: "SessionStart", Command: hooks.WrapWithMessage(hooks.Command(ID, VerbSessionStart), hooks.MissingMessage)}, {Type: "UserPromptSubmit", Command: hooks.Wrap(hooks.Command(ID, VerbPromptSubmit))}, + {Type: "PostToolUse", Command: hooks.Wrap(hooks.Command(ID, VerbPostToolUse))}, {Type: "Stop", Command: hooks.Wrap(hooks.Command(ID, VerbStop))}, {Type: "StopFailure", Command: hooks.Wrap(hooks.Command(ID, VerbStopFailure))}, {Type: "PreCompact", Command: hooks.Wrap(hooks.Command(ID, VerbPreCompact))}, @@ -95,12 +99,33 @@ func (Agent) ResumeCommand(id string) string { return "claude -r " + id } // payload is the common shape of Claude Code hook input. type payload struct { - SessionID string `json:"session_id"` - TranscriptPath string `json:"transcript_path"` - Cwd string `json:"cwd"` - Model string `json:"model"` - Prompt string `json:"prompt"` - Source string `json:"source"` + SessionID string `json:"session_id"` + TranscriptPath string `json:"transcript_path"` + Cwd string `json:"cwd"` + Model string `json:"model"` + Prompt string `json:"prompt"` + Source string `json:"source"` + ToolName string `json:"tool_name"` + ToolUseID string `json:"tool_use_id"` + ToolInput json.RawMessage `json:"tool_input"` + ToolResponse json.RawMessage `json:"tool_response"` +} + +// toolOf is the completed call a PostToolUse payload describes. The +// response is a string or an object; either is kept as text. +func (p payload) toolOf() *record.Tool { + if p.ToolUseID == "" || p.ToolName == "" { + return nil + } + t := &record.Tool{NativeID: p.ToolUseID, Name: p.ToolName, Arguments: p.ToolInput, Status: "completed"} + if r := bytes.TrimSpace(p.ToolResponse); len(r) > 0 && string(r) != "null" { + var str string + if json.Unmarshal(r, &str) != nil { + str = string(r) + } + t.Result = &str + } + return t } // Parse maps a hook verb and payload to an event. @@ -123,6 +148,12 @@ func (Agent) Parse(verb string, raw []byte) (*hooks.Event, error) { case VerbStopFailure: ev.Kind = hooks.TurnEnd ev.TurnEndFailed = true + case VerbPostToolUse: + ev.Kind = hooks.ToolUse + ev.Tool = p.toolOf() + if ev.Tool == nil { + return nil, nil + } case VerbPreCompact: ev.Kind = hooks.Compaction case VerbSessionEnd: diff --git a/internal/hooks/claude/claude_test.go b/internal/hooks/claude/claude_test.go index f57651e..bf5c8f1 100644 --- a/internal/hooks/claude/claude_test.go +++ b/internal/hooks/claude/claude_test.go @@ -28,6 +28,15 @@ func TestParse(t *testing.T) { t.Fatal("stop-failure must mark the turn failed") } } + post := `{"session_id":"abc","transcript_path":"/t/abc.jsonl","cwd":"/w","hook_event_name":"PostToolUse","tool_name":"Write","tool_use_id":"toolu_01","tool_input":{"file_path":"/w/x.txt","content":"hi"},"tool_response":{"filePath":"/w/x.txt","success":true}}` + ev, err = a.Parse(VerbPostToolUse, []byte(post)) + if err != nil || ev.Kind != hooks.ToolUse || ev.Tool == nil || ev.Tool.NativeID != "toolu_01" || ev.Tool.Name != "Write" || + string(ev.Tool.Arguments) != `{"file_path":"/w/x.txt","content":"hi"}` || ev.Tool.Result == nil || !strings.Contains(*ev.Tool.Result, "success") { + t.Fatalf("post-tool-use → %+v %v", ev, err) + } + if ev, _ := a.Parse(VerbPostToolUse, []byte(`{"session_id":"abc"}`)); ev != nil { + t.Fatal("a tool payload without a call must be nil") + } if ev, err := a.Parse("unknown", []byte(payload)); ev != nil || err != nil { t.Fatal("unknown verb must be nil, nil") } @@ -67,7 +76,7 @@ func TestInstallWritesTheLocalSettings(t *testing.T) { if err := json.Unmarshal(b, &obj); err != nil { t.Fatal(err) } - for _, typ := range []string{"SessionStart", "UserPromptSubmit", "Stop", "StopFailure", "PreCompact", "SessionEnd"} { + for _, typ := range []string{"SessionStart", "UserPromptSubmit", "PostToolUse", "Stop", "StopFailure", "PreCompact", "SessionEnd"} { g := obj.Hooks[typ] if len(g) != 1 || len(g[0].Hooks) != 1 || g[0].Hooks[0].Type != "command" || !hooks.Owned(g[0].Hooks[0].Command) { t.Fatalf("%s: %+v", typ, g) diff --git a/internal/hooks/codex/codex.go b/internal/hooks/codex/codex.go index 4b3ad66..e291f5a 100644 --- a/internal/hooks/codex/codex.go +++ b/internal/hooks/codex/codex.go @@ -3,6 +3,7 @@ package codex import ( + "bytes" "encoding/json" "os" "os/exec" @@ -12,6 +13,7 @@ import ( "unicode/utf16" "unicode/utf8" + "github.com/tryatlas/atlas-cli/internal/capture/record" "github.com/tryatlas/atlas-cli/internal/hooks" ) @@ -111,6 +113,7 @@ type payload struct { Prompt string `json:"prompt"` ToolName string `json:"tool_name"` ToolInput json.RawMessage `json:"tool_input"` + ToolResponse json.RawMessage `json:"tool_response"` ToolUseID string `json:"tool_use_id"` } @@ -134,14 +137,13 @@ func (Agent) Parse(verb string, raw []byte) (*hooks.Event, error) { case VerbSessionEnd: ev.Kind = hooks.SessionEnd case VerbPostToolUse: - // Only the file-writing tool is a lifecycle event; shell and MCP - // calls are left to the transcript and the git status diff. - files := toolPatchFiles(p.ToolName, p.ToolInput) - if len(files) == 0 { + tool, files := p.toolOf() + if tool == nil && len(files) == 0 { return nil, nil } ev.Kind = hooks.ToolUse ev.ToolUseID = p.ToolUseID + ev.Tool = tool for _, f := range files { if !filepath.IsAbs(f) && p.Cwd != "" { f = filepath.Join(p.Cwd, f) @@ -154,6 +156,89 @@ func (Agent) Parse(verb string, raw []byte) (*hooks.Event, error) { return ev, nil } +// toolOf is the completed call a PostToolUse payload describes, shaped so +// the dispatcher recognises the same call when it reads the rollout at turn +// end (toolKeys in dispatch.go), plus the files an apply_patch wrote for the +// git attribution. +// +// Codex 0.153 reports each tool the model used, in code mode the inner call +// of the exec script: apply_patch with the envelope under command, and Bash +// with the shell command under command. Its tool_use_id (exec-) is not +// the rollout's call_id (call_), so the id never matches and the other +// keys must: +// +// - apply_patch (also under its Write and Edit aliases, and a code-mode +// exec script that only calls tools.apply_patch once): the shape of +// transcript.go's patchTool, name "apply_patch", arguments {"patch": …} +// and the envelope's paths as locations, so both the arguments hash and +// every written path match; +// - Bash {"command": …}: the command text, which transcript.go reads out +// of a lone tools.exec_command({"cmd": …}) script (CodeModeCommand) or a +// shell call's command, matches as the shell key; +// - a code-mode exec script that does more: name "exec" with arguments +// {"input": script}, the rollout's custom_tool_call shape, so the +// arguments hash matches; the patches it holds still name their files; +// - anything else: the payload's name and arguments, re-encoded like the +// rollout's (canonJSON), so the arguments hash matches a function_call +// with the same arguments. +// +// The response is a string or an object; either is kept as text. +func (p payload) toolOf() (*record.Tool, []string) { + var tool *record.Tool + if p.ToolUseID != "" && p.ToolName != "" { + tool = &record.Tool{NativeID: p.ToolUseID, Name: p.ToolName, Arguments: canonJSON(p.ToolInput), Status: "completed"} + if r := bytes.TrimSpace(p.ToolResponse); len(r) > 0 && string(r) != "null" { + var str string + if json.Unmarshal(r, &str) != nil { + str = string(r) + } + tool.Result = &str + } + } + var files []string + switch { + case isApplyPatch(p.ToolName): + patch := patchText(p.ToolInput) + files = PatchFiles(patch) + if tool != nil && len(files) > 0 { + tool.Name, tool.Arguments, tool.Locations = patchArgs(patch, files) + } + case p.ToolName == "exec": + script := patchText(p.ToolInput) + patches, others := CodeModePatches(script) + files = PatchFiles(strings.Join(patches, "\n")) + if tool == nil || script == "" { + break + } + if len(patches) == 1 && !others { + tool.Name, tool.Arguments, tool.Locations = patchArgs(patches[0], files) + } else { + tool.Arguments = hooks.Raw(map[string]string{"input": script}) + } + } + return tool, files +} + +// patchArgs is the apply_patch shape shared with transcript.go's patchTool. +func patchArgs(patch string, files []string) (string, json.RawMessage, []string) { + return "apply_patch", hooks.Raw(map[string]string{"patch": patch}), files +} + +// canonJSON re-encodes a JSON value with Go's encoder (sorted object keys, +// no HTML escaping) so the same arguments hash the same whether they came +// from a hook payload or the rollout; anything that is not JSON is kept. +func canonJSON(raw json.RawMessage) json.RawMessage { + raw = bytes.TrimSpace(raw) + if len(raw) == 0 { + return nil + } + var v any + if err := json.Unmarshal(raw, &v); err != nil { + return raw + } + return hooks.Raw(v) +} + // isApplyPatch recognises Codex's file tool: apply_patch, plus the Write and // Edit matcher aliases Codex registers for Claude-style hook configs. func isApplyPatch(name string) bool { @@ -164,19 +249,6 @@ func isApplyPatch(name string) bool { return false } -// toolPatchFiles lists the files a PostToolUse touched: an apply_patch call -// (also under the Write and Edit aliases), or a code-mode exec script that -// calls tools.apply_patch. Anything else is left to the transcript and the -// git status diff. -func toolPatchFiles(name string, input json.RawMessage) []string { - text := patchText(input) - if isApplyPatch(name) { - return PatchFiles(text) - } - patches, _ := CodeModePatches(text) - return PatchFiles(strings.Join(patches, "\n")) -} - // codeModeCall is a tool call in a code-mode script: tools.(. var codeModeCall = regexp.MustCompile(`\btools\.([A-Za-z_][A-Za-z0-9_]*)\s*\(\s*`) @@ -202,6 +274,25 @@ func CodeModePatches(script string) (patches []string, others bool) { return patches, others } +// CodeModeCommand is the argument object of a code-mode script that calls +// tools.exec_command({…}) exactly once and no other tool, when that object +// is a JSON literal with a cmd string; the object is re-encoded with sorted +// keys. Anything else is not a lone command. +func CodeModeCommand(script string) (json.RawMessage, bool) { + calls := codeModeCall.FindAllStringSubmatchIndex(script, -1) + if len(calls) != 1 || script[calls[0][2]:calls[0][3]] != "exec_command" { + return nil, false + } + var obj map[string]any + if err := json.NewDecoder(strings.NewReader(script[calls[0][1]:])).Decode(&obj); err != nil { + return nil, false + } + if cmd, ok := obj["cmd"].(string); !ok || strings.TrimSpace(cmd) == "" { + return nil, false + } + return hooks.Raw(obj), true +} + // jsString decodes the JavaScript string literal that starts at s[i] with a // ", ' or ` quote. A template literal holding ${…} and an unterminated or // malformed literal fail. diff --git a/internal/hooks/codex/codex_test.go b/internal/hooks/codex/codex_test.go index 4c78e5e..d03f5bb 100644 --- a/internal/hooks/codex/codex_test.go +++ b/internal/hooks/codex/codex_test.go @@ -7,6 +7,7 @@ import ( "strings" "testing" + "github.com/tryatlas/atlas-cli/internal/capture/record" "github.com/tryatlas/atlas-cli/internal/hooks" ) @@ -170,29 +171,77 @@ func TestParse(t *testing.T) { t.Fatalf("%+v %v", ev, err) } + // apply_patch: the call is shaped like the rollout's (transcript.go + // patchTool) so the dispatcher's dedupe matches by arguments and by the + // written paths; Files are absolute for the git attribution. patch := "*** Begin Patch\n*** Add File: docs/new.md\n+hi\n*** Update File: main.go\n@@\n-a\n+b\n*** Delete File: /abs/old.txt\n*** End Patch" - ev, err = a.Parse(VerbPostToolUse, []byte(`{`+common+`,"tool_name":"apply_patch","tool_use_id":"call_1","tool_input":{"command":`+string(hooks.Raw(patch))+`}}`)) - if err != nil || ev == nil || ev.Kind != hooks.ToolUse || ev.ToolUseID != "call_1" { + ev, err = a.Parse(VerbPostToolUse, []byte(`{`+common+`,"tool_name":"apply_patch","tool_use_id":"exec-1","tool_input":{"command":`+string(hooks.Raw(patch))+`},"tool_response":"Exit code: 0\nOutput:\nSuccess."}`)) + if err != nil || ev == nil || ev.Kind != hooks.ToolUse || ev.ToolUseID != "exec-1" || ev.Tool == nil { t.Fatalf("%+v %v", ev, err) } if want := []string{"/repo/docs/new.md", "/repo/main.go", "/abs/old.txt"}; strings.Join(ev.Files, ",") != strings.Join(want, ",") { t.Fatalf("files %v", ev.Files) } + want := patchTool("exec-1", patch) + if ev.Tool.NativeID != want.NativeID || ev.Tool.Name != want.Name || string(ev.Tool.Arguments) != string(want.Arguments) || strings.Join(ev.Tool.Locations, ",") != strings.Join(want.Locations, ",") || ev.Tool.Status != "completed" { + t.Fatalf("got %+v\nwant %+v", ev.Tool, want) + } + if ev.Tool.Result == nil || *ev.Tool.Result != "Exit code: 0\nOutput:\nSuccess." { + t.Fatalf("result %v", ev.Tool.Result) + } + if record.CanonicalToolName(ev.Tool.Name, "", "", ev.Tool.Arguments) != "Edit" { + t.Fatal("apply_patch should canonicalise to Edit") + } - // The Write and Edit aliases are the same tool. + // The Write and Edit aliases are the same tool; without a tool_use_id + // there is no call to deliver, but the files still count. ev, err = a.Parse(VerbPostToolUse, []byte(`{`+common+`,"tool_name":"Edit","tool_input":{"patch":"*** Begin Patch\n*** Update File: a.go\n*** End Patch"}}`)) - if err != nil || ev == nil || ev.Kind != hooks.ToolUse || len(ev.Files) != 1 || ev.Files[0] != "/repo/a.go" { + if err != nil || ev == nil || ev.Kind != hooks.ToolUse || ev.Tool != nil || len(ev.Files) != 1 || ev.Files[0] != "/repo/a.go" { t.Fatalf("%+v %v", ev, err) } - // A shell call is not a lifecycle event. - ev, err = a.Parse(VerbPostToolUse, []byte(`{`+common+`,"tool_name":"shell","tool_input":{"command":["ls"]}}`)) - if err != nil || ev != nil { + // A shell call (Codex reports a code-mode exec_command as Bash with the + // command text): the call is delivered with its arguments re-encoded + // and an object response kept as text; no files. + ev, err = a.Parse(VerbPostToolUse, []byte(`{`+common+`,"tool_name":"Bash","tool_use_id":"exec-2","tool_input":{"workdir":"/repo","command":"cat rt.txt"},"tool_response":{"output":"realtime\n","exit_code":0}}`)) + if err != nil || ev == nil || ev.Kind != hooks.ToolUse || ev.Tool == nil || len(ev.Files) != 0 { + t.Fatalf("%+v %v", ev, err) + } + if ev.Tool.NativeID != "exec-2" || ev.Tool.Name != "Bash" || string(ev.Tool.Arguments) != `{"command":"cat rt.txt","workdir":"/repo"}` || ev.Tool.Status != "completed" { + t.Fatalf("%+v", ev.Tool) + } + if ev.Tool.Result == nil || *ev.Tool.Result != `{"output":"realtime\n","exit_code":0}` { + t.Fatalf("result %v", ev.Tool.Result) + } + // The same command in the rollout's code-mode script yields the same + // command text, which is the dispatcher's shell key. + args, ok := CodeModeCommand(`const r = await tools.exec_command({"cmd":"cat rt.txt","workdir":"/repo","yield_time_ms":10000});` + "\ntext(r.output);\n") + if !ok { + t.Fatal("expected a lone exec_command") + } + var hookArgs, rolloutArgs struct { + Command string `json:"command"` + Cmd string `json:"cmd"` + } + if json.Unmarshal(ev.Tool.Arguments, &hookArgs) != nil || json.Unmarshal(args, &rolloutArgs) != nil || hookArgs.Command+hookArgs.Cmd != rolloutArgs.Command+rolloutArgs.Cmd { + t.Fatalf("hook %s, rollout %s", ev.Tool.Arguments, args) + } + + // An MCP or other tool: delivered as named, a null response is no result. + ev, err = a.Parse(VerbPostToolUse, []byte(`{`+common+`,"tool_name":"mcp__atlas_memory__memory_search","tool_use_id":"exec-3","tool_input":{"query":"hooks"},"tool_response":null}`)) + if err != nil || ev == nil || ev.Tool == nil || ev.Tool.Name != "mcp__atlas_memory__memory_search" || string(ev.Tool.Arguments) != `{"query":"hooks"}` || ev.Tool.Result != nil || len(ev.Files) != 0 { t.Fatalf("%+v %v", ev, err) } - // Nor is an apply_patch whose envelope names no file. - ev, err = a.Parse(VerbPostToolUse, []byte(`{`+common+`,"tool_name":"apply_patch","tool_input":{"command":"garbage"}}`)) + // An apply_patch whose envelope names no file is still a call, just not + // an edit. + ev, err = a.Parse(VerbPostToolUse, []byte(`{`+common+`,"tool_name":"apply_patch","tool_use_id":"exec-4","tool_input":{"command":"garbage"}}`)) + if err != nil || ev == nil || ev.Tool == nil || ev.Tool.Name != "apply_patch" || string(ev.Tool.Arguments) != `{"command":"garbage"}` || len(ev.Tool.Locations) != 0 || len(ev.Files) != 0 { + t.Fatalf("%+v %v", ev, err) + } + + // Nothing to deliver: no id and no files. + ev, err = a.Parse(VerbPostToolUse, []byte(`{`+common+`,"tool_name":"shell","tool_input":{"command":["ls"]}}`)) if err != nil || ev != nil { t.Fatalf("%+v %v", ev, err) } @@ -302,16 +351,62 @@ func TestCodeModePatches(t *testing.T) { } func TestParseCodeModeExec(t *testing.T) { - // A PostToolUse for the exec tool whose script edits a file still names - // the file; a script that only runs a shell command does not. + // A PostToolUse for the exec tool itself, carrying the code-mode script. common := `"session_id":"s1","transcript_path":"/t/rollout.jsonl","cwd":"/repo","model":"gpt-5-codex"` - script := `await tools.apply_patch("*** Begin Patch\n*** Add File: note.txt\n+hi\n*** End Patch");` + patch := "*** Begin Patch\n*** Add File: note.txt\n+hi\n*** End Patch" + script := `await tools.apply_patch(` + string(hooks.Raw(patch)) + `);` + + // A script with one patch and nothing else is that apply_patch call, + // shaped like the rollout's. ev, err := Agent{}.Parse(VerbPostToolUse, []byte(`{`+common+`,"tool_name":"exec","tool_use_id":"exec-1","tool_input":{"input":`+string(hooks.Raw(script))+`}}`)) if err != nil || ev == nil || ev.Kind != hooks.ToolUse || ev.ToolUseID != "exec-1" || len(ev.Files) != 1 || ev.Files[0] != "/repo/note.txt" { t.Fatalf("%+v %v", ev, err) } + want := patchTool("exec-1", patch) + if ev.Tool == nil || ev.Tool.NativeID != "exec-1" || ev.Tool.Name != "apply_patch" || string(ev.Tool.Arguments) != string(want.Arguments) || strings.Join(ev.Tool.Locations, ",") != "note.txt" { + t.Fatalf("got %+v\nwant %+v", ev.Tool, want) + } + + // A script that also runs a command stays the exec call, in the + // rollout's {"input": script} shape, and still names the patched files. + mixed := `await tools.shell({command: 'ls'}); ` + script + ` await tools.apply_patch("*** Begin Patch\n*** Delete File: old.txt\n*** End Patch");` + ev, err = Agent{}.Parse(VerbPostToolUse, []byte(`{`+common+`,"tool_name":"exec","tool_use_id":"exec-2","tool_input":{"input":`+string(hooks.Raw(mixed))+`}}`)) + if err != nil || ev == nil || ev.Tool == nil || ev.Tool.Name != "exec" || string(ev.Tool.Arguments) != string(hooks.Raw(map[string]string{"input": mixed})) { + t.Fatalf("%+v %v", ev, err) + } + if strings.Join(ev.Files, ",") != "/repo/note.txt,/repo/old.txt" { + t.Fatalf("files %v", ev.Files) + } + + // A script that only runs a shell command is the exec call with no files. + ev, err = Agent{}.Parse(VerbPostToolUse, []byte(`{`+common+`,"tool_name":"exec","tool_use_id":"exec-3","tool_input":{"input":"await tools.shell({command: 'ls'})"}}`)) + if err != nil || ev == nil || ev.Tool == nil || ev.Tool.Name != "exec" || len(ev.Files) != 0 { + t.Fatalf("%+v %v", ev, err) + } + // Without a tool_use_id a shell-only script is nothing. ev, err = Agent{}.Parse(VerbPostToolUse, []byte(`{`+common+`,"tool_name":"exec","tool_input":{"input":"await tools.shell({command: 'ls'})"}}`)) if err != nil || ev != nil { t.Fatalf("%+v %v", ev, err) } } + +func TestCodeModeCommand(t *testing.T) { + args, ok := CodeModeCommand(`const r = await tools.exec_command({"cmd":"cat rt.txt","workdir":"/repo","yield_time_ms":10000,"max_output_tokens":2000});` + "\ntext(r.output);\n") + if !ok || string(args) != `{"cmd":"cat rt.txt","max_output_tokens":2000,"workdir":"/repo","yield_time_ms":10000}` { + t.Fatalf("%s %v", args, ok) + } + for _, bad := range []string{ + `tools.exec_command({cmd: 'ls'})`, // a JS literal, not JSON + `tools.exec_command({"cmd":""})`, + `tools.exec_command({"workdir":"/repo"})`, + `tools.exec_command(args)`, + `tools.exec_command({"cmd":"ls"}); tools.exec_command({"cmd":"pwd"})`, + `tools.shell({"command":"ls"})`, + `tools.exec_command({"cmd":"ls"}); tools.apply_patch("*** Begin Patch\n*** Add File: a\n*** End Patch")`, + "", + } { + if args, ok := CodeModeCommand(bad); ok { + t.Fatalf("%s: %s", bad, args) + } + } +} diff --git a/internal/hooks/codex/transcript.go b/internal/hooks/codex/transcript.go index 9124de3..c379da5 100644 --- a/internal/hooks/codex/transcript.go +++ b/internal/hooks/codex/transcript.go @@ -180,11 +180,20 @@ func readItem(t *hooks.Turn, tools map[string]int, it item, idx int) { return } // Code mode (Codex 0.153): the model edits files from a JavaScript - // script run by the exec tool, as tools.apply_patch("…"). Each patch + // script run by the exec tool, as tools.apply_patch("…"), and runs + // shell commands as tools.exec_command({"cmd": …}). Each patch // becomes its own apply_patch call so the edit and its files are - // attributed; the script stays only when it also called other - // tools, and then it keeps the call id and the output. + // attributed; a script that only runs one command becomes that + // exec_command call, whose cmd is what the PostToolUse hook reported + // as the command (codex.go toolOf); the script itself stays only + // when it did more, and then it keeps the call id and the output. patches, others := CodeModePatches(it.Input) + if len(patches) == 0 { + if args, ok := CodeModeCommand(it.Input); ok { + addTool(t, tools, &record.Tool{NativeID: it.CallID, Name: "exec_command", Arguments: args, Status: "completed"}) + return + } + } if len(patches) == 0 || others { addTool(t, tools, &record.Tool{NativeID: it.CallID, Name: it.Name, Status: "completed", Arguments: hooks.Raw(map[string]string{"input": it.Input})}) } diff --git a/internal/hooks/codex/transcript_test.go b/internal/hooks/codex/transcript_test.go index cf4d57d..730f6f5 100644 --- a/internal/hooks/codex/transcript_test.go +++ b/internal/hooks/codex/transcript_test.go @@ -302,6 +302,8 @@ func TestReadCodeMode(t *testing.T) { `{"timestamp":"2026-10-12T02:39:28.000Z","type":"response_item","payload":{"type":"custom_tool_call_output","call_id":"call_Sn9","output":[{"type":"input_text","text":"Script completed\nWall time 0.6 seconds\nOutput:\n"},{"type":"input_text","text":"{}"}]}}`, `{"timestamp":"2026-10-12T02:39:29.000Z","type":"response_item","payload":{"type":"custom_tool_call","status":"completed","call_id":"call_mix","name":"exec","input":"await tools.shell({command: 'go test'}); await tools.apply_patch(\"*** Begin Patch\\n*** Update File: a.go\\n*** End Patch\");"}}`, `{"timestamp":"2026-10-12T02:39:30.000Z","type":"response_item","payload":{"type":"custom_tool_call_output","call_id":"call_mix","output":"ok"}}`, + `{"timestamp":"2026-10-12T02:39:31.000Z","type":"response_item","payload":{"type":"custom_tool_call","status":"completed","call_id":"call_cmd","name":"exec","input":"const r = await tools.exec_command({\"cmd\":\"cat rt.txt\",\"workdir\":\"/private/tmp/hooks-codex\",\"yield_time_ms\":10000,\"max_output_tokens\":2000});\ntext(r.output);\n"}}`, + `{"timestamp":"2026-10-12T02:39:32.000Z","type":"response_item","payload":{"type":"custom_tool_call_output","call_id":"call_cmd","output":[{"type":"input_text","text":"Script completed\nWall time 0.2 seconds\nOutput:\n"},{"type":"input_text","text":"realtime\n"}]}}`, } p := filepath.Join(t.TempDir(), "rollout.jsonl") if err := os.WriteFile(p, []byte(strings.Join(lines, "\n")+"\n"), 0o600); err != nil { @@ -311,7 +313,7 @@ func TestReadCodeMode(t *testing.T) { if err != nil { t.Fatal(err) } - if len(turn.Items) != 3 { + if len(turn.Items) != 4 { t.Fatalf("items %d: %+v", len(turn.Items), turn.Items) } // A script that only edits is the edit, with the script's output. @@ -333,4 +335,13 @@ func TestReadCodeMode(t *testing.T) { if ed == nil || ed.Name != "apply_patch" || ed.NativeID != "call_mix#patch1" || len(ed.Locations) != 1 || ed.Locations[0] != "a.go" || ed.Result != nil { t.Fatalf("patch %+v", ed) } + // A script that only runs one command is that command, with cmd at the + // top level (the hook reports the same text as command) and the output. + cmd := turn.Items[3].Tool + if cmd == nil || cmd.Name != "exec_command" || cmd.NativeID != "call_cmd" || !strings.Contains(string(cmd.Arguments), `"cmd":"cat rt.txt"`) || cmd.Result == nil || !strings.HasSuffix(*cmd.Result, "realtime\n") { + t.Fatalf("command %+v", cmd) + } + if record.CanonicalToolName(cmd.Name, "", "", cmd.Arguments) != "Bash" { + t.Fatal("exec_command should canonicalise to Bash") + } } diff --git a/internal/hooks/copilot/copilot.go b/internal/hooks/copilot/copilot.go index 7877994..4ddf077 100644 --- a/internal/hooks/copilot/copilot.go +++ b/internal/hooks/copilot/copilot.go @@ -36,6 +36,7 @@ type Agent struct{} const ( VerbSessionStart = "session-start" VerbPromptSubmitted = "user-prompt-submitted" + VerbPostToolUse = "post-tool-use" VerbAgentStop = "agent-stop" VerbSessionEnd = "session-end" ) @@ -44,6 +45,7 @@ const ( const ( eventSessionStart = "sessionStart" eventUserPromptSubmitted = "userPromptSubmitted" + eventPostToolUse = "postToolUse" eventAgentStop = "agentStop" eventSessionEnd = "sessionEnd" ) @@ -59,7 +61,7 @@ func (Agent) Binary() string { return "copilot" } // Verbs are the hook verbs the installed config invokes. func (Agent) Verbs() []string { - return []string{VerbSessionStart, VerbPromptSubmitted, VerbAgentStop, VerbSessionEnd} + return []string{VerbSessionStart, VerbPromptSubmitted, VerbPostToolUse, VerbAgentStop, VerbSessionEnd} } // HooksPath is the hook file Atlas owns. Copilot auto-discovers every JSON @@ -90,6 +92,7 @@ func wanted() hookFile { return hookFile{Version: 1, Hooks: map[string][]hookEntry{ eventSessionStart: entry(VerbSessionStart), eventUserPromptSubmitted: entry(VerbPromptSubmitted), + eventPostToolUse: entry(VerbPostToolUse), eventAgentStop: entry(VerbAgentStop), eventSessionEnd: entry(VerbSessionEnd), }} @@ -191,7 +194,10 @@ func TranscriptPath(sessionID string) string { // Parse maps a hook verb and payload to an event. Copilot's keys are // camelCase (sessionId, transcriptPath, cwd, prompt); the snake_case forms -// VS Code's hook host sends are accepted too. +// VS Code's hook host sends are accepted too. A postToolUse payload becomes +// a ToolUse event carrying the completed call (tool.go), which the dispatcher +// records into the open turn as it fires; a payload naming no tool is +// nothing to do. func (Agent) Parse(verb string, raw []byte) (*hooks.Event, error) { m, err := hooks.Decode(raw) if err != nil { @@ -208,6 +214,11 @@ func (Agent) Parse(verb string, raw []byte) (*hooks.Event, error) { case VerbPromptSubmitted: ev.Kind = hooks.TurnStart ev.Prompt = hooks.Str(m, "prompt") + case VerbPostToolUse: + ev.Kind = hooks.ToolUse + if ev.Tool = toolOf(raw, ev.Cwd); ev.Tool == nil { + return nil, nil + } case VerbAgentStop: ev.Kind = hooks.TurnEnd case VerbSessionEnd: diff --git a/internal/hooks/copilot/copilot_test.go b/internal/hooks/copilot/copilot_test.go index 02a39e7..2b0a317 100644 --- a/internal/hooks/copilot/copilot_test.go +++ b/internal/hooks/copilot/copilot_test.go @@ -7,6 +7,7 @@ import ( "strings" "testing" + "github.com/tryatlas/atlas-cli/internal/capture/record" "github.com/tryatlas/atlas-cli/internal/hooks" ) @@ -24,7 +25,7 @@ func TestRegisteredAndNamed(t *testing.T) { if a.ResumeCommand("abc") != "copilot --resume abc" { t.Fatal(a.ResumeCommand("abc")) } - if len(a.Verbs()) != 4 { + if len(a.Verbs()) != 5 { t.Fatal(a.Verbs()) } n, ok := a.(hooks.Noter) @@ -58,12 +59,12 @@ func TestInstallStateUninstall(t *testing.T) { if err := json.Unmarshal(b, &file); err != nil { t.Fatal(err) } - if file.Version != 1 || len(file.Hooks) != 4 { + if file.Version != 1 || len(file.Hooks) != 5 { t.Fatalf("%s", b) } for ev, verb := range map[string]string{ "sessionStart": "session-start", "userPromptSubmitted": "user-prompt-submitted", - "agentStop": "agent-stop", "sessionEnd": "session-end", + "postToolUse": "post-tool-use", "agentStop": "agent-stop", "sessionEnd": "session-end", } { list := file.Hooks[ev] if len(list) != 1 || list[0].Type != "command" { @@ -211,3 +212,106 @@ func TestTranscriptPathDefaultsToTheHomeDirectory(t *testing.T) { t.Fatalf("%q != %q", got, want) } } + +// The postToolUse payloads below are what Copilot CLI 1.0.95 sent to an echo +// hook: no tool call id; toolArgs an object for bash and MCP tools, the bare +// patch string for apply_patch; toolResult {resultType, textResultForLlm}. +func TestParsePostToolUse(t *testing.T) { + t.Setenv("COPILOT_HOME", "/copilot-home") + a := Agent{} + const id = "c90a3853-49f2-4828-9293-c24163db8c36" + derived := filepath.Join("/copilot-home", "session-state", id, "events.jsonl") + + shell := `{"sessionId":"` + id + `","timestamp":1791759613789,"cwd":"/private/tmp/hooks-copilot","toolName":"bash","toolArgs":{"command":"cat echo2.txt","description":"Read echo2.txt"},"toolResult":{"resultType":"success","textResultForLlm":"hello\n"}}` + ev, err := a.Parse(VerbPostToolUse, []byte(shell)) + if err != nil || ev == nil || ev.Kind != hooks.ToolUse || ev.SessionID != id || ev.Cwd != "/private/tmp/hooks-copilot" || ev.Transcript != derived { + t.Fatalf("%+v %v", ev, err) + } + tool := ev.Tool + if tool == nil || tool.Name != "bash" || tool.Status != "completed" || len(tool.Locations) != 0 || + string(tool.Arguments) != `{"command":"cat echo2.txt","description":"Read echo2.txt"}` || + tool.Result == nil || *tool.Result != "hello\n" { + t.Fatalf("%+v", tool) + } + if !strings.HasPrefix(tool.NativeID, "hook-") || len(tool.NativeID) != len("hook-")+24 { + t.Fatalf("the payload has no call id; a derived one is expected: %q", tool.NativeID) + } + if record.CanonicalToolName(tool.Name, tool.Title, tool.Kind, tool.Arguments) != "Bash" { + t.Fatal("bash must record as Bash") + } + // The same payload derives the same id; another timestamp another one. + again, _ := a.Parse(VerbPostToolUse, []byte(shell)) + if again.Tool.NativeID != tool.NativeID { + t.Fatalf("%q != %q", again.Tool.NativeID, tool.NativeID) + } + later, _ := a.Parse(VerbPostToolUse, []byte(strings.Replace(shell, "1791759613789", "1791759613790", 1))) + if later.Tool.NativeID == tool.NativeID { + t.Fatal("two calls at different times must not share an id") + } + + patch := `{"sessionId":"` + id + `","timestamp":1791759612107,"cwd":"/private/tmp/hooks-copilot","toolName":"apply_patch","toolArgs":"*** Begin Patch\n*** Add File: echo2.txt\n+hello\n*** End Patch\n","toolResult":{"resultType":"success","textResultForLlm":"Added 1 file(s): /private/tmp/hooks-copilot/echo2.txt"}}` + ev, err = a.Parse(VerbPostToolUse, []byte(patch)) + if err != nil || ev == nil || ev.Tool == nil { + t.Fatalf("%+v %v", ev, err) + } + tool = ev.Tool + if tool.Name != "apply_patch" || tool.Status != "completed" || + string(tool.Arguments) != `{"patch":"*** Begin Patch\n*** Add File: echo2.txt\n+hello\n*** End Patch\n"}` || + tool.Result == nil || *tool.Result != "Added 1 file(s): /private/tmp/hooks-copilot/echo2.txt" { + t.Fatalf("%+v", tool) + } + if len(tool.Locations) != 1 || tool.Locations[0] != "/private/tmp/hooks-copilot/echo2.txt" { + t.Fatalf("the patch's file, absolute like the transcript's fileEdits: %v", tool.Locations) + } + if record.CanonicalToolName(tool.Name, tool.Title, tool.Kind, tool.Arguments) != "Edit" { + t.Fatal("apply_patch must record as Edit") + } + if paths := record.WritePaths(tool.Arguments, tool.Locations); len(paths) != 1 || paths[0] != "/private/tmp/hooks-copilot/echo2.txt" { + t.Fatalf("the recorder must sample the patched file: %v", paths) + } + if record.EditPatch(tool.Arguments, tool.Locations[0]) != "*** Begin Patch\n*** Add File: echo2.txt\n+hello\n*** End Patch\n" { + t.Fatal("the patch must be kept as the edit's patch") + } + + mcp := `{"sessionId":"` + id + `","timestamp":1791759578328,"cwd":"/private/tmp/hooks-copilot","toolName":"atlas_memory-memory_briefing","toolArgs":{},"toolResult":{"resultType":"success","textResultForLlm":"{\"filesChanged\":[]}"}}` + ev, err = a.Parse(VerbPostToolUse, []byte(mcp)) + if err != nil || ev == nil || ev.Tool == nil || ev.Tool.Name != "atlas_memory-memory_briefing" || string(ev.Tool.Arguments) != `{}` || + ev.Tool.Result == nil || *ev.Tool.Result != `{"filesChanged":[]}` || len(ev.Tool.Locations) != 0 { + t.Fatalf("%+v %v", ev, err) + } + + // A result that is not a success fails the call; a string or absent + // result is kept as is; a string argument that is no patch is wrapped. + ev, _ = a.Parse(VerbPostToolUse, []byte(`{"sessionId":"`+id+`","timestamp":1,"toolName":"bash","toolArgs":{"command":"rm -rf /"},"toolResult":{"resultType":"denied","textResultForLlm":"The user denied this tool call."}}`)) + if ev.Tool.Status != "failed" || *ev.Tool.Result != "The user denied this tool call." { + t.Fatalf("%+v", ev.Tool) + } + ev, _ = a.Parse(VerbPostToolUse, []byte(`{"sessionId":"`+id+`","timestamp":2,"toolName":"view","toolArgs":"x.txt","toolResult":"hello"}`)) + if ev.Tool.Status != "completed" || *ev.Tool.Result != "hello" || string(ev.Tool.Arguments) != `{"input":"x.txt"}` || ev.Tool.Locations != nil { + t.Fatalf("%+v", ev.Tool) + } + ev, _ = a.Parse(VerbPostToolUse, []byte(`{"sessionId":"`+id+`","timestamp":3,"toolName":"think"}`)) + if ev.Tool.Result != nil || ev.Tool.Arguments != nil || ev.Tool.Status != "completed" { + t.Fatalf("%+v", ev.Tool) + } + + // No tool named: nothing to do. + if ev, err := a.Parse(VerbPostToolUse, []byte(`{"sessionId":"`+id+`","timestamp":4}`)); err != nil || ev != nil { + t.Fatalf("%+v %v", ev, err) + } +} + +func TestPatchPaths(t *testing.T) { + patch, _ := json.Marshal("*** Begin Patch\n*** Update File: src/a.go\n*** Move to: src/b.go\n@@\n-x\n+y\n*** Delete File: old.txt\n*** Add File: /abs/new.txt\n+n\n*** Update File: src/a.go\n*** End Patch\n") + got := patchPaths(patch, "/repo") + want := []string{"/repo/src/a.go", "/repo/src/b.go", "/repo/old.txt", "/abs/new.txt"} + if strings.Join(got, ",") != strings.Join(want, ",") { + t.Fatalf("%v", got) + } + if got := patchPaths(patch, ""); got[0] != "src/a.go" { + t.Fatalf("no cwd keeps the path relative: %v", got) + } + if patchPaths([]byte(`{"path":"x"}`), "/repo") != nil || patchPaths([]byte(`"not a patch"`), "/repo") != nil { + t.Fatal("only a patch string names files") + } +} diff --git a/internal/hooks/copilot/tool.go b/internal/hooks/copilot/tool.go new file mode 100644 index 0000000..456de18 --- /dev/null +++ b/internal/hooks/copilot/tool.go @@ -0,0 +1,147 @@ +package copilot + +import ( + "bytes" + "encoding/json" + "path/filepath" + "strings" + + "github.com/tryatlas/atlas-cli/internal/capture/record" + "github.com/tryatlas/atlas-cli/internal/capture/store" +) + +// toolPayload is Copilot's postToolUse input (1.0.95): {sessionId, +// timestamp, cwd, toolName, toolArgs, toolResult}. toolArgs is the tool's +// arguments object ({"command":…,"description":…} for bash, {} for an MCP +// tool), or apply_patch's bare patch string. toolResult is +// {"resultType":"success"|…,"textResultForLlm":…}; a shell command that +// exited non-zero is still a "success" (the tool ran), as in the transcript. +// The payload carries no tool call id: the transcript's toolCallId is not in +// it. +type toolPayload struct { + SessionID string `json:"sessionId"` + Timestamp json.RawMessage `json:"timestamp"` + ToolName string `json:"toolName"` + ToolArgs json.RawMessage `json:"toolArgs"` + ToolResult json.RawMessage `json:"toolResult"` +} + +type toolResult struct { + ResultType string `json:"resultType"` + Text string `json:"textResultForLlm"` +} + +// toolOf is the completed call a postToolUse payload describes, or nil when +// it names no tool. cwd resolves the relative paths of a patch. +func toolOf(raw []byte, cwd string) *record.Tool { + var p toolPayload + if json.Unmarshal(raw, &p) != nil || p.ToolName == "" { + return nil + } + args := toolArguments(p.ToolArgs) + t := &record.Tool{ + NativeID: hookCallID(p.SessionID, string(bytes.TrimSpace(p.Timestamp)), p.ToolName, args), + Name: p.ToolName, + Arguments: args, + Locations: patchPaths(p.ToolArgs, cwd), + Status: "completed", + } + res := bytes.TrimSpace(p.ToolResult) + if !isSet(res) { + return t + } + var r toolResult + if res[0] == '{' && json.Unmarshal(res, &r) == nil { + if r.ResultType != "" && r.ResultType != "success" { + t.Status = "failed" + } + text := r.Text + if text == "" { + text = string(res) + } + t.Result = &text + } else if text, ok := resultText(res); ok { + t.Result = &text + } + return t +} + +// hookCallID stands in for the call id the payload lacks: a digest of the +// session, the payload's timestamp, the tool and its arguments, so a +// re-delivered payload upserts the same row and two calls of one tool in the +// same millisecond stay apart. It never equals the transcript's toolCallId, +// so the dispatcher's dedupe at turn end goes by the arguments hash, the +// shell command text and the written paths, all of which this package shapes +// the same way on both sides. +func hookCallID(session, timestamp, name string, args json.RawMessage) string { + var compact bytes.Buffer + _ = json.Compact(&compact, args) + sum := store.SHA256Hex([]byte(session + "\x00" + timestamp + "\x00" + name + "\x00" + compact.String())) + return "hook-" + sum[:24] +} + +// toolArguments normalises a call's arguments to the JSON object the +// recorder and the dispatcher's dedupe keys read. An object stays as it is. +// apply_patch's bare patch string becomes {"patch": …}, which +// record.EditPatch keeps as the edit's patch; any other string becomes +// {"input": …}. Nothing stays nothing. The transcript reader applies the +// same shape, so a hook-delivered call and its transcript item hash alike. +func toolArguments(raw json.RawMessage) json.RawMessage { + raw = bytes.TrimSpace(raw) + if !isSet(raw) { + return nil + } + if raw[0] != '"' { + return raw + } + var s string + if json.Unmarshal(raw, &s) != nil { + return raw + } + key := "input" + if isPatch(s) { + key = "patch" + } + b, _ := json.Marshal(map[string]string{key: s}) + return b +} + +// isPatch recognises the apply_patch format. +func isPatch(s string) bool { return strings.HasPrefix(strings.TrimSpace(s), "*** Begin Patch") } + +// patchHeaders introduce the files a patch touches. +var patchHeaders = []string{"*** Add File: ", "*** Update File: ", "*** Delete File: ", "*** Move to: "} + +// patchPaths are the files an apply_patch call names, made absolute against +// cwd so they equal the transcript's fileEdits paths, which the dispatcher +// dedupes written paths by. Non-patch arguments yield nil: record.WritePaths +// reads their path keys instead. +func patchPaths(raw json.RawMessage, cwd string) []string { + var s string + if json.Unmarshal(raw, &s) != nil || !isPatch(s) { + return nil + } + var out []string + seen := map[string]bool{} + for _, line := range strings.Split(s, "\n") { + var p string + for _, h := range patchHeaders { + if rest, ok := strings.CutPrefix(line, h); ok { + p = strings.TrimSpace(rest) + break + } + } + if p == "" { + continue + } + if cwd != "" && !filepath.IsAbs(p) { + p = filepath.Join(cwd, p) + } + p = filepath.Clean(p) + if !seen[p] { + seen[p] = true + out = append(out, p) + } + } + return out +} diff --git a/internal/hooks/copilot/transcript.go b/internal/hooks/copilot/transcript.go index d0c63d3..08c7149 100644 --- a/internal/hooks/copilot/transcript.go +++ b/internal/hooks/copilot/transcript.go @@ -20,6 +20,12 @@ import ( // message it paid for, so a turn's usage is their sum. Older releases put // outputTokens on assistant.message instead; that is read when no // usage_record was seen. +// +// Since the postToolUse hook delivers each call as it completes, the items +// read here are mostly the dispatcher's dedupe material at turn end: their +// arguments take the same shape as the hook's (toolArguments) so the two +// hash alike, and fileEdits give the written paths the hook's patch paths +// are matched against. Calls the hook did not report stay as items. type reader struct{} // Position is the line count. @@ -146,7 +152,7 @@ func (reader) Read(path string, from int) (*hooks.Turn, int, error) { } tools[id] = len(t.Items) t.Items = append(t.Items, hooks.Item{Tool: &record.Tool{ - NativeID: id, Name: te.ToolName, Arguments: te.Arguments, Status: "running", + NativeID: id, Name: te.ToolName, Arguments: toolArguments(te.Arguments), Status: "running", }}) case "tool.execution_complete": var te toolEvent @@ -163,7 +169,7 @@ func (reader) Read(path string, from int) (*hooks.Turn, int, error) { // the call still counts, with what the completion says. i = len(t.Items) tools[id] = i - t.Items = append(t.Items, hooks.Item{Tool: &record.Tool{NativeID: id, Name: te.ToolName, Arguments: te.Arguments}}) + t.Items = append(t.Items, hooks.Item{Tool: &record.Tool{NativeID: id, Name: te.ToolName, Arguments: toolArguments(te.Arguments)}}) } tool := t.Items[i].Tool tool.Status = "completed" diff --git a/internal/hooks/copilot/transcript_test.go b/internal/hooks/copilot/transcript_test.go index 6524bd8..73f3ce5 100644 --- a/internal/hooks/copilot/transcript_test.go +++ b/internal/hooks/copilot/transcript_test.go @@ -144,6 +144,9 @@ func TestReadCurrentReleaseShape(t *testing.T) { tool.Result == nil || !strings.HasPrefix(*tool.Result, `{"content":"Added 1 file(s)`) { t.Fatalf("%+v", tool) } + if string(tool.Arguments) != `{"patch":"*** Begin Patch\n*** Add File: note.txt\n+hello\n*** End Patch\n"}` { + t.Fatalf("the bare patch string takes the hook payload's shape: %s", tool.Arguments) + } if turn.Items[1].Tool != nil || turn.Items[1].Body != "Created note.txt." { t.Fatalf("an empty-content message is no item; the final one is: %+v", turn.Items[1]) } diff --git a/internal/hooks/cursor/cursor.go b/internal/hooks/cursor/cursor.go index 0ec12b1..5412f5e 100644 --- a/internal/hooks/cursor/cursor.go +++ b/internal/hooks/cursor/cursor.go @@ -3,12 +3,15 @@ // under ~/.cursor/projects (docs/research/entire-cli.md §3). // // Observed live against cursor-agent 2026.10.01: the interactive TUI fires -// sessionStart (at the first prompt, not at launch), beforeSubmitPrompt, -// stop and sessionEnd, so turns are captured as they end. Print mode -// (cursor-agent -p) fires only sessionStart, the tool hooks and sessionEnd: -// no beforeSubmitPrompt and no stop, so a -p run yields a session with no -// turns. The TUI keeps a hook's stdin open; ReadPayload returns after one -// JSON value, so Atlas never blocks it. +// sessionStart (at the first prompt, not at launch), beforeSubmitPrompt, the +// tool hooks afterFileEdit and afterShellExecution as each call completes, +// stop and sessionEnd. The prompt opens the turn, each tool hook records its +// call into the open turn, and stop closes it with the transcript's text. +// Print mode (cursor-agent -p) fires only sessionStart, the tool hooks and +// sessionEnd: no beforeSubmitPrompt and no stop, so a -p run yields a +// session with no turns until sessionEnd captures the whole transcript as +// one. The TUI keeps a hook's stdin open; ReadPayload returns after one JSON +// value, so Atlas never blocks it. package cursor import ( @@ -23,6 +26,7 @@ import ( "regexp" "strings" + "github.com/tryatlas/atlas-cli/internal/capture/record" "github.com/tryatlas/atlas-cli/internal/capture/store" "github.com/tryatlas/atlas-cli/internal/hooks" ) @@ -37,11 +41,13 @@ type Agent struct{} // Hook verbs, as the installed commands name them. const ( - VerbSessionStart = "session-start" - VerbBeforePrompt = "before-submit-prompt" - VerbStop = "stop" - VerbSessionEnd = "session-end" - VerbPreCompact = "pre-compact" + VerbSessionStart = "session-start" + VerbBeforePrompt = "before-submit-prompt" + VerbAfterFileEdit = "after-file-edit" + VerbAfterShell = "after-shell-execution" + VerbStop = "stop" + VerbSessionEnd = "session-end" + VerbPreCompact = "pre-compact" ) // hook is one Cursor hook event and the verb Atlas runs for it. @@ -51,10 +57,15 @@ type hook struct { } // installed are the hooks Atlas writes, in lifecycle order. Cursor hooks -// take no matcher; the stdin payload is the same shape for every event. +// take no matcher; the stdin payload shares its common fields across events. +// Cursor has no generic post-tool hook: afterFileEdit and afterShellExecution +// are the two that name a completed call (afterMCPExecution is left to the +// transcript). var installed = []hook{ {"sessionStart", VerbSessionStart}, {"beforeSubmitPrompt", VerbBeforePrompt}, + {"afterFileEdit", VerbAfterFileEdit}, + {"afterShellExecution", VerbAfterShell}, {"stop", VerbStop}, {"sessionEnd", VerbSessionEnd}, {"preCompact", VerbPreCompact}, @@ -294,6 +305,7 @@ func (Agent) ResumeCommand(id string) string { return "cursor-agent --resume " + // the first tool hook on; the IDE names it throughout. type payload struct { ConversationID string `json:"conversation_id"` + GenerationID string `json:"generation_id"` // changes with each user message Model string `json:"model"` WorkspaceRoots []string `json:"workspace_roots"` TranscriptPath string `json:"transcript_path"` @@ -306,6 +318,72 @@ type payload struct { OutputTokens *json.Number `json:"output_tokens"` CacheReadTokens *json.Number `json:"cache_read_tokens"` CacheWriteTokens *json.Number `json:"cache_write_tokens"` + // afterFileEdit: the absolute path and the replacements applied to it. A + // new file arrives as one edit with an empty old_string. + FilePath string `json:"file_path"` + Edits []edit `json:"edits"` + // afterShellExecution: the command and, when Cursor captured it, its + // output. + Command string `json:"command"` + Output *string `json:"output"` +} + +// edit is one replacement of an afterFileEdit payload. +type edit struct { + OldString string `json:"old_string"` + NewString string `json:"new_string"` +} + +// nativeID names a hook-reported call: Cursor's tool hooks carry no call id +// (and its transcript gives tool_use blocks none either), so the id is the +// generation plus a hash of what the call did. The dispatcher matches the +// transcript's copy by written path or command text, not by this id. +func (p payload) nativeID(kind string, parts ...string) string { + h := store.SHA256Hex([]byte(strings.Join(parts, "\x00")))[:16] + if p.GenerationID == "" { + return kind + "-" + h + } + return p.GenerationID + "-" + kind + "-" + h +} + +// editTool is the completed call an afterFileEdit payload describes, in the +// shape Cursor's transcript gives the same call so the dispatcher's keys +// line up: a new file is Write {path, contents}; anything else is Edit +// {path, edits} with the single replacement also flattened to old_string and +// new_string so the recorder can synthesise its patch. +func (p payload) editTool() *record.Tool { + if p.FilePath == "" { + return nil + } + edits, _ := json.Marshal(p.Edits) + t := &record.Tool{NativeID: p.nativeID("edit", p.FilePath, string(edits)), Status: "completed"} + if len(p.Edits) == 1 && p.Edits[0].OldString == "" { + t.Name = "Write" + t.Arguments = hooks.Raw(map[string]any{"path": p.FilePath, "contents": p.Edits[0].NewString}) + return t + } + t.Name = "Edit" + args := map[string]any{"path": p.FilePath, "edits": p.Edits} + if len(p.Edits) == 1 { + args["old_string"], args["new_string"] = p.Edits[0].OldString, p.Edits[0].NewString + } + t.Arguments = hooks.Raw(args) + return t +} + +// shellTool is the completed call an afterShellExecution payload describes: +// Shell {command}, as the transcript names it, with the output as its result. +func (p payload) shellTool() *record.Tool { + if strings.TrimSpace(p.Command) == "" { + return nil + } + out := "" + if p.Output != nil { + out = *p.Output + } + t := &record.Tool{NativeID: p.nativeID("shell", p.Command, out), Name: "Shell", Status: "completed", + Arguments: hooks.Raw(map[string]string{"command": p.Command}), Result: p.Output} + return t } func (p payload) cwd() string { @@ -373,6 +451,16 @@ func (Agent) Parse(verb string, raw []byte) (*hooks.Event, error) { case VerbBeforePrompt: ev.Kind = hooks.TurnStart ev.Prompt = p.Prompt + case VerbAfterFileEdit: + ev.Kind = hooks.ToolUse + if ev.Tool = p.editTool(); ev.Tool == nil { + return nil, nil + } + case VerbAfterShell: + ev.Kind = hooks.ToolUse + if ev.Tool = p.shellTool(); ev.Tool == nil { + return nil, nil + } case VerbStop: ev.Kind = hooks.TurnEnd ev.Usage = p.usage() diff --git a/internal/hooks/cursor/cursor_test.go b/internal/hooks/cursor/cursor_test.go index aa6c46a..35d85cd 100644 --- a/internal/hooks/cursor/cursor_test.go +++ b/internal/hooks/cursor/cursor_test.go @@ -7,6 +7,7 @@ import ( "strings" "testing" + "github.com/tryatlas/atlas-cli/internal/capture/record" "github.com/tryatlas/atlas-cli/internal/hooks" ) @@ -43,7 +44,7 @@ func TestInstallIntoEmptyProject(t *testing.T) { if string(obj["version"]) != "1" { t.Fatalf("version %s", obj["version"]) } - if len(hs) != 5 { + if len(hs) != 7 { t.Fatalf("events %v", hs) } for _, h := range installed { @@ -105,8 +106,9 @@ func TestInstallKeepsUserHooksAndPrunesStale(t *testing.T) { if ss[1]["command"] != command(VerbSessionStart) { t.Fatalf("stale entry not replaced: %v", ss[1]) } - if len(hs["afterFileEdit"]) != 1 || hs["afterFileEdit"][0]["command"] != "./lint.sh" { - t.Fatalf("user event lost: %v", hs["afterFileEdit"]) + // Atlas installs into afterFileEdit too: the user's entry stays first. + if fe := hs["afterFileEdit"]; len(fe) != 2 || fe[0]["command"] != "./lint.sh" || fe[1]["command"] != command(VerbAfterFileEdit) { + t.Fatalf("user event lost or not appended to: %v", hs["afterFileEdit"]) } if _, ok := hs["preToolUse"]; ok { t.Fatalf("stale Atlas-only event kept: %v", hs["preToolUse"]) @@ -135,7 +137,7 @@ func TestInstallKeepsUserHooksAndPrunesStale(t *testing.T) { t.Fatal(err) } obj, hs = readHooks(t, root) - if len(hs) != 2 || len(hs["sessionStart"]) != 1 || hs["sessionStart"][0]["command"] != "echo mine" || len(hs["afterFileEdit"]) != 1 { + if len(hs) != 2 || len(hs["sessionStart"]) != 1 || hs["sessionStart"][0]["command"] != "echo mine" || len(hs["afterFileEdit"]) != 1 || hs["afterFileEdit"][0]["command"] != "./lint.sh" { t.Fatalf("after uninstall %v", hs) } if string(obj["version"]) != "1" { @@ -261,6 +263,47 @@ func TestParseLiveCLIPayloads(t *testing.T) { t.Fatalf("beforeSubmitPrompt %+v %v", ev, err) } + // The tool hooks, recorded from the same CLI: a new file, a replacement + // in it, and a shell command with its output. + ev, err = a.Parse(VerbAfterFileEdit, []byte(`{"conversation_id":"`+id+`","generation_id":"9c3d906a-6fae-4aca-8800-640b0373b6c2","model":"default","file_path":"/private/tmp/hooks-cursor/probe.txt","edits":[{"old_string":"","new_string":"alpha\n"}],`+tail+`,"hook_event_name":"afterFileEdit","transcript_path":"`+named+`"}`)) + if err != nil || ev.Kind != hooks.ToolUse || ev.Tool == nil || ev.Transcript != named || ev.SessionID != id { + t.Fatalf("afterFileEdit %+v %v", ev, err) + } + w := ev.Tool + if w.Name != "Write" || w.Status != "completed" || string(w.Arguments) != `{"contents":"alpha\n","path":"/private/tmp/hooks-cursor/probe.txt"}` || !strings.HasPrefix(w.NativeID, "9c3d906a-6fae-4aca-8800-640b0373b6c2-edit-") { + t.Fatalf("new file %+v %s", w, w.Arguments) + } + if got := record.WritePaths(w.Arguments, nil); len(got) != 1 || got[0] != "/private/tmp/hooks-cursor/probe.txt" { + t.Fatalf("write paths %q", got) + } + ev, err = a.Parse(VerbAfterFileEdit, []byte(`{"conversation_id":"`+id+`","generation_id":"9c3d906a-6fae-4aca-8800-640b0373b6c2","model":"default","file_path":"/private/tmp/hooks-cursor/probe.txt","edits":[{"old_string":"alpha","new_string":"beta"}],`+tail+`,"hook_event_name":"afterFileEdit","transcript_path":"`+named+`"}`)) + if err != nil || ev.Kind != hooks.ToolUse || ev.Tool == nil { + t.Fatalf("afterFileEdit (edit) %+v %v", ev, err) + } + if e := ev.Tool; e.Name != "Edit" || string(e.Arguments) != `{"edits":[{"old_string":"alpha","new_string":"beta"}],"new_string":"beta","old_string":"alpha","path":"/private/tmp/hooks-cursor/probe.txt"}` { + t.Fatalf("edit %+v %s", e, e.Arguments) + } + if record.CanonicalToolName(ev.Tool.Name, "", "", ev.Tool.Arguments) != "Edit" || record.EditPatch(ev.Tool.Arguments, "") == "" { + t.Fatalf("edit should canonicalise to Edit with a patch: %s", ev.Tool.Arguments) + } + ev, err = a.Parse(VerbAfterShell, []byte(`{"conversation_id":"`+id+`","generation_id":"9c3d906a-6fae-4aca-8800-640b0373b6c2","model":"default","command":"cat probe.txt","output":"beta\n","duration":13261.171,"sandbox":false,`+tail+`,"hook_event_name":"afterShellExecution","transcript_path":"`+named+`"}`)) + if err != nil || ev.Kind != hooks.ToolUse || ev.Tool == nil { + t.Fatalf("afterShellExecution %+v %v", ev, err) + } + if sh := ev.Tool; sh.Name != "Shell" || string(sh.Arguments) != `{"command":"cat probe.txt"}` || sh.Result == nil || *sh.Result != "beta\n" || sh.Status != "completed" || !strings.HasPrefix(sh.NativeID, "9c3d906a-6fae-4aca-8800-640b0373b6c2-shell-") { + t.Fatalf("shell %+v %s", sh, sh.Arguments) + } + if record.CanonicalToolName(ev.Tool.Name, "", "", ev.Tool.Arguments) != "Bash" { + t.Fatal("shell should canonicalise to Bash") + } + // A tool hook without its call (nothing edited, nothing run) is no event. + if ev, err := a.Parse(VerbAfterFileEdit, []byte(`{"conversation_id":"`+id+`",`+tail+`}`)); ev != nil || err != nil { + t.Fatalf("empty afterFileEdit %+v %v", ev, err) + } + if ev, err := a.Parse(VerbAfterShell, []byte(`{"conversation_id":"`+id+`","command":"",`+tail+`}`)); ev != nil || err != nil { + t.Fatalf("empty afterShellExecution %+v %v", ev, err) + } + ev, err = a.Parse(VerbStop, []byte(`{"conversation_id":"`+id+`","generation_id":"055d3bc7","model":"default","status":"completed","loop_count":0,"input_tokens":31219,"output_tokens":230,"cache_read_tokens":15488,"cache_write_tokens":0,`+tail+`,"hook_event_name":"stop","transcript_path":"`+named+`"}`)) if err != nil || ev.Kind != hooks.TurnEnd || ev.TurnEndFailed || ev.Transcript != named || ev.Usage == nil { t.Fatalf("stop %+v %v", ev, err) @@ -329,7 +372,7 @@ func TestIdentity(t *testing.T) { if a.Response(hooks.SessionStart, "hello") != nil { t.Fatal("Cursor shows no banner") } - if len(a.Verbs()) != 5 { + if len(a.Verbs()) != 7 { t.Fatal(a.Verbs()) } if got, ok := hooks.Get(ID); !ok || got.ID() != ID { diff --git a/internal/hooks/cursor/perevent_test.go b/internal/hooks/cursor/perevent_test.go new file mode 100644 index 0000000..af0f7c0 --- /dev/null +++ b/internal/hooks/cursor/perevent_test.go @@ -0,0 +1,148 @@ +package cursor + +import ( + "context" + "os" + "path/filepath" + "strings" + "testing" + "time" + + "github.com/tryatlas/atlas-cli/internal/hooks" +) + +// TestPerEventToolDelivery drives the dispatcher through the hooks Cursor's +// TUI fires for one turn: the prompt opens the turn, afterFileEdit and +// afterShellExecution deliver their calls as they complete, and stop closes +// the turn from the transcript without recording those calls a second time. +// The transcript's tool_use blocks carry no id, so the match is by written +// path (Write, StrReplace) and by command text (Shell, whose transcript +// arguments carry extra fields). +func TestPerEventToolDelivery(t *testing.T) { + root := t.TempDir() + transcript := filepath.Join(t.TempDir(), "c.jsonl") + const id = "e00128c9-9da5-4ab7-8ad9-2743f63d3734" + common := `"conversation_id":"` + id + `","generation_id":"c2eb53ba","model":"default","workspace_roots":["` + root + `"],"transcript_path":"` + transcript + `"` + file := filepath.Join(root, "probe.txt") + + var deliveries []hooks.Delivery + d := &hooks.Dispatcher{Root: root, Version: "test", Now: time.Now, Deliver: func(_ context.Context, dl hooks.Delivery) error { + deliveries = append(deliveries, dl) + return nil + }} + a := Agent{} + run := func(verb, body string) { + t.Helper() + ev, err := a.Parse(verb, []byte(`{`+common+`,`+body+`}`)) + if err != nil { + t.Fatalf("%s: %v", verb, err) + } + if _, err := d.Run(context.Background(), a, ev); err != nil { + t.Fatalf("%s: %v", verb, err) + } + } + + if err := os.WriteFile(transcript, nil, 0o600); err != nil { + t.Fatal(err) + } + run(VerbSessionStart, `"hook_event_name":"sessionStart"`) + run(VerbBeforePrompt, `"prompt":"make probe.txt"`) + // The agent works: Cursor's Write, then its StrReplace, then a Shell. + _ = os.WriteFile(file, []byte("alpha\n"), 0o644) + run(VerbAfterFileEdit, `"file_path":"`+file+`","edits":[{"old_string":"","new_string":"alpha\n"}]`) + _ = os.WriteFile(file, []byte("beta\n"), 0o644) + run(VerbAfterFileEdit, `"file_path":"`+file+`","edits":[{"old_string":"alpha","new_string":"beta"}]`) + run(VerbAfterShell, `"command":"cat probe.txt","output":"beta\n","duration":12,"sandbox":false`) + // A command the hooks did not report stays with the transcript. + lines := []string{ + `{"role":"user","message":{"content":[{"type":"text","text":"make probe.txt"}]}}`, + `{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Write","input":{"path":"` + file + `","contents":"alpha\n"}}]}}`, + `{"role":"assistant","message":{"content":[{"type":"tool_use","name":"StrReplace","input":{"path":"` + file + `","old_string":"alpha","new_string":"beta"}}]}}`, + `{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Shell","input":{"command":"cat probe.txt","working_directory":"` + root + `","description":"Show it"}}]}}`, + `{"role":"assistant","message":{"content":[{"type":"tool_use","name":"Shell","input":{"command":"echo unreported"}}]}}`, + `{"role":"assistant","message":{"content":[{"type":"text","text":"done"}]}}`, + } + if err := os.WriteFile(transcript, []byte(strings.Join(lines, "\n")+"\n"), 0o600); err != nil { + t.Fatal(err) + } + run(VerbStop, `"status":"completed","loop_count":0,"input_tokens":1000,"output_tokens":20,"cache_read_tokens":600,"cache_write_tokens":0`) + + var kinds []string + var tools []string + for _, dl := range deliveries { + switch { + case dl.Start: + kinds = append(kinds, "start") + case dl.Open != nil: + kinds = append(kinds, "open:"+dl.Open.Prompt) + case dl.Tool != nil: + kinds = append(kinds, "tool:"+dl.Tool.Name) + tools = append(tools, dl.Tool.NativeID) + case dl.Turn != nil: + kinds = append(kinds, "turn") + } + } + want := "start|open:make probe.txt|tool:Write|tool:Edit|tool:Shell|turn" + if got := strings.Join(kinds, "|"); got != want { + t.Fatalf("deliveries %s, want %s", got, want) + } + for i, id := range tools { + if !strings.HasPrefix(id, "c2eb53ba-") { + t.Fatalf("tool %d id %q lacks the generation", i, id) + } + for _, other := range tools[i+1:] { + if other == id { + t.Fatalf("two calls share id %q", id) + } + } + } + turn := deliveries[len(deliveries)-1].Turn + if !turn.Open || turn.Prompt != "make probe.txt" || turn.Usage == nil || turn.Usage.Output != 20 || turn.Usage.CacheRead != 600 { + t.Fatalf("turn %+v", turn) + } + var left []string + for _, it := range turn.Items { + if it.Tool != nil { + left = append(left, it.Tool.Name+":"+string(it.Tool.Arguments)) + } else { + left = append(left, it.Mode+":"+it.Body) + } + } + if len(left) != 2 || left[0] != `Shell:{"command":"echo unreported"}` || left[1] != "text:done" { + t.Fatalf("transcript items left after dedupe: %q", left) + } + if len(turn.Changed) != 0 { + t.Fatalf("the delivered Write explains probe.txt; changed = %q", turn.Changed) + } +} + +func TestEditAndShellToolShapes(t *testing.T) { + p := payload{GenerationID: "g1", FilePath: "/w/a.txt", Edits: []edit{{OldString: "", NewString: "x\n"}}} + w := p.editTool() + if w.Name != "Write" || string(w.Arguments) != `{"contents":"x\n","path":"/w/a.txt"}` || w.Status != "completed" { + t.Fatalf("write %+v %s", w, w.Arguments) + } + p.Edits = []edit{{OldString: "x", NewString: "y"}} + e := p.editTool() + if e.Name != "Edit" || !strings.Contains(string(e.Arguments), `"old_string":"x"`) || !strings.Contains(string(e.Arguments), `"edits":[{"old_string":"x","new_string":"y"}]`) { + t.Fatalf("edit %+v %s", e, e.Arguments) + } + if e.NativeID == w.NativeID || !strings.HasPrefix(e.NativeID, "g1-edit-") { + t.Fatalf("ids %q %q", w.NativeID, e.NativeID) + } + p.Edits = []edit{{OldString: "a", NewString: "b"}, {OldString: "c", NewString: "d"}} + if m := p.editTool(); m.Name != "Edit" || strings.Count(string(m.Arguments), `"old_string"`) != 2 { + t.Fatalf("multi-edit flattened: %s", m.Arguments) + } + if (payload{}).editTool() != nil || (payload{Command: " "}).shellTool() != nil { + t.Fatal("empty payloads should give no tool") + } + out := "ok\n" + s := payload{GenerationID: "g1", Command: "ls", Output: &out}.shellTool() + if s.Name != "Shell" || string(s.Arguments) != `{"command":"ls"}` || s.Result == nil || *s.Result != "ok\n" || !strings.HasPrefix(s.NativeID, "g1-shell-") { + t.Fatalf("shell %+v", s) + } + if n := (payload{Command: "ls"}).shellTool(); n.Result != nil || !strings.HasPrefix(n.NativeID, "shell-") { + t.Fatalf("no output, no generation: %+v", n) + } +} diff --git a/internal/hooks/deliver.go b/internal/hooks/deliver.go index 2c9a13b..b7e1de7 100644 --- a/internal/hooks/deliver.go +++ b/internal/hooks/deliver.go @@ -37,7 +37,7 @@ func SpoolDir(root string) string { return filepath.Join(Dir(root), "spool") } // Deliver is the default Dispatcher.Deliver. afterDirect, when set, runs // after a direct write with the store still open: the caller syncs the new // rows to the cloud there, so a turn does not wait for the next atlas serve. -func Deliver(version string, afterDirect func(ctx context.Context, st *store.Store)) func(ctx context.Context, d Delivery) error { +func Deliver(version string, afterDirect func(ctx context.Context, st *store.Store, d Delivery)) func(ctx context.Context, d Delivery) error { return func(ctx context.Context, d Delivery) error { if rf := listener.ReadRunFile(d.Root); rf != nil { if err := postHook(ctx, rf.Socket, d); err == nil { @@ -71,6 +71,17 @@ func Apply(ctx context.Context, rec *record.Recorder, mem *server.Server, ds []D if mem != nil { mem.SessionEnded(ctx, g) } + case d.Open != nil: + if _, err := rec.OpenTurn(ctx, d.Session, d.Open.Prompt, d.Open.At); err != nil { + return err + } + case d.Tool != nil: + if err := rec.RecordTool(ctx, d.Session, *d.Tool, d.Changed, d.At); err != nil { + return err + } + if mem != nil { + foldChanges(ctx, mem, g, d.Root, &record.CapturedTurn{Items: []record.CapturedItem{{Tool: d.Tool}}, Changed: d.Changed}) + } case d.Turn != nil: if _, err := rec.RecordTurn(ctx, d.Session, *d.Turn); err != nil { return err @@ -116,7 +127,7 @@ func foldChanges(ctx context.Context, mem *server.Server, g server.Grant, root s // applyDirect takes the writer lock for the duration of the write, drains // the spool first, then applies ds. -func applyDirect(ctx context.Context, version, root string, ds []Delivery, after func(ctx context.Context, st *store.Store)) error { +func applyDirect(ctx context.Context, version, root string, ds []Delivery, after func(ctx context.Context, st *store.Store, d Delivery)) error { lock, err := store.Lock(root) if err != nil { return err @@ -138,7 +149,9 @@ func applyDirect(ctx context.Context, version, root string, ds []Delivery, after } ClearLastError(root) if after != nil { - after(ctx, st) + for _, d := range ds { + after(ctx, st, d) + } } return nil } diff --git a/internal/hooks/dispatch.go b/internal/hooks/dispatch.go index 802e339..f00fb78 100644 --- a/internal/hooks/dispatch.go +++ b/internal/hooks/dispatch.go @@ -1,7 +1,9 @@ package hooks import ( + "bytes" "context" + "encoding/json" "errors" "fmt" "io/fs" @@ -25,14 +27,28 @@ type Dispatcher struct { Banner string } -// Delivery is what a hook hands to the capture side: a session start, a -// turn, or a session end for one native session. +// Delivery is what a hook hands to the capture side for one native session: +// a session start, an opening prompt, one completed tool call, the turn's +// close (or a whole turn), or a session end. type Delivery struct { Root string `json:"root"` Session record.Session `json:"session"` Start bool `json:"start,omitempty"` + Open *OpenTurn `json:"open,omitempty"` + Tool *record.Tool `json:"tool,omitempty"` Turn *record.CapturedTurn `json:"turn,omitempty"` End bool `json:"end,omitempty"` + // Changed are Project-relative paths git saw change while Tool (a + // shell call) ran; they are recorded as its file touches. + Changed []string `json:"changed,omitempty"` + // At is when the hook fired, so a spooled delivery keeps its time. + At time.Time `json:"at,omitempty"` +} + +// OpenTurn is the prompt that opens a turn as it is submitted. +type OpenTurn struct { + Prompt string `json:"prompt"` + At time.Time `json:"at"` } // Run handles one event. Every error is logged and swallowed by the caller; @@ -44,6 +60,13 @@ func (d *Dispatcher) Run(ctx context.Context, a Agent, ev *Event) ([]byte, error if !ValidSessionID(ev.SessionID) { return nil, ErrBadSessionID } + // Hooks of one session can fire concurrently (parallel tool calls): + // one at a time per session, so the state's read-modify-write holds. + unlock, err := lockSession(d.Root, a.ID(), ev.SessionID) + if err != nil { + return nil, err + } + defer unlock() now := d.Now() st, err := LoadState(d.Root, a.ID(), ev.SessionID) if err != nil { @@ -66,7 +89,7 @@ func (d *Dispatcher) Run(ctx context.Context, a Agent, ev *Event) ([]byte, error if err := st.Save(d.Root); err != nil { return nil, err } - _ = d.deliver(ctx, st, Delivery{Root: d.Root, Session: sess, Start: true}) + _ = d.deliver(ctx, st, Delivery{Root: d.Root, Session: sess, Start: true, At: now}) } switch ev.Kind { @@ -90,19 +113,59 @@ func (d *Dispatcher) Run(ctx context.Context, a Agent, ev *Event) ([]byte, error } st.InTurn = true st.Prompt = ev.Prompt - st.ToolFiles = nil + st.ToolFiles, st.Delivered, st.Tools, st.Open = nil, nil, nil, false st.Status = gitStatus(ctx, d.Root) if r := a.Reader(); r != nil && st.Transcript != "" { if pos, err := r.Position(st.Transcript); err == nil { st.Offset = pos } } + if ev.Prompt != "" { + // The prompt opens the turn now; tool calls follow as they + // complete, and the reply closes it (per-event capture). + st.Open = true + if err := st.Save(d.Root); err != nil { + return nil, err + } + return nil, d.deliver(ctx, st, Delivery{Root: d.Root, Session: sess, Open: &OpenTurn{Prompt: ev.Prompt, At: now}, At: now}) + } return nil, st.Save(d.Root) case ToolUse: for _, f := range ev.Files { st.ToolFiles = append(st.ToolFiles, relPath(d.Root, f)) } + if ev.Tool != nil && ev.Tool.NativeID != "" { + if !st.Open { + st.Tools = append(st.Tools, *ev.Tool) + return nil, st.Save(d.Root) + } + st.Delivered = append(st.Delivered, toolKeys(*ev.Tool)) + for _, p := range record.WritePaths(ev.Tool.Arguments, ev.Tool.Locations, ev.Tool.Diffs...) { + rel, _ := record.ProjectPath(d.Root, p) + st.Delivered = append(st.Delivered, []string{"path:" + rel}) // explained: not a shell change + } + dl := Delivery{Root: d.Root, Session: sess, Tool: ev.Tool, At: now} + if record.CanonicalToolName(ev.Tool.Name, ev.Tool.Title, ev.Tool.Kind, ev.Tool.Arguments) == "Bash" && st.Status != nil { + // What the shell command changed is known now: its touches, + // and the baseline for the rest of the turn moves past them. + after := gitStatus(ctx, d.Root) + explained := explainedPaths(st.Delivered) + for _, p := range changedSince(d.Root, st.Status, after) { + if !explained[p] { + dl.Changed = append(dl.Changed, p) + st.Delivered = append(st.Delivered, []string{"path:" + p}) + } + } + if after != nil { + st.Status = after + } + } + if err := st.Save(d.Root); err != nil { + return nil, err + } + return nil, d.deliver(ctx, st, dl) + } return nil, st.Save(d.Root) case TurnEnd: @@ -112,6 +175,7 @@ func (d *Dispatcher) Run(ctx context.Context, a Agent, ev *Event) ([]byte, error return nil, err } st.InTurn, st.Prompt, st.ToolFiles, st.Status = false, "", nil, nil + st.Open, st.Delivered, st.Tools = false, nil, nil if turn == nil { return nil, st.Save(d.Root) } @@ -120,7 +184,7 @@ func (d *Dispatcher) Run(ctx context.Context, a Agent, ev *Event) ([]byte, error return nil, err } sess.Model = st.Model - return nil, d.deliver(ctx, st, Delivery{Root: d.Root, Session: sess, Turn: turn}) + return nil, d.deliver(ctx, st, Delivery{Root: d.Root, Session: sess, Turn: turn, At: now}) case Compaction: return nil, st.Save(d.Root) @@ -133,7 +197,7 @@ func (d *Dispatcher) Run(ctx context.Context, a Agent, ev *Event) ([]byte, error if turn, err := d.turnEnd(ctx, a, st, ev); err == nil && turn != nil { st.Turn = 1 sess.Model = st.Model - _ = d.deliver(ctx, st, Delivery{Root: d.Root, Session: sess, Turn: turn}) + _ = d.deliver(ctx, st, Delivery{Root: d.Root, Session: sess, Turn: turn, At: now}) } } // The state stays (atlas agents sessions lists it with its resume @@ -142,7 +206,7 @@ func (d *Dispatcher) Run(ctx context.Context, a Agent, ev *Event) ([]byte, error if err := st.Save(d.Root); err != nil { return nil, err } - return nil, d.deliver(ctx, st, Delivery{Root: d.Root, Session: sess, End: true}) + return nil, d.deliver(ctx, st, Delivery{Root: d.Root, Session: sess, End: true, At: now}) case SubagentStart, SubagentEnd: return nil, st.Save(d.Root) @@ -185,9 +249,19 @@ func (d *Dispatcher) turnEnd(ctx context.Context, a Agent, st *State, ev *Event) if ev.Model != "" { turn.Model = ev.Model } + // Tool calls already delivered during the open turn are not recorded + // again from the transcript; calls the hooks saw while no turn was open + // join now. + if st.Open { + turn.Open = true + turn.Items = dropDelivered(turn.Items, st.Delivered) + } + for i := range st.Tools { + turn.Items = append(turn.Items, record.CapturedItem{Tool: &st.Tools[i]}) + } // Files the agent's tool hooks named, then whatever git says changed - // during the turn that no tool call explains. - explained := map[string]bool{} + // during the turn that no tool call explains (delivered ones included). + explained := explainedPaths(st.Delivered) for _, it := range turn.Items { if it.Tool == nil { continue @@ -210,12 +284,168 @@ func (d *Dispatcher) turnEnd(ctx context.Context, a Agent, st *State, ev *Event) } } } - if turn.Prompt == "" && len(turn.Items) == 0 && len(turn.Changed) == 0 && !ev.TurnEndFailed { + if turn.Prompt == "" && len(turn.Items) == 0 && len(turn.Changed) == 0 && !ev.TurnEndFailed && !turn.Open { return nil, nil // nothing happened (a turn that only read) } return turn, nil } +// toolKeys identifies a tool call across the hook payload and the +// transcript, whose ids and argument shapes may differ: the agent's call +// id; the canonical name with a hash of the arguments (unless they are +// empty); for a shell call its command text (a string, or an argv array +// joined); for a call that writes files, each written path. +func toolKeys(t record.Tool) []string { + keys := []string{"id:" + t.NativeID} + name := record.CanonicalToolName(t.Name, t.Title, t.Kind, t.Arguments) + if len(bytes.TrimSpace(t.Arguments)) > 0 { + var compact bytes.Buffer + if json.Compact(&compact, t.Arguments) == nil && compact.String() != "{}" && compact.String() != "null" { + keys = append(keys, "args:"+strings.ToLower(name)+":"+store.SHA256Hex(compact.Bytes())) + } + var m struct { + Command json.RawMessage `json:"command"` + Cmd json.RawMessage `json:"cmd"` + } + if json.Unmarshal(t.Arguments, &m) == nil { + if c := commandText(m.Command) + commandText(m.Cmd); c != "" { + keys = append(keys, "cmd:"+store.SHA256Hex([]byte(c))) + } + } + } + if record.WritesFiles(name) || len(t.Diffs) > 0 { + for _, p := range record.WritePaths(t.Arguments, t.Locations, t.Diffs...) { + keys = append(keys, "write:"+filepath.ToSlash(filepath.Clean(p))) + } + } + return keys +} + +// commandText flattens a command argument: a string, or an argv array. +func commandText(raw json.RawMessage) string { + if len(raw) == 0 { + return "" + } + var s string + if json.Unmarshal(raw, &s) == nil { + return strings.TrimSpace(s) + } + var argv []string + if json.Unmarshal(raw, &argv) == nil { + return strings.TrimSpace(strings.Join(argv, " ")) + } + return "" +} + +// explainedPaths are the Project paths delivered tool calls wrote. +func explainedPaths(delivered [][]string) map[string]bool { + out := map[string]bool{} + for _, g := range delivered { + for _, k := range g { + if rel, ok := strings.CutPrefix(k, "path:"); ok { + out[rel] = true + } + } + } + return out +} + +// dropDelivered removes the transcript's tool items already recorded from a +// hook, each delivered call matching at most one item. When the agent's hook +// ids match its transcript ids (any item's id was delivered) ids decide +// alone, so two distinct calls with the same command stay distinct; an item +// matched by id is kept, marked NoSample, so its result completes the row. +// Otherwise an item matches a delivered call by arguments, by command text, +// or by every path it wrote, and is dropped. +func dropDelivered(items []record.CapturedItem, delivered [][]string) []record.CapturedItem { + groups := make([][]string, 0, len(delivered)) + for _, g := range delivered { + if len(g) > 0 && !strings.HasPrefix(g[0], "path:") { + groups = append(groups, g) + } + } + has := func(g []string, key string) bool { + for _, k := range g { + if k == key { + return true + } + } + return false + } + idsMatch := false + for _, it := range items { + if it.Tool == nil { + continue + } + for _, g := range groups { + if has(g, "id:"+it.Tool.NativeID) { + idsMatch = true + } + } + } + match := func(t record.Tool) int { + keys := toolKeys(t) + for i, g := range groups { + if has(g, keys[0]) { + return i + } + } + if idsMatch { + return -1 + } + for i, g := range groups { + for _, k := range keys[1:] { + if !strings.HasPrefix(k, "write:") && has(g, k) { + return i + } + } + } + // Every written path delivered (possibly by several calls): a + // duplicate too; the first writing group is consumed. + writes, first := 0, -1 + for _, k := range keys { + if !strings.HasPrefix(k, "write:") { + continue + } + found := -1 + for i, g := range groups { + if has(g, k) { + found = i + break + } + } + if found < 0 { + return -1 + } + writes++ + if first < 0 { + first = found + } + } + if writes > 0 { + return first + } + return -1 + } + kept := items[:0] + for _, it := range items { + if it.Tool != nil { + if i := match(*it.Tool); i >= 0 { + byID := has(groups[i], "id:"+it.Tool.NativeID) + groups = append(groups[:i], groups[i+1:]...) + if !byID { + continue + } + // Same row: let the transcript complete it (result, status) + // without sampling its writes again. + it.Tool.NoSample = true + } + } + kept = append(kept, it) + } + return kept +} + // deliver hands off to the store; a failure spools (deliver.go) and is // reported once in the hooks log. func (d *Dispatcher) deliver(ctx context.Context, st *State, dl Delivery) error { diff --git a/internal/hooks/droid/droid.go b/internal/hooks/droid/droid.go index 3a1917c..6427ff6 100644 --- a/internal/hooks/droid/droid.go +++ b/internal/hooks/droid/droid.go @@ -4,12 +4,15 @@ package droid import ( + "bytes" "encoding/json" "os" "os/exec" "path/filepath" "strings" + "github.com/tryatlas/atlas-cli/internal/capture/record" + "github.com/tryatlas/atlas-cli/internal/capture/store" "github.com/tryatlas/atlas-cli/internal/hooks" ) @@ -28,6 +31,7 @@ const ( VerbStop = "stop" VerbPreCompact = "pre-compact" VerbSessionEnd = "session-end" + VerbPostToolUse = "post-tool-use" ) // MissingMessage is what Droid shows when the hook is installed but atlas is @@ -45,7 +49,7 @@ func (Agent) Binary() string { return "droid" } // Verbs are the hook verbs the installed config invokes. func (Agent) Verbs() []string { - return []string{VerbSessionStart, VerbPromptSubmit, VerbStop, VerbPreCompact, VerbSessionEnd} + return []string{VerbSessionStart, VerbPromptSubmit, VerbPostToolUse, VerbStop, VerbPreCompact, VerbSessionEnd} } // SettingsPath is Droid's project settings file, which holds its hooks. It @@ -63,6 +67,9 @@ func (Agent) shaped(root string) hooks.ClaudeShaped { {Type: "SessionStart", Command: hooks.WrapWithMessage(hooks.Command(ID, VerbSessionStart), MissingMessage)}, {Type: "SessionStart", Command: promptSubmit}, {Type: "UserPromptSubmit", Command: promptSubmit}, + // Matcher "" is every tool: each completed call is recorded into the + // open turn as it happens (per-event delivery). + {Type: "PostToolUse", Command: hooks.Wrap(hooks.Command(ID, VerbPostToolUse))}, {Type: "Stop", Command: hooks.Wrap(hooks.Command(ID, VerbStop))}, {Type: "PreCompact", Command: hooks.Wrap(hooks.Command(ID, VerbPreCompact))}, {Type: "SessionEnd", Command: hooks.Wrap(hooks.Command(ID, VerbSessionEnd))}, @@ -102,13 +109,47 @@ func (Agent) Response(k hooks.Kind, message string) []byte { func (Agent) ResumeCommand(id string) string { return "droid --session-id " + id } // payload is the common shape of Droid hook input. Stop omits model, and -// the SessionStart-fired user-prompt-submit omits prompt. +// the SessionStart-fired user-prompt-submit omits prompt. PostToolUse +// carries the Claude-style tool fields (Entire's factoryaidroid/types.go +// postToolHookInputRaw). type payload struct { - SessionID string `json:"session_id"` - TranscriptPath string `json:"transcript_path"` - Cwd string `json:"cwd"` - Model string `json:"model"` - Prompt string `json:"prompt"` + SessionID string `json:"session_id"` + TranscriptPath string `json:"transcript_path"` + Cwd string `json:"cwd"` + Model string `json:"model"` + Prompt string `json:"prompt"` + ToolName string `json:"tool_name"` + ToolUseID string `json:"tool_use_id"` + ToolInput json.RawMessage `json:"tool_input"` + ToolResponse json.RawMessage `json:"tool_response"` +} + +// toolOf is the completed call a PostToolUse payload describes, keyed by +// the tool_use_id Droid shares with its transcript's tool_use block. Nil +// without an id or a name: Droid has been seen to omit tool_use_id (Entire +// keeps a fingerprint fallback for it), and such a call is left to the +// transcript at Stop. The response is a string or an object; either is +// kept as text. +func (p payload) toolOf() *record.Tool { + if p.ToolName == "" { + return nil + } + id := p.ToolUseID + if id == "" { + // Droid has shipped tool payloads without an id: derive a stable one + // from the call; the dispatcher still matches the transcript's call + // by arguments or written path. + id = "droid-" + store.SHA256Hex(append([]byte(p.ToolName+"\x00"), p.ToolInput...))[:16] + } + t := &record.Tool{NativeID: id, Name: p.ToolName, Arguments: p.ToolInput, Status: "completed"} + if r := bytes.TrimSpace(p.ToolResponse); len(r) > 0 && string(r) != "null" { + var str string + if json.Unmarshal(r, &str) != nil { + str = string(r) + } + t.Result = &str + } + return t } // Parse maps a hook verb and payload to an event. @@ -126,6 +167,12 @@ func (Agent) Parse(verb string, raw []byte) (*hooks.Event, error) { case VerbPromptSubmit: ev.Kind = hooks.TurnStart ev.Prompt = strings.TrimSpace(p.Prompt) + case VerbPostToolUse: + ev.Kind = hooks.ToolUse + ev.Tool = p.toolOf() + if ev.Tool == nil { + return nil, nil + } case VerbStop: ev.Kind = hooks.TurnEnd if ev.Model == "" { diff --git a/internal/hooks/droid/droid_test.go b/internal/hooks/droid/droid_test.go index 75c996c..76fd015 100644 --- a/internal/hooks/droid/droid_test.go +++ b/internal/hooks/droid/droid_test.go @@ -4,6 +4,7 @@ import ( "encoding/json" "os" "path/filepath" + "slices" "strings" "testing" @@ -79,11 +80,14 @@ func TestInstallUninstall(t *testing.T) { if got := commands(hk["Stop"]); len(got) != 1 || got[0] != hooks.Wrap(hooks.Command(ID, VerbStop)) { t.Fatalf("Stop should hold only the current hook (stale pruned): %q", got) } - for typ, verb := range map[string]string{"UserPromptSubmit": VerbPromptSubmit, "PreCompact": VerbPreCompact, "SessionEnd": VerbSessionEnd} { + for typ, verb := range map[string]string{"UserPromptSubmit": VerbPromptSubmit, "PostToolUse": VerbPostToolUse, "PreCompact": VerbPreCompact, "SessionEnd": VerbSessionEnd} { if got := commands(hk[typ]); len(got) != 1 || got[0] != hooks.Wrap(hooks.Command(ID, verb)) { t.Fatalf("%s: %q", typ, got) } } + if post := hk["PostToolUse"]; len(post) != 1 || post[0].Matcher == nil || *post[0].Matcher != "" { + t.Fatalf("PostToolUse should match every tool with matcher \"\": %+v", post) + } if a.State(root) != hooks.Current { t.Fatalf("state after install: %v", a.State(root)) } @@ -171,11 +175,65 @@ func TestParse(t *testing.T) { if ev, err := a.Parse("notification", []byte(`{`+base+`}`)); err != nil || ev != nil { t.Fatalf("unknown verb: %v %v", ev, err) } + if !slices.Contains(a.Verbs(), VerbPostToolUse) { + t.Fatalf("verbs should include post-tool-use: %q", a.Verbs()) + } if _, err := a.Parse(VerbStop, []byte(`nope`)); err == nil { t.Fatal("bad JSON should error") } } +func TestParsePostToolUse(t *testing.T) { + a := Agent{} + base := `"session_id":"s-1","transcript_path":"/h/.factory/sessions/repo/s-1.jsonl","cwd":"/w","hook_event_name":"PostToolUse"` + // An object response is kept as its JSON text. + post := `{` + base + `,"tool_name":"Edit","tool_use_id":"toolu_01","tool_input":{"file_path":"/w/main.go","old_string":"a","new_string":"b"},"tool_response":{"filePath":"/w/main.go","success":true}}` + ev, err := a.Parse(VerbPostToolUse, []byte(post)) + if err != nil || ev == nil || ev.Kind != hooks.ToolUse || ev.SessionID != "s-1" || ev.Transcript != "/h/.factory/sessions/repo/s-1.jsonl" || ev.Cwd != "/w" { + t.Fatalf("post-tool-use: %+v %v", ev, err) + } + tool := ev.Tool + if tool == nil || tool.NativeID != "toolu_01" || tool.Name != "Edit" || tool.Status != "completed" || + string(tool.Arguments) != `{"file_path":"/w/main.go","old_string":"a","new_string":"b"}` || + tool.Result == nil || *tool.Result != `{"filePath":"/w/main.go","success":true}` { + t.Fatalf("tool: %+v", tool) + } + // A string response is kept verbatim. + ev, err = a.Parse(VerbPostToolUse, []byte(`{`+base+`,"tool_name":"Execute","tool_use_id":"toolu_02","tool_input":{"command":"go test ./..."},"tool_response":"ok\n"}`)) + if err != nil || ev == nil || ev.Tool == nil || ev.Tool.Result == nil || *ev.Tool.Result != "ok\n" || ev.Tool.NativeID != "toolu_02" { + t.Fatalf("string response: %+v %v", ev, err) + } + // No response at all, or a null one, leaves Result nil. + for _, tail := range []string{``, `,"tool_response":null`} { + ev, err = a.Parse(VerbPostToolUse, []byte(`{`+base+`,"tool_name":"Read","tool_use_id":"toolu_03","tool_input":{"file_path":"/w/x"}`+tail+`}`)) + if err != nil || ev == nil || ev.Tool == nil || ev.Tool.Result != nil { + t.Fatalf("no response (%q): %+v %v", tail, ev, err) + } + } + // Without a tool id (Droid has been seen to omit it) a stable id is + // derived from the call, so it still lands per event; the dispatcher + // matches the transcript's call by arguments or written path. + noID := `{` + base + `,"tool_name":"Edit","tool_input":{"file_path":"/w/x"},"tool_response":"ok"}` + ev, err = a.Parse(VerbPostToolUse, []byte(noID)) + if err != nil || ev == nil || ev.Tool == nil || !strings.HasPrefix(ev.Tool.NativeID, "droid-") || len(ev.Tool.NativeID) != 22 { + t.Fatalf("payload without an id: %+v %v", ev, err) + } + again, _ := a.Parse(VerbPostToolUse, []byte(noID)) + if again.Tool.NativeID != ev.Tool.NativeID { + t.Fatal("the derived id must be stable") + } + // Without a name there is nothing to record: nil, and the transcript + // supplies the call at Stop. + for _, raw := range []string{ + `{` + base + `,"tool_use_id":"toolu_04","tool_input":{}}`, + `{` + base + `}`, + } { + if ev, err := a.Parse(VerbPostToolUse, []byte(raw)); err != nil || ev != nil { + t.Fatalf("payload without a call should be nil: %s → %+v %v", raw, ev, err) + } + } +} + func TestStopModelFromSettings(t *testing.T) { dir := t.TempDir() transcript := filepath.Join(dir, "abc.jsonl") diff --git a/internal/hooks/event.go b/internal/hooks/event.go index c14e61b..6c59f0f 100644 --- a/internal/hooks/event.go +++ b/internal/hooks/event.go @@ -13,6 +13,7 @@ import ( "os" "regexp" + "github.com/tryatlas/atlas-cli/internal/capture/record" "github.com/tryatlas/atlas-cli/internal/capture/store" ) @@ -63,6 +64,7 @@ type Event struct { Model string Usage *store.TokenTotals // a hook-provided usage total for the turn Files []string // ToolUse: files the tool changed + Tool *record.Tool // ToolUse: the completed call, when the payload carries it ToolUseID string // TurnEndFailed marks a turn that ended on an API error. TurnEndFailed bool diff --git a/internal/hooks/hooks_test.go b/internal/hooks/hooks_test.go index acfdb0e..b371421 100644 --- a/internal/hooks/hooks_test.go +++ b/internal/hooks/hooks_test.go @@ -46,9 +46,10 @@ func (fakeAgent) Parse(verb string, payload []byte) (*Event, error) { var p struct { Session, Transcript, Prompt string Files []string + Tool *record.Tool } _ = json.Unmarshal(payload, &p) - ev := &Event{SessionID: p.Session, Transcript: p.Transcript, Prompt: p.Prompt, Files: p.Files} + ev := &Event{SessionID: p.Session, Transcript: p.Transcript, Prompt: p.Prompt, Files: p.Files, Tool: p.Tool} switch verb { case "start": ev.Kind = SessionStart @@ -291,6 +292,68 @@ func TestDispatcherRecordsATurnDirectly(t *testing.T) { } } +func TestPerEventDeliveryOpensAndClosesOneTurn(t *testing.T) { + root := gitRepo(t) + st := enabledStore(t, root) + transcript := filepath.Join(t.TempDir(), "s.jsonl") + _ = os.WriteFile(transcript, nil, 0o600) + d := &Dispatcher{Root: root, Version: "test", Now: time.Now, Deliver: Deliver("test", nil)} + sess := map[string]any{"Session": "s-4", "Transcript": transcript} + runHook(t, d, "start", sess) + runHook(t, d, "prompt", map[string]any{"Session": "s-4", "Transcript": transcript, "Prompt": "make a file"}) + db := st.DB() + var n int + _ = db.QueryRow(`SELECT count(*) FROM turn WHERE state='open'`).Scan(&n) + if n != 1 { + t.Fatalf("open turns after the prompt = %d, want 1", n) + } + _ = db.QueryRow(`SELECT count(*) FROM agent_message WHERE role='user'`).Scan(&n) + if n != 1 { + t.Fatalf("prompt rows = %d", n) + } + // The post-tool hook reports the write as it completes. + _ = os.WriteFile(filepath.Join(root, "made.txt"), []byte("x\n"), 0o644) + args, _ := json.Marshal(map[string]string{"file_path": filepath.Join(root, "made.txt"), "content": "x\n"}) + tool := &record.Tool{NativeID: "tc", Name: "Write", Arguments: args, Status: "completed"} + runHook(t, d, "tool", map[string]any{"Session": "s-4", "Transcript": transcript, "Tool": tool}) + var status string + if err := db.QueryRow(`SELECT status FROM tool_call WHERE native_call_id='tc'`).Scan(&status); err != nil || status != "completed" { + t.Fatalf("tool after the hook: %q %v", status, err) + } + _ = db.QueryRow(`SELECT count(*) FROM file_touch WHERE path='made.txt'`).Scan(&n) + if n != 1 { + t.Fatalf("touches after the hook = %d", n) + } + // The transcript names the same call again, plus the reply; the close + // must not duplicate the call. + f, _ := os.OpenFile(transcript, os.O_APPEND|os.O_WRONLY, 0o600) + _, _ = f.WriteString(`{"kind":"prompt","body":"make a file"}` + "\n" + + `{"kind":"tool","path":"` + filepath.Join(root, "made.txt") + `","body":"x\n"}` + "\n" + + `{"kind":"text","body":"Made it."}` + "\n") + _ = f.Close() + runHook(t, d, "stop", sess) + _ = db.QueryRow(`SELECT count(*) FROM turn`).Scan(&n) + if n != 1 { + t.Fatalf("turns = %d, want 1", n) + } + _ = db.QueryRow(`SELECT count(*) FROM turn WHERE state='completed'`).Scan(&n) + if n != 1 { + t.Fatal("the turn must be completed") + } + _ = db.QueryRow(`SELECT count(*) FROM tool_call`).Scan(&n) + if n != 1 { + t.Fatalf("tool calls = %d, want 1 (no duplicate from the transcript)", n) + } + _ = db.QueryRow(`SELECT count(*) FROM file_touch`).Scan(&n) + if n != 1 { + t.Fatalf("touches = %d, want 1", n) + } + _ = db.QueryRow(`SELECT count(*) FROM agent_message`).Scan(&n) + if n != 2 { + t.Fatalf("messages = %d, want the prompt and the reply", n) + } +} + func TestATurnThatOnlyReadRecordsNothing(t *testing.T) { root := gitRepo(t) st := enabledStore(t, root) @@ -328,11 +391,11 @@ func TestSpoolWhenTheStoreIsLockedAndDrainLater(t *testing.T) { _ = stt.Save(root) runHook(t, d, "stop", sess) stt, _ = LoadState(root, "fake", "s-3") - if stt.Pending != 2 { // the session start and the turn - t.Fatalf("pending = %d, want 2 (spooled)", stt.Pending) + if stt.Pending != 3 { // the session start, the opening prompt and the turn + t.Fatalf("pending = %d, want 3 (spooled)", stt.Pending) } ents, _ := os.ReadDir(SpoolDir(root)) - if len(ents) != 2 { // the start and the turn + if len(ents) != 3 { // the start, the prompt and the turn t.Fatalf("spool entries = %d", len(ents)) } _ = lock.Release() @@ -409,3 +472,67 @@ func TestGitHooksInstallChainsAndRestores(t *testing.T) { t.Fatalf("restored = %q", b) } } + +func tool(id, name, args string) record.CapturedItem { + return record.CapturedItem{Tool: &record.Tool{NativeID: id, Name: name, Arguments: json.RawMessage(args), Status: "completed"}} +} + +func TestDropDeliveredPrefersIDsAndKeepsDistinctCommands(t *testing.T) { + // Ids match between hook and transcript: two distinct `sleep 4` calls, + // one delivered, one whose hook failed; the second must survive. + delivered := [][]string{toolKeys(*tool("c1", "Bash", `{"command":"sleep 4"}`).Tool)} + items := []record.CapturedItem{tool("c1", "Bash", `{"command":"sleep 4"}`), tool("c2", "Bash", `{"command":"sleep 4"}`), {ID: "m", Mode: "text", Body: "ok"}} + kept := dropDelivered(items, delivered) + if len(kept) != 3 || !kept[0].Tool.NoSample || kept[1].Tool == nil || kept[1].Tool.NativeID != "c2" || kept[1].Tool.NoSample || kept[2].Tool != nil { + t.Fatalf("kept = %+v", kept) + } + // Ids differ (another agent): match by arguments even when the transcript + // pretty-prints them, each delivered command once. + delivered = [][]string{toolKeys(*tool("h1", "bash", `{"command":"ls"}`).Tool), toolKeys(*tool("h2", "write", `{"path":"a.txt","contents":"x"}`).Tool)} + items = []record.CapturedItem{tool("t1", "Shell", `{ "command": "ls" }`), tool("t2", "Shell", `{"command":"ls"}`), tool("t3", "Write", `{"path": "a.txt", "contents": "x"}`)} + kept = dropDelivered(items, delivered) + if len(kept) != 1 || kept[0].Tool.NativeID != "t2" { + t.Fatalf("kept = %+v", kept) + } + // Empty arguments never match by arguments; an argv command matches a + // string one. + delivered = [][]string{toolKeys(*tool("h3", "mcp__x__briefing", `{}`).Tool), toolKeys(*tool("h4", "shell", `{"command":["bash","-lc","cat a"]}`).Tool)} + items = []record.CapturedItem{tool("t4", "mcp__y__other", `{}`), tool("t5", "Bash", `{"command":"bash -lc cat a"}`)} + kept = dropDelivered(items, delivered) + if len(kept) != 1 || kept[0].Tool.NativeID != "t4" { + t.Fatalf("kept = %+v", kept) + } +} + +func TestShellChangesLandOnTheShellCall(t *testing.T) { + root := gitRepo(t) + st := enabledStore(t, root) + transcript := filepath.Join(t.TempDir(), "s.jsonl") + _ = os.WriteFile(transcript, nil, 0o600) + d := &Dispatcher{Root: root, Version: "test", Now: time.Now, Deliver: Deliver("test", nil)} + sess := map[string]any{"Session": "s-5", "Transcript": transcript} + runHook(t, d, "start", sess) + runHook(t, d, "prompt", map[string]any{"Session": "s-5", "Transcript": transcript, "Prompt": "touch a file with the shell"}) + _ = os.WriteFile(filepath.Join(root, "by-shell.txt"), []byte("x\n"), 0o644) + args, _ := json.Marshal(map[string]string{"command": "echo x > by-shell.txt"}) + runHook(t, d, "tool", map[string]any{"Session": "s-5", "Transcript": transcript, + "Tool": &record.Tool{NativeID: "sh1", Name: "Bash", Arguments: args, Status: "completed"}}) + db := st.DB() + var path, callID string + if err := db.QueryRow(`SELECT f.path, c.native_call_id FROM file_touch f JOIN tool_call c ON c.id = f.tool_call_id`).Scan(&path, &callID); err != nil || path != "by-shell.txt" || callID != "sh1" { + t.Fatalf("touch after the shell hook: %q %q %v", path, callID, err) + } + f, _ := os.OpenFile(transcript, os.O_APPEND|os.O_WRONLY, 0o600) + _, _ = f.WriteString(`{"kind":"text","body":"Done."}` + "\n") + _ = f.Close() + runHook(t, d, "stop", sess) + var n int + _ = db.QueryRow(`SELECT count(*) FROM tool_call`).Scan(&n) + if n != 1 { + t.Fatalf("tool calls = %d, want only the shell call (no synthetic changes call)", n) + } + _ = db.QueryRow(`SELECT count(*) FROM file_touch`).Scan(&n) + if n != 1 { + t.Fatalf("touches = %d, want 1", n) + } +} diff --git a/internal/hooks/opencode/export.go b/internal/hooks/opencode/export.go index 2097482..21ed4aa 100644 --- a/internal/hooks/opencode/export.go +++ b/internal/hooks/opencode/export.go @@ -292,10 +292,13 @@ func turnOf(msgs []message) *hooks.Turn { return t } -// toolOf translates a tool part. +// toolOf translates a tool part. Its id is the callID, which the plugin's +// tool.execute.after hook also receives (opencode.go toolOf): one id for one +// call, however it arrives. The part id (prt_…) stands in when a part has no +// callID. func toolOf(p part, fallbackID string) *record.Tool { tool := &record.Tool{NativeID: p.CallID, Name: p.Tool, Status: "completed"} - if p.ID != "" { + if tool.NativeID == "" { tool.NativeID = p.ID } if tool.NativeID == "" { diff --git a/internal/hooks/opencode/export_test.go b/internal/hooks/opencode/export_test.go index 1f37a4c..1c7507e 100644 --- a/internal/hooks/opencode/export_test.go +++ b/internal/hooks/opencode/export_test.go @@ -75,8 +75,8 @@ func TestTurnOf(t *testing.T) { if write == nil || write.Name != "write" || write.Locations != nil || !strings.Contains(string(write.Arguments), `"filePath": "/x/hello.txt"`) { t.Fatalf("write %+v", write) } - patch := turn.Items[3].Tool - if patch == nil || patch.NativeID != "prt_ap" || strings.Join(patch.Locations, ",") != "/x/a.go,/x/b.go" { + patch := turn.Items[3].Tool // the callID wins over the part id: it is what the tool hook sends too + if patch == nil || patch.NativeID != "call_p" || strings.Join(patch.Locations, ",") != "/x/a.go,/x/b.go" { t.Fatalf("apply_patch %+v", patch) } bash := turn.Items[4].Tool diff --git a/internal/hooks/opencode/opencode.go b/internal/hooks/opencode/opencode.go index d34b1a4..422a8f9 100644 --- a/internal/hooks/opencode/opencode.go +++ b/internal/hooks/opencode/opencode.go @@ -16,6 +16,7 @@ import ( "path/filepath" "time" + "github.com/tryatlas/atlas-cli/internal/capture/record" "github.com/tryatlas/atlas-cli/internal/hooks" "github.com/tryatlas/atlas-cli/internal/project" ) @@ -35,6 +36,7 @@ const ( VerbTurnEnd = "turn-end" VerbCompaction = "compaction" VerbSessionEnd = "session-end" + VerbToolUse = "tool-use" ) // Plugin is the plugin OpenCode loads from .opencode/plugins/atlas.ts. @@ -57,7 +59,7 @@ func (Agent) Binary() string { return "opencode" } // Verbs are the hook verbs the plugin invokes. func (Agent) Verbs() []string { - return []string{VerbSessionStart, VerbTurnStart, VerbTurnEnd, VerbCompaction, VerbSessionEnd} + return []string{VerbSessionStart, VerbTurnStart, VerbToolUse, VerbTurnEnd, VerbCompaction, VerbSessionEnd} } // PluginPath is the plugin file under root. OpenCode loads every file in @@ -133,11 +135,39 @@ func (Agent) Response(hooks.Kind, string) []byte { return nil } func (Agent) ResumeCommand(id string) string { return "opencode -s " + id } // payload is what the plugin sends: session_id always, prompt and model at -// turn start, model at turn end. +// turn start, model at turn end, and at tool-use the completed call from +// OpenCode's tool.execute.after hook: the tool's wire name, its call id (the +// callID the export's tool part carries too), the title and output OpenCode +// shows, the tool's metadata, and the arguments (from the hook's input, or +// remembered from tool.execute.before). type payload struct { - SessionID string `json:"session_id"` - Prompt string `json:"prompt"` - Model string `json:"model"` + SessionID string `json:"session_id"` + Prompt string `json:"prompt"` + Model string `json:"model"` + Tool string `json:"tool"` + CallID string `json:"call_id"` + Title string `json:"title"` + Output *string `json:"output"` + Metadata json.RawMessage `json:"metadata"` + Args json.RawMessage `json:"args"` +} + +// toolOf is the completed call a tool-use payload describes, in the shape +// the export reader gives the same call (export.go toolOf): the same +// NativeID, so the turn-end read drops it as already delivered. +func (p payload) toolOf() *record.Tool { + if p.CallID == "" || p.Tool == "" { + return nil + } + t := &record.Tool{NativeID: p.CallID, Name: p.Tool, Title: p.Title, Status: "completed"} + if a := bytes.TrimSpace(p.Args); len(a) > 0 && string(a) != "null" { + t.Arguments = a + } + if p.Output != nil { + t.Result = p.Output + } + t.Locations = (&toolState{Metadata: p.Metadata}).files() + return t } // Parse maps a hook verb and payload to an event. The payload names no @@ -158,6 +188,12 @@ func (Agent) Parse(verb string, raw []byte) (*hooks.Event, error) { case VerbTurnStart: ev.Kind = hooks.TurnStart ev.Prompt = StripReminders(p.Prompt) + case VerbToolUse: + ev.Kind = hooks.ToolUse + ev.Tool = p.toolOf() + if ev.Tool == nil { + return nil, nil + } case VerbTurnEnd: ev.Kind = hooks.TurnEnd case VerbCompaction: diff --git a/internal/hooks/opencode/opencode_test.go b/internal/hooks/opencode/opencode_test.go index c07329c..1847e70 100644 --- a/internal/hooks/opencode/opencode_test.go +++ b/internal/hooks/opencode/opencode_test.go @@ -32,6 +32,11 @@ func TestPluginInstallStateUninstall(t *testing.T) { t.Fatalf("plugin does not send %s", verb) } } + for _, hook := range []string{`"tool.execute.before"`, `"tool.execute.after"`, `sendSync("tool-use"`} { + if !strings.Contains(string(b), hook) { + t.Fatalf("plugin lacks %s", hook) + } + } if fi, _ := os.Stat(path); fi.Mode().Perm() != 0o644 { t.Fatalf("mode %v", fi.Mode().Perm()) } @@ -124,13 +129,40 @@ func TestParse(t *testing.T) { t.Fatalf("%s: transcript %q", c.verb, ev.Transcript) } } + // tool-use: OpenCode's tool.execute.after as the plugin forwards it, with + // the id the export's tool part carries as callID. + toolUse := `{"session_id":"` + id + `","tool":"write","call_id":"ZdNFvSAofdecladc","title":"rt.txt","output":"Wrote file successfully.",` + + `"metadata":{"diagnostics":{},"filepath":"/w/rt.txt","exists":false},"args":{"filePath":"/w/rt.txt","content":"realtime\n"}}` + ev, err := a.Parse(VerbToolUse, []byte(toolUse)) + if err != nil || ev == nil || ev.Kind != hooks.ToolUse || ev.SessionID != id || ev.Tool == nil { + t.Fatalf("tool-use: %+v %v", ev, err) + } + if tool := ev.Tool; tool.NativeID != "ZdNFvSAofdecladc" || tool.Name != "write" || tool.Title != "rt.txt" || tool.Status != "completed" || + string(tool.Arguments) != `{"filePath":"/w/rt.txt","content":"realtime\n"}` || tool.Result == nil || *tool.Result != "Wrote file successfully." || tool.Locations != nil { + t.Fatalf("tool-use tool: %+v", tool) + } + if !strings.HasSuffix(ev.Transcript, filepath.Join("hooks", ID, "export", id+".json")) { + t.Fatalf("tool-use names no export cache: %q", ev.Transcript) + } + // apply_patch's metadata lists the files it wrote; null args and a + // missing output are nothing, not "null". + ev, err = a.Parse(VerbToolUse, []byte(`{"session_id":"`+id+`","tool":"apply_patch","call_id":"call_p","metadata":{"files":[{"filePath":"/w/a.go"},{"filePath":"/w/b.go"}]},"args":null}`)) + if err != nil || ev == nil || ev.Tool == nil || strings.Join(ev.Tool.Locations, ",") != "/w/a.go,/w/b.go" || ev.Tool.Arguments != nil || ev.Tool.Result != nil { + t.Fatalf("apply_patch tool-use: %+v %v", ev.Tool, err) + } + // Without a call id or a tool name there is no call to record. + for _, raw := range []string{`{"session_id":"` + id + `","tool":"bash"}`, `{"session_id":"` + id + `","call_id":"c1"}`} { + if ev, err := a.Parse(VerbToolUse, []byte(raw)); ev != nil || err != nil { + t.Fatalf("tool-use without a call: %+v %v", ev, err) + } + } if ev, err := a.Parse("something-else", []byte(`{"session_id":"x"}`)); ev != nil || err != nil { t.Fatalf("unknown verb: %v %v", ev, err) } if _, err := a.Parse(VerbTurnEnd, []byte(`not json`)); err == nil { t.Fatal("bad payload accepted") } - ev, err := a.Parse(VerbTurnEnd, []byte(`{"session_id":"../../etc"}`)) + ev, err = a.Parse(VerbTurnEnd, []byte(`{"session_id":"../../etc"}`)) if err != nil || ev.Transcript != "" { t.Fatalf("an unusable id named a cache: %+v %v", ev, err) } diff --git a/internal/hooks/opencode/plugin.ts b/internal/hooks/opencode/plugin.ts index fe24ab0..ee5a812 100644 --- a/internal/hooks/opencode/plugin.ts +++ b/internal/hooks/opencode/plugin.ts @@ -1,7 +1,7 @@ // Atlas plugin for OpenCode — written by atlas agents add; do not edit (rewritten on the next add). // -// Forwards OpenCode's session lifecycle to `atlas hooks opencode ` with -// one JSON payload on stdin. node:child_process runs under Bun (the CLI and +// Forwards OpenCode's session lifecycle, and each completed tool call, to +// `atlas hooks opencode ` with one JSON payload on stdin. node:child_process runs under Bun (the CLI and // TUI) and Node (the desktop sidecar). A machine without atlas on PATH runs a // silent no-op, and nothing here throws: a failing hook never fails OpenCode. import { spawn, spawnSync } from "node:child_process" @@ -16,6 +16,8 @@ export const AtlasPlugin: Plugin = async ({ directory }) => { const roles = new Map() // message id → role const early = new Map() // user text seen before its message.updated const started = new Set() // user message ids whose turn-start fired + const toolArgs = new Map() // callID → args, from tool.execute.before + const MAX_OUTPUT = 64 * 1024 // bytes of tool output (and of metadata) a payload carries function argv(verb: string): string[] { return ["sh", "-c", `if ! command -v atlas >/dev/null 2>&1; then exit 0; fi; exec atlas hooks opencode ${verb}`] @@ -54,6 +56,29 @@ export const AtlasPlugin: Plugin = async ({ directory }) => { roles.clear() early.clear() started.clear() + toolArgs.clear() + } + + // clip bounds a string to MAX_OUTPUT UTF-16 units (at most 2× the bytes), + // marking the cut. + function clip(text: unknown): string { + const s = typeof text === "string" ? text : text === undefined || text === null ? "" : String(text) + if (s.length <= MAX_OUTPUT) return s + return s.slice(0, MAX_OUTPUT) + `\n… [truncated ${s.length - MAX_OUTPUT} chars]` + } + + // smallMetadata keeps the tool's metadata when it is small; a large one + // (read's display text, a big diff) is cut down to the files it names, + // which is what the hook reads from it. + function smallMetadata(meta: unknown): unknown { + if (meta === undefined || meta === null || typeof meta !== "object") return meta ?? null + try { + if (JSON.stringify(meta).length <= MAX_OUTPUT) return meta + const files = (meta as any).files + return Array.isArray(files) ? { files, truncated: true } : { truncated: true } + } catch { + return null + } } // follow makes id the tracked session; it reports whether that is new. @@ -73,6 +98,44 @@ export const AtlasPlugin: Plugin = async ({ directory }) => { } return { + // The arguments as the tool is about to run; the after hook carries them + // too in recent OpenCode, and this copy covers versions whose after + // hook does not. + "tool.execute.before": async (input, output) => { + try { + if (!input?.callID) return + if (toolArgs.size > 256) toolArgs.clear() + toolArgs.set(input.callID, output?.args) + } catch { + // never fail OpenCode + } + }, + + // One completed tool call, delivered into the open turn now (before the + // reply closes it); the turn-end export then skips it by callID. Waited + // for, so a short task's rows land before the same tick's idle event + // runs turn-end. + "tool.execute.after": async (input, output) => { + try { + if (!input?.callID || !input.tool) return + const sessionID = input.sessionID ?? session + const args = (input as any).args !== undefined ? (input as any).args : toolArgs.get(input.callID) + toolArgs.delete(input.callID) + if (!sessionID || children.has(sessionID)) return + sendSync("tool-use", { + session_id: sessionID, + tool: input.tool, + call_id: input.callID, + title: typeof output?.title === "string" ? output.title : "", + output: clip(output?.output), + metadata: smallMetadata(output?.metadata), + args: args === undefined ? null : args, + }) + } catch { + // never fail OpenCode + } + }, + event: async ({ event }) => { try { const props = (event as any).properties diff --git a/internal/hooks/pi/extension.ts b/internal/hooks/pi/extension.ts index 50b2177..f38a6fe 100644 --- a/internal/hooks/pi/extension.ts +++ b/internal/hooks/pi/extension.ts @@ -9,6 +9,8 @@ import { execFile } from "node:child_process"; const HOOK_TIMEOUT_MS = 10_000; const MAX_OUTPUT = 4 * 1024 * 1024; +// A tool result is forwarded as text, cut here; the session file keeps it whole. +const MAX_RESULT = 64 * 1024; // A nested pi (a subagent spawns one per task, inside the project, where Pi // finds this same extension) must not report its lifecycle as the user's @@ -20,7 +22,7 @@ function hookCommand(verb: string): string { return `if ! command -v atlas >/dev/null 2>&1; then exit 0; fi; exec atlas hooks pi ${verb}`; } -function fire(verb: string, payload: Record): Promise { +function run(verb: string, payload: Record): Promise { return new Promise((resolve) => { try { const child = execFile( @@ -37,6 +39,33 @@ function fire(verb: string, payload: Record): Promise { }); } +// Hooks run one at a time, in the order they were fired. Pi executes +// parallel tool calls concurrently and fires their tool_result events +// together; concurrent hook processes would race on the session's state +// file and the store's writer lock, and a tool result could land after the +// agent_end that closes its turn. +let queue: Promise = Promise.resolve(); + +function fire(verb: string, payload: Record): Promise { + const next = queue.then(() => run(verb, payload)); + queue = next.catch(() => {}); + return next; +} + +// resultText flattens a tool result's content to its text parts, truncated. +function resultText(content: unknown): string { + if (typeof content === "string") return content.slice(0, MAX_RESULT); + if (!Array.isArray(content)) return ""; + const parts: string[] = []; + for (const c of content) { + if (c && typeof c === "object" && (c as { type?: unknown }).type === "text") { + const text = (c as { text?: unknown }).text; + if (typeof text === "string" && text !== "") parts.push(text); + } + } + return parts.join("\n").slice(0, MAX_RESULT); +} + export default function (pi: ExtensionAPI) { const nested = Boolean(process.env[NESTED_ENV]); process.env[NESTED_ENV] = "1"; @@ -59,6 +88,25 @@ export default function (pi: ExtensionAPI) { }); }); + // Each completed tool call is delivered as it finishes, so the capture + // holds the turn's calls before the reply lands. The call id is the one + // the session file's toolCall carries, which is how the turn-end read + // knows not to record the call twice. A nested call (one tool running + // another) is not in the transcript and is left to its parent. + pi.on("tool_result", async (event, ctx) => { + if (event.parentToolCallId) return; + await fire("tool-result", { + type: "tool_result", + cwd: ctx.cwd, + session_file: ctx.sessionManager.getSessionFile(), + tool_call_id: event.toolCallId, + tool_name: event.toolName, + args: event.input ?? {}, + result: resultText(event.content), + is_error: Boolean(event.isError), + }); + }); + pi.on("agent_end", async (_event, ctx) => { await fire("agent-end", { type: "agent_end", diff --git a/internal/hooks/pi/pi.go b/internal/hooks/pi/pi.go index f5c4a29..3d6a726 100644 --- a/internal/hooks/pi/pi.go +++ b/internal/hooks/pi/pi.go @@ -14,6 +14,7 @@ import ( "path/filepath" "strings" + "github.com/tryatlas/atlas-cli/internal/capture/record" "github.com/tryatlas/atlas-cli/internal/hooks" ) @@ -29,6 +30,7 @@ type Agent struct{} const ( VerbSessionStart = "session-start" VerbBeforeAgentStart = "before-agent-start" + VerbToolResult = "tool-result" VerbAgentEnd = "agent-end" ) @@ -50,7 +52,7 @@ func (Agent) Binary() string { return "pi" } // Verbs are the hook verbs the extension invokes. func (Agent) Verbs() []string { - return []string{VerbSessionStart, VerbBeforeAgentStart, VerbAgentEnd} + return []string{VerbSessionStart, VerbBeforeAgentStart, VerbToolResult, VerbAgentEnd} } // ExtensionDir is the directory Pi loads the Atlas extension from; Pi @@ -145,6 +147,25 @@ type payload struct { SessionFile string `json:"session_file"` SessionID string `json:"session_id"` Prompt string `json:"prompt"` + // tool-result: the completed call, with its result as text. + ToolCallID string `json:"tool_call_id"` + ToolName string `json:"tool_name"` + Args json.RawMessage `json:"args"` + Result *string `json:"result"` + IsError bool `json:"is_error"` +} + +// toolOf is the completed call a tool-result payload describes; nil when +// the payload names no call. +func (p payload) toolOf() *record.Tool { + if p.ToolCallID == "" || p.ToolName == "" { + return nil + } + t := &record.Tool{NativeID: p.ToolCallID, Name: p.ToolName, Arguments: p.Args, Result: p.Result, Status: "completed"} + if p.IsError { + t.Status = "failed" + } + return t } // Parse maps a hook verb and payload to an event. A payload naming no @@ -170,6 +191,12 @@ func (Agent) Parse(verb string, raw []byte) (*hooks.Event, error) { case VerbBeforeAgentStart: ev.Kind = hooks.TurnStart ev.Prompt = p.Prompt + case VerbToolResult: + ev.Kind = hooks.ToolUse + ev.Tool = p.toolOf() + if ev.Tool == nil { + return nil, nil + } case VerbAgentEnd: ev.Kind = hooks.TurnEnd default: diff --git a/internal/hooks/pi/pi_test.go b/internal/hooks/pi/pi_test.go index 8ca152d..9a74ae9 100644 --- a/internal/hooks/pi/pi_test.go +++ b/internal/hooks/pi/pi_test.go @@ -26,7 +26,7 @@ func TestInstallStateUninstall(t *testing.T) { if !strings.HasPrefix(string(b), "// Atlas extension for Pi — written by atlas agents add; do not edit (rewritten on the next add).\n") { t.Fatalf("header missing:\n%s", b[:120]) } - for _, want := range []string{"exec atlas hooks pi ${verb}", `"session-start"`, `"before-agent-start"`, `"agent-end"`, "ATLAS_PI_NESTED", "command -v atlas", "10_000"} { + for _, want := range []string{"exec atlas hooks pi ${verb}", `"session-start"`, `"before-agent-start"`, `"tool-result"`, `"agent-end"`, `pi.on("tool_result"`, "parentToolCallId", "64 * 1024", "let queue", "ATLAS_PI_NESTED", "command -v atlas", "10_000"} { if !strings.Contains(string(b), want) { t.Errorf("extension lacks %q", want) } @@ -124,6 +124,30 @@ func TestParse(t *testing.T) { if ev.Kind != hooks.TurnEnd || ev.SessionID != "explicit" { t.Fatalf("agent-end = %+v", ev) } + ev, err = a.Parse(VerbToolResult, []byte(`{"type":"tool_result","cwd":"/repo","session_file":"`+file+`","tool_call_id":"call_1","tool_name":"write","args":{"path":"rt.txt","content":"realtime\n"},"result":"Successfully wrote 9 bytes to rt.txt","is_error":false}`)) + if err != nil { + t.Fatal(err) + } + if ev.Kind != hooks.ToolUse || ev.Tool == nil || ev.SessionID != "3f2b1c4d-aaaa-bbbb-cccc-0123456789ab" { + t.Fatalf("tool-result = %+v", ev) + } + if ev.Tool.NativeID != "call_1" || ev.Tool.Name != "write" || ev.Tool.Status != "completed" || string(ev.Tool.Arguments) != `{"path":"rt.txt","content":"realtime\n"}` { + t.Fatalf("tool = %+v", ev.Tool) + } + if ev.Tool.Result == nil || *ev.Tool.Result != "Successfully wrote 9 bytes to rt.txt" { + t.Fatalf("tool result = %v", ev.Tool.Result) + } + ev, err = a.Parse(VerbToolResult, []byte(`{"type":"tool_result","session_file":"`+file+`","tool_call_id":"call_2","tool_name":"bash","args":{"command":"cat missing"},"result":"cat: missing: No such file","is_error":true}`)) + if err != nil { + t.Fatal(err) + } + if ev.Tool == nil || ev.Tool.Status != "failed" || ev.Tool.NativeID != "call_2" { + t.Fatalf("failed tool-result = %+v", ev.Tool) + } + // A result payload with no call to speak of is dropped. + if ev, err := a.Parse(VerbToolResult, []byte(`{"type":"tool_result","session_file":"`+file+`","tool_name":"bash"}`)); err != nil || ev != nil { + t.Fatalf("callless tool-result = %+v, %v", ev, err) + } // No session: nothing to track (pi --no-session). if ev, err := a.Parse(VerbAgentEnd, []byte(`{"type":"agent_end","cwd":"/repo"}`)); err != nil || ev != nil { t.Fatalf("sessionless = %+v, %v", ev, err) diff --git a/internal/hooks/state.go b/internal/hooks/state.go index 3e7fec1..0117471 100644 --- a/internal/hooks/state.go +++ b/internal/hooks/state.go @@ -10,6 +10,9 @@ import ( "sort" "time" + "golang.org/x/sys/unix" + + "github.com/tryatlas/atlas-cli/internal/capture/record" "github.com/tryatlas/atlas-cli/internal/capture/store" ) @@ -44,6 +47,17 @@ type State struct { Status map[string]bool `json:"status"` // ToolFiles are files the agent's tool hooks reported during the turn. ToolFiles []string `json:"tool_files,omitempty"` + // Open says the turn was opened in the store at TurnStart (the prompt + // was delivered), so tool calls are delivered as they complete. + Open bool `json:"open,omitempty"` + // Delivered holds, per tool call delivered during the open turn, the + // keys that identify it (id, name+arguments hash, command, written + // paths), so the transcript read at turn end does not record it twice; + // a one-element group "path:" marks a path a delivered call wrote. + Delivered [][]string `json:"delivered,omitempty"` + // Tools are tool calls reported by hooks while no turn was open; they + // join the turn when it closes. + Tools []record.Tool `json:"tools,omitempty"` // Started is set once the session start was delivered (some agents // fire their first prompt hook before their session-start hook). Started bool `json:"started,omitempty"` @@ -89,7 +103,7 @@ func (s *State) Save(root string) error { if err != nil { return err } - tmp := p + ".tmp" + tmp := fmt.Sprintf("%s.%d.tmp", p, os.Getpid()) if err := os.WriteFile(tmp, b, 0o600); err != nil { return err } @@ -206,3 +220,27 @@ func CurrentSession(root, agent string) string { } return "" } + +// lockSession takes an advisory lock on the session's state for the hook's +// lifetime; the lock file stays (an inode-bound lock must not be unlinked). +func lockSession(root, agent, id string) (func(), error) { + if !ValidSessionID(id) { + return nil, ErrBadSessionID + } + p := statePath(root, agent, id) + ".lock" + if err := os.MkdirAll(filepath.Dir(p), 0o755); err != nil { + return nil, err + } + f, err := os.OpenFile(p, os.O_CREATE|os.O_RDWR, 0o600) //nolint:gosec // G304: the Project's own lock file + if err != nil { + return nil, err + } + if err := unix.Flock(int(f.Fd()), unix.LOCK_EX); err != nil { + _ = f.Close() + return nil, err + } + return func() { + _ = unix.Flock(int(f.Fd()), unix.LOCK_UN) + _ = f.Close() + }, nil +} From bbe1a112b18bb49e717368c0ce2bc39d66dcfe47 Mon Sep 17 00:00:00 2001 From: Ukaykhingmarma28 Date: Mon, 12 Oct 2026 05:40:37 +0600 Subject: [PATCH 3/9] Give commits made by an agent their checkpoint A file written and committed in one shell command never appeared in git status, so the turn had no touch for it; and touches that landed after the post-commit hook had walked the commit never linked to it. The dispatcher now remembers HEAD at turn start and after each shell call, counts files changed by the turn's commits as its changes, and asks the writer to link the commits made during the turn (gitlink.LinkRange), consuming those late touches so they cannot attach to a later commit. --- docs/progress.md | 19 ++++++++++++++ internal/capture/git/link.go | 49 ++++++++++++++++++++++++++++++++---- internal/hooks/deliver.go | 17 +++++++++++++ internal/hooks/dispatch.go | 35 +++++++++++++++++++++++--- internal/hooks/gitstatus.go | 36 ++++++++++++++++++++++++++ internal/hooks/hooks_test.go | 45 +++++++++++++++++++++++++++++++++ internal/hooks/state.go | 6 +++++ 7 files changed, 199 insertions(+), 8 deletions(-) diff --git a/docs/progress.md b/docs/progress.md index d100742..b7b95dd 100644 --- a/docs/progress.md +++ b/docs/progress.md @@ -1243,3 +1243,22 @@ known only at Stop. Per-event capture for all eight agents (above), the per-session lock, the dedupe by key groups, shell changes on the shell call, hook times kept. + +## v0.3.1: commits made by an agent get their checkpoint + +Reported: agents commit but no checkpoint appears. Two causes, both fixed: + +- A file written and committed by one shell command never shows in `git + status`, so the turn had no touch for it. The dispatcher now remembers + HEAD at turn start (and after each shell call); files changed by commits + made during the turn count as the turn's changes, on the shell call that + committed them. +- The post-commit hook links only touches that already exist; touches that + land later (at Stop, or a shell call's) missed the commit, and the cursor + had moved past it. A delivery now carries the turn's starting HEAD, and the + writer links the commits made since then (`gitlink.LinkRange`), consuming + the late touches so they cannot attach to a later commit. + +Verified live: `claude -p` running only `echo … > c4.txt && git add && git +commit` → checkpoint `["c4.txt"]` linked, the touch consumed by that commit; +`codex exec` the same → checkpoint `["c5.txt"]` linked. diff --git a/internal/capture/git/link.go b/internal/capture/git/link.go index 1246bc5..86fd8a5 100644 --- a/internal/capture/git/link.go +++ b/internal/capture/git/link.go @@ -74,7 +74,7 @@ func Link(ctx context.Context, st *store.Store, root string, now func() time.Tim return res, err } for _, sha := range strings.Fields(list) { - n, err := evaluate(ctx, g, st, sha, touches, now) + n, err := evaluate(ctx, g, st, sha, touches, now, false) if err != nil { return res, err } @@ -99,8 +99,9 @@ type commit struct { } // evaluate links one first-parent commit; a merge creates no checkpoint and -// its side commits are evaluated instead. -func evaluate(ctx context.Context, g runner, st *store.Store, sha string, touches []store.Touch, now func() time.Time) (int, error) { +// its side commits are evaluated instead. late says the touches may have been +// recorded after the commit (LinkRange): they are consumed all the same. +func evaluate(ctx context.Context, g runner, st *store.Store, sha string, touches []store.Touch, now func() time.Time, late bool) (int, error) { c, err := g.commit(ctx, sha) if err != nil { return 0, err @@ -112,7 +113,7 @@ func evaluate(ctx context.Context, g runner, st *store.Store, sha string, touche } total := 0 for _, s := range strings.Fields(side) { - n, err := evaluate(ctx, g, st, s, touches, now) + n, err := evaluate(ctx, g, st, s, touches, now, late) if err != nil { return total, err } @@ -161,8 +162,12 @@ func evaluate(ctx context.Context, g runner, st *store.Store, sha string, touche if err := st.UpsertCheckpoint(ctx, cp, now()); err != nil { return written, err } + cutoff := c.time + if late { + cutoff = now() + } for _, p := range touchPaths { - if err := st.ConsumeTouches(ctx, sid, p, sha, c.time); err != nil { + if err := st.ConsumeTouches(ctx, sid, p, sha, cutoff); err != nil { return written, err } } @@ -356,3 +361,37 @@ func (g runner) branch(ctx context.Context) *string { } return &b } + +// LinkRange links the first-parent commits after from up to HEAD to the +// touches recorded so far, whatever the cursor says: an agent hook calls it +// when touches arrive after a commit the post-commit hook already walked (a +// file written and committed in one shell command, or a turn delivered at +// its end). Checkpoints are upserted, so a commit linked twice stays one. +func LinkRange(ctx context.Context, st *store.Store, root, from string, now func() time.Time) (int, error) { + g := runner{dir: root} + if from == "" || !g.isCommit(ctx, from) || g.midOperation(ctx) { + return 0, nil + } + list, err := g.out(ctx, "rev-list", "--first-parent", "--reverse", "--max-count", strconv.Itoa(scanLimit), from+"..HEAD") + if err != nil || list == "" { + return 0, err + } + touches, err := st.LiveTouches(ctx, root) + if err != nil || len(touches) == 0 { + return 0, err + } + total := 0 + for _, sha := range strings.Fields(list) { + n, err := evaluate(ctx, g, st, sha, touches, now, true) + if err != nil { + return total, err + } + total += n + if n > 0 { + if touches, err = st.LiveTouches(ctx, root); err != nil { + return total, err + } + } + } + return total, nil +} diff --git a/internal/hooks/deliver.go b/internal/hooks/deliver.go index b7e1de7..d2238f9 100644 --- a/internal/hooks/deliver.go +++ b/internal/hooks/deliver.go @@ -16,6 +16,7 @@ import ( "sort" "time" + gitlink "github.com/tryatlas/atlas-cli/internal/capture/git" "github.com/tryatlas/atlas-cli/internal/capture/record" "github.com/tryatlas/atlas-cli/internal/capture/store" "github.com/tryatlas/atlas-cli/internal/listener" @@ -61,6 +62,22 @@ func Deliver(version string, afterDirect func(ctx context.Context, st *store.Sto // listener and the direct path share it. func Apply(ctx context.Context, rec *record.Recorder, mem *server.Server, ds []Delivery) error { for _, d := range ds { + if err := apply1(ctx, rec, mem, d); err != nil { + return err + } + if d.LinkFrom != "" { + // Touches that landed after a commit the post-commit hook + // already walked: link the turn's commits now. + if _, err := gitlink.LinkRange(ctx, rec.Store, d.Root, d.LinkFrom, time.Now); err != nil { + return err + } + } + } + return nil +} + +func apply1(ctx context.Context, rec *record.Recorder, mem *server.Server, d Delivery) error { + { g := server.Grant{SessionID: d.Session.NativeID, Agent: d.Session.Agent, Cwd: d.Root} switch { case d.Start: diff --git a/internal/hooks/dispatch.go b/internal/hooks/dispatch.go index f00fb78..0eadcb7 100644 --- a/internal/hooks/dispatch.go +++ b/internal/hooks/dispatch.go @@ -43,6 +43,9 @@ type Delivery struct { Changed []string `json:"changed,omitempty"` // At is when the hook fired, so a spooled delivery keeps its time. At time.Time `json:"at,omitempty"` + // LinkFrom, when set, asks the writer to link the commits after it to + // the touches just recorded (commits made during the turn). + LinkFrom string `json:"link_from,omitempty"` } // OpenTurn is the prompt that opens a turn as it is submitted. @@ -115,6 +118,8 @@ func (d *Dispatcher) Run(ctx context.Context, a Agent, ev *Event) ([]byte, error st.Prompt = ev.Prompt st.ToolFiles, st.Delivered, st.Tools, st.Open = nil, nil, nil, false st.Status = gitStatus(ctx, d.Root) + st.Head = gitHead(ctx, d.Root) + st.TurnHead = st.Head if r := a.Reader(); r != nil && st.Transcript != "" { if pos, err := r.Position(st.Transcript); err == nil { st.Offset = pos @@ -150,16 +155,30 @@ func (d *Dispatcher) Run(ctx context.Context, a Agent, ev *Event) ([]byte, error // What the shell command changed is known now: its touches, // and the baseline for the rest of the turn moves past them. after := gitStatus(ctx, d.Root) + head := gitHead(ctx, d.Root) explained := explainedPaths(st.Delivered) - for _, p := range changedSince(d.Root, st.Status, after) { + changed := changedSince(d.Root, st.Status, after) + if head != "" && head != st.Head { + // The command committed: what it committed is no longer + // in git status but is its work all the same. + changed = append(changed, committedSince(ctx, d.Root, st.Head)...) + } + for _, p := range changed { if !explained[p] { dl.Changed = append(dl.Changed, p) st.Delivered = append(st.Delivered, []string{"path:" + p}) + explained[p] = true } } if after != nil { st.Status = after } + if head != "" { + st.Head = head + } + } + if st.TurnHead != "" && gitHead(ctx, d.Root) != st.TurnHead { + dl.LinkFrom = st.TurnHead } if err := st.Save(d.Root); err != nil { return nil, err @@ -180,11 +199,16 @@ func (d *Dispatcher) Run(ctx context.Context, a Agent, ev *Event) ([]byte, error return nil, st.Save(d.Root) } st.Turn++ + linkFrom := "" + if st.TurnHead != "" && gitHead(ctx, d.Root) != st.TurnHead { + linkFrom = st.TurnHead // commits made during the turn + } + st.Head, st.TurnHead = "", "" if err := st.Save(d.Root); err != nil { return nil, err } sess.Model = st.Model - return nil, d.deliver(ctx, st, Delivery{Root: d.Root, Session: sess, Turn: turn, At: now}) + return nil, d.deliver(ctx, st, Delivery{Root: d.Root, Session: sess, Turn: turn, At: now, LinkFrom: linkFrom}) case Compaction: return nil, st.Save(d.Root) @@ -278,9 +302,14 @@ func (d *Dispatcher) turnEnd(ctx context.Context, a Agent, st *State, ev *Event) } } if st.Status != nil { - for _, p := range changedSince(d.Root, st.Status, gitStatus(ctx, d.Root)) { + changed := changedSince(d.Root, st.Status, gitStatus(ctx, d.Root)) + if head := gitHead(ctx, d.Root); head != "" && st.Head != "" && head != st.Head { + changed = append(changed, committedSince(ctx, d.Root, st.Head)...) + } + for _, p := range changed { if !explained[p] { turn.Changed = append(turn.Changed, p) + explained[p] = true } } } diff --git a/internal/hooks/gitstatus.go b/internal/hooks/gitstatus.go index 3604f06..d0e4d13 100644 --- a/internal/hooks/gitstatus.go +++ b/internal/hooks/gitstatus.go @@ -76,3 +76,39 @@ func relPath(root, p string) string { } return p } + +// gitHead is HEAD's commit, or "" (unborn, not a repository). +func gitHead(ctx context.Context, root string) string { + ctx, cancel := context.WithTimeout(ctx, 10*time.Second) + defer cancel() + cmd := exec.CommandContext(ctx, "git", "-C", root, "rev-parse", "-q", "--verify", "HEAD") //nolint:gosec // G204: fixed read-only git subcommand + cmd.Env = append(os.Environ(), "GIT_OPTIONAL_LOCKS=0", "LC_ALL=C") + b, err := cmd.Output() + if err != nil { + return "" + } + return strings.TrimSpace(string(b)) +} + +// committedSince are the paths changed by the commits from..HEAD: files the +// turn committed, which git status no longer shows. +func committedSince(ctx context.Context, root, from string) []string { + if from == "" { + return nil + } + ctx, cancel := context.WithTimeout(ctx, 10*time.Second) + defer cancel() + cmd := exec.CommandContext(ctx, "git", "-C", root, "diff", "--name-only", "-z", "--no-renames", from, "HEAD") //nolint:gosec // G204: fixed read-only git subcommand + cmd.Env = append(os.Environ(), "GIT_OPTIONAL_LOCKS=0", "LC_ALL=C") + b, err := cmd.Output() + if err != nil { + return nil + } + var out []string + for _, p := range strings.Split(string(b), "\x00") { + if p != "" { + out = append(out, p) + } + } + return out +} diff --git a/internal/hooks/hooks_test.go b/internal/hooks/hooks_test.go index b371421..bacb1c7 100644 --- a/internal/hooks/hooks_test.go +++ b/internal/hooks/hooks_test.go @@ -536,3 +536,48 @@ func TestShellChangesLandOnTheShellCall(t *testing.T) { t.Fatalf("touches = %d, want 1", n) } } + +func gitIn(t *testing.T, dir string, args ...string) { + t.Helper() + c := exec.Command("git", append([]string{"-C", dir, "-c", "user.name=T", "-c", "user.email=t@e", "-c", "commit.gpgsign=false"}, args...)...) + c.Env = append(os.Environ(), "GIT_CONFIG_GLOBAL=/dev/null") + if out, err := c.CombinedOutput(); err != nil { + t.Fatalf("%v %s", err, out) + } +} + +func TestACommitMadeDuringTheTurnGetsItsCheckpoint(t *testing.T) { + for _, perEvent := range []bool{true, false} { + root := gitRepo(t) + st := enabledStore(t, root) + transcript := filepath.Join(t.TempDir(), "s.jsonl") + _ = os.WriteFile(transcript, nil, 0o600) + d := &Dispatcher{Root: root, Version: "test", Now: time.Now, Deliver: Deliver("test", nil)} + sess := map[string]any{"Session": "s-c", "Transcript": transcript} + runHook(t, d, "start", sess) + runHook(t, d, "prompt", map[string]any{"Session": "s-c", "Transcript": transcript, "Prompt": "write and commit"}) + // One shell command writes the file and commits it; the + // post-commit hook would run here and find no touch yet. + _ = os.WriteFile(filepath.Join(root, "c2.txt"), []byte("two\n"), 0o644) + gitIn(t, root, "add", "c2.txt") + gitIn(t, root, "commit", "-q", "-m", "agent commit") + if perEvent { + args, _ := json.Marshal(map[string]string{"command": "echo two > c2.txt && git add c2.txt && git commit -m 'agent commit'"}) + runHook(t, d, "tool", map[string]any{"Session": "s-c", "Transcript": transcript, + "Tool": &record.Tool{NativeID: "sh", Name: "Bash", Arguments: args, Status: "completed"}}) + } + f, _ := os.OpenFile(transcript, os.O_APPEND|os.O_WRONLY, 0o600) + _, _ = f.WriteString(`{"kind":"text","body":"Committed."}` + "\n") + _ = f.Close() + runHook(t, d, "stop", sess) + var files string + if err := st.DB().QueryRow(`SELECT files_touched FROM checkpoint`).Scan(&files); err != nil || !strings.Contains(files, "c2.txt") { + t.Fatalf("perEvent=%v: checkpoint files = %q %v", perEvent, files, err) + } + var live int + _ = st.DB().QueryRow(`SELECT count(*) FROM file_touch WHERE path = 'c2.txt' AND consumed_by_commit IS NULL`).Scan(&live) + if live != 0 { + t.Fatalf("perEvent=%v: the late touch must be consumed by the commit it linked to", perEvent) + } + } +} diff --git a/internal/hooks/state.go b/internal/hooks/state.go index 0117471..f8d34b6 100644 --- a/internal/hooks/state.go +++ b/internal/hooks/state.go @@ -42,6 +42,12 @@ type State struct { Offset int `json:"offset"` // Prompt is the typed prompt of the open turn. Prompt string `json:"prompt,omitempty"` + // Head is HEAD at the baseline (turn start, then each shell call): + // commits after it were made during the turn. + Head string `json:"head,omitempty"` + // TurnHead is HEAD when the turn started: commits after it are linked + // once the turn's touches have landed. + TurnHead string `json:"turn_head,omitempty"` // Status is git status at turn start: path → true; nil when no snapshot // was taken (an empty map is a clean tree, so no omitempty). Status map[string]bool `json:"status"` From d9bec7b936162330138513d9bd957f48798d5998 Mon Sep 17 00:00:00 2001 From: Ukaykhingmarma28 Date: Mon, 12 Oct 2026 05:49:37 +0600 Subject: [PATCH 4/9] Keep the CLI's own files out of .atlas so it matches the app's Hook session state, the spool, the OpenCode export cache, the listener's run file and the CLI's logs move to a per-user state directory, $XDG_STATE_HOME/atlas-cli/projects// (internal/clistate); older layouts are moved there on first use. .atlas/ now holds only what the desktop app writes. Test packages point XDG_STATE_HOME at a temp dir. --- README.md | 2 +- cmd/atlas/hooks_cmds.go | 3 +- cmd/atlas/main_test.go | 2 + cmd/atlas/serve_cmds.go | 4 +- .../0013-hooks-capture-native-agent-uis.md | 4 +- docs/progress.md | 21 +++++ internal/agents/acp/state_main_test.go | 15 ++++ internal/auth/state_main_test.go | 15 ++++ internal/capture/git/state_main_test.go | 15 ++++ internal/capture/record/state_main_test.go | 15 ++++ internal/capture/store/state_main_test.go | 15 ++++ internal/capture/sync/state_main_test.go | 15 ++++ internal/clistate/clistate.go | 80 +++++++++++++++++++ internal/hooks/antigravity/state_main_test.go | 15 ++++ internal/hooks/claude/state_main_test.go | 15 ++++ internal/hooks/codex/state_main_test.go | 15 ++++ internal/hooks/copilot/state_main_test.go | 15 ++++ internal/hooks/cursor/state_main_test.go | 15 ++++ internal/hooks/droid/state_main_test.go | 15 ++++ internal/hooks/event.go | 4 +- internal/hooks/mcpconfig/state_main_test.go | 15 ++++ internal/hooks/opencode/state_main_test.go | 15 ++++ internal/hooks/pi/state_main_test.go | 15 ++++ internal/hooks/state.go | 13 +-- internal/hooks/state_main_test.go | 15 ++++ internal/hosts/state_main_test.go | 15 ++++ internal/ingest/state_main_test.go | 15 ++++ internal/listener/listener.go | 15 ++-- internal/listener/state_main_test.go | 15 ++++ internal/memory/record/state_main_test.go | 15 ++++ internal/memory/server/state_main_test.go | 15 ++++ internal/project/state_main_test.go | 15 ++++ internal/redact/state_main_test.go | 15 ++++ internal/run/import.go | 3 +- internal/run/session_test.go | 2 + internal/timefmt/state_main_test.go | 15 ++++ internal/tui/chat/state_main_test.go | 15 ++++ internal/tui/memview/state_main_test.go | 15 ++++ internal/tui/state_main_test.go | 15 ++++ 39 files changed, 534 insertions(+), 24 deletions(-) create mode 100644 internal/agents/acp/state_main_test.go create mode 100644 internal/auth/state_main_test.go create mode 100644 internal/capture/git/state_main_test.go create mode 100644 internal/capture/record/state_main_test.go create mode 100644 internal/capture/store/state_main_test.go create mode 100644 internal/capture/sync/state_main_test.go create mode 100644 internal/clistate/clistate.go create mode 100644 internal/hooks/antigravity/state_main_test.go create mode 100644 internal/hooks/claude/state_main_test.go create mode 100644 internal/hooks/codex/state_main_test.go create mode 100644 internal/hooks/copilot/state_main_test.go create mode 100644 internal/hooks/cursor/state_main_test.go create mode 100644 internal/hooks/droid/state_main_test.go create mode 100644 internal/hooks/mcpconfig/state_main_test.go create mode 100644 internal/hooks/opencode/state_main_test.go create mode 100644 internal/hooks/pi/state_main_test.go create mode 100644 internal/hooks/state_main_test.go create mode 100644 internal/hosts/state_main_test.go create mode 100644 internal/ingest/state_main_test.go create mode 100644 internal/listener/state_main_test.go create mode 100644 internal/memory/record/state_main_test.go create mode 100644 internal/memory/server/state_main_test.go create mode 100644 internal/project/state_main_test.go create mode 100644 internal/redact/state_main_test.go create mode 100644 internal/timefmt/state_main_test.go create mode 100644 internal/tui/chat/state_main_test.go create mode 100644 internal/tui/memview/state_main_test.go create mode 100644 internal/tui/state_main_test.go diff --git a/README.md b/README.md index 5c92eb9..0578ab1 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ writes the store itself and syncs, or hands the event to a running the folder open. Someone watching the Project sees the prompt, then the tool cards one by one, then the reply. Text is not streamed token by token: no agent exposes a hook for that. A hook never fails the agent: errors go to -`.atlas/cli-hooks.log` and `atlas status`. +`hooks.log` in the CLI state directory (`~/.local/state/atlas-cli/projects//`) and `atlas status`. `.atlas/` itself holds only what the desktop app writes. | agent | hook written to | memory server written to | |---|---|---| diff --git a/cmd/atlas/hooks_cmds.go b/cmd/atlas/hooks_cmds.go index 7d61347..cf8ac05 100644 --- a/cmd/atlas/hooks_cmds.go +++ b/cmd/atlas/hooks_cmds.go @@ -32,7 +32,8 @@ import ( // atlas hooks is what the installed agent hooks run; atlas // hooks git is what the git hooks run. Both are hidden, read their // payload on stdin, never block the agent, and never exit non-zero: an error -// goes to .atlas/cli-hooks.log and shows in atlas status (ADR-0013 §4). +// goes to hooks.log in the CLI state directory and shows in atlas status +// (ADR-0013 §4). func newHooksCmd() *cobra.Command { root := &cobra.Command{Use: "hooks", Short: "Entry points for agent and git hooks (installed by atlas agents add)", Hidden: true, Args: cobra.NoArgs} for _, a := range hooks.All() { diff --git a/cmd/atlas/main_test.go b/cmd/atlas/main_test.go index db10ead..3a71443 100644 --- a/cmd/atlas/main_test.go +++ b/cmd/atlas/main_test.go @@ -20,6 +20,8 @@ func TestMain(m *testing.M) { _ = os.Setenv("ATLAS_INGEST_URL", "http://127.0.0.1:1") // unreachable unless a test installs a fake data, _ := os.MkdirTemp("", "atlas-data-") // never the user's agents _ = os.Setenv("XDG_DATA_HOME", data) + state, _ := os.MkdirTemp("", "atlas-state-") // never the user's CLI state + _ = os.Setenv("XDG_STATE_HOME", state) os.Exit(m.Run()) } diff --git a/cmd/atlas/serve_cmds.go b/cmd/atlas/serve_cmds.go index 5e41f32..813109c 100644 --- a/cmd/atlas/serve_cmds.go +++ b/cmd/atlas/serve_cmds.go @@ -11,7 +11,6 @@ import ( "os" "os/exec" "os/signal" - "path/filepath" "syscall" "time" @@ -21,6 +20,7 @@ import ( gitlink "github.com/tryatlas/atlas-cli/internal/capture/git" "github.com/tryatlas/atlas-cli/internal/capture/store" capsync "github.com/tryatlas/atlas-cli/internal/capture/sync" + "github.com/tryatlas/atlas-cli/internal/clistate" "github.com/tryatlas/atlas-cli/internal/hooks" "github.com/tryatlas/atlas-cli/internal/hosts" "github.com/tryatlas/atlas-cli/internal/ingest" @@ -156,7 +156,7 @@ func postSync(ctx context.Context, sock string, retry bool) (listener.SyncAnswer const daemonEnv = "ATLAS_SERVE_DAEMON" // serveLog is where a detached listener's stderr goes. -func serveLog(root string) string { return filepath.Join(root, store.DirName, "cli-serve.log") } +func serveLog(root string) string { return clistate.Path(root, "serve.log") } // runServe runs the listener until interrupted; --daemon detaches it and // --stop ends a detached one. diff --git a/docs/adr/0013-hooks-capture-native-agent-uis.md b/docs/adr/0013-hooks-capture-native-agent-uis.md index c7b25e3..0f8ccdf 100644 --- a/docs/adr/0013-hooks-capture-native-agent-uis.md +++ b/docs/adr/0013-hooks-capture-native-agent-uis.md @@ -51,7 +51,7 @@ the product. Commits are linked by the existing walk (`atlas capture link`), now also run from a `post-commit` git hook. No git refs, no commit trailers. 4. **Hooks never fail the agent.** Every hook exits 0; errors go to - `.atlas/cli-hooks.log` and the last one shows in `atlas status`. Stdout + `hooks.log` in the CLI state directory and the last one shows in `atlas status`. Stdout carries only the agent's own response shape (the SessionStart banner). Every hook runs under a deadline. The installed command is wrapped in `sh -c 'if ! command -v atlas >/dev/null 2>&1; then exit 0; fi; exec atlas @@ -59,7 +59,7 @@ the product. 5. **Delivery.** A hook writes to the store itself when it can take the writer lock; when `atlas serve` holds it, the hook posts the turn to the listener's owner-only Unix socket; when the desktop app holds it, the turn - is spooled under `.atlas/hooks/spool/` and drained by the next writer. + is spooled in the CLI state directory (`hooks/spool/`) and drained by the next writer. 6. **Shared memory reaches native UIs through MCP config.** `atlas agents add` also writes the `atlas_memory` server entry into the agent's MCP config as a stdio entry `atlas mcp-bridge --project --agent ` diff --git a/docs/progress.md b/docs/progress.md index b7b95dd..8f5d954 100644 --- a/docs/progress.md +++ b/docs/progress.md @@ -1262,3 +1262,24 @@ Reported: agents commit but no checkpoint appears. Two causes, both fixed: Verified live: `claude -p` running only `echo … > c4.txt && git add && git commit` → checkpoint `["c4.txt"]` linked, the touch consumed by that commit; `codex exec` the same → checkpoint `["c5.txt"]` linked. + +## v0.3.2: `.atlas/` holds only what the desktop app writes + +Reported: the CLI's `.atlas/` differed from the app's. Compared against +app-made folders on this machine (`Delta`, `acp-ref`, `Portfolio-Clean`): +the shared files (`.gitignore`, `project.json`, `sessions.db`, +`sessions.lock`, `memory/memory.sqlite`) were already identical; the CLI also +wrote its own `hooks/` (session state, spool, OpenCode export cache, locks), +`cli-hooks.log`, `cli-run.json`, `cli-serve.log` and `cli-import.json`. Those +now live in a per-user state directory, `$XDG_STATE_HOME/atlas-cli/projects/ +<16 hex of sha256(root)>/` (default `~/.local/state/…`, 0700, with a `root` +file naming the Project): `hooks/`, `hooks.log`, `run.json` (0600), +`serve.log`, `import.json`. Older layouts are moved there on first use. The +app's own UI and index files (`editor-state.json`, `logs.jsonl`, +`codebase-index/`, `memory/extract-state`, …) are the app's to create when it +opens the folder. Every test package now points `XDG_STATE_HOME` at a temp +directory. + +Verified: `test-cli` migrated in place (history kept); a fresh Project after +a hooked Claude turn and an `atlas serve` start/stop has `.atlas/` = +`.gitignore memory project.json sessions.db sessions.lock`. diff --git a/internal/agents/acp/state_main_test.go b/internal/agents/acp/state_main_test.go new file mode 100644 index 0000000..d91d467 --- /dev/null +++ b/internal/agents/acp/state_main_test.go @@ -0,0 +1,15 @@ +package acp + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/auth/state_main_test.go b/internal/auth/state_main_test.go new file mode 100644 index 0000000..3528e37 --- /dev/null +++ b/internal/auth/state_main_test.go @@ -0,0 +1,15 @@ +package auth + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/capture/git/state_main_test.go b/internal/capture/git/state_main_test.go new file mode 100644 index 0000000..ef609f6 --- /dev/null +++ b/internal/capture/git/state_main_test.go @@ -0,0 +1,15 @@ +package git + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/capture/record/state_main_test.go b/internal/capture/record/state_main_test.go new file mode 100644 index 0000000..de38293 --- /dev/null +++ b/internal/capture/record/state_main_test.go @@ -0,0 +1,15 @@ +package record + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/capture/store/state_main_test.go b/internal/capture/store/state_main_test.go new file mode 100644 index 0000000..add354c --- /dev/null +++ b/internal/capture/store/state_main_test.go @@ -0,0 +1,15 @@ +package store + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/capture/sync/state_main_test.go b/internal/capture/sync/state_main_test.go new file mode 100644 index 0000000..d243224 --- /dev/null +++ b/internal/capture/sync/state_main_test.go @@ -0,0 +1,15 @@ +package sync + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/clistate/clistate.go b/internal/clistate/clistate.go new file mode 100644 index 0000000..23835c4 --- /dev/null +++ b/internal/clistate/clistate.go @@ -0,0 +1,80 @@ +// Package clistate is where the CLI keeps its own per-Project files: hook +// session state, the spool, the listener's run file and logs. They live +// outside /.atlas/ so that folder holds exactly what the desktop app +// writes: $XDG_STATE_HOME/atlas-cli/projects/<16 hex of sha256(root)>/ +// (default ~/.local/state/…), with a "root" file naming the Project. +package clistate + +import ( + "crypto/sha256" + "encoding/hex" + "errors" + "io/fs" + "os" + "path/filepath" +) + +// Dir is the CLI's state directory for a Project root. +func Dir(root string) string { + base := os.Getenv("XDG_STATE_HOME") + if !filepath.IsAbs(base) { + home, err := os.UserHomeDir() + if err != nil { + home = os.TempDir() + } + base = filepath.Join(home, ".local", "state") + } + sum := sha256.Sum256([]byte(root)) + return filepath.Join(base, "atlas-cli", "projects", hex.EncodeToString(sum[:])[:16]) +} + +// Ensure creates the directory (0700: it holds typed prompts) and its root +// file, and moves what older CLIs left in /.atlas/. +func Ensure(root string) (string, error) { + d := Dir(root) + if err := os.MkdirAll(d, 0o700); err != nil { + return "", err + } + if _, err := os.Stat(filepath.Join(d, "root")); errors.Is(err, fs.ErrNotExist) { + _ = os.WriteFile(filepath.Join(d, "root"), []byte(root+"\n"), 0o600) + } + migrate(root, d) + return d, nil +} + +// Path is a file in the state directory (created on demand). +func Path(root, name string) string { + d, err := Ensure(root) + if err != nil { + return filepath.Join(Dir(root), name) + } + return filepath.Join(d, name) +} + +// legacy maps what CLIs up to 0.3.1 wrote into .atlas/ to its new name. +var legacy = map[string]string{ + "hooks": "hooks", + "cli-hooks.log": "hooks.log", + "cli-serve.log": "serve.log", + "cli-import.json": "import.json", +} + +func migrate(root, d string) { + old := filepath.Join(root, ".atlas") + for from, to := range legacy { + src := filepath.Join(old, from) + if _, err := os.Lstat(src); err != nil { + continue + } + dst := filepath.Join(d, to) + if _, err := os.Lstat(dst); err == nil { + _ = os.RemoveAll(src) // the new copy wins + continue + } + if os.Rename(src, dst) != nil { + _ = os.RemoveAll(src) + } + } + // A run file of a listener from an older CLI is stale by now. + _ = os.Remove(filepath.Join(old, "cli-run.json")) +} diff --git a/internal/hooks/antigravity/state_main_test.go b/internal/hooks/antigravity/state_main_test.go new file mode 100644 index 0000000..f6879e2 --- /dev/null +++ b/internal/hooks/antigravity/state_main_test.go @@ -0,0 +1,15 @@ +package antigravity + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/hooks/claude/state_main_test.go b/internal/hooks/claude/state_main_test.go new file mode 100644 index 0000000..c027a41 --- /dev/null +++ b/internal/hooks/claude/state_main_test.go @@ -0,0 +1,15 @@ +package claude + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/hooks/codex/state_main_test.go b/internal/hooks/codex/state_main_test.go new file mode 100644 index 0000000..e78e875 --- /dev/null +++ b/internal/hooks/codex/state_main_test.go @@ -0,0 +1,15 @@ +package codex + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/hooks/copilot/state_main_test.go b/internal/hooks/copilot/state_main_test.go new file mode 100644 index 0000000..4c35518 --- /dev/null +++ b/internal/hooks/copilot/state_main_test.go @@ -0,0 +1,15 @@ +package copilot + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/hooks/cursor/state_main_test.go b/internal/hooks/cursor/state_main_test.go new file mode 100644 index 0000000..68818f7 --- /dev/null +++ b/internal/hooks/cursor/state_main_test.go @@ -0,0 +1,15 @@ +package cursor + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/hooks/droid/state_main_test.go b/internal/hooks/droid/state_main_test.go new file mode 100644 index 0000000..be94557 --- /dev/null +++ b/internal/hooks/droid/state_main_test.go @@ -0,0 +1,15 @@ +package droid + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/hooks/event.go b/internal/hooks/event.go index 6c59f0f..302243b 100644 --- a/internal/hooks/event.go +++ b/internal/hooks/event.go @@ -1,7 +1,7 @@ // Package hooks captures sessions run in an agent's own UI through the // agent's lifecycle hooks (ADR-0013). Each agent integration translates its // native hook payload into one Event; the dispatcher does the rest: session -// state under .atlas/hooks/, the transcript read from the offset recorded at +// state in the CLI state directory, the transcript read from the offset recorded at // turn start, the git status diff, and delivery to the capture store. package hooks @@ -71,7 +71,7 @@ type Event struct { } // sessionIDPattern is what a session id may look like before it becomes a -// file name under .atlas/hooks/. +// file name in the hooks state directory. var sessionIDPattern = regexp.MustCompile(`^[A-Za-z0-9][A-Za-z0-9._-]{0,199}$`) // ErrBadSessionID is a session id that cannot be a file name. diff --git a/internal/hooks/mcpconfig/state_main_test.go b/internal/hooks/mcpconfig/state_main_test.go new file mode 100644 index 0000000..1a56c3f --- /dev/null +++ b/internal/hooks/mcpconfig/state_main_test.go @@ -0,0 +1,15 @@ +package mcpconfig + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/hooks/opencode/state_main_test.go b/internal/hooks/opencode/state_main_test.go new file mode 100644 index 0000000..4e7c1ef --- /dev/null +++ b/internal/hooks/opencode/state_main_test.go @@ -0,0 +1,15 @@ +package opencode + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/hooks/pi/state_main_test.go b/internal/hooks/pi/state_main_test.go new file mode 100644 index 0000000..4b56897 --- /dev/null +++ b/internal/hooks/pi/state_main_test.go @@ -0,0 +1,15 @@ +package pi + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/hooks/state.go b/internal/hooks/state.go index f8d34b6..4e71307 100644 --- a/internal/hooks/state.go +++ b/internal/hooks/state.go @@ -13,18 +13,19 @@ import ( "golang.org/x/sys/unix" "github.com/tryatlas/atlas-cli/internal/capture/record" - "github.com/tryatlas/atlas-cli/internal/capture/store" + "github.com/tryatlas/atlas-cli/internal/clistate" ) -// Session state lives under /.atlas/hooks//.json: -// what the dispatcher needs between two hook invocations of one session. -// .atlas/ ignores itself in git. +// Session state lives in the CLI's own state directory (clistate), under +// hooks//.json: what the dispatcher needs between two hook +// invocations of one session. Nothing of it goes into /.atlas/, which +// holds only what the desktop app writes. // Dir is the hooks state directory of a Project. -func Dir(root string) string { return filepath.Join(root, store.DirName, "hooks") } +func Dir(root string) string { return clistate.Path(root, "hooks") } // LogPath is where hook errors go. -func LogPath(root string) string { return filepath.Join(root, store.DirName, "cli-hooks.log") } +func LogPath(root string) string { return clistate.Path(root, "hooks.log") } // State is one native session as the hooks have seen it. type State struct { diff --git a/internal/hooks/state_main_test.go b/internal/hooks/state_main_test.go new file mode 100644 index 0000000..177e4ce --- /dev/null +++ b/internal/hooks/state_main_test.go @@ -0,0 +1,15 @@ +package hooks + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/hosts/state_main_test.go b/internal/hosts/state_main_test.go new file mode 100644 index 0000000..5a4a8ca --- /dev/null +++ b/internal/hosts/state_main_test.go @@ -0,0 +1,15 @@ +package hosts + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/ingest/state_main_test.go b/internal/ingest/state_main_test.go new file mode 100644 index 0000000..52fbaae --- /dev/null +++ b/internal/ingest/state_main_test.go @@ -0,0 +1,15 @@ +package ingest + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/listener/listener.go b/internal/listener/listener.go index 1e28f0a..ee74e3a 100644 --- a/internal/listener/listener.go +++ b/internal/listener/listener.go @@ -4,7 +4,7 @@ // owner-only Unix socket that carries the control endpoints: /sync for // atlas capture sync and retry, /hook for turns delivered by agent hooks, and // /mcp for the memory bridge of agents run in their own UIs (ADR-0013). Both -// are published in .atlas/cli-run.json. +// are published in the CLI's state directory (clistate) as run.json. package listener import ( @@ -15,17 +15,18 @@ import ( "net" "net/http" "os" - "path/filepath" "strconv" "sync/atomic" "syscall" "time" + "github.com/tryatlas/atlas-cli/internal/clistate" "github.com/tryatlas/atlas-cli/internal/memory/server" "github.com/tryatlas/atlas-cli/internal/timefmt" ) -// RunFile is /.atlas/cli-run.json while a listener runs. +// RunFile is the Project's run.json in the CLI state directory while a +// listener runs. type RunFile struct { PID int `json:"pid"` Port int `json:"port"` @@ -35,7 +36,7 @@ type RunFile struct { } // RunFilePath is where a Project's run file lives. -func RunFilePath(root string) string { return filepath.Join(root, ".atlas", "cli-run.json") } +func RunFilePath(root string) string { return clistate.Path(root, "run.json") } // ReadRunFile returns the running listener's file, or nil when none runs. func ReadRunFile(root string) *RunFile { @@ -161,11 +162,7 @@ func Start(root, version string, opt Options) (*Listener, error) { rf := RunFile{PID: os.Getpid(), Port: ln.Port, StartedAt: timefmt.RFC3339(time.Now()), Socket: sock, Daemon: opt.Daemon} b, _ := json.Marshal(rf) - if err := os.MkdirAll(filepath.Join(root, ".atlas"), 0o755); err != nil { - _ = ln.Stop() - return nil, err - } - if err := os.WriteFile(RunFilePath(root), b, 0o644); err != nil { //nolint:gosec // G306: holds no secret + if err := os.WriteFile(RunFilePath(root), b, 0o600); err != nil { _ = ln.Stop() return nil, err } diff --git a/internal/listener/state_main_test.go b/internal/listener/state_main_test.go new file mode 100644 index 0000000..a24d24f --- /dev/null +++ b/internal/listener/state_main_test.go @@ -0,0 +1,15 @@ +package listener + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/memory/record/state_main_test.go b/internal/memory/record/state_main_test.go new file mode 100644 index 0000000..de38293 --- /dev/null +++ b/internal/memory/record/state_main_test.go @@ -0,0 +1,15 @@ +package record + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/memory/server/state_main_test.go b/internal/memory/server/state_main_test.go new file mode 100644 index 0000000..9d6b013 --- /dev/null +++ b/internal/memory/server/state_main_test.go @@ -0,0 +1,15 @@ +package server + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/project/state_main_test.go b/internal/project/state_main_test.go new file mode 100644 index 0000000..4ea28e6 --- /dev/null +++ b/internal/project/state_main_test.go @@ -0,0 +1,15 @@ +package project + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/redact/state_main_test.go b/internal/redact/state_main_test.go new file mode 100644 index 0000000..9c2f42f --- /dev/null +++ b/internal/redact/state_main_test.go @@ -0,0 +1,15 @@ +package redact + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/run/import.go b/internal/run/import.go index 3898096..7f5dd4b 100644 --- a/internal/run/import.go +++ b/internal/run/import.go @@ -14,6 +14,7 @@ import ( "github.com/tryatlas/atlas-cli/internal/agents/acp" "github.com/tryatlas/atlas-cli/internal/capture/record" + "github.com/tryatlas/atlas-cli/internal/clistate" ) // Importing sessions run in an agent's own UI (ADR-0012): each installed @@ -24,7 +25,7 @@ import ( // ImportStatePath is the CLI's own record of what was imported: // {"": {"": ""}}. -func ImportStatePath(root string) string { return filepath.Join(root, ".atlas", "cli-import.json") } +func ImportStatePath(root string) string { return clistate.Path(root, "import.json") } type importState map[string]map[string]string diff --git a/internal/run/session_test.go b/internal/run/session_test.go index b136c79..882dfeb 100644 --- a/internal/run/session_test.go +++ b/internal/run/session_test.go @@ -19,6 +19,8 @@ import ( ) func TestMain(m *testing.M) { + state, _ := os.MkdirTemp("", "atlas-state-") // never the user's CLI state + _ = os.Setenv("XDG_STATE_HOME", state) acptest.Main() os.Exit(m.Run()) } diff --git a/internal/timefmt/state_main_test.go b/internal/timefmt/state_main_test.go new file mode 100644 index 0000000..0eb7904 --- /dev/null +++ b/internal/timefmt/state_main_test.go @@ -0,0 +1,15 @@ +package timefmt + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/tui/chat/state_main_test.go b/internal/tui/chat/state_main_test.go new file mode 100644 index 0000000..a1964b6 --- /dev/null +++ b/internal/tui/chat/state_main_test.go @@ -0,0 +1,15 @@ +package chat + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/tui/memview/state_main_test.go b/internal/tui/memview/state_main_test.go new file mode 100644 index 0000000..688e40b --- /dev/null +++ b/internal/tui/memview/state_main_test.go @@ -0,0 +1,15 @@ +package memview + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} diff --git a/internal/tui/state_main_test.go b/internal/tui/state_main_test.go new file mode 100644 index 0000000..17d7b81 --- /dev/null +++ b/internal/tui/state_main_test.go @@ -0,0 +1,15 @@ +package tui + +import ( + "os" + "testing" +) + +// TestMain keeps the CLI state directory (clistate) out of the real home. +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} From 8bf153fb6a15c15c893542360c255a24dd22738a Mon Sep 17 00:00:00 2001 From: Ukaykhingmarma28 Date: Mon, 12 Oct 2026 12:56:51 +0600 Subject: [PATCH 5/9] Make terminal sessions feed shared memory the way app sessions do Hook-captured sessions now use the app's registry agent ids, record capture candidates from the agent's reply, leave a handoff note at session end, and run the extractor through the Atlas gateway's default model after long turns and at session end (detached, one pass per session at a time). atlas memory list --all includes candidates, as the app shows them. --- cmd/atlas/commands.go | 1 + cmd/atlas/hooks_cmds.go | 68 +++++ cmd/atlas/main_test.go | 3 +- cmd/atlas/memory_cmds.go | 5 + docs/progress.md | 32 ++ internal/hooks/agent.go | 20 ++ internal/hooks/deliver.go | 5 + internal/hooks/dispatch.go | 2 +- internal/hooks/mcpconfig/claude_test.go | 2 +- internal/hooks/mcpconfig/codex_test.go | 2 +- internal/hooks/mcpconfig/copilot_test.go | 2 +- internal/hooks/mcpconfig/mcpconfig.go | 5 +- internal/hooks/mcpconfig/pi_test.go | 2 +- internal/memory/extract/extract.go | 370 +++++++++++++++++++++++ internal/memory/extract/extract_test.go | 117 +++++++ internal/memory/record/handoff.go | 125 ++++++++ internal/memory/record/handoff_test.go | 55 ++++ internal/memory/server/server.go | 17 +- 18 files changed, 824 insertions(+), 9 deletions(-) create mode 100644 internal/memory/extract/extract.go create mode 100644 internal/memory/extract/extract_test.go create mode 100644 internal/memory/record/handoff.go create mode 100644 internal/memory/record/handoff_test.go diff --git a/cmd/atlas/commands.go b/cmd/atlas/commands.go index 4265f9a..7fd9c3f 100644 --- a/cmd/atlas/commands.go +++ b/cmd/atlas/commands.go @@ -161,6 +161,7 @@ func newMemoryListCmd() *cobra.Command { c := withRun(leaf("list", "Print shared memory entries (for scripts; atlas memory browse on a terminal)", cobra.NoArgs), runMemoryList) c.Flags().String("kind", "", "only this kind: plan, file_changed, decision, fact, failure, architecture, preference") c.Flags().String("search", "", "search instead of listing") + c.Flags().Bool("all", false, "include candidates (unconfirmed memories), as the app shows them") return c } diff --git a/cmd/atlas/hooks_cmds.go b/cmd/atlas/hooks_cmds.go index cf8ac05..a37f9f9 100644 --- a/cmd/atlas/hooks_cmds.go +++ b/cmd/atlas/hooks_cmds.go @@ -7,6 +7,8 @@ import ( "fmt" "io" "os" + "os/exec" + "syscall" "time" "github.com/spf13/cobra" @@ -15,7 +17,9 @@ import ( "github.com/tryatlas/atlas-cli/internal/capture/store" capsync "github.com/tryatlas/atlas-cli/internal/capture/sync" "github.com/tryatlas/atlas-cli/internal/hooks" + "github.com/tryatlas/atlas-cli/internal/hosts" "github.com/tryatlas/atlas-cli/internal/listener" + "github.com/tryatlas/atlas-cli/internal/memory/extract" "github.com/tryatlas/atlas-cli/internal/project" // The agent integrations register themselves. @@ -43,6 +47,12 @@ func newHooksCmd() *cobra.Command { } root.AddCommand(ag) } + extract := &cobra.Command{Use: "extract", Short: "Distil memories from a captured session (run detached by the hooks)", Hidden: true, Args: cobra.NoArgs, RunE: runHookExtract} + extract.Flags().String("root", "", "the Project root") + extract.Flags().String("agent", "", "the desktop's agent id") + extract.Flags().String("session", "", "the agent's session id") + extract.Flags().Bool("final", false, "the session ended") + root.AddCommand(extract) git := &cobra.Command{Use: "git", Short: "git hooks", Hidden: true, Args: cobra.NoArgs} git.AddCommand(&cobra.Command{Use: "post-commit", Hidden: true, Args: cobra.ArbitraryArgs, RunE: runGitPostCommit}) root.AddCommand(git) @@ -87,8 +97,66 @@ func runAgentHook(a hooks.Agent, verb string) func(*cobra.Command, []string) err if len(out) > 0 { _, _ = cmd.OutOrStdout().Write(out) } + if err == nil && (ev.Kind == hooks.TurnEnd || ev.Kind == hooks.SessionEnd) { + spawnExtract(p.Root, hooks.RegistryID(a.ID()), ev.SessionID, ev.Kind == hooks.SessionEnd) + } + return nil + } +} + +// spawnExtract starts `atlas hooks extract` detached: the model call can take +// a minute, and the agent must not wait on it. +func spawnExtract(root, agent, session string, final bool) { + self, err := os.Executable() + if err != nil { + return + } + args := []string{"hooks", "extract", "--root", root, "--agent", agent, "--session", session} + if final { + args = append(args, "--final") + } + c := exec.Command(self, args...) //nolint:gosec // G204: this binary + c.Dir = root + c.SysProcAttr = &syscall.SysProcAttr{Setsid: true} + if c.Start() == nil { + _ = c.Process.Release() + } +} + +// runHookExtract runs one extraction pass; gates that say "not yet" are +// silent, real failures go to the hooks log. +func runHookExtract(cmd *cobra.Command, _ []string) error { + ctx, cancel := context.WithTimeout(cmd.Context(), 2*extract.Timeout) + defer cancel() + root, _ := cmd.Flags().GetString("root") + agent, _ := cmd.Flags().GetString("agent") + session, _ := cmd.Flags().GetString("session") + final, _ := cmd.Flags().GetBool("final") + if root == "" || session == "" || !hooks.ValidSessionID(session) { return nil } + a, err := newAuth() + if err != nil || a == nil { + return nil //nolint:nilerr // signed out: the desktop's extractor also needs a sign-in + } + s, err := a.Session() + if err != nil { + return nil //nolint:nilerr // signed out + } + n, err := extract.Run(ctx, extract.Options{Root: root, Agent: agent, Session: session, Final: final, + Gateway: hosts.Gateway(), + Auth: func(ctx context.Context) (string, string, error) { + tok, err := a.Tokens().Token(ctx) + return tok, s.ActiveOrgID(), err + }}) + switch { + case errors.Is(err, extract.ErrSkipped): + case err != nil: + hooks.LogError(root, agent, "extract", err) + case n > 0: + hooks.ClearLastError(root) + } + return nil } // syncAfterHook sends what a direct hook write just recorded to the cloud, diff --git a/cmd/atlas/main_test.go b/cmd/atlas/main_test.go index 3a71443..7aba431 100644 --- a/cmd/atlas/main_test.go +++ b/cmd/atlas/main_test.go @@ -46,6 +46,7 @@ var wantCommands = []string{ "capture link", "capture retry", "capture sync", + "hooks extract", "hooks git post-commit", "init", "login", @@ -107,7 +108,7 @@ var implemented = map[string]bool{ "capture link": true, "capture sync": true, "acp import": true, "capture retry": true, "acp run": true, "memory browse": true, "memory list": true, "acp check": true, "acp detect": true, "acp install": true, "acp list": true, "acp sessions": true, "acp logout": true, "acp uninstall": true, "agents add": true, "agents list": true, "agents remove": true, "agents sessions": true, - "hooks git post-commit": true, + "hooks extract": true, "hooks git post-commit": true, } func TestStubsReportNotImplemented(t *testing.T) { diff --git a/cmd/atlas/memory_cmds.go b/cmd/atlas/memory_cmds.go index 906cbe2..1a288da 100644 --- a/cmd/atlas/memory_cmds.go +++ b/cmd/atlas/memory_cmds.go @@ -167,6 +167,11 @@ func runMemoryList(cmd *cobra.Command, _ []string) error { for _, h := range hits { es = append(es, h.Entry) } + } else if all, _ := cmd.Flags().GetBool("all"); all { + // Candidates too, as the app's memory panel shows them. + if es, err = st.List(ctx, kind, 10000); err != nil { + return err + } } else if es, err = st.Active(ctx, kinds...); err != nil { return err } diff --git a/docs/progress.md b/docs/progress.md index 8f5d954..20dcd9e 100644 --- a/docs/progress.md +++ b/docs/progress.md @@ -1283,3 +1283,35 @@ directory. Verified: `test-cli` migrated in place (history kept); a fresh Project after a hooked Claude turn and an `atlas serve` start/stop has `.atlas/` = `.gitignore memory project.json sessions.db sessions.lock`. + +## v0.3.3: terminal sessions feed memory like app sessions + +Reported: app memory and terminal memory differ. Both use the same file +(`.atlas/memory/memory.sqlite`, schema v6) and in this repo `atlas memory +list` matched the app's active entries; the difference was in what each +side writes for a session. Fixed: + +- **Agent ids.** Hook sessions were recorded as `claude-code`, `codex`, …; + the app records the same agents under their registry ids. Sessions, + memory entries and the MCP bridge now use `claude-acp`, `codex-acp`, + `github-copilot-cli`, `factory-droid`, `pi-acp`, `antigravity-acp` + (`cursor`, `opencode` unchanged). +- **Capture candidates.** Lines of the agent's reply carrying the app's + markers (`decided to`, `decision:`, `gotcha:`, `doesn't work`, `note:`, + `architecture:`, …) become candidates (source `capture`, 0.3). +- **Handoff note.** At session end the episode is written in the app's + HandoffNote shape from the session's active memories, and rewritten after + the extractor's final pass. +- **Extractor.** After a turn (≥ 20 turns and ≥ 3 tool calls since the last + pass) and at session end, a detached `atlas hooks extract` asks the Atlas + gateway's default model (`/v1/models` `default: true`, glm-5.3-flash today) + to distil decisions, facts, failures, architecture and preferences; entries + land as source `extractor`. Signed in only; the summariser's `local` mode + sends nothing; one pass per session at a time. The excerpt comes from the + capture store, which is already redacted. +- `atlas memory list --all` includes candidates, as the app's panel does. + +Verified live (`claude -p` in a fresh Project): `file_changed`, two capture +candidates, three extractor memories ~40 s later, the handoff with the +distilled decision and fact, everything as `claude-acp`; in this repo +`atlas memory list --all` = 202 = the app's store. diff --git a/internal/hooks/agent.go b/internal/hooks/agent.go index bda7db6..2b6a055 100644 --- a/internal/hooks/agent.go +++ b/internal/hooks/agent.go @@ -137,3 +137,23 @@ const ( type Noter interface { AddNote() string } + +// registryIDs map a hook integration to the id the desktop records the same +// agent under (its ACP registry id), so a session run in the agent's own UI +// and one run in the app are one agent in the store and in memory. +var registryIDs = map[string]string{ + "claude-code": "claude-acp", + "codex": "codex-acp", + "copilot": "github-copilot-cli", + "droid": "factory-droid", + "pi": "pi-acp", + "antigravity": "antigravity-acp", +} + +// RegistryID is the desktop's id for a hook integration's agent. +func RegistryID(id string) string { + if r, ok := registryIDs[id]; ok { + return r + } + return id +} diff --git a/internal/hooks/deliver.go b/internal/hooks/deliver.go index d2238f9..8db8fcb 100644 --- a/internal/hooks/deliver.go +++ b/internal/hooks/deliver.go @@ -105,6 +105,11 @@ func apply1(ctx context.Context, rec *record.Recorder, mem *server.Server, d Del } if mem != nil { foldChanges(ctx, mem, g, d.Root, d.Turn) + for _, it := range d.Turn.Items { + if it.Tool == nil && it.Mode != "thinking" { + mem.Capture(ctx, g, it.Body) + } + } } } } diff --git a/internal/hooks/dispatch.go b/internal/hooks/dispatch.go index 0eadcb7..60c54bf 100644 --- a/internal/hooks/dispatch.go +++ b/internal/hooks/dispatch.go @@ -85,7 +85,7 @@ func (d *Dispatcher) Run(ctx context.Context, a Agent, ev *Event) ([]byte, error if ev.Model != "" { st.Model = ev.Model } - sess := record.Session{Agent: a.ID(), NativeID: ev.SessionID, Cwd: d.Root, Model: st.Model} + sess := record.Session{Agent: RegistryID(a.ID()), NativeID: ev.SessionID, Cwd: d.Root, Model: st.Model} if !st.Started && ev.Kind != SessionEnd { // The first hook of a session, whichever it is, announces it. st.Started = true diff --git a/internal/hooks/mcpconfig/claude_test.go b/internal/hooks/mcpconfig/claude_test.go index 8998566..89f8291 100644 --- a/internal/hooks/mcpconfig/claude_test.go +++ b/internal/hooks/mcpconfig/claude_test.go @@ -35,7 +35,7 @@ func TestClaudeWriterAddsAndRemoves(t *testing.T) { t.Fatal(err) } e := obj.Servers[ServerName] - if e.Type != "stdio" || e.Command != "atlas" || strings.Join(e.Args, " ") != "mcp-bridge --project "+root+" --agent claude-code" || obj.Servers["other"].Command != "x" { + if e.Type != "stdio" || e.Command != "atlas" || strings.Join(e.Args, " ") != "mcp-bridge --project "+root+" --agent claude-acp" || obj.Servers["other"].Command != "x" { t.Fatalf("%+v", obj) } local, _ := os.ReadFile(filepath.Join(root, ".claude", "settings.local.json")) diff --git a/internal/hooks/mcpconfig/codex_test.go b/internal/hooks/mcpconfig/codex_test.go index eaee5fe..80f00d0 100644 --- a/internal/hooks/mcpconfig/codex_test.go +++ b/internal/hooks/mcpconfig/codex_test.go @@ -59,7 +59,7 @@ func TestCodexAddIdempotentRemove(t *testing.T) { t.Fatalf("mode %v", fi.Mode()) } cmd, args := parsedServer(t, path) - if cmd != "atlas" || strings.Join(args, " ") != "mcp-bridge --project "+root+" --agent codex" { + if cmd != "atlas" || strings.Join(args, " ") != "mcp-bridge --project "+root+" --agent codex-acp" { t.Fatalf("%s %v", cmd, args) } b, _ := os.ReadFile(path) diff --git a/internal/hooks/mcpconfig/copilot_test.go b/internal/hooks/mcpconfig/copilot_test.go index 72cc77f..b99eca1 100644 --- a/internal/hooks/mcpconfig/copilot_test.go +++ b/internal/hooks/mcpconfig/copilot_test.go @@ -53,7 +53,7 @@ func TestCopilotWriterWritesALocalServerAndKeepsTheRest(t *testing.T) { if !ok || e.Type != "local" || e.Command != "atlas" || len(e.Tools) != 1 || e.Tools[0] != "*" { t.Fatalf("%s", b) } - if want := []string{"mcp-bridge", "--project", root, "--agent", "copilot"}; len(e.Args) != len(want) || e.Args[2] != root || e.Args[4] != "copilot" { + if want := []string{"mcp-bridge", "--project", root, "--agent", "github-copilot-cli"}; len(e.Args) != len(want) || e.Args[2] != root || e.Args[4] != "github-copilot-cli" { t.Fatalf("args %v", e.Args) } if _, ok := file.Servers["github"]; !ok || file.Other != 1 { diff --git a/internal/hooks/mcpconfig/mcpconfig.go b/internal/hooks/mcpconfig/mcpconfig.go index 8591e41..1b05913 100644 --- a/internal/hooks/mcpconfig/mcpconfig.go +++ b/internal/hooks/mcpconfig/mcpconfig.go @@ -15,9 +15,10 @@ import ( // ServerName is the entry's key: the desktop's server name. const ServerName = "atlas_memory" -// Args are the bridge arguments for a Project and agent. +// Args are the bridge arguments for a Project and agent; the agent is named +// by the desktop's registry id, as its memory entries are. func Args(root, agentID string) []string { - return []string{"mcp-bridge", "--project", root, "--agent", agentID} + return []string{"mcp-bridge", "--project", root, "--agent", hooks.RegistryID(agentID)} } // Writer edits one agent's MCP config. diff --git a/internal/hooks/mcpconfig/pi_test.go b/internal/hooks/mcpconfig/pi_test.go index 237563b..6b00da0 100644 --- a/internal/hooks/mcpconfig/pi_test.go +++ b/internal/hooks/mcpconfig/pi_test.go @@ -33,7 +33,7 @@ func TestPiWriter(t *testing.T) { } b, _ := os.ReadFile(w.Path(root)) s := string(b) - for _, want := range []string{`"atlas_memory"`, `"command": "atlas"`, `"mcp-bridge"`, `"--agent"`, `"pi"`, `"mine"`} { + for _, want := range []string{`"atlas_memory"`, `"command": "atlas"`, `"mcp-bridge"`, `"--agent"`, `"pi-acp"`, `"mine"`} { if !strings.Contains(s, want) { t.Errorf("file lacks %s:\n%s", want, s) } diff --git a/internal/memory/extract/extract.go b/internal/memory/extract/extract.go new file mode 100644 index 0000000..ee3ec91 --- /dev/null +++ b/internal/memory/extract/extract.go @@ -0,0 +1,370 @@ +// Package extract distils durable memories from a captured session through +// the Atlas AI gateway, as the desktop's extractor does (evidence-memory.md +// §4.1): after at least 20 turns and 3 tool calls since the last pass, and +// once at session end; only with sharing on and the summariser not set to +// "local"; results land as entries with source "extractor", through the +// record's redactor. Unlike the desktop, the excerpt sent is the capture +// store's text, which was redacted when it was recorded. +package extract + +import ( + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "os" + "path/filepath" + "regexp" + "strings" + "time" + + "golang.org/x/sys/unix" + + "github.com/tryatlas/atlas-cli/internal/capture/store" + "github.com/tryatlas/atlas-cli/internal/clistate" + "github.com/tryatlas/atlas-cli/internal/memory/record" + "github.com/tryatlas/atlas-cli/internal/project" +) + +// Gates and limits (the desktop's). +const ( + MinTurns = 20 + MinToolCalls = 3 + ExcerptChars = 6000 + MaxEntries = 8 + Timeout = 60 * time.Second +) + +// Options name one session and how to reach the gateway. +type Options struct { + Root string // the Project root (capture store) + Agent string // the desktop's agent id + Session string // the agent's own session id + Final bool // the session ended: extract whatever is new + Gateway string // base URL, e.g. https://ai.tryatlas.cc/v1 + // Auth returns the bearer token and the active org id (may be ""). + Auth func(ctx context.Context) (token, org string, err error) + HTTP *http.Client + Now func() time.Time +} + +// ErrSkipped says a gate kept the pass from running. +var ErrSkipped = errors.New("extraction skipped") + +type state struct { + LastTurn int64 `json:"last_extracted_turn"` + ExtractionCount int `json:"extraction_count"` +} + +func statePath(root, session string) string { + return filepath.Join(clistate.Path(root, "extract"), session+".json") +} + +func loadState(root, session string) state { + var s state + if b, err := os.ReadFile(statePath(root, session)); err == nil { + _ = json.Unmarshal(b, &s) + } + return s +} + +func (s state) save(root, session string) error { + p := statePath(root, session) + if err := os.MkdirAll(filepath.Dir(p), 0o700); err != nil { + return err + } + b, _ := json.MarshalIndent(s, "", " ") + return os.WriteFile(p, b, 0o600) +} + +// summariserLocal reads /.atlas/memory-summarizer.json: mode "local" +// sends nothing anywhere; "provider" (a BYOK model) is the desktop's alone. +func summariserMode(root string) string { + b, err := os.ReadFile(filepath.Join(root, store.DirName, "memory-summarizer.json")) //nolint:gosec // G304: the Project's own setting + if err != nil { + return "" + } + var v struct { + Mode string `json:"mode"` + } + _ = json.Unmarshal(b, &v) + return v.Mode +} + +// Run does one pass and returns how many entries it wrote. +func Run(ctx context.Context, o Options) (int, error) { + if o.Now == nil { + o.Now = time.Now + } + if o.HTTP == nil { + o.HTTP = &http.Client{Timeout: Timeout} + } + if !project.MemorySharing(o.Root) { + return 0, ErrSkipped + } + if m := summariserMode(o.Root); m == "local" || m == "provider" { + return 0, ErrSkipped + } + // One pass per session at a time: a pass that finds another running + // leaves the work to it. + unlock, ok := tryLock(o.Root, o.Session) + if !ok { + return 0, ErrSkipped + } + defer unlock() + st := loadState(o.Root, o.Session) + excerpt, last, tools, err := conversation(ctx, o.Root, o.Session, st.LastTurn) + if err != nil { + return 0, err + } + turns := last - st.LastTurn + switch { + case turns <= 0 || strings.TrimSpace(excerpt) == "": + return 0, ErrSkipped + case !o.Final && (turns < MinTurns || tools < MinToolCalls): + return 0, ErrSkipped + } + token, org, err := o.Auth(ctx) + if err != nil { + return 0, err + } + entries, err := ask(ctx, o, token, org, excerpt) + if err != nil { + return 0, err + } + mem, err := record.Open(project.ScopeRoot(ctx, o.Root), true) + if err != nil { + return 0, err + } + defer mem.Close() + n := 0 + at := o.Now().UnixMilli() + for _, e := range entries { + if n >= MaxEntries || !record.IsDurable(e.Kind) || strings.TrimSpace(e.Content) == "" { + continue + } + c := e.Confidence + if c <= 0 || c > 1 { + c = 0.5 + } + if _, _, err := mem.Remember(ctx, record.Write{Kind: e.Kind, Content: e.Content, Source: "extractor", + Agent: o.Agent, Session: o.Session, Confidence: c, At: at, LogEvent: true}); err != nil { + return n, err + } + n++ + } + st.LastTurn = last + st.ExtractionCount++ + if o.Final && n > 0 { + // The handoff was written at session end, before this pass: rewrite + // it so the next session sees what was distilled. + _ = mem.WriteHandoff(ctx, o.Session, o.Agent, project.ScopeRoot(ctx, o.Root), o.Now().UnixMilli()) + } + return n, st.save(o.Root, o.Session) +} + +var injected = regexp.MustCompile(`(?s)<(system-reminder|local-command-caveat|local-command-stdout|command-message|task-notification)[^>]*>.*?`) + +// conversation is the session's text after a turn, from the capture store: +// prompts, replies and the tools called, the last ExcerptChars of it, plus +// the session's last turn and the number of tool calls since. +func conversation(ctx context.Context, root, native string, after int64) (string, int64, int, error) { + st, err := store.Open(root, false) + if err != nil { + return "", 0, 0, err + } + defer st.Close() + db := st.DB() + var id string + if err := db.QueryRowContext(ctx, `SELECT id FROM agent_session WHERE workspace_id = ? AND native_session_id = ? + ORDER BY updated_at DESC LIMIT 1`, root, native).Scan(&id); err != nil { + return "", 0, 0, err + } + var last int64 + _ = db.QueryRowContext(ctx, `SELECT COALESCE(MAX(turn_seq), 0) FROM turn WHERE session_id = ?`, id).Scan(&last) + var tools int + _ = db.QueryRowContext(ctx, `SELECT count(*) FROM tool_call WHERE session_id = ? AND turn_seq > ?`, id, after).Scan(&tools) + rows, err := db.QueryContext(ctx, `SELECT 'm', role, COALESCE(body, ''), seq FROM agent_message + WHERE session_id = ? AND turn_seq > ? AND mode = 'text' + UNION ALL SELECT 't', tool_name, COALESCE(title, ''), seq FROM tool_call WHERE session_id = ? AND turn_seq > ? + ORDER BY 4`, id, after, id, after) + if err != nil { + return "", 0, 0, err + } + defer rows.Close() + var b strings.Builder + for rows.Next() { + var typ, who, text string + var seq int64 + if rows.Scan(&typ, &who, &text, &seq) != nil { + continue + } + text = strings.TrimSpace(injected.ReplaceAllString(text, "")) + if typ == "t" { + fmt.Fprintf(&b, "[tool %s] %s\n", who, firstLine(text)) + continue + } + if text == "" { + continue + } + label := "Assistant" + if who == "user" { + label = "User" + } + fmt.Fprintf(&b, "%s: %s\n\n", label, text) + } + s := b.String() + if r := []rune(s); len(r) > ExcerptChars { + s = string(r[len(r)-ExcerptChars:]) + } + return s, last, tools, rows.Err() +} + +func firstLine(s string) string { + s, _, _ = strings.Cut(s, "\n") + if len(s) > 160 { + s = s[:160] + } + return s +} + +// Entry is one memory the model proposes. +type Entry struct { + Kind string `json:"kind"` + Content string `json:"content"` + Confidence float64 `json:"confidence"` +} + +// Prompt is what the model is asked; the excerpt follows it. +const Prompt = `You distil durable project memory from a coding-agent session in a software repository. +Read the session excerpt below and return only a JSON object, no prose: +{"entries":[{"kind":"decision|fact|failure|architecture|preference","content":"...","confidence":0.0}]} + +Keep only what a future session in this repository needs and could not cheaply rediscover from the code: +- decision: a choice that was made and why +- fact: a durable truth about the project, its tools or its environment +- failure: a dead end or mistake, with the rule to follow next time +- architecture: how parts of the system fit together +- preference: something the user asked to be done a certain way from now on +Each content is one or two self-contained sentences. No session narration, no task status, no file lists, no secrets. +confidence is how sure you are the memory is true and durable (0 to 1). +Return {"entries":[]} when nothing qualifies. At most 8 entries. + +Session excerpt: +` + +func ask(ctx context.Context, o Options, token, org, excerpt string) ([]Entry, error) { + model, err := defaultModel(ctx, o, token, org) + if err != nil { + return nil, err + } + body, _ := json.Marshal(map[string]any{"model": model, "stream": false, + "messages": []map[string]string{{"role": "user", "content": Prompt + excerpt}}}) + var out struct { + Choices []struct { + Message struct { + Content string `json:"content"` + } `json:"message"` + } `json:"choices"` + } + if err := call(ctx, o, token, org, http.MethodPost, "/chat/completions", body, &out); err != nil { + return nil, err + } + if len(out.Choices) == 0 { + return nil, errors.New("the gateway returned no choice") + } + return parseEntries(out.Choices[0].Message.Content) +} + +// parseEntries reads {"entries":[…]} out of a reply that may wrap it in a +// code fence or prose. +func parseEntries(text string) ([]Entry, error) { + i, j := strings.Index(text, "{"), strings.LastIndex(text, "}") + if i < 0 || j <= i { + return nil, fmt.Errorf("no JSON object in the reply") + } + var v struct { + Entries []Entry `json:"entries"` + } + if err := json.Unmarshal([]byte(text[i:j+1]), &v); err != nil { + return nil, err + } + return v.Entries, nil +} + +// defaultModel is the gateway's model flagged default (the desktop's +// "gateway default model"). +func defaultModel(ctx context.Context, o Options, token, org string) (string, error) { + var out struct { + Data []struct { + ID string `json:"id"` + Default bool `json:"default"` + } `json:"data"` + } + if err := call(ctx, o, token, org, http.MethodGet, "/models", nil, &out); err != nil { + return "", err + } + for _, m := range out.Data { + if m.Default { + return m.ID, nil + } + } + if len(out.Data) > 0 { + return out.Data[0].ID, nil + } + return "", errors.New("the gateway lists no model") +} + +func call(ctx context.Context, o Options, token, org, method, path string, body []byte, out any) error { + var r io.Reader + if body != nil { + r = bytes.NewReader(body) + } + req, err := http.NewRequestWithContext(ctx, method, strings.TrimRight(o.Gateway, "/")+path, r) + if err != nil { + return err + } + req.Header.Set("Authorization", "Bearer "+token) + if org != "" { + req.Header.Set("atlas-org", org) + } + if body != nil { + req.Header.Set("Content-Type", "application/json") + } + resp, err := o.HTTP.Do(req) + if err != nil { + return err + } + defer resp.Body.Close() + b, err := io.ReadAll(io.LimitReader(resp.Body, 4<<20)) + if err != nil { + return err + } + if resp.StatusCode != http.StatusOK { + return fmt.Errorf("gateway %s %s: %d", method, path, resp.StatusCode) + } + return json.Unmarshal(b, out) +} + +// tryLock takes the session's extraction lock without waiting. +func tryLock(root, session string) (func(), bool) { + p := statePath(root, session) + ".lock" + if err := os.MkdirAll(filepath.Dir(p), 0o700); err != nil { + return nil, false + } + f, err := os.OpenFile(p, os.O_CREATE|os.O_RDWR, 0o600) //nolint:gosec // G304: the CLI's own lock file + if err != nil { + return nil, false + } + if unix.Flock(int(f.Fd()), unix.LOCK_EX|unix.LOCK_NB) != nil { + _ = f.Close() + return nil, false + } + return func() { + _ = unix.Flock(int(f.Fd()), unix.LOCK_UN) + _ = f.Close() + }, true +} diff --git a/internal/memory/extract/extract_test.go b/internal/memory/extract/extract_test.go new file mode 100644 index 0000000..3c3630c --- /dev/null +++ b/internal/memory/extract/extract_test.go @@ -0,0 +1,117 @@ +package extract + +import ( + "context" + "encoding/json" + "errors" + "fmt" + "net/http" + "net/http/httptest" + "os" + "strings" + "testing" + "time" + + "github.com/tryatlas/atlas-cli/internal/capture/record" + "github.com/tryatlas/atlas-cli/internal/capture/store" + memrecord "github.com/tryatlas/atlas-cli/internal/memory/record" +) + +func TestMain(m *testing.M) { + dir, _ := os.MkdirTemp("", "atlas-state-") + _ = os.Setenv("XDG_STATE_HOME", dir) + code := m.Run() + _ = os.RemoveAll(dir) + os.Exit(code) +} + +// gateway answers /models and /chat/completions like the Atlas gateway. +func gateway(t *testing.T, seen *string) *httptest.Server { + t.Helper() + return httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Header.Get("Authorization") != "Bearer tok" || r.Header.Get("atlas-org") != "org_1" { + http.Error(w, "auth", http.StatusUnauthorized) + return + } + switch r.URL.Path { + case "/v1/models": + fmt.Fprint(w, `{"data":[{"id":"big","default":false},{"id":"small","default":true}]}`) + case "/v1/chat/completions": + var req struct { + Model string `json:"model"` + Messages []struct{ Content string } `json:"messages"` + } + _ = json.NewDecoder(r.Body).Decode(&req) + *seen = req.Model + "\n" + req.Messages[0].Content + fmt.Fprint(w, `{"choices":[{"message":{"content":"`+"```json\\n"+`{\"entries\":[{\"kind\":\"decision\",\"content\":\"Use the streaming parser for large files.\",\"confidence\":0.8},{\"kind\":\"bogus\",\"content\":\"x\"}]}`+"\\n```"+`"}}]}`) + default: + http.NotFound(w, r) + } + })) +} + +func TestExtractGatesAndWrites(t *testing.T) { + ctx := context.Background() + root, _ := os.MkdirTemp("", "atlas-x-") + defer os.RemoveAll(root) + st, err := store.Open(root, true) + if err != nil { + t.Fatal(err) + } + _ = st.PutBinding(ctx, store.Binding{WorkspaceID: root, Root: root, Mode: store.ModeLocal, Enabled: true}, time.Now()) + rec := record.New(st, root) + sess := record.Session{Agent: "claude-acp", NativeID: "s-x", Cwd: root} + for i := 0; i < 3; i++ { + args, _ := json.Marshal(map[string]string{"command": "go test"}) + if _, err := rec.RecordTurn(ctx, sess, record.CapturedTurn{Prompt: fmt.Sprintf("step %d", i), + Items: []record.CapturedItem{{Mode: "text", Body: "ran the tests hidden"}, + {Tool: &record.Tool{NativeID: fmt.Sprintf("t%d", i), Name: "Bash", Arguments: args, Status: "completed"}}}}); err != nil { + t.Fatal(err) + } + } + _ = st.Close() + var seen string + gw := gateway(t, &seen) + defer gw.Close() + o := Options{Root: root, Agent: "claude-acp", Session: "s-x", Gateway: gw.URL + "/v1", + Auth: func(context.Context) (string, string, error) { return "tok", "org_1", nil }} + + // 3 turns: under the mid-session gate. + if _, err := Run(ctx, o); !errors.Is(err, ErrSkipped) { + t.Fatalf("mid-session pass = %v, want skipped", err) + } + // Session end: extract whatever is new. + o.Final = true + n, err := Run(ctx, o) + if err != nil || n != 1 { + t.Fatalf("final pass = %d %v", n, err) + } + if !strings.HasPrefix(seen, "small\n") || !strings.Contains(seen, "User: step 2") || !strings.Contains(seen, "[tool Bash]") || strings.Contains(seen, "hidden") { + t.Fatalf("request = %q", seen) + } + mem, err := memrecord.Open(root, false) + if err != nil { + t.Fatal(err) + } + defer mem.Close() + es, _ := mem.Active(ctx, "decision") + if len(es) != 1 || es[0].Source != "extractor" || es[0].Agent != "claude-acp" || es[0].Session != "s-x" { + t.Fatalf("entries = %+v", es) + } + // Nothing new since: skipped. + if _, err := Run(ctx, o); !errors.Is(err, ErrSkipped) { + t.Fatalf("repeat = %v", err) + } +} + +func TestLocalSummariserSendsNothing(t *testing.T) { + root := t.TempDir() + _ = os.MkdirAll(root+"/.atlas", 0o755) + _ = os.WriteFile(root+"/.atlas/memory-summarizer.json", []byte(`{"mode":"local"}`), 0o644) + called := false + o := Options{Root: root, Session: "s", Final: true, Gateway: "http://127.0.0.1:1", + Auth: func(context.Context) (string, string, error) { called = true; return "", "", nil }} + if _, err := Run(context.Background(), o); !errors.Is(err, ErrSkipped) || called { + t.Fatalf("local mode: %v called=%v", err, called) + } +} diff --git a/internal/memory/record/handoff.go b/internal/memory/record/handoff.go new file mode 100644 index 0000000..3763194 --- /dev/null +++ b/internal/memory/record/handoff.go @@ -0,0 +1,125 @@ +package record + +import ( + "context" + "encoding/json" + "path/filepath" + "regexp" + "strings" +) + +// ── Handoff notes and capture candidates (the desktop's session lifecycle) ── + +// HandoffNote is what a finished session leaves for the next one: the +// episodes row's note, camelCase like the desktop's. +type HandoffNote struct { + Session string `json:"session"` + Agent string `json:"agent"` + StartedAt *int64 `json:"startedAt"` + EndedAt int64 `json:"endedAt"` + Plan *string `json:"plan"` + OpenItems []string `json:"openItems"` + Decisions []string `json:"decisions"` + Failures []string `json:"failures"` + Facts []string `json:"facts"` + Architecture []string `json:"architecture"` + Files []string `json:"files"` +} + +// handoffCap bounds each list of a note. +const handoffCap = 10 + +// WriteHandoff builds the session's handoff note from the entries it wrote +// and stores it as its episode (replacing an earlier one). A session that +// wrote nothing leaves no note. +func (s *Store) WriteHandoff(ctx context.Context, session, agent, root string, endedAt int64) error { + entries, err := s.EntriesBySessions(ctx, []string{session}, 400) + if err != nil || len(entries) == 0 { + return err + } + n := HandoffNote{Session: session, Agent: agent, EndedAt: endedAt, + OpenItems: []string{}, Decisions: []string{}, Failures: []string{}, Facts: []string{}, Architecture: []string{}, Files: []string{}} + var started int64 + if s.db.QueryRowContext(ctx, `SELECT started_at FROM sessions WHERE session_id = ?`, session).Scan(&started) == nil && started > 0 { + n.StartedAt = &started + } + add := func(list *[]string, v string) { + if v = strings.TrimSpace(v); v != "" && len(*list) < handoffCap { + *list = append(*list, v) + } + } + for _, e := range entries { + if e.State != StateActive { + continue // candidates are not the session's word yet + } + switch e.Kind { + case KindPlan: + if n.Plan == nil { + c := e.Content + n.Plan = &c + } + case "decision": + add(&n.Decisions, e.Content) + case "failure": + add(&n.Failures, e.Content) + case "fact": + add(&n.Facts, e.Content) + case "architecture": + add(&n.Architecture, e.Content) + case KindFileChanged: + p := e.Key + if p != "" && !filepath.IsAbs(p) && root != "" { + p = filepath.Join(root, filepath.FromSlash(p)) + } + add(&n.Files, p) + } + } + b, err := json.Marshal(n) + if err != nil { + return err + } + _, err = s.db.ExecContext(ctx, `INSERT INTO episodes (session, agent, started_at, ended_at, note) VALUES (?, ?, ?, ?, ?) + ON CONFLICT(session) DO UPDATE SET agent = excluded.agent, ended_at = excluded.ended_at, note = excluded.note`, + session, agent, n.StartedAt, endedAt, string(b)) + return err +} + +// markers are the phrases in an agent's own reply that the desktop records +// as candidate memories (memory_delta.rs): never active until confirmed. +var markers = []struct { + kind string + re *regexp.Regexp +}{ + {"decision", regexp.MustCompile(`(?i)\b(decided to\b|decision:|we will use\b|let's use\b|going with\b)`)}, + {"fact", regexp.MustCompile(`(?i)\b(note:|remember:|convention:)`)}, + {"failure", regexp.MustCompile(`(?i)\b(failed:|doesn't work\b|does not work\b|anti-pattern\b|gotcha:)`)}, + {"architecture", regexp.MustCompile(`(?i)\b(architecture:|structured as\b|the system uses\b)`)}, +} + +// candidateMax bounds one captured line. +const candidateMax = 500 + +// CaptureCandidates records each line of an agent's reply that carries a +// marker as a candidate of the marker's kind (source capture, confidence +// 0.3). It returns how many were written. +func (s *Store) CaptureCandidates(ctx context.Context, text, agent, session string, at int64) (int, error) { + n := 0 + for _, line := range strings.Split(text, "\n") { + line = strings.TrimSpace(strings.TrimLeft(strings.TrimSpace(line), "-*>#0123456789. ")) + if len(line) < 12 || len(line) > candidateMax { + continue + } + for _, m := range markers { + if !m.re.MatchString(line) { + continue + } + if _, _, err := s.Remember(ctx, Write{Kind: m.kind, Content: line, Source: "capture", Agent: agent, + Session: session, Confidence: Candidate, At: at}); err != nil { + return n, err + } + n++ + break + } + } + return n, nil +} diff --git a/internal/memory/record/handoff_test.go b/internal/memory/record/handoff_test.go new file mode 100644 index 0000000..d67fc1a --- /dev/null +++ b/internal/memory/record/handoff_test.go @@ -0,0 +1,55 @@ +package record + +import ( + "context" + "encoding/json" + "testing" +) + +func TestCaptureCandidatesAndHandoff(t *testing.T) { + ctx := context.Background() + root := t.TempDir() + st, err := Open(root, true) + if err != nil { + t.Fatal(err) + } + defer st.Close() + _ = st.SessionStart(ctx, "s1", "claude-acp", 1000) + reply := "Done.\n- We decided to keep the parser streaming.\nGotcha: the cache key must include the locale.\nDecision: ship the CLI for Intel Macs too.\nnothing to see here at all\n" + n, err := st.CaptureCandidates(ctx, reply, "claude-acp", "s1", 2000) + if err != nil || n != 3 { + t.Fatalf("candidates = %d %v", n, err) + } + es, _ := st.List(ctx, "", 50) + kinds := map[string]string{} + for _, e := range es { + kinds[e.Kind] = e.State + if e.Source != "capture" || e.Agent != "claude-acp" { + t.Fatalf("entry %+v", e) + } + } + if kinds["decision"] != StateCandidate || kinds["failure"] != StateCandidate { + t.Fatalf("kinds = %v (candidates must never be active)", kinds) + } + if _, err := st.Fold(ctx, Event{Kind: KindFileChanged, Key: "a.go", Text: "Edit", Agent: "claude-acp", Session: "s1", At: 2500}); err != nil { + t.Fatal(err) + } + if err := st.WriteHandoff(ctx, "s1", "claude-acp", "/repo", 3000); err != nil { + t.Fatal(err) + } + raw, err := st.LatestHandoff(ctx, "s2") + if err != nil || raw == nil { + t.Fatalf("handoff = %s %v", raw, err) + } + var note HandoffNote + if err := json.Unmarshal(raw, ¬e); err != nil { + t.Fatal(err) + } + if note.Session != "s1" || note.Agent != "claude-acp" || note.StartedAt == nil || *note.StartedAt != 1000 || note.EndedAt != 3000 || + len(note.Decisions) != 0 || len(note.Failures) != 0 || len(note.Files) != 1 || note.Files[0] != "/repo/a.go" || note.OpenItems == nil { + t.Fatalf("note = %+v", note) + } + if raw, _ := st.LatestHandoff(ctx, "s1"); raw != nil { + t.Fatal("a session never sees its own handoff") + } +} diff --git a/internal/memory/server/server.go b/internal/memory/server/server.go index d592460..996f0fc 100644 --- a/internal/memory/server/server.go +++ b/internal/memory/server/server.go @@ -146,7 +146,22 @@ func (s *Server) SessionEnded(ctx context.Context, g Grant) { return } if st, err := s.store(ctx, g.Cwd); err == nil { - _ = st.SessionEnd(ctx, g.SessionID, g.Agent, s.now()) + now := s.now() + _ = st.SessionEnd(ctx, g.SessionID, g.Agent, now) + // The handoff note the next session's briefing shows, as the + // desktop's lifecycle writes it. + _ = st.WriteHandoff(ctx, g.SessionID, g.Agent, project.ScopeRoot(ctx, g.Cwd), now) + } +} + +// Capture records the marked lines of an agent's reply as candidate +// memories when sharing is on (the desktop's memory_delta). +func (s *Server) Capture(ctx context.Context, g Grant, reply string) { + if g.SessionID == "" || strings.TrimSpace(reply) == "" || !sharingOn(ctx, g.Cwd) { + return + } + if st, err := s.store(ctx, g.Cwd); err == nil { + _, _ = st.CaptureCandidates(ctx, reply, g.Agent, g.SessionID, s.now()) } } From 9a48602adffefc70aaddce5dc43ba333cb6fc3bb Mon Sep 17 00:00:00 2001 From: Ukaykhingmarma28 Date: Mon, 12 Oct 2026 13:04:24 +0600 Subject: [PATCH 6/9] Keep the agents' own names in sessions and memory Reverts the registry-id renaming of 0.3.3: hook sessions, memory entries, handoff notes and the MCP bridge use the integration's own id again. --- cmd/atlas/hooks_cmds.go | 2 +- docs/progress.md | 16 +++++++++++----- internal/hooks/agent.go | 20 -------------------- internal/hooks/dispatch.go | 2 +- internal/hooks/mcpconfig/claude_test.go | 2 +- internal/hooks/mcpconfig/codex_test.go | 2 +- internal/hooks/mcpconfig/copilot_test.go | 2 +- internal/hooks/mcpconfig/mcpconfig.go | 5 ++--- internal/hooks/mcpconfig/pi_test.go | 2 +- 9 files changed, 19 insertions(+), 34 deletions(-) diff --git a/cmd/atlas/hooks_cmds.go b/cmd/atlas/hooks_cmds.go index a37f9f9..4683edc 100644 --- a/cmd/atlas/hooks_cmds.go +++ b/cmd/atlas/hooks_cmds.go @@ -98,7 +98,7 @@ func runAgentHook(a hooks.Agent, verb string) func(*cobra.Command, []string) err _, _ = cmd.OutOrStdout().Write(out) } if err == nil && (ev.Kind == hooks.TurnEnd || ev.Kind == hooks.SessionEnd) { - spawnExtract(p.Root, hooks.RegistryID(a.ID()), ev.SessionID, ev.Kind == hooks.SessionEnd) + spawnExtract(p.Root, a.ID(), ev.SessionID, ev.Kind == hooks.SessionEnd) } return nil } diff --git a/docs/progress.md b/docs/progress.md index 20dcd9e..8a035da 100644 --- a/docs/progress.md +++ b/docs/progress.md @@ -1291,11 +1291,8 @@ Reported: app memory and terminal memory differ. Both use the same file list` matched the app's active entries; the difference was in what each side writes for a session. Fixed: -- **Agent ids.** Hook sessions were recorded as `claude-code`, `codex`, …; - the app records the same agents under their registry ids. Sessions, - memory entries and the MCP bridge now use `claude-acp`, `codex-acp`, - `github-copilot-cli`, `factory-droid`, `pi-acp`, `antigravity-acp` - (`cursor`, `opencode` unchanged). +- **Agent ids.** (Reverted in 0.3.4 at the user's request: agents keep + their own names.) - **Capture candidates.** Lines of the agent's reply carrying the app's markers (`decided to`, `decision:`, `gotcha:`, `doesn't work`, `note:`, `architecture:`, …) become candidates (source `capture`, 0.3). @@ -1315,3 +1312,12 @@ Verified live (`claude -p` in a fresh Project): `file_changed`, two capture candidates, three extractor memories ~40 s later, the handoff with the distilled decision and fact, everything as `claude-acp`; in this repo `atlas memory list --all` = 202 = the app's store. + +## v0.3.4: agents keep their own names + +At the user's request the agent renaming of v0.3.3 is reverted: hook +sessions, memory entries, handoff notes and the MCP bridge use the +integration's own id (`claude-code`, `codex`, `cursor`, `copilot`, +`opencode`, `droid`, `antigravity`, `pi`). Candidates, handoff notes and the +extractor stay. Sessions recorded by 0.3.3 keep the names they were written +with. diff --git a/internal/hooks/agent.go b/internal/hooks/agent.go index 2b6a055..bda7db6 100644 --- a/internal/hooks/agent.go +++ b/internal/hooks/agent.go @@ -137,23 +137,3 @@ const ( type Noter interface { AddNote() string } - -// registryIDs map a hook integration to the id the desktop records the same -// agent under (its ACP registry id), so a session run in the agent's own UI -// and one run in the app are one agent in the store and in memory. -var registryIDs = map[string]string{ - "claude-code": "claude-acp", - "codex": "codex-acp", - "copilot": "github-copilot-cli", - "droid": "factory-droid", - "pi": "pi-acp", - "antigravity": "antigravity-acp", -} - -// RegistryID is the desktop's id for a hook integration's agent. -func RegistryID(id string) string { - if r, ok := registryIDs[id]; ok { - return r - } - return id -} diff --git a/internal/hooks/dispatch.go b/internal/hooks/dispatch.go index 60c54bf..0eadcb7 100644 --- a/internal/hooks/dispatch.go +++ b/internal/hooks/dispatch.go @@ -85,7 +85,7 @@ func (d *Dispatcher) Run(ctx context.Context, a Agent, ev *Event) ([]byte, error if ev.Model != "" { st.Model = ev.Model } - sess := record.Session{Agent: RegistryID(a.ID()), NativeID: ev.SessionID, Cwd: d.Root, Model: st.Model} + sess := record.Session{Agent: a.ID(), NativeID: ev.SessionID, Cwd: d.Root, Model: st.Model} if !st.Started && ev.Kind != SessionEnd { // The first hook of a session, whichever it is, announces it. st.Started = true diff --git a/internal/hooks/mcpconfig/claude_test.go b/internal/hooks/mcpconfig/claude_test.go index 89f8291..8998566 100644 --- a/internal/hooks/mcpconfig/claude_test.go +++ b/internal/hooks/mcpconfig/claude_test.go @@ -35,7 +35,7 @@ func TestClaudeWriterAddsAndRemoves(t *testing.T) { t.Fatal(err) } e := obj.Servers[ServerName] - if e.Type != "stdio" || e.Command != "atlas" || strings.Join(e.Args, " ") != "mcp-bridge --project "+root+" --agent claude-acp" || obj.Servers["other"].Command != "x" { + if e.Type != "stdio" || e.Command != "atlas" || strings.Join(e.Args, " ") != "mcp-bridge --project "+root+" --agent claude-code" || obj.Servers["other"].Command != "x" { t.Fatalf("%+v", obj) } local, _ := os.ReadFile(filepath.Join(root, ".claude", "settings.local.json")) diff --git a/internal/hooks/mcpconfig/codex_test.go b/internal/hooks/mcpconfig/codex_test.go index 80f00d0..eaee5fe 100644 --- a/internal/hooks/mcpconfig/codex_test.go +++ b/internal/hooks/mcpconfig/codex_test.go @@ -59,7 +59,7 @@ func TestCodexAddIdempotentRemove(t *testing.T) { t.Fatalf("mode %v", fi.Mode()) } cmd, args := parsedServer(t, path) - if cmd != "atlas" || strings.Join(args, " ") != "mcp-bridge --project "+root+" --agent codex-acp" { + if cmd != "atlas" || strings.Join(args, " ") != "mcp-bridge --project "+root+" --agent codex" { t.Fatalf("%s %v", cmd, args) } b, _ := os.ReadFile(path) diff --git a/internal/hooks/mcpconfig/copilot_test.go b/internal/hooks/mcpconfig/copilot_test.go index b99eca1..72cc77f 100644 --- a/internal/hooks/mcpconfig/copilot_test.go +++ b/internal/hooks/mcpconfig/copilot_test.go @@ -53,7 +53,7 @@ func TestCopilotWriterWritesALocalServerAndKeepsTheRest(t *testing.T) { if !ok || e.Type != "local" || e.Command != "atlas" || len(e.Tools) != 1 || e.Tools[0] != "*" { t.Fatalf("%s", b) } - if want := []string{"mcp-bridge", "--project", root, "--agent", "github-copilot-cli"}; len(e.Args) != len(want) || e.Args[2] != root || e.Args[4] != "github-copilot-cli" { + if want := []string{"mcp-bridge", "--project", root, "--agent", "copilot"}; len(e.Args) != len(want) || e.Args[2] != root || e.Args[4] != "copilot" { t.Fatalf("args %v", e.Args) } if _, ok := file.Servers["github"]; !ok || file.Other != 1 { diff --git a/internal/hooks/mcpconfig/mcpconfig.go b/internal/hooks/mcpconfig/mcpconfig.go index 1b05913..8591e41 100644 --- a/internal/hooks/mcpconfig/mcpconfig.go +++ b/internal/hooks/mcpconfig/mcpconfig.go @@ -15,10 +15,9 @@ import ( // ServerName is the entry's key: the desktop's server name. const ServerName = "atlas_memory" -// Args are the bridge arguments for a Project and agent; the agent is named -// by the desktop's registry id, as its memory entries are. +// Args are the bridge arguments for a Project and agent. func Args(root, agentID string) []string { - return []string{"mcp-bridge", "--project", root, "--agent", hooks.RegistryID(agentID)} + return []string{"mcp-bridge", "--project", root, "--agent", agentID} } // Writer edits one agent's MCP config. diff --git a/internal/hooks/mcpconfig/pi_test.go b/internal/hooks/mcpconfig/pi_test.go index 6b00da0..237563b 100644 --- a/internal/hooks/mcpconfig/pi_test.go +++ b/internal/hooks/mcpconfig/pi_test.go @@ -33,7 +33,7 @@ func TestPiWriter(t *testing.T) { } b, _ := os.ReadFile(w.Path(root)) s := string(b) - for _, want := range []string{`"atlas_memory"`, `"command": "atlas"`, `"mcp-bridge"`, `"--agent"`, `"pi-acp"`, `"mine"`} { + for _, want := range []string{`"atlas_memory"`, `"command": "atlas"`, `"mcp-bridge"`, `"--agent"`, `"pi"`, `"mine"`} { if !strings.Contains(s, want) { t.Errorf("file lacks %s:\n%s", want, s) } From dcdb6a2e4bfe9dd0f32a99f37e6151c7846d0dcd Mon Sep 17 00:00:00 2001 From: Ukaykhingmarma28 Date: Mon, 12 Oct 2026 16:54:14 +0600 Subject: [PATCH 7/9] Guided init, settings, sync and update; the Atlas look; memory search like the app - atlas init is a guided flow (organisation, Project, agents with an "All agents" row, background sync, memory search); flags answer it in scripts. atlas settings changes everything on one screen; atlas sync on|off keeps a listener the hooks restart; atlas update replaces the binary from a checksum-verified release. - Every command draws in the Atlas palette (monochrome, colour for status), with the dot logo of Array Bold's "///", tree lists, a progress bar, a live atlas serve feed and styled help; pipes keep plain text. - Memory search matches the app: MiniLM in pure Go (vectors identical to the app's), vectors in memory.sqlite, near-duplicate merge, hybrid search, and corpus.sqlite with the project's documents in memory_search; atlas memory index and Settings > Model download the model and build the index. - Agents' plan tools (TodoWrite, update_plan, todowrite, Claude's tasks and plan mode) become the shared plan. - Fixes: a commit of a file the agent had read gets its checkpoint; a listener stops when .atlas/ is replaced instead of writing into deleted files; init creates the memory record; extract state, the daily snapshot and damaged-record restore follow the app. - README redesigned with a banner. --- .gitignore | 1 + README.md | 253 ++++++++---- cmd/atlas/agents_cmds.go | 128 +++++- cmd/atlas/auth_cmds.go | 141 +++++-- cmd/atlas/capture_cmds.go | 23 +- cmd/atlas/commands.go | 46 ++- cmd/atlas/help_view.go | 67 ++++ cmd/atlas/hooks_cmds.go | 11 + cmd/atlas/index_cmds.go | 142 +++++++ cmd/atlas/init_wizard.go | 219 ++++++++++ cmd/atlas/main.go | 10 +- cmd/atlas/main_test.go | 6 + cmd/atlas/memory_cmds.go | 67 +++- cmd/atlas/project_cmds.go | 173 ++++++-- cmd/atlas/serve_cmds.go | 280 +++++++++---- cmd/atlas/settings_cmds.go | 399 ++++++++++++++++++ cmd/atlas/settings_cmds_test.go | 128 ++++++ cmd/atlas/status_view.go | 104 +++++ cmd/atlas/status_view_test.go | 28 ++ cmd/atlas/sync_cmds.go | 143 +++++++ cmd/atlas/update_cmds.go | 123 ++++++ cmd/atlas/update_cmds_test.go | 83 ++++ docs/assets/banner.png | Bin 0 -> 2011856 bytes docs/progress.md | 240 +++++++++++ go.mod | 7 +- go.sum | 2 + internal/clistate/prefs.go | 41 ++ internal/embed/app_compat_test.go | 74 ++++ internal/embed/download.go | 89 +++++ internal/embed/embed.go | 263 ++++++++++++ internal/embed/model.go | 310 ++++++++++++++ internal/embed/tokenizer.go | 252 ++++++++++++ internal/hooks/deliver.go | 11 +- internal/hooks/dispatch.go | 35 +- internal/hooks/hooks_test.go | 41 ++ internal/hooks/plans.go | 271 +++++++++++++ internal/hooks/plans_test.go | 99 +++++ internal/hooks/state.go | 6 + internal/hooks/state_main_test.go | 1 + internal/memory/corpus/corpus.go | 431 ++++++++++++++++++++ internal/memory/corpus/corpus_test.go | 174 ++++++++ internal/memory/corpus/sources.go | 303 ++++++++++++++ internal/memory/extract/extract.go | 76 +++- internal/memory/extract/extract_test.go | 23 ++ internal/memory/record/read.go | 89 +++-- internal/memory/record/snapshot.go | 61 +++ internal/memory/record/snapshot_test.go | 62 +++ internal/memory/record/stale_test.go | 33 ++ internal/memory/record/state_main_test.go | 1 + internal/memory/record/store.go | 79 ++++ internal/memory/record/vectors.go | 312 +++++++++++++++ internal/memory/record/vectors_test.go | 162 ++++++++ internal/memory/record/write.go | 64 ++- internal/memory/server/server.go | 7 +- internal/memory/server/state_main_test.go | 1 + internal/memory/server/tools.go | 79 +++- internal/run/host.go | 20 + internal/run/stale_test.go | 35 ++ internal/tui/card.go | 150 +++++++ internal/tui/frame.go | 166 ++++++++ internal/tui/live.go | 110 +++++ internal/tui/login.go | 116 ++++++ internal/tui/logo.go | 80 ++++ internal/tui/logo_test.go | 70 ++++ internal/tui/memview/memview.go | 75 ++-- internal/tui/memview/memview_test.go | 4 +- internal/tui/settings/settings.go | 466 ++++++++++++++++++++++ internal/tui/settings/settings_test.go | 142 +++++++ internal/tui/settings/state_main_test.go | 15 + internal/tui/splash.go | 87 ++++ internal/tui/theme.go | 235 ++++++++--- internal/tui/wizard.go | 358 +++++++++++++++++ internal/tui/wizard_test.go | 103 +++++ internal/tui/work.go | 182 +++++++++ internal/update/update.go | 216 ++++++++++ internal/update/update_test.go | 101 +++++ 76 files changed, 8629 insertions(+), 376 deletions(-) create mode 100644 cmd/atlas/help_view.go create mode 100644 cmd/atlas/index_cmds.go create mode 100644 cmd/atlas/init_wizard.go create mode 100644 cmd/atlas/settings_cmds.go create mode 100644 cmd/atlas/settings_cmds_test.go create mode 100644 cmd/atlas/status_view.go create mode 100644 cmd/atlas/status_view_test.go create mode 100644 cmd/atlas/sync_cmds.go create mode 100644 cmd/atlas/update_cmds.go create mode 100644 cmd/atlas/update_cmds_test.go create mode 100644 docs/assets/banner.png create mode 100644 internal/clistate/prefs.go create mode 100644 internal/embed/app_compat_test.go create mode 100644 internal/embed/download.go create mode 100644 internal/embed/embed.go create mode 100644 internal/embed/model.go create mode 100644 internal/embed/tokenizer.go create mode 100644 internal/hooks/plans.go create mode 100644 internal/hooks/plans_test.go create mode 100644 internal/memory/corpus/corpus.go create mode 100644 internal/memory/corpus/corpus_test.go create mode 100644 internal/memory/corpus/sources.go create mode 100644 internal/memory/record/snapshot.go create mode 100644 internal/memory/record/snapshot_test.go create mode 100644 internal/memory/record/stale_test.go create mode 100644 internal/memory/record/vectors.go create mode 100644 internal/memory/record/vectors_test.go create mode 100644 internal/run/stale_test.go create mode 100644 internal/tui/card.go create mode 100644 internal/tui/frame.go create mode 100644 internal/tui/live.go create mode 100644 internal/tui/login.go create mode 100644 internal/tui/logo.go create mode 100644 internal/tui/logo_test.go create mode 100644 internal/tui/settings/settings.go create mode 100644 internal/tui/settings/settings_test.go create mode 100644 internal/tui/settings/state_main_test.go create mode 100644 internal/tui/splash.go create mode 100644 internal/tui/wizard.go create mode 100644 internal/tui/wizard_test.go create mode 100644 internal/tui/work.go create mode 100644 internal/update/update.go create mode 100644 internal/update/update_test.go diff --git a/.gitignore b/.gitignore index 45138eb..a5642e5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ bin/ graphify-out/ dist/ +Tui-design-ins/ \ No newline at end of file diff --git a/README.md b/README.md index 0578ab1..d596592 100644 --- a/README.md +++ b/README.md @@ -1,96 +1,211 @@ -# atlas-cli - -A headless Atlas for servers: a Go binary that signs in like the Atlas desktop -app, binds a folder to an organisation and a cloud Project, and gives every -coding agent run in that folder **session capture** and **shared memory**, -byte-compatible with the desktop's on-disk formats. The agents keep their own -UIs: Atlas plugs into their hooks (ADR-0013). +

+ atlas: shared memory and session capture for coding agents +

+ +

atlas

+ +

+ Shared memory and session capture for coding agents, from the terminal.
+ Claude Code, Codex, Cursor, Copilot, OpenCode, Droid, Antigravity and Pi keep their own UIs;
+ Atlas records every session and gives every agent the same memory of the project. +

+ +

+ Latest release + Pure Go + macOS and Linux + Apache-2.0 +

+ +

+ Install · + Quick start · + Shared memory · + Session capture · + Agents · + Commands +

+ +--- + +`atlas` is the headless Atlas: one Go binary that signs in like the Atlas +desktop app, binds a folder to an organisation and a cloud Project, and plugs +into the hooks of the agents you already use. It writes the same files the app +writes, byte for byte, so a folder works the same whether it is open in the app, +in a terminal on a server, or both. ## Install -Linux (amd64, arm64) and macOS (Apple silicon, Intel): +macOS (Apple silicon, Intel) and Linux (amd64, arm64): ```sh curl -fsSL https://github.com/tryatlas/atlas-cli/releases/latest/download/install.sh | sh ``` -It verifies the archive's sha256 and installs `atlas` to `~/.local/bin` -(`ATLAS_INSTALL_DIR` to change it, `ATLAS_VERSION=v1.2.3` to pin). From -source: `make build` (pure Go, no cgo). +The installer verifies the archive's sha256 and puts `atlas` in `~/.local/bin` +(`ATLAS_INSTALL_DIR` changes it, `ATLAS_VERSION=v0.4.0` pins it). Later, +`atlas update` does the same in place. From source: `make build` (pure Go, no +cgo). -## Use +## Quick start -``` -atlas login # device grant against the Atlas auth server +```sh +atlas login # sign in (the same account as the desktop app) cd ~/work/backend -atlas init # org + cloud Project, writes .atlas/ (--local: no cloud) -atlas agents add claude-code # the agents you use here (atlas agents list shows all eight) -atlas agents add codex cursor -claude # …or codex, cursor-agent, opencode: work as usual -atlas status # sessions captured, commits linked, sync +atlas init # organisation → Project → agents → background sync +claude # …or codex, cursor-agent, opencode, copilot: work as usual +atlas status # what was captured, what synced, what agents remember ``` -`atlas agents add` writes two things into the agent's own config in the -Project: its **hook**, which runs `atlas hooks ` at session -start, each prompt, each turn end and session end; and the **`atlas_memory` -MCP server**, so the agent can read and write shared memory. It also installs a -git `post-commit` hook that links sessions to the commits that carry their -work. Nothing is wrapped and no environment variable changes; remove it all with -`atlas agents remove `. - -Agents run their project hooks only for a project you trust: Codex, Copilot -and Pi each ask once in their own UI. Keep `atlas` current on PATH, including -`~/.local/bin`, which some agents put first. - -Capture is per event. The prompt opens the turn the moment you submit it; -each tool call lands as the agent's post-tool hook fires, with the file it -wrote; at turn end the hook reads the agent's transcript from where the turn -started, diffs `git status`, and closes the turn with the reply, token usage -and the model. Every event goes to the cloud Project right away: the hook -writes the store itself and syncs, or hands the event to a running -`atlas serve` (which syncs it at once), or spools it when the desktop app has -the folder open. Someone watching the Project sees the prompt, then the tool -cards one by one, then the reply. Text is not streamed token by token: no -agent exposes a hook for that. A hook never fails the agent: errors go to -`hooks.log` in the CLI state directory (`~/.local/state/atlas-cli/projects//`) and `atlas status`. `.atlas/` itself holds only what the desktop app writes. +`atlas init` is a guided flow on a terminal: + +| step | asks | +|---|---| +| 1 · Organisation | which organisation the folder belongs to (skipped when you have one) | +| 2 · Project | the cloud Project: the one matching this repository first, the others, or a new one | +| 3 · Agents | which agents found on this machine to hook, with an **All agents** row | +| 4 · Background sync | keep a listener running so every event reaches the cloud at once | +| 5 · Memory search | download the local search model (87 MB, once) when it is missing | + +`--local` binds without a cloud. In scripts, flags answer instead: `--org`, +`--project | --create`, `--agents claude-code,codex | --all-agents`, +`--sync on|off`. + +`atlas settings` changes any of it later on one screen: account, capture and +memory, each agent, background sync, the local model, updates. + +## Shared memory + +Every agent in the project reads and writes one memory, through the +`atlas_memory` MCP server that `atlas agents add` registers in the agent's own +config. Nothing is ever injected into a prompt: agents pull what they need. + +| tool | what an agent gets | +|---|---| +| `memory_briefing` | at session start: the active **plan**, recent file changes, decisions, facts, failures, architecture, conventions, and the previous session's handoff | +| `memory_search` | memories ranked by **meaning and words**, plus the project's **documents** (CLAUDE.md, AGENTS.md, notes, captured sessions) | +| `memory_remember` | save a decision, fact, failure, architecture note or preference; near-duplicates merge | +| `memory_changes` | what other sessions recorded since this one last looked | +| `memory_get` · `memory_history` · `memory_why` | one memory, its earlier wordings, and the sessions behind a file or commit | +| `memory_forget` · `memory_feedback` · `memory_list` | remove, rate and list | + +- **Search by meaning.** A small local model (MiniLM, the one the app uses) runs + in pure Go on your machine; nothing is sent anywhere. Ask "how do we rotate + tokens" and find "signing keys rotate every week". Without the model, search + falls back to words. +- **Plans are captured, not typed.** When an agent writes its to-do list + (`TodoWrite`, `update_plan`, `todowrite`, Claude's tasks and plan mode, …), + it becomes the project's plan, and the next session, or another agent, sees + it in its briefing. +- **Memories write themselves.** Decisions an agent states in its reply, and + what the extractor distils from long sessions, land as memories; at session + end a handoff note tells the next session where things stand. +- **One record with the app.** `.atlas/memory/` holds the app's exact files: + `memory.sqlite` (with its vectors), `corpus.sqlite`, `memory.snapshot.sqlite` + (a daily backup, restored automatically if the record is damaged) and + `extract-state/`. + +```sh +atlas memory browse # entries by kind, search, history +atlas memory index # embed every memory, index the project's documents +``` + +## Session capture + +Capture happens per event, as the agent works: + +1. **The prompt** opens the turn the moment you submit it. +2. **Each tool call** lands as the agent's post-tool hook fires, with the files it + wrote, including files a shell command changed. +3. **The reply** closes the turn at the agent's stop hook, with token usage and + the model, read from the transcript the agent names. +4. **Commits** an agent makes get their checkpoint: a git `post-commit` hook + links each commit to the session and turn that wrote it. + +Every event reaches the cloud Project within seconds: the hook writes the store +and syncs, or hands the event to `atlas serve`, or spools it while the desktop +app has the folder open. A hook never fails the agent; problems go to +`atlas status`. + +```sh +atlas sync on # a background listener your agents' hooks keep alive +atlas serve # the same in the foreground, with a live feed of hook events +``` + +## Agents + +`atlas agents add ` writes the hook and the memory server into the +agent's own config in the project; `atlas agents remove` takes them out. +Nothing is wrapped and no environment variable changes. | agent | hook written to | memory server written to | |---|---|---| -| `claude-code` Claude Code | `.claude/settings.local.json` | `.mcp.json` (+ approved in the local settings) | -| `codex` Codex | `.codex/hooks.json`: the first interactive `codex` here asks "Hooks need review"; choose **Trust all and continue** (`codex exec` cannot ask) | `.codex/config.toml` (trusted projects) | -| `cursor` Cursor CLI and IDE | `.cursor/hooks.json` (`cursor-agent -p` fires no turn hooks; such a session is captured at its end) | `.cursor/mcp.json` (Cursor asks to approve it once) | -| `copilot` GitHub Copilot CLI | `.github/hooks/atlas.json`: loaded once the folder is trusted (the first interactive `copilot` asks; `copilot -p` does not) | `.github/mcp.json` (same trust) | +| `claude-code` Claude Code | `.claude/settings.local.json` | `.mcp.json`, approved in the local settings | +| `codex` Codex | `.codex/hooks.json`: choose **Trust all and continue** once | `.codex/config.toml` | +| `cursor` Cursor CLI and IDE | `.cursor/hooks.json` | `.cursor/mcp.json`, approved once in Cursor | +| `copilot` GitHub Copilot CLI | `.github/hooks/atlas.json`, once the folder is trusted | `.github/mcp.json` | | `opencode` OpenCode | `.opencode/plugins/atlas.ts` | `opencode.json` | | `droid` Factory Droid | `.factory/settings.json` | `.factory/mcp.json` | -| `antigravity` Antigravity (`agy`) | `.agents/hooks.json` (run `agy` with an absolute `--add-dir`) | `.agents/mcp_config.json` | -| `pi` Pi | `.pi/extensions/atlas/index.ts`: loaded once the project is trusted in Pi (`pi --approve` for one run) | `.pi/mcp.json` (same trust) | +| `antigravity` Antigravity (`agy`) | `.agents/hooks.json` | `.agents/mcp_config.json` | +| `pi` Pi | `.pi/extensions/atlas/index.ts`, once the project is trusted | `.pi/mcp.json` | + +Keep `atlas` current on `PATH`, including `~/.local/bin`, which some agents put +first. + +## Commands + +Every command draws its own screen on a terminal (the Atlas palette: monochrome, +colour only for status) and prints plain text to pipes and scripts. | command | what | |---|---| -| `atlas agents add \| remove \| list \| sessions` | install or remove the hook and memory entry per agent; list agents and the sessions seen | -| `atlas serve [--daemon \| --stop]` | the Project's listener: memory server, sync drain, receiver of hook turns while it holds the store | -| `atlas status` | sign-in, Project, gates, capture health, commits linked, sync, memory, agents and hook errors | -| `atlas memory browse \| list \| verify \| export \| import` | shared memory (this machine only) | -| `atlas capture sync \| retry \| link` | cloud sync now, retry failed rows, link sessions to commits by hand | -| `atlas mcp-bridge --project --agent ` | the stdio MCP entry the agents' configs hold (serves memory with or without `atlas serve`) | +| `atlas` | the overview: logo, commands by group | +| `atlas login` · `logout` · `whoami` | sign in with the device grant; the session file is the only secret kept (mode 0600) | +| `atlas org list \| use \| create` | organisations | +| `atlas init` | bind the folder, hook the agents, choose background sync and memory search | +| `atlas settings` | everything on one screen | +| `atlas status` | sign-in, Project, capture health, commits linked, sync, memory, agents | +| `atlas agents add \| remove \| list \| sessions` | the hooks and memory entry per agent; the sessions seen | +| `atlas sync [on \| off]` | background sync | +| `atlas serve` | the Project's listener: memory server, sync drain, receiver of hook events | +| `atlas memory browse \| list \| index \| verify \| export \| import` | shared memory | +| `atlas memory enable \| disable` | the shared-memory gate for this repository | +| `atlas capture enable \| disable \| sync \| retry \| link` | the capture gate; sync now, retry failed rows, link commits | +| `atlas update [--check] [--version vX.Y.Z]` | replace this binary with a release, checksum verified | + +## What lives where + +| path | what | +|---|---| +| `.atlas/` | the app's per-project files only: `sessions.db`, `blobs/`, `memory/`, `project.json` | +| `~/.local/state/atlas-cli/projects//` | the CLI's own: hook state, `hooks.log`, the listener's run file, preferences | +| `~/Library/Application Support/dev.atlas.ide/models/` | the local search model, shared with the app (`~/.local/share/…` on Linux) | -The ACP path of v0.1 (`atlas run ` with Atlas's own chat screen, the -registry installs) is parked under the hidden `atlas acp` group (ADR-0013 §8). +## Development -## Where things are +```sh +make build # ./bin/atlas +make test # go test ./... +make lint # golangci-lint +``` -| path | what | +| doc | what | |---|---| -| `docs/atlas-reference/README.md` | index of the hand-off folder copied from the desktop repo: read first | -| `docs/atlas-reference/SPEC.md` | the specification; §1.2 holds the locked decisions D1–D20 | -| `docs/atlas-reference/evidence-*.md` | desktop-side facts with `file:line` citations into the desktop repo | -| `docs/research/entire-cli.md` | how the Entire CLI captures agents through hooks; the per-agent facts this CLI's integrations follow | -| `docs/adr/` | this repo's own ADRs; `0013` is the hook-based capture of native agent UIs and supersedes `0009`/`0012` as the product | -| `docs/RELEASE.md` | how to release, and the acceptance checklists | | `docs/progress.md` | what was built, what was verified live, what was not | +| `docs/adr/` | decisions; `0013` is capture through agents' hooks | +| `docs/research/entire-cli.md` | the per-agent hook facts the integrations follow | +| `docs/atlas-reference/` | the desktop app's specification and file formats | +| `docs/RELEASE.md` | how to release, and the acceptance checklists | + +Ground rules: a hook reads only the transcript file the agent's own payload +names, from the turn's offset, while the hook runs, and never scans an agent's +folders; memory is never injected into prompts; an `Authorization` header is +never logged; every stored text passes the redactor; no secret persists except +the session token file. + +The ACP path of v0.1 (`atlas run `) is parked under the hidden +`atlas acp` group. + +## License -Ground rules that are not negotiable: a hook reads only the transcript file -the agent's own payload names, from the turn's offset, while the hook runs -(never a scan of an agent's directories); never inject memory into prompts; -never log an `Authorization` header; every stored text passes the redactor -first; and no secret persists except the session token file (mode 0600). +[Apache-2.0](LICENSE) diff --git a/cmd/atlas/agents_cmds.go b/cmd/atlas/agents_cmds.go index 31c69a0..fa90d05 100644 --- a/cmd/atlas/agents_cmds.go +++ b/cmd/atlas/agents_cmds.go @@ -16,6 +16,7 @@ import ( "github.com/tryatlas/atlas-cli/internal/hooks" "github.com/tryatlas/atlas-cli/internal/hooks/mcpconfig" "github.com/tryatlas/atlas-cli/internal/project" + "github.com/tryatlas/atlas-cli/internal/tui" ) // atlas agents: the agents that run in their own UIs and report to Atlas @@ -85,13 +86,34 @@ func runAgentsAdd(cmd *cobra.Command, args []string) error { if err != nil { return err } - if changed, err := hooks.InstallGitHooks(ctx, p.Root); err != nil { + w := out + if interactive() { + tui.Header(out, "agents", "add") + fmt.Fprintln(out) + w = agentLines(out) + } + if err := installAgents(ctx, w, p.Root, agents, force, noMem); err != nil { + return err + } + if interactive() { + fmt.Fprintln(out) + tui.Note(out, "Use the agents as usual in "+p.Root+"; sessions are captured as they run. atlas status shows them.") + } else { + fmt.Fprintf(out, "Use the agents as usual in %s; sessions are captured as they run. atlas status shows them.\n", p.Root) + } + return nil +} + +// installAgents writes the git hook, then each agent's hook and memory entry, +// one line per agent. +func installAgents(ctx context.Context, out io.Writer, root string, agents []hooks.Agent, force, noMem bool) error { + if changed, err := hooks.InstallGitHooks(ctx, root); err != nil { return fmt.Errorf("git hooks: %w", err) } else if changed { fmt.Fprintln(out, "Installed the git post-commit hook (links sessions to commits).") } for _, a := range agents { - changed, err := a.Install(p.Root, force) + changed, err := a.Install(root, force) if err != nil { return fmt.Errorf("%s: %w", a.ID(), err) } @@ -101,12 +123,12 @@ func runAgentsAdd(cmd *cobra.Command, args []string) error { } line := fmt.Sprintf("%s: hook %s", a.Name(), what) if w, ok := mcpconfig.For(a.ID()); ok && !noMem { - mchanged, err := w.Write(p.Root) + mchanged, err := w.Write(root) if err != nil { return fmt.Errorf("%s memory config: %w", a.ID(), err) } if mchanged { - line += ", memory server added to " + strings.TrimPrefix(w.Path(p.Root), p.Root+"/") + line += ", memory server added to " + strings.TrimPrefix(w.Path(root), root+"/") } else { line += ", memory server present" } @@ -121,7 +143,6 @@ func runAgentsAdd(cmd *cobra.Command, args []string) error { fmt.Fprintf(out, " note: %s\n", n.AddNote()) } } - fmt.Fprintf(out, "Use the agents as usual in %s; sessions are captured as they run. atlas status shows them.\n", p.Root) return nil } @@ -137,12 +158,38 @@ func runAgentsRemove(cmd *cobra.Command, args []string) error { if err != nil { return err } + if interactive() { + tui.Header(out, "agents", "remove") + fmt.Fprintln(out) + out = agentLines(out) + } + return removeAgents(ctx, out, p.Root, agents) +} + +// agentLines styles installAgents' and removeAgents' lines on a terminal: +// "Claude Code: hook installed, …" becomes "✓ Claude Code hook installed, …", +// notes go faint under it. +func agentLines(w io.Writer) io.Writer { + return tui.Lines(w, func(l string) string { + if n, ok := strings.CutPrefix(l, " note: "); ok { + return " " + tui.Default.Faint.Render("↳ "+n) + } + if name, rest, ok := strings.Cut(l, ": "); ok && !strings.Contains(name, " the ") { + return tui.Default.Success.Render("✓") + " " + tui.Default.Bold.Render(fmt.Sprintf("%-20s", name)) + " " + tui.Default.Faint.Render(rest) + } + return tui.Default.Success.Render("✓") + " " + l + }) +} + +// removeAgents takes the Atlas entries out of each agent's config, and the +// git hook once no agent is left. +func removeAgents(ctx context.Context, out io.Writer, root string, agents []hooks.Agent) error { for _, a := range agents { - if err := a.Uninstall(p.Root); err != nil { + if err := a.Uninstall(root); err != nil { return fmt.Errorf("%s: %w", a.ID(), err) } if w, ok := mcpconfig.For(a.ID()); ok { - if err := w.Remove(p.Root); err != nil { + if err := w.Remove(root); err != nil { return fmt.Errorf("%s memory config: %w", a.ID(), err) } } @@ -150,12 +197,12 @@ func runAgentsRemove(cmd *cobra.Command, args []string) error { } left := false for _, a := range hooks.All() { - if a.State(p.Root) != hooks.Absent { + if a.State(root) != hooks.Absent { left = true } } if !left { - if err := hooks.UninstallGitHooks(ctx, p.Root); err != nil { + if err := hooks.UninstallGitHooks(ctx, root); err != nil { return err } fmt.Fprintln(out, "No agent left: the git post-commit hook was removed too.") @@ -169,6 +216,9 @@ func runAgentsList(cmd *cobra.Command, _ []string) error { if p, err := agentRoot(ctx); err == nil { root = p.Root } + if interactive() { + return agentsTable(cmd.OutOrStdout(), root) + } w := tabwriter.NewWriter(cmd.OutOrStdout(), 0, 4, 2, ' ', 0) fmt.Fprintln(w, "AGENT\tNAME\tBINARY\tHOOK\tMEMORY") for _, a := range hooks.All() { @@ -196,6 +246,44 @@ func runAgentsList(cmd *cobra.Command, _ []string) error { return nil } +// agentsTable is atlas agents list on a terminal. +func agentsTable(out io.Writer, root string) error { + tui.Header(out, "agents") + fmt.Fprintln(out) + state := func(st hooks.InstallState) string { + switch st { + case hooks.Current: + return tui.Dot(tui.Good, "installed") + case hooks.Outdated: + return tui.Dot(tui.Warn, "outdated") + } + return tui.Dot(tui.Idle, "off") + } + var rows [][]string + for _, a := range hooks.All() { + bin := tui.Default.Faint.Render("not on PATH") + if _, err := exec.LookPath(a.Binary()); err == nil { + bin = a.Binary() + } + hook, mem := tui.Default.Faint.Render("-"), tui.Default.Faint.Render("-") + if root != "" { + hook = state(a.State(root)) + if mw, ok := mcpconfig.For(a.ID()); ok { + mem = state(mw.State(root)) + } + } + rows = append(rows, []string{a.Name(), tui.Default.Faint.Render(a.ID()), bin, hook, mem}) + } + fmt.Fprint(out, tui.Table([]string{"agent", "id", "binary", "hook", "memory"}, rows)) + fmt.Fprintln(out) + if root == "" { + tui.Note(out, "Not in an Atlas Project: run atlas init, then atlas agents add .") + } else { + tui.Note(out, "atlas agents add · atlas agents add --all · atlas settings") + } + return nil +} + func runAgentsSessions(cmd *cobra.Command, _ []string) error { p, err := agentRoot(cmd.Context()) if err != nil { @@ -209,6 +297,28 @@ func runAgentsSessions(cmd *cobra.Command, _ []string) error { fmt.Fprintln(cmd.OutOrStdout(), "No session seen by the hooks yet.") return nil } + if interactive() { + out := cmd.OutOrStdout() + tui.Header(out, "agents", "sessions") + fmt.Fprintln(out) + var rows [][]string + for _, s := range states { + st := tui.Dot(tui.Good, "idle") + switch { + case s.Ended: + st = tui.Dot(tui.Idle, "ended") + case s.InTurn: + st = tui.Dot(tui.Warn, "in a turn") + } + resume := "" + if a, ok := hooks.Get(s.Agent); ok { + resume = a.ResumeCommand(s.SessionID) + } + rows = append(rows, []string{s.Agent, tui.Fit(s.SessionID, 28), fmt.Sprint(s.Turn), st, ago(s.UpdatedAt), tui.Default.Faint.Render(resume)}) + } + fmt.Fprint(out, tui.Table([]string{"agent", "session", "turns", "state", "last", "resume"}, rows)) + return nil + } w := tabwriter.NewWriter(cmd.OutOrStdout(), 0, 4, 2, ' ', 0) fmt.Fprintln(w, "AGENT\tSESSION\tTURNS\tSTATE\tLAST\tRESUME") for _, s := range states { diff --git a/cmd/atlas/auth_cmds.go b/cmd/atlas/auth_cmds.go index 720ece4..d50fc8f 100644 --- a/cmd/atlas/auth_cmds.go +++ b/cmd/atlas/auth_cmds.go @@ -14,6 +14,7 @@ import ( "github.com/spf13/cobra" "github.com/tryatlas/atlas-cli/internal/auth" + "github.com/tryatlas/atlas-cli/internal/tui" ) // newAuth is replaced in tests. @@ -26,6 +27,29 @@ func runLogin(cmd *cobra.Command, _ []string) error { } noBrowser, _ := cmd.Flags().GetBool("no-browser") out := cmd.OutOrStdout() + if interactive() { + var s *auth.Session + err := tui.DeviceLogin(func(prompt func(tui.DevicePrompt)) (string, error) { + var err error + s, err = a.Login(cmd.Context(), func(p auth.Prompt) { + opened := !noBrowser && canOpenBrowser() && openBrowser(p.VerificationURI) == nil + prompt(tui.DevicePrompt{URL: p.VerificationURI, Code: p.UserCode, Expires: p.ExpiresAt, Opened: opened}) + }) + if err != nil { + return "", err + } + if s.Identity != nil { + return fmt.Sprintf("%s <%s>", s.Identity.Name, s.Identity.Email), nil + } + return "you", nil + }) + if err != nil { + return err + } + fmt.Fprintln(out) + printIdentity(out, s, a.Store.Path()) + return nil + } s, err := a.Login(cmd.Context(), func(p auth.Prompt) { fmt.Fprintf(out, "To sign in, open %s and enter the code:\n\n %s\n\n", p.VerificationURI, p.UserCode) if !noBrowser && canOpenBrowser() { @@ -48,20 +72,18 @@ func runLogout(cmd *cobra.Command, _ []string) error { if err != nil { return err } - confirmed, err := a.Logout(cmd.Context()) - if errors.Is(err, auth.ErrSignedOut) { - fmt.Fprintln(cmd.OutOrStdout(), "Not signed in.") - return nil - } - if err != nil { - return err - } - if confirmed { - fmt.Fprintln(cmd.OutOrStdout(), "Signed out.") - } else { - fmt.Fprintln(cmd.OutOrStdout(), "Signed out on this machine. Atlas did not confirm the server session ended; it expires on its own.") - } - return nil + return tui.Work(cmd.OutOrStdout(), "Signing out", func(tui.StepFunc) (string, error) { + confirmed, err := a.Logout(cmd.Context()) + switch { + case errors.Is(err, auth.ErrSignedOut): + return "Not signed in.", nil + case err != nil: + return "", err + case confirmed: + return "Signed out.", nil + } + return "Signed out on this machine. Atlas did not confirm the server session ended; it expires on its own.", nil + }) } func runWhoami(cmd *cobra.Command, _ []string) error { @@ -75,7 +97,12 @@ func runWhoami(cmd *cobra.Command, _ []string) error { return err } if refresh { - r, rerr := a.Refresh(cmd.Context()) + var r *auth.Session + var rerr error + _ = tui.Work(io.Discard, "Refreshing your profile", func(tui.StepFunc) (string, error) { + r, rerr = a.Refresh(cmd.Context()) + return "", nil + }) if errors.Is(rerr, auth.ErrSignedOut) { return rerr } @@ -95,7 +122,11 @@ func runOrgList(cmd *cobra.Command, _ []string) error { if err != nil { return err } - s, err := a.Refresh(cmd.Context()) + var s *auth.Session + _ = tui.Work(io.Discard, "Fetching your organisations", func(tui.StepFunc) (string, error) { + s, err = a.Refresh(cmd.Context()) + return "", nil + }) if errors.Is(err, auth.ErrSignedOut) { return err } @@ -124,13 +155,13 @@ func runOrgUse(cmd *cobra.Command, args []string) error { } out := cmd.OutOrStdout() if id == "" { - fmt.Fprintln(out, "No organisation pinned.") + tui.Done(out, "No organisation pinned.") return nil } if s.ActiveOrgID() != id { fmt.Fprintf(cmd.ErrOrStderr(), "atlas: %s is not in your organisation list; pinned anyway. Run atlas org list to refresh it.\n", id) } - fmt.Fprintf(out, "Active organisation: %s\n", orgLabel(s, id)) + tui.Done(out, "Active organisation: "+orgLabel(s, id)) return nil } @@ -152,26 +183,30 @@ func runOrgCreate(cmd *cobra.Command, args []string) error { return fmt.Errorf("cannot make a handle from %q; pass --slug", name) } ctx := cmd.Context() - free, err := a.Client.CheckSlug(ctx, s.SessionToken, slug) - if err != nil { - return err - } - if !free { - return fmt.Errorf("the handle %q is taken; pass another with --slug", slug) - } - created, err := a.Client.CreateOrg(ctx, s.SessionToken, name, slug) - if err != nil { - var f *auth.Failure - if errors.As(err, &f) && f.Kind == auth.Denied { - return errors.New("couldn't create it: that organisation name or handle may already be taken") + return tui.Work(cmd.OutOrStdout(), "Creating "+name, func(step tui.StepFunc) (string, error) { + step("checking the handle " + slug) + free, err := a.Client.CheckSlug(ctx, s.SessionToken, slug) + if err != nil { + return "", err } - return err - } - if _, err := a.Refresh(ctx); err != nil && !errors.Is(err, auth.ErrSignedOut) { - fmt.Fprintln(cmd.ErrOrStderr(), "atlas: created, but could not refresh the list:", err) - } - fmt.Fprintf(cmd.OutOrStdout(), "Created %s (%s). Run atlas org use %s to make it active.\n", created.Name, created.ID, created.ID) - return nil + if !free { + return "", fmt.Errorf("the handle %q is taken; pass another with --slug", slug) + } + step("creating the organisation") + created, err := a.Client.CreateOrg(ctx, s.SessionToken, name, slug) + if err != nil { + var f *auth.Failure + if errors.As(err, &f) && f.Kind == auth.Denied { + return "", errors.New("couldn't create it: that organisation name or handle may already be taken") + } + return "", err + } + step("refreshing your organisations") + if _, err := a.Refresh(ctx); err != nil && !errors.Is(err, auth.ErrSignedOut) { + fmt.Fprintln(cmd.ErrOrStderr(), "atlas: created, but could not refresh the list:", err) + } + return fmt.Sprintf("Created %s (%s). Run atlas org use %s to make it active.", created.Name, created.ID, created.ID), nil + }) } var slugJunk = regexp.MustCompile(`[^a-z0-9]+`) @@ -184,6 +219,21 @@ func printIdentity(w io.Writer, s *auth.Session, path string) { if s == nil { return } + if interactive() { + tui.Header(w, "account") + tui.Section(w, "Signed in") + if id := s.Identity; id != nil { + tui.Field(w, "Name", tui.Default.Bold.Render(id.Name)) + tui.Field(w, "Email", id.Email) + tui.Field(w, "User id", tui.Default.Faint.Render(id.ID)) + } else { + tui.Field(w, "Profile", "not fetched yet (atlas whoami --refresh)") + } + printOrgs(w, s) + tui.Section(w, "On this machine") + tui.Field(w, "Session file", tui.Default.Faint.Render(path)) + return + } if id := s.Identity; id != nil { fmt.Fprintf(w, "Signed in as %s <%s> (%s)\n", id.Name, id.Email, id.ID) } else { @@ -195,6 +245,23 @@ func printIdentity(w io.Writer, s *auth.Session, path string) { func printOrgs(w io.Writer, s *auth.Session) { id := s.Identity + if interactive() && id != nil && id.Orgs != nil && len(*id.Orgs) > 0 { + tui.Section(w, "Organisations") + var rows [][]string + for _, o := range *id.Orgs { + role := "" + if o.Role != nil { + role = string(*o.Role) + } + state := tui.Default.Off.Render("○") + if o.ID == s.ActiveOrgID() { + state = tui.Default.Success.Render("●") + " active" + } + rows = append(rows, []string{o.Name, tui.Default.Faint.Render(o.ID), role, state}) + } + fmt.Fprint(w, tui.Table([]string{"name", "id", "role", ""}, rows)) + return + } switch { case id == nil || id.Orgs == nil: fmt.Fprintln(w, "Organisations: not known yet") diff --git a/cmd/atlas/capture_cmds.go b/cmd/atlas/capture_cmds.go index 6a18ffb..ed77f1a 100644 --- a/cmd/atlas/capture_cmds.go +++ b/cmd/atlas/capture_cmds.go @@ -10,6 +10,7 @@ import ( gitlink "github.com/tryatlas/atlas-cli/internal/capture/git" "github.com/tryatlas/atlas-cli/internal/capture/store" "github.com/tryatlas/atlas-cli/internal/project" + "github.com/tryatlas/atlas-cli/internal/tui" ) // runCaptureLink walks new commits and links them to captured sessions. @@ -35,14 +36,16 @@ func runCaptureLink(cmd *cobra.Command, _ []string) error { return err } defer st.Close() - res, err := gitlink.Link(cmd.Context(), st, p.Root, now) - if err != nil { - return err - } - fmt.Fprintf(cmd.OutOrStdout(), "Checked %d commit(s); %d checkpoint(s) written.\n", res.Commits, res.Checkpoints) - if rw := res.Rewrites; rw.Relinked+rw.Orphaned+rw.Recovered+rw.Failed > 0 { - fmt.Fprintf(cmd.OutOrStdout(), "Rewritten history: %d relinked, %d orphaned, %d recovered, %d not checked.\n", - rw.Relinked, rw.Orphaned, rw.Recovered, rw.Failed) - } - return nil + return tui.Work(cmd.OutOrStdout(), "Linking sessions to commits", func(tui.StepFunc) (string, error) { + res, err := gitlink.Link(cmd.Context(), st, p.Root, now) + if err != nil { + return "", err + } + msg := fmt.Sprintf("Checked %d commit(s); %d checkpoint(s) written.", res.Commits, res.Checkpoints) + if rw := res.Rewrites; rw.Relinked+rw.Orphaned+rw.Recovered+rw.Failed > 0 { + msg += fmt.Sprintf("\nRewritten history: %d relinked, %d orphaned, %d recovered, %d not checked.", + rw.Relinked, rw.Orphaned, rw.Recovered, rw.Failed) + } + return msg, nil + }) } diff --git a/cmd/atlas/commands.go b/cmd/atlas/commands.go index 7fd9c3f..b9648b8 100644 --- a/cmd/atlas/commands.go +++ b/cmd/atlas/commands.go @@ -4,6 +4,8 @@ import ( "strings" "github.com/spf13/cobra" + + "github.com/tryatlas/atlas-cli/internal/tui" ) // notImplementedError is returned by every command that has not been built yet. @@ -26,6 +28,14 @@ func newRootCmd() *cobra.Command { SilenceErrors: true, } root.SetVersionTemplate("atlas {{.Version}}\n") + root.SetHelpFunc(styledHelp(root.HelpFunc())) + root.RunE = func(cmd *cobra.Command, _ []string) error { + if !interactive() { + return cmd.Help() + } + splash(cmd) + return nil + } root.AddCommand( newLoginCmd(), @@ -36,6 +46,9 @@ func newRootCmd() *cobra.Command { newMemoryCmd(), newCaptureCmd(), newServeCmd(), + newSyncCmd(), + newSettingsCmd(), + newUpdateCmd(), withRun(leaf("status", "Show login, organisation, Project, gates, capture health and agent integrations", cobra.NoArgs), runStatus), newAgentsCmd(), newHooksCmd(), @@ -45,6 +58,32 @@ func newRootCmd() *cobra.Command { return root } +// splashGroups orders the splash's command list. +var splashGroups = []struct { + title string + cmds []string +}{ + {"Start", []string{"login", "init", "status", "settings"}}, + {"Agents", []string{"agents", "sync"}}, + {"Memory and capture", []string{"memory", "capture"}}, + {"Account", []string{"whoami", "org", "logout", "update"}}, +} + +// splash is `atlas` alone on a terminal. +func splash(cmd *cobra.Command) { + groups := map[string][]tui.Command{} + var order []string + for _, g := range splashGroups { + order = append(order, g.title) + for _, name := range g.cmds { + if c, _, err := cmd.Find([]string{name}); err == nil && c != cmd { + groups[g.title] = append(groups[g.title], tui.Command{Name: name, Short: c.Short}) + } + } + } + tui.Splash(cmd.OutOrStdout(), version, groups, order) +} + // leaf builds a stub command with the given argument rule. func leaf(use, short string, args cobra.PositionalArgs) *cobra.Command { return &cobra.Command{Use: use, Short: short, Args: args, RunE: stub} @@ -95,6 +134,10 @@ func newInitCmd() *cobra.Command { c.Flags().String("visibility", "org", "who sees a new Project: org or restricted") c.Flags().Bool("local", false, "bind locally only; nothing is synced") c.Flags().Bool("yes", false, "do not prompt for confirmation") + c.Flags().StringSlice("agents", nil, "hook these agents (comma-separated ids, atlas agents list); skips the agent step") + c.Flags().Bool("all-agents", false, "hook every agent detected on this machine; skips the agent step") + c.Flags().String("sync", "", "background sync: on or off (atlas sync); skips the sync step") + c.MarkFlagsMutuallyExclusive("agents", "all-agents") c.MarkFlagsMutuallyExclusive("project", "create") c.MarkFlagsMutuallyExclusive("local", "project") c.MarkFlagsMutuallyExclusive("local", "create") @@ -107,6 +150,7 @@ func newMemoryCmd() *cobra.Command { withRun(leaf("disable", "Turn shared memory off for this repository", cobra.NoArgs), runMemoryGate(false)), withRun(leaf("verify", "Verify the memory revision hash chain", cobra.NoArgs), runMemoryVerify), withRun(leaf("browse", "Browse shared memory: entries by kind, search, history", cobra.NoArgs), runMemoryBrowse), + newMemoryIndexCmd(), newMemoryListCmd(), withRun(leaf("export ", "Export durable memories as an Agent Memory Repo (MEMORY.md and one file per kind)", cobra.ExactArgs(1)), runMemoryExport), withRun(leaf("import ", "Import Agent Memory Repo files as candidate memories", cobra.ExactArgs(1)), runMemoryImport), @@ -126,7 +170,7 @@ func newCaptureCmd() *cobra.Command { func newServeCmd() *cobra.Command { c := withRun(leaf("serve", "Run the Project's listener: memory server, sync drain, and the receiver of agent hooks", cobra.NoArgs), runServe) c.Flags().Bool("daemon", false, "start the listener detached") - c.Flags().Bool("stop", false, "stop a detached listener") + c.Flags().Bool("stop", false, "stop a detached listener (atlas sync off also keeps hooks from restarting it)") c.Flags().Duration("import-every", 0, "ACP import of native sessions this often (parked; 0: never)") _ = c.Flags().MarkHidden("import-every") c.MarkFlagsMutuallyExclusive("daemon", "stop") diff --git a/cmd/atlas/help_view.go b/cmd/atlas/help_view.go new file mode 100644 index 0000000..d72aa9e --- /dev/null +++ b/cmd/atlas/help_view.go @@ -0,0 +1,67 @@ +package main + +import ( + "fmt" + "strings" + + "github.com/spf13/cobra" + + "github.com/tryatlas/atlas-cli/internal/tui" +) + +// styledHelp is --help on a terminal: the wordmark and path, what the +// command does, then usage, subcommands and flags under upper-case labels. +// Pipes keep cobra's plain help. +func styledHelp(plain func(*cobra.Command, []string)) func(*cobra.Command, []string) { + return func(cmd *cobra.Command, args []string) { + if !interactive() { + plain(cmd, args) + return + } + w := cmd.OutOrStdout() + path := strings.Fields(cmd.CommandPath()) + tui.Header(w, path[1:]...) + fmt.Fprintln(w) + desc := cmd.Long + if desc == "" { + desc = cmd.Short + } + for _, l := range tui.Wrap(desc, min(tui.Width()-4, 96)) { + fmt.Fprintln(w, " "+l) + } + tui.Section(w, "Usage") + fmt.Fprintln(w, " "+tui.Default.Bold.Render(cmd.UseLine())) + var rows [][]string + for _, c := range cmd.Commands() { + if c.IsAvailableCommand() { + rows = append(rows, []string{c.Name(), tui.Default.Faint.Render(tui.Fit(c.Short, max(tui.Width()-30, 20)))}) + } + } + if len(rows) > 0 { + tui.Section(w, "Commands") + for _, r := range rows { + fmt.Fprintln(w, " "+tui.Default.Bold.Render(fmt.Sprintf("%-12s", r[0]))+" "+r[1]) + } + } + if f := cmd.LocalFlags().FlagUsages(); f != "" { + tui.Section(w, "Flags") + for _, l := range strings.Split(strings.TrimRight(f, "\n"), "\n") { + name, desc := splitFlag(l) + fmt.Fprintln(w, " "+tui.Default.Bold.Render(fmt.Sprintf("%-28s", name))+" "+tui.Default.Faint.Render(desc)) + } + } + fmt.Fprintln(w) + if len(rows) > 0 { + tui.Note(w, cmd.CommandPath()+" --help for more") + } + } +} + +// splitFlag splits a pflag usage line into the flag and its description. +func splitFlag(l string) (string, string) { + l = strings.TrimSpace(l) + if i := strings.Index(l, " "); i > 0 { + return strings.TrimSpace(l[:i]), strings.TrimSpace(l[i:]) + } + return l, "" +} diff --git a/cmd/atlas/hooks_cmds.go b/cmd/atlas/hooks_cmds.go index 4683edc..9b65542 100644 --- a/cmd/atlas/hooks_cmds.go +++ b/cmd/atlas/hooks_cmds.go @@ -100,6 +100,12 @@ func runAgentHook(a hooks.Agent, verb string) func(*cobra.Command, []string) err if err == nil && (ev.Kind == hooks.TurnEnd || ev.Kind == hooks.SessionEnd) { spawnExtract(p.Root, a.ID(), ev.SessionID, ev.Kind == hooks.SessionEnd) } + if err == nil && ev.Kind == hooks.SessionEnd { + spawnIndex(p.Root) // the session's document and any new memories + } + if ev.Kind == hooks.SessionStart || ev.Kind == hooks.TurnStart { + ensureListener(p.Root) // after the delivery, so nothing is spooled behind a starting listener + } return nil } } @@ -155,6 +161,11 @@ func runHookExtract(cmd *cobra.Command, _ []string) error { hooks.LogError(root, agent, "extract", err) case n > 0: hooks.ClearLastError(root) + // New memories: their vectors and documents, as the app reindexes + // after an extraction. This process is already detached. + if p, perr := project.Discover(ctx, root); perr == nil { + _, _ = indexMemory(ctx, p.Root, p.ScopeRoot, false, func(string) {}, func(float64) {}) + } } return nil } diff --git a/cmd/atlas/index_cmds.go b/cmd/atlas/index_cmds.go new file mode 100644 index 0000000..b7af372 --- /dev/null +++ b/cmd/atlas/index_cmds.go @@ -0,0 +1,142 @@ +package main + +import ( + "context" + "errors" + "fmt" + "os" + "os/exec" + "syscall" + + "github.com/spf13/cobra" + "golang.org/x/sys/unix" + + "github.com/tryatlas/atlas-cli/internal/clistate" + "github.com/tryatlas/atlas-cli/internal/embed" + "github.com/tryatlas/atlas-cli/internal/memory/corpus" + "github.com/tryatlas/atlas-cli/internal/memory/record" + "github.com/tryatlas/atlas-cli/internal/project" + "github.com/tryatlas/atlas-cli/internal/tui" +) + +// atlas memory index: what the app's memory indexer does for a Project: +// the MiniLM model (downloaded once, shared with the app), a vector for +// every durable memory, and the corpus of documents memory_search returns. +func newMemoryIndexCmd() *cobra.Command { + c := withRun(leaf("index", "Build the memory search index: memory vectors and the project's documents (downloads the model once)", cobra.NoArgs), runMemoryIndex) + c.Flags().Bool("no-download", false, "do not download the model; index keywords only when it is missing") + c.Flags().Bool("background", false, "run quietly, never download, skip when another pass runs (used by hooks)") + _ = c.Flags().MarkHidden("background") + return c +} + +func runMemoryIndex(cmd *cobra.Command, _ []string) error { + ctx := cmd.Context() + cwd, err := os.Getwd() + if err != nil { + return err + } + p, err := project.Discover(ctx, cwd) + if errors.Is(err, project.ErrNotInitialised) { + return errNoProject + } + if err != nil { + return err + } + bg, _ := cmd.Flags().GetBool("background") + noDL, _ := cmd.Flags().GetBool("no-download") + if bg { + _, err := indexMemory(ctx, p.Root, p.ScopeRoot, false, func(string) {}, func(float64) {}) + if err != nil && !errors.Is(err, errIndexBusy) { + // The hooks log is where background work reports. + fmt.Fprintln(cmd.ErrOrStderr(), "atlas: memory index:", err) + } + return nil + } + return tui.WorkProgress(cmd.OutOrStdout(), "Indexing memory", func(step tui.StepFunc, frac tui.FracFunc) (string, error) { + return indexMemory(ctx, p.Root, p.ScopeRoot, !noDL, step, frac) + }) +} + +var errIndexBusy = errors.New("another index pass is running") + +// indexMemory is one pass: model (download when allowed), memory vectors, +// corpus. One pass per Project at a time. +func indexMemory(ctx context.Context, root, scope string, download bool, step tui.StepFunc, frac tui.FracFunc) (string, error) { + if !project.MemorySharing(scope) { + return "Shared memory is off here (atlas memory enable); nothing to index.", nil + } + lock, err := os.OpenFile(clistate.Path(root, "index.lock"), os.O_CREATE|os.O_RDWR, 0o600) + if err != nil { + return "", err + } + defer lock.Close() + if unix.Flock(int(lock.Fd()), unix.LOCK_EX|unix.LOCK_NB) != nil { + return "", errIndexBusy + } + defer func() { _ = unix.Flock(int(lock.Fd()), unix.LOCK_UN) }() + + if !embed.Available() && download { + step("Downloading the memory search model (" + embed.Size + ", shared with the Atlas app)") + if err := embed.Download(ctx, func(done, total int64) { + if total > 0 { + frac(0.8 * float64(done) / float64(total)) + } + }); err != nil { + return "", fmt.Errorf("download the model: %w", err) + } + } + vectors := record.Vectors() + embedded := 0 + if st, err := record.Open(scope, true); err == nil { + if vectors != nil { + step("Embedding memories") + embedded, err = st.SyncVectors(ctx) + if err != nil && !errors.Is(err, record.ErrNoVectors) { + _ = st.Close() + return "", err + } + } + _ = st.Close() + } else { + return "", err + } + frac(0.85) + step("Reading the project's documents") + docs, err := corpus.Collect(ctx, root, scope) + if err != nil { + return "", err + } + ix, err := corpus.Open(root, true) + if err != nil { + return "", err + } + defer ix.Close() + step(fmt.Sprintf("Indexing %d documents", len(docs))) + stats, err := ix.Update(ctx, docs, corpus.Owned, vectors) + if err != nil { + return "", err + } + frac(1) + msg := fmt.Sprintf("Memory index ready: %d documents (%d new, %d changed, %d removed); %d memories embedded.", + len(docs), stats.Added, stats.Updated, stats.Deleted, embedded) + if vectors == nil { + msg += " No model on this machine: keyword search only (atlas memory index downloads it)." + } + return msg, nil +} + +// spawnIndex runs a background index pass detached, as hooks do after a +// session (the app indexes when a turn finishes and after extraction). +func spawnIndex(root string) { + self, err := os.Executable() + if err != nil { + return + } + c := exec.Command(self, "memory", "index", "--background") //nolint:gosec // G204: this binary + c.Dir = root + c.SysProcAttr = &syscall.SysProcAttr{Setsid: true} + if c.Start() == nil { + _ = c.Process.Release() + } +} diff --git a/cmd/atlas/init_wizard.go b/cmd/atlas/init_wizard.go new file mode 100644 index 0000000..2c178f5 --- /dev/null +++ b/cmd/atlas/init_wizard.go @@ -0,0 +1,219 @@ +package main + +import ( + "fmt" + "io" + "os/exec" + "strings" + + "github.com/spf13/cobra" + + "github.com/tryatlas/atlas-cli/internal/clistate" + "github.com/tryatlas/atlas-cli/internal/embed" + "github.com/tryatlas/atlas-cli/internal/hooks" + "github.com/tryatlas/atlas-cli/internal/project" + "github.com/tryatlas/atlas-cli/internal/tui" +) + +// initStepper numbers atlas init's steps: Organisation, Project, Agents and +// Background sync for a cloud Project; Agents only for a local one. +type initStepper []string + +func initSteps(local bool) initStepper { + s := initStepper{"Organisation", "Project", "Agents", "Background sync"} + if local { + s = initStepper{"Agents"} + } + if !embed.Available() { + s = append(s, "Memory search") + } + return s +} + +func (s initStepper) step(title string) tui.Step { + for i, t := range s { + if t == title { + return tui.Step{N: i + 1, Total: len(s), Title: title} + } + } + return tui.Step{Title: title} +} + +// finishInit runs the steps after the binding: which agents to hook, and +// whether to keep syncing in the background. +func finishInit(cmd *cobra.Command, root string, local, guided bool, steps initStepper) error { + out := cmd.OutOrStdout() + agents, err := pickAgents(cmd, root, guided, steps.step("Agents")) + if err != nil { + return err + } + on, ask := false, false + if !local { + if on, ask, err = pickSync(cmd, root, guided, steps.step("Background sync")); err != nil { + return err + } + } + model := false + if guided && !embed.Available() && project.MemorySharing(project.ScopeRoot(cmd.Context(), root)) { + i, err := chooseStep(steps.step("Memory search"), "Download the memory search model? Agents then find memories by meaning, not only by words.", []tui.Choice{ + {Label: "Download", Detail: embed.Size + ", once; the same model the Atlas app uses"}, + {Label: "Not now", Detail: "keyword search; atlas memory index downloads it later"}, + }, 0) + if err != nil { + return err + } + model = i == 0 + } + if !guided { + if len(agents) > 0 { + if err := installAgents(cmd.Context(), out, root, agents, false, false); err != nil { + return err + } + } + if ask { + msg, err := setBackgroundSync(root, on) + if err != nil { + return err + } + fmt.Fprintln(out, msg) + } + return nil + } + // On a terminal the work runs under the progress bar, each line a step. + if model { + fmt.Fprintln(out) + scope := project.ScopeRoot(cmd.Context(), root) + if err := tui.WorkProgress(out, "Setting up memory search", func(step tui.StepFunc, frac tui.FracFunc) (string, error) { + return indexMemory(cmd.Context(), root, scope, true, step, frac) + }); err != nil { + return err + } + } else if embed.Available() { + spawnIndex(root) // the index, in the background + } + if len(agents) > 0 || ask { + fmt.Fprintln(out) + err := tui.Work(out, "Initializing Atlas in "+root, func(step tui.StepFunc) (string, error) { + w := tui.Lines(io.Discard, func(l string) string { + if l = strings.TrimSpace(l); l != "" && !strings.HasPrefix(l, "note:") { + step(l) + } + return l + }) + if len(agents) > 0 { + if err := installAgents(cmd.Context(), w, root, agents, false, false); err != nil { + return "", err + } + } + if ask { + msg, err := setBackgroundSync(root, on) + if err != nil { + return "", err + } + step(msg) + } + return "Atlas is ready in " + root, nil + }) + if err != nil { + return err + } + for _, a := range agents { + if n, ok := a.(hooks.Noter); ok { + tui.Note(out, "↳ "+n.AddNote()) + } + } + } else { + tui.Ready(out, "Atlas is ready in "+root) + } + fmt.Fprintln(out) + tui.Note(out, "Use your agents as usual; sessions and memory are captured as they run.") + tui.Note(out, "atlas status shows what was captured · atlas settings changes any of this") + return nil +} + +// detail says what the machine has of an agent. +func agentDetail(a hooks.Agent, root string) string { + d := "configured here" + if _, err := exec.LookPath(a.Binary()); err == nil { + d = a.Binary() + " on PATH" + } + switch a.State(root) { + case hooks.Current: + d += " · already hooked" + case hooks.Outdated: + d += " · hook outdated" + } + return d +} + +// pickAgents is step 3: --agents or --all-agents, else a checklist of the +// agents detected here with a row that selects them all. +func pickAgents(cmd *cobra.Command, root string, guided bool, step tui.Step) ([]hooks.Agent, error) { + flags := cmd.Flags() + ids, _ := flags.GetStringSlice("agents") + all, _ := flags.GetBool("all-agents") + var detected []hooks.Agent + for _, a := range hooks.All() { + if a.Detect(root) { + detected = append(detected, a) + } + } + switch { + case len(ids) > 0: + return resolveAgents(ids, false, nil) + case all: + if len(detected) == 0 { + fmt.Fprintln(cmd.OutOrStdout(), "No supported agent was found on this machine (atlas agents list).") + } + return detected, nil + case !guided: + return nil, nil + case len(detected) == 0: + tui.StepDone(cmd.OutOrStdout(), step, "none found on this machine (atlas agents add later)") + return nil, nil + } + choices := make([]tui.Choice, len(detected)) + checked := make([]bool, len(detected)) + for i, a := range detected { + choices[i] = tui.Choice{Label: a.Name(), Detail: agentDetail(a, root)} + checked[i] = true + } + picked, err := chooseMany(step, "Which agents should Atlas capture and give shared memory?", "All agents", choices, checked) + if err != nil { + return nil, err + } + out := make([]hooks.Agent, len(picked)) + for i, n := range picked { + out[i] = detected[n] + } + return out, nil +} + +// pickSync is step 4: background sync on or off. ask is false when nothing +// was asked and no flag given, so the current choice stays. +func pickSync(cmd *cobra.Command, root string, guided bool, step tui.Step) (on, ask bool, err error) { + switch v, _ := cmd.Flags().GetString("sync"); v { + case "on": + return true, true, nil + case "off": + return false, true, nil + case "": + default: + return false, false, fmt.Errorf("--sync must be on or off, not %q", v) + } + if !guided { + return false, false, nil + } + initial := 1 + if clistate.LoadPrefs(root).BackgroundSync { + initial = 0 + } + i, err := chooseStep(step, "Keep syncing in the background? (atlas sync on|off changes it later)", []tui.Choice{ + {Label: "On", Detail: "a background atlas serve sends prompts, tool calls and replies as they happen"}, + {Label: "Off", Detail: "each agent hook syncs on its own; nothing keeps running"}, + }, initial) + if err != nil { + return false, false, err + } + return i == 0, true, nil +} diff --git a/cmd/atlas/main.go b/cmd/atlas/main.go index 2f0b6ae..dd85c19 100644 --- a/cmd/atlas/main.go +++ b/cmd/atlas/main.go @@ -10,6 +10,8 @@ import ( "os" "os/signal" "syscall" + + "github.com/tryatlas/atlas-cli/internal/tui" ) // version is set at build time with -ldflags "-X main.version=…". @@ -24,6 +26,10 @@ func main() { // run executes the command tree and returns the process exit code. func run(args []string, stdout, stderr io.Writer) int { + if interactive() { + tui.Detect() // light or dark palette, before anything draws + stdout = tui.Out(stdout) + } root := newRootCmd() root.SetArgs(args) root.SetIn(stdin) @@ -37,7 +43,9 @@ func run(args []string, stdout, stderr io.Writer) int { fmt.Fprintln(stderr, err) return 2 } - fmt.Fprintln(stderr, "atlas:", err) + if !errors.Is(err, tui.ErrCancelled) && !tui.Shown(err) { // the screen already said so + fmt.Fprintln(stderr, "atlas:", err) + } return 1 } return 0 diff --git a/cmd/atlas/main_test.go b/cmd/atlas/main_test.go index 7aba431..58c6559 100644 --- a/cmd/atlas/main_test.go +++ b/cmd/atlas/main_test.go @@ -22,6 +22,7 @@ func TestMain(m *testing.M) { _ = os.Setenv("XDG_DATA_HOME", data) state, _ := os.MkdirTemp("", "atlas-state-") // never the user's CLI state _ = os.Setenv("XDG_STATE_HOME", state) + _ = os.Setenv("ATLAS_MODELS_DIR", state) // no embedding model: deterministic os.Exit(m.Run()) } @@ -57,13 +58,17 @@ var wantCommands = []string{ "memory enable", "memory export", "memory import", + "memory index", "memory list", "memory verify", "org create", "org list", "org use", "serve", + "settings", "status", + "sync", + "update", "whoami", } @@ -107,6 +112,7 @@ var implemented = map[string]bool{ "memory verify": true, "memory export": true, "memory import": true, "mcp-bridge": true, "serve": true, "capture link": true, "capture sync": true, "acp import": true, "capture retry": true, "acp run": true, "memory browse": true, "memory list": true, "acp check": true, "acp detect": true, "acp install": true, "acp list": true, "acp sessions": true, "acp logout": true, "acp uninstall": true, + "settings": true, "sync": true, "update": true, "memory index": true, "agents add": true, "agents list": true, "agents remove": true, "agents sessions": true, "hooks extract": true, "hooks git post-commit": true, } diff --git a/cmd/atlas/memory_cmds.go b/cmd/atlas/memory_cmds.go index 1a288da..d37c3fd 100644 --- a/cmd/atlas/memory_cmds.go +++ b/cmd/atlas/memory_cmds.go @@ -14,6 +14,7 @@ import ( "github.com/tryatlas/atlas-cli/internal/memory/record" "github.com/tryatlas/atlas-cli/internal/memory/server" "github.com/tryatlas/atlas-cli/internal/project" + "github.com/tryatlas/atlas-cli/internal/tui" "github.com/tryatlas/atlas-cli/internal/tui/memview" ) @@ -37,15 +38,16 @@ func runMemoryVerify(cmd *cobra.Command, _ []string) error { return err } defer st.Close() - rep, err := st.VerifyChain() - if err != nil { - return err - } - if !rep.OK() { - return fmt.Errorf("the revision chain is broken at revision %d (%d revisions checked): history was edited outside Atlas", rep.FirstBad, rep.Revisions) - } - fmt.Fprintf(cmd.OutOrStdout(), "Revision chain intact: %d revisions in %s\n", rep.Revisions, record.Path(st.ScopeRoot)) - return nil + return tui.Work(cmd.OutOrStdout(), "Verifying the memory revision chain", func(tui.StepFunc) (string, error) { + rep, err := st.VerifyChain() + if err != nil { + return "", err + } + if !rep.OK() { + return "", fmt.Errorf("the revision chain is broken at revision %d (%d revisions checked): history was edited outside Atlas", rep.FirstBad, rep.Revisions) + } + return fmt.Sprintf("Revision chain intact: %d revisions in %s", rep.Revisions, record.Path(st.ScopeRoot)), nil + }) } func runMemoryExport(cmd *cobra.Command, args []string) error { @@ -54,12 +56,13 @@ func runMemoryExport(cmd *cobra.Command, args []string) error { return err } defer st.Close() - n, err := st.Export(cmd.Context(), args[0]) - if err != nil { - return err - } - fmt.Fprintf(cmd.OutOrStdout(), "Exported %d memories to %s (MEMORY.md, decisions.md, architecture.md, facts.md, failures.md).\n", n, args[0]) - return nil + return tui.Work(cmd.OutOrStdout(), "Exporting shared memory", func(tui.StepFunc) (string, error) { + n, err := st.Export(cmd.Context(), args[0]) + if err != nil { + return "", err + } + return fmt.Sprintf("Exported %d memories to %s (MEMORY.md, decisions.md, architecture.md, facts.md, failures.md).", n, args[0]), nil + }) } func runMemoryImport(cmd *cobra.Command, args []string) error { @@ -75,12 +78,13 @@ func runMemoryImport(cmd *cobra.Command, args []string) error { return err } defer st.Close() - res, err := st.Import(cmd.Context(), args[0], now().UnixMilli()) - if err != nil { - return err - } - fmt.Fprintf(cmd.OutOrStdout(), "Imported %d memories as candidates (%d already held). Agents see them as unconfirmed until one restates them.\n", res.Imported, res.Skipped) - return nil + return tui.Work(cmd.OutOrStdout(), "Importing memories", func(tui.StepFunc) (string, error) { + res, err := st.Import(cmd.Context(), args[0], now().UnixMilli()) + if err != nil { + return "", err + } + return fmt.Sprintf("Imported %d memories as candidates (%d already held). Agents see them as unconfirmed until one restates them.", res.Imported, res.Skipped), nil + }) } func gateRoot(cmd *cobra.Command, cwd string) string { @@ -175,6 +179,27 @@ func runMemoryList(cmd *cobra.Command, _ []string) error { } else if es, err = st.Active(ctx, kinds...); err != nil { return err } + if interactive() { + out := cmd.OutOrStdout() + tui.Header(out, "memory", "list") + fmt.Fprintln(out) + if len(es) == 0 { + tui.Note(out, "No memories here yet.") + return nil + } + var rows [][]string + for _, e := range es { + state := tui.Dot(tui.Good, e.State) + if e.State == record.StateCandidate { + state = tui.Dot(tui.Idle, e.State) + } + rows = append(rows, []string{fmt.Sprint(e.ID), strings.ReplaceAll(e.Kind, "_", " "), state, + tui.Fit(strings.Join(strings.Fields(e.Content), " "), max(tui.Width()-50, 20))}) + } + fmt.Fprint(out, tui.Table([]string{"id", "kind", "state", "memory"}, rows)) + tui.Note(out, fmt.Sprintf("%d memories · atlas memory browse to read them", len(es))) + return nil + } for _, e := range es { fmt.Fprintf(cmd.OutOrStdout(), "%d\t%s\t%s\t%s\n", e.ID, e.Kind, e.State, strings.Join(strings.Fields(e.Content), " ")) } diff --git a/cmd/atlas/project_cmds.go b/cmd/atlas/project_cmds.go index 20f6cc5..2cc773a 100644 --- a/cmd/atlas/project_cmds.go +++ b/cmd/atlas/project_cmds.go @@ -2,6 +2,7 @@ package main import ( "bufio" + "bytes" "context" "errors" "fmt" @@ -11,6 +12,7 @@ import ( "strings" "time" + "charm.land/lipgloss/v2" "github.com/spf13/cobra" "github.com/tryatlas/atlas-cli/internal/auth" @@ -25,7 +27,8 @@ import ( // Seams replaced in tests. var ( interactive = tui.Interactive - choose = tui.Select + chooseStep = tui.StepSelect + chooseMany = tui.StepMulti now = time.Now ) @@ -34,10 +37,11 @@ const lockedHelp = "another Atlas window is recording this Project; close the fo func runInit(cmd *cobra.Command, _ []string) error { ctx := cmd.Context() - out, errOut := cmd.OutOrStdout(), cmd.ErrOrStderr() + errOut := cmd.ErrOrStderr() flags := cmd.Flags() local, _ := flags.GetBool("local") yes, _ := flags.GetBool("yes") + guided := interactive() && !yes cwd, err := os.Getwd() if err != nil { @@ -48,6 +52,12 @@ func runInit(cmd *cobra.Command, _ []string) error { return err } scope := project.ScopeRoot(ctx, launch) + if guided { + tui.Animate(cmd.OutOrStdout(), func(t float64) string { + return lipgloss.JoinHorizontal(lipgloss.Center, tui.Logo(t), " ", + tui.Default.Bold.Render("Set up Atlas")+"\n"+tui.Default.Faint.Render(launch)) + "\n" + }) + } if launch != scope { fmt.Fprintf(errOut, "Note: %s is inside the repository %s.\n"+ @@ -64,13 +74,46 @@ func runInit(cmd *cobra.Command, _ []string) error { if a, err = newAuth(); err != nil { return err } - if sess, err = a.Refresh(ctx); errors.Is(err, auth.ErrSignedOut) { - return err - } else if sess == nil { + sess, err = a.Refresh(ctx) + if errors.Is(err, auth.ErrSignedOut) && guided { + i, cerr := chooseStep(tui.Step{Title: "Account"}, "You are not signed in to Atlas.", []tui.Choice{ + {Label: "Sign in", Detail: "opens the browser; sessions and memory sync to a cloud Project"}, + {Label: "Set up locally", Detail: "nothing leaves this machine"}, + }, 0) + if cerr != nil { + return cerr + } + if i == 1 { + local = true + } else { + if err := runLogin(cmd, nil); err != nil { + return err + } + sess, err = a.Refresh(ctx) + } + } + if !local && sess == nil { return err } } + steps := initSteps(local) + + if err := bindFolder(cmd, a, sess, local, launch, scope, steps); err != nil { + return err + } + ensureMemoryRecord(scope) + return finishInit(cmd, launch, local, guided, steps) +} +// bindFolder writes the binding under the writer lock and lets it go. +func bindFolder(cmd *cobra.Command, a *auth.Auth, sess *auth.Session, local bool, launch, scope string, steps initStepper) error { + ctx := cmd.Context() + out, errOut := cmd.OutOrStdout(), cmd.ErrOrStderr() + yes, _ := cmd.Flags().GetBool("yes") + guided := interactive() && !yes + if guided { + out = tui.Indent(out) // inside the steps' tree + } lock, err := store.Lock(launch) if errors.Is(err, store.ErrLocked) { return errors.New(lockedHelp) @@ -105,16 +148,20 @@ func runInit(cmd *cobra.Command, _ []string) error { if err := st.PutBinding(ctx, b, now()); err != nil { return err } - fmt.Fprintf(out, "Bound %s locally. Nothing is synced.\n", launch) + if guided { + tui.StepDone(cmd.OutOrStdout(), tui.Step{Title: "Project"}, "local · nothing is synced") + } else { + fmt.Fprintf(out, "Bound %s locally. Nothing is synced.\n", launch) + } return nil } - org, err := pickOrg(cmd, sess) + org, err := pickOrg(cmd, sess, steps.step("Organisation")) if err != nil { return err } ic := ingest.New(hosts.Ingest(), a.Tokens()) - ws, how, err := pickProject(cmd, ic, org, launch, fp) + ws, how, err := pickProject(cmd, ic, org, launch, fp, steps.step("Project")) if err != nil { return err } @@ -128,13 +175,27 @@ func runInit(cmd *cobra.Command, _ []string) error { if err := st.BindCloud(ctx, b, now()); err != nil { return err } - fmt.Fprintf(out, "Bound %s to %s / %s (%s).\n", launch, org.Name, ws.Label(), how) + if !guided { // on a terminal the Project step's line says it + fmt.Fprintf(out, "Bound %s to %s / %s (%s).\n", launch, org.Name, ws.Label(), how) + } if launch != scope { fmt.Fprintf(out, "Shared memory for this folder lives at %s.\n", filepath.Join(scope, ".atlas", "memory")) } return nil } +// ensureMemoryRecord creates /.atlas/memory/memory.sqlite when shared +// memory is on, so a bound folder has its record from the start (the app +// creates it on the first session; an empty record changes nothing). +func ensureMemoryRecord(scope string) { + if !project.MemorySharing(scope) { + return + } + if st, err := record.Open(scope, true); err == nil { + _ = st.Close() + } +} + // confirm asks a yes/no question; without a terminal, --yes is required. func confirm(cmd *cobra.Command, yes bool, question string) error { if yes { @@ -151,7 +212,7 @@ func confirm(cmd *cobra.Command, yes bool, question string) error { return tui.ErrCancelled } -func pickOrg(cmd *cobra.Command, s *auth.Session) (auth.Org, error) { +func pickOrg(cmd *cobra.Command, s *auth.Session, step tui.Step) (auth.Org, error) { want, _ := cmd.Flags().GetString("org") var orgs []auth.Org if s.Identity != nil && s.Identity.Orgs != nil { @@ -163,35 +224,46 @@ func pickOrg(cmd *cobra.Command, s *auth.Session) (auth.Org, error) { if want != "" { for _, o := range orgs { if o.ID == want { + stepDone(cmd, step, o.Name) return o, nil } } return auth.Org{}, fmt.Errorf("%s is not one of your organisations (atlas org list)", want) } if len(orgs) == 1 { + stepDone(cmd, step, orgs[0].Name+" (your only organisation)") return orgs[0], nil } if !interactive() { return auth.Org{}, errors.New("you belong to several organisations; pass --org (atlas org list)") } - labels := make([]string, len(orgs)) + choices := make([]tui.Choice, len(orgs)) initial := 0 for i, o := range orgs { - labels[i] = fmt.Sprintf("%s (%s)", o.Name, o.ID) + choices[i] = tui.Choice{Label: o.Name, Detail: o.ID} if o.ID == s.ActiveOrgID() { initial = i + choices[i].Detail += " · active" } } - i, err := choose("Which organisation?", labels, initial) + i, err := chooseStep(step, "Which organisation should this folder belong to?", choices, initial) if err != nil { return auth.Org{}, err } return orgs[i], nil } +// stepDone prints an answered step on a terminal; scripts get the summary +// line only. +func stepDone(cmd *cobra.Command, step tui.Step, answer string) { + if interactive() { + tui.StepDone(cmd.OutOrStdout(), step, answer) + } +} + // pickProject chooses the cloud Project: an explicit --project, a new one with // --create, else the server's fingerprint match, else a choice from the list. -func pickProject(cmd *cobra.Command, ic *ingest.Client, org auth.Org, launch string, fp project.GitFingerprint) (ingest.Workspace, string, error) { +func pickProject(cmd *cobra.Command, ic *ingest.Client, org auth.Org, launch string, fp project.GitFingerprint, step tui.Step) (ingest.Workspace, string, error) { ctx := cmd.Context() flags := cmd.Flags() explicit, _ := flags.GetString("project") @@ -214,10 +286,19 @@ func pickProject(cmd *cobra.Command, ic *ingest.Client, org auth.Org, launch str switch { case explicit != "": - return connect(explicit, nil) + ws, how, err := connect(explicit, nil) + if err == nil { + stepDone(cmd, step, ws.Label()) + } + return ws, how, err case create: - return createProject(cmd, ic, org, launch, fp) + ws, how, err := createProject(cmd, ic, org, launch, fp) + if err == nil { + stepDone(cmd, step, ws.Label()+" (new)") + } + return ws, how, err } + newLabel := tui.Choice{Label: "+ Create a new Project", Detail: "“" + defaultSlug(cmd, launch) + "”"} if fp.RootCommitSHA != nil || fp.GitURL != nil { res, err := ic.Connect(ctx, ingest.ConnectRequest{OrgID: org.ID, RootCommitSHA: fp.RootCommitSHA, GitURL: fp.GitURL}) @@ -226,12 +307,37 @@ func pickProject(cmd *cobra.Command, ic *ingest.Client, org auth.Org, launch str } switch res.Status { case "connected": - return ingest.Workspace{ID: res.WorkspaceID, Slug: deref(res.Slug)}, "matched by " + res.Reason, nil + matched := ingest.Workspace{ID: res.WorkspaceID, Slug: deref(res.Slug)} + if !interactive() { + return matched, "matched by " + res.Reason, nil + } + // Offer the match first, the org's other Projects after it. + list, _ := ic.Workspaces(ctx, org.ID) + opts := []ingest.Workspace{matched} + for _, w := range list { + if w.ID == matched.ID { + opts[0] = w + } else { + opts = append(opts, w) + } + } + choices := workspaceChoices(opts) + choices[0].Detail = "matches this repository (" + res.Reason + ")" + i, err := chooseStep(step, "Which Project in "+org.Name+"?", append(choices, newLabel), 0) + switch { + case err != nil: + return ingest.Workspace{}, "", err + case i == 0: + return opts[0], "matched by " + res.Reason, nil + case i == len(opts): + return createProject(cmd, ic, org, launch, fp) + } + return connect(opts[i].ID, &opts[i].Slug) case "ambiguous": if !interactive() { return ingest.Workspace{}, "", fmt.Errorf("several Projects match this repository (%s); pass --project ", workspaceList(res.Candidates)) } - i, err := choose("Several Projects match this repository. Which one?", workspaceLabels(res.Candidates), 0) + i, err := chooseStep(step, "Several Projects in "+org.Name+" match this repository. Which one?", workspaceChoices(res.Candidates), 0) if err != nil { return ingest.Workspace{}, "", err } @@ -250,8 +356,7 @@ func pickProject(cmd *cobra.Command, ic *ingest.Client, org auth.Org, launch str } return ingest.Workspace{}, "", fmt.Errorf("no Project matches this repository; pass --project (%s) or --create", workspaceList(list)) } - newLabel := fmt.Sprintf("Create a new Project “%s”", defaultSlug(cmd, launch)) - i, err := choose("Which Project in "+org.Name+"?", append(workspaceLabels(list), newLabel), len(list)) + i, err := chooseStep(step, "Which Project in "+org.Name+"?", append(workspaceChoices(list), newLabel), len(list)) if err != nil { return ingest.Workspace{}, "", err } @@ -300,6 +405,14 @@ func workspaceLabels(ws []ingest.Workspace) []string { return out } +func workspaceChoices(ws []ingest.Workspace) []tui.Choice { + out := make([]tui.Choice, len(ws)) + for i, w := range ws { + out[i] = tui.Choice{Label: w.Label(), Detail: w.ID} + } + return out +} + func workspaceList(ws []ingest.Workspace) string { return strings.Join(workspaceLabels(ws), ", ") } func deref(p *string) string { @@ -361,7 +474,7 @@ func runMemoryGate(enabled bool) func(*cobra.Command, []string) error { if enabled { state = "on" } - fmt.Fprintf(cmd.OutOrStdout(), "Shared memory is %s for %s.\n", state, dir) + tui.Done(cmd.OutOrStdout(), fmt.Sprintf("Shared memory is %s for %s.", state, dir)) return nil } } @@ -393,9 +506,9 @@ func runCaptureGate(enabled bool) func(*cobra.Command, []string) error { return err } if enabled { - fmt.Fprintf(cmd.OutOrStdout(), "Capture is on for %s.\n", p.Root) + tui.Done(cmd.OutOrStdout(), fmt.Sprintf("Capture is on for %s.", p.Root)) } else { - fmt.Fprintf(cmd.OutOrStdout(), "Capture is paused for %s. What was recorded still syncs.\n", p.Root) + tui.Done(cmd.OutOrStdout(), fmt.Sprintf("Capture is paused for %s. What was recorded still syncs.", p.Root)) } return nil } @@ -404,8 +517,19 @@ func runCaptureGate(enabled bool) func(*cobra.Command, []string) error { // ── Status ─────────────────────────────────────────────────────────────────── func runStatus(cmd *cobra.Command, _ []string) error { + if !interactive() { + return statusLines(cmd, cmd.OutOrStdout()) + } + var buf bytes.Buffer + err := statusLines(cmd, &buf) + renderStatus(cmd.OutOrStdout(), buf.String()) + return err +} + +// statusLines prints "Label: value" lines, one fact each; on a terminal +// renderStatus draws them as a card. +func statusLines(cmd *cobra.Command, w io.Writer) error { ctx := cmd.Context() - w := cmd.OutOrStdout() var sess *auth.Session if a, err := newAuth(); err == nil { if s, err := a.Session(); err == nil { @@ -461,6 +585,7 @@ func runStatus(cmd *cobra.Command, _ []string) error { } printCaptureHealth(ctx, w, st, p.Root, b) printMemoryHealth(ctx, w, p.ScopeRoot) + printSync(w, p.Root) printAgents(ctx, w, p.Root) return nil } diff --git a/cmd/atlas/serve_cmds.go b/cmd/atlas/serve_cmds.go index 813109c..173c972 100644 --- a/cmd/atlas/serve_cmds.go +++ b/cmd/atlas/serve_cmds.go @@ -11,6 +11,7 @@ import ( "os" "os/exec" "os/signal" + "strings" "syscall" "time" @@ -27,6 +28,7 @@ import ( "github.com/tryatlas/atlas-cli/internal/listener" "github.com/tryatlas/atlas-cli/internal/project" atlasrun "github.com/tryatlas/atlas-cli/internal/run" + "github.com/tryatlas/atlas-cli/internal/tui" ) // ── atlas capture sync / retry ─────────────────────────────────────────────── @@ -59,9 +61,9 @@ func runCaptureSync(retry bool) func(*cobra.Command, []string) error { return fmt.Errorf("the running listener did not answer: %w", err) } if retry { - fmt.Fprintf(out, "Requeued %d failed row(s).\n", ans.Requeued) + tui.Done(out, fmt.Sprintf("Requeued %d failed row(s).", ans.Requeued)) } - fmt.Fprintln(out, "Asked the running listener to sync now.") + tui.Done(out, "Asked the running listener to sync now.") return nil } if err != nil { @@ -73,56 +75,64 @@ func runCaptureSync(retry bool) func(*cobra.Command, []string) error { return err } defer st.Close() + title := "Syncing to the cloud Project" if retry { - n, err := st.RetryFailed(ctx) - if err != nil { - return err - } - fmt.Fprintf(out, "Requeued %d failed row(s).\n", n) + title = "Retrying failed rows" } - b, err := st.Binding(ctx) - if err != nil { - return err - } - if _, ok := capsync.TargetOf(b); !ok { - fmt.Fprintln(out, "This Project is local: nothing syncs. Bind it to a cloud Project with atlas init.") - return nil - } - if b.DrainState == store.DrainNotAuthorized { - // A human action re-checks access (the desktop re-registers). - if err := st.SetDrainState(ctx, store.DrainOK, time.Now()); err != nil { - return err + return tui.Work(out, title, func(step tui.StepFunc) (string, error) { + var lines []string + if retry { + n, err := st.RetryFailed(ctx) + if err != nil { + return "", err + } + lines = append(lines, fmt.Sprintf("Requeued %d failed row(s).", n)) + step(lines[0]) } - } - total := capsync.Report{} - c := syncClient() - for { - rep, err := capsync.Drain(ctx, c, st, capsync.Budget, time.Now) + b, err := st.Binding(ctx) if err != nil { - return err + return "", err } - total.Sent += rep.Sent - total.Failed += rep.Failed - total.Retired += rep.Retired - total.Outcome = rep.Outcome - if rep.Outcome != capsync.Done || rep.Sent+rep.Failed == 0 { - break + if _, ok := capsync.TargetOf(b); !ok { + return strings.Join(append(lines, "This Project is local: nothing syncs. Bind it to a cloud Project with atlas init."), "\n"), nil } - } - counts, _ := st.OutboxCounts(ctx) - fmt.Fprintf(out, "Sent %d row(s); %d failed. Outbox: %d pending, %d failed.\n", - total.Sent, total.Failed+int(total.Retired), counts[store.SyncPending], counts[store.SyncFailed]) - switch total.Outcome { - case capsync.Offline: - return errors.New("the ingest server is unreachable; the listener retries with backoff") - case capsync.RateLimited: - return errors.New("the ingest server asked to slow down; try again later") - case capsync.NotAuthorized: - return errors.New("the ingest server refused this Project (403); check your access with atlas status") - case capsync.SignedOut: - return errors.New("not signed in; run atlas login") - } - return nil + if b.DrainState == store.DrainNotAuthorized { + // A human action re-checks access (the desktop re-registers). + if err := st.SetDrainState(ctx, store.DrainOK, time.Now()); err != nil { + return "", err + } + } + total := capsync.Report{} + c := syncClient() + for { + rep, err := capsync.Drain(ctx, c, st, capsync.Budget, time.Now) + if err != nil { + return "", err + } + total.Sent += rep.Sent + total.Failed += rep.Failed + total.Retired += rep.Retired + total.Outcome = rep.Outcome + step(fmt.Sprintf("%d row(s) sent", total.Sent)) + if rep.Outcome != capsync.Done || rep.Sent+rep.Failed == 0 { + break + } + } + counts, _ := st.OutboxCounts(ctx) + summary := fmt.Sprintf("Sent %d row(s); %d failed. Outbox: %d pending, %d failed.", + total.Sent, total.Failed+int(total.Retired), counts[store.SyncPending], counts[store.SyncFailed]) + switch total.Outcome { + case capsync.Offline: + return "", fmt.Errorf("%s The ingest server is unreachable; the listener retries with backoff", summary) + case capsync.RateLimited: + return "", fmt.Errorf("%s The ingest server asked to slow down; try again later", summary) + case capsync.NotAuthorized: + return "", fmt.Errorf("%s The ingest server refused this Project (403); check your access with atlas status", summary) + case capsync.SignedOut: + return "", fmt.Errorf("%s Not signed in; run atlas login", summary) + } + return strings.Join(append(lines, summary), "\n"), nil + }) } } @@ -181,6 +191,15 @@ func runServe(cmd *cobra.Command, _ []string) error { if err != nil { return err } + var live *tui.Live + if os.Getenv(daemonEnv) == "" && interactive() { + live = tui.StartLive([]string{"serve"}, [][2]string{ + {"Project", p.Root}, + {"Memory", h.Listener.MCPURL()}, + {"Sync", tui.Dot(tui.Good, "drain running")}, + {"Hooks", tui.Dot(tui.Good, "delivered here")}, + }) + } if h.Capturing() { h.Listener.SetHookSink(func(ctx context.Context, body []byte) error { var d hooks.Delivery @@ -188,7 +207,14 @@ func runServe(cmd *cobra.Command, _ []string) error { return err } d.Root = p.Root - if err := hooks.Apply(ctx, h.Recorder, h.Listener.Memory, []hooks.Delivery{d}); err != nil { + if h.Stale() { + return errStaleStore // the hook writes to the new store itself + } + err := hooks.Apply(ctx, h.Recorder, h.Listener.Memory, []hooks.Delivery{d}) + if live != nil { + live.Event(deliveryEvent(d, err)) + } + if err != nil { return err } if h.Sync != nil && !d.End { @@ -215,44 +241,137 @@ func runServe(cmd *cobra.Command, _ []string) error { logImport(cmd.ErrOrStderr(), res, err, false) }) } - if os.Getenv(daemonEnv) == "" { + if os.Getenv(daemonEnv) == "" && live == nil { fmt.Fprintf(out, "Serving %s: memory on %s, sync drain running, agent hooks delivered here. Ctrl-C to stop.\n", p.Root, h.Listener.MCPURL()) if im != nil { fmt.Fprintf(out, "Importing sessions from the agents' own UIs every %s.\n", every) } } + // The memory index follows the record and the sessions, as the app's + // indexer does: now, then every 15 minutes (never downloading). + go func() { + t := time.NewTicker(15 * time.Minute) + defer t.Stop() + for { + if project.MemorySharing(p.ScopeRoot) { + _, _ = indexMemory(ctx, p.Root, p.ScopeRoot, false, func(string) {}, func(float64) {}) + } + select { + case <-ctx.Done(): + return + case <-t.C: + } + } + }() sig := make(chan os.Signal, 1) signal.Notify(sig, os.Interrupt, syscall.SIGTERM, syscall.SIGHUP) - select { - case <-sig: - case <-ctx.Done(): + // A store deleted or re-created under the listener: stop rather than + // write into a file no one can see. Hooks then write directly, and the + // next one restarts a listener when background sync is on. + stale := make(chan struct{}) + go func() { + t := time.NewTicker(2 * time.Second) + defer t.Stop() + for { + select { + case <-ctx.Done(): + return + case <-t.C: + if h.Stale() { + fmt.Fprintln(cmd.ErrOrStderr(), "atlas: this Project's .atlas was replaced; stopping the listener") + close(stale) + return + } + } + } + }() + if live != nil { + ended := make(chan struct{}) + go func() { _ = live.Run(); close(ended) }() + select { + case <-ended: // q, esc or ctrl+c on the screen + case <-sig: + live.Stop() + <-ended + case <-stale: + live.Stop() + <-ended + case <-ctx.Done(): + live.Stop() + <-ended + } + } else { + select { + case <-sig: + case <-stale: + case <-ctx.Done(): + } } if im != nil { im.Close() } res, err := h.Close() if res.Checkpoints > 0 && os.Getenv(daemonEnv) == "" { - fmt.Fprintf(out, "Linked %d session commit(s).\n", res.Checkpoints) + tui.Done(out, fmt.Sprintf("Linked %d session commit(s).", res.Checkpoints)) + } + if live != nil && err == nil { + tui.Done(out, "Listener stopped.") } return err } +// errStaleStore refuses a hook delivery to a listener whose store was +// replaced; the hook falls back to writing the store itself. +var errStaleStore = errors.New("the listener's store was replaced") + +// deliveryEvent is a hook delivery as one line of serve's live feed. +func deliveryEvent(d hooks.Delivery, err error) tui.LiveEvent { + e := tui.LiveEvent{At: time.Now(), Who: d.Session.Agent, Bad: err != nil} + switch { + case err != nil: + e.What = "failed: " + err.Error() + case d.Start: + e.What = "session started" + case d.Open != nil: + e.What = "prompt " + tui.Default.Faint.Render(strings.Join(strings.Fields(d.Open.Prompt), " ")) + case d.Tool != nil: + e.What = "tool " + tui.Default.Faint.Render(d.Tool.Name+" "+strings.Join(d.Changed, ", ")) + case d.Turn != nil: + e.What = "reply " + tui.Default.Faint.Render("turn closed") + case d.End: + e.What = "session ended" + default: + e.What = "event" + } + if d.LinkFrom != "" && err == nil { + e.What += tui.Default.Success.Render(" ✓ commit linked") + } + return e +} + // startDaemon re-runs `atlas serve` detached in its own session and waits for // its run file. func startDaemon(cmd *cobra.Command, root string) error { - if rf := listener.ReadRunFile(root); rf != nil && alive(rf.PID) { - return fmt.Errorf("a listener is already running for this Project (pid %d)", rf.PID) + every, _ := cmd.Flags().GetDuration("import-every") + pid, port, err := launchListener(root, every) + if err != nil { + return err } + fmt.Fprintf(cmd.OutOrStdout(), "Listener started (pid %d) on 127.0.0.1:%d. Stop it with atlas sync off.\n", pid, port) + return nil +} + +// spawnListener starts the detached listener without waiting for it. +func spawnListener(root string, every time.Duration) (*exec.Cmd, error) { self, err := os.Executable() if err != nil { - return err + return nil, err } logf, err := os.OpenFile(serveLog(root), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0o600) if err != nil { - return err + return nil, err } defer logf.Close() - every, _ := cmd.Flags().GetDuration("import-every") args := []string{"serve"} if every > 0 { args = append(args, "--import-every", every.String()) @@ -263,46 +382,69 @@ func startDaemon(cmd *cobra.Command, root string) error { child.Stdout, child.Stderr = logf, logf child.SysProcAttr = &syscall.SysProcAttr{Setsid: true} if err := child.Start(); err != nil { - return err + return nil, err + } + return child, nil +} + +// launchListener starts the detached listener and waits for its run file. +func launchListener(root string, every time.Duration) (pid, port int, err error) { + if rf := listener.ReadRunFile(root); rf != nil && alive(rf.PID) { + return 0, 0, fmt.Errorf("a listener is already running for this Project (pid %d)", rf.PID) + } + child, err := spawnListener(root, every) + if err != nil { + return 0, 0, err } - pid := child.Process.Pid + pid = child.Process.Pid _ = child.Process.Release() deadline := time.Now().Add(10 * time.Second) for time.Now().Before(deadline) { if rf := listener.ReadRunFile(root); rf != nil && rf.PID == pid { - fmt.Fprintf(cmd.OutOrStdout(), "Listener started (pid %d) on 127.0.0.1:%d. Stop it with atlas serve --stop.\n", pid, rf.Port) - return nil + return pid, rf.Port, nil } if !alive(pid) { break } time.Sleep(100 * time.Millisecond) } - return fmt.Errorf("the listener did not start; see %s", serveLog(root)) + return 0, 0, fmt.Errorf("the listener did not start; see %s", serveLog(root)) } // stopDaemon signals the listener named in the run file and waits for it. func stopDaemon(out interface{ Write([]byte) (int, error) }, root string) error { - rf := listener.ReadRunFile(root) - if rf == nil || !alive(rf.PID) { + pid, err := haltListener(root) + if err != nil { + return err + } + if pid == 0 { fmt.Fprintln(out, "No listener is running for this Project.") return nil } + fmt.Fprintf(out, "Stopped the listener (pid %d).\n", pid) + return nil +} + +// haltListener stops the detached listener; pid 0 means none ran. +func haltListener(root string) (int, error) { + rf := listener.ReadRunFile(root) + if rf == nil || !alive(rf.PID) { + return 0, nil + } if !rf.Daemon { - return fmt.Errorf("the listener (pid %d) belongs to atlas run or a foreground atlas serve; exit that instead", rf.PID) + return 0, fmt.Errorf("the listener (pid %d) belongs to atlas run or a foreground atlas serve; exit that instead", rf.PID) } if err := syscall.Kill(rf.PID, syscall.SIGTERM); err != nil { - return err + return 0, err } deadline := time.Now().Add(15 * time.Second) for time.Now().Before(deadline) { if !alive(rf.PID) { - fmt.Fprintf(out, "Stopped the listener (pid %d).\n", rf.PID) - return nil + return rf.PID, nil } time.Sleep(100 * time.Millisecond) } - return fmt.Errorf("the listener (pid %d) did not stop", rf.PID) + return 0, fmt.Errorf("the listener (pid %d) did not stop", rf.PID) } func alive(pid int) bool { diff --git a/cmd/atlas/settings_cmds.go b/cmd/atlas/settings_cmds.go new file mode 100644 index 0000000..15fb2e6 --- /dev/null +++ b/cmd/atlas/settings_cmds.go @@ -0,0 +1,399 @@ +package main + +import ( + "bytes" + "context" + "fmt" + "io" + "os" + "os/exec" + "strings" + + tea "charm.land/bubbletea/v2" + "github.com/spf13/cobra" + + "github.com/tryatlas/atlas-cli/internal/auth" + "github.com/tryatlas/atlas-cli/internal/capture/store" + "github.com/tryatlas/atlas-cli/internal/clistate" + "github.com/tryatlas/atlas-cli/internal/embed" + "github.com/tryatlas/atlas-cli/internal/hooks" + "github.com/tryatlas/atlas-cli/internal/hooks/mcpconfig" + "github.com/tryatlas/atlas-cli/internal/project" + "github.com/tryatlas/atlas-cli/internal/tui/settings" +) + +// atlas settings: account, Project gates, agents and background sync on +// one screen. Without a terminal it prints the same rows. +func newSettingsCmd() *cobra.Command { + return withRun(leaf("settings", "Change this Project's capture, shared memory, agents and background sync on one screen", cobra.NoArgs), runSettings) +} + +func runSettings(cmd *cobra.Command, _ []string) error { + ctx := cmd.Context() + cwd, err := os.Getwd() + if err != nil { + return err + } + be := &settingsBackend{cwd: cwd} + title := cwd + if p, err := project.Discover(ctx, cwd); err == nil { + title = p.Root + } + if !interactive() { + secs, err := be.Load(ctx) + if err != nil { + return err + } + printSettings(cmd.OutOrStdout(), secs) + return nil + } + _, err = tea.NewProgram(settings.New(ctx, be, title), tea.WithContext(ctx)).Run() + return err +} + +// printSettings is the screen as text, for pipes and scripts. +func printSettings(w io.Writer, secs []settings.Section) { + for i, s := range secs { + if i > 0 { + fmt.Fprintln(w) + } + fmt.Fprintln(w, s.Title) + for _, it := range s.Items { + v := it.Value + switch it.Kind { + case settings.Toggle: + st := "off" + if it.On { + st = "on" + } + v = strings.TrimSpace(st + " " + it.Value) + case settings.Action: + continue + } + fmt.Fprintf(w, " %-22s %s\n", it.Label, v) + } + } +} + +// settingsBackend reads the state the commands read, and changes it through +// the commands themselves, so the screen and the CLI cannot disagree. +type settingsBackend struct{ cwd string } + +func (b *settingsBackend) project(ctx context.Context) *project.Project { + p, err := project.Discover(ctx, b.cwd) + if err != nil { + return nil + } + return p +} + +const needInit = "Run atlas init in this folder first." + +// Load builds the sections. +func (b *settingsBackend) Load(ctx context.Context) ([]settings.Section, error) { + p := b.project(ctx) + secs := []settings.Section{b.account(), b.projectSection(ctx, p), b.agents(p), b.sync(ctx, p), b.model(p), b.about(p)} + return secs, nil +} + +func (b *settingsBackend) account() settings.Section { + sec := settings.Section{Title: "Account", Icon: "◉"} + a, err := newAuth() + var s *auth.Session + if err == nil { + s, _ = a.Session() + } + if s == nil { + sec.Items = []settings.Item{{Label: "Signed in as", Value: "not signed in", + Detail: "Run atlas login to sync sessions and memory to a cloud Project."}} + return sec + } + who := "signed in" + if s.Identity != nil { + who = fmt.Sprintf("%s <%s>", s.Identity.Name, s.Identity.Email) + } + org := "none chosen" + if id := s.ActiveOrgID(); id != "" { + org = orgLabel(s, id) + } + n := 0 + if s.Identity != nil && s.Identity.Orgs != nil { + n = len(*s.Identity.Orgs) + } + sec.Items = []settings.Item{ + {Label: "Signed in as", Value: who, Detail: "atlas logout signs out and deletes the local session file."}, + {Label: "Active organisation", Value: org, Detail: "atlas org use changes it; atlas org list shows them."}, + {Label: "Organisations", Value: fmt.Sprint(n)}, + {Label: "Session file", Value: a.Store.Path(), Detail: "The only secret Atlas keeps on disk (mode 0600)."}, + } + return sec +} + +func (b *settingsBackend) projectSection(ctx context.Context, p *project.Project) settings.Section { + sec := settings.Section{Title: "Project", Icon: "▣"} + var dir string + if p == nil { + dir, _ = project.Canonical(b.cwd) + sec.Items = append(sec.Items, settings.Item{Label: "Folder", Value: dir + " (not initialised)", Detail: needInit}) + } else { + dir = p.Root + sec.Items = append(sec.Items, settings.Item{Label: "Folder", Value: p.Root}) + } + var bind *store.Binding + if p != nil { + if st, err := store.Open(p.Root, false); err == nil { + bind, _ = st.Binding(ctx) + _ = st.Close() + } + var sess *auth.Session + if a, err := newAuth(); err == nil { + sess, _ = a.Session() + } + if bind != nil { + sec.Items = append(sec.Items, settings.Item{Label: "Bound to", Value: describeBinding(bind, sess), + Detail: "atlas init binds the folder again (another organisation or Project)."}) + } + if p.ScopeRoot != p.Root { + sec.Items = append(sec.Items, settings.Item{Label: "Memory lives at", Value: p.ScopeRoot}) + } + } + capture := settings.Item{Key: "capture", Label: "Session capture", Kind: settings.Toggle, On: bind != nil && bind.Enabled, + Detail: "Record prompts, replies, tool calls and file changes of every agent session here. Pausing keeps what was recorded and still syncs it."} + if bind == nil { + capture.Disabled = needInit + } + sec.Items = append(sec.Items, capture, + settings.Item{Key: "memory", Label: "Shared memory", Kind: settings.Toggle, On: project.MemorySharing(dir), + Detail: "Agents read and write what every session learned in this repository, through the atlas_memory MCP server. Nothing is injected into prompts."}) + return sec +} + +func (b *settingsBackend) agents(p *project.Project) settings.Section { + sec := settings.Section{Title: "Agents", Icon: "◆"} + for _, a := range hooks.All() { + it := settings.Item{Key: "agent:" + a.ID(), Label: a.Name(), Kind: settings.Toggle} + var notes []string + if _, err := exec.LookPath(a.Binary()); err == nil { + notes = append(notes, a.Binary()+" is on PATH.") + } else { + notes = append(notes, a.Binary()+" is not on PATH here.") + } + if p == nil { + it.Disabled = needInit + } else { + switch a.State(p.Root) { + case hooks.Current: + it.On = true + case hooks.Outdated: + it.On, it.Value = true, "hook outdated: toggle off and on" + default: + if !a.Detect(p.Root) { + it.Value = "not detected" + } + } + if mw, ok := mcpconfig.For(a.ID()); ok && it.On { + if mw.State(p.Root) == hooks.Current { + notes = append(notes, "Memory server entry in "+strings.TrimPrefix(mw.Path(p.Root), p.Root+"/")+".") + } else if it.Value == "" { + it.Value = "no memory entry" + } + } + } + if n, ok := a.(hooks.Noter); ok { + notes = append(notes, n.AddNote()) + } + it.Detail = "Capture " + a.Name() + " sessions run in its own UI, and give it shared memory. " + strings.Join(notes, " ") + sec.Items = append(sec.Items, it) + } + all := settings.Item{Key: "agents:all", Label: "Add all detected agents", Kind: settings.Action, + Detail: "Hook every agent found on this machine or configured in this folder."} + if p == nil { + all.Disabled = needInit + } + sec.Items = append(sec.Items, all) + return sec +} + +func (b *settingsBackend) sync(ctx context.Context, p *project.Project) settings.Section { + sec := settings.Section{Title: "Sync", Icon: "⇅"} + if p == nil { + sec.Items = []settings.Item{{Key: "sync", Label: "Background sync", Kind: settings.Toggle, Disabled: needInit}} + return sec + } + on, line := syncState(p.Root) + sec.Items = append(sec.Items, settings.Item{Key: "sync", Label: "Background sync", Kind: settings.Toggle, On: on, Value: line, + Detail: "Keeps atlas serve running for this Project: hooks hand it each prompt, tool call and reply, and it sends them to the cloud at once. Your agents' hooks restart it after a reboot. Same as atlas sync on|off."}) + if st, err := store.Open(p.Root, false); err == nil { + if c, err := st.OutboxCounts(ctx); err == nil { + sec.Items = append(sec.Items, settings.Item{Label: "Outbox", Value: fmt.Sprintf("%d pending, %d failed", c[store.SyncPending], c[store.SyncFailed])}) + } + _ = st.Close() + } + sec.Items = append(sec.Items, + settings.Item{Key: "sync:now", Label: "Sync now", Kind: settings.Action, Detail: "Send what is pending to the cloud Project now (atlas capture sync)."}, + settings.Item{Key: "sync:retry", Label: "Retry failed", Kind: settings.Action, Detail: "Re-queue rows that failed to sync, then sync (atlas capture retry)."}, + ) + if e := strings.TrimSpace(hooks.LastError(p.Root)); e != "" { + sec.Items = append(sec.Items, settings.Item{Label: "Last hook error", Value: e, Detail: e}) + } + return sec +} + +// model is the local MiniLM model memory search runs on. +func (b *settingsBackend) model(p *project.Project) settings.Section { + sec := settings.Section{Title: "Model"} + have := embed.Available() + state, search := "not downloaded", "keywords only" + if have { + state = fmt.Sprintf("downloaded · %.0f MB", float64(embed.DiskSize())/1e6) + search = "meaning and keywords" + } + sec.Items = []settings.Item{ + {Label: "Memory model", Value: embed.ModelID + " · " + state, + Detail: "A small local model (MiniLM, 384 dimensions) that turns memories and documents into vectors, so memory_search finds them by meaning. It runs on this machine; nothing is sent anywhere."}, + {Label: "Memory search", Value: search}, + {Label: "Location", Value: embed.ModelDir(), Detail: "The Atlas app keeps its models here too: one download serves both."}, + } + dl := settings.Item{Key: "model:download", Label: "Download model", Kind: settings.Action, Value: embed.Size, + Detail: "Download " + embed.Repo + " (" + embed.Size + ", from Hugging Face, once), then embed this Project's memories and index its documents."} + if have { + dl.Disabled = "The model is already downloaded." + } + sec.Items = append(sec.Items, dl) + idx := settings.Item{Key: "memory:index", Label: "Build memory index", Kind: settings.Action, + Detail: "Embed every memory and index the project's documents now (atlas memory index). Hooks and atlas serve also keep it current."} + if p == nil { + idx.Disabled = needInit + } + sec.Items = append(sec.Items, idx) + if have { + sec.Items = append(sec.Items, settings.Item{Key: "model:remove", Label: "Remove model", Kind: settings.Action, + Confirm: "This deletes the model files the Atlas app also uses.", + Detail: "Delete the model files to free " + embed.Size + ". Memory search falls back to keywords. The Atlas app uses the same files and would download them again."}) + } + return sec +} + +func (b *settingsBackend) about(p *project.Project) settings.Section { + sec := settings.Section{Title: "About", Icon: "◇", Items: []settings.Item{ + {Label: "Version", Value: version}, + {Key: "update:check", Label: "Check for updates", Kind: settings.Action, Detail: "Ask GitHub for the latest release (atlas update --check)."}, + {Key: "update", Label: "Update atlas", Kind: settings.Action, + Detail: "Download the latest release for this machine, verify it against the release's checksums.txt, and replace this binary (atlas update). A background listener is restarted on the new version."}, + }} + if p != nil { + sec.Items = append(sec.Items, + settings.Item{Label: "CLI state", Value: clistate.Dir(p.Root), Detail: "Hook state, logs and the listener's run file; .atlas/ holds only what the app writes."}, + settings.Item{Label: "Hooks log", Value: hooks.LogPath(p.Root)}, + ) + } + return sec +} + +// ApplyProgress runs the long actions with a progress report: the model +// download and the index; everything else is Apply. +func (b *settingsBackend) ApplyProgress(ctx context.Context, key string, on bool, report func(float64, string)) (string, error) { + p := b.project(ctx) + switch key { + case "model:download": + if err := embed.Download(ctx, func(done, total int64) { + if total > 0 { + report(0.9*float64(done)/float64(total), fmt.Sprintf("%.0f of %.0f MB", float64(done)/1e6, float64(total)/1e6)) + } + }); err != nil { + return "", fmt.Errorf("download the model: %w", err) + } + msg := "Model downloaded: memory search now uses meaning and keywords." + if p != nil { + report(0.95, "embedding memories") + if m, err := indexMemory(ctx, p.Root, p.ScopeRoot, false, func(string) {}, func(float64) {}); err == nil { + msg += " " + m + } + } + report(1, "") + return msg, nil + case "memory:index": + if p == nil { + return "", errNoProject + } + return indexMemory(ctx, p.Root, p.ScopeRoot, true, func(s string) { report(-1, s) }, func(f float64) { report(f, "") }) + } + return b.Apply(ctx, key, on) +} + +// Apply runs the command behind a row and returns its last line. +func (b *settingsBackend) Apply(ctx context.Context, key string, on bool) (string, error) { + p := b.project(ctx) + switch { + case key == "model:remove": + if err := embed.Remove(); err != nil { + return "", err + } + return "Model removed: memory search uses keywords until it is downloaded again.", nil + case key == "update:check": + return applyUpdate(ctx, func(string, string) {}, "", true) + case key == "update": + return applyUpdate(ctx, func(string, string) {}, "", false) + case key == "capture": + return quietly(ctx, runCaptureGate(on)) + case key == "memory": + return quietly(ctx, runMemoryGate(on)) + case p == nil: + return "", errNoProject + case key == "sync": + return setBackgroundSync(p.Root, on) + case key == "memory:index": + return indexMemory(ctx, p.Root, p.ScopeRoot, true, func(string) {}, func(float64) {}) + case key == "sync:now": + return quietly(ctx, runCaptureSync(false)) + case key == "sync:retry": + return quietly(ctx, runCaptureSync(true)) + case key == "agents:all": + var detected []hooks.Agent + for _, a := range hooks.All() { + if a.Detect(p.Root) { + detected = append(detected, a) + } + } + if len(detected) == 0 { + return "No supported agent was found on this machine.", nil + } + return quietly(ctx, func(c *cobra.Command, _ []string) error { + if err := installAgents(ctx, c.OutOrStdout(), p.Root, detected, false, false); err != nil { + return err + } + fmt.Fprintf(c.OutOrStdout(), "Hooked %d agent(s).\n", len(detected)) + return nil + }) + case strings.HasPrefix(key, "agent:"): + a, ok := hooks.Get(strings.TrimPrefix(key, "agent:")) + if !ok { + return "", fmt.Errorf("unknown agent %s", key) + } + return quietly(ctx, func(c *cobra.Command, _ []string) error { + if on { + return installAgents(ctx, c.OutOrStdout(), p.Root, []hooks.Agent{a}, true, false) + } + return removeAgents(ctx, c.OutOrStdout(), p.Root, []hooks.Agent{a}) + }) + } + return "", fmt.Errorf("unknown setting %s", key) +} + +// quietly runs a command's body with its output captured, and returns the +// most telling line: the first one that is not a note. +func quietly(ctx context.Context, run func(*cobra.Command, []string) error) (string, error) { + var buf bytes.Buffer + c := &cobra.Command{} + c.SetOut(&buf) + c.SetErr(&buf) + c.SetContext(ctx) + err := run(c, nil) + var last string + for _, l := range strings.Split(buf.String(), "\n") { + if l = strings.TrimSpace(l); l != "" && !strings.HasPrefix(l, "note:") { + last = l + } + } + return last, err +} diff --git a/cmd/atlas/settings_cmds_test.go b/cmd/atlas/settings_cmds_test.go new file mode 100644 index 0000000..176645e --- /dev/null +++ b/cmd/atlas/settings_cmds_test.go @@ -0,0 +1,128 @@ +package main + +import ( + "os" + "path/filepath" + "strings" + "testing" + + "github.com/tryatlas/atlas-cli/internal/clistate" + "github.com/tryatlas/atlas-cli/internal/hooks" +) + +func TestInitHooksTheAgentsGiven(t *testing.T) { + root := gitRepo(t) + code, out, e := runCmd(t, "init", "--local", "--agents", "claude-code,codex") + if code != 0 { + t.Fatalf("exit %d: %s", code, e) + } + for _, id := range []string{"claude-code", "codex"} { + a, _ := hooks.Get(id) + if a.State(root) != hooks.Current { + t.Fatalf("%s not hooked:\n%s", id, out) + } + } + if a, _ := hooks.Get("cursor"); a.State(root) != hooks.Absent { + t.Fatal("cursor was not asked for") + } + if _, err := os.Stat(filepath.Join(root, ".mcp.json")); err != nil { + t.Fatal("memory entry missing") + } + if code, _, e := runCmd(t, "init", "--local", "--yes", "--agents", "nope"); code != 1 || !strings.Contains(e, "nope is not a supported agent") { + t.Fatalf("exit %d: %s", code, e) + } +} + +func TestInitWithoutAgentFlagsHooksNothingWhenNotInteractive(t *testing.T) { + root := gitRepo(t) + if code, _, e := runCmd(t, "init", "--local"); code != 0 { + t.Fatal(e) + } + for _, a := range hooks.All() { + if a.State(root) != hooks.Absent { + t.Fatalf("%s hooked without being asked", a.ID()) + } + } +} + +func TestSyncOffAndStatus(t *testing.T) { + root := gitRepo(t) + if code, out, e := runCmd(t, "sync"); code != 1 || !strings.Contains(e+out, "init") { + t.Fatalf("exit %d: %s %s", code, out, e) + } + _, _, _ = runCmd(t, "init", "--local") + code, out, e := runCmd(t, "sync") + if code != 0 || !strings.Contains(out, "background sync off") { + t.Fatalf("exit %d: %s %s", code, out, e) + } + _ = clistate.SavePrefs(root, clistate.Prefs{BackgroundSync: true}) + if _, out, _ := runCmd(t, "sync", "status"); !strings.Contains(out, "on (not running now") { + t.Fatal(out) + } + if code, out, _ := runCmd(t, "sync", "off"); code != 0 || !strings.Contains(out, "Background sync is off.") { + t.Fatal(out) + } + if clistate.LoadPrefs(root).BackgroundSync { + t.Fatal("off must be remembered") + } + if code, _, _ := runCmd(t, "sync", "maybe"); code != 1 { + t.Fatal("only on, off and status") + } +} + +func TestSettingsPrintsWithoutATerminal(t *testing.T) { + gitRepo(t) + _, _, _ = runCmd(t, "init", "--local", "--agents", "pi") + code, out, e := runCmd(t, "settings") + if code != 0 { + t.Fatalf("exit %d: %s", code, e) + } + for _, want := range []string{"Account", "Project", "Session capture", "on", "Shared memory", "Agents", "Pi ", "Sync", "Background sync", "About", "Version"} { + if !strings.Contains(out, want) { + t.Fatalf("missing %q:\n%s", want, out) + } + } +} + +func TestSettingsBackendAppliesThroughTheCommands(t *testing.T) { + root := gitRepo(t) + _, _, _ = runCmd(t, "init", "--local") + be := &settingsBackend{cwd: root} + ctx := t.Context() + if msg, err := be.Apply(ctx, "agent:opencode", true); err != nil || !strings.Contains(msg, "OpenCode") { + t.Fatalf("%q %v", msg, err) + } + if a, _ := hooks.Get("opencode"); a.State(root) != hooks.Current { + t.Fatal("not installed") + } + if msg, err := be.Apply(ctx, "agent:opencode", false); err != nil || !strings.Contains(msg, "removed") { + t.Fatalf("%q %v", msg, err) + } + if msg, err := be.Apply(ctx, "capture", false); err != nil || !strings.Contains(msg, "paused") { + t.Fatalf("%q %v", msg, err) + } + if msg, err := be.Apply(ctx, "memory", false); err != nil || !strings.Contains(msg, "off") { + t.Fatalf("%q %v", msg, err) + } + secs, _ := be.Load(ctx) + for _, s := range secs { + for _, it := range s.Items { + if (it.Key == "capture" || it.Key == "memory") && it.On { + t.Fatalf("%s still on", it.Key) + } + } + } +} + +func TestInitCreatesTheMemoryRecord(t *testing.T) { + root := gitRepo(t) + if code, _, e := runCmd(t, "init", "--local"); code != 0 { + t.Fatal(e) + } + if _, err := os.Stat(filepath.Join(root, ".atlas", "memory", "memory.sqlite")); err != nil { + t.Fatalf("no memory record after init: %v", err) + } + if _, err := os.Stat(filepath.Join(root, ".atlas", ".gitignore")); err != nil { + t.Fatal(err) + } +} diff --git a/cmd/atlas/status_view.go b/cmd/atlas/status_view.go new file mode 100644 index 0000000..3356e73 --- /dev/null +++ b/cmd/atlas/status_view.go @@ -0,0 +1,104 @@ +package main + +import ( + "fmt" + "io" + "strings" + + "github.com/tryatlas/atlas-cli/internal/tui" +) + +// statusGroups puts atlas status's lines under the card's sections. +var statusGroups = []struct { + title string + labels []string +}{ + {"Account", []string{"Account", "Org"}}, + {"Project", []string{"Project", "Binding", "Memory at", "Memory", "Capture", "Recorder"}}, + {"Capture and sync", []string{"Sessions", "Commits", "Sync", "Record"}}, + {"Agents", []string{"Listener", "Agents", "Git hook", "Hooks", "Hook err"}}, +} + +// statusOf reads a value's first words for its dot. +func statusOf(label, value string) tui.State { + v := strings.ToLower(value) + for _, zero := range []string{"0 failed", "0 pending", "0 need attention"} { + v = strings.ReplaceAll(v, " "+zero, "") + } + has := func(words ...string) bool { + for _, w := range words { + if strings.Contains(v, w) { + return true + } + } + return false + } + switch { + case label == "Hook err" || has("failed", "broken", "refused", "unreadable", "error"): + return tui.Bad + case has("need attention", "outdated", "spooled", "not installed", "left open", "pending"): + return tui.Warn + case strings.HasPrefix(v, "off") || strings.HasPrefix(v, "paused") || strings.HasPrefix(v, "none") || strings.HasPrefix(v, "not ") || has("not signed in", "not initialised", "sync off"): + return tui.Idle + case strings.HasPrefix(v, "on") || strings.HasPrefix(v, "ok") || strings.HasPrefix(v, "idle") || has("intact", "linked up to", "sync on"): + return tui.Good + } + return tui.Neutral +} + +// renderStatus draws status lines as a card: the header, then a section per +// group, each value with its dot. +func renderStatus(w io.Writer, lines string) { + values := map[string]string{} + var order []string + for _, l := range strings.Split(strings.TrimRight(lines, "\n"), "\n") { + label, value, ok := strings.Cut(l, ":") + if !ok || strings.HasPrefix(l, " ") { + if len(order) > 0 { // a continuation of the previous value + values[order[len(order)-1]] += " " + strings.TrimSpace(l) + } + continue + } + label = strings.TrimSpace(label) + values[label] = strings.TrimSpace(value) + order = append(order, label) + } + tui.Header(w, "status") + seen := map[string]bool{} + for _, g := range statusGroups { + var has bool + for _, l := range g.labels { + if _, ok := values[l]; ok { + has = true + } + } + if !has { + continue + } + tui.Section(w, g.title) + for _, l := range g.labels { + v, ok := values[l] + if !ok { + continue + } + seen[l] = true + tui.Field(w, statusLabel(l), tui.Dot(statusOf(l, v), v)) + } + } + for _, l := range order { + if !seen[l] { + tui.Field(w, statusLabel(l), values[l]) + } + } + fmt.Fprintln(w) +} + +func statusLabel(l string) string { + switch l { + case "Org": + return "Organisation" + case "Hook err": + return "Last hook error" + } + return l +} diff --git a/cmd/atlas/status_view_test.go b/cmd/atlas/status_view_test.go new file mode 100644 index 0000000..8b042ac --- /dev/null +++ b/cmd/atlas/status_view_test.go @@ -0,0 +1,28 @@ +package main + +import ( + "testing" + + "github.com/tryatlas/atlas-cli/internal/tui" +) + +func TestStatusDots(t *testing.T) { + for _, c := range []struct { + label, value string + want tui.State + }{ + {"Sync", "ok · 1183 sent, 0 pending, 0 failed", tui.Good}, + {"Sync", "ok · 10 sent, 3 pending, 0 failed", tui.Warn}, + {"Sync", "offline · 2 failed", tui.Bad}, + {"Listener", "background sync off (sessions sync as each hook fires)", tui.Idle}, + {"Listener", "background sync on (listener pid 1)", tui.Good}, + {"Capture", "paused", tui.Idle}, + {"Sessions", "3 session(s), 1 turn(s) left open", tui.Warn}, + {"Commits", "linked up to eaa9ab0", tui.Good}, + {"Project", "/Users/x/repo", tui.Neutral}, + } { + if got := statusOf(c.label, c.value); got != c.want { + t.Errorf("%s %q = %v, want %v", c.label, c.value, got, c.want) + } + } +} diff --git a/cmd/atlas/sync_cmds.go b/cmd/atlas/sync_cmds.go new file mode 100644 index 0000000..ad2829f --- /dev/null +++ b/cmd/atlas/sync_cmds.go @@ -0,0 +1,143 @@ +package main + +import ( + "errors" + "fmt" + "io" + "os" + "time" + + "github.com/spf13/cobra" + + "github.com/tryatlas/atlas-cli/internal/clistate" + "github.com/tryatlas/atlas-cli/internal/listener" + "github.com/tryatlas/atlas-cli/internal/project" + "github.com/tryatlas/atlas-cli/internal/tui" +) + +// atlas sync [on|off]: background sync is a running atlas serve for the +// Project. on starts it and keeps it wanted, so an agent's next hook +// restarts it after a reboot; off stops it and forgets it. +func newSyncCmd() *cobra.Command { + return withRun(&cobra.Command{ + Use: "sync [on|off]", + Short: "Turn background sync on or off for this Project (a detached atlas serve), or show it", + Args: cobra.MatchAll(cobra.MaximumNArgs(1), cobra.OnlyValidArgs), + ValidArgs: []string{"on", "off", "status"}, + }, runSync) +} + +func runSync(cmd *cobra.Command, args []string) error { + out := cmd.OutOrStdout() + cwd, err := os.Getwd() + if err != nil { + return err + } + p, err := project.Discover(cmd.Context(), cwd) + if errors.Is(err, project.ErrNotInitialised) { + return errNoProject + } + if err != nil { + return err + } + switch { + case len(args) == 0 || args[0] == "status": + if interactive() { + on, note := syncState(p.Root) + tui.Header(out, "sync") + tui.Section(out, "Background sync") + if on { + tui.Field(out, "State", tui.Dot(tui.Good, "on")) + } else { + tui.Field(out, "State", tui.Dot(tui.Idle, "off")) + } + tui.Field(out, "Listener", note) + fmt.Fprintln(out) + tui.Note(out, "atlas sync on · atlas sync off") + return nil + } + printSync(out, p.Root) + return nil + case args[0] == "on": + return tui.Work(out, "Starting background sync", func(tui.StepFunc) (string, error) { + return setBackgroundSync(p.Root, true) + }) + default: + return tui.Work(out, "Stopping background sync", func(tui.StepFunc) (string, error) { + return setBackgroundSync(p.Root, false) + }) + } +} + +// setBackgroundSync records the choice and starts or stops the listener. +func setBackgroundSync(root string, on bool) (string, error) { + prefs := clistate.LoadPrefs(root) + prefs.BackgroundSync = on + if err := clistate.SavePrefs(root, prefs); err != nil { + return "", err + } + if !on { + pid, err := haltListener(root) + if err != nil { + return "", err + } + if pid == 0 { + return "Background sync is off.", nil + } + return fmt.Sprintf("Background sync is off (stopped pid %d).", pid), nil + } + if rf := listener.ReadRunFile(root); rf != nil { + return fmt.Sprintf("Background sync is on (already running, pid %d).", rf.PID), nil + } + pid, port, err := launchListener(root, 0) + if err != nil { + return "", err + } + return fmt.Sprintf("Background sync is on: listener pid %d on 127.0.0.1:%d.", pid, port), nil +} + +// syncState says whether background sync is on, and a note on the listener. +func syncState(root string) (on bool, note string) { + want := clistate.LoadPrefs(root).BackgroundSync + rf := listener.ReadRunFile(root) + switch { + case rf != nil && rf.Daemon: + return true, fmt.Sprintf("listener pid %d on 127.0.0.1:%d since %s", rf.PID, rf.Port, rf.StartedAt) + case rf != nil: + return want, fmt.Sprintf("a foreground listener runs (pid %d)", rf.PID) + case want: + return true, "not running now; the next agent hook starts it" + } + return false, "sessions sync as each hook fires" +} + +func printSync(w io.Writer, root string) { + on, note := syncState(root) + state := "off" + if on { + state = "on" + } + fmt.Fprintf(w, "Listener: background sync %s (%s)\n", state, note) +} + +// listenerRetry spaces the hooks' attempts to restart a wanted listener +// (the desktop may hold the store, and then serve cannot start). +const listenerRetry = time.Minute + +// ensureListener restarts the background listener from an agent hook when +// the user turned background sync on and none runs. It never waits. +func ensureListener(root string) { + if !clistate.LoadPrefs(root).BackgroundSync || listener.ReadRunFile(root) != nil { + return + } + mark := clistate.Path(root, "serve.spawn") + if fi, err := os.Stat(mark); err == nil && time.Since(fi.ModTime()) < listenerRetry { + return + } + _ = os.WriteFile(mark, nil, 0o600) + now := time.Now() + _ = os.Chtimes(mark, now, now) + if c, err := spawnListener(root, 0); err == nil { + _ = c.Process.Release() + } +} diff --git a/cmd/atlas/update_cmds.go b/cmd/atlas/update_cmds.go new file mode 100644 index 0000000..769e5d1 --- /dev/null +++ b/cmd/atlas/update_cmds.go @@ -0,0 +1,123 @@ +package main + +import ( + "context" + "fmt" + "os" + "runtime" + + "github.com/spf13/cobra" + + "github.com/tryatlas/atlas-cli/internal/listener" + "github.com/tryatlas/atlas-cli/internal/project" + "github.com/tryatlas/atlas-cli/internal/tui" + "github.com/tryatlas/atlas-cli/internal/update" +) + +// Seams replaced in tests. +var ( + updateSource = update.GitHub + updateTarget = update.Executable +) + +// atlas update: replace this binary with the latest release (or --version), +// verified against the release's checksums.txt like the installer does. +func newUpdateCmd() *cobra.Command { + c := withRun(leaf("update", "Update atlas to the latest release (verified against the release checksums)", cobra.NoArgs), runUpdate) + c.Flags().Bool("check", false, "only say whether a newer release exists") + c.Flags().String("version", "", "install this release tag instead of the latest (e.g. v0.3.4)") + return c +} + +func runUpdate(cmd *cobra.Command, _ []string) error { + ctx := cmd.Context() + out := cmd.OutOrStdout() + check, _ := cmd.Flags().GetBool("check") + want, _ := cmd.Flags().GetString("version") + if want != "" && want[0] != 'v' { + want = "v" + want + } + if !interactive() { + msg, err := applyUpdate(ctx, func(label, value string) { fmt.Fprintf(out, "%-10s %s\n", label+":", value) }, want, check) + if err == nil { + fmt.Fprintln(out, msg) + } + return err + } + title := "Updating atlas" + if check { + title = "Checking for a newer atlas" + } + return tui.Work(out, title, func(step tui.StepFunc) (string, error) { + return applyUpdate(ctx, func(label, value string) { step(label + " " + value) }, want, check) + }) +} + +// applyUpdate does the work and returns the closing line; each step is +// reported to step as a label and a value. +func applyUpdate(ctx context.Context, step func(label, value string), want string, check bool) (string, error) { + src := updateSource() + tag := want + if tag == "" { + step("Checking", "the latest release on GitHub") + latest, err := src.Latest(ctx) + if err != nil { + return "", fmt.Errorf("could not read the latest release: %w", err) + } + tag = latest + } + step("Installed", version) + step("Release", tag) + if want == "" && !update.Newer(version, tag) { + return fmt.Sprintf("atlas %s is up to date.", version), nil + } + if check { + return fmt.Sprintf("atlas %s is available; run atlas update.", tag), nil + } + exe, err := updateTarget() + if err != nil { + return "", err + } + step("Downloading", update.Archive(tag, runtime.GOOS, runtime.GOARCH)) + bin, err := src.Download(ctx, tag) + if err != nil { + return "", err + } + step("Verified", update.Archive(tag, runtime.GOOS, runtime.GOARCH)+" (sha256)") + if err := update.Replace(exe, bin); err != nil { + return "", fmt.Errorf("%w (reinstall with the installer, or run atlas update with write access to %s)", err, exe) + } + step("Replaced", exe) + if note := restartListener(ctx); note != "" { + step("Listener", note) + } + return fmt.Sprintf("Updated atlas %s → %s.", version, tag), nil +} + +// restartListener puts this Project's background listener on the new +// binary; a foreground one is left to its owner. +func restartListener(ctx context.Context) string { + cwd, err := os.Getwd() + if err != nil { + return "" + } + p, err := project.Discover(ctx, cwd) + if err != nil { + return "" + } + rf := listener.ReadRunFile(p.Root) + if rf == nil { + return "" + } + if !rf.Daemon { + return "a foreground atlas serve still runs the old version; restart it" + } + if _, err := haltListener(p.Root); err != nil { + return "could not stop the old listener: " + err.Error() + } + pid, _, err := launchListener(p.Root, 0) + if err != nil { + return "restart failed: " + err.Error() + } + return fmt.Sprintf("restarted on the new version (pid %d)", pid) +} diff --git a/cmd/atlas/update_cmds_test.go b/cmd/atlas/update_cmds_test.go new file mode 100644 index 0000000..8dfd1f3 --- /dev/null +++ b/cmd/atlas/update_cmds_test.go @@ -0,0 +1,83 @@ +package main + +import ( + "archive/tar" + "bytes" + "compress/gzip" + "crypto/sha256" + "encoding/hex" + "fmt" + "net/http" + "net/http/httptest" + "os" + "path/filepath" + "runtime" + "strings" + "testing" + + "github.com/tryatlas/atlas-cli/internal/update" +) + +func fakeRelease(t *testing.T, tag string, bin []byte) { + t.Helper() + var arch bytes.Buffer + zw := gzip.NewWriter(&arch) + tw := tar.NewWriter(zw) + _ = tw.WriteHeader(&tar.Header{Name: "atlas", Mode: 0o755, Size: int64(len(bin)), Typeflag: tar.TypeReg}) + _, _ = tw.Write(bin) + _ = tw.Close() + _ = zw.Close() + sum := sha256.Sum256(arch.Bytes()) + name := update.Archive(tag, runtime.GOOS, runtime.GOARCH) + mux := http.NewServeMux() + mux.HandleFunc("/api/releases/latest", func(w http.ResponseWriter, _ *http.Request) { fmt.Fprintf(w, `{"tag_name":%q}`, tag) }) + mux.HandleFunc("/dl/", func(w http.ResponseWriter, r *http.Request) { + switch filepath.Base(r.URL.Path) { + case "checksums.txt": + fmt.Fprintf(w, "%s %s\n", hex.EncodeToString(sum[:]), name) + case name: + _, _ = w.Write(arch.Bytes()) + default: + http.NotFound(w, r) + } + }) + srv := httptest.NewServer(mux) + t.Cleanup(srv.Close) + old := updateSource + updateSource = func() update.Source { + return update.Source{API: srv.URL + "/api", Base: srv.URL + "/dl", HTTP: srv.Client()} + } + t.Cleanup(func() { updateSource = old }) +} + +func TestUpdate(t *testing.T) { + fakeRelease(t, "v9.0.0", []byte("atlas 9")) + exe := filepath.Join(t.TempDir(), "atlas") + _ = os.WriteFile(exe, []byte("atlas old"), 0o755) + oldTarget, oldVersion := updateTarget, version + updateTarget = func() (string, error) { return exe, nil } + t.Cleanup(func() { updateTarget, version = oldTarget, oldVersion }) + version = "0.4.0" + + code, out, e := runCmd(t, "update", "--check") + if code != 0 || !strings.Contains(out, "atlas v9.0.0 is available") { + t.Fatalf("exit %d: %s %s", code, out, e) + } + if b, _ := os.ReadFile(exe); string(b) != "atlas old" { + t.Fatal("--check must not replace") + } + code, out, e = runCmd(t, "update") + if code != 0 || !strings.Contains(out, "Updated atlas 0.4.0 → v9.0.0.") || !strings.Contains(out, "Verified:") { + t.Fatalf("exit %d: %s %s", code, out, e) + } + if b, _ := os.ReadFile(exe); string(b) != "atlas 9" { + t.Fatalf("binary = %q", b) + } + version = "9.0.0" + if code, out, _ := runCmd(t, "update"); code != 0 || !strings.Contains(out, "atlas 9.0.0 is up to date.") { + t.Fatal(out) + } + if code, _, e := runCmd(t, "update", "--version", "8.0.0"); code != 1 || !strings.Contains(e, "atlas_8.0.0_") { + t.Fatalf("a missing release must fail: %d %s", code, e) + } +} diff --git a/docs/assets/banner.png b/docs/assets/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..4f289c45817f96334ebb45f75c760d27e36e69ca GIT binary patch literal 2011856 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%0Df4%^MFj9C-<9C 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%0A3Lwmwx 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

mIM^Hunr3Tr%q_h(G# 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

^0*pI% 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

ROvyTHI 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