atom-lite 0.1.0 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +58 -10
  3. package/dist/agent/loop.d.ts +2 -0
  4. package/dist/agent/loop.js +5 -0
  5. package/dist/agent/loop.js.map +1 -1
  6. package/dist/cli/activity.d.ts +45 -0
  7. package/dist/cli/activity.js +141 -0
  8. package/dist/cli/activity.js.map +1 -0
  9. package/dist/cli/app.js +893 -377
  10. package/dist/cli/app.js.map +1 -1
  11. package/dist/cli/approval-prompt.d.ts +24 -0
  12. package/dist/cli/approval-prompt.js +82 -0
  13. package/dist/cli/approval-prompt.js.map +1 -0
  14. package/dist/cli/banner.d.ts +5 -1
  15. package/dist/cli/banner.js +10 -4
  16. package/dist/cli/banner.js.map +1 -1
  17. package/dist/cli/commands.d.ts +89 -14
  18. package/dist/cli/commands.js +315 -52
  19. package/dist/cli/commands.js.map +1 -1
  20. package/dist/cli/diff.d.ts +1 -0
  21. package/dist/cli/diff.js +28 -0
  22. package/dist/cli/diff.js.map +1 -0
  23. package/dist/cli/input.d.ts +2 -0
  24. package/dist/cli/input.js +10 -0
  25. package/dist/cli/input.js.map +1 -0
  26. package/dist/cli/main.js +2 -2
  27. package/dist/cli/main.js.map +1 -1
  28. package/dist/cli/mouse.d.ts +54 -0
  29. package/dist/cli/mouse.js +83 -0
  30. package/dist/cli/mouse.js.map +1 -0
  31. package/dist/cli/palette.d.ts +41 -0
  32. package/dist/cli/palette.js +212 -0
  33. package/dist/cli/palette.js.map +1 -0
  34. package/dist/cli/panel.d.ts +29 -0
  35. package/dist/cli/panel.js +48 -0
  36. package/dist/cli/panel.js.map +1 -0
  37. package/dist/cli/picker.d.ts +8 -0
  38. package/dist/cli/picker.js +26 -28
  39. package/dist/cli/picker.js.map +1 -1
  40. package/dist/cli/status-line.d.ts +6 -0
  41. package/dist/cli/status-line.js +21 -7
  42. package/dist/cli/status-line.js.map +1 -1
  43. package/dist/cli/stream-text.d.ts +4 -8
  44. package/dist/cli/stream-text.js +25 -12
  45. package/dist/cli/stream-text.js.map +1 -1
  46. package/dist/cli/theme.d.ts +48 -0
  47. package/dist/cli/theme.js +158 -0
  48. package/dist/cli/theme.js.map +1 -0
  49. package/dist/cli/tool-box.d.ts +41 -0
  50. package/dist/cli/tool-box.js +177 -0
  51. package/dist/cli/tool-box.js.map +1 -0
  52. package/dist/cli/transcript.d.ts +9 -0
  53. package/dist/cli/transcript.js +25 -1
  54. package/dist/cli/transcript.js.map +1 -1
  55. package/dist/config/defaults.d.ts +10 -0
  56. package/dist/config/defaults.js +10 -0
  57. package/dist/config/defaults.js.map +1 -1
  58. package/dist/config/load.d.ts +2 -0
  59. package/dist/config/load.js +32 -0
  60. package/dist/config/load.js.map +1 -1
  61. package/dist/config/schema.d.ts +49 -0
  62. package/dist/config/schema.js +31 -0
  63. package/dist/config/schema.js.map +1 -1
  64. package/dist/config/write.d.ts +2 -0
  65. package/dist/config/write.js +9 -0
  66. package/dist/config/write.js.map +1 -1
  67. package/dist/context/builder.d.ts +7 -0
  68. package/dist/context/builder.js +11 -0
  69. package/dist/context/builder.js.map +1 -0
  70. package/dist/extensions/api.d.ts +51 -0
  71. package/dist/extensions/api.js +101 -0
  72. package/dist/extensions/api.js.map +1 -0
  73. package/dist/extensions/discovery.d.ts +26 -0
  74. package/dist/extensions/discovery.js +243 -0
  75. package/dist/extensions/discovery.js.map +1 -0
  76. package/dist/extensions/loader.d.ts +27 -0
  77. package/dist/extensions/loader.js +113 -0
  78. package/dist/extensions/loader.js.map +1 -0
  79. package/dist/extensions/trust.d.ts +4 -0
  80. package/dist/extensions/trust.js +40 -0
  81. package/dist/extensions/trust.js.map +1 -0
  82. package/dist/extensions/types.d.ts +52 -0
  83. package/dist/extensions/types.js +2 -0
  84. package/dist/extensions/types.js.map +1 -0
  85. package/dist/index.d.ts +1 -0
  86. package/dist/index.js +1 -0
  87. package/dist/index.js.map +1 -1
  88. package/dist/mcp/client.d.ts +73 -0
  89. package/dist/mcp/client.js +363 -0
  90. package/dist/mcp/client.js.map +1 -0
  91. package/dist/mcp/format.d.ts +3 -0
  92. package/dist/mcp/format.js +37 -0
  93. package/dist/mcp/format.js.map +1 -0
  94. package/dist/mcp/index.d.ts +6 -0
  95. package/dist/mcp/index.js +7 -0
  96. package/dist/mcp/index.js.map +1 -0
  97. package/dist/mcp/manager.d.ts +53 -0
  98. package/dist/mcp/manager.js +349 -0
  99. package/dist/mcp/manager.js.map +1 -0
  100. package/dist/mcp/stdio-transport.d.ts +26 -0
  101. package/dist/mcp/stdio-transport.js +191 -0
  102. package/dist/mcp/stdio-transport.js.map +1 -0
  103. package/dist/mcp/tools.d.ts +22 -0
  104. package/dist/mcp/tools.js +162 -0
  105. package/dist/mcp/tools.js.map +1 -0
  106. package/dist/mcp/types.d.ts +92 -0
  107. package/dist/mcp/types.js +2 -0
  108. package/dist/mcp/types.js.map +1 -0
  109. package/dist/providers/factory.js +1 -0
  110. package/dist/providers/factory.js.map +1 -1
  111. package/dist/runtime/executor.d.ts +2 -0
  112. package/dist/runtime/executor.js +4 -0
  113. package/dist/runtime/executor.js.map +1 -0
  114. package/dist/runtime/scheduler.js +7 -0
  115. package/dist/runtime/scheduler.js.map +1 -1
  116. package/dist/sessions/events.d.ts +9 -0
  117. package/dist/sessions/events.js +11 -6
  118. package/dist/sessions/events.js.map +1 -1
  119. package/dist/sessions/history.d.ts +18 -0
  120. package/dist/sessions/history.js +76 -0
  121. package/dist/sessions/history.js.map +1 -0
  122. package/dist/sessions/index.d.ts +2 -0
  123. package/dist/sessions/index.js +2 -0
  124. package/dist/sessions/index.js.map +1 -1
  125. package/dist/sessions/search.d.ts +16 -0
  126. package/dist/sessions/search.js +136 -0
  127. package/dist/sessions/search.js.map +1 -0
  128. package/dist/sessions/store.js +5 -1
  129. package/dist/sessions/store.js.map +1 -1
  130. package/dist/tools/edit.js +2 -1
  131. package/dist/tools/edit.js.map +1 -1
  132. package/dist/types.d.ts +2 -1
  133. package/dist/types.js.map +1 -1
  134. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,52 @@ All notable changes to this project are documented here.
