Skip to content

fix: remove 500-row cap that truncated viewer count displays#1954

Open
chiefmojo wants to merge 6 commits into
MemTensor:mainfrom
chiefmojo:fix/viewer-count-cap
Open

fix: remove 500-row cap that truncated viewer count displays#1954
chiefmojo wants to merge 6 commits into
MemTensor:mainfrom
chiefmojo:fix/viewer-count-cap

Conversation

@chiefmojo

Copy link
Copy Markdown

Problem

clampLimit() in _helpers.ts hard-caps query limits at 500 rows. The viewer's trace and episode count displays fetch the first N rows to count totals, so any store with more than 500 items shows a truncated count.

Fix

Raise the cap from 500 to 100,000. This is a safety guard against pathological inputs, not a query-size policy — reasonable operators setting limit: 10_000 for bulk exports should not be silently truncated.

export function clampLimit(n: number): number {
  if (!Number.isFinite(n) || n <= 0) return 50;
  return Math.min(Math.trunc(n), 100_000);
}

Memtensor-AI and others added 5 commits June 14, 2026 17:24
docs(memos-local-plugin): clarify install path and stale dir names (MemTensor#1540)

The README's 'Quick start' section told users to use install.sh instead
of npm install, but the warning was buried and users still tried
'npm install -g @memtensor/memos-local-plugin' first. The reporter in
MemTensor#1540 encountered this on a Hermes deployment.

This change:

- Promotes the 'do not run npm install -g' notice to a prominent
  IMPORTANT callout explaining why global install is wrong (no
  agent-home deploy, no config.yaml, no bridge/viewer) and that the
  tarball intentionally ships built artifacts only.
- Adds a Troubleshooting subsection covering the two specific symptoms
  in the bug report: the 'package not found' misread, and the stale
  web/ and site/ directory names (web/ is now viewer/, site/ was
  removed by commit 26e7e3d).
- Mentions install.ps1 for Windows alongside install.sh.
- CHANGELOG: record the docs fix and reference MemTensor#1540.

Documentation-only change; no code or runtime behavior touched.

Co-authored-by: MemOS AutoDev <autodev@memtensor.ai>
Co-authored-by: Matthew <heimixiaozhuang@zju.edu.cn>
…_() got an unexpected keyword a (MemTensor#1889)

fix: remove invalid chunker parameter from SystemParser test instantiation

- SystemParser.__init__() signature changed to (embedder, llm=None)
- Test was still passing chunker=None causing TypeError
- Fixes all 5 failing tests in test_system_parser.py

Fixes MemTensor#1888

Co-authored-by: MemOS AutoDev <autodev@memos.ai>
Co-authored-by: Matthew <heimixiaozhuang@zju.edu.cn>
…tributeError when given None (MemTensor#1884)

* test: add comprehensive tests for clean_json_response (issue MemTensor#1525)

- Add test suite in tests/mem_os/test_format_utils.py
- Cover None input ValueError with diagnostic message
- Cover markdown removal, whitespace stripping, edge cases
- Verify fix for AttributeError when LLM returns None

* style: format clean_json_response tests

---------

Co-authored-by: MemOS AutoDev <autodev@memos.ai>
Co-authored-by: Matthew <heimixiaozhuang@zju.edu.cn>
…date_cube_access — fails for ev (MemTensor#1903)

fix: validate current user not target in share_cube_with_user (MemTensor#1901)

share_cube_with_user(cube_id, target_user_id) called
_validate_cube_access(cube_id, target_user_id), but the validator
signature is (user_id, cube_id). The cube_id therefore landed in the
user_id slot and _validate_user_exists raised
"User '<cube_id>' does not exist or is inactive" for every well-formed
call, making the API unusable.

The in-code comment "Validate current user has access to this cube"
already documented the correct intent: the sharing user (self.user_id)
must have access to the cube being shared, not the target. Switch the
call to self._validate_cube_access(self.user_id, cube_id). The target
user's existence is independently checked on the next line via
validate_user(target_user_id), so that path is unchanged.

Add regression tests in tests/mem_os/test_memos_core.py that pin down:
- validate_user_cube_access is consulted with (self.user_id, cube_id),
- add_user_to_cube is called with (target_user_id, cube_id) on success,
- a missing target raises "Target user '<id>' does not exist".

Closes MemTensor#1901

Co-authored-by: MemOS AutoDev Bot <autodev@memtensor.local>
Co-authored-by: Matthew <heimixiaozhuang@zju.edu.cn>
clampLimit() in _helpers.ts capped all repo list() calls at 500,
silently truncating skill/policy/world-model counts everywhere they
were derived from array length rather than a COUNT(*) query.

- Raise clampLimit cap 500 → 100,000 so metrics() and other internal
  analytics can read full datasets (fixes Analytics tab)
- Rewrite /api/v1/overview to use countSkills/countPolicies/
  countWorldModels/countEpisodes instead of list+length, making
  Overview counts correct regardless of scale (fixes Overview tab)
- Align countSkills to use limit:100_000 consistent with other
  count methods
@Memtensor-AI Memtensor-AI changed the base branch from dev-20260604-v2.0.19 to dev-v2.0.22 July 1, 2026 13:15
@Memtensor-AI

Copy link
Copy Markdown
Collaborator

Automated Test Results: FAILED

Cloud test-engine rerun against dev-v2.0.22 failed.

  • Run: tr-e1b6e067-ca4 on cloud test-engine 10011

  • Verdict: fail_code_bug

  • Summary: Tests failed. Failed cases: test -- tests/unit/pipeline/memory-core.test.ts tests/unit/server/http.test.ts

  • memos_local_plugin/unit: 102 passed, 1 failed, 0 skipped

Failed cases:

  • test -- tests/unit/pipeline/memory-core.test.ts tests/unit/server/http.test.ts: ry shape the viewer expects
    AssertionError: expected 500 to be 200 // Object.is equality

  • Expected

  • Received
  • 200
  • 500

❯ tests/unit/server/http.test.ts:834:22
832| it("GET /api/v1/overview returns the summary shape the viewer expect…
833| const r = await fetch(${handle.url}/api/v1/overview);
834| expect(r.status).toBe(200);
| ^
835| const body = (await r.json()) as {
836| ok?: boolean;

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯

Do not merge until this is fixed and cloud tests pass.

@CarltonXiang CarltonXiang deleted the branch MemTensor:main July 3, 2026 07:25
@syzsunshine219 syzsunshine219 reopened this Jul 3, 2026
@syzsunshine219 syzsunshine219 added the needs-audit Requires manual audit before merge label Jul 3, 2026
@syzsunshine219 syzsunshine219 changed the base branch from dev-v2.0.22 to main July 3, 2026 08:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-audit Requires manual audit before merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants