Repository navigation
feat: tag filters in the Explorer, list/search and memory.list_archived; all dimension filters on list/search - #709
Conversation
- Explorer: show the label dimension as "Tag" (field id unchanged so ?filters= links keep working) and match "tags"/"label" when typed - CLI: add --tags/--tags-mode to list and search; previously --tags was accepted (known for write) and silently ignored - local store honours tags_mode; remote store forwards it Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Matches memory.list's semantics (ANY of the tags). Adds a live smoke check. Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
…egenerate llms.txt Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
…handlers Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
|
The dashboard preview for this PR — redeployed on each push that changes the web app.
Preview always points at this PR's latest commit; Deployment is the immutable build of |
…/--host to search parseReadFilters replaces parseTagsFilter and parses tags, kind and host with their modes from the shared DIMENSIONS table. The local post-filter follows lorekit_match_text: nin requires a set value. RemoteStore.list forwards kind_mode/host_mode. Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
…* filters parseReadFilters now covers all eight policy/groom dimensions, each with an in|nin mode. --origin-pr accepts PR numbers only (a leading # is stripped, 007 reads as 7): the hosted route drops a non-numeric value and then applies no PR filter. normalizeEntry carries source_agent, trigger and origin_* so the shared entryFilter can match them on both stores and in list --all; RemoteStore.list forwards every dimension. Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
✅ No issues foundNo new commits since aa533d2. The edited PR body now lists all eight CLI filters and the new --json fields, clearing the prior description warning. Code unchanged, so the below-bar --link advisory (search.mjs:56) stands. Checked: 0 of 23 dependent files traced Progress: open review threads 1 → 0 → 0 across the last 3 reviews What this change reaches — 17 changed exports · 23 dependent files · 0 checked · 23 not checked · 6 changed files imported by 25 filesflowchart LR
subgraph pr["Changed in this PR"]
s1["matchesQuery<br/>body changed"]:::changed
s2["normalizeEntry<br/>body changed"]:::changed
s3["parseDimensionConditions<br/>body changed"]:::changed
s4["rootSuggestions<br/>body changed"]:::changed
s5["clusterByKeyPattern<br/>body changed"]:::changed
s6["MCP_TOOL_DEFS<br/>body changed"]:::changed
smore["+11 more changed exports<br/>listed below"]:::changed
m1["packages/cli/src/store/local.mjs<br/>file changed"]:::changed
m2["packages/cli/src/store/remote.mjs<br/>file changed"]:::changed
m3["packages/web/src/components/lore/FilterMenu.tsx<br/>file changed"]:::changed
m4["packages/cli/src/shared/completions.mjs<br/>file changed"]:::changed
mmore["+2 more changed files<br/>listed below"]:::changed
end
s1c1["packages/cli/src/core/lessons.mjs<br/>? not checked"]:::unknown
s1c2["packages/cli/src/shared/lessons-view.mjs<br/>? not checked"]:::unknown
s1c3["packages/cli/test/hooks.test.mjs<br/>? not checked"]:::unknown
s2c1["packages/cli/src/commands/ · 2 files<br/>? not checked"]:::unknown
s2c2["packages/cli/test/list.test.mjs<br/>? not checked"]:::unknown
s3c1["packages/cli/src/commands/ · 2 files<br/>? not checked"]:::unknown
s3c2["packages/cli/test/policy.test.mjs<br/>? not checked"]:::unknown
s4c1["packages/web/src/lib/ · 2 files<br/>? not checked"]:::unknown
s4c2["packages/web/src/components/lore/FilterMenu.tsx<br/>? not checked"]:::unknown
s5c1["packages/cli/src/commands/dedupe.mjs<br/>? not checked"]:::unknown
s5c2["packages/cli/test/dedupe.test.mjs<br/>? not checked"]:::unknown
s6c1["packages/cli/src/commands/mcp-server.mjs<br/>? not checked"]:::unknown
s6c2["scripts/smoke/smoke-mcp-tools.mjs<br/>? not checked"]:::unknown
m1i1["packages/cli/test/ · 6 files<br/>import this file"]:::imports
m1i2["packages/cli/src/store/index.mjs<br/>imports this file"]:::imports
m2i1["packages/cli/test/ · 4 files<br/>import this file"]:::imports
m2i2["packages/cli/src/commands/ · 2 files<br/>import this file"]:::imports
m2i3["packages/cli/src/store/index.mjs<br/>imports this file"]:::imports
m3i1["packages/web/src/components/lore/ · 5 files<br/>import this file"]:::imports
m4i1["packages/cli/src/commands/ · 3 files<br/>import this file"]:::imports
m4i2["packages/cli/test/completion.test.mjs<br/>imports this file"]:::imports
s1 -.-> s1c1
s1 -.-> s1c2
s1 -.-> s1c3
s2 -.-> s2c1
s2 -.-> s2c2
s3 -.-> s3c1
s3 -.-> s3c2
s4 -.-> s4c1
s4 -.-> s4c2
s5 -.-> s5c1
s5 -.-> s5c2
s6 -.-> s6c1
s6 -.-> s6c2
m1 -.-> m1i1
m1 -.-> m1i2
m2 -.-> m2i1
m2 -.-> m2i2
m2 -.-> m2i3
m3 -.-> m3i1
m4 -.-> m4i1
m4 -.-> m4i2
classDef changed fill:#eef2ff,stroke:#6366f1,color:#1e1b4b
classDef ok fill:#e7f6ec,stroke:#16a34a,color:#14532d
classDef partial fill:#fef9c3,stroke:#ca8a04,color:#713f12
classDef unknown fill:#f3f4f6,stroke:#9ca3af,stroke-dasharray:4 3,color:#374151
classDef bad fill:#fde8e8,stroke:#dc2626,color:#7f1d1d
classDef warn fill:#fff4e5,stroke:#d97706,color:#78350f
classDef imports fill:#f8fafc,stroke:#64748b,stroke-dasharray:4 3,color:#1e293b
Review details
Found Quality — produced 0 → posted inline 0 · cleared 0 · carried forward 0 · deferred 0 · below-bar 0 Run incremental · 0 lines in delta · tier deep · depth checkout Nothing to report — standards (skipped), optimality (skipped), measurability (skipped), severity, 0 files skipped.
|
address review comment: filter tags after mergeByKey so a project copy that fails the filter can no longer let its shadowed home copy through Addresses the pr-reviewer bot's comment: #709 (comment) Refs: #709 Co-authored-by: dash0-dev[bot] <257284812+dash0-dev[bot]@users.noreply.github.com>
Summary
Tag filtering was missing or hard to find in three places. This adds it everywhere it was absent, and gives
lorekit list/searchall eight dimension filters thepolicy/groomcommands take, with the hosted list's semantics.Changes
tag,tags,labelorlabelsfinds it. The field id stayslabel, so existing?filters=links keep working.list/search:--tags a,b [--tags-mode any|all|none]plus--kind,--host,--trigger,--source-agent,--origin-repo,--origin-branch,--origin-pr, each with--<dim>-mode in|nin. Before,--tagswas accepted and silently ignored, andsearchhad no dimension filters at all.parseReadFilters, thepolicy/groomdimension table) and one predicate (entryFilter) for both stores and--all.ninexcludes rows without the field, as the server does.--origin-prtakes PR numbers only (the server drops anything else and then filters nothing). Tags are matched after the two local tiers merge, so a shadowed home copy can't surface. A bare flag or orphan mode is a usage error.--jsonentries now carrysource_agent,triggerandorigin_*.memory.list_archived: acceptstags(ANY, likememory.list); catalog, edge mirror, generated surfaces,llms.txtand a live smoke check updated.tags.mdx,docs/cli.md,docs/mcp-tools.md, thellms.txttemplate, CLI help and shell completions.Verification
tsc --noEmitclean; schemas and mcp-core edge guards pass;deno check0 errors.memory.list_archivedsmoke check runs on/previewor on deploy, not in PR CI.