feat(grok): give the Grok Intake its propose_draft tool (draft card)

The prompter prompt tells the model to call propose_draft when the spec is
ready, but on Grok that tool didn't exist — so no draft chunk, no panel draft
card, and the human couldn't launch a task from a Grok intake chat.

- intake-tools.js: opencode plugin registering propose_draft via Hooks.tool;
  the execute() only ACKs — the driver (OpencodeServeSession.normalize ->
  _is_propose_draft -> _draft_from_tool_input) intercepts the tool CALL and
  emits the `draft` chunk the panel renders.
- agent-grok-prompter.Dockerfile: bake the plugin, scoped to this image via
  ROBOCO_OPENCODE_EXTRA_PLUGINS (delivery roles never draft).
- test: a propose_draft tool part normalizes to a draft chunk (not a tool_use).

The live tool-call -> draft-card path is flagged UNVERIFIED-LIVE for the NAS.
This commit is contained in:
Renn F
2026-06-18 19:59:38 +02:00
parent d6af37c2f8
commit 899d9d9715
3 changed files with 73 additions and 0 deletions
+8
View File
@@ -10,6 +10,14 @@
FROM roboco-agent-grok
USER root
# The intake propose_draft tool plugin (the model calls it; the driver turns the
# call into the panel's draft card). Scoped to THIS image via
# ROBOCO_OPENCODE_EXTRA_PLUGINS so only the intake role carries it.
COPY docker/grok/intake-tools.js /app/opencode-plugins/intake-tools.js
ENV ROBOCO_OPENCODE_EXTRA_PLUGINS=/app/opencode-plugins/intake-tools.js
USER agent
LABEL role="grok-prompter"