5
5
  The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [Unreleased]
9
+
10
+ ### Added
11
+
12
+ ## [0.4.1] - 2026-11-04
13
+
14
+ ### Fixed
15
+
16
+ - npm publish retry after staged 0.4.0 conflict.
17
+
18
+ ## [0.4.0] - 2026-11-04
19
+
20
+ ### Added
21
+
22
+ - Extension discovery and manifest parsing (`src/extensions/discovery.ts`).
23
+ - Project trust gating and extension loader lifecycle with `/extensions`.
24
+ - `/export` for sessions.
25
+ - Markdown rendering for assistant responses and unified diff summaries in tool boxes.
26
+ - Literal edit replacement handling.
27
+ - Escape to cancel an active turn.
28
+ - TUI mouse capture fixes.
29
+
30
+ ### Fixed
31
+
32
+ - Mouse capture sequence and startup ordering for TUI mouse support.
33
+
34
+ [0.4.0]: https://github.com/beast-ofcourse/atom-lite/releases/tag/v0.4.0
35
+
36
+ ## [0.3.1] - 2026-11-04
37
+
38
+ ### Added
39
+
40
+ - MCP client over stdio: user-config-only `mcpServers`, lazy connections, tool
41
+ discovery and execution as `mcp__<server>__<tool>`, refresh on
42
+ `tools/list_changed`, `/mcp` and `/mcp reconnect`, and `/doctor` health.
43
+ - Session picker and search (`/sessions`, `/search`), resume in place, and
44
+ `/session rename`.
45
+ - Command palette (`ctrl+p`), semantic theme registry, and TUI mouse support.
46
+ - Configuration reference and documentation index.
47
+
48
+ ### Fixed
49
+
50
+ - Ollama provider profiles now forward the `think` option to the adapter.
51
+
52
+ [0.3.1]: https://github.com/beast-ofcourse/atom-lite/releases/tag/v0.3.1
53
+
8
54
  ## [0.1.0] - 2026-11-04
