@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,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FlowTracer - Definition-level call graph traversal.
|
|
3
|
+
* Traces composite tier-1 flows from entry point definitions through the call graph,
|
|
4
|
+
* mapping interactions to atomic subflow references.
|
|
5
|
+
*/
|
|
6
|
+
import type { InteractionWithPaths } from '../../../db/schema.js';
|
|
7
|
+
import type { EntryPointModuleInfo, FlowSuggestion, FlowTracingContext } from './types.js';
|
|
8
|
+
export declare class FlowTracer {
|
|
9
|
+
private readonly context;
|
|
10
|
+
private readonly maxDepth;
|
|
11
|
+
constructor(context: FlowTracingContext);
|
|
12
|
+
/**
|
|
13
|
+
* Trace composite tier-1 flows from entry point modules.
|
|
14
|
+
* Maps definition-derived interactions to atomic subflow references.
|
|
15
|
+
*/
|
|
16
|
+
traceFlowsFromEntryPoints(entryPointModules: EntryPointModuleInfo[], atomicFlows: FlowSuggestion[]): FlowSuggestion[];
|
|
17
|
+
/**
|
|
18
|
+
* Trace a flow from a starting definition through the definition-level call graph.
|
|
19
|
+
* At leaf nodes (no outgoing call graph edges), bridges via LLM-inferred interactions.
|
|
20
|
+
*/
|
|
21
|
+
private traceDefinitionFlow;
|
|
22
|
+
/**
|
|
23
|
+
* Derive unique interaction IDs from definition-level steps.
|
|
24
|
+
*/
|
|
25
|
+
private deriveInteractionIds;
|
|
26
|
+
/**
|
|
27
|
+
* Generate a flow name from an entry point module and member.
|
|
28
|
+
*/
|
|
29
|
+
private generateFlowNameFromModule;
|
|
30
|
+
private actionTypeToVerb;
|
|
31
|
+
/**
|
|
32
|
+
* Generate a slug from an entry point module and member.
|
|
33
|
+
*/
|
|
34
|
+
private generateFlowSlugFromModule;
|
|
35
|
+
/**
|
|
36
|
+
* Infer stakeholder from entry point module context.
|
|
37
|
+
*/
|
|
38
|
+
private inferStakeholderFromModule;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Build the flow tracing context from database data.
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildFlowTracingContext(definitionCallGraph: Map<number, number[]>, allModulesWithMembers: Array<{
|
|
44
|
+
id: number;
|
|
45
|
+
fullPath: string;
|
|
46
|
+
members: Array<{
|
|
47
|
+
definitionId: number;
|
|
48
|
+
}>;
|
|
49
|
+
}>, interactions: InteractionWithPaths[]): FlowTracingContext;
|
|
50
|
+
//# sourceMappingURL=flow-tracer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-tracer.d.ts","sourceRoot":"","sources":["../../../../src/commands/llm/flows/flow-tracer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAEV,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAGnB,MAAM,YAAY,CAAC;AAEpB,qBAAa,UAAU;IAGT,OAAO,CAAC,QAAQ,CAAC,OAAO;IAFpC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAM;gBAEF,OAAO,EAAE,kBAAkB;IAExD;;;OAGG;IACH,yBAAyB,CACvB,iBAAiB,EAAE,oBAAoB,EAAE,EACzC,WAAW,EAAE,cAAc,EAAE,GAC5B,cAAc,EAAE;IAqDnB;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA2F3B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkB5B;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA4BlC,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IASlC;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAYnC;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC1C,qBAAqB,EAAE,KAAK,CAAC;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1C,CAAC,EACF,YAAY,EAAE,oBAAoB,EAAE,GACnC,kBAAkB,CAgDpB"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FlowTracer - Definition-level call graph traversal.
|
|
3
|
+
* Traces composite tier-1 flows from entry point definitions through the call graph,
|
|
4
|
+
* mapping interactions to atomic subflow references.
|
|
5
|
+
*/
|
|
6
|
+
export class FlowTracer {
|
|
7
|
+
context;
|
|
8
|
+
maxDepth = 15;
|
|
9
|
+
constructor(context) {
|
|
10
|
+
this.context = context;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Trace composite tier-1 flows from entry point modules.
|
|
14
|
+
* Maps definition-derived interactions to atomic subflow references.
|
|
15
|
+
*/
|
|
16
|
+
traceFlowsFromEntryPoints(entryPointModules, atomicFlows) {
|
|
17
|
+
// Build interaction-to-atomic-flow lookup
|
|
18
|
+
const interactionToAtomic = new Map();
|
|
19
|
+
for (const atomic of atomicFlows) {
|
|
20
|
+
for (const iId of atomic.interactionIds) {
|
|
21
|
+
if (!interactionToAtomic.has(iId)) {
|
|
22
|
+
interactionToAtomic.set(iId, atomic);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const flowSuggestions = [];
|
|
27
|
+
for (const entryPointModule of entryPointModules) {
|
|
28
|
+
for (const member of entryPointModule.memberDefinitions) {
|
|
29
|
+
const { definitionSteps, inferredSteps } = this.traceDefinitionFlow(member.id);
|
|
30
|
+
const derivedInteractionIds = this.deriveInteractionIds(definitionSteps);
|
|
31
|
+
// Map interactions to subflow references
|
|
32
|
+
const subflowSlugs = [];
|
|
33
|
+
const seen = new Set();
|
|
34
|
+
for (const iId of derivedInteractionIds) {
|
|
35
|
+
const atomic = interactionToAtomic.get(iId);
|
|
36
|
+
if (atomic && !seen.has(atomic.slug)) {
|
|
37
|
+
seen.add(atomic.slug);
|
|
38
|
+
subflowSlugs.push(atomic.slug);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (definitionSteps.length > 0 || derivedInteractionIds.length > 0) {
|
|
42
|
+
flowSuggestions.push({
|
|
43
|
+
name: this.generateFlowNameFromModule(entryPointModule, member),
|
|
44
|
+
slug: this.generateFlowSlugFromModule(entryPointModule, member),
|
|
45
|
+
entryPointModuleId: entryPointModule.moduleId,
|
|
46
|
+
entryPointId: member.id,
|
|
47
|
+
entryPath: `${entryPointModule.modulePath}.${member.name}`,
|
|
48
|
+
stakeholder: this.inferStakeholderFromModule(entryPointModule),
|
|
49
|
+
description: `Flow starting from ${member.name} in ${entryPointModule.modulePath}`,
|
|
50
|
+
interactionIds: derivedInteractionIds,
|
|
51
|
+
definitionSteps,
|
|
52
|
+
inferredSteps,
|
|
53
|
+
actionType: member.actionType,
|
|
54
|
+
targetEntity: member.targetEntity,
|
|
55
|
+
tier: 1,
|
|
56
|
+
subflowSlugs,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return flowSuggestions;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Trace a flow from a starting definition through the definition-level call graph.
|
|
65
|
+
* At leaf nodes (no outgoing call graph edges), bridges via LLM-inferred interactions.
|
|
66
|
+
*/
|
|
67
|
+
traceDefinitionFlow(startDefinitionId) {
|
|
68
|
+
const visited = new Set();
|
|
69
|
+
const visitedBridgeModules = new Set();
|
|
70
|
+
const steps = [];
|
|
71
|
+
const inferredSteps = [];
|
|
72
|
+
const trace = (defId, depth, lastKnownModule, isBridged = false) => {
|
|
73
|
+
if (depth >= this.maxDepth)
|
|
74
|
+
return;
|
|
75
|
+
if (visited.has(defId))
|
|
76
|
+
return;
|
|
77
|
+
visited.add(defId);
|
|
78
|
+
// When a definition was reached via bridge (inferred interaction),
|
|
79
|
+
// don't follow its regular call-graph edges. The bridge connects the
|
|
80
|
+
// boundary crossing; the target's own call graph is traced by its own
|
|
81
|
+
// entry-point flows. Following it here would expand the entire target
|
|
82
|
+
// subsystem (e.g. an Express app.use() aggregator → all controllers).
|
|
83
|
+
if (isBridged)
|
|
84
|
+
return;
|
|
85
|
+
const calledDefs = this.context.definitionCallGraph.get(defId) ?? [];
|
|
86
|
+
for (const calledDefId of calledDefs) {
|
|
87
|
+
const fromModule = this.context.defToModule.get(defId) ?? lastKnownModule;
|
|
88
|
+
const toModule = this.context.defToModule.get(calledDefId);
|
|
89
|
+
// Only include cross-module calls
|
|
90
|
+
if (fromModule && toModule && fromModule.moduleId !== toModule.moduleId) {
|
|
91
|
+
steps.push({
|
|
92
|
+
fromDefinitionId: defId,
|
|
93
|
+
toDefinitionId: calledDefId,
|
|
94
|
+
fromModuleId: fromModule.moduleId,
|
|
95
|
+
toModuleId: toModule.moduleId,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
const nextKnownModule = this.context.defToModule.get(calledDefId) ?? fromModule;
|
|
99
|
+
trace(calledDefId, depth + 1, nextKnownModule);
|
|
100
|
+
}
|
|
101
|
+
// Bridge via inferred interactions at leaf nodes
|
|
102
|
+
if (calledDefs.length === 0) {
|
|
103
|
+
const leafModule = this.context.defToModule.get(defId) ?? lastKnownModule;
|
|
104
|
+
if (!leafModule)
|
|
105
|
+
return;
|
|
106
|
+
const leafModuleId = leafModule.moduleId;
|
|
107
|
+
if (visitedBridgeModules.has(leafModuleId))
|
|
108
|
+
return;
|
|
109
|
+
visitedBridgeModules.add(leafModuleId);
|
|
110
|
+
const inferred = this.context.inferredFromModule.get(leafModuleId);
|
|
111
|
+
if (!inferred)
|
|
112
|
+
return;
|
|
113
|
+
for (const interaction of inferred) {
|
|
114
|
+
const targetModuleId = interaction.toModuleId;
|
|
115
|
+
const targetDefs = this.context.moduleToDefIds.get(targetModuleId);
|
|
116
|
+
if (!targetDefs || targetDefs.length === 0)
|
|
117
|
+
continue;
|
|
118
|
+
// Pick representative: first unvisited, fallback first
|
|
119
|
+
const representative = targetDefs.find((d) => !visited.has(d)) ?? targetDefs[0];
|
|
120
|
+
steps.push({
|
|
121
|
+
fromDefinitionId: defId,
|
|
122
|
+
toDefinitionId: representative,
|
|
123
|
+
fromModuleId: leafModuleId,
|
|
124
|
+
toModuleId: targetModuleId,
|
|
125
|
+
});
|
|
126
|
+
inferredSteps.push({
|
|
127
|
+
fromModuleId: leafModuleId,
|
|
128
|
+
toModuleId: targetModuleId,
|
|
129
|
+
source: 'llm-inferred',
|
|
130
|
+
});
|
|
131
|
+
// Continue tracing from the bridge target — marked as bridged
|
|
132
|
+
// so we record the step but don't expand its call graph
|
|
133
|
+
const targetModule = this.context.defToModule.get(representative) ?? null;
|
|
134
|
+
trace(representative, depth + 1, targetModule, true);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
const startModule = this.context.defToModule.get(startDefinitionId) ?? null;
|
|
139
|
+
trace(startDefinitionId, 0, startModule);
|
|
140
|
+
return { definitionSteps: steps, inferredSteps };
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Derive unique interaction IDs from definition-level steps.
|
|
144
|
+
*/
|
|
145
|
+
deriveInteractionIds(definitionSteps) {
|
|
146
|
+
const seenIds = new Set();
|
|
147
|
+
const result = [];
|
|
148
|
+
for (const step of definitionSteps) {
|
|
149
|
+
if (step.fromModuleId && step.toModuleId) {
|
|
150
|
+
const key = `${step.fromModuleId}->${step.toModuleId}`;
|
|
151
|
+
const interactionId = this.context.interactionByModulePair.get(key);
|
|
152
|
+
if (interactionId && !seenIds.has(interactionId)) {
|
|
153
|
+
seenIds.add(interactionId);
|
|
154
|
+
result.push(interactionId);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return result;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Generate a flow name from an entry point module and member.
|
|
162
|
+
*/
|
|
163
|
+
generateFlowNameFromModule(_module, member) {
|
|
164
|
+
if (member.actionType && member.targetEntity) {
|
|
165
|
+
const actionVerb = this.actionTypeToVerb(member.actionType);
|
|
166
|
+
const entity = member.targetEntity.charAt(0).toUpperCase() + member.targetEntity.slice(1);
|
|
167
|
+
return `${actionVerb}${entity}Flow`;
|
|
168
|
+
}
|
|
169
|
+
let name = member.name;
|
|
170
|
+
name = name.replace(/^handle/, '');
|
|
171
|
+
name = name.replace(/Handler$/, '');
|
|
172
|
+
name = name.replace(/Controller$/, '');
|
|
173
|
+
name = name.replace(/^on/, '');
|
|
174
|
+
if (member.actionType) {
|
|
175
|
+
const actionVerb = this.actionTypeToVerb(member.actionType);
|
|
176
|
+
name = `${actionVerb}${name}`;
|
|
177
|
+
}
|
|
178
|
+
if (!name.endsWith('Flow')) {
|
|
179
|
+
name = `${name}Flow`;
|
|
180
|
+
}
|
|
181
|
+
return name;
|
|
182
|
+
}
|
|
183
|
+
actionTypeToVerb(actionType) {
|
|
184
|
+
switch (actionType) {
|
|
185
|
+
case 'view':
|
|
186
|
+
return 'View';
|
|
187
|
+
case 'create':
|
|
188
|
+
return 'Create';
|
|
189
|
+
case 'update':
|
|
190
|
+
return 'Update';
|
|
191
|
+
case 'delete':
|
|
192
|
+
return 'Delete';
|
|
193
|
+
case 'process':
|
|
194
|
+
return 'Process';
|
|
195
|
+
default:
|
|
196
|
+
return '';
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Generate a slug from an entry point module and member.
|
|
201
|
+
*/
|
|
202
|
+
generateFlowSlugFromModule(module, member) {
|
|
203
|
+
return this.generateFlowNameFromModule(module, member)
|
|
204
|
+
.replace(/([a-z])([A-Z])/g, '$1-$2')
|
|
205
|
+
.toLowerCase();
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Infer stakeholder from entry point module context.
|
|
209
|
+
*/
|
|
210
|
+
inferStakeholderFromModule(module) {
|
|
211
|
+
const path = module.modulePath.toLowerCase();
|
|
212
|
+
if (path.includes('admin'))
|
|
213
|
+
return 'admin';
|
|
214
|
+
if (path.includes('api') || path.includes('route'))
|
|
215
|
+
return 'external';
|
|
216
|
+
if (path.includes('cron') || path.includes('job') || path.includes('worker'))
|
|
217
|
+
return 'system';
|
|
218
|
+
if (path.includes('cli') || path.includes('command'))
|
|
219
|
+
return 'developer';
|
|
220
|
+
return 'user';
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Build the flow tracing context from database data.
|
|
225
|
+
*/
|
|
226
|
+
export function buildFlowTracingContext(definitionCallGraph, allModulesWithMembers, interactions) {
|
|
227
|
+
// Build definition-to-module lookup and reverse module-to-definitions lookup
|
|
228
|
+
const defToModule = new Map();
|
|
229
|
+
const moduleToDefIds = new Map();
|
|
230
|
+
for (const mod of allModulesWithMembers) {
|
|
231
|
+
const defIds = [];
|
|
232
|
+
for (const member of mod.members) {
|
|
233
|
+
defToModule.set(member.definitionId, { moduleId: mod.id, modulePath: mod.fullPath });
|
|
234
|
+
defIds.push(member.definitionId);
|
|
235
|
+
}
|
|
236
|
+
if (defIds.length > 0) {
|
|
237
|
+
moduleToDefIds.set(mod.id, defIds);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
// Build interaction lookup for module pairs
|
|
241
|
+
const interactionByModulePair = new Map();
|
|
242
|
+
for (const interaction of interactions) {
|
|
243
|
+
const key = `${interaction.fromModuleId}->${interaction.toModuleId}`;
|
|
244
|
+
interactionByModulePair.set(key, interaction.id);
|
|
245
|
+
}
|
|
246
|
+
// Build lookup for llm-inferred interactions by source module
|
|
247
|
+
const inferredFromModule = new Map();
|
|
248
|
+
for (const interaction of interactions) {
|
|
249
|
+
if (interaction.source === 'llm-inferred') {
|
|
250
|
+
const existing = inferredFromModule.get(interaction.fromModuleId) ?? [];
|
|
251
|
+
existing.push(interaction);
|
|
252
|
+
inferredFromModule.set(interaction.fromModuleId, existing);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
// Build lookup for ALL interactions by source module
|
|
256
|
+
const allInteractionsFromModule = new Map();
|
|
257
|
+
for (const interaction of interactions) {
|
|
258
|
+
const existing = allInteractionsFromModule.get(interaction.fromModuleId) ?? [];
|
|
259
|
+
existing.push(interaction);
|
|
260
|
+
allInteractionsFromModule.set(interaction.fromModuleId, existing);
|
|
261
|
+
}
|
|
262
|
+
return {
|
|
263
|
+
definitionCallGraph,
|
|
264
|
+
defToModule,
|
|
265
|
+
interactionByModulePair,
|
|
266
|
+
inferredFromModule,
|
|
267
|
+
allInteractionsFromModule,
|
|
268
|
+
moduleToDefIds,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
//# sourceMappingURL=flow-tracer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-tracer.js","sourceRoot":"","sources":["../../../../src/commands/llm/flows/flow-tracer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FlowValidator - Reviews generated flows for completeness and identifies missing user stories.
|
|
3
|
+
* Uses LLM to find gaps in flow coverage and creates corrective flows.
|
|
4
|
+
*/
|
|
5
|
+
import type { Command } from '@oclif/core';
|
|
6
|
+
import type { IndexDatabase } from '../../../db/database.js';
|
|
7
|
+
import type { InteractionWithPaths } from '../../../db/schema.js';
|
|
8
|
+
import type { EntryPointModuleInfo, FlowSuggestion, LlmOptions } from './types.js';
|
|
9
|
+
interface CoverageGateFailure {
|
|
10
|
+
gate: string;
|
|
11
|
+
actual: number;
|
|
12
|
+
threshold: number;
|
|
13
|
+
details: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class FlowValidator {
|
|
16
|
+
private readonly db;
|
|
17
|
+
private readonly command;
|
|
18
|
+
private readonly isJson;
|
|
19
|
+
private readonly verbose;
|
|
20
|
+
constructor(db: IndexDatabase, command: Command, isJson: boolean, verbose: boolean);
|
|
21
|
+
/**
|
|
22
|
+
* Validate existing flows for completeness and generate flows for missing user stories.
|
|
23
|
+
*/
|
|
24
|
+
validateAndFillGaps(existingFlows: FlowSuggestion[], interactions: InteractionWithPaths[], model: string, llmOptions: LlmOptions, gateFailures?: CoverageGateFailure[], entryPointModules?: EntryPointModuleInfo[], atomicFlows?: FlowSuggestion[]): Promise<FlowSuggestion[]>;
|
|
25
|
+
private buildValidationSystemPrompt;
|
|
26
|
+
private buildValidationUserPrompt;
|
|
27
|
+
private parseValidatorResponse;
|
|
28
|
+
private findModuleByPrefix;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
31
|
+
//# sourceMappingURL=flow-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-validator.d.ts","sourceRoot":"","sources":["../../../../src/commands/llm/flows/flow-validator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAU,MAAM,uBAAuB,CAAC;AAU1E,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEnF,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAHP,EAAE,EAAE,aAAa,EACjB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,OAAO;IAGnC;;OAEG;IACG,mBAAmB,CACvB,aAAa,EAAE,cAAc,EAAE,EAC/B,YAAY,EAAE,oBAAoB,EAAE,EACpC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,UAAU,EACtB,YAAY,CAAC,EAAE,mBAAmB,EAAE,EACpC,iBAAiB,CAAC,EAAE,oBAAoB,EAAE,EAC1C,WAAW,CAAC,EAAE,cAAc,EAAE,GAC7B,OAAO,CAAC,cAAc,EAAE,CAAC;IAuC5B,OAAO,CAAC,2BAA2B;IA2CnC,OAAO,CAAC,yBAAyB;IAgHjC,OAAO,CAAC,sBAAsB;IAkG9B,OAAO,CAAC,kBAAkB;CAS3B"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FlowValidator - Reviews generated flows for completeness and identifies missing user stories.
|
|
3
|
+
* Uses LLM to find gaps in flow coverage and creates corrective flows.
|
|
4
|
+
*/
|
|
5
|
+
import { parseRow } from '../_shared/csv-utils.js';
|
|
6
|
+
import { groupModulesByEntity } from '../_shared/entity-utils.js';
|
|
7
|
+
import { completeWithLogging, logLlmRequest, logLlmResponse, logVerbose, } from '../_shared/llm-utils.js';
|
|
8
|
+
export class FlowValidator {
|
|
9
|
+
db;
|
|
10
|
+
command;
|
|
11
|
+
isJson;
|
|
12
|
+
verbose;
|
|
13
|
+
constructor(db, command, isJson, verbose) {
|
|
14
|
+
this.db = db;
|
|
15
|
+
this.command = command;
|
|
16
|
+
this.isJson = isJson;
|
|
17
|
+
this.verbose = verbose;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Validate existing flows for completeness and generate flows for missing user stories.
|
|
21
|
+
*/
|
|
22
|
+
async validateAndFillGaps(existingFlows, interactions, model, llmOptions, gateFailures, entryPointModules, atomicFlows) {
|
|
23
|
+
const modules = this.db.modules.getAll();
|
|
24
|
+
const moduleByPath = new Map(modules.map((m) => [m.fullPath, m]));
|
|
25
|
+
const coveredInteractionIds = new Set(existingFlows.flatMap((f) => f.interactionIds));
|
|
26
|
+
const systemPrompt = this.buildValidationSystemPrompt();
|
|
27
|
+
const userPrompt = this.buildValidationUserPrompt(existingFlows, interactions, modules, coveredInteractionIds, gateFailures, entryPointModules, atomicFlows);
|
|
28
|
+
const logOptions = {
|
|
29
|
+
showRequests: llmOptions.showLlmRequests,
|
|
30
|
+
showResponses: llmOptions.showLlmResponses,
|
|
31
|
+
isJson: this.isJson,
|
|
32
|
+
};
|
|
33
|
+
logLlmRequest(this.command, 'validateAndFillGaps', systemPrompt, userPrompt, logOptions);
|
|
34
|
+
const response = await completeWithLogging({
|
|
35
|
+
model,
|
|
36
|
+
systemPrompt,
|
|
37
|
+
userPrompt,
|
|
38
|
+
temperature: 0,
|
|
39
|
+
command: this.command,
|
|
40
|
+
isJson: this.isJson,
|
|
41
|
+
});
|
|
42
|
+
logLlmResponse(this.command, 'validateAndFillGaps', response, logOptions);
|
|
43
|
+
return this.parseValidatorResponse(response, interactions, moduleByPath);
|
|
44
|
+
}
|
|
45
|
+
buildValidationSystemPrompt() {
|
|
46
|
+
return `You are reviewing auto-detected user journey flows for completeness.
|
|
47
|
+
|
|
48
|
+
## What You Have
|
|
49
|
+
1. A list of detected flows with their entry points and steps
|
|
50
|
+
2. The full module interaction graph
|
|
51
|
+
3. Module descriptions
|
|
52
|
+
4. Entry point definitions showing what operations actually exist in code
|
|
53
|
+
|
|
54
|
+
## Your Task
|
|
55
|
+
Identify MISSING user stories — important user-facing workflows that should exist
|
|
56
|
+
but don't appear in the detected flows.
|
|
57
|
+
|
|
58
|
+
What to look for:
|
|
59
|
+
- UNCOVERED interactions in the graph that should be part of a user story
|
|
60
|
+
- Cross-entity side effects visible in the interaction graph (e.g., a sale flow also touching vehicle/inventory modules)
|
|
61
|
+
- Compositions of existing atomic flows into higher-level user stories
|
|
62
|
+
|
|
63
|
+
What NOT to do:
|
|
64
|
+
- Do NOT infer operations that are not visible in the interaction graph
|
|
65
|
+
- Do NOT propose admin CRUD flows unless admin-specific entry points are listed above
|
|
66
|
+
- Do NOT create flows from type/interface-only modules
|
|
67
|
+
- Do NOT duplicate flows that already exist — check the existing flows list carefully
|
|
68
|
+
|
|
69
|
+
## CRITICAL CONSTRAINTS
|
|
70
|
+
- [AST] interactions are statically verified from source code — reliable
|
|
71
|
+
- [INFERRED] interactions are LLM-estimated — may not exist in actual code
|
|
72
|
+
- The "Entry Point Definitions" section shows what operations ACTUALLY exist
|
|
73
|
+
- Do NOT propose flows for operations not listed in Entry Point Definitions
|
|
74
|
+
- Prefer building flows from [AST] interactions when possible
|
|
75
|
+
|
|
76
|
+
## Output Format
|
|
77
|
+
\`\`\`csv
|
|
78
|
+
flow_name,stakeholder,action_type,target_entity,interaction_chain,description
|
|
79
|
+
"user views dashboard","user","view","dashboard","project.frontend.screens→project.frontend.hooks→project.backend.api","Fetches stats for KPI display"
|
|
80
|
+
"admin registers new user","admin","process","user","project.frontend.screens→project.backend.api.controllers","Admin creates new user account"
|
|
81
|
+
\`\`\`
|
|
82
|
+
|
|
83
|
+
For interaction_chain: list the module path segments in order, separated by →.
|
|
84
|
+
Only report flows that are genuinely MISSING — do not duplicate existing flows.
|
|
85
|
+
Only report flows where the module interactions to support them actually EXIST in the graph.`;
|
|
86
|
+
}
|
|
87
|
+
buildValidationUserPrompt(existingFlows, interactions, modules, coveredInteractionIds, gateFailures, entryPointModules, atomicFlows) {
|
|
88
|
+
const parts = [];
|
|
89
|
+
// Existing flows summary
|
|
90
|
+
parts.push(`## Existing Flows (${existingFlows.length})`);
|
|
91
|
+
for (const f of existingFlows) {
|
|
92
|
+
const stepCount = f.interactionIds.length;
|
|
93
|
+
const isGap = f.entryPointModuleId === null;
|
|
94
|
+
parts.push(`- ${f.name} [${f.stakeholder}/${f.actionType ?? 'unknown'}/${f.targetEntity ?? 'unknown'}] (${stepCount} steps${isGap ? ', gap/internal' : ''})`);
|
|
95
|
+
}
|
|
96
|
+
parts.push('');
|
|
97
|
+
// Modules grouped by domain
|
|
98
|
+
parts.push('## Modules by Domain');
|
|
99
|
+
const entityGroups = groupModulesByEntity(modules);
|
|
100
|
+
for (const [entity, mods] of entityGroups) {
|
|
101
|
+
if (entity === '_generic') {
|
|
102
|
+
parts.push('### Generic/Shared');
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
parts.push(`### ${entity}`);
|
|
106
|
+
}
|
|
107
|
+
for (const m of mods) {
|
|
108
|
+
parts.push(`- ${m.fullPath}: ${m.name}${m.description ? ` - ${m.description}` : ''}`);
|
|
109
|
+
}
|
|
110
|
+
parts.push('');
|
|
111
|
+
}
|
|
112
|
+
// Entry point definitions section
|
|
113
|
+
if (entryPointModules && entryPointModules.length > 0) {
|
|
114
|
+
parts.push('## Entry Point Definitions (operations that exist in code)');
|
|
115
|
+
parts.push('ONLY create flows for operations listed below. Do NOT invent operations.');
|
|
116
|
+
parts.push('');
|
|
117
|
+
for (const ep of entryPointModules) {
|
|
118
|
+
const defs = ep.memberDefinitions
|
|
119
|
+
.map((d) => {
|
|
120
|
+
const action = d.actionType ?? 'unclassified';
|
|
121
|
+
const entity = d.targetEntity ?? '?';
|
|
122
|
+
return ` - ${d.name} [${action}/${entity}]`;
|
|
123
|
+
})
|
|
124
|
+
.join('\n');
|
|
125
|
+
parts.push(`### ${ep.modulePath}`);
|
|
126
|
+
parts.push(defs);
|
|
127
|
+
parts.push('');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Available atomic flows
|
|
131
|
+
if (atomicFlows && atomicFlows.length > 0) {
|
|
132
|
+
parts.push('## Available Atomic Flows');
|
|
133
|
+
parts.push('You can compose flows by referencing these atomic building blocks:');
|
|
134
|
+
for (const af of atomicFlows) {
|
|
135
|
+
const interactionCount = af.interactionIds.length;
|
|
136
|
+
parts.push(`- ${af.slug} (${interactionCount} interaction${interactionCount !== 1 ? 's' : ''}): ${af.description}`);
|
|
137
|
+
}
|
|
138
|
+
parts.push('');
|
|
139
|
+
}
|
|
140
|
+
// Interaction graph summary with coverage annotations
|
|
141
|
+
const uncoveredInteractions = interactions.filter((i) => !coveredInteractionIds.has(i.id));
|
|
142
|
+
const coveredCount = interactions.length - uncoveredInteractions.length;
|
|
143
|
+
parts.push(`## Interactions (${interactions.length} total, ${coveredCount} covered, ${uncoveredInteractions.length} uncovered)`);
|
|
144
|
+
for (const i of interactions) {
|
|
145
|
+
const coverTag = coveredInteractionIds.has(i.id) ? '[COVERED]' : '[UNCOVERED]';
|
|
146
|
+
const srcTag = i.source === 'llm-inferred' ? '[INFERRED]' : '[AST]';
|
|
147
|
+
parts.push(`- ${coverTag} ${srcTag} ${i.fromModulePath} → ${i.toModulePath}${i.semantic ? `: ${i.semantic}` : ''}`);
|
|
148
|
+
}
|
|
149
|
+
parts.push('');
|
|
150
|
+
// Priority section: uncovered interactions only
|
|
151
|
+
if (uncoveredInteractions.length > 0) {
|
|
152
|
+
parts.push('## Uncovered Interactions — PRIORITY');
|
|
153
|
+
parts.push('These interactions are NOT yet covered by any flow. Create flows that include them:');
|
|
154
|
+
for (const i of uncoveredInteractions) {
|
|
155
|
+
const srcTag = i.source === 'llm-inferred' ? '[INFERRED]' : '[AST]';
|
|
156
|
+
parts.push(`- ${srcTag} ${i.fromModulePath} → ${i.toModulePath}${i.semantic ? `: ${i.semantic}` : ''}`);
|
|
157
|
+
}
|
|
158
|
+
parts.push('');
|
|
159
|
+
}
|
|
160
|
+
// Gate failure context for retries
|
|
161
|
+
if (gateFailures && gateFailures.length > 0) {
|
|
162
|
+
parts.push('## Previous Attempt Results');
|
|
163
|
+
parts.push('The following coverage gaps remain:');
|
|
164
|
+
for (const f of gateFailures) {
|
|
165
|
+
parts.push(`- ${f.gate}: ${f.details}`);
|
|
166
|
+
}
|
|
167
|
+
parts.push('');
|
|
168
|
+
parts.push('Focus on creating flows that address these specific gaps.');
|
|
169
|
+
parts.push('');
|
|
170
|
+
}
|
|
171
|
+
parts.push('Identify MISSING user stories. Only report flows supported by existing interactions.');
|
|
172
|
+
return parts.join('\n');
|
|
173
|
+
}
|
|
174
|
+
parseValidatorResponse(response, interactions, moduleByPath) {
|
|
175
|
+
const results = [];
|
|
176
|
+
const csvMatch = response.match(/```csv\n([\s\S]*?)\n```/) || response.match(/```\n([\s\S]*?)\n```/);
|
|
177
|
+
const csvContent = csvMatch ? csvMatch[1] : response;
|
|
178
|
+
const lines = csvContent.split('\n').filter((l) => l.trim() && !l.startsWith('flow_name'));
|
|
179
|
+
// Build interaction lookup by module pair
|
|
180
|
+
const interactionByPair = new Map();
|
|
181
|
+
for (const i of interactions) {
|
|
182
|
+
interactionByPair.set(`${i.fromModuleId}->${i.toModuleId}`, i);
|
|
183
|
+
}
|
|
184
|
+
for (const line of lines) {
|
|
185
|
+
const fields = parseRow(line);
|
|
186
|
+
if (!fields || fields.length < 6)
|
|
187
|
+
continue;
|
|
188
|
+
const [flowName, stakeholder, actionType, targetEntity, interactionChain, description] = fields;
|
|
189
|
+
// Parse interaction chain (module paths separated by →)
|
|
190
|
+
const chainPaths = interactionChain
|
|
191
|
+
.split('→')
|
|
192
|
+
.map((p) => p.trim())
|
|
193
|
+
.filter((p) => p.length > 0);
|
|
194
|
+
if (chainPaths.length < 2)
|
|
195
|
+
continue;
|
|
196
|
+
// Resolve module paths and find matching interactions
|
|
197
|
+
const resolvedModules = [];
|
|
198
|
+
for (const path of chainPaths) {
|
|
199
|
+
// Try exact match first, then prefix match
|
|
200
|
+
const mod = moduleByPath.get(path) ?? this.findModuleByPrefix(path, moduleByPath);
|
|
201
|
+
if (mod) {
|
|
202
|
+
resolvedModules.push(mod);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (resolvedModules.length < 2)
|
|
206
|
+
continue;
|
|
207
|
+
// Find interaction IDs for consecutive module pairs
|
|
208
|
+
const interactionIds = [];
|
|
209
|
+
for (let i = 0; i < resolvedModules.length - 1; i++) {
|
|
210
|
+
const from = resolvedModules[i];
|
|
211
|
+
const to = resolvedModules[i + 1];
|
|
212
|
+
const interaction = interactionByPair.get(`${from.id}->${to.id}`);
|
|
213
|
+
if (interaction) {
|
|
214
|
+
interactionIds.push(interaction.id);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (interactionIds.length === 0)
|
|
218
|
+
continue;
|
|
219
|
+
const validStakeholders = ['user', 'admin', 'system', 'developer', 'external'];
|
|
220
|
+
const parsedStakeholder = validStakeholders.includes(stakeholder.trim().toLowerCase())
|
|
221
|
+
? stakeholder.trim().toLowerCase()
|
|
222
|
+
: 'user';
|
|
223
|
+
const validActions = ['view', 'create', 'update', 'delete', 'process'];
|
|
224
|
+
const parsedAction = validActions.includes(actionType.trim().toLowerCase())
|
|
225
|
+
? actionType.trim().toLowerCase()
|
|
226
|
+
: null;
|
|
227
|
+
const cleanName = flowName.replace(/"/g, '').trim();
|
|
228
|
+
const slug = cleanName
|
|
229
|
+
.toLowerCase()
|
|
230
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
231
|
+
.replace(/^-|-$/g, '');
|
|
232
|
+
results.push({
|
|
233
|
+
name: cleanName,
|
|
234
|
+
slug,
|
|
235
|
+
entryPointModuleId: resolvedModules[0].id,
|
|
236
|
+
entryPointId: null,
|
|
237
|
+
entryPath: resolvedModules[0].fullPath,
|
|
238
|
+
stakeholder: parsedStakeholder,
|
|
239
|
+
description: description.replace(/"/g, '').trim(),
|
|
240
|
+
interactionIds,
|
|
241
|
+
definitionSteps: [],
|
|
242
|
+
inferredSteps: [],
|
|
243
|
+
actionType: parsedAction,
|
|
244
|
+
targetEntity: targetEntity.replace(/"/g, '').trim() || null,
|
|
245
|
+
tier: 1,
|
|
246
|
+
subflowSlugs: [],
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
logVerbose(this.command, ` Validator identified ${results.length} missing flows`, this.verbose, this.isJson);
|
|
250
|
+
return results;
|
|
251
|
+
}
|
|
252
|
+
findModuleByPrefix(path, moduleByPath) {
|
|
253
|
+
// Try to find a module whose path ends with the given path segment
|
|
254
|
+
for (const [fullPath, mod] of moduleByPath) {
|
|
255
|
+
if (fullPath.endsWith(path) || fullPath.endsWith(`.${path}`)) {
|
|
256
|
+
return mod;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return undefined;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
//# sourceMappingURL=flow-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-validator.js","sourceRoot":"","sources":["../../../../src/commands/llm/flows/flow-validator.ts"],"names":[],"mappings":"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"}
|