Hoist OneShotCapturingBackend to module scope and remove two identical
CapturingBackend definitions that duplicated its functionality.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Prompt nodes now discover project docs (AGENTS.md, CLAUDE.md, etc.)
and pass them as a system prompt to one_shot LLM calls. The
project_memory attribute defaults to true and can be set to false
to disable this behavior.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Watermark-based skill that detects code changes since the last run,
maps them to affected doc pages via a code-to-doc mapping table, and
makes surgical edits. Watermark file created on first run.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Allow passing environment variables into sandbox command execution via
`[sandbox.env]` in TOML configs. Supports literal values and host env
passthrough via `${env.VARNAME}` syntax (whole-value only, missing vars
are hard errors). Env vars are injected into command nodes via
`cmd.envs()` and into CLI backend agents via the sandbox env file.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move docs/naming/changelog-guide.md into the skill's references/
directory and de-duplicate SKILL.md against guide.md and format.md.
Each file now has a single responsibility: SKILL.md (workflow steps),
guide.md (writing conventions), format.md (MDX template).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The skill previously used the most recent entry date as an exclusive
cutoff, so re-running on the same day would skip commits that landed
after the first run. Make the date range inclusive and regenerate
existing files with the full set of commits for that day.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extract read_existing_id() helper to deduplicate file-read-trim-check
pattern, and extract private Telemetry::new() to consolidate for_server/for_cli.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Server is long-lived on a fixed host, so a persisted UUID at ~/.arc/.id is
appropriate. CLI runs ephemerally, so an MD5 of the MAC address avoids file
I/O and is stable per-machine. CLI falls back to ~/.arc/.id if it exists
for migration.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a telemetry library for product analytics with Segment integration.
Includes Track/User wire types, persistent anonymous ID (~/.arc/anonymous_id),
OS/arch/locale context, fire-and-forget sender via tokio::spawn, and
ARC_TELEMETRY env var control (off/errors/all). No CLI or server integration yet.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Cloud sandboxes clone the repo, so untracked local files referenced via
prompt="@path/to/file.md" won't exist. This inlines those file contents
at prepare time while leaving git-tracked @references for the agent to
read from the sandbox.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Extract ContentPart::is_opaque_openai() to deduplicate matches! patterns
- Use std::mem::take to avoid cloning reasoning/message items
- Replace hand-rolled DockerfileSource serde with derive + untagged enum
- Add --fail-with-body to imagegen curl for better error reporting
- Add tmp to .gitignore
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Allows overriding the workflow goal from the command line, which is
exposed as $goal in node prompts via VariableExpansionTransform.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add DockerfileSource enum (Inline/Path) with custom serde to allow
referencing a Dockerfile by path instead of embedding content inline.
Paths are resolved relative to the config file directory during loading.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Bash script that calls the Gemini API (gemini-2.5-flash-image) to generate
images from text prompts. Reads GEMINI_API_KEY from .env.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace 16 raw string literal usages of "openai_reasoning" and
"openai_message" across openai.rs and history.rs with constants
defined on ContentPart, eliminating typo risk and centralizing
the kind identifiers.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When an assistant turn has reasoning + text + tool calls, the message
output item was reconstructed without its original `id` and `status`
fields. The Responses API requires reasoning items to be followed by
a valid output item identified by `id`, so the reconstructed message
was not recognized, causing "Item 'rs_...' was provided without its
required following item" errors.
Preserve the full message output item as an opaque `openai_message`
provider part (like we already do for `openai_reasoning`), and use it
in translate_input instead of constructing a new message from text.
Also strip `openai_message` items during compaction alongside reasoning.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implement the server-side session handlers (create, retrieve, send message,
stream events, list) with in-memory storage and LLM generation, wire them
into the router replacing not_implemented stubs, add run_chat_via_server
CLI function with SSE streaming, and add mode dispatch so `arc llm chat
--mode server` delegates to the API server.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- runs-board: removed browser tabs and address bar
- run-detail and workflow-example: removed browser chrome, Arc nav, and cropped sides
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update 2026-03-07 changelog with Completions API, Sprites sandbox,
removed endpoints, and additional fixes. Replace plain text on deploy
guide stub pages with Warning callouts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add runs board screenshot to introduction page
- Add run detail and workflow diagram screenshots to why-arc page
- Add private research preview warning to quick-start page
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a completions API endpoint that supports both streaming (SSE) and
non-streaming (JSON) modes, with structured output via JSON Schema.
Wires up the CLI `arc llm prompt` command to use the server when
`--mode server` is specified.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
After compaction replaces old turns with a summary, preserved Assistant
turns may contain opaque openai_reasoning items that reference the now-
removed context. These orphaned items violate the OpenAI Responses API
constraint that reasoning items must be followed by their paired output,
causing "Item 'rs_...' was provided without its required following item"
errors. Strip them in a new strip_opaque_reasoning() method called at
the end of compact(). Anthropic thinking blocks are left untouched.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements the Sandbox trait backed by the `sprite` CLI binary.
Includes 29 unit tests with mock runner and an e2e integration test
against the live Sprites service.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
GPT-5.4 frequently emits bare @@ instead of @@ context @@, causing all
Update File patches to fail. The parser now accepts bare @@ and locates
the hunk position from the first remove/context change line. Also
improves the system prompt with an explicit @@ context @@ example.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Consolidates the two separate String parameters (git_author_name,
git_author_email) threaded through ~10 function signatures into a
single GitAuthor struct with Default providing "arc"/"arc@local".
Also quotes git config values in parallel.rs shell commands.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The OpenAI Responses API sends reasoning_summary_text.delta and
reasoning_text.delta SSE events during extended reasoning, but the
OpenAI provider silently swallowed them. This caused the tight-loop
in process_next_sse_events to consume events without yielding any
StreamEvent, so emitter.touch() was never called and the 600s stall
watchdog fired during long reasoning phases (e.g. GPT-5.4-pro).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Re-extracted all DOT examples from docs, added test fixtures for new
pages (preview, brave-search, daytona, sub-workflow), recreated
assembled snippet files, and excluded not-yet-working vnc-access and
vpn-connections pages. 40 files now validate and dry-run clean.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Every TOML example now shows which config file it belongs to
(server.toml, cli.toml, or run.toml) via Mintlify's title annotation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Users can now configure the git author name/email used for checkpoint
commits via [git.author] in server.toml (default) and cli.toml (override).
Defaults to "arc" / "arc@local" preserving current behavior.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move emitter.touch() before the event filter in spawn_event_forwarder
so streaming events (TextDelta, AssistantTextStart, etc.) also reset
the watchdog timer. Previously these were filtered out, causing the
600s stall watchdog to fire during long generation turns with no
tool calls.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace Brave Search stub with full docs: setup, usage, example workflow
- Add Human Tools group to docs.json navigation
- Move VS Code from integrations (deleted) to human-tools nav
- Rename human-in-the-loop page title to "Decisions"
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Both features are coming soon — pages include warning banners,
use cases, and example workflows with Graphviz-generated SVGs
that support light and dark mode.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>