Commit Graph

2476 Commits

Author SHA1 Message Date
dependabot[bot] 4514d54ff5 build(deps): bump actions/checkout from 6 to 7
Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-18 17:13:51 +00:00
Mauro 99291182e7 Merge pull request #3141 from jincheng-xydt/fix/3125-brave-search-logging
fix(web_search): add diagnostic logging for Brave empty results
2026-06-18 08:16:14 +02:00
Mauro 6c31f9ffdd Merge pull request #3136 from ZOOWH/fix/3111-gemini-thought-signature
fix(gemini): set both camelCase and snake_case thought_signature in tool call request body
2026-06-17 20:40:13 +02:00
Mauro e3464f4388 Merge pull request #2917 from PierreLeGuen/nearai-provider
feat(provider): add NEAR AI Cloud provider
2026-06-17 20:37:38 +02:00
徐闻涵0668001344 08192ddf1b style(test): split long t.Fatalf line to satisfy golines 120-char limit 2026-06-17 17:49:52 +08:00
肆月 7b5fe01187 fix(web): update sogou search regex to match new HTML structure (#3139)
- reSogouTitle: make class attribute quotes optional (class="?resultLink"?)
- reSogouSnippet: allow additional CSS classes after clamp (clamp\d*[^"]*)

Sogou WAP search page changed its HTML format:
- class=resultLink -> class="resultLink" (added quotes)
- class="clamp3" -> class="clamp2 fz-mid click-sugg-content" (extra classes)

Fixes web_search tool failing to parse sogou search results.
2026-06-17 17:02:54 +08:00
lc6464 1420875921 fix(onebot): tighten inbound media download handling 2026-06-17 17:00:24 +08:00
lc6464 234bd03018 fix(onebot): block private inbound media fetches 2026-06-17 17:00:24 +08:00
徐金城0668000897 b2fbe83565 fix(web_search): add diagnostic logging for Brave empty results
When the Brave Search API returns HTTP 200 with zero results, log a
warning with the response body preview to help diagnose silent failures.
This addresses cases where the API response format has changed or a
non-standard error response is misinterpreted as a successful empty
result, leaving the LLM with a misleading "No results" message.

Previously, empty results were silently returned to the LLM as "No
results for: <query>", making it impossible to distinguish between
genuinely empty results and API format mismatches or silent errors.

Closes #3125
2026-06-17 16:23:25 +08:00
Mauro a16a1e1535 Merge pull request #3137 from jp39/cron-command-remotes
feat: allow configured remote cron commands
2026-06-16 22:16:05 +02:00
Mauro 910bfbe6a4 Merge pull request #3120 from carlosprados/feat/register-channel-settings
feat(config): add RegisterChannelSettings hook for out-of-tree channels
2026-06-16 22:09:00 +02:00
Mauro 03b022c2ac Merge pull request #3127 from chengzhichao-xydt/codex/filesystem-dirfile-close
fix: explicitly ignore Close() errors on directory file descriptors
2026-06-16 22:08:31 +02:00
Mauro cc4055b6d4 Merge pull request #3129 from chengzhichao-xydt/codex/tts-close-error
fix(tts): explicitly ignore file.Close() error in write error path
2026-06-16 22:08:10 +02:00
Mauro 86221d470b Merge pull request #3135 from ZOOWH/fix/3110-telegram-forum-thread-id
fix(telegram): use compositeChatID in InboundContext.ChatID for forum topics
2026-06-16 22:06:31 +02:00
Mauro e720be0dd7 Merge pull request #3132 from SiYue-ZO/fix/goroutine-recover
fix: add panic recovery to core-path goroutines
2026-06-16 22:05:31 +02:00
Mauro c9f5872e02 Merge pull request #3130 from chengzhichao-xydt/codex/seahorse-marshal-errors
fix(seahorse): handle json.Marshal errors in grep and expand tools
2026-06-16 22:04:45 +02:00
jp39 0c1e6b5279 docs: warn about cron remote wildcard
Document that command_allowed_remotes = ["*"] is potentially dangerous
because any remote channel that can talk to PicoClaw can schedule shell
commands. Clarify that it should only be used when all enabled remote
channels and chats are trusted.
2026-06-16 17:26:45 +02:00
jp39 981ab3affe fix: scope remote cron command access
Allow allowlisted remote channels to list, get, and update their own
command cron jobs while preserving exact channel/chat ownership checks.

Apply the same access control to remove, enable, and disable so remote
callers cannot mutate jobs outside their channel/chat scope. Keep wildcard
remote allowlist behavior constrained by exact job ownership.

Add regression tests for allowlisted, non-allowlisted, wildcard, internal,
and non-command reminder access paths.
2026-06-16 17:26:45 +02:00
jp39 3056a540bf feat: allow configured remote cron commands
Add tools.cron.command_allowed_remotes so remote channels can be
explicitly allowlisted for command-executing cron jobs. Entries support
channel names, channel:chat_id pairs, and a literal * to allow every
non-empty channel while preserving the default deny posture.

The existing allow_command and command_confirm checks still apply after the
channel gate. Update tests, config examples, and cron documentation for the
new option.
2026-06-16 17:26:45 +02:00
徐闻涵0668001344 5b41f18c3d fix(gemini): set both camelCase and snake_case thought_signature in tool call request body
The Gemini HTTP API provider only set thoughtSignature (camelCase) when
building tool call request bodies. Gemini 2.5 models accept camelCase,
but Gemini 3.5 Flash Agentic reasoning requires thought_signature
(snake_case) — matching the format it returns in API responses. When
only the camelCase variant was sent, Gemini 3.5 Flash rejected the
request with a 400 Bad Request for missing thought_signature.

The fix sets both ThoughtSignature and ThoughtSignatureSnake in the
geminiPart struct, matching the pattern already used in
antigravity_provider.go. This ensures compatibility with both Gemini
2.x (camelCase) and Gemini 3.x Agentic (snake_case) models.

Closes #3111
2026-06-16 20:51:59 +08:00
徐闻涵0668001344 7019143c8e fix(telegram): use compositeChatID in InboundContext.ChatID for forum topics
When handling inbound Telegram messages from forum topics, InboundContext.ChatID was set to the plain chat ID (without thread). This caused outbound messages to lose the thread routing, sending replies to the General topic instead of the specific forum topic — even though typing indicators correctly targeted the right thread because StartTyping received the compositeChatID.

The fix sets InboundContext.ChatID to compositeChatID (chatID/threadID format) for forum messages, matching the format already used for session routing and typing indicators. TopicID is still preserved as a redundant fallback for any path that strips the composite format.

Closes #3110
2026-06-16 20:43:37 +08:00
Guoguo 083e68b49a docs: add PicoPaw banners to READMEs (#3096) 2026-06-16 10:17:21 +08:00
SiYue-ZO fcc2882ffa fix: resolve golines lint issue in subscription.go
Split long log.Printf lines to comply with 120-char line length limit.
2026-06-16 00:53:18 +08:00
SiYue-ZO b292defd95 fix: add panic recovery to core-path goroutines
Add defer-recover to 11 goroutines across 4 files to prevent
ungoroutine panics from crashing the entire process:

- pkg/tools/toolloop.go: parallel tool execution
- pkg/channels/manager.go: HTTP server (x2), channel registration
- pkg/events/subscription.go: concurrent dispatch, timeout handler,
  watchContext
- pkg/tools/shell.go: cmd.Wait, PTY cmd.Wait, PTY read, pipe read

Key design decisions:
- Recover handlers send fallback values to channels (shell done,
  subscription done) to prevent deadlocks when the producer panics
- PTY cmd.Wait sets session.Status='error' on panic for consistency
- toolloop sets ErrorResult on panic so the LLM gets a meaningful
  response instead of a nil result
- subscription.go uses log.Printf to match existing invokeHandler style
- Other files use project logger (ErrorCF) with stack traces

Refs: FIX-PLAN-0.3.0 #2
2026-06-15 23:06:11 +08:00
程智超0668000959 ed55715b6b fix(seahorse): handle json.Marshal errors in grep and expand tools 2026-06-15 20:31:34 +08:00
程智超0668000959 2f8c462366 fix(tts): explicitly ignore file.Close() error in write error path 2026-06-15 20:30:09 +08:00
程智超0668000959 d2156a982c fix(fileutil): explicitly ignore Close() error on directory file descriptor 2026-06-15 20:25:04 +08:00
lc6464 c1ff5aa6f4 chore: remove unused chat send hint translations v0.3.0 2026-06-15 16:26:22 +08:00
lc6464 dc746fbe66 refactor: soften chat composer hint 2026-06-15 16:26:22 +08:00
lc6464 890f4d6bcb feat: add shift-enter hint below chat composer 2026-06-15 16:26:22 +08:00
LC 42ece2aceb fix(web): improve launcher allowlist bypass diagnostics (#3126) 2026-06-15 16:16:25 +08:00
Mauro 13a38bd1c4 Merge pull request #2904 from SiYue-ZO/feature/fix-agent-loop-stability
Fix agent loop reload and panic cleanup stability
2026-06-14 21:22:53 +02:00
Mauro 7b2e0ccfc7 Merge pull request #3124 from chengzhichao-xydt/codex/tts-readall-error
fix(tts): handle io.ReadAll error in error response path
2026-06-14 21:22:01 +02:00
Mauro 5e415ed210 Merge pull request #3123 from chengzhichao-xydt/codex/filesystem-dirfile-close
fix(filesystem): explicitly ignore Close() error on directory file descriptor
2026-06-14 21:21:46 +02:00
Mauro 647543bd26 Merge pull request #3122 from chengzhichao-xydt/codex/evolution-store-close
fix(evolution): capture Close() error on write file in appendJSONLRecords
2026-06-14 21:21:30 +02:00
Mauro 73738f1cd3 Merge pull request #3121 from chengzhichao-xydt/codex/openai-stream-logger
refactor(openai_compat): replace log.Printf with structured logger
2026-06-14 21:18:40 +02:00
SiYue-ZO 8290c72d44 fix(agent): replace WaitGroup with Cond-based counter and conditionalize panic cleanup
Two concurrency bugs identified in PR #2904 review:

1. Replace sync.WaitGroup with sync.Cond-based activeReqCount to avoid
   the "WaitGroup is reused before previous Wait has returned" panic that
   occurs when Add(1) races with a goroutine-launched Wait().

2. Make panic cleanup conditional: when runTurn panics, only delete the
   session's activeTurnStates entry if it still points to our placeholder.
   Previously, an unconditional delete could wipe a new message's slot
   claimed between the panic and the deferred cleanup.
2026-06-15 01:32:13 +08:00
程智超0668000959 e567f1faa1 fix(tts): handle io.ReadAll error in error response path 2026-06-14 23:46:13 +08:00
程智超0668000959 df753aaebf fix(filesystem): explicitly ignore Close() error on directory file descriptor 2026-06-14 23:45:48 +08:00
程智超0668000959 7d71a4d93f fix(evolution): capture Close() error on write file in appendJSONLRecords 2026-06-14 23:42:44 +08:00
程智超0668000959 97039b259e refactor(openai_compat): replace log.Printf with structured logger 2026-06-14 23:41:48 +08:00
Carlos Prados 9eadffda1e test(config): cover RegisterChannelSettings hook
Unit tests prove an out-of-tree channel type becomes valid and decodable after
RegisterChannelSettings, including the full InitChannelList -> GetDecoded path that
previously failed with "unknown type".
2026-06-14 12:07:54 +02:00
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