Commit Graph

30875 Commits

Author SHA1 Message Date
Peter Steinberger
e24b80b15e fix: clarify escaped skill path warnings 2026-04-12 10:53:31 -07:00
jasonxargs-boop
2204753b62 fix(memory-core): fix macOS chokidar glob issue by watching memory dir directly (#64711)
* fix(memory-core): fix macOS chokidar glob issue by watching memory dir directly

* fix(memory-core): ignore non-markdown memory watch churn

* fix(memory-core): allow multimodal watch events

* test(memory-core): type watcher ignore callback

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-12 18:53:20 +01:00
Vincent Koc
6437aa8532 fix(inbound-meta): unblock Claude CLI and scrub NULs (#65467)
* fix(inbound-meta): rename schema and scrub NULs

* fix(inbound-meta): harden untrusted context blocks

* fix(inbound-meta): preserve fenced metadata blocks

* fix(inbound-meta): cap untrusted context payloads
2026-04-12 18:52:48 +01:00
Peter Steinberger
15b86ac6d0 fix: narrow qmd defaults and clawblocker memory 2026-04-12 18:52:06 +01:00
Vincent Koc
e01d2e7e7a docs(changelog): restore dreaming fix entries 2026-04-12 18:43:35 +01:00
Peter Steinberger
d5a0d3c524 docs: update 2026.4.12 changelog 2026-04-12 10:42:01 -07:00
saram ali
7995e408ce fix(discord): clear stale heartbeat timers in SafeGatewayPlugin.connect() (#65087)
* fix(discord): clear stale heartbeat timers in SafeGatewayPlugin.connect()

The @buape/carbon@0.15.0 heartbeat setup has a race where stopHeartbeat()
runs before heartbeatInterval is assigned, leaving a stale setInterval with
a closed reconnectCallback. When the stale interval fires ~41s later it
throws an uncaught exception that bypasses the EventEmitter error path and
crashes the gateway process via process.on('uncaughtException').

Add a connect() override in SafeGatewayPlugin that unconditionally clears
both heartbeatInterval and firstHeartbeatTimeout before calling super. The
parent's connect() only calls stopHeartbeat() when isConnecting=false; when
isConnecting=true it returns early without clearing — this override fills
that gap.

Fixes #65009. Related: #64011, #63387, #62038.

* test(discord): assert super.connect() delegation in SafeGatewayPlugin tests

* fix(ci): update raw-fetch allowlist line numbers for gateway-plugin.ts

The connect() override added in the heartbeat fix shifted the two
pre-existing fetch() callsites from lines 370/436 to 387/453.

* docs(changelog): add discord heartbeat crash note

* test(cli): align plugin registry load-context mock

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-12 18:40:04 +01:00
Vincent Koc
1094b3d372 docs(changelog): add memory fallback search credit 2026-04-12 18:38:40 +01:00
Peter Steinberger
a8e140e395 chore: bump version to 2026.4.12 2026-04-12 10:37:18 -07:00
Anonymous Amit
42590106ab improve memory fallback lexical ranking (#65395)
* improve memory fallback lexical ranking

* use neutral lexical fallback fixtures

* fix(memory-core): keep lexical boosts out of hybrid search

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-12 18:36:28 +01:00
Vincent Koc
9259e593e6 test(gateway): share transcript event waiters 2026-04-12 18:33:47 +01:00
Vincent Koc
9c2b094f3f test(gateway): share search session transcript fixtures 2026-04-12 18:32:04 +01:00
Vincent Koc
8a4a63ca07 fix(memory-core): use all dreaming signals for light confidence 2026-04-12 18:30:35 +01:00
Vincent Koc
a24af49100 fix(update-cli): respawn plugin refresh after self-update (#65471)
* fix(update-cli): respawn plugin refresh after self-update

* Update src/cli/update-cli/update-command.ts

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update CHANGELOG.md

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-04-12 18:26:43 +01:00
Vincent Koc
f00f0a9596 fix(agents): stop leaking session lock exit listeners (#65469)
* fix(agents): stop leaking session lock exit listeners

* Update src/agents/session-write-lock.ts

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

---------

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-04-12 18:22:12 +01:00
Vincent Koc
a5aceebc01 test(gateway): share bearer agents list invoke 2026-04-12 18:20:39 +01:00
Vincent Koc
27afd01577 test(gateway): share session history sse helpers 2026-04-12 18:17:50 +01:00
Vincent Koc
077cfca229 fix(memory-core): unblock dreaming-only promotion 2026-04-12 18:14:06 +01:00
Vincent Koc
686e5976df test(gateway): share preauth hardening setup helpers 2026-04-12 18:04:22 +01:00
Vincent Koc
eddd9a1a1c test(gateway): share silent reconnect rejection assertions 2026-04-12 18:00:49 +01:00
Vincent Koc
b35becfb1d test(gateway): share plugin approval no-route context 2026-04-12 17:59:17 +01:00
Vincent Koc
2c5290a7b1 test(gateway): share paired ios operator fixture 2026-04-12 17:57:55 +01:00
Vincent Koc
ed1744bcaa test(heartbeat): cover isolated cron event consumption 2026-04-12 17:55:36 +01:00
zhouhe-xydt
879bb5dd91 fix(memory-wiki): support Unicode characters in slugifyWikiSegment (#64742)
* fix(memory-wiki): support Unicode characters in slugifyWikiSegment

Replace ASCII-only regex with Unicode-aware regex to preserve CJK,
Cyrillic, Arabic, and other non-ASCII characters in wiki slugs.

Fixes #64620

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* test(memory-wiki): cover Unicode slug regressions

* fix(memory-wiki): preserve combining marks in slugs

* fix(memory-wiki): cap composed source filenames

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-12 17:54:41 +01:00
Vincent Koc
68a64a14d9 test(gateway): share close handler deps 2026-04-12 17:45:46 +01:00
Nimrod Gutman
26dbc3da15 fix(agents): isolate skills tests from personal home (#65456) 2026-04-12 19:44:50 +03:00
Peter Steinberger
b23f56fa8c fix: restore media understanding attempt outcome export 2026-04-12 17:44:16 +01:00
MrBrain
346e38e275 fix(memory-core): isolate dreaming narrative sessions per workspace (#61674)
* fix(memory-core): isolate dreaming narrative sessions per workspace

* chore(changelog): add narrative isolation note

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-12 17:39:28 +01:00
Mason Huang
24d769449d feat(skills): WIP-add secret-scanning-maintainer skill (#65417)
* feat(skills): add secret-scanning-maintainer skill

Add a maintainer-only skill for handling GitHub Secret Scanning alerts.
Covers issue_comment, issue_body, pull_request_body, and commit leak
types with redaction, history purge (delete+recreate for comments),
author notification, and alert resolution workflows.

* fix(skills): harden secret-scanning-maintainer based on security review

- Remove all secret value fragments from redaction markers (type-only)
- Remove alert URLs and partial secret previews from public comments
- Use temp files with heredoc for all gh api body content (shell injection)
- Add rule: never print raw API responses containing secrets to stdout
- Notification comments now only reference secret type, no value hints

Addresses 4 of 6 security findings from PR review:
1. Over-permissive redaction → type-only markers
3. Public partial preview + alert URL → removed from comments
4. Shell quoting risk → heredoc + temp file pattern
5. Stdout secret exposure → jq-only extraction rule

Findings #2 (revoked without rotation) and #6 (public playbook) are
accepted as-is with documented rationale.

* fix(skills): address all bot review findings on secret-scanning skill

Addresses findings from Codex, Greptile, and Aisle bot reviews:

- Add pull_request_comment and pull_request_review_comment to location
  type routing table (was being skipped as unsupported) [Codex P1]
- Use hide_secret=true on alert fetch to prevent plaintext in terminal
  [Codex P1]
- Add jq filtering on all fetch commands to avoid printing .body or
  .secret to stdout [Codex P1, Aisle Medium]
- Skip PATCH before DELETE for comments — PATCH creates an unnecessary
  edit history revision exposing plaintext [Greptile P1]
- Use mktemp for all temp files instead of fixed /tmp paths [Aisle Medium]
- Branch notification template by location type: comment says "removed
  and replaced", body says "redacted in place", commit says "committed"
  [Greptile P1]
- Bump userContentEdits(first: 10) to first: 50 to reduce truncation
  risk [Greptile P2]
- Fix batch listing jq query to use .html_url instead of
  .first_location_detected.html_url [Codex P2]
- Use heredoc + temp file for comment recreation (was inline -f)
  [Codex P1]
- Remove alert URLs from public notification templates [Codex P1]

* feat(skills): extract secret-scanning operations into reusable script

Add scripts/secret-scanning.mjs with subcommands: fetch-alert,
fetch-content, redact-body, delete-comment, recreate-comment, notify,
resolve, list-open, summary.

Security enforcements now live in the script (not agent memory):
- hide_secret=true on all alert fetches
- mktemp with random UUIDs for all temp files
- -F body=@file for all body uploads
- .secret and .body never printed to stdout
- notification templates branched by location type

SKILL.md simplified from ~370 lines to ~170 lines — now a decision
guide that references script commands instead of inline gh api calls.

* fix(skills): enforce script summary output as final summary

Agent was rewriting the summary table without URLs. Make SKILL.md
explicit: the script output IS the final summary, do not reformat it.

* fix(skills): add summary output markers for verbatim rendering

Script summary now outputs ---BEGIN SUMMARY--- / ---END SUMMARY---
markers. SKILL.md instructs agent to output the content between markers
verbatim, preventing reformatting that drops URLs.

* fix(skills): address latest bot review findings on script

- Restrict temp file permissions to 0600 (owner-only) [Codex P1]
- Add --slurp to list-open and fetch-alert locations for correct
  multi-page JSON parsing [Codex P1, Codex P2]
- Use commit_url/blob_url fallback for commit location URLs [Codex P2]
- Add --paginate to locations fetch [Codex P2]
2026-04-13 00:39:17 +08:00
Vincent Koc
12d351b79c fix(ui): hide synthetic transcript-repair history messages (#65458) 2026-04-12 17:35:30 +01:00
Sergiusz
079eb18bf7 fix: harden dreaming narrative session cleanup (#65320)
* fix: harden dreaming narrative session cleanup

* fix(memory-core): harden narrative cleanup

* fix(memory-core): preserve fallback narrative sessions

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-12 17:33:47 +01:00
Pengfei Ni
aff8a0c0e7 fix(config): resolve CLI command aliases against parent plugin in plugins.allow (#64748) (#64779)
* fix(config): resolve CLI command aliases against parent plugin in plugins.allow (#64748)

The CLI allow guard checked command names (e.g. 'wiki') directly against
plugins.allow, missing the parent plugin ('memory-wiki'). Additionally,
memory-wiki did not declare 'wiki' as a commandAlias, so doctor --fix
would remove it as stale.

- Add commandAliases entry for 'wiki' in memory-wiki plugin manifest
- Check parent plugin ID in the CLI fallback allow guard
- Add tests for both allow and deny cases

* fix(cli): inject manifest registry for alias diagnostics

* Update CHANGELOG.md

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-12 17:32:11 +01:00
Leonard Sellem
c545e4605e fix(memory-wiki): pass app config into CLI metadata registrar (#65012)
* fix(memory-wiki): pass config into cli metadata registrar

* fix(memory-wiki): use cli context config for metadata registrar

* docs(changelog): note memory-wiki cli metadata fix

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-12 17:30:54 +01:00
Vincent Koc
7518b8d339 test(gateway): share allowlist node helpers 2026-04-12 17:26:31 +01:00
Vincent Koc
b7b3846793 feat(plugins): narrow channel loads from manifests (#65429)
* feat(plugins): narrow channel loads from manifests

* fix(plugins): harden channel owner activation trust

* fix(plugins): preserve empty channel scopes

* fix(plugins): honor channel-owner policy gates

* fix(plugins): keep channel setup and scope fallbacks correct

* fix(plugins): keep channel trust tied to source config
2026-04-12 17:24:15 +01:00
Peter Steinberger
50fcdb36a8 fix: preserve prompt budget for small context models 2026-04-12 17:16:37 +01:00
Vincent Koc
0b8f09819f fix(media): use exported decision outcome type 2026-04-12 17:13:27 +01:00
Vincent Koc
df1a82f6c1 test(gateway): share auth-profile ref fixture 2026-04-12 17:11:12 +01:00
Sergio Cadavid
51f0037e61 docs(memory-wiki): add QMD bridge recipe (#63165)
* docs(memory-wiki): add qmd bridge recipe

* docs(memory-wiki): remove restrictive allowlist from bridge example

* docs(changelog): note memory-wiki bridge recipe

* Apply suggestion from @greptile-apps[bot]

Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>

* Update memory-wiki.md

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
2026-04-12 17:10:49 +01:00
Vincent Koc
88dfc6e7b6 test(gateway): share hook session routing helper 2026-04-12 17:09:23 +01:00
Vincent Koc
43cb94a39a fix(doctor): preserve discord streaming downgrade compatibility 2026-04-12 17:09:08 +01:00
Daniel Alkurdi
1f0431cd11 fix(media): surface OpenAI audio transcription failures (#65096)
* fix(media): surface audio transcription provider failures

* fix(media): prefer failed reasons in surfaced errors

* fix(media): import attempt outcome type

* fix(media): guard malformed decision arrays

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-12 17:05:18 +01:00
Vincent Koc
d46f684898 test(agents): fix tsgo typing regressions 2026-04-12 17:02:24 +01:00
Vincent Koc
3bb69edf58 test(gateway): share browser origin rejection helper 2026-04-12 17:01:43 +01:00
Peter Steinberger
c146738996 fix: stabilize subagent cleanup retries 2026-04-12 16:59:27 +01:00
eric-fr4
ad826ea450 Fix WhatsApp media sends when mediaUrl is empty but mediaUrls is populated (#64394)
* Fix WhatsApp media fallback

Accept the first mediaUrls entry when mediaUrl is empty so outbound WhatsApp sends do not silently downgrade media messages to text.

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

* chore(changelog): credit WhatsApp mediaUrls fallback

* fix(changelog): restore 2026.4.10 release block

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-12 16:58:40 +01:00
Vincent Koc
2de988ae4b test(gateway): share temp home env setup 2026-04-12 16:56:06 +01:00
Vincent Koc
786de3eca2 fix(gateway): keep tick broadcasts non-droppable (#65436)
* fix(gateway): keep tick broadcasts non-droppable

* Update CHANGELOG.md
2026-04-12 16:53:34 +01:00
Vincent Koc
3cf0dda22a test(gateway): share node pairing auth helpers 2026-04-12 16:52:06 +01:00
Edder Talmor
5f92094d51 fix: gracefully handle missing QA scenario pack in npm distributions (closes #65082) (#65118)
* fix: allow built-in chat commands to bypass plugins.allow check (closes #65083)

The 'commands' CLI command is a built-in chat command registered in the
chat commands registry, not a plugin-backed command. When plugins.allow
is configured, the error message incorrectly suggests adding 'commands'
to plugins.allow, which produces a second error because no 'commands'
plugin exists.

Check if the command has a plugin entry or manifest alias before
suggesting plugins.allow. Built-in commands without plugin entries
now proceed normally instead of showing misleading errors.

* fix: gracefully handle missing QA scenario pack in npm distributions (closes #65082)

The completion cache update fails with a fatal error when the
qa/scenarios/index.md file is not present in the installed npm package,
even though the directory is listed in package.json "files".

Instead of throwing an error, return an empty QA scenario pack with
default agent identity. This allows completion cache updates to succeed
while QA scenarios remain unavailable in the npm distribution.

The QA scenario pack is primarily used for internal testing and QA
automation — it is not critical for end-user functionality.

* revert: remove unintended run-main.ts changes from PR #65118

The scenario-catalog.ts fix is the correct change for this PR.
The run-main.ts changes were accidentally included and cause a
regression in plugins.allow error handling.

* fix(qa): tolerate missing packaged scenario config

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-04-12 16:50:58 +01:00