Commit Graph

9434 Commits

Author SHA1 Message Date
Peter Steinberger
66604df9b6 refactor(channels): share retry helpers and remove dead state probes (#108903)
* refactor(channels): generalize channel retry runner and retry-after parsing; drop dead configured-state probes

* fix(channels): align retry and metadata contracts
2026-07-16 04:03:15 -07:00
Peter Steinberger
5c027fba14 chore(plugin-sdk): refresh merged API baseline (#108913) 2026-07-16 03:50:51 -07:00
Eden
d572c5cb2d fix(line): run post-ack webhook processing on its own admitted work root (#107734)
* fix(line): run post-ack webhook processing on its own admitted work root

LINE acks the webhook and dispatches event processing fire-and-forget on
the same async chain. The HTTP request admission that chain inherited is
released as soon as the route handler returns, and a released admission
refuses subordinate queue work - so every LINE inbound agent turn fails
with "GatewayDrainingError: Gateway is draining; new tasks are not
accepted" even though the gateway is healthy. DMs, group mentions, and
postbacks are all affected; the user-visible symptom is the bot replying
"Sorry, I encountered an error processing your message." to everything.

Add runDetachedWebhookWork to the plugin-sdk webhook-request-guards
surface (a thin wrapper over the gateway independent-root continuation,
the same shape core uses in gateway/server/hooks.ts) and route all three
LINE ack-first dispatch sites through it: the gateway monitor handler
(the live path), and the createLineNodeWebhookHandler / Express
middleware handlers (public webhook building blocks an embedder can
register under the gateway). #65375 unified these three into one ack-first
pattern; keeping the detach consistent avoids re-introducing the same
latent defect in the two that are not on the live gateway path today.

The continuation is reserved synchronously while the request is still
admitted, so the detached processing stays accepted and a real restart
drain can wait for it instead of stranding it mid-turn.

Tests pin every layer: the guards suite proves detached post-ack work is
admitted after the request admission is released (and that the inherited
chain without the helper is refused); the monitor lifecycle suite and the
webhook-node suite assert each dispatch site goes through the detached
root. Red/green verified: reverting any dispatch fails its test.

* fix(plugin-sdk): account for runDetachedWebhookWork in public surface budget

* fix(channels): track detached webhook processing

Co-authored-by: 許元豪 <146086744+edenfunf@users.noreply.github.com>

* docs: refresh generated docs map

* chore(plugin-sdk): refresh API baseline

* fix(webhooks): preserve post-ack ordering

* test(plugin-sdk): satisfy detached work lint

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 03:39:02 -07:00
Shubhankar Tripathy
6390edec25 fix(memory-lancedb): prevent cross-agent memory leakage (#103799)
* fix(memory-lancedb): gate auto-recall and auto-capture on per-agent memorySearch.enabled (#103590)

The before_prompt_build auto-recall hook only checked the plugin-level
autoRecall flag, so agents configured with memorySearch.enabled: false
still received <relevant-memories> injected from the shared LanceDB store
- leaking one agent's private memories into another agent's prompts. Gate
both recall injection and agent_end auto-capture on the current agent's
memorySearch.enabled (per-agent entry wins over agents.defaults; unset
means enabled), mirroring core resolveMemorySearchConfig semantics.

* fix(memory-lancedb): normalize agent ids before the memorySearch gate

Review follow-up on #103799: a configured id like 'XiaoHuo' or one with
surrounding whitespace missed the exact-match per-agent override and
inherited the enabled default, leaving the disclosure path active.
Normalize both the hook agent id and configured entry ids with the SDK
normalizeAgentId before comparing.

* fix(memory-lancedb): resolve the per-agent memorySearch gate via resolveAgentConfig

* fix(memory): isolate LanceDB rows by agent

Co-authored-by: Shubhankar Tripathy <reach2shubhankar@gmail.com>

* fix(memory): isolate LanceDB rows by agent

Co-authored-by: Shubhankar Tripathy <reach2shubhankar@gmail.com>

* refactor(memory): keep LanceDB store types private

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 03:33:08 -07:00
Jason (Json)
73980e7e42 fix(codex): remove duplicate provider setup choice (#107979)
* fix(codex): stop advertising harness as model provider

Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>

* fix(wizard): keep migration plugins out of optional setup

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 03:31:11 -07:00
Peter Steinberger
2488d794ca feat(ui): expand child sessions in sidebar (#108838)
* feat(ui): expand child sessions in sidebar

* test(ui): type child session list options

* refactor(ui): split child session data helpers

* fix(ui): preserve session link semantics

* fix(ui): retry incomplete child session loads

* chore: keep release changelog owner-only
2026-07-16 03:26:49 -07:00
Peter Steinberger
05c2701e3d refactor(plugin-sdk): share widget HTML validation helpers (#108807)
* refactor(plugin-sdk): add widget HTML helpers

* refactor(plugins): share widget HTML validation
2026-07-16 03:13:29 -07:00
Peter Steinberger
91f57a3159 fix(clawrouter): normalize Perplexity tool schemas and harden dynamic model cache (#108758) 2026-07-16 02:39:33 -07:00
Peter Steinberger
723d12fd4c refactor(apns): move registrations to shared SQLite (#108543)
* refactor(apns): move registrations to SQLite

* fix(apns): satisfy strict migration typing

* chore(apns): remove obsolete lint suppression

* chore: prune APNs max-lines baseline

* refactor(apns): keep store internals private

* fix(apns): preserve stored relay origins

* fix(apns): advance versions across deletion

* fix(apns): harden legacy state import

* fix(apns): redact legacy import errors

* fix(apns): reserve version successor

* fix(apns): bound legacy timestamp imports

* refactor(apns): extract payload builders
2026-07-16 01:52:15 -07:00
Peter Steinberger
de17534779 fix(docs): render taxonomy closing tags 2026-07-16 04:50:41 -04:00
Peter Steinberger
30ae21fca7 fix: prevent SQLite lock stalls and schema drift (#108663)
* fix: harden SQLite state storage

* build: allow strict SQLite migration SQL

* test: align SQLite and model-default assertions
2026-07-16 01:45:06 -07:00
Josh Avant
aaf5d23883 fix(heartbeat): stop reporting success after tool failures (#107735)
* fix(heartbeat): preserve terminal tool failures

* fix(heartbeat): handle absent failure payloads

* test(agents): align execution-state consumers

* fix(heartbeat): retain unmatched pending finals

* fix(heartbeat): preserve failures across retries

* refactor(agents): narrow terminal outcome boundary

* fix(copilot): preserve terminal tool failures

* fix(agents): bound tool execution tracking

* docs(plugins): document harness terminal outcomes

* fix(codex): preserve exact terminal boundaries

* test(codex): harden abort race fixtures
2026-07-16 01:23:06 -07:00
Peter Steinberger
a7d5386896 improve: speed up ring-zero QA smoke (#108694)
* ci: speed up ring-zero QA smoke

* ci: scope QA sticky cache to Docker lane

* ci: keep QA dependency setup on actions cache

* test: restore modern Docker QA proof
2026-07-16 01:12:40 -07:00
Peter Steinberger
e2fed32131 fix(onboarding): explain how to get provider tokens and revive logged-out CLI candidates (#108739)
* fix(onboarding): explain how to obtain provider tokens in auth setup copy

* fix(onboarding): add per-CLI login remediation to detected candidate details
2026-07-16 01:12:15 -07:00
Peter Steinberger
54f8957e12 fix(discord): Activities open correctly from packaged builds (#108725)
* fix(discord): resolve activity SDK from plugin root

* chore: keep release notes out of PR
2026-07-16 01:00:22 -07:00
Dallin Romney
9a2f25c82b refactor(qa): make channel drivers run-level (#108602) 2026-07-16 00:59:03 -07:00
Peter Steinberger
dde90a345a refactor(plugin-sdk): narrow wildcard barrels to explicit used exports (#108440)
* refactor(plugin-sdk): narrow wildcard barrels to explicit used exports

* refactor(tools): delete dead tool-planning module exposed by barrel narrowing

* fix(plugin-sdk): restore deprecation tag on OpenClawSchemaType alias

* test(agents): drop test for deleted runtime proxy module

* refactor(tools): trim descriptor types to cache consumers

* refactor(deadcode): harvest exports orphaned by barrel narrowing

* refactor(deadcode): harvest exports orphaned by barrel narrowing (rest)

* fix(agents): restore sdk imports and test markers via public predicate

* fix(plugin-sdk): named type re-exports in plugin-entry; trim types barrel precisely

* chore(plugin-sdk): account unmasked deprecated provider types in budgets

* fix(plugins): name star-only type rows for dts bundling

* fix(plugins): restore host-hook surface; unexport internal api compositions

* fix(plugins): named type imports for api composition; restore needed source exports

* fix(plugins): knip-visible type imports for registry surfaces

* test: adapt tests to privatized media and command internals

* fix(qa-lab): re-export snapshot conversation type

* style: format sessions sdk imports

* fix(plugins): restore smoke entry export; pin budgets to exact actuals

* fix(plugins): canonical smoke-entry import; drop orphaned root shims

* fix(plugins): allowlist manifest probe, repoint qa web import, drop dead browser barrels

* fix(plugin-sdk): pin codex auth marker and scaffold provider type

* fix(qa-lab): keep web-facing model-selection shim within boundary rules

* fix(plugin-sdk): preserve merged contracts through narrowed barrels

* chore(plugin-sdk): pin post-rebase surface budgets
2026-07-16 00:45:23 -07:00
Peter Steinberger
48b11d1c66 fix(update): repair obsolete managed Gateway Node (#108668)
* fix(update): refresh stale managed service Node

* refactor(update): keep preflight result internal

* docs(changelog): defer update note to release
2026-07-16 00:41:43 -07:00
Peter Steinberger
527c8cee0c feat(discord): adapt voice wake names to room size (#108696)
* feat(discord): adapt voice wake names to room size

* chore(discord): defer voice release note

* chore(protocol): regenerate session create model
2026-07-16 00:41:26 -07:00
Alix-007
292e8c3e72 fix(msteams): add timeouts to SharePoint file send requests (#104288)
* fix(msteams): add timeouts to SharePoint file send requests

* fix(msteams): clean up SharePoint timeout proof

* fix(msteams): use transfer deadline for SharePoint uploads

* test(msteams): normalize SharePoint abort rejection reasons

* fix(msteams): size SharePoint upload deadline by file length

* chore(deadcode): allowlist test-only timeout constant exports

* fix(msteams): harden SharePoint sharing deadlines

Co-authored-by: Alix-007 <li.long15@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-16 00:39:40 -07:00
Peter Steinberger
7a398fe6f8 fix(update): preserve plugin policy on failures (#108661) 2026-07-16 00:38:44 -07:00
Peter Steinberger
0f32033d78 fix(ui): add thinking level to new cloud sessions (#108679) 2026-07-15 23:54:00 -07:00
Peter Steinberger
d8b723fb00 fix: channel turns recover safely after gateway restart (#108283)
* fix(gateway): recover channel turns safely after restart

* refactor(gateway): keep recovery identity internal

* refactor(gateway): keep recovery metadata private

* fix(gateway): preserve recovery action authority

* fix(gateway): close recovery lifecycle gaps

* fix(gateway): fail closed on missing delivery receipts

* fix(gateway): fail closed on unmirrorable replies

* fix(gateway): persist terminal delivery intent

* fix(gateway): align recovery lifecycle types

* fix(gateway): require exact terminal thread receipt

* fix(gateway): close recovered terminal tool calls

* test(gateway): type terminal tool correlation

* fix(gateway): satisfy restart recovery CI contracts

* fix(gateway): require terminal tool correlation

* fix(agents): scope recovery receipts to source turns

* fix(gateway): fail closed without restart correlation

* fix(gateway): dedupe terminal source redelivery

* fix(agents): keep recovery tool results causal

* test(auto-reply): clean recovery fixture directories

* fix(gateway): allow live terminal sends without recovery claims

* fix(agents): reconcile delivered sends through restart aborts

* fix(agents): keep recovery continuations in source turns

* fix(agents): keep source-less sends non-terminal

* fix(auto-reply): dedupe active source redelivery

* fix(agents): harden recovery receipt contracts

* fix(agents): admit terminal recovery successors

* docs(recovery): document canonical receipt ownership

* fix(agents): fail closed on stale turn authority

* test(auto-reply): assert rebound session state

* fix(plugins): keep restart recovery hook list internal
2026-07-15 23:01:26 -07:00
Peter Steinberger
da59d6ade9 feat(onboarding): detect local inference providers (#108605)
* feat(onboarding): detect local inference providers

* fix(onboarding): satisfy inference choice lint

* chore(i18n): refresh onboarding locales

* chore: leave changelog to release automation

* chore(plugin-sdk): refresh API baseline

* fix(onboarding): preserve source config during local activation
2026-07-15 22:46:16 -07:00
keshavbotagent
9f5609382b fix(telegram): preserve tool progress under preambles (#108394)
* fix(telegram): keep tool rows below progress preambles
* fix(telegram): preserve text tool progress under preambles
* fix(telegram): preserve memory progress under preambles

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-07-16 10:48:53 +05:30
Peter Steinberger
5bfcd779b1 fix(ui): local sessions show no placement icon (#108615)
* fix(ui): distinguish cloud worker sessions

* chore: defer session icon release note

* fix(ui): keep placement helper private
2026-07-15 22:05:09 -07:00
Peter Steinberger
3c8269ca52 refactor(codex)!: fold the codex text provider into openai with a doctor migration
The live codex text provider was a redundant projection of the openai
catalog (exclusive provider ownership; the openai plugin's ChatGPT OAuth
discovery already serves gpt-5.6-* route-aware). Folding it:

- extensions/codex no longer registers a text provider, catalog entry, or
  synthetic text auth; provider.ts/provider-catalog.ts/provider-discovery.ts
  and the route-blind model-name heuristics are deleted; the narrow
  post-harness reasoning fallback moves to an app-server-owned module
- openai thinking policy keys on explicit selected-route provenance
  (api === openai-chatgpt-responses) instead of value-shape inference
- models.list gains an optional additive agentRuntime field (configured
  intent); session agentHarnessId remains the execution proof
- doctor --fix migrates the shipped codex/* config shape end to end:
  every model slot, provider-config merge with blocker-aware conflict
  handling, sessions, cron payloads (two-phase: runtime policy persists
  before cron refs rewrite), transcripts; migrated refs carry model-scoped
  agentRuntime.id=codex preserving the shipped wizard semantics; auto
  runtime policies normalize to codex with sibling fields preserved;
  blocked provider conflicts retain the whole legacy namespace fail-closed
  with an actionable warning
- the stale openai:default profile cleanup (#91352) was deliberately
  deferred to a follow-up after review showed it needs per-agent identity
  proofs; doctor keeps warning about unusable profiles

Fixes #105561
Fixes #84637
Fixes #90420
2026-07-16 03:06:43 +01:00
Peter Steinberger
9317aadaa2 feat(slack): add opt-in scoped presence events (#108510)
* feat(slack): add opt-in presence events

* style(slack): satisfy presence lint rules

* chore: keep release changelog centralized

* fix(slack): satisfy presence integration gates

* fix(slack): preserve eligible presence targets
2026-07-15 17:43:26 -07:00
morluto
16801bf4f0 fix(agents): prevent subagent registry resurrection (#105793)
* fix(agents): retire legacy subagent registry JSON

Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>

* fix(agents): keep migration decision internal

Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>

* style(agents): format migration decision type

Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 17:01:42 -07:00
Dallin Romney
2d9b78fff7 refactor(qa): canonicalize live scenario coverage (#108464) 2026-07-15 16:50:41 -07:00
Dallin Romney
ca45a784f3 docs: align QA transport and release workflow contracts (#108463)
* docs: align QA transport workflow contracts

* docs: clarify Mantis env credentials
2026-07-15 14:51:37 -07:00
Peter Steinberger
766742c674 refactor(node-host): move configuration to shared SQLite (#108457)
* refactor(node-host): move config to shared SQLite

* test(node-host): satisfy migration gates
2026-07-15 14:02:23 -07:00
Peter Steinberger
b624abfc69 fix(discord): stop channel presence greetings for unrelated guild members (#108448)
* fix(discord): scope presence wakes to channel viewers

* chore: remove release-owned changelog entry

* fix(discord): bound presence permission lookups

* test(discord): bind presence fetch mock

* fix(discord): keep presence lookup overflow retryable
2026-07-15 13:51:48 -07:00
Peter Steinberger
32a84d093f refactor(agents): split agent command orchestration (#108424)
* refactor(agents): split agent command orchestration

* test(agents): tighten cleanup ownership proof

* refactor(agents): keep command helper types private

* test(cli): track refactored secret resolution callsite

* fix(agents): preserve post-run session ownership

* fix(agents): preserve media recovery across command split
2026-07-15 13:42:05 -07:00
Dallin Romney
af71400c8e refactor(qa): route live channel selectors through suite host (#108429)
* refactor(qa): route live channel selectors through suite host

* fix(qa): repair live selector CI

* fix(qa): remove retired runner exports

* fix(qa): remove obsolete live evidence
2026-07-15 13:35:34 -07:00
Dallin Romney
77d07dc3e9 refactor(qa): migrate Telegram scenarios into QA Lab (#108430)
* refactor(qa): migrate Telegram scenarios into QA Lab

* refactor(qa): remove retired Telegram runner exports
2026-07-15 12:55:00 -07:00
xydt-tanshanshan
d201acd6e8 refactor(push-web): move web push store to shared SQLite state DB (#103294)
* refactor(push-web): move state to shared SQLite

Co-authored-by: hailory <hailory@xydigit.com>

* fix(push-web): harden legacy migration retries

* fix(push-web): format migration lock errors

* fix(push-web): gate runtime during legacy migration

* fix(push-web): keep store internals private

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: hailory <hailory@xydigit.com>
2026-07-15 12:54:22 -07:00
Peter Steinberger
d37e873420 refactor(plugins): split plugin type contracts (#108416)
* refactor(plugins): split plugin type contracts

* refactor(plugins): split provider type contracts

* refactor(plugins): extract plugin definition contract
2026-07-15 12:51:39 -07:00
Peter Steinberger
126b549a26 feat: run and reclaim cloud worker sessions from Control UI (#108398)
* feat(gateway): finish cloud worker session reclaim

* chore(gateway): refresh cloud worker artifacts

* fix(gateway): preserve recovery environment narrowing

* test(gateway): complete worker tunnel mock

* fix(gateway): harden cloud worker recovery

* fix(gateway): serialize forced worker teardown

* fix(gateway): handle replaced workspace directories

* fix(gateway): preserve forced destroy receiver

* test(ui): cover cloud worker reclaim flow

* fix(gateway): close final worker recovery races

* fix(ci): align cloud worker generated surfaces

* test(gateway): satisfy worker queue lint

* fix(gateway): recheck remote workspace after lease fence

* chore: move cloud worker release note to PR
2026-07-15 11:24:04 -07:00
Peter Steinberger
bbb62d8510 chore(plugins): window unused and bundled-only public plugin-sdk subpaths (#108415)
* chore(plugins): window unused and bundled-only public plugin-sdk subpaths

* fix(plugins): keep literal compat codes in windowed subpath seeds
2026-07-15 11:21:59 -07:00
Peter Steinberger
2d7be9e84f fix(docs-i18n): protect split product links 2026-07-15 13:50:06 -04:00
Peter Steinberger
f810fb35d5 refactor(reef): centralize peer trust in SQLite (#108375)
* feat(plugin-sdk): support removing pairing requests

* refactor(reef): centralize peer trust in SQLite

* chore: defer Reef release note

* fix(reef): share runtime state across module instances

* refactor(reef): narrow trust store boundary

* test(reef): pass config to account description
2026-07-15 10:21:54 -07:00
Peter Steinberger
f3adeb2ac6 fix(discord): move command deploy cache to sqlite (#108381) 2026-07-15 10:03:09 -07:00
Peter Steinberger
9497450511 refactor: eliminate dead-export baseline (#108376)
Burn the grandfathered unused-export baseline to zero and enforce a hard-zero Knip gate.
2026-07-15 17:05:07 +01:00
Peter Steinberger
f41c143345 refactor(state): move skill upload staging to SQLite (#108346)
* refactor(state): move skill upload staging to sqlite

* test(skills): make archive mode assertion portable

* fix(skills): fence upload finalization by lease owner

* fix(skills): handle nullable lease expiry

* fix(skills): bound upload install leases
2026-07-15 08:40:46 -07:00
jincheng-xydt
b2e42e3645 fix(update): preserve pnpm and Bun global installs (#107802)
* fix(update): preserve pnpm and bun global installs

* fix(update): anchor pnpm updates to invoking install

* fix(update): recover skipped pnpm lifecycle

* fix(update): fail closed on ambiguous pnpm ownership

* fix(update): tolerate pnpm probe warnings

* fix(update): bind pnpm installs to project owners

* fix(update): isolate pnpm mutations from caller pins

* docs(changelog): credit pnpm 11 report

Co-authored-by: jincheng-xydt <xu.jincheng@xydigit.com>

* chore(changelog): defer release note ownership

* fix(update): make package-root fallback explicit

* test(update): split pnpm scenario coverage

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-15 08:03:35 -07:00
Shakker
8d5592548b docs: explain ClickClack post-add verification (#108332) 2026-07-15 15:20:33 +01:00
Peter Steinberger
4e78d91c0f refactor(sessions): split session accessor by ownership (#108247) 2026-07-15 06:47:29 -07:00
Peter Steinberger
e38cd62e0d refactor(state): move managed image records to SQLite (#108290)
* refactor(state): move managed image records to sqlite

* refactor(state): narrow managed image store exports

* fix(state): preserve managed image media roots

* test(state): track managed image temp directories
2026-07-15 06:14:10 -07:00
marchpure
69ef3ca980 fix(codex): make loop relay optional (#97224)
Move the Codex-specific PreToolUse loop relay switch into the Codex
plugin, preserve policy relays, and cover both normal and side turns.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: marchpure <marchpure@users.noreply.github.com>
2026-07-15 05:29:20 -07:00