Commit Graph

1301 Commits

Author SHA1 Message Date
google-labs-jules[bot]
ec23a856fe chore(tests): remove reproduction test
Removed the test file `src/agents/sandbox/docker.test.ts` as requested in code review.
2026-01-24 00:30:24 +00:00
google-labs-jules[bot]
ff233678a6 fix(sandbox): simplify docker image check
Simplify the stderr check in `dockerImageExists` to only look for "No such image", as requested in code review.
2026-01-24 00:30:24 +00:00
google-labs-jules[bot]
8d797d4a2b fix(sandbox): improve docker image existence check error handling
Previously, `dockerImageExists` assumed any error from `docker image inspect` meant the image did not exist. This masked other errors like socket permission issues.

This change:
- Modifies `dockerImageExists` to inspect stderr when the exit code is non-zero.
- Returns `false` only if the error explicitly indicates "No such image" or "No such object".
- Throws an error with the stderr content for all other failures.
- Adds a reproduction test in `src/agents/sandbox/docker.test.ts`.
2026-01-24 00:30:24 +00:00
Peter Steinberger
c60cedaafc fix: stabilize tests and sync protocol models 2026-01-24 00:25:58 +00:00
Peter Steinberger
f3029e1e3a fix: silence probe timeouts 2026-01-24 00:11:04 +00:00
Peter Steinberger
11469046f1 fix: align compaction summary message types 2026-01-23 23:03:04 +00:00
Peter Steinberger
333df812a3 test(compaction): cover staged pruning 2026-01-23 22:25:07 +00:00
Peter Steinberger
ee341fa491 feat(compaction): apply staged pruning 2026-01-23 22:23:23 +00:00
Peter Steinberger
56c0dc21ab feat(compaction): add staged helpers 2026-01-23 22:23:23 +00:00
Peter Steinberger
a530eebe29 fix: quiet auth probe diagnostics 2026-01-23 19:53:01 +00:00
Peter Steinberger
885b9f4fbc test: stub heavy tools in agent tests 2026-01-23 18:34:33 +00:00
Peter Steinberger
1c51871903 fix: normalize session lock path 2026-01-23 18:34:33 +00:00
Peter Steinberger
a42f924a14 chore: speed up tests and update opencode models 2026-01-23 11:36:32 +00:00
Peter Steinberger
d5a382a8d9 fix: stabilize ci tests 2026-01-23 09:52:22 +00:00
Peter Steinberger
d6d36df9a0 Merge origin/main into fix-discord-accountId 2026-01-23 09:15:44 +00:00
Sergii Kozak
82baf58263 Discord Actions: Update tests for optional config parameter 2026-01-23 01:11:54 -08:00
Peter Steinberger
62a3e08012 test: fix discord action mocks 2026-01-23 09:06:04 +00:00
Peter Steinberger
1118b98947 fix: honor accountId in message actions 2026-01-23 09:06:04 +00:00
Peter Steinberger
be3cb5776c fix: keep core tools when allowlist is plugin-only 2026-01-23 09:02:17 +00:00
Sergii Kozak
b629fe6ded Discord: honor accountId across channel actions (refs #1489) 2026-01-23 00:50:50 -08:00
Sergii Kozak
b683a3c933 Discord: preserve accountId in message actions (refs #1489) 2026-01-22 23:51:58 -08:00
Peter Steinberger
36d5748061 test: consolidate pi-tools shards 2026-01-23 07:34:57 +00:00
Peter Steinberger
bc34d22972 test: streamline slow suites 2026-01-23 07:26:19 +00:00
Peter Steinberger
de455683af Revert "fix: improve GitHub Copilot integration"
This reverts commit b69e70668d.
2026-01-23 07:14:00 +00:00
Peter Steinberger
fb4bbfe6ec Revert "fix: set Copilot user agent header"
This reverts commit 86c40e5dca.
2026-01-23 07:14:00 +00:00
Peter Steinberger
2473ea5e94 Revert "fix: treat copilot oauth tokens as non-expiring"
This reverts commit 486dd8e071.
2026-01-23 07:14:00 +00:00
Peter Steinberger
9c9bd7bfdc fix: sanitize assistant session text (#1456) (thanks @zerone0x) 2026-01-23 07:05:31 +00:00
zerone0x
668f8a1f29 fix: sanitize tool call text in sessions-helpers extractAssistantText
Adds sanitization to extractAssistantText in sessions-helpers.ts to
prevent tool call text from leaking to users. Previously, messages
retrieved from chat history via sessions-helpers.ts could expose:

- Minimax XML tool calls (<invoke>...</invoke>)
- Downgraded tool call markers ([Tool Call: name (ID: ...)])
- Thinking tags (<think>...</think>)

This fix:
- Exports the stripping functions from pi-embedded-utils.ts
- Adds a new sanitizeTextContent helper in sessions-helpers.ts
- Updates extractAssistantText to sanitize before returning
- Updates extractMessageText in commands-subagents.ts to sanitize

Fixes #1269

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-23 07:03:26 +00:00
Dave Lauer
0c045bf135 feat(compaction): add adaptive chunk sizing, progressive fallback, and UI indicator (#1466)
* fix(ui): allow relative URLs in avatar validation

The isAvatarUrl check only accepted http://, https://, or data: URLs,
but the /avatar/{agentId} endpoint returns relative paths like /avatar/main.
This caused local file avatars to display as text instead of images.

Fixes avatar display for locally configured avatar files.

* fix(gateway): resolve local avatars to URL in HTML injection and RPC

The frontend fix alone wasn't enough because:
1. serveIndexHtml() was injecting the raw avatar filename into HTML
2. agent.identity.get RPC was returning raw filename, overwriting the
   HTML-injected value

Now both paths resolve local file avatars (*.png, *.jpg, etc.) to the
/avatar/{agentId} endpoint URL.

* feat(compaction): add adaptive chunk sizing and progressive fallback

- Add computeAdaptiveChunkRatio() to reduce chunk size for large messages
- Add isOversizedForSummary() to detect messages too large to summarize
- Add summarizeWithFallback() with progressive fallback:
  - Tries full summarization first
  - Falls back to partial summarization excluding oversized messages
  - Notes oversized messages in the summary output
- Add SAFETY_MARGIN (1.2x) buffer for token estimation inaccuracy
- Reduce MIN_CHUNK_RATIO to 0.15 for very large messages

This prevents compaction failures when conversations contain
unusually large tool outputs or responses that exceed the
summarization model's context window.

* feat(ui): add compaction indicator and improve event error handling

Compaction indicator:
- Add CompactionStatus type and handleCompactionEvent() in app-tool-stream.ts
- Show '🧹 Compacting context...' toast while active (with pulse animation)
- Show '🧹 Context compacted' briefly after completion
- Auto-clear toast after 5 seconds
- Add CSS styles for .callout.info, .callout.success, .compaction-indicator

Error handling improvements:
- Wrap onEvent callback in try/catch in gateway.ts to prevent errors
  from breaking the WebSocket message handler
- Wrap handleGatewayEvent in try/catch with console.error logging
  to isolate errors and make them visible in devtools

These changes address UI freezes during heavy agent activity by:
1. Showing users when compaction is happening
2. Preventing uncaught errors from silently breaking the event loop

* fix(control-ui): add agentId to DEFAULT_ASSISTANT_IDENTITY

TypeScript inferred the union type without agentId when falling back to
DEFAULT_ASSISTANT_IDENTITY, causing build errors at control-ui.ts:222-223.
2026-01-23 06:32:30 +00:00
Peter Steinberger
ea165b6fac fix: fall back to non-PTY exec 2026-01-23 06:27:26 +00:00
Peter Steinberger
35e20753e7 test(agents): merge sessions_spawn group announce coverage 2026-01-23 06:22:09 +00:00
Neo
e1f68407fb fix: follow soul.md more closely (#1434)
* Agents: honor SOUL.md persona guidance

* fix: harden SOUL.md detection (#1434) (thanks @neooriginal)

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-01-23 05:00:13 +00:00
Rodrigo Uroz
b5bf4716c7 fix: read Slack thread replies for message reads (#1450) (#1450)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Rodrigo Uroz <rodrigouroz@users.noreply.github.com>
2026-01-23 04:17:45 +00:00
Peter Steinberger
c23ecdc487 docs: add changelog entry for #1432 2026-01-23 03:31:42 +00:00
Peter Steinberger
7a745840e1 fix: honor user-pinned profiles and search ranking 2026-01-23 03:28:47 +00:00
Tobias Bischoff
e6f9333275 fix(auth): skip auth profiles in cooldown during selection and rotation
Auth profiles in cooldown (due to rate limiting) were being attempted,
causing unnecessary retries and delays. This fix ensures:

1. Initial profile selection skips profiles in cooldown
2. Profile rotation (after failures) skips cooldown profiles
3. Clear error message when all profiles are unavailable

Tests added:
- Skips profiles in cooldown during initial selection
- Skips profiles in cooldown when rotating after failure

Fixes #1316
2026-01-23 03:28:18 +00:00
Peter Steinberger
486dd8e071 fix: treat copilot oauth tokens as non-expiring 2026-01-23 02:51:33 +00:00
Peter Steinberger
86c40e5dca fix: set Copilot user agent header 2026-01-23 02:51:33 +00:00
Peter Steinberger
b69e70668d fix: improve GitHub Copilot integration 2026-01-23 02:51:33 +00:00
Peter Steinberger
8e702290f2 fix: honor send path/filePath inputs (#1444) (thanks @hopyky) 2026-01-23 02:27:47 +00:00
Peter Steinberger
04122e4440 test: speed up test suite 2026-01-23 02:22:02 +00:00
Peter Steinberger
7851ce8582 Merge pull request #1444 from hopyky/fix-message-path-parameter
Fix: Support path and filePath parameters in message send action
2026-01-23 02:10:54 +00:00
Peter Steinberger
cc34fe86e9 docs: note transcript hygiene sync 2026-01-23 01:38:05 +00:00
Peter Steinberger
6cad20222c refactor: remove transcript sanitize extension 2026-01-23 01:34:33 +00:00
Peter Steinberger
ea95941c40 docs: add transcript hygiene reference 2026-01-23 01:34:21 +00:00
Peter Steinberger
2576cb47c1 fix: improve tool summaries 2026-01-23 01:00:24 +00:00
Peter Steinberger
deb6581c08 feat: add OpenProse plugin skills 2026-01-23 00:49:40 +00:00
Peter Steinberger
828d3f140b fix: gate transcript sanitization by provider 2026-01-23 00:42:45 +00:00
Peter Steinberger
2e76f35026 fix: allow chained exec allowlists
Co-authored-by: Lucas Czekaj <1464539+czekaj@users.noreply.github.com>
2026-01-23 00:11:58 +00:00
Peter Steinberger
3dc404530d Merge pull request #1440 from robbyczgw-cla/fix/token-count-after-compaction
fix: update token count display after compaction
2026-01-23 00:10:46 +00:00
Peter Steinberger
497597a302 fix: skip tool id sanitization for openai responses 2026-01-22 23:51:59 +00:00
Peter Steinberger
ec0cfe0771 fix: clarify session_status model-use guidance 2026-01-22 22:42:37 +00:00
Peter Steinberger
126b3922c0 fix: surface concrete ai error details 2026-01-22 22:24:25 +00:00
Matt mini
b3907f37f6 Fix: Support path and filePath parameters in message send action
The message tool accepts path and filePath parameters in its schema,
but these were never converted to mediaUrl, causing local files to
be ignored when sending messages.

Changes:
- src/agents/tools/message-tool.ts: Convert path/filePath to media with file:// URL
- src/infra/outbound/message-action-runner.ts: Allow hydrateSendAttachmentParams for "send" action

Fixes issue where local audio files (and other media) couldn't be sent
via the message tool with the path parameter.

Users can now use:
  message({ path: "/tmp/file.ogg" })
  message({ filePath: "/tmp/file.ogg" })
2026-01-22 13:15:48 +01:00
Robby
8722e446c4 fix: update token count display after compaction (#1299) 2026-01-22 09:58:07 +00:00
Peter Steinberger
931709359d fix: omit skills section in minimal prompt 2026-01-22 09:32:49 +00:00
Peter Steinberger
9b4550fc37 test: use absolute exec path for allowlist 2026-01-22 09:20:38 +00:00
Peter Steinberger
99312fd3a1 Merge pull request #1431 from robbyczgw-cla/fix/subagent-skills-inheritance
fix: include skills in minimal prompt mode for subagents
2026-01-22 09:02:28 +00:00
Peter Steinberger
3732b00c5a test: isolate exec allowlist env 2026-01-22 08:58:55 +00:00
Peter Steinberger
086adc003b fix: preserve antigravity thinking block types 2026-01-22 08:31:07 +00:00
Robby
fc0082041b fix: include skills in minimal prompt mode for subagents 2026-01-22 08:28:55 +00:00
Peter Steinberger
b5bd4df7df fix: detect antigravity claude by provider 2026-01-22 08:26:08 +00:00
Peter Steinberger
ae14204f41 fix: sanitize antigravity thinking signatures 2026-01-22 08:17:49 +00:00
Peter Steinberger
2adc1533c1 style: format agent workspace and prompts 2026-01-22 08:05:55 +00:00
Peter Steinberger
92ff93d424 fix: carry reply tags across streamed chunks 2026-01-22 08:01:34 +00:00
Peter Steinberger
9ac47ca07a fix: stabilize avatar tests on Windows 2026-01-22 07:24:12 +00:00
Lucas Czekaj
d1b9b8c800 fix(exec): align node exec approvals (#1425)
Thanks @czekaj.

Co-authored-by: Lucas Czekaj <lukasz@czekaj.us>
2026-01-22 07:22:43 +00:00
Peter Steinberger
c5e29f395f feat: extend Control UI assistant identity 2026-01-22 07:08:13 +00:00
AJ
cdcccd3b7c fix: read account_id from Codex CLI auth for workspace billing 2026-01-22 07:01:10 +00:00
Peter Steinberger
3fa4c10240 fix: load workspace templates from docs 2026-01-22 06:39:28 +00:00
Peter Steinberger
0b0d0cdda9 Merge remote-tracking branch 'origin/main' into feature/agent-avatar-support 2026-01-22 06:27:45 +00:00
Peter Steinberger
2d2a040795 Merge remote-tracking branch 'origin/main' into feature/agent-avatar-support 2026-01-22 06:03:56 +00:00
Peter Steinberger
2862116526 fix: skip elevated defaults when not allowed 2026-01-22 06:03:23 +00:00
Peter Steinberger
c260b5d585 feat: add elevated ask/full modes 2026-01-22 05:41:11 +00:00
Peter Steinberger
c5025bd120 feat: surface repo root in runtime prompt 2026-01-22 05:20:42 +00:00
Peter Steinberger
b8122ba647 feat: preflight update runner before rebase 2026-01-22 04:19:33 +00:00
Peter Steinberger
a283afbde9 Merge pull request #1204 from cpojer/reminders
Improve `cron` reminder tool description.
2026-01-22 04:06:50 +00:00
Peter Steinberger
311c02c88d fix: map OpenCode Zen models to correct APIs 2026-01-22 04:02:53 +00:00
Peter Steinberger
2c28fca67d feat: add agent avatar support (#1329) (thanks @dlauer) 2026-01-22 04:00:07 +00:00
Lucas Czekaj
0d6fb4c841 fix(exec): derive agentId from sessionKey for allowlist lookup
When creating exec tools via chat/Discord, agentId was not passed,
causing allowlist lookup to use 'default' key instead of 'main'.
User's allowlist entries in agents.main were never matched.

Now derives agentId from sessionKey if not explicitly provided,
ensuring correct allowlist lookup for all exec paths.
2026-01-22 03:58:53 +00:00
Peter Steinberger
08803015bd Merge pull request #1103 from mkbehr/feat/cron-context-messages
feat(cron): Add parameter to control context messages
2026-01-22 03:52:34 +00:00
Peter Steinberger
0eba1aefd4 fix: cap cron context messages (#1103) (thanks @mkbehr) 2026-01-22 03:52:03 +00:00
Peter Steinberger
c2b25dac8e fix: msteams attachments + plugin prompt hints
Co-authored-by: Christof <10854026+Evizero@users.noreply.github.com>
2026-01-22 03:37:29 +00:00
Michael Behr
2fa222f550 update description 2026-01-22 03:37:20 +00:00
Michael Behr
40363547fa feat(cron): add contextMessages param to control reminder context 2026-01-22 03:37:20 +00:00
Lucas Czekaj
698e8f4c0c fix(exec): pass undefined instead of null for optional approval params
TypeBox Type.Optional(Type.String()) accepts string|undefined but NOT null.
Discord exec was failing with 'resolvedPath must be string' because callers
passed null explicitly. Web UI worked because it skipped the approval request.

Fixes exec approval validation error in Discord-triggered sessions.
2026-01-21 18:14:51 -08:00
Peter Steinberger
4d39cba023 Merge pull request #1372 from zerone0x/fix/openrouter-tool-call-id-alphanumeric
fix(agents): use alphanumeric-only tool call IDs for OpenRouter compatibility
2026-01-22 01:17:16 +00:00
Peter Steinberger
e16601b92c fix: unify exec approval ids 2026-01-22 00:59:29 +00:00
Peter Steinberger
ee4e9b0758 fix: enforce Mistral tool call ids (#1372) (thanks @zerone0x) 2026-01-22 00:43:15 +00:00
zerone0x
ecb8997da0 fix(agents): make tool call ID sanitization conditional with standard/strict modes
- Add ToolCallIdMode type ('standard' | 'strict') for provider compatibility
- Standard mode (default): allows [a-zA-Z0-9_-] for readable session logs
- Strict mode: only [a-zA-Z0-9] for Mistral via OpenRouter
- Update sanitizeSessionMessagesImages to accept toolCallIdMode option
- Export ToolCallIdMode from pi-embedded-helpers barrel

Addresses review feedback on PR #1372 about readability.
2026-01-22 00:41:22 +00:00
zerone0x
923f28a128 fix(agents): use alphanumeric-only tool call IDs for OpenRouter compatibility
Some providers like Mistral via OpenRouter require strictly alphanumeric
tool call IDs. The error message indicates: "Tool call id was
whatsapp_login_1768799841527_1 but must be a-z, A-Z, 0-9, with a length
of 9."

Changes:
- Update sanitizeToolCallId to strip all non-alphanumeric characters
  (previously allowed underscores and hyphens)
- Update makeUniqueToolId to use alphanumeric suffixes (x2, x3, etc.)
  instead of underscores
- Update isValidCloudCodeAssistToolId to validate alphanumeric-only IDs
- Update tests to reflect stricter sanitization

Fixes #1359

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-22 00:41:22 +00:00
Peter Steinberger
3161a0ea0a feat: tighten exec allowlist gating 2026-01-21 21:45:50 +00:00
Peter Steinberger
d89894365d fix: restore 1h cache ttl option 2026-01-21 20:00:32 +00:00
Peter Steinberger
d6af9fd67f fix: drop obsolete pi-mono workarounds 2026-01-21 19:58:19 +00:00
Peter Steinberger
856e758752 fix: reset cache-ttl pruning window 2026-01-21 19:53:00 +00:00
Peter Steinberger
b47d8624ff feat: add cache-ttl pruning mode 2026-01-21 19:46:24 +00:00
Echo
ba1f1f1e5d feat(sessions): add channelIdleMinutes config for per-channel session idle durations (#1353)
* feat(sessions): add channelIdleMinutes config for per-channel session idle durations

Add new `channelIdleMinutes` config option to allow different session idle
timeouts per channel. For example, Discord sessions can now be configured
to last 7 days (10080 minutes) while other channels use shorter defaults.

Config example:
  sessions:
    channelIdleMinutes:
      discord: 10080  # 7 days

The channel-specific idle is passed as idleMinutesOverride to the existing
resolveSessionResetPolicy, integrating cleanly with the new reset policy
architecture.

* fix

* feat: add per-channel session reset overrides (#1353) (thanks @cash-echo-bot)

---------

Co-authored-by: Cash Williams <cashwilliams@gmail.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-01-21 19:10:31 +00:00
Peter Steinberger
b81901a3a0 test: cover history image injection 2026-01-21 18:45:23 +00:00
Peter Steinberger
e81d9c977b fix: persist history image injections 2026-01-21 18:45:23 +00:00
Peter Steinberger
1eeba6ae10 feat: fold gateway service commands into gateway 2026-01-21 17:45:26 +00:00