Skip to content

feat(openclaw-plugin): v1.0.8#1435

Merged
hijzy merged 50 commits intomainfrom
openclaw-local-plugin-20260331
Apr 8, 2026
Merged

feat(openclaw-plugin): v1.0.8#1435
hijzy merged 50 commits intomainfrom
openclaw-local-plugin-20260331

Conversation

@syzsunshine219
Copy link
Copy Markdown
Collaborator

Description

Please include a summary of the change, the problem it solves, the implementation approach, and relevant context. List any dependencies required for this change.

Related Issue (Required): Fixes #issue_number

Type of change

Please delete options that are not relevant.

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Refactor (does not change functionality, e.g. code style improvements, linting)
  • Documentation update

How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration

  • Unit Test
  • Test Script Or Test Steps (please provide)
  • Pipeline Automated API Test (please provide)

Checklist

  • I have performed a self-review of my own code | 我已自行检查了自己的代码
  • I have commented my code in hard-to-understand areas | 我已在难以理解的地方对代码进行了注释
  • I have added tests that prove my fix is effective or that my feature works | 我已添加测试以证明我的修复有效或功能正常
  • I have created related documentation issue/PR in MemOS-Docs (if applicable) | 我已在 MemOS-Docs 中创建了相关的文档 issue/PR(如果适用)
  • I have linked the issue to this PR (if applicable) | 我已将 issue 链接到此 PR(如果适用)
  • I have mentioned the person who will review this PR | 我已提及将审查此 PR 的人

Reviewer Checklist

  • closes #xxxx (Replace xxxx with the GitHub issue number)
  • Made sure Checks passed
  • Tests have been provided

ChaseLiao and others added 30 commits March 12, 2026 00:10
- Update better-sqlite3 to v12.6.3 for better compatibility
- Add Node version upper bound (<25.0.0) in engines field
- Add Node v25 detection warning in postinstall script
- Improve error messages for v25+ users with fallback options
…tall reliability

- Add store.recordApiLog("memory_search") calls in Context Engine assemble()
  so auto-recall results appear in Memory Viewer's log panel
- Fix postinstall.cjs: don't delete node_modules on fresh install; track
  plugin version + Node.js major version in .installed-version fingerprint;
  only clean on environment change (plugin upgrade or Node.js version change)
- Add post-install verification in install.sh and install.ps1: detect missing
  node_modules and better-sqlite3, auto-recover with --ignore-scripts reinstall
- Bump version to 1.0.7-beta.2

Made-with: Cursor
When tools.allow contains '*' (wildcard), the plugin no longer appends
'group:plugins' to tools.allow. This prevents an OpenClaw core bug where
each config change triggers a restart loop:

  append group:plugins to tools.allow
  → core syncs to acp.allowedAgents without dedup
  → config change detected → gateway restart
  → plugin re-initializes → core appends again
  → infinite restart loop

The wildcard '*' already covers all plugin tools, so the patching is
unnecessary in this case.
…ld memory injection

Reverts PR #1356 (feat: register context engine slot for local plugin).
Restores the original before_prompt_build hook with full memory injection
via prependContext, including local+hub search, LLM filtering, dedup,
and integrated skill auto-recall.

- Remove registerContextEngine and registerMemoryPromptSection calls
- Delete src/context-engine/ module and tests/context-engine.test.ts
- Remove contextEngine slot config from install scripts
- Restore complete auto-recall logic in before_prompt_build hook

Made-with: Cursor
- Re-install deps if postinstall cleaned node_modules on upgrade
- Set MEMOS_SKIP_SETUP=1 for both install passes to skip interactive wizard
- Clean up stale contextEngine slot from openclaw.json on upgrade

Made-with: Cursor
# Conflicts:
#	apps/memos-local-openclaw/index.ts
## Description

Please include a summary of the change, the problem it solves, the
implementation approach, and relevant context. List any dependencies
required for this change.

Related Issue (Required):  Fixes #issue_number

## Type of change

Please delete options that are not relevant.

- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] Refactor (does not change functionality, e.g. code style
improvements, linting)
- [ ] Documentation update

