Commit Graph

9169 Commits

Author SHA1 Message Date
Peter Steinberger
ba2b033774 fix(plugin-sdk): parse harmony text tool calls 2026-05-09 09:25:19 +01:00
Peter Steinberger
a436547642 test: tighten discord proxy abort assertions 2026-05-09 09:24:45 +01:00
Peter Steinberger
b62166301e fix: annotate message-tool-only replies in Codex tool spec
Thread sourceReplyDeliveryMode into Codex/OpenClaw tool construction and annotate the message tool description for message-tool-only turns so visible replies use message(action=send).\n\nAlso adds focused regression coverage and a changelog entry.
2026-05-09 04:24:40 -04:00
Peter Steinberger
308006ad5e test: tighten voice-call config assertions 2026-05-09 09:20:41 +01:00
Peter Steinberger
14ce958eaf test: tighten deepinfra onboard assertions 2026-05-09 09:18:58 +01:00
Peter Steinberger
7541b8f4b6 fix: harden openai realtime response create 2026-05-09 09:18:04 +01:00
Peter Steinberger
3b0dafae1e test: tighten deepinfra model discovery assertions 2026-05-09 09:17:27 +01:00
Peter Steinberger
2c4ec93245 test: tighten deepinfra image assertions 2026-05-09 09:15:52 +01:00
Peter Steinberger
918ba58fe9 test: tighten deepinfra video assertions 2026-05-09 09:14:08 +01:00
Peter Steinberger
d3ac73c55a test: tighten deepinfra speech request assertions 2026-05-09 09:12:30 +01:00
Peter Steinberger
03b067ed8b test: tighten deepinfra embedding adapter assertions 2026-05-09 09:11:00 +01:00
Peter Steinberger
67b844860f test: tighten deepinfra media assertions 2026-05-09 09:08:56 +01:00
Peter Steinberger
fe9a89a2d2 fix: interrupt active discord realtime voice 2026-05-09 08:51:41 +01:00
Peter Steinberger
c605a0e6e8 test: tighten telephony tts override assertion 2026-05-09 08:41:53 +01:00
Peter Steinberger
17f03566d8 test: tighten irc setup config assertions 2026-05-09 08:33:03 +01:00
Peter Steinberger
47bf21a798 test: tighten qianfan provider assertions 2026-05-09 08:12:28 +01:00
Peter Steinberger
9385eaaf88 chore(release): prepare 2026.5.8 2026-05-09 08:05:17 +01:00
Shakker
2e29090c37 test: wire qa channel turn fixture 2026-05-09 08:01:50 +01:00
Shakker
dbb62f21f4 test: isolate ollama discovery catalog cache 2026-05-09 07:55:00 +01:00
Shakker
1d36ab8cb0 test: fix nvidia plugin registration stub 2026-05-09 07:51:46 +01:00
Ruben Cuevas
86c28c84c9 fix(codex): keep native hook relay alive for long turns 2026-05-09 02:47:26 -04:00
Peter Steinberger
311e4608d1 feat: unify model catalog registration 2026-05-09 02:34:56 -04:00
TheArchitectit
80a3d48b99 feat(acpx): support structured agent args
Summary:
- Add optional ACPX agent args config support while preserving command-only configs.
- Quote flattened args before passing the command string to the ACP client so spaces and single quotes preserve argv boundaries.
- Document the config shape and add changelog attribution.

