@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.
- package/CHANGELOG.md +292 -0
- package/README.md +558 -0
- package/dist/agent/coalesce.d.ts +14 -0
- package/dist/agent/coalesce.js +41 -0
- package/dist/agent/controller.d.ts +132 -0
- package/dist/agent/controller.js +332 -0
- package/dist/agent/headless.d.ts +22 -0
- package/dist/agent/headless.js +74 -0
- package/dist/agent/reducer.d.ts +181 -0
- package/dist/agent/reducer.js +420 -0
- package/dist/agent/system-prompt.d.ts +30 -0
- package/dist/agent/system-prompt.js +58 -0
- package/dist/agent/usage.d.ts +13 -0
- package/dist/agent/usage.js +41 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.js +482 -0
- package/dist/commands/builtins.d.ts +16 -0
- package/dist/commands/builtins.js +223 -0
- package/dist/commands/registry.d.ts +48 -0
- package/dist/commands/registry.js +45 -0
- package/dist/commands/skills.d.ts +22 -0
- package/dist/commands/skills.js +625 -0
- package/dist/config/app-paths.d.ts +11 -0
- package/dist/config/app-paths.js +16 -0
- package/dist/config/env.d.ts +28 -0
- package/dist/config/env.js +92 -0
- package/dist/config/load.d.ts +48 -0
- package/dist/config/load.js +158 -0
- package/dist/config/migrate-legacy-state.d.ts +78 -0
- package/dist/config/migrate-legacy-state.js +181 -0
- package/dist/config/schema.d.ts +249 -0
- package/dist/config/schema.js +247 -0
- package/dist/config/store.d.ts +44 -0
- package/dist/config/store.js +126 -0
- package/dist/input/keymap.d.ts +20 -0
- package/dist/input/keymap.js +85 -0
- package/dist/session/persist.d.ts +24 -0
- package/dist/session/persist.js +51 -0
- package/dist/skills/archive.d.ts +41 -0
- package/dist/skills/archive.js +152 -0
- package/dist/skills/cli-commands.d.ts +52 -0
- package/dist/skills/cli-commands.js +502 -0
- package/dist/skills/fetch-source.d.ts +104 -0
- package/dist/skills/fetch-source.js +448 -0
- package/dist/skills/installer.d.ts +117 -0
- package/dist/skills/installer.js +414 -0
- package/dist/skills/lock.d.ts +75 -0
- package/dist/skills/lock.js +223 -0
- package/dist/skills/manifest.d.ts +47 -0
- package/dist/skills/manifest.js +95 -0
- package/dist/skills/node-host.d.ts +23 -0
- package/dist/skills/node-host.js +59 -0
- package/dist/skills/paths.d.ts +61 -0
- package/dist/skills/paths.js +107 -0
- package/dist/skills/service.d.ts +256 -0
- package/dist/skills/service.js +730 -0
- package/dist/skills/tools.d.ts +35 -0
- package/dist/skills/tools.js +164 -0
- package/dist/skills/updater.d.ts +101 -0
- package/dist/skills/updater.js +330 -0
- package/dist/skills/usage.d.ts +72 -0
- package/dist/skills/usage.js +216 -0
- package/dist/tools/bash-tool.d.ts +12 -0
- package/dist/tools/bash-tool.js +131 -0
- package/dist/tools/diff.d.ts +15 -0
- package/dist/tools/diff.js +50 -0
- package/dist/tools/fs-tools.d.ts +16 -0
- package/dist/tools/fs-tools.js +215 -0
- package/dist/tools/index.d.ts +93 -0
- package/dist/tools/index.js +157 -0
- package/dist/tools/search-tools.d.ts +11 -0
- package/dist/tools/search-tools.js +225 -0
- package/dist/ui/App.d.ts +24 -0
- package/dist/ui/App.js +522 -0
- package/dist/ui/AutocompletePopup.d.ts +21 -0
- package/dist/ui/AutocompletePopup.js +19 -0
- package/dist/ui/Composer.d.ts +40 -0
- package/dist/ui/Composer.js +61 -0
- package/dist/ui/Header.d.ts +30 -0
- package/dist/ui/Header.js +25 -0
- package/dist/ui/Logo.d.ts +50 -0
- package/dist/ui/Logo.js +85 -0
- package/dist/ui/Markdown.d.ts +23 -0
- package/dist/ui/Markdown.js +122 -0
- package/dist/ui/PromptInput.d.ts +81 -0
- package/dist/ui/PromptInput.js +383 -0
- package/dist/ui/SessionOpener.d.ts +30 -0
- package/dist/ui/SessionOpener.js +12 -0
- package/dist/ui/StatusBar.d.ts +39 -0
- package/dist/ui/StatusBar.js +43 -0
- package/dist/ui/ToastStack.d.ts +24 -0
- package/dist/ui/ToastStack.js +38 -0
- package/dist/ui/Transcript.d.ts +62 -0
- package/dist/ui/Transcript.js +128 -0
- package/dist/ui/capabilities.d.ts +25 -0
- package/dist/ui/capabilities.js +59 -0
- package/dist/ui/console-bridge.d.ts +19 -0
- package/dist/ui/console-bridge.js +52 -0
- package/dist/ui/density.d.ts +26 -0
- package/dist/ui/density.js +34 -0
- package/dist/ui/entries/AssistantEntry.d.ts +23 -0
- package/dist/ui/entries/AssistantEntry.js +13 -0
- package/dist/ui/entries/EntryFrame.d.ts +23 -0
- package/dist/ui/entries/EntryFrame.js +6 -0
- package/dist/ui/entries/ToolCard.d.ts +38 -0
- package/dist/ui/entries/ToolCard.js +72 -0
- package/dist/ui/entries/ToolPreview.d.ts +57 -0
- package/dist/ui/entries/ToolPreview.js +144 -0
- package/dist/ui/entries/UserEntry.d.ts +14 -0
- package/dist/ui/entries/UserEntry.js +5 -0
- package/dist/ui/exit-snapshot.d.ts +27 -0
- package/dist/ui/exit-snapshot.js +26 -0
- package/dist/ui/gauge.d.ts +24 -0
- package/dist/ui/gauge.js +36 -0
- package/dist/ui/glyphs.d.ts +87 -0
- package/dist/ui/glyphs.js +127 -0
- package/dist/ui/gradient.d.ts +11 -0
- package/dist/ui/gradient.js +50 -0
- package/dist/ui/layout/AppShell.d.ts +24 -0
- package/dist/ui/layout/AppShell.js +9 -0
- package/dist/ui/layout/Gutter.d.ts +67 -0
- package/dist/ui/layout/Gutter.js +42 -0
- package/dist/ui/layout/OverlayFrame.d.ts +62 -0
- package/dist/ui/layout/OverlayFrame.js +92 -0
- package/dist/ui/layout/ScrollViewport.d.ts +33 -0
- package/dist/ui/layout/ScrollViewport.js +71 -0
- package/dist/ui/layout/budget.d.ts +42 -0
- package/dist/ui/layout/budget.js +47 -0
- package/dist/ui/layout/frame.d.ts +58 -0
- package/dist/ui/layout/frame.js +75 -0
- package/dist/ui/layout/overlay-window.d.ts +43 -0
- package/dist/ui/layout/overlay-window.js +51 -0
- package/dist/ui/layout/scroll.d.ts +28 -0
- package/dist/ui/layout/scroll.js +76 -0
- package/dist/ui/layout/useTerminalSize.d.ts +13 -0
- package/dist/ui/layout/useTerminalSize.js +50 -0
- package/dist/ui/markdown-blocks.d.ts +62 -0
- package/dist/ui/markdown-blocks.js +120 -0
- package/dist/ui/overlays/ConfirmDialog.d.ts +30 -0
- package/dist/ui/overlays/ConfirmDialog.js +25 -0
- package/dist/ui/overlays/HelpOverlay.d.ts +17 -0
- package/dist/ui/overlays/HelpOverlay.js +60 -0
- package/dist/ui/overlays/ModelPicker.d.ts +29 -0
- package/dist/ui/overlays/ModelPicker.js +29 -0
- package/dist/ui/overlays/SettingsScreen.d.ts +37 -0
- package/dist/ui/overlays/SettingsScreen.js +106 -0
- package/dist/ui/palettes.d.ts +79 -0
- package/dist/ui/palettes.js +115 -0
- package/dist/ui/screen.d.ts +27 -0
- package/dist/ui/screen.js +57 -0
- package/dist/ui/theme.d.ts +78 -0
- package/dist/ui/theme.js +127 -0
- package/dist/ui/transcript-text.d.ts +27 -0
- package/dist/ui/transcript-text.js +110 -0
- package/package.json +73 -0
- 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).
|