Commit Graph

147 Commits

Author SHA1 Message Date
Jesse Merhi 4a2a600809 feat(channels): add channel-owned setup contracts (#112176)
* feat(channels): add channel-owned setup contracts

* test(channels): align legacy setup fixtures

* chore(channels): regenerate config and SDK baselines after rebase

* fix(update): run fresh doctor after current-process core changes

* fix(channels): align add pre-scan with execution precedence

* style(cli): format channels-cli test additions

* fix(channels): restore option-before-positional channel resolution via metadata arity scan

* fix(channels): keep help flags out of metadata arity escalation

* test(update): mock fresh post-update doctor in current-process suites

* style: format review fixes and correct entrypoint mock type

* fix(channels): register only modern contract options for dual-publishing plugins

* test(update): align downgrade suites with fresh-doctor child invocation

* docs(channels): record empty-contract and input-forwarding invariants

* fix(line): keep the shipped --token switch as a channel access token alias

* fix(signal): stop treating exact cross-family loopback endpoints as bind-aligned

* chore(config): regenerate docs config baselines after second rebase

* style: format rebased channels add tests

* fix(channels): enforce field-key and flag-name agreement in setup contracts

* fix(signal): detect container endpoints for bare --http-url setup

* fix(signal): ignore unconfigured accounts in transport collision checks

* fix(channels): validate negated setup flags in contract and normalizer

* fix(signal): preserve existing transport kind when setup detection is unreachable

* style(signal): use direct boolean check in collision guard

* style(signal): type test config literals

* docs(update): record two-read design of fresh-doctor validation gate

* fix(channels): satisfy post-rebase architecture gates

* docs: refresh channel setup map

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-22 19:57:42 -04:00
Peter Steinberger b40a8da70e refactor(channels): trim deprecated setup-input fields and legacy promotion keys to published readers (#112587)
* refactor(channels): trim deprecated setup-input fields and legacy promotion keys to published readers

* ci: retrigger after dropped ready event

* fix(channels): update setup-input guardrails and dead code for the trimmed tier
2026-07-22 01:15:58 -07:00
Peter Steinberger f236e83de7 refactor(channels): shrink ChannelSetupInput to a generic envelope with a deprecated compatibility tier (#112319)
* refactor(channels)!: shrink ChannelSetupInput to a generic envelope with a deprecated compatibility tier

* fix(channels): keep ChannelSetupInput structurally assignable without an index signature

* docs: regenerate docs map
2026-07-21 22:17:03 -07:00
Peter Steinberger e1d5d3dc16 refactor(channels): move single-account promotion keys to plugin declarations (#112293)
* refactor(channels): move single-account promotion keys to plugin declarations

* fix(channels): keep legacy promotion tier for undeclared setup adapters

* fix(channels): keep plugin discovery lazy in setup promotion helpers

* fix(channels): resolve bundled promotion surfaces from setup-only artifacts

* test(matrix): use vi.stubEnv in setup test env helper
2026-07-21 06:48:30 -07:00
ZOOWH 288ba6cfb8 fix(clickclack): redact REST error details (#106635)
* fix(clickclack): redact REST error details

Redact untrusted ClickClack REST failure details before they reach callers.

Refs #106635; credit @ZOOWH.

Co-authored-by: ZOOWH <xu.wenhan1@xydigit.com>

* style(clickclack): order SDK imports

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-20 20:17:59 -07:00
Shakker 49aa383dd7 fix: consume ClickClack v1 setup claim contract (#111927)
Support ClickClack v1 setup claim URLs for split-origin and path-mounted deployments while preserving legacy setup flows and private transport overrides.

Refs #111919.
Prepared head SHA: c13ce82e38
Co-authored-by: Shakker <165377636+shakkernerd@users.noreply.github.com>
Reviewed-by: @shakkernerd
2026-07-20 18:50:30 +01:00
Peter Steinberger 343cfba638 fix(clickclack): private API base for gated hostnames and single discussion-provider registration (#111724)
* fix(clickclack): split API base and refresh discussion provider

* chore: regenerate bundled channel config metadata and docs map for the apiBaseUrl key
2026-07-20 01:27:13 -07:00
Peter Steinberger e67fda8ec8 fix(clickclack): accept omitted nullable managed-channel fields and auto-open the discussion panel (#111685)
* fix(clickclack): accept omitted nullable managed-channel fields and auto-open the discussion panel

* fix(ui): open the discussion when write access arrives after it resolved
2026-07-19 23:10:29 -07:00
Peter Steinberger 5420c5c409 feat(clickclack): session discussions — bound channels, side agent, lifecycle sync (#111503)
* feat(clickclack): add session discussions

* chore: remove release-owned changelog entry

* refactor(clickclack): split discussion service workflows

* fix(clickclack): satisfy plugin surface gates

* fix: narrow routing peer in inbound test and refresh docs map
2026-07-19 14:47:14 -07:00
Peter Steinberger 783a5d21cf refactor(config): purge numeric tuning knobs behind built-in defaults (#111382) 2026-07-19 07:35:45 -07:00
Peter Steinberger 31ed59bdf6 feat: keep main agents aware of group activity (#110332)
* feat(sessions): auto-watch group activity from main

* feat(sessions): allow watchers to read watched sessions

* fix(sessions): skip group watches for system turns

* fix(sessions): preserve watched session semantics

* fix(channels): propagate effective dm scope

* fix(sessions): canonicalize main watch identity

* fix(sessions): distinguish ambient group watches

* fix(sessions): revoke ineligible ambient watches

* chore: drop CHANGELOG edit (release generation owns it)
2026-07-18 04:06:58 +01:00
Peter Steinberger d023e8b412 perf(test): poll ClickClack gateway faster (#109803) 2026-07-17 10:22:09 +01:00
Peter Steinberger 0e792b6de3 refactor(channels): centralize inbound orchestration and remove internal compat (#109716)
* refactor(channels): centralize inbound turn orchestration

* refactor(runtime): remove stale compatibility paths

* chore(guards): reject internal deprecated API use

* refactor(channels): simplify core turn planning

* chore(guards): keep deprecated checks boundary-focused

* refactor(memory): keep modern config off compat barrel

* fix(msteams): preserve feedback learning

* test(channels): align modern inbound fixtures

* refactor(channels): finish modern inbound migration

* refactor(channels): tighten core inbound kernel

* fix(channels): preserve turn assembly narrowing

* test(sdk): keep runtime mock binding immutable

* test(matrix): isolate read policy runtime

* test(msteams): mock canonical reply factory

* test(slack): mock core inbound turn dispatch

* test(telegram): inject core session recorder

* test(signal): inject core session recorder

* test(googlechat): assert canonical inbound routing

* test(synology-chat): align core turn fixture

* fix(sdk): preserve direct DM runtime compat

* refactor(channels): own inbound envelope compat in core

* refactor(channels): trim inbound dispatch seams

* refactor(channels): remove redundant async wrappers

* test(synology-chat): type canonical dispatcher mock

* refactor(channels): remove remaining dead compat seams

* chore(sdk): refresh API baseline after rebase

* fix(channels): preserve direct DM identity metadata
2026-07-17 00:56:46 -07:00
Shakker 2f23642719 fix: allow local HTTP ClickClack setup codes (#109429) 2026-07-17 01:00:18 +01:00
Peter Steinberger d6026ff1fa fix(clickclack): clear deadcode and lint breaks in setup flow
Recent setup commits left the hard-zero gates red on every PR:
parseClickClackSetupCodeInput was exported but only used internally,
ClickClackSetupCodeClaimError was exported yet consumed only by its
test (production catches it structurally through a status field), a
string spread tripped no-misused-spread, and a computed "token" key
tripped no-useless-computed-key. Un-export both symbols, switch the
test to a structural claim-error stand-in matching what the formatter
reads, and apply the two mechanical lint fixes.
2026-07-16 16:23:24 -07:00
Shakker efd6d8d3f7 test: type ClickClack setup claim fetch mocks (#109398) 2026-07-16 23:56:29 +01:00
Shakker e78d117a59 refactor: keep claimed ClickClack credentials reviewable 2026-07-16 23:56:29 +01:00
Shakker 5bd0864c4e test: keep ClickClack setup fixtures review-safe 2026-07-16 23:56:29 +01:00
Shakker ee153b1688 test: use review-safe ClickClack token fixtures 2026-07-16 23:56:29 +01:00
Shakker 44d1542a76 perf: keep ClickClack claim networking off setup startup 2026-07-16 23:56:29 +01:00
Shakker 4cd07e5e8c feat: configure ClickClack accounts from setup codes 2026-07-16 23:56:29 +01:00
Shakker 204f4499e8 feat: add secure ClickClack setup code claim client 2026-07-16 23:56:29 +01:00
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 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 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