ctxloom-pro 1.7.6 → 1.7.7
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/README.md
CHANGED
|
@@ -69,7 +69,7 @@ The full first-run flow is **one install + one trial + one init per project.** E
|
|
|
69
69
|
npm install -g ctxloom-pro
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
-
> **For local trial / dev use the unpinned command above is fine.** For unattended CI usage, pin to the exact version (`ctxloom-pro@1.7.
|
|
72
|
+
> **For local trial / dev use the unpinned command above is fine.** For unattended CI usage, pin to the exact version (`ctxloom-pro@1.7.7`) so future CLI releases don't silently desync your agent-spec coverage — see the workflow example below.
|
|
73
73
|
|
|
74
74
|
### 2 — Start your free trial (once per email)
|
|
75
75
|
|
|
@@ -383,7 +383,7 @@ jobs:
|
|
|
383
383
|
# Exact pin (not `@^1`) so future CLI releases that add/remove MCP
|
|
384
384
|
# tools don't silently desync your reviewer-agent specs. Bump on
|
|
385
385
|
# every release; see CHANGELOG.md for the live version table.
|
|
386
|
-
- run: npm install -g ctxloom-pro@1.7.
|
|
386
|
+
- run: npm install -g ctxloom-pro@1.7.7
|
|
387
387
|
- run: ctxloom index
|
|
388
388
|
- run: ctxloom rules check --json
|
|
389
389
|
```
|
|
@@ -2929,7 +2929,7 @@ var CallGraphIndex = class _CallGraphIndex {
|
|
|
2929
2929
|
var TS_EXTENSIONS2 = /* @__PURE__ */ new Set([".ts", ".tsx", ".js", ".jsx", ".mjs", ".vue"]);
|
|
2930
2930
|
var PY_EXTENSIONS = /* @__PURE__ */ new Set([".py", ".ipynb"]);
|
|
2931
2931
|
var AST_EXTENSIONS = /* @__PURE__ */ new Set([".ts", ".tsx", ".js", ".jsx", ".mjs", ".py", ".go", ".rs", ".java", ".cs", ".rb", ".kt", ".kts", ".swift", ".ipynb", ".php", ".dart"]);
|
|
2932
|
-
var CTXLOOM_VERSION = "1.7.
|
|
2932
|
+
var CTXLOOM_VERSION = "1.7.7".length > 0 ? "1.7.7" : "dev";
|
|
2933
2933
|
var SNAPSHOT_SCHEMA_VERSION = 2;
|
|
2934
2934
|
function compareCtxloomVersions(snapshotVer, currentVer) {
|
|
2935
2935
|
if (snapshotVer === currentVer) return "same";
|
|
@@ -3112,6 +3112,7 @@ var DependencyGraph = class {
|
|
|
3112
3112
|
});
|
|
3113
3113
|
this.symbolIndex.set(node.name, existing);
|
|
3114
3114
|
}
|
|
3115
|
+
this.indexClassMethods(node, relPath);
|
|
3115
3116
|
}
|
|
3116
3117
|
if (TS_EXTENSIONS2.has(ext)) {
|
|
3117
3118
|
const callEdges = await this.parser.parseAllCallEdges(absPath);
|
|
@@ -3331,6 +3332,36 @@ var DependencyGraph = class {
|
|
|
3331
3332
|
getImporters(fileRel) {
|
|
3332
3333
|
return Array.from(this.reverseEdges.get(fileRel) ?? []);
|
|
3333
3334
|
}
|
|
3335
|
+
/**
|
|
3336
|
+
* Register each class method as its own symbol-index entry.
|
|
3337
|
+
*
|
|
3338
|
+
* TS/JS class methods are parsed as `methodRanges` on the class node,
|
|
3339
|
+
* not as standalone `method` nodes — so the `node.type === 'method'`
|
|
3340
|
+
* branch in the symbol-indexing loops never fired for them. That left
|
|
3341
|
+
* methods (e.g. DependencyGraph.getRootDir) unfindable by
|
|
3342
|
+
* `lookupSymbol`, which is why `ctx_get_call_graph {symbol: aMethod}`
|
|
3343
|
+
* returned "Symbol not found" even though the call-graph snapshot had
|
|
3344
|
+
* edges for it. Indexing methods here closes that gap.
|
|
3345
|
+
*
|
|
3346
|
+
* No-op for nodes without methodRanges (functions, imports, etc.).
|
|
3347
|
+
*/
|
|
3348
|
+
indexClassMethods(node, relPath) {
|
|
3349
|
+
if (!node.methodRanges) return;
|
|
3350
|
+
for (const m of node.methodRanges) {
|
|
3351
|
+
if (!m.name) continue;
|
|
3352
|
+
const existing = this.symbolIndex.get(m.name) ?? [];
|
|
3353
|
+
existing.push({
|
|
3354
|
+
filePath: relPath,
|
|
3355
|
+
type: "method",
|
|
3356
|
+
signature: `method ${m.name}`,
|
|
3357
|
+
// MethodRange only carries the signature line; use it as the
|
|
3358
|
+
// start and fall back to the enclosing class's end for the range.
|
|
3359
|
+
startLine: m.signatureLine,
|
|
3360
|
+
endLine: node.endLine ?? m.signatureLine
|
|
3361
|
+
});
|
|
3362
|
+
this.symbolIndex.set(m.name, existing);
|
|
3363
|
+
}
|
|
3364
|
+
}
|
|
3334
3365
|
/**
|
|
3335
3366
|
* Look up a symbol by name. Returns all definitions across files.
|
|
3336
3367
|
*/
|
|
@@ -3518,6 +3549,7 @@ var DependencyGraph = class {
|
|
|
3518
3549
|
});
|
|
3519
3550
|
this.symbolIndex.set(node.name, existing);
|
|
3520
3551
|
}
|
|
3552
|
+
this.indexClassMethods(node, relPath);
|
|
3521
3553
|
}
|
|
3522
3554
|
if (TS_EXTENSIONS2.has(ext)) {
|
|
3523
3555
|
const callEdges = await this.parser.parseAllCallEdges(absPath);
|
|
@@ -12303,7 +12335,7 @@ function resolveTelemetryLevel() {
|
|
|
12303
12335
|
}
|
|
12304
12336
|
var TELEMETRY_LEVEL = resolveTelemetryLevel();
|
|
12305
12337
|
var TELEMETRY_DISABLED = TELEMETRY_LEVEL === "off";
|
|
12306
|
-
var CTXLOOM_VERSION2 = "1.7.
|
|
12338
|
+
var CTXLOOM_VERSION2 = "1.7.7".length > 0 ? "1.7.7" : "dev";
|
|
12307
12339
|
var POSTHOG_HOST = "https://eu.i.posthog.com";
|
|
12308
12340
|
var POSTHOG_KEY = process.env["POSTHOG_API_KEY"] ?? (true ? "phc_CiDkmFLcZ2K6uCpcoSUQLmFrnnUvsyXGhSxopX5TVKE6" : "");
|
|
12309
12341
|
var SENTRY_DSN = process.env["SENTRY_DSN"] ?? (true ? "https://81c94a0f04a8e242dee493ac1e17f733@o4508531702497280.ingest.de.sentry.io/4511256875368528" : "");
|
|
@@ -2705,7 +2705,7 @@ var CallGraphIndex = class _CallGraphIndex {
|
|
|
2705
2705
|
var TS_EXTENSIONS2 = /* @__PURE__ */ new Set([".ts", ".tsx", ".js", ".jsx", ".mjs", ".vue"]);
|
|
2706
2706
|
var PY_EXTENSIONS = /* @__PURE__ */ new Set([".py", ".ipynb"]);
|
|
2707
2707
|
var AST_EXTENSIONS = /* @__PURE__ */ new Set([".ts", ".tsx", ".js", ".jsx", ".mjs", ".py", ".go", ".rs", ".java", ".cs", ".rb", ".kt", ".kts", ".swift", ".ipynb", ".php", ".dart"]);
|
|
2708
|
-
var CTXLOOM_VERSION = "1.7.
|
|
2708
|
+
var CTXLOOM_VERSION = "1.7.7".length > 0 ? "1.7.7" : "dev";
|
|
2709
2709
|
var SNAPSHOT_SCHEMA_VERSION = 2;
|
|
2710
2710
|
function compareCtxloomVersions(snapshotVer, currentVer) {
|
|
2711
2711
|
if (snapshotVer === currentVer) return "same";
|
|
@@ -2888,6 +2888,7 @@ var DependencyGraph = class {
|
|
|
2888
2888
|
});
|
|
2889
2889
|
this.symbolIndex.set(node.name, existing);
|
|
2890
2890
|
}
|
|
2891
|
+
this.indexClassMethods(node, relPath);
|
|
2891
2892
|
}
|
|
2892
2893
|
if (TS_EXTENSIONS2.has(ext)) {
|
|
2893
2894
|
const callEdges = await this.parser.parseAllCallEdges(absPath);
|
|
@@ -3107,6 +3108,36 @@ var DependencyGraph = class {
|
|
|
3107
3108
|
getImporters(fileRel) {
|
|
3108
3109
|
return Array.from(this.reverseEdges.get(fileRel) ?? []);
|
|
3109
3110
|
}
|
|
3111
|
+
/**
|
|
3112
|
+
* Register each class method as its own symbol-index entry.
|
|
3113
|
+
*
|
|
3114
|
+
* TS/JS class methods are parsed as `methodRanges` on the class node,
|
|
3115
|
+
* not as standalone `method` nodes — so the `node.type === 'method'`
|
|
3116
|
+
* branch in the symbol-indexing loops never fired for them. That left
|
|
3117
|
+
* methods (e.g. DependencyGraph.getRootDir) unfindable by
|
|
3118
|
+
* `lookupSymbol`, which is why `ctx_get_call_graph {symbol: aMethod}`
|
|
3119
|
+
* returned "Symbol not found" even though the call-graph snapshot had
|
|
3120
|
+
* edges for it. Indexing methods here closes that gap.
|
|
3121
|
+
*
|
|
3122
|
+
* No-op for nodes without methodRanges (functions, imports, etc.).
|
|
3123
|
+
*/
|
|
3124
|
+
indexClassMethods(node, relPath) {
|
|
3125
|
+
if (!node.methodRanges) return;
|
|
3126
|
+
for (const m of node.methodRanges) {
|
|
3127
|
+
if (!m.name) continue;
|
|
3128
|
+
const existing = this.symbolIndex.get(m.name) ?? [];
|
|
3129
|
+
existing.push({
|
|
3130
|
+
filePath: relPath,
|
|
3131
|
+
type: "method",
|
|
3132
|
+
signature: `method ${m.name}`,
|
|
3133
|
+
// MethodRange only carries the signature line; use it as the
|
|
3134
|
+
// start and fall back to the enclosing class's end for the range.
|
|
3135
|
+
startLine: m.signatureLine,
|
|
3136
|
+
endLine: node.endLine ?? m.signatureLine
|
|
3137
|
+
});
|
|
3138
|
+
this.symbolIndex.set(m.name, existing);
|
|
3139
|
+
}
|
|
3140
|
+
}
|
|
3110
3141
|
/**
|
|
3111
3142
|
* Look up a symbol by name. Returns all definitions across files.
|
|
3112
3143
|
*/
|
|
@@ -3294,6 +3325,7 @@ var DependencyGraph = class {
|
|
|
3294
3325
|
});
|
|
3295
3326
|
this.symbolIndex.set(node.name, existing);
|
|
3296
3327
|
}
|
|
3328
|
+
this.indexClassMethods(node, relPath);
|
|
3297
3329
|
}
|
|
3298
3330
|
if (TS_EXTENSIONS2.has(ext)) {
|
|
3299
3331
|
const callEdges = await this.parser.parseAllCallEdges(absPath);
|
|
@@ -11110,7 +11142,7 @@ var TELEMETRY_DISABLED = TELEMETRY_LEVEL === "off";
|
|
|
11110
11142
|
function getTelemetryLevel() {
|
|
11111
11143
|
return TELEMETRY_LEVEL;
|
|
11112
11144
|
}
|
|
11113
|
-
var CTXLOOM_VERSION2 = "1.7.
|
|
11145
|
+
var CTXLOOM_VERSION2 = "1.7.7".length > 0 ? "1.7.7" : "dev";
|
|
11114
11146
|
var POSTHOG_HOST = "https://eu.i.posthog.com";
|
|
11115
11147
|
var POSTHOG_KEY = process.env["POSTHOG_API_KEY"] ?? (true ? "phc_CiDkmFLcZ2K6uCpcoSUQLmFrnnUvsyXGhSxopX5TVKE6" : "");
|
|
11116
11148
|
var SENTRY_DSN = process.env["SENTRY_DSN"] ?? (true ? "https://81c94a0f04a8e242dee493ac1e17f733@o4508531702497280.ingest.de.sentry.io/4511256875368528" : "");
|
|
@@ -12796,4 +12828,4 @@ export {
|
|
|
12796
12828
|
skillFilePath,
|
|
12797
12829
|
installHarness
|
|
12798
12830
|
};
|
|
12799
|
-
//# sourceMappingURL=chunk-
|
|
12831
|
+
//# sourceMappingURL=chunk-OEDNX3CV.js.map
|
package/dist/index.js
CHANGED
|
@@ -47,7 +47,7 @@ import {
|
|
|
47
47
|
validateDefaultRoot,
|
|
48
48
|
wrapWithIndexingEnvelope,
|
|
49
49
|
writeCODEOWNERS
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-OEDNX3CV.js";
|
|
51
51
|
import {
|
|
52
52
|
addCtxloomToConfig,
|
|
53
53
|
detectInstalledClients
|
|
@@ -1068,7 +1068,7 @@ try {
|
|
|
1068
1068
|
} catch {
|
|
1069
1069
|
}
|
|
1070
1070
|
var args = process.argv.slice(2);
|
|
1071
|
-
var ctxloomVersion = "1.7.
|
|
1071
|
+
var ctxloomVersion = "1.7.7".length > 0 ? "1.7.7" : "dev";
|
|
1072
1072
|
if (args.includes("--version") || args.includes("-v")) {
|
|
1073
1073
|
process.stdout.write(`ctxloom ${ctxloomVersion}
|
|
1074
1074
|
`);
|
|
@@ -1163,7 +1163,7 @@ async function checkLicense() {
|
|
|
1163
1163
|
if (command !== void 0 && LICENSE_GATE_BYPASS_COMMANDS.has(command)) return;
|
|
1164
1164
|
const ciKey = process.env["CTXLOOM_LICENSE_KEY"];
|
|
1165
1165
|
if (ciKey) {
|
|
1166
|
-
const { ApiClient } = await import("./src-
|
|
1166
|
+
const { ApiClient } = await import("./src-HFPCEHYB.js");
|
|
1167
1167
|
const client = new ApiClient(process.env["CTXLOOM_API_BASE"]);
|
|
1168
1168
|
try {
|
|
1169
1169
|
const result = await client.validate(ciKey, "ci-ephemeral");
|
|
@@ -1556,7 +1556,7 @@ async function main() {
|
|
|
1556
1556
|
}
|
|
1557
1557
|
if (!skipHarness) {
|
|
1558
1558
|
process.stdout.write("\n");
|
|
1559
|
-
const { installHarness } = await import("./src-
|
|
1559
|
+
const { installHarness } = await import("./src-HFPCEHYB.js");
|
|
1560
1560
|
const h = installHarness({ cwd: initRoot, dryRun, force, extraHosts });
|
|
1561
1561
|
const harnessFiles = [
|
|
1562
1562
|
h.claudeMd,
|
|
@@ -1619,7 +1619,7 @@ async function main() {
|
|
|
1619
1619
|
process.exit(1);
|
|
1620
1620
|
}
|
|
1621
1621
|
if (alias !== void 0) {
|
|
1622
|
-
const { validateAlias } = await import("./src-
|
|
1622
|
+
const { validateAlias } = await import("./src-HFPCEHYB.js");
|
|
1623
1623
|
const v = validateAlias(alias);
|
|
1624
1624
|
if (!v.ok) {
|
|
1625
1625
|
console.error(`[ctxloom] Invalid alias: ${v.reason}`);
|
|
@@ -1978,7 +1978,7 @@ Suggested reviewers for ${files.length} file(s):`);
|
|
|
1978
1978
|
process.stderr.write("[ctxloom] --limit must be a non-negative integer (0 for unlimited)\n");
|
|
1979
1979
|
process.exit(2);
|
|
1980
1980
|
}
|
|
1981
|
-
const { loadRulesConfig, RulesChecker, formatText, formatJson, RulesConfigError } = await import("./src-
|
|
1981
|
+
const { loadRulesConfig, RulesChecker, formatText, formatJson, RulesConfigError } = await import("./src-HFPCEHYB.js");
|
|
1982
1982
|
let config;
|
|
1983
1983
|
try {
|
|
1984
1984
|
config = await loadRulesConfig(root);
|
|
@@ -2002,7 +2002,7 @@ Suggested reviewers for ${files.length} file(s):`);
|
|
|
2002
2002
|
}
|
|
2003
2003
|
let graph;
|
|
2004
2004
|
if (useSnapshot) {
|
|
2005
|
-
const { DependencyGraph: DG } = await import("./src-
|
|
2005
|
+
const { DependencyGraph: DG } = await import("./src-HFPCEHYB.js");
|
|
2006
2006
|
graph = new DG();
|
|
2007
2007
|
const loaded = await graph.loadSnapshotOnly(root);
|
|
2008
2008
|
if (!loaded) {
|
|
@@ -2011,7 +2011,7 @@ Suggested reviewers for ${files.length} file(s):`);
|
|
|
2011
2011
|
}
|
|
2012
2012
|
} else {
|
|
2013
2013
|
process.stderr.write("[ctxloom] Building dependency graph...\n");
|
|
2014
|
-
const { ASTParser: ASTParser2, DependencyGraph: DependencyGraph2 } = await import("./src-
|
|
2014
|
+
const { ASTParser: ASTParser2, DependencyGraph: DependencyGraph2 } = await import("./src-HFPCEHYB.js");
|
|
2015
2015
|
let parser;
|
|
2016
2016
|
try {
|
|
2017
2017
|
parser = new ASTParser2();
|
|
@@ -132,7 +132,7 @@ import {
|
|
|
132
132
|
wrapBlock,
|
|
133
133
|
wrapWithIndexingEnvelope,
|
|
134
134
|
writeCODEOWNERS
|
|
135
|
-
} from "./chunk-
|
|
135
|
+
} from "./chunk-OEDNX3CV.js";
|
|
136
136
|
import {
|
|
137
137
|
VectorStore
|
|
138
138
|
} from "./chunk-XQEQLXY5.js";
|
|
@@ -304,4 +304,4 @@ export {
|
|
|
304
304
|
wrapWithIndexingEnvelope,
|
|
305
305
|
writeCODEOWNERS
|
|
306
306
|
};
|
|
307
|
-
//# sourceMappingURL=src-
|
|
307
|
+
//# sourceMappingURL=src-HFPCEHYB.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ctxloom-pro",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.7",
|
|
4
4
|
"description": "ctxloom — The Universal Code Context Engine. A local-first MCP server providing intelligent code context via hybrid Vector + AST + Graph search with Skeletonization (92% token reduction).",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|