@ninjaxtools/slopdex 0.19.0 → 0.20.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.
- package/.gitignore +2 -0
- package/README.md +134 -46
- package/binary-install.js +348 -0
- package/binary.js +124 -0
- package/install.js +4 -0
- package/npm-shrinkwrap.json +52 -0
- package/package.json +78 -61
- package/run-slopdex.js +4 -0
- package/dist/chunk-5BO2LLXC.js +0 -15
- package/dist/chunk-5BO2LLXC.js.map +0 -1
- package/dist/chunk-BXWO2KMC.js +0 -20
- package/dist/chunk-BXWO2KMC.js.map +0 -1
- package/dist/chunk-DKRB2XT5.js +0 -33
- package/dist/chunk-DKRB2XT5.js.map +0 -1
- package/dist/chunk-DTI7SXGL.js +0 -109
- package/dist/chunk-DTI7SXGL.js.map +0 -1
- package/dist/chunk-GBEJHETS.js +0 -1117
- package/dist/chunk-GBEJHETS.js.map +0 -1
- package/dist/chunk-HMKVMRLF.js +0 -2221
- package/dist/chunk-HMKVMRLF.js.map +0 -1
- package/dist/chunk-IQU3YVZ3.js +0 -85
- package/dist/chunk-IQU3YVZ3.js.map +0 -1
- package/dist/chunk-JAVPHCZH.js +0 -24
- package/dist/chunk-JAVPHCZH.js.map +0 -1
- package/dist/chunk-MKUTTXZB.js +0 -74
- package/dist/chunk-MKUTTXZB.js.map +0 -1
- package/dist/chunk-OIKBO3NJ.js +0 -133
- package/dist/chunk-OIKBO3NJ.js.map +0 -1
- package/dist/chunk-P57ZJREE.js +0 -426
- package/dist/chunk-P57ZJREE.js.map +0 -1
- package/dist/chunk-S225GYCL.js +0 -79
- package/dist/chunk-S225GYCL.js.map +0 -1
- package/dist/chunk-TSURHRFF.js +0 -240
- package/dist/chunk-TSURHRFF.js.map +0 -1
- package/dist/chunk-VH5VGRCI.js +0 -103
- package/dist/chunk-VH5VGRCI.js.map +0 -1
- package/dist/cli.d.ts +0 -1
- package/dist/cli.js +0 -1130
- package/dist/cli.js.map +0 -1
- package/dist/code-index-MWSJKV3G.js +0 -14
- package/dist/code-index-MWSJKV3G.js.map +0 -1
- package/dist/cross-search-ERBFC25T.js +0 -10
- package/dist/cross-search-ERBFC25T.js.map +0 -1
- package/dist/database-P5XWJWQL.js +0 -14
- package/dist/database-P5XWJWQL.js.map +0 -1
- package/dist/hosted-GHIUHKOU.js +0 -13
- package/dist/hosted-GHIUHKOU.js.map +0 -1
- package/dist/index.d.ts +0 -681
- package/dist/index.js +0 -102
- package/dist/index.js.map +0 -1
- package/dist/jina-43RL7C6M.js +0 -12
- package/dist/jina-43RL7C6M.js.map +0 -1
- package/dist/openai-CYUPNBGB.js +0 -12
- package/dist/openai-CYUPNBGB.js.map +0 -1
- package/dist/openai-EC6THXKV.js +0 -21
- package/dist/openai-EC6THXKV.js.map +0 -1
- package/dist/openai-TCRXM66O.js +0 -11
- package/dist/openai-TCRXM66O.js.map +0 -1
- package/docs/implementation.md +0 -162
- package/docs/reference.md +0 -187
package/binary.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
const { Package } = require("./binary-install");
|
|
2
|
+
const os = require("os");
|
|
3
|
+
const libc = require("detect-libc");
|
|
4
|
+
|
|
5
|
+
const error = (msg) => {
|
|
6
|
+
console.error(msg);
|
|
7
|
+
process.exit(1);
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const {
|
|
11
|
+
name,
|
|
12
|
+
artifactDownloadUrls,
|
|
13
|
+
supportedPlatforms,
|
|
14
|
+
glibcMinimum,
|
|
15
|
+
} = require("./package.json");
|
|
16
|
+
|
|
17
|
+
// FIXME: implement NPM installer handling of fallback download URLs
|
|
18
|
+
const artifactDownloadUrl = artifactDownloadUrls[0];
|
|
19
|
+
const builderGlibcMajorVersion = glibcMinimum.major;
|
|
20
|
+
const builderGlibcMinorVersion = glibcMinimum.series;
|
|
21
|
+
|
|
22
|
+
const getPlatform = () => {
|
|
23
|
+
const rawOsType = os.type();
|
|
24
|
+
const rawArchitecture = os.arch();
|
|
25
|
+
|
|
26
|
+
// We want to use rust-style target triples as the canonical key
|
|
27
|
+
// for a platform, so translate the "os" library's concepts into rust ones
|
|
28
|
+
let osType = "";
|
|
29
|
+
switch (rawOsType) {
|
|
30
|
+
case "Windows_NT":
|
|
31
|
+
osType = "pc-windows-msvc";
|
|
32
|
+
break;
|
|
33
|
+
case "Darwin":
|
|
34
|
+
osType = "apple-darwin";
|
|
35
|
+
break;
|
|
36
|
+
case "Linux":
|
|
37
|
+
osType = "unknown-linux-gnu";
|
|
38
|
+
break;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
let arch = "";
|
|
42
|
+
switch (rawArchitecture) {
|
|
43
|
+
case "x64":
|
|
44
|
+
arch = "x86_64";
|
|
45
|
+
break;
|
|
46
|
+
case "arm64":
|
|
47
|
+
arch = "aarch64";
|
|
48
|
+
break;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
if (rawOsType === "Linux") {
|
|
52
|
+
if (libc.familySync() == "musl") {
|
|
53
|
+
osType = "unknown-linux-musl-dynamic";
|
|
54
|
+
} else if (libc.isNonGlibcLinuxSync()) {
|
|
55
|
+
console.warn(
|
|
56
|
+
"Your libc is neither glibc nor musl; trying static musl binary instead",
|
|
57
|
+
);
|
|
58
|
+
osType = "unknown-linux-musl-static";
|
|
59
|
+
} else {
|
|
60
|
+
let libcVersion = libc.versionSync();
|
|
61
|
+
let splitLibcVersion = libcVersion.split(".");
|
|
62
|
+
let libcMajorVersion = splitLibcVersion[0];
|
|
63
|
+
let libcMinorVersion = splitLibcVersion[1];
|
|
64
|
+
if (
|
|
65
|
+
libcMajorVersion != builderGlibcMajorVersion ||
|
|
66
|
+
libcMinorVersion < builderGlibcMinorVersion
|
|
67
|
+
) {
|
|
68
|
+
// We can't run the glibc binaries, but we can run the static musl ones
|
|
69
|
+
// if they exist
|
|
70
|
+
console.warn(
|
|
71
|
+
"Your glibc isn't compatible; trying static musl binary instead",
|
|
72
|
+
);
|
|
73
|
+
osType = "unknown-linux-musl-static";
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Assume the above succeeded and build a target triple to look things up with.
|
|
79
|
+
// If any of it failed, this lookup will fail and we'll handle it like normal.
|
|
80
|
+
let targetTriple = `${arch}-${osType}`;
|
|
81
|
+
let platform = supportedPlatforms[targetTriple];
|
|
82
|
+
|
|
83
|
+
if (!platform) {
|
|
84
|
+
error(
|
|
85
|
+
`Platform with type "${rawOsType}" and architecture "${rawArchitecture}" is not supported by ${name}.\nYour system must be one of the following:\n\n${Object.keys(
|
|
86
|
+
supportedPlatforms,
|
|
87
|
+
).join(",")}`,
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return platform;
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
const getPackage = () => {
|
|
95
|
+
const platform = getPlatform();
|
|
96
|
+
const url = `${artifactDownloadUrl}/${platform.artifactName}`;
|
|
97
|
+
let filename = platform.artifactName;
|
|
98
|
+
let ext = platform.zipExt;
|
|
99
|
+
let binary = new Package(platform, name, url, filename, ext, platform.bins);
|
|
100
|
+
|
|
101
|
+
return binary;
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
const install = (suppressLogs) => {
|
|
105
|
+
if (!artifactDownloadUrl || artifactDownloadUrl.length === 0) {
|
|
106
|
+
console.warn("in demo mode, not installing binaries");
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const pkg = getPackage();
|
|
110
|
+
|
|
111
|
+
return pkg.install(suppressLogs);
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
const run = (binaryName) => {
|
|
115
|
+
const pkg = getPackage();
|
|
116
|
+
|
|
117
|
+
pkg.run(binaryName);
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
module.exports = {
|
|
121
|
+
install,
|
|
122
|
+
run,
|
|
123
|
+
getPackage,
|
|
124
|
+
};
|
package/install.js
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lockfileVersion": 3,
|
|
3
|
+
"name": "@ninjaxtools/slopdex",
|
|
4
|
+
"packages": {
|
|
5
|
+
"": {
|
|
6
|
+
"bin": {
|
|
7
|
+
"slopdex": "run-slopdex.js"
|
|
8
|
+
},
|
|
9
|
+
"dependencies": {
|
|
10
|
+
"detect-libc": "^2.1.2"
|
|
11
|
+
},
|
|
12
|
+
"devDependencies": {
|
|
13
|
+
"prettier": "^3.8.3"
|
|
14
|
+
},
|
|
15
|
+
"engines": {
|
|
16
|
+
"node": ">=14.14",
|
|
17
|
+
"npm": ">=6"
|
|
18
|
+
},
|
|
19
|
+
"hasInstallScript": true,
|
|
20
|
+
"license": "MIT",
|
|
21
|
+
"name": "@ninjaxtools/slopdex",
|
|
22
|
+
"version": "0.20.0"
|
|
23
|
+
},
|
|
24
|
+
"node_modules/detect-libc": {
|
|
25
|
+
"engines": {
|
|
26
|
+
"node": ">=8"
|
|
27
|
+
},
|
|
28
|
+
"integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
|
|
29
|
+
"license": "Apache-2.0",
|
|
30
|
+
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
|
|
31
|
+
"version": "2.1.2"
|
|
32
|
+
},
|
|
33
|
+
"node_modules/prettier": {
|
|
34
|
+
"bin": {
|
|
35
|
+
"prettier": "bin/prettier.cjs"
|
|
36
|
+
},
|
|
37
|
+
"dev": true,
|
|
38
|
+
"engines": {
|
|
39
|
+
"node": ">=14"
|
|
40
|
+
},
|
|
41
|
+
"funding": {
|
|
42
|
+
"url": "https://github.com/prettier/prettier?sponsor=1"
|
|
43
|
+
},
|
|
44
|
+
"integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==",
|
|
45
|
+
"license": "MIT",
|
|
46
|
+
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz",
|
|
47
|
+
"version": "3.8.3"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"requires": true,
|
|
51
|
+
"version": "0.20.0"
|
|
52
|
+
}
|
package/package.json
CHANGED
|
@@ -1,71 +1,88 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
"type": "git",
|
|
8
|
-
"url": "https://github.com/ninjaxtools/slopdex.git"
|
|
2
|
+
"artifactDownloadUrls": [
|
|
3
|
+
"https://github.com/ninjaxtools/slopdex/releases/download/v0.20.0"
|
|
4
|
+
],
|
|
5
|
+
"bin": {
|
|
6
|
+
"slopdex": "run-slopdex.js"
|
|
9
7
|
},
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
"types": "dist/index.d.ts",
|
|
13
|
-
"exports": {
|
|
14
|
-
".": {
|
|
15
|
-
"types": "./dist/index.d.ts",
|
|
16
|
-
"import": "./dist/index.js"
|
|
17
|
-
}
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"detect-libc": "^2.1.2"
|
|
18
10
|
},
|
|
19
|
-
"
|
|
20
|
-
|
|
11
|
+
"description": "Semantic code and Markdown search with SQLite and USearch",
|
|
12
|
+
"devDependencies": {
|
|
13
|
+
"prettier": "^3.8.3"
|
|
21
14
|
},
|
|
22
|
-
"files": [
|
|
23
|
-
".agents/skills/slopdex/SKILL.md",
|
|
24
|
-
"dist",
|
|
25
|
-
"docs/implementation.md",
|
|
26
|
-
"docs/reference.md",
|
|
27
|
-
"README.md",
|
|
28
|
-
"scripts/install-opencode-skill.mjs"
|
|
29
|
-
],
|
|
30
15
|
"engines": {
|
|
31
|
-
"node": ">=
|
|
16
|
+
"node": ">=14.14",
|
|
17
|
+
"npm": ">=6"
|
|
18
|
+
},
|
|
19
|
+
"glibcMinimum": {
|
|
20
|
+
"major": 2,
|
|
21
|
+
"series": 39
|
|
32
22
|
},
|
|
23
|
+
"license": "MIT",
|
|
24
|
+
"name": "@ninjaxtools/slopdex",
|
|
25
|
+
"preferUnplugged": true,
|
|
26
|
+
"repository": "https://github.com/ninjaxtools/slopdex",
|
|
33
27
|
"scripts": {
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"test": "vitest",
|
|
38
|
-
"test:run": "vitest run",
|
|
39
|
-
"smoke": "node scripts/smoke.mjs",
|
|
40
|
-
"install:local": "npm run build && npm install -g .",
|
|
41
|
-
"publish:minor": "npm version minor && npm publish --access public",
|
|
42
|
-
"prepack": "npm run build && npm run smoke",
|
|
43
|
-
"check": "npm run typecheck && npm run test:run && npm run build && npm run smoke"
|
|
28
|
+
"fmt": "prettier --write **/*.js",
|
|
29
|
+
"fmt:check": "prettier --check **/*.js",
|
|
30
|
+
"postinstall": "node ./install.js"
|
|
44
31
|
},
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
"
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
"
|
|
61
|
-
|
|
62
|
-
|
|
32
|
+
"supportedPlatforms": {
|
|
33
|
+
"aarch64-apple-darwin": {
|
|
34
|
+
"artifactName": "slopdex-aarch64-apple-darwin.tar.xz",
|
|
35
|
+
"bins": {
|
|
36
|
+
"slopdex": "slopdex"
|
|
37
|
+
},
|
|
38
|
+
"zipExt": ".tar.xz"
|
|
39
|
+
},
|
|
40
|
+
"aarch64-pc-windows-msvc": {
|
|
41
|
+
"artifactName": "slopdex-x86_64-pc-windows-msvc.zip",
|
|
42
|
+
"bins": {
|
|
43
|
+
"slopdex": "slopdex.exe"
|
|
44
|
+
},
|
|
45
|
+
"zipExt": ".zip"
|
|
46
|
+
},
|
|
47
|
+
"aarch64-unknown-linux-gnu": {
|
|
48
|
+
"artifactName": "slopdex-aarch64-unknown-linux-gnu.tar.xz",
|
|
49
|
+
"bins": {
|
|
50
|
+
"slopdex": "slopdex"
|
|
51
|
+
},
|
|
52
|
+
"zipExt": ".tar.xz"
|
|
53
|
+
},
|
|
54
|
+
"x86_64-apple-darwin": {
|
|
55
|
+
"artifactName": "slopdex-x86_64-apple-darwin.tar.xz",
|
|
56
|
+
"bins": {
|
|
57
|
+
"slopdex": "slopdex"
|
|
58
|
+
},
|
|
59
|
+
"zipExt": ".tar.xz"
|
|
60
|
+
},
|
|
61
|
+
"x86_64-pc-windows-gnu": {
|
|
62
|
+
"artifactName": "slopdex-x86_64-pc-windows-msvc.zip",
|
|
63
|
+
"bins": {
|
|
64
|
+
"slopdex": "slopdex.exe"
|
|
65
|
+
},
|
|
66
|
+
"zipExt": ".zip"
|
|
67
|
+
},
|
|
68
|
+
"x86_64-pc-windows-msvc": {
|
|
69
|
+
"artifactName": "slopdex-x86_64-pc-windows-msvc.zip",
|
|
70
|
+
"bins": {
|
|
71
|
+
"slopdex": "slopdex.exe"
|
|
72
|
+
},
|
|
73
|
+
"zipExt": ".zip"
|
|
74
|
+
},
|
|
75
|
+
"x86_64-unknown-linux-gnu": {
|
|
76
|
+
"artifactName": "slopdex-x86_64-unknown-linux-gnu.tar.xz",
|
|
77
|
+
"bins": {
|
|
78
|
+
"slopdex": "slopdex"
|
|
79
|
+
},
|
|
80
|
+
"zipExt": ".tar.xz"
|
|
81
|
+
}
|
|
63
82
|
},
|
|
64
|
-
"
|
|
65
|
-
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"typescript": "^5.9.0",
|
|
69
|
-
"vitest": "^3.2.0"
|
|
83
|
+
"version": "0.20.0",
|
|
84
|
+
"volta": {
|
|
85
|
+
"node": "18.14.1",
|
|
86
|
+
"npm": "9.5.0"
|
|
70
87
|
}
|
|
71
|
-
}
|
|
88
|
+
}
|
package/run-slopdex.js
ADDED
package/dist/chunk-5BO2LLXC.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
// src/search/similarity.ts
|
|
2
|
-
var SIMILARITY_CACHE_FLOOR_ANCHOR = 0.3;
|
|
3
|
-
function similarityCacheFloor(minSimilarity) {
|
|
4
|
-
return Math.min(minSimilarity ?? -1, SIMILARITY_CACHE_FLOOR_ANCHOR);
|
|
5
|
-
}
|
|
6
|
-
function analysisSimilarity(source, target = source) {
|
|
7
|
-
const complete = (status) => status.descriptionsEnabled && status.descriptionProfile !== null && status.descriptionCount === status.functionCount && status.fileDescriptionCount === status.describableFileCount;
|
|
8
|
-
return complete(source) && complete(target) ? { similarityMode: "code-description-file-average", similarityWeights: { code: 1 / 3, description: 1 / 3, fileDescription: 1 / 3 } } : { similarityMode: "code", similarityWeights: { code: 1, description: 0, fileDescription: 0 } };
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export {
|
|
12
|
-
similarityCacheFloor,
|
|
13
|
-
analysisSimilarity
|
|
14
|
-
};
|
|
15
|
-
//# sourceMappingURL=chunk-5BO2LLXC.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/search/similarity.ts"],"sourcesContent":["import type { AnalysisSimilarity, IndexStatus } from \"../types.js\";\n\n/**\n * Floor the persisted similarity cache is routinely built for. Analysis entry\n * points anchor their refresh floor here unless the caller asks for less, so\n * sweeping thresholds at or above the default shares one cache band: higher\n * floors read it for free and only a lower floor triggers an expansion\n * recompute. Matches the CLI default threshold.\n */\nexport const SIMILARITY_CACHE_FLOOR_ANCHOR = 0.3;\n\n/** Anchor a requested refresh floor so threshold sweeps share one cache band. */\nexport function similarityCacheFloor(minSimilarity?: number): number {\n return Math.min(minSimilarity ?? -1, SIMILARITY_CACHE_FLOOR_ANCHOR);\n}\n\n/** Select one scoring mode for the entire analysis, never a per-pair fallback. */\nexport function analysisSimilarity(source: IndexStatus, target: IndexStatus = source): AnalysisSimilarity {\n const complete = (status: IndexStatus): boolean => status.descriptionsEnabled\n && status.descriptionProfile !== null\n && status.descriptionCount === status.functionCount\n && status.fileDescriptionCount === status.describableFileCount;\n return complete(source) && complete(target)\n ? { similarityMode: \"code-description-file-average\", similarityWeights: { code: 1 / 3, description: 1 / 3, fileDescription: 1 / 3 } }\n : { similarityMode: \"code\", similarityWeights: { code: 1, description: 0, fileDescription: 0 } };\n}\n"],"mappings":";AASO,IAAM,gCAAgC;AAGtC,SAAS,qBAAqB,eAAgC;AACnE,SAAO,KAAK,IAAI,iBAAiB,IAAI,6BAA6B;AACpE;AAGO,SAAS,mBAAmB,QAAqB,SAAsB,QAA4B;AACxG,QAAM,WAAW,CAAC,WAAiC,OAAO,uBACrD,OAAO,uBAAuB,QAC9B,OAAO,qBAAqB,OAAO,iBACnC,OAAO,yBAAyB,OAAO;AAC5C,SAAO,SAAS,MAAM,KAAK,SAAS,MAAM,IACtC,EAAE,gBAAgB,iCAAiC,mBAAmB,EAAE,MAAM,IAAI,GAAG,aAAa,IAAI,GAAG,iBAAiB,IAAI,EAAE,EAAE,IAClI,EAAE,gBAAgB,QAAQ,mBAAmB,EAAE,MAAM,GAAG,aAAa,GAAG,iBAAiB,EAAE,EAAE;AACnG;","names":[]}
|
package/dist/chunk-BXWO2KMC.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
writeStderr
|
|
3
|
-
} from "./chunk-S225GYCL.js";
|
|
4
|
-
|
|
5
|
-
// src/model-call-notice.ts
|
|
6
|
-
var reportedCalls = /* @__PURE__ */ new Set();
|
|
7
|
-
function reportModelCall(kind, profile, verbose = false, parallelism = 1) {
|
|
8
|
-
const key = JSON.stringify([kind, profile.provider, profile.model, parallelism]);
|
|
9
|
-
if (!verbose && reportedCalls.has(key)) return;
|
|
10
|
-
reportedCalls.add(key);
|
|
11
|
-
writeStderr(
|
|
12
|
-
`slopdex: notice: external model call: kind=${kind} provider=${JSON.stringify(profile.provider)} model=${JSON.stringify(profile.model)} parallelism=${parallelism}
|
|
13
|
-
`
|
|
14
|
-
);
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export {
|
|
18
|
-
reportModelCall
|
|
19
|
-
};
|
|
20
|
-
//# sourceMappingURL=chunk-BXWO2KMC.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/model-call-notice.ts"],"sourcesContent":["import { writeStderr } from \"./progress.js\";\n\nconst reportedCalls = new Set<string>();\n\nexport type ModelCallKind = \"vectors\" | \"descriptions\" | \"reranking\";\n\nexport function reportModelCall(\n kind: ModelCallKind,\n profile: { provider: string; model: string },\n verbose = false,\n parallelism = 1,\n): void {\n const key = JSON.stringify([kind, profile.provider, profile.model, parallelism]);\n if (!verbose && reportedCalls.has(key)) return;\n reportedCalls.add(key);\n writeStderr(\n `slopdex: notice: external model call: kind=${kind} provider=${JSON.stringify(profile.provider)} model=${JSON.stringify(profile.model)} parallelism=${parallelism}\\n`,\n );\n}\n"],"mappings":";;;;;AAEA,IAAM,gBAAgB,oBAAI,IAAY;AAI/B,SAAS,gBACd,MACA,SACA,UAAU,OACV,cAAc,GACR;AACN,QAAM,MAAM,KAAK,UAAU,CAAC,MAAM,QAAQ,UAAU,QAAQ,OAAO,WAAW,CAAC;AAC/E,MAAI,CAAC,WAAW,cAAc,IAAI,GAAG,EAAG;AACxC,gBAAc,IAAI,GAAG;AACrB;AAAA,IACE,8CAA8C,IAAI,aAAa,KAAK,UAAU,QAAQ,QAAQ,CAAC,UAAU,KAAK,UAAU,QAAQ,KAAK,CAAC,gBAAgB,WAAW;AAAA;AAAA,EACnK;AACF;","names":[]}
|
package/dist/chunk-DKRB2XT5.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
// src/errors.ts
|
|
2
|
-
var CodeIndexError = class extends Error {
|
|
3
|
-
constructor(message, options) {
|
|
4
|
-
super(message, options);
|
|
5
|
-
this.name = "CodeIndexError";
|
|
6
|
-
}
|
|
7
|
-
};
|
|
8
|
-
var GitDivergenceError = class extends CodeIndexError {
|
|
9
|
-
constructor(checkpoint, target) {
|
|
10
|
-
super(`Stored Git checkpoint ${checkpoint} is not an ancestor of ${target}; rebuild the index.`);
|
|
11
|
-
this.name = "GitDivergenceError";
|
|
12
|
-
}
|
|
13
|
-
};
|
|
14
|
-
var GitUnavailableError = class extends CodeIndexError {
|
|
15
|
-
constructor(message, options) {
|
|
16
|
-
super(message, options);
|
|
17
|
-
this.name = "GitUnavailableError";
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
var IncompatibleIndexError = class extends CodeIndexError {
|
|
21
|
-
constructor(message) {
|
|
22
|
-
super(message);
|
|
23
|
-
this.name = "IncompatibleIndexError";
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
export {
|
|
28
|
-
CodeIndexError,
|
|
29
|
-
GitDivergenceError,
|
|
30
|
-
GitUnavailableError,
|
|
31
|
-
IncompatibleIndexError
|
|
32
|
-
};
|
|
33
|
-
//# sourceMappingURL=chunk-DKRB2XT5.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts"],"sourcesContent":["export class CodeIndexError extends Error {\n public constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"CodeIndexError\";\n }\n}\n\nexport class GitDivergenceError extends CodeIndexError {\n public constructor(checkpoint: string, target: string) {\n super(`Stored Git checkpoint ${checkpoint} is not an ancestor of ${target}; rebuild the index.`);\n this.name = \"GitDivergenceError\";\n }\n}\n\nexport class GitUnavailableError extends CodeIndexError {\n public constructor(message: string, options?: ErrorOptions) {\n super(message, options);\n this.name = \"GitUnavailableError\";\n }\n}\n\nexport class IncompatibleIndexError extends CodeIndexError {\n public constructor(message: string) {\n super(message);\n this.name = \"IncompatibleIndexError\";\n }\n}\n"],"mappings":";AAAO,IAAM,iBAAN,cAA6B,MAAM;AAAA,EACjC,YAAY,SAAiB,SAAwB;AAC1D,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,qBAAN,cAAiC,eAAe;AAAA,EAC9C,YAAY,YAAoB,QAAgB;AACrD,UAAM,yBAAyB,UAAU,0BAA0B,MAAM,sBAAsB;AAC/F,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,sBAAN,cAAkC,eAAe;AAAA,EAC/C,YAAY,SAAiB,SAAwB;AAC1D,UAAM,SAAS,OAAO;AACtB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,yBAAN,cAAqC,eAAe;AAAA,EAClD,YAAY,SAAiB;AAClC,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;","names":[]}
|
package/dist/chunk-DTI7SXGL.js
DELETED
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
reportModelCall
|
|
3
|
-
} from "./chunk-BXWO2KMC.js";
|
|
4
|
-
import {
|
|
5
|
-
assertPositiveInteger,
|
|
6
|
-
throwIfAborted
|
|
7
|
-
} from "./chunk-VH5VGRCI.js";
|
|
8
|
-
import {
|
|
9
|
-
CodeIndexError
|
|
10
|
-
} from "./chunk-DKRB2XT5.js";
|
|
11
|
-
|
|
12
|
-
// src/rerankers/hosted.ts
|
|
13
|
-
var HostedReranker = class {
|
|
14
|
-
profile;
|
|
15
|
-
#apiKey;
|
|
16
|
-
#url;
|
|
17
|
-
#returnDocuments;
|
|
18
|
-
#verbose;
|
|
19
|
-
constructor(options, settings) {
|
|
20
|
-
this.#apiKey = options.apiKey ?? process.env[settings.apiKeyName] ?? "";
|
|
21
|
-
if (!this.#apiKey) throw new Error(`${settings.apiKeyName} is required.`);
|
|
22
|
-
const model = options.model ?? settings.defaultModel;
|
|
23
|
-
if (!model.trim()) throw new Error("reranker model must not be empty.");
|
|
24
|
-
this.profile = { provider: settings.provider, model };
|
|
25
|
-
this.#verbose = options.verbose ?? false;
|
|
26
|
-
const url = (options.baseUrl ?? settings.defaultUrl).replace(/\/$/, "");
|
|
27
|
-
this.#url = url.endsWith("/rerank") ? url : `${url}/rerank`;
|
|
28
|
-
this.#returnDocuments = settings.returnDocuments;
|
|
29
|
-
}
|
|
30
|
-
async rerank(query, documents, options = {}) {
|
|
31
|
-
if (documents.length === 0) return [];
|
|
32
|
-
const limit = options.limit ?? documents.length;
|
|
33
|
-
assertPositiveInteger(limit, "rerank limit");
|
|
34
|
-
throwIfAborted(options.signal);
|
|
35
|
-
reportModelCall("reranking", this.profile, this.#verbose);
|
|
36
|
-
let response;
|
|
37
|
-
try {
|
|
38
|
-
response = await fetch(this.#url, {
|
|
39
|
-
method: "POST",
|
|
40
|
-
headers: {
|
|
41
|
-
accept: "application/json",
|
|
42
|
-
authorization: `Bearer ${this.#apiKey}`,
|
|
43
|
-
"content-type": "application/json"
|
|
44
|
-
},
|
|
45
|
-
body: JSON.stringify({
|
|
46
|
-
model: this.profile.model,
|
|
47
|
-
query,
|
|
48
|
-
documents,
|
|
49
|
-
top_n: Math.min(limit, documents.length),
|
|
50
|
-
...this.#returnDocuments !== void 0 ? { return_documents: this.#returnDocuments } : {}
|
|
51
|
-
}),
|
|
52
|
-
...options.signal ? { signal: options.signal } : {}
|
|
53
|
-
});
|
|
54
|
-
} catch (error) {
|
|
55
|
-
if (options.signal?.aborted) throw error;
|
|
56
|
-
throw new CodeIndexError(`Reranking request failed: ${error instanceof Error ? error.message : String(error)}`, { cause: error });
|
|
57
|
-
}
|
|
58
|
-
if (!response.ok) {
|
|
59
|
-
throw new CodeIndexError(`Reranking request failed (${response.status}): ${(await response.text()).slice(0, 500)}`);
|
|
60
|
-
}
|
|
61
|
-
let body;
|
|
62
|
-
try {
|
|
63
|
-
body = await response.json();
|
|
64
|
-
} catch (error) {
|
|
65
|
-
throw new CodeIndexError(`${this.profile.provider} returned a malformed reranking response.`, { cause: error });
|
|
66
|
-
}
|
|
67
|
-
const results = body && typeof body === "object" && "results" in body ? body.results : void 0;
|
|
68
|
-
const expected = Math.min(limit, documents.length);
|
|
69
|
-
if (!Array.isArray(results) || results.length !== expected) {
|
|
70
|
-
throw new CodeIndexError(`${this.profile.provider} returned a malformed reranking response.`);
|
|
71
|
-
}
|
|
72
|
-
const seen = /* @__PURE__ */ new Set();
|
|
73
|
-
return results.map((result) => {
|
|
74
|
-
const value = result;
|
|
75
|
-
if (!result || typeof result !== "object" || !Number.isInteger(value.index) || value.index < 0 || value.index >= documents.length || typeof value.relevance_score !== "number" || !Number.isFinite(value.relevance_score) || seen.has(value.index)) {
|
|
76
|
-
throw new CodeIndexError(`${this.profile.provider} returned a malformed reranking response.`);
|
|
77
|
-
}
|
|
78
|
-
seen.add(value.index);
|
|
79
|
-
return { index: value.index, score: value.relevance_score };
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
};
|
|
83
|
-
var CohereReranker = class extends HostedReranker {
|
|
84
|
-
constructor(options = {}) {
|
|
85
|
-
super(options, {
|
|
86
|
-
provider: "cohere",
|
|
87
|
-
apiKeyName: "COHERE_API_KEY",
|
|
88
|
-
defaultModel: "rerank-v4.0-pro",
|
|
89
|
-
defaultUrl: "https://api.cohere.com/v2"
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
var JinaReranker = class extends HostedReranker {
|
|
94
|
-
constructor(options = {}) {
|
|
95
|
-
super(options, {
|
|
96
|
-
provider: "jina",
|
|
97
|
-
apiKeyName: "JINA_API_KEY",
|
|
98
|
-
defaultModel: "jina-reranker-v3.5",
|
|
99
|
-
defaultUrl: "https://api.jina.ai/v1",
|
|
100
|
-
returnDocuments: false
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
|
|
105
|
-
export {
|
|
106
|
-
CohereReranker,
|
|
107
|
-
JinaReranker
|
|
108
|
-
};
|
|
109
|
-
//# sourceMappingURL=chunk-DTI7SXGL.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/rerankers/hosted.ts"],"sourcesContent":["import { CodeIndexError } from \"../errors.js\";\nimport { reportModelCall } from \"../model-call-notice.js\";\nimport type { Reranker } from \"../types.js\";\nimport { assertPositiveInteger, throwIfAborted } from \"../utils.js\";\n\ninterface HostedRerankerOptions {\n apiKey?: string;\n model?: string;\n baseUrl?: string;\n verbose?: boolean;\n}\n\ninterface HostedRerankerSettings {\n provider: \"cohere\" | \"jina\";\n apiKeyName: \"COHERE_API_KEY\" | \"JINA_API_KEY\";\n defaultModel: string;\n defaultUrl: string;\n returnDocuments?: boolean;\n}\n\nabstract class HostedReranker implements Reranker {\n public readonly profile;\n readonly #apiKey: string;\n readonly #url: string;\n readonly #returnDocuments: boolean | undefined;\n readonly #verbose: boolean;\n\n protected constructor(options: HostedRerankerOptions, settings: HostedRerankerSettings) {\n this.#apiKey = options.apiKey ?? process.env[settings.apiKeyName] ?? \"\";\n if (!this.#apiKey) throw new Error(`${settings.apiKeyName} is required.`);\n const model = options.model ?? settings.defaultModel;\n if (!model.trim()) throw new Error(\"reranker model must not be empty.\");\n this.profile = { provider: settings.provider, model } as const;\n this.#verbose = options.verbose ?? false;\n const url = (options.baseUrl ?? settings.defaultUrl).replace(/\\/$/, \"\");\n this.#url = url.endsWith(\"/rerank\") ? url : `${url}/rerank`;\n this.#returnDocuments = settings.returnDocuments;\n }\n\n public async rerank(\n query: string,\n documents: readonly string[],\n options: { limit?: number; signal?: AbortSignal } = {},\n ): Promise<Array<{ index: number; score: number }>> {\n if (documents.length === 0) return [];\n const limit = options.limit ?? documents.length;\n assertPositiveInteger(limit, \"rerank limit\");\n throwIfAborted(options.signal);\n reportModelCall(\"reranking\", this.profile, this.#verbose);\n let response: Response;\n try {\n response = await fetch(this.#url, {\n method: \"POST\",\n headers: {\n accept: \"application/json\",\n authorization: `Bearer ${this.#apiKey}`,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({\n model: this.profile.model,\n query,\n documents,\n top_n: Math.min(limit, documents.length),\n ...(this.#returnDocuments !== undefined ? { return_documents: this.#returnDocuments } : {}),\n }),\n ...(options.signal ? { signal: options.signal } : {}),\n });\n } catch (error) {\n if (options.signal?.aborted) throw error;\n throw new CodeIndexError(`Reranking request failed: ${error instanceof Error ? error.message : String(error)}`, { cause: error });\n }\n if (!response.ok) {\n throw new CodeIndexError(`Reranking request failed (${response.status}): ${(await response.text()).slice(0, 500)}`);\n }\n let body: unknown;\n try {\n body = await response.json();\n } catch (error) {\n throw new CodeIndexError(`${this.profile.provider} returned a malformed reranking response.`, { cause: error });\n }\n const results = body && typeof body === \"object\" && \"results\" in body\n ? (body as { results?: unknown }).results\n : undefined;\n const expected = Math.min(limit, documents.length);\n if (!Array.isArray(results) || results.length !== expected) {\n throw new CodeIndexError(`${this.profile.provider} returned a malformed reranking response.`);\n }\n const seen = new Set<number>();\n return results.map((result) => {\n const value = result as { index?: unknown; relevance_score?: unknown };\n if (!result || typeof result !== \"object\"\n || !Number.isInteger(value.index) || (value.index as number) < 0 || (value.index as number) >= documents.length\n || typeof value.relevance_score !== \"number\" || !Number.isFinite(value.relevance_score)\n || seen.has(value.index as number)) {\n throw new CodeIndexError(`${this.profile.provider} returned a malformed reranking response.`);\n }\n seen.add(value.index as number);\n return { index: value.index as number, score: value.relevance_score };\n });\n }\n}\n\nexport type CohereRerankerOptions = HostedRerankerOptions;\n\nexport class CohereReranker extends HostedReranker {\n public constructor(options: CohereRerankerOptions = {}) {\n super(options, {\n provider: \"cohere\",\n apiKeyName: \"COHERE_API_KEY\",\n defaultModel: \"rerank-v4.0-pro\",\n defaultUrl: \"https://api.cohere.com/v2\",\n });\n }\n}\n\nexport type JinaRerankerOptions = HostedRerankerOptions;\n\nexport class JinaReranker extends HostedReranker {\n public constructor(options: JinaRerankerOptions = {}) {\n super(options, {\n provider: \"jina\",\n apiKeyName: \"JINA_API_KEY\",\n defaultModel: \"jina-reranker-v3.5\",\n defaultUrl: \"https://api.jina.ai/v1\",\n returnDocuments: false,\n });\n }\n}\n"],"mappings":"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","names":[]}
|