Commit graph

705 commits

Author SHA1 Message Date
Bryan Helmkamp
13ee1735c0 Consolidate duplicate test backends in prompt handler tests
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>
2026-03-07 23:01:15 -05:00
Bryan Helmkamp
eb2ff9dd5c Add project_memory attribute for prompt nodes
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>
2026-03-07 22:56:26 -05:00
Bryan Helmkamp
521732fc74 Add /update-docs skill for keeping docs in sync with code
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>
2026-03-07 22:47:17 -05:00
Bryan Helmkamp
5d6691df22 Add [sandbox.env] support to workflow configs
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>
2026-03-07 22:43:16 -05:00
Bryan Helmkamp
36d35d07fe Consolidate changelog writing guide into /changelog skill
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>
2026-03-07 22:42:39 -05:00
Bryan Helmkamp
006f198014 Rename stale agent variable to exec in cli_config tests
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:42:15 -05:00
Bryan Helmkamp
1825b61b0e Rename arc agent CLI subcommand to arc exec
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:38:03 -05:00
Bryan Helmkamp
b7c0af09c3 Fix /changelog skill to handle same-day re-runs
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>
2026-03-07 22:09:02 -05:00
Bryan Helmkamp
6cee3e1926 DRY up telemetry ID loading and Telemetry construction
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>
2026-03-07 22:03:58 -05:00
Bryan Helmkamp
f4b530c691 Split anonymous ID into server (UUID-on-disk) and CLI (MAC-based hash) strategies
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>
2026-03-07 22:00:44 -05:00
Bryan Helmkamp
2b8d6a40a1 Add Segment-based telemetry module to arc-util
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>
2026-03-07 21:47:03 -05:00
Bryan Helmkamp
f0dd4f5053 Document --no-retro flag for faster workflow testing
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 21:40:31 -05:00
Bryan Helmkamp
d56ed52490 Inline untracked @file references in DOT prompts at prepare time
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>
2026-03-07 21:32:53 -05:00
Bryan Helmkamp
ecd5d0ae9a Document dockerfile path syntax in run configuration docs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 21:23:56 -05:00
Bryan Helmkamp
c62d9b68d9 Simplify opaque OpenAI item handling and DockerfileSource serde
- 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>
2026-03-07 21:16:27 -05:00
Bryan Helmkamp
22a1bba192 Add --goal CLI arg to arc run start
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>
2026-03-07 21:11:34 -05:00
Bryan Helmkamp
6f1bd9cff6 Support dockerfile = { path = "..." } in snapshot config
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>
2026-03-07 20:54:55 -05:00
Bryan Helmkamp
25e74054c8 Support --help and -h flags in imagegen tool
Move API key check after argument parsing so help works without
GEMINI_API_KEY set.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 20:35:06 -05:00
Bryan Helmkamp
df903379fe Add imagegen tool for Gemini-based image generation
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>
2026-03-07 20:19:38 -05:00
Bryan Helmkamp
e73803039c Extract ContentPart::OPENAI_REASONING and OPENAI_MESSAGE constants
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>
2026-03-07 18:43:39 -05:00
Bryan Helmkamp
ca71b2895d Preserve OpenAI message output items for Responses API round-tripping
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>
2026-03-07 18:35:06 -05:00
Bryan Helmkamp
f0c97a2739 Add server-mode support for arc llm chat via session endpoints
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>
2026-03-07 18:34:15 -05:00
Bryan Helmkamp
55f9f0bd9d Remove extra spacing between screenshot and cards on introduction page
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 18:33:49 -05:00
Bryan Helmkamp
90838c7e27 Crop doc screenshots to remove browser chrome and tighten framing
- 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>
2026-03-07 18:26:21 -05:00
Bryan Helmkamp
c558215878 Update changelog and add coming-soon warnings to deploy guide stubs
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>
2026-03-07 18:18:36 -05:00
Bryan Helmkamp
bc3b76f658 Add screenshots and private preview warning to getting-started docs
- 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>
2026-03-07 18:14:55 -05:00
Bryan Helmkamp
562d03742b run_tests 2026-03-07 18:06:58 -05:00
Bryan Helmkamp
21f94f48de Add POST /completions endpoint with Anthropic-style SSE streaming
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>
2026-03-07 18:06:58 -05:00
Bryan Helmkamp
0c26bf060c Strip OpenAI reasoning items from provider_parts after compaction
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>
2026-03-07 18:06:58 -05:00
Bryan Helmkamp
4707589943 Add Sprites docs page and mark Slack/exe.dev as in progress
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 18:06:58 -05:00
Bryan Helmkamp
c3ec637f09 Add arc-sprites crate for Sprites (Fly.io) VM sandbox
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>
2026-03-07 18:06:58 -05:00
Bryan Helmkamp
ac535b925b Remove Start Workflow Run endpoint (duplicates Start Run)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 18:06:58 -05:00
Bryan Helmkamp
6bb95b92b0 Remove Projects group from docs navigation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 18:06:58 -05:00
Bryan Helmkamp
add14c63ee Remove List Projects and List Branches API endpoints
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 18:06:58 -05:00
Bryan Helmkamp
0e14b0a479 Nest Models and Settings APIs under "More" group in docs nav
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 18:06:58 -05:00
Bryan Helmkamp
1dcb4acb2a Accept bare @@ hunk headers in v4a apply_patch parser
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>
2026-03-07 18:06:57 -05:00
Bryan Helmkamp
f36ec7aab4 Replace git_author_name/email parameter pairs with GitAuthor struct
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>
2026-03-07 18:06:57 -05:00
Bryan Helmkamp
c9265749eb Handle OpenAI reasoning SSE events to prevent stall watchdog kills
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>
2026-03-07 18:06:57 -05:00
Bryan Helmkamp
97e4c41f4e Re-sync test/docs DOT fixtures with current documentation
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>
2026-03-07 18:06:57 -05:00
Bryan Helmkamp
130339ee87 Add filename titles to TOML code blocks in docs
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>
2026-03-07 18:06:57 -05:00
Bryan Helmkamp
99ee007572 Add configurable git author identity for checkpoint commits
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>
2026-03-07 18:06:57 -05:00
Bryan Helmkamp
02a10b2f8d Fix stall watchdog killing agent during long LLM reasoning turns
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>
2026-03-07 18:06:57 -05:00
arc
8d4fcba6e4 arc(01KK56AM54ZAJJCEAS6KBC0D70): approve (success)
Arc-Run: 01KK56AM54ZAJJCEAS6KBC0D70
Arc-Completed: 2
Arc-Checkpoint: 60ee83441f04683e7f85faeda165048f9f176810
2026-03-07 22:22:45 +00:00
arc
ebc1a82a7d arc(01KK56AM54ZAJJCEAS6KBC0D70): start (success)
Arc-Run: 01KK56AM54ZAJJCEAS6KBC0D70
Arc-Completed: 1
Arc-Checkpoint: 5a6484091b0da9d5154c8ee8a8e4faf0d919f2c9
2026-03-07 22:22:43 +00:00
Bryan Helmkamp
ea10b8148e Document Brave Search integration, update nav, rename Decisions page
- 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>
2026-03-07 14:04:07 -05:00
Bryan Helmkamp
fcce28aaee Document Brave Search integration: setup, usage, permissions, and example workflow
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-07 14:04:01 -05:00
Bryan Helmkamp
1f8b40a506 Add VNC Access and VPN Connections docs pages with workflow SVGs
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>
2026-03-07 14:03:05 -05:00
Bryan Helmkamp
2f018375a1 Document Slack integration: setup, question types, and Socket Mode architecture
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 14:02:21 -05:00
Bryan Helmkamp
4a2c953730 Add exe.dev integration page with beta warning
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-07 13:45:03 -05:00
Bryan Helmkamp
11743c6267 Document Daytona integration: sandboxing, snapshots, SSH access, network controls, and troubleshooting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-07 13:43:56 -05:00