@documentation-robotics/cli 0.1.13 → 0.3.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 +74 -2
- package/dist/analysis/relationship-classifier.js +2 -9
- package/dist/analysis/relationship-classifier.js.map +2 -2
- package/dist/analyzers/call-graph-utils.js +2 -2
- package/dist/analyzers/call-graph-utils.js.map +2 -2
- package/dist/analyzers/cards/build.js +171 -0
- package/dist/analyzers/cards/build.js.map +7 -0
- package/dist/analyzers/cards/classify.js +42 -0
- package/dist/analyzers/cards/classify.js.map +7 -0
- package/dist/analyzers/cards/edge-index.js +44 -0
- package/dist/analyzers/cards/edge-index.js.map +7 -0
- package/dist/analyzers/cards/facts.js +46 -0
- package/dist/analyzers/cards/facts.js.map +7 -0
- package/dist/analyzers/cards/graph.js +42 -0
- package/dist/analyzers/cards/graph.js.map +7 -0
- package/dist/analyzers/cards/index.js +8 -0
- package/dist/analyzers/cards/index.js.map +7 -0
- package/dist/analyzers/cards/tier0.js +18 -0
- package/dist/analyzers/cards/tier0.js.map +7 -0
- package/dist/analyzers/cards/types.js +1 -0
- package/dist/analyzers/cards/types.js.map +7 -0
- package/dist/analyzers/cbm-analyzer.js +195 -171
- package/dist/analyzers/cbm-analyzer.js.map +2 -2
- package/dist/analyzers/cbm-responses.js +336 -0
- package/dist/analyzers/cbm-responses.js.map +7 -0
- package/dist/analyzers/edge-relationships.js +45 -0
- package/dist/analyzers/edge-relationships.js.map +7 -0
- package/dist/analyzers/mapping-loader.js +9 -0
- package/dist/analyzers/mapping-loader.js.map +2 -2
- package/dist/analyzers/tier0-rules.js +153 -0
- package/dist/analyzers/tier0-rules.js.map +7 -0
- package/dist/analyzers/types.js.map +1 -1
- package/dist/analyzers/verify-engine.js +22 -19
- package/dist/analyzers/verify-engine.js.map +2 -2
- package/dist/audit/relationships/ai/prompts.js +10 -10
- package/dist/audit/relationships/ai/prompts.js.map +2 -2
- package/dist/audit/relationships/analysis/layer-templates.js +52 -52
- package/dist/audit/relationships/analysis/layer-templates.js.map +1 -1
- package/dist/cli.js +112 -28
- package/dist/cli.js.map +3 -3
- package/dist/coding-agents/agents/claude-code.js +3 -1
- package/dist/coding-agents/agents/claude-code.js.map +2 -2
- package/dist/coding-agents/claude-code-client.js +2 -1
- package/dist/coding-agents/claude-code-client.js.map +2 -2
- package/dist/coding-agents/copilot-client.js +17 -12
- package/dist/coding-agents/copilot-client.js.map +2 -2
- package/dist/coding-agents/default-permissions.js +152 -0
- package/dist/coding-agents/default-permissions.js.map +7 -0
- package/dist/coding-agents/drbot-mcp.js +167 -0
- package/dist/coding-agents/drbot-mcp.js.map +7 -0
- package/dist/commands/add.js +12 -7
- package/dist/commands/add.js.map +2 -2
- package/dist/commands/analyzer.js +134 -23
- package/dist/commands/analyzer.js.map +2 -2
- package/dist/commands/audit.js +6 -6
- package/dist/commands/audit.js.map +2 -2
- package/dist/commands/changeset-verify.js +55 -0
- package/dist/commands/changeset-verify.js.map +7 -0
- package/dist/commands/changeset.js +261 -147
- package/dist/commands/changeset.js.map +2 -2
- package/dist/commands/delete.js +52 -19
- package/dist/commands/delete.js.map +3 -3
- package/dist/commands/element.js +3 -2
- package/dist/commands/element.js.map +2 -2
- package/dist/commands/farm.js +773 -0
- package/dist/commands/farm.js.map +7 -0
- package/dist/commands/init.js +11 -1
- package/dist/commands/init.js.map +2 -2
- package/dist/commands/mcp.js +122 -0
- package/dist/commands/mcp.js.map +7 -0
- package/dist/commands/relationship.js +251 -47
- package/dist/commands/relationship.js.map +2 -2
- package/dist/commands/reports.js +1 -1
- package/dist/commands/reports.js.map +2 -2
- package/dist/commands/update.js +56 -24
- package/dist/commands/update.js.map +2 -2
- package/dist/commands/upgrade.js +99 -11
- package/dist/commands/upgrade.js.map +3 -3
- package/dist/commands/validate.js +41 -3
- package/dist/commands/validate.js.map +2 -2
- package/dist/commands/version.js +2 -2
- package/dist/commands/version.js.map +2 -2
- package/dist/commands/visualize.js +4 -3
- package/dist/commands/visualize.js.map +2 -2
- package/dist/config.js +83 -0
- package/dist/config.js.map +7 -0
- package/dist/core/annotation-store.js +138 -0
- package/dist/core/annotation-store.js.map +7 -0
- package/dist/core/catalog-migration.js +33 -0
- package/dist/core/catalog-migration.js.map +7 -0
- package/dist/core/changeset-analysis.js +421 -0
- package/dist/core/changeset-analysis.js.map +7 -0
- package/dist/core/changeset-base-index.js +153 -0
- package/dist/core/changeset-base-index.js.map +7 -0
- package/dist/core/changeset-brief-delta.js +102 -0
- package/dist/core/changeset-brief-delta.js.map +7 -0
- package/dist/core/changeset-graph.js +281 -0
- package/dist/core/changeset-graph.js.map +7 -0
- package/dist/core/changeset-only-guard.js +32 -0
- package/dist/core/changeset-only-guard.js.map +7 -0
- package/dist/core/changeset-summary.js +68 -0
- package/dist/core/changeset-summary.js.map +7 -0
- package/dist/core/changeset-validator.js +66 -20
- package/dist/core/changeset-validator.js.map +2 -2
- package/dist/core/changeset-verify.js +518 -0
- package/dist/core/changeset-verify.js.map +7 -0
- package/dist/core/changeset.js +56 -9
- package/dist/core/changeset.js.map +2 -2
- package/dist/core/element-type-migration.js +145 -0
- package/dist/core/element-type-migration.js.map +7 -0
- package/dist/core/farm-manifest.js +140 -0
- package/dist/core/farm-manifest.js.map +7 -0
- package/dist/core/farm-sync-engine.js +346 -0
- package/dist/core/farm-sync-engine.js.map +7 -0
- package/dist/core/farm-sync-state.js +167 -0
- package/dist/core/farm-sync-state.js.map +7 -0
- package/dist/core/manifest.js +6 -3
- package/dist/core/manifest.js.map +2 -2
- package/dist/core/migration-registry.js +84 -1
- package/dist/core/migration-registry.js.map +2 -2
- package/dist/core/model-upgrade.js +102 -0
- package/dist/core/model-upgrade.js.map +7 -0
- package/dist/core/model.js +257 -44
- package/dist/core/model.js.map +3 -3
- package/dist/core/mutation-handler.js +71 -6
- package/dist/core/mutation-handler.js.map +2 -2
- package/dist/core/relationship-migration-table.js +6639 -0
- package/dist/core/relationship-migration-table.js.map +7 -0
- package/dist/core/relationship-migration.js +272 -0
- package/dist/core/relationship-migration.js.map +7 -0
- package/dist/core/relationship-prune.js +49 -0
- package/dist/core/relationship-prune.js.map +7 -0
- package/dist/core/relationship-staging.js +68 -0
- package/dist/core/relationship-staging.js.map +7 -0
- package/dist/core/relationships.js +26 -4
- package/dist/core/relationships.js.map +2 -2
- package/dist/core/report-data-model.js +7 -13
- package/dist/core/report-data-model.js.map +2 -2
- package/dist/core/staged-changeset-storage.js +64 -17
- package/dist/core/staged-changeset-storage.js.map +2 -2
- package/dist/core/staged-source-reference.js +28 -0
- package/dist/core/staged-source-reference.js.map +7 -0
- package/dist/core/staging-area.js +83 -18
- package/dist/core/staging-area.js.map +2 -2
- package/dist/core/virtual-projection.js +14 -5
- package/dist/core/virtual-projection.js.map +2 -2
- package/dist/export/archimate-exporter.js +1 -0
- package/dist/export/archimate-exporter.js.map +2 -2
- package/dist/generated/compiled-validators.js +2 -2
- package/dist/generated/compiled-validators.js.map +2 -2
- package/dist/generated/layer-registry.js +16 -16
- package/dist/generated/layer-registry.js.map +2 -2
- package/dist/generated/node-types.js +186 -168
- package/dist/generated/node-types.js.map +2 -2
- package/dist/generated/relationship-index.js +2209 -7727
- package/dist/generated/relationship-index.js.map +2 -2
- package/dist/integrations/claude_code/agents/dr-architect.md +16 -3
- package/dist/integrations/claude_code/agents/dr-extractor.md +1 -1
- package/dist/integrations/claude_code/commands/dr-analyzer.md +565 -0
- package/dist/integrations/claude_code/commands/dr-map.md +13 -0
- package/dist/integrations/claude_code/commands/dr-plan.md +40 -0
- package/dist/integrations/claude_code/commands/dr-relate.md +106 -96
- package/dist/integrations/claude_code/commands/dr-verify.md +45 -2
- package/dist/integrations/claude_code/docs/END_TO_END_WALKTHROUGH.md +14 -0
- package/dist/integrations/claude_code/docs/MCP_SERVER.md +79 -0
- package/dist/integrations/claude_code/docs/QUICK_START.md +37 -8
- package/dist/integrations/claude_code/docs/README.md +52 -1
- package/dist/integrations/claude_code/skills/dr_01_motivation_layer/SKILL.md +93 -72
- package/dist/integrations/claude_code/skills/dr_02_business_layer/SKILL.md +163 -126
- package/dist/integrations/claude_code/skills/dr_03_product_layer/SKILL.md +161 -126
- package/dist/integrations/claude_code/skills/dr_04_security_layer/SKILL.md +153 -133
- package/dist/integrations/claude_code/skills/dr_05_application_layer/SKILL.md +129 -100
- package/dist/integrations/claude_code/skills/dr_06_technology_layer/SKILL.md +111 -94
- package/dist/integrations/claude_code/skills/dr_07_api_layer/SKILL.md +143 -157
- package/dist/integrations/claude_code/skills/dr_08_data_model_layer/SKILL.md +117 -33
- package/dist/integrations/claude_code/skills/dr_09_dataset_layer/SKILL.md +74 -25
- package/dist/integrations/claude_code/skills/dr_10_ux_layer/SKILL.md +88 -12
- package/dist/integrations/claude_code/skills/dr_11_navigation_layer/SKILL.md +83 -24
- package/dist/integrations/claude_code/skills/dr_12_apm_layer/SKILL.md +57 -12
- package/dist/integrations/claude_code/skills/dr_13_testing_layer/SKILL.md +92 -15
- package/dist/integrations/claude_code/skills/dr_change_planning/SKILL.md +119 -0
- package/dist/integrations/claude_code/skills/dr_changeset_reviewer/SKILL.md +3 -0
- package/dist/integrations/claude_code/skills/dr_engineering_guide/SKILL.md +1 -1
- package/dist/integrations/github_copilot/agents/dr-architect.md +1 -1
- package/dist/integrations/github_copilot/skills/dr_01_motivation_layer/SKILL.md +182 -102
- package/dist/integrations/github_copilot/skills/dr_02_business_layer/SKILL.md +266 -148
- package/dist/integrations/github_copilot/skills/dr_03_product_layer/SKILL.md +547 -86
- package/dist/integrations/github_copilot/skills/dr_04_security_layer/SKILL.md +164 -169
- package/dist/integrations/github_copilot/skills/dr_05_application_layer/SKILL.md +420 -150
- package/dist/integrations/github_copilot/skills/dr_06_technology_layer/SKILL.md +331 -138
- package/dist/integrations/github_copilot/skills/dr_07_api_layer/SKILL.md +265 -201
- package/dist/integrations/github_copilot/skills/dr_08_data_model_layer/SKILL.md +181 -58
- package/dist/integrations/github_copilot/skills/dr_09_dataset_layer/SKILL.md +209 -57
- package/dist/integrations/github_copilot/skills/dr_10_ux_layer/SKILL.md +277 -112
- package/dist/integrations/github_copilot/skills/dr_11_navigation_layer/SKILL.md +219 -70
- package/dist/integrations/github_copilot/skills/dr_12_apm_layer/SKILL.md +189 -105
- package/dist/integrations/github_copilot/skills/dr_13_testing_layer/SKILL.md +222 -102
- package/dist/integrations/github_copilot/skills/dr_change_planning/SKILL.md +119 -0
- package/dist/integrations/github_copilot/skills/dr_changeset_reviewer/SKILL.md +3 -0
- package/dist/integrations/hash-utils.js.map +2 -2
- package/dist/mcp/api-key-manager.js +111 -0
- package/dist/mcp/api-key-manager.js.map +7 -0
- package/dist/mcp/changeset-only.js +34 -0
- package/dist/mcp/changeset-only.js.map +7 -0
- package/dist/mcp/http-transport.js +176 -0
- package/dist/mcp/http-transport.js.map +7 -0
- package/dist/mcp/resource-registry.js +97 -0
- package/dist/mcp/resource-registry.js.map +7 -0
- package/dist/mcp/tool-registry.js +60 -0
- package/dist/mcp/tool-registry.js.map +7 -0
- package/dist/mcp/tools/annotation-create.js +39 -0
- package/dist/mcp/tools/annotation-create.js.map +7 -0
- package/dist/mcp/tools/annotation-delete.js +29 -0
- package/dist/mcp/tools/annotation-delete.js.map +7 -0
- package/dist/mcp/tools/annotation-get.js +29 -0
- package/dist/mcp/tools/annotation-get.js.map +7 -0
- package/dist/mcp/tools/annotation-list.js +24 -0
- package/dist/mcp/tools/annotation-list.js.map +7 -0
- package/dist/mcp/tools/annotation-reply.js +34 -0
- package/dist/mcp/tools/annotation-reply.js.map +7 -0
- package/dist/mcp/tools/annotation-shared.js +10 -0
- package/dist/mcp/tools/annotation-shared.js.map +7 -0
- package/dist/mcp/tools/annotation-update.js +39 -0
- package/dist/mcp/tools/annotation-update.js.map +7 -0
- package/dist/mcp/tools/changeset-analysis-tools.js +78 -0
- package/dist/mcp/tools/changeset-analysis-tools.js.map +7 -0
- package/dist/mcp/tools/changeset-editing.js +184 -0
- package/dist/mcp/tools/changeset-editing.js.map +7 -0
- package/dist/mcp/tools/changeset-lifecycle.js +83 -0
- package/dist/mcp/tools/changeset-lifecycle.js.map +7 -0
- package/dist/mcp/tools/changeset-list.js +33 -0
- package/dist/mcp/tools/changeset-list.js.map +7 -0
- package/dist/mcp/tools/changeset-shared.js +31 -0
- package/dist/mcp/tools/changeset-shared.js.map +7 -0
- package/dist/mcp/tools/changeset-show.js +55 -0
- package/dist/mcp/tools/changeset-show.js.map +7 -0
- package/dist/mcp/tools/changeset-verify.js +43 -0
- package/dist/mcp/tools/changeset-verify.js.map +7 -0
- package/dist/mcp/tools/chat-launch.js +50 -0
- package/dist/mcp/tools/chat-launch.js.map +7 -0
- package/dist/mcp/tools/chat-status.js +26 -0
- package/dist/mcp/tools/chat-status.js.map +7 -0
- package/dist/mcp/tools/index.js +65 -0
- package/dist/mcp/tools/index.js.map +7 -0
- package/dist/mcp/tools/model-add.js +107 -0
- package/dist/mcp/tools/model-add.js.map +7 -0
- package/dist/mcp/tools/model-delete.js +99 -0
- package/dist/mcp/tools/model-delete.js.map +7 -0
- package/dist/mcp/tools/model-export.js +72 -0
- package/dist/mcp/tools/model-export.js.map +7 -0
- package/dist/mcp/tools/model-info.js +51 -0
- package/dist/mcp/tools/model-info.js.map +7 -0
- package/dist/mcp/tools/model-list.js +53 -0
- package/dist/mcp/tools/model-list.js.map +7 -0
- package/dist/mcp/tools/model-reload.js +34 -0
- package/dist/mcp/tools/model-reload.js.map +7 -0
- package/dist/mcp/tools/model-search.js +102 -0
- package/dist/mcp/tools/model-search.js.map +7 -0
- package/dist/mcp/tools/model-show.js +68 -0
- package/dist/mcp/tools/model-show.js.map +7 -0
- package/dist/mcp/tools/model-stats.js +22 -0
- package/dist/mcp/tools/model-stats.js.map +7 -0
- package/dist/mcp/tools/model-trace.js +118 -0
- package/dist/mcp/tools/model-trace.js.map +7 -0
- package/dist/mcp/tools/model-update.js +121 -0
- package/dist/mcp/tools/model-update.js.map +7 -0
- package/dist/mcp/tools/model-validate.js +78 -0
- package/dist/mcp/tools/model-validate.js.map +7 -0
- package/dist/mcp/tools/relationship-tools.js +98 -0
- package/dist/mcp/tools/relationship-tools.js.map +7 -0
- package/dist/mcp/tools/shared.js +126 -0
- package/dist/mcp/tools/shared.js.map +7 -0
- package/dist/mcp/tools/spec-type.js +90 -0
- package/dist/mcp/tools/spec-type.js.map +7 -0
- package/dist/reports/model-layer-report-generator.js +5 -3
- package/dist/reports/model-layer-report-generator.js.map +2 -2
- package/dist/reports/model-readme-generator.js +116 -0
- package/dist/reports/model-readme-generator.js.map +7 -0
- package/dist/reports/model-report-data.js +37 -1
- package/dist/reports/model-report-data.js.map +2 -2
- package/dist/reports/model-report-orchestrator.js +29 -6
- package/dist/reports/model-report-orchestrator.js.map +2 -2
- package/dist/reports/model-report-utils.js +9 -0
- package/dist/reports/model-report-utils.js.map +7 -0
- package/dist/schemas/bundled/analyzers/cbm.json +1186 -68
- package/dist/schemas/bundled/analyzers/manifest.json +2 -2
- package/dist/schemas/bundled/api.json +1029 -1658
- package/dist/schemas/bundled/apm.json +499 -734
- package/dist/schemas/bundled/application.json +745 -370
- package/dist/schemas/bundled/base.json +3 -220
- package/dist/schemas/bundled/business.json +452 -366
- package/dist/schemas/bundled/data-model.json +403 -383
- package/dist/schemas/bundled/data-store.json +334 -558
- package/dist/schemas/bundled/manifest.json +18 -18
- package/dist/schemas/bundled/motivation.json +349 -368
- package/dist/schemas/bundled/navigation.json +415 -731
- package/dist/schemas/bundled/product.json +325 -159
- package/dist/schemas/bundled/security.json +864 -1232
- package/dist/schemas/bundled/technology.json +574 -703
- package/dist/schemas/bundled/testing.json +718 -1643
- package/dist/schemas/bundled/ux.json +739 -1352
- package/dist/server/schemas.js +8 -0
- package/dist/server/schemas.js.map +2 -2
- package/dist/server/server.js +234 -31
- package/dist/server/server.js.map +2 -2
- package/dist/server-entry.js +2 -1
- package/dist/server-entry.js.map +2 -2
- package/dist/telemetry/config.js +2 -40
- package/dist/telemetry/config.js.map +2 -2
- package/dist/telemetry/index.js +1 -1
- package/dist/types/index.js.map +2 -2
- package/dist/utils/ansi-suppressor.js +23 -0
- package/dist/utils/ansi-suppressor.js.map +7 -0
- package/dist/utils/attribute-patch.js +41 -0
- package/dist/utils/attribute-patch.js.map +7 -0
- package/dist/utils/color-utils.js +34 -0
- package/dist/utils/color-utils.js.map +7 -0
- package/dist/utils/element-reference-shape.js +15 -1
- package/dist/utils/element-reference-shape.js.map +3 -3
- package/dist/utils/error-hints.js +29 -0
- package/dist/utils/error-hints.js.map +7 -0
- package/dist/utils/errors.js +75 -10
- package/dist/utils/errors.js.map +2 -2
- package/dist/utils/globals.js +17 -1
- package/dist/utils/globals.js.map +2 -2
- package/dist/utils/project-paths.js +50 -3
- package/dist/utils/project-paths.js.map +2 -2
- package/dist/utils/reference-path-parser.js +49 -0
- package/dist/utils/reference-path-parser.js.map +7 -0
- package/dist/utils/source-reference.js +17 -10
- package/dist/utils/source-reference.js.map +2 -2
- package/dist/utils/spec-version.js +10 -2
- package/dist/utils/spec-version.js.map +2 -2
- package/dist/validators/composed-reference-validator.js +240 -0
- package/dist/validators/composed-reference-validator.js.map +7 -0
- package/dist/validators/reference-validator.js +57 -13
- package/dist/validators/reference-validator.js.map +3 -3
- package/dist/validators/relationship-schema-validator.js +33 -5
- package/dist/validators/relationship-schema-validator.js.map +3 -3
- package/dist/validators/schema-validator.js +27 -9
- package/dist/validators/schema-validator.js.map +2 -2
- package/dist/validators/types.js.map +1 -1
- package/dist/viewer/README.md +6 -6
- package/dist/viewer/assets/main-CxzcuU_o.js +84 -0
- package/dist/viewer/assets/main-j-7ULYpm.css +1 -0
- package/dist/viewer/index.html +2 -2
- package/dist/viewer/manifest.json +10 -10
- package/dist/viewer/version.json +1 -1
- package/package.json +7 -3
- package/dist/viewer/assets/main-B7AOQXXX.js +0 -81
- package/dist/viewer/assets/main-vdrFrG7q.css +0 -1
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
function decoratorName(text) {
|
|
2
|
+
return text.trim().replace(/^@/, "").replace(/\s*#.*$/, "").replace(/\(.*$/s, "").trim();
|
|
3
|
+
}
|
|
4
|
+
function parseList(v) {
|
|
5
|
+
if (Array.isArray(v))
|
|
6
|
+
return v.map(String);
|
|
7
|
+
if (typeof v != "string" || !v.trim())
|
|
8
|
+
return [];
|
|
9
|
+
try {
|
|
10
|
+
const p = JSON.parse(v);
|
|
11
|
+
return Array.isArray(p) ? p.map(String) : [];
|
|
12
|
+
} catch {
|
|
13
|
+
return [];
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
async function buildFactsIndex(graph) {
|
|
17
|
+
const decorators = /* @__PURE__ */ new Map();
|
|
18
|
+
for (const [qn, decs] of await graph.rows("MATCH (b) WHERE b.decorators IS NOT NULL RETURN b.qualified_name, b.decorators"))
|
|
19
|
+
typeof qn == "string" && decorators.set(qn, parseList(decs));
|
|
20
|
+
const importers = /* @__PURE__ */ new Map();
|
|
21
|
+
for (const [afile, bfile] of await graph.rows("MATCH (a)-[r:IMPORTS]->(b) RETURN a.file_path, b.file_path"))
|
|
22
|
+
typeof afile != "string" || typeof bfile != "string" || !bfile || afile === bfile || (importers.has(bfile) || importers.set(bfile, /* @__PURE__ */ new Set()), importers.get(bfile).add(afile));
|
|
23
|
+
const methods = /* @__PURE__ */ new Map();
|
|
24
|
+
for (const [a] of await graph.rows("MATCH (a)-[r:DEFINES_METHOD]->(m) RETURN a.qualified_name, m.qualified_name"))
|
|
25
|
+
typeof a == "string" && methods.set(a, (methods.get(a) ?? 0) + 1);
|
|
26
|
+
const usage = /* @__PURE__ */ new Map();
|
|
27
|
+
for (const [afile, b, bfile] of await graph.rows("MATCH (a)-[r:USAGE]->(b) RETURN a.file_path, b.qualified_name, b.file_path"))
|
|
28
|
+
typeof afile != "string" || typeof b != "string" || afile === bfile || (usage.has(b) || usage.set(b, /* @__PURE__ */ new Set()), usage.get(b).add(afile));
|
|
29
|
+
return { decorators, importers, methods, usage };
|
|
30
|
+
}
|
|
31
|
+
function factsFor(idx, fullQualifiedName, filePath) {
|
|
32
|
+
const decorators = idx.decorators.get(fullQualifiedName) ?? [];
|
|
33
|
+
return {
|
|
34
|
+
decorators,
|
|
35
|
+
decorator_names: decorators.map(decoratorName),
|
|
36
|
+
file_importers: filePath ? idx.importers.get(filePath)?.size ?? 0 : 0,
|
|
37
|
+
methods: idx.methods.get(fullQualifiedName) ?? 0,
|
|
38
|
+
usage_files: idx.usage.get(fullQualifiedName)?.size ?? 0
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
buildFactsIndex,
|
|
43
|
+
decoratorName,
|
|
44
|
+
factsFor
|
|
45
|
+
};
|
|
46
|
+
//# sourceMappingURL=facts.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/analyzers/cards/facts.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Tier-0 structural facts: decorators and a few reuse counts, from one graph query per fact.\n */\nimport type { CardFacts, CardGraph } from \"./types.js\";\n\n/** `@field_validator(\"X\", mode=\"before\")` -> `field_validator`; `@router.get('/')` -> `router.get`. */\nexport function decoratorName(text: string): string {\n return text.trim().replace(/^@/, \"\").replace(/\\s*#.*$/, \"\").replace(/\\(.*$/s, \"\").trim();\n}\n\n/** CBM stores decorators as a JSON-encoded list (or, in some builds, a real one). */\nfunction parseList(v: unknown): string[] {\n if (Array.isArray(v)) return v.map(String);\n if (typeof v !== \"string\" || !v.trim()) return [];\n try {\n const p = JSON.parse(v);\n return Array.isArray(p) ? p.map(String) : [];\n } catch {\n return [];\n }\n}\n\nexport interface FactsIndex {\n /** full qualified name -> decorator texts */\n decorators: Map<string, string[]>;\n /** file path -> other files importing it */\n importers: Map<string, Set<string>>;\n /** full qualified name -> DEFINES_METHOD count */\n methods: Map<string, number>;\n /** full qualified name -> other files with USAGE edges into it */\n usage: Map<string, Set<string>>;\n}\n\nexport async function buildFactsIndex(graph: CardGraph): Promise<FactsIndex> {\n const decorators = new Map<string, string[]>();\n for (const [qn, decs] of await graph.rows(\"MATCH (b) WHERE b.decorators IS NOT NULL RETURN b.qualified_name, b.decorators\")) {\n if (typeof qn === \"string\") decorators.set(qn, parseList(decs));\n }\n const importers = new Map<string, Set<string>>();\n for (const [afile, bfile] of await graph.rows(\"MATCH (a)-[r:IMPORTS]->(b) RETURN a.file_path, b.file_path\")) {\n if (typeof afile !== \"string\" || typeof bfile !== \"string\" || !bfile || afile === bfile) continue;\n if (!importers.has(bfile)) importers.set(bfile, new Set());\n importers.get(bfile)!.add(afile);\n }\n const methods = new Map<string, number>();\n for (const [a] of await graph.rows(\"MATCH (a)-[r:DEFINES_METHOD]->(m) RETURN a.qualified_name, m.qualified_name\")) {\n if (typeof a === \"string\") methods.set(a, (methods.get(a) ?? 0) + 1);\n }\n const usage = new Map<string, Set<string>>();\n for (const [afile, b, bfile] of await graph.rows(\"MATCH (a)-[r:USAGE]->(b) RETURN a.file_path, b.qualified_name, b.file_path\")) {\n if (typeof afile !== \"string\" || typeof b !== \"string\" || afile === bfile) continue;\n if (!usage.has(b)) usage.set(b, new Set());\n usage.get(b)!.add(afile);\n }\n return { decorators, importers, methods, usage };\n}\n\n/** Facts for one symbol, by its full (project-prefixed) qualified name and file. */\nexport function factsFor(idx: FactsIndex, fullQualifiedName: string, filePath: string | null): CardFacts {\n const decorators = idx.decorators.get(fullQualifiedName) ?? [];\n return {\n decorators,\n decorator_names: decorators.map(decoratorName),\n file_importers: filePath ? (idx.importers.get(filePath)?.size ?? 0) : 0,\n methods: idx.methods.get(fullQualifiedName) ?? 0,\n usage_files: idx.usage.get(fullQualifiedName)?.size ?? 0,\n };\n}\n"],
|
|
5
|
+
"mappings": "AAMM,SAAU,cAAc,MAAY;AACxC,SAAO,KAAK,KAAI,EAAG,QAAQ,MAAM,EAAE,EAAE,QAAQ,WAAW,EAAE,EAAE,QAAQ,UAAU,EAAE,EAAE,KAAI;AACxF;AAGA,SAAS,UAAU,GAAU;AAC3B,MAAI,MAAM,QAAQ,CAAC;AAAG,WAAO,EAAE,IAAI,MAAM;AACzC,MAAI,OAAO,KAAM,YAAY,CAAC,EAAE,KAAI;AAAI,WAAO,CAAA;AAC/C,MAAI;AACF,UAAM,IAAI,KAAK,MAAM,CAAC;AACtB,WAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,CAAA;EAC5C,QAAQ;AACN,WAAO,CAAA;EACT;AACF;AAaA,eAAsB,gBAAgB,OAAgB;AACpD,QAAM,aAAa,oBAAI,IAAG;AAC1B,aAAW,CAAC,IAAI,IAAI,KAAK,MAAM,MAAM,KAAK,gFAAgF;AACxH,IAAI,OAAO,MAAO,YAAU,WAAW,IAAI,IAAI,UAAU,IAAI,CAAC;AAEhE,QAAM,YAAY,oBAAI,IAAG;AACzB,aAAW,CAAC,OAAO,KAAK,KAAK,MAAM,MAAM,KAAK,4DAA4D;AACxG,IAAI,OAAO,SAAU,YAAY,OAAO,SAAU,YAAY,CAAC,SAAS,UAAU,UAC7E,UAAU,IAAI,KAAK,KAAG,UAAU,IAAI,OAAO,oBAAI,IAAG,CAAE,GACzD,UAAU,IAAI,KAAK,EAAG,IAAI,KAAK;AAEjC,QAAM,UAAU,oBAAI,IAAG;AACvB,aAAW,CAAC,CAAC,KAAK,MAAM,MAAM,KAAK,6EAA6E;AAC9G,IAAI,OAAO,KAAM,YAAU,QAAQ,IAAI,IAAI,QAAQ,IAAI,CAAC,KAAK,KAAK,CAAC;AAErE,QAAM,QAAQ,oBAAI,IAAG;AACrB,aAAW,CAAC,OAAO,GAAG,KAAK,KAAK,MAAM,MAAM,KAAK,4EAA4E;AAC3H,IAAI,OAAO,SAAU,YAAY,OAAO,KAAM,YAAY,UAAU,UAC/D,MAAM,IAAI,CAAC,KAAG,MAAM,IAAI,GAAG,oBAAI,IAAG,CAAE,GACzC,MAAM,IAAI,CAAC,EAAG,IAAI,KAAK;AAEzB,SAAO,EAAE,YAAY,WAAW,SAAS,MAAK;AAChD;AAGM,SAAU,SAAS,KAAiB,mBAA2B,UAAuB;AAC1F,QAAM,aAAa,IAAI,WAAW,IAAI,iBAAiB,KAAK,CAAA;AAC5D,SAAO;IACL;IACA,iBAAiB,WAAW,IAAI,aAAa;IAC7C,gBAAgB,WAAY,IAAI,UAAU,IAAI,QAAQ,GAAG,QAAQ,IAAK;IACtE,SAAS,IAAI,QAAQ,IAAI,iBAAiB,KAAK;IAC/C,aAAa,IAAI,MAAM,IAAI,iBAAiB,GAAG,QAAQ;;AAE3D;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { CbmToolError } from "../cbm-responses.js";
|
|
2
|
+
function graphNodeOf(node) {
|
|
3
|
+
const qualifiedName = String(node.qualified_name ?? node.name ?? "");
|
|
4
|
+
return {
|
|
5
|
+
...node.properties ?? {},
|
|
6
|
+
label: node.label,
|
|
7
|
+
name: node.label === "Route" ? qualifiedName : String(node.name ?? ""),
|
|
8
|
+
qualified_name: qualifiedName,
|
|
9
|
+
file_path: typeof node.file_path == "string" ? node.file_path : ""
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function cbmCardGraph(tools, project) {
|
|
13
|
+
return {
|
|
14
|
+
project,
|
|
15
|
+
async search(label, filePattern, fields) {
|
|
16
|
+
return (await tools.searchGraph({
|
|
17
|
+
project,
|
|
18
|
+
label,
|
|
19
|
+
...filePattern ? { file_pattern: filePattern } : {},
|
|
20
|
+
...fields.length ? { fields } : {}
|
|
21
|
+
})).map(graphNodeOf);
|
|
22
|
+
},
|
|
23
|
+
async rows(cypher) {
|
|
24
|
+
return (await tools.queryGraph(cypher, project)).rows;
|
|
25
|
+
},
|
|
26
|
+
async snippet(qualifiedName) {
|
|
27
|
+
try {
|
|
28
|
+
const raw = await tools.call("get_code_snippet", { project, qualified_name: qualifiedName, source_mode: "full" });
|
|
29
|
+
return raw && typeof raw.source == "string" ? { source: raw.source } : null;
|
|
30
|
+
} catch (error) {
|
|
31
|
+
if (error instanceof CbmToolError)
|
|
32
|
+
return null;
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export {
|
|
39
|
+
cbmCardGraph,
|
|
40
|
+
graphNodeOf
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=graph.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/analyzers/cards/graph.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * The card builder's view of a CBM project, over the analyzer's {@link CbmTools}.\n */\nimport { CbmToolError, type CbmGraphNode, type CbmTools } from \"../cbm-responses.js\";\nimport type { CardGraph, GraphNode } from \"./types.js\";\n\n/**\n * Flatten a normalised search_graph node: its properties become top-level fields. A Route keeps\n * its full qualified name (`__route__GET__/owners`) as its name, since CBM's own name for it is\n * only the path, or a fragment of it.\n */\nexport function graphNodeOf(node: CbmGraphNode): GraphNode {\n const qualifiedName = String(node.qualified_name ?? node.name ?? \"\");\n const props = node.properties ?? {};\n return {\n ...props,\n label: node.label,\n name: node.label === \"Route\" ? qualifiedName : String(node.name ?? \"\"),\n qualified_name: qualifiedName,\n file_path: typeof node.file_path === \"string\" ? node.file_path : \"\",\n };\n}\n\nexport function cbmCardGraph(tools: CbmTools, project: string): CardGraph {\n return {\n project,\n async search(label, filePattern, fields) {\n const nodes = await tools.searchGraph({\n project,\n label,\n ...(filePattern ? { file_pattern: filePattern } : {}),\n ...(fields.length ? { fields } : {}),\n });\n return nodes.map(graphNodeOf);\n },\n async rows(cypher) {\n return (await tools.queryGraph(cypher, project)).rows;\n },\n async snippet(qualifiedName) {\n try {\n // CBM 0.12's default (\"auto\") outlines containers of 200+ lines and caps output at about\n // 2,500 tokens; \"full\" returns the source (up to 500 lines, uncapped).\n const raw = (await tools.call(\"get_code_snippet\", { project, qualified_name: qualifiedName, source_mode: \"full\" })) as { source?: unknown };\n return raw && typeof raw.source === \"string\" ? { source: raw.source } : null;\n } catch (error) {\n // An unknown or source-less symbol comes back as an error payload: no source.\n if (error instanceof CbmToolError) return null;\n throw error;\n }\n },\n };\n}\n"],
|
|
5
|
+
"mappings": "AAGA,SAAS,oBAAsD;AAQzD,SAAU,YAAY,MAAkB;AAC5C,QAAM,gBAAgB,OAAO,KAAK,kBAAkB,KAAK,QAAQ,EAAE;AAEnE,SAAO;IACL,GAFY,KAAK,cAAc,CAAA;IAG/B,OAAO,KAAK;IACZ,MAAM,KAAK,UAAU,UAAU,gBAAgB,OAAO,KAAK,QAAQ,EAAE;IACrE,gBAAgB;IAChB,WAAW,OAAO,KAAK,aAAc,WAAW,KAAK,YAAY;;AAErE;AAEM,SAAU,aAAa,OAAiB,SAAe;AAC3D,SAAO;IACL;IACA,MAAM,OAAO,OAAO,aAAa,QAAM;AAOrC,cANc,MAAM,MAAM,YAAY;QACpC;QACA;QACA,GAAI,cAAc,EAAE,cAAc,YAAW,IAAK,CAAA;QAClD,GAAI,OAAO,SAAS,EAAE,OAAM,IAAK,CAAA;OAClC,GACY,IAAI,WAAW;IAC9B;IACA,MAAM,KAAK,QAAM;AACf,cAAQ,MAAM,MAAM,WAAW,QAAQ,OAAO,GAAG;IACnD;IACA,MAAM,QAAQ,eAAa;AACzB,UAAI;AAGF,cAAM,MAAO,MAAM,MAAM,KAAK,oBAAoB,EAAE,SAAS,gBAAgB,eAAe,aAAa,OAAM,CAAE;AACjH,eAAO,OAAO,OAAO,IAAI,UAAW,WAAW,EAAE,QAAQ,IAAI,OAAM,IAAK;MAC1E,SAAS,OAAO;AAEd,YAAI,iBAAiB;AAAc,iBAAO;AAC1C,cAAM;MACR;IACF;;AAEJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/analyzers/cards/index.ts"],
|
|
4
|
+
"sourcesContent": ["export * from \"./types.js\";\nexport * from \"./graph.js\";\nexport * from \"./edge-index.js\";\nexport * from \"./facts.js\";\nexport * from \"./build.js\";\nexport * from \"./tier0.js\";\nexport * from \"./classify.js\";\n"],
|
|
5
|
+
"mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { declarationOf, evaluateTier0 } from "../tier0-rules.js";
|
|
2
|
+
function tier0SymbolOf(card, facts) {
|
|
3
|
+
return {
|
|
4
|
+
label: card.label,
|
|
5
|
+
name: card.name,
|
|
6
|
+
file_path: card.file_path,
|
|
7
|
+
declaration: declarationOf(card.source, card.signature),
|
|
8
|
+
decorator_names: facts?.decorator_names ?? []
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
function tier0ForCard(card, facts, rules) {
|
|
12
|
+
return evaluateTier0(tier0SymbolOf(card, facts), rules);
|
|
13
|
+
}
|
|
14
|
+
export {
|
|
15
|
+
tier0ForCard,
|
|
16
|
+
tier0SymbolOf
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=tier0.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/analyzers/cards/tier0.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Tier 0 on cards: the analyzer's rules (src/analyzers/tier0-rules.ts) applied to a card and its\n * facts. Used by `dr analyzer classify` and by the classify-eval harness.\n */\nimport { declarationOf, evaluateTier0, type Tier0Outcome, type Tier0Rule, type Tier0Symbol } from \"../tier0-rules.js\";\nimport type { CardFacts } from \"./types.js\";\n\n/** The card fields Tier 0 reads (a harness card, with its corpus field, also fits). */\nexport type Tier0Card = { label: string; name: string; file_path: string | null; source: string | null; signature: string | null };\n\nexport function tier0SymbolOf(card: Tier0Card, facts: CardFacts | undefined): Tier0Symbol {\n return {\n label: card.label,\n name: card.name,\n file_path: card.file_path,\n declaration: declarationOf(card.source, card.signature),\n decorator_names: facts?.decorator_names ?? [],\n };\n}\n\nexport function tier0ForCard(card: Tier0Card, facts: CardFacts | undefined, rules: Tier0Rule[]): Tier0Outcome | null {\n return evaluateTier0(tier0SymbolOf(card, facts), rules);\n}\n"],
|
|
5
|
+
"mappings": "AAIA,SAAS,eAAe,qBAA0E;AAM5F,SAAU,cAAc,MAAiB,OAA4B;AACzE,SAAO;IACL,OAAO,KAAK;IACZ,MAAM,KAAK;IACX,WAAW,KAAK;IAChB,aAAa,cAAc,KAAK,QAAQ,KAAK,SAAS;IACtD,iBAAiB,OAAO,mBAAmB,CAAA;;AAE/C;AAEM,SAAU,aAAa,MAAiB,OAA8B,OAAkB;AAC5F,SAAO,cAAc,cAAc,MAAM,KAAK,GAAG,KAAK;AACxD;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=types.js.map
|