Commit graph

695 commits

Author SHA1 Message Date
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
Bryan Helmkamp
22b41f63fe Add Preview docs page with workflow SVG
Fill in the human-tools/preview page documenting how preview URLs
let users access running services in sandbox environments from
their browser. Includes how it works, web UI and API usage,
common use cases with an example workflow, and tips. Adds a
graphviz-generated SVG of the BuildAndPreview workflow with
dark mode support.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-07 13:42:51 -05:00
Bryan Helmkamp
1b3ce7bd74 Document GitHub integration: App setup, OAuth login, repo cloning, and troubleshooting
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 13:31:27 -05:00
Bryan Helmkamp
1aa07680e4 Add SSH Access and VS Code docs pages, add SshAccessReady event to observability
Fill in the SSH Access human-tools page with how to enable SSH into
Daytona sandboxes, credential lifetime, and limitations. Fill in the
VS Code page explaining how to connect VS Code Remote-SSH to a
sandbox. Add the SshAccessReady event to the observability event
catalog.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 13:29:21 -05:00
Bryan Helmkamp
f31b0280ef Fill in steering docs page with how it works, delivery timing, and comparison to human gates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 13:22:48 -05:00
Bryan Helmkamp
30f4fa5c3c Redesign marketing homepage with distinctive typography and visual depth
Swap Inter for Sora (headlines) + DM Sans (body) to eliminate generic AI-slop
aesthetics. Add animated gradient text, floating glow orbs, dot-grid background
texture, scroll-reveal animations, hover glow cards, and a trace visualization
for the observability section. Replace flat border-t dividers with gradient
lines and vary section visual treatments for better rhythm.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 13:15:52 -05:00
Bryan Helmkamp
7e7f244d43 Document metadata branch push for Daytona runs in checkpoints page
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 13:12:46 -05:00
Bryan Helmkamp
501ff3df40 Push metadata branch to origin after checkpoint in Remote (Daytona) mode
After each checkpoint commit, the metadata branch (checkpoint.json, manifest,
graph DOT, artifacts) is now pushed from the host process to the GitHub remote
using a GitHub App installation token. The local custom ref (refs/arc/{run_id})
is mapped to refs/heads/arc/meta/{run_id} on the remote since GitHub rejects
branch names starting with "refs/".

Changes:
- Move ssh_url_to_https to github_app.rs as pub fn for reuse
- Add push_ref() to git.rs for pushing a ref to an explicit URL
- Add github_app field to RunConfig to thread credentials into the engine
- Add git_push_meta_host() async wrapper in engine.rs
- Call git_push_meta_host after each remote checkpoint

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 13:08:49 -05:00
Bryan Helmkamp
241ca0d5e7 Hide comparison page from navigation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 12:49:17 -05:00
Bryan Helmkamp
95d95e81b1 Rename arc models CLI subcommand to arc model
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 12:47:07 -05:00
Bryan Helmkamp
9b842c49d5 Simplify git add pathspec building by hoisting common arg
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 12:29:10 -05:00