9
55
 
10
56
  ### Added
package/README.md CHANGED
@@ -6,9 +6,9 @@
6
6
  [![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](./LICENSE)
8
8
 
9
- **Atom-lite** is a local-first, model-agnostic coding agent with an intentionally small harness: one agent loop, exactly four built-in tools (`read`, `write`, `edit`, `bash`), a deterministic conflict-aware scheduler, durable JSONL sessions, and explicit safety boundaries. It runs against local or hosted model providers through interchangeable adapters — no cloud account, telemetry service, or hosted control plane required.
9
+ **Atom-lite** is a local-first, model-agnostic coding agent with an intentionally small harness: one agent loop, four core built-in tools (`read`, `write`, `edit`, `bash`) plus network tools (`webfetch`, `websearch`), a deterministic conflict-aware scheduler, durable JSONL sessions, and explicit safety boundaries. It runs against local or hosted model providers through interchangeable adapters — no cloud account, telemetry service, or hosted control plane required.
10
10
 
11
- > Working title: *ThinAgent*. See [`project-overview.md`](./project-overview.md) for the full architecture blueprint, [`GLOSSARY.md`](./GLOSSARY.md) for domain vocabulary, and [`docs/adr/`](./docs/adr/) for architectural decisions.
11
+ > See [`docs/README.md`](./docs/README.md) for the documentation index and [`docs/adr/`](./docs/adr/) for architectural decisions.
12
12
 
13
13
  ---
14
14
 
@@ -35,13 +35,13 @@
35
35
 
36
36
  Most coding agents accumulate tools, sub-agents, planning frameworks, retrieval pipelines, and orchestration layers until the harness itself becomes the product. Atom-lite takes the opposite stance:
37
37
 
38
- - **Small core, strong primitives.** The core contains only a provider interface, a session model, a single agent loop, four tools, a scheduler/executor, context-window management, configuration, and a CLI.
38
+ - **Small core, strong primitives.** The core contains only a provider interface, a session model, a single agent loop, four core tools plus two network tools, a scheduler/executor, context-window management, configuration, and a CLI.
39
39
  - **The model decides; the runtime enforces.** The model chooses which tool to call and what to do next. The runtime validates arguments, enforces workspace boundaries, applies approval rules, schedules calls safely, and returns accurate results. There is no hard-coded "plan → inspect → edit → test" workflow.
40
40
  - **Thin harness, not weak engineering.** Provider-specific formats, streaming failures, concurrent file access, shell timeouts, large outputs, context exhaustion, and session recovery are all handled — they are the reliability layer that makes a small harness useful.
41
41
 
42
42
  ## Features
43
43
 
44
- - **Four general-purpose tools** — `read`, `write`, `edit`, `bash`. Everything else (search, tests, git, builds) goes through `bash`.
44
+ - **Six built-in tools** — four core tools (`read`, `write`, `edit`, `bash`) plus `webfetch` and `websearch`. Everything else (search, tests, git, builds) goes through `bash`.
45
45
  - **Single agent loop** — one agent, one conversation, one tool registry, one control loop. Parallelism lives inside a tool-call batch.
46
46
  - **Conflict-aware scheduler** — per-file read/write locks and a global bash barrier. Parallelism is governed by resource conflicts, not applied blindly.
47
47
  - **Durable sessions** — append-only JSONL event logs, resumable across CLI restarts, grouped by workspace.
@@ -51,6 +51,7 @@ Most coding agents accumulate tools, sub-agents, planning frameworks, retrieval
51
51
  - **Hash guards** — `expected_hash` rejects stale `write`/`edit` operations when the file changed since it was read.
52
52
  - **Provider-agnostic** — Ollama, Gemini, and any OpenAI-compatible endpoint (LM Studio, llama.cpp, Kilo AI Gateway, OpenAI, Anthropic, OpenRouter, Groq, Mistral, xAI, …).
53
53
  - **Interactive provider/model pickers** — `/provider` adds a provider and stores its key securely; `/model` fuzzy-searches every configured provider's models.
54
+ - **Command palette and themes** — `ctrl+p` fuzzy-searches commands, skills, providers, models, themes, and recent sessions. `/theme` switches between auto, dark, light, and no-colour modes.
54
55
  - **Local-first** — runs fully against local providers with no cloud account, telemetry, or hosted database.
55
56
  - **Safe path handling** — file tools resolve against the workspace and reject escapes; shell is an explicit, sandbox-aware boundary.
56
57
 
@@ -141,13 +142,14 @@ Example `config.json`:
141
142
  }
