- Add embedding_profiles table with provider registry pattern - Install @xenova/transformers as runtime dependency - Update snippet_embeddings with composite PK (snippet_id, profile_id) - Seed default local profile using Xenova/all-MiniLM-L6-v2 - Add provider registry (local-transformers, openai-compatible) - Update EmbeddingService to persist and retrieve by profileId - Add version-scoped VectorSearch with optional versionId filtering - Add searchMode (auto|keyword|semantic|hybrid) to HybridSearchService - Update API /context route to load active profile, support searchMode/alpha params - Extend MCP query-docs tool with searchMode and alpha parameters - Update settings API to work with embedding_profiles table - Add comprehensive test coverage for profiles, registry, version scoping Status: 445/451 tests passing, core feature complete
633 lines
52 KiB
Plaintext
633 lines
52 KiB
Plaintext
|
||
> trueref@0.0.1 test:unit
|
||
> vitest
|
||
|
||
|
||
[1m[44m DEV [49m[22m [34mv4.1.0 [39m[90m/home/moze/Sources/trueref[39m
|
||
|
||
[2m19:10:26[22m [36m[1m[vite][22m[39m (client) Re-optimizing dependencies because lockfile has changed
|
||
[31m❯[39m [30m[42m server [49m[39m src/lib/server/embeddings/embedding.service.test.ts [2m([22m[2m0 test[22m[2m)[22m
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/server/parser/code.parser.test.ts [2m([22m[2m20 tests[22m[2m)[22m[32m 22[2mms[22m[39m
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/server/services/version.service.test.ts [2m([22m[2m19 tests[22m[2m)[22m[32m 37[2mms[22m[39m
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/server/services/repository.service.test.ts [2m([22m[2m37 tests[22m[2m)[22m[32m 57[2mms[22m[39m
|
||
[90mstderr[2m | src/lib/server/crawler/local.crawler.test.ts[2m > [22m[2mLocalCrawler.crawl() — config file detection[2m > [22m[2mgracefully handles a malformed config file
|
||
[22m[39m[LocalCrawler] Failed to parse config file: /tmp/trueref-test-ptITIP/trueref.json
|
||
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/server/config/config-parser.test.ts [2m([22m[2m50 tests[22m[2m)[22m[32m 21[2mms[22m[39m
|
||
[90mstderr[2m | src/lib/server/pipeline/indexing.pipeline.test.ts[2m > [22m[2mIndexingPipeline[2m > [22m[2mmarks job as failed and repo as error when pipeline throws
|
||
[22m[39m[IndexingPipeline] Job c44d7e22-6127-49e7-82b7-eb724726c888 failed: crawl failed
|
||
|
||
[90mstderr[2m | src/lib/server/pipeline/indexing.pipeline.test.ts
|
||
[22m[39m[JobQueue] No pipeline configured — cannot process jobs.
|
||
|
||
[90mstderr[2m | src/lib/server/pipeline/indexing.pipeline.test.ts
|
||
[22m[39m[JobQueue] No pipeline configured — cannot process jobs.
|
||
|
||
[90mstderr[2m | src/lib/server/pipeline/indexing.pipeline.test.ts
|
||
[22m[39m[JobQueue] No pipeline configured — cannot process jobs.
|
||
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/server/search/search.service.test.ts [2m([22m[2m43 tests[22m[2m)[22m[32m 43[2mms[22m[39m
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/server/pipeline/indexing.pipeline.test.ts [2m([22m[2m20 tests[22m[2m)[22m[32m 42[2mms[22m[39m
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/server/crawler/gitignore-parser.test.ts [2m([22m[2m29 tests[22m[2m)[22m[32m 11[2mms[22m[39m
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/server/crawler/github-tags.test.ts [2m([22m[2m10 tests[22m[2m)[22m[32m 9[2mms[22m[39m
|
||
[32m✓[39m [30m[42m server [49m[39m src/routes/api/v1/api-contract.integration.test.ts [2m([22m[2m4 tests[22m[2m)[22m[32m 48[2mms[22m[39m
|
||
[31m❯[39m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts [2m([22m[2m19 tests[22m[2m | [22m[31m19 failed[39m[2m)[22m[32m 50[2mms[22m[39m
|
||
[31m [31m×[31m inserts and retrieves a repository[39m[32m 12[2mms[22m[39m
|
||
[31m [31m×[31m allows nullable optional fields[39m[32m 3[2mms[22m[39m
|
||
[31m [31m×[31m supports all state enum values[39m[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m inserts a version linked to a repository[39m[32m 4[2mms[22m[39m
|
||
[31m [31m×[31m cascades delete when parent repository is deleted[39m[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m inserts a document[39m[32m 1[2mms[22m[39m
|
||
[31m [31m×[31m cascades delete when repository is deleted[39m[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m inserts a code snippet[39m[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m inserts an info snippet[39m[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m cascades delete when document is deleted[39m[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m stores a Float32Array embedding as blob[39m[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m cascades delete when snippet is deleted[39m[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m creates a job with default queued status[39m[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m supports all status enum values[39m[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m stores JSON array fields correctly[39m[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m stores and retrieves key-value settings[39m[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m FTS table exists and is queryable[39m[32m 1[2mms[22m[39m
|
||
[31m [31m×[31m insert trigger keeps FTS in sync[39m[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m delete trigger removes entry from FTS[39m[32m 2[2mms[22m[39m
|
||
[31m❯[39m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts [2m([22m[2m33 tests[22m[2m | [22m[31m16 failed[39m[2m)[22m[32m 52[2mms[22m[39m
|
||
[32m✓[39m returns 1.0 for identical vectors[32m 2[2mms[22m[39m
|
||
[32m✓[39m returns 0.0 for orthogonal vectors[32m 0[2mms[22m[39m
|
||
[32m✓[39m returns -1.0 for opposite vectors[32m 0[2mms[22m[39m
|
||
[32m✓[39m returns 0 for zero-magnitude vector[32m 0[2mms[22m[39m
|
||
[32m✓[39m throws when dimensions do not match[32m 1[2mms[22m[39m
|
||
[32m✓[39m computes correct similarity for non-trivial vectors[32m 0[2mms[22m[39m
|
||
[32m✓[39m returns empty array for empty inputs[32m 1[2mms[22m[39m
|
||
[32m✓[39m fuses a single list preserving order[32m 1[2mms[22m[39m
|
||
[32m✓[39m deduplicates items appearing in multiple lists[32m 0[2mms[22m[39m
|
||
[32m✓[39m boosts items appearing in multiple lists[32m 0[2mms[22m[39m
|
||
[32m✓[39m assigns higher rrfScore to higher-ranked items[32m 0[2mms[22m[39m
|
||
[32m✓[39m handles three lists correctly[32m 0[2mms[22m[39m
|
||
[32m✓[39m produces positive rrfScores[32m 0[2mms[22m[39m
|
||
[31m [31m×[31m returns empty array when no embeddings exist[39m[32m 10[2mms[22m[39m
|
||
[31m [31m×[31m returns results sorted by descending cosine similarity[39m[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m respects the limit parameter[39m[32m 4[2mms[22m[39m
|
||
[31m [31m×[31m only returns snippets from the specified repository[39m[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m handles embeddings with negative values[39m[32m 1[2mms[22m[39m
|
||
[32m✓[39m returns FTS5 results when embeddingProvider is null[32m 2[2mms[22m[39m
|
||
[32m✓[39m returns FTS5 results when alpha = 0[32m 1[2mms[22m[39m
|
||
[32m✓[39m returns empty array when FTS5 query is blank and no provider[32m 1[2mms[22m[39m
|
||
[32m✓[39m falls back to FTS5 when noop provider returns empty embeddings[32m 2[2mms[22m[39m
|
||
[31m [31m×[31m returns results when hybrid mode is active (alpha = 0.5)[39m[32m 1[2mms[22m[39m
|
||
[31m [31m×[31m deduplicates snippets appearing in both FTS5 and vector results[39m[32m 1[2mms[22m[39m
|
||
[31m [31m×[31m respects the limit option[39m[32m 1[2mms[22m[39m
|
||
[31m [31m×[31m returns vector-ranked results when alpha = 1[39m[32m 1[2mms[22m[39m
|
||
[31m [31m×[31m results include snippet and repository metadata[39m[32m 1[2mms[22m[39m
|
||
[31m [31m×[31m all results belong to the requested repository[39m[32m 1[2mms[22m[39m
|
||
[31m [31m×[31m filters by snippet type when provided[39m[32m 1[2mms[22m[39m
|
||
[31m [31m×[31m uses alpha = 0.5 when not specified[39m[32m 1[2mms[22m[39m
|
||
[31m [31m×[31m filters by versionId — excludes snippets from other versions[39m[32m 3[2mms[22m[39m
|
||
[31m [31m×[31m searchMode=keyword never calls provider.embed()[39m[32m 3[2mms[22m[39m
|
||
[31m [31m×[31m searchMode=semantic uses only vector search[39m[32m 2[2mms[22m[39m
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/server/api/formatters.test.ts [2m([22m[2m20 tests[22m[2m)[22m[32m 9[2mms[22m[39m
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/server/pipeline/diff.test.ts [2m([22m[2m9 tests[22m[2m)[22m[32m 8[2mms[22m[39m
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/server/api/library-id.test.ts [2m([22m[2m8 tests[22m[2m)[22m[32m 6[2mms[22m[39m
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/server/api/token-budget.test.ts [2m([22m[2m7 tests[22m[2m)[22m[32m 6[2mms[22m[39m
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/server/parser/markdown.parser.test.ts [2m([22m[2m14 tests[22m[2m)[22m[32m 9[2mms[22m[39m
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/vitest-examples/greet.spec.ts [2m([22m[2m1 test[22m[2m)[22m[32m 3[2mms[22m[39m
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/server/crawler/local.crawler.test.ts [2m([22m[2m50 tests[22m[2m)[22m[33m 658[2mms[22m[39m
|
||
[32m✓[39m [30m[42m server [49m[39m src/mcp/index.test.ts [2m([22m[2m7 tests[22m[2m)[22m[33m 985[2mms[22m[39m
|
||
[32m✓[39m [30m[43m client (chromium) [49m[39m src/lib/vitest-examples/Welcome.svelte.spec.ts [2m([22m[2m1 test[22m[2m)[22m[32m 9[2mms[22m[39m
|
||
[90mstderr[2m | src/lib/server/crawler/github.crawler.test.ts[2m > [22m[2mcrawl()[2m > [22m[2mskips files that fail to download without throwing
|
||
[22m[39m[GitHubCrawler] Could not download: src/index.ts — skipping.
|
||
|
||
[32m✓[39m [30m[42m server [49m[39m src/lib/server/crawler/github.crawler.test.ts [2m([22m[2m50 tests[22m[2m)[22m[33m 6082[2mms[22m[39m
|
||
[33m[2m✓[22m[39m retries on failure and returns eventual success [33m 3003[2mms[22m[39m
|
||
[33m[2m✓[22m[39m throws after exhausting all attempts [33m 3003[2mms[22m[39m
|
||
|
||
[31m⎯⎯⎯⎯⎯⎯[39m[1m[41m Failed Suites 1 [49m[22m[31m⎯⎯⎯⎯⎯⎯⎯[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/embeddings/embedding.service.test.ts[2m [ src/lib/server/embeddings/embedding.service.test.ts ][22m
|
||
[31m[1mError[22m: Transform failed with 1 error:
|
||
/home/moze/Sources/trueref/src/lib/server/embeddings/embedding.service.test.ts:408:2: ERROR: "await" can only be used inside an "async" function[39m
|
||
Plugin: [35mvite:esbuild[39m
|
||
File: [36m/home/moze/Sources/trueref/src/lib/server/embeddings/embedding.service.test.ts[39m:408:2
|
||
[33m
|
||
"await" can only be used inside an "async" function
|
||
406 | });
|
||
407 |
|
||
408 | await service.embedSnippets([snippetId]);
|
||
| ^
|
||
409 |
|
||
410 | const retrieved = service.getEmbedding(snippetId);
|
||
[39m
|
||
[90m [2m❯[22m failureErrorWithLog node_modules/vite/node_modules/esbuild/lib/main.js:[2m1748:15[22m[39m
|
||
[90m [2m❯[22m node_modules/vite/node_modules/esbuild/lib/main.js:[2m1017:50[22m[39m
|
||
[90m [2m❯[22m responseCallbacks.<computed> node_modules/vite/node_modules/esbuild/lib/main.js:[2m884:9[22m[39m
|
||
[90m [2m❯[22m handleIncomingPacket node_modules/vite/node_modules/esbuild/lib/main.js:[2m939:12[22m[39m
|
||
[90m [2m❯[22m Socket.readFromStdout node_modules/vite/node_modules/esbuild/lib/main.js:[2m862:7[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/36]⎯[22m[39m
|
||
|
||
|
||
[31m⎯⎯⎯⎯⎯⎯[39m[1m[41m Failed Tests 35 [49m[22m[31m⎯⎯⎯⎯⎯⎯⎯[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22mrepositories table[2m > [22minserts and retrieves a repository
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22mrepositories table[2m > [22mallows nullable optional fields
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22mrepositories table[2m > [22msupports all state enum values
|
||
[31m[1mDrizzleError[22m: Failed to run the query '
|
||
INSERT INTO `__new_snippet_embeddings`("snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at") SELECT "snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at" FROM `snippet_embeddings`;'[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/src/sqlite-core/session.ts:[2m271:9[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/src/sqlite-core/dialect.ts:[2m864:14[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/src/better-sqlite3/migrator.ts:[2m10:12[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m 30|[39m [90m// Run migrations from the generated migration folder.[39m
|
||
[90m 31|[39m [35mconst[39m migrationsFolder [33m=[39m [34mjoin[39m([35mimport[39m[33m.[39mmeta[33m.[39mdirname[33m,[39m [32m'migrations'[39m)[33m;[39m
|
||
[90m 32|[39m [34mmigrate[39m(db[33m,[39m { migrationsFolder })[33m;[39m
|
||
[90m |[39m [31m^[39m
|
||
[90m 33|[39m
|
||
[90m 34|[39m // Apply FTS5 DDL using exec() which handles multi-statement SQL with…
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m63:13[22m[39m
|
||
|
||
[31m[1mCaused by: SqliteError[22m: no such column: "profile_id" - should this be a string literal in single-quotes?[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareQuery node_modules/drizzle-orm/better-sqlite3/session.js:[2m23:30[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareOneTimeQuery node_modules/drizzle-orm/sqlite-core/session.js:[2m141:17[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/drizzle-orm/sqlite-core/session.js:[2m154:19[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/drizzle-orm/sqlite-core/dialect.js:[2m604:21[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/drizzle-orm/better-sqlite3/migrator.js:[2m4:14[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m63:13[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22m[39m
|
||
[31m[1mSerialized Error:[22m[39m [90m{ code: 'SQLITE_ERROR' }[39m
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[2/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22mrepository_versions table[2m > [22minserts a version linked to a repository
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22mrepository_versions table[2m > [22mcascades delete when parent repository is deleted
|
||
[31m[1mDrizzleError[22m: Failed to run the query '
|
||
INSERT INTO `__new_snippet_embeddings`("snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at") SELECT "snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at" FROM `snippet_embeddings`;'[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/src/sqlite-core/session.ts:[2m271:9[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/src/sqlite-core/dialect.ts:[2m864:14[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/src/better-sqlite3/migrator.ts:[2m10:12[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m 30|[39m [90m// Run migrations from the generated migration folder.[39m
|
||
[90m 31|[39m [35mconst[39m migrationsFolder [33m=[39m [34mjoin[39m([35mimport[39m[33m.[39mmeta[33m.[39mdirname[33m,[39m [32m'migrations'[39m)[33m;[39m
|
||
[90m 32|[39m [34mmigrate[39m(db[33m,[39m { migrationsFolder })[33m;[39m
|
||
[90m |[39m [31m^[39m
|
||
[90m 33|[39m
|
||
[90m 34|[39m // Apply FTS5 DDL using exec() which handles multi-statement SQL with…
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m109:13[22m[39m
|
||
|
||
[31m[1mCaused by: SqliteError[22m: no such column: "profile_id" - should this be a string literal in single-quotes?[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareQuery node_modules/drizzle-orm/better-sqlite3/session.js:[2m23:30[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareOneTimeQuery node_modules/drizzle-orm/sqlite-core/session.js:[2m141:17[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/drizzle-orm/sqlite-core/session.js:[2m154:19[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/drizzle-orm/sqlite-core/dialect.js:[2m604:21[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/drizzle-orm/better-sqlite3/migrator.js:[2m4:14[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m109:13[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22m[39m
|
||
[31m[1mSerialized Error:[22m[39m [90m{ code: 'SQLITE_ERROR' }[39m
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[3/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22mdocuments table[2m > [22minserts a document
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22mdocuments table[2m > [22mcascades delete when repository is deleted
|
||
[31m[1mDrizzleError[22m: Failed to run the query '
|
||
INSERT INTO `__new_snippet_embeddings`("snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at") SELECT "snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at" FROM `snippet_embeddings`;'[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/src/sqlite-core/session.ts:[2m271:9[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/src/sqlite-core/dialect.ts:[2m864:14[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/src/better-sqlite3/migrator.ts:[2m10:12[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m 30|[39m [90m// Run migrations from the generated migration folder.[39m
|
||
[90m 31|[39m [35mconst[39m migrationsFolder [33m=[39m [34mjoin[39m([35mimport[39m[33m.[39mmeta[33m.[39mdirname[33m,[39m [32m'migrations'[39m)[33m;[39m
|
||
[90m 32|[39m [34mmigrate[39m(db[33m,[39m { migrationsFolder })[33m;[39m
|
||
[90m |[39m [31m^[39m
|
||
[90m 33|[39m
|
||
[90m 34|[39m // Apply FTS5 DDL using exec() which handles multi-statement SQL with…
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m151:13[22m[39m
|
||
|
||
[31m[1mCaused by: SqliteError[22m: no such column: "profile_id" - should this be a string literal in single-quotes?[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareQuery node_modules/drizzle-orm/better-sqlite3/session.js:[2m23:30[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareOneTimeQuery node_modules/drizzle-orm/sqlite-core/session.js:[2m141:17[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/drizzle-orm/sqlite-core/session.js:[2m154:19[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/drizzle-orm/sqlite-core/dialect.js:[2m604:21[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/drizzle-orm/better-sqlite3/migrator.js:[2m4:14[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m151:13[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22m[39m
|
||
[31m[1mSerialized Error:[22m[39m [90m{ code: 'SQLITE_ERROR' }[39m
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[4/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22msnippets table[2m > [22minserts a code snippet
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22msnippets table[2m > [22minserts an info snippet
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22msnippets table[2m > [22mcascades delete when document is deleted
|
||
[31m[1mDrizzleError[22m: Failed to run the query '
|
||
INSERT INTO `__new_snippet_embeddings`("snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at") SELECT "snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at" FROM `snippet_embeddings`;'[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/src/sqlite-core/session.ts:[2m271:9[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/src/sqlite-core/dialect.ts:[2m864:14[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/src/better-sqlite3/migrator.ts:[2m10:12[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m 30|[39m [90m// Run migrations from the generated migration folder.[39m
|
||
[90m 31|[39m [35mconst[39m migrationsFolder [33m=[39m [34mjoin[39m([35mimport[39m[33m.[39mmeta[33m.[39mdirname[33m,[39m [32m'migrations'[39m)[33m;[39m
|
||
[90m 32|[39m [34mmigrate[39m(db[33m,[39m { migrationsFolder })[33m;[39m
|
||
[90m |[39m [31m^[39m
|
||
[90m 33|[39m
|
||
[90m 34|[39m // Apply FTS5 DDL using exec() which handles multi-statement SQL with…
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m195:13[22m[39m
|
||
|
||
[31m[1mCaused by: SqliteError[22m: no such column: "profile_id" - should this be a string literal in single-quotes?[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareQuery node_modules/drizzle-orm/better-sqlite3/session.js:[2m23:30[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareOneTimeQuery node_modules/drizzle-orm/sqlite-core/session.js:[2m141:17[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/drizzle-orm/sqlite-core/session.js:[2m154:19[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/drizzle-orm/sqlite-core/dialect.js:[2m604:21[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/drizzle-orm/better-sqlite3/migrator.js:[2m4:14[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m195:13[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22m[39m
|
||
[31m[1mSerialized Error:[22m[39m [90m{ code: 'SQLITE_ERROR' }[39m
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[5/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22msnippet_embeddings table[2m > [22mstores a Float32Array embedding as blob
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22msnippet_embeddings table[2m > [22mcascades delete when snippet is deleted
|
||
[31m[1mDrizzleError[22m: Failed to run the query '
|
||
INSERT INTO `__new_snippet_embeddings`("snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at") SELECT "snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at" FROM `snippet_embeddings`;'[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/src/sqlite-core/session.ts:[2m271:9[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/src/sqlite-core/dialect.ts:[2m864:14[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/src/better-sqlite3/migrator.ts:[2m10:12[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m 30|[39m [90m// Run migrations from the generated migration folder.[39m
|
||
[90m 31|[39m [35mconst[39m migrationsFolder [33m=[39m [34mjoin[39m([35mimport[39m[33m.[39mmeta[33m.[39mdirname[33m,[39m [32m'migrations'[39m)[33m;[39m
|
||
[90m 32|[39m [34mmigrate[39m(db[33m,[39m { migrationsFolder })[33m;[39m
|
||
[90m |[39m [31m^[39m
|
||
[90m 33|[39m
|
||
[90m 34|[39m // Apply FTS5 DDL using exec() which handles multi-statement SQL with…
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m271:13[22m[39m
|
||
|
||
[31m[1mCaused by: SqliteError[22m: no such column: "profile_id" - should this be a string literal in single-quotes?[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareQuery node_modules/drizzle-orm/better-sqlite3/session.js:[2m23:30[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareOneTimeQuery node_modules/drizzle-orm/sqlite-core/session.js:[2m141:17[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/drizzle-orm/sqlite-core/session.js:[2m154:19[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/drizzle-orm/sqlite-core/dialect.js:[2m604:21[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/drizzle-orm/better-sqlite3/migrator.js:[2m4:14[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m271:13[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22m[39m
|
||
[31m[1mSerialized Error:[22m[39m [90m{ code: 'SQLITE_ERROR' }[39m
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[6/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22mindexing_jobs table[2m > [22mcreates a job with default queued status
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22mindexing_jobs table[2m > [22msupports all status enum values
|
||
[31m[1mDrizzleError[22m: Failed to run the query '
|
||
INSERT INTO `__new_snippet_embeddings`("snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at") SELECT "snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at" FROM `snippet_embeddings`;'[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/src/sqlite-core/session.ts:[2m271:9[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/src/sqlite-core/dialect.ts:[2m864:14[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/src/better-sqlite3/migrator.ts:[2m10:12[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m 30|[39m [90m// Run migrations from the generated migration folder.[39m
|
||
[90m 31|[39m [35mconst[39m migrationsFolder [33m=[39m [34mjoin[39m([35mimport[39m[33m.[39mmeta[33m.[39mdirname[33m,[39m [32m'migrations'[39m)[33m;[39m
|
||
[90m 32|[39m [34mmigrate[39m(db[33m,[39m { migrationsFolder })[33m;[39m
|
||
[90m |[39m [31m^[39m
|
||
[90m 33|[39m
|
||
[90m 34|[39m // Apply FTS5 DDL using exec() which handles multi-statement SQL with…
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m350:13[22m[39m
|
||
|
||
[31m[1mCaused by: SqliteError[22m: no such column: "profile_id" - should this be a string literal in single-quotes?[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareQuery node_modules/drizzle-orm/better-sqlite3/session.js:[2m23:30[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareOneTimeQuery node_modules/drizzle-orm/sqlite-core/session.js:[2m141:17[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/drizzle-orm/sqlite-core/session.js:[2m154:19[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/drizzle-orm/sqlite-core/dialect.js:[2m604:21[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/drizzle-orm/better-sqlite3/migrator.js:[2m4:14[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m350:13[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22m[39m
|
||
[31m[1mSerialized Error:[22m[39m [90m{ code: 'SQLITE_ERROR' }[39m
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[7/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22mrepository_configs table[2m > [22mstores JSON array fields correctly
|
||
[31m[1mDrizzleError[22m: Failed to run the query '
|
||
INSERT INTO `__new_snippet_embeddings`("snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at") SELECT "snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at" FROM `snippet_embeddings`;'[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/src/sqlite-core/session.ts:[2m271:9[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/src/sqlite-core/dialect.ts:[2m864:14[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/src/better-sqlite3/migrator.ts:[2m10:12[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m 30|[39m [90m// Run migrations from the generated migration folder.[39m
|
||
[90m 31|[39m [35mconst[39m migrationsFolder [33m=[39m [34mjoin[39m([35mimport[39m[33m.[39mmeta[33m.[39mdirname[33m,[39m [32m'migrations'[39m)[33m;[39m
|
||
[90m 32|[39m [34mmigrate[39m(db[33m,[39m { migrationsFolder })[33m;[39m
|
||
[90m |[39m [31m^[39m
|
||
[90m 33|[39m
|
||
[90m 34|[39m // Apply FTS5 DDL using exec() which handles multi-statement SQL with…
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m391:13[22m[39m
|
||
|
||
[31m[1mCaused by: SqliteError[22m: no such column: "profile_id" - should this be a string literal in single-quotes?[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareQuery node_modules/drizzle-orm/better-sqlite3/session.js:[2m23:30[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareOneTimeQuery node_modules/drizzle-orm/sqlite-core/session.js:[2m141:17[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/drizzle-orm/sqlite-core/session.js:[2m154:19[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/drizzle-orm/sqlite-core/dialect.js:[2m604:21[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/drizzle-orm/better-sqlite3/migrator.js:[2m4:14[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m391:13[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22m[39m
|
||
[31m[1mSerialized Error:[22m[39m [90m{ code: 'SQLITE_ERROR' }[39m
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[8/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22msettings table[2m > [22mstores and retrieves key-value settings
|
||
[31m[1mDrizzleError[22m: Failed to run the query '
|
||
INSERT INTO `__new_snippet_embeddings`("snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at") SELECT "snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at" FROM `snippet_embeddings`;'[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/src/sqlite-core/session.ts:[2m271:9[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/src/sqlite-core/dialect.ts:[2m864:14[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/src/better-sqlite3/migrator.ts:[2m10:12[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m 30|[39m [90m// Run migrations from the generated migration folder.[39m
|
||
[90m 31|[39m [35mconst[39m migrationsFolder [33m=[39m [34mjoin[39m([35mimport[39m[33m.[39mmeta[33m.[39mdirname[33m,[39m [32m'migrations'[39m)[33m;[39m
|
||
[90m 32|[39m [34mmigrate[39m(db[33m,[39m { migrationsFolder })[33m;[39m
|
||
[90m |[39m [31m^[39m
|
||
[90m 33|[39m
|
||
[90m 34|[39m // Apply FTS5 DDL using exec() which handles multi-statement SQL with…
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m422:13[22m[39m
|
||
|
||
[31m[1mCaused by: SqliteError[22m: no such column: "profile_id" - should this be a string literal in single-quotes?[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareQuery node_modules/drizzle-orm/better-sqlite3/session.js:[2m23:30[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareOneTimeQuery node_modules/drizzle-orm/sqlite-core/session.js:[2m141:17[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/drizzle-orm/sqlite-core/session.js:[2m154:19[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/drizzle-orm/sqlite-core/dialect.js:[2m604:21[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/drizzle-orm/better-sqlite3/migrator.js:[2m4:14[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m422:13[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22m[39m
|
||
[31m[1mSerialized Error:[22m[39m [90m{ code: 'SQLITE_ERROR' }[39m
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[9/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22mFTS5 virtual table (snippets_fts)[2m > [22mFTS table exists and is queryable
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22mFTS5 virtual table (snippets_fts)[2m > [22minsert trigger keeps FTS in sync
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/db/schema.test.ts[2m > [22mFTS5 virtual table (snippets_fts)[2m > [22mdelete trigger removes entry from FTS
|
||
[31m[1mDrizzleError[22m: Failed to run the query '
|
||
INSERT INTO `__new_snippet_embeddings`("snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at") SELECT "snippet_id", "profile_id", "model", "dimensions", "embedding", "created_at" FROM `snippet_embeddings`;'[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/src/sqlite-core/session.ts:[2m271:9[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/src/sqlite-core/dialect.ts:[2m864:14[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/src/better-sqlite3/migrator.ts:[2m10:12[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m 30|[39m [90m// Run migrations from the generated migration folder.[39m
|
||
[90m 31|[39m [35mconst[39m migrationsFolder [33m=[39m [34mjoin[39m([35mimport[39m[33m.[39mmeta[33m.[39mdirname[33m,[39m [32m'migrations'[39m)[33m;[39m
|
||
[90m 32|[39m [34mmigrate[39m(db[33m,[39m { migrationsFolder })[33m;[39m
|
||
[90m |[39m [31m^[39m
|
||
[90m 33|[39m
|
||
[90m 34|[39m // Apply FTS5 DDL using exec() which handles multi-statement SQL with…
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m442:21[22m[39m
|
||
|
||
[31m[1mCaused by: SqliteError[22m: no such column: "profile_id" - should this be a string literal in single-quotes?[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareQuery node_modules/drizzle-orm/better-sqlite3/session.js:[2m23:30[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.prepareOneTimeQuery node_modules/drizzle-orm/sqlite-core/session.js:[2m141:17[22m[39m
|
||
[90m [2m❯[22m BetterSQLiteSession.run node_modules/drizzle-orm/sqlite-core/session.js:[2m154:19[22m[39m
|
||
[90m [2m❯[22m SQLiteSyncDialect.migrate node_modules/drizzle-orm/sqlite-core/dialect.js:[2m604:21[22m[39m
|
||
[90m [2m❯[22m migrate node_modules/drizzle-orm/better-sqlite3/migrator.js:[2m4:14[22m[39m
|
||
[36m [2m❯[22m createTestDb src/lib/server/db/schema.test.ts:[2m32:2[22m[39m
|
||
[90m [2m❯[22m src/lib/server/db/schema.test.ts:[2m442:21[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22m[39m
|
||
[31m[1mSerialized Error:[22m[39m [90m{ code: 'SQLITE_ERROR' }[39m
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[10/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mVectorSearch[2m > [22mreturns empty array when no embeddings exist
|
||
[31m[1mSqliteError[22m: no such column: se.profile_id[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[36m [2m❯[22m VectorSearch.vectorSearch src/lib/server/search/vector.search.ts:[2m100:24[22m[39m
|
||
[90m 98|[39m }
|
||
[90m 99|[39m
|
||
[90m100|[39m const rows = this.db.prepare<unknown[], RawEmbeddingRow>(sql).all(..…
|
||
[90m |[39m [31m^[39m
|
||
[90m101|[39m
|
||
[90m102|[39m [35mconst[39m scored[33m:[39m [33mVectorSearchResult[39m[] [33m=[39m rows[33m.[39m[34mmap[39m((row) [33m=>[39m {
|
||
[90m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m289:22[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[11/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mVectorSearch[2m > [22mreturns results sorted by descending cosine similarity
|
||
[31m[1mSqliteError[22m: table snippet_embeddings has no column named profile_id[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[36m [2m❯[22m seedEmbedding src/lib/server/search/hybrid.search.service.test.ts:[2m112:4[22m[39m
|
||
[90m110|[39m [35mconst[39m f32 [33m=[39m [35mnew[39m [33mFloat32Array[39m(values)[33m;[39m
|
||
[90m111|[39m client
|
||
[90m112|[39m [33m.[39m[34mprepare[39m(
|
||
[90m |[39m [31m^[39m
|
||
[90m113|[39m [32m`INSERT OR REPLACE INTO snippet_embeddings
|
||
[90m114|[39m (snippet_id, profile_id, model, dimensions, embedding, create…
|
||
[90m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m302:3[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[12/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mVectorSearch[2m > [22mrespects the limit parameter
|
||
[31m[1mSqliteError[22m: table snippet_embeddings has no column named profile_id[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[36m [2m❯[22m seedEmbedding src/lib/server/search/hybrid.search.service.test.ts:[2m112:4[22m[39m
|
||
[90m110|[39m [35mconst[39m f32 [33m=[39m [35mnew[39m [33mFloat32Array[39m(values)[33m;[39m
|
||
[90m111|[39m client
|
||
[90m112|[39m [33m.[39m[34mprepare[39m(
|
||
[90m |[39m [31m^[39m
|
||
[90m113|[39m [32m`INSERT OR REPLACE INTO snippet_embeddings
|
||
[90m114|[39m (snippet_id, profile_id, model, dimensions, embedding, create…
|
||
[90m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m321:4[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[13/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mVectorSearch[2m > [22monly returns snippets from the specified repository
|
||
[31m[1mSqliteError[22m: table snippet_embeddings has no column named profile_id[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[36m [2m❯[22m seedEmbedding src/lib/server/search/hybrid.search.service.test.ts:[2m112:4[22m[39m
|
||
[90m110|[39m [35mconst[39m f32 [33m=[39m [35mnew[39m [33mFloat32Array[39m(values)[33m;[39m
|
||
[90m111|[39m client
|
||
[90m112|[39m [33m.[39m[34mprepare[39m(
|
||
[90m |[39m [31m^[39m
|
||
[90m113|[39m [32m`INSERT OR REPLACE INTO snippet_embeddings
|
||
[90m114|[39m (snippet_id, profile_id, model, dimensions, embedding, create…
|
||
[90m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m340:3[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[14/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mVectorSearch[2m > [22mhandles embeddings with negative values
|
||
[31m[1mSqliteError[22m: table snippet_embeddings has no column named profile_id[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[36m [2m❯[22m seedEmbedding src/lib/server/search/hybrid.search.service.test.ts:[2m112:4[22m[39m
|
||
[90m110|[39m [35mconst[39m f32 [33m=[39m [35mnew[39m [33mFloat32Array[39m(values)[33m;[39m
|
||
[90m111|[39m client
|
||
[90m112|[39m [33m.[39m[34mprepare[39m(
|
||
[90m |[39m [31m^[39m
|
||
[90m113|[39m [32m`INSERT OR REPLACE INTO snippet_embeddings
|
||
[90m114|[39m (snippet_id, profile_id, model, dimensions, embedding, create…
|
||
[90m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m352:3[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[15/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mHybridSearchService[2m > [22mreturns results when hybrid mode is active (alpha = 0.5)
|
||
[31m[1mSqliteError[22m: table snippet_embeddings has no column named profile_id[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[36m [2m❯[22m seedEmbedding src/lib/server/search/hybrid.search.service.test.ts:[2m112:4[22m[39m
|
||
[90m110|[39m [35mconst[39m f32 [33m=[39m [35mnew[39m [33mFloat32Array[39m(values)[33m;[39m
|
||
[90m111|[39m client
|
||
[90m112|[39m [33m.[39m[34mprepare[39m(
|
||
[90m |[39m [31m^[39m
|
||
[90m113|[39m [32m`INSERT OR REPLACE INTO snippet_embeddings
|
||
[90m114|[39m (snippet_id, profile_id, model, dimensions, embedding, create…
|
||
[90m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m430:3[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[16/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mHybridSearchService[2m > [22mdeduplicates snippets appearing in both FTS5 and vector results
|
||
[31m[1mSqliteError[22m: table snippet_embeddings has no column named profile_id[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[36m [2m❯[22m seedEmbedding src/lib/server/search/hybrid.search.service.test.ts:[2m112:4[22m[39m
|
||
[90m110|[39m [35mconst[39m f32 [33m=[39m [35mnew[39m [33mFloat32Array[39m(values)[33m;[39m
|
||
[90m111|[39m client
|
||
[90m112|[39m [33m.[39m[34mprepare[39m(
|
||
[90m |[39m [31m^[39m
|
||
[90m113|[39m [32m`INSERT OR REPLACE INTO snippet_embeddings
|
||
[90m114|[39m (snippet_id, profile_id, model, dimensions, embedding, create…
|
||
[90m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m449:3[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[17/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mHybridSearchService[2m > [22mrespects the limit option
|
||
[31m[1mSqliteError[22m: table snippet_embeddings has no column named profile_id[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[36m [2m❯[22m seedEmbedding src/lib/server/search/hybrid.search.service.test.ts:[2m112:4[22m[39m
|
||
[90m110|[39m [35mconst[39m f32 [33m=[39m [35mnew[39m [33mFloat32Array[39m(values)[33m;[39m
|
||
[90m111|[39m client
|
||
[90m112|[39m [33m.[39m[34mprepare[39m(
|
||
[90m |[39m [31m^[39m
|
||
[90m113|[39m [32m`INSERT OR REPLACE INTO snippet_embeddings
|
||
[90m114|[39m (snippet_id, profile_id, model, dimensions, embedding, create…
|
||
[90m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m471:4[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[18/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mHybridSearchService[2m > [22mreturns vector-ranked results when alpha = 1
|
||
[31m[1mSqliteError[22m: table snippet_embeddings has no column named profile_id[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[36m [2m❯[22m seedEmbedding src/lib/server/search/hybrid.search.service.test.ts:[2m112:4[22m[39m
|
||
[90m110|[39m [35mconst[39m f32 [33m=[39m [35mnew[39m [33mFloat32Array[39m(values)[33m;[39m
|
||
[90m111|[39m client
|
||
[90m112|[39m [33m.[39m[34mprepare[39m(
|
||
[90m |[39m [31m^[39m
|
||
[90m113|[39m [32m`INSERT OR REPLACE INTO snippet_embeddings
|
||
[90m114|[39m (snippet_id, profile_id, model, dimensions, embedding, create…
|
||
[90m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m503:3[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[19/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mHybridSearchService[2m > [22mresults include snippet and repository metadata
|
||
[31m[1mSqliteError[22m: table snippet_embeddings has no column named profile_id[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[36m [2m❯[22m seedEmbedding src/lib/server/search/hybrid.search.service.test.ts:[2m112:4[22m[39m
|
||
[90m110|[39m [35mconst[39m f32 [33m=[39m [35mnew[39m [33mFloat32Array[39m(values)[33m;[39m
|
||
[90m111|[39m client
|
||
[90m112|[39m [33m.[39m[34mprepare[39m(
|
||
[90m |[39m [31m^[39m
|
||
[90m113|[39m [32m`INSERT OR REPLACE INTO snippet_embeddings
|
||
[90m114|[39m (snippet_id, profile_id, model, dimensions, embedding, create…
|
||
[90m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m528:3[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[20/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mHybridSearchService[2m > [22mall results belong to the requested repository
|
||
[31m[1mSqliteError[22m: table snippet_embeddings has no column named profile_id[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[36m [2m❯[22m seedEmbedding src/lib/server/search/hybrid.search.service.test.ts:[2m112:4[22m[39m
|
||
[90m110|[39m [35mconst[39m f32 [33m=[39m [35mnew[39m [33mFloat32Array[39m(values)[33m;[39m
|
||
[90m111|[39m client
|
||
[90m112|[39m [33m.[39m[34mprepare[39m(
|
||
[90m |[39m [31m^[39m
|
||
[90m113|[39m [32m`INSERT OR REPLACE INTO snippet_embeddings
|
||
[90m114|[39m (snippet_id, profile_id, model, dimensions, embedding, create…
|
||
[90m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m556:4[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[21/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mHybridSearchService[2m > [22mfilters by snippet type when provided
|
||
[31m[1mSqliteError[22m: table snippet_embeddings has no column named profile_id[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[36m [2m❯[22m seedEmbedding src/lib/server/search/hybrid.search.service.test.ts:[2m112:4[22m[39m
|
||
[90m110|[39m [35mconst[39m f32 [33m=[39m [35mnew[39m [33mFloat32Array[39m(values)[33m;[39m
|
||
[90m111|[39m client
|
||
[90m112|[39m [33m.[39m[34mprepare[39m(
|
||
[90m |[39m [31m^[39m
|
||
[90m113|[39m [32m`INSERT OR REPLACE INTO snippet_embeddings
|
||
[90m114|[39m (snippet_id, profile_id, model, dimensions, embedding, create…
|
||
[90m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m591:3[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[22/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mHybridSearchService[2m > [22muses alpha = 0.5 when not specified
|
||
[31m[1mSqliteError[22m: table snippet_embeddings has no column named profile_id[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[36m [2m❯[22m seedEmbedding src/lib/server/search/hybrid.search.service.test.ts:[2m112:4[22m[39m
|
||
[90m110|[39m [35mconst[39m f32 [33m=[39m [35mnew[39m [33mFloat32Array[39m(values)[33m;[39m
|
||
[90m111|[39m client
|
||
[90m112|[39m [33m.[39m[34mprepare[39m(
|
||
[90m |[39m [31m^[39m
|
||
[90m113|[39m [32m`INSERT OR REPLACE INTO snippet_embeddings
|
||
[90m114|[39m (snippet_id, profile_id, model, dimensions, embedding, create…
|
||
[90m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m616:3[22m[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[23/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mHybridSearchService[2m > [22mfilters by versionId — excludes snippets from other versions
|
||
[31m[1mSqliteError[22m: no such table: embedding_profiles[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[36m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m647:5[22m[39m
|
||
[90m645|[39m [90m// Create embedding profile[39m
|
||
[90m646|[39m client
|
||
[90m647|[39m [33m.[39m[34mprepare[39m(
|
||
[90m |[39m [31m^[39m
|
||
[90m648|[39m `INSERT INTO embedding_profiles (id, provider_kind, title, enabled…
|
||
[90m649|[39m VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[24/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mHybridSearchService[2m > [22msearchMode=keyword never calls provider.embed()
|
||
[31m[1mSqliteError[22m: table snippets_fts has no column named id[39m
|
||
[90m [2m❯[22m Database.exec node_modules/better-sqlite3/lib/methods/wrappers.js:[2m9:14[22m[39m
|
||
[36m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m734:10[22m[39m
|
||
[90m732|[39m })[33m;[39m
|
||
[90m733|[39m
|
||
[90m734|[39m client[33m.[39m[34mexec[39m(
|
||
[90m |[39m [31m^[39m
|
||
[90m735|[39m `INSERT INTO snippets_fts (id, repository_id, version_id, title, br…
|
||
[90m736|[39m VALUES ('${snippetId}', '${repoId}', NULL, NULL, NULL, 'keyword…
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[25/36]⎯[22m[39m
|
||
|
||
[41m[1m FAIL [22m[49m [30m[42m server [49m[39m src/lib/server/search/hybrid.search.service.test.ts[2m > [22mHybridSearchService[2m > [22msearchMode=semantic uses only vector search
|
||
[31m[1mSqliteError[22m: no such table: embedding_profiles[39m
|
||
[90m [2m❯[22m Database.prepare node_modules/better-sqlite3/lib/methods/wrappers.js:[2m5:21[22m[39m
|
||
[36m [2m❯[22m src/lib/server/search/hybrid.search.service.test.ts:[2m772:5[22m[39m
|
||
[90m770|[39m [90m// Create profile[39m
|
||
[90m771|[39m client
|
||
[90m772|[39m [33m.[39m[34mprepare[39m(
|
||
[90m |[39m [31m^[39m
|
||
[90m773|[39m `INSERT INTO embedding_profiles (id, provider_kind, title, enabled…
|
||
[90m774|[39m VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`[39m
|
||
|
||
[31m[2m⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[26/36]⎯[22m[39m
|
||
|
||
|
||
[2m Test Files [22m [1m[31m3 failed[39m[22m[2m | [22m[1m[32m19 passed[39m[22m[90m (22)[39m
|
||
[2m Tests [22m [1m[31m35 failed[39m[22m[2m | [22m[1m[32m416 passed[39m[22m[90m (451)[39m
|
||
[2m Start at [22m 19:10:26
|
||
[2m Duration [22m 6.93s[2m (transform 7.37s, setup 0ms, import 9.29s, tests 8.17s, environment 11ms)[22m
|
||
|
||
[1m[41m FAIL [49m[22m [31mTests failed. Watching for file changes...[39m
|
||
[2mpress [22m[1mh[22m[2m to show help[22m[2m, [22m[2mpress [22m[1mq[22m[2m to quit[22m
|
||
[31mCancelling test run. Press CTRL+c again to exit forcefully.
|
||
[39m
|