## How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide
instructions so we can reproduce. Please also list any relevant details
for your test configuration

- [ ] Unit Test
- [ ] Test Script Or Test Steps (please provide)
- [ ] Pipeline Automated API Test (please provide)

## Checklist

- [ ] I have performed a self-review of my own code | 我已自行检查了自己的代码
- [ ] I have commented my code in hard-to-understand areas |
我已在难以理解的地方对代码进行了注释
- [ ] I have added tests that prove my fix is effective or that my
feature works | 我已添加测试以证明我的修复有效或功能正常
- [ ] I have created related documentation issue/PR in
[MemOS-Docs](https://github.com/MemTensor/MemOS-Docs) (if applicable) |
我已在 [MemOS-Docs](https://github.com/MemTensor/MemOS-Docs) 中创建了相关的文档
issue/PR(如果适用)
- [ ] I have linked the issue to this PR (if applicable) | 我已将 issue
链接到此 PR(如果适用)
- [ ] I have mentioned the person who will review this PR | 我已提及将审查此 PR
的人

## Reviewer Checklist
- [ ] closes #xxxx (Replace xxxx with the GitHub issue number)
- [ ] Made sure Checks passed
- [ ] Tests have been provided
## Description

Please include a summary of the change, the problem it solves, the
implementation approach, and relevant context. List any dependencies
required for this change.

Related Issue (Required):  Fixes #issue_number

## Type of change

Please delete options that are not relevant.

- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] Refactor (does not change functionality, e.g. code style
improvements, linting)
- [ ] Documentation update

## How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide
instructions so we can reproduce. Please also list any relevant details
for your test configuration

- [ ] Unit Test
- [ ] Test Script Or Test Steps (please provide)
- [ ] Pipeline Automated API Test (please provide)

## Checklist

- [ ] I have performed a self-review of my own code | 我已自行检查了自己的代码
- [ ] I have commented my code in hard-to-understand areas |
我已在难以理解的地方对代码进行了注释
- [ ] I have added tests that prove my fix is effective or that my
feature works | 我已添加测试以证明我的修复有效或功能正常
- [ ] I have created related documentation issue/PR in
[MemOS-Docs](https://github.com/MemTensor/MemOS-Docs) (if applicable) |
我已在 [MemOS-Docs](https://github.com/MemTensor/MemOS-Docs) 中创建了相关的文档
issue/PR(如果适用)
- [ ] I have linked the issue to this PR (if applicable) | 我已将 issue
链接到此 PR(如果适用)
- [ ] I have mentioned the person who will review this PR | 我已提及将审查此 PR
的人

## Reviewer Checklist
- [ ] closes #xxxx (Replace xxxx with the GitHub issue number)
- [ ] Made sure Checks passed
- [ ] Tests have been provided
- Update better-sqlite3 to v12.6.3 for better compatibility
- Add Node version upper bound (<25.0.0) in engines field
- Add Node v25 detection warning in postinstall script
- Improve error messages for v25+ users with fallback options

## Description

Please include a summary of the change, the problem it solves, the
implementation approach, and relevant context. List any dependencies
required for this change.

Related Issue (Required):  Fixes @issue_number

## Type of change

Please delete options that are not relevant.

- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] Refactor (does not change functionality, e.g. code style
improvements, linting)
- [ ] Documentation update

## How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide
instructions so we can reproduce. Please also list any relevant details
for your test configuration

- [ ] Unit Test
- [ ] Test Script Or Test Steps (please provide)
- [ ] Pipeline Automated API Test (please provide)

## Checklist

- [ ] I have performed a self-review of my own code | 我已自行检查了自己的代码
- [ ] I have commented my code in hard-to-understand areas |
我已在难以理解的地方对代码进行了注释
- [ ] I have added tests that prove my fix is effective or that my
feature works | 我已添加测试以证明我的修复有效或功能正常
- [ ] I have created related documentation issue/PR in
[MemOS-Docs](https://github.com/MemTensor/MemOS-Docs) (if applicable) |
我已在 [MemOS-Docs](https://github.com/MemTensor/MemOS-Docs) 中创建了相关的文档
issue/PR(如果适用)
- [ ] I have linked the issue to this PR (if applicable) | 我已将 issue
链接到此 PR(如果适用)
- [ ] I have mentioned the person who will review this PR | 我已提及将审查此 PR
的人

## Reviewer Checklist
- [ ] closes #xxxx (Replace xxxx with the GitHub issue number)
- [ ] Made sure Checks passed
- [ ] Tests have been provided
)

## Summary

Fix auto-recall failures caused by `/new` and `/reset` startup prompts
being used as the recall query.

## Problem

When a new session starts, the runtime may prepend a long startup prompt
such as:

- `A new session was started via /new or /reset...`
- session startup instructions
- internal runtime context
- "Continue where you left off" text

The auto-recall pipeline was trimming some transport metadata, but it
could still treat this injected startup text as the search query. That
made retrieval noisy or caused it to miss relevant memories entirely.

## Root Cause

Auto-recall query extraction only handled a subset of wrapper metadata
inline at the call site. It did not normalize session-start prompt text
introduced during `/new` or `/reset`, so the retrieval query could
become the whole startup prompt instead of the user's actual message.

## Fix

- Extract query normalization into `normalizeAutoRecallQuery(rawPrompt)`
- Strip sender metadata / fenced JSON wrappers
- Reuse inbound metadata cleanup
- Remove injected `/new` and `/reset` startup prompt text
- Remove internal runtime context and "Continue where you left off"
carry-over text
- Use the normalized query in the auto-recall entry path

## Result

Auto-recall now searches with the user's real message content instead of
the session-start boilerplate, improving retrieval accuracy in fresh
sessions.
## Bug

When `tools.allow` contains `"*"`, the plugin still appends
`"group:plugins"` to `tools.allow`. This triggers OpenClaw core to sync
`"group:plugins"` to `acp.allowedAgents` **without deduplication**,
causing an infinite restart loop:

```
plugin init → append "group:plugins" to tools.allow
→ core syncs to acp.allowedAgents (no dedup)
→ config change detected → gateway restart
→ plugin re-inits → core appends again
→ infinite restart loop
```

In production this resulted in 20+ restarts in ~40 minutes, with
`acp.allowedAgents` accumulating 34+ duplicate `"group:plugins"`
entries.

## Reproduction

1. Install `@memtensor/memos-local-openclaw-plugin` v1.0.7 on OpenClaw
2. Set `tools.allow` to `["*"]` in `openclaw.json`
3. Start gateway → observe repeated config changes and restarts in logs

## Fix

Skip patching `tools.allow` when it already contains the wildcard `"*"`,
since the wildcard already covers all plugin tools.

```diff
- if (Array.isArray(allow) && allow.length > 0 && !allow.includes("group:plugins")) {
+ if (Array.isArray(allow) && allow.length > 0 && !allow.includes("group:plugins") && !allow.includes("*")) {
```

## Impact

- Users with `tools.allow: ["*"]` (very common) will no longer trigger
restart loops
- Users with explicit tool lists still get `"group:plugins"` appended as
before
- Zero breaking changes
- Support `session_key` filter for tasks and skills in SQLite
- Return `taskSessions` and `skillSessions` from viewer server
- Add bulk selection and delete UI for memories and tasks
- Optimize viewer UI layout with sticky sidebar and pagination row
)

- Support `session_key` filter for tasks and skills in SQLite
- Return `taskSessions` and `skillSessions` from viewer server
- Add bulk selection and delete UI for memories and tasks
- Optimize viewer UI layout with sticky sidebar and pagination row

## Description

Please include a summary of the change, the problem it solves, the
implementation approach, and relevant context. List any dependencies
required for this change.

Related Issue (Required):  Fixes #issue_number

## Type of change

Please delete options that are not relevant.

- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] Refactor (does not change functionality, e.g. code style
improvements, linting)
- [ ] Documentation update

## How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide
instructions so we can reproduce. Please also list any relevant details
for your test configuration

- [ ] Unit Test
- [ ] Test Script Or Test Steps (please provide)
- [ ] Pipeline Automated API Test (please provide)

## Checklist

- [ ] I have performed a self-review of my own code | 我已自行检查了自己的代码
- [ ] I have commented my code in hard-to-understand areas |
我已在难以理解的地方对代码进行了注释
- [ ] I have added tests that prove my fix is effective or that my
feature works | 我已添加测试以证明我的修复有效或功能正常
- [ ] I have created related documentation issue/PR in
[MemOS-Docs](https://github.com/MemTensor/MemOS-Docs) (if applicable) |
我已在 [MemOS-Docs](https://github.com/MemTensor/MemOS-Docs) 中创建了相关的文档
issue/PR(如果适用)
- [ ] I have linked the issue to this PR (if applicable) | 我已将 issue
链接到此 PR(如果适用)
- [ ] I have mentioned the person who will review this PR | 我已提及将审查此 PR
的人

## Reviewer Checklist
- [ ] closes #xxxx (Replace xxxx with the GitHub issue number)
- [ ] Made sure Checks passed
- [ ] Tests have been provided
…auto-finalize (#1412)

* fix(memos-local): scope sharing state by hubInstanceId and fix owner isolation

- Add hubInstanceId to team_shared_chunks, local_shared_tasks, and
  client_hub_connection to prevent stale sharing state when switching
  between Hub instances
- Fix memory_search/timeline/get owner isolation by accepting agentId
  from tool execution context
- Fix viewer sharing queries to use role-appropriate tables (hub_memories
  vs team_shared_chunks)
- Apply maxChars truncation in memory_get handler
- Fix 11 failing tests: accuracy thresholds, integration env isolation,
  plugin-impl join flow, and task-processor topic judge flakiness

Made-with: Cursor

* feat(memos-local-openclaw): hub embedding on ingest, vector+FTS fusion search, LLM dedup

- Compute embeddings on Hub when memories are shared (same as task/skill),
  instead of on-the-fly at search time; auto-backfill missing vectors on startup
- Hub search now reads pre-computed vectors from hub_memory_embeddings + FTS + RRF
  (unified retrieval strategy across memory/chunk/skill)
- Add deduplication rule to LLM filterRelevant prompt so merged local+remote
  results automatically drop near-duplicate snippets
- Add LLM filtering to skill_search hub merge path (consistent with memory_search)
- Persist latest Hub username/role during client 401 recovery
- Add admin rename notification + fix client nickname consistency
- Fix Hub join dryRun logic, normalizeTimestamp compile error
- Define missing OpenClaw provider prompt constants

* refactor(memos-local-openclaw): parallel local+hub search with unified 3-phase recall

- Refactor both memory_search tool and auto-recall to a 3-phase pipeline:
  Phase 1: local engine.search() ∥ hubSearchMemories() via Promise.all
  Phase 2: merge all candidates → single LLM filterRelevant() call
  Phase 3: build response with unified { candidates, hubCandidates, filtered } structure
- Remove redundant double LLM filtering (was: local filter → hub fallback → merge filter)
- Separate hub-memory origin hits from local candidates in RecallEngine results
- Simplify trackTool serialization to a single branch matching the unified details shape
- Add dedicated "远程召回" (Hub Remote) display section in Viewer between initial retrieval and LLM filtered results

* fix(memos-local-openclaw): use exact version in auto-update to bypass npm cache

- update-check: installCommand now uses exact version (e.g. @1.0.6-beta.11) instead of dist-tag (@beta)
- frontend: always construct pkgSpec as packageName@exactVersion, pass targetVersion to backend
- backend: verify downloaded version matches targetVersion, rollback on mismatch
- npm pack: add --prefer-online flag as extra safety
- postinstall: fix native binding validation, delegate to native-binding.cjs
- update-install: flush HTTP response before SIGUSR1 restart, add no-cache headers

* feat(memos-local-openclaw): add viewer skill disable actions

Add disable, enable, and hard-delete management for skills in the memory viewer so inactive skills stop participating in recall while remaining manageable from the UI.

Made-with: Cursor

* feat(memos-local): structured topic classifier, agent source tracking, task auto-finalize, and viewer enhancements

- Replace simple NEW/SAME topic judge with structured two-stage LLM classifier
  (JSON output with confidence score, low-confidence arbitration fallback)
- Compact prompts and task state to reduce token consumption by ~50-60%
- Add role-based dedup filtering to prevent cross-role memory merging
- Add sourceAgent/owner field to memory search results and hub sharing
- Add task auto-finalize for stale active tasks (configurable timeout in settings)
- Add agent filter badges and i18n support in viewer UI
- Fix session-scoped task processing to prevent cross-agent task interference
- Update task-processor tests for new classifier API with arbitration scenarios

Made-with: Cursor
…alled by host

OpenClaw 4.2 loads third-party plugins via deferred reload, which runs
after startPluginServices() has already executed. This means the plugin's
service.start() callback (containing ViewerServer startup) is never
invoked by the host.

Add a 3-second setTimeout fallback in register() that self-starts the
viewer if service.start() hasn't been called, ensuring the Memory Viewer
(port 18799) is always accessible.

Also improve install scripts:
- Register plugin in slots.memory, entries, and installs of openclaw.json
- Pin spec to exact resolved version to prevent auto-update triggering
  the OpenClaw 4.2 security scanner
- Use gateway install/start (background service) instead of gateway run
- Add post-install hints showing Web UI and Memory Viewer URLs

Made-with: Cursor
…#1413)

## Summary

- **Viewer self-start fallback**: OpenClaw 4.2 loads third-party plugins
via deferred reload *after* `startPluginServices()` has already run.
This means the plugin's `service.start()` callback (which starts the
ViewerServer on port 18799) is never invoked by the host. Added a
3-second `setTimeout` fallback in `register()` that self-starts the
viewer if the host hasn't called `service.start()`.
- **Install script: full plugin registration**: Register the plugin in
`plugins.slots.memory`, `plugins.entries`, and `plugins.installs`
sections of `openclaw.json`, ensuring the plugin auto-loads correctly on
gateway restart.
- **Install script: pin version spec**: Use the exact resolved version
(e.g. `@memtensor/memos-local-openclaw-plugin@1.0.7`) instead of
`@latest` in the `installs.spec` field, preventing OpenClaw 4.2's
security scanner from repeatedly blocking auto-update attempts.
- **Install script: background service**: Replace `exec npx openclaw
gateway run` (foreground, blocks shell) with `npx openclaw gateway
install/start` (background launchd service), so the script exits
cleanly.
- **Install script: completion hints**: Print OpenClaw Web UI and Memory
Viewer URLs after successful installation.

## Test plan

- [x] Verified on macOS with OpenClaw 2026.4.2 — Memory Viewer starts on
port 18799
- [x] Confirmed self-start log: `memos-local: service.start() not called
by host, self-starting viewer...`
- [x] Confirmed `curl -sI http://localhost:18799` returns HTTP 200
- [ ] Test `install.ps1` on Windows

Made with [Cursor](https://cursor.com)
…up wait

- Register plugins.slots.memory, plugins.entries, and plugins.installs
  with pinned version in openclaw.json
- Switch from foreground `npx openclaw gateway run` to background
  `openclaw gateway install + start` (no more script hanging)
- Add port-check wait loop before printing "Installation complete"
  so Memory Viewer is ready when user sees the URL

Made-with: Cursor
…toFinalize input

- Fix padding on migrateConcurrency and ppConcurrency selects so the
  custom dropdown arrow no longer overlaps the selected value
- Restrict taskAutoFinalizeHours input to non-negative integers by
  blocking invalid keys and sanitizing pasted content
- Clamp saved value with Math.max(0, ...) as a server-side safeguard

Made-with: Cursor
…toFinalize input (#1414)

## Summary
- **Fix concurrency select dropdown arrow overlap**: The inline
`padding:3px 10px` on `migrateConcurrency` and `ppConcurrency` selects
was overriding the `.filter-select` class's `padding-right:28px`,
causing the custom SVG dropdown arrow to overlap the selected number.
Fixed by using `padding:3px 28px 3px 10px`.
- **Restrict taskAutoFinalizeHours to non-negative integers**: The input
allowed typing invalid characters like `-`, `e`, `+`, resulting in
values like "0-4" which the browser treats as empty, causing silent
fallback to default. Fixed with three layers of protection:
  - `onkeydown`: blocks `-`, `e`, `E`, `+` keys
  - `oninput`: strips any non-digit characters (covers paste scenarios)
  - Save handler: `Math.max(0, ...)` clamp as server-side safeguard

## Test plan
- [ ] Open Memory Viewer → Import Memory panel → verify the "并行 Agent 数"
select dropdown arrow does not overlap the number
- [ ] Open Memory Viewer → Post-process section → verify the same fix
for "并行 Agent 数" select there
- [ ] Open Settings → General Settings → "任务自动完结(小时)" → verify cannot
type `-`, `e`, `E`, `+`
- [ ] Try pasting "0-4" or "-3" into the taskAutoFinalize input → verify
it gets sanitized to digits only
- [ ] Set taskAutoFinalize to 0 → save → refresh → verify it stays 0
- [ ] Leave taskAutoFinalize empty → save → refresh → verify it defaults
to 4

Made with [Cursor](https://cursor.com)
jiachengzhen and others added 18 commits April 3, 2026 21:19
…arch

- Import tab: wrap start-import + concurrency in flex group to fix label overlap
- Tasks: align list/detail badge with local_shared_tasks / synced_chunks / team_shared_chunks fallback
- Tasks: scope PUT uses same team detection as API badge; clear team_shared_chunks on team→local/private
- Task detail: clear hubTaskId when switching to local/private so modal badge updates
- Hub search: vector RRF candidates need min cosine 0.45 or FTS hit (reduce noisy team results)

Made-with: Cursor
Use '{n}段记忆片段' / '{n} memory segments' and drop trailing colon.

syzsunshine219
- Skills: remove duplicate delete on cards; gate share in detail modal for non-active skills
- Admin shared skills: single download icon (i18n already includes arrow)
- Team skills section: await hub list fetch, validate response, client timeout, empty/error copy; hubRequestJson timeout
- Clarify skills.hub.empty when hub rows are deduped against local list
- Hub skill detail: scope task-summary :empty placeholder to task panel only; show pull-to-local hint when no SKILL body in list cache
…ed session display (#1419)

* fix(memos-local): scope sharing state by hubInstanceId and fix owner isolation

- Add hubInstanceId to team_shared_chunks, local_shared_tasks, and
  client_hub_connection to prevent stale sharing state when switching
  between Hub instances
- Fix memory_search/timeline/get owner isolation by accepting agentId
  from tool execution context
- Fix viewer sharing queries to use role-appropriate tables (hub_memories
  vs team_shared_chunks)
- Apply maxChars truncation in memory_get handler
- Fix 11 failing tests: accuracy thresholds, integration env isolation,
  plugin-impl join flow, and task-processor topic judge flakiness

Made-with: Cursor

* feat(memos-local-openclaw): hub embedding on ingest, vector+FTS fusion search, LLM dedup

- Compute embeddings on Hub when memories are shared (same as task/skill),
  instead of on-the-fly at search time; auto-backfill missing vectors on startup
- Hub search now reads pre-computed vectors from hub_memory_embeddings + FTS + RRF
  (unified retrieval strategy across memory/chunk/skill)
- Add deduplication rule to LLM filterRelevant prompt so merged local+remote
  results automatically drop near-duplicate snippets
- Add LLM filtering to skill_search hub merge path (consistent with memory_search)
- Persist latest Hub username/role during client 401 recovery
- Add admin rename notification + fix client nickname consistency
- Fix Hub join dryRun logic, normalizeTimestamp compile error
- Define missing OpenClaw provider prompt constants

* refactor(memos-local-openclaw): parallel local+hub search with unified 3-phase recall

- Refactor both memory_search tool and auto-recall to a 3-phase pipeline:
  Phase 1: local engine.search() ∥ hubSearchMemories() via Promise.all
  Phase 2: merge all candidates → single LLM filterRelevant() call
  Phase 3: build response with unified { candidates, hubCandidates, filtered } structure
- Remove redundant double LLM filtering (was: local filter → hub fallback → merge filter)
- Separate hub-memory origin hits from local candidates in RecallEngine results
- Simplify trackTool serialization to a single branch matching the unified details shape
- Add dedicated "远程召回" (Hub Remote) display section in Viewer between initial retrieval and LLM filtered results

* fix(memos-local-openclaw): use exact version in auto-update to bypass npm cache

- update-check: installCommand now uses exact version (e.g. @1.0.6-beta.11) instead of dist-tag (@beta)
- frontend: always construct pkgSpec as packageName@exactVersion, pass targetVersion to backend
- backend: verify downloaded version matches targetVersion, rollback on mismatch
- npm pack: add --prefer-online flag as extra safety
- postinstall: fix native binding validation, delegate to native-binding.cjs
- update-install: flush HTTP response before SIGUSR1 restart, add no-cache headers

* feat(memos-local-openclaw): add viewer skill disable actions

Add disable, enable, and hard-delete management for skills in the memory viewer so inactive skills stop participating in recall while remaining manageable from the UI.

Made-with: Cursor

* feat(memos-local): structured topic classifier, agent source tracking, task auto-finalize, and viewer enhancements

- Replace simple NEW/SAME topic judge with structured two-stage LLM classifier
  (JSON output with confidence score, low-confidence arbitration fallback)
- Compact prompts and task state to reduce token consumption by ~50-60%
- Add role-based dedup filtering to prevent cross-role memory merging
- Add sourceAgent/owner field to memory search results and hub sharing
- Add task auto-finalize for stale active tasks (configurable timeout in settings)
- Add agent filter badges and i18n support in viewer UI
- Fix session-scoped task processing to prevent cross-agent task interference
- Update task-processor tests for new classifier API with arbitration scenarios

Made-with: Cursor

* feat(viewer): add owner badge, unified session key format, and improved session display

- Migrate session keys from `openclaw-import-{id}` / `openclaw-session-{id}` to `agent:{id}:import` / `agent:{id}:session:{sid}` with backward-compatible dedup checks
- Add owner tag to memory cards and detail modal
- Add fmtSessionDisplay / fmtAgentName / isImportedSession helpers for consistent formatting
- Bump version to 1.0.8-beta.7
…ull key

- Show agent:{id} for three-part agent session keys (e.g. agent:main:main)
- Tooltip matches label; hint to click to copy
- Click badge copies full session_key to clipboard with toast
- Bump package and plugin manifest to 1.0.8-beta.9
- Add --allow-same-version so publish workflow succeeds when branch
  already bumps package.json to the requested version
- Only git commit release bump when package.json actually changed
MemTensor/MemOS main requires PR + status checks; pushing HEAD fails.
npm publish already uses the runner workspace; tag records the release commit.
…tch tweaks

User runs workflow with correct branch via "Use workflow from"; prior
yaml changes for allow-same-version and tag-only push are reverted.
Fixes npm 'Version not changed' when package.json already matches inputs.version.
Skip git commit when bump step leaves package.json unchanged.
…nt:id for import

- package.json and openclaw.plugin.json
- Viewer: agent:*:session:* list label shows agent:{id} only; copy full key unchanged
- agent:* with 5+ segments (e.g. discord channel peer) shows agent:{id} only
- Copy still uses full session_key
- Release version 1.0.8 (stable)
@syzsunshine219 syzsunshine219 changed the title Openclaw-local-plugin v1.0.8 feat(openclaw-plugin): v1.0.8 Apr 8, 2026
jiachengzhen added 2 commits April 8, 2026 10:39
- Keep contextEngine cleanup + delete empty slots; main wording for memory slot
- plugins.installs: pinned spec from extracted package.json when present
- Shell: npx openclaw gateway install/start + Viewer wait loop + bilingual summary
- PowerShell: same config logic, npx gateway, sqlite rebuild path, bilingual complete
@hijzy hijzy merged commit 8fb4bb6 into main Apr 8, 2026
16 checks passed
@syzsunshine219 syzsunshine219 deleted the openclaw-local-plugin-20260331 branch April 8, 2026 02:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants