euron-code 0.4.1__tar.gz → 0.5.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.1 → euron_code-0.5.0}/CHANGELOG.md +76 -14
- {euron_code-0.4.1 → euron_code-0.5.0}/PKG-INFO +119 -54
- {euron_code-0.4.1 → euron_code-0.5.0}/README.md +118 -53
- {euron_code-0.4.1 → euron_code-0.5.0}/pyproject.toml +1 -1
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/__init__.py +1 -1
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/activity.py +1 -1
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/agent.py +225 -5
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/api.py +56 -1
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/attachments.py +3 -4
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/auth.py +1 -1
- euron_code-0.5.0/src/euron_code/builtin_skills/build-from-reference/SKILL.md +28 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/cli.py +20 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/config.py +4 -2
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/context.py +1 -1
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/doctor.py +3 -3
- euron_code-0.5.0/src/euron_code/error_hints.py +65 -0
- euron_code-0.5.0/src/euron_code/errorlog.py +266 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/hooks.py +2 -2
- euron_code-0.5.0/src/euron_code/licensing.py +67 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/permissions.py +2 -2
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/prompts.py +15 -3
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/repl.py +78 -22
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/sessions.py +1 -1
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/__init__.py +5 -1
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/background.py +12 -8
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/base.py +244 -244
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/db.py +1 -4
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/document.py +1 -4
- euron_code-0.5.0/src/euron_code/tools/erie.py +271 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/fs.py +4 -13
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/ignore.py +75 -75
- euron_code-0.5.0/src/euron_code/tools/oss.py +178 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/reuse.py +6 -5
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/search.py +2 -4
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/shell.py +62 -5
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/skill.py +1 -4
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/symbols.py +1 -4
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/task.py +1 -4
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/todo.py +1 -3
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/tools/web.py +1 -2
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/usage_view.py +1 -1
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/conftest.py +17 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/mock_gateway.py +215 -1
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_api_shell.py +160 -160
- euron_code-0.5.0/tests/test_bench.py +46 -0
- euron_code-0.5.0/tests/test_erie.py +339 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_permissions.py +91 -91
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_tools_fs.py +143 -143
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v2_tokens_shortcuts.py +1 -1
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v3_accounts_value_setup.py +3 -3
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v3_activity.py +3 -3
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v3_context.py +1 -1
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v4.py +13 -4
- euron_code-0.5.0/tests/test_v5.py +398 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/.gitignore +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/LICENSE +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/__main__.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/builtin_skills/explain-codebase/SKILL.md +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/builtin_skills/review/SKILL.md +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/builtin_skills/test-writer/SKILL.md +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/cache.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/checkpoints.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/contextforge/LICENSE +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/contextforge/__init__.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/contextforge/text.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/contextforge/toolout.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/credentials.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/documents.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/frontmatter.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/keys.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/memory.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/project_setup.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/repomap.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/rules.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/skills.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/textsafe.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/trust.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/src/euron_code/ui.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/helpers.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/serve_helper.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_agent_mock.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_cli_e2e.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_context_memory_sessions.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_db.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_powershell_exit_codes.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_repl.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_search.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_textsafe.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v2_rules_skills_hooks.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v2_usage_headers.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v31_security.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v3_attachments.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v3_live_repl.py +0 -0
- {euron_code-0.4.1 → euron_code-0.5.0}/tests/test_v3_single_login.py +0 -0
|
@@ -1,5 +1,71 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.5.0 (2026-11-05)
|
|
4
|
+
|
|
5
|
+
### Build from references (V5 contract section 1)
|
|
6
|
+
- New tools `oss_search` (repos or code), `oss_tree` and `oss_read` through Euron:
|
|
7
|
+
every result shows its licence; only MIT, Apache-2.0, BSD, ISC, 0BSD, Unlicense, MPL-2.0, CC0 and Zlib.
|
|
8
|
+
A `license_not_permitted` answer tells the model plainly it must not use that code, and the client drops
|
|
9
|
+
any non-permitted result it might still receive. MPL-2.0 is flagged as file-level copyleft.
|
|
10
|
+
- `add_third_party_notice` records each reused source in the project's `THIRD_PARTY_NOTICES.md`.
|
|
11
|
+
- Reuse-first is the default for "build me X" and UI work (system prompt + built-in skill
|
|
12
|
+
`build-from-reference`): Euron's index first (typescript for UI), then permissive open source, one or two
|
|
13
|
+
references, read only the needed files, adapt with attribution, generate only what is missing; prefer the
|
|
14
|
+
project's existing component system. Budget notes after 4 searches and 6 reads.
|
|
15
|
+
- `/reference <what>` shows candidates from both sources with licences. The completion report and `-p` JSON
|
|
16
|
+
list what was reused (`Reused: repo/path (MIT)`, `"reused": [...]`).
|
|
17
|
+
|
|
18
|
+
### Error log (V5 contract section 2)
|
|
19
|
+
- Service and network errors, tool errors, crashes (fingerprint: type + top frame), hook failures and slash
|
|
20
|
+
command failures are reported, scrubbed (no prompts, file contents, command text, env values or secrets;
|
|
21
|
+
quoted text removed, home and project paths masked, key-like strings redacted), batched (20 per request,
|
|
22
|
+
under 8 KB) and sent in the background with a 3 s timeout; never blocks or fails what you are doing.
|
|
23
|
+
- Offline queue in `~/.euron/errors.jsonl` (at most 500), sent next time; `/bug` lists the last 10 with ids.
|
|
24
|
+
- Off with `errorReporting: false` or `EURON_NO_ERROR_REPORTS=1`. Disclosed in the README.
|
|
25
|
+
- An unexpected crash now prints a short message with an error id instead of a traceback.
|
|
26
|
+
|
|
27
|
+
### Reuse engine client (V6 contract section 6)
|
|
28
|
+
- `find_reusable(requirement, components, allow_external)`: the first step for build-type requests (a
|
|
29
|
+
heuristic adds a short note to the request; bug fixes, small edits and questions skip it). The model
|
|
30
|
+
splits the request into 1-8 components; Euron decides REUSE / ADAPT / GENERATE per component and
|
|
31
|
+
the CLI shows the table (component, decision, repository@sha, licence, confidence). The client re-checks
|
|
32
|
+
every decision: a non-permitted licence or a failed security scan always becomes GENERATE, unverified
|
|
33
|
+
security turns REUSE into ADAPT.
|
|
34
|
+
- The activity line shows the engine's states (searching, found, checking licence, validating security,
|
|
35
|
+
reusing, adapting, generating, running tests, integration completed), driven by the real tool calls.
|
|
36
|
+
- After tests pass on reused or adapted code, its metadata (never code) goes to the student's private
|
|
37
|
+
component library (`POST /v1/components`); `/components` lists it.
|
|
38
|
+
- Settings `reuse.enabled` and `reuse.external` (both default true), `--no-reuse`. A reuse engine or GitHub
|
|
39
|
+
failure never fails the turn: it generates instead, with a dim note.
|
|
40
|
+
- `-p --output-format json` gains `reuse` and `task_id`; the completion report adds "Reuse plan: ...".
|
|
41
|
+
|
|
42
|
+
### From the first live build test
|
|
43
|
+
- Reuse no longer depends on the model choosing it: for a build request the CLI splits the request into
|
|
44
|
+
components locally (no model call) and calls `/v1/reuse/plan` before the first model call, then puts
|
|
45
|
+
the decisions, files and licences into that first message and shows the table. Websites and UI ask for
|
|
46
|
+
Euron's TypeScript / TSX components. `find_reusable` stays available for more.
|
|
47
|
+
- The details the user gives are used: a system-prompt rule, an attached local photo is copied into
|
|
48
|
+
`assets/` (or `public/`) and referenced, and once per prompt the changed files are checked for
|
|
49
|
+
"Your Name", "Lorem ipsum", "example@example.com" and "TODO: replace", with one nudge to fix them.
|
|
50
|
+
- "Context was N% full ..." is printed only when it freed at least 2,000 tokens or the context was
|
|
51
|
+
60% full or more.
|
|
52
|
+
- The error-report note moved from the privacy section to Settings.
|
|
53
|
+
|
|
54
|
+
### Branding
|
|
55
|
+
- README top: the official Euron Code definition, the 3-step start, "Everything you need to build" and
|
|
56
|
+
the daily allowance with its fair-use note; usage at `euron usage`, `/usage` and euron.one.
|
|
57
|
+
- No vendor or model names, and no internal service details, anywhere a student can see. The `/usage`
|
|
58
|
+
value line reads "at reference market API prices". `/status`, `/cost`, `/context` and `euron doctor` show
|
|
59
|
+
percentages and plain words instead of internal sizes and addresses.
|
|
60
|
+
|
|
61
|
+
### Fewer tokens per request
|
|
62
|
+
- Tool descriptions shortened (about 730 fewer tokens on every request).
|
|
63
|
+
|
|
64
|
+
## 0.4.2 (2026-11-05)
|
|
65
|
+
|
|
66
|
+
### Changed
|
|
67
|
+
- Documentation and messages describe what Euron Code does for you, without internal service details.
|
|
68
|
+
|
|
3
69
|
## 0.4.1 (2026-11-05)
|
|
4
70
|
|
|
5
71
|
### Fixed
|
|
@@ -20,7 +86,7 @@
|
|
|
20
86
|
- The system prompt now says to use these for servers instead of `bash`.
|
|
21
87
|
|
|
22
88
|
### Reuse Euron's open-source code (V4 contract section 3)
|
|
23
|
-
- `euron_reuse_search` and `euron_reuse_read` over
|
|
89
|
+
- `euron_reuse_search` and `euron_reuse_read` over Euron's public MIT repos; the
|
|
24
90
|
system prompt asks to search before writing a substantial common component and to keep the licence
|
|
25
91
|
notice; `/reuse <query>`.
|
|
26
92
|
|
|
@@ -34,7 +100,7 @@
|
|
|
34
100
|
|
|
35
101
|
### More tools and gaps closed (audit increment 6)
|
|
36
102
|
- `find_symbol` (definitions and references), `delete_file` and `move_file` (both undone by `/rewind`).
|
|
37
|
-
- `AGENTS.md` and
|
|
103
|
+
- `AGENTS.md` and other agents' instruction files are read alongside `EURON.md` (trust-gated like it).
|
|
38
104
|
- Inline `<tool_call>` JSON is repaired (trailing commas, single quotes, Python literals); garbage
|
|
39
105
|
becomes an error result for the model, never a crash.
|
|
40
106
|
- `/rewind` works after `euron --resume`: checkpoints are kept in `~/.euron/checkpoints/<session>/`
|
|
@@ -43,9 +109,7 @@
|
|
|
43
109
|
- `/export` warns that the file contains tool output.
|
|
44
110
|
|
|
45
111
|
### Euron-only client and privacy (V4 contract section 1, audit increment 3)
|
|
46
|
-
- A 403 `client_not_supported`
|
|
47
|
-
- README and the first image attach say where data goes: prompts on GPUs rented from Vast.ai (not
|
|
48
|
-
logged), images described by Google Gemini (not stored).
|
|
112
|
+
- A 403 `client_not_supported` explains that Euron Code works through the euron app only.
|
|
49
113
|
|
|
50
114
|
### CI
|
|
51
115
|
- `.github/workflows/ci.yml`: pytest on ubuntu, windows and macos x Python 3.9 and 3.12 (ripgrep on one
|
|
@@ -65,7 +129,7 @@
|
|
|
65
129
|
1024. A request that would not fit is compacted first. The prompt estimate starts from the last
|
|
66
130
|
server-reported `prompt_tokens` and adds only the new messages.
|
|
67
131
|
|
|
68
|
-
### Context management
|
|
132
|
+
### Context management
|
|
69
133
|
- An output budget is reserved (min(maxOutputTokens, window/4)); percentages are of the usable rest.
|
|
70
134
|
- From 50%, tool outputs are cleared biggest and oldest first until under 40% (the latest step is never
|
|
71
135
|
touched). Each stub names the call (for reads: path and line range) so the model can read it again.
|
|
@@ -77,13 +141,13 @@
|
|
|
77
141
|
2,000 lines return an outline (definitions with line numbers) unless a range is given. The system
|
|
78
142
|
prompt says: search first, read ranges, edit with `edit_file`, never rewrite big files.
|
|
79
143
|
|
|
80
|
-
### A live session
|
|
144
|
+
### A live session
|
|
81
145
|
- **Activity line** while the agent works: an animated glyph, a rotating verb, elapsed time, tokens
|
|
82
146
|
sent and received (counted live from the stream), what is happening (`thinking`, `writing app.py`,
|
|
83
|
-
`running pytest 12s`, `waiting for
|
|
147
|
+
`running pytest 12s`, `waiting for capacity (2 ahead)`, `retrying in 3s`) and `esc to interrupt`.
|
|
84
148
|
On a terminal it redraws 10 times a second; without one it prints a progress line every 15 s; in `-p`
|
|
85
|
-
mode it appears on stderr only when stderr is a terminal.
|
|
86
|
-
|
|
149
|
+
mode it appears on stderr only when stderr is a terminal. Queue positions are shown
|
|
150
|
+
instead of being ignored.
|
|
87
151
|
- **Status bar**: model and effort, mode, session tokens and their value, context %, today's and this
|
|
88
152
|
week's remaining quota, session uptime. Refreshed continuously.
|
|
89
153
|
- **Type while it works.** The turn runs in a worker thread and the prompt stays live. `/usage`, `/cost`,
|
|
@@ -114,8 +178,7 @@
|
|
|
114
178
|
|
|
115
179
|
### Plan quotas and value (V3 contract)
|
|
116
180
|
- `/usage` shows the plan tier, all four periods (day, week, month, year) with bars and refill times,
|
|
117
|
-
`quota.blocked` prominently, and value lines at
|
|
118
|
-
Sonnet 5.5 API list prices · included in your plan"), plus what the allowance is worth. `/cost` and the
|
|
181
|
+
`quota.blocked` prominently, and value lines at reference market API prices, plus what the allowance is worth. `/cost` and the
|
|
119
182
|
status bar show this session's value. Always labelled as a reference, never a bill.
|
|
120
183
|
- New 429 codes `monthly_token_limit`, `yearly_token_limit` and `cooldown`, each with its refill time in
|
|
121
184
|
local time; exit code 5 in `-p` mode.
|
|
@@ -226,8 +289,7 @@
|
|
|
226
289
|
at turn N"; a read that reached the end of the file covers later partial reads.
|
|
227
290
|
- Micro-compaction at 60% of the context: tool outputs older than the last 3 steps become one-line stubs
|
|
228
291
|
(no model call); the summary still happens at 75%.
|
|
229
|
-
- `/cost` and `/context` report prompt tokens sent, tokens
|
|
230
|
-
(`usage.prompt_tokens_details.cached_tokens`) and tokens saved by each measure. `-p --output-format
|
|
292
|
+
- `/cost` and `/context` report prompt tokens sent, tokens reused from cache and tokens saved by each measure. `-p --output-format
|
|
231
293
|
json` adds `cached_tokens` and `saved_tokens`.
|
|
232
294
|
|
|
233
295
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: euron-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: Euron Code: an agentic coding assistant in your terminal for Euron Plus and Super 30 students.
|
|
5
5
|
Project-URL: Homepage, https://euron.one/code-agent
|
|
6
6
|
Author-email: Euron <contact@euron.one>
|
|
@@ -66,9 +66,20 @@ Description-Content-Type: text/markdown
|
|
|
66
66
|
|
|
67
67
|
# Euron Code
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
**Imagine It. Prompt It. Build Anything.**
|
|
70
|
+
|
|
71
|
+
Your AI Software Engineer. Ready to Build.
|
|
72
|
+
|
|
73
|
+
From a simple website to a complete AI-powered application, Euron Code turns your ideas into real,
|
|
74
|
+
working software.
|
|
75
|
+
|
|
76
|
+
It doesn't just write code. It thinks, plans, builds, runs, tests, finds errors, and fixes them. All from
|
|
77
|
+
your terminal.
|
|
78
|
+
|
|
79
|
+
No more starting from scratch. Euron Code intelligently reuses existing open-source implementations,
|
|
80
|
+
writes what's missing, and brings everything together.
|
|
81
|
+
|
|
82
|
+
One idea. One prompt. Endless possibilities.
|
|
72
83
|
|
|
73
84
|
## Get started in 3 steps
|
|
74
85
|
|
|
@@ -91,12 +102,37 @@ Enter.
|
|
|
91
102
|
|
|
92
103
|
**3. Type what you want**, or type `/` to see every command:
|
|
93
104
|
|
|
94
|
-
- `
|
|
105
|
+
- `build me a todo app with a FastAPI backend and tests`
|
|
95
106
|
- `the tests fail, find out why and fix them`
|
|
96
|
-
- `/
|
|
107
|
+
- `/usage` to see your tokens today, this week, month and year
|
|
97
108
|
|
|
98
109
|
That's it. Press **Esc** to stop it, **Ctrl-D** to quit.
|
|
99
110
|
|
|
111
|
+
## Everything you need to build
|
|
112
|
+
|
|
113
|
+
- 🧠 **Thinks Before It Codes**: understands your requirements and plans the implementation.
|
|
114
|
+
- ⚡ **Builds Complete Applications**: websites, SaaS products, AI agents, APIs, dashboards, automations,
|
|
115
|
+
and more.
|
|
116
|
+
- 🛠️ **Writes, Runs & Fixes**: creates files, executes commands, runs tests, and fixes errors.
|
|
117
|
+
- 🔍 **Reuses Proven Code**: discovers reusable Euron and approved open-source components to build faster.
|
|
118
|
+
- 🔄 **Works Across Your Project**: understands existing code and makes changes without unnecessarily
|
|
119
|
+
rebuilding everything.
|
|
120
|
+
- 🚀 **From Idea to Working Software**: helps you build, test, and prepare real applications for
|
|
121
|
+
deployment.
|
|
122
|
+
|
|
123
|
+
## 10 million AI tokens every day
|
|
124
|
+
|
|
125
|
+
Build more. Experiment more. Create without constantly worrying about tokens.
|
|
126
|
+
|
|
127
|
+
*Up to 10 million tokens per day, subject to fair-use policies, model availability, and plan limits.*
|
|
128
|
+
|
|
129
|
+
Included with **Euron Plus** and **Super 30** (get Plus at https://euron.one/plus).
|
|
130
|
+
|
|
131
|
+
Track your usage any time: `euron usage` in a terminal, `/usage` in a session, or
|
|
132
|
+
https://euron.one/code-agent/usage.
|
|
133
|
+
|
|
134
|
+
*Euron Code: You Imagine. We Code. You Create.*
|
|
135
|
+
|
|
100
136
|
## What happens automatically
|
|
101
137
|
|
|
102
138
|
- **Project setup.** The first time in a folder it writes `EURON.md` (your stack, build and test
|
|
@@ -105,14 +141,15 @@ That's it. Press **Esc** to stop it, **Ctrl-D** to quit.
|
|
|
105
141
|
improve `EURON.md`.
|
|
106
142
|
- **Context management.** Old tool output is cleared and long conversations are summarised before
|
|
107
143
|
they fill the context, so it never runs out mid-task. Long answers continue by themselves.
|
|
108
|
-
- **Token saving.** Unchanged files are not re-read
|
|
109
|
-
cache-friendly for the servers.
|
|
144
|
+
- **Token saving.** Unchanged files are not re-read and big files are read in parts.
|
|
110
145
|
- **Local cache.** `.euron/cache/` remembers the repo map and file list, so new sessions start fast.
|
|
111
146
|
Safe to delete; never holds secrets; git-ignored.
|
|
112
147
|
- **Runs your app.** It can start your dev server in the background, check it answers
|
|
113
148
|
(`check_app`, optionally in a headless browser), read its logs and stop it again.
|
|
114
|
-
- **
|
|
115
|
-
Euron's open-source repos
|
|
149
|
+
- **Builds from references, not from scratch.** For "build me X" and for UI work it first searches
|
|
150
|
+
Euron's open-source repos, then permissively licensed projects on GitHub, reads only the files it needs,
|
|
151
|
+
adapts them (keeping the licence notice and recording each source in `THIRD_PARTY_NOTICES.md`) and
|
|
152
|
+
writes only what is missing. Faster, and far fewer tokens. Try `/reference <what you want to build>`.
|
|
116
153
|
- **Live progress.** While it works you see what it is doing, the time, tokens and an `esc to interrupt`
|
|
117
154
|
line, and you can keep typing (see below).
|
|
118
155
|
|
|
@@ -127,7 +164,9 @@ Type `/` and pick from the menu. The most useful:
|
|
|
127
164
|
| `/status` | account, key, model, mode, session time and quota at a glance |
|
|
128
165
|
| `/cost`, `/context` | tokens of this session and what fills the context |
|
|
129
166
|
| `/attach <files>` | attach files, folders, Word/Excel/PowerPoint/PDF documents or images |
|
|
167
|
+
| `/reference <what>` | references to build from: Euron's repos + permissive open source, with licences |
|
|
130
168
|
| `/reuse <query>` | search Euron's open-source repos for code to reuse |
|
|
169
|
+
| `/components` | your component library: reused code whose tests passed in your projects |
|
|
131
170
|
| `/ps` | background processes (dev servers) it started; `/ps stop` |
|
|
132
171
|
| `/plan` | plan mode: it explores and proposes a plan, changes nothing |
|
|
133
172
|
| `/review` | review your uncommitted changes |
|
|
@@ -165,23 +204,52 @@ how full the context is, what is left today and this week, and how long the sess
|
|
|
165
204
|
Shift+Tab cycles default -> acceptEdits -> plan, and reaches bypass only if you started with it.
|
|
166
205
|
`--add-dir ../shared` lets it also work in another folder.
|
|
167
206
|
|
|
168
|
-
##
|
|
207
|
+
## Your code and your account
|
|
169
208
|
|
|
170
|
-
- Your code stays on your computer.
|
|
171
|
-
- Images you attach are turned into a text description by Euron's image understanding and are not stored.
|
|
209
|
+
- Your code stays on your computer.
|
|
172
210
|
- One login at a time: signing in on another computer signs this one out.
|
|
173
211
|
- Don't paste passwords or API keys into prompts.
|
|
174
212
|
|
|
175
|
-
##
|
|
213
|
+
## How Euron Code reuses proven code
|
|
214
|
+
|
|
215
|
+
Search first, reuse second, modify third, generate only what is missing. When you ask it to build an app,
|
|
216
|
+
a feature, a UI or an integration, Euron Code itself splits the request into a few components and asks
|
|
217
|
+
Euron for proven code for each one before the model starts (the model can ask for more with
|
|
218
|
+
`find_reusable`): Euron's own repositories, your own component library and approved open-source
|
|
219
|
+
projects. You see a decision table
|
|
220
|
+
(component, REUSE / ADAPT / GENERATE, repository@commit, licence, confidence). REUSE reads the pinned files
|
|
221
|
+
and integrates them with minimal edits, ADAPT reads and modifies them, GENERATE writes the part itself.
|
|
222
|
+
For websites and UI it asks for Euron's TypeScript / TSX components. Small edits, bug fixes and questions
|
|
223
|
+
skip this step. The details you give (your name, photo, email, links) go into the files; an attached
|
|
224
|
+
photo is copied into the project's `assets/` (or `public/`) folder, and if a changed file still says
|
|
225
|
+
"Your Name" or "Lorem ipsum" Euron Code is asked once to fix it. If that search is unavailable it simply generates,
|
|
226
|
+
with a short note. When the tests pass on reused or adapted code, the component is added to
|
|
227
|
+
your private library (its name, source, commit, licence and test result; never your code): `/components`
|
|
228
|
+
lists it. Turn reuse off with `--no-reuse` for one run, `reuse.enabled false`, or keep it to Euron's own
|
|
229
|
+
code with `reuse.external false`.
|
|
230
|
+
|
|
231
|
+
Licence rules: only MIT, Apache-2.0, BSD, ISC, 0BSD, Unlicense, MPL-2.0, CC0 and Zlib code is reused (see
|
|
232
|
+
below); a candidate whose licence or security scan fails is always turned into GENERATE by the CLI itself,
|
|
233
|
+
whatever the server says.
|
|
234
|
+
|
|
235
|
+
## Reusing open source safely
|
|
236
|
+
|
|
237
|
+
Only code under MIT, Apache-2.0, BSD-2/3-Clause, ISC, 0BSD, Unlicense, MPL-2.0, CC0-1.0 or Zlib is used.
|
|
238
|
+
GPL, AGPL, LGPL, SSPL and unlicensed code is never copied: Euron does not serve it and the CLI checks
|
|
239
|
+
again. MPL-2.0 files stay separate files under their own licence. Every reused source is recorded in
|
|
240
|
+
your project's `THIRD_PARTY_NOTICES.md`, and the completion report lists it (`Reused: owner/repo/path
|
|
241
|
+
(MIT)`).
|
|
176
242
|
|
|
177
|
-
|
|
178
|
-
about tokens. Included with Euron Plus and Super 30.
|
|
243
|
+
## Limits and value
|
|
179
244
|
|
|
180
|
-
|
|
245
|
+
Your plan has a token allowance per **day**, **week**, **month** and **year**, the same for Euron Plus
|
|
246
|
+
and Super 30.
|
|
247
|
+
`/usage` (or `euron usage`) shows each with a bar, what is left and when it refills, in your local time.
|
|
248
|
+
Days, weeks (Monday), months and years start at midnight IST. If a limit is reached, Euron Code says
|
|
249
|
+
which one and when it refills; nothing else breaks.
|
|
181
250
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
If a limit is reached, Euron Code says which one and when it refills; nothing else breaks.
|
|
251
|
+
It also shows what your own usage would cost at reference market API prices. **It is not a bill: you
|
|
252
|
+
pay nothing extra.** The same numbers are on https://euron.one/code-agent/usage.
|
|
185
253
|
|
|
186
254
|
## Run and check your app
|
|
187
255
|
|
|
@@ -219,7 +287,7 @@ running Euron Code in another terminal, you are asked whether to take over (`-p
|
|
|
219
287
|
The approval page approves for whichever Euron account is signed in on euron.one in that browser, so
|
|
220
288
|
to switch accounts sign in there with the other account first (or open the link in a private window).
|
|
221
289
|
If no browser opens (SSH, WSL), copy the link it prints. The key is kept in the system keychain, or in
|
|
222
|
-
`~/.euron/credentials.json` (readable only by you). To revoke a
|
|
290
|
+
`~/.euron/credentials.json` (readable only by you). To revoke a login, remove it at
|
|
223
291
|
https://euron.one/code-agent.
|
|
224
292
|
|
|
225
293
|
Optional extras: `pip install "euron-code[images]"` (image resizing, clipboard), `"euron-code[postgres]"`,
|
|
@@ -242,7 +310,7 @@ Optional extras: `pip install "euron-code[images]"` (image resizing, clipboard),
|
|
|
242
310
|
| `/help` | list commands, your own commands and skills, and the shortcuts |
|
|
243
311
|
| `/status`, `/whoami` | account, key, API, model, mode, session, uptime, quota |
|
|
244
312
|
| `/usage` (`/users`) | quota per period, refill times, value, sessions, tasks, cache share, last 30 days |
|
|
245
|
-
| `/cost`, `/context` |
|
|
313
|
+
| `/cost`, `/context` | what this session used; what fills the context |
|
|
246
314
|
| `/model [id]`, `/effort` | pick or set the model; reasoning effort |
|
|
247
315
|
| `/compact [focus]`, `/clear` | summarise to free context; start fresh |
|
|
248
316
|
| `/resume [id]`, `/rewind`, `/export [file]` | saved sessions; undo the last turn; save as Markdown |
|
|
@@ -274,7 +342,7 @@ prompt back in the input line. Files you changed again after that turn are skipp
|
|
|
274
342
|
|
|
275
343
|
### Continue later
|
|
276
344
|
|
|
277
|
-
Every session is saved under `~/.euron/sessions/` (text only
|
|
345
|
+
Every session is saved under `~/.euron/sessions/` (text only, without attached images).
|
|
278
346
|
|
|
279
347
|
```bash
|
|
280
348
|
euron --continue # pick up the latest session in this folder
|
|
@@ -391,7 +459,7 @@ Hooks are your own shell commands that run at fixed points. Put them in `setting
|
|
|
391
459
|
| `Stop` | when the model finishes its answer | stderr goes to the model and it continues (at most twice) |
|
|
392
460
|
|
|
393
461
|
Any other non-zero exit is shown as a warning and blocks nothing. `matcher` is a regular expression
|
|
394
|
-
over the tool name; common names (`Edit`, `Write`, `MultiEdit`, `Read`, `Bash`, `Grep`, `Glob`,
|
|
462
|
+
over the tool name; the common short names (`Edit`, `Write`, `MultiEdit`, `Read`, `Bash`, `Grep`, `Glob`,
|
|
395
463
|
`WebFetch`) and Euron Code names (`edit_file`, `bash`, ...) both work. The command runs in the project
|
|
396
464
|
folder with `cmd.exe` on Windows and `sh` elsewhere, and gets one JSON object on stdin: `event`,
|
|
397
465
|
`session_id`, `cwd`, `tool_name`, `tool_input`, `tool_output` (PostToolUse) or `prompt`. Environment:
|
|
@@ -406,31 +474,22 @@ always run.
|
|
|
406
474
|
|
|
407
475
|
## Context and tokens (automatic)
|
|
408
476
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
- **
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
- **Summary.** At 70%, or when the next request would not fit, older messages are summarised: the task,
|
|
420
|
-
decisions, files changed, commands and results, the last error and open todos.
|
|
421
|
-
- **Long answers and big edits.** An answer cut by the output limit continues by itself. A tool call cut
|
|
422
|
-
in the middle (a huge file write) is never run; the model is asked to make the change in smaller
|
|
423
|
-
steps. If the model spent its whole budget thinking, it retries with less reasoning.
|
|
477
|
+
Euron Code manages the conversation for you, with nothing to set up:
|
|
478
|
+
|
|
479
|
+
- **Always room to answer.** Each request leaves space for the reply; a conversation that is getting
|
|
480
|
+
full is tidied up first.
|
|
481
|
+
- **Clearing.** Old tool output is replaced with one-line notes that say what to re-read (for example
|
|
482
|
+
`read_file src/app.py lines 1-200`), so the agent keeps going without losing track.
|
|
483
|
+
- **Summary.** Long conversations are summarised: the task, decisions, files changed, commands and
|
|
484
|
+
results, the last error and open todos.
|
|
485
|
+
- **Long answers and big edits.** An answer that gets cut off continues by itself. A huge edit that gets
|
|
486
|
+
cut off is never applied half-way; the change is made in smaller steps instead.
|
|
424
487
|
- **Reasoning effort** is `medium` by default and `low` for quick follow-ups ("thanks", "continue");
|
|
425
488
|
change it with `/effort low|medium|high`.
|
|
426
|
-
- **Reads.**
|
|
427
|
-
|
|
428
|
-
note instead of the content.
|
|
429
|
-
- **Cache-friendly.** The system prompt and tool list never change during a session, so the servers can
|
|
430
|
-
reuse their prefix cache; changing data goes at the end of your message.
|
|
489
|
+
- **Reads.** Files are read in parts; a very large file returns an outline first. Re-reading an
|
|
490
|
+
unchanged file returns a one-line note instead of the content.
|
|
431
491
|
|
|
432
|
-
`/cost` and `/context` show what
|
|
433
|
-
tokens these measures kept out of the context.
|
|
492
|
+
`/cost` and `/context` show what this session used and what fills the context.
|
|
434
493
|
|
|
435
494
|
## Non-interactive use (scripts, CI)
|
|
436
495
|
|
|
@@ -447,6 +506,9 @@ folder or container.
|
|
|
447
506
|
|
|
448
507
|
`--permission-mode plan` gives a read-only run that ends with a plan.
|
|
449
508
|
|
|
509
|
+
With `--output-format json` the result also has `reuse` (one entry per planned component: `component`,
|
|
510
|
+
`decision`, `repo`, `license`), `reused` (files read from references) and `task_id`.
|
|
511
|
+
|
|
450
512
|
Exit codes: `0` ok, `1` error, `2` bad usage, `3` no Euron Plus / Super 30 access, `4` not logged in or
|
|
451
513
|
key rejected, `5` a token allowance used (day, week, month, year) or a cooldown, `6` `--max-turns` reached,
|
|
452
514
|
`130` interrupted.
|
|
@@ -489,11 +551,18 @@ the connection itself is opened read-only. To let it write (local dev databases
|
|
|
489
551
|
| `toolOutputMaxChars` | `12000` | longer tool output is cut to head + tail |
|
|
490
552
|
| `hooks` | `{}` | see [Hooks](#hooks) |
|
|
491
553
|
| `webFetch` | `true` | allow the web page tool (it still asks per site) |
|
|
554
|
+
| `reuse.enabled` | `true` | look for reusable code before building (`--no-reuse` for one run) |
|
|
555
|
+
| `reuse.external` | `true` | also search permissively licensed GitHub projects, not only Euron's |
|
|
556
|
+
| `errorReporting` | `true` | send a short error report when something fails (see below) |
|
|
492
557
|
| `db.connections.<name>` | | database DSNs |
|
|
493
558
|
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
`
|
|
559
|
+
**Error reports.** When something fails, Euron Code sends Euron a short error report (the error kind and
|
|
560
|
+
code, the tool or command name, version and OS; never your prompts, code or secrets) so it can be fixed.
|
|
561
|
+
`/bug` shows your last ones. Turn it off with `euron config set errorReporting false` or
|
|
562
|
+
`EURON_NO_ERROR_REPORTS=1`.
|
|
563
|
+
|
|
564
|
+
Environment variables: `EURON_API_KEY` (use a key without logging in, for CI), `EURON_HOME` (instead of
|
|
565
|
+
`~/.euron`), `EURON_NO_BROWSER=1`.
|
|
497
566
|
|
|
498
567
|
## In VS Code
|
|
499
568
|
|
|
@@ -529,13 +598,9 @@ and the keychain.
|
|
|
529
598
|
|
|
530
599
|
## Privacy and safety
|
|
531
600
|
|
|
532
|
-
- Your code stays on your computer
|
|
533
|
-
with Euron's model. Attached images are turned into text by Euron's image understanding and are not
|
|
534
|
-
stored.
|
|
601
|
+
- Your code stays on your computer; the agent works on it from your terminal.
|
|
535
602
|
- Your key is never printed in full and never logged.
|
|
536
603
|
- Edits and commands ask first. Files outside the project folder always ask, even to read.
|
|
537
|
-
- Each request carries a random session id and task id so your usage page can count sessions and
|
|
538
|
-
tasks. Nothing else about the conversation is stored by the gateway.
|
|
539
604
|
- Hooks are commands you configure; project hooks only run after you trust them.
|
|
540
605
|
- Text inside your files, web pages and command output is treated as data, not instructions.
|
|
541
606
|
|