euron-code 0.4.1__tar.gz → 0.4.2__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.4.2}/CHANGELOG.md +5 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/PKG-INFO +20 -33
- {euron_code-0.4.1 → euron_code-0.4.2}/README.md +19 -32
- {euron_code-0.4.1 → euron_code-0.4.2}/pyproject.toml +1 -1
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/__init__.py +1 -1
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/activity.py +1 -1
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/repl.py +0 -5
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_v3_activity.py +3 -3
- {euron_code-0.4.1 → euron_code-0.4.2}/.gitignore +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/LICENSE +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/__main__.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/agent.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/api.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/attachments.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/auth.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/builtin_skills/explain-codebase/SKILL.md +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/builtin_skills/review/SKILL.md +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/builtin_skills/test-writer/SKILL.md +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/cache.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/checkpoints.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/cli.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/config.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/context.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/contextforge/LICENSE +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/contextforge/__init__.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/contextforge/text.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/contextforge/toolout.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/credentials.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/doctor.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/documents.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/frontmatter.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/hooks.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/keys.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/memory.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/permissions.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/project_setup.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/prompts.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/repomap.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/rules.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/sessions.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/skills.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/textsafe.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/tools/__init__.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/tools/background.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/tools/base.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/tools/db.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/tools/document.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/tools/fs.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/tools/ignore.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/tools/reuse.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/tools/search.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/tools/shell.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/tools/skill.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/tools/symbols.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/tools/task.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/tools/todo.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/tools/web.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/trust.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/ui.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/usage_view.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/conftest.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/helpers.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/mock_gateway.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/serve_helper.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_agent_mock.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_api_shell.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_cli_e2e.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_context_memory_sessions.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_db.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_permissions.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_powershell_exit_codes.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_repl.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_search.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_textsafe.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_tools_fs.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_v2_rules_skills_hooks.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_v2_tokens_shortcuts.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_v2_usage_headers.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_v31_security.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_v3_accounts_value_setup.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_v3_attachments.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_v3_context.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_v3_live_repl.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_v3_single_login.py +0 -0
- {euron_code-0.4.1 → euron_code-0.4.2}/tests/test_v4.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: euron-code
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.2
|
|
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>
|
|
@@ -105,8 +105,7 @@ That's it. Press **Esc** to stop it, **Ctrl-D** to quit.
|
|
|
105
105
|
improve `EURON.md`.
|
|
106
106
|
- **Context management.** Old tool output is cleared and long conversations are summarised before
|
|
107
107
|
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.
|
|
108
|
+
- **Token saving.** Unchanged files are not re-read and big files are read in parts.
|
|
110
109
|
- **Local cache.** `.euron/cache/` remembers the repo map and file list, so new sessions start fast.
|
|
111
110
|
Safe to delete; never holds secrets; git-ignored.
|
|
112
111
|
- **Runs your app.** It can start your dev server in the background, check it answers
|
|
@@ -167,7 +166,7 @@ Shift+Tab cycles default -> acceptEdits -> plan, and reaches bypass only if you
|
|
|
167
166
|
|
|
168
167
|
## Where your data goes
|
|
169
168
|
|
|
170
|
-
- Your code stays on your computer.
|
|
169
|
+
- Your code stays on your computer.
|
|
171
170
|
- Images you attach are turned into a text description by Euron's image understanding and are not stored.
|
|
172
171
|
- One login at a time: signing in on another computer signs this one out.
|
|
173
172
|
- Don't paste passwords or API keys into prompts.
|
|
@@ -219,7 +218,7 @@ running Euron Code in another terminal, you are asked whether to take over (`-p
|
|
|
219
218
|
The approval page approves for whichever Euron account is signed in on euron.one in that browser, so
|
|
220
219
|
to switch accounts sign in there with the other account first (or open the link in a private window).
|
|
221
220
|
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
|
|
221
|
+
`~/.euron/credentials.json` (readable only by you). To revoke a login, remove it at
|
|
223
222
|
https://euron.one/code-agent.
|
|
224
223
|
|
|
225
224
|
Optional extras: `pip install "euron-code[images]"` (image resizing, clipboard), `"euron-code[postgres]"`,
|
|
@@ -242,7 +241,7 @@ Optional extras: `pip install "euron-code[images]"` (image resizing, clipboard),
|
|
|
242
241
|
| `/help` | list commands, your own commands and skills, and the shortcuts |
|
|
243
242
|
| `/status`, `/whoami` | account, key, API, model, mode, session, uptime, quota |
|
|
244
243
|
| `/usage` (`/users`) | quota per period, refill times, value, sessions, tasks, cache share, last 30 days |
|
|
245
|
-
| `/cost`, `/context` |
|
|
244
|
+
| `/cost`, `/context` | what this session used; what fills the context |
|
|
246
245
|
| `/model [id]`, `/effort` | pick or set the model; reasoning effort |
|
|
247
246
|
| `/compact [focus]`, `/clear` | summarise to free context; start fresh |
|
|
248
247
|
| `/resume [id]`, `/rewind`, `/export [file]` | saved sessions; undo the last turn; save as Markdown |
|
|
@@ -406,31 +405,22 @@ always run.
|
|
|
406
405
|
|
|
407
406
|
## Context and tokens (automatic)
|
|
408
407
|
|
|
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.
|
|
408
|
+
Euron Code manages the conversation for you, with nothing to set up:
|
|
409
|
+
|
|
410
|
+
- **Always room to answer.** Each request leaves space for the reply; a conversation that is getting
|
|
411
|
+
full is tidied up first.
|
|
412
|
+
- **Clearing.** Old tool output is replaced with one-line notes that say what to re-read (for example
|
|
413
|
+
`read_file src/app.py lines 1-200`), so the agent keeps going without losing track.
|
|
414
|
+
- **Summary.** Long conversations are summarised: the task, decisions, files changed, commands and
|
|
415
|
+
results, the last error and open todos.
|
|
416
|
+
- **Long answers and big edits.** An answer that gets cut off continues by itself. A huge edit that gets
|
|
417
|
+
cut off is never applied half-way; the change is made in smaller steps instead.
|
|
424
418
|
- **Reasoning effort** is `medium` by default and `low` for quick follow-ups ("thanks", "continue");
|
|
425
419
|
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.
|
|
420
|
+
- **Reads.** Files are read in parts; a very large file returns an outline first. Re-reading an
|
|
421
|
+
unchanged file returns a one-line note instead of the content.
|
|
431
422
|
|
|
432
|
-
`/cost` and `/context` show what
|
|
433
|
-
tokens these measures kept out of the context.
|
|
423
|
+
`/cost` and `/context` show what this session used and what fills the context.
|
|
434
424
|
|
|
435
425
|
## Non-interactive use (scripts, CI)
|
|
436
426
|
|
|
@@ -491,9 +481,8 @@ the connection itself is opened read-only. To let it write (local dev databases
|
|
|
491
481
|
| `webFetch` | `true` | allow the web page tool (it still asks per site) |
|
|
492
482
|
| `db.connections.<name>` | | database DSNs |
|
|
493
483
|
|
|
494
|
-
Environment variables: `
|
|
495
|
-
|
|
496
|
-
`EURON_HOME` (instead of `~/.euron`), `EURON_NO_BROWSER=1`.
|
|
484
|
+
Environment variables: `EURON_API_KEY` (use a key without logging in, for CI), `EURON_HOME` (instead of
|
|
485
|
+
`~/.euron`), `EURON_NO_BROWSER=1`.
|
|
497
486
|
|
|
498
487
|
## In VS Code
|
|
499
488
|
|
|
@@ -534,8 +523,6 @@ and the keychain.
|
|
|
534
523
|
stored.
|
|
535
524
|
- Your key is never printed in full and never logged.
|
|
536
525
|
- 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
526
|
- Hooks are commands you configure; project hooks only run after you trust them.
|
|
540
527
|
- Text inside your files, web pages and command output is treated as data, not instructions.
|
|
541
528
|
|
|
@@ -39,8 +39,7 @@ That's it. Press **Esc** to stop it, **Ctrl-D** to quit.
|
|
|
39
39
|
improve `EURON.md`.
|
|
40
40
|
- **Context management.** Old tool output is cleared and long conversations are summarised before
|
|
41
41
|
they fill the context, so it never runs out mid-task. Long answers continue by themselves.
|
|
42
|
-
- **Token saving.** Unchanged files are not re-read
|
|
43
|
-
cache-friendly for the servers.
|
|
42
|
+
- **Token saving.** Unchanged files are not re-read and big files are read in parts.
|
|
44
43
|
- **Local cache.** `.euron/cache/` remembers the repo map and file list, so new sessions start fast.
|
|
45
44
|
Safe to delete; never holds secrets; git-ignored.
|
|
46
45
|
- **Runs your app.** It can start your dev server in the background, check it answers
|
|
@@ -101,7 +100,7 @@ Shift+Tab cycles default -> acceptEdits -> plan, and reaches bypass only if you
|
|
|
101
100
|
|
|
102
101
|
## Where your data goes
|
|
103
102
|
|
|
104
|
-
- Your code stays on your computer.
|
|
103
|
+
- Your code stays on your computer.
|
|
105
104
|
- Images you attach are turned into a text description by Euron's image understanding and are not stored.
|
|
106
105
|
- One login at a time: signing in on another computer signs this one out.
|
|
107
106
|
- Don't paste passwords or API keys into prompts.
|
|
@@ -153,7 +152,7 @@ running Euron Code in another terminal, you are asked whether to take over (`-p
|
|
|
153
152
|
The approval page approves for whichever Euron account is signed in on euron.one in that browser, so
|
|
154
153
|
to switch accounts sign in there with the other account first (or open the link in a private window).
|
|
155
154
|
If no browser opens (SSH, WSL), copy the link it prints. The key is kept in the system keychain, or in
|
|
156
|
-
`~/.euron/credentials.json` (readable only by you). To revoke a
|
|
155
|
+
`~/.euron/credentials.json` (readable only by you). To revoke a login, remove it at
|
|
157
156
|
https://euron.one/code-agent.
|
|
158
157
|
|
|
159
158
|
Optional extras: `pip install "euron-code[images]"` (image resizing, clipboard), `"euron-code[postgres]"`,
|
|
@@ -176,7 +175,7 @@ Optional extras: `pip install "euron-code[images]"` (image resizing, clipboard),
|
|
|
176
175
|
| `/help` | list commands, your own commands and skills, and the shortcuts |
|
|
177
176
|
| `/status`, `/whoami` | account, key, API, model, mode, session, uptime, quota |
|
|
178
177
|
| `/usage` (`/users`) | quota per period, refill times, value, sessions, tasks, cache share, last 30 days |
|
|
179
|
-
| `/cost`, `/context` |
|
|
178
|
+
| `/cost`, `/context` | what this session used; what fills the context |
|
|
180
179
|
| `/model [id]`, `/effort` | pick or set the model; reasoning effort |
|
|
181
180
|
| `/compact [focus]`, `/clear` | summarise to free context; start fresh |
|
|
182
181
|
| `/resume [id]`, `/rewind`, `/export [file]` | saved sessions; undo the last turn; save as Markdown |
|
|
@@ -340,31 +339,22 @@ always run.
|
|
|
340
339
|
|
|
341
340
|
## Context and tokens (automatic)
|
|
342
341
|
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
- **
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
- **Summary.** At 70%, or when the next request would not fit, older messages are summarised: the task,
|
|
354
|
-
decisions, files changed, commands and results, the last error and open todos.
|
|
355
|
-
- **Long answers and big edits.** An answer cut by the output limit continues by itself. A tool call cut
|
|
356
|
-
in the middle (a huge file write) is never run; the model is asked to make the change in smaller
|
|
357
|
-
steps. If the model spent its whole budget thinking, it retries with less reasoning.
|
|
342
|
+
Euron Code manages the conversation for you, with nothing to set up:
|
|
343
|
+
|
|
344
|
+
- **Always room to answer.** Each request leaves space for the reply; a conversation that is getting
|
|
345
|
+
full is tidied up first.
|
|
346
|
+
- **Clearing.** Old tool output is replaced with one-line notes that say what to re-read (for example
|
|
347
|
+
`read_file src/app.py lines 1-200`), so the agent keeps going without losing track.
|
|
348
|
+
- **Summary.** Long conversations are summarised: the task, decisions, files changed, commands and
|
|
349
|
+
results, the last error and open todos.
|
|
350
|
+
- **Long answers and big edits.** An answer that gets cut off continues by itself. A huge edit that gets
|
|
351
|
+
cut off is never applied half-way; the change is made in smaller steps instead.
|
|
358
352
|
- **Reasoning effort** is `medium` by default and `low` for quick follow-ups ("thanks", "continue");
|
|
359
353
|
change it with `/effort low|medium|high`.
|
|
360
|
-
- **Reads.**
|
|
361
|
-
|
|
362
|
-
note instead of the content.
|
|
363
|
-
- **Cache-friendly.** The system prompt and tool list never change during a session, so the servers can
|
|
364
|
-
reuse their prefix cache; changing data goes at the end of your message.
|
|
354
|
+
- **Reads.** Files are read in parts; a very large file returns an outline first. Re-reading an
|
|
355
|
+
unchanged file returns a one-line note instead of the content.
|
|
365
356
|
|
|
366
|
-
`/cost` and `/context` show what
|
|
367
|
-
tokens these measures kept out of the context.
|
|
357
|
+
`/cost` and `/context` show what this session used and what fills the context.
|
|
368
358
|
|
|
369
359
|
## Non-interactive use (scripts, CI)
|
|
370
360
|
|
|
@@ -425,9 +415,8 @@ the connection itself is opened read-only. To let it write (local dev databases
|
|
|
425
415
|
| `webFetch` | `true` | allow the web page tool (it still asks per site) |
|
|
426
416
|
| `db.connections.<name>` | | database DSNs |
|
|
427
417
|
|
|
428
|
-
Environment variables: `
|
|
429
|
-
|
|
430
|
-
`EURON_HOME` (instead of `~/.euron`), `EURON_NO_BROWSER=1`.
|
|
418
|
+
Environment variables: `EURON_API_KEY` (use a key without logging in, for CI), `EURON_HOME` (instead of
|
|
419
|
+
`~/.euron`), `EURON_NO_BROWSER=1`.
|
|
431
420
|
|
|
432
421
|
## In VS Code
|
|
433
422
|
|
|
@@ -468,8 +457,6 @@ and the keychain.
|
|
|
468
457
|
stored.
|
|
469
458
|
- Your key is never printed in full and never logged.
|
|
470
459
|
- Edits and commands ask first. Files outside the project folder always ask, even to read.
|
|
471
|
-
- Each request carries a random session id and task id so your usage page can count sessions and
|
|
472
|
-
tasks. Nothing else about the conversation is stored by the gateway.
|
|
473
460
|
- Hooks are commands you configure; project hooks only run after you trust them.
|
|
474
461
|
- Text inside your files, web pages and command output is treated as data, not instructions.
|
|
475
462
|
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "euron-code"
|
|
7
|
-
version = "0.4.
|
|
7
|
+
version = "0.4.2"
|
|
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"
|
|
@@ -64,7 +64,7 @@ def phase_from_comment(comment: Optional[str]) -> Optional[str]:
|
|
|
64
64
|
m = QUEUED.search(comment)
|
|
65
65
|
if m:
|
|
66
66
|
n = int(m.group(1))
|
|
67
|
-
return "waiting for
|
|
67
|
+
return "waiting for capacity" + (f" ({n} ahead)" if n else " (next in line)")
|
|
68
68
|
if "previous request" in comment:
|
|
69
69
|
return "waiting for your previous request to finish"
|
|
70
70
|
return None
|
|
@@ -1203,11 +1203,6 @@ class Repl:
|
|
|
1203
1203
|
if weekly_limit(q) > 0:
|
|
1204
1204
|
rows.append(("This week", f"{fmt_int(self.remaining_week())} of {fmt_int(weekly_limit(q))} left, "
|
|
1205
1205
|
f"resets {local_when(q.get('weekResetsAt'))}"))
|
|
1206
|
-
fleet = me.get("fleet") or me.get("gpus") or me.get("capacity")
|
|
1207
|
-
if isinstance(fleet, dict) and fleet:
|
|
1208
|
-
rows.append(("GPU fleet", ", ".join(f"{k} {v}" for k, v in fleet.items() if not isinstance(v, (dict, list)))))
|
|
1209
|
-
elif isinstance(fleet, str) and fleet:
|
|
1210
|
-
rows.append(("GPU fleet", fleet))
|
|
1211
1206
|
if self.agent.permissions.extra_roots:
|
|
1212
1207
|
rows.append(("Extra dirs", ", ".join(str(r) for r in self.agent.permissions.extra_roots)))
|
|
1213
1208
|
rows.append(("Version", f"euron-code {__version__}, Python {platform.python_version()}, "
|
|
@@ -112,8 +112,8 @@ def test_tool_elapsed_queue_count_and_ascii_fallback():
|
|
|
112
112
|
|
|
113
113
|
|
|
114
114
|
def test_helpers():
|
|
115
|
-
assert phase_from_comment("queued, 2 ahead") == "waiting for
|
|
116
|
-
assert phase_from_comment("queued, 0 ahead") == "waiting for
|
|
115
|
+
assert phase_from_comment("queued, 2 ahead") == "waiting for capacity (2 ahead)"
|
|
116
|
+
assert phase_from_comment("queued, 0 ahead") == "waiting for capacity (next in line)"
|
|
117
117
|
assert "previous request" in phase_from_comment("waiting for your previous request to finish")
|
|
118
118
|
assert phase_from_comment("keep-alive") is None and phase_from_comment(None) is None
|
|
119
119
|
assert tool_label("write_file", "create app.py") == "writing app.py"
|
|
@@ -142,7 +142,7 @@ def test_queue_comments_show_gpu_wait(project, logged_in, mock_url):
|
|
|
142
142
|
ui = ActivityUI()
|
|
143
143
|
a = make_agent(project, mock_url, logged_in, ui)
|
|
144
144
|
assert a.run_turn("[mock:queued] hi").stop_reason == "end_turn"
|
|
145
|
-
assert "waiting for
|
|
145
|
+
assert "waiting for capacity (2 ahead)" in ui.phases and "waiting for capacity (next in line)" in ui.phases
|
|
146
146
|
|
|
147
147
|
|
|
148
148
|
def test_busy_retries_keep_the_line_alive(project, logged_in, mock_url, monkeypatch):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{euron_code-0.4.1 → euron_code-0.4.2}/src/euron_code/builtin_skills/explain-codebase/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|