Feat/chat api en docs#1742
Open
hiasky wants to merge 40 commits into
Open
Conversation
…ding
Two co-located package-layout tidy-ups:
1. Rename `web/` to `viewer/`
- `git mv web viewer`, `tests/unit/web` to `tests/unit/viewer`,
`tsconfig.web.json` to `tsconfig.viewer.json`.
- Updated build/runtime references: `vite.config.ts` (root + alias
`@web` to `@viewer`), `bridge.cts` (staticRoot), `package.json`
(`files`, scripts `build:viewer` / `viewer:dev`),
`adapters/openclaw/index.ts` (resolveViewerStaticRoot
candidates), `tsconfig.json` / `tsconfig.build.json` exclude
entries, `.gitignore` (`viewer/dist/`), and the install
adapter scripts' log lines.
- Updated test import paths and code/doc comments across
`tests/`, `docs/`, `viewer/README.md`, `viewer/ALGORITHMS.md`,
`ARCHITECTURE.md`, `README.md`, etc.
- No public surface change: package name, `main`, `exports`,
HTTP routes (`/ui/`, `/api/v1/*`) all unchanged. Natural-English
uses of "web" (e.g. "web framework", "open web") preserved.
2. Drop unfinished `site/` scaffolding
- Remove `site/**`, `tsconfig.site.json`, `tests/unit/site/`.
- Strip `siteRoot` and `/site/*` route from `server/middleware/static.ts`
and `server/types.ts`.
- Clean up `.npmignore`, `CHANGELOG.md`, `templates/README.user.md`,
and tsconfig include/exclude entries that referenced `site/`.
Verification:
- `npm run lint` (tsc --noEmit) — pass
- `npm run build` + `npm run build:viewer` — pass; `viewer/dist/` produced
- `npm pack --dry-run` — `viewer/dist/*` shipped
- 110 viewer/install/http/e2e tests pass
- Pre-existing failures in reward / memory / migrator suites are
unrelated (verified by re-running on the un-renamed HEAD).
…scaffolding (MemTensor#1666) ## Summary Two co-located, low-risk package-layout tidy-ups for `apps/memos-local-plugin`: ### 1. Rename `web/` → `viewer/` The directory was named `web/` for historical reasons but everything in it is the **viewer** SPA (Vite + Preact dashboard). Aligning the name with what it actually is. - `git mv` rename of: - `web/` → `viewer/` - `tests/unit/web/` → `tests/unit/viewer/` - `tsconfig.web.json` → `tsconfig.viewer.json` - Build/runtime references updated: - `vite.config.ts` (`root`, alias `@web` → `@viewer`) - `bridge.cts` (`staticRoot: viewer/dist`) - `package.json` (`files`, scripts `build:viewer` / `viewer:dev`) - `adapters/openclaw/index.ts` (`resolveViewerStaticRoot` candidates) - `tsconfig.json` / `tsconfig.build.json` (`exclude`) - `.gitignore` (`viewer/dist/`) - `adapters/{openclaw,hermes}/install.*.sh` log lines - Test imports + code/doc comments updated across `tests/`, `docs/`, `viewer/README.md`, `viewer/ALGORITHMS.md`, `ARCHITECTURE.md`, `README.md`, etc. - **No public surface change**: package name, `main`, `exports`, HTTP routes (`/ui/`, `/api/v1/*`) all unchanged. - Natural-English uses of "web" (e.g. \"web framework\", \"open web\") preserved — only path/identifier references were touched. ### 2. Drop unfinished `site/` scaffolding The `site/` directory was a half-built product website that's no longer used; this removes the leftover scaffolding so it doesn't confuse readers or get accidentally bundled. - Remove `site/**`, `tsconfig.site.json`, `tests/unit/site/`. - Strip `siteRoot` and `/site/*` route from `server/middleware/static.ts` + `server/types.ts`. - Clean up `.npmignore`, `CHANGELOG.md`, `templates/README.user.md`, and tsconfig include/exclude entries that referenced `site/`. ## Test plan - [x] `npm run lint` (tsc --noEmit) — pass - [x] `npm run build` + `npm run build:viewer` — pass; `viewer/dist/` produced - [x] `npm pack --dry-run` — `viewer/dist/*` shipped in the tarball - [x] 110 viewer / install / http / e2e unit tests pass - [x] Verified pre-existing failures in reward / memory / migrator suites are NOT caused by this PR (re-ran on `HEAD` before the rename — same 8 failures). - [ ] Manual smoke on the daemon: `npm run bridge:daemon` and confirm the viewer is served from the renamed path
Add embedding maintenance APIs and viewer controls so imported memories and model changes can repair or rebuild vectors against the active provider. Treat remote embedding dimensions as provider-derived state, not user config, and aggregate explicit feedback corrections consistently.
…Tensor#1682) ## Summary - Add embedding maintenance endpoints and viewer controls to repair missing/mismatched vectors or rebuild all vectors after imports/model changes. - Infer remote embedding dimensions from provider responses instead of exposing dimensions as user config, preventing bge-m3 vectors from being truncated to 384. - Aggregate multiple explicit feedback corrections in heuristic reward fallback so later negative feedback can lower trace value and priority. ## Test plan - npm run lint - npm test -- tests/unit/config/load.test.ts tests/unit/config/writer.test.ts tests/unit/embedding/normalize.test.ts - npm test -- tests/unit/reward/human-scorer.test.ts tests/unit/pipeline/memory-core.test.ts -t "heuristic|submitFeedback aggregates|repairs missing" - npm test -- tests/unit/pipeline/memory-core.test.ts tests/unit/reward/human-scorer.test.ts tests/unit/server/http.test.ts tests/unit/bridge/methods.test.ts - npm run build:viewer - npm pack --json
…on and interactive UI - Refactor `install.ps1` to auto-detect OpenClaw/Hermes and add an interactive menu. - Use `npm pack` and tarball extraction for robust package deployment. - Automate configuration patching for `openclaw.json` and `config.yaml`. - Update `postinstall.cjs` banner to drop the hardcoded `-Agent` argument.
…Tensor#1684) ## Description This PR significantly improves the Windows PowerShell installation experience for the `memos-local-plugin`. **Key Changes:** 1. **Auto-detection & Interactive UI**: Introduced an interactive menu in `install.ps1` that automatically detects existing OpenClaw (`~/.openclaw`) and Hermes (`~/.hermes`) environments. 2. **Robust Deployment**: Replaced simple file copying with `npm pack` and tarball extraction to ensure a cleaner and more reliable package deployment. 3. **Automated Configuration**: The script now automatically patches the target agent's configuration files (`openclaw.json` for OpenClaw and `config.yaml` for Hermes), reducing manual setup steps. 4. **Postinstall Update**: Removed the hardcoded `-Agent` argument from the `postinstall.cjs` banner, as the PowerShell script now handles agent selection automatically. ## Type of change Please delete options that are not relevant. - [x] New feature (non-breaking change which adds functionality) - [x] Refactor (does not change functionality, e.g. code style improvements, linting) ## 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 - [x] Test Script Or Test Steps (please provide) **Test Steps:** 1. On a Windows environment, run `powershell -ExecutionPolicy Bypass -File install.ps1`. 2. Verify that the interactive menu correctly displays the auto-detected agent environments. 3. Select an installation option (e.g., OpenClaw, Hermes, or Both). 4. Confirm that the tarball is generated and extracted successfully into the target directory. 5. Verify that the respective configuration files (`openclaw.json` or `config.yaml`) are correctly patched with the plugin details. 6. Verify that the Memory Viewer starts properly. ## Checklist - [x] I have performed a self-review of my own code | 我已自行检查了自己的代码 - [x] 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 `https://github.com/MemTensor/MemOS-Docs` (if applicable) | 我已在 `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
Keep OpenClaw tool observations available for memory capture and strip retrieval metrics from episode prompt injection so recalled context remains answer-focused.
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
CI generates this file from secrets via `scripts/generate-telemetry-credentials.cjs` immediately before `npm publish` (see `.github/workflows/hermes-plugin-publish.yml`). Local copies are only useful for development against a personal ARMS workspace and must never be committed. The repo-root `.gitignore` has a blanket `!apps/**/*.json` allow-rule that overrides any per-package ignore for .json files; the closer `apps/memos-local-plugin/.gitignore` wins because git's "closest .gitignore wins" rule applies regardless of polarity. Adding the explicit entry here is therefore sufficient. Co-authored-by: Cursor <cursoragent@cursor.com>
The original v2 telemetry rollout (commit 3600f80) only wired the Hermes-side `bridge.cts`. Three knock-on effects made the `memos_local_hermes_v2` ARMS dashboards drift away from reality: 1. **OpenClaw adapter never emitted any events.** The whole in-process plugin path bypassed the `Telemetry` instance, so `agent_name=openclaw` was silently zero across `plugin_started`, `memory_search`, `memory_ingested`, `feedback_submitted`, and `viewer_opened`. 2. **`daily_active` counted process launches, not days.** The in-memory `dailyPingSent` boolean reset on every `bridge.cts` subprocess spawn (Hermes spawns one per `chat`), so DAU = startup count. 3. **`viewer_opened` only fired on the first `GET /api/v1/overview`** *per process*, then suppressed forever by a closure flag. Background pollers and CLI calls counted as "viewer opens"; restarts re-counted the same operator. 4. **`plugin_error` was declared but never invoked.** The crash visibility the dashboard implied did not exist. Changes ------- - `adapters/openclaw/index.ts`: Construct `Telemetry`, call `bindTelemetry`, emit `trackPluginStarted("openclaw")`, and pass the instance into `startHttpServer` so OpenClaw matches the Hermes surface 1:1. Plugin-root resolution shared with the existing viewer-static-root helper. - `core/telemetry/sender.ts`: Persist the daily-ping date to `<stateDir>/memos-local/.last-daily-ping`. Read on every start; only emit when today's date differs from the file. Read failures degrade gracefully to "first time today" (over-report by ≤1, never under-report). Removed the obsolete in-memory `dailyPingSent` / `dailyPingDate` fields. - `server/routes/telemetry.ts` (new) + `viewer/src/components/App.tsx`: Replace the GET-piggybacking `viewer_opened` with a dedicated `POST /api/v1/telemetry/viewer-opened` invoked once from the SPA's `<App />` mount effect. Endpoint is fire-and-forget on the client and always returns `{ ok: true }`. `server/routes/overview.ts` no longer fires the event. - `core/pipeline/memory-core.ts`: Surface `MemosError.code` (or `unknown`) as the `plugin_error.error_type` when `onTurnStart` / `searchMemory` reject. Never the message — those can contain user/workspace text. - `bridge.cts`: Register `process.on("uncaughtException" | "unhandledRejection")` immediately after binding telemetry. `uncaughtException` exits 1 (preserves supervisor semantics); `unhandledRejection` continues (Node 20+'s "exit by default" is too aggressive for a long-running bridge — log + ARMS event + keep going). New `classifyErrorCode()` reuses Node's `code` (`ENOENT`, `EADDRINUSE`, …), then constructor name, then `unknown`. Only registered on the dedicated bridge process; the OpenClaw adapter must not steal its host's global error hooks. Tests ----- - `tests/unit/telemetry/sender.test.ts` — three new cases covering: first launch emits `daily_active`; second launch same day / same `stateDir` does NOT re-emit; pre-seeded `.last-daily-ping` with yesterday's date triggers a fresh ping and overwrites the file with today's ISO date. - `tests/unit/server/http.test.ts` — POST endpoint invokes `trackViewerOpened`; endpoint stays 200 when telemetry is unbound; GET `/api/v1/overview` no longer triggers the event (regressed deliberately). Verified locally: 945 unit tests pass (+6 vs. baseline). 7 unrelated pre-existing failures in `tests/unit/{reward,memory,storage}/...` are unchanged on this branch and on `upstream/mem-agent-0509` head. Co-authored-by: Cursor <cursoragent@cursor.com>
…nsor#1690) ## Why ARMS dashboards for the v2 plugin (event group `memos_local_hermes_v2`) have been reporting suspiciously low volumes since the v2 rewrite. Tracing through the code surfaced four independent issues that all reduce or distort metrics: 1. **OpenClaw adapter never emitted any events.** `adapters/openclaw/index.ts` bootstraps `MemoryCore` and starts the viewer, but never constructs `Telemetry`. Only `bridge.cts` (the Hermes path) wires it. So every OpenClaw user — `agent_name=openclaw` — has been silently invisible across `plugin_started`, `memory_search`, `memory_ingested`, `feedback_submitted`, `viewer_opened`. 2. **`daily_active` counted process launches, not days.** The dedup flag (`dailyPingSent`) lived in memory; Hermes spawns one `bridge.cts` subprocess per `hermes chat`, so DAU ≈ `plugin_started`. 3. **`viewer_opened` was wired to the first GET `/api/v1/overview` per process.** Background pollers and CLI tooling triggered it; bridge restarts re-counted the same operator; once-per-process meant active users showed up once, period. 4. **`plugin_error` was declared but never invoked.** No call sites existed in core or bridge. ## What | # | Area | Change | |---|---|---| | 1 | `adapters/openclaw/index.ts` | Construct `Telemetry`, `bindTelemetry`, emit `trackPluginStarted("openclaw")`, pass into `startHttpServer`. Mirrors `bridge.cts` so OpenClaw and Hermes report identical surfaces. | | 2 | `core/telemetry/sender.ts` | `daily_active` dedup persisted to `<stateDir>/memos-local/.last-daily-ping`. Read failure → "first time today" (over-report by ≤1, never under-report). Removed the obsolete `dailyPingSent`/`dailyPingDate` in-memory fields. | | 3 | `server/routes/telemetry.ts` (new) + `viewer/src/components/App.tsx` | `viewer_opened` now triggered by `POST /api/v1/telemetry/viewer-opened` from the SPA's mount effect. Endpoint is fire-and-forget, always 200. `server/routes/overview.ts` no longer fires the event. | | 4 | `core/pipeline/memory-core.ts` + `bridge.cts` | `trackError` invoked from `onTurnStart` / `searchMemory` catches and from process-level `uncaughtException` / `unhandledRejection` handlers. New `classifyErrorCode()` keeps `error_type` to `MemosError.code` / Node `code` / constructor name — never the message. | | 5 | `apps/memos-local-plugin/.gitignore` | Defensive entry for `telemetry.credentials.json` (CI-generated; never to be committed). Counters the repo-root `!apps/**/*.json` allow-rule. Split out into its own commit for clean review. | ## Tests - `tests/unit/telemetry/sender.test.ts` (+3 cases): first launch emits `daily_active`; second launch same-day same-`stateDir` does NOT re-emit; pre-seeded `.last-daily-ping=2024-01-01` triggers a fresh ping and overwrites with today's ISO date. - `tests/unit/server/http.test.ts` (+3 cases): POST endpoint invokes `trackViewerOpened`; endpoint returns 200 when telemetry is unbound; GET `/api/v1/overview` no longer triggers the event. ``` Test Files 113 passed | 5 failed (pre-existing on mem-agent-0509) Tests 945 passed | 7 failed | 1 skipped (953) ``` The 7 failures are unchanged on baseline `upstream/mem-agent-0509` (verified by stash + re-run): `tests/unit/{reward/reward.integration,reward/subscriber,storage/migrator,memory/l2/gain,memory/l3/cluster}.test.ts` — none touch telemetry. `npm run lint` (i.e. `tsc --noEmit`) passes clean. ## Risk / compatibility - **Schema:** no changes. Same event group, same `view.name`, same property keys. Existing ARMS dashboards keep working — they should just see more rows starting next release. - **Privacy:** no new fields carry user content. `error_type` is a stable code (`ENOENT`, `MemosError.code`, `TypeError`, …), never the raw message. - **Behaviour:** `viewer_opened` count will jump because the event now actually fires per browser tab open instead of once per server-process lifetime. Expected — this is what the metric was always supposed to mean. - **Process semantics:** `uncaughtException` still calls `process.exit(1)` (preserves supervisor behaviour); `unhandledRejection` deliberately does not exit (Node 20+'s default-exit is too aggressive for a long-running bridge — log + ARMS event + continue). ## Commits in this PR 1. `chore(memos-local-plugin): gitignore telemetry.credentials.json` — single-file, zero-risk. 2. `fix(memos-local-plugin): close v2 ARMS telemetry coverage gaps` — main change. ## Test plan - [ ] Manual: `OPENCLAW_AGENT=openclaw memos-local` (or whichever invocation reproduces an OpenClaw boot), then check ARMS for `agent_name=openclaw` events on `memos_local_hermes_v2`. - [ ] Manual: spawn two Hermes `chat` sessions on the same day → confirm only one `daily_active` reaches ARMS. - [ ] Manual: open the viewer in two browser tabs → expect two `viewer_opened` events. - [ ] Manual: kill the bridge with a forced `throw` → expect a `plugin_error` with `error_source=uncaught_exception`.
## Summary - Launch the TypeScript bridge through tsx's JS CLI entrypoint so Windows does not run the POSIX shim through node. - Persist a usable Node executable path during Windows installation and decode bridge subprocess output as UTF-8 with replacement. ## Test plan - Not run (not requested).
Automated PR from mem-agent-0509-niu to mem-agent-0509.
Automated PR from mem-agent-0509-niu to mem-agent-0509.
Automated PR from mem-agent-0509-niu to mem-agent-0509.
…1686) ## Summary - Preserve OpenClaw tool-call observations when `agent_end` transcripts omit tool blocks, so memory capture still records tool activity. - Enable OpenClaw conversation access during install so turns can be captured after recall. - Remove retrieval scores such as `best V` and `goal-sim` from episode prompt injection. ## Test plan - `npm test -- tests/unit/adapters/openclaw-bridge.test.ts tests/unit/install/install-sh.test.ts tests/unit/retrieval/tier2.test.ts tests/unit/retrieval/injector.test.ts` - IDE diagnostics: no linter errors in touched TypeScript test/source files.
When users filter the v2 viewer tasks page by status (all/enabled/done/skipped/failed), the empty state was shown but the pager kept rendering against full-dataset total/hasMore, which misleads users into thinking "there is data on other pages". Root cause: - /api/v1/episodes did not accept a `status` filter, so total/hasMore were always computed against the full session count. - TasksView.tsx only filtered the current 20 rows on the client and rendered the pager based on (page > 0 || hasMore), independent of the filtered length. Fix: - Server: introduce shared deriveStatus + parseTaskStatusFilter (agent-contract/episode-status.ts) and add `status` query support to GET /api/v1/episodes; total/hasMore now reflect the filtered set, with q + status combinable. - Web: send status/q to the server, debounce + add deps to the loader effect, drop the client-side filter, and add a `filtered.length === 0` guard so the pager hides under any active filter that yields no rows. - i18n: new tasks.empty.filtered string (zh/en). - Tests: 11 unit cases for episode-status derivation + 4 server route cases covering status filter, pagination, garbage tolerance, and status+q combinations. Co-authored-by: Cursor <cursoragent@cursor.com>
## Summary Merge `mem-agent-0509` line of work into the new integration branch `mem-agent-0512`. This is part of the 0512 integration: the 0512 branch is freshly cut from `main`, and we are landing the 0509 + 0509-magent work plus the latest bug fix on top of it so we can release `2.0.0-beta.13`. ## What's included from mem-agent-0509 Notable items beyond `main`: - feat: enhance memos-local-plugin Windows installation experience (MemTensor#1684) - fix(memos-local-plugin): infer embedding dimensions for rebuilds (MemTensor#1682) - fix(memos-local-plugin): improve Windows bridge launch (MemTensor#1706) - fix(memos-local-plugin): close v2 ARMS telemetry coverage gaps (MemTensor#1690) - fix(memos-local-plugin): preserve OpenClaw memory context (MemTensor#1686) - fix: ghost overview memory (MemTensor#1707) - fix: fix namespace (MemTensor#1709) - fix: The reward score is always negative. (MemTensor#1710) ## Test plan - [ ] CI green on the merge commit - [ ] Downstream regression suite (after PRs MemTensor#2/MemTensor#3 land and the 2.0.0-beta.13 deploy) Made with [Cursor](https://cursor.com)
merge: mem-agent-0509-magent into mem-agent-0512 Manual keep-both conflict resolution to keep both: - 0509 namespace visibility filtering (visibilityWhere SQL + visibleToCurrent in-memory) - 0509-magent multi-agent owner filtering (ownerAgentKind / ownerProfileId fields, includeAllNamespaces escape hatch) Conflict resolutions: - core/storage/repos/traces.ts (countTurns / listTurnKeys): merged owner filter fragments with the visibility SQL fragment so both apply. - core/pipeline/memory-core.ts (countTraces / listTraces groupByTurn branch): keep visibility via traces.countTurns/listTurnKeys, gate it on includeAllNamespaces, and forward ownerAgentKind / ownerProfileId to repo calls. - install.sh: keep the stricter HEAD type check (Array.isArray guard) and the more detailed "OpenClaw >= 2026.5" comment from magent. - web/src/components/NamespaceSelect.tsx -> viewer/src/components/NamespaceSelect.tsx (web -> viewer rename in HEAD). Pre-existing failures from both 0509 and 0509-magent are not addressed in this merge.
…y-state-magent fix(memos-local-plugin): hide pager when filter empties tasks list Fix v2 viewer Tasks page: when status filter (all/enabled/done/skipped/failed) yields no rows, pager kept rendering with full-dataset total/hasMore. - Server: shared deriveStatus + parseTaskStatusFilter, /api/v1/episodes now supports status query (total/hasMore reflect filtered set, q + status combinable). - Web: send status/q to server, debounce, drop client-side filter, hide pager when filtered.length === 0. - i18n: add tasks.empty.filtered (zh/en). - Tests: 11 episode-status unit cases + 4 server route cases. Auto-merge handled the web/ -> viewer/ directory rename for viewer/src/stores/i18n.ts and viewer/src/views/TasksView.tsx.
Release including 0509 (namespace visibility), 0509-magent (multi-agent owner filtering), and the tasks-list pager bug fix integrated on mem-agent-0512. Co-authored-by: Cursor <cursoragent@cursor.com>
Published to npm as @memtensor/memos-local-plugin@2.0.1 (latest). Co-authored-by: Cursor <cursoragent@cursor.com>
## 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 Merge the `mem-agent-0512` integration branch into `main`. This branch consolidates three lines of work that have been individually PR-reviewed and tested: - **PR MemTensor#1712** — `mem-agent-0509` (namespace visibility, Windows installer, telemetry, bug fixes) - **PR MemTensor#1713** — `mem-agent-0509-magent` (multi-agent owner filtering, NamespaceSelect component) - **PR MemTensor#1714** — `bug/tasks-pager-empty-state-magent` (tasks list pager bug fix) Published as **`@memtensor/memos-local-plugin@2.0.1`** (npm `latest`). ## Highlights ### Features - **Namespace visibility isolation** — `visibilityWhere` SQL + `visibleToCurrent` in-memory filtering - **Multi-agent owner filtering** — `ownerAgentKind` / `ownerProfileId` fields, `includeAllNamespaces` escape hatch - **NamespaceSelect viewer component** — dropdown to filter Memories/Policies/Skills/WorldModels by agent namespace - **Windows installer** — auto-detection, interactive UI, improved Hermes path/encoding/log handling - **Embedding dimension auto-inference** — no longer requires manual specification on rebuilds ### Bug fixes - fix: hide pager when status filter empties tasks list (server-side status filter on `/api/v1/episodes`) - fix: preserve OpenClaw memory context - fix: reward score always negative - fix: ghost overview memory - fix: fix namespace - fix: improve Windows bridge launch - fix: close v2 ARMS telemetry coverage gaps - fix: harden multi-agent memory handling ### Engineering - chore: rename `web/` to `viewer/`, drop unused `site/` scaffolding - chore: gitignore telemetry.credentials.json - Shared `agent-contract/episode-status.ts` for status derivation ## Test results (mem-agent-0512 branch) | Suite | Passed | Failed | Skipped | |-------|--------|--------|---------| | Contracts (API structure) | 70 | 0 | 0 | | Scenarios (business intent) | 469 | 0 | 36 | | **Total** | **539** | **0** | **36** | Plugin unit tests: 111 passed / 8 failed (all 8 are pre-existing failures from upstream 0509/0509-magent, 0 regressions introduced). ## Stats 187 files changed, +5714 / −2178 lines ## Test plan - [x] `npm run lint` passes - [x] `npm run test:unit` — 0 new failures vs baseline - [x] Intent-driven contracts: 70/70 pass (hermes + openclaw dual-agent) - [x] Intent-driven scenarios: 469/469 pass - [x] npm publish `@memtensor/memos-local-plugin@2.0.1` verified on registry - [ ] Reviewer sign-off
- Rename workflow file to memos-local-plugin-publish.yml - Display name: MemOS Local Plugin (V2) — Build & Publish - Remove all hermes/openclaw naming from workflow - Add git_ref input to pin branch/tag/SHA - Add concurrency group - Generate telemetry credentials step (from secrets) - Git tag format: memos-local-plugin-v<version> This is the single workflow for publishing @memtensor/memos-local-plugin. Co-authored-by: Cursor <cursoragent@cursor.com>
… V2 (MemTensor#1730) ## Summary Replace the legacy `hermes-plugin-publish.yml` with `memos-local-plugin-publish.yml` as the sole publish workflow for the V2 unified plugin `@memtensor/memos-local-plugin`. - **File**: `.github/workflows/memos-local-plugin-publish.yml` - **Actions display name**: `MemOS Local Plugin (V2) — Build & Publish` - Remove all hermes / openclaw naming - Add optional `git_ref` input to pin a specific branch, tag, or SHA - Add `concurrency` group to prevent overlapping publishes - Include `Generate telemetry credentials` step (reads from repo secrets) - Git tag format: `memos-local-plugin-v<version>` ## Changed files - Deleted `.github/workflows/hermes-plugin-publish.yml` - Added `.github/workflows/memos-local-plugin-publish.yml` No business logic changes — CI workflow configuration only.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Add English translations for the Chat and Message API reference documentation:
docs/en/open_source/open_source_api/chat/chat.mddocs/en/open_source/open_source_api/message/feedback.mddocs/en/open_source/open_source_api/message/get_message.mddocs/en/open_source/open_source_api/message/get_suggestion_queries.mdAPI paths, parameter names, and code examples remain unchanged. Only explanatory text is translated. Markdown structure is preserved.
Related Issue (Required): #1694
Type of change
Please delete options that are not relevant.
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
Checklist
Reviewer Checklist