@noyrax/5d-database-plugin 0.1.14-beta.10 → 0.1.14-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,337 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const path = __importStar(require("path"));
38
+ const fs = __importStar(require("fs"));
39
+ const dotenv_1 = require("dotenv");
40
+ const multi_db_manager_1 = require("../core/multi-db-manager");
41
+ const semantic_search_api_1 = require("../api/semantic-search-api");
42
+ const embedding_generator_1 = require("../embedding/embedding-generator");
43
+ const adr_api_1 = require("../api/adr-api");
44
+ const query_rewriter_1 = require("../services/query-rewriter");
45
+ const docs_path_resolver_1 = require("../core/docs-path-resolver");
46
+ const embedding_pipeline_1 = require("../embedding/embedding-pipeline");
47
+ /**
48
+ * Loads .env file from workspace root or parent directories.
49
+ */
50
+ function loadEnvFile(workspaceRoot) {
51
+ let currentPath = workspaceRoot;
52
+ const maxDepth = 5;
53
+ for (let depth = 0; depth < maxDepth; depth++) {
54
+ const envPath = path.join(currentPath, '.env');
55
+ if (fs.existsSync(envPath)) {
56
+ (0, dotenv_1.config)({ path: envPath });
57
+ return;
58
+ }
59
+ const parentPath = path.dirname(currentPath);
60
+ if (parentPath === currentPath) {
61
+ break;
62
+ }
63
+ currentPath = parentPath;
64
+ }
65
+ }
66
+ /**
67
+ * Validates that docs/ directory exists.
68
+ */
69
+ function validateDocsDirectory(workspaceRoot) {
70
+ const docsPath = docs_path_resolver_1.DocsPathResolver.findDocsDirectoryFromPath(workspaceRoot);
71
+ if (!docsPath) {
72
+ console.error('ERROR: docs/ directory not found in workspace or parent directories.');
73
+ console.error('Please run Documentation System Plugin (Noyrax) first to generate docs/ directory.');
74
+ return false;
75
+ }
76
+ return true;
77
+ }
78
+ /**
79
+ * Gets embedding content for an ADR.
80
+ */
81
+ async function getAdrEmbeddingContent(adrNumber, pluginId, dbManager, embeddingPipeline) {
82
+ const adrApi = new adr_api_1.AdrApi(dbManager);
83
+ const adr = await adrApi.getAdrByNumber(adrNumber, pluginId);
84
+ if (!adr) {
85
+ return null;
86
+ }
87
+ // Extract content using the same logic as EmbeddingPipeline
88
+ const adrDb = await dbManager.getDatabase('W');
89
+ const { AdrRepository } = await Promise.resolve().then(() => __importStar(require('../repositories/adr-repository')));
90
+ const adrRepo = new AdrRepository(adrDb);
91
+ const fileMappings = await adrRepo.getAdrFileMappings(adr.id);
92
+ const filesStr = fileMappings.length > 0
93
+ ? `\n\nLinked files: ${fileMappings.map(m => m.file_path).join(', ')}`
94
+ : '';
95
+ return `${adr.title}\n${adr.content_markdown}${filesStr}`;
96
+ }
97
+ /**
98
+ * Command: content - Shows embedding content for an entity.
99
+ */
100
+ async function commandContent(args, workspaceRoot, dbManager, pluginId) {
101
+ if (args.length < 2) {
102
+ console.error('Usage: debug-semantic-search <workspace-root> content <dimension> <entity-id>');
103
+ console.error('Example: debug-semantic-search . content W 0016');
104
+ process.exit(1);
105
+ }
106
+ const dimension = args[0].toUpperCase();
107
+ const entityId = args[1];
108
+ if (dimension !== 'W') {
109
+ console.error('Currently only W (ADRs) dimension is supported for content command');
110
+ process.exit(1);
111
+ }
112
+ const embeddingGenerator = new embedding_generator_1.EmbeddingGenerator();
113
+ const embeddingPipeline = new embedding_pipeline_1.EmbeddingPipeline(dbManager, embeddingGenerator);
114
+ const content = await getAdrEmbeddingContent(entityId, pluginId, dbManager, embeddingPipeline);
115
+ if (!content) {
116
+ console.error(`ADR-${entityId} not found`);
117
+ process.exit(1);
118
+ }
119
+ console.log(JSON.stringify({
120
+ dimension,
121
+ entityId,
122
+ content,
123
+ contentLength: content.length,
124
+ estimatedTokens: Math.ceil(content.length / 4) // Rough estimate
125
+ }, null, 2));
126
+ }
127
+ /**
128
+ * Command: scores - Analyzes semantic search scores.
129
+ */
130
+ async function commandScores(args, workspaceRoot, dbManager, pluginId) {
131
+ if (args.length < 1) {
132
+ console.error('Usage: debug-semantic-search <workspace-root> scores <query> [--dimension W] [--limit 20]');
133
+ process.exit(1);
134
+ }
135
+ let query = args[0];
136
+ let dimension = undefined;
137
+ let limit = 20;
138
+ // Parse optional arguments
139
+ for (let i = 1; i < args.length; i++) {
140
+ if (args[i] === '--dimension' && i + 1 < args.length) {
141
+ const dim = args[i + 1].toUpperCase();
142
+ if (['X', 'Y', 'Z', 'W', 'T'].includes(dim)) {
143
+ dimension = [dim];
144
+ }
145
+ i++;
146
+ }
147
+ else if (args[i] === '--limit' && i + 1 < args.length) {
148
+ limit = parseInt(args[i + 1], 10);
149
+ if (isNaN(limit)) {
150
+ console.error('Error: --limit must be a number');
151
+ process.exit(1);
152
+ }
153
+ i++;
154
+ }
155
+ }
156
+ const embeddingGenerator = new embedding_generator_1.EmbeddingGenerator();
157
+ const semanticSearchApi = new semantic_search_api_1.SemanticSearchApi(dbManager, embeddingGenerator);
158
+ const results = await semanticSearchApi.search(query, pluginId, {
159
+ dimensions: dimension,
160
+ limit
161
+ });
162
+ console.log(JSON.stringify({
163
+ query,
164
+ dimension: dimension || ['X', 'Y', 'Z', 'W', 'T'],
165
+ limit,
166
+ resultCount: results.length,
167
+ results: results.map(r => ({
168
+ dimension: r.dimension,
169
+ externalId: r.externalId,
170
+ score: r.score,
171
+ vectorScore: r.vectorScore,
172
+ importanceScore: r.importanceScore
173
+ }))
174
+ }, null, 2));
175
+ }
176
+ /**
177
+ * Command: test - Tests multiple query variations for an ADR.
178
+ */
179
+ async function commandTest(args, workspaceRoot, dbManager, pluginId) {
180
+ if (args.length < 1) {
181
+ console.error('Usage: debug-semantic-search <workspace-root> test <adr-number>');
182
+ console.error('Example: debug-semantic-search . test 0016');
183
+ process.exit(1);
184
+ }
185
+ const adrNumber = args[0];
186
+ // Generate test queries
187
+ const testQueries = [
188
+ `ADR-${adrNumber}`,
189
+ `ADR ${adrNumber}`,
190
+ adrNumber,
191
+ `Why was ADR-${adrNumber} created?`,
192
+ `What is ADR-${adrNumber} about?`,
193
+ `ADR-${adrNumber} migration`,
194
+ `TypeScript-only migration`,
195
+ `migration TypeScript`
196
+ ];
197
+ const embeddingGenerator = new embedding_generator_1.EmbeddingGenerator();
198
+ const semanticSearchApi = new semantic_search_api_1.SemanticSearchApi(dbManager, embeddingGenerator);
199
+ const results = [];
200
+ for (const query of testQueries) {
201
+ const searchResults = await semanticSearchApi.search(query, pluginId, {
202
+ dimensions: ['W'],
203
+ limit: 20
204
+ });
205
+ const foundIndex = searchResults.findIndex(r => r.externalId === adrNumber || r.externalId === adrNumber.padStart(3, '0') || r.externalId === adrNumber.replace(/^0+/, ''));
206
+ const found = foundIndex >= 0;
207
+ results.push({
208
+ query,
209
+ found,
210
+ rank: found ? foundIndex + 1 : undefined,
211
+ score: found ? searchResults[foundIndex].score : undefined
212
+ });
213
+ }
214
+ console.log(JSON.stringify({
215
+ adrNumber,
216
+ testQueries: results
217
+ }, null, 2));
218
+ }
219
+ /**
220
+ * Command: rewrite - Tests query rewriting.
221
+ */
222
+ async function commandRewrite(args, workspaceRoot, dbManager, pluginId) {
223
+ if (args.length < 1) {
224
+ console.error('Usage: debug-semantic-search <workspace-root> rewrite <query>');
225
+ console.error('Example: debug-semantic-search . rewrite "Why was Python removed?"');
226
+ process.exit(1);
227
+ }
228
+ const query = args.join(' ');
229
+ const queryRewriter = new query_rewriter_1.QueryRewriter();
230
+ const rewritten = queryRewriter.rewriteQuery(query);
231
+ const adrNumbers = queryRewriter.extractAdrNumbers(query);
232
+ console.log(JSON.stringify({
233
+ originalQuery: query,
234
+ rewrittenQuery: rewritten,
235
+ extractedAdrNumbers: adrNumbers,
236
+ changed: query !== rewritten
237
+ }, null, 2));
238
+ }
239
+ /**
240
+ * CLI tool for debugging semantic search and discovery.
241
+ * Usage: debug-semantic-search <workspace-root> <command> <args...>
242
+ *
243
+ * Commands:
244
+ * content <dimension> <entity-id> - Show embedding content for an entity
245
+ * scores <query> [--dimension W] [--limit 20] - Analyze semantic search scores
246
+ * test <adr-number> - Test multiple query variations for an ADR
247
+ * rewrite <query> - Test query rewriting
248
+ */
249
+ async function main() {
250
+ const args = process.argv.slice(2);
251
+ if (args.length < 2) {
252
+ console.error('Usage: debug-semantic-search <workspace-root> <command> <args...>');
253
+ console.error('');
254
+ console.error('Commands:');
255
+ console.error(' content <dimension> <entity-id> - Show embedding content for an entity');
256
+ console.error(' scores <query> [--dimension W] [--limit 20] - Analyze semantic search scores');
257
+ console.error(' test <adr-number> - Test multiple query variations for an ADR');
258
+ console.error(' rewrite <query> - Test query rewriting');
259
+ process.exit(1);
260
+ }
261
+ // Auto-detect workspace root if not provided (first arg is command)
262
+ let workspaceRoot;
263
+ let command;
264
+ let commandArgs;
265
+ // Check if first arg is a command (no path separators) or a workspace root
266
+ if (args.length >= 2 && !args[0].includes('/') && !args[0].includes('\\') && !path.isAbsolute(args[0]) &&
267
+ ['content', 'scores', 'test', 'rewrite'].includes(args[0])) {
268
+ // First arg is command, use current directory as workspace root
269
+ workspaceRoot = process.cwd();
270
+ command = args[0];
271
+ commandArgs = args.slice(1);
272
+ }
273
+ else if (args.length >= 3) {
274
+ // First arg is workspace root, second is command
275
+ workspaceRoot = path.resolve(args[0]);
276
+ command = args[1];
277
+ commandArgs = args.slice(2);
278
+ }
279
+ else {
280
+ console.error('Usage: debug-semantic-search <workspace-root> <command> <args...>');
281
+ process.exit(1);
282
+ }
283
+ // Validate workspace root exists
284
+ if (!fs.existsSync(workspaceRoot)) {
285
+ console.error(`ERROR: Workspace root does not exist: ${workspaceRoot}`);
286
+ process.exit(1);
287
+ }
288
+ // Load .env file
289
+ loadEnvFile(workspaceRoot);
290
+ // Check for OpenAI API key (required for some commands)
291
+ if (!process.env.OPENAI_API_KEY && (command === 'scores' || command === 'test')) {
292
+ console.error('ERROR: OPENAI_API_KEY not found in environment or .env file');
293
+ console.error('Semantic search requires OpenAI API key for embedding generation.');
294
+ process.exit(1);
295
+ }
296
+ // Validate docs/ directory
297
+ if (!validateDocsDirectory(workspaceRoot)) {
298
+ process.exit(1);
299
+ }
300
+ const dbManager = new multi_db_manager_1.MultiDbManager(workspaceRoot);
301
+ const pluginId = dbManager.getPluginId();
302
+ try {
303
+ switch (command) {
304
+ case 'content':
305
+ await commandContent(commandArgs, workspaceRoot, dbManager, pluginId);
306
+ break;
307
+ case 'scores':
308
+ await commandScores(commandArgs, workspaceRoot, dbManager, pluginId);
309
+ break;
310
+ case 'test':
311
+ await commandTest(commandArgs, workspaceRoot, dbManager, pluginId);
312
+ break;
313
+ case 'rewrite':
314
+ await commandRewrite(commandArgs, workspaceRoot, dbManager, pluginId);
315
+ break;
316
+ default:
317
+ console.error(`Unknown command: ${command}`);
318
+ console.error('Use "content", "scores", "test", or "rewrite"');
319
+ process.exit(1);
320
+ }
321
+ }
322
+ catch (error) {
323
+ const errorMsg = error instanceof Error ? error.message : String(error);
324
+ console.error(`Error: ${errorMsg}`);
325
+ if (error instanceof Error && error.stack) {
326
+ console.error(`Stack trace: ${error.stack}`);
327
+ }
328
+ process.exit(1);
329
+ }
330
+ }
331
+ if (require.main === module) {
332
+ main().catch((error) => {
333
+ console.error('Fatal error:', error);
334
+ process.exit(1);
335
+ });
336
+ }
337
+ //# sourceMappingURL=debug-semantic-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-semantic-search.js","sourceRoot":"","sources":["../../src/cli/debug-semantic-search.ts"],"names":[],"mappings":"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"}
@@ -39,9 +39,18 @@ export declare class EmbeddingPipeline {
39
39
  * Computes content hash for change detection.
40
40
  */
41
41
  private computeContentHash;
42
+ /**
43
+ * Estimates token count from content length (Markdown-optimized).
44
+ * Markdown has different token densities:
45
+ * - Code blocks: ~3 chars/token (more tokens per char due to formatting)
46
+ * - Normal text: ~4 chars/token (standard estimate)
47
+ * - Tables: ~2.5 chars/token (many separators increase token count)
48
+ */
49
+ private estimateTokens;
42
50
  /**
43
51
  * Optimizes module documentation for embedding while preserving semantic meaning.
44
52
  * Strategy: Keep structure and important information, remove detailed tables.
53
+ * Aggressively truncates code blocks to signatures only, limits table rows.
45
54
  *
46
55
  * @param content Full markdown content
47
56
  * @param maxTokens Maximum tokens allowed
@@ -51,6 +60,8 @@ export declare class EmbeddingPipeline {
51
60
  /**
52
61
  * Extracts only the structure of a module (header, interface/method names, signatures).
53
62
  * Used for hierarchical embeddings where details are in Y-Dimension (Symbols).
63
+ * Only keeps: Headers, interface/method/class/variable names, first line of code blocks (signatures).
64
+ * Removes: All tables, code block bodies, normal text.
54
65
  *
55
66
  * @param content Full markdown content
56
67
  * @returns Module structure (header + names + signatures, no details)
@@ -1 +1 @@
1
- {"version":3,"file":"embedding-pipeline.d.ts","sourceRoot":"","sources":["../../src/embedding/embedding-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAgB3D;;;GAGG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB;IAW7E;;;OAGG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBrD;;OAEG;IACG,aAAa,CACf,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EACtC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAkJhB;;OAEG;YACW,uBAAuB;IAoBrC;;OAEG;YACW,0BAA0B;IAwExC;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;;;;;OAOG;IACH,OAAO,CAAC,iCAAiC;IAkGzC;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;CA8DjC"}
1
+ {"version":3,"file":"embedding-pipeline.d.ts","sourceRoot":"","sources":["../../src/embedding/embedding-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAgB3D;;;GAGG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,gBAAgB,CAAmB;gBAE/B,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB;IAW7E;;;OAGG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBrD;;OAEG;IACG,aAAa,CACf,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EACtC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAyJhB;;OAEG;YACW,uBAAuB;IAoBrC;;OAEG;YACW,0BAA0B;IA6FxC;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAoBtB;;;;;;;;OAQG;IACH,OAAO,CAAC,iCAAiC;IAkJzC;;;;;;;;OAQG;IACH,OAAO,CAAC,sBAAsB;CAwEjC"}