euron-code 0.2.0__tar.gz → 0.4.0__tar.gz
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.
- euron_code-0.4.0/CHANGELOG.md +238 -0
- euron_code-0.4.0/PKG-INFO +574 -0
- euron_code-0.4.0/README.md +508 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/pyproject.toml +8 -2
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/__init__.py +1 -1
- euron_code-0.4.0/src/euron_code/activity.py +194 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/agent.py +558 -50
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/api.py +76 -9
- euron_code-0.4.0/src/euron_code/attachments.py +245 -0
- euron_code-0.4.0/src/euron_code/auth.py +190 -0
- euron_code-0.4.0/src/euron_code/cache.py +128 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/checkpoints.py +73 -1
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/cli.py +164 -12
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/config.py +115 -9
- euron_code-0.4.0/src/euron_code/context.py +405 -0
- euron_code-0.4.0/src/euron_code/contextforge/LICENSE +21 -0
- euron_code-0.4.0/src/euron_code/contextforge/__init__.py +3 -0
- euron_code-0.4.0/src/euron_code/contextforge/text.py +337 -0
- euron_code-0.4.0/src/euron_code/contextforge/toolout.py +185 -0
- euron_code-0.4.0/src/euron_code/documents.py +368 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/hooks.py +2 -1
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/memory.py +21 -5
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/permissions.py +107 -4
- euron_code-0.4.0/src/euron_code/project_setup.py +267 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/prompts.py +42 -14
- euron_code-0.4.0/src/euron_code/repl.py +1635 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/rules.py +6 -2
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/sessions.py +27 -6
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/skills.py +11 -4
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/tools/__init__.py +9 -2
- euron_code-0.4.0/src/euron_code/tools/background.py +378 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/tools/base.py +1 -0
- euron_code-0.4.0/src/euron_code/tools/document.py +54 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/tools/fs.py +160 -11
- euron_code-0.4.0/src/euron_code/tools/reuse.py +103 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/tools/search.py +20 -5
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/tools/shell.py +41 -12
- euron_code-0.4.0/src/euron_code/tools/symbols.py +105 -0
- euron_code-0.4.0/src/euron_code/trust.py +190 -0
- euron_code-0.4.0/src/euron_code/ui.py +373 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/usage_view.py +145 -44
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/conftest.py +2 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/helpers.py +2 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/mock_gateway.py +227 -12
- euron_code-0.4.0/tests/serve_helper.py +19 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/test_agent_mock.py +229 -228
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/test_cli_e2e.py +19 -1
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/test_context_memory_sessions.py +1 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/test_v2_rules_skills_hooks.py +7 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/test_v2_tokens_shortcuts.py +2 -1
- euron_code-0.4.0/tests/test_v31_security.py +349 -0
- euron_code-0.4.0/tests/test_v3_accounts_value_setup.py +333 -0
- euron_code-0.4.0/tests/test_v3_activity.py +224 -0
- euron_code-0.4.0/tests/test_v3_attachments.py +305 -0
- euron_code-0.4.0/tests/test_v3_context.py +220 -0
- euron_code-0.4.0/tests/test_v3_live_repl.py +315 -0
- euron_code-0.4.0/tests/test_v3_single_login.py +150 -0
- euron_code-0.4.0/tests/test_v4.py +340 -0
- euron_code-0.2.0/PKG-INFO +0 -452
- euron_code-0.2.0/README.md +0 -391
- euron_code-0.2.0/src/euron_code/auth.py +0 -115
- euron_code-0.2.0/src/euron_code/context.py +0 -190
- euron_code-0.2.0/src/euron_code/repl.py +0 -821
- euron_code-0.2.0/src/euron_code/ui.py +0 -269
- {euron_code-0.2.0 → euron_code-0.4.0}/.gitignore +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/LICENSE +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/__main__.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/builtin_skills/explain-codebase/SKILL.md +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/builtin_skills/review/SKILL.md +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/builtin_skills/test-writer/SKILL.md +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/credentials.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/doctor.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/frontmatter.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/keys.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/repomap.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/tools/db.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/tools/ignore.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/tools/skill.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/tools/task.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/tools/todo.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/src/euron_code/tools/web.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/test_api_shell.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/test_db.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/test_permissions.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/test_powershell_exit_codes.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/test_repl.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/test_search.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/test_tools_fs.py +0 -0
- {euron_code-0.2.0 → euron_code-0.4.0}/tests/test_v2_usage_headers.py +0 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.4.0 (2026-11-05)
|
|
4
|
+
|
|
5
|
+
### Run the app, not just the tests
|
|
6
|
+
- `start_background_process` (waits for a port or a ready line), `read_process_output`, `stop_process`:
|
|
7
|
+
at most 3, 64 KB output each, whole process trees stopped on exit, `/clear` and `/rewind`; `/ps`.
|
|
8
|
+
- `check_app`: local URLs only; status, timing, title, `contains`, `wait_seconds`; `browser: true` uses
|
|
9
|
+
Playwright when installed (new extra `euron-code[browser]`) for console errors, failed requests and a
|
|
10
|
+
screenshot.
|
|
11
|
+
- The system prompt now says to use these for servers instead of `bash`.
|
|
12
|
+
|
|
13
|
+
### Reuse Euron's open-source code (V4 contract section 3)
|
|
14
|
+
- `euron_reuse_search` and `euron_reuse_read` over the gateway's index of Euron's public MIT repos; the
|
|
15
|
+
system prompt asks to search before writing a substantial common component and to keep the licence
|
|
16
|
+
notice; `/reuse <query>`.
|
|
17
|
+
|
|
18
|
+
### Context optimisation with Euron Open ContextForge (MIT, vendored in `euron_code/contextforge/`)
|
|
19
|
+
- Before any model-written summary: older duplicate tool results are dropped, bulky logs, test runs and
|
|
20
|
+
JSON are condensed to their verbatim signal lines (errors, failures, stack frames, head and tail), and
|
|
21
|
+
stubs keep the facts they drop. Often that is enough and no model call is spent.
|
|
22
|
+
- Every summary now carries a verbatim fact ledger (ids, paths, versions, env names, URLs, ports, dates,
|
|
23
|
+
error classes) and the user's stated constraints, plus permission grants, git branch and state, and the
|
|
24
|
+
last command with its exit code.
|
|
25
|
+
|
|
26
|
+
### More tools and gaps closed (audit increment 6)
|
|
27
|
+
- `find_symbol` (definitions and references), `delete_file` and `move_file` (both undone by `/rewind`).
|
|
28
|
+
- `AGENTS.md` and `CLAUDE.md` are read alongside `EURON.md` (trust-gated like it).
|
|
29
|
+
- Inline `<tool_call>` JSON is repaired (trailing commas, single quotes, Python literals); garbage
|
|
30
|
+
becomes an error result for the model, never a crash.
|
|
31
|
+
- `/rewind` works after `euron --resume`: checkpoints are kept in `~/.euron/checkpoints/<session>/`
|
|
32
|
+
(user-only, at most 50 MB per session).
|
|
33
|
+
- The context window and output cap come from `/v1/models` unless you set them.
|
|
34
|
+
- `/export` warns that the file contains tool output.
|
|
35
|
+
|
|
36
|
+
### Euron-only client and privacy (V4 contract section 1, audit increment 3)
|
|
37
|
+
- A 403 `client_not_supported` shows the gateway's message ("works through the euron app only").
|
|
38
|
+
- README and the first image attach say where data goes: prompts on GPUs rented from Vast.ai (not
|
|
39
|
+
logged), images described by Google Gemini (not stored).
|
|
40
|
+
|
|
41
|
+
### CI
|
|
42
|
+
- `.github/workflows/ci.yml`: pytest on ubuntu, windows and macos x Python 3.9 and 3.12 (ripgrep on one
|
|
43
|
+
job), then build the wheel and sdist and check the wheel contents.
|
|
44
|
+
|
|
45
|
+
## 0.3.0 (2026-11-05)
|
|
46
|
+
|
|
47
|
+
### Never stuck at the output limit
|
|
48
|
+
- An answer cut by the output limit (`finish_reason: length`) is continued automatically (up to 3 times)
|
|
49
|
+
and joined into one answer. A tool call cut mid-arguments (typically a huge `write_file`) is never run;
|
|
50
|
+
the model is asked to make the change in smaller steps. When reasoning alone used the budget, the
|
|
51
|
+
request is retried once with `reasoning_effort: low`. Each case shows one dim note, never an error.
|
|
52
|
+
- `reasoning_effort` is sent on every call: `medium` by default, `low` for simple follow-ups
|
|
53
|
+
("thanks", "continue") and continuation retries. `/effort low|medium|high`, setting `reasoningEffort`,
|
|
54
|
+
shown in the status bar.
|
|
55
|
+
- `max_tokens` is sized per request: min(server max, context window - prompt estimate - 512), at least
|
|
56
|
+
1024. A request that would not fit is compacted first. The prompt estimate starts from the last
|
|
57
|
+
server-reported `prompt_tokens` and adds only the new messages.
|
|
58
|
+
|
|
59
|
+
### Context management for a 32k window
|
|
60
|
+
- An output budget is reserved (min(maxOutputTokens, window/4)); percentages are of the usable rest.
|
|
61
|
+
- From 50%, tool outputs are cleared biggest and oldest first until under 40% (the latest step is never
|
|
62
|
+
touched). Each stub names the call (for reads: path and line range) so the model can read it again.
|
|
63
|
+
The note reports real numbers: "freed 9,400 tokens, now 38%".
|
|
64
|
+
- The conversation is summarised at 70%, or whenever the next request would not fit. The summary keeps
|
|
65
|
+
the task, decisions, files changed, commands and results, the last error and open todos (files
|
|
66
|
+
changed and the last error are also added verbatim).
|
|
67
|
+
- `read_file` reads 200 lines by default and stops at a line boundary before ~6k tokens. Files over
|
|
68
|
+
2,000 lines return an outline (definitions with line numbers) unless a range is given. The system
|
|
69
|
+
prompt says: search first, read ranges, edit with `edit_file`, never rewrite big files.
|
|
70
|
+
|
|
71
|
+
### A live session like Claude Code
|
|
72
|
+
- **Activity line** while the agent works: an animated glyph, a rotating verb, elapsed time, tokens
|
|
73
|
+
sent and received (counted live from the stream), what is happening (`thinking`, `writing app.py`,
|
|
74
|
+
`running pytest 12s`, `waiting for a GPU slot (2 ahead)`, `retrying in 3s`) and `esc to interrupt`.
|
|
75
|
+
On a terminal it redraws 10 times a second; without one it prints a progress line every 15 s; in `-p`
|
|
76
|
+
mode it appears on stderr only when stderr is a terminal. The gateway's `: queued, N ahead` comments
|
|
77
|
+
are shown instead of being ignored.
|
|
78
|
+
- **Status bar**: model and effort, mode, session tokens and their value, context %, today's and this
|
|
79
|
+
week's remaining quota, session uptime. Refreshed continuously.
|
|
80
|
+
- **Type while it works.** The turn runs in a worker thread and the prompt stays live. `/usage`, `/cost`,
|
|
81
|
+
`/context`, `/status`, `/model`, `/effort`, `/help`, `/todos`, `/permissions` run at once (a model switch
|
|
82
|
+
applies from the next model call, a mode change from the next tool call); anything else is queued as
|
|
83
|
+
your next message. Permission questions are answered in the same prompt. Esc or Ctrl-C stops the
|
|
84
|
+
turn (a running command is killed) and puts queued messages back into the input line.
|
|
85
|
+
- **`/` menu** pops up as soon as you type `/`, with every command, custom command and skill. `/model`
|
|
86
|
+
opens a picker (arrow keys + Enter) with context size and status. `@word` searches the project's files.
|
|
87
|
+
- `/status`, `/whoami`, `/config`, `/bug`, `/release-notes`, `/users` (alias of `/usage`).
|
|
88
|
+
|
|
89
|
+
### Accounts and modes
|
|
90
|
+
- Plain `euron` with no saved key logs you in in the browser and goes straight into the session.
|
|
91
|
+
- `euron login` / `/login` when logged in: shows who, offers to log in as a different account
|
|
92
|
+
(`--force` skips the question). The old key is replaced only after the new login is approved. Logout
|
|
93
|
+
stays local (there is no CLI revoke API); revoke keys at euron.one/code-agent.
|
|
94
|
+
- `--permission-mode bypassPermissions` and `--dangerously-skip-permissions` (alias of `--yolo`) with a
|
|
95
|
+
red warning; Shift+Tab reaches bypass only when started with it. `acceptEdits` is shown as "auto-apply
|
|
96
|
+
edits". `--add-dir DIR` adds folders the agent may work in.
|
|
97
|
+
|
|
98
|
+
### One login at a time
|
|
99
|
+
- A key revoked because the account logged in on another device (401 `signed_in_elsewhere`) shows that
|
|
100
|
+
message, drops the local key and offers "Log in here? (this signs out the other device)"; after the
|
|
101
|
+
login the interrupted message is carried on. `-p` exits 4 with the message.
|
|
102
|
+
- When another session holds the account (409 `session_in_use`), Euron Code asks "Take over here?"; yes
|
|
103
|
+
retries once with `X-Euron-Takeover: 1`. `-p` exits 4 unless `--takeover` is given.
|
|
104
|
+
- After `euron login`: "Signed in as ... (any other device using this account was signed out)".
|
|
105
|
+
|
|
106
|
+
### Plan quotas and value (V3 contract)
|
|
107
|
+
- `/usage` shows the plan tier, all four periods (day, week, month, year) with bars and refill times,
|
|
108
|
+
`quota.blocked` prominently, and value lines at the reference API price ("≈ $1.07 (₹94) at Claude
|
|
109
|
+
Sonnet 5.5 API list prices · included in your plan"), plus what the allowance is worth. `/cost` and the
|
|
110
|
+
status bar show this session's value. Always labelled as a reference, never a bill.
|
|
111
|
+
- New 429 codes `monthly_token_limit`, `yearly_token_limit` and `cooldown`, each with its refill time in
|
|
112
|
+
local time; exit code 5 in `-p` mode.
|
|
113
|
+
|
|
114
|
+
### Automatic project setup and local cache
|
|
115
|
+
- First `euron` in a folder without `EURON.md` or `.euron/` (not your home folder or a drive root) offers
|
|
116
|
+
to set it up; `--yes` or `euron init` does it without asking. Locally, with no model call: `EURON.md`
|
|
117
|
+
(stack, commands, layout, entry points), `.euron/rules/` (testing, git, security and per-stack
|
|
118
|
+
rules), `.euron/settings.json` (allow rules for the detected test/lint commands and read-only git),
|
|
119
|
+
`.euron/hooks.example.json` (off; `/hooks enable` turns them on, pre-trusted because Euron Code wrote
|
|
120
|
+
them), `.euron/commands/` (`/fix-tests`, `/commit`, `/pr`), and `.euron/cache/` in `.gitignore`.
|
|
121
|
+
- `.euron/cache/` keeps the repo map and file index, keyed by git HEAD and folder mtimes. Safe to delete,
|
|
122
|
+
no secrets, only written when `.euron/` exists.
|
|
123
|
+
|
|
124
|
+
### Attach anything
|
|
125
|
+
- `@file`, `/attach`, or drag files into the terminal (Windows `"C:\..."` and PowerShell `& '...'`
|
|
126
|
+
quoting, Unix escaped spaces and `file://` are recognised). Word, Excel, PowerPoint and PDF become
|
|
127
|
+
compact text locally (stdlib zip+XML; `pypdf` for PDF), as do CSV/TSV (sample + column summary),
|
|
128
|
+
JSON, YAML and notebooks, capped at about 6k tokens per file with a note; unknown binaries are only
|
|
129
|
+
described. The new `read_document` tool reads more pages, sheets or rows on demand.
|
|
130
|
+
- `@folder` attaches a digest within a budget: tree, file types and sizes, heads of key files.
|
|
131
|
+
- Images (png/jpg/gif/webp/bmp, up to 5 per message, 5 MB each) are sent as `image_url` parts, resized
|
|
132
|
+
to 1568 px with the optional `euron-code[images]` extra (Pillow), which also enables Ctrl+V and
|
|
133
|
+
`/paste-image`. A 400 `images_unavailable` drops the images with a clear note and retries.
|
|
134
|
+
- Session transcripts never store image bytes.
|
|
135
|
+
|
|
136
|
+
### Security (independent audit, before release)
|
|
137
|
+
- **Project trust.** A repo's `.euron/settings.json` / `settings.local.json` can no longer loosen anything
|
|
138
|
+
silently: allow rules, `defaultMode` other than default/plan, `shell`, `db.*`, `webFetch: true` and
|
|
139
|
+
raised limits apply only after the user trusts the repo (one prompt listing exactly what it ships,
|
|
140
|
+
with view / trust / ignore; fingerprinted in `~/.euron/trusted-projects.json`, so a change asks again).
|
|
141
|
+
Restrict-only keys (deny rules, plan mode, lowered limits) always apply. `-p` ignores untrusted keys
|
|
142
|
+
with a warning; `euron trust` / `/trust` trust a repo. Rules the user saves with `s` or
|
|
143
|
+
`/permissions allow` now live in `~/.euron/projects/<hash>.json`, outside the repo.
|
|
144
|
+
- **Repo instructions are trust-gated too:** project and parent `EURON.md`, `.euron/rules`, `.euron/skills`
|
|
145
|
+
and `.euron/commands` load only for a trusted repo. The system prompt no longer says project memory
|
|
146
|
+
"overrides" anything: project-provided guidance follows `# Tools and safety`, which always wins.
|
|
147
|
+
- `grep` skips secret-looking files (`.env*`, keys, credentials) in both the ripgrep and the Python path
|
|
148
|
+
and says which were skipped; naming one explicitly asks, like `read_file`.
|
|
149
|
+
- Commands, `!` commands and hooks run without `EURON_API_KEY` / `EURON_CODE_API` in their environment.
|
|
150
|
+
- Bypass mode still asks for commands that touch existing paths outside the project and for a list of
|
|
151
|
+
destructive commands (that list asks even with an allow rule); `web_fetch` to localhost, private
|
|
152
|
+
ranges, link-local and metadata addresses asks in every mode unless that exact host was allowed.
|
|
153
|
+
- Edits to `EURON.md` and `.euron/**` always ask in acceptEdits mode.
|
|
154
|
+
- Session transcripts are created user-only (0600, folder 0700) on POSIX.
|
|
155
|
+
|
|
156
|
+
### Runaway guard and honest completion
|
|
157
|
+
- 3 identical failing calls add a "change your approach" note; 5 stop the request (`stop_reason: loop`).
|
|
158
|
+
Identical successful calls get a note at 4 and stop at 8.
|
|
159
|
+
- Step budget per request, `maxStepsPerPrompt` (default 60): the REPL asks to continue; `-p` exits 6.
|
|
160
|
+
- A local report after a change: `Changed: ... | Ran: ... (exit N) | Not verified: ...`; `-p --output-format
|
|
161
|
+
json` gains `files_changed` and `commands`. One automatic nudge when files changed and no command
|
|
162
|
+
succeeded afterwards (`verifyNudge`, off in plan mode); the detected test command is in the
|
|
163
|
+
environment block.
|
|
164
|
+
- After `write_file` / `edit_file`: a syntax check for `.py` (compile), `.json` and, when node is installed,
|
|
165
|
+
`.js` files.
|
|
166
|
+
|
|
167
|
+
### Fixed
|
|
168
|
+
- Windows Terminal, VS Code and other ConPTY hosts: a lone Esc stayed inside prompt_toolkit's VT input
|
|
169
|
+
parser until the next key, so Esc did not interrupt. The timed flush now delivers it (found by
|
|
170
|
+
driving the CLI in a real ConPTY).
|
|
171
|
+
- Safe commands such as `/usage` typed while a permission question is open now run, and the question
|
|
172
|
+
stays open, instead of being rejected as an invalid answer.
|
|
173
|
+
|
|
174
|
+
### Changed
|
|
175
|
+
- Defaults: `compactThreshold` 0.7, `microCompactThreshold` 0.5, new `microCompactTarget` 0.4,
|
|
176
|
+
`microCompactKeepSteps` 1, `outputReserve`, `reasoningEffort` (all fractions of the usable window).
|
|
177
|
+
- The CHANGELOG ships inside the wheel (for `/release-notes`).
|
|
178
|
+
|
|
179
|
+
## 0.2.0 (2026-11-05)
|
|
180
|
+
|
|
181
|
+
### Added
|
|
182
|
+
- **Usage periods.** `/usage` and `euron usage` show Today / This week / This month with a progress bar
|
|
183
|
+
against each limit (the week only when the plan has a weekly limit), reset times in local time,
|
|
184
|
+
requests, sessions, tasks and the share of prompt tokens served from the server's cache, plus the
|
|
185
|
+
30-day table with cached / sessions / tasks columns. The status bar shows the tighter of the day and
|
|
186
|
+
week allowance.
|
|
187
|
+
- **Weekly limit.** A `weekly_token_limit` 429 stops cleanly with the local reset time; exit code 5 in
|
|
188
|
+
`-p` mode, the same as the daily limit. Both limits read `resets_at` from the error when present.
|
|
189
|
+
- **Session and task headers.** Every model call sends `X-Euron-Session` (the saved session id, kept on
|
|
190
|
+
`--continue` / `--resume` / `/resume`) and `X-Euron-Task` (new for every message you send).
|
|
191
|
+
- **Rules files.** `.euron/rules/*.md` and `~/.euron/rules/*.md`, loaded after `EURON.md`. Rules with
|
|
192
|
+
`paths:` front matter load only once a matching file is read or edited. `/rules`, `/rules new`.
|
|
193
|
+
- **Skills.** `.euron/skills/<name>/SKILL.md` and `~/.euron/skills/<name>/SKILL.md`. Only names and
|
|
194
|
+
descriptions are in the system prompt; the new `skill` tool loads a body on demand; `/<name> [args]`
|
|
195
|
+
runs one. Built in: `review`, `test-writer`, `explain-codebase`. `/skills`, `/skills new`.
|
|
196
|
+
- **Custom commands.** `.euron/commands/<name>.md` and `~/.euron/commands/<name>.md` become `/<name>`
|
|
197
|
+
with `$ARGUMENTS`; shown in `/help` and Tab completion.
|
|
198
|
+
- **Hooks.** `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, `Stop` in settings, with a
|
|
199
|
+
tool-name `matcher`, JSON on stdin and exit code 2 to block or give feedback. Project hooks must be
|
|
200
|
+
trusted once per project (re-asked when they change); skipped with a warning in `-p` mode.
|
|
201
|
+
`/hooks`, `/hooks new`.
|
|
202
|
+
- **Plan mode.** Read-only mode in which the model proposes a plan; leaving it is the user's choice.
|
|
203
|
+
Shift+Tab cycles default -> acceptEdits -> plan; also `/plan` and `--permission-mode plan`.
|
|
204
|
+
- **Shortcuts.** `!command` runs a command and adds its output to the next message; `@path` attaches a
|
|
205
|
+
file or folder (Tab completes paths); Esc Esc / `/rewind` undoes the last turn's file edits and drops
|
|
206
|
+
the turn; Ctrl-L clears the screen; `/resume` and `/export` inside a session.
|
|
207
|
+
- **`/context`.** A breakdown with a bar: system prompt, memory, rules, skills index, tool definitions,
|
|
208
|
+
messages, tool results, free space.
|
|
209
|
+
- **`/init` repo map.** A locally built map (stack, manifest commands, layout, entry points) is handed to
|
|
210
|
+
the model, which writes a short `EURON.md` with a repo map section; offers `.euron/rules/` and
|
|
211
|
+
`.euron/settings.json` skeletons.
|
|
212
|
+
|
|
213
|
+
### Token saving (automatic)
|
|
214
|
+
- The system prompt and tool list stay byte-identical for the whole session; plan mode, hook output and
|
|
215
|
+
`!` output go at the end of the user message.
|
|
216
|
+
- Re-reading an unchanged file (mtime + size, or content hash) returns "unchanged since your last read
|
|
217
|
+
at turn N"; a read that reached the end of the file covers later partial reads.
|
|
218
|
+
- Micro-compaction at 60% of the context: tool outputs older than the last 3 steps become one-line stubs
|
|
219
|
+
(no model call); the summary still happens at 75%.
|
|
220
|
+
- `/cost` and `/context` report prompt tokens sent, tokens served from the server's prefix cache
|
|
221
|
+
(`usage.prompt_tokens_details.cached_tokens`) and tokens saved by each measure. `-p --output-format
|
|
222
|
+
json` adds `cached_tokens` and `saved_tokens`.
|
|
223
|
+
|
|
224
|
+
### Changed
|
|
225
|
+
- `/help` lists your commands, skills and the shortcuts.
|
|
226
|
+
- `--permission-mode` and `/permissions mode` accept `plan`.
|
|
227
|
+
- New settings: `microCompactThreshold` (0.6), `microCompactKeepSteps` (3), `hooks`.
|
|
228
|
+
|
|
229
|
+
### Fixed
|
|
230
|
+
- On Windows PowerShell 5.1, a command that wrote to stderr (for example `pytest ... 2>&1` with a
|
|
231
|
+
warning) was reported as exit code 1 with CLIXML noise even when it passed. The real exit code is
|
|
232
|
+
reported now and stderr is plain text.
|
|
233
|
+
|
|
234
|
+
## 0.1.0
|
|
235
|
+
|
|
236
|
+
First release: agent loop with file, search, shell, database, web, todo and sub-agent tools; device
|
|
237
|
+
login; `EURON.md` memory and `/init`; `/compact` and auto-compaction; saved sessions; permission rules
|
|
238
|
+
and modes; `-p` headless mode.
|