vision(#623): disinto-chat escalation tools (CI run, issue create, PR create) #712
Labels
No labels
action
backlog
blocked
bug-report
cannot-reproduce
in-progress
in-triage
needs-triage
prediction/actioned
prediction/dismissed
prediction/unreviewed
priority
rejected
reproduced
tech-debt
underspecified
vision
No milestone
No project
No assignees
4 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: disinto-admin/disinto#712
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Goal
Let
disinto-chatperform scoped write actions against the factory — specifically: trigger a Woodpecker CI run, create a Forgejo issue, create a Forgejo PR — via explicit backend endpoints. The UI surfaces these as buttons the user clicks from a chat turn that proposes an action. The model never holds API tokens directly.Why
Scope
Files to touch
docker/chat/server.{py,go}— new authenticated endpoints (reuse #708 / #709 session check):POST /chat/action/ci-run— body{repo, branch}→ calls Woodpecker API withWOODPECKER_TOKEN(already in.envfrom existing factory setup) to trigger a pipeline.POST /chat/action/issue-create— body{title, body, labels}→ calls Forgejo API/repos/<owner>/<repo>/issueswithFORGE_TOKEN.POST /chat/action/pr-create— body{head, base, title, body}→ calls/repos/<owner>/<repo>/pulls.{role: "action", ...}lines.docker/chat/ui/index.html— small HTMX pattern: when claude's response contains a marker like<action type="issue-create">{...}</action>, render a clickable button below the message; clicking POSTs to/chat/action/<type>with the payload.lib/generators.shchat env: passWOODPECKER_TOKEN,FORGE_TOKEN,FORGE_URL,FORGE_OWNER,FORGE_REPO.Out of scope
Affected files
docker/chat/server.py(orserver.go) — new action endpointsdocker/chat/ui/index.html— action button renderinglib/generators.sh— pass additional env vars to chat containerAcceptance
<action type="issue-create">{...}</action>block renders a button; clicking it creates an issue on Forgejo, visible via the API.actionand the response from the API call./chat/action/*return 401 (inherits #708 gate).Depends on
Notes
FORGE_TOKENis a long-lived admin token. For MVP, reuse it; a follow-up issue can scope it down to per-user Forgejo tokens derived from the OAuth flow.http://woodpecker:8000/api/..., reachable via the compose network — no need to go through the edge container.<action>marker is deliberately simple markup the model can emit in its response text. Do not implement tool-calling protocol; do not spin up an MCP server.Boundaries for dev-agent
<action type="...">{JSON}</action>.Blocked — issue #712
ci_exhausted2026-04-12T04:10:59ZPlanner run 6: Relabeled
blocked→backlog,priorityfor ci_exhausted retry. Sub-issue 10/10 for #623 (has stale PR #733). If CI fails again on retry, may need investigation into what specifically is failing.Blocked — issue #712
ci_exhausted_poll (3 attempts, PR #733)2026-04-12T05:49:03ZBlocked — issue #712
ci_exhausted2026-04-12T06:05:02ZPlanner run 8: Cleared stale dev-bot assignment. CI root cause (#742) is fixed — PR #754 merged. Ready for dev-agent retry. Prior ci_exhausted failures were systemic, not issue-specific. Existing PR #733 may need rebase or fresh branch.
this is not needed, the agent should just use the disinto x tools on the host