Commit graph

2431 commits

Author SHA1 Message Date
Carlos Prados
e55ddf2e24 feat(config): add RegisterChannelSettings hook for out-of-tree channels
Expose a public registration hook so external packages that register a channel
factory via channels.RegisterFactory can also register the channel's settings
struct prototype. Without this, InitChannelList rejects any channel type absent
from the private channelSettingsFactory map, making out-of-tree channels
impossible without forking. The map access is now guarded by a RWMutex.

This is additive and changes no existing behavior.
2026-06-14 11:52:32 +02:00
Mauro
cf67dd3851
Merge pull request #3065 from chengzhichao-xydt/codex/short-engine-close-errors
fix(seahorse): explicitly ignore Close() errors on PRAGMA/migration failure paths
2026-06-13 18:19:35 +02:00
Mauro
f091c04ca9
Merge pull request #3066 from chengzhichao-xydt/codex/tmpfile-close-errors
fix: explicitly ignore Close() errors on temp file write/sync failure paths
2026-06-13 18:18:47 +02:00
Mauro
0bfb13c0df
Merge pull request #3119 from not-the-author/fix/tts-openrouter-fallback-and-docs
fix(tts): support OpenRouter voice overrides and fallback
2026-06-13 18:15:30 +02:00
Mauro
15196b9cc9
Merge pull request #3117 from not-the-author/codex/fix-vision-routing-and-onboard-embed
fix(agent): route media turns to image models
2026-06-13 18:03:40 +02:00
not-the-author
d44fa890e4 fix lint 2026-06-13 16:07:45 +02:00
not-the-author
f087d8358b fix lint 2026-06-13 15:31:08 +02:00
not-the-author
c180590799 fix(tts): support OpenRouter voice overrides and fallback 2026-06-13 15:07:21 +02:00
not-the-author
f3d4555bc9 fix(agent): keep media routing scoped to current turn 2026-06-13 11:38:08 +02:00
not-the-author
adb89a16b9 fix(agent): limit media routing to the active turn 2026-06-13 00:25:45 +02:00
not-the-author
58926f76b9 fix(agent): route resolved user attachments to image models 2026-06-12 23:11:42 +02:00
not-the-author
9fd0dbda96 fix(agent): route media turns to image models and embed onboard workspace 2026-06-12 22:33:51 +02:00
Mauro
c362114cf1
Merge pull request #3113 from chengzhichao-xydt/codex/manager-channel-marshal-errors
fix(channels): check json marshal/unmarshal errors in toChannelHashes
2026-06-12 13:17:00 +02:00
Mauro
d8c0b783a8
Merge pull request #3112 from chengzhichao-xydt/codex/toolloop-marshal-error-check
fix(tools): handle json.Marshal error in toolloop tool call arguments
2026-06-12 13:16:33 +02:00
程智超0668000959
7338df2cfb fix(channels): check json marshal/unmarshal errors in toChannelHashes
Replace silently discarded json.Marshal and json.Unmarshal errors with
explicit checks. If serialization fails, log a warning and either
return early (for the config-level marshal/unmarshal) or skip the
channel (for per-channel marshal). This prevents silent data loss
when channel configuration contains unexpected types.
2026-06-12 14:18:28 +08:00
程智超0668000959
1719067aca fix(tools): handle json.Marshal error in toolloop tool call arguments 2026-06-12 14:16:18 +08:00
Mauro
413d37494b
Merge pull request #2957 from loafoe/fix/tool-calls-filtering
fix(channels): prevent tool_calls from being dropped during streaming
2026-06-11 21:45:59 +02:00
Mauro
d153952c15
Merge pull request #3106 from sipeed/dependabot/go_modules/github.com/aws/aws-sdk-go-v2/config-1.32.25
build(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.32.17 to 1.32.25
2026-06-11 19:48:05 +02:00
dependabot[bot]
091c374348
build(deps): bump github.com/aws/aws-sdk-go-v2/config
Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.32.17 to 1.32.25.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.32.17...config/v1.32.25)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-version: 1.32.25
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-11 17:27:06 +00:00
Mauro
0994d48e77
Merge pull request #3099 from sipeed/dependabot/go_modules/golang.org/x/sync-0.21.0
build(deps): bump golang.org/x/sync from 0.20.0 to 0.21.0
2026-06-11 19:24:22 +02:00
Mauro
729935ef1a
Merge pull request #3098 from sipeed/dependabot/go_modules/github.com/modelcontextprotocol/go-sdk-1.6.1
build(deps): bump github.com/modelcontextprotocol/go-sdk from 1.5.0 to 1.6.1
2026-06-11 19:23:55 +02:00
Mauro
293fb69439
Merge pull request #3102 from sipeed/dependabot/go_modules/github.com/aws/aws-sdk-go-v2-1.42.0
build(deps): bump github.com/aws/aws-sdk-go-v2 from 1.41.11 to 1.42.0
2026-06-11 19:23:26 +02:00
dependabot[bot]
f30c611327
build(deps): bump github.com/aws/aws-sdk-go-v2 from 1.41.11 to 1.42.0
Bumps [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2) from 1.41.11 to 1.42.0.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.41.11...v1.42.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2
  dependency-version: 1.42.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-11 17:15:33 +00:00
