ts-knowledge-graph 0.1.2 → 0.1.6
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 +99 -41
- package/contribs/webview/README.md +83 -0
- package/contribs/webview/web/css/style.css +310 -0
- package/contribs/webview/web/index.html +109 -0
- package/contribs/webview/web/js/app.js +1249 -0
- package/contribs/webview/web/js_autogenerated/.gitignore +3 -0
- package/contribs/webview/web/js_autogenerated/kind_descriptions.js +39 -0
- package/contribs/webview/web/types/app_globals.d.ts +154 -0
- package/dist/benchmark/benchmark_stats.d.ts +41 -0
- package/dist/benchmark/benchmark_stats.d.ts.map +1 -0
- package/dist/benchmark/benchmark_stats.js +61 -0
- package/dist/benchmark/benchmark_stats.js.map +1 -0
- package/dist/benchmark/node_benchmark.d.ts +78 -0
- package/dist/benchmark/node_benchmark.d.ts.map +1 -0
- package/dist/benchmark/node_benchmark.js +112 -0
- package/dist/benchmark/node_benchmark.js.map +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +16 -4
- package/dist/cli.js.map +1 -1
- package/dist/cluster/cluster_weights.d.ts +20 -0
- package/dist/cluster/cluster_weights.d.ts.map +1 -0
- package/dist/cluster/cluster_weights.js +32 -0
- package/dist/cluster/cluster_weights.js.map +1 -0
- package/dist/cluster/community_detector.d.ts +61 -0
- package/dist/cluster/community_detector.d.ts.map +1 -0
- package/dist/cluster/community_detector.js +120 -0
- package/dist/cluster/community_detector.js.map +1 -0
- package/dist/cluster/community_labeler.d.ts +84 -0
- package/dist/cluster/community_labeler.d.ts.map +1 -0
- package/dist/cluster/community_labeler.js +194 -0
- package/dist/cluster/community_labeler.js.map +1 -0
- package/dist/cluster/graph_clusterer.d.ts +47 -0
- package/dist/cluster/graph_clusterer.d.ts.map +1 -0
- package/dist/cluster/graph_clusterer.js +126 -0
- package/dist/cluster/graph_clusterer.js.map +1 -0
- package/dist/commands/benchmark_command.d.ts +11 -0
- package/dist/commands/benchmark_command.d.ts.map +1 -0
- package/dist/commands/benchmark_command.js +94 -0
- package/dist/commands/benchmark_command.js.map +1 -0
- package/dist/commands/blast_radius_command.d.ts.map +1 -1
- package/dist/commands/blast_radius_command.js +7 -6
- package/dist/commands/blast_radius_command.js.map +1 -1
- package/dist/commands/cluster_command.d.ts +7 -0
- package/dist/commands/cluster_command.d.ts.map +1 -0
- package/dist/commands/cluster_command.js +55 -0
- package/dist/commands/cluster_command.js.map +1 -0
- package/dist/commands/command_helpers.d.ts +9 -4
- package/dist/commands/command_helpers.d.ts.map +1 -1
- package/dist/commands/command_helpers.js +13 -8
- package/dist/commands/command_helpers.js.map +1 -1
- package/dist/commands/cost_command.d.ts +13 -0
- package/dist/commands/cost_command.d.ts.map +1 -0
- package/dist/commands/cost_command.js +139 -0
- package/dist/commands/cost_command.js.map +1 -0
- package/dist/commands/{load.d.ts → enrich_command.d.ts} +3 -2
- package/dist/commands/enrich_command.d.ts.map +1 -0
- package/dist/commands/enrich_command.js +64 -0
- package/dist/commands/enrich_command.js.map +1 -0
- package/dist/commands/extract_command.d.ts.map +1 -1
- package/dist/commands/extract_command.js +12 -6
- package/dist/commands/extract_command.js.map +1 -1
- package/dist/commands/hotspots_command.d.ts +7 -0
- package/dist/commands/hotspots_command.d.ts.map +1 -0
- package/dist/commands/hotspots_command.js +68 -0
- package/dist/commands/hotspots_command.js.map +1 -0
- package/dist/commands/install_command.d.ts +15 -6
- package/dist/commands/install_command.d.ts.map +1 -1
- package/dist/commands/install_command.js +62 -25
- package/dist/commands/install_command.js.map +1 -1
- package/dist/commands/load_command.d.ts.map +1 -1
- package/dist/commands/load_command.js +20 -13
- package/dist/commands/load_command.js.map +1 -1
- package/dist/commands/neighbors_command.d.ts.map +1 -1
- package/dist/commands/neighbors_command.js +6 -5
- package/dist/commands/neighbors_command.js.map +1 -1
- package/dist/commands/references_command.d.ts.map +1 -1
- package/dist/commands/references_command.js +6 -5
- package/dist/commands/references_command.js.map +1 -1
- package/dist/commands/report_command.d.ts +16 -0
- package/dist/commands/report_command.d.ts.map +1 -0
- package/dist/commands/report_command.js +115 -0
- package/dist/commands/report_command.js.map +1 -0
- package/dist/commands/verify_command.d.ts +8 -0
- package/dist/commands/verify_command.d.ts.map +1 -0
- package/dist/commands/verify_command.js +57 -0
- package/dist/commands/verify_command.js.map +1 -0
- package/dist/commands/web_command.d.ts +27 -0
- package/dist/commands/web_command.d.ts.map +1 -1
- package/dist/commands/web_command.js +109 -3
- package/dist/commands/web_command.js.map +1 -1
- package/dist/commands/webview_command.d.ts +36 -0
- package/dist/commands/webview_command.d.ts.map +1 -0
- package/dist/commands/webview_command.js +186 -0
- package/dist/commands/webview_command.js.map +1 -0
- package/dist/enrich/cpu_profile.d.ts +160 -0
- package/dist/enrich/cpu_profile.d.ts.map +1 -0
- package/dist/enrich/cpu_profile.js +185 -0
- package/dist/enrich/cpu_profile.js.map +1 -0
- package/dist/enrich/runtime_enricher.d.ts +64 -0
- package/dist/enrich/runtime_enricher.d.ts.map +1 -0
- package/dist/enrich/runtime_enricher.js +98 -0
- package/dist/enrich/runtime_enricher.js.map +1 -0
- package/dist/enrich/runtime_join.d.ts +124 -0
- package/dist/enrich/runtime_join.d.ts.map +1 -0
- package/dist/enrich/runtime_join.js +270 -0
- package/dist/enrich/runtime_join.js.map +1 -0
- package/dist/extract/api_extractor.d.ts +24 -0
- package/dist/extract/api_extractor.d.ts.map +1 -0
- package/dist/extract/api_extractor.js +71 -0
- package/dist/extract/api_extractor.js.map +1 -0
- package/dist/extract/config_extractor.d.ts +22 -0
- package/dist/extract/config_extractor.d.ts.map +1 -0
- package/dist/extract/config_extractor.js +61 -0
- package/dist/extract/config_extractor.js.map +1 -0
- package/dist/extract/endpoint_extractor.d.ts +36 -0
- package/dist/extract/endpoint_extractor.d.ts.map +1 -0
- package/dist/extract/endpoint_extractor.js +117 -0
- package/dist/extract/endpoint_extractor.js.map +1 -0
- package/dist/extract/git_source.d.ts +23 -0
- package/dist/extract/git_source.d.ts.map +1 -0
- package/dist/extract/git_source.js +75 -0
- package/dist/extract/git_source.js.map +1 -0
- package/dist/extract/graph_builder.d.ts +8 -0
- package/dist/extract/graph_builder.d.ts.map +1 -1
- package/dist/extract/graph_builder.js +23 -1
- package/dist/extract/graph_builder.js.map +1 -1
- package/dist/extract/node_id.d.ts +16 -0
- package/dist/extract/node_id.d.ts.map +1 -1
- package/dist/extract/node_id.js +22 -0
- package/dist/extract/node_id.js.map +1 -1
- package/dist/extract/scope_resolver.d.ts +22 -0
- package/dist/extract/scope_resolver.d.ts.map +1 -0
- package/dist/extract/scope_resolver.js +53 -0
- package/dist/extract/scope_resolver.js.map +1 -0
- package/dist/extract/semantic_extractor.d.ts +25 -0
- package/dist/extract/semantic_extractor.d.ts.map +1 -1
- package/dist/extract/semantic_extractor.js +96 -2
- package/dist/extract/semantic_extractor.js.map +1 -1
- package/dist/extract/structural_extractor.d.ts +6 -0
- package/dist/extract/structural_extractor.d.ts.map +1 -1
- package/dist/extract/structural_extractor.js +22 -12
- package/dist/extract/structural_extractor.js.map +1 -1
- package/dist/project_root.d.ts +7 -0
- package/dist/project_root.d.ts.map +1 -0
- package/dist/project_root.js +9 -0
- package/dist/project_root.js.map +1 -0
- package/dist/query/graph_query.d.ts +269 -0
- package/dist/query/graph_query.d.ts.map +1 -1
- package/dist/query/graph_query.js +585 -11
- package/dist/query/graph_query.js.map +1 -1
- package/dist/report/graph_report.d.ts +51 -0
- package/dist/report/graph_report.d.ts.map +1 -0
- package/dist/report/graph_report.js +312 -0
- package/dist/report/graph_report.js.map +1 -0
- package/dist/report/pdf_renderer.d.ts +22 -0
- package/dist/report/pdf_renderer.d.ts.map +1 -0
- package/dist/report/pdf_renderer.js +54 -0
- package/dist/report/pdf_renderer.js.map +1 -0
- package/dist/report/report_data.d.ts +128 -0
- package/dist/report/report_data.d.ts.map +1 -0
- package/dist/report/report_data.js +191 -0
- package/dist/report/report_data.js.map +1 -0
- package/dist/schema/edge.d.ts +40 -5
- package/dist/schema/edge.d.ts.map +1 -1
- package/dist/schema/edge.js +73 -0
- package/dist/schema/edge.js.map +1 -1
- package/dist/schema/node.d.ts +20 -5
- package/dist/schema/node.d.ts.map +1 -1
- package/dist/schema/node.js +36 -0
- package/dist/schema/node.js.map +1 -1
- package/dist/schema/runtime_manifest.d.ts +36 -0
- package/dist/schema/runtime_manifest.d.ts.map +1 -0
- package/dist/schema/runtime_manifest.js +23 -0
- package/dist/schema/runtime_manifest.js.map +1 -0
- package/dist/schema/source_manifest.d.ts +30 -0
- package/dist/schema/source_manifest.d.ts.map +1 -0
- package/dist/schema/source_manifest.js +21 -0
- package/dist/schema/source_manifest.js.map +1 -0
- package/dist/store/jsonl_reader.d.ts +4 -0
- package/dist/store/jsonl_reader.d.ts.map +1 -1
- package/dist/store/jsonl_reader.js +13 -1
- package/dist/store/jsonl_reader.js.map +1 -1
- package/dist/store/jsonl_store.d.ts +2 -1
- package/dist/store/jsonl_store.d.ts.map +1 -1
- package/dist/store/jsonl_store.js +4 -1
- package/dist/store/jsonl_store.js.map +1 -1
- package/dist/store/kuzu_store.d.ts +59 -0
- package/dist/store/kuzu_store.d.ts.map +1 -1
- package/dist/store/kuzu_store.js +124 -5
- package/dist/store/kuzu_store.js.map +1 -1
- package/dist/store/output_folder.d.ts +43 -0
- package/dist/store/output_folder.d.ts.map +1 -0
- package/dist/store/output_folder.js +61 -0
- package/dist/store/output_folder.js.map +1 -0
- package/dist/verify/project_verifier.d.ts +85 -0
- package/dist/verify/project_verifier.d.ts.map +1 -0
- package/dist/verify/project_verifier.js +138 -0
- package/dist/verify/project_verifier.js.map +1 -0
- package/dotclaude_folder/commands/code-graph-interview.md +123 -0
- package/dotclaude_folder/commands/code-graph-optimize.md +65 -0
- package/{skills/ts-knowledge-graph → dotclaude_folder/skills/code-graph-query}/SKILL.md +6 -6
- package/package.json +99 -10
- package/.env-sample +0 -34
- package/contribs/web_visualisation/README.md +0 -55
- package/contribs/web_visualisation/web/css/style.css +0 -115
- package/contribs/web_visualisation/web/data/.gitignore +0 -2
- package/contribs/web_visualisation/web/index.html +0 -58
- package/contribs/web_visualisation/web/js/app.js +0 -364
- package/dist/agent/agent-tools.d.ts +0 -13
- package/dist/agent/agent-tools.d.ts.map +0 -1
- package/dist/agent/agent-tools.js +0 -153
- package/dist/agent/agent-tools.js.map +0 -1
- package/dist/agent/agent_tools.d.ts +0 -13
- package/dist/agent/agent_tools.d.ts.map +0 -1
- package/dist/agent/agent_tools.js +0 -153
- package/dist/agent/agent_tools.js.map +0 -1
- package/dist/agent/code-editor.d.ts +0 -18
- package/dist/agent/code-editor.d.ts.map +0 -1
- package/dist/agent/code-editor.js +0 -43
- package/dist/agent/code-editor.js.map +0 -1
- package/dist/agent/code_editor.d.ts +0 -18
- package/dist/agent/code_editor.d.ts.map +0 -1
- package/dist/agent/code_editor.js +0 -43
- package/dist/agent/code_editor.js.map +0 -1
- package/dist/agent/optimizer-agent.d.ts +0 -30
- package/dist/agent/optimizer-agent.d.ts.map +0 -1
- package/dist/agent/optimizer-agent.js +0 -97
- package/dist/agent/optimizer-agent.js.map +0 -1
- package/dist/agent/optimizer_agent.d.ts +0 -30
- package/dist/agent/optimizer_agent.d.ts.map +0 -1
- package/dist/agent/optimizer_agent.js +0 -97
- package/dist/agent/optimizer_agent.js.map +0 -1
- package/dist/agent/verifier.d.ts +0 -9
- package/dist/agent/verifier.d.ts.map +0 -1
- package/dist/agent/verifier.js +0 -19
- package/dist/agent/verifier.js.map +0 -1
- package/dist/commands/blast-radius.d.ts +0 -5
- package/dist/commands/blast-radius.d.ts.map +0 -1
- package/dist/commands/blast-radius.js +0 -18
- package/dist/commands/blast-radius.js.map +0 -1
- package/dist/commands/blast_radius.d.ts +0 -5
- package/dist/commands/blast_radius.d.ts.map +0 -1
- package/dist/commands/blast_radius.js +0 -18
- package/dist/commands/blast_radius.js.map +0 -1
- package/dist/commands/calls.d.ts +0 -5
- package/dist/commands/calls.d.ts.map +0 -1
- package/dist/commands/calls.js +0 -7
- package/dist/commands/calls.js.map +0 -1
- package/dist/commands/command-helpers.d.ts +0 -15
- package/dist/commands/command-helpers.d.ts.map +0 -1
- package/dist/commands/command-helpers.js +0 -61
- package/dist/commands/command-helpers.js.map +0 -1
- package/dist/commands/dead-exports.d.ts +0 -5
- package/dist/commands/dead-exports.d.ts.map +0 -1
- package/dist/commands/dead-exports.js +0 -7
- package/dist/commands/dead-exports.js.map +0 -1
- package/dist/commands/dead_exports.d.ts +0 -5
- package/dist/commands/dead_exports.d.ts.map +0 -1
- package/dist/commands/dead_exports.js +0 -7
- package/dist/commands/dead_exports.js.map +0 -1
- package/dist/commands/extract.d.ts +0 -8
- package/dist/commands/extract.d.ts.map +0 -1
- package/dist/commands/extract.js +0 -49
- package/dist/commands/extract.js.map +0 -1
- package/dist/commands/find.d.ts +0 -5
- package/dist/commands/find.d.ts.map +0 -1
- package/dist/commands/find.js +0 -7
- package/dist/commands/find.js.map +0 -1
- package/dist/commands/load.d.ts.map +0 -1
- package/dist/commands/load.js +0 -28
- package/dist/commands/load.js.map +0 -1
- package/dist/commands/neighbors.d.ts +0 -5
- package/dist/commands/neighbors.d.ts.map +0 -1
- package/dist/commands/neighbors.js +0 -17
- package/dist/commands/neighbors.js.map +0 -1
- package/dist/commands/optimize.d.ts +0 -6
- package/dist/commands/optimize.d.ts.map +0 -1
- package/dist/commands/optimize.js +0 -59
- package/dist/commands/optimize.js.map +0 -1
- package/dist/commands/optimize_command.d.ts +0 -6
- package/dist/commands/optimize_command.d.ts.map +0 -1
- package/dist/commands/optimize_command.js +0 -59
- package/dist/commands/optimize_command.js.map +0 -1
- package/dist/commands/references.d.ts +0 -5
- package/dist/commands/references.d.ts.map +0 -1
- package/dist/commands/references.js +0 -17
- package/dist/commands/references.js.map +0 -1
- package/dist/commands/web.d.ts +0 -19
- package/dist/commands/web.d.ts.map +0 -1
- package/dist/commands/web.js +0 -120
- package/dist/commands/web.js.map +0 -1
- package/dist/commands/who-calls.d.ts +0 -5
- package/dist/commands/who-calls.d.ts.map +0 -1
- package/dist/commands/who-calls.js +0 -7
- package/dist/commands/who-calls.js.map +0 -1
- package/dist/commands/who_calls.d.ts +0 -5
- package/dist/commands/who_calls.d.ts.map +0 -1
- package/dist/commands/who_calls.js +0 -7
- package/dist/commands/who_calls.js.map +0 -1
- package/dist/extract/graph-builder.d.ts +0 -16
- package/dist/extract/graph-builder.d.ts.map +0 -1
- package/dist/extract/graph-builder.js +0 -39
- package/dist/extract/graph-builder.js.map +0 -1
- package/dist/extract/node-id.d.ts +0 -8
- package/dist/extract/node-id.d.ts.map +0 -1
- package/dist/extract/node-id.js +0 -22
- package/dist/extract/node-id.js.map +0 -1
- package/dist/extract/project-loader.d.ts +0 -5
- package/dist/extract/project-loader.d.ts.map +0 -1
- package/dist/extract/project-loader.js +0 -19
- package/dist/extract/project-loader.js.map +0 -1
- package/dist/extract/semantic-extractor.d.ts +0 -22
- package/dist/extract/semantic-extractor.d.ts.map +0 -1
- package/dist/extract/semantic-extractor.js +0 -254
- package/dist/extract/semantic-extractor.js.map +0 -1
- package/dist/extract/structural-extractor.d.ts +0 -18
- package/dist/extract/structural-extractor.d.ts.map +0 -1
- package/dist/extract/structural-extractor.js +0 -97
- package/dist/extract/structural-extractor.js.map +0 -1
- package/dist/query/graph-query.d.ts +0 -28
- package/dist/query/graph-query.d.ts.map +0 -1
- package/dist/query/graph-query.js +0 -93
- package/dist/query/graph-query.js.map +0 -1
- package/dist/store/jsonl-reader.d.ts +0 -11
- package/dist/store/jsonl-reader.d.ts.map +0 -1
- package/dist/store/jsonl-reader.js +0 -19
- package/dist/store/jsonl-reader.js.map +0 -1
- package/dist/store/jsonl-store.d.ts +0 -7
- package/dist/store/jsonl-store.d.ts.map +0 -1
- package/dist/store/jsonl-store.js +0 -13
- package/dist/store/jsonl-store.js.map +0 -1
- package/dist/store/kuzu-store.d.ts +0 -14
- package/dist/store/kuzu-store.d.ts.map +0 -1
- package/dist/store/kuzu-store.js +0 -52
- package/dist/store/kuzu-store.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cost_command.js","sourceRoot":"","sources":["../../src/commands/cost_command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class EnrichCommand {
|
|
3
3
|
static register(program: Command): void;
|
|
4
4
|
private static run;
|
|
5
|
+
private static print;
|
|
5
6
|
}
|
|
6
|
-
//# sourceMappingURL=
|
|
7
|
+
//# sourceMappingURL=enrich_command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrich_command.d.ts","sourceRoot":"","sources":["../../src/commands/enrich_command.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAYpC,qBAAa,aAAa;IACzB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;mBAalB,GAAG;IAaxB,OAAO,CAAC,MAAM,CAAC,KAAK;CAsCpB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { RuntimeEnricher } from '../enrich/runtime_enricher.js';
|
|
5
|
+
import { KuzuStore } from '../store/kuzu_store.js';
|
|
6
|
+
import { OutputFolder } from '../store/output_folder.js';
|
|
7
|
+
import { CommandHelpers } from './command_helpers.js';
|
|
8
|
+
export class EnrichCommand {
|
|
9
|
+
static register(program) {
|
|
10
|
+
const command = program
|
|
11
|
+
.command('enrich')
|
|
12
|
+
.description('ingest a V8 CPU profile and attach runtime metrics onto graph nodes')
|
|
13
|
+
.argument('<profile>', 'path to a V8 .cpuprofile file (node --cpu-prof)');
|
|
14
|
+
CommandHelpers.addOutputFolderOption(command)
|
|
15
|
+
.option('-r, --root <path>', 'project root the profile paths resolve against', process.cwd())
|
|
16
|
+
.option('--json', 'emit the enrichment report as JSON', false)
|
|
17
|
+
.action(async (profile, options) => {
|
|
18
|
+
await EnrichCommand.run(profile, options);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
static async run(profile, options) {
|
|
22
|
+
const profilePath = resolve(profile);
|
|
23
|
+
const profileText = await readFile(profilePath, 'utf8');
|
|
24
|
+
const store = new KuzuStore(new OutputFolder(options.outputFolder).dbPath);
|
|
25
|
+
await store.initSchema();
|
|
26
|
+
try {
|
|
27
|
+
const report = await RuntimeEnricher.enrich(store, profileText, { root: resolve(options.root) });
|
|
28
|
+
EnrichCommand.print(report, options.json === true);
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
await store.close();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
static print(report, json) {
|
|
35
|
+
if (json === true) {
|
|
36
|
+
console.log(JSON.stringify(report, null, 2));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const coverage = report.totalSamples > 0
|
|
40
|
+
? Math.round((report.matchedSamples / report.totalSamples) * 100)
|
|
41
|
+
: 0;
|
|
42
|
+
console.log(chalk.green(`✓ enriched ${report.matchedNodes} node(s) with metadata.runtime`));
|
|
43
|
+
console.log(` attributed ${chalk.bold(report.matchedSamples)} / ${report.totalSamples} samples (${coverage}%), ` +
|
|
44
|
+
`${chalk.bold(`${report.matchedSelfMs} ms`)} self time`);
|
|
45
|
+
console.log(` joined ${chalk.bold(report.matchedFrames)} frame(s): ` +
|
|
46
|
+
`${report.matchedByName} by name, ${report.matchedByRange} by range`);
|
|
47
|
+
console.log(` dropped ${chalk.bold(report.droppedFrames)} frame(s), ${report.droppedSamples} sample(s) — not in graph`);
|
|
48
|
+
console.log(` attached ${chalk.bold(report.runtimeEdges)} runtime call edge(s) (CALLS_RUNTIME), ${report.droppedCallEdges} unresolved`);
|
|
49
|
+
if (report.hotspots.length > 0) {
|
|
50
|
+
console.log(chalk.bold('\nTop self time'));
|
|
51
|
+
for (const hotspot of report.hotspots.slice(0, 10)) {
|
|
52
|
+
console.log(` ${chalk.gray(`${hotspot.selfMs} ms`.padStart(10))} ${chalk.bold(hotspot.name)} ` +
|
|
53
|
+
`${chalk.gray(`(${hotspot.samples} samples)`)} ${chalk.gray(hotspot.filePath)}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (report.dropped.length > 0) {
|
|
57
|
+
console.log(chalk.bold('\nTop unattributed'));
|
|
58
|
+
for (const group of report.dropped.slice(0, 5)) {
|
|
59
|
+
console.log(` ${chalk.gray(`${group.samples} samples`.padStart(12))} ${chalk.gray(group.label)}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=enrich_command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrich_command.js","sourceRoot":"","sources":["../../src/commands/enrich_command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract_command.d.ts","sourceRoot":"","sources":["../../src/commands/extract_command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"extract_command.d.ts","sourceRoot":"","sources":["../../src/commands/extract_command.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,qBAAa,cAAc;IAC1B,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;mBAWlB,GAAG;IAsBxB,OAAO,CAAC,MAAM,CAAC,cAAc;IAW7B,OAAO,CAAC,MAAM,CAAC,OAAO;CAOtB"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
2
|
import chalk from 'chalk';
|
|
3
|
+
import { GitSource } from '../extract/git_source.js';
|
|
3
4
|
import { GraphBuilder } from '../extract/graph_builder.js';
|
|
4
5
|
import { ProjectLoader } from '../extract/project_loader.js';
|
|
5
6
|
import { JsonlStore } from '../store/jsonl_store.js';
|
|
6
|
-
import {
|
|
7
|
+
import { OutputFolder } from '../store/output_folder.js';
|
|
8
|
+
import { CommandHelpers } from './command_helpers.js';
|
|
7
9
|
export class ExtractCommand {
|
|
8
10
|
static register(program) {
|
|
9
|
-
program
|
|
11
|
+
const command = program
|
|
10
12
|
.command('extract')
|
|
11
|
-
.argument('<root>', 'path to the TypeScript project to parse')
|
|
12
|
-
|
|
13
|
+
.argument('<root>', 'path to the TypeScript project to parse');
|
|
14
|
+
CommandHelpers.addOutputFolderOption(command)
|
|
13
15
|
.option('--semantic', 'resolve heritage and CALLS edges (slower)', false)
|
|
14
16
|
.action(async (root, options) => {
|
|
15
17
|
await ExtractCommand.run(root, options);
|
|
@@ -17,15 +19,19 @@ export class ExtractCommand {
|
|
|
17
19
|
}
|
|
18
20
|
static async run(root, options) {
|
|
19
21
|
const rootPath = resolve(root);
|
|
20
|
-
const outPath =
|
|
22
|
+
const outPath = new OutputFolder(options.outputFolder).graphDir;
|
|
21
23
|
console.log(chalk.cyan(`Loading project at ${rootPath} ...`));
|
|
22
24
|
const project = ProjectLoader.load(rootPath);
|
|
23
25
|
const builder = new GraphBuilder();
|
|
24
26
|
builder.build(project, rootPath, { semantic: options.semantic });
|
|
25
27
|
const nodes = builder.getNodes();
|
|
26
28
|
const edges = builder.getEdges();
|
|
27
|
-
await
|
|
29
|
+
const source = await GitSource.detect(rootPath);
|
|
30
|
+
await JsonlStore.write(outPath, nodes, edges, source);
|
|
28
31
|
console.log(chalk.green(`✓ ${nodes.length} nodes, ${edges.length} edges -> ${outPath}`));
|
|
32
|
+
if (source !== undefined) {
|
|
33
|
+
console.log(chalk.gray(` source: ${source.baseUrl} @ ${source.commit.slice(0, 7)}${source.prefix === '' ? '' : ` (${source.prefix})`}`));
|
|
34
|
+
}
|
|
29
35
|
ExtractCommand.printBreakdown(nodes, edges);
|
|
30
36
|
}
|
|
31
37
|
static printBreakdown(nodes, edges) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract_command.js","sourceRoot":"","sources":["../../src/commands/extract_command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"extract_command.js","sourceRoot":"","sources":["../../src/commands/extract_command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hotspots_command.d.ts","sourceRoot":"","sources":["../../src/commands/hotspots_command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,qBAAa,eAAe;IAC3B,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IA0BvC,OAAO,CAAC,MAAM,CAAC,KAAK;IAsBpB,OAAO,CAAC,MAAM,CAAC,WAAW;CAe1B"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { OutputFolder } from '../store/output_folder.js';
|
|
3
|
+
import { CommandHelpers } from './command_helpers.js';
|
|
4
|
+
const METRICS = ['self-time', 'samples', 'callers', 'call-count', 'blast-radius'];
|
|
5
|
+
export class HotspotsCommand {
|
|
6
|
+
static register(program) {
|
|
7
|
+
const command = program
|
|
8
|
+
.command('hotspots')
|
|
9
|
+
.description('rank nodes by optimization leverage (runtime self-time, fan-in, call-count, or blast radius)');
|
|
10
|
+
CommandHelpers.addOutputFolderOption(command)
|
|
11
|
+
.option('--by <metric>', `ranking metric: ${METRICS.join(', ')} (default: self-time when enriched, else callers)`)
|
|
12
|
+
.option('--limit <n>', 'maximum number of hotspots to return', '20')
|
|
13
|
+
.option('--measured-only', 'restrict ranking to nodes that carry runtime metrics', false)
|
|
14
|
+
.option('--json', 'emit raw JSON', false)
|
|
15
|
+
.action(async (options) => {
|
|
16
|
+
if (options.by !== undefined && METRICS.includes(options.by) === false) {
|
|
17
|
+
console.error(chalk.red(`unknown metric '${options.by}' — choose one of: ${METRICS.join(', ')}`));
|
|
18
|
+
process.exitCode = 1;
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
await CommandHelpers.withQuery(new OutputFolder(options.outputFolder), async (query) => {
|
|
22
|
+
const report = await query.hotspots({
|
|
23
|
+
by: options.by,
|
|
24
|
+
limit: Number(options.limit),
|
|
25
|
+
measuredOnly: options.measuredOnly === true,
|
|
26
|
+
});
|
|
27
|
+
HotspotsCommand.print(report, options.json === true);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
static print(report, json) {
|
|
32
|
+
if (json === true) {
|
|
33
|
+
console.log(JSON.stringify(report, null, 2));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
if (report.fellBack === true) {
|
|
37
|
+
console.log(chalk.yellow('! no runtime data in graph — run `enrich` first. Ranking by `callers` (static fan-in) instead.'));
|
|
38
|
+
}
|
|
39
|
+
const scope = report.measuredOnly === true ? chalk.gray(' (measured nodes only)') : '';
|
|
40
|
+
console.log(chalk.bold(`Hotspots by ${report.metric}`) + scope);
|
|
41
|
+
if (report.hotspots.length === 0) {
|
|
42
|
+
console.log(chalk.yellow('(no results)'));
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
report.hotspots.forEach((hotspot, index) => {
|
|
46
|
+
const rank = chalk.gray(`${String(index + 1).padStart(2)}.`);
|
|
47
|
+
const score = chalk.cyan(HotspotsCommand.formatScore(report.metric, hotspot.score).padStart(14));
|
|
48
|
+
console.log(`${rank} ${score} ${chalk.gray(hotspot.kind.padEnd(10))} ${chalk.bold(hotspot.name)} ${chalk.gray(`${hotspot.filePath}:${hotspot.startLine}`)}`);
|
|
49
|
+
});
|
|
50
|
+
console.log(chalk.gray(`\n${report.hotspots.length} hotspot(s)`));
|
|
51
|
+
}
|
|
52
|
+
static formatScore(metric, score) {
|
|
53
|
+
if (metric === 'self-time') {
|
|
54
|
+
return `${score} ms`;
|
|
55
|
+
}
|
|
56
|
+
if (metric === 'samples') {
|
|
57
|
+
return `${score} samples`;
|
|
58
|
+
}
|
|
59
|
+
if (metric === 'callers') {
|
|
60
|
+
return `${score} callers`;
|
|
61
|
+
}
|
|
62
|
+
if (metric === 'call-count') {
|
|
63
|
+
return `${score} calls`;
|
|
64
|
+
}
|
|
65
|
+
return `${score} impacted`;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=hotspots_command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hotspots_command.js","sourceRoot":"","sources":["../../src/commands/hotspots_command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAgB,MAAM,sBAAsB,CAAC;AAQpE,MAAM,OAAO,GAAoB,CAAC,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;AAEnG,MAAM,OAAO,eAAe;IAC3B,MAAM,CAAC,QAAQ,CAAC,OAAgB;QAC/B,MAAM,OAAO,GAAG,OAAO;aACrB,OAAO,CAAC,UAAU,CAAC;aACnB,WAAW,CAAC,8FAA8F,CAAC,CAAC;QAC9G,cAAc,CAAC,qBAAqB,CAAC,OAAO,CAAC;aAC3C,MAAM,CAAC,eAAe,EAAE,mBAAmB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,mDAAmD,CAAC;aACjH,MAAM,CAAC,aAAa,EAAE,sCAAsC,EAAE,IAAI,CAAC;aACnE,MAAM,CAAC,iBAAiB,EAAE,sDAAsD,EAAE,KAAK,CAAC;aACxF,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC;aACxC,MAAM,CAAC,KAAK,EAAE,OAAwB,EAAE,EAAE;YAC1C,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAmB,CAAC,KAAK,KAAK,EAAE,CAAC;gBACzF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,EAAE,sBAAsB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;gBACrB,OAAO;YACR,CAAC;YACD,MAAM,cAAc,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACtF,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC;oBACnC,EAAE,EAAE,OAAO,CAAC,EAA+B;oBAC3C,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;oBAC5B,YAAY,EAAE,OAAO,CAAC,YAAY,KAAK,IAAI;iBAC3C,CAAC,CAAC;gBACH,eAAe,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,MAAqB,EAAE,IAAa;QACxD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,OAAO;QACR,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,gGAAgG,CAAC,CAAC,CAAC;QAC7H,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;QAChE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YAC1C,OAAO;QACR,CAAC;QACD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;YAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7D,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;YACjG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAChK,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;IACnE,CAAC;IAEO,MAAM,CAAC,WAAW,CAAC,MAAqB,EAAE,KAAa;QAC9D,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC5B,OAAO,GAAG,KAAK,KAAK,CAAC;QACtB,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,KAAK,UAAU,CAAC;QAC3B,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,GAAG,KAAK,UAAU,CAAC;QAC3B,CAAC;QACD,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;YAC7B,OAAO,GAAG,KAAK,QAAQ,CAAC;QACzB,CAAC;QACD,OAAO,GAAG,KAAK,WAAW,CAAC;IAC5B,CAAC;CACD"}
|
|
@@ -1,16 +1,25 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
/** Outcome of mirroring the bundled assets, as relative paths under `.claude/`. */
|
|
3
|
+
export type InstallResult = {
|
|
4
|
+
installed: string[];
|
|
5
|
+
skipped: string[];
|
|
6
|
+
};
|
|
2
7
|
/**
|
|
3
|
-
* Installs the bundled Claude Code
|
|
4
|
-
*
|
|
8
|
+
* Installs the bundled Claude Code assets — every slash command and skill under
|
|
9
|
+
* `dotclaude_folder/` — into a target project's `.claude/` directory, so an agent
|
|
10
|
+
* can drive the knowledge graph through the ts-knowledge-graph CLI.
|
|
5
11
|
*/
|
|
6
12
|
export declare class InstallCommand {
|
|
7
13
|
static register(program: Command): void;
|
|
8
14
|
private static run;
|
|
9
15
|
/**
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* `
|
|
16
|
+
* Copies every file under `sourceRoot` into `targetRoot`, preserving the
|
|
17
|
+
* relative tree (so `commands/` and `skills/` land where Claude Code reads
|
|
18
|
+
* them). Existing files are left untouched unless `force` is true. Returns the
|
|
19
|
+
* relative paths that were written and those that were skipped.
|
|
13
20
|
*/
|
|
14
|
-
|
|
21
|
+
static mirror(sourceRoot: string, targetRoot: string, force: boolean): InstallResult;
|
|
22
|
+
/** Recursively collects every file path under a directory, depth-first. */
|
|
23
|
+
private static collectFiles;
|
|
15
24
|
}
|
|
16
25
|
//# sourceMappingURL=install_command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install_command.d.ts","sourceRoot":"","sources":["../../src/commands/install_command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install_command.d.ts","sourceRoot":"","sources":["../../src/commands/install_command.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,mFAAmF;AACnF,MAAM,MAAM,aAAa,GAAG;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF;;;;GAIG;AACH,qBAAa,cAAc;IAC1B,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAWvC,OAAO,CAAC,MAAM,CAAC,GAAG;IAsBlB;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,aAAa;IAqBpF,2EAA2E;IAC3E,OAAO,CAAC,MAAM,CAAC,YAAY;CAc3B"}
|
|
@@ -1,42 +1,79 @@
|
|
|
1
|
-
import { copyFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
2
|
-
import { dirname, resolve } from 'node:path';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
1
|
+
import { copyFileSync, existsSync, mkdirSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { dirname, join, relative, resolve } from 'node:path';
|
|
4
3
|
import chalk from 'chalk';
|
|
5
|
-
|
|
4
|
+
import { PROJECT_ROOT } from '../project_root.js';
|
|
5
|
+
const SOURCE_DIR = 'dotclaude_folder';
|
|
6
|
+
const TARGET_DIR = '.claude';
|
|
6
7
|
/**
|
|
7
|
-
* Installs the bundled Claude Code
|
|
8
|
-
*
|
|
8
|
+
* Installs the bundled Claude Code assets — every slash command and skill under
|
|
9
|
+
* `dotclaude_folder/` — into a target project's `.claude/` directory, so an agent
|
|
10
|
+
* can drive the knowledge graph through the ts-knowledge-graph CLI.
|
|
9
11
|
*/
|
|
10
12
|
export class InstallCommand {
|
|
11
13
|
static register(program) {
|
|
12
14
|
program
|
|
13
15
|
.command('install')
|
|
14
|
-
.description('install the ts-knowledge-graph Claude Code
|
|
15
|
-
.argument('[destFolder]',
|
|
16
|
-
.option('--force', 'overwrite
|
|
17
|
-
.action(
|
|
18
|
-
|
|
16
|
+
.description('install the ts-knowledge-graph Claude Code commands and skills into a project')
|
|
17
|
+
.argument('[destFolder]', "project root to install into (its '.claude/' directory)", process.cwd())
|
|
18
|
+
.option('--force', 'overwrite files that already exist', false)
|
|
19
|
+
.action((destFolder, options) => {
|
|
20
|
+
InstallCommand.run(destFolder, options);
|
|
19
21
|
});
|
|
20
22
|
}
|
|
21
|
-
static
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
console.log(chalk.yellow(`✗ ${target} already exists — pass --force to overwrite`));
|
|
23
|
+
static run(destFolder, options) {
|
|
24
|
+
const sourceRoot = resolve(PROJECT_ROOT, SOURCE_DIR);
|
|
25
|
+
if (existsSync(sourceRoot) === false) {
|
|
26
|
+
console.log(chalk.red(`✗ bundled assets not found at ${sourceRoot}`));
|
|
26
27
|
return;
|
|
27
28
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
const targetRoot = resolve(destFolder, TARGET_DIR);
|
|
30
|
+
const result = InstallCommand.mirror(sourceRoot, targetRoot, options.force);
|
|
31
|
+
for (const rel of result.installed) {
|
|
32
|
+
console.log(chalk.green(`✓ ${rel}`));
|
|
33
|
+
}
|
|
34
|
+
for (const rel of result.skipped) {
|
|
35
|
+
console.log(chalk.yellow(`✗ skip (exists): ${rel}`));
|
|
36
|
+
}
|
|
37
|
+
const summary = `installed ${result.installed.length} file(s) into ${targetRoot}`;
|
|
38
|
+
const hint = result.skipped.length > 0 ? `, skipped ${result.skipped.length} (pass --force to overwrite)` : '';
|
|
39
|
+
console.log(chalk.bold(`\n${summary}${hint}`));
|
|
31
40
|
}
|
|
32
41
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* `
|
|
42
|
+
* Copies every file under `sourceRoot` into `targetRoot`, preserving the
|
|
43
|
+
* relative tree (so `commands/` and `skills/` land where Claude Code reads
|
|
44
|
+
* them). Existing files are left untouched unless `force` is true. Returns the
|
|
45
|
+
* relative paths that were written and those that were skipped.
|
|
36
46
|
*/
|
|
37
|
-
static
|
|
38
|
-
const
|
|
39
|
-
|
|
47
|
+
static mirror(sourceRoot, targetRoot, force) {
|
|
48
|
+
const installed = [];
|
|
49
|
+
const skipped = [];
|
|
50
|
+
for (const source of InstallCommand.collectFiles(sourceRoot)) {
|
|
51
|
+
const rel = relative(sourceRoot, source);
|
|
52
|
+
const target = join(targetRoot, rel);
|
|
53
|
+
if (existsSync(target) === true && force === false) {
|
|
54
|
+
skipped.push(rel);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
58
|
+
copyFileSync(source, target);
|
|
59
|
+
installed.push(rel);
|
|
60
|
+
}
|
|
61
|
+
return { installed, skipped };
|
|
62
|
+
}
|
|
63
|
+
/** Recursively collects every file path under a directory, depth-first. */
|
|
64
|
+
static collectFiles(dir) {
|
|
65
|
+
const files = [];
|
|
66
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
67
|
+
const full = join(dir, entry.name);
|
|
68
|
+
if (entry.isDirectory() === true) {
|
|
69
|
+
files.push(...InstallCommand.collectFiles(full));
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (entry.isFile() === true) {
|
|
73
|
+
files.push(full);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return files;
|
|
40
77
|
}
|
|
41
78
|
}
|
|
42
79
|
//# sourceMappingURL=install_command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install_command.js","sourceRoot":"","sources":["../../src/commands/install_command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"install_command.js","sourceRoot":"","sources":["../../src/commands/install_command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,UAAU,GAAG,kBAAkB,CAAC;AACtC,MAAM,UAAU,GAAG,SAAS,CAAC;AAY7B;;;;GAIG;AACH,MAAM,OAAO,cAAc;IAC1B,MAAM,CAAC,QAAQ,CAAC,OAAgB;QAC/B,OAAO;aACL,OAAO,CAAC,SAAS,CAAC;aAClB,WAAW,CAAC,+EAA+E,CAAC;aAC5F,QAAQ,CAAC,cAAc,EAAE,yDAAyD,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;aAClG,MAAM,CAAC,SAAS,EAAE,oCAAoC,EAAE,KAAK,CAAC;aAC9D,MAAM,CAAC,CAAC,UAAkB,EAAE,OAAuB,EAAE,EAAE;YACvD,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,GAAG,CAAC,UAAkB,EAAE,OAAuB;QAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QACrD,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,KAAK,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,iCAAiC,UAAU,EAAE,CAAC,CAAC,CAAC;YACtE,OAAO;QACR,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QAE5E,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,MAAM,CAAC,SAAS,CAAC,MAAM,iBAAiB,UAAU,EAAE,CAAC;QAClF,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,MAAM,CAAC,OAAO,CAAC,MAAM,8BAA8B,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/G,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,UAAkB,EAAE,UAAkB,EAAE,KAAc;QACnE,MAAM,SAAS,GAAa,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,KAAK,MAAM,MAAM,IAAI,cAAc,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9D,MAAM,GAAG,GAAG,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YAErC,IAAI,UAAU,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAClB,SAAS;YACV,CAAC;YAED,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC7B,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;IAC/B,CAAC;IAED,2EAA2E;IACnE,MAAM,CAAC,YAAY,CAAC,GAAW;QACtC,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACnC,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;gBACjD,SAAS;YACV,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACF,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load_command.d.ts","sourceRoot":"","sources":["../../src/commands/load_command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"load_command.d.ts","sourceRoot":"","sources":["../../src/commands/load_command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,qBAAa,WAAW;IACvB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;mBAUlB,GAAG;CAexB"}
|
|
@@ -1,26 +1,33 @@
|
|
|
1
|
-
import { resolve } from 'node:path';
|
|
2
1
|
import chalk from 'chalk';
|
|
2
|
+
import { RUNTIME_MANIFEST_KEY } from '../schema/runtime_manifest.js';
|
|
3
|
+
import { SOURCE_MANIFEST_KEY } from '../schema/source_manifest.js';
|
|
3
4
|
import { JsonlReader } from '../store/jsonl_reader.js';
|
|
4
5
|
import { KuzuStore } from '../store/kuzu_store.js';
|
|
5
|
-
import {
|
|
6
|
+
import { OutputFolder } from '../store/output_folder.js';
|
|
7
|
+
import { CommandHelpers } from './command_helpers.js';
|
|
6
8
|
export class LoadCommand {
|
|
7
9
|
static register(program) {
|
|
8
|
-
program
|
|
10
|
+
const command = program
|
|
9
11
|
.command('load')
|
|
10
|
-
.description('load a JSONL graph into an embedded Kùzu database')
|
|
11
|
-
|
|
12
|
-
.
|
|
13
|
-
.
|
|
14
|
-
await LoadCommand.run(graphDir, options.db);
|
|
12
|
+
.description('load a JSONL graph into an embedded Kùzu database');
|
|
13
|
+
CommandHelpers.addOutputFolderOption(command)
|
|
14
|
+
.action(async (options) => {
|
|
15
|
+
await LoadCommand.run(new OutputFolder(options.outputFolder));
|
|
15
16
|
});
|
|
16
17
|
}
|
|
17
|
-
static async run(
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
const store = new KuzuStore(resolvedDb);
|
|
18
|
+
static async run(folder) {
|
|
19
|
+
console.log(chalk.cyan(`Loading ${folder.graphDir} into ${folder.dbPath} ...`));
|
|
20
|
+
const { nodes, edges, source } = await JsonlReader.read(folder.graphDir);
|
|
21
|
+
const store = new KuzuStore(folder.dbPath);
|
|
22
22
|
await store.initSchema();
|
|
23
23
|
await store.load(nodes, edges);
|
|
24
|
+
if (source === undefined) {
|
|
25
|
+
await store.clearGraphMeta(SOURCE_MANIFEST_KEY);
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
await store.writeGraphMeta(SOURCE_MANIFEST_KEY, source);
|
|
29
|
+
}
|
|
30
|
+
await store.clearGraphMeta(RUNTIME_MANIFEST_KEY);
|
|
24
31
|
await store.close();
|
|
25
32
|
console.log(chalk.green(`✓ loaded ${nodes.length} nodes, ${edges.length} edges`));
|
|
26
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"load_command.js","sourceRoot":"","sources":["../../src/commands/load_command.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"load_command.js","sourceRoot":"","sources":["../../src/commands/load_command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,OAAO,WAAW;IACvB,MAAM,CAAC,QAAQ,CAAC,OAAgB;QAC/B,MAAM,OAAO,GAAG,OAAO;aACrB,OAAO,CAAC,MAAM,CAAC;aACf,WAAW,CAAC,mDAAmD,CAAC,CAAC;QACnE,cAAc,CAAC,qBAAqB,CAAC,OAAO,CAAC;aAC3C,MAAM,CAAC,KAAK,EAAE,OAAiC,EAAE,EAAE;YACnD,MAAM,WAAW,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAoB;QAC5C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC;QAChF,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACzE,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC3C,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;QACzB,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,KAAK,CAAC,cAAc,CAAC,mBAAmB,CAAC,CAAC;QACjD,CAAC;aAAM,CAAC;YACP,MAAM,KAAK,CAAC,cAAc,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;QACzD,CAAC;QACD,MAAM,KAAK,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;QACjD,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,MAAM,WAAW,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC,CAAC;IACnF,CAAC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neighbors_command.d.ts","sourceRoot":"","sources":["../../src/commands/neighbors_command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"neighbors_command.d.ts","sourceRoot":"","sources":["../../src/commands/neighbors_command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,qBAAa,gBAAgB;IAC5B,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;CAavC"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OutputFolder } from '../store/output_folder.js';
|
|
2
|
+
import { CommandHelpers } from './command_helpers.js';
|
|
2
3
|
export class NeighborsCommand {
|
|
3
4
|
static register(program) {
|
|
4
|
-
program
|
|
5
|
+
const command = program
|
|
5
6
|
.command('neighbors')
|
|
6
7
|
.description('show the one-hop neighbourhood of <id>')
|
|
7
|
-
.argument('<id>', 'node id to inspect')
|
|
8
|
-
|
|
8
|
+
.argument('<id>', 'node id to inspect');
|
|
9
|
+
CommandHelpers.addOutputFolderOption(command)
|
|
9
10
|
.option('--json', 'emit raw JSON', false)
|
|
10
11
|
.action(async (id, options) => {
|
|
11
|
-
await CommandHelpers.withQuery(options.
|
|
12
|
+
await CommandHelpers.withQuery(new OutputFolder(options.outputFolder), async (query) => {
|
|
12
13
|
CommandHelpers.printNeighbors(await query.neighborhood(id), options.json === true);
|
|
13
14
|
});
|
|
14
15
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"neighbors_command.js","sourceRoot":"","sources":["../../src/commands/neighbors_command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"neighbors_command.js","sourceRoot":"","sources":["../../src/commands/neighbors_command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAgB,MAAM,sBAAsB,CAAC;AAEpE,MAAM,OAAO,gBAAgB;IAC5B,MAAM,CAAC,QAAQ,CAAC,OAAgB;QAC/B,MAAM,OAAO,GAAG,OAAO;aACrB,OAAO,CAAC,WAAW,CAAC;aACpB,WAAW,CAAC,wCAAwC,CAAC;aACrD,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QACzC,cAAc,CAAC,qBAAqB,CAAC,OAAO,CAAC;aAC3C,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC;aACxC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAAqB,EAAE,EAAE;YACnD,MAAM,cAAc,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACtF,cAAc,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACpF,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"references_command.d.ts","sourceRoot":"","sources":["../../src/commands/references_command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"references_command.d.ts","sourceRoot":"","sources":["../../src/commands/references_command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,qBAAa,iBAAiB;IAC7B,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;CAavC"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { OutputFolder } from '../store/output_folder.js';
|
|
2
|
+
import { CommandHelpers } from './command_helpers.js';
|
|
2
3
|
export class ReferencesCommand {
|
|
3
4
|
static register(program) {
|
|
4
|
-
program
|
|
5
|
+
const command = program
|
|
5
6
|
.command('references')
|
|
6
7
|
.description('list everything that references <id> (calls, type usage, heritage, new)')
|
|
7
|
-
.argument('<id>', 'node id to inspect')
|
|
8
|
-
|
|
8
|
+
.argument('<id>', 'node id to inspect');
|
|
9
|
+
CommandHelpers.addOutputFolderOption(command)
|
|
9
10
|
.option('--json', 'emit raw JSON', false)
|
|
10
11
|
.action(async (id, options) => {
|
|
11
|
-
await CommandHelpers.withQuery(options.
|
|
12
|
+
await CommandHelpers.withQuery(new OutputFolder(options.outputFolder), async (query) => {
|
|
12
13
|
CommandHelpers.printNeighbors(await query.references(id), options.json === true);
|
|
13
14
|
});
|
|
14
15
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"references_command.js","sourceRoot":"","sources":["../../src/commands/references_command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"references_command.js","sourceRoot":"","sources":["../../src/commands/references_command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAgB,MAAM,sBAAsB,CAAC;AAEpE,MAAM,OAAO,iBAAiB;IAC7B,MAAM,CAAC,QAAQ,CAAC,OAAgB;QAC/B,MAAM,OAAO,GAAG,OAAO;aACrB,OAAO,CAAC,YAAY,CAAC;aACrB,WAAW,CAAC,yEAAyE,CAAC;aACtF,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QACzC,cAAc,CAAC,qBAAqB,CAAC,OAAO,CAAC;aAC3C,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC;aACxC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAAqB,EAAE,EAAE;YACnD,MAAM,cAAc,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;gBACtF,cAAc,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAClF,CAAC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* `report` command — gathers a {@link GraphReportData} from the loaded graph and
|
|
4
|
+
* writes a CODEBASE_BRIEF in the chosen format. `markdown` and `json` come
|
|
5
|
+
* straight from the pure {@link GraphReport} renderer; `pdf` renders the visual
|
|
6
|
+
* HTML and converts it through the optional {@link PdfRenderer}, falling back to
|
|
7
|
+
* the HTML when no engine is installed.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ReportCommand {
|
|
10
|
+
static register(program: Command): void;
|
|
11
|
+
private static run;
|
|
12
|
+
private static gather;
|
|
13
|
+
private static emitPdf;
|
|
14
|
+
private static clampLimit;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=report_command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report_command.d.ts","sourceRoot":"","sources":["../../src/commands/report_command.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC;;;;;;GAMG;AACH,qBAAa,aAAa;IACzB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;mBAclB,GAAG;mBA6BH,MAAM;mBAgBN,OAAO;IAuB5B,OAAO,CAAC,MAAM,CAAC,UAAU;CAWzB"}
|