Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
8405c4a
ANAI-29: scaffold openfang-mcp-bridge crate (spike)
benhoverter May 5, 2026
32b77da
ANAI-30 step 1: daemon-side bridge IPC listener + wire protocol
benhoverter May 5, 2026
83c80a1
ANAI-30 step 2: wire bridge IPC dispatch to execute_tool
benhoverter May 5, 2026
4dfaf2f
ANAI-30 step 3: bridge-side RuntimeDispatcher (IPC client) + real too…
benhoverter May 5, 2026
6497443
ANAI-30 step 4: wire CC driver to spawn bridge via --mcp-config
benhoverter May 5, 2026
5d9edb2
ANAI-30 step 4 follow-up: gate bridge mcp-config on OPENFANG_BRIDGE_E…
benhoverter May 5, 2026
f02247a
ANAI-30 diagnostic: --debug + stderr tail logging when bridge wired
benhoverter May 5, 2026
da758ab
ANAI-30 cleanup: bridge IPC INFO logs + gate CC --debug behind env
benhoverter May 5, 2026
f1b99a7
fix(windows): cfg-gate MCP bridge to unix-only platforms
benhoverter May 9, 2026
4e60e7d
ANAI-31 phase A: BridgeAuthority + TokenIssuer scaffolding
benhoverter May 14, 2026
c922f98
ANAI-31 phase B: thread Arc<dyn TokenIssuer> into ClaudeCodeDriver
benhoverter May 14, 2026
7385e81
feat(kernel): thread Option<Arc<dyn TokenIssuer>> through create_driver
benhoverter May 14, 2026
792db90
feat(kernel): plumb bridge TokenIssuer through KernelHandle to agent …
benhoverter May 14, 2026
34e6708
feat(bridge): authenticate Hello via BridgeAuthority, bind AgentId pe…
benhoverter May 14, 2026
d73cd4d
feat(kernel): construct TokenIssuer before boot to harden autostart a…
benhoverter May 14, 2026
a2c7b78
feat(bridge): per-agent allowlist via CompletionRequest → OPENFANG_BR…
benhoverter May 14, 2026
3193c94
feat(bridge): expose agent_send tool
benhoverter May 14, 2026
ee7edd5
fix(bridge): sandbox filesystem tools to agent workspace
benhoverter May 15, 2026
34c63df
feat(bridge): execute-time per-agent permission gate
benhoverter May 15, 2026
908c39c
feat(bridge): expose file_write and web_fetch tools
benhoverter May 15, 2026
d804074
feat(bridge): expose agent_spawn, agent_kill, agent_activate, agent_find
benhoverter May 15, 2026
b367476
feat(bridge): expose memory_store and memory_recall tools
benhoverter May 15, 2026
b324daf
feat(driver): deny CC native FS/shell/web tools via per-spawn --settings
benhoverter May 15, 2026
9bd3e48
feat(bridge): expose shell_exec tool with workspace + exec_policy gating
benhoverter May 15, 2026
64078d0
feat(bridge): expose web_search tool
benhoverter May 15, 2026
904be9a
fix(bridge): advertise shell_exec and web_search on the MCP surface
benhoverter May 15, 2026
2a67030
feat(bridge): expose apply_patch tool with workspace sandbox
benhoverter May 15, 2026
ce1c971
feat(driver): expand CC_NATIVE_DENY to close deny-set audit gaps
benhoverter May 15, 2026
478ac5a
test(bridge): three-way drift-catcher for tool-surface correspondence
benhoverter May 15, 2026
e59cdaf
fix(bridge): strip trailing period from allowlist deny reason
benhoverter May 15, 2026
521391a
fix(security): unify FS_SANDBOXED_TOOLS gate; bridge create_directory
benhoverter May 19, 2026
48a7741
fix(security): pwsh -EncodedCommand decode + load-from-disk hard-deny…
benhoverter May 19, 2026
52e13ab
fix(security): wrapper-binary recursion + hard-deny for sysadmin/inte…
benhoverter May 19, 2026
8c74500
fix(security): HTTP /mcp exec_policy parity with bridge IPC (S3-01)
benhoverter May 19, 2026
f01700c
fix(security): refuse caller-supplied sender identity on HTTP message…
benhoverter May 19, 2026
b421318
fix(security): exclude privileged lifecycle tools from bridge default…
benhoverter May 19, 2026
421e5d9
fix(security): hard-deny sensitive OpenFang home paths in workspace s…
benhoverter May 19, 2026
1aec0bb
chore(deps): bump lettre 0.11.21 to 0.11.22 (RUSTSEC-2026-0141)
benhoverter May 19, 2026
b5258b7
style: cargo fmt + clippy fixes for CI
benhoverter May 19, 2026
2458280
chore(bridge): gate unix-only imports for windows clippy
benhoverter May 19, 2026
b6467a0
chore(github): add pre-PR checks section to PR template
benhoverter May 19, 2026
a29441a
chore(api): gate warn import for windows clippy
benhoverter May 19, 2026
a6f9870
chore(scripts): add check-windows.sh cross-compile helper
benhoverter May 19, 2026
b576743
runtime/claude_code: materialize images to tmpfile so the CLI's Read …
benhoverter May 2, 2026
404b08a
fix(runtime/claude_code): atomically publish materialized image tmpfiles
benhoverter May 3, 2026
80cb01c
fix(runtime/claude_code): pass --add-dir for materialized image tmpfiles
benhoverter May 3, 2026
70f2573
refactor(runtime): extract image_cache module
benhoverter May 3, 2026
75ff40a
fix(runtime/image_cache): refresh mtime on cache hit
benhoverter May 3, 2026
6d56975
fix(runtime/compactor): preserve http(s) source_url across compaction
benhoverter May 3, 2026
dca53a1
fix(runtime/image_cache): add USERPROFILE fallback in image_tmp_dir f…
benhoverter May 12, 2026
0bb46df
fix(runtime/compactor): use Default for Message in source_url tests
benhoverter May 12, 2026
dadc6f1
feat(mcp-bridge): add upstream-forwarding protocol variants (no behav…
benhoverter May 20, 2026
5d33a4a
feat(bridge-ipc): daemon-side upstream MCP dispatch + list_upstream
benhoverter May 20, 2026
8180191
feat(mcp-bridge): list_upstream handshake + mcp_* tool advertise & di…
benhoverter May 20, 2026
52b4fba
feat(runtime): MCP discovery collision check vs OpenFang built-ins
benhoverter May 20, 2026
8afe35a
style(fmt): cargo fmt --all on upstream-forwarding crates
benhoverter May 21, 2026
71639c0
fix(sandbox): hard-deny ~/.mcp-auth/ regardless of workspace_root (MC…
benhoverter May 21, 2026
4e0f71a
feat(bridge): list_upstream timeout, drift test, audit comment (MCP-0…
benhoverter May 21, 2026
3eec783
feat(channels): outbound file attachment parser + image_cache filenam…
benhoverter May 12, 2026
db36f7f
refactor(channels/bridge): extract send_parsed helper + SendOptions seam
benhoverter May 25, 2026
72303b1
fix(security): default_allow_roots=[] + ~/.openfang/ hard-deny with w…
benhoverter May 26, 2026
f0814d7
feat(kernel): wire send_channel_message through send_parsed with work…
benhoverter May 26, 2026
b4fb98f
test(channels/outbound_attach): policy coverage for empty default + h…
benhoverter May 26, 2026
6d50abe
chore(channels): regenerate Cargo.lock to drop stale bytes entry
benhoverter May 26, 2026
2c807a9
feat(channels): outbound attach accepts relative paths against explic…
benhoverter May 26, 2026
7eb7418
fix(channels/outbound_attach): bounded read closes TOCTOU window
benhoverter May 26, 2026
b663af3
style(channels): cargo fmt bridge + lib (PR-A scope)
benhoverter May 26, 2026
10ad20f
style(runtime): cargo fmt image_cache (PR-B scope)
benhoverter May 26, 2026
6811bde
style: cargo fmt drift on compactor and llm drivers (out-of-PR scope)
benhoverter May 26, 2026
ec506a5
feat(channel_send): expose `attachments: string[]` parameter (ANAI-53)
benhoverter May 27, 2026
f9f6c07
feat(channels): ChannelAdapter::resolve_recipient + Discord resolver …
benhoverter May 29, 2026
98fac96
feat(kernel): cut over channel_send / _media / _file_data to adapter.…
benhoverter May 29, 2026
b17badd
feat(channels): dedicated resolver audit sink, demote tracing emit (A…
benhoverter May 29, 2026
b458759
feat(kernel): introduce ToolError, surface RecipientUnresolved (ANAI-…
benhoverter May 29, 2026
f9d548f
feat(channels): harden resolver_audit open path (ANAI-55)
benhoverter May 29, 2026
a5a18e5
feat(channels): cfg(debug_assertions)-gate resolver audit debug emit …
benhoverter May 29, 2026
44a3c23
feat(channels): surface skipped attachments in channel_send tool result
benhoverter May 29, 2026
9b8424c
fix(cc-driver): deny native Task, Skill, AskUserQuestion in CC_NATIVE…
benhoverter Jun 4, 2026
7ce1603
feat(types): add FilePolicy / FileRule / FileAccessTier config types
benhoverter Jun 8, 2026
3166e91
feat(sandbox): split resolve_sandbox_path into floor + clamp, add tie…
benhoverter Jun 8, 2026
bbdc427
feat(tool-runner): thread file_policy through execute_tool and fs verbs
benhoverter Jun 8, 2026
d0c4345
fix(sandbox): extend floor with curated credential hard-deny set [F1]
benhoverter Jun 9, 2026
580bb58
fix(file-policy): wire global file_policy inheritance as a hard floor…
benhoverter Jun 9, 2026
f295a81
fix(apply-patch): policy pre-pass — no writes past a denied target [F3]
benhoverter Jun 9, 2026
55fb494
fix(file-policy): create_directory fails closed under active policy [F4]
benhoverter Jun 9, 2026
57286d8
fix(file-policy): resolve-once + assert target unchanged (TOCTOU) [F5]
benhoverter Jun 9, 2026
41460a8
fix(integration): pass file_policy=None in bridge_ipc execute_tool ca…
benhoverter Jun 11, 2026
e93edac
style: clippy needless-borrow + fmt hygiene for CI (ANAI-53/55)
benhoverter Jun 11, 2026
458caeb
style(channels): gate RESOLVER_AUDIT_TARGET behind cfg(debug_assertions)
benhoverter Jun 12, 2026
b5264aa
fix(bridge): pass agent file_policy through execute_tool (was None)
benhoverter Jun 12, 2026
5e5c771
fix(config): expand leading tilde in file_policy rule paths at load
benhoverter Jun 12, 2026
73803b7
Merge branch 'integration/file-policy-on-bridge' into integration/fil…
benhoverter Jun 14, 2026
238af8a
feat(approval): record real approver + Admin-floor gate on channel /a…
benhoverter Jun 14, 2026
7174571
test(approval): cover #2a channel /approve gate at the bridge layer […
benhoverter Jun 14, 2026
7bdaec0
feat(channels): outbound interactive message variant + Discord button…
benhoverter Jun 14, 2026
5dd78b3
feat(channels): degrade-aware dispatch chokepoint for Interactive [AN…
benhoverter Jun 14, 2026
27b67f2
feat: add ApprovalOrigin type and origin field on ApprovalRequest
benhoverter Jun 14, 2026
d3f7387
feat: add origin-carrying send methods to ChannelBridgeHandle
benhoverter Jun 14, 2026
d272b68
fix: bound ApprovalOrigin.channel_type length in validate
benhoverter Jun 14, 2026
ce3d1cc
feat: thread ApprovalOrigin through approval hot path (steps 3-4) [AN…
benhoverter Jun 14, 2026
250e22a
feat(channels): populate real ApprovalOrigin at the bridge dispatch (…
benhoverter Jun 14, 2026
ca55242
feat(kernel): ApprovalManager event source — Y step 5 substrate [ANAI…
benhoverter Jun 14, 2026
59aac42
feat(approval): emit consumer — push approval prompts to origin [ANAI…
benhoverter Jun 15, 2026
ad01939
fix(approval): neutralize attach markers in surfaced prompt [ANAI-82]
benhoverter Jun 15, 2026
70e452f
fix(approval): neutralize attach markers in /approvals listing [ANAI-82]
benhoverter Jun 15, 2026
135d07f
feat(channels/discord): outbound attachments with SSRF-guarded Multip…
benhoverter May 12, 2026
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
12 changes: 10 additions & 2 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,18 @@

<!-- Brief list of what changed. -->

## Pre-PR checks (run locally before opening)

Run the full gate locally before opening the PR — CI is strict and Windows clippy in particular catches things macOS/Linux clippy skips via `#[cfg]`.

- [ ] `cargo fmt --all --check`
- [ ] `cargo clippy --workspace --all-targets -- -D warnings`
- [ ] `cargo test --workspace`
- [ ] `cargo audit` (no new vulns; warnings reviewed)
- [ ] **Windows cross-check:** `scripts/check-windows.sh` (catches `#[cfg(unix)]`-gated import warnings that only fire on Windows CI). First run installs the `x86_64-pc-windows-gnu` rustup target; requires `mingw-w64` (macOS: `brew install mingw-w64`).

## Testing

- [ ] `cargo clippy --workspace --all-targets -- -D warnings` passes
- [ ] `cargo test --workspace` passes
- [ ] Live integration tested (if applicable)

## Security
Expand Down
95 changes: 77 additions & 18 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ members = [
"crates/openfang-desktop",
"crates/openfang-hands",
"crates/openfang-extensions",
"crates/openfang-mcp-bridge",
"xtask",
]

Expand Down
1 change: 1 addition & 0 deletions crates/openfang-api/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ openfang-skills = { path = "../openfang-skills" }
openfang-hands = { path = "../openfang-hands" }
openfang-extensions = { path = "../openfang-extensions" }
openfang-migrate = { path = "../openfang-migrate" }
openfang-mcp-bridge = { path = "../openfang-mcp-bridge" }
dashmap = { workspace = true }
tokio = { workspace = true }
serde = { workspace = true }
Expand Down
Loading
Loading