Peter Steinberger
44314c9451
refactor(channels): table-drive setup and control-plane helpers ( #109028 )
...
* refactor(channels): table-drive setup credentials, config schemas, doctor detectors, status issues
* refactor(channels): control-plane tables (rest)
* fix(plugin-sdk): refresh surface budgets after rebase
* style(plugin-sdk): format credential helpers
* fix(channels): preserve generic schema refinement types
* fix(channels): preserve schema input and output inference
* fix(clickclack): forward credential patch fields
* test(plugin-sdk): use redacted credential fixtures
* fix(plugin-sdk): refresh API baseline after inference fix
* fix(channels): keep multi-account envelope optional
* fix(channels): preserve policy validation invariants
* fix(extensions): remove stale awaits from file checks
* style(qqbot): format synchronous file check
* fix(config): refresh bundled channel metadata
* fix(qqbot): reject unsupported pairing policy
2026-07-16 07:17:01 -07:00
Peter Steinberger
f7a665aaa1
refactor(clickclack): deduplicate gateway event fixtures ( #108942 )
2026-07-16 04:28:10 -07:00
zhanxingxin1998
5810de21b9
fix(clickclack): prevent reconnect from skipping in-flight events ( #108577 )
...
* fix(clickclack): commit websocket cursors after processing
Serialize realtime events and wait for queued handlers before reconnecting so only successfully processed cursors advance.
Co-Authored-By: OpenAI Codex <noreply@openai.com >
* fix(clickclack): replay failed websocket events
Keep the last successful cursor when realtime handling fails, then reconnect through durable backlog recovery before reopening the stream.
Co-authored-by: 詹幸心0668001037 <zhan.xingxin@xydigit.com >
---------
Co-authored-by: OpenAI Codex <noreply@openai.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-16 04:12:54 -07:00
NIO
3eec404aab
fix(clickclack): bound websocket handshake waits at 30s ( #106485 )
...
* fix(clickclack): bound websocket handshake waits at 30s
* test(clickclack): prove WebSocket handshake deadline
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-16 01:41:53 -07:00
Shakker
752567dbc8
feat: verify ClickClack after channel setup
2026-07-15 15:20:33 +01:00
Shakker
3e352d6727
refactor: share ClickClack setup verification
2026-07-15 15:20:33 +01:00
Shakker
728ac14a9a
test: use public ClickClack test helpers
2026-07-15 13:05:10 +01:00
Shakker
d1b839eaf6
fix: preserve ClickClack setup secret refs
2026-07-15 13:05:10 +01:00
Shakker
beece7f527
test: track ClickClack temporary directories
2026-07-15 13:05:10 +01:00
Shakker
d54eb4b74d
fix: preserve optional ClickClack account typing
2026-07-15 13:05:10 +01:00
Shakker
d599ac9133
fix: resolve ClickClack token secret refs
2026-07-15 13:05:10 +01:00
Shakker
b09c99dfee
fix: harden ClickClack setup credentials
2026-07-15 13:05:10 +01:00
Shakker
618c01af69
fix: verify ClickClack workspace ids during setup
2026-07-15 13:05:10 +01:00
Shakker
2c7705e363
fix: retain env-backed ClickClack accounts
2026-07-15 13:05:10 +01:00
Shakker
7af8f7dc22
docs: document ClickClack guided setup
2026-07-15 13:05:10 +01:00
Shakker
8dec391216
feat: add ClickClack setup wizard
2026-07-15 13:05:10 +01:00
Shakker
c3ab3133d8
fix: replace stale ClickClack credentials
2026-07-15 13:05:10 +01:00
Shakker
130fcefe47
feat: add ClickClack setup adapter
2026-07-15 13:05:10 +01:00
Shakker
b63ce98809
feat: add ClickClack setup inputs
2026-07-15 13:05:10 +01:00
Wynne668
61b85aa1d1
fix(clickclack): stop promptly during reconnect delay ( #108145 )
...
* fix(clickclack): cancel reconnect delay on gateway abort
* fix(clickclack): clean up failed websocket cycles
Co-authored-by: ZengWen-DT <ceng.wen@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-15 01:59:58 -07:00
Peter Steinberger
72e50c82fb
refactor(clickclack): privatize command menu mapping ( #107923 )
2026-07-14 19:09:51 -07:00
Shakker
d12dbcf0c5
test: update ClickClack resolved account fixtures ( #107907 )
2026-07-15 02:58:26 +01:00
Shakker
06a7dabefa
fix: tighten ClickClack command menu checks
2026-07-15 02:58:26 +01:00
Shakker
bc707efd3c
docs: document ClickClack command menus
2026-07-15 02:58:26 +01:00
Shakker
2b520b6172
feat: sync ClickClack command menus at startup
2026-07-15 02:58:26 +01:00
Shakker
1fada80ae3
feat: map ClickClack native command menus
2026-07-15 02:58:26 +01:00
Shakker
232af29f5b
feat: add ClickClack command menu client
2026-07-15 02:58:26 +01:00
Shakker
a16a692c58
feat: add ClickClack command menu config
2026-07-15 02:58:26 +01:00
Vincent Koc
ee6d6e7e78
refactor(extensions): remove dead local exports ( #107146 )
2026-07-14 13:09:20 +08:00
Shakker
72b42f0ed7
fix: preserve ClickClack nonce lookup causes ( #105775 )
2026-07-13 19:57:34 +01:00
Shakker
f2e93429ed
test: use explicit ClickClack token placeholders
2026-07-13 19:57:34 +01:00
Shakker
ef6c44f10b
fix: route ClickClack replies through runtime policy
2026-07-13 19:57:34 +01:00
Shakker
9b5cd4cd0d
fix: reconcile durable ClickClack sends
2026-07-13 19:57:34 +01:00
Shakker
0039c066c1
feat: add ClickClack nonce recovery lookups
2026-07-13 19:57:34 +01:00
Jacqueline Henriksen
ba00bd7bb4
fix: deliver ClickClack media and configurable model replies
2026-07-13 19:57:34 +01:00
Peter Steinberger
dba64d574f
chore(release): set version to 2026.7.2
2026-07-11 04:00:49 +01:00
Masato Hoshino
2a69149566
fix(clickclack): sanitize outbound assistant text ( #103142 )
2026-07-10 17:52:37 -07:00
ragesaq
b8d195f45e
fix: subscribe ClickClack from startup tail cursor ( #102486 )
...
Prevent ClickClack startup history from replaying as new agent input while preserving messages created during startup. Uses the server-captured realtime tail cursor from openclaw/clickclack#46 , paginates reconnect recovery, and retains legacy client and server compatibility.
Prepared head SHA: 0e7008fbf6
Co-authored-by: ragesaq <11304287+ragesaq@users.noreply.github.com >
Co-authored-by: Shakker <165377636+shakkernerd@users.noreply.github.com >
Reviewed-by: @shakkernerd
2026-07-10 13:07:07 +01:00
Peter Steinberger
b07ebe3ff3
feat: correlate managed agent requests ( #103476 )
2026-07-10 08:42:55 +01:00
sunlit-deng
1e377e3660
fix(clickclack): bound inbound websocket payloads ( #102480 )
...
* fix(clickclack): bound inbound websocket payloads
* fix(clickclack): bound inbound websocket payloads
Co-authored-by: sunlit-deng <yang.jiajun1@xydigit.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-09 12:09:30 +01:00
Vincent Koc
cc083e5f4f
refactor(plugins): localize internal helper types ( #101922 )
2026-07-07 17:11:49 -07:00
Vincent Koc
3d206140f3
refactor: localize internal implementation constants ( #101758 )
2026-07-07 08:34:13 -07:00
Peter Steinberger
a2a68d154b
fix(agent): preserve explicit recipient sessions ( #101507 )
...
* fix(agent): honor recipient session routing
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com >
Co-authored-by: pingfanfan <pingfan.work@gmail.com >
* fix(agent): preserve canonical recipient routes
* fix(agent): require exact recipient routes
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com >
Co-authored-by: pingfanfan <pingfan.work@gmail.com >
* fix(agent): harden recipient route resolution
* fix(imessage): require canonical recipient handles
* fix(agent): refine provider recipient exactness
* fix(agent): bound direct alias session routing
* fix(signal): preserve direct alias route type
* fix(agent): honor binding-scoped recipient sessions
* fix(routing): honor configured main session aliases
* fix(clickclack): align account-owned session routes
* fix(twitch): preserve canonical recipient sessions
* fix(routing): isolate stable outbound identities
* chore: defer recipient session changelog
* fix(sms): use dedicated channel SDK facade
---------
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com >
Co-authored-by: pingfanfan <pingfan.work@gmail.com >
2026-07-07 10:07:13 +01:00
Marvinthebored
cbcd6a102c
fix(clickclack): reply to a top-level message in-channel, not as a new thread ( #100582 )
...
* fix(clickclack): reply to a top-level message in-channel, not as a new thread
sendClickClackText routed any replyToId to createThreadReply, and the inbound
handler stamps replyToId = <triggering message id> on every reply. As a result
every reply to a top-level channel message opened its own thread, so the main
channel timeline showed nothing and the chat was effectively unusable.
Route a bare replyToId to the main channel as a quote-reply (quoted_message_id)
instead — matching the reply-to affordance of the Discord/Slack/Telegram
channels — and reserve threads for genuine thread context (an explicit threadId
or a thread-kind target). DM replies likewise quote-reply in the same
conversation. quoted_message_id is omitted when there is no reply context, so
plain sends are unchanged.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
* test(clickclack): cover quote payload typing
---------
Co-authored-by: Marvinthebored <marvinthebored@users.noreply.github.com >
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com >
Co-authored-by: Vincent Koc <vincentkoc@ieee.org >
2026-07-05 22:27:27 -07:00
Ayaan Zaidi
2b7003d535
fix(clickclack): gate provenance stamping behind agentActivity opt-in
2026-07-05 09:32:37 -07:00
ragesaq
00f345a82b
fix(clickclack): forward native activity callbacks
...
Allow ClickClack-owned progress rendering to receive item callbacks when source delivery is suppressed. This lets native agentActivity persist commentary and tool rows instead of relying on default progress texts.
HyperReview-Reflex: pass
HyperReview-Tier: light
HyperReview-Scope: staged-tree:e4d63a7648ad03f91fe81588cce783fd686b6488
HyperReview-Paths-SHA256: 94ae4829752bfdafc02191354cac5ae2a2ca9fc899ad02a7ced71d38829dd352
HyperReview-Reflex-Version: 0.3.3
HyperReview-Routed-To: none
2026-07-05 09:32:37 -07:00
ragesaq
67044ce7c7
feat(clickclack): normalize reasoning progress as commentary
...
ClickClack durable activity now treats preamble, commentary, analysis, thinking, and reasoning as streaming commentary segments. Reasoning-family lanes get a normalized Thinking label, while lifecycle frames stay hidden.
Why: native ClickClack needs Clickglass parity for commentary progress, tool calls, and final assistant delivery before the sidecar can be retired.
Validation:
pnpm tsgo:extensions
pnpm tsgo:extensions:test
pnpm exec oxlint extensions/clickclack/src/activity.ts extensions/clickclack/src/activity.test.ts
pnpm exec vitest run extensions/clickclack/src/activity.test.ts
HyperReview-Reflex: pass-with-conditions
HyperReview-Tier: light
HyperReview-Scope: staged-tree:ed2adf325ad5beffcb55d7c6b929b0be7a752b61
HyperReview-Paths-SHA256: e5499bb489781e9c4dd31828a71220bbe89c4e646011a7f31f5ce3b8db8d54c6
HyperReview-Reflex-Version: 0.3.3
HyperReview-Routed-To: none
HyperReview-Receipt-SHA256: 4d3480047c0b66556236cecde7dd3e199b57a027b8dd894acab47056d9be5b4c
2026-07-05 09:32:37 -07:00
ragesaq
a08ca5fc5d
feat(clickclack): stamp model/thinking attribution onto agent posts
...
Wires replyOptions.onModelSelected so the resolved provider/model and
thinking level for each turn (including after fallback) are sent as
author_model / author_thinking fields on activity rows and the final
reply. Servers without these columns ignore the unknown JSON fields, so
the wire shape is backward compatible; servers that persist them get
per-message attribution.
2026-07-05 09:32:37 -07:00
ragesaq
339cc4f12a
fix(clickclack): address review — docs, lint lanes, activity coalescing
...
- docs: document agentActivity option, the non-inherited agent_activity:write
scope, default-off and best-effort degradation behavior
- activity: type the enqueue catch parameter as unknown (lint lane)
- activity: treat toolCallId as opaque; normalize only itemId lane prefixes
- activity: skip identical/stale-shorter commentary snapshots so no
redundant PATCHes queue
- http-client: fail fast when createActivityMessage has no channel or
conversation target; narrow mocked request bodies before JSON.parse
2026-07-05 09:32:37 -07:00
ragesaq
01b34139b1
feat(clickclack): publish durable agent activity rows (commentary + tool)
...
Opt-in per-account (agentActivity: true): the ClickClack channel extension
now mirrors streamed commentary and tool progress into durable
agent_commentary / agent_tool message rows via the existing
replyOptions.onItemEvent seam, coalesced so one logical step is one row.
Requires a bot token carrying the agent_activity:write scope; publishing
is best-effort and never interrupts final text delivery.
2026-07-05 09:32:37 -07:00