Commit graph

1224 commits

Author SHA1 Message Date
Bryan Helmkamp
376b132ca9 rename docs-internal to files-internal
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 14:50:27 -04:00
Bryan Helmkamp
48eb867ce2 fix clippy large_enum_variant and rename ARC_ env vars in .env.example
Box the Usage field in Turn::Assistant to satisfy clippy::large_enum_variant.
Rename ARC_ prefixed env vars to FABRO_ in .env.example.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 14:37:22 -04:00
Bryan Helmkamp
5b18680d57 fix remaining arc references in README, CONTRIBUTING, docs-internal
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 12:28:04 -04:00
Bryan Helmkamp
28884ae093 rename Arc to Fabro in all Rust crates, symbols, env vars, and supporting files
- Rename 20 crate directories lib/crates/arc-* → fabro-*
- Update all Cargo.toml: crate names, dep paths, feature flags, bin name
- Rename arc_server module → fabro_server in fabro-llm
- ArcError → FabroError across 30+ files
- ARC_VERSION/ARC_GIT_SHA/ARC_BUILD_DATE → FABRO_* constants
- All use/qualified paths: arc_agent:: → fabro_agent::, etc. (~1500 occurrences)
- Env vars ARC_* → FABRO_* in string literals and shell scripts
- String literals: X-Arc-Demo, arc-bot, arc@local, arc-web, arc-mcp, etc.
- Path strings: .arc/ → .fabro/, arc.toml → fabro.toml, refs/arc/ → refs/fabro/
- arc-api.yaml → fabro-api.yaml (OpenAPI spec)
- skills/arc-create-workflow → fabro-create-workflow
- trycmd fixtures: $ arc → $ fabro
- Inline snapshots (insta) updated
- CI, Docker, install.sh, scripts, CLAUDE.md, AGENTS.md
- TypeScript app: env vars, headers, JWT issuer
- Docs: page slugs, git refs, config paths, sandbox names, repo URLs
- Repo references: brynary/arc → fabro-sh/fabro

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 12:25:58 -04:00
Bryan Helmkamp
e514a92dbc rm develop-web-game 2026-03-12 11:24:10 -04:00
Bryan Helmkamp
75fca9fb93 cleanup internal docs 2026-03-12 11:23:11 -04:00
Bryan Helmkamp
e8a57f8893 docs: remove naming research reports
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:17:53 -04:00
Bryan Helmkamp
4a378d1868 docs: rename Arc to Fabro in internal docs and CONTRIBUTING
Update product name references in CONTRIBUTING.md, competitive landscape,
logging/events strategy docs, API design draft, spec files, and web
screenshot guide. Rust crate names and file paths left unchanged.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:16:48 -04:00
Bryan Helmkamp
3ce976a006 docs: update license references from AGPL to MIT
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:14:37 -04:00
Bryan Helmkamp
3a6ec9b9ef Rename Arc to Fabro in TypeScript/JavaScript
Rename directories (arc-web → fabro-web, arc-api-client → fabro-api-client),
update package names, import paths, TS-only identifiers (theme key, session
cookie, demo cookie, OAuth state, db filename, mock data), and supporting
files (Dockerfile, docker-compose, entrypoint, CI workflow, CLAUDE.md).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:13:18 -04:00
Bryan Helmkamp
acbfc8a9f8 docs: add "open source" to Fabro tagline
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:12:24 -04:00
Bryan Helmkamp
01c0fe2e82 cleanup 2026-03-12 10:55:11 -04:00
Bryan Helmkamp
d4fe6b72e0 docs: rename Arc to Fabro throughout docs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 10:53:44 -04:00
Bryan Helmkamp
fd68f587f8 docs: retake workflow diagram screenshots with increased zoom
Zoom in on the workflow graph in both the workflow diagram page and
run overview page to improve readability of node labels and edges.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 09:34:59 -04:00
Bryan Helmkamp
bddd11642e docs: add dedicated Server Mode page to Core Concepts
Consolidates server-mode documentation into a single page with
standalone vs. server comparison table, setup guide, and cross-references.
Updates how-arc-works, quick-start, and architecture pages to link to
the new canonical page instead of duplicating the comparison table.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 09:19:03 -04:00
Bryan Helmkamp
f6554ca689 Add web UI screenshots to docs, update branding to Fabro, simplify Quick Start
- Add 10 screenshots of the Fabro web UI to docs pages (workflows, runs,
  retros, observability, steering)
