Commit Graph

49078 Commits

Author SHA1 Message Date
Peter Steinberger
4a97da8b47 test: dedupe scheduled turn mock read 2026-05-13 08:03:52 +01:00
Peter Steinberger
b6fcb63d75 test: dedupe session attachment mock read 2026-05-13 08:01:55 +01:00
Peter Steinberger
4c7ce0ad91 test: dedupe web search provider mock read 2026-05-13 07:59:34 +01:00
Peter Steinberger
81811e55a7 test: dedupe provider runtime mock read 2026-05-13 07:58:05 +01:00
Peter Steinberger
0bd3d7c2ed test: dedupe plugin runtime mock read 2026-05-13 07:56:44 +01:00
Peter Steinberger
d29225fde4 test: dedupe plugin install path mock read 2026-05-13 07:54:50 +01:00
Peter Steinberger
57027e35db test: dedupe metadata registry mock read 2026-05-13 07:53:22 +01:00
Peter Steinberger
15481dab26 test: dedupe plugin uninstall mock read 2026-05-13 07:51:59 +01:00
Sarah Fortune
a197e31abb feat(migrate): suppress plan log on embedding + add "Accept recommended" affordance (#81219)
Two related improvements to the interactive `openclaw migrate <provider>`
flow, both surfaced by the onboarding post-install migration prompt that
landed in #81192.

1. `suppressPlanLog?: boolean` on `MigrateCommonOptions`
   (`src/commands/migrate/types.ts`). When set, `migratePlanCommand`
   skips the up-front `runtime.log(formatMigrationPlan(plan))` dump.
   The interactive Codex selection picker and the "Apply this migration
   now?" confirm still run. Wired from the wizard helper at
   `src/wizard/setup.post-install-migration.ts` so that path no longer
   shows the plan dump after the user has already confirmed at the
   wizard prompt.

2. New "Accept recommended" sentinel row at the top of both Codex
   selection pickers, with "Toggle all on" and "Toggle all off" moved
   to the bottom. The cursor starts on "Accept recommended" so pressing
   Enter at the default position submits the picker's `initialValues`
   (the recommended set) — matching the visual state of the checkboxes.

   Implemented in `skill-selection-prompt.ts`:
   - Enter on the Accept sentinel sets `prompt.value` to
     `opts.initialValues` and lets clack submit.
   - Space on the Accept sentinel snaps `prompt.value` to
     `opts.initialValues` so the visible checkboxes flip to the
     recommended state. The user can then Enter to commit or continue
     toggling individual rows. The Accept row itself is never persisted
     in the submitted value list.

   The existing Enter handler for "Toggle all on" / "Toggle all off"
   stays unchanged.

3. Removed the "Skip for now" sentinel entirely. It was a single-
   keystroke trap: with the picker cursor wrapping from Accept to Skip
   via up-arrow (or via accidental down-arrows), Enter on Skip wiped
   `prompt.value` to `[MIGRATION_SELECTION_SKIP]` and abandoned the
   whole migration — including any items the user had already
   confirmed in the previous picker. To exit without migrating, users
   now navigate to "Toggle all off" (or use the `a` / `i` keyboard
   shortcuts) to clear the selection; the apply phase then sees no
   planned work and skips itself via the existing
   `shouldSkipCodexApplyAfterInteractiveSelection` path.

   Cleanup spans `migrate/selection.ts` (constants, `{ action: "skip" }`
   variant, and the reconcile/resolve SKIP branches),
   `migrate.ts` (the picker option rows and the
   `if (selection.action === "skip")` handler blocks in both pickers),
   and the corresponding tests.

4. Plugin selection hint relabelled from "Activate every recommended
   plugin" to "Migrate every recommended plugin" so it matches the
   skill hint and the prompt's own verb ("Migrate ... into this agent
   now?").

Tests:

- `src/commands/migrate/skill-selection-prompt.test.ts` — Accept
  sentinel cases (Enter and Space + Enter both submit initialValues);
  Skip-related test removed; Skip row dropped from the picker fixture.
- `src/commands/migrate/selection.test.ts` — Skip-related sub-
  assertions trimmed from the resolve/reconcile tests; the
  "skip + toggle-off precedence" test renamed to "toggle-off precedence
  over toggle-on" and Skip cases removed.
- `src/commands/migrate.test.ts` — four Skip-driven scenarios removed
  (plugin-only skip, both-pickers skip, skip-skills-continue-to-plugins,
  Codex subscription warning + skip).
- `src/wizard/setup.post-install-migration.test.ts` — call-args
  assertion expects the new `suppressPlanLog` option.

Verification:

- `pnpm lint` clean
- `pnpm tsgo:core` + `pnpm tsgo:core:test` clean
- Touched test suites green (migrate 32/32, selection 17/17,
  skill-selection-prompt 6/6, setup.post-install-migration 10/10).
2026-05-12 23:51:19 -07:00
Peter Steinberger
96b49f0b93 test: dedupe plugin service mock read 2026-05-13 07:50:21 +01:00
Peter Steinberger
10663e4ba2 test: dedupe plugin lifecycle mock read 2026-05-13 07:48:52 +01:00
Peter Steinberger
86dfc78d97 test: dedupe npm pack temp dir mock read 2026-05-13 07:46:07 +01:00
Peter Steinberger
8ebb18416a test: dedupe shell env exec mock read 2026-05-13 07:44:38 +01:00
Peter Steinberger
e898ea67b4 test: dedupe marketplace command mock read 2026-05-13 07:42:52 +01:00
Peter Steinberger
23856156e2 test: dedupe inbound claim log mock read 2026-05-13 07:41:24 +01:00
Peter Steinberger
21aaa9ed81 test: dedupe google video download mock read 2026-05-13 07:39:14 +01:00
Peter Steinberger
6b4333ae6b test: dedupe xiaomi speech fetch mock read 2026-05-13 07:37:35 +01:00
Peter Steinberger
3bc433c179 fix(config): normalize per-agent Gemini preview refs 2026-05-13 07:35:56 +01:00
Jesse Merhi
87eb450047 Check ClawHub trust before plugin installs (#81307)
Merged via squash.

Prepared head SHA: 273fd7c20e
Co-authored-by: jesse-merhi <79823012+jesse-merhi@users.noreply.github.com>
Co-authored-by: jesse-merhi <79823012+jesse-merhi@users.noreply.github.com>
Reviewed-by: @jesse-merhi
2026-05-13 16:31:52 +10:00
Peter Steinberger
cf68115e6e test: dedupe synology client mock reads 2026-05-13 07:25:03 +01:00
Peter Steinberger
ef78fc9534 test: dedupe synology route mock read 2026-05-13 07:23:36 +01:00
Ayaan Zaidi
8879c671e3 docs(changelog): note Telegram polling stall fix 2026-05-13 11:53:00 +05:30
Ayaan Zaidi
56873b6065 fix(telegram): detect polling stalls from getUpdates 2026-05-13 11:53:00 +05:30
Peter Steinberger
7899b70c18 test: dedupe whatsapp close mock read 2026-05-13 07:21:41 +01:00
Peter Steinberger
0b4f0129df test: dedupe qwen video request mock reads 2026-05-13 07:19:44 +01:00
Peter Steinberger
63ee74109e test: dedupe ollama embedding fetch mock read 2026-05-13 07:18:13 +01:00
Peter Steinberger
4cf6971130 test: dedupe gradium tts fetch mock read 2026-05-13 07:15:45 +01:00
Peter Steinberger
dd127ba0ba test: dedupe google image fetch mock read 2026-05-13 07:14:29 +01:00
Peter Steinberger
6932c66ffe test: dedupe minimax speech fetch mock reads 2026-05-13 07:12:39 +01:00
Peter Steinberger
7e1e4c5f78 test: dedupe memory wiki cli mock read 2026-05-13 07:11:04 +01:00
Peter Steinberger
6ced971cf1 test: dedupe minimax image fetch mock reads 2026-05-13 07:09:24 +01:00
Peter Steinberger
b430270429 test: dedupe copilot model fetch mock reads 2026-05-13 07:07:56 +01:00
Peter Steinberger
29ac94b0e4 test: dedupe device pair qr mock read 2026-05-13 07:06:34 +01:00
Ayaan Zaidi
bfbb9c6f9f docs(changelog): note ACP Claude timeout fix (#80812) (thanks @sxxtony) 2026-05-13 11:35:36 +05:30
Ayaan Zaidi
a146bf03db refactor(acpx): distill ACP command detection 2026-05-13 11:35:36 +05:30
sxxtony
bf8f5d991c fix(acp): drop unsupported timeout config option for claude-agent-acp
`runtime-options.buildRuntimeConfigOptionPairs` translated
`AcpSessionRuntimeOptions.timeoutSeconds` into a
`session/set_config_option(configId: "timeout")` pair on every turn. Both the
control plane (`AcpSessionManager.applyManagerRuntimeControls`) and the ACPX
wrapper (`AcpxRuntime.setConfigOption`) sit between that pair and the backend:

- The control plane validates pairs against the backend's advertised
  config-option keys and throws `ACP_BACKEND_UNSUPPORTED_CONTROL` for any
  pair the backend did not advertise. claude-agent-acp does not advertise a
  `timeout` alias.
- The wrapper then forwards remaining pairs to the delegate. The Codex ACP
  command was already short-circuited there; every other command, including
  claude-agent-acp, fell through.

Net effect on the reporter's scenario:
`sessions_spawn({ runtime:"acp", agentId:"claude", timeoutSeconds: 60 })`
failed at the control-plane validation with `ACP_BACKEND_UNSUPPORTED_CONTROL`
(and, had it reached the wire, claude-agent-acp would have answered
`-32603 Internal error / Unknown config option: timeout`, surfacing as
`ACP_TURN_FAILED: Internal error`).

Fix two layers:

1. Control plane (`src/acp/control-plane/runtime-options.ts`): add
   `isTimeoutConfigOptionAdvertised(advertisedConfigOptionKeys)` and gate the
   timeout pair on it. When advertised keys are unknown (`undefined` or
   empty), keep emitting the pair — this preserves current behavior for
   backends that have not produced a capability list yet. When advertised
   keys are present but exclude every alias in
   `RUNTIME_CONFIG_OPTION_ALIASES.timeoutSeconds`, skip the pair. The
   per-turn timeout is still enforced in-process via
   `AcpSessionManager.resolveTurnTimeoutMs` in `manager.core.ts`.

2. ACPX wrapper (`extensions/acpx/src/runtime.ts`): hoist the Codex
   `timeout` / `timeout_seconds` suppression so it also applies to
   claude-agent-acp commands. Add `isClaudeAcpCommand` mirroring
   `isCodexAcpCommand` (package spec, binary, generated wrapper script).
   This layer is defense in depth — relevant when callers reach the wrapper
   without going through `applyManagerRuntimeControls`, or when advertised
   keys are not yet known.

Coverage:

- `src/acp/control-plane/runtime-options.test.ts` (new) asserts:
  - the timeout pair is omitted when advertised keys exclude every alias,
  - the pair is kept when `timeout` or `timeout_seconds` is advertised,
  - the pair is kept when advertised keys are unknown,
  - model/thinking emission is unaffected.
- `extensions/acpx/src/runtime.test.ts` flips the previous
  `forwards timeout config controls for non-Codex ACP agents` test, which
  codified the buggy behavior, into a suppression assertion. Adds a
  positive `still forwards non-timeout config controls for claude-agent-acp`
  test and an `isClaudeAcpCommand` detector test.

Closes #81127
2026-05-13 11:35:36 +05:30
Peter Steinberger
50cb5ae089 test: dedupe openrouter stream mock read 2026-05-13 07:05:03 +01:00
Peter Steinberger
6a589017ca test: dedupe memory wiki gateway mock reads 2026-05-13 07:03:45 +01:00
Peter Steinberger
3945fd5812 test: dedupe tokenjuice mock read 2026-05-13 07:02:06 +01:00
Peter Steinberger
53032505bd test: dedupe memory lancedb provider assertion 2026-05-13 07:00:59 +01:00
Peter Steinberger
b8727202a5 test: dedupe inworld tts mock read 2026-05-13 06:59:47 +01:00
Peter Steinberger
7de4c47da2 test: dedupe qa credential lease mock read 2026-05-13 06:57:56 +01:00
Peter Steinberger
2a931b5906 test: dedupe google meet oauth mock read 2026-05-13 06:56:44 +01:00
Peter Steinberger
be343e3134 test: dedupe zalouser pairing mock reads 2026-05-13 06:55:30 +01:00
Peter Steinberger
0e3347cba6 test: dedupe reply flow mock read 2026-05-13 06:54:15 +01:00
Peter Steinberger
dccb382283 test: dedupe hook security mock read 2026-05-13 06:51:28 +01:00
Peter Steinberger
134461723e test: dedupe session hook mock read 2026-05-13 06:49:45 +01:00
Peter Steinberger
4a6e46152a test: dedupe sandbox media mock read 2026-05-13 06:48:05 +01:00
Peter Steinberger
6de17fcb75 test: dedupe exec host mock read 2026-05-13 06:46:29 +01:00
Peter Steinberger
560679a2ad test: dedupe outbound channel mock read 2026-05-13 06:45:08 +01:00