@liendev/core 0.21.0 → 0.23.0

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.
@@ -1,3 +1,11 @@
1
+ /**
2
+ * Error thrown when config file exists but has invalid syntax or structure.
3
+ * This is separate from "file not found" which is expected behavior.
4
+ */
5
+ export declare class ConfigValidationError extends Error {
6
+ readonly configPath: string;
7
+ constructor(message: string, configPath: string);
8
+ }
1
9
  /**
2
10
  * Global configuration for Lien.
3
11
  * Only contains what truly needs configuration: storage backend choice.
@@ -1 +1 @@
1
- {"version":3,"file":"global-config.d.ts","sourceRoot":"","sources":["../../src/config/global-config.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,MAAM,CAAC,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;KAEjB,CAAC;CACH;AAED;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CA2C9D;AA0ED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsBjF"}
1
+ {"version":3,"file":"global-config.d.ts","sourceRoot":"","sources":["../../src/config/global-config.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,qBAAa,qBAAsB,SAAQ,KAAK;aACD,UAAU,EAAE,MAAM;gBAAnD,OAAO,EAAE,MAAM,EAAkB,UAAU,EAAE,MAAM;CAIhE;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;IAC/B,MAAM,CAAC,EAAE;QACP,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC;KAEjB,CAAC;CACH;AAoGD;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,YAAY,CAAC,CAuB9D;AA0ED;;;;;;;;;;;;GAYG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAsBjF"}
@@ -4,6 +4,89 @@ import os from 'os';
4
4
  import { exec } from 'child_process';
5
5
  import { promisify } from 'util';
6
6
  const execAsync = promisify(exec);
7
+ /**
8
+ * Error thrown when config file exists but has invalid syntax or structure.
9
+ * This is separate from "file not found" which is expected behavior.
10
+ */
11
+ export class ConfigValidationError extends Error {
12
+ configPath;
13
+ constructor(message, configPath) {
14
+ super(message);
15
+ this.configPath = configPath;
16
+ this.name = 'ConfigValidationError';
17
+ }
18
+ }
19
+ /**
20
+ * Load configuration from environment variables if present.
21
+ */
22
+ function loadConfigFromEnv() {
23
+ const backendEnv = process.env.LIEN_BACKEND;
24
+ if (!backendEnv) {
25
+ return null;
26
+ }
27
+ // Validate backend value
28
+ const validBackends = ['lancedb', 'qdrant'];
29
+ if (!validBackends.includes(backendEnv)) {
30
+ throw new ConfigValidationError(`Invalid LIEN_BACKEND environment variable: "${backendEnv}"\n` +
31
+ `Valid values: 'lancedb' or 'qdrant'`, '<environment>');
32
+ }
33
+ const backend = backendEnv;
34
+ if (backend === 'qdrant') {
35
+ const url = process.env.LIEN_QDRANT_URL;
36
+ if (!url) {
37
+ // Fail fast with clear error instead of returning incomplete config
38
+ throw new ConfigValidationError('Qdrant backend requires LIEN_QDRANT_URL environment variable.\n' +
39
+ 'Set it with: export LIEN_QDRANT_URL=http://localhost:6333', '<environment>');
40
+ }
41
+ return {
42
+ backend: 'qdrant',
43
+ qdrant: {
44
+ url,
45
+ apiKey: process.env.LIEN_QDRANT_API_KEY,
46
+ },
47
+ };
48
+ }
49
+ return { backend };
50
+ }
51
+ /**
52
+ * Parse and validate a config object.
53
+ */
54
+ function validateConfig(config, configPath) {
55
+ // Validate backend value
56
+ if (config.backend && !['lancedb', 'qdrant'].includes(config.backend)) {
57
+ throw new ConfigValidationError(`Invalid backend in global config: "${config.backend}"\n` +
58
+ `Config file: ${configPath}\n` +
59
+ `Valid values: 'lancedb' or 'qdrant'`, configPath);
60
+ }
61
+ // Validate Qdrant configuration
62
+ if (config.backend === 'qdrant') {
63
+ if (!config.qdrant) {
64
+ throw new ConfigValidationError(`Qdrant backend requires a "qdrant" configuration section\n` +
65
+ `Config file: ${configPath}\n` +
66
+ `Add: { "qdrant": { "url": "http://localhost:6333" } }`, configPath);
67
+ }
68
+ if (!config.qdrant.url) {
69
+ throw new ConfigValidationError(`Qdrant backend requires qdrant.url in config\n` +
70
+ `Config file: ${configPath}\n` +
71
+ `Add: { "qdrant": { "url": "http://localhost:6333" } }`, configPath);
72
+ }
73
+ }
74
+ }
75
+ /**
76
+ * Parse JSON config file with helpful error messages.
77
+ */
78
+ function parseConfigFile(content, configPath) {
79
+ try {
80
+ return JSON.parse(content);
81
+ }
82
+ catch (parseError) {
83
+ const errorMsg = parseError instanceof Error ? parseError.message : String(parseError);
84
+ throw new ConfigValidationError(`Failed to parse global config file.\n` +
85
+ `Config file: ${configPath}\n` +
86
+ `Syntax error: ${errorMsg}\n\n` +
87
+ `Please fix the JSON syntax errors in your config file.`, configPath);
88
+ }
89
+ }
7
90
  /**
8
91
  * Load global configuration from environment variables or config file.
9
92
  *
@@ -16,39 +99,24 @@ const execAsync = promisify(exec);
16
99
  */
