@shrkcrft/mcp-server 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/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +43 -0
- package/dist/resources/build-resource-list.d.ts +14 -0
- package/dist/resources/build-resource-list.d.ts.map +1 -0
- package/dist/resources/build-resource-list.js +56 -0
- package/dist/resources/index.d.ts +4 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +3 -0
- package/dist/resources/read-resource.d.ts +16 -0
- package/dist/resources/read-resource.d.ts.map +1 -0
- package/dist/resources/read-resource.js +97 -0
- package/dist/resources/resource-uris.d.ts +14 -0
- package/dist/resources/resource-uris.d.ts.map +1 -0
- package/dist/resources/resource-uris.js +38 -0
- package/dist/server/create-mcp-server.d.ts +55 -0
- package/dist/server/create-mcp-server.d.ts.map +1 -0
- package/dist/server/create-mcp-server.js +203 -0
- package/dist/server/http-transport.d.ts +24 -0
- package/dist/server/http-transport.d.ts.map +1 -0
- package/dist/server/http-transport.js +71 -0
- package/dist/server/mcp-server-config.d.ts +10 -0
- package/dist/server/mcp-server-config.d.ts.map +1 -0
- package/dist/server/mcp-server-config.js +3 -0
- package/dist/server/sharkcraft-watcher.d.ts +18 -0
- package/dist/server/sharkcraft-watcher.d.ts.map +1 -0
- package/dist/server/sharkcraft-watcher.js +60 -0
- package/dist/server/tool-definition.d.ts +56 -0
- package/dist/server/tool-definition.d.ts.map +1 -0
- package/dist/server/tool-definition.js +1 -0
- package/dist/server/tool-input-validators.d.ts +18 -0
- package/dist/server/tool-input-validators.d.ts.map +1 -0
- package/dist/server/tool-input-validators.js +115 -0
- package/dist/tools/acceptance-replay.tool.d.ts +3 -0
- package/dist/tools/acceptance-replay.tool.d.ts.map +1 -0
- package/dist/tools/acceptance-replay.tool.js +53 -0
- package/dist/tools/adoption-checkpoint.tool.d.ts +3 -0
- package/dist/tools/adoption-checkpoint.tool.d.ts.map +1 -0
- package/dist/tools/adoption-checkpoint.tool.js +49 -0
- package/dist/tools/agent-brief-chunks.tool.d.ts +6 -0
- package/dist/tools/agent-brief-chunks.tool.d.ts.map +1 -0
- package/dist/tools/agent-brief-chunks.tool.js +326 -0
- package/dist/tools/agent-brief.tool.d.ts +3 -0
- package/dist/tools/agent-brief.tool.d.ts.map +1 -0
- package/dist/tools/agent-brief.tool.js +44 -0
- package/dist/tools/all-tools.d.ts +3 -0
- package/dist/tools/all-tools.d.ts.map +1 -0
- package/dist/tools/all-tools.js +403 -0
- package/dist/tools/architecture-map.tool.d.ts +3 -0
- package/dist/tools/architecture-map.tool.d.ts.map +1 -0
- package/dist/tools/architecture-map.tool.js +22 -0
- package/dist/tools/area-explore.tool.d.ts +3 -0
- package/dist/tools/area-explore.tool.d.ts.map +1 -0
- package/dist/tools/area-explore.tool.js +32 -0
- package/dist/tools/area-map.tool.d.ts +3 -0
- package/dist/tools/area-map.tool.d.ts.map +1 -0
- package/dist/tools/area-map.tool.js +9 -0
- package/dist/tools/bundle-diff.tool.d.ts +3 -0
- package/dist/tools/bundle-diff.tool.d.ts.map +1 -0
- package/dist/tools/bundle-diff.tool.js +37 -0
- package/dist/tools/bundle-replay.tool.d.ts +3 -0
- package/dist/tools/bundle-replay.tool.d.ts.map +1 -0
- package/dist/tools/bundle-replay.tool.js +19 -0
- package/dist/tools/change-intent.tool.d.ts +3 -0
- package/dist/tools/change-intent.tool.d.ts.map +1 -0
- package/dist/tools/change-intent.tool.js +18 -0
- package/dist/tools/check-boundaries.tool.d.ts +3 -0
- package/dist/tools/check-boundaries.tool.d.ts.map +1 -0
- package/dist/tools/check-boundaries.tool.js +37 -0
- package/dist/tools/ci-permissions-fix.tool.d.ts +3 -0
- package/dist/tools/ci-permissions-fix.tool.d.ts.map +1 -0
- package/dist/tools/ci-permissions-fix.tool.js +32 -0
- package/dist/tools/ci-permissions.tool.d.ts +3 -0
- package/dist/tools/ci-permissions.tool.d.ts.map +1 -0
- package/dist/tools/ci-permissions.tool.js +26 -0
- package/dist/tools/ci-scaffold-preview.tool.d.ts +3 -0
- package/dist/tools/ci-scaffold-preview.tool.d.ts.map +1 -0
- package/dist/tools/ci-scaffold-preview.tool.js +63 -0
- package/dist/tools/command-catalog.tool.d.ts +27 -0
- package/dist/tools/command-catalog.tool.d.ts.map +1 -0
- package/dist/tools/command-catalog.tool.js +147 -0
- package/dist/tools/construct-adoption-diff.tool.d.ts +3 -0
- package/dist/tools/construct-adoption-diff.tool.d.ts.map +1 -0
- package/dist/tools/construct-adoption-diff.tool.js +26 -0
- package/dist/tools/construct-adoption.tool.d.ts +4 -0
- package/dist/tools/construct-adoption.tool.d.ts.map +1 -0
- package/dist/tools/construct-adoption.tool.js +37 -0
- package/dist/tools/construct-inference.tool.d.ts +3 -0
- package/dist/tools/construct-inference.tool.d.ts.map +1 -0
- package/dist/tools/construct-inference.tool.js +26 -0
- package/dist/tools/constructs.tool.d.ts +7 -0
- package/dist/tools/constructs.tool.d.ts.map +1 -0
- package/dist/tools/constructs.tool.js +79 -0
- package/dist/tools/create-generation-plan.tool.d.ts +3 -0
- package/dist/tools/create-generation-plan.tool.d.ts.map +1 -0
- package/dist/tools/create-generation-plan.tool.js +48 -0
- package/dist/tools/create-pipeline-plan.tool.d.ts +3 -0
- package/dist/tools/create-pipeline-plan.tool.d.ts.map +1 -0
- package/dist/tools/create-pipeline-plan.tool.js +41 -0
- package/dist/tools/dashboard-summary.tool.d.ts +3 -0
- package/dist/tools/dashboard-summary.tool.d.ts.map +1 -0
- package/dist/tools/dashboard-summary.tool.js +182 -0
- package/dist/tools/dev-session.tool.d.ts +14 -0
- package/dist/tools/dev-session.tool.d.ts.map +1 -0
- package/dist/tools/dev-session.tool.js +167 -0
- package/dist/tools/diagnostics.tool.d.ts +4 -0
- package/dist/tools/diagnostics.tool.d.ts.map +1 -0
- package/dist/tools/diagnostics.tool.js +40 -0
- package/dist/tools/docs-check.tool.d.ts +4 -0
- package/dist/tools/docs-check.tool.d.ts.map +1 -0
- package/dist/tools/docs-check.tool.js +17 -0
- package/dist/tools/doctor-packs.tool.d.ts +3 -0
- package/dist/tools/doctor-packs.tool.d.ts.map +1 -0
- package/dist/tools/doctor-packs.tool.js +30 -0
- package/dist/tools/explain-generation-target.tool.d.ts +3 -0
- package/dist/tools/explain-generation-target.tool.d.ts.map +1 -0
- package/dist/tools/explain-generation-target.tool.js +49 -0
- package/dist/tools/feature-bundle.tool.d.ts +4 -0
- package/dist/tools/feature-bundle.tool.d.ts.map +1 -0
- package/dist/tools/feature-bundle.tool.js +36 -0
- package/dist/tools/get-action-hints.tool.d.ts +3 -0
- package/dist/tools/get-action-hints.tool.d.ts.map +1 -0
- package/dist/tools/get-action-hints.tool.js +43 -0
- package/dist/tools/get-agent-instructions.tool.d.ts +3 -0
- package/dist/tools/get-agent-instructions.tool.d.ts.map +1 -0
- package/dist/tools/get-agent-instructions.tool.js +9 -0
- package/dist/tools/get-ai-readiness-report.tool.d.ts +3 -0
- package/dist/tools/get-ai-readiness-report.tool.d.ts.map +1 -0
- package/dist/tools/get-ai-readiness-report.tool.js +10 -0
- package/dist/tools/get-architecture-constraints.tool.d.ts +3 -0
- package/dist/tools/get-architecture-constraints.tool.d.ts.map +1 -0
- package/dist/tools/get-architecture-constraints.tool.js +20 -0
- package/dist/tools/get-boundary-rule.tool.d.ts +3 -0
- package/dist/tools/get-boundary-rule.tool.d.ts.map +1 -0
- package/dist/tools/get-boundary-rule.tool.js +22 -0
- package/dist/tools/get-coverage-report.tool.d.ts +3 -0
- package/dist/tools/get-coverage-report.tool.d.ts.map +1 -0
- package/dist/tools/get-coverage-report.tool.js +9 -0
- package/dist/tools/get-current-tasks.tool.d.ts +3 -0
- package/dist/tools/get-current-tasks.tool.d.ts.map +1 -0
- package/dist/tools/get-current-tasks.tool.js +19 -0
- package/dist/tools/get-drift-report.tool.d.ts +3 -0
- package/dist/tools/get-drift-report.tool.d.ts.map +1 -0
- package/dist/tools/get-drift-report.tool.js +16 -0
- package/dist/tools/get-graph-node.tool.d.ts +3 -0
- package/dist/tools/get-graph-node.tool.d.ts.map +1 -0
- package/dist/tools/get-graph-node.tool.js +23 -0
- package/dist/tools/get-import-graph-summary.tool.d.ts +3 -0
- package/dist/tools/get-import-graph-summary.tool.d.ts.map +1 -0
- package/dist/tools/get-import-graph-summary.tool.js +10 -0
- package/dist/tools/get-knowledge-graph.tool.d.ts +3 -0
- package/dist/tools/get-knowledge-graph.tool.d.ts.map +1 -0
- package/dist/tools/get-knowledge-graph.tool.js +10 -0
- package/dist/tools/get-knowledge.tool.d.ts +3 -0
- package/dist/tools/get-knowledge.tool.d.ts.map +1 -0
- package/dist/tools/get-knowledge.tool.js +18 -0
- package/dist/tools/get-pack.tool.d.ts +3 -0
- package/dist/tools/get-pack.tool.d.ts.map +1 -0
- package/dist/tools/get-pack.tool.js +33 -0
- package/dist/tools/get-path-convention.tool.d.ts +3 -0
- package/dist/tools/get-path-convention.tool.d.ts.map +1 -0
- package/dist/tools/get-path-convention.tool.js +17 -0
- package/dist/tools/get-pipeline-context.tool.d.ts +3 -0
- package/dist/tools/get-pipeline-context.tool.d.ts.map +1 -0
- package/dist/tools/get-pipeline-context.tool.js +48 -0
- package/dist/tools/get-pipeline.tool.d.ts +3 -0
- package/dist/tools/get-pipeline.tool.d.ts.map +1 -0
- package/dist/tools/get-pipeline.tool.js +17 -0
- package/dist/tools/get-preset.tool.d.ts +3 -0
- package/dist/tools/get-preset.tool.d.ts.map +1 -0
- package/dist/tools/get-preset.tool.js +22 -0
- package/dist/tools/get-project-overview.tool.d.ts +3 -0
- package/dist/tools/get-project-overview.tool.d.ts.map +1 -0
- package/dist/tools/get-project-overview.tool.js +10 -0
- package/dist/tools/get-relevant-context.tool.d.ts +3 -0
- package/dist/tools/get-relevant-context.tool.d.ts.map +1 -0
- package/dist/tools/get-relevant-context.tool.js +55 -0
- package/dist/tools/get-relevant-rules.tool.d.ts +3 -0
- package/dist/tools/get-relevant-rules.tool.d.ts.map +1 -0
- package/dist/tools/get-relevant-rules.tool.js +37 -0
- package/dist/tools/get-repository-commands.tool.d.ts +3 -0
- package/dist/tools/get-repository-commands.tool.d.ts.map +1 -0
- package/dist/tools/get-repository-commands.tool.js +22 -0
- package/dist/tools/get-review-packet.tool.d.ts +3 -0
- package/dist/tools/get-review-packet.tool.d.ts.map +1 -0
- package/dist/tools/get-review-packet.tool.js +26 -0
- package/dist/tools/get-rule.tool.d.ts +3 -0
- package/dist/tools/get-rule.tool.d.ts.map +1 -0
- package/dist/tools/get-rule.tool.js +18 -0
- package/dist/tools/get-security-guidelines.tool.d.ts +3 -0
- package/dist/tools/get-security-guidelines.tool.d.ts.map +1 -0
- package/dist/tools/get-security-guidelines.tool.js +23 -0
- package/dist/tools/get-sessions.tool.d.ts +4 -0
- package/dist/tools/get-sessions.tool.d.ts.map +1 -0
- package/dist/tools/get-sessions.tool.js +41 -0
- package/dist/tools/get-task-packet.tool.d.ts +3 -0
- package/dist/tools/get-task-packet.tool.d.ts.map +1 -0
- package/dist/tools/get-task-packet.tool.js +48 -0
- package/dist/tools/get-template.tool.d.ts +3 -0
- package/dist/tools/get-template.tool.d.ts.map +1 -0
- package/dist/tools/get-template.tool.js +29 -0
- package/dist/tools/get-testing-guidelines.tool.d.ts +3 -0
- package/dist/tools/get-testing-guidelines.tool.d.ts.map +1 -0
- package/dist/tools/get-testing-guidelines.tool.js +22 -0
- package/dist/tools/graph-why.tool.d.ts +3 -0
- package/dist/tools/graph-why.tool.d.ts.map +1 -0
- package/dist/tools/graph-why.tool.js +25 -0
- package/dist/tools/impact-analysis.tool.d.ts +3 -0
- package/dist/tools/impact-analysis.tool.d.ts.map +1 -0
- package/dist/tools/impact-analysis.tool.js +43 -0
- package/dist/tools/import-graph-analysis.tool.d.ts +3 -0
- package/dist/tools/import-graph-analysis.tool.d.ts.map +1 -0
- package/dist/tools/import-graph-analysis.tool.js +9 -0
- package/dist/tools/index.d.ts +10 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +9 -0
- package/dist/tools/inspect-packs.tool.d.ts +3 -0
- package/dist/tools/inspect-packs.tool.d.ts.map +1 -0
- package/dist/tools/inspect-packs.tool.js +31 -0
- package/dist/tools/inspect-sharkcraft-setup.tool.d.ts +3 -0
- package/dist/tools/inspect-sharkcraft-setup.tool.d.ts.map +1 -0
- package/dist/tools/inspect-sharkcraft-setup.tool.js +10 -0
- package/dist/tools/inspect-workspace.tool.d.ts +3 -0
- package/dist/tools/inspect-workspace.tool.d.ts.map +1 -0
- package/dist/tools/inspect-workspace.tool.js +23 -0
- package/dist/tools/install-smoke.tool.d.ts +3 -0
- package/dist/tools/install-smoke.tool.d.ts.map +1 -0
- package/dist/tools/install-smoke.tool.js +15 -0
- package/dist/tools/list-boundary-rules.tool.d.ts +3 -0
- package/dist/tools/list-boundary-rules.tool.d.ts.map +1 -0
- package/dist/tools/list-boundary-rules.tool.js +20 -0
- package/dist/tools/list-knowledge.tool.d.ts +3 -0
- package/dist/tools/list-knowledge.tool.d.ts.map +1 -0
- package/dist/tools/list-knowledge.tool.js +46 -0
- package/dist/tools/list-packs.tool.d.ts +3 -0
- package/dist/tools/list-packs.tool.d.ts.map +1 -0
- package/dist/tools/list-packs.tool.js +19 -0
- package/dist/tools/list-path-conventions.tool.d.ts +3 -0
- package/dist/tools/list-path-conventions.tool.d.ts.map +1 -0
- package/dist/tools/list-path-conventions.tool.js +20 -0
- package/dist/tools/list-pipelines.tool.d.ts +3 -0
- package/dist/tools/list-pipelines.tool.d.ts.map +1 -0
- package/dist/tools/list-pipelines.tool.js +19 -0
- package/dist/tools/list-presets.tool.d.ts +3 -0
- package/dist/tools/list-presets.tool.d.ts.map +1 -0
- package/dist/tools/list-presets.tool.js +26 -0
- package/dist/tools/list-rules.tool.d.ts +3 -0
- package/dist/tools/list-rules.tool.d.ts.map +1 -0
- package/dist/tools/list-rules.tool.js +19 -0
- package/dist/tools/list-templates.tool.d.ts +3 -0
- package/dist/tools/list-templates.tool.d.ts.map +1 -0
- package/dist/tools/list-templates.tool.js +19 -0
- package/dist/tools/onboard-adoption-diff.tool.d.ts +3 -0
- package/dist/tools/onboard-adoption-diff.tool.d.ts.map +1 -0
- package/dist/tools/onboard-adoption-diff.tool.js +29 -0
- package/dist/tools/onboarding.tool.d.ts +7 -0
- package/dist/tools/onboarding.tool.d.ts.map +1 -0
- package/dist/tools/onboarding.tool.js +253 -0
- package/dist/tools/orchestration.tool.d.ts +4 -0
- package/dist/tools/orchestration.tool.d.ts.map +1 -0
- package/dist/tools/orchestration.tool.js +57 -0
- package/dist/tools/ownership.tool.d.ts +4 -0
- package/dist/tools/ownership.tool.d.ts.map +1 -0
- package/dist/tools/ownership.tool.js +31 -0
- package/dist/tools/pack-compat.tool.d.ts +3 -0
- package/dist/tools/pack-compat.tool.d.ts.map +1 -0
- package/dist/tools/pack-compat.tool.js +27 -0
- package/dist/tools/pack-doctor-release.tool.d.ts +3 -0
- package/dist/tools/pack-doctor-release.tool.d.ts.map +1 -0
- package/dist/tools/pack-doctor-release.tool.js +21 -0
- package/dist/tools/pack-release-check.tool.d.ts +3 -0
- package/dist/tools/pack-release-check.tool.d.ts.map +1 -0
- package/dist/tools/pack-release-check.tool.js +17 -0
- package/dist/tools/playbook-script.tool.d.ts +3 -0
- package/dist/tools/playbook-script.tool.d.ts.map +1 -0
- package/dist/tools/playbook-script.tool.js +25 -0
- package/dist/tools/playbooks.tool.d.ts +5 -0
- package/dist/tools/playbooks.tool.d.ts.map +1 -0
- package/dist/tools/playbooks.tool.js +43 -0
- package/dist/tools/policy-report.tool.d.ts +3 -0
- package/dist/tools/policy-report.tool.d.ts.map +1 -0
- package/dist/tools/policy-report.tool.js +10 -0
- package/dist/tools/preview-knowledge-propose.tool.d.ts +3 -0
- package/dist/tools/preview-knowledge-propose.tool.d.ts.map +1 -0
- package/dist/tools/preview-knowledge-propose.tool.js +44 -0
- package/dist/tools/preview-preset-application.tool.d.ts +3 -0
- package/dist/tools/preview-preset-application.tool.d.ts.map +1 -0
- package/dist/tools/preview-preset-application.tool.js +64 -0
- package/dist/tools/quality-baseline-diff.tool.d.ts +3 -0
- package/dist/tools/quality-baseline-diff.tool.d.ts.map +1 -0
- package/dist/tools/quality-baseline-diff.tool.js +18 -0
- package/dist/tools/quality-baseline.tool.d.ts +3 -0
- package/dist/tools/quality-baseline.tool.d.ts.map +1 -0
- package/dist/tools/quality-baseline.tool.js +22 -0
- package/dist/tools/quality-report.tool.d.ts +3 -0
- package/dist/tools/quality-report.tool.d.ts.map +1 -0
- package/dist/tools/quality-report.tool.js +62 -0
- package/dist/tools/r18-extras.tool.d.ts +15 -0
- package/dist/tools/r18-extras.tool.d.ts.map +1 -0
- package/dist/tools/r18-extras.tool.js +209 -0
- package/dist/tools/r19-extras.tool.d.ts +10 -0
- package/dist/tools/r19-extras.tool.d.ts.map +1 -0
- package/dist/tools/r19-extras.tool.js +117 -0
- package/dist/tools/r20-extras.tool.d.ts +4 -0
- package/dist/tools/r20-extras.tool.d.ts.map +1 -0
- package/dist/tools/r20-extras.tool.js +65 -0
- package/dist/tools/r22-extras.tool.d.ts +4 -0
- package/dist/tools/r22-extras.tool.d.ts.map +1 -0
- package/dist/tools/r22-extras.tool.js +42 -0
- package/dist/tools/r23-extras.tool.d.ts +10 -0
- package/dist/tools/r23-extras.tool.d.ts.map +1 -0
- package/dist/tools/r23-extras.tool.js +239 -0
- package/dist/tools/r24-extras.tool.d.ts +9 -0
- package/dist/tools/r24-extras.tool.d.ts.map +1 -0
- package/dist/tools/r24-extras.tool.js +144 -0
- package/dist/tools/r25-extras.tool.d.ts +11 -0
- package/dist/tools/r25-extras.tool.d.ts.map +1 -0
- package/dist/tools/r25-extras.tool.js +186 -0
- package/dist/tools/r26-ingest.tool.d.ts +10 -0
- package/dist/tools/r26-ingest.tool.d.ts.map +1 -0
- package/dist/tools/r26-ingest.tool.js +174 -0
- package/dist/tools/r26-task-context.tool.d.ts +5 -0
- package/dist/tools/r26-task-context.tool.d.ts.map +1 -0
- package/dist/tools/r26-task-context.tool.js +121 -0
- package/dist/tools/r27-polyglot.tool.d.ts +7 -0
- package/dist/tools/r27-polyglot.tool.d.ts.map +1 -0
- package/dist/tools/r27-polyglot.tool.js +139 -0
- package/dist/tools/r28-changed-boundary.tool.d.ts +3 -0
- package/dist/tools/r28-changed-boundary.tool.d.ts.map +1 -0
- package/dist/tools/r28-changed-boundary.tool.js +77 -0
- package/dist/tools/r28-helpers.tool.d.ts +5 -0
- package/dist/tools/r28-helpers.tool.d.ts.map +1 -0
- package/dist/tools/r28-helpers.tool.js +72 -0
- package/dist/tools/r28-pack-author.tool.d.ts +4 -0
- package/dist/tools/r28-pack-author.tool.d.ts.map +1 -0
- package/dist/tools/r28-pack-author.tool.js +67 -0
- package/dist/tools/r28-plugin-lifecycle.tool.d.ts +4 -0
- package/dist/tools/r28-plugin-lifecycle.tool.d.ts.map +1 -0
- package/dist/tools/r28-plugin-lifecycle.tool.js +94 -0
- package/dist/tools/r28-registry-lifecycle.tool.d.ts +3 -0
- package/dist/tools/r28-registry-lifecycle.tool.d.ts.map +1 -0
- package/dist/tools/r28-registry-lifecycle.tool.js +29 -0
- package/dist/tools/r28-runner-policy.tool.d.ts +3 -0
- package/dist/tools/r28-runner-policy.tool.d.ts.map +1 -0
- package/dist/tools/r28-runner-policy.tool.js +16 -0
- package/dist/tools/r29-doctor-suppressions.tool.d.ts +4 -0
- package/dist/tools/r29-doctor-suppressions.tool.d.ts.map +1 -0
- package/dist/tools/r29-doctor-suppressions.tool.js +66 -0
- package/dist/tools/r29-feedback.tool.d.ts +3 -0
- package/dist/tools/r29-feedback.tool.d.ts.map +1 -0
- package/dist/tools/r29-feedback.tool.js +26 -0
- package/dist/tools/r29-knowledge-rename.tool.d.ts +3 -0
- package/dist/tools/r29-knowledge-rename.tool.d.ts.map +1 -0
- package/dist/tools/r29-knowledge-rename.tool.js +51 -0
- package/dist/tools/r29-knowledge-stale.tool.d.ts +4 -0
- package/dist/tools/r29-knowledge-stale.tool.d.ts.map +1 -0
- package/dist/tools/r29-knowledge-stale.tool.js +68 -0
- package/dist/tools/r29-query-resolver.tool.d.ts +4 -0
- package/dist/tools/r29-query-resolver.tool.d.ts.map +1 -0
- package/dist/tools/r29-query-resolver.tool.js +38 -0
- package/dist/tools/r29-template-drift.tool.d.ts +3 -0
- package/dist/tools/r29-template-drift.tool.d.ts.map +1 -0
- package/dist/tools/r29-template-drift.tool.js +29 -0
- package/dist/tools/r30-feedback-rules.tool.d.ts +4 -0
- package/dist/tools/r30-feedback-rules.tool.d.ts.map +1 -0
- package/dist/tools/r30-feedback-rules.tool.js +47 -0
- package/dist/tools/r30-fuzzy-impact.tool.d.ts +3 -0
- package/dist/tools/r30-fuzzy-impact.tool.d.ts.map +1 -0
- package/dist/tools/r30-fuzzy-impact.tool.js +44 -0
- package/dist/tools/r31-changes-pr-ci.tool.d.ts +5 -0
- package/dist/tools/r31-changes-pr-ci.tool.d.ts.map +1 -0
- package/dist/tools/r31-changes-pr-ci.tool.js +82 -0
- package/dist/tools/r31-command-discovery.tool.d.ts +5 -0
- package/dist/tools/r31-command-discovery.tool.d.ts.map +1 -0
- package/dist/tools/r31-command-discovery.tool.js +126 -0
- package/dist/tools/r31-fix-preview.tool.d.ts +4 -0
- package/dist/tools/r31-fix-preview.tool.d.ts.map +1 -0
- package/dist/tools/r31-fix-preview.tool.js +58 -0
- package/dist/tools/r31-ranker-explain.tool.d.ts +4 -0
- package/dist/tools/r31-ranker-explain.tool.d.ts.map +1 -0
- package/dist/tools/r31-ranker-explain.tool.js +69 -0
- package/dist/tools/r31-scaffold-coverage.tool.d.ts +3 -0
- package/dist/tools/r31-scaffold-coverage.tool.d.ts.map +1 -0
- package/dist/tools/r31-scaffold-coverage.tool.js +31 -0
- package/dist/tools/r32-profiles.tool.d.ts +8 -0
- package/dist/tools/r32-profiles.tool.d.ts.map +1 -0
- package/dist/tools/r32-profiles.tool.js +107 -0
- package/dist/tools/r32-project-coupling.tool.d.ts +3 -0
- package/dist/tools/r32-project-coupling.tool.d.ts.map +1 -0
- package/dist/tools/r32-project-coupling.tool.js +38 -0
- package/dist/tools/r33-agent-task-prep.tool.d.ts +3 -0
- package/dist/tools/r33-agent-task-prep.tool.d.ts.map +1 -0
- package/dist/tools/r33-agent-task-prep.tool.js +34 -0
- package/dist/tools/r33-conventions.tool.d.ts +5 -0
- package/dist/tools/r33-conventions.tool.d.ts.map +1 -0
- package/dist/tools/r33-conventions.tool.js +48 -0
- package/dist/tools/r33-dev-cycle-ci-predict.tool.d.ts +4 -0
- package/dist/tools/r33-dev-cycle-ci-predict.tool.d.ts.map +1 -0
- package/dist/tools/r33-dev-cycle-ci-predict.tool.js +44 -0
- package/dist/tools/r33-pack-contributions.tool.d.ts +4 -0
- package/dist/tools/r33-pack-contributions.tool.d.ts.map +1 -0
- package/dist/tools/r33-pack-contributions.tool.js +42 -0
- package/dist/tools/r33-pack-signature.tool.d.ts +3 -0
- package/dist/tools/r33-pack-signature.tool.d.ts.map +1 -0
- package/dist/tools/r33-pack-signature.tool.js +12 -0
- package/dist/tools/r33-routing-helpers.tool.d.ts +6 -0
- package/dist/tools/r33-routing-helpers.tool.d.ts.map +1 -0
- package/dist/tools/r33-routing-helpers.tool.js +63 -0
- package/dist/tools/r33-self-config.tool.d.ts +4 -0
- package/dist/tools/r33-self-config.tool.d.ts.map +1 -0
- package/dist/tools/r33-self-config.tool.js +20 -0
- package/dist/tools/r34-search-unified.tool.d.ts +3 -0
- package/dist/tools/r34-search-unified.tool.d.ts.map +1 -0
- package/dist/tools/r34-search-unified.tool.js +38 -0
- package/dist/tools/r35-registration-hints.tool.d.ts +5 -0
- package/dist/tools/r35-registration-hints.tool.d.ts.map +1 -0
- package/dist/tools/r35-registration-hints.tool.js +69 -0
- package/dist/tools/r57-specs.tool.d.ts +12 -0
- package/dist/tools/r57-specs.tool.d.ts.map +1 -0
- package/dist/tools/r57-specs.tool.js +115 -0
- package/dist/tools/r58-grounding.tool.d.ts +14 -0
- package/dist/tools/r58-grounding.tool.d.ts.map +1 -0
- package/dist/tools/r58-grounding.tool.js +135 -0
- package/dist/tools/recommend-presets.tool.d.ts +3 -0
- package/dist/tools/recommend-presets.tool.d.ts.map +1 -0
- package/dist/tools/recommend-presets.tool.js +31 -0
- package/dist/tools/release-readiness.tool.d.ts +3 -0
- package/dist/tools/release-readiness.tool.d.ts.map +1 -0
- package/dist/tools/release-readiness.tool.js +28 -0
- package/dist/tools/release-smoke.tool.d.ts +3 -0
- package/dist/tools/release-smoke.tool.d.ts.map +1 -0
- package/dist/tools/release-smoke.tool.js +22 -0
- package/dist/tools/render-template-preview.tool.d.ts +3 -0
- package/dist/tools/render-template-preview.tool.d.ts.map +1 -0
- package/dist/tools/render-template-preview.tool.js +40 -0
- package/dist/tools/report-site-preview.tool.d.ts +3 -0
- package/dist/tools/report-site-preview.tool.d.ts.map +1 -0
- package/dist/tools/report-site-preview.tool.js +28 -0
- package/dist/tools/repository-map.tool.d.ts +3 -0
- package/dist/tools/repository-map.tool.d.ts.map +1 -0
- package/dist/tools/repository-map.tool.js +17 -0
- package/dist/tools/repository-stats.tool.d.ts +3 -0
- package/dist/tools/repository-stats.tool.d.ts.map +1 -0
- package/dist/tools/repository-stats.tool.js +28 -0
- package/dist/tools/review-generation-plan.tool.d.ts +3 -0
- package/dist/tools/review-generation-plan.tool.d.ts.map +1 -0
- package/dist/tools/review-generation-plan.tool.js +24 -0
- package/dist/tools/review-packet-v2.tool.d.ts +3 -0
- package/dist/tools/review-packet-v2.tool.d.ts.map +1 -0
- package/dist/tools/review-packet-v2.tool.js +27 -0
- package/dist/tools/run-agent-test.tool.d.ts +4 -0
- package/dist/tools/run-agent-test.tool.d.ts.map +1 -0
- package/dist/tools/run-agent-test.tool.js +28 -0
- package/dist/tools/run-context-test.tool.d.ts +4 -0
- package/dist/tools/run-context-test.tool.d.ts.map +1 -0
- package/dist/tools/run-context-test.tool.js +28 -0
- package/dist/tools/runtime-reports.tool.d.ts +9 -0
- package/dist/tools/runtime-reports.tool.d.ts.map +1 -0
- package/dist/tools/runtime-reports.tool.js +175 -0
- package/dist/tools/safety-audit.tool.d.ts +3 -0
- package/dist/tools/safety-audit.tool.d.ts.map +1 -0
- package/dist/tools/safety-audit.tool.js +42 -0
- package/dist/tools/scaffold-patterns.tool.d.ts +5 -0
- package/dist/tools/scaffold-patterns.tool.d.ts.map +1 -0
- package/dist/tools/scaffold-patterns.tool.js +59 -0
- package/dist/tools/schema-inventory.tool.d.ts +3 -0
- package/dist/tools/schema-inventory.tool.d.ts.map +1 -0
- package/dist/tools/schema-inventory.tool.js +23 -0
- package/dist/tools/search-knowledge.tool.d.ts +3 -0
- package/dist/tools/search-knowledge.tool.d.ts.map +1 -0
- package/dist/tools/search-knowledge.tool.js +42 -0
- package/dist/tools/search-path-conventions.tool.d.ts +3 -0
- package/dist/tools/search-path-conventions.tool.d.ts.map +1 -0
- package/dist/tools/search-path-conventions.tool.js +30 -0
- package/dist/tools/search-templates.tool.d.ts +3 -0
- package/dist/tools/search-templates.tool.d.ts.map +1 -0
- package/dist/tools/search-templates.tool.js +21 -0
- package/dist/tools/search-tuning-explain.tool.d.ts +3 -0
- package/dist/tools/search-tuning-explain.tool.d.ts.map +1 -0
- package/dist/tools/search-tuning-explain.tool.js +17 -0
- package/dist/tools/search-tuning.tool.d.ts +3 -0
- package/dist/tools/search-tuning.tool.d.ts.map +1 -0
- package/dist/tools/search-tuning.tool.js +10 -0
- package/dist/tools/search.tool.d.ts +3 -0
- package/dist/tools/search.tool.d.ts.map +1 -0
- package/dist/tools/search.tool.js +45 -0
- package/dist/tools/self-audit.tool.d.ts +3 -0
- package/dist/tools/self-audit.tool.d.ts.map +1 -0
- package/dist/tools/self-audit.tool.js +28 -0
- package/dist/tools/start-here.tool.d.ts +4 -0
- package/dist/tools/start-here.tool.d.ts.map +1 -0
- package/dist/tools/start-here.tool.js +27 -0
- package/dist/tools/test-impact.tool.d.ts +3 -0
- package/dist/tools/test-impact.tool.d.ts.map +1 -0
- package/dist/tools/test-impact.tool.js +23 -0
- package/package.json +67 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read-only MCP tools that mirror `shrk report ...`. Each returns the rendered
|
|
3
|
+
* body (or structured JSON) without writing to disk and without running shell
|
|
4
|
+
* commands. SharkCraft's MCP contract: data only, plus a `nextCommand` hint.
|
|
5
|
+
*/
|
|
6
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
7
|
+
import * as nodePath from 'node:path';
|
|
8
|
+
import { buildAdoptionReport, buildCoverageReport, buildDriftReport, buildOnboardingAdoptionPlan, buildOnboardingPlan, buildQualityReport, buildSafetyAudit, readAdoptionState, renderAdoptionReportHtml, renderAdoptionReportMarkdown, renderAdoptionReportText, renderDevSessionHtml, renderDevSessionFinalReport, renderReviewComment, renderReviewHtml, renderQualityHtml, renderSafetyHtml, scanDevSession, } from '@shrkcrft/inspector';
|
|
9
|
+
// DX#4 — derive audit view from ALL_TOOLS at runtime.
|
|
10
|
+
import { ALL_TOOLS } from "./all-tools.js";
|
|
11
|
+
function pickFormat(input, fallback = 'json') {
|
|
12
|
+
const f = String(input.format ?? fallback).toLowerCase();
|
|
13
|
+
if (f === 'text' || f === 'markdown' || f === 'html' || f === 'json')
|
|
14
|
+
return f;
|
|
15
|
+
return fallback;
|
|
16
|
+
}
|
|
17
|
+
const READ_ONLY_NOTE = 'MCP cannot write — adoption / session / quality / safety / review outputs are returned as data only. Run the corresponding `shrk report ...` to persist.';
|
|
18
|
+
export const getAdoptionReportTool = {
|
|
19
|
+
name: 'get_adoption_report',
|
|
20
|
+
description: 'Render the onboarding adoption report (text / markdown / html / json). Read-only.',
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {
|
|
24
|
+
format: { type: 'string', description: 'text|markdown|html|json (default: json)' },
|
|
25
|
+
},
|
|
26
|
+
additionalProperties: false,
|
|
27
|
+
},
|
|
28
|
+
async handler(input, ctx) {
|
|
29
|
+
const plan = buildOnboardingPlan(ctx.inspection, {});
|
|
30
|
+
const adoption = buildOnboardingAdoptionPlan({ inspection: ctx.inspection, plan });
|
|
31
|
+
const state = readAdoptionState(ctx.cwd);
|
|
32
|
+
const report = buildAdoptionReport({ projectRoot: ctx.cwd, plan: adoption, state });
|
|
33
|
+
const format = pickFormat(input);
|
|
34
|
+
if (format === 'html')
|
|
35
|
+
return { text: renderAdoptionReportHtml(report), data: { format, schema: 'sharkcraft.adoption-report/v1', nextCommand: 'shrk report adoption --format html --output adoption.html', note: READ_ONLY_NOTE } };
|
|
36
|
+
if (format === 'markdown')
|
|
37
|
+
return { text: renderAdoptionReportMarkdown(report), data: { format, nextCommand: 'shrk report adoption --format markdown' } };
|
|
38
|
+
if (format === 'text')
|
|
39
|
+
return { text: renderAdoptionReportText(report), data: { format } };
|
|
40
|
+
return { data: { format: 'json', report, nextCommand: 'shrk report adoption --format json', note: READ_ONLY_NOTE } };
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
export const getSessionHtmlReportTool = {
|
|
44
|
+
name: 'get_session_html_report',
|
|
45
|
+
description: 'Render an HTML / markdown / json report for a dev session. Read-only.',
|
|
46
|
+
inputSchema: {
|
|
47
|
+
type: 'object',
|
|
48
|
+
properties: {
|
|
49
|
+
id: { type: 'string' },
|
|
50
|
+
format: { type: 'string', description: 'html|markdown|json (default: html)' },
|
|
51
|
+
},
|
|
52
|
+
required: ['id'],
|
|
53
|
+
additionalProperties: false,
|
|
54
|
+
},
|
|
55
|
+
handler(input, ctx) {
|
|
56
|
+
const id = String(input.id ?? '');
|
|
57
|
+
const load = scanDevSession(ctx.cwd, id);
|
|
58
|
+
if (!load || !load.state)
|
|
59
|
+
return { isError: true, data: { error: `no session "${id}"` } };
|
|
60
|
+
const format = pickFormat(input, 'html');
|
|
61
|
+
if (format === 'json')
|
|
62
|
+
return { data: { id, format: 'json', state: load.state, nextCommand: 'shrk report session ' + id + ' --format json', note: READ_ONLY_NOTE } };
|
|
63
|
+
if (format === 'markdown')
|
|
64
|
+
return { text: renderDevSessionFinalReport(load, {}), data: { format } };
|
|
65
|
+
return { text: renderDevSessionHtml(load), data: { format, schema: 'sharkcraft.dev-session/v1', nextCommand: `shrk dev open ${id} --html` } };
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
export const getQualityHtmlReportTool = {
|
|
69
|
+
name: 'get_quality_html_report',
|
|
70
|
+
description: 'Render the quality report (html / markdown / json / text). Gates that would run shell commands are recorded as skipped. Read-only.',
|
|
71
|
+
inputSchema: {
|
|
72
|
+
type: 'object',
|
|
73
|
+
properties: { format: { type: 'string' } },
|
|
74
|
+
additionalProperties: false,
|
|
75
|
+
},
|
|
76
|
+
async handler(input, ctx) {
|
|
77
|
+
const report = await buildQualityReport({ inspection: ctx.inspection, config: {}, skipShell: true });
|
|
78
|
+
const format = pickFormat(input, 'html');
|
|
79
|
+
if (format === 'json')
|
|
80
|
+
return { data: { format, report, nextCommand: 'shrk report quality --format json' } };
|
|
81
|
+
if (format === 'markdown' || format === 'text')
|
|
82
|
+
return { text: JSON.stringify(report, null, 2) };
|
|
83
|
+
return { text: renderQualityHtml(report), data: { format, schema: 'sharkcraft.quality-report/v1', nextCommand: 'shrk report quality --format html --output quality.html', note: READ_ONLY_NOTE } };
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
export const getSafetyHtmlReportTool = {
|
|
87
|
+
name: 'get_safety_html_report',
|
|
88
|
+
description: 'Render the safety audit (html / markdown / json / text). Read-only.',
|
|
89
|
+
inputSchema: {
|
|
90
|
+
type: 'object',
|
|
91
|
+
properties: { format: { type: 'string' } },
|
|
92
|
+
additionalProperties: false,
|
|
93
|
+
},
|
|
94
|
+
handler(input, ctx) {
|
|
95
|
+
const audit = buildSafetyAudit({
|
|
96
|
+
inspection: ctx.inspection,
|
|
97
|
+
catalog: [],
|
|
98
|
+
mcpTools: ALL_TOOLS.map((t) => ({ name: t.name, description: t.description, canWrite: false })),
|
|
99
|
+
planSecretEnv: 'SHARKCRAFT_PLAN_SECRET',
|
|
100
|
+
planSecretConfigured: typeof process.env.SHARKCRAFT_PLAN_SECRET === 'string' && process.env.SHARKCRAFT_PLAN_SECRET.length > 0,
|
|
101
|
+
});
|
|
102
|
+
const format = pickFormat(input, 'html');
|
|
103
|
+
if (format === 'json')
|
|
104
|
+
return { data: { format, audit, nextCommand: 'shrk report safety --format json' } };
|
|
105
|
+
if (format === 'markdown' || format === 'text')
|
|
106
|
+
return { text: JSON.stringify(audit, null, 2) };
|
|
107
|
+
return { text: renderSafetyHtml(audit), data: { format, schema: 'sharkcraft.safety-audit/v1', nextCommand: 'shrk report safety --format html --output safety.html', note: READ_ONLY_NOTE } };
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
export const getReviewHtmlReportTool = {
|
|
111
|
+
name: 'get_review_html_report',
|
|
112
|
+
description: 'Render a review packet as HTML / markdown / json. Pass `packetPath` (relative to cwd) or `packet` (inline object).',
|
|
113
|
+
inputSchema: {
|
|
114
|
+
type: 'object',
|
|
115
|
+
properties: {
|
|
116
|
+
packetPath: { type: 'string' },
|
|
117
|
+
packet: { type: 'object' },
|
|
118
|
+
format: { type: 'string' },
|
|
119
|
+
collapseLongSections: { type: 'boolean' },
|
|
120
|
+
maxItems: { type: 'integer' },
|
|
121
|
+
},
|
|
122
|
+
additionalProperties: false,
|
|
123
|
+
},
|
|
124
|
+
handler(input, ctx) {
|
|
125
|
+
let packet = null;
|
|
126
|
+
if (typeof input.packetPath === 'string') {
|
|
127
|
+
const abs = nodePath.isAbsolute(input.packetPath) ? input.packetPath : nodePath.resolve(ctx.cwd, input.packetPath);
|
|
128
|
+
if (!existsSync(abs))
|
|
129
|
+
return { isError: true, data: { error: `packet not found: ${abs}` } };
|
|
130
|
+
packet = JSON.parse(readFileSync(abs, 'utf8'));
|
|
131
|
+
}
|
|
132
|
+
else if (input.packet && typeof input.packet === 'object') {
|
|
133
|
+
packet = input.packet;
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
return { isError: true, data: { error: 'provide packetPath or packet' } };
|
|
137
|
+
}
|
|
138
|
+
const format = pickFormat(input, 'html');
|
|
139
|
+
if (format === 'json')
|
|
140
|
+
return { data: { format, packet, nextCommand: 'shrk report review <packet.json> --format json' } };
|
|
141
|
+
if (format === 'markdown' || format === 'text')
|
|
142
|
+
return { text: renderReviewComment(packet, {}), data: { format } };
|
|
143
|
+
return {
|
|
144
|
+
text: renderReviewHtml(packet, {
|
|
145
|
+
...(input.collapseLongSections ? { collapseLongSections: true } : {}),
|
|
146
|
+
...(typeof input.maxItems === 'number' ? { maxItems: input.maxItems } : {}),
|
|
147
|
+
}),
|
|
148
|
+
data: { format, schema: 'sharkcraft.review-packet/v1', nextCommand: 'shrk report review <packet.json> --format html' },
|
|
149
|
+
};
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
export const getCoverageReportRenderedTool = {
|
|
153
|
+
name: 'get_coverage_report_rendered',
|
|
154
|
+
description: 'Render the coverage report as JSON (default) or markdown. Read-only.',
|
|
155
|
+
inputSchema: { type: 'object', properties: { format: { type: 'string' } }, additionalProperties: false },
|
|
156
|
+
handler(input, ctx) {
|
|
157
|
+
const r = buildCoverageReport(ctx.inspection);
|
|
158
|
+
const format = pickFormat(input, 'json');
|
|
159
|
+
if (format === 'markdown' || format === 'text')
|
|
160
|
+
return { text: JSON.stringify(r, null, 2) };
|
|
161
|
+
return { data: { format, report: r, nextCommand: 'shrk report coverage --format json' } };
|
|
162
|
+
},
|
|
163
|
+
};
|
|
164
|
+
export const getDriftReportRenderedTool = {
|
|
165
|
+
name: 'get_drift_report_rendered',
|
|
166
|
+
description: 'Render the drift report as JSON (default) or markdown. Read-only.',
|
|
167
|
+
inputSchema: { type: 'object', properties: { format: { type: 'string' } }, additionalProperties: false },
|
|
168
|
+
handler(input, ctx) {
|
|
169
|
+
const r = buildDriftReport(ctx.inspection);
|
|
170
|
+
const format = pickFormat(input, 'json');
|
|
171
|
+
if (format === 'markdown' || format === 'text')
|
|
172
|
+
return { text: JSON.stringify(r, null, 2) };
|
|
173
|
+
return { data: { format, report: r, nextCommand: 'shrk report drift --format json' } };
|
|
174
|
+
},
|
|
175
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safety-audit.tool.d.ts","sourceRoot":"","sources":["../../src/tools/safety-audit.tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAQpE,eAAO,MAAM,kBAAkB,EAAE,eAqChC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { buildSafetyAudit } from '@shrkcrft/inspector';
|
|
2
|
+
// DX#4 — derive the audit list at runtime from ALL_TOOLS instead of
|
|
3
|
+
// maintaining a parallel static list.
|
|
4
|
+
import { ALL_TOOLS } from "./all-tools.js";
|
|
5
|
+
import { COMMAND_CATALOG_EXPORT } from "./command-catalog.tool.js";
|
|
6
|
+
const PLAN_SECRET_ENV = 'SHARKCRAFT_PLAN_SECRET';
|
|
7
|
+
export const getSafetyAuditTool = {
|
|
8
|
+
name: 'get_safety_audit',
|
|
9
|
+
description: 'Return the SharkCraft safety audit: command safety levels, MCP read-only invariant, pack signature status, verification command trust, plan-signing status, recommendations. READ-ONLY.',
|
|
10
|
+
inputSchema: {
|
|
11
|
+
type: 'object',
|
|
12
|
+
properties: {},
|
|
13
|
+
additionalProperties: false,
|
|
14
|
+
},
|
|
15
|
+
async handler(_input, ctx) {
|
|
16
|
+
const planSecretConfigured = typeof process !== 'undefined' && process.env[PLAN_SECRET_ENV] !== undefined;
|
|
17
|
+
// Translate the catalog into the audit-input shape (already aligned).
|
|
18
|
+
const catalog = COMMAND_CATALOG_EXPORT.map((e) => ({
|
|
19
|
+
command: e.command,
|
|
20
|
+
description: e.description,
|
|
21
|
+
category: e.category,
|
|
22
|
+
safetyLevel: e.safetyLevel,
|
|
23
|
+
writesFiles: e.writesFiles,
|
|
24
|
+
writesSource: e.writesSource,
|
|
25
|
+
runsShell: e.runsShell,
|
|
26
|
+
requiresReview: e.requiresReview,
|
|
27
|
+
mcpAvailable: e.mcpAvailable,
|
|
28
|
+
}));
|
|
29
|
+
const mcpTools = ALL_TOOLS.map((t) => ({
|
|
30
|
+
name: t.name,
|
|
31
|
+
description: t.description,
|
|
32
|
+
}));
|
|
33
|
+
const report = buildSafetyAudit({
|
|
34
|
+
inspection: ctx.inspection,
|
|
35
|
+
catalog,
|
|
36
|
+
mcpTools,
|
|
37
|
+
planSecretEnv: PLAN_SECRET_ENV,
|
|
38
|
+
planSecretConfigured,
|
|
39
|
+
});
|
|
40
|
+
return { data: report };
|
|
41
|
+
},
|
|
42
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { IToolDefinition } from '../server/tool-definition.js';
|
|
2
|
+
export declare const listScaffoldPatternsTool: IToolDefinition;
|
|
3
|
+
export declare const getScaffoldPatternTool: IToolDefinition;
|
|
4
|
+
export declare const getScaffoldPatternDoctorTool: IToolDefinition;
|
|
5
|
+
//# sourceMappingURL=scaffold-patterns.tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffold-patterns.tool.d.ts","sourceRoot":"","sources":["../../src/tools/scaffold-patterns.tool.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,wBAAwB,EAAE,eAsBtC,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,eAgBpC,CAAC;AAEF,eAAO,MAAM,4BAA4B,EAAE,eAkB1C,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { loadScaffoldPatternsFromInspection, doctorScaffoldPatterns, } from '@shrkcrft/inspector';
|
|
2
|
+
export const listScaffoldPatternsTool = {
|
|
3
|
+
name: 'list_scaffold_patterns',
|
|
4
|
+
description: 'List every scaffold pattern contributed by an installed pack. Read-only. Inputs: none.',
|
|
5
|
+
inputSchema: { type: 'object', properties: {}, additionalProperties: false },
|
|
6
|
+
async handler(_input, ctx) {
|
|
7
|
+
const r = await loadScaffoldPatternsFromInspection(ctx.inspection);
|
|
8
|
+
return {
|
|
9
|
+
data: {
|
|
10
|
+
patterns: r.patterns.map((p) => ({
|
|
11
|
+
id: p.pattern.id,
|
|
12
|
+
title: p.pattern.title,
|
|
13
|
+
templateId: p.pattern.templateId,
|
|
14
|
+
matchPaths: p.pattern.matchPaths,
|
|
15
|
+
appliesWhen: p.pattern.appliesWhen,
|
|
16
|
+
confidence: p.pattern.confidence,
|
|
17
|
+
source: p.source,
|
|
18
|
+
})),
|
|
19
|
+
warnings: r.warnings,
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
export const getScaffoldPatternTool = {
|
|
25
|
+
name: 'get_scaffold_pattern',
|
|
26
|
+
description: 'Get one scaffold pattern by id (full content). Read-only.',
|
|
27
|
+
inputSchema: {
|
|
28
|
+
type: 'object',
|
|
29
|
+
properties: { id: { type: 'string' } },
|
|
30
|
+
required: ['id'],
|
|
31
|
+
additionalProperties: false,
|
|
32
|
+
},
|
|
33
|
+
async handler(input, ctx) {
|
|
34
|
+
const id = String(input.id ?? '');
|
|
35
|
+
const r = await loadScaffoldPatternsFromInspection(ctx.inspection);
|
|
36
|
+
const match = r.patterns.find((p) => p.pattern.id === id);
|
|
37
|
+
if (!match)
|
|
38
|
+
return { isError: true, data: { error: `unknown scaffold pattern: ${id}` } };
|
|
39
|
+
return { data: match };
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
export const getScaffoldPatternDoctorTool = {
|
|
43
|
+
name: 'get_scaffold_pattern_doctor',
|
|
44
|
+
description: 'Validate every loaded scaffold pattern (templates exist, strategies recognized, confidence valid). Read-only.',
|
|
45
|
+
inputSchema: { type: 'object', properties: {}, additionalProperties: false },
|
|
46
|
+
async handler(_input, ctx) {
|
|
47
|
+
const r = await loadScaffoldPatternsFromInspection(ctx.inspection);
|
|
48
|
+
const issues = doctorScaffoldPatterns(r.patterns, ctx.inspection);
|
|
49
|
+
return {
|
|
50
|
+
data: {
|
|
51
|
+
patterns: r.patterns.length,
|
|
52
|
+
errors: issues.filter((i) => i.severity === 'error').length,
|
|
53
|
+
warnings: issues.filter((i) => i.severity === 'warning').length,
|
|
54
|
+
issues,
|
|
55
|
+
nextCommand: 'shrk scaffolds doctor',
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
},
|
|
59
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-inventory.tool.d.ts","sourceRoot":"","sources":["../../src/tools/schema-inventory.tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,sBAAsB,EAAE,eAsBpC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { buildSchemaInventory, findSchemaInventoryEntry } from '@shrkcrft/inspector';
|
|
2
|
+
export const getSchemaInventoryTool = {
|
|
3
|
+
name: 'get_schema_inventory',
|
|
4
|
+
description: 'Engine schema-id inventory: known versions, current version, deprecation/back-compat status. Pass `id` for one schema only. Read-only.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
id: { type: 'string', description: 'Optional schema id (e.g. "sharkcraft.self-config-doctor").' },
|
|
9
|
+
},
|
|
10
|
+
additionalProperties: false,
|
|
11
|
+
},
|
|
12
|
+
handler(input) {
|
|
13
|
+
const id = typeof input.id === 'string' ? input.id : null;
|
|
14
|
+
if (id) {
|
|
15
|
+
const entry = findSchemaInventoryEntry(id);
|
|
16
|
+
if (!entry) {
|
|
17
|
+
return { data: { found: false, id } };
|
|
18
|
+
}
|
|
19
|
+
return { data: { found: true, entry } };
|
|
20
|
+
}
|
|
21
|
+
return { data: buildSchemaInventory() };
|
|
22
|
+
},
|
|
23
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-knowledge.tool.d.ts","sourceRoot":"","sources":["../../src/tools/search-knowledge.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,eAAO,MAAM,mBAAmB,EAAE,eAwCjC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { searchKnowledge } from '@shrkcrft/knowledge';
|
|
2
|
+
export const searchKnowledgeTool = {
|
|
3
|
+
name: 'search_knowledge',
|
|
4
|
+
description: 'Search knowledge entries by query/tags/types/scope/appliesWhen.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
query: { type: 'string' },
|
|
9
|
+
types: { type: 'array', items: { type: 'string' } },
|
|
10
|
+
scope: { type: 'array', items: { type: 'string' } },
|
|
11
|
+
tags: { type: 'array', items: { type: 'string' } },
|
|
12
|
+
appliesWhen: { type: 'array', items: { type: 'string' } },
|
|
13
|
+
minPriority: { type: 'string' },
|
|
14
|
+
limit: { type: 'integer', minimum: 1 },
|
|
15
|
+
},
|
|
16
|
+
additionalProperties: false,
|
|
17
|
+
},
|
|
18
|
+
async handler(input, ctx) {
|
|
19
|
+
const limit = typeof input.limit === 'number' ? input.limit : 20;
|
|
20
|
+
const results = searchKnowledge(ctx.inspection.knowledgeEntries, {
|
|
21
|
+
query: typeof input.query === 'string' ? input.query : undefined,
|
|
22
|
+
types: input.types,
|
|
23
|
+
scope: input.scope,
|
|
24
|
+
tags: input.tags,
|
|
25
|
+
appliesWhen: input.appliesWhen,
|
|
26
|
+
minPriority: typeof input.minPriority === 'string' ? input.minPriority : undefined,
|
|
27
|
+
limit,
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
data: results.map((r) => ({
|
|
31
|
+
id: r.entry.id,
|
|
32
|
+
title: r.entry.title,
|
|
33
|
+
score: r.score,
|
|
34
|
+
type: r.entry.type,
|
|
35
|
+
priority: r.entry.priority,
|
|
36
|
+
tags: r.entry.tags,
|
|
37
|
+
scope: r.entry.scope,
|
|
38
|
+
reasons: r.reasons,
|
|
39
|
+
})),
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-path-conventions.tool.d.ts","sourceRoot":"","sources":["../../src/tools/search-path-conventions.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,eAAO,MAAM,yBAAyB,EAAE,eA6BvC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export const searchPathConventionsTool = {
|
|
2
|
+
name: 'search_path_conventions',
|
|
3
|
+
description: 'Search path conventions by query/scope/tags.',
|
|
4
|
+
inputSchema: {
|
|
5
|
+
type: 'object',
|
|
6
|
+
properties: {
|
|
7
|
+
query: { type: 'string' },
|
|
8
|
+
scope: { type: 'array', items: { type: 'string' } },
|
|
9
|
+
tags: { type: 'array', items: { type: 'string' } },
|
|
10
|
+
limit: { type: 'integer', minimum: 1 },
|
|
11
|
+
},
|
|
12
|
+
additionalProperties: false,
|
|
13
|
+
},
|
|
14
|
+
async handler(input, ctx) {
|
|
15
|
+
const results = ctx.inspection.pathService.search({
|
|
16
|
+
query: typeof input.query === 'string' ? input.query : undefined,
|
|
17
|
+
scope: input.scope,
|
|
18
|
+
tags: input.tags,
|
|
19
|
+
limit: typeof input.limit === 'number' ? input.limit : 20,
|
|
20
|
+
});
|
|
21
|
+
return {
|
|
22
|
+
data: results.map((p) => ({
|
|
23
|
+
id: p.id,
|
|
24
|
+
title: p.title,
|
|
25
|
+
path: p.metadata?.path ?? '',
|
|
26
|
+
priority: p.priority,
|
|
27
|
+
})),
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-templates.tool.d.ts","sourceRoot":"","sources":["../../src/tools/search-templates.tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,mBAAmB,EAAE,eAoBjC,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export const searchTemplatesTool = {
|
|
2
|
+
name: 'search_templates',
|
|
3
|
+
description: 'Search templates by free-text query.',
|
|
4
|
+
inputSchema: {
|
|
5
|
+
type: 'object',
|
|
6
|
+
properties: { query: { type: 'string' } },
|
|
7
|
+
required: ['query'],
|
|
8
|
+
additionalProperties: false,
|
|
9
|
+
},
|
|
10
|
+
async handler(input, ctx) {
|
|
11
|
+
const results = ctx.inspection.templateRegistry.search(String(input.query ?? ''));
|
|
12
|
+
return {
|
|
13
|
+
data: results.map((t) => ({
|
|
14
|
+
id: t.id,
|
|
15
|
+
name: t.name,
|
|
16
|
+
description: t.description,
|
|
17
|
+
tags: t.tags,
|
|
18
|
+
})),
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-tuning-explain.tool.d.ts","sourceRoot":"","sources":["../../src/tools/search-tuning-explain.tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,uBAAuB,EAAE,eAoBrC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { explainSearchTuning, loadSearchTuning } from '@shrkcrft/inspector';
|
|
2
|
+
export const explainSearchTuningTool = {
|
|
3
|
+
name: 'explain_search_tuning',
|
|
4
|
+
description: 'Return a structured explainer for how tuning would influence a given query. Read-only.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
required: ['query'],
|
|
8
|
+
properties: { query: { type: 'string' }, topN: { type: 'number' } },
|
|
9
|
+
},
|
|
10
|
+
async handler(input, ctx) {
|
|
11
|
+
const query = String(input['query'] ?? '');
|
|
12
|
+
const topN = typeof input['topN'] === 'number' ? input['topN'] : undefined;
|
|
13
|
+
await loadSearchTuning(ctx.inspection);
|
|
14
|
+
const report = await explainSearchTuning(ctx.inspection, query, topN ? { topN } : {});
|
|
15
|
+
return { data: report };
|
|
16
|
+
},
|
|
17
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-tuning.tool.d.ts","sourceRoot":"","sources":["../../src/tools/search-tuning.tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,oBAAoB,EAAE,eAQlC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { loadSearchTuning } from '@shrkcrft/inspector';
|
|
2
|
+
export const listSearchTuningTool = {
|
|
3
|
+
name: 'list_search_tuning',
|
|
4
|
+
description: 'List search-tuning entries contributed by local config and packs. Read-only.',
|
|
5
|
+
inputSchema: { type: 'object', properties: {} },
|
|
6
|
+
async handler(_input, ctx) {
|
|
7
|
+
const { entries, issues } = await loadSearchTuning(ctx.inspection);
|
|
8
|
+
return { data: { entries, issues } };
|
|
9
|
+
},
|
|
10
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.tool.d.ts","sourceRoot":"","sources":["../../src/tools/search.tool.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,aAAa,EAAE,eA0C3B,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { buildSearchIndex, loadConstructs, loadPlaybooks, searchIndex, SearchKind, SearchSource, } from '@shrkcrft/inspector';
|
|
2
|
+
export const searchAllTool = {
|
|
3
|
+
name: 'search_all',
|
|
4
|
+
description: 'Unified, deterministic search across knowledge, rules, paths, templates, pipelines, presets, packs, boundaries, docs, sessions, bundles, constructs, and playbooks. No AI / embeddings — pure ranking. Read-only.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
required: ['query'],
|
|
8
|
+
properties: {
|
|
9
|
+
query: { type: 'string' },
|
|
10
|
+
kinds: { type: 'array', items: { type: 'string' } },
|
|
11
|
+
sources: { type: 'array', items: { type: 'string' } },
|
|
12
|
+
limit: { type: 'number' },
|
|
13
|
+
explain: { type: 'boolean' },
|
|
14
|
+
},
|
|
15
|
+
additionalProperties: false,
|
|
16
|
+
},
|
|
17
|
+
async handler(input, ctx) {
|
|
18
|
+
const query = typeof input['query'] === 'string' ? input['query'] : '';
|
|
19
|
+
const limit = typeof input['limit'] === 'number' ? input['limit'] : 30;
|
|
20
|
+
const explain = Boolean(input['explain']);
|
|
21
|
+
const rawKinds = Array.isArray(input['kinds']) ? input['kinds'] : [];
|
|
22
|
+
const rawSources = Array.isArray(input['sources']) ? input['sources'] : [];
|
|
23
|
+
const validKinds = new Set(Object.values(SearchKind));
|
|
24
|
+
const validSources = new Set(Object.values(SearchSource));
|
|
25
|
+
const kinds = rawKinds.filter((k) => validKinds.has(k));
|
|
26
|
+
const sources = rawSources.filter((s) => validSources.has(s));
|
|
27
|
+
await loadConstructs(ctx.inspection);
|
|
28
|
+
await loadPlaybooks(ctx.inspection);
|
|
29
|
+
const index = buildSearchIndex(ctx.inspection);
|
|
30
|
+
const opts = { query, limit, explain };
|
|
31
|
+
if (kinds.length > 0)
|
|
32
|
+
opts.kinds = kinds;
|
|
33
|
+
if (sources.length > 0)
|
|
34
|
+
opts.sources = sources;
|
|
35
|
+
const result = searchIndex(index, opts);
|
|
36
|
+
return {
|
|
37
|
+
data: {
|
|
38
|
+
query: result.query,
|
|
39
|
+
total: result.total,
|
|
40
|
+
truncated: result.truncated,
|
|
41
|
+
hits: result.hits,
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"self-audit.tool.d.ts","sourceRoot":"","sources":["../../src/tools/self-audit.tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,gBAAgB,EAAE,eA2B9B,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { buildSelfAudit, detectSharkcraftRepo, buildReleaseReadiness, buildDocsCheck, buildExamplesCheck } from '@shrkcrft/inspector';
|
|
2
|
+
export const getSelfAuditTool = {
|
|
3
|
+
name: 'get_self_audit',
|
|
4
|
+
description: 'Run the SharkCraft self-dogfood audit. Returns a single verdict aggregating release readiness, docs/examples checks, and MCP safety. Read-only.',
|
|
5
|
+
inputSchema: { type: 'object', additionalProperties: false },
|
|
6
|
+
async handler(_input, ctx) {
|
|
7
|
+
const isRepo = detectSharkcraftRepo(ctx.cwd);
|
|
8
|
+
if (!isRepo) {
|
|
9
|
+
return { data: buildSelfAudit(ctx.cwd) };
|
|
10
|
+
}
|
|
11
|
+
const readiness = await buildReleaseReadiness(ctx.inspection, {
|
|
12
|
+
includeDocsCheck: true,
|
|
13
|
+
includeExamplesCheck: true,
|
|
14
|
+
});
|
|
15
|
+
const docs = buildDocsCheck(ctx.cwd);
|
|
16
|
+
const examples = buildExamplesCheck(ctx.cwd);
|
|
17
|
+
return {
|
|
18
|
+
data: buildSelfAudit(ctx.cwd, {
|
|
19
|
+
releaseReadinessReady: readiness.ready,
|
|
20
|
+
releaseReadinessBlockers: readiness.blockers.length,
|
|
21
|
+
releaseReadinessWarnings: readiness.warnings.length,
|
|
22
|
+
mcpAuditWriteToolCount: 0,
|
|
23
|
+
docsCheckOk: docs.ok,
|
|
24
|
+
examplesCheckOk: examples.ok,
|
|
25
|
+
}),
|
|
26
|
+
};
|
|
27
|
+
},
|
|
28
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-here.tool.d.ts","sourceRoot":"","sources":["../../src/tools/start-here.tool.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,gBAAgB,EAAE,eAkB9B,CAAC;AAEF,eAAO,MAAM,sBAAsB,EAAE,eAOpC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { buildStartHereReport, buildPrimaryCommandsReport, } from '@shrkcrft/inspector';
|
|
2
|
+
export const getStartHereTool = {
|
|
3
|
+
name: 'get_start_here',
|
|
4
|
+
description: 'Return the SharkCraft start-here flow list (30-second explanation + 5 primary flows + safety pledge). Read-only.',
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object',
|
|
7
|
+
properties: {
|
|
8
|
+
flow: {
|
|
9
|
+
type: 'string',
|
|
10
|
+
enum: ['onboard', 'brief', 'dev', 'review', 'governance', 'packs', 'release'],
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
additionalProperties: false,
|
|
14
|
+
},
|
|
15
|
+
handler(input) {
|
|
16
|
+
const flow = typeof input['flow'] === 'string' ? input['flow'] : null;
|
|
17
|
+
return { data: buildStartHereReport(flow) };
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
export const getPrimaryCommandsTool = {
|
|
21
|
+
name: 'get_primary_commands',
|
|
22
|
+
description: 'Return the curated primary SharkCraft command list. Read-only.',
|
|
23
|
+
inputSchema: { type: 'object', additionalProperties: false },
|
|
24
|
+
handler() {
|
|
25
|
+
return { data: buildPrimaryCommandsReport() };
|
|
26
|
+
},
|
|
27
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-impact.tool.d.ts","sourceRoot":"","sources":["../../src/tools/test-impact.tool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,eAAO,MAAM,iBAAiB,EAAE,eAqB/B,CAAC"}
|