diff --git a/README.md b/README.md index b31fc83b..5c14c679 100644 --- a/README.md +++ b/README.md @@ -1025,10 +1025,12 @@ BM25 tokenizes Greek, Cyrillic, Hebrew, Arabic, and accented Latin out of the bo ### Embedding providers -Text embeddings are opt-in. With no `EMBEDDING_PROVIDER`, search stays BM25+Graph and agentmemory does not send memory, observation, or query text to an embedding provider. For Xenova on-device embeddings, install the optional package and set `EMBEDDING_PROVIDER=local`: +Text embeddings are opt-in. With no `EMBEDDING_PROVIDER`, search stays BM25+Graph and agentmemory does not send memory, observation, or query text to an embedding provider. Xenova's local embedding package is not installed by default; for on-device embeddings, install it explicitly in the same npm prefix as agentmemory and set `EMBEDDING_PROVIDER=local`: ```bash npm install @xenova/transformers +# If agentmemory is installed globally, use the same global prefix: +# npm install -g @xenova/transformers ``` For native Ollama embeddings, run Ollama locally and set `EMBEDDING_PROVIDER=ollama`. diff --git a/docs/todos/2026-06-19-issue-258-install-warning-ux/plan.md b/docs/todos/2026-06-19-issue-258-install-warning-ux/plan.md new file mode 100644 index 00000000..1caa0d75 --- /dev/null +++ b/docs/todos/2026-06-19-issue-258-install-warning-ux/plan.md @@ -0,0 +1,334 @@ +# Issue 258 Install Warning UX Implementation Plan + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal:** Stop the default npm install graph from resolving the warning-heavy Xenova/ONNX/native embedding stack while preserving explicit opt-in local embeddings. + +**Architecture:** Keep the runtime lazy-import boundary intact: BM25+Graph stays the default, and `EMBEDDING_PROVIDER=local` continues to load `@xenova/transformers` only when the user has explicitly installed it. The package contract moves `@xenova/transformers` from default-installed `optionalDependencies` to optional peer metadata and removes direct ONNX optional dependencies from the root package. + +**Tech Stack:** TypeScript ESM, npm package metadata, pnpm 11 lockfile, Vitest quality gates, npm pack/install smoke, OSV/Semgrep/Gitleaks security gates. + +--- + +## Sprint Contract Carry-Forward + +- Task record: `docs/todos/2026-06-19-issue-258-install-warning-ux/todo.md` +- Spec: none; source of truth is issue #258 evidence plus arena synthesis. +- GitHub PR target: `origin/main` on `https://github.com/wbugitlab1/agentmemory.git` +- Remote boundary: no fetch, pull, push, PR creation, PR merge, issue closure, publishing, or thread archival without explicit current-turn approval. +- Terminal archival contract: terminal issue closure approval must bundle issue closure plus thread archival after successful closure; terminal PR merge approval must bundle merge into `origin/main` plus thread archival after successful merge. +- Security-sensitive surfaces: dependency metadata and lockfile. OSV and Semgrep are required before final handoff or commit; staged Gitleaks is required before commit. + +## Files + +- Modify: `package.json` + - Move `@xenova/transformers` from `optionalDependencies` to `peerDependencies`. + - Add `peerDependenciesMeta["@xenova/transformers"].optional = true`. + - Remove `onnxruntime-node` and `onnxruntime-web` from root `optionalDependencies`. + - Leave `@node-rs/jieba` and `tiny-segmenter` in `optionalDependencies` for this issue. +- Modify: `pnpm-lock.yaml` + - Regenerate after package metadata change with scripts disabled. + - Expected default graph shrink: remove root optional entries and unused `@xenova/transformers`, `onnxruntime-*`, `sharp`, `prebuild-install` transitive entries if no other importer needs them. +- Modify: `test/quality-gates.test.ts` + - Extend the current Anthropic install-surface guard into a default-install guard for the ML/native warning stack. + - Assert optional peer metadata exists for `@xenova/transformers`. +- Modify: `README.md` + - Clarify that the Xenova package is not installed by default and is required only for explicit local embedding opt-in. +- No source behavior files expected. + +## Task 1: Add Red Package Guard + +**Files:** +- Modify: `test/quality-gates.test.ts` + +- [ ] **Step 1: Extend the package metadata type** + +Update the `PackageJson` type only if needed. It already includes `optionalDependencies`, `peerDependencies`, `peerDependenciesMeta`, `bundledDependencies`, and `bundleDependencies`, so no type edit should be required. + +- [ ] **Step 2: Replace the narrow Anthropic guard with a default-install guard** + +In `test/quality-gates.test.ts`, replace the existing test named `does not auto-install Anthropic packages in the root package` with: + +```ts + it("keeps opt-in provider packages out of the default install graph", () => { + const pkg = readPackageJson(); + const autoInstallSurfaces = [ + pkg.dependencies ?? {}, + pkg.optionalDependencies ?? {}, + ]; + const bundled = [ + ...(pkg.bundledDependencies ?? []), + ...(pkg.bundleDependencies ?? []), + ]; + const defaultInstallPackages = [ + "@anthropic-ai/sdk", + "@anthropic-ai/claude-agent-sdk", + "@xenova/transformers", + "onnxruntime-node", + "onnxruntime-web", + ]; + + for (const deps of autoInstallSurfaces) { + for (const packageName of defaultInstallPackages) { + expect(deps[packageName]).toBeUndefined(); + } + } + for (const packageName of defaultInstallPackages) { + expect(bundled).not.toContain(packageName); + } + + expect(pkg.peerDependencies?.["@anthropic-ai/claude-agent-sdk"]).toBe("^0.3.142"); + expect(pkg.peerDependenciesMeta?.["@anthropic-ai/claude-agent-sdk"]?.optional).toBe(true); + expect(pkg.peerDependencies?.["@xenova/transformers"]).toBe("^2.17.2"); + expect(pkg.peerDependenciesMeta?.["@xenova/transformers"]?.optional).toBe(true); + }); +``` + +- [ ] **Step 3: Run the focused test and confirm RED** + +Run: + +```bash +corepack pnpm exec vitest run test/quality-gates.test.ts --exclude test/integration.test.ts +``` + +Expected before implementation: fail because `@xenova/transformers`, `onnxruntime-node`, and `onnxruntime-web` are still in `optionalDependencies`, and the `@xenova/transformers` optional peer is missing. + +If pnpm ignored-build hardening blocks before Vitest starts, run: + +```bash +corepack pnpm install --frozen-lockfile --ignore-scripts +corepack pnpm exec vitest run test/quality-gates.test.ts --exclude test/integration.test.ts +``` + +Record the exact blocker or RED failure in `todo.md`. + +## Task 2: Update Package Metadata And Lockfile + +**Files:** +- Modify: `package.json` +- Modify: `pnpm-lock.yaml` + +- [ ] **Step 1: Edit `package.json`** + +Change the relevant dependency metadata to this shape: + +```json + "peerDependencies": { + "@anthropic-ai/claude-agent-sdk": "^0.3.142", + "@xenova/transformers": "^2.17.2" + }, + "peerDependenciesMeta": { + "@anthropic-ai/claude-agent-sdk": { + "optional": true + }, + "@xenova/transformers": { + "optional": true + } + }, + "optionalDependencies": { + "@node-rs/jieba": "^2.0.1", + "tiny-segmenter": "^0.2.0" + }, +``` + +Do not change dependency versions. Do not move `@node-rs/jieba` or `tiny-segmenter` in this issue. + +- [ ] **Step 2: Regenerate lockfile with scripts disabled** + +Run: + +```bash +corepack pnpm install --lockfile-only --ignore-scripts +``` + +Expected: command exits 0 and updates only lockfile metadata needed for the manifest change. If pnpm creates any build-approval scaffolding or unrelated config churn, inspect it and remove only task-caused unrelated churn. + +- [ ] **Step 3: Verify lockfile no longer contains the removed ML/native packages** + +Run: + +```bash +rg -n "@xenova/transformers|onnxruntime-node|onnxruntime-web|sharp@0\\.32\\.6|prebuild-install" pnpm-lock.yaml package.json +``` + +Expected: `package.json` contains `@xenova/transformers` only in optional peer metadata; `pnpm-lock.yaml` should not contain the removed packages unless another importer still needs them. If any remain, inspect the importer path before changing more files. + +- [ ] **Step 4: Run the focused package guard and confirm GREEN** + +Run: + +```bash +corepack pnpm exec vitest run test/quality-gates.test.ts --exclude test/integration.test.ts +``` + +Expected: `test/quality-gates.test.ts` passes. + +## Task 3: Update Minimal README Wording + +**Files:** +- Modify: `README.md` + +- [ ] **Step 1: Clarify opt-in local embedding install** + +In the `### Embedding providers` section, change this sentence: + +```md +Text embeddings are opt-in. With no `EMBEDDING_PROVIDER`, search stays BM25+Graph and agentmemory does not send memory, observation, or query text to an embedding provider. For Xenova on-device embeddings, install the optional package and set `EMBEDDING_PROVIDER=local`: +``` + +to: + +```md +Text embeddings are opt-in. With no `EMBEDDING_PROVIDER`, search stays BM25+Graph and agentmemory does not send memory, observation, or query text to an embedding provider. Xenova's local embedding package is not installed by default; for on-device embeddings, install it explicitly and set `EMBEDDING_PROVIDER=local`: +``` + +- [ ] **Step 2: Confirm no stale install wording claims Xenova is default-installed** + +Run: + +```bash +rg -n "Xenova|@xenova/transformers|optional package|installed by default|EMBEDDING_PROVIDER=local" README.md INSTALL_FOR_AGENTS.md .env.example +``` + +Expected: remaining references either document explicit opt-in or runtime configuration. Do not rewrite unrelated docs. + +## Task 4: Package Install Smoke + +**Files:** +- No persistent files expected unless a temporary script is useful during execution. Prefer one-off commands and record evidence in `todo.md`. + +- [ ] **Step 1: Build the package before packing** + +Run: + +```bash +corepack pnpm run build +``` + +Expected: build exits 0. + +- [ ] **Step 2: Run dry-run package preview** + +Run: + +```bash +npm pack --dry-run --json +``` + +Expected: exits 0 and previews expected package files. + +- [ ] **Step 3: Run sanitized local tarball consumer install smoke** + +Run: + +```bash +tmpdir="$(mktemp -d /tmp/agentmemory-258-pack-smoke.XXXXXX)" +mkdir -p "$tmpdir/home" "$tmpdir/cache" "$tmpdir/project" "$tmpdir/pack" +HOME="$tmpdir/home" npm_config_cache="$tmpdir/cache" npm_config_userconfig="$tmpdir/missing-npmrc" npm pack --json --pack-destination "$tmpdir/pack" > "$tmpdir/pack.json" +tarball="$(jq -r '.[0].filename' "$tmpdir/pack.json")" +cd "$tmpdir/project" +HOME="$tmpdir/home" npm_config_cache="$tmpdir/cache" npm_config_userconfig="$tmpdir/missing-npmrc" npm install --package-lock-only --ignore-scripts --no-audit --no-fund "$tmpdir/pack/$tarball" 2>&1 | tee "$tmpdir/install.log" +jq -r '.packages | keys[]' package-lock.json > "$tmpdir/package-keys.txt" +``` + +Then run: + +```bash +for name in '@anthropic-ai/sdk' '@anthropic-ai/claude-agent-sdk' '@xenova/transformers' 'onnxruntime-node' 'onnxruntime-web' 'sharp' 'prebuild-install' 'node-domexception'; do + if rg -q "(^|/)node_modules/${name}$" "$tmpdir/package-keys.txt"; then + echo "default install resolved ${name}" >&2 + exit 1 + fi +done +if rg -n "ERESOLVE overriding peer dependency|deprecated prebuild-install|deprecated node-domexception" "$tmpdir/install.log"; then + echo "install warning signature still present" >&2 + exit 1 +fi +printf 'SMOKE_DIR=%s\n' "$tmpdir/project" +``` + +Expected: no forbidden package entries and no reported warning signatures. + +## Task 5: Final Verification And Review Notes + +**Files:** +- Modify: `docs/todos/2026-06-19-issue-258-install-warning-ux/todo.md` + +- [ ] **Step 1: Run targeted tests** + +Run: + +```bash +corepack pnpm exec vitest run test/quality-gates.test.ts test/build-package-contract.test.ts test/embedding-provider.test.ts test/reranker.test.ts --exclude test/integration.test.ts +``` + +Expected: all selected tests pass. + +- [ ] **Step 2: Run lint** + +Run: + +```bash +corepack pnpm run lint +``` + +Expected: lint exits 0. + +- [ ] **Step 3: Run dependency/security gates** + +Run: + +```bash +osv-scanner scan source . +semgrep scan --config p/default --error --metrics=off . +``` + +Expected: both commands exit 0 or findings/blockers are recorded and handled before handoff. + +- [ ] **Step 4: Run diff check** + +Run: + +```bash +git diff --check +``` + +Expected: no whitespace errors. + +- [ ] **Step 5: Update the task record** + +Update `docs/todos/2026-06-19-issue-258-install-warning-ux/todo.md` with: + +- implementation summary; +- dependency-intake decisions; +- Feature / Verification Matrix final statuses and evidence; +- verification commands and results; +- caveats and residual risks; +- remote status, including that no push, PR creation, issue closure, PR merge, publish, or thread archival ran unless separately approved. + +- [ ] **Step 6: Stage only task-owned files and run staged Gitleaks if committing** + +If preparing a local commit, stage only: + +```bash +git add package.json pnpm-lock.yaml test/quality-gates.test.ts README.md docs/todos/2026-06-19-issue-258-install-warning-ux/todo.md docs/todos/2026-06-19-issue-258-install-warning-ux/plan.md +gitleaks protect --staged --redact +``` + +Expected: staged Gitleaks exits 0. Commit only after staged content is verified. + +## Self-Review + +Spec coverage: +- Validity evidence is already recorded in `todo.md`. +- The selected arena scope is implemented through package metadata and quality gates. +- The install-smoke command checks the original warning packages, `node-domexception`, and the remaining `prebuild-install` path through installed package entries plus npm output. +- Remote and archival approvals are preserved as explicit boundaries. + +Placeholder scan: +- No `TBD`, `TODO`, or "similar to" placeholders remain in this plan. + +Type consistency: +- `PackageJson` already contains the metadata fields used by the new quality gate. +- Test names and paths match existing repository files. diff --git a/docs/todos/2026-06-19-issue-258-install-warning-ux/todo.md b/docs/todos/2026-06-19-issue-258-install-warning-ux/todo.md new file mode 100644 index 00000000..e65cb22d --- /dev/null +++ b/docs/todos/2026-06-19-issue-258-install-warning-ux/todo.md @@ -0,0 +1,216 @@ +# Issue 258 Install Warning UX + +## Scope + +- Repository: `/Users/A1538552/.codex/worktrees/34b9/agentmemory` +- Branch: `issue/258-install-warning-ux` +- Source issue: GitHub issue `wbugitlab1/agentmemory#258` +- Owning scope: root package install metadata, dependency surface, install documentation, package quality gates, and verification smokes. +- Spec path: none. Source of truth is the delegated issue workflow plus the public issue body. + +## Sprint Contract + +Goal: reduce first-install npm warning noise for new `@agentmemory/agentmemory` users without removing supported opt-in functionality. + +Scope: +- Validate the warning classes reported by issue #258 against current source and current published npm metadata. +- Decide whether source changes are still needed after the existing issue #171 Anthropic dependency fix. +- If implementation is needed, keep changes limited to package metadata, docs, tests, and dependency lockfile surfaces required to remove default-install warning sources. +- Preserve the existing Anthropic API provider, opt-in Claude Agent SDK fallback, local embedding opt-in path, CJK tokenizer behavior, and package manager hardening. + +Non-goals: +- No publishing, release tagging, PR creation, PR merge, issue closure, or thread archival without explicit current-turn approval. +- No work on unrelated issues, parent checkout, or issue 821-830 worktrees. +- No dependency refresh beyond the warning source being intentionally changed. +- No removal of optional feature support unless the feature remains available through explicit user installation. + +Acceptance criteria: +- Issue validity is documented with public issue evidence, local source evidence, and npm registry evidence. +- Default install metadata no longer auto-installs the reported Anthropic warning source from local package source. +- Any remaining install-warning source, especially optional native/ML dependencies, is either fixed with tests/docs or explicitly recorded as deferred with rationale. +- Package quality tests cover the chosen default-install dependency contract. +- A consumer install metadata smoke proves the local package no longer resolves the targeted warning packages in the default install graph. +- Required security/dependency gates are run or blockers are recorded before any final handoff. + +Intended verification: +- `corepack pnpm exec vitest run test/quality-gates.test.ts test/build-package-contract.test.ts --exclude test/integration.test.ts` +- `corepack pnpm run build` +- `corepack pnpm run lint` +- `npm pack --dry-run --json` +- Consumer install metadata smoke from local package metadata or packed tarball with `npm install --package-lock-only --ignore-scripts`, then inspect `package-lock.json`. +- `git diff --check` +- If dependency metadata changes: `osv-scanner scan source .` and `semgrep scan --config p/default --error --metrics=off .`, plus staged `gitleaks protect --staged --redact` before commit. + +Known boundaries: +- Public unauthenticated GitHub and npm registry reads are allowed for validation. +- Credentialed GitHub reads, fetch/pull, push, PR creation, PR merge, issue closure, publishing, release tagging, and thread archival remain approval-bound. +- If the issue is invalid/stale/duplicate/already fixed, the approval request must explicitly bundle GitHub issue closure and archiving this Codex thread after successful closure. +- If the issue is valid and reaches PR merge readiness, the merge approval request must explicitly bundle PR merge into `origin/main` and archiving this Codex thread after successful merge. +- After successful issue closure or PR merge, `set_thread_archived({ archived: true })` must be called for this current thread before final handoff. If approval or the archive tool is unavailable, that is a blocker. + +Stop conditions: +- A required fix would remove documented core functionality rather than moving it to explicit opt-in. +- A required remote/state-changing operation is needed before local validation and approval is not available. +- The same verification approach fails twice without a new failure-mode hypothesis. + +## Evidence + +- `git status -sb --untracked-files=all` after branch setup: clean on `issue/258-install-warning-ux`. +- `git remote -v`: `origin` is `https://github.com/wbugitlab1/agentmemory.git`; `upstream` points at `https://github.com/rohitg00/agentmemory.git` and must not be targeted. +- Public issue read: #258 is open and reports `npm install -g @agentmemory/agentmemory` warning output imported from upstream issue #645. +- Reported warnings: npm peer override involving `@anthropic-ai/sdk@0.39.0` vs `@anthropic-ai/claude-agent-sdk@0.3.150`, deprecated `prebuild-install@7.1.3`, and deprecated `node-domexception@1.0.0`. +- Current local `package.json`: does not list `@anthropic-ai/sdk` or `@anthropic-ai/claude-agent-sdk` under root `dependencies` or `optionalDependencies`; `@anthropic-ai/claude-agent-sdk` is an optional peer. +- Current `test/quality-gates.test.ts`: asserts Anthropic packages are not auto-installed by root package metadata. +- Current npm registry metadata for latest `@agentmemory/agentmemory@0.9.27`: still lists both `@anthropic-ai/claude-agent-sdk` and `@anthropic-ai/sdk` as normal dependencies, so current npm users can still receive the old install surface until a fixed package is published. +- Current `pnpm-lock.yaml`: still includes deprecated `prebuild-install@7.1.3` via `sharp`, which is pulled by optional local embedding dependency surfaces. +- Prior local task `docs/todos/2026-06-17-issue-171-anthropic-deps/`: implemented and verified removal of Anthropic auto-install dependencies from local source. +- Sanitized local-source tarball install metadata smoke: `npm pack --json`, then `npm install --package-lock-only --ignore-scripts --no-audit --no-fund ` in `/tmp/agentmemory-258-pack-smoke.jP9MBv/project`. Result resolved `@xenova/transformers`, nested/root `onnxruntime-node`, nested/root `onnxruntime-web`, `sharp`, and `prebuild-install`; it did not resolve `@anthropic-ai/sdk`, `@anthropic-ai/claude-agent-sdk`, or `node-domexception`. +- Sanitized published-package install metadata smoke: `npm install --package-lock-only --ignore-scripts --no-audit --no-fund @agentmemory/agentmemory@0.9.27` in `/tmp/agentmemory-258-published-smoke.HDnZPN/project`. Result resolved `@anthropic-ai/sdk`, `@anthropic-ai/claude-agent-sdk`, `@xenova/transformers`, nested/root `onnxruntime-node`, nested/root `onnxruntime-web`, `sharp`, and `prebuild-install`. + +## Feature / Verification Matrix + +| Change | Verification method | Status | Evidence | +| --- | --- | --- | --- | +| Validate issue #258 | Public issue read, local metadata search, npm registry metadata | Done | Issue is valid for current npm users; local source has partial fix for Anthropic warning source | +| Decide optional dependency warning scope | Isolated install metadata smoke and arena | Done | Arena selected narrow ML/native optional-stack cleanup; defer CJK optional segmenters absent warning evidence | +| Remove or defer remaining warning sources | Package tests, lockfile inspection, install smoke | Done | `@xenova/transformers` moved to optional peer; direct root `onnxruntime-node`/`onnxruntime-web` optional metadata removed; CJK optional segmenters deferred | +| Preserve opt-in behavior | Existing provider/embedding tests and docs scan | Done | `test/embedding-provider.test.ts` and `test/reranker.test.ts` passed; README documents explicit Xenova install | +| GitHub feature-loop prep | Task record, plan, verification, local commit prep | Pending | Remote operations remain unapproved | + +## Arena Frame + +Artifact: each candidate produces `proposal.md`, a read-only implementation strategy for issue #258 that selects a scope and names exact files/tests likely to change. Candidates must not edit repository source. + +Rubric: +- Explains whether #258 is still valid, stale, or partially fixed using the recorded issue, npm registry, and install-smoke evidence. +- Chooses a fix scope that directly improves first-install warning UX without removing documented core or opt-in functionality. +- Identifies exact package metadata, source, docs, tests, and lockfile surfaces to change or intentionally leave unchanged. +- Includes a consumer-install verification strategy that would catch the reported warnings and dependency graph regressions. +- Respects remote-state approval boundaries, `origin` targeting, and terminal archival contract. +- Minimizes dependency churn and records any dependency-intake decision for moved/removed packages. + +Runners: three read-only explorer subagents writing separate proposals to `/tmp/arena-issue258-install-warning-ux/candidate-{1,2,3}/proposal.md`. + +## Arena Checklist + +- [x] Frame +- [x] Fan out +- [x] Cross-judge +- [x] Pick +- [x] Graft +- [x] Verify + +## Arena Synthesis + +Base: candidate 2 (`/tmp/arena-issue258-install-warning-ux/candidate-2/proposal.md`). + +Cross-judge: Boole recommended candidate 2 with 30/30, candidate 1 with 28/30, and candidate 3 with 24/30 in `/tmp/arena-issue258-install-warning-ux/judge/verdict.md`. + +Parent pick: agrees with Boole. Candidate 2 best matches the evidence and minimum safe scope: npm installs `optionalDependencies` by default, so the remaining local first-install warning source should be removed by making the Xenova embedding stack explicit opt-in. + +Grafts: +- From candidate 1: include `node-domexception` in consumer-smoke forbidden/warning checks because it was part of the original issue report, and explicitly reject transitive pinning/upgrading of `sharp` or `prebuild-install`. +- From candidate 3: inspect `package-lock.json.packages` installed entries rather than raw lockfile text, because optional peer names may appear as metadata without being installed. + +Rejected: +- Moving `@node-rs/jieba` and `tiny-segmenter` in the same patch. They are optional enhancements with no current warning evidence in #258, so moving them would broaden dependency churn beyond the reported warning source. +- Adding CI/publish workflow wiring for the install smoke in this issue. Useful follow-up, but it changes release workflow surfaces beyond the narrow fix. +- Updating/pinning `@xenova/transformers`, `sharp`, or `prebuild-install`. The package contract should stop installing the opt-in ML/native stack by default rather than chasing transitive warnings. +- Removing local embeddings, CLIP, reranking, CJK fallback, Anthropic provider support, or Claude Agent SDK fallback. + +Synthesized strategy: +1. Move `@xenova/transformers` out of root `optionalDependencies` and into optional peer metadata using the existing range. +2. Remove direct root optional metadata for `onnxruntime-node` and `onnxruntime-web`. +3. Keep Anthropic dependency surfaces as already fixed by issue #171. +4. Update package quality gates and minimal README wording to lock in the default-install contract. +5. Verify with targeted package tests, local tarball consumer install smoke, build/lint, dry-run pack, `git diff --check`, and dependency/security gates. + +## Subagent Ledger + +| Workstream | Scope | Edits allowed | Expected output | Result | Residual risk | +| --- | --- | --- | --- | --- | --- | +| Arena candidate 1 (Hume) | Read-only fix strategy for #258 | Only `/tmp/arena-issue258-install-warning-ux/candidate-1/proposal.md` | Proposal with validity, scope, files, tests, dependency intake, verification, boundaries | Complete; strong proposal, useful smoke-test details | Slight ambiguity on whether to add optional peer metadata | +| Arena candidate 2 (Newton) | Read-only fix strategy for #258 | Only `/tmp/arena-issue258-install-warning-ux/candidate-2/proposal.md` | Proposal with validity, scope, files, tests, dependency intake, verification, boundaries | Complete; selected as base | None material | +| Arena candidate 3 (Locke) | Read-only fix strategy for #258 | Only `/tmp/arena-issue258-install-warning-ux/candidate-3/proposal.md` | Proposal with validity, scope, files, tests, dependency intake, verification, boundaries | Complete; useful package-lock precision | Broadened scope into CJK packages and CI/publish | +| Arena cross-judge (Boole) | Read-only scoring of candidates | Only `/tmp/arena-issue258-install-warning-ux/judge/verdict.md` | Rubric scores, recommended base, grafts, rejections | Complete; recommended candidate 2 with grafts | None material | + +## Progress Notes + +- 2026-06-19: Branch `issue/258-install-warning-ux` was created from detached HEAD `eacce17e`, which matched verified `origin/main`. +- 2026-06-19: Initial validity verdict is `valid for published npm users, partially fixed in local source`. +- 2026-06-19: Workflow correction received: terminal thread archival is mandatory only after successful terminal issue closure or PR merge, with approval bundled into the closure/merge request. +- 2026-06-19: Isolated install metadata smokes show local source removed the Anthropic and `node-domexception` warning sources, but the default local install graph still resolves `prebuild-install` through the optional embedding stack. +- 2026-06-19: Arena completed. Selected narrow default-install cleanup for the Xenova/ONNX optional embedding stack; CJK optional segmenter movement and CI/publish smoke wiring are deferred. +- 2026-06-19: TDD RED: initial `corepack pnpm exec vitest run test/quality-gates.test.ts --exclude test/integration.test.ts` was blocked before Vitest by pnpm ignored-build hardening. Followed `AGENTS.md` with `corepack pnpm install --frozen-lockfile --ignore-scripts`; rerun failed as expected because `@xenova/transformers` was still in `optionalDependencies`. +- 2026-06-19: Implemented package metadata fix: `@xenova/transformers` moved to optional peer metadata; direct root optional `onnxruntime-node` and `onnxruntime-web` removed; `@node-rs/jieba` and `tiny-segmenter` kept as optional dependencies for narrow scope. +- 2026-06-19: `corepack pnpm install --lockfile-only --ignore-scripts` updated `pnpm-lock.yaml` and removed the unused Xenova/ONNX/sharp/prebuild-install dependency graph. A generated `allowBuilds` placeholder in `pnpm-workspace.yaml` was task-caused unrelated churn and was removed without approving builds. +- 2026-06-19: Pushed `issue/258-install-warning-ux` to `origin` and opened PR #1013 against `origin/main`. Initial merge attempt was blocked by branch protection because the PR branch was stale. +- 2026-06-19: Ran `$github-push-prepare` freshness loop after user approval. Fetched only `origin main`, captured base `72572b2491680ab7cb3a847ba9974c7acc1dd8fc`, and merged that exact commit into the issue branch with no conflicts. Post-merge diff against `origin/main` remained limited to the issue #258 files. +- 2026-06-19: GitHub still reported PR #1013 dirty because `origin/main` advanced again to `96498f568eb960d722abecc08f9d7f5a1597a93a` via PR #1014. Repeated the bounded freshness loop, merged that exact commit, resolved the single `pnpm-lock.yaml` conflict by regenerating from the merged manifest with `corepack pnpm install --lockfile-only --ignore-scripts`, and completed merge commit `5e96e11b`. + +## Dependency Intake + +| Package | Decision | Rationale | +| --- | --- | --- | +| `@xenova/transformers@^2.17.2` | Move to optional peer | Needed only for explicit local/CLIP embeddings and reranking; source already lazy-imports it and throws install guidance when missing. Keeping the existing range avoids dependency refresh churn. | +| `onnxruntime-node` | Remove direct optional dependency | Not imported by agentmemory source; it belongs to the explicitly installed transformers stack. Removing it eliminates default native install/build-script surface. | +| `onnxruntime-web` | Remove direct optional dependency | Not imported by agentmemory source; it belongs to the explicitly installed transformers stack. Removing it eliminates default ML dependency surface. | +| `sharp` / `prebuild-install` | Remove from default graph through Xenova opt-in move | These were transitive warning sources; no direct pin or upgrade is needed when the opt-in stack is no longer default-installed. | +| `@node-rs/jieba`, `tiny-segmenter` | Defer | Optional CJK enhancements are not the recorded #258 warning source; moving them would broaden scope without evidence. | +| `@anthropic-ai/sdk`, `@anthropic-ai/claude-agent-sdk` | Preserve existing issue #171 fix | `@anthropic-ai/sdk` remains absent from default install surfaces; Claude Agent SDK remains optional peer only. | + +## Review Chain + +| Lane | Result | Evidence / Action | +| --- | --- | --- | +| Passive security/supply-chain review | ACCEPT | Curie found no Critical or Important actionable issue in package metadata, lockfile, docs, tests, or task notes. | +| Test coverage review | ACCEPT | Cicero found no Critical or Important actionable coverage gap; noted the package-lock install graph proof remains recorded as a consumer smoke rather than an automated test. | +| Maintainability/integration review | Important finding fixed | Tesla found that after moving Xenova to an optional peer, docs/runtime messages needed same-prefix install guidance for global installs. Fixed README and `LocalEmbeddingProvider`/`ClipEmbeddingProvider` missing-dependency messages. | +| Simple-code cleanup pass | Done | Reviewed active diff; no safe simplification beyond removing generated `allowBuilds` placeholder from `pnpm-workspace.yaml`. | + +## Verification Evidence + +| Command | Result | Notes | +| --- | --- | --- | +| `corepack pnpm install --frozen-lockfile --ignore-scripts` | Passed | Used after initial pnpm ignored-build hardening blocked the red test attempt. Warned about missing built `dist/cli.mjs` symlink before build. | +| `corepack pnpm exec vitest run test/quality-gates.test.ts --exclude test/integration.test.ts` before metadata fix | Failed as expected | RED failure: expected `@xenova/transformers` default-install surface to be undefined, received `^2.17.2`. | +| `corepack pnpm install --lockfile-only --ignore-scripts` | Passed | Regenerated lockfile without lifecycle scripts or build approvals. | +| `rg -n "@xenova/transformers|onnxruntime-node|onnxruntime-web|sharp@0\\.32\\.6|prebuild-install" package.json pnpm-lock.yaml` | Passed | Remaining `@xenova/transformers` references are only optional peer metadata in `package.json`. | +| `corepack pnpm exec vitest run test/quality-gates.test.ts --exclude test/integration.test.ts` after metadata fix | Passed | 1 file / 20 tests. | +| `corepack pnpm exec vitest run test/quality-gates.test.ts test/build-package-contract.test.ts test/embedding-provider.test.ts test/reranker.test.ts --exclude test/integration.test.ts` | Passed | 4 files / 100 tests. | +| `corepack pnpm exec vitest run test/quality-gates.test.ts test/embedding-provider.test.ts test/reranker.test.ts --exclude test/integration.test.ts` after review fix | Passed | 3 files / 95 tests. | +| `corepack pnpm run build` | Passed | Build emitted existing tsdown plugin timing and dynamic-import chunk warnings; no failure. | +| `corepack pnpm run build` after review fix | Passed | Rebuilt dist after source error-message changes; same non-blocking tsdown warnings. | +| `npm pack --dry-run --json` | Passed | Package preview succeeded before and after review fix. | +| Sanitized local tarball consumer install smoke | Passed | Latest smoke `/tmp/agentmemory-258-pack-smoke.2uQTGY/project`; no forbidden package entries for Anthropic, Xenova, ONNX, `sharp`, `prebuild-install`, or `node-domexception`; no #258 warning signatures. Earlier smoke `/tmp/agentmemory-258-pack-smoke.4JgW8L/project` also passed before review fix. | +| `corepack pnpm run lint` | Passed | ESLint completed successfully. | +| `osv-scanner scan source .` | Passed | Existing narrow `iii-sdk` transitive waiver filtered one advisory; no unfiltered issues found. | +| `semgrep scan --config p/default --error --metrics=off .` | Passed | Latest run after review fix: 0 findings, exit 0. Earlier run also passed with 0 findings and one timeout warning for `javascript.express.security.audit.express-ssrf.express-ssrf` in `src/cli.ts`. | +| `git diff --check` | Passed | No whitespace errors. | +| `rg -n "@xenova/transformers|onnxruntime-node|onnxruntime-web|sharp@0\\.32\\.6|prebuild-install" package.json pnpm-lock.yaml` | Passed | Remaining `@xenova/transformers` references are only optional peer metadata in `package.json`; no removed ML/native warning stack remains in `pnpm-lock.yaml`. | +| `corepack pnpm exec vitest run test/quality-gates.test.ts test/build-package-contract.test.ts test/embedding-provider.test.ts test/reranker.test.ts --exclude test/integration.test.ts` after base merge | Passed | 4 files / 100 tests after merging captured `origin/main` base `72572b2491680ab7cb3a847ba9974c7acc1dd8fc`. | +| `corepack pnpm run build` after base merge | Passed | Built `@agentmemory/agentmemory@0.9.28`; emitted the same non-blocking tsdown plugin timing and ineffective dynamic import warnings. | +| `npm pack --dry-run --json` after base merge | Passed | Package preview succeeded for `@agentmemory/agentmemory@0.9.28`. | +| Sanitized local tarball consumer install smoke after base merge | Passed | Latest smoke `/tmp/agentmemory-258-pack-smoke-postmerge.6DKVQs/project`; no forbidden package entries for Anthropic, Xenova, ONNX, `sharp`, `prebuild-install`, or `node-domexception`; no #258 warning signatures. | +| `corepack pnpm run lint` after base merge | Passed | ESLint completed successfully. | +| `osv-scanner scan source .` after base merge | Passed | Existing narrow `iii-sdk` transitive waiver filtered one advisory; no unfiltered issues found. | +| `semgrep scan --config p/default --error --metrics=off .` after base merge | Passed | 0 findings, exit 0. | +| `git diff --check` after base merge | Passed | No whitespace errors. | +| `rg -n "@xenova/transformers|onnxruntime-node|onnxruntime-web|sharp@0\\.32\\.6|prebuild-install" package.json pnpm-lock.yaml` after base merge | Passed | Remaining `@xenova/transformers` references are only optional peer metadata in `package.json`. | +| `corepack pnpm install --lockfile-only --ignore-scripts` during second base merge | Passed | pnpm reported the `pnpm-lock.yaml` merge conflict was successfully merged; `corepack pnpm peers check` then reported no peer dependency issues. | +| `corepack pnpm exec vitest run test/quality-gates.test.ts test/build-package-contract.test.ts test/embedding-provider.test.ts test/reranker.test.ts test/viewer-app-routes.test.ts test/viewer-app-api-client.test.ts test/viewer-app-dashboard.test.ts test/viewer-vite-build.test.ts --exclude test/integration.test.ts` after second base merge | Passed | 8 files / 120 tests, covering issue #258 package/embedding behavior and the viewer dependency surface introduced by PR #1014. | +| `corepack pnpm run build` after second base merge | Passed | Build now includes `viewer:build`; emitted the same non-blocking tsdown plugin timing and ineffective dynamic import warnings. | +| `gitleaks protect --staged --redact` before second base merge commit | Passed | No leaks found in staged merge content. | +| `npm pack --dry-run --json` after second base merge | Passed | Package preview succeeded for `@agentmemory/agentmemory@0.9.28`, including `dist/viewer-next/index.html`. | +| Sanitized local tarball consumer install smoke after second base merge | Passed | Latest smoke `/tmp/agentmemory-258-pack-smoke-postmerge2.6wMhfb/project`; no forbidden package entries for Anthropic, Xenova, ONNX, `sharp`, `prebuild-install`, or `node-domexception`; no #258 warning signatures. | +| `corepack pnpm run lint` after second base merge | Passed | ESLint completed successfully. | +| `osv-scanner scan source .` after second base merge | Passed | Existing narrow `iii-sdk` transitive waiver filtered one advisory; no unfiltered issues found. | +| `semgrep scan --config p/default --error --metrics=off .` after second base merge | Passed | 0 findings, exit 0. | + +## Current Remote Status + +Branch `issue/258-install-warning-ux` has been pushed to `origin`, and PR #1013 exists against `origin/main`. + +Local branch currently includes captured `origin/main` base merges for `72572b2491680ab7cb3a847ba9974c7acc1dd8fc` and `96498f568eb960d722abecc08f9d7f5a1597a93a`, and is ahead of `origin/issue/258-install-warning-ux` pending the approved follow-up push. + +No issue closure, PR merge, publish/release, or thread archival has been completed yet. Thread archival remains bundled with a successful terminal merge outcome. diff --git a/package.json b/package.json index b687fd72..7639aaf1 100644 --- a/package.json +++ b/package.json @@ -76,18 +76,19 @@ "zod": "^4.0.0" }, "peerDependencies": { - "@anthropic-ai/claude-agent-sdk": "^0.3.142" + "@anthropic-ai/claude-agent-sdk": "^0.3.142", + "@xenova/transformers": "^2.17.2" }, "peerDependenciesMeta": { "@anthropic-ai/claude-agent-sdk": { "optional": true + }, + "@xenova/transformers": { + "optional": true } }, "optionalDependencies": { "@node-rs/jieba": "^2.0.1", - "@xenova/transformers": "^2.17.2", - "onnxruntime-node": "^1.14.0", - "onnxruntime-web": "^1.14.0", "tiny-segmenter": "^0.2.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f17e636a..dcad37e0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -73,15 +73,6 @@ importers: '@node-rs/jieba': specifier: ^2.0.1 version: 2.0.1 - '@xenova/transformers': - specifier: ^2.17.2 - version: 2.17.2 - onnxruntime-node: - specifier: ^1.14.0 - version: 1.26.0 - onnxruntime-web: - specifier: ^1.14.0 - version: 1.26.0 tiny-segmenter: specifier: ^0.2.0 version: 0.2.0 @@ -388,10 +379,6 @@ packages: resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==} engines: {node: ^20.19.0 || ^22.13.0 || >=24} - '@huggingface/jinja@0.2.2': - resolution: {integrity: sha512-/KPde26khDUIPkTGU82jdtTW9UAuvUTumCAbFs/7giR0SxsvZC4hru51PBvpijH6BVkHcROcvZM/lpy5h1jRRA==} - engines: {node: '>=18'} - '@humanfs/core@0.19.2': resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==} engines: {node: '>=18.18.0'} @@ -1233,9 +1220,6 @@ packages: '@vue/shared@3.5.38': resolution: {integrity: sha512-FTW0AFZNaK5/mOqvGBwVfUlNLU38TiQn4+DQgIFUnrBBJQ1crMJ82yeGQLV5jyKFsO8yRukpbuP7x+nRbH6aug==} - '@xenova/transformers@2.17.2': - resolution: {integrity: sha512-lZmHqzrVIkSvZdKZEx7IYY51TK0WDrC8eR0c5IMnBsO8di8are1zzw8BlLhyO2TklZKLN5UffNGs1IJwT6oOqQ==} - acorn-import-attributes@1.9.5: resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} peerDependencies: @@ -1251,10 +1235,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - adm-zip@0.5.17: - resolution: {integrity: sha512-+Ut8d9LLqwEvHHJl1+PIHqoyDxFgVN847JTVM3Izi3xHDWPE4UtzzXysMZQs64DMcrJfBeS/uoEP4AD3HQHnQQ==} - engines: {node: '>=12.0'} - ajv@6.15.0: resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==} @@ -1276,62 +1256,10 @@ packages: ast-v8-to-istanbul@1.0.4: resolution: {integrity: sha512-0bC0/4bTSrnwdhU3IsZDwEdojvuPrSg59OYZfKsLRtJZ0u8VBx9DebfqqG8bRdCC0I7vjgxmPi41P0lpkhJHtA==} - b4a@1.8.1: - resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==} - peerDependencies: - react-native-b4a: '*' - peerDependenciesMeta: - react-native-b4a: - optional: true - balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - bare-events@2.9.1: - resolution: {integrity: sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==} - peerDependencies: - bare-abort-controller: '*' - peerDependenciesMeta: - bare-abort-controller: - optional: true - - bare-fs@4.7.2: - resolution: {integrity: sha512-aTvMFUWkBmjzKtEQMDGGDNF8bkfpD5N1b/FCwt7A3wrU4t1o/e/85Wzkluh6JlODCjqVESYCkQCdTXqZ9G7VFg==} - engines: {bare: '>=1.16.0'} - peerDependencies: - bare-buffer: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - - bare-os@3.9.1: - resolution: {integrity: sha512-6M5XjcnsygQNPMCMPXSK379xrJFiZ/AEMNBmFEmQW8d/789VQATvriyi5r0HYTL9TkQ26rn3kgdTG3aisbrXkQ==} - engines: {bare: '>=1.14.0'} - - bare-path@3.0.1: - resolution: {integrity: sha512-ghj2DSK/2e99a1anTVPCV4m4YIYtrbXhfM7V3D7XZLOTsybnYyaJloymGqssQc8l/or0UoDyRtNQkmkEF/ysgQ==} - - bare-stream@2.13.3: - resolution: {integrity: sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==} - peerDependencies: - bare-abort-controller: '*' - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-abort-controller: - optional: true - bare-buffer: - optional: true - bare-events: - optional: true - - bare-url@2.4.5: - resolution: {integrity: sha512-K+y9xF1tN+CdPu4qWwr0QiK1Al07eFPGYK5M2pDXcmHdMdgC/tT/bpmMe1hrmRHaidKLkXrC+cRNYf3XVDUhSQ==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.10.37: resolution: {integrity: sha512-girxaJ7WZssDOFhzCGZTDKoTa1gk6A1TbflaYTpykLJ4UU9Fz9kx1aREM8JCuoVHbL8X8T/mJg7w2oYSq72Oig==} engines: {node: '>=6.0.0'} @@ -1340,16 +1268,10 @@ packages: birpc@4.0.0: resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - brace-expansion@5.0.6: resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - cac@7.0.0: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} engines: {node: '>=20.19.0'} @@ -1361,29 +1283,12 @@ packages: resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - cjs-module-lexer@1.4.3: resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} @@ -1403,25 +1308,9 @@ packages: supports-color: optional: true - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - defu@6.1.7: resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==} @@ -1446,17 +1335,10 @@ packages: resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==} engines: {node: '>=14'} - end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - entities@7.0.1: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} @@ -1521,13 +1403,6 @@ packages: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - events-universal@1.0.1: - resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} - - expand-template@2.0.3: - resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} - engines: {node: '>=6'} - expect-type@1.3.0: resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} @@ -1535,9 +1410,6 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -1574,18 +1446,9 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatbuffers@1.12.0: - resolution: {integrity: sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==} - - flatbuffers@25.9.23: - resolution: {integrity: sha512-MI1qs7Lo4Syw0EOzUl0xjs2lsoeqFku44KpngfIduHBYvzm8h2+7K8YMQh1JtVVVrUvhLpNwqVi4DERegUJhPQ==} - flatted@3.4.2: resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -1597,39 +1460,18 @@ packages: get-tsconfig@4.14.0: resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} - github-from-package@0.0.0: - resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} - glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - global-agent@4.1.3: - resolution: {integrity: sha512-KUJEViiuFT3I97t+GYMikLPJS2Lfo/S2F+DQuBWzuzaMPnvt5yyZePzArx36fBzpGTxZjIpDbXLeySLgh+k76g==} - engines: {node: '>=10.0'} - globals@17.6.0: resolution: {integrity: sha512-sepffkT8stwnIYbsMBpoCHJuJM5l98FUF2AnE07hfvE0m/qp3R586hw4jF4uadbhvg1ooIdzuu7CsfD2jzCaNA==} engines: {node: '>=18'} - globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - guid-typescript@1.0.9: - resolution: {integrity: sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - hasown@2.0.4: resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} engines: {node: '>= 0.4'} @@ -1640,9 +1482,6 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} @@ -1665,15 +1504,6 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - - is-arrayish@0.3.4: - resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} - is-core-module@2.16.2: resolution: {integrity: sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==} engines: {node: '>= 0.4'} @@ -1803,9 +1633,6 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - long@4.0.0: - resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} - long@5.3.2: resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} @@ -1819,24 +1646,10 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} - matcher@4.0.0: - resolution: {integrity: sha512-S6x5wmcDmsDRRU/c2dkccDwQPXoFczc5+HpQ2lON8pnvHlnvHAHj5WlLVvw6n6vNyHuVugYrFohYxbS+pvFpKQ==} - engines: {node: '>=10'} - - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - minimatch@10.2.5: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - module-details-from-path@1.0.4: resolution: {integrity: sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==} @@ -1851,9 +1664,6 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - napi-build-utils@2.0.0: - resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} - natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -1878,47 +1688,10 @@ packages: sass: optional: true - node-abi@3.92.0: - resolution: {integrity: sha512-KdHvFWZjEKDf0cakgFjebl371GPsISX2oZHcuyKqM7DtogIsHrqKeLTo8wBHxaXRAQlY2PsPlZmfo+9ZCxEREQ==} - engines: {node: '>=10'} - - node-addon-api@6.1.0: - resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - obug@2.1.3: resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} engines: {node: '>=12.20.0'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onnx-proto@4.0.4: - resolution: {integrity: sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==} - - onnxruntime-common@1.14.0: - resolution: {integrity: sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew==} - - onnxruntime-common@1.26.0: - resolution: {integrity: sha512-qVyMR4lcWgbkc4getFV+GQijsTnbg/siteoqcDwa3sI/LxbrMSNw4ePyvCq/ymdQaRomCA7YuWmhzsswxvymdw==} - - onnxruntime-node@1.14.0: - resolution: {integrity: sha512-5ba7TWomIV/9b6NH/1x/8QEeowsb+jBEvFzU6z0T4mNsFwdPqXeFUM7uxC6QeSRkEbWu3qEB0VMjrvzN/0S9+w==} - os: [win32, darwin, linux] - - onnxruntime-node@1.26.0: - resolution: {integrity: sha512-OHl6PiOEOqxaLHL0N9eFrbzS7IGmu3BtJNH3RTEnRAheCIkfc3gjcjl4sGcjp9C22ZC9YTquDOxSdT/stBQ6BQ==} - os: [win32, darwin, linux] - - onnxruntime-web@1.14.0: - resolution: {integrity: sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==} - - onnxruntime-web@1.26.0: - resolution: {integrity: sha512-LbRr/8zZt2xilI2smrVQGGKINo0U46i8qJp+UXyMBGfqN7KjnH1BiwCwLwyNIVV4i9CKFv7Sf4PwLKWnT8/bEA==} - optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} @@ -1955,19 +1728,10 @@ packages: resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} - platform@1.3.6: - resolution: {integrity: sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==} - postcss@8.5.15: resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} engines: {node: ^10 || ^12 || >=14} - prebuild-install@7.1.3: - resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} - engines: {node: '>=10'} - deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available. - hasBin: true - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -1976,9 +1740,6 @@ packages: resolution: {integrity: sha512-RJJPTTpvFfHcWLkIa2JFWK4XvtSzS0yEWDmunqHXli1h3JlkbcQZXDZdcWxv+JK3Xsl5/UFDPZ0iGm7DAengYw==} engines: {node: '>=12.0.0'} - pump@3.0.4: - resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -1986,10 +1747,6 @@ packages: quansync@1.0.0: resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==} - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - react-dom@19.2.7: resolution: {integrity: sha512-t0BRVXvbiE/o20Hfw669rLbMCDWtYZLvmJigy2f0MxsXF+71pxhR3xOkspmsO8h3ZlNzyibAmtCa3l4lYKk6gQ==} peerDependencies: @@ -1999,10 +1756,6 @@ packages: resolution: {integrity: sha512-HNe9WslTbXmFK8o8cmwgAeJFSBvt1bPdHCVKtaaV+WlAN36mpT4hcRpwbf3fY56ar2oIXzsBpOAiIRHAdY0OlQ==} engines: {node: '>=0.10.0'} - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - require-in-the-middle@7.5.2: resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} engines: {node: '>=8.6.0'} @@ -2044,9 +1797,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - scheduler@0.27.0: resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} @@ -2055,14 +1805,6 @@ packages: engines: {node: '>=10'} hasBin: true - serialize-error@8.1.0: - resolution: {integrity: sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==} - engines: {node: '>=10'} - - sharp@0.32.6: - resolution: {integrity: sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==} - engines: {node: '>=14.15.0'} - sharp@0.34.5: resolution: {integrity: sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2081,15 +1823,6 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - simple-concat@1.0.1: - resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} - - simple-get@4.0.1: - resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - - simple-swizzle@0.2.4: - resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} - sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -2103,16 +1836,6 @@ packages: std-env@4.1.0: resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} - streamx@2.28.0: - resolution: {integrity: sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - styled-jsx@5.1.6: resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} engines: {node: '>= 12.0.0'} @@ -2134,25 +1857,6 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - tar-fs@2.1.4: - resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - - tar-fs@3.1.2: - resolution: {integrity: sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==} - - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - - tar-stream@3.2.0: - resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==} - - teex@1.0.1: - resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} - - text-decoder@1.2.7: - resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} - tiny-segmenter@0.2.0: resolution: {integrity: sha512-m+aTJQ/CUBKurLaJRpLmJiwcL+Gpkzft5ZYnRU9AkuO45Y/k/2iJmuLEbN1XLrq6N3kDVyIUCCeqRzQx0feBag==} @@ -2217,17 +1921,10 @@ packages: engines: {node: '>=18.0.0'} hasBin: true - tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} - type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - typescript-eslint@8.61.0: resolution: {integrity: sha512-8y31Rd0eGTrDKqhy6vT0HtzhN+YLjQizwX3aA3hPXP/ynSfnrBXcQY5IzsP9/DM7+klX4IUncZZjkchP0z+rUw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2259,9 +1956,6 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - vite@8.0.16: resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2377,9 +2071,6 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.21.0: resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} @@ -2594,9 +2285,6 @@ snapshots: '@eslint/core': 1.2.1 levn: 0.4.1 - '@huggingface/jinja@0.2.2': - optional: true - '@humanfs/core@0.19.2': dependencies: '@humanfs/types': 0.15.0 @@ -3312,19 +3000,6 @@ snapshots: '@vue/shared@3.5.38': {} - '@xenova/transformers@2.17.2': - dependencies: - '@huggingface/jinja': 0.2.2 - onnxruntime-web: 1.14.0 - sharp: 0.32.6 - optionalDependencies: - onnxruntime-node: 1.14.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - optional: true - acorn-import-attributes@1.9.5(acorn@8.17.0): dependencies: acorn: 8.17.0 @@ -3335,9 +3010,6 @@ snapshots: acorn@8.17.0: {} - adm-zip@0.5.17: - optional: true - ajv@6.15.0: dependencies: fast-deep-equal: 3.1.3 @@ -3363,107 +3035,26 @@ snapshots: estree-walker: 3.0.3 js-tokens: 10.0.0 - b4a@1.8.1: - optional: true - balanced-match@4.0.4: {} - bare-events@2.9.1: - optional: true - - bare-fs@4.7.2: - dependencies: - bare-events: 2.9.1 - bare-path: 3.0.1 - bare-stream: 2.13.3(bare-events@2.9.1) - bare-url: 2.4.5 - fast-fifo: 1.3.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true - - bare-os@3.9.1: - optional: true - - bare-path@3.0.1: - dependencies: - bare-os: 3.9.1 - optional: true - - bare-stream@2.13.3(bare-events@2.9.1): - dependencies: - b4a: 1.8.1 - streamx: 2.28.0 - teex: 1.0.1 - optionalDependencies: - bare-events: 2.9.1 - transitivePeerDependencies: - - react-native-b4a - optional: true - - bare-url@2.4.5: - dependencies: - bare-path: 3.0.1 - optional: true - - base64-js@1.5.1: - optional: true - baseline-browser-mapping@2.10.37: {} birpc@4.0.0: {} - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - optional: true - brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - optional: true - cac@7.0.0: {} caniuse-lite@1.0.30001799: {} chai@6.2.2: {} - chownr@1.1.4: - optional: true - cjs-module-lexer@1.4.3: {} client-only@0.0.1: {} - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - optional: true - - color-name@1.1.4: - optional: true - - color-string@1.9.1: - dependencies: - color-name: 1.1.4 - simple-swizzle: 0.2.4 - optional: true - - color@4.2.3: - dependencies: - color-convert: 2.0.1 - color-string: 1.9.1 - optional: true - convert-source-map@2.0.0: {} cross-spawn@7.0.6: @@ -3478,30 +3069,8 @@ snapshots: dependencies: ms: 2.1.3 - decompress-response@6.0.0: - dependencies: - mimic-response: 3.1.0 - optional: true - - deep-extend@0.6.0: - optional: true - deep-is@0.1.4: {} - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.1 - es-errors: 1.3.0 - gopd: 1.2.0 - optional: true - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - optional: true - defu@6.1.7: {} detect-libc@2.1.2: {} @@ -3512,16 +3081,8 @@ snapshots: empathic@2.0.1: {} - end-of-stream@1.4.5: - dependencies: - once: 1.4.0 - optional: true - entities@7.0.1: {} - es-define-property@1.0.1: - optional: true - es-errors@1.3.0: {} es-module-lexer@2.1.0: {} @@ -3627,23 +3188,10 @@ snapshots: esutils@2.0.3: {} - events-universal@1.0.1: - dependencies: - bare-events: 2.9.1 - transitivePeerDependencies: - - bare-abort-controller - optional: true - - expand-template@2.0.3: - optional: true - expect-type@1.3.0: {} fast-deep-equal@3.1.3: {} - fast-fifo@1.3.2: - optional: true - fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} @@ -3676,17 +3224,8 @@ snapshots: flatted: 3.4.2 keyv: 4.5.4 - flatbuffers@1.12.0: - optional: true - - flatbuffers@25.9.23: - optional: true - flatted@3.4.2: {} - fs-constants@1.0.0: - optional: true - fsevents@2.3.3: optional: true @@ -3696,42 +3235,14 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - github-from-package@0.0.0: - optional: true - glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - global-agent@4.1.3: - dependencies: - globalthis: 1.0.4 - matcher: 4.0.0 - semver: 7.8.4 - serialize-error: 8.1.0 - optional: true - globals@17.6.0: {} - globalthis@1.0.4: - dependencies: - define-properties: 1.2.1 - gopd: 1.2.0 - optional: true - - gopd@1.2.0: - optional: true - - guid-typescript@1.0.9: - optional: true - has-flag@4.0.0: {} - has-property-descriptors@1.0.2: - dependencies: - es-define-property: 1.0.1 - optional: true - hasown@2.0.4: dependencies: function-bind: 1.1.2 @@ -3740,9 +3251,6 @@ snapshots: html-escaper@2.0.2: {} - ieee754@1.2.1: - optional: true - ignore@5.3.2: {} ignore@7.0.5: {} @@ -3777,15 +3285,6 @@ snapshots: imurmurhash@0.1.4: {} - inherits@2.0.4: - optional: true - - ini@1.3.8: - optional: true - - is-arrayish@0.3.4: - optional: true - is-core-module@2.16.2: dependencies: hasown: 2.0.4 @@ -3883,9 +3382,6 @@ snapshots: dependencies: p-locate: 5.0.0 - long@4.0.0: - optional: true - long@5.3.2: {} magic-string@0.30.21: @@ -3902,24 +3398,10 @@ snapshots: dependencies: semver: 7.8.4 - matcher@4.0.0: - dependencies: - escape-string-regexp: 4.0.0 - optional: true - - mimic-response@3.1.0: - optional: true - minimatch@10.2.5: dependencies: brace-expansion: 5.0.6 - minimist@1.2.8: - optional: true - - mkdirp-classic@0.5.3: - optional: true - module-details-from-path@1.0.4: {} ms@2.1.3: {} @@ -3928,9 +3410,6 @@ snapshots: nanoid@3.3.12: {} - napi-build-utils@2.0.0: - optional: true - natural-compare@1.4.0: {} next@16.2.9(@opentelemetry/api@1.9.1)(react-dom@19.2.7(react@19.2.7))(react@19.2.7): @@ -3958,67 +3437,8 @@ snapshots: - '@babel/core' - babel-plugin-macros - node-abi@3.92.0: - dependencies: - semver: 7.8.4 - optional: true - - node-addon-api@6.1.0: - optional: true - - object-keys@1.1.1: - optional: true - obug@2.1.3: {} - once@1.4.0: - dependencies: - wrappy: 1.0.2 - optional: true - - onnx-proto@4.0.4: - dependencies: - protobufjs: 7.6.4 - optional: true - - onnxruntime-common@1.14.0: - optional: true - - onnxruntime-common@1.26.0: - optional: true - - onnxruntime-node@1.14.0: - dependencies: - onnxruntime-common: 1.14.0 - optional: true - - onnxruntime-node@1.26.0: - dependencies: - adm-zip: 0.5.17 - global-agent: 4.1.3 - onnxruntime-common: 1.26.0 - optional: true - - onnxruntime-web@1.14.0: - dependencies: - flatbuffers: 1.12.0 - guid-typescript: 1.0.9 - long: 4.0.0 - onnx-proto: 4.0.4 - onnxruntime-common: 1.14.0 - platform: 1.3.6 - optional: true - - onnxruntime-web@1.26.0: - dependencies: - flatbuffers: 25.9.23 - guid-typescript: 1.0.9 - long: 5.3.2 - onnxruntime-common: 1.26.0 - platform: 1.3.6 - protobufjs: 7.6.4 - optional: true - optionator@0.9.4: dependencies: deep-is: 0.1.4 @@ -4050,31 +3470,12 @@ snapshots: picomatch@4.0.4: {} - platform@1.3.6: - optional: true - postcss@8.5.15: dependencies: nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 - prebuild-install@7.1.3: - dependencies: - detect-libc: 2.1.2 - expand-template: 2.0.3 - github-from-package: 0.0.0 - minimist: 1.2.8 - mkdirp-classic: 0.5.3 - napi-build-utils: 2.0.0 - node-abi: 3.92.0 - pump: 3.0.4 - rc: 1.2.8 - simple-get: 4.0.1 - tar-fs: 2.1.4 - tunnel-agent: 0.6.0 - optional: true - prelude-ls@1.2.1: {} protobufjs@7.6.4: @@ -4091,24 +3492,10 @@ snapshots: '@types/node': 25.9.3 long: 5.3.2 - pump@3.0.4: - dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - optional: true - punycode@2.3.1: {} quansync@1.0.0: {} - rc@1.2.8: - dependencies: - deep-extend: 0.6.0 - ini: 1.3.8 - minimist: 1.2.8 - strip-json-comments: 2.0.1 - optional: true - react-dom@19.2.7(react@19.2.7): dependencies: react: 19.2.7 @@ -4116,13 +3503,6 @@ snapshots: react@19.2.7: {} - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - optional: true - require-in-the-middle@7.5.2: dependencies: debug: 4.4.3 @@ -4201,34 +3581,10 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.3 '@rolldown/binding-win32-x64-msvc': 1.0.3 - safe-buffer@5.2.1: - optional: true - scheduler@0.27.0: {} semver@7.8.4: {} - serialize-error@8.1.0: - dependencies: - type-fest: 0.20.2 - optional: true - - sharp@0.32.6: - dependencies: - color: 4.2.3 - detect-libc: 2.1.2 - node-addon-api: 6.1.0 - prebuild-install: 7.1.3 - semver: 7.8.4 - simple-get: 4.0.1 - tar-fs: 3.1.2 - tunnel-agent: 0.6.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - optional: true - sharp@0.34.5: dependencies: '@img/colour': 1.1.0 @@ -4271,21 +3627,6 @@ snapshots: siginfo@2.0.0: {} - simple-concat@1.0.1: - optional: true - - simple-get@4.0.1: - dependencies: - decompress-response: 6.0.0 - once: 1.4.0 - simple-concat: 1.0.1 - optional: true - - simple-swizzle@0.2.4: - dependencies: - is-arrayish: 0.3.4 - optional: true - sisteransi@1.0.5: {} source-map-js@1.2.1: {} @@ -4294,24 +3635,6 @@ snapshots: std-env@4.1.0: {} - streamx@2.28.0: - dependencies: - events-universal: 1.0.1 - fast-fifo: 1.3.2 - text-decoder: 1.2.7 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - optional: true - - strip-json-comments@2.0.1: - optional: true - styled-jsx@5.1.6(react@19.2.7): dependencies: client-only: 0.0.1 @@ -4323,63 +3646,6 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - tar-fs@2.1.4: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.4 - tar-stream: 2.2.0 - optional: true - - tar-fs@3.1.2: - dependencies: - pump: 3.0.4 - tar-stream: 3.2.0 - optionalDependencies: - bare-fs: 4.7.2 - bare-path: 3.0.1 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - optional: true - - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.5 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - optional: true - - tar-stream@3.2.0: - dependencies: - b4a: 1.8.1 - bare-fs: 4.7.2 - fast-fifo: 1.3.2 - streamx: 2.28.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - optional: true - - teex@1.0.1: - dependencies: - streamx: 2.28.0 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - optional: true - - text-decoder@1.2.7: - dependencies: - b4a: 1.8.1 - transitivePeerDependencies: - - react-native-b4a - optional: true - tiny-segmenter@0.2.0: optional: true @@ -4435,18 +3701,10 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - tunnel-agent@0.6.0: - dependencies: - safe-buffer: 5.2.1 - optional: true - type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - type-fest@0.20.2: - optional: true - typescript-eslint@8.61.0(eslint@10.5.0)(typescript@6.0.3): dependencies: '@typescript-eslint/eslint-plugin': 8.61.0(@typescript-eslint/parser@8.61.0(eslint@10.5.0)(typescript@6.0.3))(eslint@10.5.0)(typescript@6.0.3) @@ -4475,9 +3733,6 @@ snapshots: dependencies: punycode: 2.3.1 - util-deprecate@1.0.2: - optional: true - vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(tsx@4.22.4): dependencies: lightningcss: 1.32.0 @@ -4549,9 +3804,6 @@ snapshots: word-wrap@1.2.5: {} - wrappy@1.0.2: - optional: true - ws@8.21.0: {} yocto-queue@0.1.0: {} diff --git a/src/providers/embedding/clip.ts b/src/providers/embedding/clip.ts index 77e3b480..2e3c601e 100644 --- a/src/providers/embedding/clip.ts +++ b/src/providers/embedding/clip.ts @@ -60,7 +60,7 @@ export class ClipEmbeddingProvider implements EmbeddingProvider { this.transformers = await loadTransformers(); } catch { throw new Error( - "Install @xenova/transformers for CLIP image embeddings: npm install @xenova/transformers", + "Install @xenova/transformers in the same npm prefix as agentmemory for CLIP image embeddings: npm install @xenova/transformers (or npm install -g @xenova/transformers for global agentmemory installs)", ); } return this.transformers; diff --git a/src/providers/embedding/local.ts b/src/providers/embedding/local.ts index 91d9ab54..939e3fa0 100644 --- a/src/providers/embedding/local.ts +++ b/src/providers/embedding/local.ts @@ -98,7 +98,7 @@ export class LocalEmbeddingProvider implements EmbeddingProvider { transformers = await loadTransformers<{ pipeline: Pipeline }>(); } catch { throw new Error( - "Install @xenova/transformers for local embeddings: npm install @xenova/transformers", + "Install @xenova/transformers in the same npm prefix as agentmemory for local embeddings: npm install @xenova/transformers (or npm install -g @xenova/transformers for global agentmemory installs)", ); } diff --git a/test/quality-gates.test.ts b/test/quality-gates.test.ts index 6717171c..32fdbd11 100644 --- a/test/quality-gates.test.ts +++ b/test/quality-gates.test.ts @@ -433,7 +433,7 @@ describe("root quality gates", () => { expect(readme).not.toContain("TypeScript 5.7"); }); - it("does not auto-install Anthropic packages in the root package", () => { + it("keeps opt-in provider packages out of the default install graph", () => { const pkg = readPackageJson(); const autoInstallSurfaces = [ pkg.dependencies ?? {}, @@ -443,15 +443,27 @@ describe("root quality gates", () => { ...(pkg.bundledDependencies ?? []), ...(pkg.bundleDependencies ?? []), ]; + const defaultInstallPackages = [ + "@anthropic-ai/sdk", + "@anthropic-ai/claude-agent-sdk", + "@xenova/transformers", + "onnxruntime-node", + "onnxruntime-web", + ]; for (const deps of autoInstallSurfaces) { - expect(deps["@anthropic-ai/sdk"]).toBeUndefined(); - expect(deps["@anthropic-ai/claude-agent-sdk"]).toBeUndefined(); + for (const packageName of defaultInstallPackages) { + expect(deps[packageName]).toBeUndefined(); + } + } + for (const packageName of defaultInstallPackages) { + expect(bundled).not.toContain(packageName); } - expect(bundled).not.toContain("@anthropic-ai/sdk"); - expect(bundled).not.toContain("@anthropic-ai/claude-agent-sdk"); + expect(pkg.peerDependencies?.["@anthropic-ai/claude-agent-sdk"]).toBe("^0.3.142"); expect(pkg.peerDependenciesMeta?.["@anthropic-ai/claude-agent-sdk"]?.optional).toBe(true); + expect(pkg.peerDependencies?.["@xenova/transformers"]).toBe("^2.17.2"); + expect(pkg.peerDependenciesMeta?.["@xenova/transformers"]?.optional).toBe(true); }); it("keeps the OSV waiver narrow and time-bounded", () => {