17
100
  export async function loadGlobalConfig() {
18
101
  // 1. Check environment variables first
19
- if (process.env.LIEN_BACKEND) {
20
- const backend = process.env.LIEN_BACKEND;
21
- if (backend === 'qdrant' && process.env.LIEN_QDRANT_URL) {
22
- return {
23
- backend: 'qdrant',
24
- qdrant: {
25
- url: process.env.LIEN_QDRANT_URL,
26
- apiKey: process.env.LIEN_QDRANT_API_KEY,
27
- },
28
- };
29
- }
30
- return { backend };
102
+ const envConfig = loadConfigFromEnv();
103
+ if (envConfig) {
104
+ return envConfig;
31
105
  }
32
106
  // 2. Check global config file
33
107
  const configPath = path.join(os.homedir(), '.lien', 'config.json');
34
108
  try {
35
109
  const content = await fs.readFile(configPath, 'utf-8');
36
- const config = JSON.parse(content);
37
- // Validate structure
38
- if (config.backend && !['lancedb', 'qdrant'].includes(config.backend)) {
39
- throw new Error(`Invalid backend: ${config.backend}. Must be 'lancedb' or 'qdrant'`);
40
- }
41
- if (config.backend === 'qdrant' && config.qdrant && !config.qdrant.url) {
42
- throw new Error('Qdrant backend requires qdrant.url in config');
43
- }
110
+ const config = parseConfigFile(content, configPath);
111
+ validateConfig(config, configPath);
44
112
  return config;
45
113
  }
46
114
  catch (error) {
47
115
  if (error.code === 'ENOENT') {
48
- // File doesn't exist - use defaults
116
+ // File doesn't exist - use defaults (this is normal)
49
117
  return { backend: 'lancedb' };
50
118
  }
51
- // Re-throw validation errors
119
+ // Re-throw all other errors (validation errors, JSON parse errors, etc.)
52
120
  throw error;
53
121
  }
54
122
  }
@@ -1 +1 @@
1
- {"version":3,"file":"global-config.js","sourceRoot":"","sources":["../../src/config/global-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"global-config.js","sourceRoot":"","sources":["../../src/config/global-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAEjC,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAElC;;;GAGG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACD;IAA7C,YAAY,OAAe,EAAkB,UAAkB;QAC7D,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,eAAU,GAAV,UAAU,CAAQ;QAE7D,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAeD;;GAEG;AACH,SAAS,iBAAiB;IACxB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yBAAyB;IACzB,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAU,CAAC;IACrD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAiB,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,qBAAqB,CAC7B,+CAA+C,UAAU,KAAK;YAC9D,qCAAqC,EACrC,eAAe,CAChB,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GAAG,UAAkC,CAAC;IAEnD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;QACxC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,oEAAoE;YACpE,MAAM,IAAI,qBAAqB,CAC7B,iEAAiE;gBACjE,2DAA2D,EAC3D,eAAe,CAChB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE,QAAQ;YACjB,MAAM,EAAE;gBACN,GAAG;gBACH,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB;aACxC;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,MAAoB,EAAE,UAAkB;IAC9D,yBAAyB;IACzB,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,qBAAqB,CAC7B,sCAAsC,MAAM,CAAC,OAAO,KAAK;YACzD,gBAAgB,UAAU,IAAI;YAC9B,qCAAqC,EACrC,UAAU,CACX,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,IAAI,MAAM,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,qBAAqB,CAC7B,4DAA4D;gBAC5D,gBAAgB,UAAU,IAAI;gBAC9B,uDAAuD,EACvD,UAAU,CACX,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACvB,MAAM,IAAI,qBAAqB,CAC7B,gDAAgD;gBAChD,gBAAgB,UAAU,IAAI;gBAC9B,uDAAuD,EACvD,UAAU,CACX,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,OAAe,EAAE,UAAkB;IAC1D,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAiB,CAAC;IAC7C,CAAC;IAAC,OAAO,UAAU,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,UAAU,YAAY,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACvF,MAAM,IAAI,qBAAqB,CAC7B,uCAAuC;YACvC,gBAAgB,UAAU,IAAI;YAC9B,iBAAiB,QAAQ,MAAM;YAC/B,wDAAwD,EACxD,UAAU,CACX,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,uCAAuC;IACvC,MAAM,SAAS,GAAG,iBAAiB,EAAE,CAAC;IACtC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,8BAA8B;IAC9B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACnE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACpD,cAAc,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACnC,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,qDAAqD;YACrD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAChC,CAAC;QAED,yEAAyE;QACzE,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IAC/F,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW;IACjC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACzE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAAC,GAAW;IACtC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,kEAAkE,CAAC,CAAC;IAC5F,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAC7D,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,eAAe,CAAC,OAAe;IAC5C,iCAAiC;IACjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,iBAAiB;IAChC,CAAC;IAED,6DAA6D;IAC7D,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,2BAA2B,EAAE;YAC9D,GAAG,EAAE,OAAO;YACZ,OAAO,EAAE,IAAI;SACd,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;QAC5C,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,SAAS,CAAC,YAAY,EAAE;gBAC3D,GAAG,EAAE,OAAO;gBACZ,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YACH,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACpD,IAAI,CAAC,UAAU;gBAAE,OAAO,IAAI,CAAC;YAE7B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,SAAS,CAAC,sBAAsB,UAAU,EAAE,EAAE;gBACrE,GAAG,EAAE,OAAO;gBACZ,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC,CAAC,wBAAwB;QACvC,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAe;IACvD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,SAAS;YAAE,OAAO,IAAI,CAAC;QAE5B,sCAAsC;QACtC,MAAM,OAAO,GAAG;YACd,gBAAgB;YAChB,cAAc;YACd,mBAAmB;YACnB,kBAAkB;SACnB,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;QAC1B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,CAAC,mCAAmC;IAClD,CAAC;AACH,CAAC"}
@@ -37,6 +37,16 @@ export interface ChunkMetadata {
37
37
  * Set from config.storage.qdrant.orgId when using Qdrant backend.
38
38
  */
39
39
  orgId?: string;
40
+ /**
41
+ * Git branch name for branch/commit tracking in Qdrant backend.
42
+ * Used to isolate indexes by branch (e.g., main vs PR branches).
43
+ */
44
+ branch?: string;
45
+ /**
46
+ * Git commit SHA for branch/commit tracking in Qdrant backend.
47
+ * Used to isolate indexes by commit (e.g., for PR analysis).
48
+ */
49
+ commitSha?: string;
40
50
  }
41
51
  export interface ScanOptions {
42
52
  rootDir: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/indexer/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,CAAC,EAAE;QACR,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IAGF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,CAAC;IAC5G,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAGnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/indexer/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;IAClD,QAAQ,EAAE,MAAM,CAAC;IAEjB,OAAO,CAAC,EAAE;QACR,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IAGF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,CAAC;IAC5G,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAGnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IAGtB;;;;OAIG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/vectordb/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAK/C;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,CAAC,CAwD5B"}
1
+ {"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/vectordb/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAwF/C;;;;;;;;;;;GAWG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,iBAAiB,CAAC,CA2C5B"}
@@ -1,6 +1,69 @@
1
1
  import { VectorDB } from './lancedb.js';
2
2
  import { QdrantDB } from './qdrant.js';
3
- import { loadGlobalConfig, extractOrgIdFromGit } from '../config/global-config.js';
3
+ import { loadGlobalConfig, extractOrgIdFromGit, ConfigValidationError } from '../config/global-config.js';
4
+ import { getCurrentBranch, getCurrentCommit } from '../git/utils.js';
5
+ /**
6
+ * Validate that a VectorDB instance has the required methods.
7
+ */
8
+ function validateVectorDBInterface(db) {
9
+ if (typeof db.initialize !== 'function') {
10
+ throw new Error('VectorDB instance missing initialize method');
11
+ }
12
+ }
13
+ /**
14
+ * Create a LanceDB instance.
15
+ */
16
+ async function createLanceDB(projectRoot) {
17
+ const db = new VectorDB(projectRoot);
18
+ validateVectorDBInterface(db);
19
+ return db;
20
+ }
21
+ /**
22
+ * Create a QdrantDB instance.
23
+ * Extracts orgId, branch, and commit from git repository.
24
+ */
25
+ async function createQdrantDB(projectRoot, config) {
26
+ if (!config.url) {
27
+ throw new Error('Qdrant backend requires qdrant.url in global config');
28
+ }
29
+ // Auto-detect orgId from git remote
30
+ const orgId = await extractOrgIdFromGit(projectRoot);
31
+ if (!orgId) {
32
+ throw new Error('Qdrant backend requires a git repository with a remote URL. ' +
33
+ 'Could not extract organization ID from git remote. ' +
34
+ 'Make sure your project is a git repo with a remote configured (e.g., origin).');
35
+ }
36
+ // Extract branch and commit from git (both are required for Qdrant isolation)
37
+ // Fail fast if git commands fail - branch/commit tracking is essential for data isolation
38
+ let branch;
39
+ let commitSha;
40
+ try {
41
+ [branch, commitSha] = await Promise.all([
42
+ getCurrentBranch(projectRoot),
43
+ getCurrentCommit(projectRoot),
44
+ ]);
45
+ }
46
+ catch (error) {
47
+ throw new Error('Qdrant backend requires a valid git branch and commit SHA for proper data isolation. ' +
48
+ 'Failed to detect current branch and/or commit from git. ' +
49
+ 'Ensure the repository is initialized, has at least one commit, and HEAD is not detached. ' +
50
+ `Original error: ${error instanceof Error ? error.message : String(error)}`);
51
+ }
52
+ // Validate that branch and commitSha are non-empty (fail-fast for invalid git state)
53
+ if (!branch || branch.trim().length === 0) {
54
+ throw new Error('Qdrant backend requires a valid git branch for proper data isolation. ' +
55
+ 'Current branch is empty or whitespace. ' +
56
+ 'Ensure the repository is on a valid branch (not in detached HEAD state).');
57
+ }
58
+ if (!commitSha || commitSha.trim().length === 0) {
59
+ throw new Error('Qdrant backend requires a valid git commit SHA for proper data isolation. ' +
60
+ 'Current commit SHA is empty or whitespace. ' +
61
+ 'Ensure the repository has at least one commit.');
62
+ }
63
+ const db = new QdrantDB(config.url, config.apiKey, orgId, projectRoot, branch, commitSha);
64
+ validateVectorDBInterface(db);
65
+ return db;
66
+ }
4
67
  /**
5
68
  * Factory function to create a VectorDB instance based on global configuration.
6
69
  *
@@ -14,51 +77,40 @@ import { loadGlobalConfig, extractOrgIdFromGit } from '../config/global-config.j
14
77
  * @throws Error if Qdrant config is invalid or orgId cannot be detected
15
78
  */
16
79
  export async function createVectorDB(projectRoot) {
80
+ let globalConfig = null;
17
81
  try {
18
- const globalConfig = await loadGlobalConfig();
19
- // Default to LanceDB if no backend specified or backend is lancedb
20
- if (!globalConfig.backend || globalConfig.backend === 'lancedb') {
21
- const db = new VectorDB(projectRoot);
22
- // Verify it has the required methods
23
- if (typeof db.initialize !== 'function') {
24
- throw new Error('VectorDB instance missing initialize method');
25
- }
26
- return db;
82
+ globalConfig = await loadGlobalConfig();
83
+ }
84
+ catch (error) {
85
+ // ConfigValidationError: Config file exists but has syntax/validation errors
86
+ // This should fail hard with a clear error message
87
+ if (error instanceof ConfigValidationError) {
88
+ throw error; // Error message already has helpful details
27
89
  }
28
- // Create QdrantDB instance
29
- if (globalConfig.backend === 'qdrant') {
90
+ // Check if this is a "file not found" error (expected)
91
+ if (error.code === 'ENOENT') {
92
+ // Expected: No config file exists, use default LanceDB (normal for CLI usage)
93
+ return await createLanceDB(projectRoot);
94
+ }
95
+ // Any other error: fail hard with details
96
+ const errorMessage = error instanceof Error ? error.message : String(error);
97
+ throw new Error('Failed to load global config file. Please check your config file for errors.\n' +
98
+ `Error: ${errorMessage}`);
99
+ }
100
+ // Config loaded successfully - respect the backend choice
101
+ switch (globalConfig.backend) {
102
+ case 'qdrant':
30
103
  if (!globalConfig.qdrant) {
31
104
  throw new Error('Qdrant backend requires qdrant configuration in global config');
32
105
  }
33
- const { url, apiKey } = globalConfig.qdrant;
34
- if (!url) {
35
- throw new Error('Qdrant backend requires qdrant.url in global config');
36
- }
37
- // Auto-detect orgId from git remote
38
- const orgId = await extractOrgIdFromGit(projectRoot);
39
- if (!orgId) {
40
- throw new Error('Qdrant backend requires a git repository with a remote URL. ' +
41
- 'Could not extract organization ID from git remote. ' +
42
- 'Make sure your project is a git repo with a remote configured (e.g., origin).');
43
- }
44
- const db = new QdrantDB(url, apiKey, orgId, projectRoot);
45
- // Verify it has the required methods
46
- if (typeof db.initialize !== 'function') {
47
- throw new Error('QdrantDB instance missing initialize method');
48
- }
49
- return db;
50
- }
51
- // Unknown backend - fallback to LanceDB
52
- throw new Error(`Unknown storage backend: ${globalConfig.backend}. Supported backends: 'lancedb', 'qdrant'`);
53
- }
54
- catch (error) {
55
- // If anything goes wrong, fall back to LanceDB
56
- console.warn(`[Lien] Error creating vector DB, falling back to LanceDB: ${error}`);
57
- const db = new VectorDB(projectRoot);
58
- if (typeof db.initialize !== 'function') {
59
- throw new Error(`Failed to create VectorDB: ${error instanceof Error ? error.message : String(error)}`);
60
- }
61
- return db;
106
+ // Don't catch errors here - let Qdrant-specific errors propagate
107
+ // User explicitly configured Qdrant, so they should see configuration errors
108
+ return await createQdrantDB(projectRoot, globalConfig.qdrant);
109
+ case 'lancedb':
110
+ case undefined:
111
+ return await createLanceDB(projectRoot);
112
+ default:
113
+ throw new Error(`Unknown storage backend: ${globalConfig.backend}. Supported backends: 'lancedb', 'qdrant'`);
62
114
  }
63
115
  }
64
116
  //# sourceMappingURL=factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/vectordb/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEnF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAE9C,mEAAmE;QACnE,IAAI,CAAC,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChE,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC;YACrC,qCAAqC;YACrC,IAAI,OAAO,EAAE,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,2BAA2B;QAC3B,IAAI,YAAY,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACtC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;YACnF,CAAC;YAED,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,MAAM,CAAC;YAE5C,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACzE,CAAC;YAED,oCAAoC;YACpC,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;YAErD,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CACb,8DAA8D;oBAC9D,qDAAqD;oBACrD,+EAA+E,CAChF,CAAC;YACJ,CAAC;YAED,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC;YACzD,qCAAqC;YACrC,IAAI,OAAO,EAAE,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,wCAAwC;QACxC,MAAM,IAAI,KAAK,CAAC,4BAA4B,YAAY,CAAC,OAAO,2CAA2C,CAAC,CAAC;IAC/G,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+CAA+C;QAC/C,OAAO,CAAC,IAAI,CAAC,6DAA6D,KAAK,EAAE,CAAC,CAAC;QACnF,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,CAAC;QACrC,IAAI,OAAO,EAAE,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1G,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/vectordb/factory.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  import { ChunkMetadata } from '../indexer/types.js';
2
2
  /**
3
3
  * Qdrant payload structure for storing chunk metadata.
4
+ *
5
+ * Note: Metrics (complexity, halstead) are always present as numbers.
6
+ * If missing in source metadata, they are stored as 0.
4
7
  */
5
8
  export interface QdrantPayload {
6
9
  content: string;
@@ -26,6 +29,8 @@ export interface QdrantPayload {
26
29
  halsteadBugs: number;
27
30
  orgId: string;
28
31
  repoId: string;
32
+ branch: string;
33
+ commitSha: string;
29
34
  }
30
35
  /**
31
36
  * Maps between ChunkMetadata and Qdrant payload format.
@@ -34,11 +39,39 @@ export interface QdrantPayload {
34
39
  export declare class QdrantPayloadMapper {
35
40
  private orgId;
36
41
  private repoId;
37
- constructor(orgId: string, repoId: string);
42
+ private branch;
43
+ private commitSha;
44
+ constructor(orgId: string, repoId: string, branch: string, commitSha: string);
45
+ /**
46
+ * Map metrics from metadata to payload format.
47
+ */
48
+ private mapMetrics;
49
+ /**
50
+ * Map symbols from metadata to payload format.
51
+ */
52
+ private mapSymbols;
38
53
  /**
39
54
  * Transform chunk metadata to Qdrant payload format.
40
55
  */
41
56
  toPayload(metadata: ChunkMetadata, content?: string): QdrantPayload;
57
+ /**
58
+ * Extract symbols from payload.
59
+ */
60
+ private extractSymbols;
61
+ /**
62
+ * Extract metrics from payload.
63
+ */
64
+ private extractMetrics;
65
+ /**
66
+ * Extract tracking info from payload.
67
+ *
68
+ * For legacy points indexed before branch/commit tracking was added, these
69
+ * fields may be missing. In that case they are returned as undefined and
70
+ * the points will not match branch/commitSha-based filters. Such data
71
+ * effectively becomes \"orphaned\" until it is re-indexed with tracking
72
+ * metadata, which is the expected migration path for old Qdrant data.
73
+ */
74
+ private extractTrackingInfo;
42
75
  /**
43
76
  * Transform Qdrant payload back to ChunkMetadata.
44
77
  */
@@ -1 +1 @@
1
- {"version":3,"file":"qdrant-payload-mapper.d.ts","sourceRoot":"","sources":["../../src/vectordb/qdrant-payload-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IAEjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IAErB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;gBADN,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM;IAGxB;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,GAAE,MAAW,GAAG,aAAa;IAgCvE;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,aAAa;CA4BzD"}
1
+ {"version":3,"file":"qdrant-payload-mapper.d.ts","sourceRoot":"","sources":["../../src/vectordb/qdrant-payload-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IAEjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IAErB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IAEf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,SAAS;gBAHT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM;IAG3B;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACH,OAAO,CAAC,UAAU;IAclB;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,GAAE,MAAW,GAAG,aAAa;IAqBvE;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;;;;;;;OAQG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,aAAa;CAkBzD"}
@@ -5,14 +5,53 @@
5
5
  export class QdrantPayloadMapper {
6
6
  orgId;
7
7
  repoId;
8
- constructor(orgId, repoId) {
8
+ branch;
9
+ commitSha;
10
+ constructor(orgId, repoId, branch, commitSha) {
9
11
  this.orgId = orgId;
10
12
  this.repoId = repoId;
13
+ this.branch = branch;
14
+ this.commitSha = commitSha;
15
+ }
16
+ /**
17
+ * Map metrics from metadata to payload format.
18
+ */
19
+ mapMetrics(metadata) {
20
+ return {
21
+ complexity: metadata.complexity ?? 0,
22
+ cognitiveComplexity: metadata.cognitiveComplexity ?? 0,
23
+ halsteadVolume: metadata.halsteadVolume ?? 0,
24
+ halsteadDifficulty: metadata.halsteadDifficulty ?? 0,
25
+ halsteadEffort: metadata.halsteadEffort ?? 0,
26
+ halsteadBugs: metadata.halsteadBugs ?? 0,
27
+ };
28
+ }
29
+ /**
30
+ * Map symbols from metadata to payload format.
31
+ */
32
+ mapSymbols(metadata) {
33
+ return {
34
+ functionNames: metadata.symbols?.functions ?? [],
35
+ classNames: metadata.symbols?.classes ?? [],
36
+ interfaceNames: metadata.symbols?.interfaces ?? [],
37
+ symbolName: metadata.symbolName ?? '',
38
+ symbolType: metadata.symbolType ?? '',
39
+ parentClass: metadata.parentClass ?? '',
40
+ parameters: metadata.parameters ?? [],
41
+ signature: metadata.signature ?? '',
42
+ imports: metadata.imports ?? [],
43
+ };
11
44
  }
12
45
  /**
13
46
  * Transform chunk metadata to Qdrant payload format.
14
47
  */
15
48
  toPayload(metadata, content = '') {
49
+ const trackingInfo = {
50
+ orgId: this.orgId,
51
+ repoId: this.repoId,
52
+ branch: this.branch,
53
+ commitSha: this.commitSha,
54
+ };
16
55
  return {
17
56
  content,
18
57
  file: metadata.file,
@@ -20,27 +59,49 @@ export class QdrantPayloadMapper {
20
59
  endLine: metadata.endLine,
21
60
  type: metadata.type,
22
61
  language: metadata.language,
23
- // Symbols
24
- functionNames: metadata.symbols?.functions || [],
25
- classNames: metadata.symbols?.classes || [],
26
- interfaceNames: metadata.symbols?.interfaces || [],
27
- // AST-derived metadata
28
- symbolName: metadata.symbolName || '',
29
- symbolType: metadata.symbolType || '',
30
- parentClass: metadata.parentClass || '',
31
- complexity: metadata.complexity || 0,
32
- cognitiveComplexity: metadata.cognitiveComplexity || 0,
33
- parameters: metadata.parameters || [],
34
- signature: metadata.signature || '',
35
- imports: metadata.imports || [],
36
- // Halstead metrics
37
- halsteadVolume: metadata.halsteadVolume || 0,
38
- halsteadDifficulty: metadata.halsteadDifficulty || 0,
39
- halsteadEffort: metadata.halsteadEffort || 0,
40
- halsteadBugs: metadata.halsteadBugs || 0,
41
- // Multi-tenant fields
42
- orgId: this.orgId,
43
- repoId: this.repoId,
62
+ ...this.mapSymbols(metadata),
63
+ ...this.mapMetrics(metadata),
64
+ ...trackingInfo,
65
+ };
66
+ }
67
+ /**
68
+ * Extract symbols from payload.
69
+ */
70
+ extractSymbols(payload) {
71
+ return {
72
+ functions: payload.functionNames ?? [],
73
+ classes: payload.classNames ?? [],
74
+ interfaces: payload.interfaceNames ?? [],
75
+ };
76
+ }
77
+ /**
78
+ * Extract metrics from payload.
79
+ */
80
+ extractMetrics(payload) {
81
+ return {
82
+ complexity: payload.complexity ?? undefined,
83
+ cognitiveComplexity: payload.cognitiveComplexity ?? undefined,
84
+ halsteadVolume: payload.halsteadVolume ?? undefined,
85
+ halsteadDifficulty: payload.halsteadDifficulty ?? undefined,
86
+ halsteadEffort: payload.halsteadEffort ?? undefined,
87
+ halsteadBugs: payload.halsteadBugs ?? undefined,
88
+ };
89
+ }
90
+ /**
91
+ * Extract tracking info from payload.
92
+ *
93
+ * For legacy points indexed before branch/commit tracking was added, these
94
+ * fields may be missing. In that case they are returned as undefined and
95
+ * the points will not match branch/commitSha-based filters. Such data
96
+ * effectively becomes \"orphaned\" until it is re-indexed with tracking
97
+ * metadata, which is the expected migration path for old Qdrant data.
98
+ */
99
+ extractTrackingInfo(payload) {
100
+ return {
101
+ repoId: payload.repoId ?? undefined,
102
+ orgId: payload.orgId ?? undefined,
103
+ branch: payload.branch ?? undefined,
104
+ commitSha: payload.commitSha ?? undefined,
44
105
  };
45
106
  }
46
107
  /**
@@ -53,25 +114,15 @@ export class QdrantPayloadMapper {
53
114
  endLine: payload.endLine,
54
115
  type: payload.type,
55
116
  language: payload.language,
56
- symbols: {
57
- functions: payload.functionNames || [],
58
- classes: payload.classNames || [],
59
- interfaces: payload.interfaceNames || [],
60
- },
61
- symbolName: payload.symbolName || undefined,
62
- symbolType: payload.symbolType || undefined,
63
- parentClass: payload.parentClass || undefined,
64
- complexity: payload.complexity || undefined,
65
- cognitiveComplexity: payload.cognitiveComplexity || undefined,
66
- parameters: payload.parameters || undefined,
67
- signature: payload.signature || undefined,
68
- imports: payload.imports || undefined,
69
- halsteadVolume: payload.halsteadVolume || undefined,
70
- halsteadDifficulty: payload.halsteadDifficulty || undefined,
71
- halsteadEffort: payload.halsteadEffort || undefined,
72
- halsteadBugs: payload.halsteadBugs || undefined,
73
- repoId: payload.repoId || undefined,
74
- orgId: payload.orgId || undefined,
117
+ symbols: this.extractSymbols(payload),
118
+ symbolName: payload.symbolName ?? undefined,
119
+ symbolType: payload.symbolType ?? undefined,
120
+ parentClass: payload.parentClass ?? undefined,
121
+ parameters: payload.parameters ?? undefined,
122
+ signature: payload.signature ?? undefined,
123
+ imports: payload.imports ?? undefined,
124
+ ...this.extractMetrics(payload),
125
+ ...this.extractTrackingInfo(payload),
75
126
  };
76
127
  }
77
128
  }
@@ -1 +1 @@
1
- {"version":3,"file":"qdrant-payload-mapper.js","sourceRoot":"","sources":["../../src/vectordb/qdrant-payload-mapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"qdrant-payload-mapper.js","sourceRoot":"","sources":["../../src/vectordb/qdrant-payload-mapper.ts"],"names":[],"mappings":"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"}