Dashboard › sentry › Session 0v7GtHGOmaqe
0v7GtHGOmaqeGFwlpThis is a very thorough investigation. I need to understand why CI fails with Cannot find module 'embedding-worker.cjs' at packages/core/src/embedding.ts:337.
The worker resolution logic at packages/core/src/embedding.ts:325-340 has 3 paths:
.ts or .js extension.cjs extensionThe build outputs dist/node/embedding-worker.js and dist/bun/embedding-worker.js (from esbuild). There is NO .cjs file anywhere.
Please do:
packages/core/package.json - check the "test" script and exports map.github/workflows/ci.yml - find the test command and how it runs (which runner, which environment)bunfig.toml or tsconfig.json to understand module resolutionimport.meta.urlpackages/core/test/setup.ts for any module setupReturn: the exact test command CI runs, which Node/Bun runner it uses, and why the CJS fallback path at line 337 might be hit (i.e., why import.meta.url might not be a string in the test environment).
<path>/home/byk/Code/opencode-lore/packages/core/package.json</path>
<type>file</type>
<content>
1: {
2: "name": "@loreai/core",
3: "version": "0.24.1",
4: "type": "module",
5: "license": "FSL-1.1-Apache-2.0",
6: "description": "Shared memory engine for Lore — three-tier storage, distillation, gradient context management",
7: "main": "./dist/node/index.js",
8: "types": "./dist/node/index.d.ts",
9: "exports": {
10: ".": {
11: "types": "./dist/types/index.d.ts",
12: "bun": "./dist/bun/index.js",
13: "default": "./dist/node/index.js"
14: }
15: },
16: "imports": {
17: "#db/driver": {
18: "bun": "./src/db/driver.bun.ts",
19: "default": "./src/db/driver.node.ts"
20: }
21: },
22: "scripts": {
23: "typecheck": "tsc --noEmit",
24: "build": "tsx script/build.ts"
25: },
26: "dependencies": {
27: "@huggingface/hub": "2.11.0",
28: "@huggingface/transformers": "^3.7.1",
29: "micromark": "^4.0.0",
30: ...
<path>/home/byk/Code/opencode-lore/.github/workflows/ci.yml</path>
<type>file</type>
<content>
1: name: CI
2:
3: on:
4: push:
5: branches: [main, 'release/**']
6: pull_request:
7: branches: [main]
8:
9: # packages:write is needed for publish-nightly to push to GHCR
10: permissions:
11: contents: read
12: packages: write
13:
14: env:
15: # Commit timestamp used for deterministic nightly version strings.
16: # Defined at workflow level so all jobs agree on the same value.
17: COMMIT_TIMESTAMP: ${{ github.event.head_commit.timestamp }}
18:
19: jobs:
20: # ---------------------------------------------------------------------------
21: # Change detection: skip heavy CI for docs-only changes
22: # ---------------------------------------------------------------------------
23: changes:
24: runs-on: ubuntu-latest
25: permissions:
26: pull-requests: read
27: outputs:
28: code: ${{ steps.force.outputs.code || steps.filter.outputs.code ...
<path>/home/byk/Code/opencode-lore/packages/core/src/embedding.ts</path>
<type>file</type>
<content>
310: modelId: this.modelId,
311: dimensions: this.dimensions,
312: vendorModel: vendor ? { localModelPath: vendor.localModelPath } : null,
313: };
314:
315: if (workerSource !== undefined) {
316: const { join } = await import("node:path");
317: const { homedir } = await import("node:os");
318: const opts: Record<string, unknown> = {
319: eval: true,
320: filename: join(homedir(), ".cache", "lore", "worker.cjs"),
321: workerData: workerInitData,
322: };
323: this.worker = new Worker(workerSource, opts);
324: } else {
325: // npm bundle / dev path: point at a sibling worker file.
326: let workerUrl: string | URL;
327: const selfUrl =
328: typeof import.meta.url === "string" ? import.meta.url : undefined;
329: if (selfUrl) {
330: ...
File not found: /home/byk/Code/opencode-lore/bunfig.toml
<path>/home/byk/Code/opencode-lore/package.json</path>
<type>file</type>
<content>
1: {
2: "name": "lore-monorepo",
3: "private": true,
4: "type": "module",
5: "license": "FSL-1.1-Apache-2.0",
6: "description": "Monorepo root for Lore — three-tier memory architecture",
7: "main": "./packages/opencode/src/index.ts",
8: "exports": {
9: ".": "./packages/opencode/src/index.ts"
10: },
11: "packageManager": "pnpm@10.28.0",
12: "pnpm": {
13: "onlyBuiltDependencies": [
14: "esbuild",
15: "sharp"
16: ]
17: },
18: "scripts": {
19: "typecheck": "pnpm -r run typecheck",
20: "test": "vitest run",
21: "pretest": "pnpm --filter @loreai/gateway run bundle",
22: "build": "pnpm -r run build",
23: "site:dev": "pnpm --filter '@loreai/website' dev",
24: "site:build": "pnpm --filter '@loreai/website' build",
25: "site:preview": "pnpm --filter '@loreai/website' preview",
26: "lint": "biome check .",
27: "lint:fix": "biome ...
No files found
/home/byk/Code/opencode-lore/packages/core/test/setup.ts
<path>/home/byk/Code/opencode-lore/packages/core/script/build.ts</path> <type>file</type> <content> 1: /** 2: * Build @loreai/core into publishable ESM bundles. 3: * 4: * Two targets: 5: * - dist/node/index.js — uses node:sqlite (for Pi extension, ACP server, etc.) 6: * - dist/bun/index.js — uses bun:sqlite (for OpenCode plugin) 7: * 8: * esbuild resolves the `#db/driver` subpath import map per target via 9: * `conditions: ["node"]` or `conditions: ["bun"]`. 10: * 11: * TypeScript declarations (.d.ts) are emitted separately by `tsc` below. 12: * esbuild alone can't produce declarations. 13: * 14: * Runs under either Bun (during `bun run build`) or Node; the build itself is 15: * runtime-agnostic (esbuild is a plain npm package). ...
No files found
/home/byk/Code/opencode-lore/vitest.config.ts
No files found
/home/byk/Code/opencode-lore/packages/core/tsconfig.json /home/byk/Code/opencode-lore/packages/core/tsconfig.build.json
<path>/home/byk/Code/opencode-lore/packages/core/test/setup.ts</path>
<type>file</type>
<content>
1: import { mkdtempSync, rmSync } from "node:fs";
2: import { join } from "node:path";
3: import { tmpdir } from "node:os";
4: import { afterAll } from "vitest";
5: import { close } from "../src/db";
6:
7: // Create an isolated temporary database for the entire test run.
8: // This prevents test fixtures from leaking into the live lore DB
9: // at ~/.local/share/lore/lore.db.
10: const tmp = mkdtempSync(join(tmpdir(), "lore-test-"));
11: process.env.LORE_DB_PATH = join(tmp, "test.db");
12:
13: // ---------------------------------------------------------------------------
14: // Block live network to models.dev during tests.
15: //
16: // `fetchModelData()` (gateway/src/worker-model.ts) hits
17: // https://models.dev/api.json to pull pricing/limits, and the gateway
18: // pre-warms it on startup (pipeline.ts). ...
<path>/home/byk/Code/opencode-lore/vitest.config.ts</path>
<type>file</type>
<content>
1: import { defineConfig } from "vitest/config";
2: import path from "node:path";
3:
4: export default defineConfig({
5: test: {
6: // Run all packages' tests
7: include: [
8: "packages/core/test/**/*.test.ts",
9: "packages/gateway/test/**/*.test.ts",
10: "packages/opencode/test/**/*.test.ts",
11: ],
12: // Preload test setup for DB isolation
13: setupFiles: ["./packages/core/test/setup.ts"],
14: // Environment
15: environment: "node",
16: pool: "threads",
17: // Timeouts — generous for gateway startup and LLM operations
18: testTimeout: 300_000, // 5 min per test
19: hookTimeout: 300_000,
20: // Environment variables for test isolation
21: env: {
22: NODE_ENV: "test",
23: SENTRY_ENABLED: "0",
24: LORE_DEBUG: "0",
25: },
26: // Coverage is optional and run separately
27: coverage: {
28: ...
<path>/home/byk/Code/opencode-lore/packages/core/tsconfig.json</path>
<type>file</type>
<content>
1: {
2: "extends": "../../tsconfig.base.json",
3: "compilerOptions": {
4: "noEmit": true
5: },
6: "include": ["src", "test", "script"],
7: "exclude": ["src/db/driver.bun.ts"]
8: }
(End of file - total 8 lines)
</content>
<path>/home/byk/Code/opencode-lore/packages/core/tsconfig.build.json</path>
<type>file</type>
<content>
1: {
2: "extends": "../../tsconfig.base.json",
3: "compilerOptions": {
4: "outDir": "dist/types",
5: "rootDir": "src",
6: "emitDeclarationOnly": true,
7: "declaration": true,
8: "declarationMap": true,
9: "noEmit": false
10: },
11: "include": ["src"],
12: "exclude": ["src/db/driver.bun.ts"]
13: }
(End of file - total 13 lines)
</content>
<path>/home/byk/Code/opencode-lore/tsconfig.base.json</path>
<type>file</type>
<content>
1: {
2: "compilerOptions": {
3: "target": "ESNext",
4: "module": "ESNext",
5: "moduleResolution": "bundler",
6: "strict": true,
7: "esModuleInterop": true,
8: "skipLibCheck": true,
9: "declaration": true,
10: "types": []
11: }
12: }
(End of file - total 12 lines)
</content>
bun node types
Found 92 matches
/home/byk/Code/opencode-lore/packages/core/test/embedding.test.ts:
Line 12: import { LOCAL_MODEL_PATH_ENV } from "../src/embedding-vendor";
Line 29: } from "../src/embedding";
Line 265: const PROJECT = "/test/embedding/vectorsearch";
Line 281: "INSERT INTO knowledge (id, project_id, category, title, content, confidence, created_at, updated_at, embedding) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
Line 296: "INSERT INTO knowledge (id, project_id, category, title, content, confidence, created_at, updated_at, embedding) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
Line 311: "INSERT INTO knowledge (id, project_id, category, title, content, confidence, created_at, updated_at, embedding) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
Line 345: "INSERT INTO knowledge (id, project_id, category, title, content, confidence, created_at, updated_at, embedding) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
Line 365: test("skips entries without ...