142
143
  ```
143
144
 
144
- See [`project-overview.md`](./project-overview.md) for the full configuration shape.
145
+ See [`docs/configuration.md`](./docs/configuration.md) for every field, default, and precedence rule.
145
146
 
146
147
  ## Usage
147
148
 
148
149
  ```
149
150
  atom-lite [task] [--provider NAME] [--model MODEL] [--continue] [--session ID]
150
- [--no-tools] [--json] [--debug] [--version] [--help]
151
+ [--list-sessions] [--search-sessions QUERY] [--no-tools] [--json]
152
+ [--debug] [--theme NAME] [--no-color] [--version] [--help]
151
153
  ```
152
154
 
153
155
  | Flag | Description |
@@ -157,12 +159,24 @@ atom-lite [task] [--provider NAME] [--model MODEL] [--continue] [--session ID]
157
159
  | `--model MODEL` | Override the model for this run |
158
160
  | `--continue` | Resume the most recent session in this workspace |
159
161
  | `--session ID` | Resume a specific session |
162
+ | `--list-sessions` | Print the session index and exit |
163
+ | `--search-sessions QUERY` | Print matching sessions with snippets and exit |
160
164
  | `--no-tools` | Disable all tools (model-only chat) |
161
165
  | `--json` | Non-interactive JSON output |
162
166
  | `--debug` | Debug logging |
167
+ | `--theme NAME` | Use `auto`, `dark`, `light`, or `ansi` for this run |
168
+ | `--no-color` | Force the no-colour theme |
163
169
  | `--version` | Print version |
164
170
  | `--help` | Show help |
165
171
 
172
+ In the TUI, type `/help` to see every command grouped by category, or press
173
+ `ctrl+p` for the fuzzy command palette. `/theme` opens a live-preview picker and
174
+ persists your choice to user config; `NO_COLOR` and `--no-color` always win.
175
+ `/sessions` opens a searchable session picker scoped to the current workspace,
176
+ with a toggle for all workspaces, and `/search <query>` prints matching sessions
177
+ with content snippets. Mouse wheel scrolling and click-to-focus are enabled for
178
+ interactive terminals and can be disabled with `ui.mouse: false`.
179
+
166
180
  ## Tools
167
181
 
168
182
  Four core tools (see [ADR 0001](./docs/adr/0001-four-built-in-tools-only.md)) plus the additive network tools from [ADR 0006](./docs/adr/0006-expanded-toolset.md):
@@ -205,10 +219,37 @@ The selected provider/model is persisted to the user config, so the next session
205
219
  - **No secrets in config** — interactive provider setup stores API keys in `~/.config/atom-lite/credentials.json` with `0600` permissions; environment variables still take precedence.
206
220
  - **Local-first** — no cloud account, telemetry, or remote control plane required (see [ADR 0004](./docs/adr/0004-local-first-no-cloud-dependency.md)).
207
221
 
222
+ ## Commands
223
+
224
+ Type `/help` for the grouped list, or press `ctrl+p` for the fuzzy command
225
+ palette. Common commands:
226
+
227
+ | Command | Description |
228
+ | --- | --- |
229
+ | `/model [model]` | Show or switch the active model |
230
+ | `/provider [profile]` | Show or switch the active provider |
231
+ | `/effort [low\|medium\|high]` | Set reasoning effort |
232
+ | `/session [rename <title>]` | Show or rename the current session |
233
+ | `/sessions [all]` | Search and resume a session |
234
+ | `/search <query>` | Search sessions by title or content |
235
+ | `/export [path]` | Export the session transcript |
236
+ | `/mcp [reconnect [server]]` | Inspect or reconnect MCP servers |
237
+ | `/extensions` | List loaded extensions |
238
+ | `/compact` | Compact older context |
239
+ | `/clear` | Clear the transcript view |
240
+ | `/approval` | Change approval mode |
241
+ | `/doctor` | Run diagnostics |
242
+ | `/thinking` | Toggle thinking display |
243
+ | `/theme [auto\|dark\|light\|ansi]` | Switch theme |
244
+ | `/skills`, `/skill <name>` | List or load a skill |
245
+ | `/exit` | Exit the TUI |
246
+
208
247
  ## Sessions
209
248
 
210
249
  Sessions are append-only JSONL event logs recording everything that happened in one conversation. They are resumable across CLI restarts and grouped by workspace. Stored under the session store (see `src/sessions/`). Compaction summarizes older history to stay within the context budget while retaining the full transcript.
211
250
 
251
+ The session index derives a title from the first user message unless `/session rename <title>` overrides it, and records the provider, update time, and message count. `/sessions` resumes a session in place: retained messages are replayed into the transcript and a `session_resumed` event is appended. `/search <query>` matches titles, message content, and workspace paths, ranking title hits first. `--list-sessions` and `--search-sessions` print the same index as stable tab-separated rows for scripts.
252
+
212
253
  ## Context management
213
254
 
214
255
  The context manager builds model input, estimates tokens, and triggers compaction before the context budget is exceeded. It also loads project instructions (e.g. `AGENTS.md`/`CLAUDE.md`-style files) subject to `maxProjectInstructionBytes`.
@@ -232,7 +273,10 @@ Tests live in `tests/` (agent, config, runtime, tools). The project is TypeScrip
232
273
  1. Update `version` in `package.json` and add a `CHANGELOG.md` entry.
233
274
  2. Run `npm run typecheck && npm test && npm run bench`.
234
275
  3. Commit, then tag and push: `git tag vX.Y.Z && git push origin master --tags`.
235
- 4. The `Release` GitHub workflow publishes to npm with provenance and creates the GitHub release. It requires an `NPM_TOKEN` repository secret with publish access.
276
+ 4. The `Release` workflow stages the package on npm with provenance and opens a draft GitHub release. It requires an `NPM_TOKEN` repository secret with publish access.
277
+ 5. Approve the staged version on npm (Staged Packages tab, or `npm stage approve <stage-id>` with 2FA), then publish the draft release on GitHub.
278
+
279
+ npm requires a maintainer with 2FA to approve staged releases; CI cannot complete that step.
236
280
 
237
281
  ## Architecture
238
282
 
@@ -246,7 +290,7 @@ src/
246
290
  runtime/ # scheduler, approvals
247
291
  security/ # paths, process, redaction
248
292
  sessions/ # store, events, recovery
249
- tools/ # read, write, edit, bash, registry
293
+ tools/ # read, write, edit, bash, webfetch, websearch, registry
250
294
  ```