- Update arc-web logos from Arc to Fabro (logotype.svg, logotype-light.svg)
- Hide Start and Settings nav items in arc-web for cleaner screenshots
- Mount arc-web public/ as Docker volume for logo hot-swapping
- Combine "Run agents 24/7" and "Scale infinitely" use cases
- Replace clone-and-build Quick Start with curl installer from README
- Add internal docs for updating web screenshots

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 09:08:51 -04:00
Bryan Helmkamp
99feeb7a3b docs: add use cases section to README and Introduction
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 08:52:05 -04:00
Bryan Helmkamp
6e3b26dc46 Remove empty Web tab from docs navigation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 08:26:55 -04:00
Bryan Helmkamp
5ff7601249 docs: add arc graph, arc skill install, and SSH sandbox to CLI/config reference
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 08:19:44 -04:00
Bryan Helmkamp
7c22c4c3e0 Add 2026-03-11 and 2026-03-12 changelog entries
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 08:17:52 -04:00
Bryan Helmkamp
dfcaa9a8dc docs: add SSH sandbox provider to environments reference
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 08:14:26 -04:00
Bryan Helmkamp
d657025de0 feat(arc-ssh): add preview_url_base to SshConfig for port preview URLs
Allows users to specify a reachable base URL for SSH hosts so that
get_preview_url(port) returns the correct external URL instead of
falling back to localhost.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 08:10:32 -04:00
Bryan Helmkamp
c3f2ccd68a Update docs screenshots and fix demo workflow serialization
Replace docs/images screenshots (runs-board, run-detail, workflow-example)
with fresh captures from the current FABRO-branded UI in demo mode.

