Commit Graph

2792 Commits

Author SHA1 Message Date
Peter Steinberger
2f4cd74b72 feat: restore voice-call plugin parity 2026-01-12 21:44:19 +00:00
Zach Knickerbocker
5e4914012e Discord: add allowBots config option (#802)
Co-authored-by: Shadow <shadow@clawd.bot>
2026-01-12 15:30:05 -06:00
Peter Steinberger
492fabf5d8 style: italicize reasoning output 2026-01-12 21:24:36 +00:00
Peter Steinberger
6481544dbd fix(image): accept @-prefixed file paths 2026-01-12 20:53:16 +00:00
Jake
b0eea4c5c6 fix(agent): restore reasoning tag enforcement for non-ollama providers
This restores the fix from PR #754 which was accidentally reverted in 811fb69ee.
2026-01-13 09:47:04 +13:00
Peter Steinberger
bee4d0a477 fix(gateway): quiet loopback ws closes 2026-01-12 20:38:34 +00:00
Peter Steinberger
8a836a90e4 fix(image): route MiniMax vision to VLM 2026-01-12 20:38:34 +00:00
David Guttman
de1a8bc1aa Discord: per-channel autoThread (#800)
Co-authored-by: Shadow <shadow@clawd.bot>
2026-01-12 14:33:07 -06:00
Peter Steinberger
ae02a8943b test(browser): cover downloads + responsebody 2026-01-12 19:41:12 +00:00
Peter Steinberger
f4d0933154 feat(browser): add downloads + response bodies 2026-01-12 19:41:12 +00:00
Peter Steinberger
285f2e327b fix: prevent onboarding TUI auto-delivery (#791) (thanks @roshanasingh4) 2026-01-12 19:38:52 +00:00
Roshan Singh
4c6b9cacb5 Fix: prevent onboarding TUI auto-delivery 2026-01-12 19:31:04 +00:00
Peter Steinberger
0fea0bdd7a fix(image): drop temperature for OpenAI 2026-01-12 19:09:15 +00:00
Peter Steinberger
18ae992454 fix(tools): accept legacy bash tool calls 2026-01-12 19:09:15 +00:00
Peter Steinberger
4924044fc6 fix(models): preserve implicit vision models 2026-01-12 19:09:15 +00:00
Peter Steinberger
989b81e4c6 feat: add dashboard command 2026-01-12 19:08:29 +00:00
Peter Steinberger
ad4349bdd6 fix: close memory index and refresh protocol outputs 2026-01-12 18:49:24 +00:00
Peter Steinberger
9c64715653 fix(logging): honor silent console level 2026-01-12 18:46:40 +00:00
Peter Steinberger
09f0345e28 refactor(models): share implicit providers 2026-01-12 18:46:40 +00:00
Peter Steinberger
d25f147c1b fix(image): fail over on empty output 2026-01-12 18:46:16 +00:00
Peter Steinberger
6a19de3ef4 test(browser): extend automation coverage 2026-01-12 18:42:46 +00:00
Peter Steinberger
43cd4cb733 chore: log elevated and reasoning toggles 2026-01-12 18:37:44 +00:00
Peter Steinberger
415700e573 fix(image): normalize mime type handling 2026-01-12 18:24:11 +00:00
Peter Steinberger
6ae2236a28 fix: stabilize session tools and tests 2026-01-12 18:21:20 +00:00
Peter Steinberger
22b8c8c535 fix: keep session sanitizer stable 2026-01-12 18:19:30 +00:00
Peter Steinberger
7e40984654 chore: format tool guard files 2026-01-12 18:19:30 +00:00
Peter Steinberger
1ceb3a5cf4 fix: add subagent default model typing 2026-01-12 18:18:15 +00:00
Peter Steinberger
fc184f19f0 fix(image): support data URLs 2026-01-12 18:17:43 +00:00
Peter Steinberger
083f4d87f5 fix: relax image tool agentDir guard 2026-01-12 18:12:51 +00:00
Peter Steinberger
0a2ee1cb31 feat: subagent model defaults 2026-01-12 18:08:30 +00:00
Peter Steinberger
08f742bf78 fix(sandbox): always allow image tool 2026-01-12 18:07:34 +00:00
Peter Steinberger
fcad0b05cb feat(sandbox): allow image tool 2026-01-12 17:56:51 +00:00
Peter Steinberger
f8b0904055 fix: keep image sanitizer scoped 2026-01-12 17:55:45 +00:00
Peter Steinberger
fe985cbca9 feat(image): auto-pair image model 2026-01-12 17:50:47 +00:00
Peter Steinberger
db4675d18e fix: add copilot tests and lint fixes 2026-01-12 17:48:08 +00:00
Ayaan Zaidi
321d7cf248 Merge pull request #792 from clawdbot/fix/gateway-auth-off
fix: clear gateway auth when set to off
2026-01-12 23:10:15 +05:30
Peter Steinberger
973a7c66ff feat(cli): expand browser commands 2026-01-12 17:32:44 +00:00
Peter Steinberger
9db6ff26bb test(browser): add regression coverage 2026-01-12 17:32:44 +00:00
Peter Steinberger
1342dceeed feat(browser): expand browser control surface 2026-01-12 17:32:44 +00:00
Ayaan Zaidi
53a2664e53 fix: clear gateway auth on off selection 2026-01-12 22:59:37 +05:30
Peter Steinberger
1ef34798b9 fix: guard session tool results 2026-01-12 17:28:46 +00:00
Peter Steinberger
14b27c8f6b fix: keep main agent in list output 2026-01-12 17:24:03 +00:00
Peter Steinberger
a624a019fb fix: restore heartbeat defaults and model listing 2026-01-12 17:17:54 +00:00
Peter Steinberger
ae2d188eef test: update heartbeat and agent list thresholds 2026-01-12 17:14:04 +00:00
Peter Steinberger
1d844cf92b fix: clean up models-config provider normalization 2026-01-12 17:14:04 +00:00
Peter Steinberger
17abef2657 refactor: split models-config provider helpers 2026-01-12 17:05:53 +00:00
Peter Steinberger
63ca0554c1 Merge pull request #705 from TAGOOZ/feat/github-copilot-onboard
feat: add GitHub Copilot provider
2026-01-12 16:56:51 +00:00
Peter Steinberger
fe2510c3bb fix: honor copilot config and profiles (#705) (thanks @TAGOOZ) 2026-01-12 16:55:47 +00:00
Peter Steinberger
f047c80f7c test: cover models.json apiKey fill 2026-01-12 16:52:43 +00:00
Peter Steinberger
352f6706be fix: make models.json generation fill apiKey 2026-01-12 16:52:43 +00:00
Mustafa Tag Eldeen
96a1b923f7 feat: add GitHub Copilot provider
Copilot device login + onboarding option; model list auth detection.
2026-01-12 16:52:15 +00:00
Ayaan Zaidi
dd8d7d7d42 test(telegram): cover General topic typing fallback 2026-01-12 22:03:42 +05:30
Azade
724ca44d79 fix(telegram): show typing indicator in General forum topic
In forum supergroups, messages from the General topic arrive without
message_thread_id in updates, but sendChatAction requires one to display
the typing indicator in the correct topic.

Use message_thread_id=1 (Telegram's internal ID for General topic) as
fallback when messageThreadId is undefined in a forum chat.
2026-01-12 22:01:21 +05:30
Peter Steinberger
811fb69eee feat: add memory vector search 2026-01-12 11:23:44 +00:00
Peter Steinberger
713ee5d9ec chore: sanitize onboarding api keys 2026-01-12 11:18:31 +00:00
Peter Steinberger
0d7102bc4d feat: add cron agent binding 2026-01-12 11:07:38 +00:00
Peter Steinberger
c0549ac4f8 chore: raise heartbeat ack window 2026-01-12 11:06:46 +00:00
Peter Steinberger
74e01756ff test: cover minimax env provider injection 2026-01-12 11:05:08 +00:00
Peter Steinberger
764dfd6155 fix: auto-add minimax provider from auth 2026-01-12 11:05:08 +00:00
Peter Steinberger
d4e998edf7 fix: avoid duplicate status replies 2026-01-12 11:04:03 +00:00
Peter Steinberger
821d24bbf1 chore: release 2026.1.11-4 2026-01-12 10:52:34 +00:00
Peter Steinberger
580a1d6933 chore: release 2026.1.11-3 2026-01-12 10:35:50 +00:00
Peter Steinberger
f34aefbe6b test: skip lan auto-token on windows 2026-01-12 09:20:37 +00:00
Peter Steinberger
1f3bcb861f chore: tidy changelog and format 2026-01-12 09:14:44 +00:00
Peter Steinberger
b841cf895c fix: add ws handshake user agent 2026-01-12 09:08:07 +00:00
Peter Steinberger
b6e5cb8bfb fix: strip gemini cli tool ids (#756) 2026-01-12 09:01:19 +00:00
Peter Steinberger
98c434bf79 fix: default groupPolicy to open for discord/telegram 2026-01-12 08:55:02 +00:00
Peter Steinberger
0f2687c61f fix: default groupPolicy to open 2026-01-12 08:55:02 +00:00
Peter Steinberger
81e5e399ac fix: only strip inline /status for allowlisted senders 2026-01-12 08:55:02 +00:00
Peter Steinberger
5980804253 feat: role snapshot refs for browser 2026-01-12 08:55:02 +00:00
Peter Steinberger
d9a2b02736 fix: finalize tool param aliasing (#768) (thanks @hsrvc) 2026-01-12 08:49:11 +00:00
hsrvc
0808b972f4 Agents: add Claude Code parameter aliasing for read/write/edit tools 2026-01-12 08:49:11 +00:00
Peter Steinberger
95540a9eda Merge pull request #754 from mcinteerj/fix/reasoning-tag-strip
fix(agent): prevent reasoning and tag leaks for Gemini 3/Antigravity models
2026-01-12 08:47:15 +00:00
Peter Steinberger
2bb8e0d369 test: align group policy defaults 2026-01-12 08:45:57 +00:00
Peter Steinberger
56d4790f03 fix: enforce final tag gating (#754) (thanks @mcinteerj) 2026-01-12 08:45:23 +00:00
Keith the Silly Goose
01c323f1a0 fix(agent): buffer streaming output until <final> tag appears
- Enforces strict buffering when enforceFinalTag is enabled.
- Prevents 'thinking out loud' planning steps (e.g. '*Locating Manulife*') from leaking to WhatsApp.
- Hardens <final> tag stripping to remove nested/hallucinated tags.
2026-01-12 08:34:06 +00:00
Keith the Silly Goose
93f9fa2bb4 fix(agent): correctly strip <final> tags from reasoning providers
- Added src/utils/provider-utils.ts to track reasoning provider logic
- Updated isReasoningTagProvider to loosely match 'google-antigravity' (fixes sub-models)
- Enabled enforceFinalTag in reply.ts when provider matches
- Verified <final> tag stripping logic in pi-embedded-subscribe.ts
- Updated pi-embedded-runner to use consistent provider check for prompt hints
2026-01-12 08:34:06 +00:00
Peter Steinberger
ad0e62b9ea fix: improve daemon node selection 2026-01-12 08:33:32 +00:00
Peter Steinberger
c0dd3d0628 fix: harden msteams group access 2026-01-12 08:32:08 +00:00
Peter Steinberger
97e5fd0c74 fix: add ws handshake context 2026-01-12 08:30:08 +00:00
Peter Steinberger
b6583cd14c fix: default groupPolicy to allowlist 2026-01-12 08:22:01 +00:00
Peter Steinberger
b996ea4709 fix: set default model after auth choice 2026-01-12 08:04:32 +00:00
Peter Steinberger
63e81346ae fix: correct MiniMax Lightning hint 2026-01-12 08:04:32 +00:00
Peter Steinberger
1abb19bd40 test(model): cover provider-less id fuzzy match 2026-01-12 08:02:55 +00:00
Peter Steinberger
102325276a feat(model): fuzzy /model matching 2026-01-12 07:57:53 +00:00
Peter Steinberger
d11f227637 feat: improve onboarding auth prompts 2026-01-12 07:47:15 +00:00
Peter Steinberger
52cf5b994b fix: streamline configure section flow 2026-01-12 07:47:15 +00:00
Peter Steinberger
b2abbda5f1 test: expand memory flush coverage 2026-01-12 07:42:03 +00:00
Peter Steinberger
99f8a4d3e6 fix(auto-reply): preserve inline /status text for unauthorized senders 2026-01-12 07:42:03 +00:00
Peter Steinberger
c98f2a39e3 fix: cap ai snapshots for tool calls (#763) (thanks @thesash) 2026-01-12 07:40:34 +00:00
Sash Catanzarite
7e383368c2 Browser: cap AI snapshots to avoid context overflow 2026-01-12 07:40:34 +00:00
Peter Steinberger
0f71b53661 fix(auto-reply): show config models in /model 2026-01-12 07:31:20 +00:00
Peter Steinberger
1e8e19a256 fix: ignore inline status directives 2026-01-12 07:13:08 +00:00
Peter Steinberger
6564e952c0 feat(control-ui): add model presets 2026-01-12 07:09:58 +00:00
Peter Steinberger
140f1e3b2f fix: clean up lint + guardCancel typing 2026-01-12 07:07:27 +00:00
Peter Steinberger
1f921afa8b fix: modernize live tests and gemini ids 2026-01-12 07:05:33 +00:00
Peter Steinberger
d65fbf3065 feat: add Moonshot auth choice 2026-01-12 06:48:06 +00:00
Peter Steinberger
7f9158a447 test(model): expand /model picker coverage 2026-01-12 06:34:33 +00:00
Peter Steinberger
6cddcca8a2 fix: skip memory flush on read-only workspace 2026-01-12 06:33:27 +00:00
Peter Steinberger
e13ebf3946 fix: handle inline status for allowlisted senders 2026-01-12 06:33:27 +00:00
Peter Steinberger
2bc10b7ed7 fix: sender fallback for command auth (#755) (thanks @juanpablodlc) 2026-01-12 06:28:53 +00:00
juanpablodlc
2cc7924e1c fix: use logical OR for sender ID fallback in command auth
The nullish coalescing operator (??) only skips null/undefined, not
empty strings. For direct WhatsApp messages, ctx.SenderId was an empty
string, causing senderRaw to be "" instead of falling through to the
valid ctx.SenderE164 value.

This caused commands like /status to be rejected with "unauthorized
sender" for self-chat WhatsApp messages.

Tested: Verified /status command now works correctly for self-chat
WhatsApp messages after the fix.
2026-01-12 06:20:51 +00:00
Peter Steinberger
fc978423a3 test: cover pi session jsonl ordering 2026-01-12 06:19:58 +00:00
Peter Steinberger
35fca9cb15 test: clean unused var 2026-01-12 06:14:45 +00:00
Peter Steinberger
86a772718b test: fix lint warning 2026-01-12 06:14:45 +00:00
Peter Steinberger
8548fe5396 test: cover inline slash command fast-path 2026-01-12 06:14:45 +00:00
Peter Steinberger
122a7e5d93 test: stabilize lan auto-token onboarding 2026-01-12 06:13:31 +00:00
Peter Steinberger
e9c0eb23d8 fix: dedupe minimax non-interactive auth 2026-01-12 06:13:31 +00:00
Peter Steinberger
93a0b979f0 feat: simplify minimax auth choice 2026-01-12 06:13:00 +00:00
Peter Steinberger
d6d0a6b8f1 feat: loop configure section picker 2026-01-12 06:13:00 +00:00
Peter Steinberger
6fb0c71a2a fix: fast-path slash commands 2026-01-12 06:10:17 +00:00
Peter Steinberger
9f50b66603 feat(model): add /model picker 2026-01-12 06:02:39 +00:00
Peter Steinberger
ddca2576fa feat: add pre-compaction memory flush 2026-01-12 05:29:18 +00:00
Peter Steinberger
c001dec696 fix: persist first Pi user message in JSONL 2026-01-12 05:18:05 +00:00
Peter Steinberger
db1e5a16d1 fix(models): default MiniMax to /anthropic 2026-01-12 05:12:07 +00:00
Peter Steinberger
5cf18bdb08 feat: streamline wizard selection prompts 2026-01-12 05:08:07 +00:00
Peter Steinberger
546dd4ff39 refactor: remove mac attach-only setting 2026-01-12 04:58:38 +00:00
Peter Steinberger
821520a64f fix: require gateway client id
# Conflicts:
#	apps/macos/Sources/Clawdbot/GatewayChannel.swift
#	docs/concepts/typebox.md
#	docs/gateway/index.md
#	src/commands/onboard-non-interactive.gateway-auth.test.ts
#	src/commands/onboard-non-interactive.lan-auto-token.test.ts
#	src/gateway/call.ts
#	src/gateway/client.ts
#	src/gateway/gateway.wizard.e2e.test.ts
#	src/gateway/probe.ts
#	src/gateway/protocol/schema.ts
#	src/gateway/server.auth.test.ts
#	src/gateway/server.health.test.ts
#	src/gateway/server.ts
#	src/gateway/test-helpers.ts
#	src/tui/gateway-chat.ts
2026-01-12 04:58:38 +00:00
Peter Steinberger
9433a40651 test: respect openai max tokens floor 2026-01-12 04:04:04 +00:00
Peter Steinberger
4d0beca324 feat: add apply_patch tool (exec-gated) 2026-01-12 03:42:56 +00:00
Peter Steinberger
0fd5e0bb0b refactor: reuse resolved think default 2026-01-12 03:00:30 +00:00
Peter Steinberger
3962e645a9 fix: flush block reply buffers on tool boundaries (#750) (thanks @sebslight) 2026-01-12 02:54:57 +00:00
The Admiral
11bd1c2420 fix: flush block reply coalescer on tool boundaries
When block streaming is enabled with verbose=off, tool blocks are hidden
but their boundary information was lost. Text segments before and after
tool execution would get coalesced into a single message because the
coalescer had no signal that a tool had executed between them.

This adds an onBlockReplyFlush callback that fires on tool_execution_start,
allowing the block reply pipeline to flush pending text before the tool
runs. This preserves natural message boundaries even when tools are hidden.

Fixes the issue where:
  text → [hidden tool] → text → rendered as one merged message

Now correctly renders as:
  text → [hidden tool] → text → two separate messages

Co-diagnosed-by: Krill (Discord assistant)
2026-01-12 02:52:48 +00:00
Peter Steinberger
0e749d85fc Merge pull request #751 from gabriel-trigo/fix/think-default-743
fix: align /think default with model reasoning
2026-01-12 02:52:25 +00:00
Peter Steinberger
dc76244c6b Merge pull request #748 from myfunc/main
fix(bash): use PowerShell on Windows to capture system utility output
2026-01-12 02:50:30 +00:00
Gabriel Trigo
05ebb514ab fix: align /think default with model reasoning 2026-01-12 02:50:13 +00:00
Peter Steinberger
218e5a52e0 fix: rename bash tool to exec (#748) (thanks @myfunc) 2026-01-12 02:49:55 +00:00
Peter Steinberger
41a1ffe410 fix(sandbox): canonicalize agent main alias 2026-01-12 02:23:02 +00:00
myfunc
555b85681b fix(bash): use PowerShell on Windows to capture system utility output
Windows system utilities like ipconfig, systeminfo, etc. write directly to
the console via WriteConsole API instead of stdout. When Node.js spawns
cmd.exe with piped stdio, these utilities produce empty output.

Changes:
- Switch from cmd.exe to PowerShell on Windows (properly redirects output)
- Disable detached mode on Windows (PowerShell doesn't pipe stdout when detached)
- Add windowsHide option to prevent console window flashing
- Update tests to use PowerShell-compatible syntax (Start-Sleep, semicolons)
2026-01-12 02:13:02 +00:00
Peter Steinberger
ff2b997dc9 docs: fix browser CLI docs link 2026-01-12 02:09:10 +00:00
Peter Steinberger
fa1d9b0cb9 fix(subagents): align wait timeout with run timeout 2026-01-12 02:06:43 +00:00
Peter Steinberger
b2f5f65e17 test(gateway): cover main alias resolve 2026-01-12 02:06:43 +00:00
Peter Steinberger
404bae41f9 refactor(gateway): use canonical session store keys 2026-01-12 02:06:43 +00:00
Peter Steinberger
bc73513e11 test: fix windows nix config path assertion 2026-01-12 02:05:38 +00:00
Peter Steinberger
1567911d84 test: add normalizeConfigPaths unit test 2026-01-12 01:55:55 +00:00
Peter Steinberger
eb701e92b9 test: cover tilde path expansion 2026-01-12 01:53:42 +00:00
Peter Steinberger
0238d571b4 fix: normalize ~ in path config 2026-01-12 01:53:42 +00:00
Peter Steinberger
b47003adca refactor(sandbox): normalize main session aliases 2026-01-12 01:37:56 +00:00
Peter Steinberger
7a62ca34dd fix(plugins): extract archives without system tar 2026-01-12 01:36:18 +00:00
Peter Steinberger
7a4c55fdfb test: run npm pack via npm-cli.js 2026-01-12 01:31:26 +00:00
Peter Steinberger
5442dd4efb style: format plugin install test 2026-01-12 01:27:01 +00:00
Peter Steinberger
d9f9a8a0f6 fix: load plugin packages from config dirs 2026-01-12 01:25:56 +00:00
Peter Steinberger
072c5696e2 test: pack plugin archives via npm 2026-01-12 01:25:40 +00:00
Peter Steinberger
9d40555147 fix(sandbox): avoid sandboxing main DM sessions 2026-01-12 01:24:44 +00:00
Peter Steinberger
ac6f2643bc test: plugin install + docker e2e 2026-01-12 01:16:42 +00:00
Peter Steinberger
d72f800c90 feat: plugin system + voice-call 2026-01-12 01:16:39 +00:00
Peter Steinberger
2570f88d74 fix(gateway): canonicalize main session aliases 2026-01-12 01:05:43 +00:00
user
fb8cef20cc fix(gateway): normalize session key to canonical form before store writes
Ensure 'main' alias is always stored as 'agent:main:main' to prevent
duplicate entries. Also update loadSessionEntry to check both forms
when looking up entries.

Fixes duplicate main sessions in session store.
2026-01-12 00:53:20 +00:00
user
cb0f4c8aa7 fix(subagent): make announce prompt more emphatic
The previous prompt was too permissive about skipping announcements.
Updated to strongly encourage announcing results since the requester
is waiting for a response.

- Add 'You MUST announce your result' instruction
- Clarify ANNOUNCE_SKIP is only for complete failures
- Improve guidance on providing useful summaries
2026-01-12 00:52:36 +00:00
user
563d40976c fix(subagent): wait for completion before announce
The previous immediate probe (timeoutMs: 0) only caught already-completed
runs. Cross-process spawns need to actually wait via agent.wait RPC for
the gateway to signal completion, then trigger the announce flow.

- Rename probeImmediateCompletion to waitForSubagentCompletion
- Use 10 minute wait timeout for agent.wait RPC
- Remove leftover debug console.log statements
2026-01-12 00:52:36 +00:00
Peter Steinberger
ee66fe7f6e test: cover unset docker env vars 2026-01-12 00:46:55 +00:00
Peter Steinberger
32dd40b3b7 test: fix includes tests on windows 2026-01-12 00:39:14 +00:00
Peter Steinberger
dc08a6e797 style: biome fixes 2026-01-12 00:32:47 +00:00
Peter Steinberger
ada3142a31 fix: make codex keychain platform-aware 2026-01-12 00:32:47 +00:00
Peter Steinberger
b5598c29f3 test: expand include coverage 2026-01-12 00:30:26 +00:00
Peter Steinberger
1e4298b8a6 fix: skip pnpm patch fallback 2026-01-12 00:28:34 +00:00
Peter Steinberger
6044afebec fix: reset session after compaction overflow 2026-01-12 00:28:16 +00:00
Peter Steinberger
a143956e84 fix: stabilize invalid-connect handshake response 2026-01-12 00:19:47 +00:00
Peter Steinberger
f99bbee218 fix: guard config includes (#731) (thanks @pasogott) 2026-01-12 00:12:03 +00:00
sheeek
e5d6194bb0 refactor(config): simplify includes with class-based processor
- Replace free functions with IncludeProcessor class
- Simplify IncludeResolver interface: { readFile, parseJson }
- Break down loadFile into focused private methods
- Use reduce() for array include merging
- Cleaner separation of concerns
2026-01-12 00:08:27 +00:00
sheeek
c094b914dc refactor(config): extract includes logic to separate module
- Move $include resolution to src/config/includes.ts
- Simplify io.ts by importing from includes module
- Cleaner API: resolveConfigIncludes(obj, configPath, resolver?)
- Re-export errors from io.ts for backwards compatibility
- Rename test file to match module name
2026-01-12 00:08:27 +00:00
sheeek
027033d8b5 feat(config): add $include directive for modular configs
Adds support for splitting clawdbot.json into multiple files using the
$include directive. This enables:

- Single file includes: { "$include": "./agents.json5" }
- Multiple file merging: { "$include": ["./a.json5", "./b.json5"] }
- Nested includes (up to 10 levels deep)
- Sibling key merging with includes

Features:
- Relative paths resolved from including file
- Absolute paths supported
- Circular include detection
- Clear error messages with resolved paths

Use case: Per-client agent configs for isolated sandboxed environments
(e.g., legal case management with strict data separation).
2026-01-12 00:08:27 +00:00
Peter Steinberger
531dd80356 fix: apply model extra params without overwriting stream (#732) (thanks @peschee) 2026-01-12 00:03:48 +00:00
Peter Siska
c2d8a7d7af style: fix formatting (biome) 2026-01-12 00:03:25 +00:00
Peter Siska
958702b36f feat: wire up model extraParams (temperature, maxTokens) to pi agent
- Use resolveExtraParams() which was defined but unused
- Create streamFn wrapper that injects config-driven params
- Apply to both compaction and run sessions

Config path: agents.defaults.models["provider/model"].params.temperature

Example:
  agents.defaults.models["anthropic/claude-sonnet-4"].params.temperature = 0.7
  agents.defaults.models["openai/gpt-4"].params.maxTokens = 8192
2026-01-12 00:03:24 +00:00
Peter Steinberger
4e11a347e8 chore: harden installer and add smoke ci 2026-01-12 00:00:54 +00:00
Peter Steinberger
b7b631c731 fix: preserve handshake close code and test truncation 2026-01-11 23:57:37 +00:00
Peter Steinberger
418c034a20 fix: surface handshake reasons 2026-01-11 23:46:20 +00:00
Peter Steinberger
42d1e4c10e fix: read codex keychain credentials 2026-01-11 23:39:10 +00:00
Peter Steinberger
ad4b230464 Merge pull request #733 from AbhisekBasu1/patch-1
Readme Fix: Update section title from 'macOS app' to 'Apps'
2026-01-11 23:38:38 +00:00
Peter Steinberger
553fb02880 fix: land PR #733 (thanks @AbhisekBasu1) 2026-01-11 23:37:44 +00:00
Peter Steinberger
665651666d test: expand voice-call coverage 2026-01-11 23:35:47 +00:00
Peter Steinberger
9680c2ac3d fix: strip markup heartbeat acks 2026-01-11 23:26:51 +00:00
Peter Steinberger
e34d36978b feat: implement voice-call plugin 2026-01-11 23:23:14 +00:00
Ayaan Zaidi
828c6e231d fix: add discord channel actions 2026-01-11 22:32:17 +05:30
Ayaan Zaidi
31fcfe5840 fix: format discord parentId 2026-01-11 22:28:05 +05:30
Ayaan Zaidi
f717785f3a Merge pull request #728 from pkrmf/feature/dm-history-limit
feat: add configurable DM history limits with per-chat overrides
2026-01-11 22:25:12 +05:30
Ayaan Zaidi
b3550cd9c6 fix: skip dm history limit for non-dm sessions 2026-01-11 22:18:15 +05:30
Nicholas Spisak
64de054d87 feat(discord): expose channel management actions via message tool
Add channel-create, channel-edit, channel-delete, channel-move,
category-create, category-edit, and category-delete actions to the
unified message tool. These actions were already implemented in the
Discord-specific handler but weren't accessible via the pi_message tool.

Changes:
- Add 7 new channel/category management actions to MessageActionSchema
- Add parameters: name, type, parentId, topic, position, nsfw,
  rateLimitPerUser, categoryId
- Gate actions behind discord.actions.channels (disabled by default)
- Add execute handlers routing to existing Discord action handlers
- Update Discord skill SKILL.md with documentation

Channel types: 0=text, 2=voice, 4=category
2026-01-11 10:01:32 -06:00
Ayaan Zaidi
32932dda32 fix: normalize telegram command mentions 2026-01-11 21:06:04 +05:30
Marc Terns
e808d12cb0 test: add comprehensive per-DM override tests for all providers 2026-01-11 08:55:32 -06:00
Marc Terns
8825269a39 feat: add per-DM history limit overrides 2026-01-11 08:53:50 -06:00
Marc Terns
115803e901 refactor: move dmHistoryLimit to provider-level config 2026-01-11 08:38:19 -06:00
Marc Terns
7ef50a43b4 feat: add configurable DM history limit 2026-01-11 08:21:14 -06:00
Peter Steinberger
218b3c47da test: add plugin docker e2e 2026-01-11 12:21:45 +00:00
Peter Steinberger
71c1446394 feat: add plugin architecture 2026-01-11 12:11:12 +00:00
Peter Steinberger
30a1fd5dec Move provider to a plugin-architecture (#661)
* refactor: introduce provider plugin registry

* refactor: move provider CLI to plugins

* docs: add provider plugin implementation notes

* refactor: shift provider runtime logic into plugins

* refactor: add plugin defaults and summaries

* docs: update provider plugin notes

* feat(commands): add /commands slash list

* Auto-reply: tidy help message

* Auto-reply: fix status command lint

* Tests: align google shared expectations

* Auto-reply: tidy help message

* Auto-reply: fix status command lint

* refactor: move provider routing into plugins

* test: align agent routing expectations

* docs: update provider plugin notes

* refactor: route replies via provider plugins

* docs: note route-reply plugin hooks

* refactor: extend provider plugin contract

* refactor: derive provider status from plugins

* refactor: unify gateway provider control

* refactor: use plugin metadata in auto-reply

* fix: parenthesize cron target selection

* refactor: derive gateway methods from plugins

* refactor: generalize provider logout

* refactor: route provider logout through plugins

* refactor: move WhatsApp web login methods into plugin

* refactor: generalize provider log prefixes

* refactor: centralize default chat provider

* refactor: derive provider lists from registry

* refactor: move provider reload noops into plugins

* refactor: resolve web login provider via alias

* refactor: derive CLI provider options from plugins

* refactor: derive prompt provider list from plugins

* style: apply biome lint fixes

* fix: resolve provider routing edge cases

* docs: update provider plugin refactor notes

* fix(gateway): harden agent provider routing

* refactor: move provider routing into plugins

* refactor: move provider CLI to plugins

* refactor: derive provider lists from registry

* fix: restore slash command parsing

* refactor: align provider ids for schema

* refactor: unify outbound target resolution

* fix: keep outbound labels stable

* feat: add msteams to cron surfaces

* fix: clean up lint build issues

* refactor: localize chat provider alias normalization

* refactor: drive gateway provider lists from plugins

* docs: update provider plugin notes

* style: format message-provider

* fix: avoid provider registry init cycles

* style: sort message-provider imports

* fix: relax provider alias map typing

* refactor: move provider routing into plugins

* refactor: add plugin pairing/config adapters

* refactor: route pairing and provider removal via plugins

* refactor: align auto-reply provider typing

* test: stabilize telegram media mocks

* docs: update provider plugin refactor notes

* refactor: pluginize outbound targets

* refactor: pluginize provider selection

* refactor: generalize text chunk limits

* docs: update provider plugin notes

* refactor: generalize group session/config

* fix: normalize provider id for room detection

* fix: avoid provider init in system prompt

* style: formatting cleanup

* refactor: normalize agent delivery targets

* test: update outbound delivery labels

* chore: fix lint regressions

* refactor: extend provider plugin adapters

* refactor: move elevated/block streaming defaults to plugins

* refactor: defer outbound send deps to plugins

* docs: note plugin-driven streaming/elevated defaults

* refactor: centralize webchat provider constant

* refactor: add provider setup adapters

* refactor: delegate provider add config to plugins

* docs: document plugin-driven provider add

* refactor: add plugin state/binding metadata

* refactor: build agent provider status from plugins

* docs: note plugin-driven agent bindings

* refactor: centralize internal provider constant usage

* fix: normalize WhatsApp targets for groups and E.164 (#631) (thanks @imfing)

* refactor: centralize default chat provider

* refactor: centralize WhatsApp target normalization

* refactor: move provider routing into plugins

* refactor: normalize agent delivery targets

* chore: fix lint regressions

* fix: normalize WhatsApp targets for groups and E.164 (#631) (thanks @imfing)

* feat: expand provider plugin adapters

* refactor: route auto-reply via provider plugins

* fix: align WhatsApp target normalization

* fix: normalize WhatsApp targets for groups and E.164 (#631) (thanks @imfing)

* refactor: centralize WhatsApp target normalization

* feat: add /config chat config updates

* docs: add /config get alias

* feat(commands): add /commands slash list

* refactor: centralize default chat provider

* style: apply biome lint fixes

* chore: fix lint regressions

* fix: clean up whatsapp allowlist typing

* style: format config command helpers

* refactor: pluginize tool threading context

* refactor: normalize session announce targets

* docs: note new plugin threading and announce hooks

* refactor: pluginize message actions

* docs: update provider plugin actions notes

* fix: align provider action adapters

* refactor: centralize webchat checks

* style: format message provider helpers

* refactor: move provider onboarding into adapters

* docs: note onboarding provider adapters

* feat: add msteams onboarding adapter

* style: organize onboarding imports

* fix: normalize msteams allowFrom types

* feat: add plugin text chunk limits

* refactor: use plugin chunk limit fallbacks

* feat: add provider mention stripping hooks

* style: organize provider plugin type imports

* refactor: generalize health snapshots

* refactor: update macOS health snapshot handling

* docs: refresh health snapshot notes

* style: format health snapshot updates

* refactor: drive security warnings via plugins

* docs: note provider security adapter

* style: format provider security adapters

* refactor: centralize provider account defaults

* refactor: type gateway client identity constants

* chore: regen gateway protocol swift

* fix: degrade health on failed provider probe

* refactor: centralize pairing approve hint

* docs: add plugin CLI command references

* refactor: route auth and tool sends through plugins

* docs: expand provider plugin hooks

* refactor: document provider docking touchpoints

* refactor: normalize internal provider defaults

* refactor: streamline outbound delivery wiring

* refactor: make provider onboarding plugin-owned

* refactor: support provider-owned agent tools

* refactor: move telegram draft chunking into telegram module

* refactor: infer provider tool sends via extractToolSend

* fix: repair plugin onboarding imports

* refactor: de-dup outbound target normalization

* style: tidy plugin and agent imports

* refactor: data-drive provider selection line

* fix: satisfy lint after provider plugin rebase

* test: deflake gateway-cli coverage

* style: format gateway-cli coverage test

* refactor(provider-plugins): simplify provider ids

* test(pairing-cli): avoid provider-specific ternary

* style(macos): swiftformat HealthStore

* refactor(sandbox): derive provider tool denylist

* fix(sandbox): avoid plugin init in defaults

* refactor(provider-plugins): centralize provider aliases

* style(test): satisfy biome

* refactor(protocol): v3 providers.status maps

* refactor(ui): adapt to protocol v3

* refactor(macos): adapt to protocol v3

* test: update providers.status v3 fixtures

* refactor(gateway): map provider runtime snapshot

* test(gateway): update reload runtime snapshot

* refactor(whatsapp): normalize heartbeat provider id

* docs(refactor): update provider plugin notes

* style: satisfy biome after rebase

* fix: describe sandboxed elevated in prompt

* feat(gateway): add agent image attachments + live probe

* refactor: derive CLI provider options from plugins

* fix(gateway): harden agent provider routing

* fix(gateway): harden agent provider routing

* refactor: align provider ids for schema

* fix(protocol): keep agent provider string

* fix(gateway): harden agent provider routing

* fix(protocol): keep agent provider string

* refactor: normalize agent delivery targets

* refactor: support provider-owned agent tools

* refactor(config): provider-keyed elevated allowFrom

* style: satisfy biome

* fix(gateway): appease provider narrowing

* style: satisfy biome

* refactor(reply): move group intro hints into plugin

* fix(reply): avoid plugin registry init cycle

* refactor(providers): add lightweight provider dock

* refactor(gateway): use typed client id in connect

* refactor(providers): document docks and avoid init cycles

* refactor(providers): make media limit helper generic

* fix(providers): break plugin registry import cycles

* style: satisfy biome

* refactor(status-all): build providers table from plugins

* refactor(gateway): delegate web login to provider plugin

* refactor(provider): drop web alias

* refactor(provider): lazy-load monitors

* style: satisfy lint/format

* style: format status-all providers table

* style: swiftformat gateway discovery model

* test: make reload plan plugin-driven

* fix: avoid token stringification in status-all

* refactor: make provider IDs explicit in status

* feat: warn on signal/imessage provider runtime errors

* test: cover gateway provider runtime warnings in status

* fix: add runtime kind to provider status issues

* test: cover health degradation on probe failure

* fix: keep routeReply lightweight

* style: organize routeReply imports

* refactor(web): extract auth-store helpers

* refactor(whatsapp): lazy login imports

* refactor(outbound): route replies via plugin outbound

* docs: update provider plugin notes

* style: format provider status issues

* fix: make sandbox scope warning wrap-safe

* refactor: load outbound adapters from provider plugins

* docs: update provider plugin outbound notes

* style(macos): fix swiftformat lint

* docs: changelog for provider plugins

* fix(macos): satisfy swiftformat

* fix(macos): open settings via menu action

* style: format after rebase

* fix(macos): open Settings via menu action

---------

Co-authored-by: LK <luke@kyohere.com>
Co-authored-by: Luke K (pr-0f3t) <2609441+lc0rp@users.noreply.github.com>
Co-authored-by: Xin <xin@imfing.com>
2026-01-11 11:45:25 +00:00
Peter Steinberger
c604052341 fix: update heartbeat prompt 2026-01-11 11:35:52 +00:00
Peter Steinberger
97b40deb1e fix: add compaction headroom for memory writes 2026-01-11 11:25:15 +00:00
Peter Steinberger
3f12392784 test: skip codex refresh token reuse 2026-01-11 11:24:25 +00:00
Peter Steinberger
0afdb82c7b fix: route subagent transcripts and keep tool action enums (#708) (thanks @xMikeMickelson) 2026-01-11 11:19:38 +00:00
user
3892ed8bc2 fix(agent): use session key agentId for transcript path
Cross-agent subagent spawns wrote transcripts to the spawner's agent
directory instead of the target agent's directory. For example, when
main spawned a codex subagent with session key agent:codex:subagent:...,
the transcript went to agents/main/sessions/ instead of agents/codex/sessions/.

Pass sessionAgentId to resolveSessionFilePath so transcripts are written
to the correct agent's session directory.
2026-01-11 11:11:43 +00:00
Peter Steinberger
a817e60a9e test: cover messaging tool error fallback (#717) 2026-01-11 11:10:03 +00:00
Chris Taylor
fce5f90c2f fix(message-tool): strip reply/media tags from content in send/thread-reply actions 2026-01-11 11:04:07 +00:00
Chris Taylor
f119423b15 Agents: harden message tool sends 2026-01-11 11:04:07 +00:00
Peter Steinberger
5710cdd2de test: cover cron cli model overrides 2026-01-11 10:56:46 +00:00
Peter Steinberger
6104deb3ad style: format cleanup commands 2026-01-11 10:54:33 +00:00
Peter Steinberger
f6ddac430d Merge pull request #711 from mjrussell/feat/cron-model-override
feat(cron): add --model flag to cron add/edit commands
2026-01-11 10:53:42 +00:00
Peter Steinberger
85cee249de fix: trim cron model overrides and doc guidance (#711) (thanks @mjrussell) 2026-01-11 10:52:40 +00:00
Matthew Russell
8bb2b816f5 feat(cron): add --model flag to cron add/edit commands
Expose the existing model override capability via CLI flags:
- Add --model to cron add and cron edit commands
- Document model and thinking overrides in cron-jobs.md
- Add CLI example showing model/thinking usage

The backend already supported model in agentTurn payloads;
this change exposes it through the CLI interface.
2026-01-11 10:49:34 +00:00
Peter Steinberger
4f5ac4466f test: extend discord tool-result timeout 2026-01-11 10:48:49 +00:00
Peter Steinberger
287b818671 fix: add update env regression test (#713) (thanks @danielz1z) 2026-01-11 10:48:46 +00:00
danielz1z
4bb1d7d470 fix(update): merge custom env with process.env in spawn
When the update runner passes custom env vars (like CLAWDBOT_UPDATE_IN_PROGRESS),
the current code uses `env ?? process.env` which replaces the entire environment
instead of merging — losing PATH, HOME, etc.

This causes the doctor step to fail with 'node: No such file or directory'.

Fix: merge custom env with process.env instead of replacing it.
2026-01-11 10:39:07 +00:00
Peter Steinberger
ec765e14a9 style: biome fixes 2026-01-11 10:35:16 +00:00
Peter Steinberger
7a9727b6d6 feat: add reset/uninstall commands 2026-01-11 10:23:52 +00:00
Peter Steinberger
472b4fdfc8 test(live): harden gateway probes 2026-01-11 04:46:30 +00:00
Peter Steinberger
78ba5d492b fix(agents): sanitize transcripts for strict tool APIs 2026-01-11 04:46:18 +00:00
Peter Steinberger
dbaa996691 fix(testing): stabilize live model runs 2026-01-11 04:22:35 +00:00
Peter Steinberger
566f7f2713 feat: add onboard reset option 2026-01-11 05:04:36 +01:00
Peter Steinberger
0fb2bf622d fix: clarify sub-agent sandbox limits 2026-01-11 05:04:14 +01:00
Peter Steinberger
56c94e0ee9 style: add blank line after note imports 2026-01-11 05:01:50 +01:00
Peter Steinberger
4e48758d87 fix: restore ZAI provider preference 2026-01-11 04:58:37 +01:00
Peter Steinberger
cffd9c7568 style: fix note import spacing 2026-01-11 04:54:19 +01:00
Peter Steinberger
9b627dc34e fix: skip tool-only reasoning replay 2026-01-11 04:52:16 +01:00
Peter Steinberger
e19d58262f test: stabilize doctor + sandbox tests 2026-01-11 04:45:04 +01:00
Peter Steinberger
65f72e527d chore: keep gate green 2026-01-11 04:42:44 +01:00
Peter Steinberger
779b9de2e1 chore: format sandbox skills test 2026-01-11 04:39:42 +01:00
Peter Steinberger
128fe38996 fix: stabilize notes and reasoning replay 2026-01-11 04:37:06 +01:00
Peter Steinberger
1b6811699d fix: clamp z.ai developer role 2026-01-11 04:28:30 +01:00
Peter Steinberger
38b06bca21 fix: mirror skills for read-only sandbox 2026-01-11 04:24:19 +01:00
Peter Steinberger
6515bf7821 fix: wrap clack notes for cleaner boxes 2026-01-11 04:23:43 +01:00
Peter Steinberger
2bf2b5d0aa test: cover whoami command 2026-01-11 04:20:34 +01:00
Peter Steinberger
c8e94f3a0c fix: tighten WhatsApp ack reactions and migrate config (#629) (thanks @pasogott) 2026-01-11 04:11:04 +01:00
sheeek
9d894fdfdd fix: remove any casts in backward compat code 2026-01-11 04:10:43 +01:00
sheeek
062a07704b style: fix biome linting in ack-reaction tests 2026-01-11 04:10:43 +01:00
sheeek
dd184d33fb feat(whatsapp): redesign ack-reaction as whatsapp-specific feature
- Move config from messages.ackReaction to whatsapp.ackReaction
- New structure: {emoji, direct, group} with granular control
- Support per-account overrides in whatsapp.accounts.*.ackReaction
- Add Zod schema validation for new config
- Maintain backward compatibility with old messages.ackReaction format
- Update tests to new config structure (14 tests, all passing)
- Add comprehensive documentation in docs/providers/whatsapp.md
- Timing: reactions sent immediately upon message receipt (before bot reply)

Breaking changes:
- Config moved from messages.ackReaction to whatsapp.ackReaction
- Scope values changed: 'all'/'direct'/'group-all'/'group-mentions'
  → direct: boolean + group: 'always'/'mentions'/'never'
- Old config still supported via fallback for smooth migration
2026-01-11 04:10:43 +01:00
sheeek
8eaa36ec8c chore: fix linting issues in ack-reaction feature
- Remove unused mock variables in tests
- Remove unused ackReactionScope variables in simple test cases
- Fix line length for ackReactionScope declaration
- All lint checks passing (0 warnings, 0 errors)
- All tests passing (8/8)
2026-01-11 04:10:43 +01:00
sheeek
b201429d45 fix(whatsapp): ack reaction logic for group activation 'always' mode
- Fix bug where ack reaction was not sent when group activation is 'always'
- When requireMention=false (activation: always), always send reaction
- Add test case for activation='always' scenario
- Update inline comments for clarity
2026-01-11 04:10:43 +01:00
sheeek
b7fb62f639 feat(whatsapp): add ack reaction support after successful replies
- Add automatic emoji reactions on inbound WhatsApp messages
- Support all ackReactionScope modes: all, direct, group-all, group-mentions
- Reaction is sent AFTER successful reply (unlike Telegram/Discord)
- Errors are logged with proper context
- Add comprehensive test suite for ack reaction logic

Config usage:
  messages:
    ackReaction: "👀"
    ackReactionScope: "group-mentions"  # default

Closes: WhatsApp ack-reaction feature request
2026-01-11 04:10:42 +01:00
Peter Steinberger
80da2b097e style: format onboard providers 2026-01-11 04:08:26 +01:00
Peter Steinberger
7c133591e8 fix: improve telegram configuration safety 2026-01-11 03:57:52 +01:00
Peter Steinberger
cbb47c60b5 fix(gateway): show connect vs RPC status 2026-01-11 03:57:52 +01:00
Peter Steinberger
071bcd7ec5 fix: send heartbeat reasoning (#694) (thanks @antons) 2026-01-11 03:51:51 +01:00
Peter Steinberger
ffeda4e7b7 fix: improve provider issue formatting 2026-01-11 03:51:51 +01:00
Anton Sotkov
649f4d22b2 fix: deliver reasoning alongside HEARTBEAT_OK 2026-01-11 03:51:51 +01:00
Anton Sotkov
64f66ecc25 fix: persist reasoning across session resets 2026-01-11 03:51:51 +01:00
Peter Steinberger
59ee336078 test: cover docker setup env plumbing 2026-01-11 03:45:45 +01:00
Peter Steinberger
c62e120de8 fix(status): simplify footer guidance 2026-01-11 03:44:28 +01:00
Peter Steinberger
cb5b247779 Merge pull request #703 from mteam88/openrouter-auth-config
Openrouter auth config (AI)
2026-01-11 02:44:24 +00:00
Peter Steinberger
4a1789e68f fix: stabilize onboarding auth tests (#703) (thanks @mteam88) 2026-01-11 03:42:27 +01:00
Matthew
35622f9665 chore: format OpenRouter auth edits 2026-01-11 03:35:45 +01:00
Matthew
2e94170f5c CLI: reuse OpenRouter credentials 2026-01-11 03:35:45 +01:00
Matthew
e4bcfbf923 CLI: add OpenRouter auth choice 2026-01-11 03:35:45 +01:00
Peter Steinberger
ac7fcf3d5e docs(status): make status first-step 2026-01-11 03:34:33 +01:00
Peter Steinberger
a8c6551580 fix: stabilize live probes and docs 2026-01-11 02:26:39 +00:00
Peter Steinberger
f9a6adb00a fix(agents): enforce single-writer session files 2026-01-11 02:25:45 +00:00
Peter Steinberger
842d1854d0 fix: stabilize cli runner output 2026-01-11 02:25:45 +00:00
Peter Steinberger
d4f96cd6e2 fix: reset unsigned launchd overrides (#695) (thanks @jeffersonwarrior) 2026-01-11 03:19:24 +01:00
Peter Steinberger
f310bb2777 fix: guard update spinner output (#701) (thanks @bjesuiter) 2026-01-11 03:03:09 +01:00
Benjamin Jesuiter
a43d5e9a04 fix(update): use git status --porcelain for dirty check cross-platform 2026-01-11 03:00:43 +01:00