Commit Graph

675 Commits

Author SHA1 Message Date
Peter Steinberger ac8f0c9c0d chore: prepare 2026.4.19-beta.1 release 2026-04-19 02:09:43 +01:00
Peter Steinberger 4fa961d4f1 refactor(lint): enable map spread rule 2026-04-18 20:37:12 +01:00
Peter Steinberger df525b90f2 chore(lint): enable unnecessary type parameter rule 2026-04-18 18:31:13 +01:00
Peter Steinberger 66385670e4 refactor: reduce unnecessary dynamic imports 2026-04-18 16:15:33 +01:00
Peter Steinberger 3f2e73b723 chore(release): bump version to 2026.4.18 2026-04-18 15:46:33 +01:00
Peter Steinberger c8d722d093 test: fix rebased local gates 2026-04-18 01:49:54 +01:00
Devin Robison 90979d7c3e fix(feishu): resolve card-action chat type before dispatch (#68201)
* fix(feishu): resolve card-action chat type before dispatch

* changelog: resolve card-action chat type before dispatch (#68201)

* address review: prefer chat_mode over chat_type, add error-path tests

- Swap resolution order to check chat_mode (conversation type) before
  chat_type (privacy classification), since Feishu's chat_type can
  return "private" for private group chats which would be wrongly
  classified as p2p.
- Treat "topic" as group semantics in the normalizer.
- Add comment explaining the field semantics and why "private" maps
  to "p2p" (safe-failure direction).
- Add two error-path tests: API returns non-zero code, and API throws.

* map chat_type=public to group in normalizer

Feishu's chat_type can return "public" for public group chats.
Without this mapping the fallback resolver would miss it and default
to p2p, routing a group card action through DM handling.

* address Aisle: cache chat-type lookups and scrub log output

- Add a 30-minute TTL cache for chatId -> chatType so repeated card
  actions on the same chat skip the Feishu API call.
- Strip chatId, event.token, and raw error strings from log messages;
  use err.message instead of String(err) to avoid leaking stack traces
  or HTTP internals from the Feishu SDK.

* prune expired chat-type cache entries

Add pruneChatTypeCache() called on each lookup so expired entries are
evicted and the cache stays bounded in long-running processes.

* address Aisle: scope cache by account, cap size, sanitize logs

- Key cache by accountId:chatId to prevent cross-account contamination.
- Cap cache at 5000 entries and evict oldest when exceeded.
- Sanitize response.msg and err.message with CR/LF stripping and
  length cap before logging to prevent log injection.
2026-04-17 12:29:04 -06:00
Peter Steinberger 0dc4c4076c chore: bump version to 2026.4.16 2026-04-17 00:45:04 +01:00
Peter Steinberger 8a37bb4ed6 perf: speed up security audit test imports 2026-04-16 21:54:13 +01:00
Peter Steinberger 372c0051ba test: speed up slow import-boundary tests 2026-04-16 21:14:17 +01:00
Gustavo Madeira Santana 78ac118427 fix(plugins): stabilize bundled setup runtimes (#67200)
Merged via squash.

Prepared head SHA: e8d6738fd0
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Co-authored-by: gumadeiras <5599352+gumadeiras@users.noreply.github.com>
Reviewed-by: @gumadeiras
2026-04-15 12:35:18 -04:00
Peter Steinberger b3fa5880dd build(extensions): bump bundled plugin versions to 2026.4.15-beta.1 2026-04-15 15:06:13 +01:00
Vincent Koc c727388f93 fix(plugins): localize bundled runtime deps to extensions (#67099)
* fix(plugins): localize bundled runtime deps to extensions

* fix(plugins): move staged runtime deps out of root

* fix(packaging): harden prepack and runtime dep staging

* fix(packaging): preserve optional runtime dep staging

* Update CHANGELOG.md

* fix(packaging): harden runtime staging filesystem writes

* fix(docker): ship preinstall warning in bootstrap layers

* fix(packaging): exclude staged plugin node_modules from npm pack
2026-04-15 12:04:31 +01:00
Gustavo Madeira Santana f958e311d2 tests: fix Feishu card action runtime mock typing 2026-04-14 16:38:01 -04:00
Vincent Koc c96871db30 test(feishu): avoid runtime env union lint trap 2026-04-14 21:14:43 +01:00
Vincent Koc 9386e3a9d4 test(feishu): align lifecycle runtime env typing 2026-04-14 21:01:39 +01:00
Agustin Rivera c8003f1b33 Harden Feishu webhook replay guards (#66707)
* fix(feishu): harden webhook replay guards

* changelog: note Feishu webhook + card-action fail-closed hardening (#66707)

* fix(feishu): move blank-token check above decodeFeishuCardAction

Run the early-return guard against a missing/blank card-action
token before decoding the card-action payload. Decoding is
side-effect-free so this is a readability + tiny-perf nit, not a
correctness change. Matches Greptile's P2 suggestion.

---------

Co-authored-by: Devin Robison <drobison@nvidia.com>
2026-04-14 13:50:41 -06:00
Peter Steinberger 1e11b36d80 test: align feishu replay helper typing 2026-04-13 20:49:39 -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
Vincent Koc f3283a330b fix(ci): repair extension boundary contracts 2026-04-13 22:37:25 +01:00
Vincent Koc 6d38bd4768 fix(feishu): keep comment replay closed after generic failures 2026-04-13 16:22:21 +01:00
Vincent Koc 9c7cb6b67d fix(feishu): make bot menu retries explicit 2026-04-13 16:17:13 +01:00
Vincent Koc 67593a8108 fix(feishu): make card action retries explicit 2026-04-13 16:08:24 +01:00
Vincent Koc 4c6fc974fc refactor(feishu): share synthetic event dedupe claims 2026-04-13 15:14:44 +01:00
Vincent Koc 085d0c5d30 refactor(feishu): reuse persistent dedupe lookups 2026-04-13 15:04:38 +01:00
Peter Steinberger 1de5610b24 fix(feishu): guard app registration fetches 2026-04-13 11:46:57 +01:00
Peter Steinberger ebba080ffc fix(feishu): break auth login barrel cycle 2026-04-13 11:36:09 +01:00
Vincent Koc 268824ff3a fix(feishu): keep channel auth on local api barrel 2026-04-13 11:30:07 +01:00
Vincent Koc 78448c0a26 fix(feishu): avoid sdk facade cycles 2026-04-13 11:19:10 +01:00
mazhe-nerd 9e2ac8a1cb feat: Streamline Feishu channel onboarding with QR code scan-to-create flow (#65680)
Add QR-based app registration, improve Feishu onboarding flows, support direct login entry, add group chat policy setup, reduce log noise, and update docs.
2026-04-13 18:03:44 +08:00
Peter Steinberger e4841d767d test: stabilize loaded full-suite checks 2026-04-12 11:52:56 -07:00
Peter Steinberger a8e140e395 chore: bump version to 2026.4.12 2026-04-12 10:37:18 -07:00
Peter Steinberger 0e3f9657da fix(plugins): preserve bundled host compatibility floor 2026-04-12 00:22:32 +01:00
wittam-01 ebb72baba3 feat(feishu): improve document comment session, rich parsing, and typing feedback (#63785)
* Feishu: upgrade comment session, context parsing, and typing reaction

* test(feishu): align comment prompt assertions
2026-04-11 17:26:21 +08:00
Peter Steinberger 1ab6e5dbf0 chore(release): bump version to 2026.4.11 2026-04-11 04:51:17 +01:00
Peter Steinberger 270630ba35 refactor: simplify channel setup conversions 2026-04-11 01:11:05 +01:00
Tak Hoffman 2c9c6207fa Preserve Feishu binding delivery metadata 2026-04-10 19:07:22 -05:00
Tak Hoffman 8e45398e1d fix: preserve outbound sender policy context 2026-04-10 17:48:58 -05:00
Peter Steinberger d187e1f3ad refactor: remove redundant feishu setup conversions 2026-04-10 22:21:26 +01:00
Peter Steinberger d236cb4680 chore: enable redundant type constituent checks 2026-04-10 21:23:40 +01:00
Peter Steinberger 0ebeee8b0d chore: enable consistent-return 2026-04-10 20:56:43 +01:00
Peter Steinberger 2786ed0f67 chore: enable no-base-to-string 2026-04-10 20:14:49 +01:00
Peter Steinberger dfe4c2d16d chore: enable no-floating-promises 2026-04-10 20:14:49 +01:00
evandance 4fb393980c feat(feishu): standardize request UA and register bot as AI agent (#63835)
- Set User-Agent to openclaw-feishu-builtin/{version}/{platform} for all
  Feishu API requests to comply with OAPI best practices
- Switch health-check probe to POST /bot/v1/openclaw_bot/ping to register
  the app as an AI agent (智能体) on the Feishu platform
- Update probe response parsing for new pingBotInfo response shape
2026-04-10 22:57:38 +08:00
Nimrod Gutman 4b4ec4dbc2 fix(feishu): route /btw through out-of-band lanes (#64324)
* fix(feishu): route /btw through out-of-band lanes

* fix(feishu): bound btw out-of-band lanes

* fix: route feishu btw out-of-band (#64324) (thanks @ngutman)
2026-04-10 17:48:15 +03:00
Vincent Koc 2b96f53f97 fix(feishu): split message and mention types 2026-04-10 08:16:28 +01:00
Peter Steinberger 8be3a4466c fix(feishu): read webhook bodies through pre-auth guard 2026-04-09 10:18:07 +01:00
Vincent Koc 3f7e6c7c64 fix(feishu): remove runtime api type cycle 2026-04-09 09:23:52 +01:00
Peter Steinberger 719f06510c chore: bump version to 2026.4.10 2026-04-09 03:56:22 +01:00
Vignesh Natarajan 2484064c48 chore(lint): clear extension lint regressions and add #63416 changelog 2026-04-08 17:17:29 -07:00