Also fix a panic in arc-api demo::run_config_to_api where None-valued
HashMap fields (e.g. sandbox.env) serialized to JSON null, which failed
to deserialize into non-optional HashMap fields in RunConfiguration.
Added strip_nulls helper to clean the intermediate JSON value.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 00:38:19 -04:00
Bryan Helmkamp
e7b8b3c938 refactor(arc-github): store client on GitHubTracker, drop redundant graphql_url field
- Add `client: reqwest::Client` field (matches LinearTracker pattern); eliminates 7 per-call client constructions that prevented connection pool reuse
- Remove `graphql_url: String` field — always derivable from base_url, computed via `graphql_url()` method at each call site
- Extract `make_test_issue()` test helper to replace 3 copy-pasted Issue struct literals

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 23:58:37 -04:00
Bryan Helmkamp
111b730eef feat(tracker): add Tracker trait with Linear and GitHub Projects V2 impls
- New arc-tracker crate defines the Tracker trait and shared Issue/BlockerRef types
- arc-linear: replace Issue/BlockerRef with arc-tracker re-exports, add LinearTracker struct implementing Tracker, remove free functions
- arc-github: add GitHubTracker implementing Tracker via Projects V2 GraphQL API, with lazy project node ID resolution (org → user fallback) and create_installation_access_token_for_projects helper
- 47 tests in arc-github (15 new), 24 tests in arc-linear (updated to use LinearTracker)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 23:32:03 -04:00
Bryan Helmkamp
10f7316f28 Simplify arc-linear: extract helper, fix O(n^2) ordering, add tracing
- Make execute_graphql private (callers use domain functions)
- Extract extract_issues() helper to deduplicate node-parsing blocks
- Replace O(n^2) .find() loop with HashMap for ID-ordered results
- Add tracing::debug on all public functions, warn on HTTP errors
- Extract BLOCKS_RELATION_TYPE constant for magic string

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 22:39:11 -04:00
Bryan Helmkamp
b509277e15 Add arc-linear crate for Linear issue tracker API integration
GraphQL client with 6 public functions: execute_graphql, fetch_viewer_id,
create_comment, update_issue_state, fetch_candidate_issues, and
fetch_issues_by_ids. Includes Issue/BlockerRef domain types with manual
normalization from GraphQL JSON responses.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 22:36:33 -04:00
Bryan Helmkamp
199691a949 Remove duplicate origin_url inherent method from SshSandbox
The inherent method shadowed the identical Sandbox trait method,
creating a risk of subtle divergence if one were changed without
the other.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 22:33:15 -04:00
Bryan Helmkamp
e0b3c4cde4 Add SSH sandbox provider (arc-ssh) for user-provided hosts
Adds a generic SSH sandbox that connects to any user-provided host via
openssh, without VM lifecycle management. Supports git clone with GitHub
App credentials, configurable working directory, and arc cp reconnection.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 22:29:51 -04:00
Bryan Helmkamp
2ce89e5e5e Simplify compaction code: extract helper method, named constant, avoid cloning
Extract duplicated compaction check+trigger blocks in the session loop into
Session::compact_if_needed(). Replace the hardcoded 20_000 token budget with
COMPACTION_USER_MESSAGE_TOKEN_BUDGET constant. Change extract_recent_user_messages
to take ownership of discarded turns instead of borrowing and cloning.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 22:13:29 -04:00
Bryan Helmkamp
17efbe5168 Rebrand arc-web app from Arc to Fabro
Replace logo/favicon SVGs with Fabro brick icon wordmark.
Update all page titles, alt text, auth UI copy, and GitHub App name prefix.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 22:10:51 -04:00
Bryan Helmkamp
f459aa78d7 Improve compaction quality with handoff framing, pre-turn check, and user message preservation
Reframe the summarization prompt as creating a handoff for a different assistant
(rather than self-summarization) to produce more thorough, explicit summaries.
Add a pre-turn compaction check so context is trimmed before building the LLM
request, not just after. Extract recent user messages from discarded turns during
compaction so the model retains the user's actual words alongside tool call/result
pairs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 22:09:23 -04:00
Bryan Helmkamp
3b1e9b584b Add Mintlify docs dev server command to CLAUDE.md
Docker-based approach avoids Node version incompatibility on the host.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 21:36:17 -04:00
Bryan Helmkamp
680b5f989f Rebrand docs site from Arc to Fabro
Replace logos (light/dark) and favicon with Fabro brick icon wordmark.
Update site name in docs.json.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 21:27:58 -04:00
Bryan Helmkamp
8c63328a5b move solitaire 2026-03-11 17:05:22 -04:00
Bryan Helmkamp
e38d3ea3ce Add tracing to DaytonaSandbox::exec_command to diagnose stall watchdog timeouts
A workflow run hung for 33 minutes in a Daytona shell command despite
a 5-minute client-side timeout in tokio::select!. The root cause is
unknown — tests confirm the select pattern works correctly. Adding
info-level tracing at method entry (with command and timeout_ms),
after process service acquisition, and in each select arm so the
next occurrence reveals exactly where execution stalls.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 17:04:17 -04:00
Bryan Helmkamp
87435aef11 Preserve ts, run_id, event field order in progress.jsonl
Enable serde_json's preserve_order feature so Map uses insertion-order
IndexMap instead of sorted BTreeMap. Extract build_event_envelope()
from the on_event closure to deduplicate the envelope construction.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 13:01:17 -04:00
Bryan Helmkamp
55917f4005 Add arc graph subcommand to render workflow DOT graphs as SVG/PNG
Mirrors `arc validate` workflow resolution. Shells out to `dot` (graphviz)
with friendly error if not installed. Supports --format svg|png and -o output path.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 10:34:23 -04:00
Bryan Helmkamp
7dfbd53797 Print resolved graph path in arc run and arc validate
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 10:03:34 -04:00
Bryan Helmkamp
53b27ab188 Group arc doctor checks into Required / Optional / Server sections
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 09:59:54 -04:00
Bryan Helmkamp
ee58694cf0 Add tool call progress display to retro step
Wire ProgressUI and EventEmitter into the retro agent so it shows
stage spinners with nested tool calls, matching the look of agent
nodes in the main workflow.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 09:53:40 -04:00
Bryan Helmkamp
c475b0a25e Add warning when no git remote is configured during arc init
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 09:40:50 -04:00
Bryan Helmkamp
3c5d8ff3e7 Add indicatif to Cargo.lock for arc doctor spinner
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 09:37:54 -04:00
Bryan Helmkamp
cd70962bd9 Add AbortReason to AgentError::Aborted for diagnosable abort messages
Previously, AgentError::Aborted was a bare variant that displayed as
just "Aborted", making it impossible to tell whether a session was
killed by wall clock timeout, user cancellation, or something else.
Now it carries an AbortReason (WallClockTimeout or Cancelled) so
terminal output like the retro agent failure message includes the cause.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 09:34:52 -04:00
Bryan Helmkamp
83ed0d42a4 Add spinner to arc doctor for immediate feedback
The command takes several seconds (especially with live probes) but
previously showed no output until fully complete. Now a braille spinner
animates while checks run.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 09:15:56 -04:00
Bryan Helmkamp
0af7a32794 Increase retro agent limits: 20 tool rounds, 3 minute timeout
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 09:12:37 -04:00
Bryan Helmkamp
73a793bdb1 Add extracted fixed-loop DOT fixture from branch-loop tutorial
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 08:57:00 -04:00
Bryan Helmkamp
30d1a11ace Add arc skill install subcommand to extract built-in skills to filesystem
Embeds the arc-create-workflow skill files via include_str! and installs them
to user (~/.claude/skills/ or ~/.agents/skills/) or project-level directories.
Supports --dir (claude|agents), --for (user|project), and --force flags.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 08:56:44 -04:00
Bryan Helmkamp
86ac0ff394 Document fixed-count loops using internal.node_visit_count
Add a new section to the branch-loop tutorial showing how to loop a node
exactly N times using a diamond gate with a visit count condition, and
cross-reference it from the context docs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 08:50:17 -04:00
Bryan Helmkamp
9b74cad56b Add arc-create-workflow skill for generating Arc workflow DOT graphs and TOML configs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-11 08:43:47 -04:00