@nodesify/astria 1.1.0 → 1.2.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/README.md +2 -2
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/affected.js.map +1 -1
- package/dist/commands/callflow.js.map +1 -1
- package/dist/commands/change-review.d.ts +73 -0
- package/dist/commands/change-review.d.ts.map +1 -0
- package/dist/commands/change-review.js +15 -0
- package/dist/commands/change-review.js.map +1 -0
- package/dist/commands/cluster.js.map +1 -1
- package/dist/commands/communities.js.map +1 -1
- package/dist/commands/diagnose.js.map +1 -1
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/digest.js.map +1 -1
- package/dist/commands/doctor.d.ts +6 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +139 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/explain.js.map +1 -1
- package/dist/commands/export.js.map +1 -1
- package/dist/commands/feedback.js.map +1 -1
- package/dist/commands/global.d.ts.map +1 -1
- package/dist/commands/global.js +3 -1
- package/dist/commands/global.js.map +1 -1
- package/dist/commands/god-nodes.js.map +1 -1
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/history.js.map +1 -1
- package/dist/commands/hook-guard.js.map +1 -1
- package/dist/commands/hook.js.map +1 -1
- package/dist/commands/indexing-profile.d.ts +14 -0
- package/dist/commands/indexing-profile.d.ts.map +1 -0
- package/dist/commands/indexing-profile.js +74 -0
- package/dist/commands/indexing-profile.js.map +1 -0
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +52 -53
- package/dist/commands/install.js.map +1 -1
- package/dist/commands/llm-summary.js.map +1 -1
- package/dist/commands/map.js.map +1 -1
- package/dist/commands/mcp.js.map +1 -1
- package/dist/commands/merge-driver.d.ts.map +1 -1
- package/dist/commands/merge-driver.js +23 -11
- package/dist/commands/merge-driver.js.map +1 -1
- package/dist/commands/merge-gate.d.ts.map +1 -1
- package/dist/commands/merge-gate.js +10 -7
- package/dist/commands/merge-gate.js.map +1 -1
- package/dist/commands/merge.js.map +1 -1
- package/dist/commands/neighbors.js.map +1 -1
- package/dist/commands/path.js.map +1 -1
- package/dist/commands/prs.d.ts.map +1 -1
- package/dist/commands/prs.js +139 -278
- package/dist/commands/prs.js.map +1 -1
- package/dist/commands/query.d.ts.map +1 -1
- package/dist/commands/query.js +13 -3
- package/dist/commands/query.js.map +1 -1
- package/dist/commands/risk.d.ts +2 -3
- package/dist/commands/risk.d.ts.map +1 -1
- package/dist/commands/risk.js +5 -12
- package/dist/commands/risk.js.map +1 -1
- package/dist/commands/run.d.ts.map +1 -1
- package/dist/commands/run.js +2 -9
- package/dist/commands/run.js.map +1 -1
- package/dist/commands/stats.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +45 -100
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/tree.js.map +1 -1
- package/dist/commands/update.d.ts +3 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +3 -10
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/watch.d.ts +1 -0
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +64 -21
- package/dist/commands/watch.js.map +1 -1
- package/dist/commands/wiki.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -4
- package/dist/index.js.map +1 -1
- package/dist/install/atomic.d.ts +3 -0
- package/dist/install/atomic.d.ts.map +1 -1
- package/dist/install/atomic.js +59 -20
- package/dist/install/atomic.js.map +1 -1
- package/dist/install/hooks.d.ts +3 -3
- package/dist/install/hooks.d.ts.map +1 -1
- package/dist/install/hooks.js +5 -3
- package/dist/install/hooks.js.map +1 -1
- package/dist/install/index.d.ts +5 -3
- package/dist/install/index.d.ts.map +1 -1
- package/dist/install/index.js +173 -222
- package/dist/install/index.js.map +1 -1
- package/dist/install/markdown-inject.js.map +1 -1
- package/dist/install/platforms.d.ts +2 -3
- package/dist/install/platforms.d.ts.map +1 -1
- package/dist/install/platforms.js +1 -4
- package/dist/install/platforms.js.map +1 -1
- package/dist/install/settings-inject.d.ts +11 -4
- package/dist/install/settings-inject.d.ts.map +1 -1
- package/dist/install/settings-inject.js +60 -37
- package/dist/install/settings-inject.js.map +1 -1
- package/dist/install/state.d.ts +12 -0
- package/dist/install/state.d.ts.map +1 -0
- package/dist/install/state.js +85 -0
- package/dist/install/state.js.map +1 -0
- package/dist/native.d.ts +3 -0
- package/dist/native.d.ts.map +1 -1
- package/dist/native.js +22 -18
- package/dist/native.js.map +1 -1
- package/package.json +23 -20
package/dist/commands/run.js
CHANGED
|
@@ -38,19 +38,15 @@ const pathMod = __importStar(require("path"));
|
|
|
38
38
|
const native_1 = require("../native");
|
|
39
39
|
const llm_summary_1 = require("./llm-summary");
|
|
40
40
|
const version_1 = require("../version");
|
|
41
|
+
const indexing_profile_1 = require("./indexing-profile");
|
|
41
42
|
async function runCommand(path, opts) {
|
|
42
43
|
if (opts.judge && !opts.backend) {
|
|
43
44
|
console.error('Error: --judge requires --backend (the judge wraps an engine; it cannot generate extractions)');
|
|
44
45
|
process.exitCode = 1;
|
|
45
46
|
return;
|
|
46
47
|
}
|
|
47
|
-
if (opts.backend)
|
|
48
|
-
process.env.ASTRIA_LLM_BACKEND = opts.backend;
|
|
49
|
-
if (opts.judge)
|
|
50
|
-
process.env.ASTRIA_LLM_JUDGE = opts.judge;
|
|
51
|
-
if (opts.model)
|
|
52
|
-
process.env.ASTRIA_LLM_MODEL = opts.model;
|
|
53
48
|
try {
|
|
49
|
+
opts = (0, indexing_profile_1.indexingOptions)(path, opts, false);
|
|
54
50
|
console.log(`Running astria pipeline on: ${path}`);
|
|
55
51
|
const result = (0, native_1.runPipeline)(path, opts.dedup === false, opts.embed === true, opts.labelCommunities === true, opts.deep === true, version_1.VERSION);
|
|
56
52
|
console.log(`Nodes added: ${result.nodesAdded}`);
|
|
@@ -67,9 +63,6 @@ async function runCommand(path, opts) {
|
|
|
67
63
|
const merged = (0, native_1.globalAdd)(path, opts.as);
|
|
68
64
|
console.log(`Global graph: repo '${merged.tag}' merged (${merged.nodesAdded} nodes, ${merged.edgesAdded} edges, ${merged.sameTypeEdges} same_type_as, ${merged.crossRepoCallEdges} cross-repo calls)`);
|
|
69
65
|
}
|
|
70
|
-
const benchmark = (0, native_1.tokenBenchmark)(path);
|
|
71
|
-
if (benchmark)
|
|
72
|
-
console.log(benchmark);
|
|
73
66
|
}
|
|
74
67
|
catch (e) {
|
|
75
68
|
console.error(`Error: ${e.message || e}`);
|
package/dist/commands/run.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAY,OAAO,iCAAa;AAChC,sCAA+D;AAC/D,+CAAgD;AAChD,wCAAqC;AACrC,yDAAqD;AAE9C,KAAK,qBACV,IAAY,EACZ,IAAuL;IAEvL,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,+FAA+F,CAAC,CAAC;QAC/G,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,IAAI,GAAG,IAAA,kCAAe,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,IAAA,oBAAW,EAAC,IAAI,EAAE,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,IAAI,CAAC,gBAAgB,KAAK,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,iBAAO,CAAC,CAAC;QACzI,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,gBAAgB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAClD,IAAA,6BAAe,EAAC,MAAM,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC;QACtF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,IAAA,mBAAU,EAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,iBAAiB,QAAQ,gBAAgB,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,MAAM,GAAG,IAAA,kBAAS,EAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,CAAC,GAAG,aAAa,MAAM,CAAC,UAAU,WAAW,MAAM,CAAC,UAAU,WAAW,MAAM,CAAC,aAAa,kBAAkB,MAAM,CAAC,kBAAkB,oBAAoB,CAAC,CAAC;QACzM,CAAC;IACH,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/commands/stats.ts"],"names":[],"mappings":";;;AAAA,sCAAuC;AAEhC,KAAK,uBAAuB,IAAuC;IACxE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CACT,eAAe,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,6BAA6B,EAAE,CACzF,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAA2B,CAAC;aAC7E,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;aAC7B,IAAI,CAAC,KAAK,CAAC,CAAC;QACf,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,eAAe,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAIA,wBAAsB,aAAa,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,iBAyC1E"}
|
package/dist/commands/status.js
CHANGED
|
@@ -2,112 +2,57 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.statusCommand = statusCommand;
|
|
4
4
|
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
5
6
|
const native_1 = require("../native");
|
|
6
|
-
const STALE_THRESHOLD = 30;
|
|
7
|
-
const VERY_STALE_THRESHOLD = 120;
|
|
8
7
|
async function statusCommand(opts) {
|
|
9
|
-
const dbPath = `${opts.graph}/.astria/db.sqlite`;
|
|
10
|
-
const graphJsonPath = `${opts.graph}/.astria/graph.json`;
|
|
11
|
-
if (!(0, fs_1.existsSync)(dbPath)) {
|
|
12
|
-
if (opts.json) {
|
|
13
|
-
console.log(JSON.stringify({ status: 'missing' }, null, 2));
|
|
14
|
-
}
|
|
15
|
-
else {
|
|
16
|
-
console.log('Status: no graph found');
|
|
17
|
-
console.log('Run `astria run .` to build the graph');
|
|
18
|
-
}
|
|
19
|
-
return;
|
|
20
|
-
}
|
|
21
|
-
let stats;
|
|
22
|
-
try {
|
|
23
|
-
stats = (0, native_1.graphStats)(opts.graph);
|
|
24
|
-
}
|
|
25
|
-
catch (e) {
|
|
26
|
-
console.log('Status: error reading graph database');
|
|
27
|
-
console.log(e.message || String(e));
|
|
28
|
-
process.exitCode = 1;
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
if (stats.nodeCount === 0) {
|
|
32
|
-
if (opts.json) {
|
|
33
|
-
console.log(JSON.stringify({ status: 'empty', nodes: 0 }, null, 2));
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
console.log('Status: empty graph (0 nodes)');
|
|
37
|
-
console.log('Run `astria run .` to populate the graph');
|
|
38
|
-
}
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
// Build provenance (which astria and extraction rules built the graph);
|
|
42
|
-
// graphs from before stamping simply report nulls.
|
|
43
|
-
let build;
|
|
44
8
|
try {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
build = undefined;
|
|
49
|
-
}
|
|
50
|
-
if (!(0, fs_1.existsSync)(graphJsonPath)) {
|
|
51
|
-
if (opts.json) {
|
|
52
|
-
console.log(JSON.stringify({ status: 'incomplete', nodes: stats.nodeCount, edges: stats.edgeCount }, null, 2));
|
|
9
|
+
if (!(0, fs_1.existsSync)((0, path_1.join)(opts.graph, '.astria', 'db.sqlite'))) {
|
|
10
|
+
console.log(opts.json ? JSON.stringify({ status: 'missing' }) : 'Status: missing — run `astria run .`');
|
|
11
|
+
return;
|
|
53
12
|
}
|
|
13
|
+
const stats = (0, native_1.graphStats)(opts.graph);
|
|
14
|
+
const build = (0, native_1.graphBuildInfo)(opts.graph);
|
|
15
|
+
const freshness = (0, native_1.graphFreshness)(opts.graph);
|
|
16
|
+
const published = Number(freshness.graphBuiltAt);
|
|
17
|
+
const ageMinutes = freshness.graphBuiltAt && Number.isFinite(published)
|
|
18
|
+
? Math.max(0, (Date.now() / 1000 - published) / 60) : null;
|
|
19
|
+
const result = {
|
|
20
|
+
...freshness,
|
|
21
|
+
status: stats.nodeCount === 0 ? 'empty' : freshness.status,
|
|
22
|
+
ageMinutes,
|
|
23
|
+
nodes: stats.nodeCount, edges: stats.edgeCount, communities: stats.communityCount, files: stats.fileCount,
|
|
24
|
+
builtAt: freshness.graphBuiltAt,
|
|
25
|
+
astriaVersion: build.astriaVersion,
|
|
26
|
+
extractionHashVersion: build.extractionHashVersion,
|
|
27
|
+
currentExtractionHashVersion: build.currentExtractionHashVersion,
|
|
28
|
+
};
|
|
29
|
+
if (opts.json)
|
|
30
|
+
console.log(JSON.stringify(result, null, 2));
|
|
54
31
|
else {
|
|
55
|
-
console.log(`Status:
|
|
56
|
-
console.log(
|
|
32
|
+
console.log(`Status: ${result.status}`);
|
|
33
|
+
console.log(`Source changes: ${freshness.added} added, ${freshness.modified} modified, ${freshness.deleted} deleted`);
|
|
34
|
+
console.log(`Graph age: ${ageMinutes === null ? 'unknown' : `${Math.round(ageMinutes)} min`}`);
|
|
35
|
+
console.log(`Nodes: ${stats.nodeCount}; edges: ${stats.edgeCount}; communities: ${stats.communityCount}; files: ${stats.fileCount}`);
|
|
36
|
+
console.log(`Artifacts: ${freshness.artifactsConsistent ? 'consistent' : 'incomplete or mismatched'}`);
|
|
37
|
+
console.log(`Source check: ${freshness.filesChecked} files, ${freshness.checkMilliseconds} ms (content hashes)`);
|
|
38
|
+
if (freshness.extractionOutdated)
|
|
39
|
+
console.log('Extraction rules changed; run `astria update .`');
|
|
40
|
+
if (freshness.staleExternalIndexes.length)
|
|
41
|
+
console.log(`Compiler indexes need reimport: ${freshness.staleExternalIndexes.join(', ')}`);
|
|
42
|
+
if (freshness.error)
|
|
43
|
+
console.log(`Freshness unavailable: ${freshness.error}`);
|
|
44
|
+
if (result.status !== 'fresh')
|
|
45
|
+
console.log('Recommendation: run `astria update .`');
|
|
57
46
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
staleness = 'stale';
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
staleness = 'very_stale';
|
|
71
|
-
}
|
|
72
|
-
// A graph extracted by older rules needs re-extraction even when the file
|
|
73
|
-
// manifest is unchanged; the mismatch is the true freshness signal.
|
|
74
|
-
const extractionOutdated = build?.extractionHashVersion != null &&
|
|
75
|
-
build.extractionHashVersion !== build.currentExtractionHashVersion;
|
|
76
|
-
if (opts.json) {
|
|
77
|
-
console.log(JSON.stringify({
|
|
78
|
-
status: staleness,
|
|
79
|
-
ageMinutes,
|
|
80
|
-
nodes: stats.nodeCount,
|
|
81
|
-
edges: stats.edgeCount,
|
|
82
|
-
communities: stats.communityCount,
|
|
83
|
-
files: stats.fileCount,
|
|
84
|
-
builtAt: build?.graphPublishedAt ?? null,
|
|
85
|
-
astriaVersion: build?.astriaVersion ?? null,
|
|
86
|
-
extractionHashVersion: build?.extractionHashVersion ?? null,
|
|
87
|
-
currentExtractionHashVersion: build?.currentExtractionHashVersion ?? null,
|
|
88
|
-
extractionOutdated,
|
|
89
|
-
}, null, 2));
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
console.log(`Status: ${staleness} (${ageMinutes} min ago)`);
|
|
93
|
-
console.log(`Nodes: ${stats.nodeCount}`);
|
|
94
|
-
console.log(`Edges: ${stats.edgeCount}`);
|
|
95
|
-
console.log(`Communities: ${stats.communityCount}`);
|
|
96
|
-
console.log(`Files tracked: ${stats.fileCount}`);
|
|
97
|
-
if (build?.graphPublishedAt) {
|
|
98
|
-
// Stored as unix seconds; render ISO so humans can read it.
|
|
99
|
-
const when = new Date(Number(build.graphPublishedAt) * 1000);
|
|
100
|
-
const builtAt = Number.isFinite(when.getTime()) ? when.toISOString() : build.graphPublishedAt;
|
|
101
|
-
const by = build.astriaVersion ? ` by astria ${build.astriaVersion}` : '';
|
|
102
|
-
const extraction = build.extractionHashVersion ? ` (extraction ${build.extractionHashVersion})` : '';
|
|
103
|
-
console.log(`Built: ${builtAt}${by}${extraction}`);
|
|
104
|
-
}
|
|
105
|
-
if (extractionOutdated) {
|
|
106
|
-
console.log(`Warning: graph was built with extraction ${build?.extractionHashVersion}; this astria uses ${build?.currentExtractionHashVersion} — re-extract with \`astria update .\``);
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
109
|
-
if (staleness === 'stale' || staleness === 'very_stale') {
|
|
110
|
-
console.log(`Recommendation: run \`astria update .\` to refresh`);
|
|
47
|
+
if (freshness.error)
|
|
48
|
+
process.exitCode = 1;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (opts.json)
|
|
52
|
+
console.log(JSON.stringify({ status: 'unknown', error: error.message || String(error) }));
|
|
53
|
+
else
|
|
54
|
+
console.error(`Error reading graph status: ${error.message || error}`);
|
|
55
|
+
process.exitCode = 1;
|
|
111
56
|
}
|
|
112
57
|
}
|
|
113
58
|
//# sourceMappingURL=status.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/commands/tree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/commands/tree.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAY,IAAI,iCAAa;AAC7B,sCAAuC;AAEhC,KAAK,sBAAsB,IAIjC;IACC,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QACzD,MAAM,KAAK,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;YACxC,CAAC,CAAC,IAAI,CAAC,GAAG;YACV,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,eAAe,QAAQ,EAAE,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export interface UpdateOptions {
|
|
2
|
+
refreshPolicy?: boolean;
|
|
3
|
+
llmBudget?: string;
|
|
2
4
|
dedup?: boolean;
|
|
3
5
|
backend?: string;
|
|
4
6
|
judge?: string;
|
|
@@ -6,7 +8,7 @@ export interface UpdateOptions {
|
|
|
6
8
|
embed?: boolean;
|
|
7
9
|
labelCommunities?: boolean;
|
|
8
10
|
deep?: boolean;
|
|
9
|
-
/** Suppress progress lines
|
|
11
|
+
/** Suppress progress lines (used by git hooks). */
|
|
10
12
|
quiet?: boolean;
|
|
11
13
|
/** Skip when the graph was published less than N minutes ago (used by git hooks). */
|
|
12
14
|
ifStale?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,mDAAmD;IACnD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qFAAqF;IACrF,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAiBD,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,iBAgCzE"}
|
package/dist/commands/update.js
CHANGED
|
@@ -39,6 +39,7 @@ const fs_1 = require("fs");
|
|
|
39
39
|
const native_1 = require("../native");
|
|
40
40
|
const llm_summary_1 = require("./llm-summary");
|
|
41
41
|
const version_1 = require("../version");
|
|
42
|
+
const indexing_profile_1 = require("./indexing-profile");
|
|
42
43
|
/// Age of the published graph in minutes, or null when there is nothing to
|
|
43
44
|
/// measure (missing database, or a graph built before provenance stamping).
|
|
44
45
|
/// Hook-driven rebuilds use this to skip runs that would change nothing.
|
|
@@ -62,16 +63,11 @@ async function updateCommand(path, opts = {}) {
|
|
|
62
63
|
process.exitCode = 1;
|
|
63
64
|
return;
|
|
64
65
|
}
|
|
65
|
-
if (opts.backend)
|
|
66
|
-
process.env.ASTRIA_LLM_BACKEND = opts.backend;
|
|
67
|
-
if (opts.judge)
|
|
68
|
-
process.env.ASTRIA_LLM_JUDGE = opts.judge;
|
|
69
|
-
if (opts.model)
|
|
70
|
-
process.env.ASTRIA_LLM_MODEL = opts.model;
|
|
71
66
|
try {
|
|
67
|
+
opts = (0, indexing_profile_1.indexingOptions)(path, opts, true);
|
|
72
68
|
if (opts.ifStale && opts.ifStale > 0) {
|
|
73
69
|
const age = pipelineAgeMinutes(path);
|
|
74
|
-
if (age !== null && age < opts.ifStale) {
|
|
70
|
+
if (age !== null && age < opts.ifStale && (0, native_1.graphFreshness)(path).status === 'fresh') {
|
|
75
71
|
if (!opts.quiet)
|
|
76
72
|
console.log(`Graph is fresh (${age} min old), skipping incremental rebuild`);
|
|
77
73
|
return;
|
|
@@ -94,9 +90,6 @@ async function updateCommand(path, opts = {}) {
|
|
|
94
90
|
if (!opts.quiet)
|
|
95
91
|
console.log(`Wiki regenerated: ${articles} articles -> ${pathMod.join(wikiDir, 'index.md')}`);
|
|
96
92
|
}
|
|
97
|
-
const benchmark = (0, native_1.tokenBenchmark)(path);
|
|
98
|
-
if (benchmark && !opts.quiet)
|
|
99
|
-
console.log(benchmark);
|
|
100
93
|
}
|
|
101
94
|
catch (e) {
|
|
102
95
|
console.error(`Error: ${e.message || e}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/watch.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAoBA,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"AAoBA,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,iBAkIjG"}
|
package/dist/commands/watch.js
CHANGED
|
@@ -59,6 +59,12 @@ async function watchCommand(watchPath, opts) {
|
|
|
59
59
|
process.exitCode = 1;
|
|
60
60
|
return;
|
|
61
61
|
}
|
|
62
|
+
const maxWaitMs = Number(opts.maxWait ?? Math.max(debounceMs, Math.min(debounceMs * 5, 30_000)));
|
|
63
|
+
if (!Number.isFinite(maxWaitMs) || maxWaitMs <= 0) {
|
|
64
|
+
console.error('Error: --max-wait must be a positive number of milliseconds');
|
|
65
|
+
process.exitCode = 1;
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
62
68
|
const resolved = path.resolve(watchPath);
|
|
63
69
|
if (!fs.existsSync(resolved) || !fs.statSync(resolved).isDirectory()) {
|
|
64
70
|
console.error(`Error: "${resolved}" is not a valid directory`);
|
|
@@ -72,7 +78,20 @@ async function watchCommand(watchPath, opts) {
|
|
|
72
78
|
// it inline would freeze the watcher for the whole build).
|
|
73
79
|
let rebuildInFlight = false;
|
|
74
80
|
let rebuildQueued = false;
|
|
81
|
+
let activeChild = null;
|
|
82
|
+
let stopped = false;
|
|
83
|
+
let maxWaitTimer = null;
|
|
84
|
+
const clearTimers = () => {
|
|
85
|
+
if (debounceTimer)
|
|
86
|
+
clearTimeout(debounceTimer);
|
|
87
|
+
if (maxWaitTimer)
|
|
88
|
+
clearTimeout(maxWaitTimer);
|
|
89
|
+
debounceTimer = maxWaitTimer = null;
|
|
90
|
+
};
|
|
75
91
|
const runRebuild = () => {
|
|
92
|
+
clearTimers();
|
|
93
|
+
if (stopped)
|
|
94
|
+
return;
|
|
76
95
|
if (rebuildInFlight) {
|
|
77
96
|
rebuildQueued = true;
|
|
78
97
|
return;
|
|
@@ -80,25 +99,39 @@ async function watchCommand(watchPath, opts) {
|
|
|
80
99
|
rebuildInFlight = true;
|
|
81
100
|
console.log(`\n[astria] ${pendingEvents.size} change event(s), rebuilding...`);
|
|
82
101
|
pendingEvents.clear();
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
console.error(`[astria] Rebuild exited with code ${code}`);
|
|
90
|
-
}
|
|
102
|
+
let finished = false;
|
|
103
|
+
const complete = (code, error) => {
|
|
104
|
+
if (finished)
|
|
105
|
+
return;
|
|
106
|
+
finished = true;
|
|
107
|
+
activeChild = null;
|
|
91
108
|
rebuildInFlight = false;
|
|
92
|
-
if (
|
|
109
|
+
if (error)
|
|
110
|
+
console.error('[astria] Rebuild could not start:', error.message);
|
|
111
|
+
else if (code !== 0 && !stopped)
|
|
112
|
+
console.error(`[astria] Rebuild exited with code ${code}`);
|
|
113
|
+
if (!stopped && rebuildQueued) {
|
|
93
114
|
rebuildQueued = false;
|
|
94
115
|
runRebuild();
|
|
95
116
|
}
|
|
96
|
-
}
|
|
117
|
+
};
|
|
118
|
+
try {
|
|
119
|
+
const child = (0, child_process_1.spawn)(process.execPath, [process.argv[1], 'update', resolved], { stdio: 'inherit' });
|
|
120
|
+
activeChild = child;
|
|
121
|
+
child.once('error', err => complete(null, err));
|
|
122
|
+
child.once('exit', code => complete(code));
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
complete(null, err instanceof Error ? err : new Error(String(err)));
|
|
126
|
+
}
|
|
97
127
|
};
|
|
98
128
|
const scheduleRebuild = () => {
|
|
99
129
|
if (debounceTimer)
|
|
100
130
|
clearTimeout(debounceTimer);
|
|
101
131
|
debounceTimer = setTimeout(runRebuild, debounceMs);
|
|
132
|
+
// Continuous edits cannot postpone reconciliation indefinitely.
|
|
133
|
+
if (!maxWaitTimer)
|
|
134
|
+
maxWaitTimer = setTimeout(runRebuild, maxWaitMs);
|
|
102
135
|
};
|
|
103
136
|
let watcher;
|
|
104
137
|
try {
|
|
@@ -120,8 +153,7 @@ async function watchCommand(watchPath, opts) {
|
|
|
120
153
|
watcher.on('error', (err) => {
|
|
121
154
|
console.error(`[astria] Watcher failed:`, err.message || err);
|
|
122
155
|
console.error('[astria] Stopping; restart the watcher to continue.');
|
|
123
|
-
|
|
124
|
-
process.exitCode = 1;
|
|
156
|
+
stop(1);
|
|
125
157
|
});
|
|
126
158
|
}
|
|
127
159
|
catch (err) {
|
|
@@ -131,19 +163,30 @@ async function watchCommand(watchPath, opts) {
|
|
|
131
163
|
}
|
|
132
164
|
console.log(`[astria] Watching ${resolved} (debounce: ${debounceMs}ms)`);
|
|
133
165
|
console.log('[astria] Press Ctrl+C to stop');
|
|
134
|
-
const stop = () => {
|
|
135
|
-
|
|
166
|
+
const stop = (exitCode = 0) => {
|
|
167
|
+
if (stopped)
|
|
168
|
+
return;
|
|
169
|
+
stopped = true;
|
|
170
|
+
clearTimers();
|
|
171
|
+
rebuildQueued = false;
|
|
172
|
+
pendingEvents.clear();
|
|
136
173
|
watcher.close();
|
|
137
|
-
process.
|
|
174
|
+
process.exitCode = exitCode;
|
|
175
|
+
// This child belongs to this watcher; never terminate process categories.
|
|
176
|
+
activeChild?.kill('SIGTERM');
|
|
177
|
+
rl?.close();
|
|
178
|
+
console.log('\n[astria] Stopped.');
|
|
138
179
|
};
|
|
180
|
+
let rl;
|
|
181
|
+
process.once('SIGINT', () => stop());
|
|
182
|
+
process.once('SIGTERM', () => stop());
|
|
139
183
|
if (process.platform === 'win32') {
|
|
140
184
|
const readline = require('readline');
|
|
141
|
-
|
|
142
|
-
rl.on('SIGINT', stop);
|
|
143
|
-
}
|
|
144
|
-
else {
|
|
145
|
-
process.on('SIGINT', stop);
|
|
146
|
-
process.on('SIGTERM', stop);
|
|
185
|
+
rl = readline.createInterface({ input: process.stdin });
|
|
186
|
+
rl.on('SIGINT', () => stop());
|
|
147
187
|
}
|
|
188
|
+
// Install the watcher first so edits during startup are queued too.
|
|
189
|
+
pendingEvents.add('(startup reconciliation)');
|
|
190
|
+
runRebuild();
|
|
148
191
|
}
|
|
149
192
|
//# sourceMappingURL=watch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/commands/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiki.js","sourceRoot":"","sources":["../../src/commands/wiki.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wiki.js","sourceRoot":"","sources":["../../src/commands/wiki.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAY,IAAI,iCAAa;AAC7B,sCAAuD;AAEhD,KAAK,sBAAsB,IAKjC;IACC,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;YACxC,CAAC,CAAC,IAAI,CAAC,GAAG;YACV,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QAEpC,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAA,uBAAc,EAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,aAAa,QAAQ,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,GAAG,CAAC,QAAQ,QAAQ,kDAAkD,CAAC,CAAC;YAChF,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,IAAA,mBAAU,EAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,gBAAgB,QAAQ,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuCpC,QAAA,MAAM,OAAO,SAAgB,CAAC;AA4Z9B,OAAO,EAAE,OAAO,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -35,6 +35,7 @@ const diff_1 = require("./commands/diff");
|
|
|
35
35
|
const history_1 = require("./commands/history");
|
|
36
36
|
const status_1 = require("./commands/status");
|
|
37
37
|
const install_1 = require("./commands/install");
|
|
38
|
+
const doctor_1 = require("./commands/doctor");
|
|
38
39
|
const hook_1 = require("./commands/hook");
|
|
39
40
|
const merge_driver_1 = require("./commands/merge-driver");
|
|
40
41
|
const digest_1 = require("./commands/digest");
|
|
@@ -62,23 +63,31 @@ program
|
|
|
62
63
|
.action((path, opts) => (0, run_1.runCommand)(path, { ...opts, global: opts.global, as: opts.as }));
|
|
63
64
|
program
|
|
64
65
|
.command('update')
|
|
65
|
-
.description('
|
|
66
|
+
.description('Refresh the graph using its saved indexing policy')
|
|
66
67
|
.argument('<path>', 'Directory to update')
|
|
67
68
|
.option('--no-dedup', 'Skip near-duplicate node merging')
|
|
69
|
+
.option('--dedup', 'Enable near-duplicate merging in the saved policy')
|
|
68
70
|
.option('--backend <name>', 'Semantic LLM backend: claude, openai (any OpenAI-compatible), azure (Azure OpenAI), bedrock (AWS SigV4), kimi (Moonshot), or gemini')
|
|
69
71
|
.option('--judge <name>', 'Decision layer over the backend: jev (TypeSafe System One — gates trivial files, re-judges relations/node types, adds calibrated edge confidence)')
|
|
70
72
|
.option('--model <name>', 'Semantic LLM model name (backend-specific)')
|
|
71
73
|
.option('--embed', 'Compute local embeddings: similar_to edges + semantic query recall (one-time ~615 MB local model download, then offline)')
|
|
74
|
+
.option('--no-embed', 'Disable local embeddings and remove their vectors and similarity edges')
|
|
72
75
|
.option('--label-communities', 'Name communities thematically with one LLM call per changed community (requires a semantic backend)')
|
|
76
|
+
.option('--no-label-communities', 'Disable community naming in the saved policy')
|
|
73
77
|
.option('--deep', 'Second extraction tier: LLM-linked cross-file concept edges, cached per file (requires a semantic backend)')
|
|
74
|
-
.option('--
|
|
78
|
+
.option('--no-deep', 'Disable concept linking in the saved policy')
|
|
79
|
+
.option('--quiet', 'Suppress progress lines')
|
|
75
80
|
.option('--if-stale <minutes>', 'Skip when the graph was updated less than N minutes ago')
|
|
76
|
-
.
|
|
81
|
+
.option('--refresh-policy', 'Explicitly replace the saved indexing policy with the supplied options')
|
|
82
|
+
.option('--llm-budget <n>', 'Maximum LLM tokens for an explicitly selected paid indexing policy')
|
|
83
|
+
.action((path, opts, command) => (0, update_1.updateCommand)(path, { ...opts, dedup: command.getOptionValueSource('dedup') === 'cli' ? opts.dedup : undefined,
|
|
84
|
+
ifStale: opts.ifStale ? Number(opts.ifStale) : undefined }));
|
|
77
85
|
program
|
|
78
86
|
.command('watch')
|
|
79
87
|
.description('Watch for file changes and auto-rebuild')
|
|
80
88
|
.argument('<path>', 'Directory to watch')
|
|
81
89
|
.option('--debounce <ms>', 'Debounce interval in milliseconds', '3000')
|
|
90
|
+
.option('--max-wait <ms>', 'Maximum delay before indexing continuous edits', '15000')
|
|
82
91
|
.action(watch_1.watchCommand);
|
|
83
92
|
program
|
|
84
93
|
.command('explain')
|
|
@@ -166,6 +175,8 @@ program
|
|
|
166
175
|
.description('Blast radius of the current git diff: impacted symbols and communities, with a heuristic risk score for PRs')
|
|
167
176
|
.option('--graph <path>', 'Path to project root', '.')
|
|
168
177
|
.option('--staged', 'Only staged changes (git diff --cached) instead of the whole working tree')
|
|
178
|
+
.option('--base <ref>', 'Review changes from the merge base with this Git reference')
|
|
179
|
+
.option('--head <ref>', 'Review this Git revision instead of the working tree')
|
|
169
180
|
.option('--json', 'Emit machine-readable JSON')
|
|
170
181
|
.action(risk_1.riskCommand);
|
|
171
182
|
program
|
|
@@ -248,7 +259,7 @@ program
|
|
|
248
259
|
.description('Map open pull requests onto the knowledge graph: CI state, review status, worktree mapping, ranked review queue, merge-order risk')
|
|
249
260
|
.argument('[count]', 'Number of PRs to analyze', '20')
|
|
250
261
|
.option('--graph <path>', 'Path to project root', '.')
|
|
251
|
-
.option('--conflicts', 'Flag
|
|
262
|
+
.option('--conflicts', 'Flag shared changed/affected symbols for review coordination')
|
|
252
263
|
.option('--triage', 'Compact per-PR triage lines instead of the full dashboard')
|
|
253
264
|
.option('--queue', 'Print only the ranked review queue')
|
|
254
265
|
.option('--json', 'Emit machine-readable JSON (ranked queue with all signals)')
|
|
@@ -271,6 +282,12 @@ program
|
|
|
271
282
|
.option('--json', 'Emit machine-readable JSON')
|
|
272
283
|
.action(status_1.statusCommand);
|
|
273
284
|
(0, install_1.registerInstallCommand)(program);
|
|
285
|
+
program.command('doctor')
|
|
286
|
+
.description('Check installation, native runtime, integrations, permissions and graph compatibility without changing setup')
|
|
287
|
+
.option('--graph <path>', 'Project root', '.')
|
|
288
|
+
.option('--scope <scope>', 'project or user', 'project')
|
|
289
|
+
.option('--json', 'Machine-readable report; exit 1 on errors')
|
|
290
|
+
.action(doctor_1.doctorCommand);
|
|
274
291
|
(0, hook_1.registerHookCommand)(program);
|
|
275
292
|
const mergeDriverCmd = program
|
|
276
293
|
.command('merge-driver')
|