Commit Graph

5636 Commits

Author SHA1 Message Date
Mason Huang
bea9f6e8e6 test(browser): align loopback reachability expectations 2026-04-14 16:25:33 +08:00
Mason Huang
f6971d6f28 fix(browser): unblock loopback CDP readiness 2026-04-14 16:25:33 +08:00
Vincent Koc
900681751d test(qa-lab): seed broken-turn recovery scenarios (#66416) 2026-04-14 09:03:49 +01:00
Vincent Koc
37f449d7e1 fix(memory): restore ollama embedding adapter (#66269)
* fix(memory): restore ollama embedding adapter

* Update CHANGELOG.md
2026-04-14 09:02:31 +01:00
VACInc
26e80cc6cc [codex] Telegram: unblock status commands behind busy turns (#66226)
* Telegram: unblock status commands behind busy turns

* fix(telegram): keep export-session on topic lane

* Update CHANGELOG.md

---------

Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-14 08:57:07 +01:00
Ayaan Zaidi
213c36cf51 fix(browser): preserve legacy strict SSRF alias 2026-04-14 12:50:02 +05:30
Ayaan Zaidi
1dabfef28d fix(browser): preserve explicit strict SSRF config 2026-04-14 12:42:59 +05:30
Ayaan Zaidi
1b76966f05 fix(browser): use loopback policy for json-new fallback 2026-04-14 12:42:59 +05:30
Ayaan Zaidi
bf1d49093a fix(browser): relax default hostname SSRF guard 2026-04-14 12:42:59 +05:30
Luke
0abe64a4ff Agents: clarify local model context preflight (#66236)
Merged via squash.

Prepared head SHA: 11bfaf15f6
Co-authored-by: ImLukeF <92253590+ImLukeF@users.noreply.github.com>
Co-authored-by: ImLukeF <92253590+ImLukeF@users.noreply.github.com>
Reviewed-by: @ImLukeF
2026-04-14 15:38:10 +10:00
Peter Steinberger
55604a9a91 test: keep telegram cache boundary compatible 2026-04-13 20:50:11 -07:00
Peter Steinberger
df84225504 test: align post-rebase full-suite drift 2026-04-13 20:49:39 -07:00
Peter Steinberger
d4f556a052 fix: align latest main type drift 2026-04-13 20:49:39 -07:00
Peter Steinberger
1e11b36d80 test: align feishu replay helper typing 2026-04-13 20:49:39 -07:00
Peter Steinberger
c09031f15a fix: tighten inbound replay typing 2026-04-13 20:49:39 -07:00
Ayaan Zaidi
3c501d3554 test: remove timer dependency from telegram topic cache tests 2026-04-14 08:58:07 +05:30
Ayaan Zaidi
556905a3f4 fix: restore pnpm check 2026-04-14 08:48:15 +05:30
Ayaan Zaidi
c91d3d4537 fix(telegram): persist topic cache via default runtime 2026-04-14 08:32:27 +05:30
Ayaan Zaidi
4f92b1fbb0 fix(telegram): allow topic cache without session runtime 2026-04-14 08:32:27 +05:30
Ayaan Zaidi
59afcf9922 test(telegram): cover topic-name cache reload 2026-04-14 08:32:27 +05:30
Ayaan Zaidi
ad181b2361 fix(telegram): persist topic-name cache 2026-04-14 08:32:27 +05:30
Agustin Rivera
1c35795fce fix(slack): align interaction auth with allowlists (#66028)
* fix(slack): align interaction auth with allowlists

* fix(slack): address review followups

* fix(slack): preserve explicit owners with wildcard

* chore: append Claude comments resolution worklog

* fix(slack): harden interaction auth with default-deny, mandatory actor binding, and channel type validation

- Add interactiveEvent flag to authorizeSlackSystemEventSender for stricter
  interactive control authorization
- Default-deny when no allowFrom or channel users are configured for
  interactive events (block actions, modals)
- Require expectedSenderId for all interactive event types; block actions
  pass Slack-verified userId, modals pass metadata-embedded userId
- Reject ambiguous channel types for interactive events to prevent DM
  authorization bypass via channel-type fallback
- Add comprehensive test coverage for all new behaviors

* fix(slack): scope interactive owner/allowFrom enforcement to interactive paths only

* fix(slack): preserve no-channel interactive default

* Update context-engine-maintenance test

* chore: remove USER.md worklog artifact

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* changelog: note Slack interactive auth allowlist alignment (#66028)

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Devin Robison <drobison@nvidia.com>
2026-04-13 20:38:11 -06:00
Eva H
49d99c7500 fix: include apiKey in codex provider catalog to unblock models.json loading (#66180)
Merged via squash.

Prepared head SHA: ce61934ac9
Co-authored-by: hoyyeva <63033505+hoyyeva@users.noreply.github.com>
Co-authored-by: BruceMacD <5853428+BruceMacD@users.noreply.github.com>
Reviewed-by: @BruceMacD
2026-04-13 19:22:09 -07:00
Vincent Koc
e63cbe831b test(qa-lab): cover GPT-style broken turns 2026-04-14 01:39:49 +01:00
ShihChi Huang
df3e65c8d3 fix(slack): isolate doctor contract API (#63192)
* Slack: isolate doctor contract API

* chore: changelog

* fix(slack): move doctor changelog entry to Unreleased

* Plugins: lock Slack doctor sidecar metadata

* Slack: fix changelog entry placement

---------

Co-authored-by: @zimeg <zim@o526.net>
Co-authored-by: George Pickett <gpickett00@gmail.com>
2026-04-13 17:33:49 -07:00
Agustin Rivera
a1c44d28fc Feishu: tighten allowlist target canonicalization (#66021)
* fix(feishu): tighten allowlist id matching

* fix(feishu): address review follow-ups

* changelog: note Feishu allowlist canonicalization tightening (#66021)

* fix(feishu): collapse typed wildcard allowlist aliases to bare wildcard

Previously normalizeFeishuTarget folded chat:* / user:* / open_id:* /
dm:* / group:* / channel:* down to '*', so those entries acted as
allow-all. The new typed canonicalization was producing literal keys
(chat:*, user:*, ...) that never matched any sender, silently
flipping those configs from allow-all to deny-all. Restore the prior
behavior by collapsing a wildcard value to '*' inside
canonicalizeFeishuAllowlistKey.

---------

Co-authored-by: Devin Robison <drobison@nvidia.com>
2026-04-13 16:59:07 -06:00
Agustin Rivera
692438cbb2 fix(stream): tighten voice stream ingress guards (#66027)
* fix(stream): tighten voice stream ingress guards

* fix(stream): address review follow-ups

* fix(stream): normalize trusted proxy ip matching

* changelog: note voice-call media-stream ingress guard tightening (#66027)

* fix(stream): require non-empty trusted proxy list before honoring forwarding headers

Without an explicit trusted proxy list, the prior gate treated every
remote as 'from a trusted proxy', so enabling trustForwardingHeaders
let any direct caller spoof X-Forwarded-For / X-Real-IP and rotate the
resolved IP per request to evade maxPendingConnectionsPerIp. Require
trustedProxyIPs to be non-empty AND match the remote before trusting
forwarding headers.

---------

Co-authored-by: Devin Robison <drobison@nvidia.com>
2026-04-13 16:51:16 -06:00
Vincent Koc
955270fb73 fix(ci): repair telegram ui and watch regressions 2026-04-13 23:49:59 +01:00
Vincent Koc
94779b4fb1 fix(ci): repair telegram topic cache typing 2026-04-13 23:33:41 +01:00
Vincent Koc
8ab89989c2 fix(ci): restore plugin-local whatsapp deps 2026-04-13 23:26:25 +01:00
Gustavo Madeira Santana
b5dcc11273 plugins: trim staged runtime cargo 2026-04-13 18:10:40 -04:00
Mariano
3d06d90e83 fix(memory): unify default root memory handling (#66141)
* fix(memory): unify default root memory handling

* test(memory): align legacy migration expectation

* docs(changelog): tag qmd root-memory fix

* docs(changelog): append qmd root-memory entry

* docs(changelog): dedupe qmd root-memory entry

* docs(changelog): attribute qmd root-memory fix

---------

Co-authored-by: mbelinky <mbelinky@users.noreply.github.com>
2026-04-13 23:59:57 +02:00
Vincent Koc
f3283a330b fix(ci): repair extension boundary contracts 2026-04-13 22:37:25 +01:00
Vincent Koc
ea25cf2595 fix(ci): unblock discord boundary typing 2026-04-13 22:37:24 +01:00
Tak Hoffman
f94d6778b1 fix(active-memory): Move active memory recall into the hidden prompt prefix (#66144)
* move active memory into prompt prefix

* document active memory prompt prefix

* strip active memory prefixes from recall history

* harden active memory prompt prefix handling

* hide active memory prefix in leading history views

* strip hidden memory blocks after prompt merges

* preserve user turns in memory recall cleanup
2026-04-13 16:05:43 -05:00
rafaelreis-r
68e0e456f3 fix: allow plugin commands on Slack when channel supports native commands (#64578)
Merged via squash.

Prepared head SHA: 2ec97bf0b3
Co-authored-by: rafaelreis-r <57492577+rafaelreis-r@users.noreply.github.com>
Co-authored-by: jalehman <550978+jalehman@users.noreply.github.com>
Reviewed-by: @jalehman
2026-04-13 13:14:02 -07:00
Mariano
3d42e33dd0 fix(memory-core): run Dreaming once per cron schedule (#66139)
Merged via squash.

Prepared head SHA: 48229a24cb
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Reviewed-by: @mbelinky
2026-04-13 21:50:32 +02:00
Mariano
1490e2b1d3 Lobster: import published core runtime (#64755)
* Lobster: import published core runtime

* Changelog: add Lobster core runtime note

* Lobster: type embedded core runtime

* Lobster: keep package-boundary tsconfig narrow
2026-04-13 20:38:46 +02:00
Pavan Kumar Gondhi
b75ad800a5 fix(browser): enforce SSRF policy on snapshot, screenshot, and tab routes [AI] (#66040)
* fix: address issue

* fix: address review feedback

* fix: finalize issue changes

* fix: address review-pr skill feedback

* fix: address PR review feedback

* fix: address PR review feedback

* docs: add changelog entry for PR merge
2026-04-13 23:56:39 +05:30
Pavan Kumar Gondhi
80b1fa17bf fix(msteams): enforce sender allowlist checks on SSO signin invokes [AI] (#66033)
* fix: address issue

* fix: address PR review feedback

* docs: add changelog entry for PR merge
2026-04-13 23:52:30 +05:30
Ptah.ai
8c43768e27 fix: expose telegram topic names in agent context (#65973) (thanks @ptahdunbar)
* feat(telegram): expose forum topic names in agent context

Telegram Bot API does not provide a method to look up forum topic names
by thread ID. This adds an in-memory LRU cache that learns topic names
from service messages (forum_topic_created, forum_topic_edited,
forum_topic_closed, forum_topic_reopened) and seeds from
reply_to_message.forum_topic_created as a fallback for pre-existing
topics.

The resolved topic name is surfaced as:
- TopicName in MsgContext (available to {{TopicName}} in templates)
- topic_name in the agent prompt metadata block
- topicName in plugin hook event metadata

Includes unit tests for the topic-name-cache module (11 tests including
eviction and read-recency).

Known limitation: cache is in-memory only; after a restart it falls back
to the creation-time name until a rename event is observed.

* refactor(telegram): distill topic name flow

* fix: expose telegram topic names in agent context (#65973) (thanks @ptahdunbar)

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-04-13 23:38:14 +05:30
Mariano
a56dbae80b test(telegram): add inbound retry regressions (#66075)
Merged via squash.

Prepared head SHA: 175cd25889
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Co-authored-by: mbelinky <132747814+mbelinky@users.noreply.github.com>
Reviewed-by: @mbelinky
2026-04-13 20:07:23 +02:00
Omar Shahine
85cfba675a fix(bluebubbles): lazy-refresh Private API status on send (#43764) (#65447)
* fix(bluebubbles): lazy refresh Private API cache on send to prevent silent reply threading degradation (#43764)

When the 10-minute server info cache expires, sends requesting reply
threading or effects silently degrade to plain messages. Add a lazy
async refresh of the cache in the send path when Private API features
are needed but status is unknown, preserving graceful degradation if
the refresh fails.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* fix(bluebubbles): apply lazy Private API refresh to attachment sends and add missing test coverage (#43764)

Attachment sends had the same cache-expiry bug as text sends: when the
10-minute Private API status cache TTL expired, reply threading metadata
was silently dropped. Apply the same lazy-refresh pattern from send.ts.

Also add the missing "refresh succeeds with private_api: false" test case
for both send.ts and attachments.ts — proves effects throw and reply
threading degrades without the "unknown" warning when the API is explicitly
disabled.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* chore: update no-raw-channel-fetch allowlist for test-harness line shift

Adding fetchBlueBubblesServerInfo to the probe mock module shifted
globalThis.fetch in test-harness.ts from line 128 to 130.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Lobster <lobster@shahine.com>
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 11:03:47 -07:00
Mariano
2c59ba24af fix(browser): detect local attachOnly loopback CDP sessions (#66080)
Merged via squash.

Prepared head SHA: 90c1c10cc9
Reviewed-by: @mbelinky
2026-04-13 19:46:56 +02:00
Vincent Koc
1b20c1aca4 fix(nostr): dedupe deterministic rejected events 2026-04-13 18:07:23 +01:00
Vincent Koc
77f1ea0de8 fix(telegram): retry failed approval callbacks 2026-04-13 18:00:38 +01:00
Vincent Koc
aa017bf9dd fix(telegram): retry failed model selections 2026-04-13 17:57:05 +01:00
Vincent Koc
20248c475f fix(voice-call): keep retryable errors replayable 2026-04-13 17:50:27 +01:00
Mariano
8cfdc8dea1 fix(browser): unblock managed loopback CDP startup and control (#66043)
Merged via squash.

Prepared head SHA: c3d0a99ffa
Reviewed-by: @mbelinky
2026-04-13 18:48:48 +02:00
Vincent Koc
a7ac3c666c fix(mattermost): dedupe repeated model picker selects 2026-04-13 17:47:29 +01:00