Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ Sub-agents (`subagent_spawn`, `task_*`, `subagent_plan_execute`, `task_history_l

**Phase 0** contracts in `crate::execution`; **Phase 1** `LocalExecutionProvider` in `execution::local`; **Phase 2** gates tools behind **`[harness.execution] enabled = true`** (`ExecutionHarnessConfig` in `config.rs`); **Phase 3** `JupyterExecutionProvider` in `execution::jupyter` when `default_provider = "jupyter"` and `[harness.execution.jupyter]` is set (kernel WebSocket requests **`v1.kernel.websocket.jupyter.org`**, decodes server text + v1 + legacy binary; see user guide); **Phase 4 (MVP)** `SshExecutionProvider` in `execution::ssh` when `default_provider = "ssh"` and `[harness.execution.ssh]` is set (one SSH transport per `execution_session_create`; **Python** uses a persistent framed REPL on a dedicated channel with `mkdir -p`+`cd` before each spawn and a one-retry self-test; **shell** runs `bash -s` per `execution_run` with the same `mkdir -p`+`cd`; `cwd_mode` / `cwd_relative` apply on the **remote** only—see user guide; password via **`SSH_PASSWORD`** or key via `identity_file`; host keys: see user guide); **Phase 5 (MVP)** Colab Session Operator skill (starts Colab VMs via `colab-cli`, supports CPU/GPU/TPU provisioning and script execution). **Phase 6 (artifacts / manifest):** Jupyter materializes `display_data` for PNG/JPEG and large CSV/JSON under **`sandbox_dir/.execution_artifacts/{session_id}/{run_uuid}/`**; `RunResult.attachments` lists sandbox-relative paths. **`execution_artifact_list`** enumerates artifacts per session. Each **`execution_run`** appends one metadata line to **`workspace_dir/.system_generated/execution_runs.jsonl`** (**`run_id`** locates `execution_history/` journals; **`chat_id`** filters the Ratatui **executions** pane per terminal chat thread) and emits **`TelemetryEvent::ExecutionRunFinished`**. Optional **`[harness.execution]`** keys: `artifact_max_file_bytes`, `artifact_max_total_bytes_per_run`, `artifact_max_files_per_run`. **Deferred:** policy-gated execution provisioners (Runpod-style allocation feeding providers) are design-only in **`docs/execution-implementation-plan.md`** (“Deferred — Execution provisioners”). Tools: `execution_session_create`, `execution_run`, `execution_artifact_list`, `execution_cancel`, `execution_session_close`, `execution_env_info` (`src/tools/execution.rs`), wired in `src/main.rs`. Optional keys: `default_provider` (`local`, `jupyter`, `ssh`), `max_output_bytes`, `max_wall_secs`, `max_sessions`, `allowed_providers`, `python_executable` (local host probe / `execution_env_info`; not the remote interpreter for SSH), `local_python_mode` (`repl` default vs `subprocess` / `stateless` / `false` for one interpreter per `execution_run` on **local** Python only), `local_python_runtime` (`system` or `uv_managed`) and UV tuning (`uv_binary`, `uv_python`, `uv_requirements`). Sub-agents with `allowed_tools` must include these names if sub-agents should call them. There is no separate mpsc execution actor yet—the harness holds `Arc<dyn ExecutionProvider>` and tools call it directly.

**Loop hardening:** top-level **`doom_loop_enabled`** in `config.toml` (default true) enables ml-intern-style detection of repeated identical tool calls before each LLM step; a corrective **user** message is persisted when triggered (`src/agent/doom_loop.rs`).
**Loop hardening:** top-level **`doom_loop_enabled`** in `config.toml` (default true) enables ml-intern-style detection of repeated identical tool calls before each LLM step; a corrective **user** message is persisted when triggered (`src/agent/doom_loop.rs`). Independently, the pure controller in `src/agent/budget.rs` tracks LLM turns, wall time, provider-reported tokens, provider retries, context recoveries, repeated typed tool root causes, and observable progress. It emits run-scoped typed warnings, stops three consecutive failures with the same `(tool, error code)` as `Stuck::RepeatedRootCause`, stops sustained no-progress runs as `Stuck::NoProgress`, and retains `max_iterations` only as the absolute LLM-turn ceiling. Steering and context recovery reset no-progress only; successful new evidence may also clear the repeated-root-cause streak, while consumed time/tokens/retries are never refunded.

### Structured LLM Extraction
If you are asking the LLM to yield a structured JSON payload internally (e.g. for reflection or summarization outside of the standard `ToolCall` registry):
Expand Down
Loading
Loading