Commit Graph

17467 Commits

Author SHA1 Message Date
Peter Steinberger 23db233bb5 fix(msteams): recognize provider-prefixed target ids (#115609)
* fix(msteams): recognize provider-prefixed target ids

* style(msteams): format explicit target regression matrix
2026-07-29 01:51:48 -04:00
Alix-007 520e9fe1dd fix(openrouter): skip malformed video catalog rows (#111637) 2026-07-29 01:40:15 -04:00
Peter Steinberger 5157340862 fix(browser): avoid colliding extension relay ports (#115592) 2026-07-29 01:40:06 -04:00
Kevin Lin 310396f1e1 fix(codex): enable configured apps in service sessions (#115433)
* fix(codex): attest configured plugin apps before turns

* fix(codex): tighten plugin thread config

* fix(codex): expose account app admission wrapper
2026-07-28 22:39:20 -07:00
Peter Steinberger a24c1ceb3a fix(channels): release inbound debounce at admission (#115603)
Track full dispatch completion separately for error handling and shutdown drain while allowing same-session follow-ups to steer active runs. Fixes #113180.

Co-authored-by: Taksh <takshkothari09@gmail.com>
2026-07-29 01:38:15 -04:00
Peter Steinberger 98a066c90e fix(agents): project llama.cpp-safe tool schemas (#115598)
Co-authored-by: Jithin Mohandas <mohandasjithin@gmail.com>
2026-07-29 01:33:32 -04:00
guanbear 48b3a28edc fix(signal): escape real newlines in inbound verbose-log preview (#114881)
* fix(signal): escape real newlines in inbound verbose-log preview

The inbound preview regex matched the literal two-character sequence
backslash-n instead of the actual LF control character, so multi-line
message bodies kept real newlines and split the single-line log record.
Align Signal with the six sibling channels that use replace(/\n/g, "\\n").

Adds a focused test that mocks shouldLogVerbose and asserts the logged
preview stays single-line for an LF-separated body.

* chore: retrigger CI to clear stale checks

* fix(signal): escape all inbound log line breaks

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 01:31:58 -04:00
Alex Knight be24db5f72 fix(auth): reuse Claude CLI logins natively and stop forwarding expired OAuth tokens (#115134)
* fix(auth): refresh selected Claude CLI profiles

* fix(auth): run imported Claude CLI logins as verified native passthrough

* fix(auth): satisfy CLI auth failure exhaustiveness

* docs: remove PR changelog entry

---------

Co-authored-by: Alex Knight <15041791+amknight@users.noreply.github.com>
2026-07-29 01:30:07 -04:00
Peter Steinberger 1084f6dda8 fix(memory): preserve Unicode in short-term promotion (#115591)
Use the existing surrogate-safe helpers at the dreaming lead and heading boundaries. Preserve contributor investigations in #107882 and #107910.

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 01:29:43 -04:00
Peter Steinberger eb966621c9 fix(feishu): accept valid empty inbound message bodies (#115583) 2026-07-29 01:26:23 -04:00
Peter Steinberger 1e82025a54 refactor(ollama): unify local model onboarding (#115543)
* refactor(ollama): unify local model onboarding

* fix(ollama): remove obsolete setup max-lines exemption
2026-07-29 01:24:58 -04:00
Peter Steinberger 7031390652 fix(whatsapp): prevent replies from suppressing other chats (#115574)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 01:18:02 -04:00
Peter Steinberger ad36646ed1 fix(gateway): reconnect nodes after transient socket failures (#115539)
* fix(gateway): reconnect nodes after transient socket failures

* fix(browser): refresh bundled gateway reconnect runtime

* fix(gateway): preserve callback-owned reconnect state
2026-07-29 01:15:26 -04:00
Dallin Romney 781744e125 fix(qa): run profile scenarios on every eligible channel (#115540)
* fix(qa): resolve channels for portable live scenarios

* fix(qa): expand profile scenarios across eligible channels
2026-07-29 13:14:37 +08:00
juyaohuidt 3bb04a551d fix(discord): reject malformed PluralKit envelopes (#111712)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 01:06:53 -04:00
Dallin Romney 96ea0fbf56 improve(qa): align Telegram coverage with startup behavior (#113527)
* test(telegram): align coverage with startup behavior

* fix(qa): register Slack MPIM coverage
2026-07-29 12:59:42 +08:00
Pavan Kumar Gondhi 75ee9b81ba fix(discord): preserve trusted requester checks (#115260) 2026-07-29 12:59:25 +08:00
Peter Steinberger 087f996874 fix(ollama): enforce one paired-node inference deadline (#115558) 2026-07-29 00:59:16 -04:00
Peter Steinberger f1f8434db3 fix(doctor): honor Slack channel allowlists before plugin load (#115563)
Publish the existing Slack route-based doctor capabilities in channel metadata so cold doctor scans no longer falsely report dropped messages or recommend schema-invalid sender allowlists. Add metadata-only discovery regression. Fixes #110489; thanks @ari-hjunk for the report.
2026-07-29 00:55:54 -04:00
wahaha1223 0245f2c601 fix(irc): hide tool traces from inbound replies (#109012)
* fix(irc): hide tool traces from inbound replies

* test(irc): type async reply dispatch mock

* test(irc): type reply sender mock

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 00:55:12 -04:00
Peter Steinberger dbe645a08f fix(matrix): prevent private reasoning from reaching rooms (#99412) (#115553) 2026-07-29 00:55:07 -04:00
clawSean 8982d47a55 fix(imessage): apply canonical outbound sanitizer (#101430)
Co-authored-by: clawSean <260045960+clawSean@users.noreply.github.com>
2026-07-29 00:54:53 -04:00
Leon-SK668 530d44c7a7 fix(discord): preserve Unicode model picker buckets (#109514) 2026-07-29 00:41:46 -04:00
黄云龙 5dbe0fa7e3 fix(telegram): break long HTML chunks on word boundaries, not mid-word (#104473)
* fix(telegram): break long HTML chunks on word boundaries

* test(telegram): cover word-safe HTML chunk boundaries
2026-07-29 00:38:36 -04:00
Peter Steinberger 90fca5aadb fix(browser): cancel in-flight status probes (#115534) 2026-07-29 00:35:55 -04:00
joshavant 913abfcb1f fix(msteams): prevent hook-bypassing previews 2026-07-28 23:34:51 -05:00
LKL-ZREO 7f89561259 fix(qqbot): restore one-time and recurring reminders (#115488)
* fix(qqbot): pass canonical cron add params

* docs(qqbot): use canonical reminder timestamps

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 00:29:43 -04:00
Peter Steinberger 4e651a43f4 fix(compaction): apply host transcript byte guard to codex sessions (#115192) (#115514)
Co-authored-by: pcpilot-dev <pcpilot-dev@users.noreply.github.com>
2026-07-29 00:23:44 -04:00
Peter Steinberger dd5b9c8c04 fix(slack): prevent duplicate MPIM mention replies (#115528)
* fix(slack): make MPIM app mentions type-safe

Resolve typeless app mentions through explicit metadata, the scoped event cache, then conversations.info so modern C-prefixed MPIMs cannot be misclassified by event ordering. Add a real Slack QA scenario that requires one reply and cleans up its temporary MPIM.

Co-authored-by: moeealii <75953662+moeealii@users.noreply.github.com>

* fix(slack): type unresolved mention metadata

* fix(slack): satisfy MPIM type contracts

---------

Co-authored-by: moeealii <75953662+moeealii@users.noreply.github.com>
2026-07-29 00:23:06 -04:00
joshavant a6d58f0e6d fix(codex): attest safe Node network options 2026-07-28 23:22:52 -05:00
Rune🪨 9c118dd38f fix(discord): skip PluralKit lookup for non-webhooks (#111617)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 00:17:36 -04:00
Peter Steinberger e59e7b82cf fix(microsoft-foundry): preserve GPT token limits (#115542) 2026-07-29 00:14:31 -04:00
Peter Steinberger 88ff9e9181 fix(whatsapp): preserve context when a quoted reply is unavailable (#115517) 2026-07-29 00:05:08 -04:00
Peter Steinberger 430c293ee0 refactor: remove duplicate provider and runtime code (#115529)
* refactor: remove duplicated runtime and provider code

* refactor: exclude unrelated browser test cleanup

* refactor: preserve canonical subagent cleanup ordering
2026-07-29 00:04:52 -04:00
Peter Steinberger 232613fdd9 fix(feishu): preserve intentionally silent block replies (#115530) 2026-07-28 23:59:50 -04:00
Peter Steinberger 8e75df55d7 fix(imessage): explain unsupported private status probes (#115074) (#115526) 2026-07-28 23:55:53 -04:00
Peter Steinberger d41a56fca1 feat(memory): isolate curated entries by project (#115438)
* feat(memory): scope recall to active projects

* feat(memory): preserve project scope in promotion

* docs(memory): explain project-scoped recall

* fix(memory): chunk curated files per entry

* refactor(memory): narrow project scope internals

* fix(memory): exclude annotations from concept tags

* fix(memory): tighten project isolation boundaries

* fix(memory): preserve project path casing

* fix(memory): prioritize project bootstrap candidates

* docs: refresh memory architecture map

* test(memory): cover project scope schema repair

* fix(memory): complete project isolation paths

* fix(memory): close project ranking checks

* fix(memory): reinitialize search provider before ranking

* fix(memory): tolerate missing bootstrap paths
2026-07-28 23:55:49 -04:00
Arseniy Palagin ede8fe33df fix(telegram): surface draft stream delivery failures at warn level (#111065)
* fix(telegram): surface draft stream delivery failures at warn level

createTelegramDraftController wired the draft stream's warn callback to
logVerbose, so preview send/edit/cleanup failures ("telegram stream
preview failed: ...", "telegram stream preview cleanup failed: ...")
were only emitted when verbose logging was enabled. In the default
configuration a dying preview/draft stream left no operator-visible
trace: the bot just went quiet, especially in progress stream mode
where the activity window is the only delivery surface.

Route the warn callback through the telegram subsystem logger
(telegram/draft-stream) at warn level with lane, chatId, and threadId
context so draft delivery failures show up in default logs. The
verbose log callback is unchanged.

Co-authored-by: Claude <noreply@anthropic.com>

* test(telegram): simplify draft warning logger proof

Co-authored-by: Arseniy Palagin <valeradzigurda3@gmail.com>

* fix(telegram): emit draft terminal delivery diagnostics

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: d1bd0f71-7638-463a-958d-d5b3e2da1047

* fix(telegram): keep draft visibility change scoped

Remove the diagnostic expansion so this contributor PR remains focused on its original warn-level logging repair.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: d1bd0f71-7638-463a-958d-d5b3e2da1047

---------

Co-authored-by: Arseniy Palagin <valeradzigurda3@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Gio Della-Libera <giodl73@gmail.com>
Copilot-Session: d1bd0f71-7638-463a-958d-d5b3e2da1047
2026-07-28 23:36:19 -04:00
moeealii e2a76333d8 fix(slack): resolve conversation type for app_mention in C-prefixed group DMs (#115468)
app_mention events carry no channel_type, and modern Slack group DMs
(mpims) use C-prefixed channel ids, so prefix inference classifies them
as channels. Mentions in group DMs then bypass the handler's im/mpim
dedupe guard and are processed down the channel path — misrouting
replies, and double-handling alongside message.mpim when dm.groupEnabled
is on.

Confirm against the event-carried type cache and, on a miss, the cached
conversations.info lookup before treating a channel_type-less mention as
a channel mention. Only an authoritative "mpim" answer changes behavior;
a C-prefixed id can never be an im.

Fixes #115463

Co-authored-by: moeealii <>
2026-07-28 23:23:49 -04:00
Peter Steinberger d5567ed61e fix: prevent duplicate agent turns and slow Codex harness runs (#115474)
* fix(agents): deduplicate turns and speed up Codex harnesses

* test(agents): keep keyed transcript fixtures type-safe

* fix(codex): simplify linear native skill traversal

* fix(agents): preserve admitted SQLite turns during orphan repair

* test: split session user idempotency regressions
2026-07-28 22:56:12 -04:00
Vito Cappello 33dae97b81 fix(agents): restore subagent completion delivery on CLI runtimes (#115422)
* fix(agents): deliver tool-free CLI completions

* fix(agents): enforce empty Gemini CLI tool caps

* refactor(agents): remove ineffective Gemini admin settings

* fix(agents): block inherited Gemini MCP servers

* fix(agents): enforce Gemini MCP cap via argv

---------

Co-authored-by: VACInc <3279061+VACInc@users.noreply.github.com>
Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com>
2026-07-28 21:07:02 -05:00
Peter Steinberger c092ec437c refactor: remove duplicate runtime and plugin paths (#115483) 2026-07-28 22:06:04 -04:00
Shakker f6bd2b6518 fix: scope subagent handoff to direct tools (#115466) 2026-07-29 02:22:09 +01:00
Shakker b2efac5134 fix: clarify native subagent completion handoff 2026-07-29 02:22:09 +01:00
Peter Steinberger 25909ef5da fix(ollama): preserve selected model capabilities during onboarding (#115467) 2026-07-28 21:07:48 -04:00
Peter Steinberger 5922dd4380 fix(memory): fall back to keyword search when embeddings cannot start (#115397)
* fix(memory): degrade bootstrap failures to keyword search

* docs(memory): clarify recovery status projection

* fix(memory): handle bootstrap embedding failures

* fix(memory): trust resolved provider diagnostics

* fix(memory): keep degraded syncs keyword-only

* fix(memory): confirm embedding recovery before semantic mode

* fix(memory): restore semantic readiness after recovery
2026-07-28 21:01:44 -04:00
Ayaan Zaidi b00a1aaeae test(telegram): give the media harness a bot identity instead of per-context ids
The previous commit patched me.id into 13 contexts in one suite. That treated the
symptom: the harness itself never passes botInfo, so resolveBotUserId has no
fallback when a test ctx carries only a username.

Fix the harness instead. Production always builds the bot from getMe(), so
botInfo is present in every real path; supplying telegramBotInfoForTest matches
that and drops the per-context ids.

Also revives bot.media.stickers-and-fragments.e2e.test.ts, which shares the
harness and failed 3/6 for the same reason and was not covered before.

The other ~84 bare me literals across 8 Telegram suites are fine: those tests
supply botInfo through their own harnesses. Verified, 371 pass, so no sweep.
2026-07-29 09:55:41 +09:00
Ayaan Zaidi cc434dd5fe test(telegram): cover forward-burst debounce coalescing through durable ingress
PR #115401 fixed the album split by separating durable claim lifetime from lane
occupancy (deferredLaneOccupancy="release"), and stated the same change repairs
the text/forwarded-message debounce, which defers its spooled participant the
same way. The album path got a durable-drain regression test; the debounce path
did not, because the suite that would cover it fails 10/10 on main.

Restore that suite: its harness supplies me.username without me.id, which
resolveBotUserId has required since #114532. Production grammY populates ctx.me
from getMe(), so this is harness drift, not a runtime gap.

Then extend the durable-ingress regression file to both buffers and rename it
off media-group. Two new tests admit a forwarded burst through the spool and
core drain, live and from a restart backlog, asserting one turn carrying both
notes plus independent tombstones.

Both fail with deferredLaneOccupancy reverted to "hold" (second note lands in a
separate turn), so they pin the lane contract rather than restate it.
2026-07-29 09:55:41 +09:00
metaforismo cc8fd57a01 feat(mattermost): read channel history with guarded permissions (#110875)
* feat(mattermost): add guarded channel history reads

* chore: refresh Mattermost generated metadata

* fix(channels): scope Mattermost read authorization

* test(mattermost): redact fixture credentials

* test(mattermost): use safe credential placeholders

* fix(mattermost): report directional pagination

* fix(mattermost): authorize current DM reads

* test(mattermost): cover named read policy inheritance

* fix(mattermost): make history reads opt in

* style(mattermost): align channel import ordering
2026-07-28 19:54:39 -05:00
Peter Steinberger b883b88129 fix(lmstudio): preserve valid models in mixed catalogs (#115336) 2026-07-28 20:43:16 -04:00