Commit Graph

10375 Commits

Author SHA1 Message Date
Jesse Merhi
8b21c23cc2 feat(web-fetch): add tools.web.fetch.headers for operator request headers (#115545)
* feat(web-fetch): add tools.web.fetch.headers for operator request headers

* docs(web-fetch): update cache discriminator comment

* fix(web-fetch): reserve runtime and cookie headers

* fix(web-fetch): harden operator header normalization

* fix(web-fetch): align header safety contracts

* fix(web-fetch): close header logging gaps

* fix(web-fetch): report case-colliding headers

* fix(web-fetch): reject stale colliding headers

* fix(web-fetch): refuse credential token aliases

* fix(web-fetch): preserve empty header values

* fix(web-fetch): refuse credential-shaped headers

* chore(config): refresh web fetch header baselines

* test(web-fetch): cover header security contracts

* fix(web-fetch): narrow credential header refusal

* fix(web-fetch): preserve trace metadata headers

* fix(web-fetch): keep header validation internal

* test(web-fetch): satisfy strict test contracts

* fix(web-fetch): refuse vendor credential headers

* fix(web-fetch): refuse authentication signatures

* fix(web-fetch): detect qualified auth signatures

* fix(web-fetch): refuse auth-suffixed headers

* fix(web-fetch): refuse compact credential headers

* fix(secrets): audit authentication signatures

* fix(web-fetch): redact operator headers in captures

* fix(web-fetch): keep capture metadata internal

* fix(web-fetch): allow sensitive operator headers

* test(web-fetch): cover normalized operator headers

* docs: note web fetch request headers

* chore(config): refresh web fetch header baseline

* chore: remove release-owned changelog entry
2026-08-02 02:07:25 +10:00
Jesse Merhi
d3f4530ce8 feat(google): allow operator headers on Gemini web search (#115549)
* feat(google): support Gemini web search headers

* fix(google): validate Gemini search headers

* docs(changelog): credit Gemini headers

* test(secrets): route config contracts through collector

* chore: remove release-owned changelog entry

* test(google): cover resolved search headers
2026-08-02 01:41:09 +10:00
Peter Steinberger
e7950d968b refactor(state): inline canonical database schemas at build (#117433) 2026-08-01 08:39:42 -07:00
Peter Steinberger
385f1dee16 docs: generate docs map at publish time (#117398)
* docs: generate docs map at publish time

* fix: canonicalize Docker pack entry path

* fix: preserve package lifecycle ownership
2026-08-01 07:01:43 -07:00
Peter Steinberger
e4d1b7e0d3 refactor(plugins): move plugin contributions into the registry bundle (#117372)
* refactor(plugins): move plugin contributions into the registry bundle

* fix(plugins): guard embedding owner union and drop unused test-util imports

* fix(plugins): break registry facade import cycles

* fix(plugins): remove obsolete registry snapshot seams

* test(gateway): preserve plugin runtime mock exports

* test(auto-reply): install builder registry in diagnostics fixture

* test(plugins): activate registry-backed capability fixtures
2026-08-01 06:57:01 -07:00
Peter Steinberger
9214183f45 refactor(sessions): retire runtime transcript sidecars (#117380) 2026-08-01 06:21:54 -07:00
Jacob Tomlinson
20ac22f647 fix(codex): guide recovery from unimported agent auth (#116807)
* fix(codex): diagnose unimported agent auth

Add agent-scoped Codex migration guidance and expose a validated --agent target so non-default credentials cannot be imported into the default agent store.

Fixes #116763

* fix(codex): surface auth migration before route planning

* fix(codex): scope auth migration recovery

* fix(codex): preserve API key auth fallback

* test: repair memory importer routing expectation

* test: drop superseded memory routing repair

* test(tui): report PTY progress verbosely

---------

Co-authored-by: fuller-stack-dev <263060202+fuller-stack-dev@users.noreply.github.com>
2026-08-01 07:08:02 -06:00
Peter Steinberger
cd4bd7c6c0 fix(tui): cancel buffered submissions on shutdown [AI-assisted] (#117331)
* fix(tui): cancel buffered submissions on shutdown

* refactor(tui): preserve callable submit coalescer

* test(tui): run local PTY smoke against built CLI
2026-08-01 05:00:05 -07:00
Peter Steinberger
aa2a5c96f6 feat(channels): record account lifecycle facts and retire inferred health vocabularies (#117300)
* fix(channels): record account lifecycle facts

* fix(channels): bound recorded lifecycle grace

* fix(channels): preserve authored health state

* test: dedupe health snapshot type literal and fix spread order
2026-08-01 02:51:47 -07:00
Dallin Romney
6baf4dd15f fix(release): validate candidates before Docker publication (#117252)
* fix(release): validate candidates before Docker publication

* fix(release): complete Docker publication gates

* fix(release): serialize Docker publication
2026-08-01 16:08:49 +08:00
joshavant
07b7d6446c fix(matrix): reconcile durable sends after response loss 2026-08-01 02:45:12 -05:00
Ayaan Gazali
11069c3df5 fix(channels): config validation rejects documented channels.<id>.configWrites on 13 channels (#117206) 2026-08-01 15:33:16 +08:00
Harjoth Khara
2358566c29 fix(doctor): session SQLite restore installs an empty session index over the valid archive (#117221)
* fix(doctor): restore the pre-migration session index when runs share a store

Restore picked the winning archive by manifest iteration order, newest first.
When a legacy writer recreated an empty sessions.json between migrations, the
newest run had archived that empty file, so restore installed it and then
refused the only archive holding real sessions as a conflict.

Resolve one winning archive per destination before writing anything, preferring
the earliest run whose archive is still restorable. Losing archives are never
deleted and stay visible as conflicts.

Closes #116163

* fix(doctor): fail closed on ambiguous session restores

* test(doctor): key restore conflicts by archive

* fix(doctor): narrow restored archive lookup

* fix(doctor): stream restore archive hashing

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-01 15:32:31 +08:00
Peter Steinberger
edfeec49e7 refactor(channels): centralize progress draft events (#117269) 2026-08-01 00:26:56 -07:00
SunnyShu
d75601478a docs(gateway): document llamacpp toolSchemaProfile for custom llama.cpp endpoints (#117120)
* docs(gateway): document llamacpp toolSchemaProfile for custom llama.cpp endpoints

Custom openai-completions providers pointed at a llama.cpp / llama-server
endpoint bypass the GBNF-safe schema normalization that built-in llama-cpp,
ollama, and lmstudio providers apply automatically. The toolSchemaProfile:
"llamacpp" switch activates it, but the supported value was never named in
the docs, so users hit llama.cpp 400 'failed to parse grammar' on tools with
large minLength/maxLength (e.g. cron trigger.script, maxLength 65536).

- Expand the toolSchemaProfile row to name the values recognized on a model's
  compat (llamacpp, gemini) and when llamacpp must be set explicitly;
  cross-reference the unsupportedToolSchemaKeywords escape hatch.
- Add a 'Local models (llama.cpp / llama-server)' provider example showing
  the required compat.toolSchemaProfile: "llamacpp" on a custom endpoint.

Related to #117070

Co-Authored-By: iCodeMate <noreply@anthropic.com>

* docs(gateway): describe llamacpp profile as stripping, not clamping

Address review feedback on #117120: the fallback sentence claimed the
llamacpp profile "also clamps" constraints, but cleanSchemaForLlamacppGbnf
only removes `pattern` outright and drops `maxLength` at or above the
2000-repetition threshold (LLAMACPP_GBNF_MAX_REPETITION_THRESHOLD). It
never clamps a value, and small bounds like `minLength: 1` are preserved
(confirmed by the projection test at src/plugin-sdk/provider-tools.test.ts).

Reword the escape-hatch sentence to describe the implemented stripping
behavior and contrast it with the unconditional keyword-list drops, so
operators do not expect a preserved bounded constraint.

No code or behavior changes; documentation only.

* docs(gateway): scope llamacpp profile description to its actual transformations

Address follow-up review on #117120: the toolSchemaProfile table row
described `llamacpp` as "rewriting tool schemas into the JSON Schema
subset llama.cpp can compile to GBNF," which overstates what
cleanSchemaForLlamacppGbnf does. The cleaner only removes `pattern`
outright and drops `maxLength` at or above the 2000-repetition threshold
(LLAMACPP_GBNF_MAX_REPETITION_THRESHOLD); it leaves every other keyword
and `minLength` untouched, and those are not guaranteed GBNF-safe.

Reword the row to state the exact transformation contract and explicitly
note it is a targeted compatibility cleaner, not a blanket GBNF-safety
guarantee. No code or behavior changes; documentation only.

Co-Authored-By: iCodeMate <noreply@anthropic.com>

* docs(gateway): tighten llama.cpp profile contract

* docs(gateway): order local model examples

---------

Co-authored-by: iCodeMate <noreply@anthropic.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-01 14:11:22 +08:00
Peter Steinberger
137050cedd perf(update): reuse dev preflight build cache (#117246) 2026-07-31 22:59:44 -07:00
MasterSwords1
732c57435c fix(cli): update plugins doctor clean message (#115073) (#117160)
* fix(cli): update plugins doctor clean message (#115073)

Root cause: plugins doctor reports 'No plugin issues detected.' even when a selected context-engine plugin is quarantined at runtime, because doctor is a fast static control-plane check.
Architectural owner: plugins-cli.runtime.ts
Canonical fix: Change clean status message to direct operators to 'openclaw health' for active runtime quarantine/fallback status.
Production LOC delta: +2 LOC

* fix(cli): update plugins doctor clean message wording (#115073)

Root cause: Refine the diagnostic text message to run openclaw health directly.
Architectural owner: src/cli/plugins-cli.runtime.ts

* fix(cli): clarify plugin doctor scope

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-01 13:54:37 +08:00
Peter Steinberger
0cd33bad88 fix(plugin-sdk): project recorded health facts through computed account status (#117236)
* fix(plugin-sdk): project recorded health facts through computed account status

* fix(plugin-sdk): regenerate API baseline and pin ingressUnavailable literal in test
2026-07-31 22:52:48 -07:00
Vincent Koc
6922ddd936 fix(qa): isolate runner discovery facades (#117203) 2026-08-01 13:40:11 +08:00
Peter Steinberger
cb16d739cf fix(inference): harden Codex streaming, cancellation, and live QA (#116012)
* fix(inference): harden Codex turns, streams, and live QA

* fix(inference): dispatch open CR-delimited response frames

* fix(inference): finish live goal and split streaming regressions

* fix(codex): wait for interrupted turn completion

* fix(codex): narrow terminal collector notification ownership

* fix(inference): harden completion authority and lifecycle

* fix(inference): use canonical source delivery contract

* test(inference): align lifecycle probes with current main

* style(inference): format source delivery verification

* fix(goals): prevent premature completion across staged work

* fix(qa): settle streamed goal turns before continuation

* fix(goals): require visible replies after goal completion

* test(qa): keep goal flow regressions within lint limits
2026-07-31 21:29:33 -07:00
Yangfan Wu Bot
9099520ae2 docs(media): clarify legacy MEDIA line formatting (#96275)
* docs(media): clarify legacy MEDIA line formatting

* docs(media): fix heading hierarchy

* docs: update docs map for rich output protocol

---------

Co-authored-by: 吴杨帆 <39647285+leno23@users.noreply.github.com>
2026-07-31 21:21:59 -07:00
Sasan
6938f7dddb fix: allow gateway service commands for named profiles (#116314)
* fix: gateway service commands refuse a named profile or relocated OPENCLAW_HOME

- Resolve the default install identity against the canonical state directory
  for the active OpenClaw home and profile instead of the unprofiled OS
  account default.
- `--profile <name>` / `--dev` project `.openclaw-<profile>` state and config
  paths, so every named profile was classified as isolated state and refused
  `install`, `start`, `stop`, `restart`, `uninstall`, Doctor service repair,
  and self-update service handling.
- `OPENCLAW_HOME` relocates all OpenClaw path defaults and is documented for
  running as a dedicated service user; a relocated home is now an install
  identity. `HOME` alone still is not.
- An `OPENCLAW_STATE_DIR` or `OPENCLAW_CONFIG_PATH` pointing outside those
  canonical paths is still treated as isolated state.
- Recovery guidance in the refusal message now names the paths that must match.

Verified: focused vitest shards for the changed suites plus the daemon, CLI,
and doctor suites that consume the identity check; tsgo core and core-test
lanes; oxlint; docs format, MDX, link, and map checks.

* fix(gateway): keep relocated homes isolated

* fix(config): validate service profile identity

* fix(daemon): enforce named-profile service ownership

* fix(update): reject drifted service selectors before probes

* test(windows): prove scheduled task lifecycle

* test(windows): harden scheduled task proof cleanup

* test(windows): bind lifecycle proof to checkout

* test(windows): normalize cleanup exit status

* test(windows): verify effective task privilege

* test(windows): protect scheduled task proof roots

* test(windows): prove listener-owned task lifecycle

* test(windows): fix scheduled task proof contracts

* test(windows): remove redundant mock coercions

* test(windows): measure fallback before task probes

* test(windows): prove scheduled task process origin

* fix(gateway): preserve unmanaged restart fallback

* test(gateway): cover denied restart ownership

* test(gateway): keep restart helper types private

* test(gateway): classify lifecycle helpers as test code

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-01 11:28:39 +08:00
Vincent Koc
89aadef6ef feat(plugins): externalize iMessage channel (#117101) 2026-08-01 08:01:18 +08:00
zw-xysk
08305dbb94 docs(config-channels): repair Discord, Slack, and Google Chat configuration examples (#106188)
* docs(config-channels): replace legacy allow:true with enabled:true for Discord, Slack, and Google Chat config examples

* docs(config-channels): repair channel configuration examples

Make the complete Discord, Slack, and Google Chat setup examples valid and keep Slack channel routing on stable IDs.

Co-authored-by: 赵旺0668001248 <zhao.wang1@xydigit.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-31 16:58:02 -07:00
wm0018
ccaf807fa0 docs(install): fix fly discord channel allow -> enabled to match schema (#102129)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-31 16:43:43 -07:00
zw-xysk
124a68bd26 docs(multi-agent): replace legacy allow:true with enabled:true for Discord channel config examples (#106201)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-31 16:41:57 -07:00
qingminlong
3fc7fb2813 docs: clarify Control UI pairing in private browsing (issue #113000) (#114111) 2026-07-31 16:34:40 -07:00
Paco Cartones
955c8fe4af docs(nodes): system.run parameters were documented as non-existent CLI flags (#116930)
* docs(nodes): system.run parameters were documented as non-existent CLI flags

* docs(nodes): remove retired node env flags

Co-authored-by: Paco Cartones <253313177+pacocartones@users.noreply.github.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-31 16:11:24 -07:00
Ali Adnan
de143f2760 docs: fix controlUi.root config value using unexpanded tilde (#114594) 2026-07-31 15:54:51 -07:00
Peter Steinberger
87d412d557 fix(cron): keep scheduler state and quarantine in SQLite (#117071) 2026-07-31 15:47:06 -07:00
Koduri Mahesh Bhushan Chowdary
9878bfc8e5 docs: drop retired gateway.reload keys and modes from config docs (#116975)
The gateway.reload documentation advertised four settings the shipped
build rejects. gateway.reload is a strictObject accepting only `mode`,
and `mode` is a union of "off" | "hybrid", so a config written from the
docs fails validation and the gateway fails closed on the unknown keys.

Retired but still documented:
- `debounceMs` and `deferralTimeoutMs` (RETIRED_TUNING_PATHS; stripped by
  `openclaw doctor --fix` via stripRetiredTuningKnobs)
- `mode: "restart"` and `mode: "hot"` (mapped to "hybrid" by
  `openclaw doctor --fix`)

Correct all four docs pages that still describe them, and say what
replaced them: debounce and active-work deferral now run behind built-in
defaults rather than config keys.

Refs #116973
2026-07-31 15:35:16 -07:00
Vincent Koc
61fb29e90a feat(plugins): externalize OpenCode Go provider (#117064) 2026-08-01 06:31:19 +08:00
Ali Adnan
b6d9b38146 docs: fix tilde paths in CLI output examples (#114595) 2026-07-31 15:12:03 -07:00
Vincent Koc
e73250f54b feat(plugins): externalize OpenCode provider (#117035)
* feat(plugins): externalize OpenCode provider

* docs: refresh OpenCode provider map
2026-08-01 05:07:35 +08:00
Vincent Koc
e84e2a49fc feat(plugins): externalize NovitaAI provider (#117007) 2026-08-01 03:53:46 +08:00
Peter Steinberger
eb0087dc7c fix(discord): connect mention-only bots without Message Content intent (#116962)
* fix(discord): support mention-only gateway intent

* chore: keep release changelog owner-only
2026-07-31 12:04:16 -07:00
Vincent Koc
8b93fd963c feat(plugins): externalize Mistral provider (#116919)
* feat(plugins): externalize Mistral provider

* fix(update): preserve external provider models during repair

* chore(release): keep Mistral note in PR body
2026-08-01 03:04:12 +08:00
Vincent Koc
f9e35bc59c merge: clarify local provider setup actions (#116953)
* fix/local-provider-setup:
  fix(macos): preserve localized setup fallback
  improve(setup): clarify local provider actions
2026-08-01 01:44:46 +08:00
Peter Steinberger
cd8a96491e fix: repair canonical session keys with doctor (#116703)
* fix: repair canonical session keys with doctor

* test: align canonical validation with reopen boundary

* test: align session fixtures with canonical keys

* fix: copy only canonical session repair winners

* fix: cover canonical repair edge cases

* test: remove retired preview helper import

* test: align canonical repair delivery scope

* fix: close canonical repair validation gaps

* fix: preserve destination-only repair generations

* fix: preserve canonical repair window projections

* style: format canonical repair imports

* fix: preserve canonical repair delivery ownership

* fix: preserve winner-owned cross-store state

* fix: guard canonical delivery rehoming

* fix: align canonical session contracts after rebase

* test: accept internal canonical repair fixtures

* test: move sharing alias coverage to doctor
2026-07-31 10:04:08 -07:00
Vincent Koc
0e24d596c0 improve(setup): clarify local provider actions 2026-08-01 00:26:40 +08:00
Vincent Koc
a4faeae9df Merge pull request #101358 from mrunalp/podman-sandbox-backend
Add Podman sandbox backend
2026-08-01 00:00:18 +08:00
Vincent Koc
a1026663ae feat(plugins): externalize ComfyUI provider (#116888) 2026-07-31 23:26:51 +08:00
Harjoth Khara
102c2e1a64 fix(slack): recover MPIM thread context from outbound replies (#116660)
Co-authored-by: scoootscooob <167050519+scoootscooob@users.noreply.github.com>
2026-07-31 23:12:56 +08:00
Vincent Koc
e93de36081 feat(plugins): externalize BytePlus provider (#116866) 2026-07-31 22:37:47 +08:00
Vincent Koc
fab2c33cad feat(plugins): externalize Xiaomi provider (#116861) 2026-07-31 22:02:07 +08:00
Vincent Koc
b2b62b2e1e feat(plugins): externalize Volcengine provider (#116854) 2026-07-31 21:28:01 +08:00
Shakker
5cd00cfbaa fix: reserve Buzz relay subscription capacity (#116799) 2026-07-31 13:40:34 +01:00
Shakker
eab10bd7c8 docs: refresh the Buzz documentation map 2026-07-31 13:40:34 +01:00
Shakker
b3c4ea0291 docs: explain Buzz archived room handling 2026-07-31 13:40:34 +01:00
Shakker
729d21336b docs: clarify Buzz directory reconnects 2026-07-31 13:40:33 +01:00