Commit graph

1202 commits

Author SHA1 Message Date
stevef
a2e3789c46 feat: add system_prompt to agent defaults and k3s configuration for safety hardening 2026-03-29 22:59:02 +02:00
daming大铭
1fc5345857
refactor(cron): remove deliver and type params, unify agent execution path (#2147)
The agent path now publishes to outbound bus directly (since #2100),
making the deliver=true direct-to-bus shortcut and the directive type
prompt wrapping redundant. All cron jobs now uniformly route through
the agent. This is an intentional behavior change: old jobs with
deliver=true will execute through the agent instead of bypassing it.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 22:52:34 +08:00
Cytown
1ef0553929
add logger test case for console log format for component (#2162) 2026-03-29 22:32:39 +08:00
Cytown
42e3aaff35 make logger more clear with highlight component and use package name for default component 2026-03-29 18:35:24 +08:00
Cytown
f0c0219c4c fix for review 2026-03-29 16:58:48 +08:00
Cytown
9c28870e80 Merge branch 'main' into t3 2026-03-29 16:48:56 +08:00
李光春
e70928cc6f
feat(mcp): support DisableStandaloneSSE for HTTP transport (#2108) 2026-03-29 14:37:22 +08:00
沈青川
e414b82ac3
fix(cron): publish agent response to outbound bus for cron-triggered jobs (#2100)
* fix(cron): publish agent response to outbound bus for cron-triggered jobs

When a cron job triggers agent execution via ProcessDirectWithChannel,
the agent response was silently discarded — the code assumed AgentLoop
would auto-publish it, but SendResponse is false on this path.

Delegate to PublishResponseIfNeeded (exported from AgentLoop) so the
response reaches the originating channel (e.g. Telegram) only when the
message tool did not already deliver content in the same round.

Also adds a "directive" message type to CronPayload, allowing cron jobs
to instruct the agent to execute a task rather than echo static text.

* fix(cron): add type validation and directive test coverage

Address reviewer blocking feedback:

1. Server-side whitelist for `type` parameter — the `enum` in
   Parameters() is only an LLM schema hint; any string was persisted.
   Now `addJob` rejects values other than "message" and "directive".

2. Comprehensive test coverage for the directive code path:
   - directive adds prompt prefix to ProcessDirectWithChannel
   - deliver=true + directive routes through agent (not direct publish)
   - directive prompt content, sessionKey, channel, chatID are correct
   - invalid type is rejected; valid types ("", "message", "directive") pass
   - deliver=true message type goes directly to bus (regression)
   - agent error path does not trigger publish (regression)

Also merge the two UpdateJob calls in addJob into one to avoid
redundant disk I/O (non-blocking suggestion from review).

* fix(cron): remove omitempty from CronPayload.Type for consistent JSON

Empty string and "message" are semantically equivalent defaults;
always serializing the field avoids asymmetric JSON output.

* test(cron): remove redundant test, strengthen error path coverage

- Remove ExecuteJobDirectivePassesCorrectContent: its assertions on
  sessionKey/channel/chatID duplicate ExecuteJobPublishesAgentResponse;
  its prompt check duplicates DirectiveAddsPromptPrefix.
- Strengthen DirectiveAddsPromptPrefix with exact prompt match and
  publish response assertion.
- Fix ReturnsErrorWithoutPublish: set non-empty stub response so the
  test verifies the error branch early-return, not the response==""
  guard.

* fix(ci): satisfy golines and gosmopolitan in cron code
2026-03-29 13:47:28 +08:00
zeed zhao
6ea364e67d
feat(web): protect launcher dashboard with token and SPA login (#1953)
Add token-based authentication for the Launcher's embedded Web Dashboard.

- Ephemeral token generated in-memory each run (or via PICOCLAW_LAUNCHER_TOKEN env var)
- HMAC-SHA256 session cookie (HttpOnly, SameSite=Lax, Secure when HTTPS)
- Bearer token support for API/script access
- Rate limiting on login (10 attempts/IP/min)
- Referrer-Policy: no-referrer on all responses
- POST-only logout with JSON content-type (CSRF-safe)
- System tray "Copy dashboard token" action
- Login page shows contextual help (console/tray/log file path)
- Path traversal protection via path.Clean
- X-Forwarded-Host/Port/Proto support for reverse proxy deployments
- Full i18n support (English, Chinese)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-29 13:11:43 +08:00
stevef
5f34600270 feat(security): support prefix matching for MCP tools in policy checker and fix health endpoints 2026-03-28 22:33:54 +01:00
Andy Lo-A-Foe
4f90909af3
feat(bedrock): detect SSO token expiration and provide actionable error
When AWS SSO credentials expire, provide a clear error message instructing
the user to run 'aws sso login' to refresh their session.
2026-03-28 22:18:45 +01:00
stevef
0bb6fa4d73 fix(gateway): enable PORT env override and fix chat handler typo for Azure compatibility 2026-03-28 21:59:10 +01:00
stevef
99413d0337 feat: implement multi-layered Security Shield with Canary, PII Redaction, IPIA, and Policy enforcement 2026-03-28 20:42:48 +01:00
stevef
dddf983a95 feat(isolation): further hardening for agent loop and tools 2026-03-28 20:42:48 +01:00
stevef
109b08e23b fixes 2026-03-28 20:42:48 +01:00
stevef
c8b1623b3e fix(agent): inject media store in isolation and fix config unmarshal panic 2026-03-28 20:42:48 +01:00
stevef
83b41bb875 chore: minor configuration updates 2026-03-28 20:42:48 +01:00
stevef
50c8ee305a Synchronize hardening: added onboard purge, non-interactive mode, and diagnostic startup logs 2026-03-28 20:42:48 +01:00
stevef
c4d0cebdd6 test: merge filesystem isolation validation into isolation_tools_test.go 2026-03-28 20:42:48 +01:00
stevef
9cba372fde fix(agent): ensure isolated agents inherit manually registered tools to prevent test hangs 2026-03-28 20:42:48 +01:00
stevef
4ffa023457 made paths relative to workspace for sub-agents 2026-03-28 20:42:48 +01:00
stevef
0f714402ae made /chat asynchronous 2026-03-28 20:42:48 +01:00
stevef
c725b2dce2 azure skills whitelisting: fix skills loader, security config, and tests 2026-03-28 20:42:48 +01:00
stevef
4341fdd8db added two new providers: NVIDIA and Azure plus Security enhancments to lock down skills if desired and added a configurable chat API 2026-03-28 20:42:48 +01:00
Cytown
475d377af1 Merge branch 'main' into t3 2026-03-29 01:25:20 +08:00
Cytown
0bb561548f add pid file for gateway running and auth token for /reload and pico channel 2026-03-29 01:14:39 +08:00
imalasong
43095543ab fix(feishu): skip empty random_reaction_emoji entries
Feishu returns 231001 when emoji_type is empty. Config slices like
["", "Pin"] could randomly select an empty string; filter and
trim entries and fall back to Pin when none remain.

Made-with: Cursor
2026-03-28 23:36:49 +08:00
Kunal Karmakar
e23eda5365 Update tests and error cases handling 2026-03-28 13:33:48 +00:00
Kunal Karmakar
1809d04905
chore(provider): use openai responses api for azure openai endpoints (#2110)
Migrate Azure OpenAI provider from legacy Chat Completions API to the OpenAI Responses API.

- Switch API endpoint from `/openai/deployments/{deployment}/chat/completions` to `/openai/v1/responses`
- Change auth header from `Api-Key` to `Authorization: Bearer`
- Use `responses.ResponseNewParams` SDK types for request construction
- Extract shared Responses API utilities into `openai_responses_common` package
- Deduplicate 178 lines from codex_provider.go by reusing shared package
- Add 593 lines of comprehensive test coverage for the shared package

Closes #2111

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-28 20:50:24 +08:00
Mauro
026a1339c7
simplified duplicated code (#1935) 2026-03-28 20:28:24 +08:00
champly
11dec0c80a
fix(weixin): persist context tokens to disk to survive restarts (#2124) 2026-03-28 20:23:14 +08:00
Guoguo
62d40a02d4
fix: resolve typecheck errors in loop_test.go and dingtalk_test.go (#2122)
- loop_test.go: replace undefined WithSecurity/SecurityConfig/ModelSecurityEntry
  with direct APIKeys field using SimpleSecureStrings()
- dingtalk_test.go: use ClientSecret.String() and ClientSecret.Set()
  instead of non-existent ClientSecret() and SetClientSecret() methods

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 18:58:09 +08:00
Alix-007
b6951b6925
fix(dingtalk): honor mention-only groups and strip leading mentions (#2054)
* fix(dingtalk): honor @mention flag in mention-only groups

* fix(dingtalk): strip leading mentions in group payloads

---------

Co-authored-by: Alix-007 <267018309+Alix-007@users.noreply.github.com>
2026-03-28 18:26:10 +08:00
Hua Audio
0e13f6bdec
fix/wechat-new-protocol (#2106)
* fix/wechat-new-protocol

* fix cdn download logic
2026-03-28 18:18:01 +08:00
Mauro
230942d234
fix(loop): polling (#2103) 2026-03-28 16:36:06 +08:00
xiwuqi
e011284d8f
fix(agent): use light provider for routed model calls (#2038) 2026-03-28 15:25:23 +08:00
Cytown
f1cb7cc8f5
fix gateway reload will cause pico stop working issue (#2082)
* fix gateway reload will cause pico stop working issue

* fix for review
2026-03-28 11:30:31 +08:00
stevef
3da413e62e feat(isolation): further hardening for agent loop and tools 2026-03-27 22:50:21 +01:00
stevef
1f8afb6b5b fixes 2026-03-27 22:10:41 +01:00
stevef
9c2b440f1c fix(agent): inject media store in isolation and fix config unmarshal panic 2026-03-27 22:10:41 +01:00
stevef
728a98c2f6 chore: minor configuration updates 2026-03-27 22:10:41 +01:00
stevef
46dc6e5d5d Synchronize hardening: added onboard purge, non-interactive mode, and diagnostic startup logs 2026-03-27 22:10:41 +01:00
stevef
9b15ff27de test: merge filesystem isolation validation into isolation_tools_test.go 2026-03-27 22:10:41 +01:00
stevef
6d7b603cb7 fix(agent): ensure isolated agents inherit manually registered tools to prevent test hangs 2026-03-27 22:10:41 +01:00
stevef
de03f78b69 made paths relative to workspace for sub-agents 2026-03-27 22:10:41 +01:00
stevef
4baf3d260f made /chat asynchronous 2026-03-27 22:10:41 +01:00
stevef
60f3b7419f azure skills whitelisting: fix skills loader, security config, and tests 2026-03-27 22:10:41 +01:00
stevef
0a5cf5668e added two new providers: NVIDIA and Azure plus Security enhancments to lock down skills if desired and added a configurable chat API 2026-03-27 22:10:41 +01:00
Mauro
60d7ec20a5
feat(log): prompt tokens (#2047) 2026-03-28 02:00:12 +08:00
Cytown
b646d3b8fe
refactor config and security to simplified the structure (#2068) 2026-03-28 00:03:34 +08:00