@zbigniewsobiecki/squint 1.0.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/LICENSE +21 -0
- package/README.md +1065 -0
- package/bin/dev.js +5 -0
- package/bin/run.js +5 -0
- package/dist/commands/_shared/db-helper.d.ts +18 -0
- package/dist/commands/_shared/db-helper.d.ts.map +1 -0
- package/dist/commands/_shared/db-helper.js +72 -0
- package/dist/commands/_shared/db-helper.js.map +1 -0
- package/dist/commands/_shared/flags.d.ts +20 -0
- package/dist/commands/_shared/flags.d.ts.map +1 -0
- package/dist/commands/_shared/flags.js +38 -0
- package/dist/commands/_shared/flags.js.map +1 -0
- package/dist/commands/_shared/index.d.ts +6 -0
- package/dist/commands/_shared/index.d.ts.map +1 -0
- package/dist/commands/_shared/index.js +6 -0
- package/dist/commands/_shared/index.js.map +1 -0
- package/dist/commands/_shared/output.d.ts +22 -0
- package/dist/commands/_shared/output.d.ts.map +1 -0
- package/dist/commands/_shared/output.js +36 -0
- package/dist/commands/_shared/output.js.map +1 -0
- package/dist/commands/_shared/source-reader.d.ts +23 -0
- package/dist/commands/_shared/source-reader.d.ts.map +1 -0
- package/dist/commands/_shared/source-reader.js +45 -0
- package/dist/commands/_shared/source-reader.js.map +1 -0
- package/dist/commands/_shared/symbol-resolver.d.ts +35 -0
- package/dist/commands/_shared/symbol-resolver.d.ts.map +1 -0
- package/dist/commands/_shared/symbol-resolver.js +102 -0
- package/dist/commands/_shared/symbol-resolver.js.map +1 -0
- package/dist/commands/browse.d.ts +13 -0
- package/dist/commands/browse.d.ts.map +1 -0
- package/dist/commands/browse.js +106 -0
- package/dist/commands/browse.js.map +1 -0
- package/dist/commands/domains/create.d.ts +15 -0
- package/dist/commands/domains/create.d.ts.map +1 -0
- package/dist/commands/domains/create.js +34 -0
- package/dist/commands/domains/create.js.map +1 -0
- package/dist/commands/domains/delete.d.ts +14 -0
- package/dist/commands/domains/delete.d.ts.map +1 -0
- package/dist/commands/domains/delete.js +41 -0
- package/dist/commands/domains/delete.js.map +1 -0
- package/dist/commands/domains/index.d.ts +2 -0
- package/dist/commands/domains/index.d.ts.map +1 -0
- package/dist/commands/domains/index.js +2 -0
- package/dist/commands/domains/index.js.map +1 -0
- package/dist/commands/domains/list.d.ts +12 -0
- package/dist/commands/domains/list.d.ts.map +1 -0
- package/dist/commands/domains/list.js +67 -0
- package/dist/commands/domains/list.js.map +1 -0
- package/dist/commands/domains/merge.d.ts +14 -0
- package/dist/commands/domains/merge.d.ts.map +1 -0
- package/dist/commands/domains/merge.js +40 -0
- package/dist/commands/domains/merge.js.map +1 -0
- package/dist/commands/domains/rename.d.ts +14 -0
- package/dist/commands/domains/rename.d.ts.map +1 -0
- package/dist/commands/domains/rename.js +33 -0
- package/dist/commands/domains/rename.js.map +1 -0
- package/dist/commands/domains/show.d.ts +14 -0
- package/dist/commands/domains/show.d.ts.map +1 -0
- package/dist/commands/domains/show.js +47 -0
- package/dist/commands/domains/show.js.map +1 -0
- package/dist/commands/domains/sync.d.ts +11 -0
- package/dist/commands/domains/sync.d.ts.map +1 -0
- package/dist/commands/domains/sync.js +33 -0
- package/dist/commands/domains/sync.js.map +1 -0
- package/dist/commands/domains/update.d.ts +14 -0
- package/dist/commands/domains/update.d.ts.map +1 -0
- package/dist/commands/domains/update.js +28 -0
- package/dist/commands/domains/update.js.map +1 -0
- package/dist/commands/features/assign.d.ts +16 -0
- package/dist/commands/features/assign.d.ts.map +1 -0
- package/dist/commands/features/assign.js +51 -0
- package/dist/commands/features/assign.js.map +1 -0
- package/dist/commands/features/create.d.ts +15 -0
- package/dist/commands/features/create.d.ts.map +1 -0
- package/dist/commands/features/create.js +30 -0
- package/dist/commands/features/create.js.map +1 -0
- package/dist/commands/features/delete.d.ts +14 -0
- package/dist/commands/features/delete.d.ts.map +1 -0
- package/dist/commands/features/delete.js +37 -0
- package/dist/commands/features/delete.js.map +1 -0
- package/dist/commands/features/generate.d.ts +34 -0
- package/dist/commands/features/generate.d.ts.map +1 -0
- package/dist/commands/features/generate.js +178 -0
- package/dist/commands/features/generate.js.map +1 -0
- package/dist/commands/features/index.d.ts +2 -0
- package/dist/commands/features/index.d.ts.map +1 -0
- package/dist/commands/features/index.js +2 -0
- package/dist/commands/features/index.js.map +1 -0
- package/dist/commands/features/list.d.ts +11 -0
- package/dist/commands/features/list.d.ts.map +1 -0
- package/dist/commands/features/list.js +45 -0
- package/dist/commands/features/list.js.map +1 -0
- package/dist/commands/features/show.d.ts +15 -0
- package/dist/commands/features/show.d.ts.map +1 -0
- package/dist/commands/features/show.js +61 -0
- package/dist/commands/features/show.js.map +1 -0
- package/dist/commands/features/unassign.d.ts +16 -0
- package/dist/commands/features/unassign.d.ts.map +1 -0
- package/dist/commands/features/unassign.js +55 -0
- package/dist/commands/features/unassign.js.map +1 -0
- package/dist/commands/features/update.d.ts +16 -0
- package/dist/commands/features/update.d.ts.map +1 -0
- package/dist/commands/features/update.js +54 -0
- package/dist/commands/features/update.js.map +1 -0
- package/dist/commands/files/imported-by.d.ts +13 -0
- package/dist/commands/files/imported-by.d.ts.map +1 -0
- package/dist/commands/files/imported-by.js +40 -0
- package/dist/commands/files/imported-by.js.map +1 -0
- package/dist/commands/files/imports.d.ts +14 -0
- package/dist/commands/files/imports.d.ts.map +1 -0
- package/dist/commands/files/imports.js +48 -0
- package/dist/commands/files/imports.js.map +1 -0
- package/dist/commands/files/index.d.ts +2 -0
- package/dist/commands/files/index.d.ts.map +1 -0
- package/dist/commands/files/index.js +2 -0
- package/dist/commands/files/index.js.map +1 -0
- package/dist/commands/files/list.d.ts +11 -0
- package/dist/commands/files/list.d.ts.map +1 -0
- package/dist/commands/files/list.js +35 -0
- package/dist/commands/files/list.js.map +1 -0
- package/dist/commands/files/orphans.d.ts +12 -0
- package/dist/commands/files/orphans.d.ts.map +1 -0
- package/dist/commands/files/orphans.js +43 -0
- package/dist/commands/files/orphans.js.map +1 -0
- package/dist/commands/files/show.d.ts +14 -0
- package/dist/commands/files/show.d.ts.map +1 -0
- package/dist/commands/files/show.js +95 -0
- package/dist/commands/files/show.js.map +1 -0
- package/dist/commands/flows/add-step.d.ts +19 -0
- package/dist/commands/flows/add-step.d.ts.map +1 -0
- package/dist/commands/flows/add-step.js +46 -0
- package/dist/commands/flows/add-step.js.map +1 -0
- package/dist/commands/flows/create.d.ts +17 -0
- package/dist/commands/flows/create.d.ts.map +1 -0
- package/dist/commands/flows/create.js +39 -0
- package/dist/commands/flows/create.js.map +1 -0
- package/dist/commands/flows/delete.d.ts +14 -0
- package/dist/commands/flows/delete.d.ts.map +1 -0
- package/dist/commands/flows/delete.js +37 -0
- package/dist/commands/flows/delete.js.map +1 -0
- package/dist/commands/flows/generate.d.ts +50 -0
- package/dist/commands/flows/generate.d.ts.map +1 -0
- package/dist/commands/flows/generate.js +438 -0
- package/dist/commands/flows/generate.js.map +1 -0
- package/dist/commands/flows/index.d.ts +2 -0
- package/dist/commands/flows/index.d.ts.map +1 -0
- package/dist/commands/flows/index.js +2 -0
- package/dist/commands/flows/index.js.map +1 -0
- package/dist/commands/flows/list.d.ts +12 -0
- package/dist/commands/flows/list.d.ts.map +1 -0
- package/dist/commands/flows/list.js +98 -0
- package/dist/commands/flows/list.js.map +1 -0
- package/dist/commands/flows/remove-step.d.ts +18 -0
- package/dist/commands/flows/remove-step.d.ts.map +1 -0
- package/dist/commands/flows/remove-step.js +41 -0
- package/dist/commands/flows/remove-step.js.map +1 -0
- package/dist/commands/flows/show.d.ts +17 -0
- package/dist/commands/flows/show.d.ts.map +1 -0
- package/dist/commands/flows/show.js +136 -0
- package/dist/commands/flows/show.js.map +1 -0
- package/dist/commands/flows/trace.d.ts +22 -0
- package/dist/commands/flows/trace.d.ts.map +1 -0
- package/dist/commands/flows/trace.js +217 -0
- package/dist/commands/flows/trace.js.map +1 -0
- package/dist/commands/flows/update.d.ts +17 -0
- package/dist/commands/flows/update.d.ts.map +1 -0
- package/dist/commands/flows/update.js +60 -0
- package/dist/commands/flows/update.js.map +1 -0
- package/dist/commands/flows/verify.d.ts +21 -0
- package/dist/commands/flows/verify.d.ts.map +1 -0
- package/dist/commands/flows/verify.js +123 -0
- package/dist/commands/flows/verify.js.map +1 -0
- package/dist/commands/gaps.d.ts +14 -0
- package/dist/commands/gaps.d.ts.map +1 -0
- package/dist/commands/gaps.js +184 -0
- package/dist/commands/gaps.js.map +1 -0
- package/dist/commands/hierarchy/index.d.ts +20 -0
- package/dist/commands/hierarchy/index.d.ts.map +1 -0
- package/dist/commands/hierarchy/index.js +344 -0
- package/dist/commands/hierarchy/index.js.map +1 -0
- package/dist/commands/ingest.d.ts +23 -0
- package/dist/commands/ingest.d.ts.map +1 -0
- package/dist/commands/ingest.js +249 -0
- package/dist/commands/ingest.js.map +1 -0
- package/dist/commands/interactions/create.d.ts +16 -0
- package/dist/commands/interactions/create.d.ts.map +1 -0
- package/dist/commands/interactions/create.js +58 -0
- package/dist/commands/interactions/create.js.map +1 -0
- package/dist/commands/interactions/delete.d.ts +16 -0
- package/dist/commands/interactions/delete.d.ts.map +1 -0
- package/dist/commands/interactions/delete.js +28 -0
- package/dist/commands/interactions/delete.js.map +1 -0
- package/dist/commands/interactions/generate.d.ts +62 -0
- package/dist/commands/interactions/generate.d.ts.map +1 -0
- package/dist/commands/interactions/generate.js +870 -0
- package/dist/commands/interactions/generate.js.map +1 -0
- package/dist/commands/interactions/index.d.ts +2 -0
- package/dist/commands/interactions/index.d.ts.map +1 -0
- package/dist/commands/interactions/index.js +2 -0
- package/dist/commands/interactions/index.js.map +1 -0
- package/dist/commands/interactions/list.d.ts +15 -0
- package/dist/commands/interactions/list.d.ts.map +1 -0
- package/dist/commands/interactions/list.js +127 -0
- package/dist/commands/interactions/list.js.map +1 -0
- package/dist/commands/interactions/show.d.ts +17 -0
- package/dist/commands/interactions/show.d.ts.map +1 -0
- package/dist/commands/interactions/show.js +80 -0
- package/dist/commands/interactions/show.js.map +1 -0
- package/dist/commands/interactions/update.d.ts +20 -0
- package/dist/commands/interactions/update.d.ts.map +1 -0
- package/dist/commands/interactions/update.js +57 -0
- package/dist/commands/interactions/update.js.map +1 -0
- package/dist/commands/interactions/validate.d.ts +12 -0
- package/dist/commands/interactions/validate.d.ts.map +1 -0
- package/dist/commands/interactions/validate.js +94 -0
- package/dist/commands/interactions/validate.js.map +1 -0
- package/dist/commands/interactions/verify.d.ts +18 -0
- package/dist/commands/interactions/verify.d.ts.map +1 -0
- package/dist/commands/interactions/verify.js +127 -0
- package/dist/commands/interactions/verify.js.map +1 -0
- package/dist/commands/llm/_shared/base-llm-command.d.ts +44 -0
- package/dist/commands/llm/_shared/base-llm-command.d.ts.map +1 -0
- package/dist/commands/llm/_shared/base-llm-command.js +73 -0
- package/dist/commands/llm/_shared/base-llm-command.js.map +1 -0
- package/dist/commands/llm/_shared/coverage.d.ts +61 -0
- package/dist/commands/llm/_shared/coverage.d.ts.map +1 -0
- package/dist/commands/llm/_shared/coverage.js +161 -0
- package/dist/commands/llm/_shared/coverage.js.map +1 -0
- package/dist/commands/llm/_shared/csv-utils.d.ts +65 -0
- package/dist/commands/llm/_shared/csv-utils.d.ts.map +1 -0
- package/dist/commands/llm/_shared/csv-utils.js +231 -0
- package/dist/commands/llm/_shared/csv-utils.js.map +1 -0
- package/dist/commands/llm/_shared/csv.d.ts +44 -0
- package/dist/commands/llm/_shared/csv.d.ts.map +1 -0
- package/dist/commands/llm/_shared/csv.js +76 -0
- package/dist/commands/llm/_shared/csv.js.map +1 -0
- package/dist/commands/llm/_shared/entity-utils.d.ts +11 -0
- package/dist/commands/llm/_shared/entity-utils.d.ts.map +1 -0
- package/dist/commands/llm/_shared/entity-utils.js +87 -0
- package/dist/commands/llm/_shared/entity-utils.js.map +1 -0
- package/dist/commands/llm/_shared/flow-csv.d.ts +74 -0
- package/dist/commands/llm/_shared/flow-csv.d.ts.map +1 -0
- package/dist/commands/llm/_shared/flow-csv.js +198 -0
- package/dist/commands/llm/_shared/flow-csv.js.map +1 -0
- package/dist/commands/llm/_shared/flow-prompts.d.ts +61 -0
- package/dist/commands/llm/_shared/flow-prompts.d.ts.map +1 -0
- package/dist/commands/llm/_shared/flow-prompts.js +281 -0
- package/dist/commands/llm/_shared/flow-prompts.js.map +1 -0
- package/dist/commands/llm/_shared/flow-validation.d.ts +69 -0
- package/dist/commands/llm/_shared/flow-validation.d.ts.map +1 -0
- package/dist/commands/llm/_shared/flow-validation.js +176 -0
- package/dist/commands/llm/_shared/flow-validation.js.map +1 -0
- package/dist/commands/llm/_shared/llm-utils.d.ts +88 -0
- package/dist/commands/llm/_shared/llm-utils.d.ts.map +1 -0
- package/dist/commands/llm/_shared/llm-utils.js +256 -0
- package/dist/commands/llm/_shared/llm-utils.js.map +1 -0
- package/dist/commands/llm/_shared/module-csv.d.ts +76 -0
- package/dist/commands/llm/_shared/module-csv.d.ts.map +1 -0
- package/dist/commands/llm/_shared/module-csv.js +196 -0
- package/dist/commands/llm/_shared/module-csv.js.map +1 -0
- package/dist/commands/llm/_shared/module-prompts.d.ts +107 -0
- package/dist/commands/llm/_shared/module-prompts.d.ts.map +1 -0
- package/dist/commands/llm/_shared/module-prompts.js +395 -0
- package/dist/commands/llm/_shared/module-prompts.js.map +1 -0
- package/dist/commands/llm/_shared/process-utils.d.ts +52 -0
- package/dist/commands/llm/_shared/process-utils.d.ts.map +1 -0
- package/dist/commands/llm/_shared/process-utils.js +214 -0
- package/dist/commands/llm/_shared/process-utils.js.map +1 -0
- package/dist/commands/llm/_shared/prompts.d.ts +132 -0
- package/dist/commands/llm/_shared/prompts.d.ts.map +1 -0
- package/dist/commands/llm/_shared/prompts.js +391 -0
- package/dist/commands/llm/_shared/prompts.js.map +1 -0
- package/dist/commands/llm/_shared/pure-check.d.ts +10 -0
- package/dist/commands/llm/_shared/pure-check.d.ts.map +1 -0
- package/dist/commands/llm/_shared/pure-check.js +449 -0
- package/dist/commands/llm/_shared/pure-check.js.map +1 -0
- package/dist/commands/llm/_shared/verify/content-verifier.d.ts +40 -0
- package/dist/commands/llm/_shared/verify/content-verifier.d.ts.map +1 -0
- package/dist/commands/llm/_shared/verify/content-verifier.js +247 -0
- package/dist/commands/llm/_shared/verify/content-verifier.js.map +1 -0
- package/dist/commands/llm/_shared/verify/coverage-checker.d.ts +34 -0
- package/dist/commands/llm/_shared/verify/coverage-checker.d.ts.map +1 -0
- package/dist/commands/llm/_shared/verify/coverage-checker.js +1096 -0
- package/dist/commands/llm/_shared/verify/coverage-checker.js.map +1 -0
- package/dist/commands/llm/_shared/verify/verify-prompts.d.ts +30 -0
- package/dist/commands/llm/_shared/verify/verify-prompts.d.ts.map +1 -0
- package/dist/commands/llm/_shared/verify/verify-prompts.js +118 -0
- package/dist/commands/llm/_shared/verify/verify-prompts.js.map +1 -0
- package/dist/commands/llm/_shared/verify/verify-types.d.ts +47 -0
- package/dist/commands/llm/_shared/verify/verify-types.d.ts.map +1 -0
- package/dist/commands/llm/_shared/verify/verify-types.js +2 -0
- package/dist/commands/llm/_shared/verify/verify-types.js.map +1 -0
- package/dist/commands/llm/annotate.d.ts +7 -0
- package/dist/commands/llm/annotate.d.ts.map +1 -0
- package/dist/commands/llm/annotate.js +11 -0
- package/dist/commands/llm/annotate.js.map +1 -0
- package/dist/commands/llm/features/feature-grouper.d.ts +31 -0
- package/dist/commands/llm/features/feature-grouper.d.ts.map +1 -0
- package/dist/commands/llm/features/feature-grouper.js +223 -0
- package/dist/commands/llm/features/feature-grouper.js.map +1 -0
- package/dist/commands/llm/features/index.d.ts +6 -0
- package/dist/commands/llm/features/index.d.ts.map +1 -0
- package/dist/commands/llm/features/index.js +6 -0
- package/dist/commands/llm/features/index.js.map +1 -0
- package/dist/commands/llm/features/types.d.ts +10 -0
- package/dist/commands/llm/features/types.d.ts.map +1 -0
- package/dist/commands/llm/features/types.js +5 -0
- package/dist/commands/llm/features/types.js.map +1 -0
- package/dist/commands/llm/features.d.ts +7 -0
- package/dist/commands/llm/features.d.ts.map +1 -0
- package/dist/commands/llm/features.js +11 -0
- package/dist/commands/llm/features.js.map +1 -0
- package/dist/commands/llm/flows/atomic-flow-builder.d.ts +51 -0
- package/dist/commands/llm/flows/atomic-flow-builder.d.ts.map +1 -0
- package/dist/commands/llm/flows/atomic-flow-builder.js +247 -0
- package/dist/commands/llm/flows/atomic-flow-builder.js.map +1 -0
- package/dist/commands/llm/flows/dedup.d.ts +18 -0
- package/dist/commands/llm/flows/dedup.d.ts.map +1 -0
- package/dist/commands/llm/flows/dedup.js +76 -0
- package/dist/commands/llm/flows/dedup.js.map +1 -0
- package/dist/commands/llm/flows/entry-point-detector.d.ts +41 -0
- package/dist/commands/llm/flows/entry-point-detector.d.ts.map +1 -0
- package/dist/commands/llm/flows/entry-point-detector.js +388 -0
- package/dist/commands/llm/flows/entry-point-detector.js.map +1 -0
- package/dist/commands/llm/flows/flow-enhancer.d.ts +21 -0
- package/dist/commands/llm/flows/flow-enhancer.d.ts.map +1 -0
- package/dist/commands/llm/flows/flow-enhancer.js +166 -0
- package/dist/commands/llm/flows/flow-enhancer.js.map +1 -0
- package/dist/commands/llm/flows/flow-tracer.d.ts +50 -0
- package/dist/commands/llm/flows/flow-tracer.d.ts.map +1 -0
- package/dist/commands/llm/flows/flow-tracer.js +271 -0
- package/dist/commands/llm/flows/flow-tracer.js.map +1 -0
- package/dist/commands/llm/flows/flow-validator.d.ts +31 -0
- package/dist/commands/llm/flows/flow-validator.d.ts.map +1 -0
- package/dist/commands/llm/flows/flow-validator.js +262 -0
- package/dist/commands/llm/flows/flow-validator.js.map +1 -0
- package/dist/commands/llm/flows/gap-flow-generator.d.ts +13 -0
- package/dist/commands/llm/flows/gap-flow-generator.d.ts.map +1 -0
- package/dist/commands/llm/flows/gap-flow-generator.js +48 -0
- package/dist/commands/llm/flows/gap-flow-generator.js.map +1 -0
- package/dist/commands/llm/flows/index.d.ts +12 -0
- package/dist/commands/llm/flows/index.d.ts.map +1 -0
- package/dist/commands/llm/flows/index.js +12 -0
- package/dist/commands/llm/flows/index.js.map +1 -0
- package/dist/commands/llm/flows/types.d.ts +87 -0
- package/dist/commands/llm/flows/types.d.ts.map +1 -0
- package/dist/commands/llm/flows/types.js +5 -0
- package/dist/commands/llm/flows/types.js.map +1 -0
- package/dist/commands/llm/flows.d.ts +7 -0
- package/dist/commands/llm/flows.d.ts.map +1 -0
- package/dist/commands/llm/flows.js +11 -0
- package/dist/commands/llm/flows.js.map +1 -0
- package/dist/commands/llm/interactions.d.ts +7 -0
- package/dist/commands/llm/interactions.d.ts.map +1 -0
- package/dist/commands/llm/interactions.js +11 -0
- package/dist/commands/llm/interactions.js.map +1 -0
- package/dist/commands/llm/modules.d.ts +7 -0
- package/dist/commands/llm/modules.d.ts.map +1 -0
- package/dist/commands/llm/modules.js +11 -0
- package/dist/commands/llm/modules.js.map +1 -0
- package/dist/commands/llm/relationships.d.ts +7 -0
- package/dist/commands/llm/relationships.d.ts.map +1 -0
- package/dist/commands/llm/relationships.js +11 -0
- package/dist/commands/llm/relationships.js.map +1 -0
- package/dist/commands/modules/assign.d.ts +14 -0
- package/dist/commands/modules/assign.d.ts.map +1 -0
- package/dist/commands/modules/assign.js +54 -0
- package/dist/commands/modules/assign.js.map +1 -0
- package/dist/commands/modules/create.d.ts +16 -0
- package/dist/commands/modules/create.d.ts.map +1 -0
- package/dist/commands/modules/create.js +37 -0
- package/dist/commands/modules/create.js.map +1 -0
- package/dist/commands/modules/delete.d.ts +14 -0
- package/dist/commands/modules/delete.d.ts.map +1 -0
- package/dist/commands/modules/delete.js +54 -0
- package/dist/commands/modules/delete.js.map +1 -0
- package/dist/commands/modules/generate.d.ts +84 -0
- package/dist/commands/modules/generate.d.ts.map +1 -0
- package/dist/commands/modules/generate.js +1234 -0
- package/dist/commands/modules/generate.js.map +1 -0
- package/dist/commands/modules/index.d.ts +2 -0
- package/dist/commands/modules/index.d.ts.map +1 -0
- package/dist/commands/modules/index.js +2 -0
- package/dist/commands/modules/index.js.map +1 -0
- package/dist/commands/modules/list.d.ts +13 -0
- package/dist/commands/modules/list.d.ts.map +1 -0
- package/dist/commands/modules/list.js +92 -0
- package/dist/commands/modules/list.js.map +1 -0
- package/dist/commands/modules/prune.d.ts +10 -0
- package/dist/commands/modules/prune.d.ts.map +1 -0
- package/dist/commands/modules/prune.js +23 -0
- package/dist/commands/modules/prune.js.map +1 -0
- package/dist/commands/modules/show.d.ts +15 -0
- package/dist/commands/modules/show.d.ts.map +1 -0
- package/dist/commands/modules/show.js +95 -0
- package/dist/commands/modules/show.js.map +1 -0
- package/dist/commands/modules/unassign.d.ts +13 -0
- package/dist/commands/modules/unassign.d.ts.map +1 -0
- package/dist/commands/modules/unassign.js +49 -0
- package/dist/commands/modules/unassign.js.map +1 -0
- package/dist/commands/modules/update.d.ts +15 -0
- package/dist/commands/modules/update.d.ts.map +1 -0
- package/dist/commands/modules/update.js +50 -0
- package/dist/commands/modules/update.js.map +1 -0
- package/dist/commands/modules/verify.d.ts +18 -0
- package/dist/commands/modules/verify.d.ts.map +1 -0
- package/dist/commands/modules/verify.js +114 -0
- package/dist/commands/modules/verify.js.map +1 -0
- package/dist/commands/overview.d.ts +12 -0
- package/dist/commands/overview.d.ts.map +1 -0
- package/dist/commands/overview.js +219 -0
- package/dist/commands/overview.js.map +1 -0
- package/dist/commands/parse.d.ts +30 -0
- package/dist/commands/parse.d.ts.map +1 -0
- package/dist/commands/parse.js +211 -0
- package/dist/commands/parse.js.map +1 -0
- package/dist/commands/process-groups/index.d.ts +2 -0
- package/dist/commands/process-groups/index.d.ts.map +1 -0
- package/dist/commands/process-groups/index.js +2 -0
- package/dist/commands/process-groups/index.js.map +1 -0
- package/dist/commands/process-groups/list.d.ts +11 -0
- package/dist/commands/process-groups/list.d.ts.map +1 -0
- package/dist/commands/process-groups/list.js +98 -0
- package/dist/commands/process-groups/list.js.map +1 -0
- package/dist/commands/relationships/annotate.d.ts +27 -0
- package/dist/commands/relationships/annotate.d.ts.map +1 -0
- package/dist/commands/relationships/annotate.js +453 -0
- package/dist/commands/relationships/annotate.js.map +1 -0
- package/dist/commands/relationships/index.d.ts +2 -0
- package/dist/commands/relationships/index.d.ts.map +1 -0
- package/dist/commands/relationships/index.js +2 -0
- package/dist/commands/relationships/index.js.map +1 -0
- package/dist/commands/relationships/list.d.ts +18 -0
- package/dist/commands/relationships/list.d.ts.map +1 -0
- package/dist/commands/relationships/list.js +147 -0
- package/dist/commands/relationships/list.js.map +1 -0
- package/dist/commands/relationships/next.d.ts +17 -0
- package/dist/commands/relationships/next.d.ts.map +1 -0
- package/dist/commands/relationships/next.js +178 -0
- package/dist/commands/relationships/next.js.map +1 -0
- package/dist/commands/relationships/set.d.ts +19 -0
- package/dist/commands/relationships/set.d.ts.map +1 -0
- package/dist/commands/relationships/set.js +65 -0
- package/dist/commands/relationships/set.js.map +1 -0
- package/dist/commands/relationships/show.d.ts +13 -0
- package/dist/commands/relationships/show.d.ts.map +1 -0
- package/dist/commands/relationships/show.js +59 -0
- package/dist/commands/relationships/show.js.map +1 -0
- package/dist/commands/relationships/unset.d.ts +16 -0
- package/dist/commands/relationships/unset.d.ts.map +1 -0
- package/dist/commands/relationships/unset.js +62 -0
- package/dist/commands/relationships/unset.js.map +1 -0
- package/dist/commands/relationships/verify.d.ts +24 -0
- package/dist/commands/relationships/verify.d.ts.map +1 -0
- package/dist/commands/relationships/verify.js +328 -0
- package/dist/commands/relationships/verify.js.map +1 -0
- package/dist/commands/stats.d.ts +11 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +207 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/symbols/annotate.d.ts +32 -0
- package/dist/commands/symbols/annotate.d.ts.map +1 -0
- package/dist/commands/symbols/annotate.js +862 -0
- package/dist/commands/symbols/annotate.js.map +1 -0
- package/dist/commands/symbols/deps.d.ts +18 -0
- package/dist/commands/symbols/deps.d.ts.map +1 -0
- package/dist/commands/symbols/deps.js +104 -0
- package/dist/commands/symbols/deps.js.map +1 -0
- package/dist/commands/symbols/index.d.ts +2 -0
- package/dist/commands/symbols/index.d.ts.map +1 -0
- package/dist/commands/symbols/index.js +2 -0
- package/dist/commands/symbols/index.js.map +1 -0
- package/dist/commands/symbols/list.d.ts +17 -0
- package/dist/commands/symbols/list.d.ts.map +1 -0
- package/dist/commands/symbols/list.js +136 -0
- package/dist/commands/symbols/list.js.map +1 -0
- package/dist/commands/symbols/next.d.ts +15 -0
- package/dist/commands/symbols/next.d.ts.map +1 -0
- package/dist/commands/symbols/next.js +147 -0
- package/dist/commands/symbols/next.js.map +1 -0
- package/dist/commands/symbols/prereqs.d.ts +18 -0
- package/dist/commands/symbols/prereqs.d.ts.map +1 -0
- package/dist/commands/symbols/prereqs.js +107 -0
- package/dist/commands/symbols/prereqs.js.map +1 -0
- package/dist/commands/symbols/ready.d.ts +17 -0
- package/dist/commands/symbols/ready.d.ts.map +1 -0
- package/dist/commands/symbols/ready.js +126 -0
- package/dist/commands/symbols/ready.js.map +1 -0
- package/dist/commands/symbols/set.d.ts +27 -0
- package/dist/commands/symbols/set.d.ts.map +1 -0
- package/dist/commands/symbols/set.js +241 -0
- package/dist/commands/symbols/set.js.map +1 -0
- package/dist/commands/symbols/show.d.ts +19 -0
- package/dist/commands/symbols/show.d.ts.map +1 -0
- package/dist/commands/symbols/show.js +182 -0
- package/dist/commands/symbols/show.js.map +1 -0
- package/dist/commands/symbols/understood.d.ts +15 -0
- package/dist/commands/symbols/understood.d.ts.map +1 -0
- package/dist/commands/symbols/understood.js +101 -0
- package/dist/commands/symbols/understood.js.map +1 -0
- package/dist/commands/symbols/unset.d.ts +16 -0
- package/dist/commands/symbols/unset.d.ts.map +1 -0
- package/dist/commands/symbols/unset.js +48 -0
- package/dist/commands/symbols/unset.js.map +1 -0
- package/dist/commands/symbols/verify.d.ts +25 -0
- package/dist/commands/symbols/verify.d.ts.map +1 -0
- package/dist/commands/symbols/verify.js +360 -0
- package/dist/commands/symbols/verify.js.map +1 -0
- package/dist/db/connection.d.ts +14 -0
- package/dist/db/connection.d.ts.map +1 -0
- package/dist/db/connection.js +37 -0
- package/dist/db/connection.js.map +1 -0
- package/dist/db/database-facade.d.ts +125 -0
- package/dist/db/database-facade.d.ts.map +1 -0
- package/dist/db/database-facade.js +347 -0
- package/dist/db/database-facade.js.map +1 -0
- package/dist/db/database.d.ts +9 -0
- package/dist/db/database.d.ts.map +1 -0
- package/dist/db/database.js +11 -0
- package/dist/db/database.js.map +1 -0
- package/dist/db/index.d.ts +7 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +11 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/repositories/_shared/call-graph-query.d.ts +10 -0
- package/dist/db/repositories/_shared/call-graph-query.d.ts.map +1 -0
- package/dist/db/repositories/_shared/call-graph-query.js +59 -0
- package/dist/db/repositories/_shared/call-graph-query.js.map +1 -0
- package/dist/db/repositories/call-graph-service.d.ts +28 -0
- package/dist/db/repositories/call-graph-service.d.ts.map +1 -0
- package/dist/db/repositories/call-graph-service.js +223 -0
- package/dist/db/repositories/call-graph-service.js.map +1 -0
- package/dist/db/repositories/definition-repository.d.ts +99 -0
- package/dist/db/repositories/definition-repository.d.ts.map +1 -0
- package/dist/db/repositories/definition-repository.js +317 -0
- package/dist/db/repositories/definition-repository.js.map +1 -0
- package/dist/db/repositories/dependency-repository.d.ts +78 -0
- package/dist/db/repositories/dependency-repository.d.ts.map +1 -0
- package/dist/db/repositories/dependency-repository.js +446 -0
- package/dist/db/repositories/dependency-repository.js.map +1 -0
- package/dist/db/repositories/domain-repository.d.ts +97 -0
- package/dist/db/repositories/domain-repository.d.ts.map +1 -0
- package/dist/db/repositories/domain-repository.js +261 -0
- package/dist/db/repositories/domain-repository.js.map +1 -0
- package/dist/db/repositories/feature-repository.d.ts +64 -0
- package/dist/db/repositories/feature-repository.d.ts.map +1 -0
- package/dist/db/repositories/feature-repository.js +189 -0
- package/dist/db/repositories/feature-repository.js.map +1 -0
- package/dist/db/repositories/file-repository.d.ts +67 -0
- package/dist/db/repositories/file-repository.d.ts.map +1 -0
- package/dist/db/repositories/file-repository.js +179 -0
- package/dist/db/repositories/file-repository.js.map +1 -0
- package/dist/db/repositories/flow-repository.d.ts +172 -0
- package/dist/db/repositories/flow-repository.d.ts.map +1 -0
- package/dist/db/repositories/flow-repository.js +599 -0
- package/dist/db/repositories/flow-repository.js.map +1 -0
- package/dist/db/repositories/graph-repository.d.ts +93 -0
- package/dist/db/repositories/graph-repository.d.ts.map +1 -0
- package/dist/db/repositories/graph-repository.js +413 -0
- package/dist/db/repositories/graph-repository.js.map +1 -0
- package/dist/db/repositories/index.d.ts +20 -0
- package/dist/db/repositories/index.d.ts.map +1 -0
- package/dist/db/repositories/index.js +15 -0
- package/dist/db/repositories/index.js.map +1 -0
- package/dist/db/repositories/interaction-analysis.d.ts +78 -0
- package/dist/db/repositories/interaction-analysis.d.ts.map +1 -0
- package/dist/db/repositories/interaction-analysis.js +340 -0
- package/dist/db/repositories/interaction-analysis.js.map +1 -0
- package/dist/db/repositories/interaction-repository.d.ts +145 -0
- package/dist/db/repositories/interaction-repository.d.ts.map +1 -0
- package/dist/db/repositories/interaction-repository.js +395 -0
- package/dist/db/repositories/interaction-repository.js.map +1 -0
- package/dist/db/repositories/metadata-repository.d.ts +110 -0
- package/dist/db/repositories/metadata-repository.d.ts.map +1 -0
- package/dist/db/repositories/metadata-repository.js +294 -0
- package/dist/db/repositories/metadata-repository.js.map +1 -0
- package/dist/db/repositories/module-repository.d.ts +162 -0
- package/dist/db/repositories/module-repository.d.ts.map +1 -0
- package/dist/db/repositories/module-repository.js +519 -0
- package/dist/db/repositories/module-repository.js.map +1 -0
- package/dist/db/repositories/relationship-repository.d.ts +98 -0
- package/dist/db/repositories/relationship-repository.d.ts.map +1 -0
- package/dist/db/repositories/relationship-repository.js +421 -0
- package/dist/db/repositories/relationship-repository.js.map +1 -0
- package/dist/db/schema-manager.d.ts +31 -0
- package/dist/db/schema-manager.d.ts.map +1 -0
- package/dist/db/schema-manager.js +398 -0
- package/dist/db/schema-manager.js.map +1 -0
- package/dist/db/schema.d.ts +404 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +234 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/db/utils/tree-builder.d.ts +25 -0
- package/dist/db/utils/tree-builder.d.ts.map +1 -0
- package/dist/db/utils/tree-builder.js +38 -0
- package/dist/db/utils/tree-builder.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/ast-parser.d.ts +23 -0
- package/dist/parser/ast-parser.d.ts.map +1 -0
- package/dist/parser/ast-parser.js +65 -0
- package/dist/parser/ast-parser.js.map +1 -0
- package/dist/parser/definition-extractor.d.ts +29 -0
- package/dist/parser/definition-extractor.d.ts.map +1 -0
- package/dist/parser/definition-extractor.js +379 -0
- package/dist/parser/definition-extractor.js.map +1 -0
- package/dist/parser/reference-extractor.d.ts +72 -0
- package/dist/parser/reference-extractor.d.ts.map +1 -0
- package/dist/parser/reference-extractor.js +759 -0
- package/dist/parser/reference-extractor.js.map +1 -0
- package/dist/utils/file-scanner.d.ts +6 -0
- package/dist/utils/file-scanner.d.ts.map +1 -0
- package/dist/utils/file-scanner.js +33 -0
- package/dist/utils/file-scanner.js.map +1 -0
- package/dist/web/api-transforms.d.ts +4 -0
- package/dist/web/api-transforms.d.ts.map +1 -0
- package/dist/web/api-transforms.js +4 -0
- package/dist/web/api-transforms.js.map +1 -0
- package/dist/web/server.d.ts +16 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +229 -0
- package/dist/web/server.js.map +1 -0
- package/dist/web/server.test.d.ts +2 -0
- package/dist/web/server.test.d.ts.map +1 -0
- package/dist/web/server.test.js +505 -0
- package/dist/web/server.test.js.map +1 -0
- package/dist/web/transforms/flow-transforms.d.ts +117 -0
- package/dist/web/transforms/flow-transforms.d.ts.map +1 -0
- package/dist/web/transforms/flow-transforms.js +202 -0
- package/dist/web/transforms/flow-transforms.js.map +1 -0
- package/dist/web/transforms/index.d.ts +4 -0
- package/dist/web/transforms/index.d.ts.map +1 -0
- package/dist/web/transforms/index.js +4 -0
- package/dist/web/transforms/index.js.map +1 -0
- package/dist/web/transforms/module-transforms.d.ts +42 -0
- package/dist/web/transforms/module-transforms.d.ts.map +1 -0
- package/dist/web/transforms/module-transforms.js +64 -0
- package/dist/web/transforms/module-transforms.js.map +1 -0
- package/dist/web/transforms/symbol-transforms.d.ts +31 -0
- package/dist/web/transforms/symbol-transforms.d.ts.map +1 -0
- package/dist/web/transforms/symbol-transforms.js +95 -0
- package/dist/web/transforms/symbol-transforms.js.map +1 -0
- package/package.json +96 -0
- package/ui/dist/assets/index-DP3dRMlh.js +268 -0
- package/ui/dist/assets/index-DP3dRMlh.js.map +1 -0
- package/ui/dist/assets/index-Db204Xn1.css +1 -0
- package/ui/dist/index.html +67 -0
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt builders for the two-phase module tree LLM process.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Build the system prompt for Phase 1 (tree structure generation).
|
|
6
|
+
*/
|
|
7
|
+
export function buildTreeSystemPrompt() {
|
|
8
|
+
return `You are a software architect designing a module structure for a codebase.
|
|
9
|
+
The root "project" module already exists. Propose child modules to organize the codebase.
|
|
10
|
+
|
|
11
|
+
## Your Task
|
|
12
|
+
Analyze the provided domain/role information and directory structure to propose a hierarchical module tree.
|
|
13
|
+
The tree should reflect logical groupings of functionality, not just mirror the file system.
|
|
14
|
+
|
|
15
|
+
## Output Format
|
|
16
|
+
Respond with **only** a CSV table:
|
|
17
|
+
|
|
18
|
+
\`\`\`csv
|
|
19
|
+
type,parent_path,slug,name,description,is_test
|
|
20
|
+
module,project,frontend,"Frontend","UI components and screens",false
|
|
21
|
+
module,project,backend,"Backend","Server-side logic and APIs",false
|
|
22
|
+
module,project,testing,"Testing","Test utilities and helpers",true
|
|
23
|
+
module,project.frontend,screens,"Screens","Application screens",false
|
|
24
|
+
module,project.frontend,components,"Components","Reusable UI components",false
|
|
25
|
+
module,project.backend,services,"Services","Business logic services",false
|
|
26
|
+
module,project.backend,api,"API","HTTP endpoint handlers",false
|
|
27
|
+
module,project.testing,factories,"Test Factories","Mock data generators for tests",true
|
|
28
|
+
\`\`\`
|
|
29
|
+
|
|
30
|
+
## Test Classification
|
|
31
|
+
For each module, set is_test to "true" if the module exists solely to support testing:
|
|
32
|
+
- Test utilities, mock factories, fixture generators, test helpers
|
|
33
|
+
- Test data builders, spec runners, integration test support
|
|
34
|
+
- Anything that wouldn't ship in a production build
|
|
35
|
+
|
|
36
|
+
Set is_test to "false" for all production code modules.
|
|
37
|
+
Test classification is inherited: if a parent is test, children should also be test.
|
|
38
|
+
|
|
39
|
+
## Slug Rules
|
|
40
|
+
- Must start with lowercase letter
|
|
41
|
+
- Only lowercase letters, numbers, and hyphens allowed
|
|
42
|
+
- No consecutive hyphens (e.g., "my--module" is invalid)
|
|
43
|
+
- No trailing hyphens (e.g., "my-module-" is invalid)
|
|
44
|
+
- Maximum 50 characters
|
|
45
|
+
|
|
46
|
+
## Guidelines
|
|
47
|
+
- Create 3-5 levels of depth at most
|
|
48
|
+
- Group by functionality/domain, not by file type
|
|
49
|
+
- Use domain tags to inform module boundaries
|
|
50
|
+
- Consider architectural layers (e.g., presentation, business logic, data)
|
|
51
|
+
- Keep module names concise but descriptive
|
|
52
|
+
- Each parent_path must be a valid path (either "project" or a previously defined module)
|
|
53
|
+
- For API layers (controllers, routes, services), create entity-specific modules:
|
|
54
|
+
- backend.api.controllers.users (not just backend.api.controllers)
|
|
55
|
+
- backend.api.controllers.products
|
|
56
|
+
- backend.services.user-management
|
|
57
|
+
This enables accurate per-entity flow tracing.
|
|
58
|
+
|
|
59
|
+
## Business Domain Parity (CRITICAL)
|
|
60
|
+
- Every business entity domain MUST be a first-class branch.
|
|
61
|
+
If the codebase has customers, vehicles, and sales — each gets equal treatment.
|
|
62
|
+
Do NOT bury one domain under "Infrastructure" or "Misc" while others get their own branch.
|
|
63
|
+
The domains list below tells you which business entities exist — ensure each one appears
|
|
64
|
+
in the tree at the same structural level.
|
|
65
|
+
|
|
66
|
+
## Test Code Segregation
|
|
67
|
+
- Test/spec code MUST go in its own top-level branch (e.g., project.testing).
|
|
68
|
+
Do NOT mix test helpers, mocks, fixtures, or data generators into business domain branches.
|
|
69
|
+
Use the symbol names, file paths, purposes, and domain tags to determine what is test code —
|
|
70
|
+
look for test utilities, mock factories, fixture generators, and spec helpers.
|
|
71
|
+
|
|
72
|
+
## Infrastructure Scope
|
|
73
|
+
- The "infrastructure" or "utility" branch should ONLY contain true cross-cutting concerns:
|
|
74
|
+
database connections, logging, configuration, error handling base classes.
|
|
75
|
+
Business logic services, controllers, and routes are NOT infrastructure —
|
|
76
|
+
they belong under their respective business domain branches.`;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Build the user prompt for Phase 1 (tree structure generation).
|
|
80
|
+
*/
|
|
81
|
+
export function buildTreeUserPrompt(context) {
|
|
82
|
+
const parts = [];
|
|
83
|
+
parts.push('## Codebase Overview');
|
|
84
|
+
parts.push(`Total symbols: ${context.totalSymbolCount}`);
|
|
85
|
+
if (context.maxModules && context.maxModules > 0) {
|
|
86
|
+
const initialTarget = Math.floor(context.maxModules * 0.4);
|
|
87
|
+
parts.push(`Module budget: ${context.maxModules} total. Create ~${initialTarget} modules now — oversized leaves will be split automatically later. Focus on the top 2–3 levels.`);
|
|
88
|
+
}
|
|
89
|
+
parts.push('');
|
|
90
|
+
// Domains with sample symbols
|
|
91
|
+
parts.push(`## Domains Found (${context.domains.length})`);
|
|
92
|
+
parts.push('');
|
|
93
|
+
for (const domain of context.domains) {
|
|
94
|
+
parts.push(`### ${domain.domain} (${domain.count} symbols)`);
|
|
95
|
+
parts.push('Sample symbols:');
|
|
96
|
+
for (const sym of domain.sampleSymbols) {
|
|
97
|
+
const roleStr = sym.role ? ` [${sym.role}]` : '';
|
|
98
|
+
parts.push(`- ${sym.name} (${sym.kind})${roleStr}`);
|
|
99
|
+
}
|
|
100
|
+
parts.push('');
|
|
101
|
+
}
|
|
102
|
+
// Directory structure (full — the LLM needs the complete picture to design modules)
|
|
103
|
+
parts.push('## Directory Structure');
|
|
104
|
+
for (const dir of context.directoryStructure) {
|
|
105
|
+
parts.push(`- ${dir.path} (${dir.symbolCount} symbols)`);
|
|
106
|
+
}
|
|
107
|
+
parts.push('');
|
|
108
|
+
parts.push('Propose a module tree structure in CSV format.');
|
|
109
|
+
return parts.join('\n');
|
|
110
|
+
}
|
|
111
|
+
// ============================================================
|
|
112
|
+
// Helpers
|
|
113
|
+
// ============================================================
|
|
114
|
+
/**
|
|
115
|
+
* Check if a file path is a test file based on naming conventions.
|
|
116
|
+
*/
|
|
117
|
+
export function isTestFile(filePath) {
|
|
118
|
+
const segments = filePath.split('/');
|
|
119
|
+
const fileName = segments[segments.length - 1] ?? '';
|
|
120
|
+
return (fileName.endsWith('.test.ts') ||
|
|
121
|
+
fileName.endsWith('.test.tsx') ||
|
|
122
|
+
fileName.endsWith('.spec.ts') ||
|
|
123
|
+
fileName.endsWith('.spec.tsx') ||
|
|
124
|
+
segments.includes('__tests__'));
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Build the system prompt for Phase 2 (symbol assignment).
|
|
128
|
+
*/
|
|
129
|
+
export function buildAssignmentSystemPrompt() {
|
|
130
|
+
return `You are a software architect assigning symbols to modules.
|
|
131
|
+
Each symbol must be assigned to exactly ONE module path.
|
|
132
|
+
|
|
133
|
+
## Your Task
|
|
134
|
+
For each symbol, choose the most appropriate module based on:
|
|
135
|
+
1. The symbol's purpose and role
|
|
136
|
+
2. The symbol's domain tags
|
|
137
|
+
3. The symbol's file path
|
|
138
|
+
4. The module descriptions
|
|
139
|
+
|
|
140
|
+
## Output Format
|
|
141
|
+
Respond with **only** a CSV table:
|
|
142
|
+
|
|
143
|
+
\`\`\`csv
|
|
144
|
+
type,symbol_id,module_path
|
|
145
|
+
assignment,42,project.frontend.screens.login
|
|
146
|
+
assignment,87,project.backend.services.auth
|
|
147
|
+
assignment,123,project.shared.utils
|
|
148
|
+
\`\`\`
|
|
149
|
+
|
|
150
|
+
## Guidelines
|
|
151
|
+
- Every symbol must be assigned to exactly one module
|
|
152
|
+
- Module paths must match existing modules in the tree
|
|
153
|
+
- Prefer more specific modules over general ones
|
|
154
|
+
- Group related symbols together
|
|
155
|
+
- Consider the file path as a hint but prioritize functionality
|
|
156
|
+
|
|
157
|
+
## Completeness Requirement
|
|
158
|
+
CRITICAL: Your response MUST contain exactly one assignment row for EVERY symbol listed.
|
|
159
|
+
If unsure about the best module, assign to the closest parent module. Never skip a symbol.
|
|
160
|
+
|
|
161
|
+
## Test Symbol Rules
|
|
162
|
+
- Symbols from test files (*.test.ts, *.spec.ts) that are NOT exported are test-file-local.
|
|
163
|
+
Assign them to the nearest test module (project.testing.*) — never to production modules.
|
|
164
|
+
- Only exported symbols from dedicated test utility files (test/helpers/*, test/factories/*)
|
|
165
|
+
belong in specific test infrastructure modules (e.g., project.testing.factories.customers).
|
|
166
|
+
- Non-exported symbols from test files are inline mocks/fixtures — assign them to a general
|
|
167
|
+
test module like project.testing.helpers or project.testing.mocks, not to granular sub-modules.`;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Format module tree for display in user prompt.
|
|
171
|
+
*/
|
|
172
|
+
export function formatModuleTreeForPrompt(modules, directoryHints) {
|
|
173
|
+
const lines = [];
|
|
174
|
+
// Sort by depth then path
|
|
175
|
+
const sorted = [...modules].sort((a, b) => {
|
|
176
|
+
if (a.depth !== b.depth)
|
|
177
|
+
return a.depth - b.depth;
|
|
178
|
+
return a.fullPath.localeCompare(b.fullPath);
|
|
179
|
+
});
|
|
180
|
+
for (const mod of sorted) {
|
|
181
|
+
const indent = ' '.repeat(mod.depth);
|
|
182
|
+
const desc = mod.description ? ` - ${mod.description}` : '';
|
|
183
|
+
const hints = directoryHints?.get(mod.id);
|
|
184
|
+
const hintStr = hints?.length ? ` [${hints.join(', ')}]` : '';
|
|
185
|
+
lines.push(`${indent}${mod.fullPath}: ${mod.name}${desc}${hintStr}`);
|
|
186
|
+
}
|
|
187
|
+
return lines.join('\n');
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Build the user prompt for Phase 2 (symbol assignment batch).
|
|
191
|
+
*/
|
|
192
|
+
export function buildAssignmentUserPrompt(modules, symbols, directoryHints) {
|
|
193
|
+
const parts = [];
|
|
194
|
+
// Module tree
|
|
195
|
+
parts.push('## Available Modules');
|
|
196
|
+
parts.push('');
|
|
197
|
+
parts.push(formatModuleTreeForPrompt(modules, directoryHints));
|
|
198
|
+
parts.push('');
|
|
199
|
+
// Symbols to assign
|
|
200
|
+
parts.push(`## Symbols to Assign (${symbols.length})`);
|
|
201
|
+
parts.push('');
|
|
202
|
+
for (const sym of symbols) {
|
|
203
|
+
parts.push(`### #${sym.id}: ${sym.name} (${sym.kind})`);
|
|
204
|
+
parts.push(`File: ${sym.filePath}`);
|
|
205
|
+
if (!sym.isExported) {
|
|
206
|
+
parts.push('Exported: no (file-local symbol)');
|
|
207
|
+
}
|
|
208
|
+
if (isTestFile(sym.filePath)) {
|
|
209
|
+
parts.push('Test file: yes');
|
|
210
|
+
}
|
|
211
|
+
if (sym.purpose) {
|
|
212
|
+
parts.push(`Purpose: ${sym.purpose}`);
|
|
213
|
+
}
|
|
214
|
+
if (sym.domain && sym.domain.length > 0) {
|
|
215
|
+
parts.push(`Domains: ${sym.domain.join(', ')}`);
|
|
216
|
+
}
|
|
217
|
+
if (sym.role) {
|
|
218
|
+
parts.push(`Role: ${sym.role}`);
|
|
219
|
+
}
|
|
220
|
+
parts.push('');
|
|
221
|
+
}
|
|
222
|
+
parts.push(`IMPORTANT: You MUST output exactly ${symbols.length} assignment rows — one for each of the ${symbols.length} symbols above. Do not skip any.`);
|
|
223
|
+
return parts.join('\n');
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Convert AnnotatedSymbolInfo to SymbolForAssignment.
|
|
227
|
+
*/
|
|
228
|
+
export function toSymbolForAssignment(sym) {
|
|
229
|
+
return {
|
|
230
|
+
id: sym.id,
|
|
231
|
+
name: sym.name,
|
|
232
|
+
kind: sym.kind,
|
|
233
|
+
filePath: sym.filePath,
|
|
234
|
+
isExported: sym.isExported,
|
|
235
|
+
purpose: sym.purpose,
|
|
236
|
+
domain: sym.domain,
|
|
237
|
+
role: sym.role,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Build the system prompt for Phase 3 (module deepening).
|
|
242
|
+
*/
|
|
243
|
+
export function buildDeepenSystemPrompt() {
|
|
244
|
+
return `You are a software architect splitting a large module into smaller sub-modules.
|
|
245
|
+
|
|
246
|
+
## Your Task
|
|
247
|
+
A module has too many members and needs to be split into 2-5 smaller sub-modules.
|
|
248
|
+
Analyze the member symbols and propose sub-modules based on patterns in:
|
|
249
|
+
- Names (e.g., use*Customer* → customers sub-module)
|
|
250
|
+
- File paths (same file often = same sub-module)
|
|
251
|
+
- Functionality (CRUD operations, queries, mutations, etc.)
|
|
252
|
+
- Entity/domain groupings (customers, sales, vehicles, etc.)
|
|
253
|
+
|
|
254
|
+
## Output Format
|
|
255
|
+
Respond with **only** a CSV table with two row types:
|
|
256
|
+
|
|
257
|
+
\`\`\`csv
|
|
258
|
+
type,parent_path,slug,name,description,definition_id
|
|
259
|
+
module,project.frontend.hooks.data-fetching,customers,"Customer Hooks","Hooks for customer data",
|
|
260
|
+
module,project.frontend.hooks.data-fetching,sales,"Sales Hooks","Hooks for sales data",
|
|
261
|
+
reassign,project.frontend.hooks.data-fetching.customers,,,,42
|
|
262
|
+
reassign,project.frontend.hooks.data-fetching.customers,,,,43
|
|
263
|
+
reassign,project.frontend.hooks.data-fetching.sales,,,,87
|
|
264
|
+
\`\`\`
|
|
265
|
+
|
|
266
|
+
Row types:
|
|
267
|
+
- \`module\`: Creates a new sub-module. parent_path is the current module being split. Leave definition_id empty.
|
|
268
|
+
- \`reassign\`: Moves a symbol to a sub-module. parent_path is the target module path (new sub-module). definition_id is required, other fields empty.
|
|
269
|
+
|
|
270
|
+
## Slug Rules
|
|
271
|
+
- Must start with lowercase letter
|
|
272
|
+
- Only lowercase letters, numbers, and hyphens allowed
|
|
273
|
+
- No consecutive hyphens
|
|
274
|
+
- No trailing hyphens
|
|
275
|
+
- Maximum 50 characters
|
|
276
|
+
|
|
277
|
+
## Guidelines
|
|
278
|
+
- Create 2-5 sub-modules (not more)
|
|
279
|
+
- Every member MUST be reassigned to exactly one sub-module
|
|
280
|
+
- Group related symbols together
|
|
281
|
+
- Use clear, descriptive slugs based on the grouping pattern
|
|
282
|
+
- Do NOT leave any members in the parent module
|
|
283
|
+
- For API layer modules (controllers, routes, handlers), prioritize splitting by entity/domain
|
|
284
|
+
even if member count is low, because each entity typically has separate user flows`;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Build the user prompt for Phase 3 (module deepening).
|
|
288
|
+
*/
|
|
289
|
+
export function buildDeepenUserPrompt(module) {
|
|
290
|
+
const parts = [];
|
|
291
|
+
parts.push('## Module to Split');
|
|
292
|
+
parts.push(`Path: ${module.fullPath}`);
|
|
293
|
+
parts.push(`Name: ${module.name}`);
|
|
294
|
+
parts.push(`Members (${module.members.length}):`);
|
|
295
|
+
parts.push('');
|
|
296
|
+
for (const member of module.members) {
|
|
297
|
+
const tags = [];
|
|
298
|
+
if (isTestFile(member.filePath))
|
|
299
|
+
tags.push('test-file');
|
|
300
|
+
if (!member.isExported)
|
|
301
|
+
tags.push('not exported');
|
|
302
|
+
const tagStr = tags.length > 0 ? ` [${tags.join(', ')}]` : '';
|
|
303
|
+
parts.push(`- #${member.definitionId}: ${member.name} (${member.kind}) from ${member.filePath}${tagStr}`);
|
|
304
|
+
}
|
|
305
|
+
parts.push('');
|
|
306
|
+
parts.push('Propose sub-modules and reassign all members to them.');
|
|
307
|
+
return parts.join('\n');
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Build the system prompt for ancestor rebalancing.
|
|
311
|
+
*/
|
|
312
|
+
export function buildRebalanceSystemPrompt() {
|
|
313
|
+
return `You are a software architect reviewing symbol assignments after a module was split into sub-modules.
|
|
314
|
+
|
|
315
|
+
## Your Task
|
|
316
|
+
Symbols are currently assigned to ancestor (parent/grandparent) modules. New sub-modules have been created below.
|
|
317
|
+
Review each symbol and decide if it now fits better in one of the new sub-modules.
|
|
318
|
+
Only reassign symbols that clearly belong in a new sub-module — leave ambiguous ones where they are.
|
|
319
|
+
|
|
320
|
+
## Output Format
|
|
321
|
+
Respond with **only** a CSV table. Only include rows for symbols you want to MOVE.
|
|
322
|
+
Symbols not mentioned will stay in their current module.
|
|
323
|
+
|
|
324
|
+
\`\`\`csv
|
|
325
|
+
type,symbol_id,module_path
|
|
326
|
+
assignment,42,project.frontend.hooks.customers
|
|
327
|
+
assignment,87,project.frontend.hooks.sales
|
|
328
|
+
\`\`\`
|
|
329
|
+
|
|
330
|
+
## Guidelines
|
|
331
|
+
- Only move a symbol if the new sub-module is a clearly better fit
|
|
332
|
+
- Consider the symbol's name, kind, file path, and the sub-module descriptions
|
|
333
|
+
- When in doubt, leave the symbol where it is
|
|
334
|
+
- Module paths must match one of the new sub-modules listed below
|
|
335
|
+
- If no symbols should be moved, respond with just the CSV header`;
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Build the system prompt for aggressive branch pushdown.
|
|
339
|
+
* Unlike rebalance (conservative), this pushes ALL direct members to children.
|
|
340
|
+
*/
|
|
341
|
+
export function buildBranchPushdownSystemPrompt() {
|
|
342
|
+
return `You are a software architect pushing symbols from a parent module down to its children.
|
|
343
|
+
|
|
344
|
+
## Your Task
|
|
345
|
+
A module has both direct members AND child modules. Every symbol should be moved to
|
|
346
|
+
the most appropriate child module. Only leave a symbol in the parent if NONE of the
|
|
347
|
+
children are even remotely relevant.
|
|
348
|
+
|
|
349
|
+
## Output Format
|
|
350
|
+
Respond with **only** a CSV table. Include a row for EVERY symbol you want to move.
|
|
351
|
+
|
|
352
|
+
\`\`\`csv
|
|
353
|
+
type,symbol_id,module_path
|
|
354
|
+
assignment,42,project.frontend.hooks.customers
|
|
355
|
+
\`\`\`
|
|
356
|
+
|
|
357
|
+
## Guidelines
|
|
358
|
+
- Move EVERY symbol to the most appropriate child module
|
|
359
|
+
- When choosing between children, prefer the child whose members share the same file or directory
|
|
360
|
+
- Consider symbol name, kind, and file path
|
|
361
|
+
- Module paths must match one of the child modules listed below
|
|
362
|
+
- Only leave a symbol in the parent if absolutely none of the children fit
|
|
363
|
+
- CRITICAL: Output a row for every symbol. Do not skip any.`;
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Build the user prompt for ancestor rebalancing.
|
|
367
|
+
*/
|
|
368
|
+
export function buildRebalanceUserPrompt(ancestorSymbols, newSubModules) {
|
|
369
|
+
const parts = [];
|
|
370
|
+
parts.push('## New Sub-Modules');
|
|
371
|
+
parts.push('');
|
|
372
|
+
for (const sub of newSubModules) {
|
|
373
|
+
const desc = sub.description ? ` - ${sub.description}` : '';
|
|
374
|
+
parts.push(`- ${sub.path}: ${sub.name}${desc}`);
|
|
375
|
+
}
|
|
376
|
+
parts.push('');
|
|
377
|
+
parts.push('## Symbols Currently in Ancestor Modules');
|
|
378
|
+
parts.push('');
|
|
379
|
+
for (const group of ancestorSymbols) {
|
|
380
|
+
parts.push(`### ${group.modulePath} (${group.symbols.length} symbols)`);
|
|
381
|
+
for (const sym of group.symbols) {
|
|
382
|
+
const tags = [];
|
|
383
|
+
if (isTestFile(sym.filePath))
|
|
384
|
+
tags.push('test-file');
|
|
385
|
+
if (!sym.isExported)
|
|
386
|
+
tags.push('not exported');
|
|
387
|
+
const tagStr = tags.length > 0 ? ` [${tags.join(', ')}]` : '';
|
|
388
|
+
parts.push(`- #${sym.id}: ${sym.name} (${sym.kind}) from ${sym.filePath}${tagStr}`);
|
|
389
|
+
}
|
|
390
|
+
parts.push('');
|
|
391
|
+
}
|
|
392
|
+
parts.push('Reassign any symbols that now fit better in the new sub-modules.');
|
|
393
|
+
return parts.join('\n');
|
|
394
|
+
}
|
|
395
|
+
//# sourceMappingURL=module-prompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module-prompts.js","sourceRoot":"","sources":["../../../../src/commands/llm/_shared/module-prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process group detection via import graph connectivity (union-find).
|
|
3
|
+
*
|
|
4
|
+
* Replaces the old layer-utils.ts which hardcoded frontend/backend classification.
|
|
5
|
+
* Instead of classifying modules by path keywords, we compute connected components
|
|
6
|
+
* in the non-type-only import graph. Modules whose files share a connected component
|
|
7
|
+
* are in the same OS process. Modules with no import connectivity are in separate
|
|
8
|
+
* processes and may communicate via runtime protocols (HTTP, IPC, queues, etc.).
|
|
9
|
+
*/
|
|
10
|
+
import type { IndexDatabase } from '../../../db/database-facade.js';
|
|
11
|
+
import type { Module } from '../../../db/schema.js';
|
|
12
|
+
export interface ProcessGroups {
|
|
13
|
+
/** moduleId → groupId */
|
|
14
|
+
moduleToGroup: Map<number, number>;
|
|
15
|
+
/** groupId → modules in that group */
|
|
16
|
+
groupToModules: Map<number, Module[]>;
|
|
17
|
+
/** Number of distinct process groups */
|
|
18
|
+
groupCount: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Compute process groups from import graph connectivity.
|
|
22
|
+
*
|
|
23
|
+
* 1. Get all file→module mappings
|
|
24
|
+
* 2. Get runtime (non-type-only) import edges between files
|
|
25
|
+
* 3. Union-find on file IDs using the edges → each file gets a group representative
|
|
26
|
+
* 4. Map each module to its group via its files' representatives (majority vote)
|
|
27
|
+
* 5. Build the ProcessGroups result
|
|
28
|
+
*/
|
|
29
|
+
export declare function computeProcessGroups(db: IndexDatabase): ProcessGroups;
|
|
30
|
+
/**
|
|
31
|
+
* Check if two modules are in the same process group.
|
|
32
|
+
*/
|
|
33
|
+
export declare function areSameProcess(fromId: number, toId: number, groups: ProcessGroups): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Human-readable description of the process relationship between two modules.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getProcessDescription(fromId: number, toId: number, groups: ProcessGroups): string;
|
|
38
|
+
/**
|
|
39
|
+
* Derive a label for a process group from its modules' common ancestor path.
|
|
40
|
+
*
|
|
41
|
+
* - If all modules start with `project.frontend.*` → label is "frontend"
|
|
42
|
+
* - If mixed → use the depth-1 ancestors as the label (e.g., "backend, shared")
|
|
43
|
+
*/
|
|
44
|
+
export declare function getProcessGroupLabel(modules: Module[]): string;
|
|
45
|
+
/**
|
|
46
|
+
* Get all pairs of process groups for cross-process inference.
|
|
47
|
+
* Returns pairs of (groupA modules, groupB modules) for each unique group pair.
|
|
48
|
+
* Excludes singleton groups — a single-module group has no internal structure
|
|
49
|
+
* worth inferring cross-process communication for.
|
|
50
|
+
*/
|
|
51
|
+
export declare function getCrossProcessGroupPairs(groups: ProcessGroups): Array<[Module[], Module[]]>;
|
|
52
|
+
//# sourceMappingURL=process-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-utils.d.ts","sourceRoot":"","sources":["../../../../src/commands/llm/_shared/process-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,sCAAsC;IACtC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;CACpB;AAmDD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,aAAa,GAAG,aAAa,CAoErE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAQ3F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAKjG;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CA6C9D;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,aAAa,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAkB5F"}
|
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process group detection via import graph connectivity (union-find).
|
|
3
|
+
*
|
|
4
|
+
* Replaces the old layer-utils.ts which hardcoded frontend/backend classification.
|
|
5
|
+
* Instead of classifying modules by path keywords, we compute connected components
|
|
6
|
+
* in the non-type-only import graph. Modules whose files share a connected component
|
|
7
|
+
* are in the same OS process. Modules with no import connectivity are in separate
|
|
8
|
+
* processes and may communicate via runtime protocols (HTTP, IPC, queues, etc.).
|
|
9
|
+
*/
|
|
10
|
+
// ============================================================
|
|
11
|
+
// Union-Find
|
|
12
|
+
// ============================================================
|
|
13
|
+
class UnionFind {
|
|
14
|
+
parent = new Map();
|
|
15
|
+
rank = new Map();
|
|
16
|
+
find(x) {
|
|
17
|
+
if (!this.parent.has(x)) {
|
|
18
|
+
this.parent.set(x, x);
|
|
19
|
+
this.rank.set(x, 0);
|
|
20
|
+
}
|
|
21
|
+
let root = x;
|
|
22
|
+
while (this.parent.get(root) !== root) {
|
|
23
|
+
root = this.parent.get(root);
|
|
24
|
+
}
|
|
25
|
+
// Path compression
|
|
26
|
+
let current = x;
|
|
27
|
+
while (current !== root) {
|
|
28
|
+
const next = this.parent.get(current);
|
|
29
|
+
this.parent.set(current, root);
|
|
30
|
+
current = next;
|
|
31
|
+
}
|
|
32
|
+
return root;
|
|
33
|
+
}
|
|
34
|
+
union(a, b) {
|
|
35
|
+
const rootA = this.find(a);
|
|
36
|
+
const rootB = this.find(b);
|
|
37
|
+
if (rootA === rootB)
|
|
38
|
+
return;
|
|
39
|
+
const rankA = this.rank.get(rootA);
|
|
40
|
+
const rankB = this.rank.get(rootB);
|
|
41
|
+
if (rankA < rankB) {
|
|
42
|
+
this.parent.set(rootA, rootB);
|
|
43
|
+
}
|
|
44
|
+
else if (rankA > rankB) {
|
|
45
|
+
this.parent.set(rootB, rootA);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
this.parent.set(rootB, rootA);
|
|
49
|
+
this.rank.set(rootA, rankA + 1);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
// ============================================================
|
|
54
|
+
// Public API
|
|
55
|
+
// ============================================================
|
|
56
|
+
/**
|
|
57
|
+
* Compute process groups from import graph connectivity.
|
|
58
|
+
*
|
|
59
|
+
* 1. Get all file→module mappings
|
|
60
|
+
* 2. Get runtime (non-type-only) import edges between files
|
|
61
|
+
* 3. Union-find on file IDs using the edges → each file gets a group representative
|
|
62
|
+
* 4. Map each module to its group via its files' representatives (majority vote)
|
|
63
|
+
* 5. Build the ProcessGroups result
|
|
64
|
+
*/
|
|
65
|
+
export function computeProcessGroups(db) {
|
|
66
|
+
const fileToModule = db.interactions.getFileToModuleMap();
|
|
67
|
+
const importEdges = db.interactions.getRuntimeImportEdges();
|
|
68
|
+
const allModules = db.modules.getAll();
|
|
69
|
+
// Build union-find over file IDs
|
|
70
|
+
const uf = new UnionFind();
|
|
71
|
+
// Ensure all files with module assignments are in the UF
|
|
72
|
+
for (const fileId of fileToModule.keys()) {
|
|
73
|
+
uf.find(fileId);
|
|
74
|
+
}
|
|
75
|
+
// Union files connected by runtime imports
|
|
76
|
+
for (const edge of importEdges) {
|
|
77
|
+
uf.union(edge.fromFileId, edge.toFileId);
|
|
78
|
+
}
|
|
79
|
+
// Map each module to its group representative via its files
|
|
80
|
+
// A module's group = the representative of the majority of its files
|
|
81
|
+
const moduleFiles = new Map(); // moduleId → fileIds
|
|
82
|
+
for (const [fileId, moduleId] of fileToModule) {
|
|
83
|
+
const files = moduleFiles.get(moduleId) ?? [];
|
|
84
|
+
files.push(fileId);
|
|
85
|
+
moduleFiles.set(moduleId, files);
|
|
86
|
+
}
|
|
87
|
+
const moduleToGroup = new Map();
|
|
88
|
+
const groupToModules = new Map();
|
|
89
|
+
for (const mod of allModules) {
|
|
90
|
+
const files = moduleFiles.get(mod.id);
|
|
91
|
+
if (!files || files.length === 0) {
|
|
92
|
+
// Module has no files with definitions → assign to its own isolated group
|
|
93
|
+
const isolatedGroup = -mod.id; // negative to avoid collision with file-based groups
|
|
94
|
+
moduleToGroup.set(mod.id, isolatedGroup);
|
|
95
|
+
groupToModules.set(isolatedGroup, [mod]);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
// Count representative occurrences to find majority group
|
|
99
|
+
const repCounts = new Map();
|
|
100
|
+
for (const fileId of files) {
|
|
101
|
+
const rep = uf.find(fileId);
|
|
102
|
+
repCounts.set(rep, (repCounts.get(rep) ?? 0) + 1);
|
|
103
|
+
}
|
|
104
|
+
// Pick the representative with the most files
|
|
105
|
+
let bestRep = -1;
|
|
106
|
+
let bestCount = 0;
|
|
107
|
+
for (const [rep, count] of repCounts) {
|
|
108
|
+
if (count > bestCount) {
|
|
109
|
+
bestRep = rep;
|
|
110
|
+
bestCount = count;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
moduleToGroup.set(mod.id, bestRep);
|
|
114
|
+
const existing = groupToModules.get(bestRep) ?? [];
|
|
115
|
+
existing.push(mod);
|
|
116
|
+
groupToModules.set(bestRep, existing);
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
moduleToGroup,
|
|
120
|
+
groupToModules,
|
|
121
|
+
groupCount: groupToModules.size,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Check if two modules are in the same process group.
|
|
126
|
+
*/
|
|
127
|
+
export function areSameProcess(fromId, toId, groups) {
|
|
128
|
+
const fromGroup = groups.moduleToGroup.get(fromId);
|
|
129
|
+
const toGroup = groups.moduleToGroup.get(toId);
|
|
130
|
+
// If either module has no group, treat as same-process (conservative)
|
|
131
|
+
if (fromGroup === undefined || toGroup === undefined)
|
|
132
|
+
return true;
|
|
133
|
+
return fromGroup === toGroup;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Human-readable description of the process relationship between two modules.
|
|
137
|
+
*/
|
|
138
|
+
export function getProcessDescription(fromId, toId, groups) {
|
|
139
|
+
if (areSameProcess(fromId, toId, groups)) {
|
|
140
|
+
return 'same-process (shared import graph)';
|
|
141
|
+
}
|
|
142
|
+
return 'separate-process (no import connectivity)';
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Derive a label for a process group from its modules' common ancestor path.
|
|
146
|
+
*
|
|
147
|
+
* - If all modules start with `project.frontend.*` → label is "frontend"
|
|
148
|
+
* - If mixed → use the depth-1 ancestors as the label (e.g., "backend, shared")
|
|
149
|
+
*/
|
|
150
|
+
export function getProcessGroupLabel(modules) {
|
|
151
|
+
if (modules.length === 0)
|
|
152
|
+
return 'empty';
|
|
153
|
+
if (modules.length === 1) {
|
|
154
|
+
const parts = modules[0].fullPath.split('.');
|
|
155
|
+
return parts.length > 1 ? parts[1] : parts[0];
|
|
156
|
+
}
|
|
157
|
+
// Find common path prefix segments
|
|
158
|
+
const allParts = modules.map((m) => m.fullPath.split('.'));
|
|
159
|
+
const minLen = Math.min(...allParts.map((p) => p.length));
|
|
160
|
+
let commonDepth = 0;
|
|
161
|
+
for (let i = 0; i < minLen; i++) {
|
|
162
|
+
const seg = allParts[0][i];
|
|
163
|
+
if (allParts.every((p) => p[i] === seg)) {
|
|
164
|
+
commonDepth = i + 1;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
break;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if (commonDepth > 1) {
|
|
171
|
+
// Use the deepest common segment as the label (skip project root)
|
|
172
|
+
const commonPath = allParts[0].slice(0, commonDepth).join('.');
|
|
173
|
+
const parts = commonPath.split('.');
|
|
174
|
+
return parts.slice(1).join('.');
|
|
175
|
+
}
|
|
176
|
+
// Root-only or no common prefix: use the most frequent depth-1 segment
|
|
177
|
+
const segCounts = new Map();
|
|
178
|
+
for (const parts of allParts) {
|
|
179
|
+
const seg = parts.length > 1 ? parts[1] : parts[0];
|
|
180
|
+
segCounts.set(seg, (segCounts.get(seg) ?? 0) + 1);
|
|
181
|
+
}
|
|
182
|
+
let bestSeg = '';
|
|
183
|
+
let bestCount = 0;
|
|
184
|
+
for (const [seg, count] of segCounts) {
|
|
185
|
+
if (count > bestCount) {
|
|
186
|
+
bestSeg = seg;
|
|
187
|
+
bestCount = count;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return bestSeg;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Get all pairs of process groups for cross-process inference.
|
|
194
|
+
* Returns pairs of (groupA modules, groupB modules) for each unique group pair.
|
|
195
|
+
* Excludes singleton groups — a single-module group has no internal structure
|
|
196
|
+
* worth inferring cross-process communication for.
|
|
197
|
+
*/
|
|
198
|
+
export function getCrossProcessGroupPairs(groups) {
|
|
199
|
+
// Filter out all singleton groups regardless of ID sign
|
|
200
|
+
const groupIds = Array.from(groups.groupToModules.keys()).filter((gid) => {
|
|
201
|
+
const mods = groups.groupToModules.get(gid);
|
|
202
|
+
return mods.length > 1;
|
|
203
|
+
});
|
|
204
|
+
const pairs = [];
|
|
205
|
+
for (let i = 0; i < groupIds.length; i++) {
|
|
206
|
+
for (let j = i + 1; j < groupIds.length; j++) {
|
|
207
|
+
const modulesA = groups.groupToModules.get(groupIds[i]);
|
|
208
|
+
const modulesB = groups.groupToModules.get(groupIds[j]);
|
|
209
|
+
pairs.push([modulesA, modulesB]);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return pairs;
|
|
213
|
+
}
|
|
214
|
+
//# sourceMappingURL=process-utils.js.map
|