3 Commits

Author SHA1 Message Date
63fc342238 feat(plugin): dialectic_list_arguments tool + clarify topic_detail desc
Two changes that fix bug #1 from the first e2e debate run (judge could
not see arguments, returned a hollow 'tie' verdict despite real pro/con
posts being in the DB):

1. New tool `dialectic_list_arguments` — hits the existing backend
   endpoint GET /api/topics/{id}/arguments and returns the full
   transcript (pro/con/judge entries with camp, agent_id, content,
   posted_at) in posted order. Used by judges composing verdicts and
   by debaters reading what opponents have said.

2. Updated `dialectic_topic_detail` description to make the split
   explicit: it returns the new camps array (added in the matching
   backend commit) so agents can locate their own allocation, but
   does NOT return arguments — list_arguments is the right tool.

Manifest contracts.tools updated (jiti loader requires this — see
[[reference-meridian-plugin-contract]]) plus internal logger count
bumped from 7 → 8 tools.

E2e verified on sim:
  - main agent calls topic_detail → sees camps array with self as 'pro'
  - judge agent calls list_arguments → reads pro/con content
  - judge rationale directly quotes claims from both sides
  - topic → completed with non-trivial binary verdict

Deploy note: jiti prefers .js when colocated; deploy must rm src/*.js
or pre-build before the new .ts takes effect (see e2e findings memory).
2026-05-23 22:03:49 +01:00
119d79ada3 feat: add dialectic_submit_verdict tool (was missing — judge had no way to submit)
7 tools total now:
- dialectic_list_topics
- dialectic_topic_detail
- dialectic_propose_topic
- dialectic_signup
- dialectic_post_argument
- dialectic_submit_verdict (NEW — POST /api/topics/{id}/verdict)
- dialectic_view_verdict

Also added contracts.tools entry for the new tool, updated README +
startup log line. Sim smoke verified the other 4 (list/propose/signup/
detail) via direct plugin import; submit_verdict not yet smoke-tested
end-to-end (requires running through a full debate to debate_end_at).
Code path is identical to other write tools — bearer + JSON body +
shape-coerced response.
2026-05-23 13:10:44 +01:00
db85d7dc69 feat: initial Dialectic.OpenclawPlugin — agent tools for Dialectic v2
Phase 3 of DIALECTIC-V2. Six tools wired to the Go backend running on
server.t3:

- dialectic_list_topics      GET  /api/topics
- dialectic_topic_detail     GET  /api/topics/{id}
- dialectic_propose_topic    POST /api/topics
- dialectic_signup           POST /api/topics/{id}/signups (HF pre-check)
- dialectic_post_argument    POST /api/topics/{id}/arguments
- dialectic_view_verdict     GET  /api/topics/{id}/verdict

All tools return MCP {content:[{type:text,text}]} shape. Errors caught
and surfaced as text payload so agents see actionable failure messages.

Per-agent API key resolved via secret-mgr key dialectic-agent-apikey
(cached in memory; AGENT_VERIFY env required). HF on_call coverage
check degrades gracefully to skipped if HarborForge.OpenclawPlugin
does not yet expose hasOnCallCovering() — backend stores pre_validated
flag as audit signal.

openclaw.plugin.json declares both contracts.tools (the 6 names) AND
activation.onStartup:true per loader gotchas memory; missing either
silently drops the plugin.

Plain export default {id, name, register} entry shape matching
prism-facet. No openclaw SDK imports (jiti runtime resolution of
openclaw was flaky in HF-style entries; structurally simpler avoids
the lookup entirely).

Defaults backendUrl to https://dialectic-api.hangman-lab.top; override
via openclaw.json plugins.entries.dialectic.config.backendUrl for sim.

Phase 3 deferred items (in README): agent key provisioning workflow,
HF window-coverage accessor, SSE subscription tool, token-cost
reporting.
2026-05-23 13:04:12 +01:00