251
295
 
252
296
  Key design decisions are recorded as ADRs in [`docs/adr/`](./docs/adr/):
@@ -255,11 +299,15 @@ Key design decisions are recorded as ADRs in [`docs/adr/`](./docs/adr/):
255
299
  - [0002 — Single agent loop, no sub-agents in v1](./docs/adr/0002-single-agent-loop.md)
256
300
  - [0003 — `bash` is a global exclusive barrier](./docs/adr/0003-bash-as-global-exclusive-barrier.md)
257
301
  - [0004 — Local-first, no cloud dependency](./docs/adr/0004-local-first-no-cloud-dependency.md)
258
- - [0005 — OpenTUI for the terminal UI](./docs/adr/0005-opentui-for-terminal-ui.md)
302
+ - [0005 — OpenTUI for the terminal UI](./docs/adr/0005-opentui-for-terminal-ui.md) (superseded by 0007)
303
+ - [0006 — Expanded built-in toolset (webfetch, websearch)](./docs/adr/0006-expanded-toolset.md)
304
+ - [0007 — pi-tui replaces OpenTUI](./docs/adr/0007-pi-tui-replaces-opentui.md)
259
305
 
260
306
  ## Contributing
261
307
 
262
- Issues and specs live as markdown under `.scratch/` (see [`docs/agents/issue-tracker.md`](./docs/agents/issue-tracker.md)). Domain vocabulary is in [`GLOSSARY.md`](./GLOSSARY.md). Please keep changes consistent with the "small core" principle: new tools require strong justification against ADR 0001.
308
+ Read [`CONTRIBUTING.md`](./CONTRIBUTING.md) before opening a pull request. Issues and specs live as markdown under `.scratch/` (see [`docs/agents/issue-tracker.md`](./docs/agents/issue-tracker.md)). Please keep changes consistent with the "small core" principle: new tools require strong justification against ADR 0001.
309
+
310
+ Report vulnerabilities privately as described in [`SECURITY.md`](./SECURITY.md).
263
311
 
