Peter Steinberger
40fb59e5f7
refactor(live-tests): stabilize docker live suites
2026-01-14 09:52:39 +00:00
Peter Steinberger
e2f8909982
refactor(agents): split tools + PI subscribe
2026-01-14 05:39:59 +00:00
Peter Steinberger
a44f1912b3
chore(repo): drop .DS_Store
2026-01-14 01:17:56 +00:00
Peter Steinberger
bcbfb357be
refactor(src): split oversized modules
2026-01-14 01:17:56 +00:00
Peter Steinberger
b071f73fef
fix: resume subagent registry safely ( #831 ) (thanks @roshanasingh4)
2026-01-13 10:10:15 +00:00
Roshan Singh
714de9d996
Persist subagent registry across restarts
2026-01-13 10:00:30 +00:00
Peter Steinberger
90342a4f3a
refactor!: rename chat providers to channels
2026-01-13 08:40:39 +00:00
Peter Steinberger
e8779ac329
fix: handle Anthropic overloaded_error gracefully ( #832 ) (thanks @danielz1z)
2026-01-13 08:32:06 +00:00
danielz1z
36725ce153
fix: handle Anthropic overloaded_error gracefully
...
When Anthropic's API returns an overloaded_error (temporary capacity issue),
the raw JSON error was being sent to users instead of a friendly message.
Changes:
- Add overloaded error pattern detection
- Return user-friendly message for overloaded errors
- Classify overloaded as failover-worthy (triggers retry logic)
2026-01-13 08:18:59 +00:00
Peter Steinberger
f825dd2897
chore(lint): format live profiles test
2026-01-13 08:03:58 +00:00
Peter Steinberger
9faa95d558
fix: recover from compaction overflow
2026-01-13 08:03:11 +00:00
Peter Steinberger
9007920695
fix(auth): drop invalid auth profiles from order
2026-01-13 07:53:38 +00:00
Peter Steinberger
2887376646
test: stabilize gpt-5.2 tool-only live check
2026-01-13 07:51:24 +00:00
Peter Steinberger
ba7d12f205
refactor: centralize onboarding auth paths
2026-01-13 07:12:20 +00:00
Peter Steinberger
6db0201fcd
Merge pull request #583 from mitschabaude-bot/feat/agent-model-fallbacks
...
Config: per-agent model fallbacks
2026-01-13 06:54:00 +00:00
Peter Steinberger
3368284b2a
fix: per-agent model fallbacks ( #583 ) (thanks @mitschabaude-bot)
2026-01-13 06:50:41 +00:00
Gregor's Bot
9c0c4f50ec
Agents: test per-agent model fallbacks override
2026-01-13 06:50:20 +00:00
Gregor's Bot
6729637f61
Config: support per-agent model fallbacks
2026-01-13 06:50:20 +00:00
Peter Steinberger
18d22aa426
fix: gate xhigh by model ( #444 ) (thanks @grp06)
2026-01-13 06:48:41 +00:00
George Pickett
a3641526ab
Thinking: gate xhigh by model
2026-01-13 06:48:26 +00:00
Peter Steinberger
f50e06a1b6
test(tools): cover tool policy helpers
2026-01-13 06:32:59 +00:00
Peter Steinberger
780a43711f
feat(tools): add tool profiles and group shorthands
2026-01-13 06:30:20 +00:00
Peter Steinberger
d682b604de
fix(tools): harden tool schemas for strict providers
2026-01-13 06:30:20 +00:00
Peter Steinberger
1fdd3592d3
fix: tune compaction safeguard schema ( #700 ) (thanks @thewilloftheshadow)
2026-01-13 05:58:35 +00:00
Shadow
a96d299971
Agents: safeguard compaction summarization
2026-01-13 05:55:30 +00:00
Peter Steinberger
61b7398cb7
refactor: centralize auth-choice model defaults
2026-01-13 05:25:16 +00:00
Jefferson Warrior
c851bdd47a
feat: add Tailscale binary detection, IP binding modes, and health probe password fix
...
This PR includes three main improvements:
1. Tailscale Binary Detection with Fallback Strategies
- Added findTailscaleBinary() with multi-strategy detection:
* PATH lookup via 'which' command
* Known macOS app path (/Applications/Tailscale.app/Contents/MacOS/Tailscale)
* find /Applications for Tailscale.app
* locate database lookup
- Added getTailscaleBinary() with caching
- Updated all Tailscale operations to use detected binary
- Added TUI warning when Tailscale binary not found for serve/funnel modes
2. Custom Gateway IP Binding with Fallback
- New bind mode "custom" allowing user-specified IP with fallback to 0.0.0.0
- Removed "tailnet" mode (folded into "auto")
- All modes now support graceful fallback: custom (if fail → 0.0.0.0), loopback (127.0.0.1 → 0.0.0.0), auto (tailnet → 0.0.0.0), lan (0.0.0.0)
- Added customBindHost config option for custom bind mode
- Added canBindTo() helper to test IP availability before binding
- Updated configure and onboarding wizards with new bind mode options
3. Health Probe Password Auth Fix
- Gateway probe now tries both new and old passwords
- Fixes issue where password change fails health check if gateway hasn't restarted yet
- Uses nextConfig password first, falls back to baseConfig password if needed
Files changed:
- src/infra/tailscale.ts: Binary detection + caching
- src/gateway/net.ts: IP binding with fallback logic
- src/config/types.ts: BridgeBindMode type + customBindHost field
- src/commands/configure.ts: Health probe dual-password try + Tailscale detection warning + bind mode UI
- src/wizard/onboarding.ts: Tailscale detection warning + bind mode UI
- src/gateway/server.ts: Use new resolveGatewayBindHost
- src/gateway/call.ts: Updated preferTailnet logic (removed "tailnet" mode)
- src/commands/onboard-types.ts: Updated GatewayBind type
- src/commands/onboard-helpers.ts: resolveControlUiLinks updated
- src/cli/*.ts: Updated bind mode casts
- src/gateway/call.test.ts: Removed "tailnet" mode test
2026-01-13 05:20:02 +00:00
Peter Steinberger
8d640ccc68
Merge pull request #726 from FrieSei/feature/chutes-oauth
...
Auth: add Chutes OAuth
2026-01-13 05:02:25 +00:00
Peter Steinberger
f566e6451f
fix: harden Chutes OAuth flow ( #726 ) (thanks @FrieSei)
2026-01-13 05:01:08 +00:00
Peter Steinberger
75a7855223
feat: cron ISO at + delete-after-run
2026-01-13 04:55:48 +00:00
Friederike Seiler
3271ff1d6e
Tests: clean chutes fetch spies
2026-01-13 04:50:27 +00:00
Friederike Seiler
0efcfc0864
Chores: fix chutes oauth build
2026-01-13 04:50:27 +00:00
Friederike Seiler
4efb5cc18e
Auth: add Chutes OAuth
2026-01-13 04:50:26 +00:00
Peter Steinberger
57db3f22a1
fix: clean lint in auth-choice + tests
2026-01-13 04:49:04 +00:00
Peter Steinberger
d4c205f8e1
fix: start typing on message start
2026-01-13 04:33:24 +00:00
Peter Steinberger
0ba60ff69c
Merge pull request #794 from roshanasingh4/fix/777-windows-openurl-quotes
...
Fix Antigravity OAuth login on Windows (quote URL for cmd start)
2026-01-13 04:28:11 +00:00
Peter Steinberger
755a7e1b20
feat: add configurable bootstrap truncation
2026-01-13 04:27:03 +00:00
Peter Steinberger
3061d8e057
fix: preserve Windows cmd start URL quoting ( #794 ) (thanks @roshanasingh4)
2026-01-13 04:26:43 +00:00
Peter Steinberger
ea5597b483
fix: restore implicit providers + copilot auth choice
2026-01-13 04:26:08 +00:00
Peter Steinberger
b41e75a15d
feat: cron agent binding + doctor UI refresh
2026-01-13 04:25:41 +00:00
meaningfool
f249a82383
fix: resolve CI failures (test timeout & formatting)
2026-01-13 04:25:41 +00:00
Peter Steinberger
1cf45f8439
Merge pull request #805 from marcmarg/fix/strip-thought-signatures
...
fix: strip thought_signature fields for cross-provider compatibility
2026-01-13 04:14:45 +00:00
Peter Steinberger
2a9ef806a0
fix: strip only msg_* thought_signature ( #805 ) (thanks @marcmarg)
2026-01-13 04:13:24 +00:00
Peter Steinberger
32115a8b98
test: expand auth fallback coverage
2026-01-13 04:12:16 +00:00
Marc
c4e8b60d2c
fix: strip thought_signature fields for cross-provider compatibility
...
Claude's extended thinking feature generates thought_signature fields
(message IDs like "msg_abc123...") in content blocks. When these are
sent to Google's Gemini API, it expects Base64-encoded bytes and
rejects Claude's format with a 400 error.
This commit adds stripThoughtSignatures() to remove these fields from
assistant message content blocks during sanitization, enabling session
histories to be shared across different providers (e.g., Claude → Gemini).
Fixes cross-provider session bug where switching from Claude-thinking
to Gemini (or vice versa) would fail with:
"Invalid value at 'thought_signature' (TYPE_BYTES), Base64 decoding failed"
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-13 04:11:02 +00:00
Peter Steinberger
2c2ca7f03b
fix: treat credential validation errors as auth errors ( #822 ) (thanks @sebslight)
2026-01-13 04:02:47 +00:00
Sebastian
c4014c0092
fix: treat credential validation failures as auth errors for fallback ( #761 )
2026-01-12 22:53:21 -05:00
Peter Steinberger
66ad8a9289
fix: apply lint fixes
2026-01-13 03:36:53 +00:00
Peter Steinberger
df6634727e
fix: refine synthetic provider + minimax probes
2026-01-13 03:36:53 +00:00
Travis Hinton
8b5cd97ceb
Add Synthetic provider support
2026-01-13 03:36:53 +00:00
Shadow
ab993904d7
Models: normalize Gemini 3 ids in runtime selection
...
Closes #795
2026-01-12 21:32:53 -06:00
Peter Steinberger
da0a062fa7
fix: memory search remote overrides ( #819 ) (thanks @mukhtharcm)
2026-01-13 03:11:03 +00:00
Muhammed Mukhthar CM
ba316a10cc
feat: add remote config overrides to memorySearch
2026-01-13 03:02:43 +00:00
Peter Steinberger
46a694bbc7
fix: preserve explicit maxChars=0 ( #796 ) (thanks @gabriel-trigo)
2026-01-13 02:33:38 +00:00
Gabriel Trigo
79a6506593
fix(browser): limit ai snapshot size
...
test(browser): cover ai snapshot limit
2026-01-13 02:33:38 +00:00
Peter Steinberger
8edf2146ae
fix: cleanup stale resume cli processes
2026-01-13 02:21:20 +00:00
Peter Steinberger
a27efd57bd
fix: drop null-only union variants ( #782 ) (thanks @AbhisekBasu1)
...
Co-authored-by: Abhi <AbhisekBasu1@users.noreply.github.com>
2026-01-13 01:58:30 +00:00
Abhi
ba1d80bd00
formatting fix
2026-01-13 01:48:56 +00:00
Abhi
4dfcd56893
Fix pi-tools test ordering and clean-for-gemini handling - which fixes the 400 error people are experiencing trying to use antigravity on opus
2026-01-13 01:48:34 +00:00
Peter Steinberger
ffc465394e
fix: enforce message context isolation
2026-01-13 01:19:14 +00:00
Peter Steinberger
0edbdb1948
fix: downgrade Gemini tool history
2026-01-13 01:19:13 +00:00
hsrvc
5dc187f00c
fix: accept Claude/Gemini tool param aliases
2026-01-13 01:19:13 +00:00
Peter Steinberger
c03a745f61
test: expand Minimax XML strip coverage
2026-01-13 00:43:59 +00:00
Peter Steinberger
48fdf3775d
test: cover user turn merging
2026-01-13 00:42:15 +00:00
Peter Steinberger
e2ea20f862
fix: gate minimax XML stripping ( #809 ) (thanks @latitudeki5223)
2026-01-13 00:36:39 +00:00
L36 Server
1eb924739b
style: fix import order in pi-embedded-utils.test.ts
2026-01-13 00:34:01 +00:00
L36 Server
350f956f2c
fix(minimax): strip tool invocation XML from assistant text
2026-01-13 00:34:01 +00:00
Peter Steinberger
6f75feaeb8
refactor: reuse model selection assertions
2026-01-13 00:20:08 +00:00
Peter Steinberger
3636a2bf51
refactor: unify message tool + CLI
2026-01-13 00:12:57 +00:00
Peter Steinberger
ce23c70855
fix: validate Anthropic turn order ( #804 ) (thanks @ThomsenDrake)
2026-01-12 23:43:25 +00:00
Drake Thomsen
c5fa757ef6
fix(agents): prevent Anthropic 400 'Incorrect role information' error
...
Add validateAnthropicTurns() to merge consecutive user messages that can
occur when steering messages are injected during streaming. This prevents
the API from rejecting requests due to improper role alternation.
Changes:
- Add validateAnthropicTurns() function in pi-embedded-helpers.ts
- Integrate validation into sanitization pipeline in pi-embedded-runner.ts
- Add user-friendly error message for role ordering errors
- Add comprehensive tests for the new validation function
2026-01-12 23:42:13 +00:00
Peter Steinberger
ca98f87b2f
chore: reinforce memory recall prompts
2026-01-12 23:29:56 +00:00
Peter Steinberger
72100ba3ab
refactor(sandbox): drop legacy memory shorthand
2026-01-12 22:59:36 +00:00
Peter Steinberger
e0c1f2fdc0
test(agents): avoid Copilot token fetch in image-tool tests
2026-01-12 22:19:02 +00:00
Peter Steinberger
d3eeddfc2f
chore: fix lint after rebase
2026-01-12 22:19:02 +00:00
Peter Steinberger
5bc4971432
chore: fix lint warnings
2026-01-12 22:07:39 +00:00
Peter Steinberger
256304037e
fix: keep Claude file_path aliases validated
2026-01-12 22:00:08 +00:00
Aaron Konyer
583fc4fb11
test(sandbox): add coverage for binds -v flag emission
2026-01-12 21:57:51 +00:00
Aaron Konyer
0b2b8c7c52
Add docker bind mounds for sandboxing
2026-01-12 21:57:51 +00:00
Peter Steinberger
2faf7cea93
feat(sandbox): add tool-policy groups
2026-01-12 21:51:49 +00:00
Peter Steinberger
490cb834e5
style: italicize reasoning output
2026-01-12 21:24:36 +00:00
Peter Steinberger
cd12ad8aab
fix(image): accept @-prefixed file paths
2026-01-12 20:53:16 +00:00
Peter Steinberger
36a02b3e67
fix(image): route MiniMax vision to VLM
2026-01-12 20:38:34 +00:00
Peter Steinberger
55aeb8a0d3
fix(image): drop temperature for OpenAI
2026-01-12 19:09:15 +00:00
Peter Steinberger
86ea00dc21
fix(tools): accept legacy bash tool calls
2026-01-12 19:09:15 +00:00
Peter Steinberger
a0a7e74a62
fix(models): preserve implicit vision models
2026-01-12 19:09:15 +00:00
Peter Steinberger
b1c3e38df0
refactor(models): share implicit providers
2026-01-12 18:46:40 +00:00
Peter Steinberger
0be62c3542
fix(image): fail over on empty output
2026-01-12 18:46:16 +00:00
Peter Steinberger
1baf9f6a83
fix(image): normalize mime type handling
2026-01-12 18:24:11 +00:00
Peter Steinberger
77b20377cc
fix: stabilize session tools and tests
2026-01-12 18:21:20 +00:00
Peter Steinberger
3ffb9a3b5e
fix: keep session sanitizer stable
2026-01-12 18:19:30 +00:00
Peter Steinberger
29807119d5
chore: format tool guard files
2026-01-12 18:19:30 +00:00
Peter Steinberger
b88ea39b83
fix: add subagent default model typing
2026-01-12 18:18:15 +00:00
Peter Steinberger
0a2dcd844b
fix(image): support data URLs
2026-01-12 18:17:43 +00:00
Peter Steinberger
2ed95634fe
fix: relax image tool agentDir guard
2026-01-12 18:12:51 +00:00
Peter Steinberger
7b93356fb7
feat: subagent model defaults
2026-01-12 18:08:30 +00:00
Peter Steinberger
17ff25bd20
fix(sandbox): always allow image tool
2026-01-12 18:07:34 +00:00
Peter Steinberger
d24de1ec3b
feat(sandbox): allow image tool
2026-01-12 17:56:51 +00:00
Peter Steinberger
44e1f271c8
fix: keep image sanitizer scoped
2026-01-12 17:55:45 +00:00
Peter Steinberger
8ff09f8337
feat(image): auto-pair image model
2026-01-12 17:50:47 +00:00
Peter Steinberger
e91aa0657e
fix: add copilot tests and lint fixes
2026-01-12 17:48:08 +00:00
Peter Steinberger
eeca541dde
feat(browser): expand browser control surface
2026-01-12 17:32:44 +00:00
Peter Steinberger
f5d5661adf
fix: guard session tool results
2026-01-12 17:28:46 +00:00
Peter Steinberger
355c13564c
fix: restore heartbeat defaults and model listing
2026-01-12 17:17:54 +00:00
Peter Steinberger
f1dd59bf82
test: update heartbeat and agent list thresholds
2026-01-12 17:14:04 +00:00
Peter Steinberger
fd1e959c2d
fix: clean up models-config provider normalization
2026-01-12 17:14:04 +00:00
Peter Steinberger
05ac67c520
refactor: split models-config provider helpers
2026-01-12 17:05:53 +00:00
Peter Steinberger
f5ee2b3a4f
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
8afdf75e2b
fix: honor copilot config and profiles ( #705 ) (thanks @TAGOOZ)
2026-01-12 16:55:47 +00:00
Peter Steinberger
5a3eb5ad62
test: cover models.json apiKey fill
2026-01-12 16:52:43 +00:00
Peter Steinberger
79beb20ba2
fix: make models.json generation fill apiKey
2026-01-12 16:52:43 +00:00
Mustafa Tag Eldeen
3da1afed68
feat: add GitHub Copilot provider
...
Copilot device login + onboarding option; model list auth detection.
2026-01-12 16:52:15 +00:00
Peter Steinberger
bf11a42c37
feat: add memory vector search
2026-01-12 11:23:44 +00:00
Peter Steinberger
3c7a8579ad
test: cover minimax env provider injection
2026-01-12 11:05:08 +00:00
Peter Steinberger
f5a9421b10
fix: auto-add minimax provider from auth
2026-01-12 11:05:08 +00:00
Peter Steinberger
fadad6e061
feat: role snapshot refs for browser
2026-01-12 08:55:02 +00:00
Peter Steinberger
6711eaf8a5
fix: finalize tool param aliasing ( #768 ) (thanks @hsrvc)
2026-01-12 08:49:11 +00:00
hsrvc
71fdc829e6
Agents: add Claude Code parameter aliasing for read/write/edit tools
2026-01-12 08:49:11 +00:00
Peter Steinberger
252841ab13
fix: enforce final tag gating ( #754 ) (thanks @mcinteerj)
2026-01-12 08:45:23 +00:00
Keith the Silly Goose
a7cb270999
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
efdf874407
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
60823fd9bd
feat(model): fuzzy /model matching
2026-01-12 07:57:53 +00:00
Peter Steinberger
484a33f348
fix: cap ai snapshots for tool calls ( #763 ) (thanks @thesash)
2026-01-12 07:40:34 +00:00
Sash Catanzarite
d5d8c01dc7
Browser: cap AI snapshots to avoid context overflow
2026-01-12 07:40:34 +00:00
Peter Steinberger
f00667ea25
fix: clean up lint + guardCancel typing
2026-01-12 07:07:27 +00:00
Peter Steinberger
1850013cae
fix: modernize live tests and gemini ids
2026-01-12 07:05:33 +00:00
Peter Steinberger
496bad8b98
feat: add Moonshot auth choice
2026-01-12 06:48:06 +00:00
Peter Steinberger
46a6d79784
fix: sender fallback for command auth ( #755 ) (thanks @juanpablodlc)
2026-01-12 06:28:53 +00:00
Peter Steinberger
e388334127
test: cover pi session jsonl ordering
2026-01-12 06:19:58 +00:00
Peter Steinberger
2da2057a37
feat(model): add /model picker
2026-01-12 06:02:39 +00:00
Peter Steinberger
7dbb21be8e
feat: add pre-compaction memory flush
2026-01-12 05:29:18 +00:00
Peter Steinberger
cc8a2457c0
fix: persist first Pi user message in JSONL
2026-01-12 05:18:05 +00:00
Peter Steinberger
87f270df23
test: respect openai max tokens floor
2026-01-12 04:04:04 +00:00
Peter Steinberger
8b4bdaa8a4
feat: add apply_patch tool (exec-gated)
2026-01-12 03:42:56 +00:00
Peter Steinberger
1fa7a587d6
fix: flush block reply buffers on tool boundaries ( #750 ) (thanks @sebslight)
2026-01-12 02:54:57 +00:00
The Admiral
c64bcd047b
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
17e6354383
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
Peter Steinberger
98337a14b3
fix: rename bash tool to exec ( #748 ) (thanks @myfunc)
2026-01-12 02:49:55 +00:00
Peter Steinberger
76c8fc8697
fix(sandbox): canonicalize agent main alias
2026-01-12 02:23:02 +00:00
myfunc
b33bd6aaeb
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
2941a7002d
fix(subagents): align wait timeout with run timeout
2026-01-12 02:06:43 +00:00
Peter Steinberger
28f97e6152
refactor(sandbox): normalize main session aliases
2026-01-12 01:37:56 +00:00
Peter Steinberger
58a12a757e
fix(sandbox): avoid sandboxing main DM sessions
2026-01-12 01:24:44 +00:00
Peter Steinberger
2f4a248314
feat: plugin system + voice-call
2026-01-12 01:16:39 +00:00
user
7d6f17d77f
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
0ed7ea698a
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
9c8967ef5d
style: biome fixes
2026-01-12 00:32:47 +00:00
Peter Steinberger
720b9dd116
fix: make codex keychain platform-aware
2026-01-12 00:32:47 +00:00
Peter Steinberger
67743325ee
fix: reset session after compaction overflow
2026-01-12 00:28:16 +00:00
Peter Steinberger
4b51c96e4e
fix: apply model extra params without overwriting stream ( #732 ) (thanks @peschee)
2026-01-12 00:03:48 +00:00
Peter Siska
d9960d83c1
style: fix formatting (biome)
2026-01-12 00:03:25 +00:00
Peter Siska
32affaee02
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
1f95d7fc8b
fix: read codex keychain credentials
2026-01-11 23:39:10 +00:00
Ayaan Zaidi
33aaccd1c3
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
a4385dc920
fix: skip dm history limit for non-dm sessions
2026-01-11 22:18:15 +05:30
Nicholas Spisak
d63eae528c
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
Marc Terns
23717c5036
test: add comprehensive per-DM override tests for all providers
2026-01-11 08:55:32 -06:00
Marc Terns
54abf4b0d7
feat: add per-DM history limit overrides
2026-01-11 08:53:50 -06:00
Marc Terns
ab9ea827a4
refactor: move dmHistoryLimit to provider-level config
2026-01-11 08:38:19 -06:00
Marc Terns
a005a97fef
feat: add configurable DM history limit
2026-01-11 08:21:14 -06:00
Peter Steinberger
cf0c72a557
feat: add plugin architecture
2026-01-11 12:11:12 +00:00
Peter Steinberger
7acd26a2fc
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
a3747b1ee3
fix: add compaction headroom for memory writes
2026-01-11 11:25:15 +00:00
Peter Steinberger
6b46217d19
fix: route subagent transcripts and keep tool action enums ( #708 ) (thanks @xMikeMickelson)
2026-01-11 11:19:38 +00:00
Peter Steinberger
580791088c
test: cover messaging tool error fallback ( #717 )
2026-01-11 11:10:03 +00:00
Chris Taylor
fb1fc5feee
fix(message-tool): strip reply/media tags from content in send/thread-reply actions
2026-01-11 11:04:07 +00:00
Chris Taylor
3da3e201de
Agents: harden message tool sends
2026-01-11 11:04:07 +00:00
Peter Steinberger
dbe156e881
fix(agents): sanitize transcripts for strict tool APIs
2026-01-11 04:46:18 +00:00
Peter Steinberger
f00038b383
fix(testing): stabilize live model runs
2026-01-11 04:22:35 +00:00
Peter Steinberger
9046296ed3
fix: clarify sub-agent sandbox limits
2026-01-11 05:04:14 +01:00
Peter Steinberger
30348e41c6
test: stabilize doctor + sandbox tests
2026-01-11 04:45:04 +01:00
Peter Steinberger
7343597075
chore: keep gate green
2026-01-11 04:42:44 +01:00
Peter Steinberger
50e62122bb
chore: format sandbox skills test
2026-01-11 04:39:42 +01:00
Peter Steinberger
57e6a9a762
fix: clamp z.ai developer role
2026-01-11 04:28:30 +01:00
Peter Steinberger
7660a78330
fix: mirror skills for read-only sandbox
2026-01-11 04:24:19 +01:00
Peter Steinberger
1f9b4e3af6
fix: send heartbeat reasoning ( #694 ) (thanks @antons)
2026-01-11 03:51:51 +01:00
Peter Steinberger
2b07a2a8ab
fix: stabilize onboarding auth tests ( #703 ) (thanks @mteam88)
2026-01-11 03:42:27 +01:00
Peter Steinberger
20b4e2b859
fix: stabilize live probes and docs
2026-01-11 02:26:39 +00:00
Peter Steinberger
6668805aca
fix(agents): enforce single-writer session files
2026-01-11 02:25:45 +00:00
Peter Steinberger
3a113b7752
fix: stabilize cli runner output
2026-01-11 02:25:45 +00:00
Peter Steinberger
4759633df1
fix(cli): keep build/lint green
2026-01-11 02:44:24 +01:00
Peter Steinberger
e824b3514b
fix(status): improve diagnostics and output
2026-01-11 02:42:24 +01:00
Peter Steinberger
02270abc87
feat: add codex cli backend
2026-01-11 01:39:30 +00:00
Peter Steinberger
a32021dc3e
fix: inject image paths for cli backends
2026-01-11 00:55:22 +00:00
Peter Steinberger
24c3ab6fe0
fix: unblock claude-cli live runs
2026-01-11 00:55:22 +00:00
Peter Steinberger
d8f1124d59
feat: add CLI backend fallback
2026-01-11 00:55:22 +00:00
Peter Steinberger
07be761779
feat: add sandbox browser control allowlists
2026-01-11 01:52:32 +01:00
Peter Steinberger
b339097179
style: format browser tool wiring
2026-01-11 01:34:45 +01:00
Peter Steinberger
326fb04d12
feat: add browser target selection for sandboxed agents
2026-01-11 01:31:56 +01:00
Shadow
c731a87d07
Discord: add fetch message action
2026-01-10 16:38:20 -06:00
Peter Steinberger
4d0e74ab6c
fix: cover extra thinking tags ( #688 ) (thanks @theglove44)
2026-01-10 23:23:23 +01:00
Chris Taylor
a580639abf
fix(agents): strip <thought> and <antthinking> tags from output
2026-01-10 23:19:58 +01:00
Peter Steinberger
494743a4e5
feat: run doctor after restart
2026-01-10 23:14:55 +01:00
Jonathan Wilkins
0afa370869
fix: add 'usage limit' to rate limit detection patterns
...
OpenAI/ChatGPT returns "You have hit your ChatGPT usage limit (plus plan)"
when users exceed their plan quota. This error wasn't being recognized as a
rate limit, so fallback to alternative models wasn't triggering.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 23:11:06 +01:00
Peter Steinberger
08cc8f2281
refactor(agents): extract transcript repair module
2026-01-10 22:07:25 +00:00
Peter Steinberger
98377c7c6b
fix(agents): harden tool transcript repair
2026-01-10 21:45:15 +00:00
Peter Steinberger
805a29252e
test: add setup-token live smoke
2026-01-10 21:45:15 +00:00
Peter Steinberger
050c1c5391
fix(agents): include reasoningLevel in compaction params
2026-01-10 22:39:06 +01:00
Peter Steinberger
6d70524aa8
fix: add reasoning visibility hint
2026-01-10 22:24:22 +01:00
Peter Steinberger
aa30995aa1
test(live): add provider filters + google skip rules
2026-01-10 21:16:59 +00:00
Peter Steinberger
ab314a22e0
chore: refresh pi-ai patch repro note
2026-01-10 20:55:57 +00:00
Peter Steinberger
b9b1bc2726
test: relax reasoning replay expectations
2026-01-10 21:43:52 +01:00
Peter Steinberger
8a194b4abc
fix: align opencode-zen provider setup
2026-01-10 21:38:18 +01:00
Peter Steinberger
46e00ad5e7
fix: describe sandboxed elevated in prompt
2026-01-10 21:37:15 +01:00
Peter Steinberger
3389231ecb
feat(doctor): offer update first
2026-01-10 21:34:59 +01:00
Peter Steinberger
d772ff06c8
test: update openai responses reasoning replay
2026-01-10 21:20:26 +01:00
Peter Steinberger
cf192f8551
style: biome format
2026-01-10 19:47:17 +00:00
Peter Steinberger
d44bb41d27
fix: replay OpenAI reasoning for tool calls
2026-01-10 19:46:13 +00:00
Peter Steinberger
fa346d7b78
fix: accept Z_AI_API_KEY for zai
2026-01-10 19:46:13 +00:00
Peter Steinberger
9f9098406c
feat(sandbox): add sandbox explain inspector
2026-01-10 20:28:43 +01:00
Peter Steinberger
212b13b099
fix: repair tool-use history for anthropic
2026-01-10 19:15:57 +00:00
cristip73
c4e76eb635
fix: enable image attachments in chat messages for Claude API
...
Images were previously converted to markdown data URLs which Claude API
treats as plain text, not as actual images.
Changes:
- Add parseMessageWithAttachments() that returns {message, images[]}
- Pass images through the stack to session.prompt() as content blocks
- Filter null/empty attachments before parsing
- Strip data URL prefix if client sends it
This enables iOS and other clients to send images that Claude can actually see.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 20:00:25 +01:00
Peter Steinberger
8c1d39064d
test: adjust tool id sanitization
2026-01-10 18:15:15 +00:00
Peter Steinberger
7c925aa5a0
style: format helper
2026-01-10 18:15:15 +00:00
Peter Steinberger
651a9e9be4
fix: restore minimax tool calling
2026-01-10 18:15:15 +00:00
Peter Steinberger
2d105d16f8
fix(opencode-zen): keep legacy aliases + rationale ( #669 ) (thanks @magimetal)
2026-01-10 18:25:43 +01:00
Magi Metal
738269eb74
feat(opencode-zen): update models with sensible defaults
...
- Replace model catalog with 11 current models: gpt-5.1-codex, claude-opus-4-5,
gemini-3-pro, alpha-glm-4.7, gpt-5.1-codex-mini, gpt-5.1, glm-4.7-free,
gemini-3-flash, gpt-5.1-codex-max, minimax-m2.1-free, gpt-5.2
- Add accurate per-token costs from OpenCode Zen pricing
- Add accurate context windows and output limits
- Update aliases for new model families (codex, glm, minimax)
- Remove deprecated models (sonnet, haiku, o-series, gemini-2.5)
2026-01-10 18:22:26 +01:00
Peter Steinberger
0d98e93253
fix: harden cloud code assist tool schema sanitizing ( #665 ) (thanks @sebslight)
2026-01-10 18:07:26 +01:00
Sebastian Barrios
64babcac7a
fix(agents): harden Cloud Code Assist compatibility
...
- Expand schema scrubber to strip additional constraint keywords rejected
by Cloud Code Assist (examples, minLength, maxLength, minimum, maximum,
multipleOf, pattern, format, minItems, maxItems, uniqueItems,
minProperties, maxProperties)
- Extend tool call ID sanitization to cover toolUse and toolCall block
types (previously only functionCall was sanitized)
- Update pi-tools test to include 'examples' in unsupported keywords
Fixes 400 errors when using google-antigravity/claude-opus-4-5-thinking:
- tools.N.custom.input_schema: JSON schema is invalid
- messages.N.content.N.tool_use.id: String should match pattern
2026-01-10 18:06:35 +01:00
Peter Steinberger
ef08c3f038
fix(agents): stabilize cli creds cache + bash cwd
2026-01-10 18:02:21 +01:00
Peter Steinberger
60bf349201
fix(sessions): lock store saves; wait for bash close
2026-01-10 17:47:12 +01:00
Peter Steinberger
a54706a063
fix: throttle cli credential sync
2026-01-10 17:44:03 +01:00
Peter Steinberger
e2ea02160d
test: add workspace path regressions
2026-01-10 17:28:43 +01:00
Peter Steinberger
84d64f9395
Merge pull request #446 from tony-freedomology/feat/human-delay
...
feat(agent): add human-like delay between block replies
2026-01-10 16:16:52 +00:00
Lloyd
ab994d2c63
feat(agent): add human-like delay between block replies
...
Adds `agent.humanDelay` config option to create natural rhythm between
streamed message bubbles. When enabled, introduces a random delay
(default 800-2500ms) between block replies, making multi-message
responses feel more like natural human texting.
Config example:
```json
{
"agent": {
"blockStreamingDefault": "on",
"humanDelay": {
"enabled": true,
"minMs": 800,
"maxMs": 2500
}
}
}
```
- First message sends immediately
- Subsequent messages wait a random delay before sending
- Works with iMessage, Signal, and Discord providers
🤖 Generated with [Claude Code](https://claude.com/claude-code )
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 17:12:50 +01:00
Muhammed Mukhthar CM
de5b75eff6
fix(tools): resolve Read/Write/Edit paths against workspace directory
...
Previously, Read/Write/Edit tools used the global tool instances from
pi-coding-agent which had process.cwd() baked in at import time. Since
the gateway starts from /root/dev/ai/clawdbot, relative paths like
'SOUL.md' would incorrectly resolve there instead of the agent's
workspace (/root/clawd).
This fix:
- Adds workspaceDir option to createClawdbotCodingTools
- Creates fresh Read/Write/Edit tools bound to workspaceDir
- Adds cwd option to Bash tool defaults for consistency
- Passes effectiveWorkspace from pi-embedded-runner
Absolute paths and ~/... paths are unaffected. Sandboxed sessions
continue to use sandbox root as before.
Includes tests for Read/Write/Edit workspace path resolution.
2026-01-10 17:08:56 +01:00
Peter Steinberger
8978ac425e
fix: harden cli credential sync
2026-01-10 16:37:54 +01:00
Peter Steinberger
8b47368167
fix: harden cli credential sync
2026-01-10 16:25:40 +01:00
Peter Steinberger
43b530ca1c
fix(agents): suppress partial replies with reasoning
2026-01-10 16:03:17 +01:00
Peter Steinberger
70c1732dd1
refactor: centralize messaging dedupe helpers
2026-01-10 16:02:56 +01:00
Peter Steinberger
5a93447294
fix: prevent claude-cli oauth downgrade ( #654 ) (thanks @radek-paclt)
2026-01-10 15:50:25 +01:00
Radek Paclt
a39951d463
fix(auth): enable OAuth refresh for Claude CLI credentials
...
When Claude CLI credentials (anthropic:claude-cli) expire, automatically
refresh using the stored refresh token instead of failing with
"No credentials found" error.
Changes:
- Read refreshToken from Claude CLI and store as OAuth credential type
- Implement bidirectional sync: after refresh, write new tokens back to
Claude Code storage (file on Linux/Windows, Keychain on macOS)
- Prefer OAuth over Token credentials (enables auto-refresh capability)
- Maintain backward compatibility for credentials without refreshToken
This enables long-running agents to operate autonomously without manual
re-authentication when OAuth tokens expire.
Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-10 15:40:27 +01:00
Peter Steinberger
1281c1d155
Merge pull request #655 from antons/fix/reasoning-imsg
...
Fix reasoning in iMessage
2026-01-10 14:39:14 +00:00
Peter Steinberger
236f8560b3
fix: reasoning iMessage sessions + final reply ( #655 ) (thanks @antons)
2026-01-10 15:31:57 +01:00
Peter Steinberger
4d146ea2f5
fix: dedupe message tool replies ( #659 ) (thanks @mickahouan)
2026-01-10 15:28:13 +01:00
Anton Sotkov
3b5149ca39
fix: send only final answer with reasoning
...
When reasoning is enabled on non‑block providers, we now ignore interim streaming chunks and send only the final assistant answer at completion, so replies aren’t partial or duplicated.
2026-01-10 15:28:04 +01:00
Mickaël Ahouansou
d01e06f09a
Fix: dedupe message tool sends
2026-01-10 15:25:20 +01:00
Peter Steinberger
cdb915d527
chore: normalize Clawdbot naming
2026-01-10 05:14:09 +01:00
Peter Steinberger
6274adce3a
fix(tools): keep canonical tool names for oauth
2026-01-10 04:18:00 +01:00
Peter Steinberger
cc1c5f800f
fix(tools): harden schemas and oauth tool names
2026-01-10 03:05:56 +00:00
Peter Steinberger
8466e53b5d
fix: restore Anthropic OAuth tool dispatch
2026-01-10 04:01:00 +01:00
Peter Steinberger
2dc7872ad1
feat: auto-start sandbox browser
2026-01-10 02:06:21 +00:00
Peter Steinberger
f28a4a34ad
refactor: unify inline directives and media fetch
2026-01-10 03:01:04 +01:00
Peter Steinberger
a29f5dda2e
test(live): gateway smoke across profile-key models
2026-01-10 01:09:41 +00:00
Peter Steinberger
623d1e11f1
refactor: centralize session agent resolution
2026-01-10 01:57:54 +01:00
Peter Steinberger
f4b3869f45
Merge pull request #490 from jarvis-medmatic/feat/audio-as-voice-tag
...
feat(telegram): `[[audio_as_voice]]` tag support
2026-01-10 00:52:02 +00:00
Peter Steinberger
c56b2f4bc1
fix: honor audio_as_voice streaming + parse tests ( #490 ) (thanks @jarvis-medmatic)
2026-01-10 01:50:33 +01:00
Peter Steinberger
cb10682d3e
fix(openai): avoid invalid reasoning replay
2026-01-10 00:45:10 +00:00
Jarvis
5fedfd8d15
chore: format audioAsVoice updates
...
Co-authored-by: Manuel Hettich <17690367+ManuelHettich@users.noreply.github.com>
2026-01-10 01:44:57 +01:00
Jarvis
8c7d1781bc
fix(pi): preserve audio_as_voice tag
...
- Allow flag-only chunks so audio_as_voice propagates
- Keep reply item scan aware of empty audio tag blocks
Co-authored-by: Manuel Hettich <17690367+ManuelHettich@users.noreply.github.com>
2026-01-10 01:43:51 +01:00
Jarvis
2f036f7173
fix(audio): preserve audioAsVoice propagation
...
- Keep audioAsVoice-only payloads from being filtered out
- Allow empty payloads through when they carry the flag
- Remove temporary debug logs around audioAsVoice buffering
Co-authored-by: Manuel Hettich <17690367+ManuelHettich@users.noreply.github.com>
2026-01-10 01:42:09 +01:00
Jarvis
05a99aa49b
feat(telegram): buffer audio blocks for [[audio_as_voice]] tag support
...
- Add [[audio_as_voice]] detection to splitMediaFromOutput()
- Pass audioAsVoice through onBlockReply callback chain
- Buffer audio blocks during streaming, flush at end with correct flag
- Non-audio media still streams immediately
- Fix: emit payloads with audioAsVoice flag even if text is empty
Co-authored-by: Manuel Hettich <17690367+ManuelHettich@users.noreply.github.com>
2026-01-10 01:41:18 +01:00
Peter Steinberger
43975a39dc
fix: gate heartbeat prompt to default agent sessions ( #630 ) (thanks @adam91holt)
2026-01-10 01:32:58 +01:00
Adam Holt
c91ec2aab7
fix: only inject heartbeat prompt for default agent
...
The heartbeat prompt from agents.defaults.heartbeat.prompt was being
injected into the system prompt for ALL agents, causing non-default
agents to read the default agent's identity files and adopt its persona.
Now the heartbeat prompt is only included when the session's agent ID
matches the configured default agent. Other agents receive no heartbeat
section in their system prompt.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 01:32:30 +01:00
Peter Steinberger
5898304fa0
fix: abort runs between tool calls
2026-01-10 01:26:25 +01:00
Peter Steinberger
53ec8e36cb
refactor: centralize failover error parsing
2026-01-10 01:26:06 +01:00
Peter Steinberger
20d4773f14
fix(agents): require raw for gateway config.apply ( #566 ) (thanks @sircrumpet)
2026-01-10 00:21:15 +00:00
Peter Steinberger
52565864d1
Merge pull request #619 from rubyrunsstuff/fix/telegram-block-streaming
...
fix: enable block streaming for Telegram when streamMode is 'block'
2026-01-10 00:16:04 +00:00
Peter Steinberger
1fd7a6e310
fix: keep telegram streamMode draft-only ( #619 ) (thanks @rubyrunsstuff)
2026-01-10 01:14:40 +01:00
Peter Steinberger
08015fbce6
Merge pull request #544 from jeffersonwarrior/fix/cloud-code-assist-api-errors
...
Fix Cloud Code Assist API errors (429/400)
2026-01-10 00:13:46 +00:00
Peter Steinberger
251ed83680
fix: harden Cloud Code Assist failover ( #544 ) (thanks @jeffersonwarrior)
2026-01-10 01:12:46 +01:00
Peter Steinberger
d75b302699
style: fix pi-embedded-runner formatting ( #623 ) (thanks @magimetal)
2026-01-10 01:12:22 +01:00
Ruby
b4fbf2fe0d
fix: enable block streaming for Telegram when streamMode is 'block'
...
- Fix disableBlockStreaming logic in telegram/bot.ts to properly enable
block streaming when telegram.streamMode is 'block' regardless of
blockStreamingDefault setting
- Set minChars default to 1 for Telegram block mode so chunks send
immediately on newlines/sentences instead of waiting for 800 chars
- Skip coalescing for Telegram block mode when not explicitly configured
to reduce chunk batching delays
- Fix newline preference to wait for actual newlines instead of breaking
on any whitespace when buffer is under maxChars
Fixes issue where all Telegram messages were batched into one message
at the end instead of streaming as separate messages during generation.
2026-01-10 01:11:41 +01:00
Jefferson Warrior
5843733978
Fix Cloud Code Assist API errors (429/400)
...
- Enhanced rate limit detection for Cloud Code Assist quota exhaustion
- Added tool call ID sanitization to fix invalid request format errors
- Integrated Cloud Code Assist format error detection into failover system
- Added comprehensive error pattern matching for Cloud Code Assist APIs
Fixes #cloud-code-assist-api-errors
2026-01-10 01:10:23 +01:00
Magi Metal
a399fa36c8
feat(onboard): add OpenCode Zen as model provider
2026-01-10 01:09:34 +01:00
Peter Steinberger
9b1f164447
fix: guard small context windows
2026-01-10 01:08:56 +01:00
Jefferson Warrior
74485f171b
CLI: fix Cloud Code Assist 400 API errors and missing session exports
...
- Add sanitizeToolCallId() to fix Cloud Code Assist tool call ID validation
- Apply sanitization in sanitizeSessionMessagesImages() for toolResult and assistant messages
- Add legacy CONFIG_PATH_CLAWDIS and STATE_DIR_CLAWDIS exports for backward compatibility
- Resolves Cloud Code Assist rejection of invalid tool call IDs with pipe characters
- Fixes missing session export functions that were blocking system startup
Addresses Cloud Code Assist API 400 errors from invalid tool call IDs like 'call_abc123|item_456'
2026-01-10 01:07:51 +01:00
Peter Steinberger
21eebb6d3b
fix: limit subagent bootstrap context
2026-01-10 00:01:16 +00:00
Peter Steinberger
e311dc82e0
refactor: centralize reasoning tag handling
2026-01-10 00:53:48 +01:00
Peter Steinberger
097550c299
fix: centralize verbose overrides and tool stream gating
2026-01-10 00:52:24 +01:00
Peter Steinberger
bd10f3d3f1
feat: allow session_status in sandbox
2026-01-09 23:41:57 +00:00
Peter Steinberger
a25922a21f
fix: clarify sessions_send delivery semantics
2026-01-10 00:34:24 +01:00
Peter Steinberger
96e17d407a
fix: filter NO_REPLY prefixes
2026-01-09 23:29:05 +00:00
Peter Steinberger
a9a70ea278
fix: persist verbose off and gate tool stream
2026-01-10 00:22:28 +01:00
Peter Steinberger
51ec578cec
fix: suppress <think> leakage + split reasoning output ( #614 ) (thanks @zknicker)
2026-01-10 00:02:13 +01:00
Zach Knickerbocker
2d0ca67c21
fix: prevent <think> leakage in block streaming
2026-01-09 23:58:48 +01:00
Peter Steinberger
98d0318d4e
refactor: cron payload migration cleanup ( #621 )
...
* refactor: centralize cron payload migration
* test: stabilize block streaming mocks
* test: adjust chunker fence-close case
2026-01-09 22:56:55 +00:00
Peter Steinberger
3b91148a0a
fix: handle fence-close paragraph breaks
2026-01-09 22:20:22 +00:00
Peter Steinberger
79f5ccc99d
fix(gateway): harden agent provider routing
2026-01-09 23:00:36 +01:00
Peter Steinberger
3adec35632
fix: make forced block chunking fence-safe
2026-01-09 21:52:47 +00:00
Peter Steinberger
79af03ba5e
fix(auto-reply): tighten block streaming defaults
2026-01-09 22:41:10 +01:00
Peter Steinberger
f8bf041396
test(gateway): cover internal provider defaults
2026-01-09 22:40:37 +01:00
Peter Steinberger
35083fcb37
fix(gateway): avoid whatsapp fallback for internal runs
2026-01-09 22:33:05 +01:00
Peter Steinberger
6c7a27c010
refactor: normalize main session key handling
2026-01-09 22:30:15 +01:00
Peter Steinberger
304ec1abe5
fix(agents): sessions_spawn inherits provider ( #528 )
2026-01-09 22:21:33 +01:00
Peter Steinberger
402c35b91c
refactor(agents): centralize failover normalization
2026-01-09 22:15:06 +01:00
Peter Steinberger
c37b77855b
Merge pull request #464 from austinm911/fix/slack-thread-replies
...
feat(slack): implement configurable reply threading
2026-01-09 21:10:39 +00:00
Peter Steinberger
84046cbad8
fix(slack): mrkdwn + thread edge cases ( #464 ) (thanks @austinm911)
2026-01-09 22:09:02 +01:00
Peter Steinberger
c27b1441f7
fix(auth): billing backoff + cooldown UX
2026-01-09 22:00:14 +01:00
Austin Mudd
8890fbcf38
Slack: fix message tool not passing threading context to handleSlackAction
2026-01-09 21:59:51 +01:00
Austin Mudd
909c14d443
fix: resolve merge conflicts and fix threading tests
...
- Update MessageToolOptions type to include Slack threading options
- Remove duplicate threadTs property in slack/actions.ts
- Fix replyThreadTs parameter name in monitor.ts
- Update test to correctly verify 'first' mode threading behavior:
- 'off' mode: no threading unless already in a thread
- 'first' mode: first reply starts a thread
- Add new test case for 'first' mode threading
2026-01-09 21:59:51 +01:00
Austin Mudd
b4663ed11c
Slack: implement replyToMode threading for tool path
...
- Add shared hasRepliedRef state between auto-reply and tool paths
- Extract buildSlackThreadingContext helper in agent-runner.ts
- Extract resolveThreadTsFromContext helper in slack-actions.ts
- Update docs with clear replyToMode table (off/first/all)
- Add tests for first mode behavior across multiple messages
2026-01-09 21:59:51 +01:00
Austin Mudd
29e6f13b29
Test: add threadTs passthrough test for Slack sendMessage
2026-01-09 21:59:27 +01:00
Peter Steinberger
5fa26bfec7
feat: add per-agent elevated controls
2026-01-09 20:42:19 +00:00
Peter Steinberger
374aa856f2
refactor(agents): centralize failover handling
2026-01-09 21:31:18 +01:00
Peter Steinberger
24605379b9
refactor: centralize skills prompt resolution
2026-01-09 21:27:20 +01:00
Peter Steinberger
4861f09f78
fix: inject skills prompt list
2026-01-09 21:20:51 +01:00
Peter Steinberger
65cb9dc3f7
fix(agents): fail over on billing/credits errors
2026-01-09 21:17:07 +01:00
Peter Steinberger
4121f9e6dc
feat(agents): add session_status tool
2026-01-09 21:09:42 +01:00
Peter Steinberger
6d378ee608
feat(telegram): inline keyboard buttons ( #491 )
...
Co-authored-by: Azade <azade@hey.com>
2026-01-09 20:47:03 +01:00