@lyse-labs/lyse 0.1.0-alpha.2
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 +45 -0
- package/PRIVACY.md +181 -0
- package/README.md +34 -0
- package/SECURITY.md +43 -0
- package/dist/bench/evidence-pack/anti-dummy.d.ts +11 -0
- package/dist/bench/evidence-pack/anti-dummy.js +20 -0
- package/dist/bench/evidence-pack/anti-dummy.js.map +1 -0
- package/dist/bench/evidence-pack/builder.d.ts +14 -0
- package/dist/bench/evidence-pack/builder.js +77 -0
- package/dist/bench/evidence-pack/builder.js.map +1 -0
- package/dist/bench/evidence-pack/histograms.d.ts +2 -0
- package/dist/bench/evidence-pack/histograms.js +131 -0
- package/dist/bench/evidence-pack/histograms.js.map +1 -0
- package/dist/bench/evidence-pack/manifest-detector.d.ts +2 -0
- package/dist/bench/evidence-pack/manifest-detector.js +65 -0
- package/dist/bench/evidence-pack/manifest-detector.js.map +1 -0
- package/dist/bench/evidence-pack/package-json-digest.d.ts +2 -0
- package/dist/bench/evidence-pack/package-json-digest.js +51 -0
- package/dist/bench/evidence-pack/package-json-digest.js.map +1 -0
- package/dist/bench/evidence-pack/sampler.d.ts +2 -0
- package/dist/bench/evidence-pack/sampler.js +140 -0
- package/dist/bench/evidence-pack/sampler.js.map +1 -0
- package/dist/bench/evidence-pack/types.d.ts +127 -0
- package/dist/bench/evidence-pack/types.js +2 -0
- package/dist/bench/evidence-pack/types.js.map +1 -0
- package/dist/bench/evidence-pack/verifier-corpus.d.ts +5 -0
- package/dist/bench/evidence-pack/verifier-corpus.js +13 -0
- package/dist/bench/evidence-pack/verifier-corpus.js.map +1 -0
- package/dist/bench/taxonomy-loader.d.ts +20 -0
- package/dist/bench/taxonomy-loader.js +28 -0
- package/dist/bench/taxonomy-loader.js.map +1 -0
- package/dist/bench/taxonomy.v3.json +20 -0
- package/dist/cli/__tests__/version-migration.test.d.ts +1 -0
- package/dist/cli/__tests__/version-migration.test.js +69 -0
- package/dist/cli/__tests__/version-migration.test.js.map +1 -0
- package/dist/cli/output/__tests__/eslint-style.test.d.ts +1 -0
- package/dist/cli/output/__tests__/eslint-style.test.js +205 -0
- package/dist/cli/output/__tests__/eslint-style.test.js.map +1 -0
- package/dist/cli/output/__tests__/limit.test.d.ts +1 -0
- package/dist/cli/output/__tests__/limit.test.js +65 -0
- package/dist/cli/output/__tests__/limit.test.js.map +1 -0
- package/dist/cli/output/eslint-style.d.ts +18 -0
- package/dist/cli/output/eslint-style.js +42 -0
- package/dist/cli/output/eslint-style.js.map +1 -0
- package/dist/cli/output/limit.d.ts +5 -0
- package/dist/cli/output/limit.js +32 -0
- package/dist/cli/output/limit.js.map +1 -0
- package/dist/cli/output/score-gauge.d.ts +4 -0
- package/dist/cli/output/score-gauge.js +15 -0
- package/dist/cli/output/score-gauge.js.map +1 -0
- package/dist/cli/version-migration.d.ts +18 -0
- package/dist/cli/version-migration.js +49 -0
- package/dist/cli/version-migration.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +856 -0
- package/dist/cli.js.map +1 -0
- package/dist/codemods/diff.d.ts +17 -0
- package/dist/codemods/diff.js +77 -0
- package/dist/codemods/diff.js.map +1 -0
- package/dist/codemods/git-helpers.d.ts +10 -0
- package/dist/codemods/git-helpers.js +75 -0
- package/dist/codemods/git-helpers.js.map +1 -0
- package/dist/codemods/index.d.ts +27 -0
- package/dist/codemods/index.js +40 -0
- package/dist/codemods/index.js.map +1 -0
- package/dist/codemods/naming-component-pascalcase.d.ts +13 -0
- package/dist/codemods/naming-component-pascalcase.js +106 -0
- package/dist/codemods/naming-component-pascalcase.js.map +1 -0
- package/dist/codemods/naming-hook-prefix.d.ts +13 -0
- package/dist/codemods/naming-hook-prefix.js +86 -0
- package/dist/codemods/naming-hook-prefix.js.map +1 -0
- package/dist/codemods/safety.d.ts +50 -0
- package/dist/codemods/safety.js +109 -0
- package/dist/codemods/safety.js.map +1 -0
- package/dist/codemods/safety.test.d.ts +1 -0
- package/dist/codemods/safety.test.js +154 -0
- package/dist/codemods/safety.test.js.map +1 -0
- package/dist/codemods/shadow-native.d.ts +2 -0
- package/dist/codemods/shadow-native.js +103 -0
- package/dist/codemods/shadow-native.js.map +1 -0
- package/dist/codemods/tokens-color.d.ts +2 -0
- package/dist/codemods/tokens-color.js +69 -0
- package/dist/codemods/tokens-color.js.map +1 -0
- package/dist/codemods/tokens-spacing.d.ts +2 -0
- package/dist/codemods/tokens-spacing.js +66 -0
- package/dist/codemods/tokens-spacing.js.map +1 -0
- package/dist/commands/__tests__/email-prompt.test.d.ts +1 -0
- package/dist/commands/__tests__/email-prompt.test.js +126 -0
- package/dist/commands/__tests__/email-prompt.test.js.map +1 -0
- package/dist/commands/__tests__/explain-score.test.d.ts +1 -0
- package/dist/commands/__tests__/explain-score.test.js +88 -0
- package/dist/commands/__tests__/explain-score.test.js.map +1 -0
- package/dist/commands/__tests__/feedback.test.d.ts +1 -0
- package/dist/commands/__tests__/feedback.test.js +186 -0
- package/dist/commands/__tests__/feedback.test.js.map +1 -0
- package/dist/commands/audit-flags.d.ts +49 -0
- package/dist/commands/audit-flags.js +17 -0
- package/dist/commands/audit-flags.js.map +1 -0
- package/dist/commands/audit-pipeline.d.ts +31 -0
- package/dist/commands/audit-pipeline.js +342 -0
- package/dist/commands/audit-pipeline.js.map +1 -0
- package/dist/commands/bench-pack.d.ts +5 -0
- package/dist/commands/bench-pack.js +61 -0
- package/dist/commands/bench-pack.js.map +1 -0
- package/dist/commands/ci-setup.d.ts +9 -0
- package/dist/commands/ci-setup.js +42 -0
- package/dist/commands/ci-setup.js.map +1 -0
- package/dist/commands/email-prompt.d.ts +36 -0
- package/dist/commands/email-prompt.js +160 -0
- package/dist/commands/email-prompt.js.map +1 -0
- package/dist/commands/explain-score.d.ts +35 -0
- package/dist/commands/explain-score.js +137 -0
- package/dist/commands/explain-score.js.map +1 -0
- package/dist/commands/explain.d.ts +6 -0
- package/dist/commands/explain.js +93 -0
- package/dist/commands/explain.js.map +1 -0
- package/dist/commands/feedback.d.ts +31 -0
- package/dist/commands/feedback.js +155 -0
- package/dist/commands/feedback.js.map +1 -0
- package/dist/commands/fix.d.ts +48 -0
- package/dist/commands/fix.js +191 -0
- package/dist/commands/fix.js.map +1 -0
- package/dist/commands/init-detect.d.ts +20 -0
- package/dist/commands/init-detect.js +124 -0
- package/dist/commands/init-detect.js.map +1 -0
- package/dist/commands/init-write-agents-md.d.ts +14 -0
- package/dist/commands/init-write-agents-md.js +71 -0
- package/dist/commands/init-write-agents-md.js.map +1 -0
- package/dist/commands/init-write-lyse-md.d.ts +14 -0
- package/dist/commands/init-write-lyse-md.js +253 -0
- package/dist/commands/init-write-lyse-md.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.js +147 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/mcp-entry.d.ts +33 -0
- package/dist/commands/mcp-entry.js +47 -0
- package/dist/commands/mcp-entry.js.map +1 -0
- package/dist/commands/mcp-setup.d.ts +10 -0
- package/dist/commands/mcp-setup.js +74 -0
- package/dist/commands/mcp-setup.js.map +1 -0
- package/dist/commands/share.d.ts +4 -0
- package/dist/commands/share.js +60 -0
- package/dist/commands/share.js.map +1 -0
- package/dist/commands/telemetry.d.ts +4 -0
- package/dist/commands/telemetry.js +27 -0
- package/dist/commands/telemetry.js.map +1 -0
- package/dist/commands/templates/lyse-workflow.yml.template +30 -0
- package/dist/config/schema.d.ts +158 -0
- package/dist/config/schema.js +136 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/credentials/keychain.d.ts +20 -0
- package/dist/credentials/keychain.js +35 -0
- package/dist/credentials/keychain.js.map +1 -0
- package/dist/credentials/keychain.test.d.ts +1 -0
- package/dist/credentials/keychain.test.js +32 -0
- package/dist/credentials/keychain.test.js.map +1 -0
- package/dist/credentials/paths.d.ts +1 -0
- package/dist/credentials/paths.js +6 -0
- package/dist/credentials/paths.js.map +1 -0
- package/dist/credentials/store.d.ts +17 -0
- package/dist/credentials/store.js +60 -0
- package/dist/credentials/store.js.map +1 -0
- package/dist/credentials/store.test.d.ts +1 -0
- package/dist/credentials/store.test.js +48 -0
- package/dist/credentials/store.test.js.map +1 -0
- package/dist/detection/from-filesystem.d.ts +2 -0
- package/dist/detection/from-filesystem.js +26 -0
- package/dist/detection/from-filesystem.js.map +1 -0
- package/dist/detection/from-git.d.ts +2 -0
- package/dist/detection/from-git.js +53 -0
- package/dist/detection/from-git.js.map +1 -0
- package/dist/detection/from-package-json.d.ts +2 -0
- package/dist/detection/from-package-json.js +194 -0
- package/dist/detection/from-package-json.js.map +1 -0
- package/dist/detection/pre-flight.d.ts +5 -0
- package/dist/detection/pre-flight.js +47 -0
- package/dist/detection/pre-flight.js.map +1 -0
- package/dist/detection/types.d.ts +27 -0
- package/dist/detection/types.js +2 -0
- package/dist/detection/types.js.map +1 -0
- package/dist/entitlement/check.d.ts +7 -0
- package/dist/entitlement/check.js +37 -0
- package/dist/entitlement/check.js.map +1 -0
- package/dist/entitlement/index.d.ts +1 -0
- package/dist/entitlement/index.js +2 -0
- package/dist/entitlement/index.js.map +1 -0
- package/dist/entitlement/keys.d.ts +10 -0
- package/dist/entitlement/keys.js +14 -0
- package/dist/entitlement/keys.js.map +1 -0
- package/dist/history/ndjson-store.d.ts +70 -0
- package/dist/history/ndjson-store.js +102 -0
- package/dist/history/ndjson-store.js.map +1 -0
- package/dist/identity/index.d.ts +1 -0
- package/dist/identity/index.js +2 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/identity/repo-bucket.d.ts +22 -0
- package/dist/identity/repo-bucket.js +78 -0
- package/dist/identity/repo-bucket.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/llm/layer4-stage.d.ts +18 -0
- package/dist/llm/layer4-stage.js +12 -0
- package/dist/llm/layer4-stage.js.map +1 -0
- package/dist/loaders/components.d.ts +26 -0
- package/dist/loaders/components.js +285 -0
- package/dist/loaders/components.js.map +1 -0
- package/dist/loaders/stories.d.ts +2 -0
- package/dist/loaders/stories.js +231 -0
- package/dist/loaders/stories.js.map +1 -0
- package/dist/loaders/token-graph.d.ts +39 -0
- package/dist/loaders/token-graph.js +146 -0
- package/dist/loaders/token-graph.js.map +1 -0
- package/dist/loaders/tokens.d.ts +2 -0
- package/dist/loaders/tokens.js +521 -0
- package/dist/loaders/tokens.js.map +1 -0
- package/dist/mcp/_find-root.d.ts +12 -0
- package/dist/mcp/_find-root.js +28 -0
- package/dist/mcp/_find-root.js.map +1 -0
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.js +42 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/audit-file.d.ts +25 -0
- package/dist/mcp/tools/audit-file.js +147 -0
- package/dist/mcp/tools/audit-file.js.map +1 -0
- package/dist/mcp/tools/suggest-fix.d.ts +13 -0
- package/dist/mcp/tools/suggest-fix.js +100 -0
- package/dist/mcp/tools/suggest-fix.js.map +1 -0
- package/dist/menu/action-menu.d.ts +6 -0
- package/dist/menu/action-menu.js +15 -0
- package/dist/menu/action-menu.js.map +1 -0
- package/dist/menu/prompts.d.ts +7 -0
- package/dist/menu/prompts.js +30 -0
- package/dist/menu/prompts.js.map +1 -0
- package/dist/menu/repl.d.ts +17 -0
- package/dist/menu/repl.js +77 -0
- package/dist/menu/repl.js.map +1 -0
- package/dist/parsers/css-in-js.d.ts +2 -0
- package/dist/parsers/css-in-js.js +69 -0
- package/dist/parsers/css-in-js.js.map +1 -0
- package/dist/parsers/css.d.ts +2 -0
- package/dist/parsers/css.js +32 -0
- package/dist/parsers/css.js.map +1 -0
- package/dist/parsers/scss-transform.d.ts +25 -0
- package/dist/parsers/scss-transform.js +55 -0
- package/dist/parsers/scss-transform.js.map +1 -0
- package/dist/parsers/tailwind-v4.d.ts +8 -0
- package/dist/parsers/tailwind-v4.js +90 -0
- package/dist/parsers/tailwind-v4.js.map +1 -0
- package/dist/parsers/ts-morph-project.d.ts +16 -0
- package/dist/parsers/ts-morph-project.js +77 -0
- package/dist/parsers/ts-morph-project.js.map +1 -0
- package/dist/parsers/ts.d.ts +2 -0
- package/dist/parsers/ts.js +61 -0
- package/dist/parsers/ts.js.map +1 -0
- package/dist/reliability/__tests__/types.test.d.ts +1 -0
- package/dist/reliability/__tests__/types.test.js +14 -0
- package/dist/reliability/__tests__/types.test.js.map +1 -0
- package/dist/reliability/catalogue/__tests__/promotion.test.d.ts +1 -0
- package/dist/reliability/catalogue/__tests__/promotion.test.js +23 -0
- package/dist/reliability/catalogue/__tests__/promotion.test.js.map +1 -0
- package/dist/reliability/catalogue/__tests__/sub-axes.test.d.ts +1 -0
- package/dist/reliability/catalogue/__tests__/sub-axes.test.js +27 -0
- package/dist/reliability/catalogue/__tests__/sub-axes.test.js.map +1 -0
- package/dist/reliability/catalogue/promotion.d.ts +8 -0
- package/dist/reliability/catalogue/promotion.js +25 -0
- package/dist/reliability/catalogue/promotion.js.map +1 -0
- package/dist/reliability/catalogue/sub-axes.d.ts +3 -0
- package/dist/reliability/catalogue/sub-axes.js +18 -0
- package/dist/reliability/catalogue/sub-axes.js.map +1 -0
- package/dist/reliability/confidence/__tests__/manifest-loader.test.d.ts +1 -0
- package/dist/reliability/confidence/__tests__/manifest-loader.test.js +103 -0
- package/dist/reliability/confidence/__tests__/manifest-loader.test.js.map +1 -0
- package/dist/reliability/confidence/bundled-manifest.d.ts +2 -0
- package/dist/reliability/confidence/bundled-manifest.js +8 -0
- package/dist/reliability/confidence/bundled-manifest.js.map +1 -0
- package/dist/reliability/confidence/index.d.ts +3 -0
- package/dist/reliability/confidence/index.js +3 -0
- package/dist/reliability/confidence/index.js.map +1 -0
- package/dist/reliability/confidence/manifest-loader.d.ts +8 -0
- package/dist/reliability/confidence/manifest-loader.js +53 -0
- package/dist/reliability/confidence/manifest-loader.js.map +1 -0
- package/dist/reliability/feedback/__tests__/interactive.test.d.ts +1 -0
- package/dist/reliability/feedback/__tests__/interactive.test.js +85 -0
- package/dist/reliability/feedback/__tests__/interactive.test.js.map +1 -0
- package/dist/reliability/feedback/__tests__/repo-bucket.test.d.ts +1 -0
- package/dist/reliability/feedback/__tests__/repo-bucket.test.js +18 -0
- package/dist/reliability/feedback/__tests__/repo-bucket.test.js.map +1 -0
- package/dist/reliability/feedback/__tests__/sender.test.d.ts +1 -0
- package/dist/reliability/feedback/__tests__/sender.test.js +101 -0
- package/dist/reliability/feedback/__tests__/sender.test.js.map +1 -0
- package/dist/reliability/feedback/interactive.d.ts +20 -0
- package/dist/reliability/feedback/interactive.js +150 -0
- package/dist/reliability/feedback/interactive.js.map +1 -0
- package/dist/reliability/feedback/repo-bucket.d.ts +2 -0
- package/dist/reliability/feedback/repo-bucket.js +9 -0
- package/dist/reliability/feedback/repo-bucket.js.map +1 -0
- package/dist/reliability/feedback/sender.d.ts +16 -0
- package/dist/reliability/feedback/sender.js +28 -0
- package/dist/reliability/feedback/sender.js.map +1 -0
- package/dist/reliability/index.d.ts +1 -0
- package/dist/reliability/index.js +2 -0
- package/dist/reliability/index.js.map +1 -0
- package/dist/reliability/llm-eval/__tests__/budget.test.d.ts +1 -0
- package/dist/reliability/llm-eval/__tests__/budget.test.js +39 -0
- package/dist/reliability/llm-eval/__tests__/budget.test.js.map +1 -0
- package/dist/reliability/llm-eval/budget.d.ts +14 -0
- package/dist/reliability/llm-eval/budget.js +43 -0
- package/dist/reliability/llm-eval/budget.js.map +1 -0
- package/dist/reliability/score/__tests__/formula-v1.test.d.ts +1 -0
- package/dist/reliability/score/__tests__/formula-v1.test.js +29 -0
- package/dist/reliability/score/__tests__/formula-v1.test.js.map +1 -0
- package/dist/reliability/score/formula-v1.d.ts +13 -0
- package/dist/reliability/score/formula-v1.js +19 -0
- package/dist/reliability/score/formula-v1.js.map +1 -0
- package/dist/reliability/score/version-pin.d.ts +1 -0
- package/dist/reliability/score/version-pin.js +2 -0
- package/dist/reliability/score/version-pin.js.map +1 -0
- package/dist/reliability/score/weight.d.ts +1 -0
- package/dist/reliability/score/weight.js +5 -0
- package/dist/reliability/score/weight.js.map +1 -0
- package/dist/reliability/types.d.ts +39 -0
- package/dist/reliability/types.js +2 -0
- package/dist/reliability/types.js.map +1 -0
- package/dist/reporters/coverage-footer.d.ts +2 -0
- package/dist/reporters/coverage-footer.js +7 -0
- package/dist/reporters/coverage-footer.js.map +1 -0
- package/dist/reporters/json.d.ts +5 -0
- package/dist/reporters/json.js +51 -0
- package/dist/reporters/json.js.map +1 -0
- package/dist/reporters/markdown.d.ts +7 -0
- package/dist/reporters/markdown.js +35 -0
- package/dist/reporters/markdown.js.map +1 -0
- package/dist/reporters/sarif.d.ts +5 -0
- package/dist/reporters/sarif.js +109 -0
- package/dist/reporters/sarif.js.map +1 -0
- package/dist/reporters/terminal-format.d.ts +34 -0
- package/dist/reporters/terminal-format.js +97 -0
- package/dist/reporters/terminal-format.js.map +1 -0
- package/dist/reporters/terminal.d.ts +4 -0
- package/dist/reporters/terminal.js +201 -0
- package/dist/reporters/terminal.js.map +1 -0
- package/dist/rule-runner.d.ts +8 -0
- package/dist/rule-runner.js +22 -0
- package/dist/rule-runner.js.map +1 -0
- package/dist/rules/_codemod-adapter.d.ts +16 -0
- package/dist/rules/_codemod-adapter.js +49 -0
- package/dist/rules/_codemod-adapter.js.map +1 -0
- package/dist/rules/_exclude.d.ts +11 -0
- package/dist/rules/_exclude.js +17 -0
- package/dist/rules/_exclude.js.map +1 -0
- package/dist/rules/_function-body-analysis.d.ts +82 -0
- package/dist/rules/_function-body-analysis.js +379 -0
- package/dist/rules/_function-body-analysis.js.map +1 -0
- package/dist/rules/_rule-module.d.ts +31 -0
- package/dist/rules/_rule-module.js +32 -0
- package/dist/rules/_rule-module.js.map +1 -0
- package/dist/rules/_skip-context.d.ts +36 -0
- package/dist/rules/_skip-context.js +128 -0
- package/dist/rules/_skip-context.js.map +1 -0
- package/dist/rules/a11y-essentials.d.ts +1 -0
- package/dist/rules/a11y-essentials.js +140 -0
- package/dist/rules/a11y-essentials.js.map +1 -0
- package/dist/rules/ai-surface-agents-md-quality.d.ts +22 -0
- package/dist/rules/ai-surface-agents-md-quality.js +233 -0
- package/dist/rules/ai-surface-agents-md-quality.js.map +1 -0
- package/dist/rules/ai-surface-component-manifest-json.d.ts +19 -0
- package/dist/rules/ai-surface-component-manifest-json.js +232 -0
- package/dist/rules/ai-surface-component-manifest-json.js.map +1 -0
- package/dist/rules/ai-surface-ds-index-exported.d.ts +19 -0
- package/dist/rules/ai-surface-ds-index-exported.js +239 -0
- package/dist/rules/ai-surface-ds-index-exported.js.map +1 -0
- package/dist/rules/components-shadow-native.d.ts +2 -0
- package/dist/rules/components-shadow-native.js +118 -0
- package/dist/rules/components-shadow-native.js.map +1 -0
- package/dist/rules/manifest.d.ts +5 -0
- package/dist/rules/manifest.js +20 -0
- package/dist/rules/manifest.js.map +1 -0
- package/dist/rules/naming-component-pascalcase.d.ts +7 -0
- package/dist/rules/naming-component-pascalcase.js +197 -0
- package/dist/rules/naming-component-pascalcase.js.map +1 -0
- package/dist/rules/naming-hook-prefix.d.ts +6 -0
- package/dist/rules/naming-hook-prefix.js +185 -0
- package/dist/rules/naming-hook-prefix.js.map +1 -0
- package/dist/rules/pack-loader.d.ts +30 -0
- package/dist/rules/pack-loader.js +60 -0
- package/dist/rules/pack-loader.js.map +1 -0
- package/dist/rules/pack-validator.d.ts +8 -0
- package/dist/rules/pack-validator.js +97 -0
- package/dist/rules/pack-validator.js.map +1 -0
- package/dist/rules/registry.d.ts +3 -0
- package/dist/rules/registry.js +28 -0
- package/dist/rules/registry.js.map +1 -0
- package/dist/rules/storybook-coverage.d.ts +1 -0
- package/dist/rules/storybook-coverage.js +49 -0
- package/dist/rules/storybook-coverage.js.map +1 -0
- package/dist/rules/templates/_regex-utils.d.ts +5 -0
- package/dist/rules/templates/_regex-utils.js +8 -0
- package/dist/rules/templates/_regex-utils.js.map +1 -0
- package/dist/rules/templates/a11y-jsx-template.d.ts +15 -0
- package/dist/rules/templates/a11y-jsx-template.js +69 -0
- package/dist/rules/templates/a11y-jsx-template.js.map +1 -0
- package/dist/rules/templates/css-property-token-compliance.d.ts +18 -0
- package/dist/rules/templates/css-property-token-compliance.js +56 -0
- package/dist/rules/templates/css-property-token-compliance.js.map +1 -0
- package/dist/rules/templates/import-source-restriction.d.ts +18 -0
- package/dist/rules/templates/import-source-restriction.js +60 -0
- package/dist/rules/templates/import-source-restriction.js.map +1 -0
- package/dist/rules/templates/js-call-token-compliance.d.ts +18 -0
- package/dist/rules/templates/js-call-token-compliance.js +61 -0
- package/dist/rules/templates/js-call-token-compliance.js.map +1 -0
- package/dist/rules/templates/js-prop-token-compliance.d.ts +21 -0
- package/dist/rules/templates/js-prop-token-compliance.js +56 -0
- package/dist/rules/templates/js-prop-token-compliance.js.map +1 -0
- package/dist/rules/templates/naming-convention.d.ts +18 -0
- package/dist/rules/templates/naming-convention.js +76 -0
- package/dist/rules/templates/naming-convention.js.map +1 -0
- package/dist/rules/templates/registry.d.ts +5 -0
- package/dist/rules/templates/registry.js +30 -0
- package/dist/rules/templates/registry.js.map +1 -0
- package/dist/rules/templates/storybook-coverage-template.d.ts +15 -0
- package/dist/rules/templates/storybook-coverage-template.js +58 -0
- package/dist/rules/templates/storybook-coverage-template.js.map +1 -0
- package/dist/rules/templates/tailwind-utility-class-compliance.d.ts +15 -0
- package/dist/rules/templates/tailwind-utility-class-compliance.js +70 -0
- package/dist/rules/templates/tailwind-utility-class-compliance.js.map +1 -0
- package/dist/rules/templates/types.d.ts +16 -0
- package/dist/rules/templates/types.js +2 -0
- package/dist/rules/templates/types.js.map +1 -0
- package/dist/rules/tokens-description-coverage.d.ts +15 -0
- package/dist/rules/tokens-description-coverage.js +193 -0
- package/dist/rules/tokens-description-coverage.js.map +1 -0
- package/dist/rules/tokens-dtcg-conformance.d.ts +47 -0
- package/dist/rules/tokens-dtcg-conformance.js +363 -0
- package/dist/rules/tokens-dtcg-conformance.js.map +1 -0
- package/dist/rules/tokens-no-hardcoded-color.d.ts +18 -0
- package/dist/rules/tokens-no-hardcoded-color.js +436 -0
- package/dist/rules/tokens-no-hardcoded-color.js.map +1 -0
- package/dist/rules/tokens-no-hardcoded-spacing.d.ts +8 -0
- package/dist/rules/tokens-no-hardcoded-spacing.js +193 -0
- package/dist/rules/tokens-no-hardcoded-spacing.js.map +1 -0
- package/dist/scorer.d.ts +38 -0
- package/dist/scorer.js +126 -0
- package/dist/scorer.js.map +1 -0
- package/dist/share/clipboard.d.ts +26 -0
- package/dist/share/clipboard.js +76 -0
- package/dist/share/clipboard.js.map +1 -0
- package/dist/suppression/__tests__/inline.test.d.ts +1 -0
- package/dist/suppression/__tests__/inline.test.js +25 -0
- package/dist/suppression/__tests__/inline.test.js.map +1 -0
- package/dist/suppression/__tests__/lyseignore.test.d.ts +1 -0
- package/dist/suppression/__tests__/lyseignore.test.js +32 -0
- package/dist/suppression/__tests__/lyseignore.test.js.map +1 -0
- package/dist/suppression/defaults.d.ts +1 -0
- package/dist/suppression/defaults.js +14 -0
- package/dist/suppression/defaults.js.map +1 -0
- package/dist/suppression/inline.d.ts +7 -0
- package/dist/suppression/inline.js +32 -0
- package/dist/suppression/inline.js.map +1 -0
- package/dist/suppression/lyseignore.d.ts +2 -0
- package/dist/suppression/lyseignore.js +22 -0
- package/dist/suppression/lyseignore.js.map +1 -0
- package/dist/telemetry/consent.d.ts +48 -0
- package/dist/telemetry/consent.js +139 -0
- package/dist/telemetry/consent.js.map +1 -0
- package/dist/telemetry/index.d.ts +2 -0
- package/dist/telemetry/index.js +3 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/local-log.d.ts +64 -0
- package/dist/telemetry/local-log.js +123 -0
- package/dist/telemetry/local-log.js.map +1 -0
- package/dist/tokens/dtcg-model.d.ts +53 -0
- package/dist/tokens/dtcg-model.js +18 -0
- package/dist/tokens/dtcg-model.js.map +1 -0
- package/dist/tokens/normalizer.d.ts +17 -0
- package/dist/tokens/normalizer.js +360 -0
- package/dist/tokens/normalizer.js.map +1 -0
- package/dist/types.d.ts +300 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/dist/util/git.d.ts +6 -0
- package/dist/util/git.js +40 -0
- package/dist/util/git.js.map +1 -0
- package/dist/util/git.test.d.ts +5 -0
- package/dist/util/git.test.js +42 -0
- package/dist/util/git.test.js.map +1 -0
- package/dist/util/gitignore.d.ts +9 -0
- package/dist/util/gitignore.js +39 -0
- package/dist/util/gitignore.js.map +1 -0
- package/dist/util/hash-deps.d.ts +6 -0
- package/dist/util/hash-deps.js +24 -0
- package/dist/util/hash-deps.js.map +1 -0
- package/dist/util/spinner.d.ts +41 -0
- package/dist/util/spinner.js +126 -0
- package/dist/util/spinner.js.map +1 -0
- package/dist/util/with-spinner.d.ts +11 -0
- package/dist/util/with-spinner.js +19 -0
- package/dist/util/with-spinner.js.map +1 -0
- package/dist/walker.d.ts +14 -0
- package/dist/walker.js +91 -0
- package/dist/walker.js.map +1 -0
- package/package.json +83 -0
- package/rules-manifest.json +289 -0
- package/schemas/v1/lyse-config.json +82 -0
- package/schemas/v1/lyse-event.json +68 -0
- package/schemas/v1/lyse-license.json +19 -0
- package/schemas/v1/lyse-llm-payload.json +53 -0
- package/schemas/v1/lyse-llm-response.json +45 -0
- package/schemas/v1/lyse-result.json +98 -0
- package/schemas/v1/lyse-rules.json +42 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { mkdir, appendFile, readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { VERSION } from "../index.js";
|
|
4
|
+
import { getCachedConsent } from "../telemetry/consent.js";
|
|
5
|
+
const HISTORY_FILE = ".lyse/history.ndjson";
|
|
6
|
+
const SCHEMA_VERSION = 1;
|
|
7
|
+
async function ensureDir(cwd) {
|
|
8
|
+
await mkdir(join(cwd, ".lyse"), { recursive: true });
|
|
9
|
+
}
|
|
10
|
+
async function appendLine(cwd, event) {
|
|
11
|
+
await ensureDir(cwd);
|
|
12
|
+
await appendFile(join(cwd, HISTORY_FILE), JSON.stringify(event) + "\n");
|
|
13
|
+
}
|
|
14
|
+
export async function appendAuditEvent(cwd, input, commitSha) {
|
|
15
|
+
await appendLine(cwd, {
|
|
16
|
+
schema_version: SCHEMA_VERSION,
|
|
17
|
+
event_type: "audit",
|
|
18
|
+
timestamp: new Date().toISOString(),
|
|
19
|
+
...input,
|
|
20
|
+
commit_sha: commitSha,
|
|
21
|
+
lyse_version: process.env.LYSE_VERSION ?? VERSION,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export async function appendFixEvent(cwd, ruleId, confidence, count, commitSha) {
|
|
25
|
+
await appendLine(cwd, {
|
|
26
|
+
schema_version: SCHEMA_VERSION,
|
|
27
|
+
event_type: "auto_fix_applied",
|
|
28
|
+
timestamp: new Date().toISOString(),
|
|
29
|
+
rule_id: ruleId,
|
|
30
|
+
confidence,
|
|
31
|
+
count,
|
|
32
|
+
commit_sha: commitSha,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/** Opt-in guard: only emit when consent has been accepted. */
|
|
36
|
+
function telemetryEnabled() {
|
|
37
|
+
return getCachedConsent();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Append a CommandInvokedEvent to history.
|
|
41
|
+
* Only emitted when consent has been accepted.
|
|
42
|
+
*/
|
|
43
|
+
export async function appendCommandInvokedEvent(cwd, command, outcome, durationMs) {
|
|
44
|
+
if (!telemetryEnabled())
|
|
45
|
+
return;
|
|
46
|
+
await appendLine(cwd, {
|
|
47
|
+
schema_version: SCHEMA_VERSION,
|
|
48
|
+
event_type: "command_invoked",
|
|
49
|
+
timestamp: new Date().toISOString(),
|
|
50
|
+
command,
|
|
51
|
+
outcome,
|
|
52
|
+
duration_ms: durationMs,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Append a McpSetupCompletedEvent to history.
|
|
57
|
+
* Only emitted when consent has been accepted.
|
|
58
|
+
*/
|
|
59
|
+
export async function appendMcpSetupCompletedEvent(cwd, ide) {
|
|
60
|
+
if (!telemetryEnabled())
|
|
61
|
+
return;
|
|
62
|
+
await appendLine(cwd, {
|
|
63
|
+
schema_version: SCHEMA_VERSION,
|
|
64
|
+
event_type: "mcp_setup_completed",
|
|
65
|
+
timestamp: new Date().toISOString(),
|
|
66
|
+
ide,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Append an InitStepCompletedEvent to history.
|
|
71
|
+
* Only emitted when consent has been accepted.
|
|
72
|
+
*/
|
|
73
|
+
export async function appendInitStepCompletedEvent(cwd, step) {
|
|
74
|
+
if (!telemetryEnabled())
|
|
75
|
+
return;
|
|
76
|
+
await appendLine(cwd, {
|
|
77
|
+
schema_version: SCHEMA_VERSION,
|
|
78
|
+
event_type: "init_step_completed",
|
|
79
|
+
timestamp: new Date().toISOString(),
|
|
80
|
+
step,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
export async function readRecent(cwd, n = 10) {
|
|
84
|
+
try {
|
|
85
|
+
const raw = await readFile(join(cwd, HISTORY_FILE), "utf8");
|
|
86
|
+
return raw.trim().split("\n").filter(Boolean).slice(-n).map(l => JSON.parse(l));
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export async function isFirstAutoFix(cwd) {
|
|
93
|
+
const events = await readRecent(cwd, 10000);
|
|
94
|
+
return !events.some(e => e.event_type === "auto_fix_applied");
|
|
95
|
+
}
|
|
96
|
+
export function computeDelta(current, previous) {
|
|
97
|
+
return {
|
|
98
|
+
score: current.score - previous.score,
|
|
99
|
+
days: Math.floor((Date.now() - new Date(previous.timestamp).getTime()) / (1000 * 60 * 60 * 24)),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=ndjson-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ndjson-store.js","sourceRoot":"","sources":["../../src/history/ndjson-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { computeRepoBucket, normalizeRemoteUrl, BUCKET_SALT, type RepoBucketOptions } from "./repo-bucket.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/identity/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,WAAW,EAA0B,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Embedded salt — bumped per minor version of lyse.
|
|
3
|
+
* Rotation cadence is documented in spec v4 §14.3.
|
|
4
|
+
*/
|
|
5
|
+
export declare const BUCKET_SALT = "lyse-v0-2026Q2";
|
|
6
|
+
/**
|
|
7
|
+
* Normalize a git remote URL by stripping the scheme, user/auth, and .git suffix,
|
|
8
|
+
* leaving host+path lowercased.
|
|
9
|
+
* Examples:
|
|
10
|
+
* git@github.com:acme/repo.git → github.com/acme/repo
|
|
11
|
+
* https://user:token@github.com/acme/repo → github.com/acme/repo
|
|
12
|
+
* ssh://git@github.com:22/acme/repo.git → github.com/acme/repo
|
|
13
|
+
*/
|
|
14
|
+
export declare function normalizeRemoteUrl(url: string): string;
|
|
15
|
+
export interface RepoBucketOptions {
|
|
16
|
+
salt?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Compute the anonymous repo_bucket fingerprint for the repo at `repoRoot`.
|
|
20
|
+
* Returns null if the repo has no .git, no first commit, or no remote.
|
|
21
|
+
*/
|
|
22
|
+
export declare function computeRepoBucket(repoRoot: string, options?: RepoBucketOptions): string | null;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { execSync } from "node:child_process";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { existsSync } from "node:fs";
|
|
5
|
+
/**
|
|
6
|
+
* Embedded salt — bumped per minor version of lyse.
|
|
7
|
+
* Rotation cadence is documented in spec v4 §14.3.
|
|
8
|
+
*/
|
|
9
|
+
export const BUCKET_SALT = "lyse-v0-2026Q2";
|
|
10
|
+
function safeExecGit(cmd, cwd) {
|
|
11
|
+
try {
|
|
12
|
+
return execSync(`git ${cmd}`, {
|
|
13
|
+
cwd,
|
|
14
|
+
encoding: "utf8",
|
|
15
|
+
stdio: ["ignore", "pipe", "ignore"],
|
|
16
|
+
timeout: 5000,
|
|
17
|
+
}).trim();
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Normalize a git remote URL by stripping the scheme, user/auth, and .git suffix,
|
|
25
|
+
* leaving host+path lowercased.
|
|
26
|
+
* Examples:
|
|
27
|
+
* git@github.com:acme/repo.git → github.com/acme/repo
|
|
28
|
+
* https://user:token@github.com/acme/repo → github.com/acme/repo
|
|
29
|
+
* ssh://git@github.com:22/acme/repo.git → github.com/acme/repo
|
|
30
|
+
*/
|
|
31
|
+
export function normalizeRemoteUrl(url) {
|
|
32
|
+
let s = url.trim();
|
|
33
|
+
// Strip scheme://
|
|
34
|
+
s = s.replace(/^[a-zA-Z][a-zA-Z0-9+.-]*:\/\//, "");
|
|
35
|
+
// Strip user:token@
|
|
36
|
+
s = s.replace(/^[^@/]+@/, "");
|
|
37
|
+
// Drop port :NNNN (after host)
|
|
38
|
+
s = s.replace(/:\d+\//, "/");
|
|
39
|
+
// Replace : with / (handles git@host:owner/repo)
|
|
40
|
+
s = s.replace(/:/g, "/");
|
|
41
|
+
// Strip trailing /
|
|
42
|
+
s = s.replace(/\/$/, "");
|
|
43
|
+
// Strip .git suffix
|
|
44
|
+
s = s.replace(/\.git$/, "");
|
|
45
|
+
return s.toLowerCase();
|
|
46
|
+
}
|
|
47
|
+
function readGitInfo(repoRoot) {
|
|
48
|
+
const gitDir = join(repoRoot, ".git");
|
|
49
|
+
if (!existsSync(gitDir))
|
|
50
|
+
return null;
|
|
51
|
+
const firstCommitSha = safeExecGit("rev-list --max-parents=0 HEAD", repoRoot);
|
|
52
|
+
const remoteUrlRaw = safeExecGit("config --get remote.origin.url", repoRoot);
|
|
53
|
+
if (!firstCommitSha || !remoteUrlRaw)
|
|
54
|
+
return null;
|
|
55
|
+
return {
|
|
56
|
+
firstCommitSha,
|
|
57
|
+
normalizedRemoteUrl: normalizeRemoteUrl(remoteUrlRaw),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Compute the anonymous repo_bucket fingerprint for the repo at `repoRoot`.
|
|
62
|
+
* Returns null if the repo has no .git, no first commit, or no remote.
|
|
63
|
+
*/
|
|
64
|
+
export function computeRepoBucket(repoRoot, options = {}) {
|
|
65
|
+
const info = readGitInfo(repoRoot);
|
|
66
|
+
if (!info)
|
|
67
|
+
return null;
|
|
68
|
+
const salt = options.salt ?? BUCKET_SALT;
|
|
69
|
+
const hash = createHash("sha256")
|
|
70
|
+
.update(info.firstCommitSha)
|
|
71
|
+
.update("|")
|
|
72
|
+
.update(info.normalizedRemoteUrl)
|
|
73
|
+
.update("|")
|
|
74
|
+
.update(salt)
|
|
75
|
+
.digest("hex");
|
|
76
|
+
return hash.slice(0, 16);
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=repo-bucket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo-bucket.js","sourceRoot":"","sources":["../../src/identity/repo-bucket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAO5C,SAAS,WAAW,CAAC,GAAW,EAAE,GAAW;IAC3C,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,OAAO,GAAG,EAAE,EAAE;YAC5B,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;YACnC,OAAO,EAAE,IAAI;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACnB,kBAAkB;IAClB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC;IACnD,oBAAoB;IACpB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC9B,+BAA+B;IAC/B,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7B,iDAAiD;IACjD,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACzB,mBAAmB;IACnB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACzB,oBAAoB;IACpB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC5B,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,cAAc,GAAG,WAAW,CAAC,+BAA+B,EAAE,QAAQ,CAAC,CAAC;IAC9E,MAAM,YAAY,GAAG,WAAW,CAAC,gCAAgC,EAAE,QAAQ,CAAC,CAAC;IAC7E,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAClD,OAAO;QACL,cAAc;QACd,mBAAmB,EAAE,kBAAkB,CAAC,YAAY,CAAC;KACtD,CAAC;AACJ,CAAC;AAMD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,UAA6B,EAAE;IACjF,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;IACzC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC;SAC9B,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC;SAC3B,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,IAAI,CAAC;SACZ,MAAM,CAAC,KAAK,CAAC,CAAC;IACjB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3B,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const VERSION: string;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
function readVersion() {
|
|
5
|
+
try {
|
|
6
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
7
|
+
const pkg = JSON.parse(readFileSync(join(here, "..", "package.json"), "utf8"));
|
|
8
|
+
return pkg.version;
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return "0.0.0-dev";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export const VERSION = readVersion();
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAAwB,CAAC;QACtG,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAW,WAAW,EAAE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Finding, Layer4Meta, LyseConfig } from "../types.js";
|
|
2
|
+
import type { AuditFlags } from "../commands/audit-flags.js";
|
|
3
|
+
export interface Layer4StageInput {
|
|
4
|
+
repoRoot: string;
|
|
5
|
+
config: LyseConfig;
|
|
6
|
+
flags: AuditFlags | undefined;
|
|
7
|
+
staticFindings: Finding[];
|
|
8
|
+
}
|
|
9
|
+
export interface Layer4StageResult {
|
|
10
|
+
augmentedFindings: Finding[];
|
|
11
|
+
meta: Layer4Meta;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* v0.1 stub — LLM Layer 4 was descoped in the Phase 1 reset (#106); the default
|
|
15
|
+
* audit path is static-only. The prior implementation is in git history if a
|
|
16
|
+
* future release revisits LLM augmentation.
|
|
17
|
+
*/
|
|
18
|
+
export declare function runLayer4Stage(_input: Layer4StageInput): Promise<Layer4StageResult>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v0.1 stub — LLM Layer 4 was descoped in the Phase 1 reset (#106); the default
|
|
3
|
+
* audit path is static-only. The prior implementation is in git history if a
|
|
4
|
+
* future release revisits LLM augmentation.
|
|
5
|
+
*/
|
|
6
|
+
export async function runLayer4Stage(_input) {
|
|
7
|
+
return {
|
|
8
|
+
augmentedFindings: [],
|
|
9
|
+
meta: { staticOnly: true },
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=layer4-stage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layer4-stage.js","sourceRoot":"","sources":["../../src/llm/layer4-stage.ts"],"names":[],"mappings":"AAeA;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAwB;IAC3D,OAAO;QACL,iBAAiB,EAAE,EAAE;QACrB,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;KAC3B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { ParsedTsFile, ComponentInventoryEntry, ComponentPropEntry } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Extract props from a component's source file.
|
|
4
|
+
* Returns an array of ComponentPropEntry, or undefined if extraction fails.
|
|
5
|
+
*
|
|
6
|
+
* Extraction strategy:
|
|
7
|
+
* 1. Walk function declarations and arrow function exports named as PascalCase components.
|
|
8
|
+
* 2. Find the first parameter's type annotation.
|
|
9
|
+
* 3. If it's a TSTypeLiteral (inline props), extract directly.
|
|
10
|
+
* 4. If it's a reference (e.g. ButtonProps), look for a matching interface or type alias in the file.
|
|
11
|
+
* - If found, extract from it.
|
|
12
|
+
* - If not found (cross-file), return [{ name: "<ref>", typeText: "<ref>" }] as a placeholder.
|
|
13
|
+
*
|
|
14
|
+
* Limitation (documented): cross-file prop type resolution is deferred to v0.2.
|
|
15
|
+
*/
|
|
16
|
+
export declare function extractComponentProps(componentName: string, source: string): ComponentPropEntry[] | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* Build the component inventory by scanning ParsedTsFile imports for components
|
|
19
|
+
* from the given DS module. Optionally accepts a map of source files from the DS
|
|
20
|
+
* package itself to extract prop/variant information.
|
|
21
|
+
*
|
|
22
|
+
* @param module - the DS module specifier, e.g. "@acme/ui"
|
|
23
|
+
* @param files - parsed application files (used to count usages)
|
|
24
|
+
* @param componentSources - optional map of component name → source text for prop extraction
|
|
25
|
+
*/
|
|
26
|
+
export declare function buildComponentInventory(module: string, files: ParsedTsFile[], componentSources?: Map<string, string>): ComponentInventoryEntry[];
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { parse } from "@babel/parser";
|
|
2
|
+
import _traverse from "@babel/traverse";
|
|
3
|
+
// Babel CJS-vs-ESM interop: the callable lives at .default in some environments.
|
|
4
|
+
const traverse = (_traverse.default ??
|
|
5
|
+
_traverse);
|
|
6
|
+
/**
|
|
7
|
+
* Extract the string value from a TSLiteralType node (string literals only).
|
|
8
|
+
* Returns undefined for non-string literals.
|
|
9
|
+
*/
|
|
10
|
+
function stringLiteralValue(node) {
|
|
11
|
+
if (node.type !== "TSLiteralType")
|
|
12
|
+
return undefined;
|
|
13
|
+
const lit = node.literal;
|
|
14
|
+
if (lit.type === "StringLiteral")
|
|
15
|
+
return lit.value;
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Check whether a TSType is a string-literal union (all members are string literals).
|
|
20
|
+
* Returns the variant strings if true, undefined otherwise.
|
|
21
|
+
*/
|
|
22
|
+
function extractStringLiteralUnion(typeAnnotation) {
|
|
23
|
+
if (typeAnnotation.type !== "TSUnionType")
|
|
24
|
+
return undefined;
|
|
25
|
+
const union = typeAnnotation;
|
|
26
|
+
const variants = [];
|
|
27
|
+
for (const member of union.types) {
|
|
28
|
+
const val = stringLiteralValue(member);
|
|
29
|
+
if (val === undefined)
|
|
30
|
+
return undefined; // mixed union — not a pure string-literal union
|
|
31
|
+
}
|
|
32
|
+
// Second pass to build the list (only reached if all members are string literals)
|
|
33
|
+
for (const member of union.types) {
|
|
34
|
+
variants.push(stringLiteralValue(member));
|
|
35
|
+
}
|
|
36
|
+
return variants.length > 0 ? variants : undefined;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Extract the raw type text from source using AST node start/end positions.
|
|
40
|
+
*/
|
|
41
|
+
function sliceTypeText(source, node) {
|
|
42
|
+
if (node.start != null && node.end != null) {
|
|
43
|
+
return source.slice(node.start, node.end).trim();
|
|
44
|
+
}
|
|
45
|
+
return "";
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Extract props from a TypeScript object type annotation (TSTypeLiteral).
|
|
49
|
+
* Also handles destructured parameter defaults.
|
|
50
|
+
*
|
|
51
|
+
* @param source - full source text of the file (for slicing type annotations)
|
|
52
|
+
* @param typeMembers - the members of a TSTypeLiteral or TSPropertySignature list
|
|
53
|
+
* @param defaultValues - map of propName → defaultValue from destructuring (may be empty)
|
|
54
|
+
*/
|
|
55
|
+
function extractPropsFromTypeMembers(source, typeMembers, defaultValues) {
|
|
56
|
+
const props = [];
|
|
57
|
+
for (const member of typeMembers) {
|
|
58
|
+
if (member.type !== "TSPropertySignature")
|
|
59
|
+
continue;
|
|
60
|
+
const propSig = member;
|
|
61
|
+
if (propSig.key.type !== "Identifier")
|
|
62
|
+
continue;
|
|
63
|
+
const propName = propSig.key.name;
|
|
64
|
+
let typeText;
|
|
65
|
+
let isVariantUnion;
|
|
66
|
+
let variants;
|
|
67
|
+
const ann = propSig.typeAnnotation?.typeAnnotation;
|
|
68
|
+
if (ann) {
|
|
69
|
+
typeText = sliceTypeText(source, ann);
|
|
70
|
+
const extracted = extractStringLiteralUnion(ann);
|
|
71
|
+
if (extracted) {
|
|
72
|
+
isVariantUnion = true;
|
|
73
|
+
variants = extracted;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const defaultValue = defaultValues.get(propName);
|
|
77
|
+
const entry = {
|
|
78
|
+
name: propName,
|
|
79
|
+
...(typeText !== undefined && { typeText }),
|
|
80
|
+
...(propSig.optional === true && { isOptional: true }),
|
|
81
|
+
...(defaultValue !== undefined && { defaultValue }),
|
|
82
|
+
...(isVariantUnion !== undefined && { isVariantUnion }),
|
|
83
|
+
...(variants !== undefined && { variants }),
|
|
84
|
+
};
|
|
85
|
+
props.push(entry);
|
|
86
|
+
}
|
|
87
|
+
return props;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Extract default values from a destructured function parameter.
|
|
91
|
+
* e.g. `function Button({ variant = "primary", size = "md" }: ButtonProps)`
|
|
92
|
+
* Returns a map of propName → defaultValue (as source text).
|
|
93
|
+
*/
|
|
94
|
+
function extractDestructuringDefaults(param) {
|
|
95
|
+
const defaults = new Map();
|
|
96
|
+
if (param.type !== "ObjectPattern")
|
|
97
|
+
return defaults;
|
|
98
|
+
for (const prop of param.properties) {
|
|
99
|
+
if (prop.type !== "ObjectProperty")
|
|
100
|
+
continue;
|
|
101
|
+
const objProp = prop;
|
|
102
|
+
if (objProp.key.type !== "Identifier")
|
|
103
|
+
continue;
|
|
104
|
+
if (!objProp.value || objProp.value.type !== "AssignmentPattern")
|
|
105
|
+
continue;
|
|
106
|
+
const assign = objProp.value;
|
|
107
|
+
const key = objProp.key.name;
|
|
108
|
+
// Extract the right-hand side as text
|
|
109
|
+
if (assign.right.type === "StringLiteral") {
|
|
110
|
+
defaults.set(key, assign.right.value);
|
|
111
|
+
}
|
|
112
|
+
else if (assign.right.type === "NumericLiteral") {
|
|
113
|
+
defaults.set(key, String(assign.right.value));
|
|
114
|
+
}
|
|
115
|
+
else if (assign.right.type === "BooleanLiteral") {
|
|
116
|
+
defaults.set(key, String(assign.right.value));
|
|
117
|
+
}
|
|
118
|
+
// Complex default expressions are not extracted
|
|
119
|
+
}
|
|
120
|
+
return defaults;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Extract props from a component's source file.
|
|
124
|
+
* Returns an array of ComponentPropEntry, or undefined if extraction fails.
|
|
125
|
+
*
|
|
126
|
+
* Extraction strategy:
|
|
127
|
+
* 1. Walk function declarations and arrow function exports named as PascalCase components.
|
|
128
|
+
* 2. Find the first parameter's type annotation.
|
|
129
|
+
* 3. If it's a TSTypeLiteral (inline props), extract directly.
|
|
130
|
+
* 4. If it's a reference (e.g. ButtonProps), look for a matching interface or type alias in the file.
|
|
131
|
+
* - If found, extract from it.
|
|
132
|
+
* - If not found (cross-file), return [{ name: "<ref>", typeText: "<ref>" }] as a placeholder.
|
|
133
|
+
*
|
|
134
|
+
* Limitation (documented): cross-file prop type resolution is deferred to v0.2.
|
|
135
|
+
*/
|
|
136
|
+
export function extractComponentProps(componentName, source) {
|
|
137
|
+
let ast;
|
|
138
|
+
try {
|
|
139
|
+
ast = parse(source, {
|
|
140
|
+
sourceType: "module",
|
|
141
|
+
plugins: ["typescript", "jsx"],
|
|
142
|
+
errorRecovery: true,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
return undefined;
|
|
147
|
+
}
|
|
148
|
+
// Collect all top-level interface/type alias declarations for lookup
|
|
149
|
+
const typeDeclarations = new Map();
|
|
150
|
+
try {
|
|
151
|
+
traverse(ast, {
|
|
152
|
+
TSInterfaceDeclaration(path) {
|
|
153
|
+
const members = path.node.body.body;
|
|
154
|
+
typeDeclarations.set(path.node.id.name, members);
|
|
155
|
+
},
|
|
156
|
+
TSTypeAliasDeclaration(path) {
|
|
157
|
+
const ann = path.node.typeAnnotation;
|
|
158
|
+
if (ann.type === "TSTypeLiteral") {
|
|
159
|
+
typeDeclarations.set(path.node.id.name, ann.members);
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
return undefined;
|
|
166
|
+
}
|
|
167
|
+
// Now walk for the component function and extract props
|
|
168
|
+
let foundProps;
|
|
169
|
+
const extractFromFunctionParam = (params) => {
|
|
170
|
+
if (params.length === 0)
|
|
171
|
+
return [];
|
|
172
|
+
const firstParam = params[0];
|
|
173
|
+
// Gather destructuring defaults
|
|
174
|
+
let defaultValues = new Map();
|
|
175
|
+
if (firstParam.type === "ObjectPattern") {
|
|
176
|
+
defaultValues = extractDestructuringDefaults(firstParam);
|
|
177
|
+
}
|
|
178
|
+
// Resolve the type annotation
|
|
179
|
+
let typeAnnotation;
|
|
180
|
+
if (firstParam.type === "Identifier" &&
|
|
181
|
+
firstParam.typeAnnotation?.type === "TSTypeAnnotation") {
|
|
182
|
+
typeAnnotation = firstParam.typeAnnotation.typeAnnotation;
|
|
183
|
+
}
|
|
184
|
+
else if (firstParam.type === "ObjectPattern" &&
|
|
185
|
+
firstParam.typeAnnotation?.type === "TSTypeAnnotation") {
|
|
186
|
+
typeAnnotation = firstParam.typeAnnotation.typeAnnotation;
|
|
187
|
+
}
|
|
188
|
+
else if (firstParam.type === "ObjectPattern") {
|
|
189
|
+
// Destructured object without type annotation — no type info available
|
|
190
|
+
return defaultValues.size > 0
|
|
191
|
+
? [...defaultValues.entries()].map(([name, defaultValue]) => ({ name, defaultValue }))
|
|
192
|
+
: [];
|
|
193
|
+
}
|
|
194
|
+
if (!typeAnnotation)
|
|
195
|
+
return [];
|
|
196
|
+
if (typeAnnotation.type === "TSTypeLiteral") {
|
|
197
|
+
// Inline props object
|
|
198
|
+
return extractPropsFromTypeMembers(source, typeAnnotation.members, defaultValues);
|
|
199
|
+
}
|
|
200
|
+
if (typeAnnotation.type === "TSTypeReference") {
|
|
201
|
+
const ref = typeAnnotation;
|
|
202
|
+
if (ref.typeName.type === "Identifier") {
|
|
203
|
+
const refName = ref.typeName.name;
|
|
204
|
+
// Look up in same-file declarations
|
|
205
|
+
const members = typeDeclarations.get(refName);
|
|
206
|
+
if (members) {
|
|
207
|
+
return extractPropsFromTypeMembers(source, members, defaultValues);
|
|
208
|
+
}
|
|
209
|
+
// Cross-file reference: return a placeholder entry.
|
|
210
|
+
// Full cross-file resolution deferred to v0.2.
|
|
211
|
+
return [{ name: refName, typeText: refName }];
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// "any", intersections, conditionals, etc. — skip variant extraction
|
|
215
|
+
const typeText = sliceTypeText(source, typeAnnotation);
|
|
216
|
+
return typeText ? [{ name: "props", typeText }] : [];
|
|
217
|
+
};
|
|
218
|
+
try {
|
|
219
|
+
traverse(ast, {
|
|
220
|
+
FunctionDeclaration(path) {
|
|
221
|
+
if (foundProps !== undefined)
|
|
222
|
+
return;
|
|
223
|
+
const id = path.node.id;
|
|
224
|
+
if (!id || id.name !== componentName)
|
|
225
|
+
return;
|
|
226
|
+
// Skip generics with complex constraints — just extract from params
|
|
227
|
+
foundProps = extractFromFunctionParam(path.node.params) ?? undefined;
|
|
228
|
+
path.stop();
|
|
229
|
+
},
|
|
230
|
+
VariableDeclarator(path) {
|
|
231
|
+
if (foundProps !== undefined)
|
|
232
|
+
return;
|
|
233
|
+
const id = path.node.id;
|
|
234
|
+
if (id.type !== "Identifier" || id.name !== componentName)
|
|
235
|
+
return;
|
|
236
|
+
const init = path.node.init;
|
|
237
|
+
if (!init)
|
|
238
|
+
return;
|
|
239
|
+
// Arrow function: const Button = (...) => ...
|
|
240
|
+
if (init.type === "ArrowFunctionExpression") {
|
|
241
|
+
foundProps = extractFromFunctionParam(init.params) ?? undefined;
|
|
242
|
+
path.stop();
|
|
243
|
+
}
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
return undefined;
|
|
249
|
+
}
|
|
250
|
+
return foundProps;
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Build the component inventory by scanning ParsedTsFile imports for components
|
|
254
|
+
* from the given DS module. Optionally accepts a map of source files from the DS
|
|
255
|
+
* package itself to extract prop/variant information.
|
|
256
|
+
*
|
|
257
|
+
* @param module - the DS module specifier, e.g. "@acme/ui"
|
|
258
|
+
* @param files - parsed application files (used to count usages)
|
|
259
|
+
* @param componentSources - optional map of component name → source text for prop extraction
|
|
260
|
+
*/
|
|
261
|
+
export function buildComponentInventory(module, files, componentSources) {
|
|
262
|
+
const counts = new Map();
|
|
263
|
+
for (const f of files) {
|
|
264
|
+
for (const imp of f.imports) {
|
|
265
|
+
if (imp.module !== module)
|
|
266
|
+
continue;
|
|
267
|
+
for (const n of imp.named)
|
|
268
|
+
counts.set(n, (counts.get(n) ?? 0) + 1);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return [...counts.entries()].map(([name, usageCount]) => {
|
|
272
|
+
const entry = { name, module, usageCount };
|
|
273
|
+
if (componentSources) {
|
|
274
|
+
const src = componentSources.get(name);
|
|
275
|
+
if (src !== undefined) {
|
|
276
|
+
const props = extractComponentProps(name, src);
|
|
277
|
+
if (props !== undefined) {
|
|
278
|
+
entry.props = props;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
return entry;
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
//# sourceMappingURL=components.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"components.js","sourceRoot":"","sources":["../../src/loaders/components.ts"],"names":[],"mappings":"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"}
|