mirror of https://github.com/openclaw/openclaw.git
* fix(feishu): fetch thread context so AI can see bot replies in topic threads When a user replies in a Feishu topic thread, the AI previously could only see the quoted parent message but not the bot's own prior replies in the thread. This made multi-turn conversations in threads feel broken. - Add `threadId` (omt_xxx) to `FeishuMessageInfo` and `getMessageFeishu` - Add `listFeishuThreadMessages()` using `container_id_type=thread` API to fetch all messages in a thread including bot replies - In `handleFeishuMessage`, fetch ThreadStarterBody and ThreadHistoryBody for topic session modes and pass them to the AI context - Reuse quoted message result when rootId === parentId to avoid redundant API calls; exclude root message from thread history to prevent duplication - Fall back to inbound ctx.threadId when rootId is absent or API fails - Fetch newest messages first (ByCreateTimeDesc + reverse) so long threads keep the most recent turns instead of the oldest Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(feishu): skip redundant thread context injection on subsequent turns Only inject ThreadHistoryBody on the first turn of a thread session. On subsequent turns the session already contains prior context, so re-injecting thread history (and starter) would waste tokens. The heuristic checks whether the current user has already sent a non-root message in the thread — if so, the session has prior turns and thread context injection is skipped entirely. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(feishu): handle thread_id-only events in prior-turn detection When ctx.rootId is undefined (thread_id-only events), the starter message exclusion check `msg.messageId !== ctx.rootId` was always true, causing the first follow-up to be misclassified as a prior turn. Fall back to the first message in the chronologically-sorted thread history as the starter. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(feishu): bootstrap topic thread context via session state * test(memory): pin remote embedding hostnames in offline suites * fix(feishu): use plugin-safe session runtime for thread bootstrap --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com> |
||
|---|---|---|
| .. | ||
| dev | ||
| docker | ||
| docs-i18n | ||
| e2e | ||
| k8s | ||
| lib | ||
| podman | ||
| pre-commit | ||
| repro | ||
| shell-helpers | ||
| systemd | ||
| auth-monitor.sh | ||
| bench-cli-startup.ts | ||
| bench-model.ts | ||
| build-and-run-mac.sh | ||
| build-docs-list.mjs | ||
| build_icon.sh | ||
| bundle-a2ui.sh | ||
| canvas-a2ui-copy.ts | ||
| changelog-to-html.sh | ||
| check-channel-agnostic-boundaries.mjs | ||
| check-composite-action-input-interpolation.py | ||
| check-ingress-agent-owner-context.mjs | ||
| check-no-monolithic-plugin-sdk-entry-imports.ts | ||
| check-no-pairing-store-group-auth.mjs | ||
| check-no-random-messaging-tmp.mjs | ||
| check-no-raw-channel-fetch.mjs | ||
| check-no-raw-window-open.mjs | ||
| check-no-register-http-handler.mjs | ||
| check-pairing-account-scope.mjs | ||
| check-plugin-sdk-exports.mjs | ||
| check-ts-max-loc.ts | ||
| check-webhook-auth-body-order.mjs | ||
| ci-changed-scope.d.mts | ||
| ci-changed-scope.mjs | ||
| claude-auth-status.sh | ||
| clawlog.sh | ||
| clawtributors-map.json | ||
| codesign-mac-app.sh | ||
| codespell-dictionary.txt | ||
| codespell-ignore.txt | ||
| committer | ||
| copy-export-html-templates.ts | ||
| copy-hook-metadata.ts | ||
| copy-plugin-sdk-root-alias.mjs | ||
| create-dmg.sh | ||
| cron_usage_report.ts | ||
| debug-claude-usage.ts | ||
| docs-link-audit.mjs | ||
| docs-list.js | ||
| docs-spellcheck.sh | ||
| firecrawl-compare.ts | ||
| generate-config-doc-baseline.ts | ||
| generate-host-env-security-policy-swift.mjs | ||
| generate-secretref-credential-matrix.ts | ||
| ghsa-patch.mjs | ||
| install.ps1 | ||
| install.sh | ||
| ios-asc-keychain-setup.sh | ||
| ios-beta-archive.sh | ||
| ios-beta-prepare.sh | ||
| ios-beta-release.sh | ||
| ios-configure-signing.sh | ||
| ios-team-id.sh | ||
| ios-write-version-xcconfig.sh | ||
| label-open-issues.ts | ||
| make_appcast.sh | ||
| mobile-reauth.sh | ||
| notarize-mac-artifact.sh | ||
| openclaw-npm-publish.sh | ||
| openclaw-npm-release-check.ts | ||
| package-mac-app.sh | ||
| package-mac-dist.sh | ||
| pr | ||
| pr-merge | ||
| pr-prepare | ||
| pr-review | ||
| protocol-gen-swift.ts | ||
| protocol-gen.ts | ||
| readability-basic-compare.ts | ||
| recover-orphaned-processes.sh | ||
| release-check.ts | ||
| restart-mac.sh | ||
| run-node.d.mts | ||
| run-node.mjs | ||
| run-openclaw-podman.sh | ||
| sandbox-browser-entrypoint.sh | ||
| sandbox-browser-setup.sh | ||
| sandbox-common-setup.sh | ||
| sandbox-setup.sh | ||
| setup-auth-system.sh | ||
| sparkle-build.ts | ||
| sqlite-vec-smoke.mjs | ||
| sync-labels.ts | ||
| sync-moonshot-docs.ts | ||
| sync-plugin-versions.ts | ||
| termux-auth-widget.sh | ||
| termux-quick-auth.sh | ||
| termux-sync-widget.sh | ||
| test-cleanup-docker.sh | ||
| test-force.ts | ||
| test-hotspots.mjs | ||
| test-install-sh-docker.sh | ||
| test-install-sh-e2e-docker.sh | ||
| test-live-gateway-models-docker.sh | ||
| test-live-models-docker.sh | ||
| test-parallel.mjs | ||
| test-perf-budget.mjs | ||
| test-shell-completion.ts | ||
| tsdown-build.mjs | ||
| ui.js | ||
| update-clawtributors.ts | ||
| update-clawtributors.types.ts | ||
| watch-node.d.mts | ||
| watch-node.mjs | ||
| write-build-info.ts | ||
| write-cli-compat.ts | ||
| write-cli-startup-metadata.ts | ||
| write-plugin-sdk-entry-dts.ts | ||
| zai-fallback-repro.ts | ||