@shrkcrft/cli 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/asset-preview/apply-action-hint-stub.d.ts +28 -0
- package/dist/asset-preview/apply-action-hint-stub.d.ts.map +1 -0
- package/dist/asset-preview/apply-action-hint-stub.js +170 -0
- package/dist/asset-preview/apply-asset-preview.d.ts +31 -0
- package/dist/asset-preview/apply-asset-preview.d.ts.map +1 -0
- package/dist/asset-preview/apply-asset-preview.js +210 -0
- package/dist/asset-preview/apply-knowledge-stale-fix.d.ts +37 -0
- package/dist/asset-preview/apply-knowledge-stale-fix.d.ts.map +1 -0
- package/dist/asset-preview/apply-knowledge-stale-fix.js +344 -0
- package/dist/asset-preview/apply-missing-barrel.d.ts +15 -0
- package/dist/asset-preview/apply-missing-barrel.d.ts.map +1 -0
- package/dist/asset-preview/apply-missing-barrel.js +65 -0
- package/dist/asset-preview/apply-template-drift-fix.d.ts +21 -0
- package/dist/asset-preview/apply-template-drift-fix.d.ts.map +1 -0
- package/dist/asset-preview/apply-template-drift-fix.js +125 -0
- package/dist/asset-preview/apply-template-update.d.ts +43 -0
- package/dist/asset-preview/apply-template-update.d.ts.map +1 -0
- package/dist/asset-preview/apply-template-update.js +257 -0
- package/dist/asset-preview/entry-mutator.d.ts +106 -0
- package/dist/asset-preview/entry-mutator.d.ts.map +1 -0
- package/dist/asset-preview/entry-mutator.js +428 -0
- package/dist/authoring/authoring-kit.d.ts +36 -0
- package/dist/authoring/authoring-kit.d.ts.map +1 -0
- package/dist/authoring/authoring-kit.js +106 -0
- package/dist/command-registry.d.ts +158 -0
- package/dist/command-registry.d.ts.map +1 -0
- package/dist/command-registry.js +348 -0
- package/dist/commands/apply.command.d.ts +3 -0
- package/dist/commands/apply.command.d.ts.map +1 -0
- package/dist/commands/apply.command.js +879 -0
- package/dist/commands/architecture.command.d.ts +5 -0
- package/dist/commands/architecture.command.d.ts.map +1 -0
- package/dist/commands/architecture.command.js +141 -0
- package/dist/commands/ask.command.d.ts +3 -0
- package/dist/commands/ask.command.d.ts.map +1 -0
- package/dist/commands/ask.command.js +58 -0
- package/dist/commands/audit.command.d.ts +3 -0
- package/dist/commands/audit.command.d.ts.map +1 -0
- package/dist/commands/audit.command.js +141 -0
- package/dist/commands/biome.command.d.ts +7 -0
- package/dist/commands/biome.command.d.ts.map +1 -0
- package/dist/commands/biome.command.js +350 -0
- package/dist/commands/boundaries.command.d.ts +9 -0
- package/dist/commands/boundaries.command.d.ts.map +1 -0
- package/dist/commands/boundaries.command.js +314 -0
- package/dist/commands/brief.command.d.ts +3 -0
- package/dist/commands/brief.command.d.ts.map +1 -0
- package/dist/commands/brief.command.js +206 -0
- package/dist/commands/bundle.command.d.ts +3 -0
- package/dist/commands/bundle.command.d.ts.map +1 -0
- package/dist/commands/bundle.command.js +1183 -0
- package/dist/commands/changes.command.d.ts +3 -0
- package/dist/commands/changes.command.d.ts.map +1 -0
- package/dist/commands/changes.command.js +155 -0
- package/dist/commands/check.command.d.ts +3 -0
- package/dist/commands/check.command.d.ts.map +1 -0
- package/dist/commands/check.command.js +553 -0
- package/dist/commands/checks.command.d.ts +29 -0
- package/dist/commands/checks.command.d.ts.map +1 -0
- package/dist/commands/checks.command.js +521 -0
- package/dist/commands/ci.command.d.ts +3 -0
- package/dist/commands/ci.command.d.ts.map +1 -0
- package/dist/commands/ci.command.js +680 -0
- package/dist/commands/codemod.command.d.ts +3 -0
- package/dist/commands/codemod.command.d.ts.map +1 -0
- package/dist/commands/codemod.command.js +130 -0
- package/dist/commands/command-catalog.d.ts +265 -0
- package/dist/commands/command-catalog.d.ts.map +1 -0
- package/dist/commands/command-catalog.js +3242 -0
- package/dist/commands/commands.command.d.ts +92 -0
- package/dist/commands/commands.command.d.ts.map +1 -0
- package/dist/commands/commands.command.js +1208 -0
- package/dist/commands/constructs.command.d.ts +15 -0
- package/dist/commands/constructs.command.d.ts.map +1 -0
- package/dist/commands/constructs.command.js +669 -0
- package/dist/commands/context.command.d.ts +3 -0
- package/dist/commands/context.command.d.ts.map +1 -0
- package/dist/commands/context.command.js +120 -0
- package/dist/commands/contract-gate.command.d.ts +5 -0
- package/dist/commands/contract-gate.command.d.ts.map +1 -0
- package/dist/commands/contract-gate.command.js +208 -0
- package/dist/commands/contract-templates.command.d.ts +8 -0
- package/dist/commands/contract-templates.command.d.ts.map +1 -0
- package/dist/commands/contract-templates.command.js +151 -0
- package/dist/commands/contract.command.d.ts +3 -0
- package/dist/commands/contract.command.d.ts.map +1 -0
- package/dist/commands/contract.command.js +105 -0
- package/dist/commands/conventions.command.d.ts +8 -0
- package/dist/commands/conventions.command.d.ts.map +1 -0
- package/dist/commands/conventions.command.js +169 -0
- package/dist/commands/coverage.command.d.ts +3 -0
- package/dist/commands/coverage.command.d.ts.map +1 -0
- package/dist/commands/coverage.command.js +56 -0
- package/dist/commands/daily.commands.d.ts +5 -0
- package/dist/commands/daily.commands.d.ts.map +1 -0
- package/dist/commands/daily.commands.js +224 -0
- package/dist/commands/dashboard-export.command.d.ts +4 -0
- package/dist/commands/dashboard-export.command.d.ts.map +1 -0
- package/dist/commands/dashboard-export.command.js +86 -0
- package/dist/commands/dashboard.command.d.ts +3 -0
- package/dist/commands/dashboard.command.d.ts.map +1 -0
- package/dist/commands/dashboard.command.js +106 -0
- package/dist/commands/dev.command.d.ts +3 -0
- package/dist/commands/dev.command.d.ts.map +1 -0
- package/dist/commands/dev.command.js +1392 -0
- package/dist/commands/diagnostics.command.d.ts +5 -0
- package/dist/commands/diagnostics.command.d.ts.map +1 -0
- package/dist/commands/diagnostics.command.js +97 -0
- package/dist/commands/docs.command.d.ts +4 -0
- package/dist/commands/docs.command.d.ts.map +1 -0
- package/dist/commands/docs.command.js +34 -0
- package/dist/commands/doctor.command.d.ts +7 -0
- package/dist/commands/doctor.command.d.ts.map +1 -0
- package/dist/commands/doctor.command.js +681 -0
- package/dist/commands/drift.command.d.ts +3 -0
- package/dist/commands/drift.command.d.ts.map +1 -0
- package/dist/commands/drift.command.js +124 -0
- package/dist/commands/eslint.command.d.ts +7 -0
- package/dist/commands/eslint.command.d.ts.map +1 -0
- package/dist/commands/eslint.command.js +423 -0
- package/dist/commands/explore.command.d.ts +3 -0
- package/dist/commands/explore.command.d.ts.map +1 -0
- package/dist/commands/explore.command.js +65 -0
- package/dist/commands/export-bundle.command.d.ts +6 -0
- package/dist/commands/export-bundle.command.d.ts.map +1 -0
- package/dist/commands/export-bundle.command.js +96 -0
- package/dist/commands/export.command.d.ts +3 -0
- package/dist/commands/export.command.d.ts.map +1 -0
- package/dist/commands/export.command.js +83 -0
- package/dist/commands/feedback-dispatch.command.d.ts +12 -0
- package/dist/commands/feedback-dispatch.command.d.ts.map +1 -0
- package/dist/commands/feedback-dispatch.command.js +63 -0
- package/dist/commands/feedback.command.d.ts +11 -0
- package/dist/commands/feedback.command.d.ts.map +1 -0
- package/dist/commands/feedback.command.js +336 -0
- package/dist/commands/fix.command.d.ts +3 -0
- package/dist/commands/fix.command.d.ts.map +1 -0
- package/dist/commands/fix.command.js +776 -0
- package/dist/commands/gen.command.d.ts +3 -0
- package/dist/commands/gen.command.d.ts.map +1 -0
- package/dist/commands/gen.command.js +136 -0
- package/dist/commands/git.command.d.ts +6 -0
- package/dist/commands/git.command.d.ts.map +1 -0
- package/dist/commands/git.command.js +81 -0
- package/dist/commands/graph.command.d.ts +3 -0
- package/dist/commands/graph.command.d.ts.map +1 -0
- package/dist/commands/graph.command.js +287 -0
- package/dist/commands/grounding.command.d.ts +7 -0
- package/dist/commands/grounding.command.d.ts.map +1 -0
- package/dist/commands/grounding.command.js +54 -0
- package/dist/commands/help.command.d.ts +20 -0
- package/dist/commands/help.command.d.ts.map +1 -0
- package/dist/commands/help.command.js +127 -0
- package/dist/commands/helper.command.d.ts +6 -0
- package/dist/commands/helper.command.d.ts.map +1 -0
- package/dist/commands/helper.command.js +170 -0
- package/dist/commands/ide.command.d.ts +6 -0
- package/dist/commands/ide.command.d.ts.map +1 -0
- package/dist/commands/ide.command.js +340 -0
- package/dist/commands/impact.command.d.ts +3 -0
- package/dist/commands/impact.command.d.ts.map +1 -0
- package/dist/commands/impact.command.js +819 -0
- package/dist/commands/import.command.d.ts +3 -0
- package/dist/commands/import.command.d.ts.map +1 -0
- package/dist/commands/import.command.js +115 -0
- package/dist/commands/infer.command.d.ts +3 -0
- package/dist/commands/infer.command.d.ts.map +1 -0
- package/dist/commands/infer.command.js +227 -0
- package/dist/commands/ingest.command.d.ts +6 -0
- package/dist/commands/ingest.command.d.ts.map +1 -0
- package/dist/commands/ingest.command.js +532 -0
- package/dist/commands/init.command.d.ts +3 -0
- package/dist/commands/init.command.d.ts.map +1 -0
- package/dist/commands/init.command.js +301 -0
- package/dist/commands/inspect.command.d.ts +3 -0
- package/dist/commands/inspect.command.d.ts.map +1 -0
- package/dist/commands/inspect.command.js +122 -0
- package/dist/commands/knowledge-author.command.d.ts +22 -0
- package/dist/commands/knowledge-author.command.d.ts.map +1 -0
- package/dist/commands/knowledge-author.command.js +366 -0
- package/dist/commands/knowledge-propose.command.d.ts +3 -0
- package/dist/commands/knowledge-propose.command.d.ts.map +1 -0
- package/dist/commands/knowledge-propose.command.js +125 -0
- package/dist/commands/knowledge.command.d.ts +18 -0
- package/dist/commands/knowledge.command.d.ts.map +1 -0
- package/dist/commands/knowledge.command.js +538 -0
- package/dist/commands/languages.command.d.ts +3 -0
- package/dist/commands/languages.command.d.ts.map +1 -0
- package/dist/commands/languages.command.js +300 -0
- package/dist/commands/lint.command.d.ts +15 -0
- package/dist/commands/lint.command.d.ts.map +1 -0
- package/dist/commands/lint.command.js +194 -0
- package/dist/commands/mcp.command.d.ts +3 -0
- package/dist/commands/mcp.command.d.ts.map +1 -0
- package/dist/commands/mcp.command.js +74 -0
- package/dist/commands/memory.command.d.ts +11 -0
- package/dist/commands/memory.command.d.ts.map +1 -0
- package/dist/commands/memory.command.js +264 -0
- package/dist/commands/onboard.command.d.ts +3 -0
- package/dist/commands/onboard.command.d.ts.map +1 -0
- package/dist/commands/onboard.command.js +650 -0
- package/dist/commands/orchestrate.command.d.ts +3 -0
- package/dist/commands/orchestrate.command.d.ts.map +1 -0
- package/dist/commands/orchestrate.command.js +49 -0
- package/dist/commands/owners.command.d.ts +5 -0
- package/dist/commands/owners.command.d.ts.map +1 -0
- package/dist/commands/owners.command.js +113 -0
- package/dist/commands/ownership.command.d.ts +5 -0
- package/dist/commands/ownership.command.d.ts.map +1 -0
- package/dist/commands/ownership.command.js +117 -0
- package/dist/commands/pack-author.command.d.ts +30 -0
- package/dist/commands/pack-author.command.d.ts.map +1 -0
- package/dist/commands/pack-author.command.js +242 -0
- package/dist/commands/packs-new.d.ts +27 -0
- package/dist/commands/packs-new.d.ts.map +1 -0
- package/dist/commands/packs-new.js +805 -0
- package/dist/commands/packs.command.d.ts +15 -0
- package/dist/commands/packs.command.d.ts.map +1 -0
- package/dist/commands/packs.command.js +958 -0
- package/dist/commands/paths.command.d.ts +6 -0
- package/dist/commands/paths.command.d.ts.map +1 -0
- package/dist/commands/paths.command.js +97 -0
- package/dist/commands/pipelines.command.d.ts +9 -0
- package/dist/commands/pipelines.command.d.ts.map +1 -0
- package/dist/commands/pipelines.command.js +308 -0
- package/dist/commands/plan-check.command.d.ts +27 -0
- package/dist/commands/plan-check.command.d.ts.map +1 -0
- package/dist/commands/plan-check.command.js +150 -0
- package/dist/commands/plan-simulate.command.d.ts +3 -0
- package/dist/commands/plan-simulate.command.d.ts.map +1 -0
- package/dist/commands/plan-simulate.command.js +60 -0
- package/dist/commands/plan.command.d.ts +8 -0
- package/dist/commands/plan.command.d.ts.map +1 -0
- package/dist/commands/plan.command.js +139 -0
- package/dist/commands/playbooks.command.d.ts +10 -0
- package/dist/commands/playbooks.command.d.ts.map +1 -0
- package/dist/commands/playbooks.command.js +296 -0
- package/dist/commands/plugin.command.d.ts +11 -0
- package/dist/commands/plugin.command.d.ts.map +1 -0
- package/dist/commands/plugin.command.js +394 -0
- package/dist/commands/policy.command.d.ts +8 -0
- package/dist/commands/policy.command.d.ts.map +1 -0
- package/dist/commands/policy.command.js +451 -0
- package/dist/commands/pr.command.d.ts +3 -0
- package/dist/commands/pr.command.d.ts.map +1 -0
- package/dist/commands/pr.command.js +132 -0
- package/dist/commands/preflight.command.d.ts +3 -0
- package/dist/commands/preflight.command.d.ts.map +1 -0
- package/dist/commands/preflight.command.js +102 -0
- package/dist/commands/presets.command.d.ts +17 -0
- package/dist/commands/presets.command.d.ts.map +1 -0
- package/dist/commands/presets.command.js +647 -0
- package/dist/commands/profiles.command.d.ts +7 -0
- package/dist/commands/profiles.command.d.ts.map +1 -0
- package/dist/commands/profiles.command.js +151 -0
- package/dist/commands/provenance.command.d.ts +26 -0
- package/dist/commands/provenance.command.d.ts.map +1 -0
- package/dist/commands/provenance.command.js +237 -0
- package/dist/commands/quality.command.d.ts +5 -0
- package/dist/commands/quality.command.d.ts.map +1 -0
- package/dist/commands/quality.command.js +69 -0
- package/dist/commands/recommend.command.d.ts +4 -0
- package/dist/commands/recommend.command.d.ts.map +1 -0
- package/dist/commands/recommend.command.js +270 -0
- package/dist/commands/registrations.command.d.ts +3 -0
- package/dist/commands/registrations.command.d.ts.map +1 -0
- package/dist/commands/registrations.command.js +300 -0
- package/dist/commands/registry.command.d.ts +4 -0
- package/dist/commands/registry.command.d.ts.map +1 -0
- package/dist/commands/registry.command.js +37 -0
- package/dist/commands/release.command.d.ts +4 -0
- package/dist/commands/release.command.d.ts.map +1 -0
- package/dist/commands/release.command.js +639 -0
- package/dist/commands/repo.command.d.ts +3 -0
- package/dist/commands/repo.command.d.ts.map +1 -0
- package/dist/commands/repo.command.js +24 -0
- package/dist/commands/report.command.d.ts +3 -0
- package/dist/commands/report.command.d.ts.map +1 -0
- package/dist/commands/report.command.js +511 -0
- package/dist/commands/reposet.command.d.ts +6 -0
- package/dist/commands/reposet.command.d.ts.map +1 -0
- package/dist/commands/reposet.command.js +120 -0
- package/dist/commands/review.command.d.ts +3 -0
- package/dist/commands/review.command.d.ts.map +1 -0
- package/dist/commands/review.command.js +354 -0
- package/dist/commands/risk.command.d.ts +3 -0
- package/dist/commands/risk.command.d.ts.map +1 -0
- package/dist/commands/risk.command.js +56 -0
- package/dist/commands/rounds.command.d.ts +8 -0
- package/dist/commands/rounds.command.d.ts.map +1 -0
- package/dist/commands/rounds.command.js +180 -0
- package/dist/commands/rules.command.d.ts +49 -0
- package/dist/commands/rules.command.d.ts.map +1 -0
- package/dist/commands/rules.command.js +435 -0
- package/dist/commands/runtime.command.d.ts +3 -0
- package/dist/commands/runtime.command.d.ts.map +1 -0
- package/dist/commands/runtime.command.js +56 -0
- package/dist/commands/safety.command.d.ts +3 -0
- package/dist/commands/safety.command.d.ts.map +1 -0
- package/dist/commands/safety.command.js +117 -0
- package/dist/commands/scaffolds.command.d.ts +5 -0
- package/dist/commands/scaffolds.command.d.ts.map +1 -0
- package/dist/commands/scaffolds.command.js +122 -0
- package/dist/commands/schemas.command.d.ts +21 -0
- package/dist/commands/schemas.command.d.ts.map +1 -0
- package/dist/commands/schemas.command.js +296 -0
- package/dist/commands/search.command.d.ts +12 -0
- package/dist/commands/search.command.d.ts.map +1 -0
- package/dist/commands/search.command.js +275 -0
- package/dist/commands/self-config.command.d.ts +7 -0
- package/dist/commands/self-config.command.d.ts.map +1 -0
- package/dist/commands/self-config.command.js +156 -0
- package/dist/commands/self.command.d.ts +3 -0
- package/dist/commands/self.command.d.ts.map +1 -0
- package/dist/commands/self.command.js +117 -0
- package/dist/commands/simulate.command.d.ts +3 -0
- package/dist/commands/simulate.command.d.ts.map +1 -0
- package/dist/commands/simulate.command.js +54 -0
- package/dist/commands/spec.command.d.ts +29 -0
- package/dist/commands/spec.command.d.ts.map +1 -0
- package/dist/commands/spec.command.js +985 -0
- package/dist/commands/start-here.command.d.ts +3 -0
- package/dist/commands/start-here.command.d.ts.map +1 -0
- package/dist/commands/start-here.command.js +35 -0
- package/dist/commands/stats.command.d.ts +3 -0
- package/dist/commands/stats.command.d.ts.map +1 -0
- package/dist/commands/stats.command.js +88 -0
- package/dist/commands/surface.command.d.ts +15 -0
- package/dist/commands/surface.command.d.ts.map +1 -0
- package/dist/commands/surface.command.js +328 -0
- package/dist/commands/task-context.command.d.ts +7 -0
- package/dist/commands/task-context.command.d.ts.map +1 -0
- package/dist/commands/task-context.command.js +646 -0
- package/dist/commands/task.command.d.ts +3 -0
- package/dist/commands/task.command.d.ts.map +1 -0
- package/dist/commands/task.command.js +301 -0
- package/dist/commands/template-quality.command.d.ts +5 -0
- package/dist/commands/template-quality.command.d.ts.map +1 -0
- package/dist/commands/template-quality.command.js +128 -0
- package/dist/commands/templates.command.d.ts +26 -0
- package/dist/commands/templates.command.d.ts.map +1 -0
- package/dist/commands/templates.command.js +964 -0
- package/dist/commands/test.command.d.ts +3 -0
- package/dist/commands/test.command.d.ts.map +1 -0
- package/dist/commands/test.command.js +262 -0
- package/dist/commands/tests.command.d.ts +5 -0
- package/dist/commands/tests.command.d.ts.map +1 -0
- package/dist/commands/tests.command.js +97 -0
- package/dist/commands/trace.command.d.ts +3 -0
- package/dist/commands/trace.command.d.ts.map +1 -0
- package/dist/commands/trace.command.js +121 -0
- package/dist/commands/upgrade.command.d.ts +4 -0
- package/dist/commands/upgrade.command.d.ts.map +1 -0
- package/dist/commands/upgrade.command.js +43 -0
- package/dist/commands/version.command.d.ts +3 -0
- package/dist/commands/version.command.d.ts.map +1 -0
- package/dist/commands/version.command.js +10 -0
- package/dist/commands/why.command.d.ts +24 -0
- package/dist/commands/why.command.d.ts.map +1 -0
- package/dist/commands/why.command.js +119 -0
- package/dist/dashboard/dashboard-api-server.d.ts +21 -0
- package/dist/dashboard/dashboard-api-server.d.ts.map +1 -0
- package/dist/dashboard/dashboard-api-server.js +410 -0
- package/dist/dashboard/live-session-server.d.ts +18 -0
- package/dist/dashboard/live-session-server.d.ts.map +1 -0
- package/dist/dashboard/live-session-server.js +133 -0
- package/dist/diff/collect-changed-paths.d.ts +27 -0
- package/dist/diff/collect-changed-paths.d.ts.map +1 -0
- package/dist/diff/collect-changed-paths.js +68 -0
- package/dist/doctor/doctor-tags.d.ts +63 -0
- package/dist/doctor/doctor-tags.d.ts.map +1 -0
- package/dist/doctor/doctor-tags.js +146 -0
- package/dist/export/export-formats.d.ts +22 -0
- package/dist/export/export-formats.d.ts.map +1 -0
- package/dist/export/export-formats.js +135 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/init/detected-block.d.ts +57 -0
- package/dist/init/detected-block.d.ts.map +1 -0
- package/dist/init/detected-block.js +197 -0
- package/dist/init/gitignore.d.ts +30 -0
- package/dist/init/gitignore.d.ts.map +1 -0
- package/dist/init/gitignore.js +110 -0
- package/dist/init/init-templates.d.ts +6 -0
- package/dist/init/init-templates.d.ts.map +1 -0
- package/dist/init/init-templates.js +413 -0
- package/dist/main.d.ts +18 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +699 -0
- package/dist/output/failure-hints.d.ts +55 -0
- package/dist/output/failure-hints.d.ts.map +1 -0
- package/dist/output/failure-hints.js +159 -0
- package/dist/output/format-output.d.ts +9 -0
- package/dist/output/format-output.d.ts.map +1 -0
- package/dist/output/format-output.js +26 -0
- package/dist/output/print-error.d.ts +3 -0
- package/dist/output/print-error.d.ts.map +1 -0
- package/dist/output/print-error.js +14 -0
- package/dist/output/watch-loop.d.ts +37 -0
- package/dist/output/watch-loop.d.ts.map +1 -0
- package/dist/output/watch-loop.js +115 -0
- package/dist/schemas/json-schemas.d.ts +1630 -0
- package/dist/schemas/json-schemas.d.ts.map +1 -0
- package/dist/schemas/json-schemas.js +811 -0
- package/dist/surface/about.d.ts +10 -0
- package/dist/surface/about.d.ts.map +1 -0
- package/dist/surface/about.js +53 -0
- package/dist/surface/load-surface-context.d.ts +34 -0
- package/dist/surface/load-surface-context.d.ts.map +1 -0
- package/dist/surface/load-surface-context.js +100 -0
- package/dist/surface/no-args-landing.d.ts +7 -0
- package/dist/surface/no-args-landing.d.ts.map +1 -0
- package/dist/surface/no-args-landing.js +36 -0
- package/dist/surface/not-enabled-error.d.ts +24 -0
- package/dist/surface/not-enabled-error.d.ts.map +1 -0
- package/dist/surface/not-enabled-error.js +36 -0
- package/dist/surface/profiles.d.ts +37 -0
- package/dist/surface/profiles.d.ts.map +1 -0
- package/dist/surface/profiles.js +151 -0
- package/dist/surface/shape-defaults.d.ts +21 -0
- package/dist/surface/shape-defaults.d.ts.map +1 -0
- package/dist/surface/shape-defaults.js +50 -0
- package/dist/surface/spine-extractor.d.ts +38 -0
- package/dist/surface/spine-extractor.d.ts.map +1 -0
- package/dist/surface/spine-extractor.js +100 -0
- package/dist/surface/surface-config-writer.d.ts +59 -0
- package/dist/surface/surface-config-writer.d.ts.map +1 -0
- package/dist/surface/surface-config-writer.js +135 -0
- package/dist/surface/surface-summary.d.ts +66 -0
- package/dist/surface/surface-summary.d.ts.map +1 -0
- package/dist/surface/surface-summary.js +162 -0
- package/dist/surface/tier.d.ts +100 -0
- package/dist/surface/tier.d.ts.map +1 -0
- package/dist/surface/tier.js +172 -0
- package/dist/task-next/apply-batch-runner.d.ts +42 -0
- package/dist/task-next/apply-batch-runner.d.ts.map +1 -0
- package/dist/task-next/apply-batch-runner.js +192 -0
- package/dist/task-next/task-next-ranker.d.ts +75 -0
- package/dist/task-next/task-next-ranker.d.ts.map +1 -0
- package/dist/task-next/task-next-ranker.js +179 -0
- package/dist/usage/usage-log.d.ts +54 -0
- package/dist/usage/usage-log.d.ts.map +1 -0
- package/dist/usage/usage-log.js +105 -0
- package/dist/validation/run-validation-loop.d.ts +38 -0
- package/dist/validation/run-validation-loop.d.ts.map +1 -0
- package/dist/validation/run-validation-loop.js +100 -0
- package/package.json +73 -0
|
@@ -0,0 +1,538 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join as nodePathJoin, resolve as nodePathResolve } from 'node:path';
|
|
3
|
+
import { buildAnchorUpdatePlan, buildKnowledgeStaleReport, buildRenameFilePlan, buildRenameSymbolPlan, inspectSharkcraft, ReferenceCheckOutcome, resolveChangedFiles, } from '@shrkcrft/inspector';
|
|
4
|
+
import { formatEntryCompact, formatEntryFull, searchKnowledge } from '@shrkcrft/knowledge';
|
|
5
|
+
import { flagBool, flagNumber, flagString, flagList, resolveCwd, } from "../command-registry.js";
|
|
6
|
+
import { asJson, header } from "../output/format-output.js";
|
|
7
|
+
import { maybeRunInWatchMode } from "../output/watch-loop.js";
|
|
8
|
+
import { renderFailureHints, staleKnowledgeHints } from "../output/failure-hints.js";
|
|
9
|
+
function renderStaleCheckMarkdown(p) {
|
|
10
|
+
const out = [];
|
|
11
|
+
out.push(`# Knowledge stale-check`);
|
|
12
|
+
out.push('');
|
|
13
|
+
out.push(`- entries: ${p.entries}`);
|
|
14
|
+
out.push(`- references: ${p.totalReferences}`);
|
|
15
|
+
out.push(`- anchors: ${p.totalAnchors}`);
|
|
16
|
+
out.push(`- counts: ok=${p.counts.ok}, stale=${p.counts.stale}, missing=${p.counts.missing}, unknown=${p.counts.unknown}`);
|
|
17
|
+
if (p.ci.ci || p.ci.strict || p.ci.failOn.length > 0) {
|
|
18
|
+
out.push(`- required failing: ${p.ci.totalRequiredFailing} (stale=${p.ci.requiredStale}, missing=${p.ci.requiredMissing})`);
|
|
19
|
+
}
|
|
20
|
+
if (p.baselineComparison) {
|
|
21
|
+
out.push(`- baseline (${p.baselineComparison.baseline}): new-stale=${p.baselineComparison.newStale}, new-missing=${p.baselineComparison.newMissing}, resolved=${p.baselineComparison.resolved}`);
|
|
22
|
+
}
|
|
23
|
+
out.push('');
|
|
24
|
+
out.push(`## Reference issues`);
|
|
25
|
+
for (const c of p.referenceChecks) {
|
|
26
|
+
if (c.outcome === 'ok')
|
|
27
|
+
continue;
|
|
28
|
+
const req = c.reference.required ? ' **(required)**' : '';
|
|
29
|
+
out.push(`- **${c.outcome.toUpperCase()}**${req} \`${c.entryId}\` → \`${c.reference.kind}:${c.reference.id ?? c.reference.path ?? c.reference.symbol ?? '?'}\` — ${c.message}`);
|
|
30
|
+
}
|
|
31
|
+
if (p.ci.exitNonZero && p.ci.exitReason) {
|
|
32
|
+
out.push('');
|
|
33
|
+
out.push(`> FAIL: ${p.ci.exitReason}`);
|
|
34
|
+
}
|
|
35
|
+
out.push('');
|
|
36
|
+
return out.join('\n');
|
|
37
|
+
}
|
|
38
|
+
function renderStaleCheckHtml(p) {
|
|
39
|
+
const esc = (s) => s.replace(/[&<>"']/g, (c) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[c]));
|
|
40
|
+
const rows = [];
|
|
41
|
+
for (const c of p.referenceChecks) {
|
|
42
|
+
if (c.outcome === 'ok')
|
|
43
|
+
continue;
|
|
44
|
+
rows.push(`<tr><td>${esc(c.outcome.toUpperCase())}</td><td>${c.reference.required ? '✓' : ''}</td><td>${esc(c.entryId)}</td><td>${esc(c.reference.kind)}:${esc(c.reference.id ?? c.reference.path ?? c.reference.symbol ?? '?')}</td><td>${esc(c.message)}</td></tr>`);
|
|
45
|
+
}
|
|
46
|
+
return `<!doctype html><meta charset="utf-8"><title>Knowledge stale-check</title>
|
|
47
|
+
<style>body{font:14px/1.4 sans-serif;margin:1rem}table{border-collapse:collapse;width:100%}td,th{border:1px solid #ccc;padding:.25rem .5rem;text-align:left}h1{margin-top:0}</style>
|
|
48
|
+
<h1>Knowledge stale-check</h1>
|
|
49
|
+
<p>entries=${p.entries}, references=${p.totalReferences}, anchors=${p.totalAnchors}, ok=${p.counts.ok}, stale=${p.counts.stale}, missing=${p.counts.missing}, unknown=${p.counts.unknown}</p>
|
|
50
|
+
<table><thead><tr><th>Outcome</th><th>Required</th><th>Entry</th><th>Reference</th><th>Message</th></tr></thead><tbody>${rows.join('')}</tbody></table>
|
|
51
|
+
${p.ci.exitNonZero ? `<p style="color:#a40000;font-weight:bold">FAIL: ${esc(p.ci.exitReason ?? '')}</p>` : ''}
|
|
52
|
+
`;
|
|
53
|
+
}
|
|
54
|
+
export const knowledgeListCommand = {
|
|
55
|
+
name: 'list',
|
|
56
|
+
description: 'List knowledge entries.',
|
|
57
|
+
usage: 'shrk knowledge list [--type rule] [--scope x,y] [--json]',
|
|
58
|
+
async run(args) {
|
|
59
|
+
const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
|
|
60
|
+
const types = flagList(args, 'type');
|
|
61
|
+
const scope = flagList(args, 'scope');
|
|
62
|
+
let entries = inspection.knowledgeEntries;
|
|
63
|
+
if (types.length)
|
|
64
|
+
entries = entries.filter((e) => types.includes(String(e.type)));
|
|
65
|
+
if (scope.length)
|
|
66
|
+
entries = entries.filter((e) => scope.some((s) => e.scope.includes(s)));
|
|
67
|
+
if (flagBool(args, 'json')) {
|
|
68
|
+
process.stdout.write(asJson(entries.map((e) => ({ ...e }))) + '\n');
|
|
69
|
+
return 0;
|
|
70
|
+
}
|
|
71
|
+
process.stdout.write(header(`Knowledge (${entries.length})`));
|
|
72
|
+
for (const e of entries)
|
|
73
|
+
process.stdout.write(formatEntryCompact(e) + '\n');
|
|
74
|
+
return 0;
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
export const knowledgeGetCommand = {
|
|
78
|
+
name: 'get',
|
|
79
|
+
description: 'Show full content of one knowledge entry.',
|
|
80
|
+
usage: 'shrk knowledge get <id> [--json]',
|
|
81
|
+
async run(args) {
|
|
82
|
+
const id = args.positional[0];
|
|
83
|
+
if (!id) {
|
|
84
|
+
process.stderr.write('Usage: shrk knowledge get <id>\n');
|
|
85
|
+
return 2;
|
|
86
|
+
}
|
|
87
|
+
const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
|
|
88
|
+
const entry = inspection.index.get(id);
|
|
89
|
+
if (!entry) {
|
|
90
|
+
process.stderr.write(`No knowledge entry with id "${id}".\n`);
|
|
91
|
+
return 1;
|
|
92
|
+
}
|
|
93
|
+
if (flagBool(args, 'json')) {
|
|
94
|
+
process.stdout.write(asJson(entry) + '\n');
|
|
95
|
+
return 0;
|
|
96
|
+
}
|
|
97
|
+
process.stdout.write(formatEntryFull(entry) + '\n');
|
|
98
|
+
return 0;
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
export const knowledgeSearchCommand = {
|
|
102
|
+
name: 'search',
|
|
103
|
+
description: 'Search knowledge by query.',
|
|
104
|
+
usage: 'shrk knowledge search <query> [--type x,y] [--scope x,y] [--limit 10] [--json]',
|
|
105
|
+
async run(args) {
|
|
106
|
+
const query = args.positional.join(' ').trim();
|
|
107
|
+
const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
|
|
108
|
+
const types = flagList(args, 'type');
|
|
109
|
+
const scope = flagList(args, 'scope');
|
|
110
|
+
const tags = flagList(args, 'tag');
|
|
111
|
+
const appliesWhen = flagList(args, 'appliesWhen');
|
|
112
|
+
const limit = flagNumber(args, 'limit') ?? 20;
|
|
113
|
+
const results = searchKnowledge(inspection.knowledgeEntries, {
|
|
114
|
+
query: query.length ? query : undefined,
|
|
115
|
+
types: types.length ? types : undefined,
|
|
116
|
+
scope: scope.length ? scope : undefined,
|
|
117
|
+
tags: tags.length ? tags : undefined,
|
|
118
|
+
appliesWhen: appliesWhen.length ? appliesWhen : undefined,
|
|
119
|
+
limit,
|
|
120
|
+
});
|
|
121
|
+
if (flagBool(args, 'json')) {
|
|
122
|
+
process.stdout.write(asJson(results) + '\n');
|
|
123
|
+
return 0;
|
|
124
|
+
}
|
|
125
|
+
process.stdout.write(header(`Results (${results.length})`));
|
|
126
|
+
for (const r of results) {
|
|
127
|
+
process.stdout.write(`[${r.score.toFixed(1)}] ${formatEntryCompact(r.entry)}\n`);
|
|
128
|
+
if (r.reasons.length) {
|
|
129
|
+
const top = r.reasons.slice(0, 3).map((x) => `${x.field}=${x.match}`).join(', ');
|
|
130
|
+
process.stdout.write(` reasons: ${top}\n`);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return 0;
|
|
134
|
+
},
|
|
135
|
+
};
|
|
136
|
+
function readChangedScopeOptionsForKnowledge(args, projectRoot) {
|
|
137
|
+
const changedOnly = flagBool(args, 'changed-only');
|
|
138
|
+
const since = flagString(args, 'since');
|
|
139
|
+
const staged = flagBool(args, 'staged');
|
|
140
|
+
const files = flagList(args, 'files');
|
|
141
|
+
if (!changedOnly && !since && !staged && files.length === 0)
|
|
142
|
+
return null;
|
|
143
|
+
return {
|
|
144
|
+
projectRoot,
|
|
145
|
+
...(since ? { since } : {}),
|
|
146
|
+
...(staged ? { staged: true } : {}),
|
|
147
|
+
...(files.length > 0 ? { files } : {}),
|
|
148
|
+
includeWorktree: changedOnly || !since,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
export const knowledgeStaleCheckCommand = {
|
|
152
|
+
name: 'stale-check',
|
|
153
|
+
description: 'Validate `references[]` + `anchors[]` on each knowledge entry against the workspace. CI flags and `--watch [--once] [--debounce N]` supported. Read-only.',
|
|
154
|
+
usage: 'shrk knowledge stale-check [--changed-only|--since <ref>|--staged|--files a,b,c] [--ci] [--strict] [--fail-on required|stale|missing|all] [--baseline <file>] [--report] [--format text|markdown|html|json] [--output <path>] [--json] [--watch [--once] [--debounce N]]',
|
|
155
|
+
async run(args) {
|
|
156
|
+
const watchExit = await maybeRunInWatchMode(args, knowledgeStaleCheckImpl);
|
|
157
|
+
if (watchExit !== null)
|
|
158
|
+
return watchExit;
|
|
159
|
+
return knowledgeStaleCheckImpl(args);
|
|
160
|
+
},
|
|
161
|
+
};
|
|
162
|
+
async function knowledgeStaleCheckImpl(args) {
|
|
163
|
+
const cwd = resolveCwd(args);
|
|
164
|
+
const inspection = await inspectSharkcraft({ cwd });
|
|
165
|
+
const scopeOpts = readChangedScopeOptionsForKnowledge(args, cwd);
|
|
166
|
+
const changedFiles = scopeOpts ? resolveChangedFiles(scopeOpts).files : undefined;
|
|
167
|
+
const report = buildKnowledgeStaleReport(inspection, {
|
|
168
|
+
...(changedFiles ? { changedFiles } : {}),
|
|
169
|
+
});
|
|
170
|
+
// CI/preflight flags.
|
|
171
|
+
const ci = flagBool(args, 'ci');
|
|
172
|
+
const strict = flagBool(args, 'strict');
|
|
173
|
+
const failOnRaw = (flagString(args, 'fail-on') ?? '').toLowerCase();
|
|
174
|
+
const failOn = new Set(failOnRaw
|
|
175
|
+
.split(',')
|
|
176
|
+
.map((s) => s.trim())
|
|
177
|
+
.filter(Boolean));
|
|
178
|
+
const baselineFile = flagString(args, 'baseline');
|
|
179
|
+
const wantReport = flagBool(args, 'report');
|
|
180
|
+
const formatRaw = (flagString(args, 'format') ?? '').toLowerCase();
|
|
181
|
+
const wantJson = flagBool(args, 'json') || formatRaw === 'json';
|
|
182
|
+
const wantMarkdown = formatRaw === 'markdown' || formatRaw === 'md';
|
|
183
|
+
const wantHtml = formatRaw === 'html';
|
|
184
|
+
const output = flagString(args, 'output');
|
|
185
|
+
// Required-reference computation. A reference is "required" when its
|
|
186
|
+
// `required: true` (default false). Stale + missing are the same outcome
|
|
187
|
+
// family.
|
|
188
|
+
let requiredStale = 0;
|
|
189
|
+
let requiredMissing = 0;
|
|
190
|
+
for (const c of report.referenceChecks) {
|
|
191
|
+
const isRequired = c.reference.required === true;
|
|
192
|
+
if (isRequired && c.outcome === ReferenceCheckOutcome.Stale)
|
|
193
|
+
requiredStale++;
|
|
194
|
+
if (isRequired && c.outcome === ReferenceCheckOutcome.Missing)
|
|
195
|
+
requiredMissing++;
|
|
196
|
+
}
|
|
197
|
+
const totalRequiredFailing = requiredStale + requiredMissing;
|
|
198
|
+
// Decide exit code.
|
|
199
|
+
let exitNonZero = false;
|
|
200
|
+
let exitReason;
|
|
201
|
+
const considerFailOn = (cat) => failOn.has(cat) || failOn.has('all');
|
|
202
|
+
if (ci) {
|
|
203
|
+
// CI mode — required failing refs are blocking. Optional refs warn only.
|
|
204
|
+
if (totalRequiredFailing > 0) {
|
|
205
|
+
exitNonZero = true;
|
|
206
|
+
exitReason = `${totalRequiredFailing} required references failing in --ci mode`;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
else if (strict) {
|
|
210
|
+
// Strict — any stale/missing required ref fails. Same as CI essentially.
|
|
211
|
+
if (totalRequiredFailing > 0) {
|
|
212
|
+
exitNonZero = true;
|
|
213
|
+
exitReason = `${totalRequiredFailing} required references failing in --strict mode`;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else if (failOn.size > 0) {
|
|
217
|
+
if (considerFailOn('required') && totalRequiredFailing > 0) {
|
|
218
|
+
exitNonZero = true;
|
|
219
|
+
exitReason = `${totalRequiredFailing} required reference issues (--fail-on=required)`;
|
|
220
|
+
}
|
|
221
|
+
if (considerFailOn('stale') && report.counts.stale > 0) {
|
|
222
|
+
exitNonZero = true;
|
|
223
|
+
exitReason = `${report.counts.stale} stale references (--fail-on=stale)`;
|
|
224
|
+
}
|
|
225
|
+
if (considerFailOn('missing') && report.counts.missing > 0) {
|
|
226
|
+
exitNonZero = true;
|
|
227
|
+
exitReason = `${report.counts.missing} missing references (--fail-on=missing)`;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
// Default — non-CI: only the legacy "any missing or stale" condition fails.
|
|
232
|
+
if (report.counts.missing + report.counts.stale > 0) {
|
|
233
|
+
exitNonZero = true;
|
|
234
|
+
exitReason = `${report.counts.missing + report.counts.stale} stale or missing references (legacy default)`;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// Baseline comparison (informational).
|
|
238
|
+
let baselineComparison;
|
|
239
|
+
if (baselineFile) {
|
|
240
|
+
const baselineAbs = nodePathResolve(cwd, baselineFile);
|
|
241
|
+
if (existsSync(baselineAbs)) {
|
|
242
|
+
try {
|
|
243
|
+
const prev = JSON.parse(readFileSync(baselineAbs, 'utf8'));
|
|
244
|
+
const prevKey = (rc) => `${rc.entryId}|${rc.reference.path ?? rc.reference.symbol ?? rc.reference.id ?? ''}`;
|
|
245
|
+
const prevFailing = new Map();
|
|
246
|
+
for (const rc of prev.referenceChecks ?? []) {
|
|
247
|
+
if (rc.outcome === 'stale' || rc.outcome === 'missing') {
|
|
248
|
+
prevFailing.set(prevKey(rc), rc.outcome);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
let newStale = 0;
|
|
252
|
+
let newMissing = 0;
|
|
253
|
+
let resolved = 0;
|
|
254
|
+
const currentKeys = new Set();
|
|
255
|
+
for (const rc of report.referenceChecks) {
|
|
256
|
+
const k = prevKey(rc);
|
|
257
|
+
currentKeys.add(k);
|
|
258
|
+
if ((rc.outcome === ReferenceCheckOutcome.Stale ||
|
|
259
|
+
rc.outcome === ReferenceCheckOutcome.Missing) &&
|
|
260
|
+
!prevFailing.has(k)) {
|
|
261
|
+
if (rc.outcome === ReferenceCheckOutcome.Stale)
|
|
262
|
+
newStale++;
|
|
263
|
+
else
|
|
264
|
+
newMissing++;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
for (const [k] of prevFailing) {
|
|
268
|
+
// Resolved = was failing, now ok or not present.
|
|
269
|
+
const cur = report.referenceChecks.find((rc) => prevKey(rc) === k);
|
|
270
|
+
if (!cur || cur.outcome === ReferenceCheckOutcome.Ok)
|
|
271
|
+
resolved++;
|
|
272
|
+
void currentKeys;
|
|
273
|
+
}
|
|
274
|
+
baselineComparison = {
|
|
275
|
+
baseline: baselineAbs,
|
|
276
|
+
newStale,
|
|
277
|
+
newMissing,
|
|
278
|
+
resolved,
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
catch (e) {
|
|
282
|
+
process.stderr.write(`Baseline read failed: ${e.message}\n`);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
process.stderr.write(`Baseline file not found: ${baselineAbs}\n`);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
// Build the structured payload (always built, even for text output).
|
|
290
|
+
const ciPayload = {
|
|
291
|
+
...report,
|
|
292
|
+
ci: {
|
|
293
|
+
ci,
|
|
294
|
+
strict,
|
|
295
|
+
failOn: [...failOn],
|
|
296
|
+
requiredStale,
|
|
297
|
+
requiredMissing,
|
|
298
|
+
totalRequiredFailing,
|
|
299
|
+
exitNonZero,
|
|
300
|
+
exitReason,
|
|
301
|
+
},
|
|
302
|
+
baselineComparison,
|
|
303
|
+
};
|
|
304
|
+
// Optional report file.
|
|
305
|
+
if (wantReport || output) {
|
|
306
|
+
const reportsDir = nodePathJoin(cwd, '.sharkcraft', 'reports');
|
|
307
|
+
mkdirSync(reportsDir, { recursive: true });
|
|
308
|
+
const ts = new Date().toISOString().replace(/[:.]/g, '-');
|
|
309
|
+
const defaultPath = nodePathJoin(reportsDir, `knowledge-stale-${ts}.json`);
|
|
310
|
+
const outPath = output
|
|
311
|
+
? nodePathResolve(cwd, output)
|
|
312
|
+
: defaultPath;
|
|
313
|
+
writeFileSync(outPath, JSON.stringify(ciPayload, null, 2), 'utf8');
|
|
314
|
+
if (!wantJson && !wantMarkdown && !wantHtml) {
|
|
315
|
+
process.stdout.write(`Wrote report → ${outPath}\n`);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// Format-specific output.
|
|
319
|
+
if (wantJson) {
|
|
320
|
+
process.stdout.write(asJson(ciPayload) + '\n');
|
|
321
|
+
return exitNonZero ? 1 : 0;
|
|
322
|
+
}
|
|
323
|
+
if (wantMarkdown) {
|
|
324
|
+
process.stdout.write(renderStaleCheckMarkdown(ciPayload));
|
|
325
|
+
return exitNonZero ? 1 : 0;
|
|
326
|
+
}
|
|
327
|
+
if (wantHtml) {
|
|
328
|
+
process.stdout.write(renderStaleCheckHtml(ciPayload));
|
|
329
|
+
return exitNonZero ? 1 : 0;
|
|
330
|
+
}
|
|
331
|
+
// Default text output.
|
|
332
|
+
process.stdout.write(header('Knowledge stale-check'));
|
|
333
|
+
process.stdout.write(`entries=${report.entries} references=${report.totalReferences} anchors=${report.totalAnchors}\n`);
|
|
334
|
+
process.stdout.write(`ok=${report.counts.ok} stale=${report.counts.stale} missing=${report.counts.missing} unknown=${report.counts.unknown}\n`);
|
|
335
|
+
if (ci || strict || failOn.size > 0) {
|
|
336
|
+
process.stdout.write(`required: stale=${requiredStale} missing=${requiredMissing} (total failing: ${totalRequiredFailing})\n`);
|
|
337
|
+
}
|
|
338
|
+
if (baselineComparison) {
|
|
339
|
+
process.stdout.write(`baseline: new-stale=${baselineComparison.newStale} new-missing=${baselineComparison.newMissing} resolved=${baselineComparison.resolved}\n`);
|
|
340
|
+
}
|
|
341
|
+
process.stdout.write('\n');
|
|
342
|
+
for (const c of report.referenceChecks) {
|
|
343
|
+
if (c.outcome === ReferenceCheckOutcome.Ok)
|
|
344
|
+
continue;
|
|
345
|
+
const tag = c.outcome.toUpperCase().padEnd(7);
|
|
346
|
+
const req = c.reference.required === true ? '[REQ] ' : ' ';
|
|
347
|
+
process.stdout.write(` ${tag} ${req}${c.entryId} → ${c.reference.kind}:${c.reference.id ?? c.reference.path ?? c.reference.symbol ?? '?'} — ${c.message}\n`);
|
|
348
|
+
if (c.suggestion)
|
|
349
|
+
process.stdout.write(` ↳ ${c.suggestion}\n`);
|
|
350
|
+
}
|
|
351
|
+
for (const c of report.anchorChecks) {
|
|
352
|
+
if (c.outcome === ReferenceCheckOutcome.Ok)
|
|
353
|
+
continue;
|
|
354
|
+
const tag = c.outcome.toUpperCase().padEnd(7);
|
|
355
|
+
process.stdout.write(` ${tag} ${c.entryId} anchor[${c.anchor.id}] (${c.anchor.kind}) — ${c.message}\n`);
|
|
356
|
+
}
|
|
357
|
+
if (exitNonZero && exitReason) {
|
|
358
|
+
process.stdout.write(`\nFAIL: ${exitReason}\n`);
|
|
359
|
+
}
|
|
360
|
+
if (exitNonZero) {
|
|
361
|
+
process.stdout.write(renderFailureHints(staleKnowledgeHints()));
|
|
362
|
+
}
|
|
363
|
+
return exitNonZero ? 1 : 0;
|
|
364
|
+
}
|
|
365
|
+
export const knowledgeVerifyCommand = {
|
|
366
|
+
name: 'verify',
|
|
367
|
+
description: 'Alias for `knowledge stale-check`. Read-only.',
|
|
368
|
+
usage: 'shrk knowledge verify [--changed-only|--since|--staged|--files] [--json]',
|
|
369
|
+
run(args) {
|
|
370
|
+
return knowledgeStaleCheckCommand.run(args);
|
|
371
|
+
},
|
|
372
|
+
};
|
|
373
|
+
export const knowledgeReferencesCommand = {
|
|
374
|
+
name: 'references',
|
|
375
|
+
description: 'List references/anchors for one knowledge entry. Read-only.',
|
|
376
|
+
usage: 'shrk knowledge references <id> [--json]',
|
|
377
|
+
async run(args) {
|
|
378
|
+
const id = args.positional[0];
|
|
379
|
+
if (!id) {
|
|
380
|
+
process.stderr.write('Usage: shrk knowledge references <id>\n');
|
|
381
|
+
return 2;
|
|
382
|
+
}
|
|
383
|
+
const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
|
|
384
|
+
const entry = inspection.index.get(id);
|
|
385
|
+
if (!entry) {
|
|
386
|
+
process.stderr.write(`No knowledge entry with id "${id}".\n`);
|
|
387
|
+
return 1;
|
|
388
|
+
}
|
|
389
|
+
const data = {
|
|
390
|
+
id: entry.id,
|
|
391
|
+
title: entry.title,
|
|
392
|
+
references: entry.references ?? [],
|
|
393
|
+
anchors: entry.anchors ?? [],
|
|
394
|
+
};
|
|
395
|
+
if (flagBool(args, 'json')) {
|
|
396
|
+
process.stdout.write(asJson(data) + '\n');
|
|
397
|
+
return 0;
|
|
398
|
+
}
|
|
399
|
+
process.stdout.write(header(`References for ${id}`));
|
|
400
|
+
if (data.references.length === 0 && data.anchors.length === 0) {
|
|
401
|
+
process.stdout.write(' (no references / anchors declared)\n');
|
|
402
|
+
return 0;
|
|
403
|
+
}
|
|
404
|
+
if (data.references.length > 0) {
|
|
405
|
+
process.stdout.write(`References (${data.references.length}):\n`);
|
|
406
|
+
for (const r of data.references) {
|
|
407
|
+
const target = r.id ?? r.path ?? r.symbol ?? r.command ?? '?';
|
|
408
|
+
process.stdout.write(` • ${r.kind}: ${target}${r.required ? ' [required]' : ''}\n`);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
if (data.anchors.length > 0) {
|
|
412
|
+
process.stdout.write(`Anchors (${data.anchors.length}):\n`);
|
|
413
|
+
for (const a of data.anchors) {
|
|
414
|
+
process.stdout.write(` • ${a.id} (${a.kind}) → ${a.targetId ?? a.path ?? a.symbol ?? '?'}\n`);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
return 0;
|
|
418
|
+
},
|
|
419
|
+
};
|
|
420
|
+
export const knowledgeAnchorsCommand = {
|
|
421
|
+
name: 'anchors',
|
|
422
|
+
description: 'List all anchors across the knowledge corpus. Read-only.',
|
|
423
|
+
usage: 'shrk knowledge anchors [--json]',
|
|
424
|
+
async run(args) {
|
|
425
|
+
const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
|
|
426
|
+
const out = [];
|
|
427
|
+
for (const e of inspection.knowledgeEntries) {
|
|
428
|
+
for (const a of e.anchors ?? []) {
|
|
429
|
+
out.push({ entryId: e.id, anchor: a });
|
|
430
|
+
}
|
|
431
|
+
}
|
|
432
|
+
if (flagBool(args, 'json')) {
|
|
433
|
+
process.stdout.write(asJson({ anchors: out, count: out.length }) + '\n');
|
|
434
|
+
return 0;
|
|
435
|
+
}
|
|
436
|
+
process.stdout.write(header(`Anchors (${out.length})`));
|
|
437
|
+
for (const { entryId, anchor } of out) {
|
|
438
|
+
const a = anchor;
|
|
439
|
+
process.stdout.write(` ${entryId} → ${a.id} (${a.kind})\n`);
|
|
440
|
+
}
|
|
441
|
+
return 0;
|
|
442
|
+
},
|
|
443
|
+
};
|
|
444
|
+
/**
|
|
445
|
+
* Read-only preview of which knowledge entries' references / anchors
|
|
446
|
+
* would change when a symbol or file is renamed. Source-side symbol
|
|
447
|
+
* rename remains out of scope until an AST-aware path exists. Use
|
|
448
|
+
* `shrk fix --knowledge-stale --apply` to land entry-side renames.
|
|
449
|
+
*/
|
|
450
|
+
export const knowledgeRenameSymbolCommand = {
|
|
451
|
+
name: 'rename-symbol',
|
|
452
|
+
description: 'Preview which knowledge entries reference a symbol and would be updated by a rename. Read-only. To land entry-side renames, run `shrk fix --knowledge-stale --apply` (uses the engine\'s replaceWith signal).',
|
|
453
|
+
usage: 'shrk knowledge rename-symbol <old> <new> [--json]',
|
|
454
|
+
async run(args) {
|
|
455
|
+
const [from, to] = args.positional;
|
|
456
|
+
if (!from || !to) {
|
|
457
|
+
process.stderr.write('Usage: shrk knowledge rename-symbol <old> <new>\n');
|
|
458
|
+
return 2;
|
|
459
|
+
}
|
|
460
|
+
const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
|
|
461
|
+
const plan = buildRenameSymbolPlan(inspection, { from, to });
|
|
462
|
+
if (flagBool(args, 'json')) {
|
|
463
|
+
process.stdout.write(asJson(plan) + '\n');
|
|
464
|
+
return 0;
|
|
465
|
+
}
|
|
466
|
+
process.stdout.write(header(`Rename symbol: ${from} → ${to}`));
|
|
467
|
+
if (plan.matches.length === 0) {
|
|
468
|
+
process.stdout.write(' no knowledge entries reference this symbol.\n');
|
|
469
|
+
return 0;
|
|
470
|
+
}
|
|
471
|
+
for (const m of plan.matches) {
|
|
472
|
+
process.stdout.write(` • ${m.entryId} [${m.field}]\n`);
|
|
473
|
+
}
|
|
474
|
+
process.stdout.write('\n(preview only — use `shrk fix --knowledge-stale --apply` to land entry-side renames.)\n');
|
|
475
|
+
return 0;
|
|
476
|
+
},
|
|
477
|
+
};
|
|
478
|
+
export const knowledgeRenameFileCommand = {
|
|
479
|
+
name: 'rename-file',
|
|
480
|
+
description: 'Preview which knowledge entries reference a file path and would be updated by a rename. Read-only. To land entry-side renames, run `shrk fix --knowledge-stale --apply`.',
|
|
481
|
+
usage: 'shrk knowledge rename-file <old-path> <new-path> [--json]',
|
|
482
|
+
async run(args) {
|
|
483
|
+
const [from, to] = args.positional;
|
|
484
|
+
if (!from || !to) {
|
|
485
|
+
process.stderr.write('Usage: shrk knowledge rename-file <old> <new>\n');
|
|
486
|
+
return 2;
|
|
487
|
+
}
|
|
488
|
+
const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
|
|
489
|
+
const plan = buildRenameFilePlan(inspection, { from, to });
|
|
490
|
+
if (flagBool(args, 'json')) {
|
|
491
|
+
process.stdout.write(asJson(plan) + '\n');
|
|
492
|
+
return 0;
|
|
493
|
+
}
|
|
494
|
+
process.stdout.write(header(`Rename file: ${from} → ${to}`));
|
|
495
|
+
if (plan.matches.length === 0) {
|
|
496
|
+
process.stdout.write(' no knowledge entries reference this path.\n');
|
|
497
|
+
return 0;
|
|
498
|
+
}
|
|
499
|
+
for (const m of plan.matches) {
|
|
500
|
+
process.stdout.write(` • ${m.entryId} [${m.field}]\n`);
|
|
501
|
+
}
|
|
502
|
+
process.stdout.write('\n(preview only — use `shrk fix --knowledge-stale --apply` to land entry-side renames.)\n');
|
|
503
|
+
return 0;
|
|
504
|
+
},
|
|
505
|
+
};
|
|
506
|
+
export const knowledgeUpdateAnchorCommand = {
|
|
507
|
+
name: 'update-anchor',
|
|
508
|
+
description: 'Preview an anchor update. Read-only. To land entry-side updates, edit the entry source directly.',
|
|
509
|
+
usage: 'shrk knowledge update-anchor <anchorId> [--to-symbol <name>] [--to-path <path>] [--to-target-id <id>] [--json]',
|
|
510
|
+
async run(args) {
|
|
511
|
+
const anchorId = args.positional[0];
|
|
512
|
+
if (!anchorId) {
|
|
513
|
+
process.stderr.write('Usage: shrk knowledge update-anchor <anchorId> [--to-symbol|--to-path|--to-target-id <value>]\n');
|
|
514
|
+
return 2;
|
|
515
|
+
}
|
|
516
|
+
const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
|
|
517
|
+
const plan = buildAnchorUpdatePlan(inspection, {
|
|
518
|
+
anchorId,
|
|
519
|
+
...(flagString(args, 'to-symbol') ? { toSymbol: flagString(args, 'to-symbol') } : {}),
|
|
520
|
+
...(flagString(args, 'to-path') ? { toPath: flagString(args, 'to-path') } : {}),
|
|
521
|
+
...(flagString(args, 'to-target-id') ? { toTargetId: flagString(args, 'to-target-id') } : {}),
|
|
522
|
+
});
|
|
523
|
+
if (flagBool(args, 'json')) {
|
|
524
|
+
process.stdout.write(asJson(plan) + '\n');
|
|
525
|
+
return 0;
|
|
526
|
+
}
|
|
527
|
+
process.stdout.write(header(`Update anchor: ${anchorId}`));
|
|
528
|
+
if (plan.matches.length === 0) {
|
|
529
|
+
process.stdout.write(' no anchors match this id.\n');
|
|
530
|
+
return 0;
|
|
531
|
+
}
|
|
532
|
+
for (const m of plan.matches) {
|
|
533
|
+
process.stdout.write(` • ${m.entryId} [${m.field}]\n`);
|
|
534
|
+
}
|
|
535
|
+
process.stdout.write('\n(preview only.)\n');
|
|
536
|
+
return 0;
|
|
537
|
+
},
|
|
538
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"languages.command.d.ts","sourceRoot":"","sources":["../../src/commands/languages.command.ts"],"names":[],"mappings":"AA4BA,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AA8NhC,eAAO,MAAM,gBAAgB,EAAE,eA6B9B,CAAC"}
|