@shrkcrft/inspector 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 +21 -0
- package/README.md +15 -0
- package/dist/acceptance-replay.d.ts +63 -0
- package/dist/acceptance-replay.d.ts.map +1 -0
- package/dist/acceptance-replay.js +240 -0
- package/dist/action-hint-diagnostics.d.ts +32 -0
- package/dist/action-hint-diagnostics.d.ts.map +1 -0
- package/dist/action-hint-diagnostics.js +133 -0
- package/dist/adoption-check.d.ts +28 -0
- package/dist/adoption-check.d.ts.map +1 -0
- package/dist/adoption-check.js +181 -0
- package/dist/adoption-checkpoint.d.ts +97 -0
- package/dist/adoption-checkpoint.d.ts.map +1 -0
- package/dist/adoption-checkpoint.js +209 -0
- package/dist/adoption-merge-preview.d.ts +28 -0
- package/dist/adoption-merge-preview.d.ts.map +1 -0
- package/dist/adoption-merge-preview.js +254 -0
- package/dist/adoption-report-renderer.d.ts +33 -0
- package/dist/adoption-report-renderer.d.ts.map +1 -0
- package/dist/adoption-report-renderer.js +257 -0
- package/dist/adoption-state.d.ts +100 -0
- package/dist/adoption-state.d.ts.map +1 -0
- package/dist/adoption-state.js +296 -0
- package/dist/adoption-three-way.d.ts +46 -0
- package/dist/adoption-three-way.d.ts.map +1 -0
- package/dist/adoption-three-way.js +181 -0
- package/dist/agent-brief.d.ts +77 -0
- package/dist/agent-brief.d.ts.map +1 -0
- package/dist/agent-brief.js +490 -0
- package/dist/agent-contract-gate.d.ts +108 -0
- package/dist/agent-contract-gate.d.ts.map +1 -0
- package/dist/agent-contract-gate.js +412 -0
- package/dist/agent-contract-templates.d.ts +63 -0
- package/dist/agent-contract-templates.d.ts.map +1 -0
- package/dist/agent-contract-templates.js +346 -0
- package/dist/agent-contract.d.ts +65 -0
- package/dist/agent-contract.d.ts.map +1 -0
- package/dist/agent-contract.js +555 -0
- package/dist/agent-handoff.d.ts +123 -0
- package/dist/agent-handoff.d.ts.map +1 -0
- package/dist/agent-handoff.js +470 -0
- package/dist/agent-instructions.d.ts +2 -0
- package/dist/agent-instructions.d.ts.map +1 -0
- package/dist/agent-instructions.js +21 -0
- package/dist/agent-orchestration.d.ts +61 -0
- package/dist/agent-orchestration.d.ts.map +1 -0
- package/dist/agent-orchestration.js +285 -0
- package/dist/agent-task-prep.d.ts +31 -0
- package/dist/agent-task-prep.d.ts.map +1 -0
- package/dist/agent-task-prep.js +73 -0
- package/dist/ai-readiness.d.ts +30 -0
- package/dist/ai-readiness.d.ts.map +1 -0
- package/dist/ai-readiness.js +279 -0
- package/dist/api-report.d.ts +51 -0
- package/dist/api-report.d.ts.map +1 -0
- package/dist/api-report.js +254 -0
- package/dist/apply-dispatch-trace.d.ts +93 -0
- package/dist/apply-dispatch-trace.d.ts.map +1 -0
- package/dist/apply-dispatch-trace.js +283 -0
- package/dist/apply-gate-result.d.ts +52 -0
- package/dist/apply-gate-result.d.ts.map +1 -0
- package/dist/apply-gate-result.js +44 -0
- package/dist/architecture-map.d.ts +118 -0
- package/dist/architecture-map.d.ts.map +1 -0
- package/dist/architecture-map.js +543 -0
- package/dist/area-explore.d.ts +75 -0
- package/dist/area-explore.d.ts.map +1 -0
- package/dist/area-explore.js +438 -0
- package/dist/area-map.d.ts +43 -0
- package/dist/area-map.d.ts.map +1 -0
- package/dist/area-map.js +197 -0
- package/dist/asset-provenance.d.ts +123 -0
- package/dist/asset-provenance.d.ts.map +1 -0
- package/dist/asset-provenance.js +209 -0
- package/dist/barrel-operations.d.ts +45 -0
- package/dist/barrel-operations.d.ts.map +1 -0
- package/dist/barrel-operations.js +159 -0
- package/dist/boundaries-changed-only.d.ts +62 -0
- package/dist/boundaries-changed-only.d.ts.map +1 -0
- package/dist/boundaries-changed-only.js +97 -0
- package/dist/boundary-suggestions.d.ts +20 -0
- package/dist/boundary-suggestions.d.ts.map +1 -0
- package/dist/boundary-suggestions.js +51 -0
- package/dist/bundle-diff.d.ts +98 -0
- package/dist/bundle-diff.d.ts.map +1 -0
- package/dist/bundle-diff.js +531 -0
- package/dist/bundle-replay.d.ts +68 -0
- package/dist/bundle-replay.d.ts.map +1 -0
- package/dist/bundle-replay.js +273 -0
- package/dist/bundle-validate-html.d.ts +11 -0
- package/dist/bundle-validate-html.d.ts.map +1 -0
- package/dist/bundle-validate-html.js +60 -0
- package/dist/change-intent.d.ts +36 -0
- package/dist/change-intent.d.ts.map +1 -0
- package/dist/change-intent.js +259 -0
- package/dist/changed-preflight.d.ts +59 -0
- package/dist/changed-preflight.d.ts.map +1 -0
- package/dist/changed-preflight.js +358 -0
- package/dist/changed-scope.d.ts +112 -0
- package/dist/changed-scope.d.ts.map +1 -0
- package/dist/changed-scope.js +172 -0
- package/dist/changes-summary.d.ts +87 -0
- package/dist/changes-summary.d.ts.map +1 -0
- package/dist/changes-summary.js +323 -0
- package/dist/check-result-v1.d.ts +90 -0
- package/dist/check-result-v1.d.ts.map +1 -0
- package/dist/check-result-v1.js +335 -0
- package/dist/ci-integrity-report.d.ts +38 -0
- package/dist/ci-integrity-report.d.ts.map +1 -0
- package/dist/ci-integrity-report.js +324 -0
- package/dist/ci-permissions-fix.d.ts +38 -0
- package/dist/ci-permissions-fix.d.ts.map +1 -0
- package/dist/ci-permissions-fix.js +201 -0
- package/dist/ci-permissions.d.ts +51 -0
- package/dist/ci-permissions.d.ts.map +1 -0
- package/dist/ci-permissions.js +431 -0
- package/dist/ci-predict.d.ts +42 -0
- package/dist/ci-predict.d.ts.map +1 -0
- package/dist/ci-predict.js +300 -0
- package/dist/ci-scaffold.d.ts +47 -0
- package/dist/ci-scaffold.d.ts.map +1 -0
- package/dist/ci-scaffold.js +638 -0
- package/dist/codemod-assist.d.ts +97 -0
- package/dist/codemod-assist.d.ts.map +1 -0
- package/dist/codemod-assist.js +261 -0
- package/dist/command-recommender.d.ts +25 -0
- package/dist/command-recommender.d.ts.map +1 -0
- package/dist/command-recommender.js +145 -0
- package/dist/command-suggester.d.ts +61 -0
- package/dist/command-suggester.d.ts.map +1 -0
- package/dist/command-suggester.js +159 -0
- package/dist/command-taxonomy.d.ts +38 -0
- package/dist/command-taxonomy.d.ts.map +1 -0
- package/dist/command-taxonomy.js +164 -0
- package/dist/compliance-evidence.d.ts +58 -0
- package/dist/compliance-evidence.d.ts.map +1 -0
- package/dist/compliance-evidence.js +260 -0
- package/dist/compliance-profiles.d.ts +42 -0
- package/dist/compliance-profiles.d.ts.map +1 -0
- package/dist/compliance-profiles.js +171 -0
- package/dist/construct-adoption-diff.d.ts +55 -0
- package/dist/construct-adoption-diff.d.ts.map +1 -0
- package/dist/construct-adoption-diff.js +331 -0
- package/dist/construct-adoption.d.ts +71 -0
- package/dist/construct-adoption.d.ts.map +1 -0
- package/dist/construct-adoption.js +331 -0
- package/dist/construct-inference.d.ts +44 -0
- package/dist/construct-inference.d.ts.map +1 -0
- package/dist/construct-inference.js +391 -0
- package/dist/construct-registry.d.ts +32 -0
- package/dist/construct-registry.d.ts.map +1 -0
- package/dist/construct-registry.js +198 -0
- package/dist/contract-file-rule.d.ts +37 -0
- package/dist/contract-file-rule.d.ts.map +1 -0
- package/dist/contract-file-rule.js +99 -0
- package/dist/contract-template-registry.d.ts +28 -0
- package/dist/contract-template-registry.d.ts.map +1 -0
- package/dist/contract-template-registry.js +161 -0
- package/dist/contradictions.d.ts +52 -0
- package/dist/contradictions.d.ts.map +1 -0
- package/dist/contradictions.js +391 -0
- package/dist/convention-registry.d.ts +44 -0
- package/dist/convention-registry.d.ts.map +1 -0
- package/dist/convention-registry.js +195 -0
- package/dist/coverage-report.d.ts +25 -0
- package/dist/coverage-report.d.ts.map +1 -0
- package/dist/coverage-report.js +190 -0
- package/dist/custom-checks.d.ts +146 -0
- package/dist/custom-checks.d.ts.map +1 -0
- package/dist/custom-checks.js +260 -0
- package/dist/dashboard/dashboard-data.d.ts +59 -0
- package/dist/dashboard/dashboard-data.d.ts.map +1 -0
- package/dist/dashboard/dashboard-data.js +653 -0
- package/dist/dashboard-export.d.ts +67 -0
- package/dist/dashboard-export.d.ts.map +1 -0
- package/dist/dashboard-export.js +203 -0
- package/dist/decision-records.d.ts +47 -0
- package/dist/decision-records.d.ts.map +1 -0
- package/dist/decision-records.js +255 -0
- package/dist/demo-package.d.ts +49 -0
- package/dist/demo-package.d.ts.map +1 -0
- package/dist/demo-package.js +305 -0
- package/dist/demo-script.d.ts +25 -0
- package/dist/demo-script.d.ts.map +1 -0
- package/dist/demo-script.js +198 -0
- package/dist/demo-workflow.d.ts +28 -0
- package/dist/demo-workflow.d.ts.map +1 -0
- package/dist/demo-workflow.js +178 -0
- package/dist/dev-cycle.d.ts +41 -0
- package/dist/dev-cycle.d.ts.map +1 -0
- package/dist/dev-cycle.js +94 -0
- package/dist/dev-session-html.d.ts +13 -0
- package/dist/dev-session-html.d.ts.map +1 -0
- package/dist/dev-session-html.js +223 -0
- package/dist/dev-session-report.d.ts +11 -0
- package/dist/dev-session-report.d.ts.map +1 -0
- package/dist/dev-session-report.js +206 -0
- package/dist/dev-session.d.ts +257 -0
- package/dist/dev-session.d.ts.map +1 -0
- package/dist/dev-session.js +568 -0
- package/dist/diagnostics-suggest.d.ts +17 -0
- package/dist/diagnostics-suggest.d.ts.map +1 -0
- package/dist/diagnostics-suggest.js +69 -0
- package/dist/docs-check.d.ts +40 -0
- package/dist/docs-check.d.ts.map +1 -0
- package/dist/docs-check.js +221 -0
- package/dist/doctor-acknowledgements.d.ts +69 -0
- package/dist/doctor-acknowledgements.d.ts.map +1 -0
- package/dist/doctor-acknowledgements.js +150 -0
- package/dist/doctor-result.d.ts +51 -0
- package/dist/doctor-result.d.ts.map +1 -0
- package/dist/doctor-result.js +7 -0
- package/dist/doctor-suppressions.d.ts +91 -0
- package/dist/doctor-suppressions.d.ts.map +1 -0
- package/dist/doctor-suppressions.js +238 -0
- package/dist/drift-baseline.d.ts +29 -0
- package/dist/drift-baseline.d.ts.map +1 -0
- package/dist/drift-baseline.js +80 -0
- package/dist/drift.d.ts +38 -0
- package/dist/drift.d.ts.map +1 -0
- package/dist/drift.js +107 -0
- package/dist/entrypoint-matrix.d.ts +61 -0
- package/dist/entrypoint-matrix.d.ts.map +1 -0
- package/dist/entrypoint-matrix.js +221 -0
- package/dist/examples-check.d.ts +36 -0
- package/dist/examples-check.d.ts.map +1 -0
- package/dist/examples-check.js +168 -0
- package/dist/execution-graph.d.ts +98 -0
- package/dist/execution-graph.d.ts.map +1 -0
- package/dist/execution-graph.js +484 -0
- package/dist/export-bundle.d.ts +10 -0
- package/dist/export-bundle.d.ts.map +1 -0
- package/dist/export-bundle.js +90 -0
- package/dist/failure-diagnostics.d.ts +63 -0
- package/dist/failure-diagnostics.d.ts.map +1 -0
- package/dist/failure-diagnostics.js +243 -0
- package/dist/feature-bundle.d.ts +111 -0
- package/dist/feature-bundle.d.ts.map +1 -0
- package/dist/feature-bundle.js +211 -0
- package/dist/feedback-actions-v2.d.ts +65 -0
- package/dist/feedback-actions-v2.d.ts.map +1 -0
- package/dist/feedback-actions-v2.js +183 -0
- package/dist/feedback-ingestion.d.ts +96 -0
- package/dist/feedback-ingestion.d.ts.map +1 -0
- package/dist/feedback-ingestion.js +400 -0
- package/dist/fix-preview.d.ts +82 -0
- package/dist/fix-preview.d.ts.map +1 -0
- package/dist/fix-preview.js +365 -0
- package/dist/fuzzy-impact.d.ts +50 -0
- package/dist/fuzzy-impact.d.ts.map +1 -0
- package/dist/fuzzy-impact.js +446 -0
- package/dist/generated-code.d.ts +97 -0
- package/dist/generated-code.d.ts.map +1 -0
- package/dist/generated-code.js +395 -0
- package/dist/git-helpers.d.ts +26 -0
- package/dist/git-helpers.d.ts.map +1 -0
- package/dist/git-helpers.js +110 -0
- package/dist/golden-output.d.ts +33 -0
- package/dist/golden-output.d.ts.map +1 -0
- package/dist/golden-output.js +92 -0
- package/dist/grounding/build-grounding.d.ts +53 -0
- package/dist/grounding/build-grounding.d.ts.map +1 -0
- package/dist/grounding/build-grounding.js +51 -0
- package/dist/grounding/nx-projects.d.ts +29 -0
- package/dist/grounding/nx-projects.d.ts.map +1 -0
- package/dist/grounding/nx-projects.js +109 -0
- package/dist/grounding/validate-extracted-plan.d.ts +20 -0
- package/dist/grounding/validate-extracted-plan.d.ts.map +1 -0
- package/dist/grounding/validate-extracted-plan.js +127 -0
- package/dist/healing-plan.d.ts +33 -0
- package/dist/healing-plan.d.ts.map +1 -0
- package/dist/healing-plan.js +346 -0
- package/dist/helper-registry.d.ts +90 -0
- package/dist/helper-registry.d.ts.map +1 -0
- package/dist/helper-registry.js +529 -0
- package/dist/impact-analysis.d.ts +150 -0
- package/dist/impact-analysis.d.ts.map +1 -0
- package/dist/impact-analysis.js +697 -0
- package/dist/impact-graph-render.d.ts +51 -0
- package/dist/impact-graph-render.d.ts.map +1 -0
- package/dist/impact-graph-render.js +139 -0
- package/dist/impact-graph.d.ts +17 -0
- package/dist/impact-graph.d.ts.map +1 -0
- package/dist/impact-graph.js +119 -0
- package/dist/impact-render.d.ts +22 -0
- package/dist/impact-render.d.ts.map +1 -0
- package/dist/impact-render.js +413 -0
- package/dist/import-graph-analysis.d.ts +28 -0
- package/dist/import-graph-analysis.d.ts.map +1 -0
- package/dist/import-graph-analysis.js +193 -0
- package/dist/import-hygiene.d.ts +93 -0
- package/dist/import-hygiene.d.ts.map +1 -0
- package/dist/import-hygiene.js +366 -0
- package/dist/index.d.ts +223 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +233 -0
- package/dist/ingest-adoption.d.ts +50 -0
- package/dist/ingest-adoption.d.ts.map +1 -0
- package/dist/ingest-adoption.js +183 -0
- package/dist/ingest-apply.d.ts +80 -0
- package/dist/ingest-apply.d.ts.map +1 -0
- package/dist/ingest-apply.js +227 -0
- package/dist/ingest-body-extractor.d.ts +28 -0
- package/dist/ingest-body-extractor.d.ts.map +1 -0
- package/dist/ingest-body-extractor.js +129 -0
- package/dist/ingest-drafts.d.ts +16 -0
- package/dist/ingest-drafts.d.ts.map +1 -0
- package/dist/ingest-drafts.js +482 -0
- package/dist/inspector-cache.d.ts +41 -0
- package/dist/inspector-cache.d.ts.map +1 -0
- package/dist/inspector-cache.js +104 -0
- package/dist/install-smoke.d.ts +44 -0
- package/dist/install-smoke.d.ts.map +1 -0
- package/dist/install-smoke.js +31 -0
- package/dist/knowledge-authoring.d.ts +151 -0
- package/dist/knowledge-authoring.d.ts.map +1 -0
- package/dist/knowledge-authoring.js +586 -0
- package/dist/knowledge-graph.d.ts +76 -0
- package/dist/knowledge-graph.d.ts.map +1 -0
- package/dist/knowledge-graph.js +336 -0
- package/dist/knowledge-lint.d.ts +97 -0
- package/dist/knowledge-lint.d.ts.map +1 -0
- package/dist/knowledge-lint.js +302 -0
- package/dist/knowledge-rename.d.ts +38 -0
- package/dist/knowledge-rename.d.ts.map +1 -0
- package/dist/knowledge-rename.js +88 -0
- package/dist/knowledge-stale.d.ts +124 -0
- package/dist/knowledge-stale.d.ts.map +1 -0
- package/dist/knowledge-stale.js +892 -0
- package/dist/languages/command-inference.d.ts +27 -0
- package/dist/languages/command-inference.d.ts.map +1 -0
- package/dist/languages/command-inference.js +214 -0
- package/dist/languages/dependency-scan.d.ts +33 -0
- package/dist/languages/dependency-scan.d.ts.map +1 -0
- package/dist/languages/dependency-scan.js +343 -0
- package/dist/languages/index.d.ts +14 -0
- package/dist/languages/index.d.ts.map +1 -0
- package/dist/languages/index.js +13 -0
- package/dist/languages/language-boundaries.d.ts +30 -0
- package/dist/languages/language-boundaries.d.ts.map +1 -0
- package/dist/languages/language-boundaries.js +176 -0
- package/dist/languages/language-cache.d.ts +54 -0
- package/dist/languages/language-cache.d.ts.map +1 -0
- package/dist/languages/language-cache.js +236 -0
- package/dist/languages/language-detection.d.ts +30 -0
- package/dist/languages/language-detection.d.ts.map +1 -0
- package/dist/languages/language-detection.js +584 -0
- package/dist/languages/language-id.d.ts +15 -0
- package/dist/languages/language-id.d.ts.map +1 -0
- package/dist/languages/language-id.js +15 -0
- package/dist/languages/language-runner.d.ts +90 -0
- package/dist/languages/language-runner.d.ts.map +1 -0
- package/dist/languages/language-runner.js +346 -0
- package/dist/languages/polyglot-boundary.d.ts +80 -0
- package/dist/languages/polyglot-boundary.d.ts.map +1 -0
- package/dist/languages/polyglot-boundary.js +373 -0
- package/dist/languages/polyglot-ci.d.ts +25 -0
- package/dist/languages/polyglot-ci.d.ts.map +1 -0
- package/dist/languages/polyglot-ci.js +278 -0
- package/dist/languages/test-impact.d.ts +19 -0
- package/dist/languages/test-impact.d.ts.map +1 -0
- package/dist/languages/test-impact.js +157 -0
- package/dist/loader-diagnostics.d.ts +40 -0
- package/dist/loader-diagnostics.d.ts.map +1 -0
- package/dist/loader-diagnostics.js +49 -0
- package/dist/memory-diff.d.ts +60 -0
- package/dist/memory-diff.d.ts.map +1 -0
- package/dist/memory-diff.js +302 -0
- package/dist/migration-profile-registry.d.ts +26 -0
- package/dist/migration-profile-registry.d.ts.map +1 -0
- package/dist/migration-profile-registry.js +135 -0
- package/dist/migration-readiness.d.ts +101 -0
- package/dist/migration-readiness.d.ts.map +1 -0
- package/dist/migration-readiness.js +253 -0
- package/dist/monorepo-onboarding.d.ts +51 -0
- package/dist/monorepo-onboarding.d.ts.map +1 -0
- package/dist/monorepo-onboarding.js +235 -0
- package/dist/onboarding-adoption-diff.d.ts +53 -0
- package/dist/onboarding-adoption-diff.d.ts.map +1 -0
- package/dist/onboarding-adoption-diff.js +285 -0
- package/dist/onboarding-adoption.d.ts +136 -0
- package/dist/onboarding-adoption.d.ts.map +1 -0
- package/dist/onboarding-adoption.js +702 -0
- package/dist/onboarding-agent-import.d.ts +40 -0
- package/dist/onboarding-agent-import.d.ts.map +1 -0
- package/dist/onboarding-agent-import.js +114 -0
- package/dist/onboarding-diff.d.ts +39 -0
- package/dist/onboarding-diff.d.ts.map +1 -0
- package/dist/onboarding-diff.js +240 -0
- package/dist/onboarding-drafts.d.ts +28 -0
- package/dist/onboarding-drafts.d.ts.map +1 -0
- package/dist/onboarding-drafts.js +234 -0
- package/dist/onboarding-report.d.ts +8 -0
- package/dist/onboarding-report.d.ts.map +1 -0
- package/dist/onboarding-report.js +239 -0
- package/dist/onboarding.d.ts +134 -0
- package/dist/onboarding.d.ts.map +1 -0
- package/dist/onboarding.js +729 -0
- package/dist/ownership.d.ts +38 -0
- package/dist/ownership.d.ts.map +1 -0
- package/dist/ownership.js +102 -0
- package/dist/pack-author-ux.d.ts +58 -0
- package/dist/pack-author-ux.d.ts.map +1 -0
- package/dist/pack-author-ux.js +219 -0
- package/dist/pack-author.d.ts +94 -0
- package/dist/pack-author.d.ts.map +1 -0
- package/dist/pack-author.js +208 -0
- package/dist/pack-compatibility.d.ts +21 -0
- package/dist/pack-compatibility.d.ts.map +1 -0
- package/dist/pack-compatibility.js +114 -0
- package/dist/pack-contributions-inventory.d.ts +121 -0
- package/dist/pack-contributions-inventory.d.ts.map +1 -0
- package/dist/pack-contributions-inventory.js +732 -0
- package/dist/pack-docs.d.ts +11 -0
- package/dist/pack-docs.d.ts.map +1 -0
- package/dist/pack-docs.js +101 -0
- package/dist/pack-doctor.d.ts +50 -0
- package/dist/pack-doctor.d.ts.map +1 -0
- package/dist/pack-doctor.js +302 -0
- package/dist/pack-helper-registry.d.ts +29 -0
- package/dist/pack-helper-registry.d.ts.map +1 -0
- package/dist/pack-helper-registry.js +144 -0
- package/dist/pack-pending.d.ts +68 -0
- package/dist/pack-pending.d.ts.map +1 -0
- package/dist/pack-pending.js +189 -0
- package/dist/pack-quality-score.d.ts +44 -0
- package/dist/pack-quality-score.d.ts.map +1 -0
- package/dist/pack-quality-score.js +155 -0
- package/dist/pack-release-check.d.ts +24 -0
- package/dist/pack-release-check.d.ts.map +1 -0
- package/dist/pack-release-check.js +258 -0
- package/dist/pack-signature-status.d.ts +72 -0
- package/dist/pack-signature-status.d.ts.map +1 -0
- package/dist/pack-signature-status.js +222 -0
- package/dist/pack-symbol-compat.d.ts +60 -0
- package/dist/pack-symbol-compat.d.ts.map +1 -0
- package/dist/pack-symbol-compat.js +371 -0
- package/dist/pack-test-runner.d.ts +59 -0
- package/dist/pack-test-runner.d.ts.map +1 -0
- package/dist/pack-test-runner.js +211 -0
- package/dist/pipeline-command-dictionary.d.ts +2 -0
- package/dist/pipeline-command-dictionary.d.ts.map +1 -0
- package/dist/pipeline-command-dictionary.js +20 -0
- package/dist/pipeline-lint.d.ts +30 -0
- package/dist/pipeline-lint.d.ts.map +1 -0
- package/dist/pipeline-lint.js +134 -0
- package/dist/plan-dependency-graph.d.ts +25 -0
- package/dist/plan-dependency-graph.d.ts.map +1 -0
- package/dist/plan-dependency-graph.js +195 -0
- package/dist/plan-review.d.ts +64 -0
- package/dist/plan-review.d.ts.map +1 -0
- package/dist/plan-review.js +242 -0
- package/dist/plan-simulation.d.ts +108 -0
- package/dist/plan-simulation.d.ts.map +1 -0
- package/dist/plan-simulation.js +767 -0
- package/dist/playbook-registry.d.ts +25 -0
- package/dist/playbook-registry.d.ts.map +1 -0
- package/dist/playbook-registry.js +148 -0
- package/dist/playbook-script.d.ts +60 -0
- package/dist/playbook-script.d.ts.map +1 -0
- package/dist/playbook-script.js +161 -0
- package/dist/plugin-lifecycle-profile-registry.d.ts +52 -0
- package/dist/plugin-lifecycle-profile-registry.d.ts.map +1 -0
- package/dist/plugin-lifecycle-profile-registry.js +202 -0
- package/dist/plugin-lifecycle.d.ts +132 -0
- package/dist/plugin-lifecycle.d.ts.map +1 -0
- package/dist/plugin-lifecycle.js +477 -0
- package/dist/policy-engine.d.ts +101 -0
- package/dist/policy-engine.d.ts.map +1 -0
- package/dist/policy-engine.js +321 -0
- package/dist/policy-override-audit.d.ts +18 -0
- package/dist/policy-override-audit.d.ts.map +1 -0
- package/dist/policy-override-audit.js +54 -0
- package/dist/policy-overrides.d.ts +35 -0
- package/dist/policy-overrides.d.ts.map +1 -0
- package/dist/policy-overrides.js +84 -0
- package/dist/policy-test.d.ts +83 -0
- package/dist/policy-test.d.ts.map +1 -0
- package/dist/policy-test.js +342 -0
- package/dist/pr-summary.d.ts +34 -0
- package/dist/pr-summary.d.ts.map +1 -0
- package/dist/pr-summary.js +220 -0
- package/dist/product-coherence.d.ts +21 -0
- package/dist/product-coherence.d.ts.map +1 -0
- package/dist/product-coherence.js +158 -0
- package/dist/profile-registry.d.ts +42 -0
- package/dist/profile-registry.d.ts.map +1 -0
- package/dist/profile-registry.js +104 -0
- package/dist/project-coupling-audit.d.ts +64 -0
- package/dist/project-coupling-audit.d.ts.map +1 -0
- package/dist/project-coupling-audit.js +282 -0
- package/dist/project-overview.d.ts +14 -0
- package/dist/project-overview.d.ts.map +1 -0
- package/dist/project-overview.js +27 -0
- package/dist/propose-knowledge.d.ts +64 -0
- package/dist/propose-knowledge.d.ts.map +1 -0
- package/dist/propose-knowledge.js +367 -0
- package/dist/quality-baseline.d.ts +123 -0
- package/dist/quality-baseline.d.ts.map +1 -0
- package/dist/quality-baseline.js +433 -0
- package/dist/quality-html.d.ts +7 -0
- package/dist/quality-html.d.ts.map +1 -0
- package/dist/quality-html.js +64 -0
- package/dist/quality-report.d.ts +49 -0
- package/dist/quality-report.d.ts.map +1 -0
- package/dist/quality-report.js +296 -0
- package/dist/query-resolver.d.ts +38 -0
- package/dist/query-resolver.d.ts.map +1 -0
- package/dist/query-resolver.js +163 -0
- package/dist/ranker-explainability.d.ts +91 -0
- package/dist/ranker-explainability.d.ts.map +1 -0
- package/dist/ranker-explainability.js +550 -0
- package/dist/reference-lookup.d.ts +8 -0
- package/dist/reference-lookup.d.ts.map +1 -0
- package/dist/reference-lookup.js +18 -0
- package/dist/registration-hint-registry.d.ts +55 -0
- package/dist/registration-hint-registry.d.ts.map +1 -0
- package/dist/registration-hint-registry.js +327 -0
- package/dist/registry-lifecycle.d.ts +47 -0
- package/dist/registry-lifecycle.d.ts.map +1 -0
- package/dist/registry-lifecycle.js +214 -0
- package/dist/release-readiness.d.ts +64 -0
- package/dist/release-readiness.d.ts.map +1 -0
- package/dist/release-readiness.js +456 -0
- package/dist/release-smoke.d.ts +138 -0
- package/dist/release-smoke.d.ts.map +1 -0
- package/dist/release-smoke.js +459 -0
- package/dist/release-train.d.ts +33 -0
- package/dist/release-train.d.ts.map +1 -0
- package/dist/release-train.js +104 -0
- package/dist/repo-memory.d.ts +95 -0
- package/dist/repo-memory.d.ts.map +1 -0
- package/dist/repo-memory.js +614 -0
- package/dist/report-site.d.ts +92 -0
- package/dist/report-site.d.ts.map +1 -0
- package/dist/report-site.js +658 -0
- package/dist/reposet.d.ts +56 -0
- package/dist/reposet.d.ts.map +1 -0
- package/dist/reposet.js +160 -0
- package/dist/repository-intelligence.d.ts +145 -0
- package/dist/repository-intelligence.d.ts.map +1 -0
- package/dist/repository-intelligence.js +729 -0
- package/dist/repository-knowledge-model.d.ts +218 -0
- package/dist/repository-knowledge-model.d.ts.map +1 -0
- package/dist/repository-knowledge-model.js +939 -0
- package/dist/repository-map.d.ts +72 -0
- package/dist/repository-map.d.ts.map +1 -0
- package/dist/repository-map.js +332 -0
- package/dist/repository-stats.d.ts +66 -0
- package/dist/repository-stats.d.ts.map +1 -0
- package/dist/repository-stats.js +329 -0
- package/dist/review-comment-renderer.d.ts +59 -0
- package/dist/review-comment-renderer.d.ts.map +1 -0
- package/dist/review-comment-renderer.js +181 -0
- package/dist/review-comment-v2.d.ts +9 -0
- package/dist/review-comment-v2.d.ts.map +1 -0
- package/dist/review-comment-v2.js +178 -0
- package/dist/review-html.d.ts +13 -0
- package/dist/review-html.d.ts.map +1 -0
- package/dist/review-html.js +79 -0
- package/dist/review-packet-v2.d.ts +29 -0
- package/dist/review-packet-v2.d.ts.map +1 -0
- package/dist/review-packet-v2.js +71 -0
- package/dist/review-packet-v3.d.ts +22 -0
- package/dist/review-packet-v3.d.ts.map +1 -0
- package/dist/review-packet-v3.js +181 -0
- package/dist/review-packet.d.ts +49 -0
- package/dist/review-packet.d.ts.map +1 -0
- package/dist/review-packet.js +129 -0
- package/dist/risk-signals.d.ts +28 -0
- package/dist/risk-signals.d.ts.map +1 -0
- package/dist/risk-signals.js +68 -0
- package/dist/role-views.d.ts +50 -0
- package/dist/role-views.d.ts.map +1 -0
- package/dist/role-views.js +334 -0
- package/dist/rounds.d.ts +52 -0
- package/dist/rounds.d.ts.map +1 -0
- package/dist/rounds.js +172 -0
- package/dist/rule-drift.d.ts +42 -0
- package/dist/rule-drift.d.ts.map +1 -0
- package/dist/rule-drift.js +148 -0
- package/dist/rule-quality.d.ts +73 -0
- package/dist/rule-quality.d.ts.map +1 -0
- package/dist/rule-quality.js +356 -0
- package/dist/rule-scaffold.d.ts +71 -0
- package/dist/rule-scaffold.d.ts.map +1 -0
- package/dist/rule-scaffold.js +258 -0
- package/dist/safety-audit-deep.d.ts +38 -0
- package/dist/safety-audit-deep.d.ts.map +1 -0
- package/dist/safety-audit-deep.js +162 -0
- package/dist/safety-audit.d.ts +91 -0
- package/dist/safety-audit.d.ts.map +1 -0
- package/dist/safety-audit.js +138 -0
- package/dist/safety-html.d.ts +7 -0
- package/dist/safety-html.d.ts.map +1 -0
- package/dist/safety-html.js +70 -0
- package/dist/scaffold-coverage.d.ts +46 -0
- package/dist/scaffold-coverage.d.ts.map +1 -0
- package/dist/scaffold-coverage.js +273 -0
- package/dist/scaffold-patterns.d.ts +38 -0
- package/dist/scaffold-patterns.d.ts.map +1 -0
- package/dist/scaffold-patterns.js +282 -0
- package/dist/schema-inventory.d.ts +55 -0
- package/dist/schema-inventory.d.ts.map +1 -0
- package/dist/schema-inventory.js +301 -0
- package/dist/search-index.d.ts +75 -0
- package/dist/search-index.d.ts.map +1 -0
- package/dist/search-index.js +531 -0
- package/dist/search-tuning-explain.d.ts +68 -0
- package/dist/search-tuning-explain.d.ts.map +1 -0
- package/dist/search-tuning-explain.js +207 -0
- package/dist/search-tuning-registry.d.ts +54 -0
- package/dist/search-tuning-registry.d.ts.map +1 -0
- package/dist/search-tuning-registry.js +303 -0
- package/dist/self-audit.d.ts +59 -0
- package/dist/self-audit.d.ts.map +1 -0
- package/dist/self-audit.js +192 -0
- package/dist/self-config-doctor-v2.d.ts +57 -0
- package/dist/self-config-doctor-v2.d.ts.map +1 -0
- package/dist/self-config-doctor-v2.js +653 -0
- package/dist/self-config-doctor.d.ts +47 -0
- package/dist/self-config-doctor.d.ts.map +1 -0
- package/dist/self-config-doctor.js +432 -0
- package/dist/sharkcraft-inspector.d.ts +73 -0
- package/dist/sharkcraft-inspector.d.ts.map +1 -0
- package/dist/sharkcraft-inspector.js +745 -0
- package/dist/spec/spec-cross-validate.d.ts +17 -0
- package/dist/spec/spec-cross-validate.d.ts.map +1 -0
- package/dist/spec/spec-cross-validate.js +53 -0
- package/dist/spec/spec-discovery.d.ts +27 -0
- package/dist/spec/spec-discovery.d.ts.map +1 -0
- package/dist/spec/spec-discovery.js +78 -0
- package/dist/spec/spec-review.d.ts +36 -0
- package/dist/spec/spec-review.d.ts.map +1 -0
- package/dist/spec/spec-review.js +37 -0
- package/dist/stability-map.d.ts +62 -0
- package/dist/stability-map.d.ts.map +1 -0
- package/dist/stability-map.js +404 -0
- package/dist/start-here.d.ts +49 -0
- package/dist/start-here.d.ts.map +1 -0
- package/dist/start-here.js +259 -0
- package/dist/surface-profile-detect.d.ts +42 -0
- package/dist/surface-profile-detect.d.ts.map +1 -0
- package/dist/surface-profile-detect.js +76 -0
- package/dist/symbol-index.d.ts +108 -0
- package/dist/symbol-index.d.ts.map +1 -0
- package/dist/symbol-index.js +483 -0
- package/dist/task-decompose.d.ts +38 -0
- package/dist/task-decompose.d.ts.map +1 -0
- package/dist/task-decompose.js +154 -0
- package/dist/task-packet.d.ts +104 -0
- package/dist/task-packet.d.ts.map +1 -0
- package/dist/task-packet.js +156 -0
- package/dist/task-ranker.d.ts +51 -0
- package/dist/task-ranker.d.ts.map +1 -0
- package/dist/task-ranker.js +410 -0
- package/dist/task-risk.d.ts +84 -0
- package/dist/task-risk.d.ts.map +1 -0
- package/dist/task-risk.js +731 -0
- package/dist/task-routing-hint-registry.d.ts +36 -0
- package/dist/task-routing-hint-registry.d.ts.map +1 -0
- package/dist/task-routing-hint-registry.js +186 -0
- package/dist/template-authoring.d.ts +113 -0
- package/dist/template-authoring.d.ts.map +1 -0
- package/dist/template-authoring.js +521 -0
- package/dist/template-body-inference-v2.d.ts +19 -0
- package/dist/template-body-inference-v2.d.ts.map +1 -0
- package/dist/template-body-inference-v2.js +468 -0
- package/dist/template-body-inference.d.ts +59 -0
- package/dist/template-body-inference.d.ts.map +1 -0
- package/dist/template-body-inference.js +277 -0
- package/dist/template-drift.d.ts +39 -0
- package/dist/template-drift.d.ts.map +1 -0
- package/dist/template-drift.js +353 -0
- package/dist/template-lint.d.ts +31 -0
- package/dist/template-lint.d.ts.map +1 -0
- package/dist/template-lint.js +113 -0
- package/dist/test-definitions.d.ts +41 -0
- package/dist/test-definitions.d.ts.map +1 -0
- package/dist/test-definitions.js +6 -0
- package/dist/test-impact.d.ts +30 -0
- package/dist/test-impact.d.ts.map +1 -0
- package/dist/test-impact.js +173 -0
- package/dist/test-runner.d.ts +87 -0
- package/dist/test-runner.d.ts.map +1 -0
- package/dist/test-runner.js +560 -0
- package/dist/uncertainty-report.d.ts +46 -0
- package/dist/uncertainty-report.d.ts.map +1 -0
- package/dist/uncertainty-report.js +108 -0
- package/dist/uncertainty.d.ts +38 -0
- package/dist/uncertainty.d.ts.map +1 -0
- package/dist/uncertainty.js +115 -0
- package/dist/universal-search.d.ts +64 -0
- package/dist/universal-search.d.ts.map +1 -0
- package/dist/universal-search.js +347 -0
- package/dist/upgrade-advisor.d.ts +22 -0
- package/dist/upgrade-advisor.d.ts.map +1 -0
- package/dist/upgrade-advisor.js +109 -0
- package/dist/why-file.d.ts +75 -0
- package/dist/why-file.d.ts.map +1 -0
- package/dist/why-file.js +202 -0
- package/dist/workflow-simulation.d.ts +46 -0
- package/dist/workflow-simulation.d.ts.map +1 -0
- package/dist/workflow-simulation.js +154 -0
- package/package.json +66 -0
|
@@ -0,0 +1,568 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, readdirSync, renameSync, statSync, writeFileSync, } from 'node:fs';
|
|
2
|
+
import * as nodePath from 'node:path';
|
|
3
|
+
export const DEV_SESSION_SCHEMA = 'sharkcraft.dev-session/v1';
|
|
4
|
+
export var DevSessionPhase;
|
|
5
|
+
(function (DevSessionPhase) {
|
|
6
|
+
DevSessionPhase["Started"] = "started";
|
|
7
|
+
DevSessionPhase["Planned"] = "planned";
|
|
8
|
+
DevSessionPhase["Reviewed"] = "reviewed";
|
|
9
|
+
DevSessionPhase["Applied"] = "applied";
|
|
10
|
+
DevSessionPhase["Validated"] = "validated";
|
|
11
|
+
DevSessionPhase["ValidationFailed"] = "validation_failed";
|
|
12
|
+
DevSessionPhase["Completed"] = "completed";
|
|
13
|
+
})(DevSessionPhase || (DevSessionPhase = {}));
|
|
14
|
+
export var DevSessionSignatureStatus;
|
|
15
|
+
(function (DevSessionSignatureStatus) {
|
|
16
|
+
DevSessionSignatureStatus["Verified"] = "verified";
|
|
17
|
+
DevSessionSignatureStatus["Unsigned"] = "unsigned";
|
|
18
|
+
DevSessionSignatureStatus["Invalid"] = "invalid";
|
|
19
|
+
DevSessionSignatureStatus["NotChecked"] = "not-checked";
|
|
20
|
+
})(DevSessionSignatureStatus || (DevSessionSignatureStatus = {}));
|
|
21
|
+
export var DevSessionPlanStatus;
|
|
22
|
+
(function (DevSessionPlanStatus) {
|
|
23
|
+
DevSessionPlanStatus["Intent"] = "intent";
|
|
24
|
+
DevSessionPlanStatus["Saved"] = "saved";
|
|
25
|
+
DevSessionPlanStatus["Reviewed"] = "reviewed";
|
|
26
|
+
DevSessionPlanStatus["Applied"] = "applied";
|
|
27
|
+
})(DevSessionPlanStatus || (DevSessionPlanStatus = {}));
|
|
28
|
+
export function setDevSessionBriefFile(state, briefFile) {
|
|
29
|
+
if (state.briefFile === (briefFile ?? undefined))
|
|
30
|
+
return state;
|
|
31
|
+
const next = { ...state, updatedAt: nowIso() };
|
|
32
|
+
if (briefFile)
|
|
33
|
+
next.briefFile = briefFile;
|
|
34
|
+
else
|
|
35
|
+
delete next.briefFile;
|
|
36
|
+
return next;
|
|
37
|
+
}
|
|
38
|
+
export function getSessionsRoot(cwd) {
|
|
39
|
+
return nodePath.join(cwd, '.sharkcraft', 'sessions');
|
|
40
|
+
}
|
|
41
|
+
export function getDevSessionDir(cwd, id) {
|
|
42
|
+
return nodePath.join(getSessionsRoot(cwd), id);
|
|
43
|
+
}
|
|
44
|
+
function readJsonIfExists(file) {
|
|
45
|
+
if (!existsSync(file))
|
|
46
|
+
return null;
|
|
47
|
+
try {
|
|
48
|
+
return JSON.parse(readFileSync(file, 'utf8'));
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
function listDirSafe(dir) {
|
|
55
|
+
if (!existsSync(dir))
|
|
56
|
+
return [];
|
|
57
|
+
try {
|
|
58
|
+
return readdirSync(dir)
|
|
59
|
+
.filter((f) => {
|
|
60
|
+
try {
|
|
61
|
+
return statSync(nodePath.join(dir, f)).isFile();
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
})
|
|
67
|
+
.sort();
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return [];
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function nowIso() {
|
|
74
|
+
return new Date().toISOString();
|
|
75
|
+
}
|
|
76
|
+
export function createDevSessionState(input) {
|
|
77
|
+
const created = nowIso();
|
|
78
|
+
const selectedPipeline = input.packet.recommendedPipelines[0]?.pipelineId ?? null;
|
|
79
|
+
const selectedTemplates = input.packet.relevantTemplates
|
|
80
|
+
.slice(0, 5)
|
|
81
|
+
.map((t) => t.id);
|
|
82
|
+
const nextAction = input.packet.suggestedGen
|
|
83
|
+
? `shrk dev plan ${input.id}`
|
|
84
|
+
: `shrk dev continue ${input.id}`;
|
|
85
|
+
return {
|
|
86
|
+
schema: DEV_SESSION_SCHEMA,
|
|
87
|
+
id: input.id,
|
|
88
|
+
task: input.task,
|
|
89
|
+
createdAt: created,
|
|
90
|
+
updatedAt: created,
|
|
91
|
+
phase: DevSessionPhase.Started,
|
|
92
|
+
projectRoot: input.projectRoot,
|
|
93
|
+
selectedPipeline,
|
|
94
|
+
selectedTemplates,
|
|
95
|
+
plans: [],
|
|
96
|
+
reports: [],
|
|
97
|
+
validations: [],
|
|
98
|
+
appliedPlans: [],
|
|
99
|
+
nextAction,
|
|
100
|
+
warnings: [],
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
export function writeDevSessionState(cwd, state) {
|
|
104
|
+
const dir = getDevSessionDir(cwd, state.id);
|
|
105
|
+
mkdirSync(dir, { recursive: true });
|
|
106
|
+
const next = { ...state, updatedAt: nowIso() };
|
|
107
|
+
writeFileSync(nodePath.join(dir, 'session.json'), JSON.stringify(next, null, 2) + '\n', 'utf8');
|
|
108
|
+
return next;
|
|
109
|
+
}
|
|
110
|
+
export function readDevSessionState(cwd, id) {
|
|
111
|
+
const file = nodePath.join(getDevSessionDir(cwd, id), 'session.json');
|
|
112
|
+
const raw = readJsonIfExists(file);
|
|
113
|
+
if (!raw)
|
|
114
|
+
return null;
|
|
115
|
+
if (raw.schema !== DEV_SESSION_SCHEMA)
|
|
116
|
+
return null;
|
|
117
|
+
return raw;
|
|
118
|
+
}
|
|
119
|
+
export function scanDevSession(cwd, id) {
|
|
120
|
+
const dir = getDevSessionDir(cwd, id);
|
|
121
|
+
if (!existsSync(dir))
|
|
122
|
+
return null;
|
|
123
|
+
const taskFile = nodePath.join(dir, 'task.md');
|
|
124
|
+
const packetFile = nodePath.join(dir, 'task-packet.json');
|
|
125
|
+
const plansDir = nodePath.join(dir, 'plans');
|
|
126
|
+
const reportsDir = nodePath.join(dir, 'reports');
|
|
127
|
+
const task = existsSync(taskFile) ? readFileSync(taskFile, 'utf8').replace(/^# /, '').trim() : '';
|
|
128
|
+
const packet = readJsonIfExists(packetFile);
|
|
129
|
+
const state = readDevSessionState(cwd, id);
|
|
130
|
+
const allPlanFiles = listDirSafe(plansDir);
|
|
131
|
+
const plansOnDisk = allPlanFiles.filter((f) => f.endsWith('.json'));
|
|
132
|
+
const intentFiles = allPlanFiles.filter((f) => f.endsWith('.intent.md'));
|
|
133
|
+
const reportsOnDisk = listDirSafe(reportsDir);
|
|
134
|
+
return {
|
|
135
|
+
id,
|
|
136
|
+
dir,
|
|
137
|
+
task,
|
|
138
|
+
packet,
|
|
139
|
+
state,
|
|
140
|
+
plansOnDisk,
|
|
141
|
+
reportsOnDisk,
|
|
142
|
+
intentFiles,
|
|
143
|
+
legacy: state === null,
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
export function listDevSessions(cwd) {
|
|
147
|
+
const root = getSessionsRoot(cwd);
|
|
148
|
+
if (!existsSync(root))
|
|
149
|
+
return [];
|
|
150
|
+
return readdirSync(root)
|
|
151
|
+
.filter((d) => {
|
|
152
|
+
try {
|
|
153
|
+
return statSync(nodePath.join(root, d)).isDirectory();
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
})
|
|
159
|
+
.sort()
|
|
160
|
+
.reverse();
|
|
161
|
+
}
|
|
162
|
+
export function computeDevNextAction(load) {
|
|
163
|
+
const id = load.id;
|
|
164
|
+
// Legacy session (no session.json) — direct the user to dev status to surface state.
|
|
165
|
+
if (load.legacy && load.intentFiles.length === 0 && load.plansOnDisk.length === 0) {
|
|
166
|
+
return {
|
|
167
|
+
action: 'Generate plans',
|
|
168
|
+
command: `shrk dev plan ${id}`,
|
|
169
|
+
reason: 'No plans saved yet for this session.',
|
|
170
|
+
requiresHumanApproval: false,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
const state = load.state;
|
|
174
|
+
// 1. No plans at all — suggest dev plan.
|
|
175
|
+
if (load.plansOnDisk.length === 0 && load.intentFiles.length === 0) {
|
|
176
|
+
return {
|
|
177
|
+
action: 'Generate plans',
|
|
178
|
+
command: `shrk dev plan ${id}`,
|
|
179
|
+
reason: 'No plans or intents in this session yet.',
|
|
180
|
+
requiresHumanApproval: false,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
// 2. Only intents — variables are missing.
|
|
184
|
+
if (load.plansOnDisk.length === 0 && load.intentFiles.length > 0) {
|
|
185
|
+
const first = load.intentFiles[0];
|
|
186
|
+
const templateId = first.replace(/\.intent\.md$/, '');
|
|
187
|
+
return {
|
|
188
|
+
action: 'Fill in missing variables and re-run dev plan',
|
|
189
|
+
command: `shrk dev plan ${id} --template ${templateId} --var <name>=<value>`,
|
|
190
|
+
reason: `Plan intent file ${first} needs required variables before it can be saved.`,
|
|
191
|
+
requiresHumanApproval: false,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
// 3. Saved plans but no reviews — run dev plan to auto-review.
|
|
195
|
+
const reviewedNames = new Set(load.reportsOnDisk
|
|
196
|
+
.filter((r) => r.startsWith('plan-review-') && r.endsWith('.json'))
|
|
197
|
+
.map((r) => r.replace(/^plan-review-/, '').replace(/\.json$/, '')));
|
|
198
|
+
const unreviewedPlans = load.plansOnDisk.filter((p) => {
|
|
199
|
+
const name = p.replace(/\.json$/, '');
|
|
200
|
+
return !reviewedNames.has(name);
|
|
201
|
+
});
|
|
202
|
+
if (unreviewedPlans.length > 0) {
|
|
203
|
+
return {
|
|
204
|
+
action: 'Review saved plans',
|
|
205
|
+
command: `shrk dev plan ${id}`,
|
|
206
|
+
reason: `${unreviewedPlans.length} saved plan(s) have not been reviewed yet.`,
|
|
207
|
+
requiresHumanApproval: false,
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
// 4. Plans reviewed, not applied — human must apply.
|
|
211
|
+
const appliedNames = new Set((state?.appliedPlans ?? []).map((a) => a.file.replace(/\.json$/, '')));
|
|
212
|
+
const unappliedPlans = load.plansOnDisk.filter((p) => !appliedNames.has(p.replace(/\.json$/, '')));
|
|
213
|
+
if (unappliedPlans.length > 0) {
|
|
214
|
+
const planFile = nodePath.join(load.dir, 'plans', unappliedPlans[0]);
|
|
215
|
+
return {
|
|
216
|
+
action: 'Apply a reviewed plan (human approval required)',
|
|
217
|
+
command: `shrk apply ${planFile} --verify-signature`,
|
|
218
|
+
reason: 'All saved plans have been reviewed; apply is the human step that writes files.',
|
|
219
|
+
requiresHumanApproval: true,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
// 5. Applied but not validated.
|
|
223
|
+
const validations = state?.validations ?? [];
|
|
224
|
+
if (state && state.appliedPlans.length > 0 && validations.length === 0) {
|
|
225
|
+
return {
|
|
226
|
+
action: 'Run validation',
|
|
227
|
+
command: `shrk dev validate ${id}`,
|
|
228
|
+
reason: 'Plans have been applied but validation has not been run yet.',
|
|
229
|
+
requiresHumanApproval: false,
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
// 6. Validated but no final report.
|
|
233
|
+
const lastValidation = validations[validations.length - 1];
|
|
234
|
+
if (lastValidation && lastValidation.passed && state?.phase !== DevSessionPhase.Completed) {
|
|
235
|
+
return {
|
|
236
|
+
action: 'Generate final report',
|
|
237
|
+
command: `shrk dev report ${id}`,
|
|
238
|
+
reason: 'Validation passed; produce the human-readable audit trail.',
|
|
239
|
+
requiresHumanApproval: false,
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
// 7. Completed.
|
|
243
|
+
if (state?.phase === DevSessionPhase.Completed) {
|
|
244
|
+
return {
|
|
245
|
+
action: 'Session complete',
|
|
246
|
+
command: `shrk session show ${id}`,
|
|
247
|
+
reason: 'Final report has been generated.',
|
|
248
|
+
requiresHumanApproval: false,
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
// Fallback — keep nudging towards plan/review.
|
|
252
|
+
return {
|
|
253
|
+
action: 'Continue the development workflow',
|
|
254
|
+
command: `shrk dev status ${id}`,
|
|
255
|
+
reason: 'Session state did not match a known transition — inspect with dev status.',
|
|
256
|
+
requiresHumanApproval: false,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Pure: returns a new state with the given plan upserted by name. Does NOT
|
|
261
|
+
* touch disk — caller is responsible for `writeDevSessionState`.
|
|
262
|
+
*/
|
|
263
|
+
export function upsertDevPlanEntry(state, input) {
|
|
264
|
+
const existing = state.plans.findIndex((p) => p.name === input.name);
|
|
265
|
+
const createdAt = existing >= 0 ? state.plans[existing].createdAt : nowIso();
|
|
266
|
+
const entry = {
|
|
267
|
+
name: input.name,
|
|
268
|
+
templateId: input.templateId,
|
|
269
|
+
variables: { ...input.variables },
|
|
270
|
+
missingVariables: input.missingVariables,
|
|
271
|
+
status: input.status,
|
|
272
|
+
file: input.file,
|
|
273
|
+
signed: input.signed,
|
|
274
|
+
createdAt,
|
|
275
|
+
};
|
|
276
|
+
if (input.generatedName !== undefined)
|
|
277
|
+
entry.generatedName = input.generatedName;
|
|
278
|
+
if (input.reviewReportFile !== undefined)
|
|
279
|
+
entry.reviewReportFile = input.reviewReportFile;
|
|
280
|
+
if (input.reviewReportMarkdownFile !== undefined) {
|
|
281
|
+
entry.reviewReportMarkdownFile = input.reviewReportMarkdownFile;
|
|
282
|
+
}
|
|
283
|
+
const plans = existing >= 0
|
|
284
|
+
? [...state.plans.slice(0, existing), entry, ...state.plans.slice(existing + 1)]
|
|
285
|
+
: [...state.plans, entry];
|
|
286
|
+
return { ...state, plans, updatedAt: nowIso() };
|
|
287
|
+
}
|
|
288
|
+
export function recordReportFile(state, reportRel) {
|
|
289
|
+
if (state.reports.includes(reportRel))
|
|
290
|
+
return state;
|
|
291
|
+
return { ...state, reports: [...state.reports, reportRel], updatedAt: nowIso() };
|
|
292
|
+
}
|
|
293
|
+
export function recordValidation(state, validation) {
|
|
294
|
+
return {
|
|
295
|
+
...state,
|
|
296
|
+
validations: [...state.validations, validation],
|
|
297
|
+
updatedAt: nowIso(),
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
export function recordAppliedPlan(state, applied) {
|
|
301
|
+
if (state.appliedPlans.some((a) => a.file === applied.file))
|
|
302
|
+
return state;
|
|
303
|
+
return {
|
|
304
|
+
...state,
|
|
305
|
+
appliedPlans: [...state.appliedPlans, applied],
|
|
306
|
+
updatedAt: nowIso(),
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
export function setDevSessionPhase(state, phase) {
|
|
310
|
+
if (state.phase === phase)
|
|
311
|
+
return state;
|
|
312
|
+
return { ...state, phase, updatedAt: nowIso() };
|
|
313
|
+
}
|
|
314
|
+
export function setDevNextAction(state, nextAction) {
|
|
315
|
+
if (state.nextAction === nextAction)
|
|
316
|
+
return state;
|
|
317
|
+
return { ...state, nextAction, updatedAt: nowIso() };
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Recompute phase from the current state + filesystem scan. Used after plan
|
|
321
|
+
* generation and validation to keep `phase` in sync with reality.
|
|
322
|
+
*/
|
|
323
|
+
export function recomputePhase(state, load) {
|
|
324
|
+
if (state.phase === DevSessionPhase.Completed)
|
|
325
|
+
return DevSessionPhase.Completed;
|
|
326
|
+
const lastValidation = state.validations[state.validations.length - 1];
|
|
327
|
+
if (lastValidation && !lastValidation.passed)
|
|
328
|
+
return DevSessionPhase.ValidationFailed;
|
|
329
|
+
if (state.validations.some((v) => v.passed))
|
|
330
|
+
return DevSessionPhase.Validated;
|
|
331
|
+
if (state.appliedPlans.length > 0)
|
|
332
|
+
return DevSessionPhase.Applied;
|
|
333
|
+
const reviewed = state.plans.filter((p) => p.status === DevSessionPlanStatus.Reviewed);
|
|
334
|
+
if (reviewed.length > 0 && reviewed.length === state.plans.length && state.plans.length > 0) {
|
|
335
|
+
return DevSessionPhase.Reviewed;
|
|
336
|
+
}
|
|
337
|
+
if (state.plans.some((p) => p.status === DevSessionPlanStatus.Saved || p.status === DevSessionPlanStatus.Reviewed)) {
|
|
338
|
+
return DevSessionPhase.Planned;
|
|
339
|
+
}
|
|
340
|
+
if (load.plansOnDisk.length > 0 || load.intentFiles.length > 0) {
|
|
341
|
+
return DevSessionPhase.Planned;
|
|
342
|
+
}
|
|
343
|
+
return DevSessionPhase.Started;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Returns { sessionId, planFile } when `planPath` lives under
|
|
347
|
+
* <cwd>/.sharkcraft/sessions/<id>/plans/<file>. Returns null otherwise. Uses
|
|
348
|
+
* normalized paths so trailing slashes, `..`, etc. cannot trick the detector.
|
|
349
|
+
*/
|
|
350
|
+
export function detectSessionFromPlanPath(planPath, cwd) {
|
|
351
|
+
const sessionsRoot = nodePath.resolve(getSessionsRoot(cwd));
|
|
352
|
+
const abs = nodePath.resolve(planPath);
|
|
353
|
+
const rel = nodePath.relative(sessionsRoot, abs);
|
|
354
|
+
if (rel.startsWith('..') || nodePath.isAbsolute(rel))
|
|
355
|
+
return null;
|
|
356
|
+
const parts = rel.split(nodePath.sep).filter(Boolean);
|
|
357
|
+
if (parts.length !== 3)
|
|
358
|
+
return null;
|
|
359
|
+
if (parts[1] !== 'plans')
|
|
360
|
+
return null;
|
|
361
|
+
return { sessionId: parts[0], planFile: parts[2] };
|
|
362
|
+
}
|
|
363
|
+
/** List sessions with their session.json metadata where available. */
|
|
364
|
+
export function listDevSessionsDetailed(cwd) {
|
|
365
|
+
const ids = listDevSessions(cwd);
|
|
366
|
+
const items = [];
|
|
367
|
+
for (const id of ids) {
|
|
368
|
+
const load = scanDevSession(cwd, id);
|
|
369
|
+
if (!load)
|
|
370
|
+
continue;
|
|
371
|
+
items.push({
|
|
372
|
+
id,
|
|
373
|
+
phase: load.state?.phase ?? null,
|
|
374
|
+
task: load.task,
|
|
375
|
+
createdAt: load.state?.createdAt ?? null,
|
|
376
|
+
updatedAt: load.state?.updatedAt ?? null,
|
|
377
|
+
nextAction: load.state?.nextAction ?? null,
|
|
378
|
+
legacy: load.legacy,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
return items;
|
|
382
|
+
}
|
|
383
|
+
export function getSessionsArchiveRoot(cwd) {
|
|
384
|
+
return nodePath.join(cwd, '.sharkcraft', 'sessions-archive');
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Move a session directory to .sharkcraft/sessions-archive/<id>. If a session
|
|
388
|
+
* with the same id already exists in the archive, returns archived=false with
|
|
389
|
+
* a reason rather than overwriting.
|
|
390
|
+
*/
|
|
391
|
+
export function archiveDevSession(cwd, id) {
|
|
392
|
+
const from = getDevSessionDir(cwd, id);
|
|
393
|
+
const to = nodePath.join(getSessionsArchiveRoot(cwd), id);
|
|
394
|
+
if (!existsSync(from)) {
|
|
395
|
+
return { archived: false, from, to, reason: 'source missing' };
|
|
396
|
+
}
|
|
397
|
+
if (existsSync(to)) {
|
|
398
|
+
return { archived: false, from, to, reason: 'archive entry already exists' };
|
|
399
|
+
}
|
|
400
|
+
mkdirSync(getSessionsArchiveRoot(cwd), { recursive: true });
|
|
401
|
+
renameSync(from, to);
|
|
402
|
+
return { archived: true, from, to };
|
|
403
|
+
}
|
|
404
|
+
/** Returns true when a session is considered "incomplete" — has plans/intents
|
|
405
|
+
* but is not yet at a terminal phase. Used as the safety net for `dev clean`. */
|
|
406
|
+
export function isDevSessionActive(load) {
|
|
407
|
+
if (load.state) {
|
|
408
|
+
if (load.state.phase === DevSessionPhase.Completed ||
|
|
409
|
+
load.state.phase === DevSessionPhase.Validated) {
|
|
410
|
+
return false;
|
|
411
|
+
}
|
|
412
|
+
if (load.state.plans.length > 0 || load.state.appliedPlans.length > 0)
|
|
413
|
+
return true;
|
|
414
|
+
return false;
|
|
415
|
+
}
|
|
416
|
+
// Legacy session — treat as active if there's anything on disk we shouldn't
|
|
417
|
+
// delete without explicit opt-in.
|
|
418
|
+
return load.plansOnDisk.length > 0 || load.intentFiles.length > 0;
|
|
419
|
+
}
|
|
420
|
+
export function listDevCleanCandidates(input) {
|
|
421
|
+
const now = input.now ?? Date.now();
|
|
422
|
+
const ids = listDevSessions(input.cwd);
|
|
423
|
+
const out = [];
|
|
424
|
+
for (const id of ids) {
|
|
425
|
+
const load = scanDevSession(input.cwd, id);
|
|
426
|
+
if (!load)
|
|
427
|
+
continue;
|
|
428
|
+
const ref = load.state?.updatedAt ?? load.state?.createdAt;
|
|
429
|
+
if (!ref) {
|
|
430
|
+
// Legacy session without timestamps — fall back to directory mtime.
|
|
431
|
+
try {
|
|
432
|
+
const st = statSync(load.dir);
|
|
433
|
+
const ageMs = now - st.mtimeMs;
|
|
434
|
+
if (ageMs < input.olderThanMs)
|
|
435
|
+
continue;
|
|
436
|
+
const active = isDevSessionActive(load);
|
|
437
|
+
if (active && !input.includeActive) {
|
|
438
|
+
out.push({ id, ageMs, phase: null, active, reason: 'legacy active — skipped' });
|
|
439
|
+
continue;
|
|
440
|
+
}
|
|
441
|
+
out.push({ id, ageMs, phase: null, active, reason: 'legacy session' });
|
|
442
|
+
}
|
|
443
|
+
catch {
|
|
444
|
+
// ignore
|
|
445
|
+
}
|
|
446
|
+
continue;
|
|
447
|
+
}
|
|
448
|
+
const ageMs = now - new Date(ref).valueOf();
|
|
449
|
+
if (ageMs < input.olderThanMs)
|
|
450
|
+
continue;
|
|
451
|
+
const active = isDevSessionActive(load);
|
|
452
|
+
if (active && !input.includeActive) {
|
|
453
|
+
out.push({
|
|
454
|
+
id,
|
|
455
|
+
ageMs,
|
|
456
|
+
phase: load.state?.phase ?? null,
|
|
457
|
+
active,
|
|
458
|
+
reason: 'active session — skipped',
|
|
459
|
+
});
|
|
460
|
+
continue;
|
|
461
|
+
}
|
|
462
|
+
out.push({
|
|
463
|
+
id,
|
|
464
|
+
ageMs,
|
|
465
|
+
phase: load.state?.phase ?? null,
|
|
466
|
+
active,
|
|
467
|
+
reason: 'eligible',
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
return out;
|
|
471
|
+
}
|
|
472
|
+
function diffStringSet(a, b) {
|
|
473
|
+
const setA = new Set(a);
|
|
474
|
+
const setB = new Set(b);
|
|
475
|
+
const both = [];
|
|
476
|
+
const onlyA = [];
|
|
477
|
+
const onlyB = [];
|
|
478
|
+
for (const v of setA)
|
|
479
|
+
(setB.has(v) ? both : onlyA).push(v);
|
|
480
|
+
for (const v of setB)
|
|
481
|
+
if (!setA.has(v))
|
|
482
|
+
onlyB.push(v);
|
|
483
|
+
return { onlyA, onlyB, both };
|
|
484
|
+
}
|
|
485
|
+
function planNames(state) {
|
|
486
|
+
return state ? state.plans.map((p) => p.name) : [];
|
|
487
|
+
}
|
|
488
|
+
function appliedPlanNames(state) {
|
|
489
|
+
return state ? state.appliedPlans.map((a) => a.file) : [];
|
|
490
|
+
}
|
|
491
|
+
function packetIds(load, key) {
|
|
492
|
+
const list = load.packet?.[key];
|
|
493
|
+
if (!list)
|
|
494
|
+
return [];
|
|
495
|
+
return list.map((x) => x.id).filter((x) => typeof x === 'string');
|
|
496
|
+
}
|
|
497
|
+
function packetStrings(load, key) {
|
|
498
|
+
const list = load.packet?.[key];
|
|
499
|
+
if (!list)
|
|
500
|
+
return [];
|
|
501
|
+
return [...list];
|
|
502
|
+
}
|
|
503
|
+
/** Diff two loaded dev sessions on the fields the spec calls out. Pure: no IO. */
|
|
504
|
+
export function diffDevSessions(a, b) {
|
|
505
|
+
const aSide = {
|
|
506
|
+
id: a.id,
|
|
507
|
+
phase: a.state?.phase ?? null,
|
|
508
|
+
task: a.task,
|
|
509
|
+
legacy: a.legacy,
|
|
510
|
+
};
|
|
511
|
+
const bSide = {
|
|
512
|
+
id: b.id,
|
|
513
|
+
phase: b.state?.phase ?? null,
|
|
514
|
+
task: b.task,
|
|
515
|
+
legacy: b.legacy,
|
|
516
|
+
};
|
|
517
|
+
const phaseA = aSide.phase;
|
|
518
|
+
const phaseB = bSide.phase;
|
|
519
|
+
const pipelineA = a.state?.selectedPipeline ?? null;
|
|
520
|
+
const pipelineB = b.state?.selectedPipeline ?? null;
|
|
521
|
+
const nextA = a.state?.nextAction ?? null;
|
|
522
|
+
const nextB = b.state?.nextAction ?? null;
|
|
523
|
+
return {
|
|
524
|
+
a: aSide,
|
|
525
|
+
b: bSide,
|
|
526
|
+
phase: { sameValue: phaseA === phaseB ? phaseA : null, changed: phaseA !== phaseB },
|
|
527
|
+
task: { sameValue: a.task === b.task ? a.task : null, changed: a.task !== b.task },
|
|
528
|
+
selectedPipeline: {
|
|
529
|
+
sameValue: pipelineA === pipelineB ? pipelineA : null,
|
|
530
|
+
changed: pipelineA !== pipelineB,
|
|
531
|
+
},
|
|
532
|
+
selectedTemplates: diffStringSet(a.state?.selectedTemplates ?? [], b.state?.selectedTemplates ?? []),
|
|
533
|
+
plans: diffStringSet(planNames(a.state), planNames(b.state)),
|
|
534
|
+
appliedPlans: diffStringSet(appliedPlanNames(a.state), appliedPlanNames(b.state)),
|
|
535
|
+
validations: {
|
|
536
|
+
aCount: a.state?.validations.length ?? 0,
|
|
537
|
+
bCount: b.state?.validations.length ?? 0,
|
|
538
|
+
},
|
|
539
|
+
reports: diffStringSet(a.state?.reports ?? [], b.state?.reports ?? []),
|
|
540
|
+
nextAction: { sameValue: nextA === nextB ? nextA : null, changed: nextA !== nextB },
|
|
541
|
+
topRules: diffStringSet(packetIds(a, 'relevantRules'), packetIds(b, 'relevantRules')),
|
|
542
|
+
topTemplates: diffStringSet(packetIds(a, 'relevantTemplates'), packetIds(b, 'relevantTemplates')),
|
|
543
|
+
forbiddenActions: diffStringSet(packetStrings(a, 'forbiddenActions'), packetStrings(b, 'forbiddenActions')),
|
|
544
|
+
verificationCommands: diffStringSet(packetStrings(a, 'verificationCommands'), packetStrings(b, 'verificationCommands')),
|
|
545
|
+
cliCommands: diffStringSet(packetStrings(a, 'recommendedCliCommands'), packetStrings(b, 'recommendedCliCommands')),
|
|
546
|
+
mcpTools: diffStringSet(packetStrings(a, 'recommendedMcpTools'), packetStrings(b, 'recommendedMcpTools')),
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
/** Parse durations like "7d", "2w", "24h", "30m". Returns ms or null. */
|
|
550
|
+
export function parseDurationToMs(input) {
|
|
551
|
+
const m = /^(\d+(?:\.\d+)?)\s*(ms|s|m|h|d|w)$/i.exec(input.trim());
|
|
552
|
+
if (!m)
|
|
553
|
+
return null;
|
|
554
|
+
const value = Number(m[1]);
|
|
555
|
+
const unit = m[2].toLowerCase();
|
|
556
|
+
const factors = {
|
|
557
|
+
ms: 1,
|
|
558
|
+
s: 1000,
|
|
559
|
+
m: 60_000,
|
|
560
|
+
h: 3_600_000,
|
|
561
|
+
d: 86_400_000,
|
|
562
|
+
w: 604_800_000,
|
|
563
|
+
};
|
|
564
|
+
const f = factors[unit];
|
|
565
|
+
if (f === undefined || !Number.isFinite(value))
|
|
566
|
+
return null;
|
|
567
|
+
return value * f;
|
|
568
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const DIAGNOSTICS_SUGGEST_SCHEMA = "sharkcraft.diagnostics-suggest/v1";
|
|
2
|
+
export interface IDiagnosticsSuggestion {
|
|
3
|
+
code: string;
|
|
4
|
+
title: string;
|
|
5
|
+
confidence: 'low' | 'medium' | 'high';
|
|
6
|
+
matchedPattern: string;
|
|
7
|
+
nextCommand: string;
|
|
8
|
+
docsLink?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface IDiagnosticsSuggestReport {
|
|
11
|
+
schema: typeof DIAGNOSTICS_SUGGEST_SCHEMA;
|
|
12
|
+
input: string;
|
|
13
|
+
topSuggestion?: IDiagnosticsSuggestion;
|
|
14
|
+
candidates: readonly IDiagnosticsSuggestion[];
|
|
15
|
+
}
|
|
16
|
+
export declare function suggestDiagnostic(input: string): IDiagnosticsSuggestReport;
|
|
17
|
+
//# sourceMappingURL=diagnostics-suggest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics-suggest.d.ts","sourceRoot":"","sources":["../src/diagnostics-suggest.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAE9E,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,OAAO,0BAA0B,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,sBAAsB,CAAC;IACvC,UAAU,EAAE,SAAS,sBAAsB,EAAE,CAAC;CAC/C;AA4BD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,yBAAyB,CAqC1E"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Diagnostics suggest — pattern-match stderr against the diagnostics
|
|
3
|
+
* registry and return the most likely diagnostic + next command.
|
|
4
|
+
*/
|
|
5
|
+
import { buildDiagnosticByCode, listDiagnostics } from "./failure-diagnostics.js";
|
|
6
|
+
export const DIAGNOSTICS_SUGGEST_SCHEMA = 'sharkcraft.diagnostics-suggest/v1';
|
|
7
|
+
const MATCHERS = [
|
|
8
|
+
{ code: 'missing-sharkcraft-config', patterns: [/sharkcraft\.config\.ts.*not found/i, /no sharkcraft config/i, /missing sharkcraft folder/i] },
|
|
9
|
+
{ code: 'missing-node-modules', patterns: [/cannot find module/i, /MODULE_NOT_FOUND/i, /node_modules.*missing/i] },
|
|
10
|
+
{ code: 'pack-helper-missing', patterns: [/Export named .* not found/i, /helper .* missing/i, /symbol .* not exported/i] },
|
|
11
|
+
{ code: 'mcp-cache-miss', patterns: [/cache[-\s]?miss/i, /chunk .* not found/i, /briefId .* not found/i] },
|
|
12
|
+
{ code: 'adoption-checkpoint-stale', patterns: [/checkpoint.*stale/i, /adoption.*regenerate/i] },
|
|
13
|
+
{ code: 'unknown-command', patterns: [/Unknown command/i, /unknown subcommand/i] },
|
|
14
|
+
{ code: 'missing-template-variables', patterns: [/missing variable/i, /required variable/i, /template variable .* not provided/i] },
|
|
15
|
+
{ code: 'unsafe-path-refused', patterns: [/unsafe path/i, /refusing to write outside/i, /path traversal/i] },
|
|
16
|
+
{ code: 'failed-verification', patterns: [/verification (failed|command failed)/i, /typecheck failed/i, /tests failed/i] },
|
|
17
|
+
{ code: 'release-readiness-blocker', patterns: [/readiness.*blocker/i, /release.*not ready/i] },
|
|
18
|
+
{ code: 'plan-signature-mismatch', patterns: [/signature mismatch/i, /invalid plan signature/i, /unsigned plan/i] },
|
|
19
|
+
{ code: 'workflow-file-not-found', patterns: [/\.github\/workflows\/.*not found/i, /workflow file .* missing/i] },
|
|
20
|
+
];
|
|
21
|
+
function confidenceFromMatches(matches) {
|
|
22
|
+
if (matches >= 3)
|
|
23
|
+
return 'high';
|
|
24
|
+
if (matches >= 2)
|
|
25
|
+
return 'medium';
|
|
26
|
+
return 'low';
|
|
27
|
+
}
|
|
28
|
+
export function suggestDiagnostic(input) {
|
|
29
|
+
const text = input ?? '';
|
|
30
|
+
const registry = new Map();
|
|
31
|
+
for (const e of listDiagnostics())
|
|
32
|
+
registry.set(e.code, e);
|
|
33
|
+
const candidates = [];
|
|
34
|
+
for (const m of MATCHERS) {
|
|
35
|
+
const entry = registry.get(m.code);
|
|
36
|
+
if (!entry)
|
|
37
|
+
continue;
|
|
38
|
+
let hits = 0;
|
|
39
|
+
let matched = '';
|
|
40
|
+
for (const p of m.patterns) {
|
|
41
|
+
if (p.test(text)) {
|
|
42
|
+
hits++;
|
|
43
|
+
if (!matched)
|
|
44
|
+
matched = p.source;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
if (hits === 0)
|
|
48
|
+
continue;
|
|
49
|
+
const built = buildDiagnosticByCode(entry.code, {});
|
|
50
|
+
candidates.push({
|
|
51
|
+
code: entry.code,
|
|
52
|
+
title: built.problem,
|
|
53
|
+
confidence: confidenceFromMatches(hits),
|
|
54
|
+
matchedPattern: matched,
|
|
55
|
+
nextCommand: built.nextCommand,
|
|
56
|
+
...(built.docsLink ? { docsLink: built.docsLink } : {}),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
candidates.sort((a, b) => {
|
|
60
|
+
const order = { high: 3, medium: 2, low: 1 };
|
|
61
|
+
return order[b.confidence] - order[a.confidence];
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
schema: DIAGNOSTICS_SUGGEST_SCHEMA,
|
|
65
|
+
input: text,
|
|
66
|
+
...(candidates[0] ? { topSuggestion: candidates[0] } : {}),
|
|
67
|
+
candidates,
|
|
68
|
+
};
|
|
69
|
+
}
|