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.
- package/dist/cli/commands/ensure-indexed.js +77 -58
- package/dist/cli/commands/ensure-indexed.js.map +1 -1
- package/dist/cli/commands/index.js +29 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.js +49 -45
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/skills.js +128 -28
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/uninstall.d.ts +1 -0
- package/dist/cli/commands/uninstall.js +32 -26
- package/dist/cli/commands/uninstall.js.map +1 -1
- package/dist/cli/entry.js +19 -10
- package/dist/cli/entry.js.map +1 -1
- package/dist/core/lock.d.ts +10 -0
- package/dist/core/lock.js +93 -0
- package/dist/core/lock.js.map +1 -0
- package/dist/core/update-check.js +5 -5
- package/dist/core/update-check.js.map +1 -1
- package/dist/core/version-check.d.ts +12 -0
- package/dist/core/version-check.js +79 -0
- package/dist/core/version-check.js.map +1 -0
- package/dist/engine/indexer.js +6 -3
- package/dist/engine/indexer.js.map +1 -1
- package/dist/languages/typescript.d.ts +1 -0
- package/dist/languages/typescript.js +60 -16
- package/dist/languages/typescript.js.map +1 -1
- package/dist/storage/sqlite.d.ts +1 -0
- package/dist/storage/sqlite.js +27 -13
- package/dist/storage/sqlite.js.map +1 -1
- package/dist/storage/vectors.js +34 -29
- package/dist/storage/vectors.js.map +1 -1
- package/package.json +3 -1
|
@@ -31,33 +31,133 @@ const SKILL_DEFINITIONS = [
|
|
|
31
31
|
{
|
|
32
32
|
name: "semantic-search",
|
|
33
33
|
directory: "semantic-search",
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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":";;;
|
|
1
|
+
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/cli/commands/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
|
109
|
-
const dataDir = node_path_1.default.join(
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
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
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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,
|
|
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("
|
|
15
|
-
const
|
|
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.
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
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
|
-
(
|
|
63
|
+
main();
|
|
55
64
|
//# sourceMappingURL=entry.js.map
|
package/dist/cli/entry.js.map
CHANGED
|
@@ -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,
|
|
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("
|
|
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.
|
|
46
|
-
showUpdateNotification(version_js_1.
|
|
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.
|
|
54
|
-
showUpdateNotification(version_js_1.
|
|
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":";;AAiDA,0CAqBC;AAtED,qCAA6E;AAC7E,yCAAiC;AACjC,qCAAkC;AAClC,
|
|
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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"}
|