codesift-mcp 0.5.28 → 0.5.30

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.
Files changed (92) hide show
  1. package/dist/cli/commands.d.ts.map +1 -1
  2. package/dist/cli/commands.js +4 -1
  3. package/dist/cli/commands.js.map +1 -1
  4. package/dist/cli/git-hooks-installer.d.ts +29 -0
  5. package/dist/cli/git-hooks-installer.d.ts.map +1 -0
  6. package/dist/cli/git-hooks-installer.js +145 -0
  7. package/dist/cli/git-hooks-installer.js.map +1 -0
  8. package/dist/cli/help.d.ts.map +1 -1
  9. package/dist/cli/help.js +5 -0
  10. package/dist/cli/help.js.map +1 -1
  11. package/dist/cli/setup.d.ts +5 -0
  12. package/dist/cli/setup.d.ts.map +1 -1
  13. package/dist/cli/setup.js +15 -1
  14. package/dist/cli/setup.js.map +1 -1
  15. package/dist/register-tools.d.ts.map +1 -1
  16. package/dist/register-tools.js +125 -11
  17. package/dist/register-tools.js.map +1 -1
  18. package/dist/storage/index-store.d.ts.map +1 -1
  19. package/dist/storage/index-store.js +15 -14
  20. package/dist/storage/index-store.js.map +1 -1
  21. package/dist/storage/registry.d.ts +9 -0
  22. package/dist/storage/registry.d.ts.map +1 -1
  23. package/dist/storage/registry.js +28 -0
  24. package/dist/storage/registry.js.map +1 -1
  25. package/dist/tools/astro-content-collections.d.ts.map +1 -1
  26. package/dist/tools/astro-content-collections.js +1 -141
  27. package/dist/tools/astro-content-collections.js.map +1 -1
  28. package/dist/tools/astro-db-audit.d.ts +30 -0
  29. package/dist/tools/astro-db-audit.d.ts.map +1 -0
  30. package/dist/tools/astro-db-audit.js +244 -0
  31. package/dist/tools/astro-db-audit.js.map +1 -0
  32. package/dist/tools/astro-db-parser.d.ts +24 -0
  33. package/dist/tools/astro-db-parser.d.ts.map +1 -0
  34. package/dist/tools/astro-db-parser.js +150 -0
  35. package/dist/tools/astro-db-parser.js.map +1 -0
  36. package/dist/tools/astro-helpers.d.ts +13 -0
  37. package/dist/tools/astro-helpers.d.ts.map +1 -0
  38. package/dist/tools/astro-helpers.js +116 -0
  39. package/dist/tools/astro-helpers.js.map +1 -0
  40. package/dist/tools/astro-middleware.d.ts +26 -0
  41. package/dist/tools/astro-middleware.d.ts.map +1 -0
  42. package/dist/tools/astro-middleware.js +139 -0
  43. package/dist/tools/astro-middleware.js.map +1 -0
  44. package/dist/tools/astro-sessions.d.ts +26 -0
  45. package/dist/tools/astro-sessions.d.ts.map +1 -0
  46. package/dist/tools/astro-sessions.js +140 -0
  47. package/dist/tools/astro-sessions.js.map +1 -0
  48. package/dist/tools/constant-resolution-tools.d.ts.map +1 -1
  49. package/dist/tools/constant-resolution-tools.js +8 -4
  50. package/dist/tools/constant-resolution-tools.js.map +1 -1
  51. package/dist/tools/index-tools.d.ts.map +1 -1
  52. package/dist/tools/index-tools.js +16 -40
  53. package/dist/tools/index-tools.js.map +1 -1
  54. package/dist/tools/pattern-tools.d.ts.map +1 -1
  55. package/dist/tools/pattern-tools.js +20 -25
  56. package/dist/tools/pattern-tools.js.map +1 -1
  57. package/dist/tools/python-constants-tools.d.ts +3 -1
  58. package/dist/tools/python-constants-tools.d.ts.map +1 -1
  59. package/dist/tools/python-constants-tools.js +3 -2
  60. package/dist/tools/python-constants-tools.js.map +1 -1
  61. package/dist/tools/react-tools.d.ts +7 -1
  62. package/dist/tools/react-tools.d.ts.map +1 -1
  63. package/dist/tools/react-tools.js.map +1 -1
  64. package/dist/tools/sql-tools.d.ts +26 -0
  65. package/dist/tools/sql-tools.d.ts.map +1 -1
  66. package/dist/tools/sql-tools.js +84 -9
  67. package/dist/tools/sql-tools.js.map +1 -1
  68. package/dist/tools/status-tools.js +12 -19
  69. package/dist/tools/status-tools.js.map +1 -1
  70. package/dist/tools/typescript-constants-tools.d.ts +3 -0
  71. package/dist/tools/typescript-constants-tools.d.ts.map +1 -1
  72. package/dist/tools/typescript-constants-tools.js +53 -13
  73. package/dist/tools/typescript-constants-tools.js.map +1 -1
  74. package/dist/utils/constant-file-pattern.d.ts +6 -0
  75. package/dist/utils/constant-file-pattern.d.ts.map +1 -0
  76. package/dist/utils/constant-file-pattern.js +27 -0
  77. package/dist/utils/constant-file-pattern.js.map +1 -0
  78. package/dist/utils/import-graph.d.ts.map +1 -1
  79. package/dist/utils/import-graph.js +15 -9
  80. package/dist/utils/import-graph.js.map +1 -1
  81. package/dist/utils/ts-imports.d.ts +2 -1
  82. package/dist/utils/ts-imports.d.ts.map +1 -1
  83. package/dist/utils/ts-imports.js +8 -0
  84. package/dist/utils/ts-imports.js.map +1 -1
  85. package/dist/utils/tsconfig-paths.d.ts +5 -4
  86. package/dist/utils/tsconfig-paths.d.ts.map +1 -1
  87. package/dist/utils/tsconfig-paths.js +17 -14
  88. package/dist/utils/tsconfig-paths.js.map +1 -1
  89. package/hooks/hook-chain.sh +7 -0
  90. package/hooks/post-commit +8 -0
  91. package/hooks/post-commit-review-backlog.sh +107 -0
  92. package/package.json +2 -1
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Astro middleware audit. Parses src/middleware.{ts,js,mjs} and reports:
3
+ * MW00 parse-failure — file present but tree-sitter cannot parse
4
+ * MW01 no-onRequest-export — file exists but does not export onRequest
5
+ * MW02 sequence-ambiguous — sequence(...) called but args are non-identifiers
6
+ * MW03 guard-without-effect — a guarding `if` body that does not redirect/throw/return Response
7
+ */
8
+ import { readFileSync, existsSync } from "node:fs";
9
+ import { join } from "node:path";
10
+ import { getParser } from "../parser/parser-manager.js";
11
+ import { getCodeIndex } from "./index-tools.js";
12
+ const CANDIDATES = ["src/middleware.ts", "src/middleware.js", "src/middleware.mjs"];
13
+ function findMiddlewareFile(root) {
14
+ for (const rel of CANDIDATES) {
15
+ const abs = join(root, rel);
16
+ if (existsSync(abs))
17
+ return { abs, rel };
18
+ }
19
+ return null;
20
+ }
21
+ function parseMiddleware(parser, source) {
22
+ let tree;
23
+ try {
24
+ tree = parser.parse(source);
25
+ }
26
+ catch {
27
+ return { handlers: [], sequence: [], sequenceTied: false, guardsWithoutEffect: 0, parseOk: false };
28
+ }
29
+ try {
30
+ const root = tree.rootNode;
31
+ const handlers = [];
32
+ const sequence = [];
33
+ let sequenceTied = false;
34
+ let guardsWithoutEffect = 0;
35
+ // Direct children only — avoid matching nested local `onRequest`.
36
+ for (const decl of root.namedChildren) {
37
+ if (decl.type !== "export_statement")
38
+ continue;
39
+ // (a) export const onRequest = …
40
+ for (const lex of decl.namedChildren) {
41
+ if (lex.type !== "lexical_declaration")
42
+ continue;
43
+ for (const v of lex.namedChildren) {
44
+ if (v.type !== "variable_declarator")
45
+ continue;
46
+ const name = v.childForFieldName("name");
47
+ if (!name || name.text !== "onRequest")
48
+ continue;
49
+ handlers.push("onRequest");
50
+ const value = v.childForFieldName("value");
51
+ if (value && value.type === "call_expression") {
52
+ const fn = value.childForFieldName("function");
53
+ if (fn && fn.text === "sequence") {
54
+ sequenceTied = true;
55
+ const args = value.childForFieldName("arguments");
56
+ if (args)
57
+ for (const arg of args.namedChildren)
58
+ if (arg.type === "identifier")
59
+ sequence.push(arg.text);
60
+ }
61
+ }
62
+ }
63
+ }
64
+ // (b) export function onRequest / export async function onRequest
65
+ for (const fn of decl.namedChildren) {
66
+ if (fn.type !== "function_declaration")
67
+ continue;
68
+ const name = fn.childForFieldName("name");
69
+ if (name && name.text === "onRequest" && !handlers.includes("onRequest"))
70
+ handlers.push("onRequest");
71
+ }
72
+ }
73
+ // Guard heuristic: only flag if-stmt with NO else branch AND consequence body has no effect.
74
+ const EFFECT_RE = /\b(return\s+(?:new\s+)?Response(?:\.\w+)?\(|return\s+(?:context|Astro)\.(?:redirect|rewrite)\(|return\s+next\(\)|throw\b|redirect\(|context\.rewrite)/;
75
+ const GUARD_RE = /\b(context\.|locals\.|user\b|auth|session|cookies\.)/i;
76
+ for (const ifStmt of root.descendantsOfType("if_statement")) {
77
+ if (ifStmt.childForFieldName("alternative"))
78
+ continue; // skip if/else
79
+ const consequence = ifStmt.childForFieldName("consequence");
80
+ if (!consequence)
81
+ continue;
82
+ const body = consequence.text;
83
+ if (!EFFECT_RE.test(body) && GUARD_RE.test(ifStmt.text))
84
+ guardsWithoutEffect++;
85
+ }
86
+ return { handlers, sequence, sequenceTied, guardsWithoutEffect, parseOk: !root.hasError };
87
+ }
88
+ finally {
89
+ tree.delete();
90
+ }
91
+ }
92
+ export async function auditAstroMiddlewareFromRoot(root) {
93
+ const found = findMiddlewareFile(root);
94
+ if (!found) {
95
+ return { middleware_file: null, handlers: [], sequence: [], routes_protected_count: 0, issues: [], summary: { handlers_total: 0, issues_total: 0 } };
96
+ }
97
+ let source;
98
+ try {
99
+ source = readFileSync(found.abs, "utf-8");
100
+ }
101
+ catch {
102
+ return { middleware_file: found.rel, handlers: [], sequence: [], routes_protected_count: 0, issues: [{ code: "MW00", severity: "error", message: `Cannot read ${found.rel}`, file: found.rel, line: 1 }], summary: { handlers_total: 0, issues_total: 1 } };
103
+ }
104
+ const parser = await getParser("typescript");
105
+ if (!parser)
106
+ return { middleware_file: found.rel, handlers: [], sequence: [], routes_protected_count: 0, issues: [{ code: "MW00", severity: "error", message: "TypeScript parser unavailable", file: found.rel, line: 1 }], summary: { handlers_total: 0, issues_total: 1 } };
107
+ const parsed = parseMiddleware(parser, source);
108
+ const issues = [];
109
+ if (!parsed.parseOk)
110
+ issues.push({ code: "MW00", severity: "error", message: `Parse error in ${found.rel}`, file: found.rel, line: 1 });
111
+ if (parsed.handlers.length === 0)
112
+ issues.push({ code: "MW01", severity: "error", message: `${found.rel} does not export onRequest`, file: found.rel, line: 1 });
113
+ if (parsed.sequenceTied && parsed.sequence.length === 0) {
114
+ issues.push({ code: "MW02", severity: "warning", message: "onRequest = sequence(...) called with non-identifier args — order is ambiguous", file: found.rel, line: 1 });
115
+ }
116
+ for (let i = 0; i < parsed.guardsWithoutEffect; i++) {
117
+ issues.push({ code: "MW03", severity: "warning", message: "Guarding if-block without redirect/throw/return — falls through", file: found.rel, line: 1 });
118
+ }
119
+ return {
120
+ middleware_file: found.rel,
121
+ handlers: parsed.handlers,
122
+ sequence: parsed.sequence,
123
+ routes_protected_count: parsed.handlers.length > 0 ? 1 : 0,
124
+ issues,
125
+ summary: { handlers_total: parsed.handlers.length, issues_total: issues.length },
126
+ };
127
+ }
128
+ export async function auditAstroMiddlewareFromIndex(index) {
129
+ return auditAstroMiddlewareFromRoot(index.root);
130
+ }
131
+ export async function astroMiddlewareAudit(args) {
132
+ if (args.project_root)
133
+ return auditAstroMiddlewareFromRoot(args.project_root);
134
+ const index = await getCodeIndex(args.repo ?? "");
135
+ if (!index)
136
+ return { middleware_file: null, handlers: [], sequence: [], routes_protected_count: 0, issues: [], summary: { handlers_total: 0, issues_total: 0 } };
137
+ return auditAstroMiddlewareFromIndex(index);
138
+ }
139
+ //# sourceMappingURL=astro-middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astro-middleware.js","sourceRoot":"","sources":["../../src/tools/astro-middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface SessionsIssue {
2
+ code: "SE01" | "SE02" | "SE03" | "SE04";
3
+ severity: "error" | "warning" | "info";
4
+ message: string;
5
+ file: string;
6
+ line: number;
7
+ }
8
+ export interface SessionsAuditResult {
9
+ config_found: boolean;
10
+ adapter: string | null;
11
+ sessions_enabled: boolean;
12
+ usage_count: number;
13
+ usage_files: string[];
14
+ adapter_compatibility: Record<string, boolean>;
15
+ issues: SessionsIssue[];
16
+ summary: {
17
+ usage_total: number;
18
+ issues_total: number;
19
+ };
20
+ }
21
+ export declare function auditSessionsFromRoot(root: string): Promise<SessionsAuditResult>;
22
+ export declare function astroSessionsAudit(args: {
23
+ project_root?: string;
24
+ repo?: string;
25
+ }): Promise<SessionsAuditResult>;
26
+ //# sourceMappingURL=astro-sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astro-sessions.d.ts","sourceRoot":"","sources":["../../src/tools/astro-sessions.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACxC,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/C,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CACxD;AAgDD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAiDtF;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACtC,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAK/B"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Astro 5 Sessions API audit. Detects Astro.session.* / context.session.* usage,
3
+ * cross-checks against astro.config experimental.session flag and adapter compat.
4
+ * SE01 sessions-used-without-config — usage present but experimental.session is off
5
+ * SE02 unsupported-adapter — adapter unknown to compat table
6
+ * SE03 adapter-needs-extra-config — e.g., cloudflare requires kv binding (heuristic)
7
+ */
8
+ import { readFile } from "node:fs/promises";
9
+ import { existsSync } from "node:fs";
10
+ import { join, relative } from "node:path";
11
+ import { extractAstroConventions } from "./astro-config.js";
12
+ import { walkDirectory } from "../utils/walk.js";
13
+ import { getCodeIndex } from "./index-tools.js";
14
+ import { getParser, initParser } from "../parser/parser-manager.js";
15
+ import { getProperty } from "./astro-helpers.js";
16
+ // Supported adapters (true = sessions work out of the box;
17
+ // "extra-config" = needs additional storage binding).
18
+ const ADAPTER_COMPAT = {
19
+ "@astrojs/node": true,
20
+ "@astrojs/vercel": true,
21
+ "@astrojs/netlify": true,
22
+ "@astrojs/deno": true,
23
+ "@astrojs/cloudflare": "extra-config",
24
+ };
25
+ // Match Astro.session.X(...) and `context.session.X(...)` only — avoids
26
+ // false positives like req.session, db.session from other libraries.
27
+ const SESSION_USAGE_RE = /\b(?:Astro|context)\.session\s*\.\s*(?:get|set|delete|destroy|regenerate)\s*\(/g;
28
+ /** AST-based detection — handles nested objects under `experimental`. */
29
+ async function detectExperimentalSession(configPath) {
30
+ if (!configPath)
31
+ return false;
32
+ let src;
33
+ try {
34
+ src = await readFile(configPath, "utf-8");
35
+ }
36
+ catch {
37
+ return false;
38
+ }
39
+ await initParser();
40
+ const lang = configPath.endsWith(".ts") ? "typescript" : "javascript";
41
+ const parser = await getParser(lang);
42
+ if (!parser)
43
+ return false;
44
+ let tree;
45
+ try {
46
+ tree = parser.parse(src);
47
+ }
48
+ catch {
49
+ return false;
50
+ }
51
+ try {
52
+ for (const obj of tree.rootNode.descendantsOfType("object")) {
53
+ const expProp = getProperty(obj, "experimental");
54
+ if (!expProp || expProp.type !== "object")
55
+ continue;
56
+ const sessionProp = getProperty(expProp, "session");
57
+ // Astro 5: session can be `true` (basic) or an object config like
58
+ // `session: { cookie: { sameSite: "strict" } }`. Any non-`false` value enables it.
59
+ if (sessionProp && sessionProp.text !== "false")
60
+ return true;
61
+ }
62
+ return false;
63
+ }
64
+ finally {
65
+ tree.delete();
66
+ }
67
+ }
68
+ async function findConfigFile(root) {
69
+ for (const name of ["astro.config.mjs", "astro.config.ts", "astro.config.cjs", "astro.config.js"]) {
70
+ const full = join(root, name);
71
+ if (existsSync(full))
72
+ return full;
73
+ }
74
+ return null;
75
+ }
76
+ export async function auditSessionsFromRoot(root) {
77
+ const configPath = await findConfigFile(root);
78
+ const config_found = configPath !== null;
79
+ const conventions = config_found
80
+ ? await extractAstroConventions([], root).catch(() => null)
81
+ : null;
82
+ const adapter = conventions?.conventions.adapter ?? null;
83
+ const sessions_enabled = await detectExperimentalSession(configPath);
84
+ const files = await walkDirectory(root, {
85
+ maxFiles: 5000,
86
+ relative: true,
87
+ fileFilter: (ext) => ext === ".astro" || ext === ".ts" || ext === ".tsx" || ext === ".js" || ext === ".jsx" || ext === ".mjs",
88
+ });
89
+ const usage_files = [];
90
+ let usage_count = 0;
91
+ for (const rel of files) {
92
+ const abs = join(root, rel);
93
+ let src;
94
+ try {
95
+ src = await readFile(abs, "utf-8");
96
+ }
97
+ catch {
98
+ continue;
99
+ }
100
+ if (!/\bsession\s*\./.test(src))
101
+ continue;
102
+ const matches = src.match(SESSION_USAGE_RE);
103
+ if (matches && matches.length > 0) {
104
+ usage_count += matches.length;
105
+ usage_files.push(rel);
106
+ }
107
+ }
108
+ const issues = [];
109
+ const cfgRel = relative(root, configPath ?? "") || "astro.config.mjs";
110
+ if (usage_count > 0 && !sessions_enabled)
111
+ issues.push({ code: "SE01", severity: "error", message: "Sessions API used but experimental.session is not enabled in astro.config", file: usage_files[0] ?? cfgRel, line: 1 });
112
+ if (usage_count > 0 && !adapter)
113
+ issues.push({ code: "SE04", severity: "error", message: "Sessions API used but no SSR adapter configured — Astro requires an adapter for sessions", file: cfgRel, line: 1 });
114
+ if (usage_count > 0 && adapter) {
115
+ const compat = ADAPTER_COMPAT[adapter];
116
+ if (compat === undefined)
117
+ issues.push({ code: "SE02", severity: "warning", message: `Adapter "${adapter}" is not in the known Sessions API compatibility list`, file: cfgRel, line: 1 });
118
+ else if (compat === "extra-config")
119
+ issues.push({ code: "SE03", severity: "info", message: `Adapter "${adapter}" supports Sessions but needs extra storage config (e.g. KV binding)`, file: cfgRel, line: 1 });
120
+ }
121
+ const adapter_compatibility = {};
122
+ for (const [k, v] of Object.entries(ADAPTER_COMPAT))
123
+ adapter_compatibility[k] = v === true;
124
+ if (adapter && !(adapter in adapter_compatibility))
125
+ adapter_compatibility[adapter] = false;
126
+ return {
127
+ config_found, adapter, sessions_enabled, usage_count, usage_files,
128
+ adapter_compatibility, issues,
129
+ summary: { usage_total: usage_count, issues_total: issues.length },
130
+ };
131
+ }
132
+ export async function astroSessionsAudit(args) {
133
+ if (args.project_root)
134
+ return auditSessionsFromRoot(args.project_root);
135
+ const index = await getCodeIndex(args.repo ?? "");
136
+ if (!index)
137
+ return { config_found: false, adapter: null, sessions_enabled: false, usage_count: 0, usage_files: [], adapter_compatibility: {}, issues: [], summary: { usage_total: 0, issues_total: 0 } };
138
+ return auditSessionsFromRoot(index.root);
139
+ }
140
+ //# sourceMappingURL=astro-sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"astro-sessions.js","sourceRoot":"","sources":["../../src/tools/astro-sessions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"constant-resolution-tools.d.ts","sourceRoot":"","sources":["../../src/tools/constant-resolution-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAA2B,MAAM,6BAA6B,CAAC;AAIrG,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,YAAY,CAAC;AA+CjE,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,0BAA0B,CAAC;CACvC,GACA,OAAO,CAAC,wBAAwB,CAAC,CAgCnC"}
1
+ {"version":3,"file":"constant-resolution-tools.d.ts","sourceRoot":"","sources":["../../src/tools/constant-resolution-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAA2B,MAAM,6BAA6B,CAAC;AAKrG,MAAM,MAAM,0BAA0B,GAAG,QAAQ,GAAG,YAAY,CAAC;AA+CjE,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,0BAA0B,CAAC;CACvC,GACA,OAAO,CAAC,wBAAwB,CAAC,CAoCnC"}
@@ -1,6 +1,7 @@
1
1
  import { getCodeIndex } from "./index-tools.js";
2
2
  import { resolveConstantValue as resolvePythonConstantValue } from "./python-constants-tools.js";
3
3
  import { resolveTypeScriptConstantValue } from "./typescript-constants-tools.js";
4
+ import { matchesConstantFilePattern } from "../utils/constant-file-pattern.js";
4
5
  function isTypeScriptFile(filePath) {
5
6
  return filePath.endsWith(".ts") || filePath.endsWith(".tsx");
6
7
  }
@@ -14,7 +15,7 @@ function inferLanguages(index, symbolName, options) {
14
15
  return ["typescript"];
15
16
  const candidates = index.symbols
16
17
  .filter((symbol) => symbol.name === symbolName)
17
- .filter((symbol) => !options?.file_pattern || symbol.file.includes(options.file_pattern));
18
+ .filter((symbol) => matchesConstantFilePattern(symbol.file, options?.file_pattern));
18
19
  const hasPython = candidates.some((symbol) => symbol.file.endsWith(".py"));
19
20
  const hasTypeScript = candidates.some((symbol) => isTypeScriptFile(symbol.file));
20
21
  if (hasPython && hasTypeScript)
@@ -31,7 +32,7 @@ function inferLanguages(index, symbolName, options) {
31
32
  return ["python"];
32
33
  if (repoHasTypeScript)
33
34
  return ["typescript"];
34
- return ["python"];
35
+ return [];
35
36
  }
36
37
  function normalizeMatches(matches, language) {
37
38
  return matches.map((match) => ({
@@ -45,15 +46,18 @@ export async function resolveConstantValue(repo, symbolName, options) {
45
46
  throw new Error(`Repository "${repo}" not found.`);
46
47
  }
47
48
  const languages = inferLanguages(index, symbolName, options);
49
+ if (languages.length === 0) {
50
+ return { query: symbolName, matches: [] };
51
+ }
48
52
  const matches = [];
49
53
  for (const language of languages) {
50
54
  if (language === "python") {
51
- const result = await resolvePythonConstantValue(repo, symbolName, options);
55
+ const result = await resolvePythonConstantValue(repo, symbolName, { ...options, index });
52
56
  matches.push(...normalizeMatches(result.matches, "python"));
53
57
  continue;
54
58
  }
55
59
  if (language === "typescript") {
56
- const result = await resolveTypeScriptConstantValue(repo, symbolName, options);
60
+ const result = await resolveTypeScriptConstantValue(repo, symbolName, { ...options, index });
57
61
  matches.push(...normalizeMatches(result.matches, "typescript"));
58
62
  }
59
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"constant-resolution-tools.js","sourceRoot":"","sources":["../../src/tools/constant-resolution-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constant-resolution-tools.js","sourceRoot":"","sources":["../../src/tools/constant-resolution-tools.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index-tools.d.ts","sourceRoot":"","sources":["../../src/tools/index-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index-tools.d.ts","sourceRoot":"","sources":["../../src/tools/index-tools.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ import { extractSqlSymbols, stripJinjaTokens } from "../parser/extractors/sql.js
10
10
  import { getLanguageForExtension, getLanguageForPath } from "../parser/parser-manager.js";
11
11
  import { saveIndex, loadIndex, loadIndexOrStale, getIndexPath, saveIncremental, removeFileFromIndex } from "../storage/index-store.js";
12
12
  import { clearTsconfigCache } from "../utils/tsconfig-paths.js";
13
- import { registerRepo, listRepos as listRegistryRepos, getRepo, removeRepo, getRepoName, updateRepoMeta } from "../storage/registry.js";
13
+ import { registerRepo, listRepos as listRegistryRepos, getRepo, removeRepo, getRepoName, updateRepoMeta, resolveRegisteredRepoMeta } from "../storage/registry.js";
14
14
  import { startWatcher, stopWatcher } from "../storage/watcher.js";
15
15
  import { buildBM25Index } from "../search/bm25.js";
16
16
  import { buildSymbolText, createEmbeddingProvider } from "../search/semantic.js";
@@ -759,12 +759,14 @@ export async function indexFile(filePath) {
759
759
  }
760
760
  const startTime = Date.now();
761
761
  const relPath = relative(matchingRepo.root, absPath);
762
- // If the changed file is a tsconfig.json, drop the path resolver cache so
763
- // subsequent symbol/import extraction sees the new alias mappings. Without
764
- // this, file-watcher-driven incremental indexing would keep using the cached
765
- // matcher from the last index_folder run.
766
- if (basename(absPath) === "tsconfig.json") {
767
- clearTsconfigCache();
762
+ // If the changed file is a TS/JS config that drives path resolution, drop
763
+ // caches so incremental indexing picks up new `paths` / `extends`.
764
+ {
765
+ const cfg = basename(absPath).toLowerCase();
766
+ if ((cfg.startsWith("tsconfig") || cfg.startsWith("jsconfig")) &&
767
+ cfg.endsWith(".json")) {
768
+ clearTsconfigCache();
769
+ }
768
770
  }
769
771
  // mtime check — skip if unchanged
770
772
  const existing = await loadIndex(matchingRepo.index_path);
@@ -937,53 +939,27 @@ export async function getBM25Index(repoName) {
937
939
  * Get the code index for a repo from disk. Auto-refreshes if git HEAD moved.
938
940
  */
939
941
  export async function getCodeIndex(repoName, options) {
940
- // Resolve empty/missing repo name: try CWD-based name, then single-repo fallback
941
- let resolved = repoName;
942
- if (!resolved) {
943
- resolved = getRepoName(process.cwd());
944
- }
945
942
  const config = loadConfig();
946
- let meta = await getRepo(config.registryPath, resolved);
947
- if (!meta && !repoName) {
948
- // CWD-based name didn't match — search all repos by root path
949
- const cwd = process.cwd();
950
- const allRepos = await listRegistryRepos(config.registryPath);
951
- const byRoot = allRepos.find((r) => r.root === cwd);
952
- if (byRoot) {
953
- resolved = byRoot.name;
954
- meta = byRoot;
955
- }
956
- else if (allRepos.length === 1) {
957
- // Single-repo fallback
958
- resolved = allRepos[0].name;
959
- meta = allRepos[0];
960
- }
961
- }
962
- if (!meta)
943
+ const resolved = await resolveRegisteredRepoMeta(config.registryPath, repoName);
944
+ if (!resolved)
963
945
  return null;
964
- // skipFreshness=true bypasses git-diff + reindex of changed files.
965
- // Use only for read-only status/metadata queries where stale data is OK.
946
+ const { resolvedName, meta } = resolved;
966
947
  if (!options?.skipFreshness) {
967
- await ensureIndexFresh(resolved);
948
+ await ensureIndexFresh(resolvedName);
968
949
  }
969
- const cached = codeIndexes.get(resolved);
950
+ const cached = codeIndexes.get(resolvedName);
970
951
  if (cached)
971
952
  return cached;
972
- // Use loadIndexOrStale so version mismatches surface a structured signal
973
- // instead of being silently coerced to null. Tool wrappers can pattern-match
974
- // on `result.status === "stale"` and route to staleToMcpError. Existing
975
- // callers that still receive a plain CodeIndex|null get null on stale and
976
- // a logged warning so the silent regression is observable.
977
953
  const result = await loadIndexOrStale(meta.index_path, { ...EXTRACTOR_VERSIONS });
978
954
  if (!result)
979
955
  return null;
980
956
  if (result.status === "stale") {
981
- console.warn(`[codesift] stale index for ${resolved}: extractor_version_mismatch ` +
957
+ console.warn(`[codesift] stale index for ${resolvedName}: extractor_version_mismatch ` +
982
958
  `(${result.language} expected ${result.expected_version}, got ${result.actual_version}). ` +
983
959
  `Run index_folder to refresh.`);
984
960
  return null;
985
961
  }
986
- codeIndexes.set(repoName, result.index);
962
+ codeIndexes.set(resolvedName, result.index);
987
963
  return result.index;
988
964
  }
989
965
  /**