indexer-cli 0.4.2 → 0.6.1

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.
@@ -31,33 +31,133 @@ const SKILL_DEFINITIONS = [
31
31
  {
32
32
  name: "semantic-search",
33
33
  directory: "semantic-search",
34
- description: `FIRST choice for CONCEPT and BEHAVIOR questions like "how is quiz scoring calculated" or "what happens on subscription cancel". Do NOT use for keyword/identifier lookups — use grep instead. If the search term is also a code identifier (entity name, class name, variable name), this is the WRONG tool.`,
35
- heading: "Use semantic-search for implementation hunting",
36
- useWhen: "Use this when the agent already knows it needs semantic search results, not a tree or architecture map.",
37
- focusHint: "Keep the prompt short and centered on the code concept to find.",
38
- allowedTools: ["Bash(npx indexer-cli search:*)"],
39
- rules: [
40
- `**2-4 domain-specific words**: "how claim prize", "billing webhook", "quiz scoring"`,
41
- `Do NOT write long queries with synonyms — it dilutes ranking.`,
42
- "Prefer compact JSON fields first; include content only after the right chunk is found.",
43
- "Use --path-prefix or --chunk-types when you already know the likely area.",
44
- ],
45
- skipWhen: [
46
- "You need a file tree or symbol inventory instead of search results",
47
- "You already know the exact file and line range to inspect",
48
- ],
49
- commandSamples: [
50
- 'npx indexer-cli search "<query>"',
51
- 'npx indexer-cli search "<query>" --path-prefix src/<area>',
52
- 'npx indexer-cli search "<query>" --chunk-types impl,types',
53
- ],
54
- cliReference: [
55
- "Positional args: <query>.",
56
- "Options: --max-files <number>, --path-prefix <string>, --chunk-types <string>, --fields <list>, --min-score <number>, --include-content, --include-imports.",
57
- "Allowed --chunk-types values: full_file, imports, preamble, declaration, module_section, impl, types.",
58
- "Imports/preamble chunks are excluded by default; use --include-imports to include them.",
59
- "Allowed --fields values: filePath, startLine, endLine, score, primarySymbol, content.",
60
- ],
34
+ rawContent: `---
35
+ name: semantic-search
36
+ description:
37
+ FIRST choice for CONCEPT and BEHAVIOR questions — "how is scoring calculated", "what happens on order cancel", "what if a user stops paying", "how does the system handle expired subscriptions", "lifecycle of a payment", "flow when X fails". Use BEFORE spawning explore agents for these questions — it traces cross-module behavior that grep misses. Do NOT use for keyword/identifier lookups (use grep/ast-grep instead). If the search term is a code identifier (class name, variable name, function name), this is the WRONG tool — use symbol-explain or grep instead.
38
+ allowed-tools: Bash(npx indexer-cli search:*)
39
+ ---
40
+
41
+ # Use semantic-search for implementation hunting
42
+
43
+ Use when semantic search is already the right tool.
44
+ Keep the query short and centered on one code concept.
45
+
46
+ ## Mandatory rules
47
+
48
+ ### 1) Search count
49
+
50
+ - 1 search per question
51
+ - Max 2 only if the second is a truly different angle
52
+ - If search 1 answers the question: STOP
53
+
54
+ Never run 3+ overlapping searches.
55
+
56
+ ### 2) Query shape
57
+
58
+ Use 1-3 domain-specific words. No synonyms.
59
+
60
+ Pick the single best concept word. Add words only to narrow scope.
61
+
62
+ - ✅ \`prize\`
63
+ - ✅ \`password reset\`
64
+ - ✅ \`rate limiting\`
65
+ - ❌ \`prize reward award\`
66
+ - ❌ \`chapter pass percent quiz result score\`
67
+ - ❌ \`order cancel payment failure refund\`
68
+
69
+ ### 3) Two-phase retrieval — ALWAYS
70
+
71
+ #### Phase 1: Discover
72
+
73
+ Search without \`--include-content\`, with \`--fields filePath,startLine,endLine,primarySymbol\`.
74
+
75
+ \`\`\`bash
76
+ npx indexer-cli search "prize" --fields filePath,startLine,endLine,primarySymbol
77
+ \`\`\`
78
+
79
+ #### Phase 2: Read
80
+
81
+ Use the Read tool on the exact files and line ranges from Phase 1.
82
+
83
+ Do NOT:
84
+
85
+ - run another semantic search for the same concept
86
+ - grep the same concept
87
+ - grep terms revealed by Phase 1
88
+ - replace reading with \`--include-content\`
89
+
90
+ ### Hard stop after Phase 1
91
+
92
+ If Phase 1 returned useful file paths and ranges, read them.
93
+
94
+ Only if Phase 1 returns nothing useful, do one fallback:
95
+
96
+ - one alternative semantic query, or
97
+ - grep
98
+
99
+ ### 4) \`--include-content\` is rare
100
+
101
+ Use it only for a quick scan when you expect fewer than 5 results.
102
+
103
+ ### 5) Narrow early with \`--path-prefix\`
104
+
105
+ If you know the subsystem, add \`--path-prefix\`.
106
+
107
+ \`\`\`bash
108
+ npx indexer-cli search "password reset" --path-prefix src/auth --fields filePath,startLine,endLine,primarySymbol
109
+ \`\`\`
110
+
111
+ ## Skip when
112
+
113
+ - you need a file tree or symbol inventory
114
+ - you already know the exact file and line range
115
+ - the query is an identifier; use grep/LSP/symbol-explain instead
116
+
117
+ ## Command patterns
118
+
119
+ \`\`\`bash
120
+ # Phase 1: discover
121
+ npx indexer-cli search "rate limiting" --fields filePath,startLine,endLine,primarySymbol
122
+ npx indexer-cli search "password reset" --path-prefix src/auth --fields filePath,startLine,endLine,primarySymbol
123
+
124
+ # Phase 2: Read returned files/lines with Read tool
125
+
126
+ # Rare exception: inline content when expecting <5 hits
127
+ npx indexer-cli search "input validation" --include-content --max-files 3
128
+ \`\`\`
129
+
130
+ ## CLI reference
131
+
132
+ - Positional args: \`<query>\`
133
+ - Options: \`--max-files\`, \`--path-prefix\`, \`--chunk-types\`, \`--fields\`, \`--min-score\`, \`--include-content\`,
134
+ \`--include-imports\`
135
+
136
+ ### Allowed \`--chunk-types\`
137
+
138
+ \`full_file\`, \`imports\`, \`preamble\`, \`declaration\`, \`module_section\`, \`impl\`, \`types\`
139
+
140
+ Imports and preamble are excluded by default. Use \`--include-imports\` to include them.
141
+
142
+ ### Allowed \`--fields\`
143
+
144
+ \`filePath\`, \`startLine\`, \`endLine\`, \`score\`, \`primarySymbol\`, \`content\`
145
+
146
+ ## Anti-patterns
147
+
148
+ - ❌ 3+ overlapping searches
149
+ - ❌ broad searches with \`--include-content\`
150
+ - ❌ long synonym-heavy queries
151
+ - ❌ re-searching after Phase 1 already found the locations
152
+ - ❌ grepping the same concept after semantic search already found it
153
+ - ❌ loading this skill via \`skill\` when you already know the \`indexer-cli\` command
154
+ `,
155
+ description: "",
156
+ heading: "",
157
+ useWhen: "",
158
+ allowedTools: [],
159
+ rules: [],
160
+ commandSamples: [],
61
161
  },
62
162
  {
63
163
  name: "repo-structure",
@@ -202,7 +302,7 @@ const SKILL_DEFINITIONS = [
202
302
  exports.GENERATED_SKILLS = SKILL_DEFINITIONS.map((definition) => ({
203
303
  name: definition.name,
204
304
  directory: definition.directory,
205
- content: renderSkill(definition),
305
+ content: definition.rawContent ?? renderSkill(definition),
206
306
  }));
207
307
  exports.DEPRECATED_SKILL_DIRECTORIES = ["context-pack"];
208
308
  exports.GENERATED_SKILL_DIRECTORIES = exports.GENERATED_SKILLS.map((skill) => skill.directory);
@@ -1 +1 @@
1
- {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
1
  import type { Command } from "commander";
2
+ export declare function performUninstall(projectRoot: string): Promise<void>;
2
3
  export declare function registerUninstallCommand(program: Command): void;
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.performUninstall = performUninstall;
6
7
  exports.registerUninstallCommand = registerUninstallCommand;
7
8
  const node_fs_1 = require("node:fs");
8
9
  const promises_1 = require("node:fs/promises");
@@ -98,6 +99,18 @@ async function removePostCommitHook(projectRoot) {
98
99
  console.log(`Cleaned ${hookPath}`);
99
100
  }
100
101
  }
102
+ async function performUninstall(projectRoot) {
103
+ const dataDir = node_path_1.default.join(projectRoot, ".indexer-cli");
104
+ if (!(await pathExists(dataDir))) {
105
+ console.log(`Nothing to remove at ${dataDir}`);
106
+ return;
107
+ }
108
+ await (0, promises_1.rm)(dataDir, { recursive: true, force: true });
109
+ console.log(`Removed ${dataDir}`);
110
+ await removeClaudeSkill(projectRoot);
111
+ await removeFromGitignore(projectRoot, [".indexer-cli/", ".claude/"]);
112
+ await removePostCommitHook(projectRoot);
113
+ }
101
114
  function registerUninstallCommand(program) {
102
115
  program
103
116
  .command("uninstall")
@@ -105,34 +118,27 @@ function registerUninstallCommand(program) {
105
118
  .addHelpText("after", `\n${help_text_js_1.PROJECT_ROOT_COMMAND_HELP}\n`)
106
119
  .option("-f, --force", "Skip confirmation prompt")
107
120
  .action(async (options) => {
108
- const resolvedProjectPath = process.cwd();
109
- const dataDir = node_path_1.default.join(resolvedProjectPath, ".indexer-cli");
110
- try {
111
- if (!(await pathExists(dataDir))) {
112
- console.log(`Nothing to remove at ${dataDir}`);
113
- return;
114
- }
115
- if (!options.force) {
116
- const rl = (0, promises_2.createInterface)({ input: node_process_1.stdin, output: node_process_1.stdout });
117
- try {
118
- const answer = await rl.question(`Delete ${dataDir}? [y/N] `);
119
- if (!/^y(es)?$/i.test(answer.trim())) {
120
- console.log("Uninstall cancelled.");
121
- return;
122
- }
123
- }
124
- finally {
125
- rl.close();
121
+ const projectRoot = process.cwd();
122
+ const dataDir = node_path_1.default.join(projectRoot, ".indexer-cli");
123
+ if (!(await pathExists(dataDir))) {
124
+ console.log(`Nothing to remove at ${dataDir}`);
125
+ return;
126
+ }
127
+ if (!options.force) {
128
+ const rl = (0, promises_2.createInterface)({ input: node_process_1.stdin, output: node_process_1.stdout });
129
+ try {
130
+ const answer = await rl.question(`Delete ${dataDir}? [y/N] `);
131
+ if (!/^y(es)?$/i.test(answer.trim())) {
132
+ console.log("Uninstall cancelled.");
133
+ return;
126
134
  }
127
135
  }
128
- await (0, promises_1.rm)(dataDir, { recursive: true, force: true });
129
- console.log(`Removed ${dataDir}`);
130
- await removeClaudeSkill(resolvedProjectPath);
131
- await removeFromGitignore(resolvedProjectPath, [
132
- ".indexer-cli/",
133
- ".claude/",
134
- ]);
135
- await removePostCommitHook(resolvedProjectPath);
136
+ finally {
137
+ rl.close();
138
+ }
139
+ }
140
+ try {
141
+ await performUninstall(projectRoot);
136
142
  }
137
143
  catch (error) {
138
144
  const message = error instanceof Error ? error.message : String(error);
@@ -1 +1 @@
1
- {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../src/cli/commands/uninstall.ts"],"names":[],"mappings":";;;;;AA0HA,4DA6CC;AAvKD,qCAAmD;AACnD,+CAO0B;AAC1B,0DAA6B;AAC7B,+CAAgE;AAChE,qDAAyD;AAEzD,kDAA4D;AAC5D,2CAGqB;AAErB,MAAM,iBAAiB,GAAG,uBAAuB,CAAC;AAClD,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD,KAAK,UAAU,UAAU,CAAC,UAAkB;IAC3C,IAAI,CAAC;QACJ,MAAM,IAAA,iBAAM,EAAC,UAAU,EAAE,mBAAW,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAAe;IACxC,MAAM,OAAO,GAAG,MAAM,IAAA,kBAAO,EAAC,OAAO,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IACnD,KAAK,MAAM,cAAc,IAAI;QAC5B,GAAG,uCAA2B;QAC9B,GAAG,wCAA4B;KAC/B,EAAE,CAAC;QACH,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CACzB,WAAW,EACX,SAAS,EACT,QAAQ,EACR,cAAc,CACd,CAAC;QACF,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChC,MAAM,IAAA,aAAE,EAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC;QACpC,CAAC;IACF,CAAC;IAED,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC9D,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC;YACJ,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAA,aAAE,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACvD,CAAC;QACF,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;IAED,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACpD,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC;YACJ,IAAI,MAAM,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACjC,MAAM,IAAA,aAAE,EAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;YAC3C,CAAC;QACF,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACX,CAAC;AACF,CAAC;AAED,KAAK,UAAU,mBAAmB,CACjC,WAAmB,EACnB,OAAiB;IAEjB,MAAM,aAAa,GAAG,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;IAC3D,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,CAAC;QAAE,OAAO;IAE/C,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAEpE,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QACpE,QAAQ,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IACD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAElB,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QAC7B,MAAM,IAAA,oBAAS,EAAC,aAAa,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,WAAW,aAAa,EAAE,CAAC,CAAC;IACzC,CAAC;AACF,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IACtD,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACxE,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC;QAAE,OAAO;IAE1C,MAAM,OAAO,GAAG,MAAM,IAAA,mBAAQ,EAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEjD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAAE,OAAO;IAEjD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAChD,IAAI,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO;IAE1B,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAClE,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC;IACtD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAEjE,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,EAAE,KAAK,WAAW,EAAE,CAAC;QAC7D,MAAM,IAAA,iBAAM,EAAC,QAAQ,CAAC,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC;IACpC,CAAC;SAAM,CAAC;QACP,MAAM,IAAA,oBAAS,EAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,EAAE,CAAC,CAAC;IACpC,CAAC;AACF,CAAC;AAED,SAAgB,wBAAwB,CAAC,OAAgB;IACxD,OAAO;SACL,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,mCAAmC,CAAC;SAChD,WAAW,CAAC,OAAO,EAAE,KAAK,wCAAyB,IAAI,CAAC;SACxD,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC9C,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;QAE/D,IAAI,CAAC;YACJ,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;gBAC/C,OAAO;YACR,CAAC;YAED,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBACpB,MAAM,EAAE,GAAG,IAAA,0BAAe,EAAC,EAAE,KAAK,EAAL,oBAAK,EAAE,MAAM,EAAN,qBAAM,EAAE,CAAC,CAAC;gBAE9C,IAAI,CAAC;oBACJ,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,OAAO,UAAU,CAAC,CAAC;oBAC9D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;wBACtC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;wBACpC,OAAO;oBACR,CAAC;gBACF,CAAC;wBAAS,CAAC;oBACV,EAAE,CAAC,KAAK,EAAE,CAAC;gBACZ,CAAC;YACF,CAAC;YAED,MAAM,IAAA,aAAE,EAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;YAElC,MAAM,iBAAiB,CAAC,mBAAmB,CAAC,CAAC;YAC7C,MAAM,mBAAmB,CAAC,mBAAmB,EAAE;gBAC9C,eAAe;gBACf,UAAU;aACV,CAAC,CAAC;YACH,MAAM,oBAAoB,CAAC,mBAAmB,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,qBAAqB,OAAO,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACtB,CAAC;IACF,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../../src/cli/commands/uninstall.ts"],"names":[],"mappings":"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"}
package/dist/cli/entry.js CHANGED
@@ -11,9 +11,10 @@ const setup_js_1 = require("./commands/setup.js");
11
11
  const context_js_1 = require("./commands/context.js");
12
12
  const explain_js_1 = require("./commands/explain.js");
13
13
  const deps_js_1 = require("./commands/deps.js");
14
- const version_js_1 = require("./version.js");
15
- const update_check_js_1 = require("../core/update-check.js");
14
+ const version_js_1 = require("../core/version.js");
15
+ const version_check_js_1 = require("../core/version-check.js");
16
16
  const help_text_js_1 = require("./help-text.js");
17
+ const SKIP_MIGRATION_COMMANDS = new Set(["setup", "init", "uninstall"]);
17
18
  const HANDLED_COMMANDER_EXIT_CODES = new Set([
18
19
  "commander.helpDisplayed",
19
20
  "commander.help",
@@ -30,7 +31,7 @@ function isHandledCommanderExit(error) {
30
31
  commander_1.program
31
32
  .name("indexer-cli")
32
33
  .description("Lightweight project indexer with semantic search. Run project commands from the root of the target project; `setup` can run anywhere.")
33
- .version(version_js_1.VERSION)
34
+ .version(version_js_1.PACKAGE_VERSION)
34
35
  .addHelpText("after", `\n${help_text_js_1.PROJECT_ROOT_PROGRAM_HELP}\n`)
35
36
  .exitOverride();
36
37
  (0, setup_js_1.registerSetupCommand)(commander_1.program);
@@ -43,13 +44,21 @@ commander_1.program
43
44
  (0, explain_js_1.registerExplainCommand)(commander_1.program);
44
45
  (0, deps_js_1.registerDepsCommand)(commander_1.program);
45
46
  (0, uninstall_js_1.registerUninstallCommand)(commander_1.program);
46
- try {
47
- commander_1.program.parse();
48
- }
49
- catch (error) {
50
- if (!isHandledCommanderExit(error)) {
51
- throw error;
47
+ commander_1.program.hook("preAction", async (thisCommand, actionCommand) => {
48
+ const commandName = actionCommand.name();
49
+ if (!SKIP_MIGRATION_COMMANDS.has(commandName)) {
50
+ await (0, version_check_js_1.checkAndMigrateIfNeeded)();
51
+ }
52
+ });
53
+ async function main() {
54
+ try {
55
+ await commander_1.program.parseAsync();
56
+ }
57
+ catch (error) {
58
+ if (!isHandledCommanderExit(error)) {
59
+ throw error;
60
+ }
52
61
  }
53
62
  }
54
- (0, update_check_js_1.checkForUpdates)().catch(() => { });
63
+ main();
55
64
  //# sourceMappingURL=entry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/cli/entry.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,gDAAyD;AACzD,kDAA2D;AAC3D,oDAA6D;AAC7D,0DAAmE;AACnE,gEAAyE;AACzE,0DAAmE;AACnE,kDAA2D;AAC3D,sDAA+D;AAC/D,sDAA+D;AAC/D,gDAAyD;AACzD,6CAAuC;AACvC,6DAA0D;AAC1D,iDAA2D;AAE3D,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC;IAC5C,yBAAyB;IACzB,gBAAgB;IAChB,mBAAmB;IACnB,0BAA0B;CAC1B,CAAC,CAAC;AAEH,SAAS,sBAAsB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED,mBAAO;KACL,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CACX,uIAAuI,CACvI;KACA,OAAO,CAAC,oBAAO,CAAC;KAChB,WAAW,CAAC,OAAO,EAAE,KAAK,wCAAyB,IAAI,CAAC;KACxD,YAAY,EAAE,CAAC;AACjB,IAAA,+BAAoB,EAAC,mBAAO,CAAC,CAAC;AAC9B,IAAA,6BAAmB,EAAC,mBAAO,CAAC,CAAC;AAC7B,IAAA,+BAAoB,EAAC,mBAAO,CAAC,CAAC;AAC9B,IAAA,iCAAqB,EAAC,mBAAO,CAAC,CAAC;AAC/B,IAAA,uCAAwB,EAAC,mBAAO,CAAC,CAAC;AAClC,IAAA,6CAA2B,EAAC,mBAAO,CAAC,CAAC;AACrC,IAAA,mCAAsB,EAAC,mBAAO,CAAC,CAAC;AAChC,IAAA,mCAAsB,EAAC,mBAAO,CAAC,CAAC;AAChC,IAAA,6BAAmB,EAAC,mBAAO,CAAC,CAAC;AAC7B,IAAA,uCAAwB,EAAC,mBAAO,CAAC,CAAC;AAElC,IAAI,CAAC;IACJ,mBAAO,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC;AAAC,OAAO,KAAc,EAAE,CAAC;IACzB,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,KAAK,CAAC;IACb,CAAC;AACF,CAAC;AAED,IAAA,iCAAe,GAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/cli/entry.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,gDAAyD;AACzD,kDAA2D;AAC3D,oDAA6D;AAC7D,0DAAmE;AACnE,gEAAyE;AACzE,0DAAmE;AACnE,kDAA2D;AAC3D,sDAA+D;AAC/D,sDAA+D;AAC/D,gDAAyD;AACzD,mDAAqD;AACrD,+DAAmE;AACnE,iDAA2D;AAE3D,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;AAExE,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC;IAC5C,yBAAyB;IACzB,gBAAgB;IAChB,mBAAmB;IACnB,0BAA0B;CAC1B,CAAC,CAAC;AAEH,SAAS,sBAAsB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC;QACvE,OAAO,KAAK,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3E,CAAC;AAED,mBAAO;KACL,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CACX,uIAAuI,CACvI;KACA,OAAO,CAAC,4BAAe,CAAC;KACxB,WAAW,CAAC,OAAO,EAAE,KAAK,wCAAyB,IAAI,CAAC;KACxD,YAAY,EAAE,CAAC;AAEjB,IAAA,+BAAoB,EAAC,mBAAO,CAAC,CAAC;AAC9B,IAAA,6BAAmB,EAAC,mBAAO,CAAC,CAAC;AAC7B,IAAA,+BAAoB,EAAC,mBAAO,CAAC,CAAC;AAC9B,IAAA,iCAAqB,EAAC,mBAAO,CAAC,CAAC;AAC/B,IAAA,uCAAwB,EAAC,mBAAO,CAAC,CAAC;AAClC,IAAA,6CAA2B,EAAC,mBAAO,CAAC,CAAC;AACrC,IAAA,mCAAsB,EAAC,mBAAO,CAAC,CAAC;AAChC,IAAA,mCAAsB,EAAC,mBAAO,CAAC,CAAC;AAChC,IAAA,6BAAmB,EAAC,mBAAO,CAAC,CAAC;AAC7B,IAAA,uCAAwB,EAAC,mBAAO,CAAC,CAAC;AAElC,mBAAO,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,EAAE;IAC9D,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAA,0CAAuB,GAAE,CAAC;IACjC,CAAC;AACF,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IAClB,IAAI,CAAC;QACJ,MAAM,mBAAO,CAAC,UAAU,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACzB,IAAI,CAAC,sBAAsB,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,MAAM,KAAK,CAAC;QACb,CAAC;IACF,CAAC;AACF,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { SqliteMetadataStore } from "../storage/sqlite.js";
2
+ export declare function acquireIndexLock(projectRoot: string, options?: {
3
+ waitMs?: number;
4
+ retryIntervalMs?: number;
5
+ staleMs?: number;
6
+ }): Promise<() => Promise<void>>;
7
+ export declare function getActiveIndexingInfo(metadata: SqliteMetadataStore, projectId: string): Promise<{
8
+ snapshotId: string;
9
+ startedAt: number;
10
+ } | null>;
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.acquireIndexLock = acquireIndexLock;
40
+ exports.getActiveIndexingInfo = getActiveIndexingInfo;
41
+ const node_path_1 = __importDefault(require("node:path"));
42
+ const lockfile = __importStar(require("proper-lockfile"));
43
+ const logger_js_1 = require("./logger.js");
44
+ const logger = new logger_js_1.SystemLogger("lock");
45
+ const LOCK_DIR = ".indexer-cli";
46
+ const LOCK_FILE = "indexer.lock";
47
+ const DEFAULT_STALE_MS = 10 * 60 * 1000;
48
+ async function acquireIndexLock(projectRoot, options) {
49
+ const lockDir = node_path_1.default.join(projectRoot, LOCK_DIR);
50
+ const staleMs = options?.staleMs ?? DEFAULT_STALE_MS;
51
+ const lockOptions = {
52
+ stale: staleMs,
53
+ update: 10_000,
54
+ onCompromised: (err) => {
55
+ logger.error("[lock] Lock compromised! Another process may be indexing concurrently.", {
56
+ message: err.message,
57
+ });
58
+ process.exit(1);
59
+ },
60
+ retries: options?.waitMs
61
+ ? {
62
+ retries: Math.ceil(options.waitMs / (options.retryIntervalMs ?? 1000)),
63
+ minTimeout: options.retryIntervalMs ?? 1000,
64
+ maxTimeout: options.retryIntervalMs ?? 1000,
65
+ }
66
+ : 0,
67
+ };
68
+ try {
69
+ const release = await lockfile.lock(lockDir, {
70
+ ...lockOptions,
71
+ lockfilePath: node_path_1.default.join(lockDir, LOCK_FILE),
72
+ });
73
+ logger.info("[lock] Acquired index lock");
74
+ return release;
75
+ }
76
+ catch (error) {
77
+ const message = error instanceof Error ? error.message : String(error);
78
+ throw new Error(`Indexing is already in progress by another process. ` +
79
+ `Wait for it to finish. If stale, remove ${LOCK_DIR}/${LOCK_FILE}. ` +
80
+ `(${message})`);
81
+ }
82
+ }
83
+ async function getActiveIndexingInfo(metadata, projectId) {
84
+ const snapshot = await metadata.getLatestSnapshot(projectId);
85
+ if (snapshot?.status === "indexing") {
86
+ return {
87
+ snapshotId: snapshot.id,
88
+ startedAt: snapshot.createdAt,
89
+ };
90
+ }
91
+ return null;
92
+ }
93
+ //# sourceMappingURL=lock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lock.js","sourceRoot":"","sources":["../../src/core/lock.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,4CAiDC;AACD,sDAaC;AA3ED,0DAA6B;AAC7B,0DAA4C;AAE5C,2CAA2C;AAE3C,MAAM,MAAM,GAAG,IAAI,wBAAY,CAAC,MAAM,CAAC,CAAC;AAExC,MAAM,QAAQ,GAAG,cAAc,CAAC;AAChC,MAAM,SAAS,GAAG,cAAc,CAAC;AAEjC,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEjC,KAAK,UAAU,gBAAgB,CACrC,WAAmB,EACnB,OAIC;IAED,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,gBAAgB,CAAC;IAErD,MAAM,WAAW,GAAyB;QACzC,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,MAAM;QACd,aAAa,EAAE,CAAC,GAAU,EAAE,EAAE;YAC7B,MAAM,CAAC,KAAK,CACX,wEAAwE,EACxE;gBACC,OAAO,EAAE,GAAG,CAAC,OAAO;aACpB,CACD,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,MAAM;YACvB,CAAC,CAAC;gBACA,OAAO,EAAE,IAAI,CAAC,IAAI,CACjB,OAAO,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,CAClD;gBACD,UAAU,EAAE,OAAO,CAAC,eAAe,IAAI,IAAI;gBAC3C,UAAU,EAAE,OAAO,CAAC,eAAe,IAAI,IAAI;aAC3C;YACF,CAAC,CAAC,CAAC;KACJ,CAAC;IAEF,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE;YAC5C,GAAG,WAAW;YACd,YAAY,EAAE,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC;SAC3C,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,IAAI,KAAK,CACd,sDAAsD;YACrD,2CAA2C,QAAQ,IAAI,SAAS,IAAI;YACpE,IAAI,OAAO,GAAG,CACf,CAAC;IACH,CAAC;AACF,CAAC;AACM,KAAK,UAAU,qBAAqB,CAC1C,QAA6B,EAC7B,SAAiB;IAEjB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAC7D,IAAI,QAAQ,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;QACrC,OAAO;YACN,UAAU,EAAE,QAAQ,CAAC,EAAE;YACvB,SAAS,EAAE,QAAQ,CAAC,SAAS;SAC7B,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC"}
@@ -4,7 +4,7 @@ exports.checkForUpdates = checkForUpdates;
4
4
  const node_fs_1 = require("node:fs");
5
5
  const node_path_1 = require("node:path");
6
6
  const node_os_1 = require("node:os");
7
- const version_js_1 = require("../cli/version.js");
7
+ const version_js_1 = require("./version.js");
8
8
  const CACHE_FILE = (0, node_path_1.join)((0, node_os_1.homedir)(), ".indexer-cli", ".update-check.json");
9
9
  const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
10
10
  async function fetchLatestVersion() {
@@ -42,16 +42,16 @@ async function checkForUpdates() {
42
42
  const cache = readCache();
43
43
  const now = Date.now();
44
44
  if (cache && now - cache.lastChecked < CHECK_INTERVAL_MS) {
45
- if (isNewerVersion(version_js_1.VERSION, cache.latestVersion)) {
46
- showUpdateNotification(version_js_1.VERSION, cache.latestVersion);
45
+ if (isNewerVersion(version_js_1.PACKAGE_VERSION, cache.latestVersion)) {
46
+ showUpdateNotification(version_js_1.PACKAGE_VERSION, cache.latestVersion);
47
47
  }
48
48
  return;
49
49
  }
50
50
  try {
51
51
  const latest = await fetchLatestVersion();
52
52
  writeCache({ lastChecked: now, latestVersion: latest });
53
- if (isNewerVersion(version_js_1.VERSION, latest)) {
54
- showUpdateNotification(version_js_1.VERSION, latest);
53
+ if (isNewerVersion(version_js_1.PACKAGE_VERSION, latest)) {
54
+ showUpdateNotification(version_js_1.PACKAGE_VERSION, latest);
55
55
  }
56
56
  }
57
57
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/core/update-check.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/core/update-check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Parse a version string into [major, minor, patch].
3
+ * Returns null if the string is not a valid semver-like version.
4
+ */
5
+ export declare function parseSemver(version: string): [number, number, number] | null;
6
+ /**
7
+ * Compare CLI version with config version.
8
+ * If major.minor differs, run uninstall + init to re-sync.
9
+ *
10
+ * @returns true if migration was performed, false otherwise
11
+ */
12
+ export declare function checkAndMigrateIfNeeded(): Promise<boolean>;
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.parseSemver = parseSemver;
7
+ exports.checkAndMigrateIfNeeded = checkAndMigrateIfNeeded;
8
+ const node_fs_1 = require("node:fs");
9
+ const node_path_1 = __importDefault(require("node:path"));
10
+ const version_js_1 = require("./version.js");
11
+ const uninstall_js_1 = require("../cli/commands/uninstall.js");
12
+ const init_js_1 = require("../cli/commands/init.js");
13
+ /**
14
+ * Parse a version string into [major, minor, patch].
15
+ * Returns null if the string is not a valid semver-like version.
16
+ */
17
+ function parseSemver(version) {
18
+ const parts = version.split(".");
19
+ if (parts.length !== 3)
20
+ return null;
21
+ const [major, minor, patch] = parts.map(Number);
22
+ if (Number.isNaN(major) || Number.isNaN(minor) || Number.isNaN(patch)) {
23
+ return null;
24
+ }
25
+ return [major, minor, patch];
26
+ }
27
+ /**
28
+ * Compare CLI version with config version.
29
+ * If major.minor differs, run uninstall + init to re-sync.
30
+ *
31
+ * @returns true if migration was performed, false otherwise
32
+ */
33
+ async function checkAndMigrateIfNeeded() {
34
+ const projectRoot = process.cwd();
35
+ const configPath = node_path_1.default.join(projectRoot, ".indexer-cli", "config.json");
36
+ if (!(0, node_fs_1.existsSync)(configPath)) {
37
+ return false;
38
+ }
39
+ let configVersion;
40
+ try {
41
+ const raw = (0, node_fs_1.readFileSync)(configPath, "utf8");
42
+ const parsed = JSON.parse(raw);
43
+ if (typeof parsed !== "object" ||
44
+ parsed === null ||
45
+ !("version" in parsed) ||
46
+ typeof parsed.version !== "string") {
47
+ return false;
48
+ }
49
+ configVersion = parsed.version;
50
+ }
51
+ catch {
52
+ return false;
53
+ }
54
+ const current = parseSemver(version_js_1.PACKAGE_VERSION);
55
+ const stored = parseSemver(configVersion);
56
+ if (!current || !stored)
57
+ return false;
58
+ // Compare major.minor (release line). Patch changes are skipped.
59
+ if (current[0] === stored[0] && current[1] === stored[1]) {
60
+ return false;
61
+ }
62
+ console.log(`indexer-cli: version changed (${configVersion} → ${version_js_1.PACKAGE_VERSION}). Re-initializing project data...`);
63
+ console.log(" Removing .indexer-cli/...");
64
+ try {
65
+ await (0, uninstall_js_1.performUninstall)(projectRoot);
66
+ console.log(" Re-initializing...");
67
+ await (0, init_js_1.performInit)(projectRoot);
68
+ console.log("indexer-cli: migration complete.");
69
+ return true;
70
+ }
71
+ catch (error) {
72
+ const message = error instanceof Error ? error.message : String(error);
73
+ console.error(`indexer-cli: migration failed: ${message}`);
74
+ console.error(" Run manually: indexer-cli uninstall -f && indexer-cli init");
75
+ process.exitCode = 1;
76
+ return false;
77
+ }
78
+ }
79
+ //# sourceMappingURL=version-check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-check.js","sourceRoot":"","sources":["../../src/core/version-check.ts"],"names":[],"mappings":"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"}