@aragon-agent/cli 0.4.3

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 (156) hide show
  1. package/CHANGELOG.md +292 -0
  2. package/README.md +558 -0
  3. package/dist/agent/coalesce.d.ts +14 -0
  4. package/dist/agent/coalesce.js +41 -0
  5. package/dist/agent/controller.d.ts +132 -0
  6. package/dist/agent/controller.js +332 -0
  7. package/dist/agent/headless.d.ts +22 -0
  8. package/dist/agent/headless.js +74 -0
  9. package/dist/agent/reducer.d.ts +181 -0
  10. package/dist/agent/reducer.js +420 -0
  11. package/dist/agent/system-prompt.d.ts +30 -0
  12. package/dist/agent/system-prompt.js +58 -0
  13. package/dist/agent/usage.d.ts +13 -0
  14. package/dist/agent/usage.js +41 -0
  15. package/dist/cli.d.ts +11 -0
  16. package/dist/cli.js +482 -0
  17. package/dist/commands/builtins.d.ts +16 -0
  18. package/dist/commands/builtins.js +223 -0
  19. package/dist/commands/registry.d.ts +48 -0
  20. package/dist/commands/registry.js +45 -0
  21. package/dist/commands/skills.d.ts +22 -0
  22. package/dist/commands/skills.js +625 -0
  23. package/dist/config/app-paths.d.ts +11 -0
  24. package/dist/config/app-paths.js +16 -0
  25. package/dist/config/env.d.ts +28 -0
  26. package/dist/config/env.js +92 -0
  27. package/dist/config/load.d.ts +48 -0
  28. package/dist/config/load.js +158 -0
  29. package/dist/config/migrate-legacy-state.d.ts +78 -0
  30. package/dist/config/migrate-legacy-state.js +181 -0
  31. package/dist/config/schema.d.ts +249 -0
  32. package/dist/config/schema.js +247 -0
  33. package/dist/config/store.d.ts +44 -0
  34. package/dist/config/store.js +126 -0
  35. package/dist/input/keymap.d.ts +20 -0
  36. package/dist/input/keymap.js +85 -0
  37. package/dist/session/persist.d.ts +24 -0
  38. package/dist/session/persist.js +51 -0
  39. package/dist/skills/archive.d.ts +41 -0
  40. package/dist/skills/archive.js +152 -0
  41. package/dist/skills/cli-commands.d.ts +52 -0
  42. package/dist/skills/cli-commands.js +502 -0
  43. package/dist/skills/fetch-source.d.ts +104 -0
  44. package/dist/skills/fetch-source.js +448 -0
  45. package/dist/skills/installer.d.ts +117 -0
  46. package/dist/skills/installer.js +414 -0
  47. package/dist/skills/lock.d.ts +75 -0
  48. package/dist/skills/lock.js +223 -0
  49. package/dist/skills/manifest.d.ts +47 -0
  50. package/dist/skills/manifest.js +95 -0
  51. package/dist/skills/node-host.d.ts +23 -0
  52. package/dist/skills/node-host.js +59 -0
  53. package/dist/skills/paths.d.ts +61 -0
  54. package/dist/skills/paths.js +107 -0
  55. package/dist/skills/service.d.ts +256 -0
  56. package/dist/skills/service.js +730 -0
  57. package/dist/skills/tools.d.ts +35 -0
  58. package/dist/skills/tools.js +164 -0
  59. package/dist/skills/updater.d.ts +101 -0
  60. package/dist/skills/updater.js +330 -0
  61. package/dist/skills/usage.d.ts +72 -0
  62. package/dist/skills/usage.js +216 -0
  63. package/dist/tools/bash-tool.d.ts +12 -0
  64. package/dist/tools/bash-tool.js +131 -0
  65. package/dist/tools/diff.d.ts +15 -0
  66. package/dist/tools/diff.js +50 -0
  67. package/dist/tools/fs-tools.d.ts +16 -0
  68. package/dist/tools/fs-tools.js +215 -0
  69. package/dist/tools/index.d.ts +93 -0
  70. package/dist/tools/index.js +157 -0
  71. package/dist/tools/search-tools.d.ts +11 -0
  72. package/dist/tools/search-tools.js +225 -0
  73. package/dist/ui/App.d.ts +24 -0
  74. package/dist/ui/App.js +522 -0
  75. package/dist/ui/AutocompletePopup.d.ts +21 -0
  76. package/dist/ui/AutocompletePopup.js +19 -0
  77. package/dist/ui/Composer.d.ts +40 -0
  78. package/dist/ui/Composer.js +61 -0
  79. package/dist/ui/Header.d.ts +30 -0
  80. package/dist/ui/Header.js +25 -0
  81. package/dist/ui/Logo.d.ts +50 -0
  82. package/dist/ui/Logo.js +85 -0
  83. package/dist/ui/Markdown.d.ts +23 -0
  84. package/dist/ui/Markdown.js +122 -0
  85. package/dist/ui/PromptInput.d.ts +81 -0
  86. package/dist/ui/PromptInput.js +383 -0
  87. package/dist/ui/SessionOpener.d.ts +30 -0
  88. package/dist/ui/SessionOpener.js +12 -0
  89. package/dist/ui/StatusBar.d.ts +39 -0
  90. package/dist/ui/StatusBar.js +43 -0
  91. package/dist/ui/ToastStack.d.ts +24 -0
  92. package/dist/ui/ToastStack.js +38 -0
  93. package/dist/ui/Transcript.d.ts +62 -0
  94. package/dist/ui/Transcript.js +128 -0
  95. package/dist/ui/capabilities.d.ts +25 -0
  96. package/dist/ui/capabilities.js +59 -0
  97. package/dist/ui/console-bridge.d.ts +19 -0
  98. package/dist/ui/console-bridge.js +52 -0
  99. package/dist/ui/density.d.ts +26 -0
  100. package/dist/ui/density.js +34 -0
  101. package/dist/ui/entries/AssistantEntry.d.ts +23 -0
  102. package/dist/ui/entries/AssistantEntry.js +13 -0
  103. package/dist/ui/entries/EntryFrame.d.ts +23 -0
  104. package/dist/ui/entries/EntryFrame.js +6 -0
  105. package/dist/ui/entries/ToolCard.d.ts +38 -0
  106. package/dist/ui/entries/ToolCard.js +72 -0
  107. package/dist/ui/entries/ToolPreview.d.ts +57 -0
  108. package/dist/ui/entries/ToolPreview.js +144 -0
  109. package/dist/ui/entries/UserEntry.d.ts +14 -0
  110. package/dist/ui/entries/UserEntry.js +5 -0
  111. package/dist/ui/exit-snapshot.d.ts +27 -0
  112. package/dist/ui/exit-snapshot.js +26 -0
  113. package/dist/ui/gauge.d.ts +24 -0
  114. package/dist/ui/gauge.js +36 -0
  115. package/dist/ui/glyphs.d.ts +87 -0
  116. package/dist/ui/glyphs.js +127 -0
  117. package/dist/ui/gradient.d.ts +11 -0
  118. package/dist/ui/gradient.js +50 -0
  119. package/dist/ui/layout/AppShell.d.ts +24 -0
  120. package/dist/ui/layout/AppShell.js +9 -0
  121. package/dist/ui/layout/Gutter.d.ts +67 -0
  122. package/dist/ui/layout/Gutter.js +42 -0
  123. package/dist/ui/layout/OverlayFrame.d.ts +62 -0
  124. package/dist/ui/layout/OverlayFrame.js +92 -0
  125. package/dist/ui/layout/ScrollViewport.d.ts +33 -0
  126. package/dist/ui/layout/ScrollViewport.js +71 -0
  127. package/dist/ui/layout/budget.d.ts +42 -0
  128. package/dist/ui/layout/budget.js +47 -0
  129. package/dist/ui/layout/frame.d.ts +58 -0
  130. package/dist/ui/layout/frame.js +75 -0
  131. package/dist/ui/layout/overlay-window.d.ts +43 -0
  132. package/dist/ui/layout/overlay-window.js +51 -0
  133. package/dist/ui/layout/scroll.d.ts +28 -0
  134. package/dist/ui/layout/scroll.js +76 -0
  135. package/dist/ui/layout/useTerminalSize.d.ts +13 -0
  136. package/dist/ui/layout/useTerminalSize.js +50 -0
  137. package/dist/ui/markdown-blocks.d.ts +62 -0
  138. package/dist/ui/markdown-blocks.js +120 -0
  139. package/dist/ui/overlays/ConfirmDialog.d.ts +30 -0
  140. package/dist/ui/overlays/ConfirmDialog.js +25 -0
  141. package/dist/ui/overlays/HelpOverlay.d.ts +17 -0
  142. package/dist/ui/overlays/HelpOverlay.js +60 -0
  143. package/dist/ui/overlays/ModelPicker.d.ts +29 -0
  144. package/dist/ui/overlays/ModelPicker.js +29 -0
  145. package/dist/ui/overlays/SettingsScreen.d.ts +37 -0
  146. package/dist/ui/overlays/SettingsScreen.js +106 -0
  147. package/dist/ui/palettes.d.ts +79 -0
  148. package/dist/ui/palettes.js +115 -0
  149. package/dist/ui/screen.d.ts +27 -0
  150. package/dist/ui/screen.js +57 -0
  151. package/dist/ui/theme.d.ts +78 -0
  152. package/dist/ui/theme.js +127 -0
  153. package/dist/ui/transcript-text.d.ts +27 -0
  154. package/dist/ui/transcript-text.js +110 -0
  155. package/package.json +73 -0
  156. package/skills/skill-creator/SKILL.md +96 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,292 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@aragon-agent/cli` are documented here. Entries at
4
+ `0.4.x` and earlier refer to the package by its former name, `@argon-agent/cli`
5
+ — those releases really were published under that name, so they are left as they
6
+ were written.
7
+
8
+ ## 0.5.0
9
+
10
+ ### Breaking
11
+
12
+ - **The package is renamed `@argon-agent/cli` → `@aragon-agent/cli`.** The brand
13
+ was always meant to be *Aragon*, matching AragonMesh; the missing `a` was a
14
+ typo that reached the registry. Install with:
15
+
16
+ ```
17
+ npm uninstall -g @argon-agent/cli
18
+ npm install -g @aragon-agent/cli
19
+ ```
20
+
21
+ `@argon-agent/cli` is deprecated and receives no further releases. **The
22
+ executable is still `aragon`** — the command you type does not change.
23
+
24
+ - **Environment variables are `ARAGON_*`, not `ARGON_*`.** There is no
25
+ compatibility fallback: `ARGON_MODEL`, `ARGON_PROVIDER`, `ARGON_BASE_URL`,
26
+ `ARGON_THINKING`, `ARGON_MAX_TOKENS`, `ARGON_THEME`, `ARGON_FULLSCREEN`,
27
+ `ARGON_SKILLS`, `ARGON_SKILLS_DISABLED`, `ARGON_SKILLS_PATH` and
28
+ `ARGON_REDUCED_MOTION` are all ignored from this release on. Rename them in
29
+ your shell profile and CI. Provider keys (`ANTHROPIC_API_KEY`,
30
+ `OPENAI_API_KEY`, `GOOGLE_API_KEY`, `GEMINI_API_KEY`) are untouched.
31
+
32
+ - **The project-level skills directory is `.aragon/skills`, not
33
+ `.argon/skills`.** This one lives in your repository, so rename it yourself:
34
+
35
+ ```
36
+ git mv .argon .aragon
37
+ ```
38
+
39
+ A config file that already persisted the old default keeps working — an
40
+ explicitly saved `skills.projectDirs` still wins over the default — but the
41
+ shipped default is now `['.aragon/skills', '.claude/skills']`. Update it with
42
+ `aragon config set` if you want the new default.
43
+
44
+ ### Added
45
+
46
+ - **Automatic migration of your user-level state.** On first run, 0.5.0 moves
47
+ the `env-paths` config and data directories from `argon-agent` to
48
+ `aragon-agent` — your API key, sessions and installed skills come with it, and
49
+ each installed skill's `.argon-skill.json` manifest is renamed to
50
+ `.aragon-skill.json` so `skills update` and `skills uninstall` still recognise
51
+ it. The migration prints one line to **stderr**, runs once, and is skipped
52
+ entirely if the new directory already exists. If it fails for any reason the
53
+ CLI still starts; the old directory is never deleted when a cross-volume copy
54
+ was needed.
55
+
56
+ - The opening wordmark now reads `ARAGON` and is 52 columns wide (was 44).
57
+ Terminals between 52 and 55 columns show the single-line banner rather than a
58
+ clipped wordmark.
59
+
60
+ - **Skills.** A skill is a directory holding a `SKILL.md` (YAML frontmatter +
61
+ Markdown body) plus optional `reference/`, `scripts/` and `assets/`. Skills
62
+ reach the model through three levels of progressive disclosure: a name +
63
+ one-line "when to use" catalog in the system prompt (≤ 6 000 bytes total),
64
+ the full body only when the model calls the `skill` tool, and bundled files
65
+ only when it reads them with `read_file` / `bash`. A skill therefore costs a
66
+ line of context rather than its whole body. How many fit in Level 1 depends on
67
+ description length and language — roughly 30 with terse English descriptions,
68
+ roughly 10 with Chinese ones at the character cap; past that the catalog
69
+ truncates and `skill_find` covers the remainder.
70
+ - Four model-facing tools: `skill` (load), `skill_find` (search installed
71
+ skills), `skill_install` (install from a local directory, git repo, or https
72
+ `SKILL.md` / `.zip`) and `skill_create` (author a new one from a procedure the
73
+ agent just worked out).
74
+ - **`aragon skills update <name> | --all`**, with `--dry-run`, `--force` and
75
+ `--check`. Re-fetches from the source recorded in the install manifest,
76
+ preserving `installedAt` and recording `updatedAt` / `previousVersion`. Refuses
77
+ before downloading anything when the installed copy has local edits, and
78
+ re-validates the source against the *current* `skills.allowedHosts` rather than
79
+ the one in force at install time. Not exposed to the model.
80
+ - **Catalog ranking.** Level 1 entries are ordered by scope, then by how recently
81
+ and often each skill was used, so truncation drops what you do not use rather
82
+ than what sorts last alphabetically. With no usage data the order is unchanged.
83
+ - **`skill_find`**, advertised in the prompt only when the catalog actually
84
+ truncated. Searches installed skills by name, description and keyword; never
85
+ reaches the network, never returns `activation: manual` skills, and tells the
86
+ model to ask for a source rather than invent one when nothing matches.
87
+ - **Cross-process install lock.** Install / create / remove / update take a
88
+ per-directory advisory lock, closing a race in which two concurrent installs
89
+ could interleave their atomic-replace steps and delete a skill with no error.
90
+ Self-expires after 60 s; waits at most 5 s; only ever released by its owner.
91
+ - **Load-time integrity.** Discovery re-checks `SKILL.md` against the sha256
92
+ recorded at install, at no extra I/O. `skills.integrity` selects
93
+ `off` / `warn` (default) / `strict`.
94
+ - **Local usage counters** at `<data>/skill-usage.json` — skill name, count and
95
+ timestamp only, never transmitted, disabled with `skills.usageTracking=false`.
96
+ Automatically injected `activation: always` skills are not counted.
97
+ - Config keys `skills.integrity` and `skills.usageTracking`; `aragon skills list
98
+ --sort=recent` and `/skills list --sort=recent`.
99
+ - Every usable skill also becomes a slash command: `/<skill-name> [args]`, with
100
+ `$ARGUMENTS` / `$1..$9` substitution. On a name clash the built-in command
101
+ always wins and the skill is reachable as `/skill:<name>`.
102
+ - `/skills` management: `list`, `info`, `install`, `remove`, `enable`,
103
+ `disable`, `reload`, `create`, `trust`, `untrust`.
104
+ - `aragon skills …` non-interactive equivalents plus `path` and `doctor`.
105
+ Exit codes follow `config set`: `0` ok, `1` run-time failure, `2` usage.
106
+ - Four discovery scopes in ascending precedence: bundled (`<pkg>/skills`), user
107
+ (`<data>/skills`), project (`<cwd>/.aragon/skills` and, read-only,
108
+ `<cwd>/.claude/skills` for Claude Code interop), and `ARAGON_SKILLS_PATH`.
109
+ - New flags `--no-skills`, `--skill <name>` (repeatable) and `--skills-yes`;
110
+ env `ARAGON_SKILLS`, `ARAGON_SKILLS_PATH`, `ARAGON_SKILLS_DISABLED`; config keys
111
+ `skills.enabled`, `skills.requireApproval`, `skills.catalogMaxBytes`,
112
+ `skills.bodyMaxBytes`.
113
+ - One bundled skill, `skill-creator`, documenting how to write a good one.
114
+ - New runtime dependency: `fflate` (~30 KB, MIT, zero transitive deps) for zip
115
+ extraction. `@aragon-agent/core` gains no dependency.
116
+ - **Release tooling for the scope change.** `npm run verify:brand` scans every
117
+ file that `npm pack` would put in the tarball — README and `dist/` included —
118
+ and blocks the release on any surviving `argon` reference, with only the four
119
+ documented exceptions (the two CHANGELOGs and the legacy-state migration
120
+ module, which hold the old names by definition). `packages/cli` also gains a
121
+ `prepublishOnly: npm run build`, so a publish that bypasses
122
+ `publish-latest.ps1` can no longer ship a `dist/` that is out of step with the
123
+ sources. `deprecate-legacy.ps1` retires `@argon-agent/*` on the registry, and
124
+ refuses to do so until the replacements are actually published.
125
+
126
+ ### Changed
127
+
128
+ - The globally installed executable is now `aragon`. The previous `argon` and
129
+ `argon-agent` aliases are no longer installed.
130
+ - `config/store.ts` now deep-merges the `skills` section on both read and write,
131
+ the same treatment `apiKeys` already received. Without it a partial patch such
132
+ as the one `/skills disable` sends would replace the whole section and
133
+ silently discard `trustedProjectDirs`, `allowedHosts` and `requireApproval`.
134
+ - `slashSuggestions` accepts `-` and `:`, so kebab-case and `skill:`-namespaced
135
+ commands autocomplete. Previously `/my-sk` produced no popup at all.
136
+ - `AgentController` now has a single `agent.setSystemPrompt()` call site, so a
137
+ `/cwd` change can no longer drop the skill catalog out of the prompt.
138
+ - With skills off or none installed, the system prompt and the 7-tool array are
139
+ byte-identical to the previous release.
140
+ - Added a repository-level PowerShell release workflow that automatically
141
+ updates CLI and Core versions, synchronizes their dependency and lockfile,
142
+ verifies both tarballs, and publishes them in dependency order.
143
+
144
+ ### Security
145
+
146
+ - Installing a skill requires an explicit human approval that **probes for a
147
+ human first and refuses when there is none**. Under `-p` there is no TUI and
148
+ therefore no approver, so `skill_install` is refused with an actionable
149
+ message rather than writing a third-party directory unattended. Use
150
+ `--skills-yes` (or `skills.requireApproval=false`) to opt out deliberately.
151
+ - Project skill directories require a one-time trust confirmation before they
152
+ are loaded — cloning an unfamiliar repository does not grant it the ability
153
+ to inject instructions into your session.
154
+ - Git is invoked only via `execFile` with an argv array and `shell: false`, and
155
+ owner / repo / ref / subdirectory fragments are whitelisted and refused if
156
+ they begin with `-`. A leading dash matters even with a pure argv array:
157
+ `--upload-pack=<program>` makes git execute that program.
158
+ - Zip extraction is streamed and gated on **actually written** bytes, per-entry
159
+ size, compression ratio and entry count, all of which can abort mid-archive.
160
+ The size a zip *declares* is written by whoever built it and is never trusted.
161
+ Path traversal, absolute entries, symlinks and Windows device names are
162
+ refused, and a rejected archive is removed rather than left half-extracted.
163
+ - Network fetches are `https:` only, restricted to `skills.allowedHosts`,
164
+ re-checked on every redirect (max 3), size-capped, and refuse IP literals and
165
+ loopback.
166
+ - Nothing a skill ships is executed at install time, and the executable bit is
167
+ not preserved. Scripts run only when the model invokes `bash` explicitly.
168
+ There is no sandbox: approval blocks *silent* installation, it does not make
169
+ a skill you approved safe.
170
+
171
+ ## 0.3.0
172
+
173
+ A full-screen TUI release. `@argon-agent/core` is untouched, no new runtime
174
+ dependency is added, and the headless/print contract, exit codes, and
175
+ slash-command semantics are unchanged. The 0.2.0 inline renderer remains
176
+ available in full via `--no-fullscreen`.
177
+
178
+ ### Added
179
+
180
+ - **Full-screen mode (default).** `aragon` now takes over the terminal's
181
+ alternate screen buffer — the same mechanism `vim` / `htop` / `lazygit` use.
182
+ Your shell history is covered, not erased, and comes back untouched on exit.
183
+ The frame is a fixed `rows - 1` tall, so **the composer and the status bar sit
184
+ at the physical bottom of the screen from the very first frame**: empty
185
+ session, long session, mid-scroll, or overlay open.
186
+ - **Brand region.** A six-row gradient ASCII wordmark on a roomy empty session,
187
+ degrading to a banner, then a single-line bar, then a bare wordmark as space
188
+ runs out. Row 1 always begins with the brand glyph.
189
+ - **Self-drawn scrolling.** `PgUp` / `PgDn` by the page, `Shift+↑` / `Shift+↓` by
190
+ the line. The viewport auto-follows new output while pinned to the bottom;
191
+ scrolling away shows `↑N` in the status bar plus a "N new lines" hint, and
192
+ submitting a message always re-pins.
193
+ - **Exit replay.** After leaving the alternate screen the session is replayed
194
+ into the normal buffer as plain, colorless text, so the conversation does not
195
+ evaporate with the screen. Turn it off with `--no-exit-transcript`.
196
+ - **New flags** `--fullscreen` / `--no-fullscreen` / `--no-exit-transcript`, the
197
+ env var `ARGON_FULLSCREEN=0|1`, and the config keys `fullscreen`,
198
+ `exitTranscript`, and `transcriptWindow`.
199
+ - **Automatic downgrade.** A non-TTY stdout, `TERM=dumb`, CI, and terminals under
200
+ 12 rows / 40 columns fall back to the inline renderer. Only the non-TTY gate is
201
+ un-overridable — `--fullscreen` beats the rest.
202
+
203
+ ### Changed
204
+
205
+ - The status bar lost its round border and is now exactly one row; it had been
206
+ spending an eighth of a 24-row terminal framing a single line of text.
207
+ - The toast strip holds a fixed row in full-screen mode, so the transcript no
208
+ longer jumps as toasts appear and expire.
209
+ - The composer is a rounded frame whose border color reports state (idle, has a
210
+ draft, running, blurred by an overlay), with the completion popup above it.
211
+ - `Ctrl+L` repaints the frame instead of writing a clear sequence. Ink dedupes
212
+ identical output at two separate gates, so under a fixed frame the old
213
+ approach erased the screen and then declined to redraw it.
214
+ - `Shift+↑` / `Shift+↓` no longer recall prompt history — they scroll.
215
+ - Full-screen mode routes `console.*` into the transcript as notices rather than
216
+ letting Ink write them straight to stdout, which corrupts the frame's line
217
+ accounting.
218
+
219
+ ### Known trade-offs
220
+
221
+ - The terminal's native scrollback and mouse wheel do not scroll the transcript
222
+ in full-screen mode; use `PgUp` / `PgDn`, or run with `--no-fullscreen`.
223
+ - Mouse tracking is deliberately left off: enabling it costs text selection and
224
+ copy in most terminals.
225
+ - Should a crash ever strand your terminal on the alternate screen, `reset`
226
+ restores it. Four independent restore paths exist to prevent that: normal
227
+ exit, `process.exit`, `SIGINT` / `SIGTERM` / `SIGHUP`, and Ink's own signal
228
+ handling.
229
+
230
+ ## 0.2.0
231
+
232
+ A design-elevation & HCI-hardening release. No breaking changes: `@argon-agent/core`
233
+ is untouched, no new runtime dependency is added, and the headless/print contract,
234
+ exit codes, config keys, and slash-command semantics from 0.1.0 are unchanged.
235
+
236
+ ### Added
237
+
238
+ - **Real theming engine.** Distinct `dark` / `light` palettes with an `auto`
239
+ resolution (`auto → dark`), color degradation across terminal depth
240
+ (truecolor → 256 → 16 → monochrome), and an ASCII glyph fallback for terminals
241
+ without Unicode. Honors `NO_COLOR`, `FORCE_COLOR`, `--no-color`, and
242
+ `TERM=dumb`. Switch live with `/theme <auto|dark|light>` (persisted).
243
+ - **Elegant chrome.** A gradient wordmark header that collapses to a slim sticky
244
+ bar after the first turn, a first-run **Welcome / empty-state** card, and a
245
+ status bar with a colored **context gauge** (threshold colors), a **tokens/sec**
246
+ read-out while running, and a contextual hint.
247
+ - **Legible tool output.** Colored unified diffs (green adds / red removes) and
248
+ per-tool rich previews (`edit_file`/`write_file`/`read_file`/`bash`/`list_dir`/
249
+ `glob`). Long previews collapse to 8 lines and expand with `Ctrl+O` or
250
+ `/expand [n]`.
251
+ - **Autocomplete.** A slash-command palette and `@file` path completion popup
252
+ (`Tab`/`→` to complete, `Up`/`Down` to move, `Esc` to close).
253
+ - **Full line editing.** Home/End, word jump/delete, kill-to-start/end, and
254
+ multi-line vertical cursor navigation, with prompt-history recall at the edges.
255
+ Unknown control/escape sequences are dropped instead of inserted.
256
+ - **Reliability under load.** Ink `<Static>` finalization for settled entries and
257
+ a streaming delta coalescer, so long/fast sessions stay flicker-free.
258
+ - **Calm feedback.** Ephemeral, auto-dismissing **toasts** for transient acks;
259
+ the transcript keeps only durable content (messages, tool cards, run errors).
260
+ - `reducedMotion` config (also `ARGON_REDUCED_MOTION`; implied by `--no-color`)
261
+ replaces spinners with a static glyph.
262
+
263
+ ### Changed
264
+
265
+ - History scrollback now uses the **native terminal scrollback** that `<Static>`
266
+ prints into (this supersedes the never-implemented `PgUp`/`PgDn` promise).
267
+
268
+ ## 0.1.0
269
+
270
+ Initial release — a Claude-Code / Codex-style interactive terminal UI (TUI) on
271
+ top of `@argon-agent/core`.
272
+
273
+ ### Added
274
+
275
+ - **Interactive TUI** (React + Ink): gradient header, streaming transcript with
276
+ markdown + syntax highlighting, collapsible thinking blocks, live tool-call
277
+ cards, a status bar (model / context % / tokens / cost / elapsed), and modal
278
+ overlays (settings, model picker, help, confirm).
279
+ - **Built-in toolset** wired into the core agent at full permission:
280
+ `read_file`, `write_file`, `edit_file`, `list_dir`, `glob`, `grep`, `bash`.
281
+ - **Layered configuration** (defaults → user file → env/`.env` → flags) with
282
+ live in-TUI editing of provider / model / base URL / API keys / thinking level
283
+ / max tokens. Secrets are masked and the config file is written `0600` on POSIX.
284
+ - **One-shot / print mode** (`argon -p`) for scripting and piping, plus
285
+ `argon config` / `argon config set` / `argon config path` / `argon models`.
286
+ - **Session control**: abort (Esc), steer-while-running, follow-up queue,
287
+ double-Ctrl-C exit, `/save` / `/resume` JSON sessions.
288
+ - **Timeout invariant** (`idleTimeout ≥ toolTimeout`) so a long single tool run
289
+ is never killed by the idle watchdog.
290
+ - **Never-silent failures**: pre-flight API-key validation, error-StreamEvent
291
+ rendering, and a guard that surfaces a swallowed agent error instead of a
292
+ blank no-op (headless exits `1`/`2` accordingly).