Verification:
- pnpm test extensions/acpx/src/config.test.ts
- pnpm exec oxfmt --check --threads=1 extensions/acpx/src/config.ts extensions/acpx/src/config.test.ts docs/tools/acp-agents-setup.md CHANGELOG.md
- git diff --check
- pnpm check:changed
- isolated openclaw config patch/validate/get real behavior proof for ACPX args.
2026-05-09 01:26:17 -05:00
Shakker
730b0bea71 test: fix discord voice route mock type 2026-05-09 07:24:17 +01:00
Peter Steinberger
2e5ab0ae91 feat: improve discord realtime voice routing 2026-05-09 07:15:40 +01:00
Shakker
56ab8d56ee test: fix message delivery contract assertions 2026-05-09 07:11:22 +01:00
Peter Steinberger
a4b17d65a8 refactor: consolidate message delivery API 2026-05-09 07:04:04 +01:00
Josh Avant
3af81481b4 fix(google): retry stalled Gemini first response (#79668)
* fix(google): retry stalled gemini first response

* docs(changelog): note gemini first-response retry

* fix(google): clear gemini first-response deadline
2026-05-09 00:52:44 -05:00
Peter Steinberger
b972e207cf test: tighten voice continue operation id 2026-05-09 06:51:43 +01:00
Peter Steinberger
9162d547a5 test: tighten voice tailscale spawn assertions 2026-05-09 06:50:17 +01:00
Gio Della-Libera
8f26422840 fix(oc-path): tighten path contracts 2026-05-09 01:48:35 -04:00
Gio Della-Libera
457c29b36a docs(path): scrub references to dropped grammar features 2026-05-09 01:48:35 -04:00
Gio Della-Libera
7ad33c05b1 lint(oc-path): satisfy CI's stricter consistent-return + type-param rules 2026-05-09 01:48:35 -04:00
Gio Della-Libera
080e34a2c2 lint(oc-path): satisfy curly + unused-import rules 2026-05-09 01:48:35 -04:00
Gio Della-Libera
ac9418d206 refactor(oc-path): drop YAGNI grammar features
Removes four path-syntax features that added complexity without
enough real-world use:

- **Quoted-segment escape sequences**: kept quoted segments themselves
  (still needed for keys with `/` or `.`) but dropped `\"` and `\`
  escapes. Quoted content is now byte-literal, refused if it contains
  `"` or `\`. Simplifies scanBracketAware (drops the `escaped` state),
  unquoteSeg (no decode loop), quoteSeg (no escape encoding).

- **CSS-style predicate operators**: removed `*=` (substring), `^=`
  (prefix), `$=` (suffix). Predicate set is now `=`, `!=`, and the
  numeric `<` / `<=` / `>` / `>=`. Lint rules needing substring
  matching can use `findOcPaths(*)` + JS filter.

- **`$first` positional**: alias for index 0 (or first-declared key).
  Use the literal `0` instead.

- **`-N` negative index**: rarely useful beyond `-1`, which is already
  covered by `$last`. The "negative numeric key on object" case
  (Telegram supergroup IDs) still works — non-indexable containers
  fall through to literal-key lookup.

Behavior loss: zero in observed real workspace files. Tests for the
dropped features removed (15 tests).

Net: -22 LoC src + 15 fewer tests. Total package: 10,570 → 10,275 LoC.
2026-05-09 01:48:35 -04:00
Gio Della-Libera
71c855f244 refactor(oc-path): consolidate dispatch and trim comment surface
Substrate simplifications and broad comment cleanup:

**Walker collapse (find.ts)**: three near-parallel walkers
(walkJsonc, walkJsonl + walkJsonlInsideLine, walkMd + walkMdInsideBlock
+ walkMdInsideItem) shared the same segment-shape dispatch — union /
predicate / `*` / `**` / positional / literal — with different child
types. Extracted as a single `dispatchSeg<T>(ops, ...)` that takes a
per-kind `WalkOps<T>` table; each walker is a thin wrapper. The three
md walkers fold into one `walkMd(level, ...)` polymorphic on a
`MdLevel` discriminated union. JSONL routes the post-line-slot
descent through walkJsonc via a WeakMap-tagged ast holder.

**CLI (cli.ts)**: each command duplicated four times the same
try/catch/emit/exit dance — missing-arg check, parseOcPath try/catch,
OcEmitSentinelError catch. Extracted as `requireArg`, `tryParse`,
`catchSentinel`. Folded `RawPathOptions` into `PathCommandOptions`
(identical shape) and collapsed `.option(...)` chains via
`withCommonOpts`.

**universal.ts**: setJsoncLeaf and setJsonlLeaf were near-identical
(resolve, refuse root, coerce, set, wrap). Extracted as
`setStructuredLeaf<A, M>` with optional `onLine` for jsonl's
whole-line replacement. Inlined setMdLeaf (7-line passthrough) into
setOcPath. Dropped four `throw new Error("unreachable")` statements
TS exhaustive checking already covers.

**oc-path.ts**: 35 `throw new OcPathError(...)` sites compress through
a `fail()` helper. File-slot containment check (absolute, parent-dir,
control chars) extracted as `validateFileSlot` so parse + format share
the same defense. Three structural-nesting throws in formatOcPath
collapse into two. Three near-parallel string scanners
(`indexOfTopLevel`, `splitRespectingBrackets`, `validateBrackets`) fold
through one `scanBracketAware(s, onChar, onUnbalanced)` helper.

**jsonl/edit.ts**: pickLineIndex compressed; line-address dispatch
shares the value-line filter as a small helper.

**Internal review codes stripped**: P-NNN, F-NN, I-NN, H2-NN, OP-NN,
R-NN, T-NN, S-NN, BFJ-NN, RJC-NN, RJL-NN, FM-NN, A-NN, B-NN, CC-NN,
wave-NN — these were review-process artifacts (sprint identifiers,
finding IDs, pitfall taxonomy IDs) that mean nothing to a reader who
didn't participate in the originating review. Test names rewritten
human-readable; comments lose their P-NNN bookmarks; describe blocks
drop the wave-NN prefix.

**Pitfalls test consolidated**: `tests/scenarios/pitfalls.test.ts`
(637 LoC, organized by P-NNN) replaced by `security-and-limits.test.ts`
(288 LoC) — unique coverage migrates over with descriptive names;
duplicates of OP-/R-/etc. tests are dropped.

**Comment cleanup**: per CLAUDE.md "default to writing no comments;
add one only when the WHY is non-obvious", trimmed multi-paragraph
WHY-prose on every public export, running prose inside function
bodies that restated what the next line of code said, section-divider
comments in test files, and module-level doc-comments that paraphrased
the file name. Kept load-bearing context: NFC re-check after grow,
quote-aware split symmetry, multi-char operator precedence, sentinel
guard catch routes, WeakMap holder rationale.

**MdAst slimmed**: `tables` and `codeBlocks` fields removed — substrate
addressing doesn't go inside them, and markdown-it's tokenizer
already excludes them from heading/item misparse without
first-class AST modeling.

Net reduction across the 10 consolidation/cleanup commits: ~3,800 LoC.
2026-05-09 01:48:35 -04:00
Gio Della-Libera
7b7e65105b refactor(oc-path): markdown-it tokenizer + grammar relaxation
The hand-rolled MD parser is replaced with a markdown-it token-stream
walker. AstTable and AstCodeBlock are dropped from the AST — the
substrate doesn't address into table rows or fence content, and
markdown-it's tokenizer already handles "##/- inside fenced code
should not be a heading/item" correctly without first-class AST
modeling.

Grammar opinions move from parser to lint:
  - Indented `## foo` (1-3 spaces) is now a heading
  - Empty `## ` is a heading with empty slug
  - Ordered lists (`1. step`) become items
  - Nested sub-bullets become items at flat level

Each was previously a silent parser refusal — now they are recognized
shapes. Lint rules can flag them (`OC_HEADING_INDENTED`,
`OC_HEADING_EMPTY`, etc.) where authoring conventions require the
narrower shape.

Net: parse.ts drops 301 → 207 LoC; tables/code-blocks scenario tests
removed wholesale (-251 LoC of test surface that pinned dead AST
fields).
2026-05-09 01:48:35 -04:00
Gio Della-Libera
6283c8247c refactor(oc-path): drop YAML kind from substrate
The YAML AST/parser/emitter/edit-resolve module is removed. The
substrate now supports md / jsonc / jsonl. Walker, universal verbs,
CLI, and tests are stripped of yaml-kind branches; the `yaml` package
dependency is dropped.

Why: YAML editing was the most complex per-kind module (~750 LoC of
parse/emit/resolve plus walker scaffold) for the smallest surface area
in real-world usage — substrate consumers (lkg, gateway config, agent
metadata) all pivoted to jsonc / md / jsonl. Carrying yaml support
indefinitely was net cost.

Walker depth-cap test that previously relied on YAML's lack of a
parser-level depth cap is rewritten to construct a synthetic JSONC AST
chain by hand, exercising the walker's MAX_TRAVERSAL_DEPTH defense in
isolation from the parser's MAX_PARSE_DEPTH.

Net: -1467 LoC across substrate + tests.
2026-05-09 01:48:35 -04:00
Gio Della-Libera
30e69142f0 fix(oc-path): three followup fixes (sentinel guard, byte cap, walker parity)
Closes three load-bearing gaps in the substrate's defenses:

- **md sentinel defense-in-depth (I2)**: `setJsoncOcPath` and the jsonl
  finalize-via-render path both refuse sentinel-bearing values before
  they reach the AST. The md path was deferring entirely to round-trip
  echo through `emitMd`, which `acceptPreExistingSentinel` skips by
  default. Closes the cross-kind asymmetry.

- **jsonc byte-length cap (N3)**: pre-parse cap on input length, symmetric
  with the existing post-parse depth cap at `nodeToJsoncValue`. Without
  this, `parseTree` allocates the full tree before our walker notices.

- **md walker union + predicate parity (I3)**: jsonc walkers dispatched
  union and predicate at every slot; md dispatched only on
  wildcard/ordinal/positional/literal, so `oc://X.md/{Boundaries,Limits}/...`
  matched zero items where the same shape on jsonc would match both.
  Pins the parity.
2026-05-09 01:48:35 -04:00
Peter Steinberger
e3b33a26cd refactor: move oc-path into plugin 2026-05-09 01:48:35 -04:00
Peter Steinberger
9a151b248e test: tighten msteams continue callbacks 2026-05-09 06:48:16 +01:00
Peter Steinberger
094d0b88a5 test: tighten discord dispatch cfg assertions 2026-05-09 06:46:51 +01:00
Peter Steinberger
eb9f803ff1 test: tighten codex trajectory recorder assertion 2026-05-09 06:44:19 +01:00
Peter Steinberger
c85aaa6e47 test: tighten googlechat auth runtime callbacks 2026-05-09 06:42:46 +01:00
Peter Steinberger
3e1dc0f284 test: tighten googlechat auth transport assertions 2026-05-09 06:41:05 +01:00
Peter Steinberger
be1a1c4a6e test: tighten googlechat pairing text 2026-05-09 06:39:20 +01:00
Peter Steinberger
b34cf2f1a2 fix: externalize matrix plugin 2026-05-09 06:38:29 +01:00
Josh Avant
5fdef4c39e fix(codex): ignore account updates for turn liveness (#79667)
* fix codex app-server completion liveness

* docs changelog codex liveness fix
2026-05-09 00:38:22 -05:00
Peter Steinberger
bb95031ea5 test: tighten googlechat webhook body assertion 2026-05-09 06:38:00 +01:00
Peter Steinberger
ce843fe53d test: tighten googlechat pairing timestamp 2026-05-09 06:36:58 +01:00