atlas
d5a81f9195
feat( #2377 ): forge-webhook-triggered config-PR merge flow
...
Replace the request_merge_config_pr MCP tool with a Forgejo
pull_request webhook on the agent-configs org. Agents now open a
config PR normally; hive-c0re auto-queues the MergeConfigPr approval
from the webhook event — no extra tool call needed.
Changes:
- dashboard/webhook.rs: add POST /webhook/config-pr handler
- parses Forgejo pull_request payload (opened/synchronize)
- strips agent-configs/<agent> prefix to extract agent name
- calls submit_merge_config_pr → queues dashboard approval card
- always 200 to prevent Forgejo retries; errors logged at warn
- dashboard/mod.rs: wire /webhook/config-pr route
- forge/mod.rs: add ensure_config_pr_webhook() — idempotent org-level
hook registration on agent-configs at startup; CONFIG_ORG now
pub(crate) for webhook handler
- main.rs: call ensure_config_pr_webhook alongside knowledge webhook
- socket_server/config_approvals.rs: drop handle_request_merge_config_pr;
make submit_merge_config_pr pub(crate) for webhook handler
- socket_server/mod.rs: re-export submit_merge_config_pr; drop dispatch arm
- hive-sh4re/src/lib.rs: remove AgentRequest::RequestMergeConfigPr
wire type; drop from ToolGroup::Approvals tool list
- hive-ag3nt/src/mcp/: drop request_merge_config_pr tool + args struct
- docs: update approvals.md (webhook trigger), conventions.md (tool
group), agent-hierarchy.md, tools/lifecycle.md
Hardening from #2375-merge-config-pr-hardening branch preserved:
- pr_is_open check at queue time (rejects closed/merged PRs)
- atomic fetched_sha INSERT via submit_kind(fetched_sha: Some(&sha))
Approve-handler machinery unchanged (run_merge_config_pr,
ff_push_to_main, fetch_pr_head_into_applied, mark_pr_merged).
2026-07-11 12:19:52 +02:00
atlas
97edd6baac
feat( #2346 ): request_merge_config_pr — submission path for the PR-based config flow
...
MergeConfigPr approvals had a fully-implemented approve handler
(run_merge_config_pr, ff_push_to_main, mark_pr_merged) and dashboard
display, but no way to submit one. An agent with the `approvals` tool
group calling request_merge_config_pr(agent, pr_number) is the missing
piece.
What this adds:
- RequestMergeConfigPr variant in hive-sh4re AgentRequest + ToolGroup::Approvals
- submit_merge_config_pr: fetches PR head sha (the drift-gate reviewed sha),
queues a MergeConfigPr row, sets fetched_sha, emits approval_added with
pr_number so the dashboard card links to the forge PR
- handle_request_merge_config_pr: topology (require_descendant) +
tool-group (require_group(approvals)) guards before submit
- socket_server/mod.rs: dispatch arm for RequestMergeConfigPr
- hive-ag3nt MCP tool: request_merge_config_pr with full description
- docs/tools/lifecycle.md: documents the new tool + boundary table row
Unlike submit_apply_commit, no flake pre-flight at submission time (eval-
verify happens at approval time inside run_merge_config_pr, same as the
rest of the merge pipeline). Applied repo must already exist (guard added
with a clear error message pointing at request_apply_commit for first-spawn).
2026-07-11 12:19:52 +02:00
damocles
4745274fca
refactor( #2112 ): remove the dead stdio transport from hive-agent-mcp
2026-07-11 00:55:41 +02:00
damocles
1ba44b77ac
feat( #2112 ): make http-mcp the sole transport for the built-in surface
2026-07-11 00:32:51 +02:00
damocles
342f6ab55b
chore( #2358 ): disable claude dynamic workflows via managed settings
2026-07-10 20:30:34 +02:00
damocles
3e2565d355
fix( #2356 ): enable built-in bash for choom by dropping it from managed-settings deny
2026-07-10 20:03:41 +02:00
iris
476a7a3c9f
web_ui: support unix:<path> upstreams in extraWebProxies
...
reqwest has no UDS transport, so unix: upstreams dial the socket
directly with a raw hyper/1.1 client per request instead. http(s)://
upstreams are unaffected (still go through the existing reqwest path).
Adds hyper (client, http1), hyper-util (tokio IO adapter), and
http-body-util as direct hive-ag3nt dependencies - all three were
already present transitively via reqwest, this just uses them
directly for the new code path.
2026-07-10 12:53:09 +02:00
damocles
89ce8790ff
feat(web_ui): per-path reverse-proxy via HIVE_EXTRA_WEB_PROXIES
2026-07-10 12:14:21 +02:00
damocles
493face93c
feat( #2300 ): recv reports remaining inbox depth so agents know how many messages are left
2026-07-10 02:03:29 +02:00
damocles
5027068e31
feat( #2109 ): harness-side idle watchdog to bail on anthropic api stall storms
2026-07-07 22:45:18 +02:00
müde
261f02439b
fix(forge): review fixes for the forgejo-api port
2026-07-07 14:42:43 +02:00
müde
4468e86e2d
refactor(hive-ag3nt): port forge_notify to forgejo-api
2026-07-07 09:10:24 +02:00
müde
0f035ce1e9
build: add time + url deps for forgejo-api port
2026-07-07 08:50:35 +02:00
müde
39fe0f306a
build: add forgejo-api workspace dep (sync feature for hive-forge)
2026-07-07 08:48:07 +02:00
müde
5b062dca55
refactor(hive-ag3nt): split hive bin into hive-agent / hive-agent-mcp / hive-agent-wake
2026-07-06 23:48:05 +02:00
müde
dc6a37b29a
style: import ordering + blank lines after now_unix sweep (treefmt)
2026-07-06 22:08:40 +02:00
müde
8cdebb1752
fix(hive-ag3nt): drop attribute orphaned by now_unix removal
2026-07-06 22:07:39 +02:00
müde
b0736e6f3e
refactor(hive-ag3nt): split mcp into submodules
...
mod.rs keeps the #[tool_router] impl + server wiring untouched;
rendering/format helpers move to mcp/render.rs, the 24 tool arg
structs to mcp/args.rs
2026-07-06 22:00:30 +02:00
müde
c84028ddcf
refactor: single now_unix in hive_sh4re::wire_time
...
replaces 15 per-module copies (now_unix/now_secs) across hive-c0re and
hive-ag3nt; wire_time already owns the epoch-seconds convention
2026-07-06 21:58:32 +02:00
müde
d190420946
refactor(hive-c0re): shared additive-migration helper in db
...
db::apply_migrations runs ALTER lists and ignores duplicate-column
errors (turn_stats' pattern); approvals, operator_questions, broker
reminders, and scheduled_prompts drop their hand-rolled
pragma_table_info guards. broker's acked_at migration stays bespoke —
its backfill must only run when the column was just created
2026-07-06 21:53:48 +02:00
müde
8a78b8a464
docs(agent): clarify cred-file set + settings doc pointer, fix forge_notify cross-ref
2026-07-06 00:03:43 +02:00
müde
b4f54a194b
fix(agent): don't eat /compact flag on failed turn; restore ctx fallback; requeue on SessionNotFound
2026-07-06 00:01:15 +02:00
müde
216eb8ae9b
docs(turn-loop): split into index + claude-invocation/config/mcp sub-pages, condense the loop
2026-07-05 23:04:48 +02:00
müde
746f518250
fix(agent): show Compacting state during in-flight operator /compact
2026-07-05 22:54:20 +02:00
müde
59dd7955aa
fix(stats): last_usage orders by id (insertion order); clarify Window default
2026-07-05 22:53:16 +02:00
müde
f2f104627d
refactor(agent): drop vestigial install_configured param, non_empty_env helper, explicit infallible expect in client
2026-07-05 22:49:45 +02:00
müde
9cebc128e2
refactor(web_ui): Bus::effective_context_window, sigint_claude + per-connection hello, relocate fetch_reminder_stats, drop redundant guard
2026-07-05 22:47:14 +02:00
müde
77f31b44bb
refactor(agent): fire_and_forget helper, drop dead default_model + compact_percent fallback, fix stale comment
2026-07-05 22:43:23 +02:00
müde
9721be7bc3
docs(turn_stats): mark unread columns as forward-capture, not consumed
2026-07-05 22:39:45 +02:00
müde
f490e07509
refactor(prompt): drop unreachable role-block defensive branches; keep marker grammar
2026-07-05 22:36:10 +02:00
müde
20ff891962
refactor(forge_notify): share render_body_excerpt across formatters; fix nits + docs
2026-07-05 22:32:00 +02:00
müde
90af3e8d0b
refactor(mcp): split claude launch-config layer into mcp_config.rs
2026-07-05 22:24:46 +02:00
müde
e1e3bda94a
style: apply nix fmt
2026-07-05 22:24:42 +02:00
müde
9a0d525fdf
refactor(mcp): drop vestigial SocketReply, match hive_sh4re::Response directly; remove dead code
2026-07-05 22:12:45 +02:00
müde
543177ed74
refactor(mcp): collapse repeated failure-arm triplet into reply_err helper
2026-07-05 22:05:06 +02:00
müde
785a36b907
refactor(web_ui): share one broker_request helper; /send timeout now 409 not 500
2026-07-05 21:55:28 +02:00
müde
d83d03e4c0
fix(agent): key session detection off credential filenames; own clear_session in login.rs
2026-07-05 21:48:56 +02:00
müde
d004fdc0eb
fix(stats): set busy_timeout on agent snapshot reader so a concurrent write can't blank the page
2026-07-05 21:43:25 +02:00
müde
2b5edef4d1
fix(agent): recover PromptTooLong via archive+requeue; model TurnOutcome as Result
2026-07-05 21:42:13 +02:00
müde
7c851c5dd3
fix(web_ui): cap bind_with_retry at 12 attempts, then return AddrInUse
2026-07-05 20:41:37 +02:00
müde
bdfeac80a7
refactor(web_ui): split into a module dir by concern, serve stays in mod.rs
2026-07-05 20:40:07 +02:00
müde
efaf56c2d5
refactor(agent): remove vestigial turn_lock (serve loop is single-driver)
2026-07-05 20:26:04 +02:00
müde
66f5b8720d
refactor(agent): use hive_claude::TokenUsage directly, drop the duplicate
2026-07-05 20:21:33 +02:00
müde
c9de2eeb97
refactor(agent): build the InfiniteSession once in the serve loop, thread it
2026-07-05 20:16:06 +02:00
müde
487e62a9ca
feat(hive-claude): parse turn telemetry in the lib, return it from run
2026-07-05 20:06:30 +02:00
müde
faa7f982af
feat(web_ui): defer operator /compact to turn end, run when idle too
2026-07-05 19:49:00 +02:00
müde
80d819e444
feat(hive-claude): add InfiniteSession (name+store+compaction policy)
2026-07-05 19:38:16 +02:00
müde
bf93a81e1d
refactor(agent): move login-wait into login.rs, dedupe env resolvers
2026-07-05 19:08:48 +02:00
müde
a3b66241d1
refactor(agent): extract claude driver into hive-claude crate
2026-07-05 18:50:12 +02:00
müde
e35acca814
fix(agent): pin claude session by constant title, archive on reset
2026-07-05 18:13:54 +02:00