sandstream-kit 1.0.0
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 +617 -0
- package/dist/adapters/api-key-adapter.d.ts +35 -0
- package/dist/adapters/api-key-adapter.js +46 -0
- package/dist/adapters/api-key-adapter.js.map +1 -0
- package/dist/adapters/clerk-auth.d.ts +6 -0
- package/dist/adapters/clerk-auth.js +20 -0
- package/dist/adapters/clerk-auth.js.map +1 -0
- package/dist/adapters/cloudflare-r2.d.ts +6 -0
- package/dist/adapters/cloudflare-r2.js +136 -0
- package/dist/adapters/cloudflare-r2.js.map +1 -0
- package/dist/adapters/expo-eas.d.ts +6 -0
- package/dist/adapters/expo-eas.js +129 -0
- package/dist/adapters/expo-eas.js.map +1 -0
- package/dist/adapters/flagsmith-flags.d.ts +5 -0
- package/dist/adapters/flagsmith-flags.js +20 -0
- package/dist/adapters/flagsmith-flags.js.map +1 -0
- package/dist/adapters/flyio-hosting.d.ts +2 -0
- package/dist/adapters/flyio-hosting.js +143 -0
- package/dist/adapters/flyio-hosting.js.map +1 -0
- package/dist/adapters/index.d.ts +6 -0
- package/dist/adapters/index.js +48 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/inngest-background.d.ts +5 -0
- package/dist/adapters/inngest-background.js +19 -0
- package/dist/adapters/inngest-background.js.map +1 -0
- package/dist/adapters/liveblocks-realtime.d.ts +11 -0
- package/dist/adapters/liveblocks-realtime.js +62 -0
- package/dist/adapters/liveblocks-realtime.js.map +1 -0
- package/dist/adapters/loops-email.d.ts +6 -0
- package/dist/adapters/loops-email.js +18 -0
- package/dist/adapters/loops-email.js.map +1 -0
- package/dist/adapters/neon-db.d.ts +10 -0
- package/dist/adapters/neon-db.js +94 -0
- package/dist/adapters/neon-db.js.map +1 -0
- package/dist/adapters/planetscale-db.d.ts +11 -0
- package/dist/adapters/planetscale-db.js +134 -0
- package/dist/adapters/planetscale-db.js.map +1 -0
- package/dist/adapters/posthog-analytics.d.ts +6 -0
- package/dist/adapters/posthog-analytics.js +22 -0
- package/dist/adapters/posthog-analytics.js.map +1 -0
- package/dist/adapters/railway-hosting.d.ts +2 -0
- package/dist/adapters/railway-hosting.js +136 -0
- package/dist/adapters/railway-hosting.js.map +1 -0
- package/dist/adapters/resend-email.d.ts +35 -0
- package/dist/adapters/resend-email.js +109 -0
- package/dist/adapters/resend-email.js.map +1 -0
- package/dist/adapters/searxng-instance.d.ts +6 -0
- package/dist/adapters/searxng-instance.js +240 -0
- package/dist/adapters/searxng-instance.js.map +1 -0
- package/dist/adapters/sentry-monitoring.d.ts +7 -0
- package/dist/adapters/sentry-monitoring.js +27 -0
- package/dist/adapters/sentry-monitoring.js.map +1 -0
- package/dist/adapters/stripe-payments.d.ts +6 -0
- package/dist/adapters/stripe-payments.js +134 -0
- package/dist/adapters/stripe-payments.js.map +1 -0
- package/dist/adapters/supabase-db.d.ts +6 -0
- package/dist/adapters/supabase-db.js +130 -0
- package/dist/adapters/supabase-db.js.map +1 -0
- package/dist/adapters/tinybird-analytics.d.ts +5 -0
- package/dist/adapters/tinybird-analytics.js +20 -0
- package/dist/adapters/tinybird-analytics.js.map +1 -0
- package/dist/adapters/trigger-background.d.ts +6 -0
- package/dist/adapters/trigger-background.js +20 -0
- package/dist/adapters/trigger-background.js.map +1 -0
- package/dist/adapters/types.d.ts +7 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/adapters/upstash-redis.d.ts +6 -0
- package/dist/adapters/upstash-redis.js +88 -0
- package/dist/adapters/upstash-redis.js.map +1 -0
- package/dist/adapters/vercel-hosting.d.ts +6 -0
- package/dist/adapters/vercel-hosting.js +112 -0
- package/dist/adapters/vercel-hosting.js.map +1 -0
- package/dist/agent-adapter-model.d.ts +108 -0
- package/dist/agent-adapter-model.js +6 -0
- package/dist/agent-adapter-model.js.map +1 -0
- package/dist/agent-adapter-service.d.ts +67 -0
- package/dist/agent-adapter-service.js +299 -0
- package/dist/agent-adapter-service.js.map +1 -0
- package/dist/agent-config.d.ts +56 -0
- package/dist/agent-config.js +129 -0
- package/dist/agent-config.js.map +1 -0
- package/dist/agent-governance-model.d.ts +128 -0
- package/dist/agent-governance-model.js +6 -0
- package/dist/agent-governance-model.js.map +1 -0
- package/dist/agent-governance-service.d.ts +101 -0
- package/dist/agent-governance-service.js +319 -0
- package/dist/agent-governance-service.js.map +1 -0
- package/dist/alert-rules-engine.d.ts +102 -0
- package/dist/alert-rules-engine.js +210 -0
- package/dist/alert-rules-engine.js.map +1 -0
- package/dist/analytics-service.d.ts +126 -0
- package/dist/analytics-service.js +318 -0
- package/dist/analytics-service.js.map +1 -0
- package/dist/analyze.d.ts +19 -0
- package/dist/analyze.js +311 -0
- package/dist/analyze.js.map +1 -0
- package/dist/apm-instrumentor.d.ts +119 -0
- package/dist/apm-instrumentor.js +225 -0
- package/dist/apm-instrumentor.js.map +1 -0
- package/dist/approval-model.d.ts +82 -0
- package/dist/approval-model.js +6 -0
- package/dist/approval-model.js.map +1 -0
- package/dist/approval-service.d.ts +39 -0
- package/dist/approval-service.js +236 -0
- package/dist/approval-service.js.map +1 -0
- package/dist/approval.d.ts +22 -0
- package/dist/approval.js +148 -0
- package/dist/approval.js.map +1 -0
- package/dist/audit-logging-model.d.ts +157 -0
- package/dist/audit-logging-model.js +6 -0
- package/dist/audit-logging-model.js.map +1 -0
- package/dist/audit-logging-service.d.ts +89 -0
- package/dist/audit-logging-service.js +367 -0
- package/dist/audit-logging-service.js.map +1 -0
- package/dist/audit-secrets.d.ts +42 -0
- package/dist/audit-secrets.js +126 -0
- package/dist/audit-secrets.js.map +1 -0
- package/dist/audit.d.ts +43 -0
- package/dist/audit.js +286 -0
- package/dist/audit.js.map +1 -0
- package/dist/author-dashboard.d.ts +84 -0
- package/dist/author-dashboard.js +204 -0
- package/dist/author-dashboard.js.map +1 -0
- package/dist/author-notifications.d.ts +130 -0
- package/dist/author-notifications.js +261 -0
- package/dist/author-notifications.js.map +1 -0
- package/dist/author-verification.d.ts +79 -0
- package/dist/author-verification.js +257 -0
- package/dist/author-verification.js.map +1 -0
- package/dist/autonomous-setup-model.d.ts +117 -0
- package/dist/autonomous-setup-model.js +6 -0
- package/dist/autonomous-setup-model.js.map +1 -0
- package/dist/autonomous-setup-service.d.ts +74 -0
- package/dist/autonomous-setup-service.js +325 -0
- package/dist/autonomous-setup-service.js.map +1 -0
- package/dist/badge-system.d.ts +70 -0
- package/dist/badge-system.js +210 -0
- package/dist/badge-system.js.map +1 -0
- package/dist/baseline.d.ts +34 -0
- package/dist/baseline.js +78 -0
- package/dist/baseline.js.map +1 -0
- package/dist/beta-program-service.d.ts +112 -0
- package/dist/beta-program-service.js +240 -0
- package/dist/beta-program-service.js.map +1 -0
- package/dist/budget.d.ts +34 -0
- package/dist/budget.js +159 -0
- package/dist/budget.js.map +1 -0
- package/dist/bumblebee.d.ts +143 -0
- package/dist/bumblebee.js +384 -0
- package/dist/bumblebee.js.map +1 -0
- package/dist/cache-manager.d.ts +97 -0
- package/dist/cache-manager.js +244 -0
- package/dist/cache-manager.js.map +1 -0
- package/dist/cdn-adapter.d.ts +64 -0
- package/dist/cdn-adapter.js +263 -0
- package/dist/cdn-adapter.js.map +1 -0
- package/dist/certification-workflow-model.d.ts +95 -0
- package/dist/certification-workflow-model.js +6 -0
- package/dist/certification-workflow-model.js.map +1 -0
- package/dist/certification-workflow-service.d.ts +72 -0
- package/dist/certification-workflow-service.js +305 -0
- package/dist/certification-workflow-service.js.map +1 -0
- package/dist/check-design.d.ts +38 -0
- package/dist/check-design.js +256 -0
- package/dist/check-design.js.map +1 -0
- package/dist/check-gitignore.d.ts +39 -0
- package/dist/check-gitignore.js +156 -0
- package/dist/check-gitignore.js.map +1 -0
- package/dist/check-hooks.d.ts +15 -0
- package/dist/check-hooks.js +72 -0
- package/dist/check-hooks.js.map +1 -0
- package/dist/check-lock.d.ts +16 -0
- package/dist/check-lock.js +94 -0
- package/dist/check-lock.js.map +1 -0
- package/dist/check-secrets.d.ts +11 -0
- package/dist/check-secrets.js +320 -0
- package/dist/check-secrets.js.map +1 -0
- package/dist/check-security.d.ts +13 -0
- package/dist/check-security.js +887 -0
- package/dist/check-security.js.map +1 -0
- package/dist/check-services.d.ts +10 -0
- package/dist/check-services.js +44 -0
- package/dist/check-services.js.map +1 -0
- package/dist/check-skills.d.ts +8 -0
- package/dist/check-skills.js +26 -0
- package/dist/check-skills.js.map +1 -0
- package/dist/check-tests.d.ts +43 -0
- package/dist/check-tests.js +175 -0
- package/dist/check-tests.js.map +1 -0
- package/dist/check-tools.d.ts +8 -0
- package/dist/check-tools.js +42 -0
- package/dist/check-tools.js.map +1 -0
- package/dist/check-web-search.d.ts +12 -0
- package/dist/check-web-search.js +168 -0
- package/dist/check-web-search.js.map +1 -0
- package/dist/ci-cd-publisher.d.ts +162 -0
- package/dist/ci-cd-publisher.js +319 -0
- package/dist/ci-cd-publisher.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +4074 -0
- package/dist/cli.js.map +1 -0
- package/dist/clone.d.ts +25 -0
- package/dist/clone.js +73 -0
- package/dist/clone.js.map +1 -0
- package/dist/completions.d.ts +8 -0
- package/dist/completions.js +250 -0
- package/dist/completions.js.map +1 -0
- package/dist/compression-manager.d.ts +107 -0
- package/dist/compression-manager.js +250 -0
- package/dist/compression-manager.js.map +1 -0
- package/dist/config.d.ts +233 -0
- package/dist/config.js +255 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +38 -0
- package/dist/context.js +86 -0
- package/dist/context.js.map +1 -0
- package/dist/cost-monitor.d.ts +72 -0
- package/dist/cost-monitor.js +218 -0
- package/dist/cost-monitor.js.map +1 -0
- package/dist/create-plugin.d.ts +22 -0
- package/dist/create-plugin.js +266 -0
- package/dist/create-plugin.js.map +1 -0
- package/dist/database.d.ts +123 -0
- package/dist/database.js +354 -0
- package/dist/database.js.map +1 -0
- package/dist/datadog-adapter.d.ts +60 -0
- package/dist/datadog-adapter.js +245 -0
- package/dist/datadog-adapter.js.map +1 -0
- package/dist/doctor.d.ts +15 -0
- package/dist/doctor.js +131 -0
- package/dist/doctor.js.map +1 -0
- package/dist/documentation-generator.d.ts +226 -0
- package/dist/documentation-generator.js +348 -0
- package/dist/documentation-generator.js.map +1 -0
- package/dist/elevation-scopes.d.ts +40 -0
- package/dist/elevation-scopes.js +110 -0
- package/dist/elevation-scopes.js.map +1 -0
- package/dist/elevation.d.ts +102 -0
- package/dist/elevation.js +449 -0
- package/dist/elevation.js.map +1 -0
- package/dist/env-diff.d.ts +27 -0
- package/dist/env-diff.js +104 -0
- package/dist/env-diff.js.map +1 -0
- package/dist/env-inspect.d.ts +28 -0
- package/dist/env-inspect.js +81 -0
- package/dist/env-inspect.js.map +1 -0
- package/dist/env-switch.d.ts +37 -0
- package/dist/env-switch.js +102 -0
- package/dist/env-switch.js.map +1 -0
- package/dist/environment.d.ts +27 -0
- package/dist/environment.js +148 -0
- package/dist/environment.js.map +1 -0
- package/dist/error-tracker.d.ts +92 -0
- package/dist/error-tracker.js +206 -0
- package/dist/error-tracker.js.map +1 -0
- package/dist/escalate.d.ts +11 -0
- package/dist/escalate.js +73 -0
- package/dist/escalate.js.map +1 -0
- package/dist/event-stream.d.ts +81 -0
- package/dist/event-stream.js +161 -0
- package/dist/event-stream.js.map +1 -0
- package/dist/fix.d.ts +42 -0
- package/dist/fix.js +419 -0
- package/dist/fix.js.map +1 -0
- package/dist/governance-middleware.d.ts +22 -0
- package/dist/governance-middleware.js +173 -0
- package/dist/governance-middleware.js.map +1 -0
- package/dist/governance.d.ts +44 -0
- package/dist/governance.js +236 -0
- package/dist/governance.js.map +1 -0
- package/dist/hooks.d.ts +25 -0
- package/dist/hooks.js +281 -0
- package/dist/hooks.js.map +1 -0
- package/dist/id-generator.d.ts +43 -0
- package/dist/id-generator.js +47 -0
- package/dist/id-generator.js.map +1 -0
- package/dist/image-optimizer.d.ts +92 -0
- package/dist/image-optimizer.js +202 -0
- package/dist/image-optimizer.js.map +1 -0
- package/dist/install.d.ts +15 -0
- package/dist/install.js +59 -0
- package/dist/install.js.map +1 -0
- package/dist/lock.d.ts +82 -0
- package/dist/lock.js +264 -0
- package/dist/lock.js.map +1 -0
- package/dist/login.d.ts +23 -0
- package/dist/login.js +132 -0
- package/dist/login.js.map +1 -0
- package/dist/mcp-kit-tools-model.d.ts +195 -0
- package/dist/mcp-kit-tools-model.js +6 -0
- package/dist/mcp-kit-tools-model.js.map +1 -0
- package/dist/mcp-kit-tools-service.d.ts +127 -0
- package/dist/mcp-kit-tools-service.js +943 -0
- package/dist/mcp-kit-tools-service.js.map +1 -0
- package/dist/mcp-orchestrator.d.ts +70 -0
- package/dist/mcp-orchestrator.js +175 -0
- package/dist/mcp-orchestrator.js.map +1 -0
- package/dist/mcp-server.d.ts +3 -0
- package/dist/mcp-server.js +722 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/middleware/rate-limiter.d.ts +74 -0
- package/dist/middleware/rate-limiter.js +342 -0
- package/dist/middleware/rate-limiter.js.map +1 -0
- package/dist/migration-runner.d.ts +66 -0
- package/dist/migration-runner.js +192 -0
- package/dist/migration-runner.js.map +1 -0
- package/dist/migrations.d.ts +25 -0
- package/dist/migrations.js +530 -0
- package/dist/migrations.js.map +1 -0
- package/dist/moderation-system.d.ts +153 -0
- package/dist/moderation-system.js +338 -0
- package/dist/moderation-system.js.map +1 -0
- package/dist/multi-agent-workflow-model.d.ts +125 -0
- package/dist/multi-agent-workflow-model.js +6 -0
- package/dist/multi-agent-workflow-model.js.map +1 -0
- package/dist/multi-agent-workflow-service.d.ts +102 -0
- package/dist/multi-agent-workflow-service.js +452 -0
- package/dist/multi-agent-workflow-service.js.map +1 -0
- package/dist/onepassword.d.ts +75 -0
- package/dist/onepassword.js +140 -0
- package/dist/onepassword.js.map +1 -0
- package/dist/open.d.ts +30 -0
- package/dist/open.js +166 -0
- package/dist/open.js.map +1 -0
- package/dist/output.d.ts +32 -0
- package/dist/output.js +295 -0
- package/dist/output.js.map +1 -0
- package/dist/partner-service.d.ts +101 -0
- package/dist/partner-service.js +191 -0
- package/dist/partner-service.js.map +1 -0
- package/dist/payout-service.d.ts +136 -0
- package/dist/payout-service.js +293 -0
- package/dist/payout-service.js.map +1 -0
- package/dist/pkg.d.ts +30 -0
- package/dist/pkg.js +162 -0
- package/dist/pkg.js.map +1 -0
- package/dist/plugin-loader.d.ts +16 -0
- package/dist/plugin-loader.js +124 -0
- package/dist/plugin-loader.js.map +1 -0
- package/dist/plugin-registry-model.d.ts +133 -0
- package/dist/plugin-registry-model.js +6 -0
- package/dist/plugin-registry-model.js.map +1 -0
- package/dist/plugin-registry-service.d.ts +109 -0
- package/dist/plugin-registry-service.js +361 -0
- package/dist/plugin-registry-service.js.map +1 -0
- package/dist/plugin-registry.d.ts +58 -0
- package/dist/plugin-registry.js +108 -0
- package/dist/plugin-registry.js.map +1 -0
- package/dist/plugin-updates.d.ts +135 -0
- package/dist/plugin-updates.js +326 -0
- package/dist/plugin-updates.js.map +1 -0
- package/dist/plugins-cli.d.ts +7 -0
- package/dist/plugins-cli.js +157 -0
- package/dist/plugins-cli.js.map +1 -0
- package/dist/plugins.d.ts +88 -0
- package/dist/plugins.js +251 -0
- package/dist/plugins.js.map +1 -0
- package/dist/policy.d.ts +66 -0
- package/dist/policy.js +160 -0
- package/dist/policy.js.map +1 -0
- package/dist/post-pull-audit.d.ts +39 -0
- package/dist/post-pull-audit.js +151 -0
- package/dist/post-pull-audit.js.map +1 -0
- package/dist/provision.d.ts +17 -0
- package/dist/provision.js +147 -0
- package/dist/provision.js.map +1 -0
- package/dist/query-optimizer.d.ts +102 -0
- package/dist/query-optimizer.js +199 -0
- package/dist/query-optimizer.js.map +1 -0
- package/dist/read-only-mode.d.ts +46 -0
- package/dist/read-only-mode.js +71 -0
- package/dist/read-only-mode.js.map +1 -0
- package/dist/redis-adapter.d.ts +71 -0
- package/dist/redis-adapter.js +278 -0
- package/dist/redis-adapter.js.map +1 -0
- package/dist/resilience-tests.d.ts +120 -0
- package/dist/resilience-tests.js +293 -0
- package/dist/resilience-tests.js.map +1 -0
- package/dist/revocation.d.ts +22 -0
- package/dist/revocation.js +100 -0
- package/dist/revocation.js.map +1 -0
- package/dist/run.d.ts +21 -0
- package/dist/run.js +80 -0
- package/dist/run.js.map +1 -0
- package/dist/scan-build.d.ts +18 -0
- package/dist/scan-build.js +100 -0
- package/dist/scan-build.js.map +1 -0
- package/dist/scan-plaintext.d.ts +24 -0
- package/dist/scan-plaintext.js +147 -0
- package/dist/scan-plaintext.js.map +1 -0
- package/dist/scan-staged.d.ts +15 -0
- package/dist/scan-staged.js +70 -0
- package/dist/scan-staged.js.map +1 -0
- package/dist/scan-transcripts.d.ts +23 -0
- package/dist/scan-transcripts.js +93 -0
- package/dist/scan-transcripts.js.map +1 -0
- package/dist/secret-backends.d.ts +50 -0
- package/dist/secret-backends.js +510 -0
- package/dist/secret-backends.js.map +1 -0
- package/dist/secret-expiration.d.ts +46 -0
- package/dist/secret-expiration.js +172 -0
- package/dist/secret-expiration.js.map +1 -0
- package/dist/secrets-migrate.d.ts +75 -0
- package/dist/secrets-migrate.js +185 -0
- package/dist/secrets-migrate.js.map +1 -0
- package/dist/secrets-model.d.ts +77 -0
- package/dist/secrets-model.js +6 -0
- package/dist/secrets-model.js.map +1 -0
- package/dist/secrets-onecli.d.ts +65 -0
- package/dist/secrets-onecli.js +113 -0
- package/dist/secrets-onecli.js.map +1 -0
- package/dist/secrets-propagate.d.ts +48 -0
- package/dist/secrets-propagate.js +201 -0
- package/dist/secrets-propagate.js.map +1 -0
- package/dist/secrets-pull.d.ts +34 -0
- package/dist/secrets-pull.js +118 -0
- package/dist/secrets-pull.js.map +1 -0
- package/dist/secrets-purge-history.d.ts +53 -0
- package/dist/secrets-purge-history.js +144 -0
- package/dist/secrets-purge-history.js.map +1 -0
- package/dist/secrets-rotate-cli.d.ts +54 -0
- package/dist/secrets-rotate-cli.js +438 -0
- package/dist/secrets-rotate-cli.js.map +1 -0
- package/dist/secrets-rotate.d.ts +38 -0
- package/dist/secrets-rotate.js +65 -0
- package/dist/secrets-rotate.js.map +1 -0
- package/dist/secrets-service.d.ts +73 -0
- package/dist/secrets-service.js +283 -0
- package/dist/secrets-service.js.map +1 -0
- package/dist/secrets-set.d.ts +25 -0
- package/dist/secrets-set.js +33 -0
- package/dist/secrets-set.js.map +1 -0
- package/dist/secrets-sync.d.ts +21 -0
- package/dist/secrets-sync.js +215 -0
- package/dist/secrets-sync.js.map +1 -0
- package/dist/secrets-validate.d.ts +41 -0
- package/dist/secrets-validate.js +126 -0
- package/dist/secrets-validate.js.map +1 -0
- package/dist/secrets-vault-migrate.d.ts +71 -0
- package/dist/secrets-vault-migrate.js +258 -0
- package/dist/secrets-vault-migrate.js.map +1 -0
- package/dist/secrets.d.ts +16 -0
- package/dist/secrets.js +72 -0
- package/dist/secrets.js.map +1 -0
- package/dist/security-hardening.d.ts +150 -0
- package/dist/security-hardening.js +275 -0
- package/dist/security-hardening.js.map +1 -0
- package/dist/security-policy.d.ts +89 -0
- package/dist/security-policy.js +174 -0
- package/dist/security-policy.js.map +1 -0
- package/dist/security-prescan.d.ts +117 -0
- package/dist/security-prescan.js +566 -0
- package/dist/security-prescan.js.map +1 -0
- package/dist/sentry-adapter.d.ts +49 -0
- package/dist/sentry-adapter.js +227 -0
- package/dist/sentry-adapter.js.map +1 -0
- package/dist/service-adapter.d.ts +94 -0
- package/dist/service-adapter.js +162 -0
- package/dist/service-adapter.js.map +1 -0
- package/dist/skills.d.ts +13 -0
- package/dist/skills.js +17 -0
- package/dist/skills.js.map +1 -0
- package/dist/sla-monitor.d.ts +107 -0
- package/dist/sla-monitor.js +233 -0
- package/dist/sla-monitor.js.map +1 -0
- package/dist/stack-detector.d.ts +12 -0
- package/dist/stack-detector.js +251 -0
- package/dist/stack-detector.js.map +1 -0
- package/dist/team-model.d.ts +58 -0
- package/dist/team-model.js +83 -0
- package/dist/team-model.js.map +1 -0
- package/dist/team-service.d.ts +54 -0
- package/dist/team-service.js +206 -0
- package/dist/team-service.js.map +1 -0
- package/dist/toml-generator.d.ts +8 -0
- package/dist/toml-generator.js +223 -0
- package/dist/toml-generator.js.map +1 -0
- package/dist/triage-sandbox.d.ts +34 -0
- package/dist/triage-sandbox.js +167 -0
- package/dist/triage-sandbox.js.map +1 -0
- package/dist/triage.d.ts +30 -0
- package/dist/triage.js +79 -0
- package/dist/triage.js.map +1 -0
- package/dist/update-check.d.ts +13 -0
- package/dist/update-check.js +91 -0
- package/dist/update-check.js.map +1 -0
- package/dist/utils/colors.d.ts +14 -0
- package/dist/utils/colors.js +15 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/didYouMean.d.ts +15 -0
- package/dist/utils/didYouMean.js +47 -0
- package/dist/utils/didYouMean.js.map +1 -0
- package/dist/utils/exec.d.ts +21 -0
- package/dist/utils/exec.js +23 -0
- package/dist/utils/exec.js.map +1 -0
- package/dist/utils/execFileNoThrow.d.ts +14 -0
- package/dist/utils/execFileNoThrow.js +29 -0
- package/dist/utils/execFileNoThrow.js.map +1 -0
- package/dist/utils/flags.d.ts +19 -0
- package/dist/utils/flags.js +36 -0
- package/dist/utils/flags.js.map +1 -0
- package/dist/utils/parseCommand.d.ts +16 -0
- package/dist/utils/parseCommand.js +13 -0
- package/dist/utils/parseCommand.js.map +1 -0
- package/dist/utils/prompt.d.ts +13 -0
- package/dist/utils/prompt.js +35 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/promptSelect.d.ts +19 -0
- package/dist/utils/promptSelect.js +89 -0
- package/dist/utils/promptSelect.js.map +1 -0
- package/dist/utils/redactSecrets.d.ts +24 -0
- package/dist/utils/redactSecrets.js +134 -0
- package/dist/utils/redactSecrets.js.map +1 -0
- package/dist/validation/dynamic-schema.d.ts +29 -0
- package/dist/validation/dynamic-schema.js +76 -0
- package/dist/validation/dynamic-schema.js.map +1 -0
- package/package.json +52 -0
package/dist/policy.js
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent-write pre-approval policy.
|
|
3
|
+
*
|
|
4
|
+
* `.kit.toml [policy.agent_writes]` declares which sensitive vendor
|
|
5
|
+
* operations the operator pre-authorizes for this repository. Classifiers
|
|
6
|
+
* and agents read a stable hash of the policy via `KIT_POLICY_HASH` so
|
|
7
|
+
* the in-scope ops can run without per-call human confirmation, while
|
|
8
|
+
* out-of-scope ops still require explicit elevation.
|
|
9
|
+
*
|
|
10
|
+
* Format in .kit.toml:
|
|
11
|
+
*
|
|
12
|
+
* [policy.agent_writes]
|
|
13
|
+
* sentry = ["resolve_issue", "create_release"]
|
|
14
|
+
* supabase = ["rotate_jwt", "list_projects"]
|
|
15
|
+
* vercel = ["env_set", "trigger_deploy"]
|
|
16
|
+
* stripe = [] # all writes still gated
|
|
17
|
+
*
|
|
18
|
+
* [policy]
|
|
19
|
+
* default_mode = "read-only" # force --read-only globally for this repo
|
|
20
|
+
*
|
|
21
|
+
* Runtime contract:
|
|
22
|
+
* 1. At boot, the orchestrator (cli.ts:main) reads `[policy]` from the
|
|
23
|
+
* loaded config, computes a SHA-256 of the canonical JSON, exports
|
|
24
|
+
* `KIT_POLICY_HASH=<hex>` to env so child processes / classifiers
|
|
25
|
+
* see the same identity.
|
|
26
|
+
* 2. Callers that mutate vendor state call `checkPolicy(vendor, op)` —
|
|
27
|
+
* returns true if the op appears in `agent_writes[vendor]`. False
|
|
28
|
+
* means the op is gated and requires elevation.
|
|
29
|
+
* 3. Every policy check emits an audit event with `policy_scope_matched`
|
|
30
|
+
* so the forensic trail covers both grants and denials.
|
|
31
|
+
*
|
|
32
|
+
* This module deliberately does NOT enforce — it just SURFACES. The
|
|
33
|
+
* existing elevation + read-only gates remain authoritative; the policy
|
|
34
|
+
* block is the explicit "operator agreed to this scope" signal that
|
|
35
|
+
* upstream classifiers (Claude Code, etc.) can honor.
|
|
36
|
+
*/
|
|
37
|
+
import { createHash } from "node:crypto";
|
|
38
|
+
import { appendAuditEventDirect } from "./audit.js";
|
|
39
|
+
const POLICY_HASH_ENV = "KIT_POLICY_HASH";
|
|
40
|
+
/**
|
|
41
|
+
* Canonical JSON for hashing — sorted keys at every level so the hash is
|
|
42
|
+
* stable across reorderings in `.kit.toml`.
|
|
43
|
+
*/
|
|
44
|
+
function canonicalize(value) {
|
|
45
|
+
if (value === null || typeof value !== "object") {
|
|
46
|
+
return JSON.stringify(value);
|
|
47
|
+
}
|
|
48
|
+
if (Array.isArray(value)) {
|
|
49
|
+
return `[${value.map(canonicalize).join(",")}]`;
|
|
50
|
+
}
|
|
51
|
+
const obj = value;
|
|
52
|
+
const keys = Object.keys(obj).sort();
|
|
53
|
+
const parts = keys.map((k) => `${JSON.stringify(k)}:${canonicalize(obj[k])}`);
|
|
54
|
+
return `{${parts.join(",")}}`;
|
|
55
|
+
}
|
|
56
|
+
export function hashPolicy(policy) {
|
|
57
|
+
if (!policy)
|
|
58
|
+
return null;
|
|
59
|
+
return createHash("sha256").update(canonicalize(policy)).digest("hex");
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Computes the policy hash and exports it to env. Called once from main()
|
|
63
|
+
* after config is loaded. Idempotent.
|
|
64
|
+
*/
|
|
65
|
+
export function installPolicyHash(policy) {
|
|
66
|
+
const hash = hashPolicy(policy);
|
|
67
|
+
if (hash) {
|
|
68
|
+
process.env[POLICY_HASH_ENV] = hash;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
delete process.env[POLICY_HASH_ENV];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export function currentPolicyHash() {
|
|
75
|
+
return process.env[POLICY_HASH_ENV] ?? null;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check whether `op` against `vendor` is pre-approved by the policy.
|
|
79
|
+
*
|
|
80
|
+
* Returns `{ approved: false }` when the policy is missing, the vendor
|
|
81
|
+
* isn't declared, or the op isn't in the vendor's allow-list. Callers
|
|
82
|
+
* should treat false as "elevation still required" — this is not a
|
|
83
|
+
* substitute for the elevation gate, just an explicit declaration that
|
|
84
|
+
* the OPERATOR consented to this scope at configuration time.
|
|
85
|
+
*/
|
|
86
|
+
export async function checkPolicy(policy, vendor, op) {
|
|
87
|
+
const policyHash = hashPolicy(policy);
|
|
88
|
+
if (!policy?.agent_writes) {
|
|
89
|
+
const result = {
|
|
90
|
+
approved: false,
|
|
91
|
+
reason: "no [policy.agent_writes] declared in .kit.toml",
|
|
92
|
+
policyHash,
|
|
93
|
+
};
|
|
94
|
+
await appendAuditEventDirect({
|
|
95
|
+
operation: "policy-check",
|
|
96
|
+
environment: process.env.KIT_ENV ?? process.env.NODE_ENV ?? "unknown",
|
|
97
|
+
success: false,
|
|
98
|
+
metadata: { vendor, op, policy_hash: policyHash, reason: result.reason },
|
|
99
|
+
});
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
const allowed = policy.agent_writes[vendor];
|
|
103
|
+
if (!allowed) {
|
|
104
|
+
const result = {
|
|
105
|
+
approved: false,
|
|
106
|
+
reason: `vendor "${vendor}" not in [policy.agent_writes]`,
|
|
107
|
+
policyHash,
|
|
108
|
+
};
|
|
109
|
+
await appendAuditEventDirect({
|
|
110
|
+
operation: "policy-check",
|
|
111
|
+
environment: process.env.KIT_ENV ?? process.env.NODE_ENV ?? "unknown",
|
|
112
|
+
success: false,
|
|
113
|
+
metadata: { vendor, op, policy_hash: policyHash, reason: result.reason },
|
|
114
|
+
});
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
if (!allowed.includes(op)) {
|
|
118
|
+
const result = {
|
|
119
|
+
approved: false,
|
|
120
|
+
reason: `op "${op}" not in [policy.agent_writes.${vendor}] (= ${JSON.stringify(allowed)})`,
|
|
121
|
+
policyHash,
|
|
122
|
+
};
|
|
123
|
+
await appendAuditEventDirect({
|
|
124
|
+
operation: "policy-check",
|
|
125
|
+
environment: process.env.KIT_ENV ?? process.env.NODE_ENV ?? "unknown",
|
|
126
|
+
success: false,
|
|
127
|
+
metadata: {
|
|
128
|
+
vendor,
|
|
129
|
+
op,
|
|
130
|
+
policy_hash: policyHash,
|
|
131
|
+
allowed_ops: allowed,
|
|
132
|
+
reason: result.reason,
|
|
133
|
+
},
|
|
134
|
+
});
|
|
135
|
+
return result;
|
|
136
|
+
}
|
|
137
|
+
const result = {
|
|
138
|
+
approved: true,
|
|
139
|
+
reason: `op "${op}" approved by [policy.agent_writes.${vendor}]`,
|
|
140
|
+
policyHash,
|
|
141
|
+
};
|
|
142
|
+
await appendAuditEventDirect({
|
|
143
|
+
operation: "policy-check",
|
|
144
|
+
environment: process.env.KIT_ENV ?? process.env.NODE_ENV ?? "unknown",
|
|
145
|
+
success: true,
|
|
146
|
+
metadata: {
|
|
147
|
+
vendor,
|
|
148
|
+
op,
|
|
149
|
+
policy_hash: policyHash,
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Test-only: reset env var so tests start fresh.
|
|
156
|
+
*/
|
|
157
|
+
export function _resetPolicyHashForTests() {
|
|
158
|
+
delete process.env[POLICY_HASH_ENV];
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../src/policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Post-pull / post-merge security audit.
|
|
3
|
+
*
|
|
4
|
+
* After a `git pull` (or merge) brings in teammates' changes, surface
|
|
5
|
+
* anything that should trigger a security review BEFORE the next
|
|
6
|
+
* `npm install` / `pnpm install` / deploy:
|
|
7
|
+
*
|
|
8
|
+
* 1. **New dependencies** in `package.json` — each one should be
|
|
9
|
+
* run through `kit triage` before it lands on disk.
|
|
10
|
+
* 2. **Removed `.gitignore` entries** — someone deleting `.env*` or
|
|
11
|
+
* `*.pem` from the ignore list opens a leak vector.
|
|
12
|
+
* 3. **Plaintext secrets** introduced in any committed file across
|
|
13
|
+
* the diff range (same SECRET_PATTERNS as scan-staged).
|
|
14
|
+
* 4. **`.kit-allowlist.json` / `.kit-policy.json` changes** —
|
|
15
|
+
* relaxed enforcement is worth a second look.
|
|
16
|
+
* 5. **`.kit.toml [secrets.keys]` changes** — keys added / removed.
|
|
17
|
+
*
|
|
18
|
+
* Wraps the existing scanner helpers; this module only does the diff
|
|
19
|
+
* collection + per-category dispatch.
|
|
20
|
+
*/
|
|
21
|
+
import { type SecretFinding } from "./utils/redactSecrets.js";
|
|
22
|
+
export interface PullAuditReport {
|
|
23
|
+
baseRef: string;
|
|
24
|
+
headRef: string;
|
|
25
|
+
newDependencies: string[];
|
|
26
|
+
removedDependencies: string[];
|
|
27
|
+
removedGitignoreEntries: string[];
|
|
28
|
+
newGitignoreEntries: string[];
|
|
29
|
+
plaintextHits: {
|
|
30
|
+
file: string;
|
|
31
|
+
findings: SecretFinding[];
|
|
32
|
+
}[];
|
|
33
|
+
allowlistChanged: boolean;
|
|
34
|
+
policyChanged: boolean;
|
|
35
|
+
kitTomlChanged: boolean;
|
|
36
|
+
changedFiles: string[];
|
|
37
|
+
}
|
|
38
|
+
export declare function auditPull(cwd?: string, baseRef?: string, headRef?: string): Promise<PullAuditReport>;
|
|
39
|
+
export declare function reportSeverity(report: PullAuditReport): "ok" | "warn" | "fail";
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Post-pull / post-merge security audit.
|
|
3
|
+
*
|
|
4
|
+
* After a `git pull` (or merge) brings in teammates' changes, surface
|
|
5
|
+
* anything that should trigger a security review BEFORE the next
|
|
6
|
+
* `npm install` / `pnpm install` / deploy:
|
|
7
|
+
*
|
|
8
|
+
* 1. **New dependencies** in `package.json` — each one should be
|
|
9
|
+
* run through `kit triage` before it lands on disk.
|
|
10
|
+
* 2. **Removed `.gitignore` entries** — someone deleting `.env*` or
|
|
11
|
+
* `*.pem` from the ignore list opens a leak vector.
|
|
12
|
+
* 3. **Plaintext secrets** introduced in any committed file across
|
|
13
|
+
* the diff range (same SECRET_PATTERNS as scan-staged).
|
|
14
|
+
* 4. **`.kit-allowlist.json` / `.kit-policy.json` changes** —
|
|
15
|
+
* relaxed enforcement is worth a second look.
|
|
16
|
+
* 5. **`.kit.toml [secrets.keys]` changes** — keys added / removed.
|
|
17
|
+
*
|
|
18
|
+
* Wraps the existing scanner helpers; this module only does the diff
|
|
19
|
+
* collection + per-category dispatch.
|
|
20
|
+
*/
|
|
21
|
+
import { findSecrets } from "./utils/redactSecrets.js";
|
|
22
|
+
import { exec } from "./utils/exec.js";
|
|
23
|
+
async function tryGitShow(ref, path, cwd) {
|
|
24
|
+
try {
|
|
25
|
+
const { stdout } = await exec("git", ["show", `${ref}:${path}`], {
|
|
26
|
+
cwd,
|
|
27
|
+
timeout: 5_000,
|
|
28
|
+
maxBuffer: 5 * 1024 * 1024,
|
|
29
|
+
});
|
|
30
|
+
return stdout;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async function listChangedFiles(baseRef, headRef, cwd) {
|
|
37
|
+
try {
|
|
38
|
+
const { stdout } = await exec("git", ["diff", "--name-only", "--diff-filter=AM", "-z", baseRef, headRef], { cwd, timeout: 10_000 });
|
|
39
|
+
return stdout.split("\0").filter(Boolean);
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function diffDeps(before, after) {
|
|
46
|
+
const beforeAll = new Set([
|
|
47
|
+
...Object.keys(before?.dependencies ?? {}),
|
|
48
|
+
...Object.keys(before?.devDependencies ?? {}),
|
|
49
|
+
]);
|
|
50
|
+
const afterAll = new Set([
|
|
51
|
+
...Object.keys(after?.dependencies ?? {}),
|
|
52
|
+
...Object.keys(after?.devDependencies ?? {}),
|
|
53
|
+
]);
|
|
54
|
+
return {
|
|
55
|
+
added: [...afterAll].filter((name) => !beforeAll.has(name)),
|
|
56
|
+
removed: [...beforeAll].filter((name) => !afterAll.has(name)),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function diffLines(before, after) {
|
|
60
|
+
const cleanup = (t) => {
|
|
61
|
+
if (!t)
|
|
62
|
+
return new Set();
|
|
63
|
+
return new Set(t
|
|
64
|
+
.split("\n")
|
|
65
|
+
.map((l) => {
|
|
66
|
+
const i = l.indexOf("#");
|
|
67
|
+
const stripped = i >= 0 ? l.slice(0, i) : l;
|
|
68
|
+
return stripped.trim();
|
|
69
|
+
})
|
|
70
|
+
.filter((l) => l.length > 0));
|
|
71
|
+
};
|
|
72
|
+
const b = cleanup(before);
|
|
73
|
+
const a = cleanup(after);
|
|
74
|
+
return {
|
|
75
|
+
added: [...a].filter((line) => !b.has(line)),
|
|
76
|
+
removed: [...b].filter((line) => !a.has(line)),
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
export async function auditPull(cwd = process.cwd(), baseRef = "HEAD~1", headRef = "HEAD") {
|
|
80
|
+
const report = {
|
|
81
|
+
baseRef,
|
|
82
|
+
headRef,
|
|
83
|
+
newDependencies: [],
|
|
84
|
+
removedDependencies: [],
|
|
85
|
+
removedGitignoreEntries: [],
|
|
86
|
+
newGitignoreEntries: [],
|
|
87
|
+
plaintextHits: [],
|
|
88
|
+
allowlistChanged: false,
|
|
89
|
+
policyChanged: false,
|
|
90
|
+
kitTomlChanged: false,
|
|
91
|
+
changedFiles: [],
|
|
92
|
+
};
|
|
93
|
+
// 1. Dependencies
|
|
94
|
+
const beforePkg = await tryGitShow(baseRef, "package.json", cwd);
|
|
95
|
+
const afterPkg = await tryGitShow(headRef, "package.json", cwd);
|
|
96
|
+
if (beforePkg || afterPkg) {
|
|
97
|
+
try {
|
|
98
|
+
const before = beforePkg ? JSON.parse(beforePkg) : null;
|
|
99
|
+
const after = afterPkg ? JSON.parse(afterPkg) : null;
|
|
100
|
+
const { added, removed } = diffDeps(before, after);
|
|
101
|
+
report.newDependencies = added;
|
|
102
|
+
report.removedDependencies = removed;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// malformed package.json — skip
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// 2. .gitignore
|
|
109
|
+
const beforeGi = await tryGitShow(baseRef, ".gitignore", cwd);
|
|
110
|
+
const afterGi = await tryGitShow(headRef, ".gitignore", cwd);
|
|
111
|
+
const giDiff = diffLines(beforeGi, afterGi);
|
|
112
|
+
report.newGitignoreEntries = giDiff.added;
|
|
113
|
+
report.removedGitignoreEntries = giDiff.removed;
|
|
114
|
+
// 3. Plaintext secrets across all changed files
|
|
115
|
+
const changed = await listChangedFiles(baseRef, headRef, cwd);
|
|
116
|
+
report.changedFiles = changed;
|
|
117
|
+
for (const path of changed) {
|
|
118
|
+
const content = await tryGitShow(headRef, path, cwd);
|
|
119
|
+
if (!content)
|
|
120
|
+
continue;
|
|
121
|
+
const findings = findSecrets(content);
|
|
122
|
+
if (findings.length > 0) {
|
|
123
|
+
report.plaintextHits.push({ file: path, findings });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// 4 + 5. Allowlist / policy / kit.toml shape changes
|
|
127
|
+
const allowlistBefore = await tryGitShow(baseRef, ".kit-allowlist.json", cwd);
|
|
128
|
+
const allowlistAfter = await tryGitShow(headRef, ".kit-allowlist.json", cwd);
|
|
129
|
+
report.allowlistChanged = (allowlistBefore ?? "") !== (allowlistAfter ?? "");
|
|
130
|
+
const policyBefore = await tryGitShow(baseRef, ".kit-policy.json", cwd);
|
|
131
|
+
const policyAfter = await tryGitShow(headRef, ".kit-policy.json", cwd);
|
|
132
|
+
report.policyChanged = (policyBefore ?? "") !== (policyAfter ?? "");
|
|
133
|
+
const tomlBefore = await tryGitShow(baseRef, ".kit.toml", cwd);
|
|
134
|
+
const tomlAfter = await tryGitShow(headRef, ".kit.toml", cwd);
|
|
135
|
+
report.kitTomlChanged = (tomlBefore ?? "") !== (tomlAfter ?? "");
|
|
136
|
+
return report;
|
|
137
|
+
}
|
|
138
|
+
export function reportSeverity(report) {
|
|
139
|
+
if (report.plaintextHits.length > 0)
|
|
140
|
+
return "fail";
|
|
141
|
+
if (report.removedGitignoreEntries.some((l) => /\.env|\.pem|\.key|id_rsa/.test(l))) {
|
|
142
|
+
return "fail";
|
|
143
|
+
}
|
|
144
|
+
if (report.newDependencies.length > 0 ||
|
|
145
|
+
report.allowlistChanged ||
|
|
146
|
+
report.policyChanged) {
|
|
147
|
+
return "warn";
|
|
148
|
+
}
|
|
149
|
+
return "ok";
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=post-pull-audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post-pull-audit.js","sourceRoot":"","sources":["../src/post-pull-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,WAAW,EAAsB,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAsBvC,KAAK,UAAU,UAAU,CACvB,GAAW,EACX,IAAY,EACZ,GAAW;IAEX,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,EAAE;YAC/D,GAAG;YACH,OAAO,EAAE,KAAK;YACd,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;SAC3B,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,OAAe,EACf,OAAe,EACf,GAAW;IAEX,IAAI,CAAC;QACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAC3B,KAAK,EACL,CAAC,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EACnE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CACzB,CAAC;QACF,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CACf,MAA0B,EAC1B,KAAyB;IAEzB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;QACxB,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,IAAI,EAAE,CAAC;QAC1C,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,IAAI,EAAE,CAAC;KAC9C,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;QACvB,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,IAAI,EAAE,CAAC;QACzC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,eAAe,IAAI,EAAE,CAAC;KAC7C,CAAC,CAAC;IACH,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3D,OAAO,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAAqB,EAAE,KAAoB;IAI5D,MAAM,OAAO,GAAG,CAAC,CAAgB,EAAe,EAAE;QAChD,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,GAAG,EAAE,CAAC;QACzB,OAAO,IAAI,GAAG,CACZ,CAAC;aACE,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,OAAO,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzB,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAC/B,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IACzB,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC5C,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAc,OAAO,CAAC,GAAG,EAAE,EAC3B,UAAkB,QAAQ,EAC1B,UAAkB,MAAM;IAExB,MAAM,MAAM,GAAoB;QAC9B,OAAO;QACP,OAAO;QACP,eAAe,EAAE,EAAE;QACnB,mBAAmB,EAAE,EAAE;QACvB,uBAAuB,EAAE,EAAE;QAC3B,mBAAmB,EAAE,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,gBAAgB,EAAE,KAAK;QACvB,aAAa,EAAE,KAAK;QACpB,cAAc,EAAE,KAAK;QACrB,YAAY,EAAE,EAAE;KACjB,CAAC;IAEF,kBAAkB;IAClB,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,CAAC;IAChE,IAAI,SAAS,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;YACzE,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAiB,CAAC,CAAC,CAAC,IAAI,CAAC;YACtE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACnD,MAAM,CAAC,eAAe,GAAG,KAAK,CAAC;YAC/B,MAAM,CAAC,mBAAmB,GAAG,OAAO,CAAC;QACvC,CAAC;QAAC,MAAM,CAAC;YACP,gCAAgC;QAClC,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,CAAC,mBAAmB,GAAG,MAAM,CAAC,KAAK,CAAC;IAC1C,MAAM,CAAC,uBAAuB,GAAG,MAAM,CAAC,OAAO,CAAC;IAEhD,gDAAgD;IAChD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,CAAC,YAAY,GAAG,OAAO,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,MAAM,eAAe,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAC9E,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAC7E,MAAM,CAAC,gBAAgB,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACxE,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACvE,MAAM,CAAC,aAAa,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IACpE,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IAC9D,MAAM,CAAC,cAAc,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAEjE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAuB;IACpD,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACnD,IAAI,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACnF,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IACE,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;QACjC,MAAM,CAAC,gBAAgB;QACvB,MAAM,CAAC,aAAa,EACpB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ProvisionResult } from "./adapters/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Provision a service using the appropriate adapter
|
|
4
|
+
*/
|
|
5
|
+
export declare function provisionService(serviceName: string, projectPath: string, projectName?: string): Promise<ProvisionResult>;
|
|
6
|
+
/**
|
|
7
|
+
* List available services
|
|
8
|
+
*/
|
|
9
|
+
export declare function listAvailableServices(): string[];
|
|
10
|
+
/**
|
|
11
|
+
* Get adapter info
|
|
12
|
+
*/
|
|
13
|
+
export declare function getServiceInfo(serviceName: string): {
|
|
14
|
+
name: string;
|
|
15
|
+
description: string;
|
|
16
|
+
tools: string[];
|
|
17
|
+
} | null;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { writeFile, readFile } from "node:fs/promises";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { adapters } from "./adapters/index.js";
|
|
4
|
+
import { loadPluginAdapters } from "./plugin-loader.js";
|
|
5
|
+
/**
|
|
6
|
+
* Load existing environment variables
|
|
7
|
+
*/
|
|
8
|
+
async function loadExistingEnv(projectPath) {
|
|
9
|
+
try {
|
|
10
|
+
const envPath = resolve(projectPath, ".env.local");
|
|
11
|
+
const content = await readFile(envPath, "utf-8");
|
|
12
|
+
const env = {};
|
|
13
|
+
for (const line of content.split("\n")) {
|
|
14
|
+
const trimmed = line.trim();
|
|
15
|
+
if (!trimmed || trimmed.startsWith("#"))
|
|
16
|
+
continue;
|
|
17
|
+
const [key, ...valueParts] = trimmed.split("=");
|
|
18
|
+
if (key && valueParts.length > 0) {
|
|
19
|
+
env[key.trim()] = valueParts.join("=").trim();
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return env;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return {};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Update .env.local with new secrets
|
|
30
|
+
*/
|
|
31
|
+
async function updateEnvFile(projectPath, secrets) {
|
|
32
|
+
const envPath = resolve(projectPath, ".env.local");
|
|
33
|
+
const existing = await loadExistingEnv(projectPath);
|
|
34
|
+
// Merge with existing
|
|
35
|
+
const merged = { ...existing, ...secrets };
|
|
36
|
+
// Write back
|
|
37
|
+
const lines = [];
|
|
38
|
+
for (const [key, value] of Object.entries(merged)) {
|
|
39
|
+
lines.push(`${key}=${value}`);
|
|
40
|
+
}
|
|
41
|
+
await writeFile(envPath, lines.join("\n") + "\n", "utf-8");
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Update skills-lock.json with provisioning info
|
|
45
|
+
*/
|
|
46
|
+
async function updateSkillsLock(projectPath, serviceName, config) {
|
|
47
|
+
const lockPath = resolve(projectPath, "skills-lock.json");
|
|
48
|
+
let lockData = { provisioned: {} };
|
|
49
|
+
try {
|
|
50
|
+
const content = await readFile(lockPath, "utf-8");
|
|
51
|
+
lockData = JSON.parse(content);
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// File doesn't exist or parse error
|
|
55
|
+
}
|
|
56
|
+
if (!lockData.provisioned) {
|
|
57
|
+
lockData.provisioned = {};
|
|
58
|
+
}
|
|
59
|
+
lockData.provisioned[serviceName] = {
|
|
60
|
+
...config,
|
|
61
|
+
provisionedAt: new Date().toISOString(),
|
|
62
|
+
};
|
|
63
|
+
await writeFile(lockPath, JSON.stringify(lockData, null, 2) + "\n", "utf-8");
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Provision a service using the appropriate adapter
|
|
67
|
+
*/
|
|
68
|
+
export async function provisionService(serviceName, projectPath, projectName) {
|
|
69
|
+
// Merge built-in adapters with any plugin adapters from kitPlugins in package.json
|
|
70
|
+
const pluginAdapters = await loadPluginAdapters(projectPath);
|
|
71
|
+
const allAdapters = { ...adapters, ...pluginAdapters };
|
|
72
|
+
const adapter = allAdapters[serviceName];
|
|
73
|
+
if (!adapter) {
|
|
74
|
+
const available = Object.keys(allAdapters).join(", ");
|
|
75
|
+
return {
|
|
76
|
+
success: false,
|
|
77
|
+
error: `Unknown service: ${serviceName}`,
|
|
78
|
+
message: `Available services: ${available}`,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
// Check required tools
|
|
82
|
+
const requiredTools = adapter.getRequiredTools();
|
|
83
|
+
for (const tool of requiredTools) {
|
|
84
|
+
try {
|
|
85
|
+
const { execFile } = await import("node:child_process");
|
|
86
|
+
const { promisify } = await import("node:util");
|
|
87
|
+
const exec = promisify(execFile);
|
|
88
|
+
await exec(tool, ["--version"], { timeout: 5_000 });
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return {
|
|
92
|
+
success: false,
|
|
93
|
+
error: `Required tool not installed: ${tool}`,
|
|
94
|
+
message: `Install ${tool} before provisioning ${serviceName}`,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Load context
|
|
99
|
+
const existingEnv = await loadExistingEnv(projectPath);
|
|
100
|
+
const context = {
|
|
101
|
+
projectPath,
|
|
102
|
+
projectName,
|
|
103
|
+
existingEnv,
|
|
104
|
+
};
|
|
105
|
+
// Check if already provisioned
|
|
106
|
+
const alreadyProvisioned = await adapter.check(context);
|
|
107
|
+
if (alreadyProvisioned) {
|
|
108
|
+
return {
|
|
109
|
+
success: true,
|
|
110
|
+
message: `${serviceName} is already provisioned`,
|
|
111
|
+
config: { alreadyProvisioned: true },
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// Provision the service
|
|
115
|
+
const result = await adapter.provision(context);
|
|
116
|
+
if (result.success) {
|
|
117
|
+
// Update .env.local with secrets
|
|
118
|
+
if (result.secrets && Object.keys(result.secrets).length > 0) {
|
|
119
|
+
await updateEnvFile(projectPath, result.secrets);
|
|
120
|
+
}
|
|
121
|
+
// Update skills-lock.json with config
|
|
122
|
+
if (result.config) {
|
|
123
|
+
await updateSkillsLock(projectPath, serviceName, result.config);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* List available services
|
|
130
|
+
*/
|
|
131
|
+
export function listAvailableServices() {
|
|
132
|
+
return Object.keys(adapters);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get adapter info
|
|
136
|
+
*/
|
|
137
|
+
export function getServiceInfo(serviceName) {
|
|
138
|
+
const adapter = adapters[serviceName];
|
|
139
|
+
if (!adapter)
|
|
140
|
+
return null;
|
|
141
|
+
return {
|
|
142
|
+
name: adapter.name,
|
|
143
|
+
description: adapter.description,
|
|
144
|
+
tools: adapter.getRequiredTools(),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=provision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provision.js","sourceRoot":"","sources":["../src/provision.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
export interface QueryPlan {
|
|
2
|
+
query: string;
|
|
3
|
+
estimatedCost: number;
|
|
4
|
+
indexesUsed: string[];
|
|
5
|
+
batchSize: number;
|
|
6
|
+
useConnection: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface QueryResult {
|
|
9
|
+
rows: Record<string, unknown>[];
|
|
10
|
+
executionTime: number;
|
|
11
|
+
indexesUsed: string[];
|
|
12
|
+
}
|
|
13
|
+
export interface IndexDefinition {
|
|
14
|
+
name: string;
|
|
15
|
+
columns: string[];
|
|
16
|
+
type: "btree" | "hash";
|
|
17
|
+
unique: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface BatchOperation {
|
|
20
|
+
id: string;
|
|
21
|
+
operations: Array<{
|
|
22
|
+
type: "insert" | "update" | "delete";
|
|
23
|
+
data: unknown;
|
|
24
|
+
}>;
|
|
25
|
+
status: "pending" | "executing" | "completed" | "failed";
|
|
26
|
+
result?: unknown;
|
|
27
|
+
}
|
|
28
|
+
export declare class QueryOptimizer {
|
|
29
|
+
private queryCache;
|
|
30
|
+
private indexes;
|
|
31
|
+
private executionStats;
|
|
32
|
+
private batchQueue;
|
|
33
|
+
/**
|
|
34
|
+
* Create an index for faster queries.
|
|
35
|
+
*/
|
|
36
|
+
createIndex(indexDef: IndexDefinition): void;
|
|
37
|
+
/**
|
|
38
|
+
* Get index definition by name.
|
|
39
|
+
*/
|
|
40
|
+
getIndex(indexName: string): IndexDefinition | null;
|
|
41
|
+
/**
|
|
42
|
+
* Get all indexes.
|
|
43
|
+
*/
|
|
44
|
+
getAllIndexes(): IndexDefinition[];
|
|
45
|
+
/**
|
|
46
|
+
* Drop an index.
|
|
47
|
+
*/
|
|
48
|
+
dropIndex(indexName: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Generate optimized query plan.
|
|
51
|
+
*/
|
|
52
|
+
planQuery(query: string, columns?: string[]): QueryPlan;
|
|
53
|
+
private findApplicableIndexes;
|
|
54
|
+
private calculateQueryCost;
|
|
55
|
+
private recommendBatchSize;
|
|
56
|
+
/**
|
|
57
|
+
* Get cached query plan.
|
|
58
|
+
*/
|
|
59
|
+
getCachedPlan(query: string): QueryPlan | null;
|
|
60
|
+
/**
|
|
61
|
+
* Clear query plan cache.
|
|
62
|
+
*/
|
|
63
|
+
clearCache(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Execute query with optimization.
|
|
66
|
+
*/
|
|
67
|
+
executeQuery(query: string, columns?: string[]): QueryResult;
|
|
68
|
+
/**
|
|
69
|
+
* Get query execution statistics.
|
|
70
|
+
*/
|
|
71
|
+
getExecutionStats(limit?: number): Array<{
|
|
72
|
+
query: string;
|
|
73
|
+
executionTime: number;
|
|
74
|
+
timestamp: string;
|
|
75
|
+
}>;
|
|
76
|
+
/**
|
|
77
|
+
* Get average query execution time.
|
|
78
|
+
*/
|
|
79
|
+
getAverageExecutionTime(query?: string): number;
|
|
80
|
+
/**
|
|
81
|
+
* Queue batch operation.
|
|
82
|
+
*/
|
|
83
|
+
queueBatchOperation(id: string, operations: Array<{
|
|
84
|
+
type: "insert" | "update" | "delete";
|
|
85
|
+
data: unknown;
|
|
86
|
+
}>): BatchOperation;
|
|
87
|
+
/**
|
|
88
|
+
* Execute queued batch operation.
|
|
89
|
+
*/
|
|
90
|
+
executeBatch(id: string): BatchOperation | null;
|
|
91
|
+
/**
|
|
92
|
+
* Get batch operation by ID.
|
|
93
|
+
*/
|
|
94
|
+
getBatchOperation(id: string): BatchOperation | null;
|
|
95
|
+
/**
|
|
96
|
+
* Get all pending batches.
|
|
97
|
+
*/
|
|
98
|
+
getPendingBatches(): BatchOperation[];
|
|
99
|
+
getIndexCache(): Map<string, IndexDefinition>;
|
|
100
|
+
getQueryCacheSize(): number;
|
|
101
|
+
getBatchQueueSize(): number;
|
|
102
|
+
}
|