@shrkcrft/cli 0.1.0-alpha.29 → 0.1.0-alpha.31
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/dist/asset-preview/apply-asset-preview.js +1 -1
- package/dist/authoring/authoring-kit.d.ts +9 -1
- package/dist/authoring/authoring-kit.d.ts.map +1 -1
- package/dist/authoring/authoring-kit.js +26 -13
- package/dist/bootstrap/unlinked-workspace-dependency.d.ts +11 -0
- package/dist/bootstrap/unlinked-workspace-dependency.d.ts.map +1 -0
- package/dist/bootstrap/unlinked-workspace-dependency.js +99 -0
- package/dist/command-registry.d.ts +100 -1
- package/dist/command-registry.d.ts.map +1 -1
- package/dist/command-registry.js +130 -3
- package/dist/commands/api-diff.command.d.ts.map +1 -1
- package/dist/commands/api-diff.command.js +12 -0
- package/dist/commands/apply.command.d.ts.map +1 -1
- package/dist/commands/apply.command.js +3 -0
- package/dist/commands/arch.command.d.ts.map +1 -1
- package/dist/commands/arch.command.js +26 -7
- package/dist/commands/architecture.command.d.ts.map +1 -1
- package/dist/commands/architecture.command.js +8 -2
- package/dist/commands/baseline.command.d.ts +76 -0
- package/dist/commands/baseline.command.d.ts.map +1 -1
- package/dist/commands/baseline.command.js +599 -75
- package/dist/commands/biome.command.d.ts.map +1 -1
- package/dist/commands/biome.command.js +20 -0
- package/dist/commands/boundaries.command.d.ts +9 -1
- package/dist/commands/boundaries.command.d.ts.map +1 -1
- package/dist/commands/boundaries.command.js +88 -20
- package/dist/commands/bundle.command.d.ts.map +1 -1
- package/dist/commands/bundle.command.js +57 -11
- package/dist/commands/cache-align.command.d.ts.map +1 -1
- package/dist/commands/cache-align.command.js +3 -1
- package/dist/commands/changelog-data.d.ts.map +1 -1
- package/dist/commands/changelog-data.js +164 -0
- package/dist/commands/changes.command.d.ts.map +1 -1
- package/dist/commands/changes.command.js +15 -0
- package/dist/commands/check.command.d.ts.map +1 -1
- package/dist/commands/check.command.js +1260 -324
- package/dist/commands/checks.command.d.ts.map +1 -1
- package/dist/commands/checks.command.js +188 -40
- package/dist/commands/ci.command.d.ts.map +1 -1
- package/dist/commands/ci.command.js +35 -2
- package/dist/commands/code-intel.command.d.ts.map +1 -1
- package/dist/commands/code-intel.command.js +8 -1
- package/dist/commands/command-catalog.d.ts +23 -1
- package/dist/commands/command-catalog.d.ts.map +1 -1
- package/dist/commands/command-catalog.js +152 -35
- package/dist/commands/commands.command.d.ts +21 -3
- package/dist/commands/commands.command.d.ts.map +1 -1
- package/dist/commands/commands.command.js +172 -27
- package/dist/commands/compress.command.d.ts.map +1 -1
- package/dist/commands/compress.command.js +4 -0
- package/dist/commands/constructs.command.d.ts.map +1 -1
- package/dist/commands/constructs.command.js +50 -12
- package/dist/commands/context.command.d.ts.map +1 -1
- package/dist/commands/context.command.js +40 -5
- package/dist/commands/contract-templates.command.d.ts.map +1 -1
- package/dist/commands/contract-templates.command.js +9 -1
- package/dist/commands/contract.command.d.ts.map +1 -1
- package/dist/commands/contract.command.js +35 -0
- package/dist/commands/conventions.command.d.ts.map +1 -1
- package/dist/commands/conventions.command.js +189 -29
- package/dist/commands/coverage.command.d.ts.map +1 -1
- package/dist/commands/coverage.command.js +9 -0
- package/dist/commands/daily.commands.d.ts +0 -1
- package/dist/commands/daily.commands.d.ts.map +1 -1
- package/dist/commands/daily.commands.js +12 -76
- package/dist/commands/dashboard.command.d.ts.map +1 -1
- package/dist/commands/dashboard.command.js +10 -0
- package/dist/commands/dev.command.d.ts.map +1 -1
- package/dist/commands/dev.command.js +45 -2
- package/dist/commands/diagnostics.command.d.ts +0 -2
- package/dist/commands/diagnostics.command.d.ts.map +1 -1
- package/dist/commands/diagnostics.command.js +5 -78
- package/dist/commands/diff-check.command.d.ts +6 -4
- package/dist/commands/diff-check.command.d.ts.map +1 -1
- package/dist/commands/diff-check.command.js +190 -103
- package/dist/commands/docs-references.command.d.ts +20 -0
- package/dist/commands/docs-references.command.d.ts.map +1 -0
- package/dist/commands/docs-references.command.js +520 -0
- package/dist/commands/doctor.command.d.ts.map +1 -1
- package/dist/commands/doctor.command.js +60 -5
- package/dist/commands/drift.command.d.ts.map +1 -1
- package/dist/commands/drift.command.js +17 -4
- package/dist/commands/eslint.command.d.ts.map +1 -1
- package/dist/commands/eslint.command.js +20 -0
- package/dist/commands/export.command.d.ts.map +1 -1
- package/dist/commands/export.command.js +23 -1
- package/dist/commands/feedback-dispatch.command.d.ts.map +1 -1
- package/dist/commands/feedback-dispatch.command.js +29 -0
- package/dist/commands/feedback.command.d.ts.map +1 -1
- package/dist/commands/feedback.command.js +6 -1
- package/dist/commands/finish.command.d.ts.map +1 -1
- package/dist/commands/finish.command.js +32 -8
- package/dist/commands/fix.command.d.ts.map +1 -1
- package/dist/commands/fix.command.js +19 -0
- package/dist/commands/gate.command.d.ts +6 -1
- package/dist/commands/gate.command.d.ts.map +1 -1
- package/dist/commands/gate.command.js +50 -124
- package/dist/commands/gates.command.d.ts +54 -0
- package/dist/commands/gates.command.d.ts.map +1 -1
- package/dist/commands/gates.command.js +1314 -64
- package/dist/commands/gen.command.d.ts.map +1 -1
- package/dist/commands/gen.command.js +4 -0
- package/dist/commands/generated.command.d.ts +62 -0
- package/dist/commands/generated.command.d.ts.map +1 -1
- package/dist/commands/generated.command.js +639 -156
- package/dist/commands/graph-code-subverbs.d.ts +15 -0
- package/dist/commands/graph-code-subverbs.d.ts.map +1 -1
- package/dist/commands/graph-code-subverbs.js +203 -25
- package/dist/commands/graph.command.d.ts.map +1 -1
- package/dist/commands/graph.command.js +79 -37
- package/dist/commands/help.command.d.ts +30 -6
- package/dist/commands/help.command.d.ts.map +1 -1
- package/dist/commands/help.command.js +323 -199
- package/dist/commands/helper.command.d.ts +1 -0
- package/dist/commands/helper.command.d.ts.map +1 -1
- package/dist/commands/helper.command.js +195 -56
- package/dist/commands/impact.command.d.ts.map +1 -1
- package/dist/commands/impact.command.js +115 -12
- package/dist/commands/infer.command.d.ts.map +1 -1
- package/dist/commands/infer.command.js +20 -45
- package/dist/commands/ingest.command.d.ts +0 -1
- package/dist/commands/ingest.command.d.ts.map +1 -1
- package/dist/commands/ingest.command.js +25 -41
- package/dist/commands/knowledge-author.command.d.ts +0 -3
- package/dist/commands/knowledge-author.command.d.ts.map +1 -1
- package/dist/commands/knowledge-author.command.js +10 -23
- package/dist/commands/knowledge.command.d.ts.map +1 -1
- package/dist/commands/knowledge.command.js +469 -129
- package/dist/commands/languages.command.d.ts.map +1 -1
- package/dist/commands/languages.command.js +27 -0
- package/dist/commands/lint.command.d.ts.map +1 -1
- package/dist/commands/lint.command.js +3 -0
- package/dist/commands/mcp.command.d.ts +18 -0
- package/dist/commands/mcp.command.d.ts.map +1 -1
- package/dist/commands/mcp.command.js +33 -8
- package/dist/commands/onboard.command.d.ts.map +1 -1
- package/dist/commands/onboard.command.js +20 -0
- package/dist/commands/owners.command.d.ts.map +1 -1
- package/dist/commands/owners.command.js +14 -2
- package/dist/commands/packs-new.d.ts +13 -1
- package/dist/commands/packs-new.d.ts.map +1 -1
- package/dist/commands/packs-new.js +500 -335
- package/dist/commands/packs.command.d.ts.map +1 -1
- package/dist/commands/packs.command.js +378 -36
- package/dist/commands/paths.command.d.ts.map +1 -1
- package/dist/commands/paths.command.js +9 -1
- package/dist/commands/pipelines.command.d.ts.map +1 -1
- package/dist/commands/pipelines.command.js +7 -1
- package/dist/commands/plan-check.command.d.ts.map +1 -1
- package/dist/commands/plan-check.command.js +3 -0
- package/dist/commands/plan.command.d.ts.map +1 -1
- package/dist/commands/plan.command.js +3 -0
- package/dist/commands/playbooks.command.d.ts.map +1 -1
- package/dist/commands/playbooks.command.js +7 -2
- package/dist/commands/policy-lint.command.d.ts +19 -2
- package/dist/commands/policy-lint.command.d.ts.map +1 -1
- package/dist/commands/policy-lint.command.js +224 -65
- package/dist/commands/policy.command.d.ts.map +1 -1
- package/dist/commands/policy.command.js +6 -1
- package/dist/commands/pr.command.d.ts.map +1 -1
- package/dist/commands/pr.command.js +14 -0
- package/dist/commands/presets.command.d.ts.map +1 -1
- package/dist/commands/presets.command.js +12 -27
- package/dist/commands/profiles.command.d.ts.map +1 -1
- package/dist/commands/profiles.command.js +94 -26
- package/dist/commands/provenance.command.js +1 -1
- package/dist/commands/quality.command.d.ts.map +1 -1
- package/dist/commands/quality.command.js +129 -33
- package/dist/commands/recommend.command.d.ts +20 -4
- package/dist/commands/recommend.command.d.ts.map +1 -1
- package/dist/commands/recommend.command.js +172 -278
- package/dist/commands/registrations.command.d.ts.map +1 -1
- package/dist/commands/registrations.command.js +138 -13
- package/dist/commands/registry-lifecycle-run.d.ts +14 -0
- package/dist/commands/registry-lifecycle-run.d.ts.map +1 -0
- package/dist/commands/registry-lifecycle-run.js +336 -0
- package/dist/commands/registry.command.d.ts.map +1 -1
- package/dist/commands/registry.command.js +235 -62
- package/dist/commands/release.command.d.ts.map +1 -1
- package/dist/commands/release.command.js +99 -20
- package/dist/commands/report.command.d.ts.map +1 -1
- package/dist/commands/report.command.js +38 -2
- package/dist/commands/reuse-coverage.command.d.ts +23 -0
- package/dist/commands/reuse-coverage.command.d.ts.map +1 -0
- package/dist/commands/reuse-coverage.command.js +536 -0
- package/dist/commands/reuse.command.d.ts +3 -18
- package/dist/commands/reuse.command.d.ts.map +1 -1
- package/dist/commands/reuse.command.js +395 -244
- package/dist/commands/review.command.d.ts.map +1 -1
- package/dist/commands/review.command.js +33 -1
- package/dist/commands/rounds.command.d.ts.map +1 -1
- package/dist/commands/rounds.command.js +5 -0
- package/dist/commands/safety.command.d.ts.map +1 -1
- package/dist/commands/safety.command.js +9 -0
- package/dist/commands/scaffolds.command.d.ts.map +1 -1
- package/dist/commands/scaffolds.command.js +97 -25
- package/dist/commands/search.command.d.ts +0 -8
- package/dist/commands/search.command.d.ts.map +1 -1
- package/dist/commands/search.command.js +136 -28
- package/dist/commands/self-config-xrefs.command.d.ts +24 -0
- package/dist/commands/self-config-xrefs.command.d.ts.map +1 -0
- package/dist/commands/self-config-xrefs.command.js +170 -0
- package/dist/commands/self-config.command.d.ts.map +1 -1
- package/dist/commands/self-config.command.js +261 -65
- package/dist/commands/smart-context.command.d.ts.map +1 -1
- package/dist/commands/smart-context.command.js +39 -3
- package/dist/commands/spec.command.d.ts.map +1 -1
- package/dist/commands/spec.command.js +3 -0
- package/dist/commands/stats.command.d.ts.map +1 -1
- package/dist/commands/stats.command.js +3 -0
- package/dist/commands/surface.command.d.ts +6 -1
- package/dist/commands/surface.command.d.ts.map +1 -1
- package/dist/commands/surface.command.js +256 -54
- package/dist/commands/task-context.command.js +1 -1
- package/dist/commands/task.command.d.ts.map +1 -1
- package/dist/commands/task.command.js +22 -1
- package/dist/commands/templates.command.d.ts +4 -0
- package/dist/commands/templates.command.d.ts.map +1 -1
- package/dist/commands/templates.command.js +109 -22
- package/dist/commands/test.command.d.ts.map +1 -1
- package/dist/commands/test.command.js +161 -33
- package/dist/commands/tests.command.d.ts.map +1 -1
- package/dist/commands/tests.command.js +29 -3
- package/dist/commands/trace.command.d.ts.map +1 -1
- package/dist/commands/trace.command.js +29 -4
- package/dist/commands/watch.command.d.ts.map +1 -1
- package/dist/commands/watch.command.js +3 -0
- package/dist/commands/why.command.d.ts.map +1 -1
- package/dist/commands/why.command.js +3 -0
- package/dist/commands/wiring.command.d.ts +18 -4
- package/dist/commands/wiring.command.d.ts.map +1 -1
- package/dist/commands/wiring.command.js +362 -74
- package/dist/dashboard/code-intelligence-data.js +4 -4
- package/dist/diff/deleted-orphan-coverage.d.ts +32 -0
- package/dist/diff/deleted-orphan-coverage.d.ts.map +1 -0
- package/dist/diff/deleted-orphan-coverage.js +107 -0
- package/dist/diff/deleted-orphan-scope-notes.d.ts +23 -0
- package/dist/diff/deleted-orphan-scope-notes.d.ts.map +1 -0
- package/dist/diff/deleted-orphan-scope-notes.js +49 -0
- package/dist/diff/deleted-orphans.d.ts +32 -0
- package/dist/diff/deleted-orphans.d.ts.map +1 -1
- package/dist/diff/deleted-orphans.js +42 -2
- package/dist/dispatch/closest-match.d.ts +15 -0
- package/dist/dispatch/closest-match.d.ts.map +1 -0
- package/dist/dispatch/closest-match.js +47 -0
- package/dist/dispatch/global-flags.d.ts +94 -0
- package/dist/dispatch/global-flags.d.ts.map +1 -0
- package/dist/dispatch/global-flags.js +123 -0
- package/dist/dispatch/guard-invocation-input.d.ts +24 -0
- package/dist/dispatch/guard-invocation-input.d.ts.map +1 -0
- package/dist/dispatch/guard-invocation-input.js +1 -0
- package/dist/dispatch/guard-invocation.d.ts +33 -0
- package/dist/dispatch/guard-invocation.d.ts.map +1 -0
- package/dist/dispatch/guard-invocation.js +183 -0
- package/dist/dispatch/help-intercept.d.ts +22 -0
- package/dist/dispatch/help-intercept.d.ts.map +1 -0
- package/dist/dispatch/help-intercept.js +42 -0
- package/dist/dispatch/i-declared-invocation.d.ts +17 -0
- package/dist/dispatch/i-declared-invocation.d.ts.map +1 -0
- package/dist/dispatch/i-declared-invocation.js +1 -0
- package/dist/dispatch/i-unknown-flag-refusal-input.d.ts +28 -0
- package/dist/dispatch/i-unknown-flag-refusal-input.d.ts.map +1 -0
- package/dist/dispatch/i-unknown-flag-refusal-input.js +1 -0
- package/dist/dispatch/invocation-rejection-kind.d.ts +15 -0
- package/dist/dispatch/invocation-rejection-kind.d.ts.map +1 -0
- package/dist/dispatch/invocation-rejection-kind.js +15 -0
- package/dist/dispatch/invocation-rejection.d.ts +18 -0
- package/dist/dispatch/invocation-rejection.d.ts.map +1 -0
- package/dist/dispatch/invocation-rejection.js +1 -0
- package/dist/dispatch/judge-invocation.d.ts +24 -0
- package/dist/dispatch/judge-invocation.d.ts.map +1 -0
- package/dist/dispatch/judge-invocation.js +50 -0
- package/dist/dispatch/positional-mode.d.ts +18 -0
- package/dist/dispatch/positional-mode.d.ts.map +1 -0
- package/dist/dispatch/positional-mode.js +18 -0
- package/dist/dispatch/read-tracking-map.d.ts +28 -0
- package/dist/dispatch/read-tracking-map.d.ts.map +1 -0
- package/dist/dispatch/read-tracking-map.js +58 -0
- package/dist/dispatch/refuse-sibling-valve-flags.d.ts +30 -0
- package/dist/dispatch/refuse-sibling-valve-flags.d.ts.map +1 -0
- package/dist/dispatch/refuse-sibling-valve-flags.js +65 -0
- package/dist/dispatch/subverb-spec.d.ts +26 -0
- package/dist/dispatch/subverb-spec.d.ts.map +1 -0
- package/dist/dispatch/subverb-spec.js +1 -0
- package/dist/dispatch/undocumented-flag-reads.d.ts +22 -0
- package/dist/dispatch/undocumented-flag-reads.d.ts.map +1 -0
- package/dist/dispatch/undocumented-flag-reads.js +283 -0
- package/dist/dispatch/unknown-flag-refusal-mode.d.ts +13 -0
- package/dist/dispatch/unknown-flag-refusal-mode.d.ts.map +1 -0
- package/dist/dispatch/unknown-flag-refusal-mode.js +13 -0
- package/dist/dispatch/unknown-flag-refusal.d.ts +22 -0
- package/dist/dispatch/unknown-flag-refusal.d.ts.map +1 -0
- package/dist/dispatch/unknown-flag-refusal.js +57 -0
- package/dist/dispatch/unread-flags.d.ts +152 -0
- package/dist/dispatch/unread-flags.d.ts.map +1 -0
- package/dist/dispatch/unread-flags.js +295 -0
- package/dist/dispatch/verdict-valve-flag.d.ts +21 -0
- package/dist/dispatch/verdict-valve-flag.d.ts.map +1 -0
- package/dist/dispatch/verdict-valve-flag.js +21 -0
- package/dist/dispatch/walk-declared-subverbs.d.ts +14 -0
- package/dist/dispatch/walk-declared-subverbs.d.ts.map +1 -0
- package/dist/dispatch/walk-declared-subverbs.js +28 -0
- package/dist/exit-codes.d.ts +41 -3
- package/dist/exit-codes.d.ts.map +1 -1
- package/dist/exit-codes.js +153 -14
- package/dist/finish/run-finish.d.ts +72 -5
- package/dist/finish/run-finish.d.ts.map +1 -1
- package/dist/finish/run-finish.js +453 -104
- package/dist/gates/accepted-empty-note.d.ts +10 -0
- package/dist/gates/accepted-empty-note.d.ts.map +1 -0
- package/dist/gates/accepted-empty-note.js +11 -0
- package/dist/gates/allow-empty.d.ts +25 -0
- package/dist/gates/allow-empty.d.ts.map +1 -0
- package/dist/gates/allow-empty.js +27 -0
- package/dist/gates/asset-doctor-failing-units.d.ts +16 -0
- package/dist/gates/asset-doctor-failing-units.d.ts.map +1 -0
- package/dist/gates/asset-doctor-failing-units.js +14 -0
- package/dist/gates/asset-doctor-failure-line.d.ts +16 -0
- package/dist/gates/asset-doctor-failure-line.d.ts.map +1 -0
- package/dist/gates/asset-doctor-failure-line.js +28 -0
- package/dist/gates/empty-rule-advice-lines.d.ts +15 -0
- package/dist/gates/empty-rule-advice-lines.d.ts.map +1 -0
- package/dist/gates/empty-rule-advice-lines.js +20 -0
- package/dist/gates/gate-envelope.d.ts +85 -8
- package/dist/gates/gate-envelope.d.ts.map +1 -1
- package/dist/gates/gate-envelope.js +56 -7
- package/dist/gates/gate-rule-globs.d.ts +67 -0
- package/dist/gates/gate-rule-globs.d.ts.map +1 -0
- package/dist/gates/gate-rule-globs.js +139 -0
- package/dist/gates/gate-rule-view.d.ts +25 -6
- package/dist/gates/gate-rule-view.d.ts.map +1 -1
- package/dist/gates/gate-rule-view.js +105 -77
- package/dist/gates/i-coverage-dead-glob.d.ts +19 -0
- package/dist/gates/i-coverage-dead-glob.d.ts.map +1 -0
- package/dist/gates/i-coverage-dead-glob.js +1 -0
- package/dist/gates/i-coverage-negation.d.ts +13 -0
- package/dist/gates/i-coverage-negation.d.ts.map +1 -0
- package/dist/gates/i-coverage-negation.js +1 -0
- package/dist/gates/i-registration-query-settle-input.d.ts +18 -0
- package/dist/gates/i-registration-query-settle-input.d.ts.map +1 -0
- package/dist/gates/i-registration-query-settle-input.js +1 -0
- package/dist/gates/i-unit-state-note-row.d.ts +16 -0
- package/dist/gates/i-unit-state-note-row.d.ts.map +1 -0
- package/dist/gates/i-unit-state-note-row.js +1 -0
- package/dist/gates/i-unit-state-notes.d.ts +32 -0
- package/dist/gates/i-unit-state-notes.d.ts.map +1 -0
- package/dist/gates/i-unit-state-notes.js +1 -0
- package/dist/gates/incomplete-registry-inventory.d.ts +19 -0
- package/dist/gates/incomplete-registry-inventory.d.ts.map +1 -0
- package/dist/gates/incomplete-registry-inventory.js +63 -0
- package/dist/gates/measure-registration-roles.d.ts +10 -0
- package/dist/gates/measure-registration-roles.d.ts.map +1 -0
- package/dist/gates/measure-registration-roles.js +9 -0
- package/dist/gates/plane-verdict.d.ts +14 -0
- package/dist/gates/plane-verdict.d.ts.map +1 -0
- package/dist/gates/plane-verdict.js +22 -0
- package/dist/gates/qualify-clean-for-units.d.ts +12 -0
- package/dist/gates/qualify-clean-for-units.d.ts.map +1 -0
- package/dist/gates/qualify-clean-for-units.js +18 -0
- package/dist/gates/registration-graph-verdict.d.ts +34 -0
- package/dist/gates/registration-graph-verdict.d.ts.map +1 -0
- package/dist/gates/registration-graph-verdict.js +70 -0
- package/dist/gates/registration-roles.d.ts +9 -0
- package/dist/gates/registration-roles.d.ts.map +1 -0
- package/dist/gates/registration-roles.js +1 -0
- package/dist/gates/registry-liveness.d.ts +11 -0
- package/dist/gates/registry-liveness.d.ts.map +1 -0
- package/dist/gates/registry-liveness.js +13 -0
- package/dist/gates/rule-coverage.d.ts +225 -4
- package/dist/gates/rule-coverage.d.ts.map +1 -1
- package/dist/gates/rule-coverage.js +610 -43
- package/dist/gates/run-gate-planes.d.ts +58 -0
- package/dist/gates/run-gate-planes.d.ts.map +1 -0
- package/dist/gates/run-gate-planes.js +403 -0
- package/dist/gates/scaffold-selftest.d.ts +56 -0
- package/dist/gates/scaffold-selftest.d.ts.map +1 -0
- package/dist/gates/scaffold-selftest.js +119 -0
- package/dist/gates/seam-rejected-rules.d.ts +28 -0
- package/dist/gates/seam-rejected-rules.d.ts.map +1 -0
- package/dist/gates/seam-rejected-rules.js +95 -0
- package/dist/gates/self-test-check.d.ts +29 -0
- package/dist/gates/self-test-check.d.ts.map +1 -0
- package/dist/gates/self-test-check.js +1 -0
- package/dist/gates/self-test-subject.d.ts +28 -0
- package/dist/gates/self-test-subject.d.ts.map +1 -0
- package/dist/gates/self-test-subject.js +1 -0
- package/dist/gates/self-test.d.ts +20 -0
- package/dist/gates/self-test.d.ts.map +1 -0
- package/dist/gates/self-test.js +82 -0
- package/dist/gates/settle-verdict.d.ts +14 -0
- package/dist/gates/settle-verdict.d.ts.map +1 -0
- package/dist/gates/settle-verdict.js +13 -0
- package/dist/gates/settled-verdict.d.ts +8 -0
- package/dist/gates/settled-verdict.d.ts.map +1 -0
- package/dist/gates/settled-verdict.js +1 -0
- package/dist/gates/template-registry-coverage.d.ts +18 -0
- package/dist/gates/template-registry-coverage.d.ts.map +1 -0
- package/dist/gates/template-registry-coverage.js +24 -0
- package/dist/gates/unit-state-notes.d.ts +40 -0
- package/dist/gates/unit-state-notes.d.ts.map +1 -0
- package/dist/gates/unit-state-notes.js +71 -0
- package/dist/gates/verdict-line.d.ts +18 -0
- package/dist/gates/verdict-line.d.ts.map +1 -0
- package/dist/gates/verdict-line.js +40 -0
- package/dist/graph/graph-reuse-lookup.d.ts +10 -0
- package/dist/graph/graph-reuse-lookup.d.ts.map +1 -0
- package/dist/graph/graph-reuse-lookup.js +41 -0
- package/dist/graph/index-behind-hint.d.ts +11 -0
- package/dist/graph/index-behind-hint.d.ts.map +1 -0
- package/dist/graph/index-behind-hint.js +27 -0
- package/dist/knowledge/knowledge-stale-gate-flags.d.ts +3 -0
- package/dist/knowledge/knowledge-stale-gate-flags.d.ts.map +1 -0
- package/dist/knowledge/knowledge-stale-gate-flags.js +1 -0
- package/dist/knowledge/knowledge-stale-gate-input.d.ts +3 -0
- package/dist/knowledge/knowledge-stale-gate-input.d.ts.map +1 -0
- package/dist/knowledge/knowledge-stale-gate-input.js +1 -0
- package/dist/knowledge/knowledge-stale-gate-result.d.ts +3 -0
- package/dist/knowledge/knowledge-stale-gate-result.d.ts.map +1 -0
- package/dist/knowledge/knowledge-stale-gate-result.js +1 -0
- package/dist/knowledge/knowledge-stale-gate.d.ts +10 -0
- package/dist/knowledge/knowledge-stale-gate.d.ts.map +1 -0
- package/dist/knowledge/knowledge-stale-gate.js +9 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +204 -83
- package/dist/output/failure-hints.d.ts.map +1 -1
- package/dist/output/failure-hints.js +11 -9
- package/dist/output/rejected-entries-note.d.ts +57 -0
- package/dist/output/rejected-entries-note.d.ts.map +1 -0
- package/dist/output/rejected-entries-note.js +103 -0
- package/dist/output/stdout-is-pipe.d.ts +13 -0
- package/dist/output/stdout-is-pipe.d.ts.map +1 -0
- package/dist/output/stdout-is-pipe.js +21 -0
- package/dist/packs/stale-build-warning.d.ts +11 -0
- package/dist/packs/stale-build-warning.d.ts.map +1 -0
- package/dist/packs/stale-build-warning.js +23 -0
- package/dist/quality/run-quality.d.ts +123 -0
- package/dist/quality/run-quality.d.ts.map +1 -0
- package/dist/quality/run-quality.js +442 -0
- package/dist/schemas/json-schemas.d.ts +184 -3
- package/dist/schemas/json-schemas.d.ts.map +1 -1
- package/dist/schemas/json-schemas.js +113 -2
- package/dist/shrk.d.ts +3 -0
- package/dist/shrk.d.ts.map +1 -0
- package/dist/shrk.js +30 -0
- package/dist/surface/audience-applicability.d.ts +26 -0
- package/dist/surface/audience-applicability.d.ts.map +1 -0
- package/dist/surface/audience-applicability.js +60 -0
- package/dist/surface/catalog-command-safety.d.ts +18 -0
- package/dist/surface/catalog-command-safety.d.ts.map +1 -0
- package/dist/surface/catalog-command-safety.js +62 -0
- package/dist/surface/cli-command-resolver.d.ts +21 -0
- package/dist/surface/cli-command-resolver.d.ts.map +1 -0
- package/dist/surface/cli-command-resolver.js +87 -0
- package/dist/surface/command-dispatch-kind.d.ts +20 -0
- package/dist/surface/command-dispatch-kind.d.ts.map +1 -0
- package/dist/surface/command-dispatch-kind.js +20 -0
- package/dist/surface/command-index-entry.d.ts +40 -0
- package/dist/surface/command-index-entry.d.ts.map +1 -0
- package/dist/surface/command-index-entry.js +1 -0
- package/dist/surface/command-index.d.ts +77 -0
- package/dist/surface/command-index.d.ts.map +1 -0
- package/dist/surface/command-index.js +323 -0
- package/dist/surface/i-command-index.d.ts +22 -0
- package/dist/surface/i-command-index.d.ts.map +1 -0
- package/dist/surface/i-command-index.js +1 -0
- package/dist/surface/i-command-string-context.d.ts +20 -0
- package/dist/surface/i-command-string-context.d.ts.map +1 -0
- package/dist/surface/i-command-string-context.js +1 -0
- package/dist/surface/i-surface-denial.d.ts +13 -0
- package/dist/surface/i-surface-denial.d.ts.map +1 -0
- package/dist/surface/i-surface-denial.js +1 -0
- package/dist/surface/load-surface-context.d.ts +17 -1
- package/dist/surface/load-surface-context.d.ts.map +1 -1
- package/dist/surface/load-surface-context.js +48 -10
- package/dist/surface/not-enabled-error.d.ts +38 -4
- package/dist/surface/not-enabled-error.d.ts.map +1 -1
- package/dist/surface/not-enabled-error.js +96 -6
- package/dist/surface/profiles.d.ts +7 -0
- package/dist/surface/profiles.d.ts.map +1 -1
- package/dist/surface/resolve-command-string.d.ts +10 -0
- package/dist/surface/resolve-command-string.d.ts.map +1 -0
- package/dist/surface/resolve-command-string.js +572 -0
- package/dist/surface/surface-config-writer.d.ts +7 -2
- package/dist/surface/surface-config-writer.d.ts.map +1 -1
- package/dist/surface/surface-config-writer.js +25 -6
- package/dist/surface/surface-layer.d.ts +11 -0
- package/dist/surface/surface-layer.d.ts.map +1 -0
- package/dist/surface/surface-layer.js +11 -0
- package/dist/surface/surface-refusal-reason.d.ts +16 -0
- package/dist/surface/surface-refusal-reason.d.ts.map +1 -0
- package/dist/surface/surface-refusal-reason.js +16 -0
- package/dist/surface/surface-selector.d.ts +26 -0
- package/dist/surface/surface-selector.d.ts.map +1 -0
- package/dist/surface/surface-selector.js +42 -0
- package/dist/surface/surface-summary.d.ts +61 -18
- package/dist/surface/surface-summary.d.ts.map +1 -1
- package/dist/surface/surface-summary.js +147 -60
- package/dist/surface/tier.d.ts +85 -22
- package/dist/surface/tier.d.ts.map +1 -1
- package/dist/surface/tier.js +132 -30
- package/dist/usage/usage-log.d.ts +6 -1
- package/dist/usage/usage-log.d.ts.map +1 -1
- package/dist/usage/usage-log.js +7 -2
- package/dist/validation/run-validation-loop.d.ts +9 -0
- package/dist/validation/run-validation-loop.d.ts.map +1 -1
- package/dist/validation/run-validation-loop.js +14 -11
- package/dist/validation/typecheck-emitted.d.ts +8 -9
- package/dist/validation/typecheck-emitted.d.ts.map +1 -1
- package/dist/validation/typecheck-emitted.js +17 -97
- package/package.json +34 -34
|
@@ -2,6 +2,7 @@ import { mkdirSync, writeFileSync } from 'node:fs';
|
|
|
2
2
|
import * as nodePath from 'node:path';
|
|
3
3
|
import { buildAgentContract, inspectSharkcraft, renderAgentContractHtml, renderAgentContractMarkdown, renderAgentContractText, } from '@shrkcrft/inspector';
|
|
4
4
|
import { flagBool, flagString, resolveCwd, } from "../command-registry.js";
|
|
5
|
+
import { PositionalMode } from "../dispatch/positional-mode.js";
|
|
5
6
|
import { asJson } from "../output/format-output.js";
|
|
6
7
|
import { contractApproveCommand, contractCheckCommand, contractStatusCommand, } from "./contract-gate.command.js";
|
|
7
8
|
import { contractTemplateCommand } from "./contract-templates.command.js";
|
|
@@ -23,6 +24,40 @@ function safeSlug(s) {
|
|
|
23
24
|
}
|
|
24
25
|
export const contractCommand = {
|
|
25
26
|
name: 'contract',
|
|
27
|
+
// Free: `contract "<task>"` takes the task as free text.
|
|
28
|
+
positionals: PositionalMode.Free,
|
|
29
|
+
subverbs: [
|
|
30
|
+
{ name: 'check', description: 'Check a saved contract against the workspace.', usage: 'shrk contract check <contract.json>', positionals: PositionalMode.Path },
|
|
31
|
+
{
|
|
32
|
+
name: 'approve',
|
|
33
|
+
description: 'Approve a saved contract.',
|
|
34
|
+
usage: 'shrk contract approve <contract.json> --by <name> --reason "<why>"',
|
|
35
|
+
positionals: PositionalMode.Path,
|
|
36
|
+
},
|
|
37
|
+
{ name: 'status', description: 'Inspect a saved contract file.', usage: 'shrk contract status <contract.json>', positionals: PositionalMode.Path },
|
|
38
|
+
{
|
|
39
|
+
name: 'template',
|
|
40
|
+
description: 'Contract templates: list / get / render / recommend.',
|
|
41
|
+
usage: 'shrk contract template <list|get|render|recommend>',
|
|
42
|
+
positionals: PositionalMode.None,
|
|
43
|
+
subverbs: [
|
|
44
|
+
{ name: 'list', description: 'List the contract templates.', usage: 'shrk contract template list [--json]' },
|
|
45
|
+
{ name: 'get', description: 'Show one contract template.', usage: 'shrk contract template get <id>', positionals: PositionalMode.Free },
|
|
46
|
+
{
|
|
47
|
+
name: 'render',
|
|
48
|
+
description: 'Render a contract template for a task.',
|
|
49
|
+
usage: 'shrk contract template render <id> --task "<task>"',
|
|
50
|
+
positionals: PositionalMode.Free,
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'recommend',
|
|
54
|
+
description: 'Recommend a contract template for a task.',
|
|
55
|
+
usage: 'shrk contract template recommend "<task>"',
|
|
56
|
+
positionals: PositionalMode.Free,
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
},
|
|
60
|
+
],
|
|
26
61
|
description: 'Build a deterministic agent contract for a task (intent + risk + impact + ownership + boundaries + policies + playbooks). Read-only unless --save (writes only to .sharkcraft/contracts/).',
|
|
27
62
|
usage: 'shrk contract "<task>" [--role developer|reviewer|architect|release-manager|security|ai-agent] [--mode conservative|balanced|aggressive] [--files a,b,c] [--since <ref>] [--staged] [--format text|markdown|html|json] [--output <file>] [--save]',
|
|
28
63
|
async run(args) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conventions.command.d.ts","sourceRoot":"","sources":["../../src/commands/conventions.command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"conventions.command.d.ts","sourceRoot":"","sources":["../../src/commands/conventions.command.ts"],"names":[],"mappings":"AAgBA,OAAO,EAKL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAUhC,eAAO,MAAM,sBAAsB,EAAE,eA0CpC,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,eAsCnC,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,eAoEtC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,eAqHrC,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,eAOvC,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,eAsDhC,CAAC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
* `shrk conventions ...` — pack/local conventions surface.
|
|
3
|
-
*
|
|
4
|
-
* Read-only listing + doctor + check. `check` runs the loaded conventions
|
|
5
|
-
* against caller-supplied files (or git diff). Never writes.
|
|
6
|
-
*/
|
|
7
|
-
import { checkConventionsAgainstFiles, findConvention, getChangedFiles, inspectSharkcraft, listConventions, listConventionIssues, } from '@shrkcrft/inspector';
|
|
1
|
+
import { checkConventionsAgainstFiles, ContributionKind, findConvention, getChangedFiles, inspectSharkcraft, listConventions, loadConventions, } from '@shrkcrft/inspector';
|
|
8
2
|
import { flagBool, flagString, flagList, resolveCwd, } from "../command-registry.js";
|
|
3
|
+
import { PositionalMode } from "../dispatch/positional-mode.js";
|
|
4
|
+
import { ExitCode } from "../exit-codes.js";
|
|
5
|
+
import { ALLOW_EMPTY_FLAG, allowEmptyValve } from "../gates/allow-empty.js";
|
|
6
|
+
import { buildGateEnvelope } from "../gates/gate-envelope.js";
|
|
7
|
+
import { settleVerdict } from "../gates/settle-verdict.js";
|
|
8
|
+
import { verdictLine } from "../gates/verdict-line.js";
|
|
9
9
|
import { asJson, header } from "../output/format-output.js";
|
|
10
|
+
import { collectListVerbNote, writeListVerbNote } from "../output/rejected-entries-note.js";
|
|
10
11
|
export const conventionsListCommand = {
|
|
11
12
|
name: 'list',
|
|
12
13
|
description: 'List registered conventions. Read-only.',
|
|
@@ -22,19 +23,29 @@ export const conventionsListCommand = {
|
|
|
22
23
|
filtered = filtered.filter((e) => e.convention.kind === kind);
|
|
23
24
|
if (source)
|
|
24
25
|
filtered = filtered.filter((e) => e.source === source);
|
|
26
|
+
// A convention its loader refused, and a conventions file that failed to
|
|
27
|
+
// load, are said out loud (round 12, 12.1 + review A-4) — never a silently
|
|
28
|
+
// shorter list. The exit stays 0: a list is no verdict.
|
|
29
|
+
const note = { source, next: 'shrk conventions doctor' };
|
|
30
|
+
const outcomes = await collectListVerbNote(inspection, [ContributionKind.Convention], note);
|
|
25
31
|
if (flagBool(args, 'json')) {
|
|
26
32
|
process.stdout.write(asJson(filtered) + '\n');
|
|
33
|
+
writeListVerbNote(outcomes, inspection.projectRoot, { ...note, json: true });
|
|
27
34
|
return 0;
|
|
28
35
|
}
|
|
29
36
|
process.stdout.write(header(`Conventions (${filtered.length})`));
|
|
30
37
|
if (filtered.length === 0) {
|
|
31
|
-
|
|
32
|
-
|
|
38
|
+
// Never point at a conventions file that exists and FAILED as the place
|
|
39
|
+
// to contribute — the note below names it and its error.
|
|
40
|
+
process.stdout.write(outcomes.loadFailures.length > 0
|
|
41
|
+
? ' (none loaded — a conventions file failed to load; see below)\n'
|
|
42
|
+
: ' (none — contribute via a pack manifest "conventionFiles" entry or sharkcraft/conventions.ts)\n');
|
|
33
43
|
}
|
|
34
44
|
for (const e of filtered) {
|
|
35
45
|
const src = e.source === 'pack' ? `pack:${e.packageName ?? '?'}` : e.source;
|
|
36
46
|
process.stdout.write(` • ${e.convention.kind.padEnd(12)} ${e.convention.id.padEnd(28)} ${e.convention.title} [${src}]\n`);
|
|
37
47
|
}
|
|
48
|
+
writeListVerbNote(outcomes, inspection.projectRoot, note);
|
|
38
49
|
return 0;
|
|
39
50
|
},
|
|
40
51
|
};
|
|
@@ -81,61 +92,172 @@ export const conventionsGetCommand = {
|
|
|
81
92
|
};
|
|
82
93
|
export const conventionsDoctorCommand = {
|
|
83
94
|
name: 'doctor',
|
|
84
|
-
description: 'Surface load/validation issues for conventions.',
|
|
85
|
-
usage: 'shrk conventions doctor [--json]',
|
|
95
|
+
description: 'Surface load / validation issues for conventions — an invalid shape (a kind, severity or reference kind outside its closed set is named with the allowed values), a shape warning, a file that failed to load. Exit 0 · 1 an invalid convention (or a warning under --strict) · 2 a convention file never read, or none discovered (--allow-empty accepts that explicitly). Read-only.',
|
|
96
|
+
usage: 'shrk conventions doctor [--strict] [--allow-empty] [--json]',
|
|
97
|
+
booleanFlags: new Set(['json', 'strict', ALLOW_EMPTY_FLAG]),
|
|
86
98
|
async run(args) {
|
|
87
99
|
const cwd = resolveCwd(args);
|
|
88
100
|
const inspection = await inspectSharkcraft({ cwd });
|
|
89
|
-
const issues = await
|
|
101
|
+
const { entries, issues, files } = await loadConventions(inspection);
|
|
102
|
+
// Convention FILES are the unit: a file that failed to load was never
|
|
103
|
+
// validated, so "no issues" over it is not a pass.
|
|
104
|
+
const coverage = {
|
|
105
|
+
unit: 'convention files',
|
|
106
|
+
expected: files.discovered,
|
|
107
|
+
examined: files.discovered - files.unread.length,
|
|
108
|
+
root: inspection.projectRoot,
|
|
109
|
+
reason: files.discovered === 0
|
|
110
|
+
? 'no sharkcraft/conventions.ts, conventionFiles entry or pack conventionFiles'
|
|
111
|
+
: 'missing or failed to load, so their conventions were never validated',
|
|
112
|
+
...(files.unread.length > 0 ? { unexamined: files.unread.slice(0, 20), unexaminedTotal: files.unread.length } : {}),
|
|
113
|
+
...allowEmptyValve(args, files.discovered),
|
|
114
|
+
};
|
|
115
|
+
const errors = issues.filter((i) => i.severity === 'error').length;
|
|
116
|
+
const warnings = issues.filter((i) => i.severity === 'warning').length;
|
|
117
|
+
const strict = flagBool(args, 'strict');
|
|
118
|
+
const settled = settleVerdict(errors > 0 || (strict && warnings > 0) ? 1 : 0, [coverage]);
|
|
90
119
|
if (flagBool(args, 'json')) {
|
|
91
|
-
process.stdout.write(asJson({
|
|
92
|
-
|
|
120
|
+
process.stdout.write(asJson({
|
|
121
|
+
issues,
|
|
122
|
+
conventions: entries.length,
|
|
123
|
+
files,
|
|
124
|
+
coverage,
|
|
125
|
+
exitCode: settled.exit,
|
|
126
|
+
verdict: settled.verdict,
|
|
127
|
+
shortfalls: settled.shortfalls,
|
|
128
|
+
accepted: settled.accepted,
|
|
129
|
+
}) + '\n');
|
|
130
|
+
return settled.exit;
|
|
93
131
|
}
|
|
94
132
|
process.stdout.write(header('Conventions doctor'));
|
|
95
|
-
|
|
96
|
-
process.stdout.write(' ok — no load/validation issues.\n');
|
|
97
|
-
return 0;
|
|
98
|
-
}
|
|
133
|
+
process.stdout.write(` ${entries.length} convention(s) loaded from ${files.discovered - files.unread.length} of ${files.discovered} file(s) · ${errors} error(s) · ${warnings} warning(s)\n`);
|
|
99
134
|
for (const i of issues) {
|
|
100
|
-
|
|
135
|
+
const where = i.conventionId ? ` ${i.conventionId}` : '';
|
|
136
|
+
process.stdout.write(` ${i.severity.padEnd(7)} [${i.code}]${where} ${i.message}\n`);
|
|
137
|
+
}
|
|
138
|
+
const clean = files.discovered === 0
|
|
139
|
+
? 'No conventions declared — accepted.'
|
|
140
|
+
: warnings > 0
|
|
141
|
+
? `No blocking convention issues — ${warnings} warning(s) reported above.`
|
|
142
|
+
: 'ok — no load/validation issues.';
|
|
143
|
+
const line = verdictLine(settled, clean, files.discovered === 0 ? 'No convention files discovered — nothing validated.' : undefined);
|
|
144
|
+
if (line)
|
|
145
|
+
process.stdout.write(`\n${line}\n`);
|
|
146
|
+
if (settled.exit === ExitCode.NotVerified && files.discovered === 0) {
|
|
147
|
+
process.stdout.write('Pass --allow-empty to accept a project with no conventions explicitly.\n');
|
|
101
148
|
}
|
|
102
|
-
return
|
|
149
|
+
return settled.exit;
|
|
103
150
|
},
|
|
104
151
|
};
|
|
105
152
|
export const conventionsCheckCommand = {
|
|
106
153
|
name: 'check',
|
|
107
|
-
description: 'Run loaded conventions against files (--files / --since / --staged).',
|
|
108
|
-
usage: 'shrk conventions check [--files a,b,c] [--since <ref>] [--staged] [--json]',
|
|
154
|
+
description: 'Run the loaded conventions against files (--files / --since / --staged; default: the working-tree change). Exit 0 no error-severity hit · 1 an error-severity hit · 2 NOT VERIFIED — no file in scope, no convention declared (--allow-empty accepts either explicitly), or a convention file never read · 3 usage. Read-only.',
|
|
155
|
+
usage: 'shrk conventions check [--files a,b,c] [--since <ref>] [--staged] [--allow-empty] [--json]',
|
|
156
|
+
booleanFlags: new Set(['json', 'staged', ALLOW_EMPTY_FLAG]),
|
|
109
157
|
async run(args) {
|
|
110
158
|
const cwd = resolveCwd(args);
|
|
111
159
|
const inspection = await inspectSharkcraft({ cwd });
|
|
112
160
|
let files = [];
|
|
161
|
+
let scope = 'the working-tree change';
|
|
113
162
|
const explicit = flagList(args, 'files');
|
|
114
163
|
if (explicit.length > 0) {
|
|
115
164
|
files = explicit;
|
|
165
|
+
scope = '--files';
|
|
116
166
|
}
|
|
117
167
|
else if (flagBool(args, 'staged')) {
|
|
118
168
|
files = getChangedFiles(cwd, { staged: true });
|
|
169
|
+
scope = 'the staged change';
|
|
119
170
|
}
|
|
120
171
|
else {
|
|
121
172
|
const since = flagString(args, 'since');
|
|
122
173
|
files = since ? getChangedFiles(cwd, { since }) : getChangedFiles(cwd, {});
|
|
174
|
+
if (since)
|
|
175
|
+
scope = `the change since ${since}`;
|
|
123
176
|
}
|
|
177
|
+
// Round 13: a verdict verb. "Nothing to check" is not a pass — an empty
|
|
178
|
+
// file scope, a project with no convention, or a convention file that
|
|
179
|
+
// never loaded (its conventions were never checked) settle NOT VERIFIED
|
|
180
|
+
// (2) through the shared gate envelope; it printed "ok — no violations"
|
|
181
|
+
// at exit 0 over all three. `--allow-empty` accepts an empty scope or an
|
|
182
|
+
// empty registry explicitly (printed) — never an unread file.
|
|
183
|
+
const loaded = await loadConventions(inspection);
|
|
124
184
|
const report = await checkConventionsAgainstFiles(inspection, files);
|
|
185
|
+
const unread = loaded.files.unread;
|
|
186
|
+
const rows = [
|
|
187
|
+
{
|
|
188
|
+
id: 'convention files',
|
|
189
|
+
type: 'convention',
|
|
190
|
+
status: 'passed',
|
|
191
|
+
severity: 'warning',
|
|
192
|
+
counts: { discovered: loaded.files.discovered, unread: unread.length, conventions: loaded.entries.length },
|
|
193
|
+
violations: [],
|
|
194
|
+
coverage: {
|
|
195
|
+
unit: 'convention files',
|
|
196
|
+
expected: loaded.files.discovered,
|
|
197
|
+
examined: loaded.files.discovered - unread.length,
|
|
198
|
+
root: inspection.projectRoot,
|
|
199
|
+
reason: loaded.files.discovered === 0
|
|
200
|
+
? 'no sharkcraft/conventions.ts, conventionFiles entry or pack conventionFiles — nothing to check the files against'
|
|
201
|
+
: 'missing or failed to load, so their conventions were never checked',
|
|
202
|
+
...(unread.length > 0 ? { unexamined: unread.slice(0, 20), unexaminedTotal: unread.length } : {}),
|
|
203
|
+
...allowEmptyValve(args, loaded.files.discovered),
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
...loaded.entries.map((e) => {
|
|
207
|
+
const hits = report.hits.filter((h) => h.conventionId === e.convention.id);
|
|
208
|
+
return {
|
|
209
|
+
id: e.convention.id,
|
|
210
|
+
type: 'convention',
|
|
211
|
+
status: hits.some((h) => h.severity === 'error') ? 'failed' : 'passed',
|
|
212
|
+
severity: e.convention.severity === 'error' ? 'error' : 'warning',
|
|
213
|
+
counts: { rules: e.convention.rules.length, hits: hits.length },
|
|
214
|
+
violations: hits.map((h) => ({ id: `${h.conventionId}/${h.ruleId}`, file: h.file, message: h.message })),
|
|
215
|
+
coverage: { unit: 'conventions', expected: 1, examined: 1 },
|
|
216
|
+
};
|
|
217
|
+
}),
|
|
218
|
+
];
|
|
219
|
+
const gate = buildGateEnvelope('conventions check', report.verdict === 'clean' ? ExitCode.VerifiedPass : ExitCode.Failure, rows, {
|
|
220
|
+
unit: 'files',
|
|
221
|
+
expected: files.length,
|
|
222
|
+
examined: files.length,
|
|
223
|
+
root: inspection.projectRoot,
|
|
224
|
+
reason: `no file in ${scope} — nothing to check the conventions against`,
|
|
225
|
+
...allowEmptyValve(args, files.length),
|
|
226
|
+
});
|
|
125
227
|
if (flagBool(args, 'json')) {
|
|
126
|
-
process.stdout.write(asJson(
|
|
127
|
-
|
|
228
|
+
process.stdout.write(asJson({
|
|
229
|
+
...report,
|
|
230
|
+
// The engine's `clean` over an empty scope is not a pass (round 13
|
|
231
|
+
// review): at 2 the top-level verdict says so, never contradicting
|
|
232
|
+
// `exitCode` / `gate.verdict` beside it.
|
|
233
|
+
verdict: gate.exit === ExitCode.NotVerified ? 'not-verified' : report.verdict,
|
|
234
|
+
conventions: loaded.entries.length,
|
|
235
|
+
exitCode: gate.exit,
|
|
236
|
+
shortfalls: gate.shortfalls,
|
|
237
|
+
accepted: gate.accepted,
|
|
238
|
+
gate,
|
|
239
|
+
}) + '\n');
|
|
240
|
+
return gate.exit;
|
|
128
241
|
}
|
|
129
242
|
process.stdout.write(header(`Convention check (${report.filesScanned} files, ${report.hits.length} hits)`));
|
|
130
|
-
if (report.hits.length === 0) {
|
|
131
|
-
process.stdout.write(' ok — no violations.\n');
|
|
132
|
-
return 0;
|
|
133
|
-
}
|
|
134
243
|
for (const h of report.hits.slice(0, 200)) {
|
|
135
244
|
process.stdout.write(` ${h.severity.padEnd(7)} ${h.conventionId}/${h.ruleId} — ${h.file}\n`);
|
|
136
245
|
process.stdout.write(` ${h.message}\n`);
|
|
137
246
|
}
|
|
138
|
-
|
|
247
|
+
const empty = files.length === 0 || loaded.files.discovered === 0;
|
|
248
|
+
const warnings = report.hits.filter((h) => h.severity !== 'error').length;
|
|
249
|
+
const clean = empty
|
|
250
|
+
? 'Nothing to check — accepted.'
|
|
251
|
+
: warnings > 0
|
|
252
|
+
? `No blocking convention violation — ${warnings} non-error hit(s) reported above.`
|
|
253
|
+
: 'ok — no violations.';
|
|
254
|
+
const line = verdictLine(gate, clean);
|
|
255
|
+
if (line)
|
|
256
|
+
process.stdout.write(`\n${line}\n`);
|
|
257
|
+
if (gate.exit === ExitCode.NotVerified && empty) {
|
|
258
|
+
process.stdout.write(`Pass --${ALLOW_EMPTY_FLAG} to accept an empty changeset or a project with no conventions explicitly.\n`);
|
|
259
|
+
}
|
|
260
|
+
return gate.exit;
|
|
139
261
|
},
|
|
140
262
|
};
|
|
141
263
|
export const conventionsExplainCommand = {
|
|
@@ -150,6 +272,44 @@ export const conventionsCommand = {
|
|
|
150
272
|
name: 'conventions',
|
|
151
273
|
description: 'Generic conventions registry (naming / path / barrel / layout / command / validation / ownership / testing / release / safety). Read-only.',
|
|
152
274
|
usage: 'shrk conventions list|get|doctor|check|explain ...',
|
|
275
|
+
// Declared (round 11 review): the dispatcher guard refuses an unknown verb
|
|
276
|
+
// with the closest one, and the declared walk reaches `conventions doctor` —
|
|
277
|
+
// a verdict verb, so a bad flag there exits 3, labelled with its own path.
|
|
278
|
+
positionals: PositionalMode.None,
|
|
279
|
+
subverbs: [
|
|
280
|
+
{
|
|
281
|
+
name: conventionsListCommand.name,
|
|
282
|
+
description: conventionsListCommand.description,
|
|
283
|
+
usage: conventionsListCommand.usage,
|
|
284
|
+
positionals: PositionalMode.None,
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
name: conventionsGetCommand.name,
|
|
288
|
+
description: conventionsGetCommand.description,
|
|
289
|
+
usage: conventionsGetCommand.usage,
|
|
290
|
+
positionals: PositionalMode.Free,
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
name: conventionsDoctorCommand.name,
|
|
294
|
+
description: conventionsDoctorCommand.description,
|
|
295
|
+
usage: conventionsDoctorCommand.usage,
|
|
296
|
+
positionals: PositionalMode.None,
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
name: conventionsCheckCommand.name,
|
|
300
|
+
description: conventionsCheckCommand.description,
|
|
301
|
+
usage: conventionsCheckCommand.usage,
|
|
302
|
+
positionals: PositionalMode.None,
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
name: conventionsExplainCommand.name,
|
|
306
|
+
description: conventionsExplainCommand.description,
|
|
307
|
+
usage: conventionsExplainCommand.usage,
|
|
308
|
+
positionals: PositionalMode.Free,
|
|
309
|
+
},
|
|
310
|
+
],
|
|
311
|
+
// The group parses every subverb's argv, so the subverbs' boolean flags live here too.
|
|
312
|
+
booleanFlags: new Set(['json', 'strict', 'staged', ALLOW_EMPTY_FLAG]),
|
|
153
313
|
async run(args) {
|
|
154
314
|
const sub = args.positional[0];
|
|
155
315
|
args.positional = args.positional.slice(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.command.d.ts","sourceRoot":"","sources":["../../src/commands/coverage.command.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"coverage.command.d.ts","sourceRoot":"","sources":["../../src/commands/coverage.command.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAIhC,eAAO,MAAM,eAAe,EAAE,eA0C7B,CAAC"}
|
|
@@ -1,8 +1,17 @@
|
|
|
1
1
|
import { buildCoverageReport, buildScaffoldCoverageReport, inspectSharkcraft, renderScaffoldCoverageMarkdown, } from '@shrkcrft/inspector';
|
|
2
2
|
import { flagBool, flagString, resolveCwd, } from "../command-registry.js";
|
|
3
|
+
import { PositionalMode } from "../dispatch/positional-mode.js";
|
|
3
4
|
import { asJson, header, kv } from "../output/format-output.js";
|
|
4
5
|
export const coverageCommand = {
|
|
5
6
|
name: 'coverage',
|
|
7
|
+
positionals: PositionalMode.None,
|
|
8
|
+
subverbs: [
|
|
9
|
+
{
|
|
10
|
+
name: 'scaffolds',
|
|
11
|
+
description: 'Scaffold coverage for a task or a domain.',
|
|
12
|
+
usage: 'shrk coverage scaffolds [--task "<task>"|--domain <domain>] [--json]',
|
|
13
|
+
},
|
|
14
|
+
],
|
|
6
15
|
description: 'Report relationship/coverage quality across registries + scaffold coverage (`shrk coverage scaffolds --task "<task>"`).',
|
|
7
16
|
usage: 'shrk [--cwd <dir>] coverage [--json]\n shrk [--cwd <dir>] coverage scaffolds [--task "<task>"|--domain <domain>] [--json]',
|
|
8
17
|
async run(args) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daily.commands.d.ts","sourceRoot":"","sources":["../../src/commands/daily.commands.ts"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"daily.commands.d.ts","sourceRoot":"","sources":["../../src/commands/daily.commands.ts"],"names":[],"mappings":"AAOA,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAShC,eAAO,MAAM,WAAW,EAAE,eAsFzB,CAAC;AAmBF,eAAO,MAAM,cAAc,EAAE,eAyH5B,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { buildAiReadinessReport, buildTaskPacket, inspectSharkcraft, runDoctor, } from '@shrkcrft/inspector';
|
|
2
2
|
import { recommendPresets } from '@shrkcrft/presets';
|
|
3
3
|
import { flagBool, flagNumber, resolveCwd, } from "../command-registry.js";
|
|
4
|
+
import { PositionalMode } from "../dispatch/positional-mode.js";
|
|
4
5
|
import { asJson, header, kv } from "../output/format-output.js";
|
|
6
|
+
import { tryExplainBoundaryRule } from "./boundaries.command.js";
|
|
5
7
|
import { tryExplainGateRule } from "./gates.command.js";
|
|
6
8
|
// ────────────────────────────────────────────────────────────────────────
|
|
7
9
|
// shrk next — "what should I do right now in this repo?"
|
|
@@ -84,7 +86,9 @@ export const nextCommand = {
|
|
|
84
86
|
},
|
|
85
87
|
};
|
|
86
88
|
// ────────────────────────────────────────────────────────────────────────
|
|
87
|
-
// shrk find —
|
|
89
|
+
// Topic matching for `explain`. (`shrk find` was retired — `shrk search` is
|
|
90
|
+
// the grouped search across every kind; its handler lingered here
|
|
91
|
+
// unregistered.)
|
|
88
92
|
// ────────────────────────────────────────────────────────────────────────
|
|
89
93
|
function lc(s) {
|
|
90
94
|
return s.toLowerCase();
|
|
@@ -93,86 +97,13 @@ function matches(query, ...texts) {
|
|
|
93
97
|
const q = lc(query);
|
|
94
98
|
return texts.some((t) => typeof t === 'string' && lc(t).includes(q));
|
|
95
99
|
}
|
|
96
|
-
export const findCommand = {
|
|
97
|
-
name: 'find',
|
|
98
|
-
description: 'Search across knowledge / rules / paths / templates / pipelines / packs / presets in one place.',
|
|
99
|
-
usage: 'shrk [--cwd <dir>] find "<query>" [--limit N] [--json]',
|
|
100
|
-
async run(args) {
|
|
101
|
-
const query = args.positional.join(' ').trim();
|
|
102
|
-
if (!query) {
|
|
103
|
-
process.stderr.write('Usage: shrk find "<query>"\n');
|
|
104
|
-
return 2;
|
|
105
|
-
}
|
|
106
|
-
const limit = flagNumber(args, 'limit') ?? 8;
|
|
107
|
-
const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
|
|
108
|
-
const knowledge = inspection.knowledgeEntries
|
|
109
|
-
.filter((e) => matches(query, e.id, e.title, e.content, e.tags.join(' ')))
|
|
110
|
-
.slice(0, limit);
|
|
111
|
-
const rules = inspection.ruleService.list()
|
|
112
|
-
.filter((r) => matches(query, r.id, r.title, r.content))
|
|
113
|
-
.slice(0, limit);
|
|
114
|
-
const paths = inspection.pathService.list()
|
|
115
|
-
.filter((p) => matches(query, p.id, p.title, p.content))
|
|
116
|
-
.slice(0, limit);
|
|
117
|
-
const templates = inspection.templates
|
|
118
|
-
.filter((t) => matches(query, t.id, t.name, t.description))
|
|
119
|
-
.slice(0, limit);
|
|
120
|
-
const pipelines = inspection.pipelines
|
|
121
|
-
.filter((p) => matches(query, p.id, p.title, p.description))
|
|
122
|
-
.slice(0, limit);
|
|
123
|
-
const packs = inspection.packs.discoveredPacks
|
|
124
|
-
.filter((p) => matches(query, p.packageName, p.manifest?.info.description))
|
|
125
|
-
.slice(0, limit);
|
|
126
|
-
const presets = inspection.presetRegistry
|
|
127
|
-
.list()
|
|
128
|
-
.filter((p) => matches(query, p.id, p.title, p.description, (p.tags ?? []).join(' ')))
|
|
129
|
-
.slice(0, limit);
|
|
130
|
-
if (flagBool(args, 'json')) {
|
|
131
|
-
process.stdout.write(asJson({
|
|
132
|
-
query,
|
|
133
|
-
knowledge: knowledge.map((e) => ({ id: e.id, title: e.title, type: e.type })),
|
|
134
|
-
rules: rules.map((r) => ({ id: r.id, title: r.title })),
|
|
135
|
-
paths: paths.map((p) => ({ id: p.id, title: p.title })),
|
|
136
|
-
templates: templates.map((t) => ({ id: t.id, name: t.name })),
|
|
137
|
-
pipelines: pipelines.map((p) => ({ id: p.id, title: p.title })),
|
|
138
|
-
packs: packs.map((p) => ({ name: p.packageName, version: p.packageVersion })),
|
|
139
|
-
presets: presets.map((p) => ({ id: p.id, title: p.title })),
|
|
140
|
-
}) + '\n');
|
|
141
|
-
return 0;
|
|
142
|
-
}
|
|
143
|
-
process.stdout.write(header(`find: ${query}`));
|
|
144
|
-
function group(title, items) {
|
|
145
|
-
if (items.length === 0)
|
|
146
|
-
return;
|
|
147
|
-
process.stdout.write(`\n${title} (${items.length}):\n`);
|
|
148
|
-
for (const it of items)
|
|
149
|
-
process.stdout.write(` ${it.line}\n`);
|
|
150
|
-
}
|
|
151
|
-
group('Knowledge', knowledge.map((e) => ({ line: `${e.id.padEnd(30)} ${e.title}` })));
|
|
152
|
-
group('Rules', rules.map((r) => ({ line: `${r.id.padEnd(30)} ${r.title}` })));
|
|
153
|
-
group('Paths', paths.map((p) => ({ line: `${p.id.padEnd(30)} ${p.title}` })));
|
|
154
|
-
group('Templates', templates.map((t) => ({ line: `${t.id.padEnd(30)} ${t.name}` })));
|
|
155
|
-
group('Pipelines', pipelines.map((p) => ({ line: `${p.id.padEnd(30)} ${p.title}` })));
|
|
156
|
-
group('Packs', packs.map((p) => ({ line: `${p.packageName}@${p.packageVersion}` })));
|
|
157
|
-
group('Presets', presets.map((p) => ({ line: `${p.id.padEnd(22)} ${p.title}` })));
|
|
158
|
-
const total = knowledge.length +
|
|
159
|
-
rules.length +
|
|
160
|
-
paths.length +
|
|
161
|
-
templates.length +
|
|
162
|
-
pipelines.length +
|
|
163
|
-
packs.length +
|
|
164
|
-
presets.length;
|
|
165
|
-
if (total === 0) {
|
|
166
|
-
process.stdout.write('\n(no matches)\n');
|
|
167
|
-
}
|
|
168
|
-
return 0;
|
|
169
|
-
},
|
|
170
|
-
};
|
|
171
100
|
// ────────────────────────────────────────────────────────────────────────
|
|
172
101
|
// shrk explain <topic> — compact local explanation, no AI.
|
|
173
102
|
// ────────────────────────────────────────────────────────────────────────
|
|
174
103
|
export const explainCommand = {
|
|
175
104
|
name: 'explain',
|
|
105
|
+
// The positionals are the free-form topic (or a rule id).
|
|
106
|
+
positionals: PositionalMode.Free,
|
|
176
107
|
description: 'Search the project knowledge / rules / paths / templates / pipelines for a topic and print a compact explanation. No AI required.',
|
|
177
108
|
usage: 'shrk [--cwd <dir>] explain "<topic>" [--max-entries N] [--json]',
|
|
178
109
|
async run(args) {
|
|
@@ -189,6 +120,11 @@ export const explainCommand = {
|
|
|
189
120
|
const asRule = await tryExplainGateRule(args, topic);
|
|
190
121
|
if (asRule !== undefined)
|
|
191
122
|
return asRule;
|
|
123
|
+
// Round 13: a BOUNDARY rule id too — it used to fall through to the
|
|
124
|
+
// topic search ("no matching knowledge entries").
|
|
125
|
+
const asBoundary = await tryExplainBoundaryRule(args, topic);
|
|
126
|
+
if (asBoundary !== undefined)
|
|
127
|
+
return asBoundary;
|
|
192
128
|
}
|
|
193
129
|
const inspection = await inspectSharkcraft({ cwd: resolveCwd(args) });
|
|
194
130
|
const maxEntries = flagNumber(args, 'max-entries') ?? 6;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.command.d.ts","sourceRoot":"","sources":["../../src/commands/dashboard.command.ts"],"names":[],"mappings":"AAgBA,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard.command.d.ts","sourceRoot":"","sources":["../../src/commands/dashboard.command.ts"],"names":[],"mappings":"AAgBA,OAAO,EAIL,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAOhC,eAAO,MAAM,gBAAgB,EAAE,eAsB9B,CAAC"}
|
|
@@ -15,11 +15,21 @@ import { existsSync } from 'node:fs';
|
|
|
15
15
|
import * as nodePath from 'node:path';
|
|
16
16
|
import { fileURLToPath } from 'node:url';
|
|
17
17
|
import { flagBool, flagString, resolveCwd, } from "../command-registry.js";
|
|
18
|
+
import { PositionalMode } from "../dispatch/positional-mode.js";
|
|
18
19
|
import { startDashboardApiServer } from "../dashboard/dashboard-api-server.js";
|
|
19
20
|
import { asJson } from "../output/format-output.js";
|
|
20
21
|
const DEFAULT_PORT = 4567;
|
|
21
22
|
export const dashboardCommand = {
|
|
22
23
|
name: 'dashboard',
|
|
24
|
+
// Mixed-mode (export / diff are trie children); `serve` is dispatched here.
|
|
25
|
+
positionals: PositionalMode.None,
|
|
26
|
+
subverbs: [
|
|
27
|
+
{
|
|
28
|
+
name: 'serve',
|
|
29
|
+
description: 'Start the dashboard (the same as bare `shrk dashboard`).',
|
|
30
|
+
usage: 'shrk [--cwd <dir>] dashboard serve [--host <addr>] [--port <n>] [--open|--no-open] [--api-only] [--static-only] [--dev-assets <path>] [--json]',
|
|
31
|
+
},
|
|
32
|
+
],
|
|
23
33
|
description: 'Start the local read-only SharkCraft dashboard (web UI + API). GET/HEAD only; 127.0.0.1 by default; no write endpoints.',
|
|
24
34
|
usage: 'shrk [--cwd <dir>] dashboard [serve] [--host <addr>] [--port <n>] [--open|--no-open] [--api-only] [--static-only] [--dev-assets <path>] [--json]',
|
|
25
35
|
async run(args) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.command.d.ts","sourceRoot":"","sources":["../../src/commands/dev.command.ts"],"names":[],"mappings":"AA6CA,OAAO,EAML,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"dev.command.d.ts","sourceRoot":"","sources":["../../src/commands/dev.command.ts"],"names":[],"mappings":"AA6CA,OAAO,EAML,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAm8ChC,eAAO,MAAM,UAAU,EAAE,eA0GxB,CAAC"}
|
|
@@ -4,6 +4,7 @@ import * as nodePath from 'node:path';
|
|
|
4
4
|
import { archiveDevSession, buildAgentBrief, buildTaskPacket, computeDevNextAction, createDevSessionState, DevSessionPhase, DevSessionPlanStatus, diffDevSessions, getDevSessionDir, inspectSharkcraft, listDevCleanCandidates, listDevSessionsDetailed, parseDurationToMs, recordAppliedPlan, recordReportFile, recordValidation, recomputePhase, renderDevSessionFinalReport, renderDevSessionHtml, reviewSavedPlan, scanDevSession, setDevNextAction, setDevSessionBriefFile, setDevSessionPhase, upsertDevPlanEntry, writeDevSessionState, } from '@shrkcrft/inspector';
|
|
5
5
|
import { buildSavedPlan, generate, OverwriteStrategy, PLAN_SECRET_ENV, savePlanToFile, signPlan, } from '@shrkcrft/generator';
|
|
6
6
|
import { flagBool, flagList, flagString, flagVars, resolveCwd, } from "../command-registry.js";
|
|
7
|
+
import { PositionalMode } from "../dispatch/positional-mode.js";
|
|
7
8
|
import { asJson, header, kv } from "../output/format-output.js";
|
|
8
9
|
import { runValidationLoop } from "../validation/run-validation-loop.js";
|
|
9
10
|
const SUBCOMMANDS = new Set([
|
|
@@ -231,7 +232,7 @@ async function planSession(args) {
|
|
|
231
232
|
}
|
|
232
233
|
if (!load.state) {
|
|
233
234
|
process.stderr.write(`Session ${load.id} has no session.json (legacy session). ` +
|
|
234
|
-
`Use shrk dev status / shrk
|
|
235
|
+
`Use shrk dev status ${load.id} / shrk dev report ${load.id} for legacy sessions.\n`);
|
|
235
236
|
return 1;
|
|
236
237
|
}
|
|
237
238
|
const packet = load.packet;
|
|
@@ -799,7 +800,9 @@ function reportSession(args) {
|
|
|
799
800
|
if (htmlOut)
|
|
800
801
|
state = recordReportFile(state, 'final-report.html');
|
|
801
802
|
state = setDevSessionPhase(state, DevSessionPhase.Completed);
|
|
802
|
-
|
|
803
|
+
// `shrk session show` never existed; a completed session's next action is
|
|
804
|
+
// its reports — the same answer the inspector's computeDevNextAction gives.
|
|
805
|
+
state = setDevNextAction(state, `shrk dev reports ${load.id}`);
|
|
803
806
|
writeDevSessionState(cwd, state);
|
|
804
807
|
}
|
|
805
808
|
if (flagBool(args, 'json')) {
|
|
@@ -1335,6 +1338,46 @@ function commandsCmd(args) {
|
|
|
1335
1338
|
}
|
|
1336
1339
|
export const devCommand = {
|
|
1337
1340
|
name: 'dev',
|
|
1341
|
+
// Free: `shrk dev "<task>"` is the documented alias of `dev start "<task>"`.
|
|
1342
|
+
positionals: PositionalMode.Free,
|
|
1343
|
+
subverbs: [
|
|
1344
|
+
{ name: 'start', description: 'Start a dev session for a task.', usage: 'shrk dev start "<task>"', positionals: PositionalMode.Free },
|
|
1345
|
+
{ name: 'plan', description: 'Plan the next step of a session.', usage: 'shrk dev plan <sessionId>', positionals: PositionalMode.Free },
|
|
1346
|
+
{ name: 'status', description: 'A session’s status.', usage: 'shrk dev status [<sessionId>]', positionals: PositionalMode.Free },
|
|
1347
|
+
{ name: 'next', description: 'The next action for a session.', usage: 'shrk dev next [<sessionId>]', positionals: PositionalMode.Free },
|
|
1348
|
+
{ name: 'continue', description: 'Continue a session (same as `next`).', usage: 'shrk dev continue [<sessionId>]', positionals: PositionalMode.Free },
|
|
1349
|
+
{ name: 'validate', description: 'Validate a session’s applied plans.', usage: 'shrk dev validate <sessionId>', positionals: PositionalMode.Free },
|
|
1350
|
+
{ name: 'report', description: 'A session report.', usage: 'shrk dev report <sessionId>', positionals: PositionalMode.Free },
|
|
1351
|
+
{ name: 'list', description: 'List dev sessions.', usage: 'shrk dev list' },
|
|
1352
|
+
{
|
|
1353
|
+
name: 'mark-applied',
|
|
1354
|
+
description: 'Record that a plan of the session was applied.',
|
|
1355
|
+
usage: 'shrk dev mark-applied <sessionId> <planPath> [--note <text>]',
|
|
1356
|
+
positionals: PositionalMode.Free,
|
|
1357
|
+
},
|
|
1358
|
+
{
|
|
1359
|
+
name: 'mark-validated',
|
|
1360
|
+
description: 'Record a session’s validation result.',
|
|
1361
|
+
usage: 'shrk dev mark-validated <sessionId> [--report <path>] [--status passed|failed] [--note <text>]',
|
|
1362
|
+
positionals: PositionalMode.Free,
|
|
1363
|
+
},
|
|
1364
|
+
{ name: 'diff', description: 'Diff two sessions.', usage: 'shrk dev diff <sessionA> <sessionB> [--json]', positionals: PositionalMode.Free },
|
|
1365
|
+
{ name: 'archive', description: 'Archive a session.', usage: 'shrk dev archive <sessionId>', positionals: PositionalMode.Free },
|
|
1366
|
+
{
|
|
1367
|
+
name: 'clean',
|
|
1368
|
+
description: 'Clean old sessions (dry-run unless --write).',
|
|
1369
|
+
usage: 'shrk dev clean --older-than <duration> [--archive] [--write] [--include-active]',
|
|
1370
|
+
},
|
|
1371
|
+
{
|
|
1372
|
+
name: 'open',
|
|
1373
|
+
description: 'Open a session report.',
|
|
1374
|
+
usage: 'shrk dev open <sessionId> [--html] [--serve [--host <addr>] [--port <n>]]',
|
|
1375
|
+
positionals: PositionalMode.Free,
|
|
1376
|
+
},
|
|
1377
|
+
{ name: 'plans', description: 'A session’s plans.', usage: 'shrk dev plans <sessionId>', positionals: PositionalMode.Free },
|
|
1378
|
+
{ name: 'reports', description: 'A session’s reports.', usage: 'shrk dev reports <sessionId>', positionals: PositionalMode.Free },
|
|
1379
|
+
{ name: 'commands', description: 'The commands a session ran / needs.', usage: 'shrk dev commands <sessionId>', positionals: PositionalMode.Free },
|
|
1380
|
+
],
|
|
1338
1381
|
description: 'Safe AI-assisted development workflow: task → session → plan → review → apply (CLI) → validate → report. ' +
|
|
1339
1382
|
'Never auto-applies plans; never runs untrusted pack commands; never writes outside .sharkcraft/sessions/.',
|
|
1340
1383
|
usage: 'shrk dev <start|plan|status|next|continue|validate|report|list|mark-applied|mark-validated|diff|archive|clean|open|plans|reports|commands> [args...] [--cwd <dir>] [--json]\n' +
|
|
@@ -1,5 +1,3 @@
|
|
|
1
1
|
import { type ICommandHandler } from '../command-registry.js';
|
|
2
2
|
export declare const diagnosticsListCommand: ICommandHandler;
|
|
3
|
-
export declare const diagnosticsGetCommand: ICommandHandler;
|
|
4
|
-
export declare const diagnosticsSuggestCommand: ICommandHandler;
|
|
5
3
|
//# sourceMappingURL=diagnostics.command.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagnostics.command.d.ts","sourceRoot":"","sources":["../../src/commands/diagnostics.command.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"diagnostics.command.d.ts","sourceRoot":"","sources":["../../src/commands/diagnostics.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,eAAe,EAAmB,MAAM,wBAAwB,CAAC;AAMzF,eAAO,MAAM,sBAAsB,EAAE,eAiBpC,CAAC"}
|