dependabot[bot]
23b52ebef5
build(deps): bump golang.org/x/sync from 0.20.0 to 0.21.0
Bumps [golang.org/x/sync](https://github.com/golang/sync) from 0.20.0 to 0.21.0.
- [Commits](https://github.com/golang/sync/compare/v0.20.0...v0.21.0)

---
updated-dependencies:
- dependency-name: golang.org/x/sync
  dependency-version: 0.21.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-11 17:14:11 +00:00
dependabot[bot]
0d4b06f088
build(deps): bump github.com/modelcontextprotocol/go-sdk
Bumps [github.com/modelcontextprotocol/go-sdk](https://github.com/modelcontextprotocol/go-sdk) from 1.5.0 to 1.6.1.
- [Release notes](https://github.com/modelcontextprotocol/go-sdk/releases)
- [Commits](https://github.com/modelcontextprotocol/go-sdk/compare/v1.5.0...v1.6.1)

---
updated-dependencies:
- dependency-name: github.com/modelcontextprotocol/go-sdk
  dependency-version: 1.6.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-11 17:14:07 +00:00
Mauro
fa6ed714c4
Merge pull request #3060 from chengzhichao-xydt/codex/error-wrap-and-marshal
fix: use %w for error wrapping and handle json.MarshalIndent error
2026-06-11 18:36:55 +02:00
Mauro
f8472d6f27
Merge pull request #3067 from SiYue-ZO/fix/session-dm-scope-save
fix: add DmScope field to SessionConfig to persist dm_scope setting
2026-06-11 18:34:02 +02:00
Mauro
44fdf9a20b
Merge pull request #3087 from jp39/fix/exec-relative-workspace-paths
fix(tools): allow workspace relative exec paths
2026-06-11 18:33:13 +02:00
jp39
17e4720203 fix(tools): allow workspace relative exec paths 2026-06-11 16:38:16 +02:00
SiYue-ZO
ef002d9a5d fix: ensure dm_scope and dimensions stay in sync across all config paths
The reviewer identified two bugs in the original PR:

1. PATCH /api/config leaves session.dimensions stale: LoadConfig()
   derives dimensions from the old dm_scope, and the merge carries
   those stale dimensions forward. ApplyDmScope() then exits early
   because dimensions is already populated, causing a mismatch between
   dm_scope (new) and dimensions (old).

2. Legacy/default configs omit dm_scope in GET response: configs with
   explicit dimensions but no dm_scope (including DefaultConfig) return
   no dm_scope field, causing the frontend to fall back to its default
   ('per-channel-peer'), which may not match the actual dimensions.

Fix:
- Add DeriveDmScope() to reverse-map known dimensions arrays to
  dm_scope when dm_scope is empty.
- Call it in LoadConfig(), PUT handler, PATCH handler, and
  ResetToDefaults() for consistent normalization.
- In PATCH handler, clear stale dimensions from the merge result when
  the patch contains session.dm_scope but not session.dimensions,
  allowing ApplyDmScope() to re-derive from the new scope.
- Add comprehensive unit tests for DeriveDmScope() and scope
  transition scenarios.
2026-06-11 16:12:48 +08:00
lc6464
017601354b fix(web): harden trusted proxy client IP parsing 2026-06-11 15:16:05 +08:00
lc6464
52ab6c4694 feat(web): harden launcher access control 2026-06-11 15:16:05 +08:00
Mauro
f8462855d8
Merge pull request #3095 from chengzhichao-xydt/codex/new-pr
fix(utils): add ok checks for http.Transport type assertions in CreateHTTPClient
2026-06-11 09:13:29 +02:00
肆月
2861fd90ab
fix(launcher): hide console flashes in all Windows child processes (#3061)
* fix(launcher): hide console flashes in all Windows child processes

PR #2654 only applied HideWindow to child processes in gateway.go (powershell, tasklist, ps). Several other files still use exec.Command directly, causing visible console windows on Windows.

- startup.go: reg query/add/delete for autostart registry

- version.go: picoclaw version subcommand

- runtime.go: rundll32 for browser launch

- onboard.go: picoclaw onboard subcommand

Add launcherExecCommand to the utils package (matching the api package pattern) and replace all bare exec.Command calls on Windows paths.

* refactor: consolidate launcherExecCommand into utils package

Export LauncherExecCommand and ApplyLauncherProcAttrs from the utils
package as the single source of truth. The api package now imports
and delegates to these exported functions, eliminating code duplication.

Addresses review feedback from imguoguo on PR #3061.
2026-06-11 15:10:56 +08:00
LC
40fe1b0a2d
fix(gitignore): normalize text encoding (#3084) 2026-06-11 15:06:12 +08:00
程智超0668000959
9955155389 fix(utils): add ok checks for http.Transport type assertions in CreateHTTPClient 2026-06-11 09:45:14 +08:00
Mauro
d955d5bbf3
Merge pull request #3089 from cs8425/fix-win-os-root-api
fix os.Root api on windows issue
2026-06-11 00:42:08 +02:00
Mauro
2efbe5d560
Merge pull request #3085 from ACMYuechen/fix/tools-ssrf-198.18
fix(tools): block 198.18.0.0/15 in SSRF guard
2026-06-11 00:16:24 +02:00
Mauro
bc6179917c
Merge pull request #3043 from chengzhichao-xydt/codex/atoi-gateway-json
fix: check strconv.Atoi and json.Unmarshal errors
2026-06-10 23:58:23 +02:00
程智超0668000959
8a2c67fe70 fix: check strconv.Atoi and json.Unmarshal errors
short_retrieval.go: Check Atoi error even though regex ensures numeric input. gateway.go: Log warning when gateway config JSON is malformed instead of silently using defaults.
2026-06-10 14:03:53 +08:00
cs8425
355e83e07f fix os.Root api on windows issue 2026-06-10 12:31:35 +08:00
Mauro
b9a8fad6fa
Merge pull request #3064 from chengzhichao-xydt/codex/migration-model-name-type-assert
fix(config): add ok check for type assertion in migration model name indexing
2026-06-09 21:18:53 +02:00
Guoguo
0ab6924978
docs: update wechat qrcode (#3086)
Signed-off-by: Guoguo <i@qwq.trade>
2026-06-09 20:34:10 +08:00
Yue_chen
2ecdb893d5 fix(tools): block 198.18.0.0/15 in SSRF guard
RFC 2544 benchmark addresses (198.18.0.0/15) are not globally routable
but were missing from the isPrivateOrRestrictedIP blocklist, allowing
SSRF bypasses via literal IPv4.

Fixes #3077
2026-06-09 19:01:42 +08:00
SiYue-ZO
921d753cc0 fix: wire dm_scope into runtime session isolation dimensions
The dm_scope field was stored in config but never translated into the
dimensions array that the routing layer actually consumes. This meant
changing the session isolation scope in the UI had no effect at runtime.

Add ApplyDmScope() to SessionConfig which maps the user-facing dm_scope
values (per-channel-peer, per-channel, per-peer, global) to the
corresponding dimension arrays. Call it in LoadConfig post-processing
and in both the PATCH and PUT API handlers.

Includes table-driven tests covering all dm_scope values and the
precedence rule (explicit dimensions > derived from dm_scope).
2026-06-09 11:03:33 +08:00
SiYue-ZO
0bbd8f081e fix: add DmScope field to SessionConfig to persist dm_scope setting
The frontend sends dm_scope as part of the session config, but the
backend SessionConfig struct lacked the corresponding field. Go's
encoding/json silently discards unknown fields, so the value was lost
on every PATCH request. Additionally, MarshalJSON only emitted the
session block when Dimensions or IdentityLinks were set, so even a
stored dm_scope would not appear in GET responses.

- Add DmScope string field with json tag 'dm_scope' to SessionConfig
- Update MarshalJSON condition to include session when DmScope is set
2026-06-09 10:48:17 +08:00
程智超0668000959
6b004f6a5f fix: explicitly ignore Close() errors on temp file write/sync failure paths 2026-06-09 09:52:48 +08:00
程智超0668000959
3daeec96ab fix(seahorse): explicitly ignore Close() errors on PRAGMA/migration failure paths 2026-06-09 09:48:52 +08:00
程智超0668000959
fc90a5af23 fix(config): add ok check for type assertion in migration model name indexing 2026-06-09 09:41:14 +08:00
程智超0668000959
e2112e627c fix: use %w for error wrapping and handle json.MarshalIndent error 2026-06-09 09:04:56 +08:00