Commit Graph

24966 Commits

Author SHA1 Message Date
Vincent Koc a0c6ea5aba test(feishu): avoid loading bot and send modules in menu tests 2026-04-03 20:52:26 +09:00
Peter Steinberger a2077b28ef
refactor: trim vitest wrapper layers 2026-04-03 12:52:14 +01:00
Vincent Koc bd1e78ea34 test(msteams): avoid loading graph upload module in messenger tests 2026-04-03 20:50:00 +09:00
Vincent Koc 82fca281b6 test(msteams): avoid loading graph module in message tests 2026-04-03 20:50:00 +09:00
Vincent Koc b410c5434c test(msteams): avoid loading graph module in member tests 2026-04-03 20:50:00 +09:00
Vincent Koc d9aa88dd6c test(bluebubbles): split channel status seam 2026-04-03 20:46:42 +09:00
Vincent Koc 9bd05d3841 test(browser): stop reloading auth server module 2026-04-03 20:45:45 +09:00
Peter Steinberger 57999f9965 fix: narrow empty MCP tool schema normalization (#60176) (thanks @Bartok9) 2026-04-03 20:45:33 +09:00
Bartok Moltbot 19dbe00763 fix(tools): normalize truly empty MCP tool schemas for OpenAI
Fixes #60158

MCP tools with parameter-free schemas may return truly empty objects
`{}` without a `type` field. The existing normalization handled
`{ type: "object" }` → `{ type: "object", properties: {} }` but
missed the truly empty case.

OpenAI gpt-5.4 rejects tool schemas without `type: "object"` and
`properties`, causing HTTP 400 errors:

```
Invalid schema for function 'flux-mcp__get_flux_instance':
In context=(), object schema missing properties.
```

This change catches empty schemas (no type, no properties, no unions)
before the final pass-through and converts them to the required format.

Added test case for parameter-free MCP tool schemas.
2026-04-03 20:45:33 +09:00
Peter Steinberger 6845b8061c
docs: simplify vitest workflow guidance 2026-04-03 12:45:13 +01:00
Peter Steinberger 9ef5d85e40
refactor: remove custom test planner runtime 2026-04-03 12:45:13 +01:00
Peter Steinberger c80c1cf56f
test: drop planner fixtures and coverage 2026-04-03 12:45:13 +01:00
Vincent Koc d21d859ded test(browser): stop reloading cdp screenshot module 2026-04-03 20:44:53 +09:00
Vincent Koc 11c6202ec0 test(bluebubbles): split action metadata seam 2026-04-03 20:44:23 +09:00
Vincent Koc 9a53c3d772 test(browser): drop redundant module resets 2026-04-03 20:43:49 +09:00
Vincent Koc 6e3eb34a90 test(bluebubbles): narrow action helper imports 2026-04-03 20:42:29 +09:00
Peter Steinberger 36a233ff98
fix(config): honor isolated state-dir config writes 2026-04-03 12:42:08 +01:00
Vincent Koc 51d6d7013f
fix(tui): preserve pending sends and busy-state visibility (#59800)
* fix(tui): preserve pending messages across refreshes

* fix(tui): keep fallback runs visibly active

* fix(tui): expose full verbose mode and reclaim width

* refactor(tui): drop stale optimistic-send state

* test(tui): drop unused state binding

* docs(changelog): add tui beta note

* fix(tui): bound fallback wait and dedupe pending restore

* fix(tui): preserve queued sends and busy-state visibility

* chore(changelog): align tui pending-send note

* chore(changelog): refine tui release note
2026-04-03 20:39:55 +09:00
Vincent Koc 79da4a46b4 fix(feishu): annotate send target return 2026-04-03 20:36:24 +09:00
Vincent Koc dc6e041cfe test(bluebubbles): narrow monitor normalize number parsing 2026-04-03 20:36:24 +09:00
Vincent Koc 2ec9d3d58b test(bluebubbles): narrow request-url export 2026-04-03 20:36:24 +09:00
Vincent Koc 69e0fbd95e test(bluebubbles): narrow media-send limit import 2026-04-03 20:36:24 +09:00
Vincent Koc 13412c0c50 test(bluebubbles): narrow send markdown import 2026-04-03 20:36:24 +09:00
Peter Steinberger afa78a5b13
test: trim telegram testing barrel imports 2026-04-03 12:36:07 +01:00
Peter Steinberger de1d0f4fae
fix(ci): restore telegram real registry test support 2026-04-03 12:31:28 +01:00
samzong 37ab4b7fdc
[Feat] Add ClawHub skill search and detail in Control UI (#60134)
* feat(gateway): add skills.search and skills.detail RPC methods

Expose ClawHub search and detail capabilities through the Gateway protocol,
enabling desktop/web clients to browse and inspect skills from the registry.

New RPCs:
- skills.search: search ClawHub skills by query with optional limit
- skills.detail: fetch full detail for a single skill by slug

Both methods delegate to existing agent-layer functions
(searchSkillsFromClawHub, fetchSkillDetailFromClawHub) which wrap
the ClawHub HTTP client. No new external dependencies.

Signed-off-by: samzong <samzong.lu@gmail.com>

* feat(skills): add ClawHub skill search and detail in Control UI

Add skills.search and skills.detail Gateway RPC methods with typed
protocol schemas, AJV validators, and handler implementations. Wire
the new RPCs into the Control UI Skills panel with a debounced search
input, results list, detail dialog, and one-click install from ClawHub.

Gateway:
- SkillsSearchParams/ResultSchema and SkillsDetailParams/ResultSchema
- Handler calls searchClawHubSkills and fetchClawHubSkillDetail directly
- Remove zero-logic fetchSkillDetailFromClawHub wrapper
- 9 handler tests including boundary validation

Control UI:
- searchClawHub, loadClawHubDetail, installFromClawHub controllers
- 300ms debounced search input to avoid 429 rate limits
- Dedicated install busy state (clawhubInstallSlug) with success/error feedback
- Install buttons disabled during install with progress text
- Detail dialog with owner, version, changelog, platform metadata

Part of #43301

Signed-off-by: samzong <samzong.lu@gmail.com>

* fix(skills): guard search and detail responses against stale writes

Signed-off-by: samzong <samzong.lu@gmail.com>

* fix(skills): reset loading flags on query clear and detail close

Signed-off-by: samzong <samzong.lu@gmail.com>

* fix(gateway): register skills.search/detail in read scope and method list

Add skills.search and skills.detail to the operator READ scope group
and the server methods list. Without this, unclassified methods default
to operator.admin, blocking read-only operator sessions.

Also guard the detail loading reset in the finally block by the active
slug to prevent a transient flash when rapidly switching skills.

Signed-off-by: samzong <samzong.lu@gmail.com>

* fix(skills): guard search loading reset by active query

Signed-off-by: samzong <samzong.lu@gmail.com>

* test: cover ClawHub skills UI flow

* fix: clear stale ClawHub search results

---------

Signed-off-by: samzong <samzong.lu@gmail.com>
Co-authored-by: Frank Yang <frank.ekn@gmail.com>
2026-04-03 19:30:44 +08:00
Peter Steinberger d39e4dff6a
test: make planner lanes explicit 2026-04-03 12:29:29 +01:00
Peter Steinberger f4393791eb
test: split vitest setup for projects 2026-04-03 12:29:29 +01:00
Peter Steinberger 1dd88c6288
fix(sessions): harden session id resolution 2026-04-03 20:29:20 +09:00
Peter Steinberger 1337be3063
refactor: narrow telegram native command test seams 2026-04-03 12:25:47 +01:00
Peter Steinberger db6d149f75
test: route telegram plugin tests through extensions 2026-04-03 12:25:47 +01:00
Peter Steinberger 0a2a1ff778
fix(ci): make gateway audit path test platform-safe 2026-04-03 12:22:29 +01:00
Vincent Koc 5021b12ac1 perf(browser): trim invoke-browser test imports 2026-04-03 20:12:40 +09:00
Vincent Koc 045d590542 perf(matrix): isolate probe runtime deps 2026-04-03 20:05:50 +09:00
Vincent Koc fac89d403b perf(browser): split remote profile tab op tests 2026-04-03 20:03:48 +09:00
Peter Steinberger d3310f4837
fix(ci): resolve changelog conflict markers 2026-04-03 12:03:22 +01:00
Peter Steinberger e2e1197fa9
refactor(gateway): clarify local mode guardrails 2026-04-03 20:02:32 +09:00
Peter Steinberger 4e22e75697
test: reduce telegram broad partial mocks 2026-04-03 12:01:10 +01:00
Peter Steinberger 225431665a
test: trim telegram media retry import cost 2026-04-03 12:01:10 +01:00
Peter Steinberger 05df7f802b
docs: add test cost guardrails 2026-04-03 12:01:10 +01:00
Peter Steinberger 566fc72106
refactor(discord): share proxy resolution helpers 2026-04-03 19:58:23 +09:00
Vincent Koc 53504b3662 fix(agents): suppress profile allowlist warnings 2026-04-03 19:55:05 +09:00
Peter Steinberger 2c7eea8f10
fix(gateway): fail closed on missing mode 2026-04-03 19:50:45 +09:00
Peter Steinberger a6649201b7
docs: clarify default subagent allowlists 2026-04-03 19:45:05 +09:00
Peter Steinberger d921784718
fix: support default subagent allowlists (#59944) (thanks @hclsys) 2026-04-03 19:43:17 +09:00
HCL a57766bad0 fix(agents): fall back to defaults for subagents.allowAgents
resolveAgentConfig().subagents.allowAgents reads only the per-agent
entry, never falling back to agents.defaults.subagents.allowAgents.
Other subagent defaults like runTimeoutSeconds correctly read from
cfg.agents.defaults.subagents — allowAgents was missed.

Root cause: subagent-spawn.ts:463 and agents-list-tool.ts:49 both
use resolveAgentConfig() which returns only per-agent config without
defaults merging. The same pattern is already established at
subagent-spawn.ts:403 for runTimeoutSeconds.

Fix: add cfg.agents.defaults.subagents.allowAgents as fallback when
per-agent entry doesn't specify allowAgents. Both call sites fixed.

Closes #59938

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signed-off-by: HCL <chenglunhu@gmail.com>
2026-04-03 19:42:24 +09:00
Peter Steinberger 50f4bffbb6
fix: unblock Discord land by breaking import cycles (#57465) 2026-04-03 19:38:59 +09:00
Peter Steinberger 32ebaa3757
refactor: share session model resolution helpers 2026-04-03 19:37:56 +09:00
Peter Steinberger 67d87abf7c
style: normalize telegram fetch test formatting 2026-04-03 11:37:41 +01:00
Peter Steinberger bb3ea2137b
test: move telegram fetch coverage into extensions 2026-04-03 11:37:41 +01:00