264
312
  ## License
265
313
 
@@ -22,6 +22,8 @@ export declare class AgentRuntime {
22
22
  getContextUsage(): ContextUsage;
23
23
  private emitContextUsage;
24
24
  setEffort(effort: string): void;
25
+ /** Replace the toolset, e.g. after MCP discovery or a list_changed refresh. */
26
+ setTools(tools: AgentRuntimeOptions["tools"]): void;
25
27
  getEffort(): string;
26
28
  runAgentTurn(input: string, session: {
27
29
  messages: Message[];
@@ -76,6 +76,11 @@ export class AgentRuntime {
76
76
  setEffort(effort) {
77
77
  this.effort = effort;
78
78
  }
79
+ /** Replace the toolset, e.g. after MCP discovery or a list_changed refresh. */
80
+ setTools(tools) {
81
+ this.tools = tools;
82
+ this.toolMap = new Map(tools.map((t) => [t.definition.name, t]));
83
+ }
79
84
  getEffort() {
80
85
  return this.effort;
81
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/agent/loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { type Theme } from "./theme.js";
2
+ export type ActivityPhase = "idle" | "formulating" | "thinking" | "working" | "waiting";
3
+ export declare const SPINNER_FRAMES: string[];
4
+ /** Verb pools keep the indicator lively without being distracting. */
5
+ export declare const ACTIVITY_VERBS: Record<Exclude<ActivityPhase, "idle" | "waiting">, string[]>;
6
+ export interface ActivityOptions {
7
+ now?: () => number;
8
+ /** How often the spinner advances. */
9
+ frameIntervalMs?: number;
10
+ /** How often the verb rotates. */
11
+ verbIntervalMs?: number;
12
+ theme?: Theme;
13
+ onChange?: () => void;
14
+ }
15
+ /** Format an elapsed duration compactly: 4s, 1m 05s, 1h 02m. */
16
+ export declare function formatElapsed(ms: number): string;
17
+ /**
18
+ * Animated activity indicator. The app feeds it agent events and it produces a
19
+ * single status line: idle, spinning with a rotating verb, or waiting for an
20
+ * approval decision.
21
+ */
22
+ export declare class Activity {
23
+ private phase;
24
+ private startedAt;
25
+ private detail;
26
+ private timer;
27
+ private readonly now;
28
+ private readonly frameIntervalMs;
29
+ private readonly verbIntervalMs;
30
+ private theme;
31
+ private readonly onChange;
32
+ constructor(options?: ActivityOptions);
33
+ setTheme(theme: Theme): void;
34
+ get active(): boolean;
35
+ get elapsedMs(): number;
36
+ /** Begin a new turn, resetting the elapsed timer. */
37
+ start(phase?: Exclude<ActivityPhase, "idle">, detail?: string): void;
38
+ /** Move to another phase without resetting the turn timer. */
39
+ setPhase(phase: ActivityPhase, detail?: string): void;
40
+ stop(): void;
41
+ /** Render the current state as a status-line fragment. */
42
+ text(): string;
43
+ private ensureTimer;
44
+ private clearTimer;
45
+ }
@@ -0,0 +1,141 @@
1
+ import { darkTheme } from "./theme.js";
2
+ export const SPINNER_FRAMES = [
3
+ "⠋",
4
+ "⠙",
5
+ "⠹",
6
+ "⠸",
7
+ "⠼",
8
+ "⠴",
9
+ "⠦",
10
+ "⠧",
11
+ "⠇",
12
+ "⠏",
13
+ ];
14
+ /** Verb pools keep the indicator lively without being distracting. */
15
+ export const ACTIVITY_VERBS = {
16
+ formulating: ["formulating", "planning", "lining things up"],
17
+ thinking: ["thinking", "pondering", "reasoning", "mulling it over"],
18
+ working: ["working", "cooking", "crafting", "building", "brewing"],
19
+ };
20
+ /** Format an elapsed duration compactly: 4s, 1m 05s, 1h 02m. */
21
+ export function formatElapsed(ms) {
22
+ const totalSeconds = Math.max(0, Math.floor(ms / 1000));
23
+ if (totalSeconds < 60)
24
+ return `${totalSeconds}s`;
25
+ const minutes = Math.floor(totalSeconds / 60);
26
+ const seconds = totalSeconds % 60;
27
+ if (minutes < 60)
28
+ return `${minutes}m ${String(seconds).padStart(2, "0")}s`;
29
+ const hours = Math.floor(minutes / 60);
30
+ return `${hours}h ${String(minutes % 60).padStart(2, "0")}m`;
31
+ }
32
+ const PHASE_COLOR = {
33
+ formulating: "warning",
34
+ thinking: "warning",
35
+ working: "accent",
36
+ };
37
+ function capitalize(text) {
38
+ return text.length === 0 ? text : text[0].toUpperCase() + text.slice(1);
39
+ }
40
+ /**
41
+ * Animated activity indicator. The app feeds it agent events and it produces a
42
+ * single status line: idle, spinning with a rotating verb, or waiting for an
43
+ * approval decision.
44
+ */
45
+ export class Activity {
46
+ phase = "idle";
47
+ startedAt = null;
48
+ detail;
49
+ timer = null;
50
+ now;
51
+ frameIntervalMs;
52
+ verbIntervalMs;
53
+ theme;
54
+ onChange;
55
+ constructor(options = {}) {
56
+ this.now = options.now ?? (() => Date.now());
57
+ this.frameIntervalMs = Math.max(16, options.frameIntervalMs ?? 120);
58
+ this.verbIntervalMs = Math.max(this.frameIntervalMs, options.verbIntervalMs ?? 2400);
59
+ this.theme = options.theme ?? darkTheme;
60
+ this.onChange = options.onChange ?? (() => { });
61
+ }
62
+ setTheme(theme) {
63
+ this.theme = theme;
64
+ this.onChange();
65
+ }
66
+ get active() {
67
+ return this.phase !== "idle";
68
+ }
69
+ get elapsedMs() {
70
+ if (this.phase === "idle" || this.startedAt === null)
71
+ return 0;
72
+ return Math.max(0, this.now() - this.startedAt);
73
+ }
74
+ /** Begin a new turn, resetting the elapsed timer. */
75
+ start(phase = "formulating", detail) {
76
+ this.phase = phase;
77
+ this.startedAt = this.now();
78
+ this.detail = detail;
79
+ this.ensureTimer();
80
+ this.onChange();
81
+ }
82
+ /** Move to another phase without resetting the turn timer. */
83
+ setPhase(phase, detail) {
84
+ if (phase === "idle") {
85
+ this.stop();
86
+ return;
87
+ }
88
+ if (this.phase === "idle" || this.startedAt === null) {
89
+ this.startedAt = this.now();
90
+ }
91
+ this.phase = phase;
92
+ this.detail = detail;
93
+ if (phase === "waiting") {
94
+ this.clearTimer();
95
+ }
96
+ else {
97
+ this.ensureTimer();
98
+ }
99
+ this.onChange();
100
+ }
101
+ stop() {
102
+ const wasActive = this.phase !== "idle";
103
+ this.phase = "idle";
104
+ this.detail = undefined;
105
+ this.startedAt = null;
106
+ this.clearTimer();
107
+ if (wasActive)
108
+ this.onChange();
109
+ }
110
+ /** Render the current state as a status-line fragment. */
111
+ text() {
112
+ const tokens = this.theme.tokens;
113
+ if (this.phase === "idle") {
114
+ return `${tokens.success("●")} ${tokens.dim("ready")}`;
115
+ }
116
+ if (this.phase === "waiting") {
117
+ return `${tokens.warning("◉")} ${tokens.warning("Waiting for approval")} ${tokens.dim("· y approve n deny t trust")}`;
118
+ }
119
+ const elapsed = this.elapsedMs;
120
+ const frame = SPINNER_FRAMES[Math.floor(elapsed / this.frameIntervalMs) % SPINNER_FRAMES.length];
121
+ const verbs = ACTIVITY_VERBS[this.phase];
122
+ const verb = verbs[Math.floor(elapsed / this.verbIntervalMs) % verbs.length];
123
+ const color = tokens[PHASE_COLOR[this.phase]];
124
+ const detail = this.detail ? tokens.dim(` · ${this.detail}`) : "";
125
+ return `${color(frame)} ${color(`${capitalize(verb)}…`)} ${tokens.dim(formatElapsed(elapsed))}${detail}`;
126
+ }
127
+ ensureTimer() {
128
+ if (this.timer)
129
+ return;
130
+ this.timer = setInterval(() => this.onChange(), this.frameIntervalMs);
131
+ // Do not keep the process alive solely for the spinner.
132
+ this.timer.unref?.();
133
+ }
134
+ clearTimer() {
135
+ if (!this.timer)
136
+ return;
137
+ clearInterval(this.timer);
138
+ this.timer = null;
139
+ }
140
+ }
141
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/cli/activity.ts"],"names":[],"mappings":"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"}