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