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/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 kit Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,617 @@
|
|
|
1
|
+
# kit
|
|
2
|
+
|
|
3
|
+
> One command from `git clone` to fully working dev environment.
|
|
4
|
+
|
|
5
|
+
For AI agents and humans. Manages tools, auth, secrets, and project setup. Zero LLM calls, local-first, multi-vault.
|
|
6
|
+
|
|
7
|
+
🌐 [sandstre.am/kit](https://sandstre.am/kit)
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npx sandstream-kit setup
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Problem
|
|
14
|
+
|
|
15
|
+
Every time you (or an agent) starts on a new project:
|
|
16
|
+
- Missing CLI tools (supabase, vercel, eas, gcloud...)
|
|
17
|
+
- Not logged in to services
|
|
18
|
+
- Missing API keys and secrets
|
|
19
|
+
- Wrong versions
|
|
20
|
+
- No idea what's needed
|
|
21
|
+
|
|
22
|
+
## Why kit exists
|
|
23
|
+
|
|
24
|
+
The same wall kept showing up — for a human at a new laptop and for an AI agent in a
|
|
25
|
+
fresh checkout: API keys scattered across `.env` files, shell history and password
|
|
26
|
+
managers (some live, some expired, none in one place); the same setup prompts burning
|
|
27
|
+
tokens to rediscover what the last session already knew; and an agent one `npm install`
|
|
28
|
+
away from pulling a package nobody vetted.
|
|
29
|
+
|
|
30
|
+
kit makes "get this project running, safely" declarative and repeatable: one config
|
|
31
|
+
materializes tools, logins and secrets the same way every time, keeps credentials in a
|
|
32
|
+
vault instead of on the loose, and puts a pre-install **triage** step in front of new
|
|
33
|
+
dependencies so an unknown package gets looked at before it lands. Zero LLM calls,
|
|
34
|
+
local-first, no telemetry — the intelligence stays where you put it.
|
|
35
|
+
|
|
36
|
+
## Solution
|
|
37
|
+
|
|
38
|
+
`.kit.toml` per project:
|
|
39
|
+
|
|
40
|
+
```toml
|
|
41
|
+
[tools]
|
|
42
|
+
node = "22"
|
|
43
|
+
pnpm = "latest"
|
|
44
|
+
supabase = "2.78"
|
|
45
|
+
|
|
46
|
+
[services.supabase]
|
|
47
|
+
login = "supabase login"
|
|
48
|
+
check = "supabase projects list"
|
|
49
|
+
link = "supabase link --project-ref {project_ref}"
|
|
50
|
+
project_ref = "your-project-ref"
|
|
51
|
+
|
|
52
|
+
[services.vercel]
|
|
53
|
+
login = "vercel login"
|
|
54
|
+
check = "vercel whoami"
|
|
55
|
+
|
|
56
|
+
[services.stripe]
|
|
57
|
+
login = "stripe login"
|
|
58
|
+
check = "stripe config --list"
|
|
59
|
+
|
|
60
|
+
[secrets]
|
|
61
|
+
store = "1password" # or env, dotenvx, vault, aws-sm, gcp-sm, azure-kv, infisical, doppler, bitwarden, eas
|
|
62
|
+
template = ".env.template"
|
|
63
|
+
|
|
64
|
+
[secrets.keys]
|
|
65
|
+
SUPABASE_URL = { source = "config", value = "https://{supabase.project_ref}.supabase.co" }
|
|
66
|
+
STRIPE_SECRET_KEY = { source = "1password", ref = "op://Development/Stripe/secret-key" }
|
|
67
|
+
REVENUECAT_KEY = { source = "eas", name = "REVENUECAT_APPLE_API_KEY" }
|
|
68
|
+
|
|
69
|
+
[setup]
|
|
70
|
+
install = "pnpm install"
|
|
71
|
+
migrate = "supabase db push"
|
|
72
|
+
seed = "pnpm seed"
|
|
73
|
+
verify = "pnpm dev & sleep 5 && curl localhost:3000"
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Commands
|
|
77
|
+
|
|
78
|
+
Complete reference: [`docs/COMMANDS.md`](./docs/COMMANDS.md). The shortlist:
|
|
79
|
+
|
|
80
|
+
- `kit init` — Auto-detect project stack → generate `.kit.toml`
|
|
81
|
+
- `kit setup` — Full pipeline: install → hooks → login → secrets → check
|
|
82
|
+
- `kit check` — Status of tools, services, secrets, hooks, security, tests
|
|
83
|
+
- `kit fix` — Auto-remediate gaps (tools, gitignore, hooks, .env.template)
|
|
84
|
+
- `kit secrets {migrate,vault-migrate,rotate,pull,set-value,validate}` — Secret lifecycle
|
|
85
|
+
- `kit auth {elevate,setup-totp,status,revoke}` — Elevation gate + TOTP
|
|
86
|
+
- `kit mcp {list,auth,set-token,clear}` — MCP-server orchestrator
|
|
87
|
+
- `kit env {list,switch,current,diff}` — Environment routing + drift detection
|
|
88
|
+
- `kit triage {npm,pip,docker,repo,skill}` — Pre-install security check
|
|
89
|
+
- `kit security {scan-build,scan-staged,verify-pull,costs,policy}` — Security ops
|
|
90
|
+
- `kit hooks {install,add,sync}` — Git hooks + bypass detector
|
|
91
|
+
- `kit governance` / `kit audit` — Policy + audit-log inspection
|
|
92
|
+
- `kit --read-only <subcommand>` — Session-wide refusal of all writes
|
|
93
|
+
|
|
94
|
+
### What you'll see
|
|
95
|
+
|
|
96
|
+
`kit init` — detects the stack, previews `.kit.toml`, then runs setup:
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
kit init
|
|
100
|
+
──────────────────────────────────────────────────
|
|
101
|
+
✓ Detected: TypeScript / Next.js (confidence: 92%)
|
|
102
|
+
|
|
103
|
+
Preview — .kit.toml
|
|
104
|
+
+ [tools]
|
|
105
|
+
+ node = "22"
|
|
106
|
+
...
|
|
107
|
+
✓ Generated .kit.toml
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
`kit setup` — six-stage pipeline, each stage gated on the last:
|
|
111
|
+
|
|
112
|
+
```text
|
|
113
|
+
kit setup
|
|
114
|
+
──────────────────────────────────────────────────
|
|
115
|
+
[1/6] Install
|
|
116
|
+
✓ node installed v22.22.2
|
|
117
|
+
[2/6] Git Hooks ✓ pre-commit installed
|
|
118
|
+
[3/6] Login ✓ supabase authenticated
|
|
119
|
+
[4/6] Secrets ✓ Wrote .env.local (from keys)
|
|
120
|
+
[5/6] Agent config ✓ Claude Code → CLAUDE.md (created)
|
|
121
|
+
[6/6] Verify
|
|
122
|
+
Setup complete — you're ready to go! ✓
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Step 5 teaches the agent in the repo (Claude Code, Codex, Cursor, Cline) to
|
|
126
|
+
*use* kit — it writes a small managed "run kit check / triage before install /
|
|
127
|
+
vault your secrets" block into the agent's rules file (`CLAUDE.md`, `AGENTS.md`,
|
|
128
|
+
`.cursorrules`, `.clinerules`). Run it standalone any time with `kit agent-config`.
|
|
129
|
+
The block is regenerated in place on re-run; edit outside its markers freely.
|
|
130
|
+
|
|
131
|
+
`kit check` — grouped status tables with a pass/fail summary:
|
|
132
|
+
|
|
133
|
+
```text
|
|
134
|
+
Tools
|
|
135
|
+
✓ node 22.22.2 (need 22)
|
|
136
|
+
✗ supabase not installed (need 2.78)
|
|
137
|
+
Services
|
|
138
|
+
✓ vercel authenticated
|
|
139
|
+
Security
|
|
140
|
+
✓ .env gitignored pass all .env patterns in .gitignore
|
|
141
|
+
✓ pinned versions pass all dependencies pinned
|
|
142
|
+
|
|
143
|
+
7/8 checks passed (1 issues)
|
|
144
|
+
Run kit install to fix tools, kit login to fix auth
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
`kit fix` — six remediation steps, then a fixed/manual summary:
|
|
148
|
+
|
|
149
|
+
```text
|
|
150
|
+
kit fix
|
|
151
|
+
──────────────────────────────────────────────────
|
|
152
|
+
[1/6] Tools ✓ supabase installed v2.78.0
|
|
153
|
+
[2/6] Lock Files ✓ Generated cli-lock.json
|
|
154
|
+
[5/6] .gitignore ✓ Added 2 pattern(s) to .gitignore
|
|
155
|
+
[6/6] Git Hooks ✓ Installed 1 hook(s): pre-commit
|
|
156
|
+
|
|
157
|
+
Summary
|
|
158
|
+
✓ Fixed 4 issue(s) automatically
|
|
159
|
+
! 1 issue(s) require manual intervention:
|
|
160
|
+
• Login to stripe: run 'kit login' or 'stripe login'
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
`kit secrets` — resolves each key from the vault and writes `.env.local`:
|
|
164
|
+
|
|
165
|
+
```text
|
|
166
|
+
Generating secrets... (env=dev)
|
|
167
|
+
|
|
168
|
+
✓ SUPABASE_URL resolved Derived from config
|
|
169
|
+
✓ STRIPE_SECRET_KEY resolved op://Development/Stripe/secret-key
|
|
170
|
+
✗ REVENUECAT_KEY missing not found in eas
|
|
171
|
+
|
|
172
|
+
✓ Wrote .env.local (from keys)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
`kit triage <type> <target>` — security verdict before you install:
|
|
176
|
+
|
|
177
|
+
```text
|
|
178
|
+
Running triage on npm: left-pad
|
|
179
|
+
|
|
180
|
+
Health score: 7/10
|
|
181
|
+
Critical issues: 0
|
|
182
|
+
Warnings: 1
|
|
183
|
+
TRIAGE PASSED
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Trust model documented in [`docs/THREAT_MODEL.md`](./docs/THREAT_MODEL.md);
|
|
187
|
+
data flow per command in [`docs/DATA_FLOW.md`](./docs/DATA_FLOW.md);
|
|
188
|
+
release-verification in [`docs/VERIFY.md`](./docs/VERIFY.md).
|
|
189
|
+
- `kit doctor` — Deep diagnostics: Node.js version, mise, .env.local, tools in PATH, git hooks
|
|
190
|
+
- `kit env` — Inspect environment variables from .env.local (`--show-values`, `--missing`, `--json`)
|
|
191
|
+
- `kit mcp` — Run the MCP server over stdio for AI assistants (auto-detected: no sub-command + non-TTY). Interactively, `kit mcp list|auth|set-token|clear` manages declared servers
|
|
192
|
+
- `kit analyze` — Detect stack + emit draft `CLAUDE.md` / `RULES.md` from git history + framework markers
|
|
193
|
+
|
|
194
|
+
### Secrets management
|
|
195
|
+
|
|
196
|
+
End-to-end secret lifecycle — from `.env*` plaintext discovery, through vault
|
|
197
|
+
migration, to deploy-platform propagation, to destructive history cleanup.
|
|
198
|
+
|
|
199
|
+
- `kit secrets` — Materialize `.env.local` from the configured vault store
|
|
200
|
+
- `kit secrets migrate` — Move plaintext credentials from `.env*` into the vault
|
|
201
|
+
- `kit secrets rotate <KEY>` — Mint a new value (`--random` opaque token / `--value <new>` explicit)
|
|
202
|
+
- `kit secrets rotate <KEY> --from-cli` — Provider-native playbooks (Stripe / AWS-IAM / GCP-IAM / GitHub PAT / OpenAI)
|
|
203
|
+
- `kit secrets rotate <KEY> --via supabase-mgmt-api --project <ref>` — Full automation via Supabase Mgmt API. Auto-detects scoped-key-mint vs jwt-secret-roll.
|
|
204
|
+
- `kit secrets propagate <KEY> --to vercel,github,...` — Push value to deploy targets (stdin-safe via `--stdin`)
|
|
205
|
+
- `kit secrets revoke-old --via supabase-mgmt-api --key-id <id>` — Revoke a previously-minted scoped key
|
|
206
|
+
- `kit secrets onecli register <KEY> --host <pattern>` — Register with the OneCLI gateway so the agent process never sees the real value
|
|
207
|
+
- `kit secrets purge-history <pattern> --force-history` — Destructive: rewrite git history to scrub a leaked value (wraps `git filter-repo` / `bfg`). Requires elevation + explicit flag.
|
|
208
|
+
|
|
209
|
+
### Security scanners
|
|
210
|
+
|
|
211
|
+
- `kit security scan-staged` — Pre-commit: scan staged blobs for known credential patterns
|
|
212
|
+
- `kit security scan-build` — Walk `.next/`, `dist/`, `build/` for credentials inlined into artifacts (`NEXT_PUBLIC_` typos)
|
|
213
|
+
- `kit security scan-transcripts` — Walk `.claude/`, `~/.claude/projects/`, `.opencode/` for replayed-secret leaks
|
|
214
|
+
- `kit security check-gitignore [--fix]` — Verify `.env*`, `*.pem`, `id_rsa`, `.kit/elevation.json` are ignored
|
|
215
|
+
- `kit security verify-pull [--base <ref>]` — After `git pull`: audit new deps, gitignore drops, introduced secrets, policy changes
|
|
216
|
+
- `kit security policy [init|add <pkg>|check]` — Dependency allowlist enforcement + per-key spend caps/TTL/scope
|
|
217
|
+
- `kit security costs` — Snapshot per-key spend vs policy cap (Stripe live; OpenAI/Anthropic/Resend/Vercel stubbed)
|
|
218
|
+
- `kit security clear-cache` — Reset the cached supply-chain scanner binary (use after an intentional rebuild)
|
|
219
|
+
|
|
220
|
+
### Built-in git hooks
|
|
221
|
+
|
|
222
|
+
`kit hooks add <name>` installs a managed hook that calls back into kit. No `.kit.toml` config required.
|
|
223
|
+
|
|
224
|
+
- `secret-scan` (pre-commit) — Block commits that introduce known credential patterns
|
|
225
|
+
- `post-pull-audit` (post-merge) — Run `verify-pull` after every `git pull` / merge
|
|
226
|
+
|
|
227
|
+
### Environments + elevation
|
|
228
|
+
|
|
229
|
+
Production credentials are gated behind explicit env-switching and short-lived elevation.
|
|
230
|
+
|
|
231
|
+
- `kit env switch <dev|staging|prod>` — Toggle the active environment marker
|
|
232
|
+
- `kit env current` — Show active env (color-coded), `kit env list` for available
|
|
233
|
+
- `kit auth elevate [--scope <op>] [--ttl-minutes N]` — Mint a TTL'd elevation marker (TOTP or yes-prompt). Required before any destructive secret op.
|
|
234
|
+
- `kit auth setup-totp` — One-time TOTP enrollment (writes `~/.kit/totp-secret` 0600)
|
|
235
|
+
- `kit auth status` — Show active elevation
|
|
236
|
+
- `kit auth revoke` — Drop the elevation marker early
|
|
237
|
+
- `kit audit secrets [--since-days N] [--key <name>]` — Forensics: who touched which key, when
|
|
238
|
+
|
|
239
|
+
### Quality gates (baseline-aware)
|
|
240
|
+
|
|
241
|
+
- `kit check --enforce-tests` — Fail when net-new source files lack a sibling `.test.ts`
|
|
242
|
+
- `kit design` — Static a11y scan (img-alt, button-empty, anchor-no-href, input-no-label) + design-token consistency (raw `#hex` / `px` bypass). `--enforce` to gate, `--json` for machine output
|
|
243
|
+
- `kit review` — Meta-runner: `check` + `design` in one command. Use as a single PR-gate entry point for AI agents
|
|
244
|
+
- `kit baseline freeze` — Snapshot current findings (untested files, a11y, tokens) into `.kit-baseline.json` so pre-existing warnings stay warnings and only net-new findings can fail
|
|
245
|
+
- `kit baseline show` — Print current baseline
|
|
246
|
+
|
|
247
|
+
### Supply chain
|
|
248
|
+
|
|
249
|
+
- **Bumblebee** — Built-in supply-chain scanner. Verifies every dependency against pinned SHA-256 checksums in `bumblebee.lock.json`. Re-verifies the cache before reuse so a tampered local file is caught (kind `integrity`). Runs in CI on every PR
|
|
250
|
+
- `kit triage npm|pip|docker|repo|skill <target>` — Pre-install security evaluation via triage skill
|
|
251
|
+
- `kit triage npm <pkg> --sandbox` — Offline behavioral inspection: `npm pack` → extract → scan for install scripts, eval/base64/network patterns, unexpected scripts, oversized files. No code executes
|
|
252
|
+
- Supply-chain findings auto-append to `.kit-audit.jsonl` (one JSON line per finding) for SIEM ingest
|
|
253
|
+
- Releases ship with SLSA provenance (`npm publish --provenance`), CycloneDX + SPDX SBOMs on every GitHub release, cosign-signed Docker images, and weekly OpenSSF Scorecard
|
|
254
|
+
|
|
255
|
+
## Lock Files
|
|
256
|
+
|
|
257
|
+
kit uses lock files in `.kit/` to track exact versions of skills and tools:
|
|
258
|
+
|
|
259
|
+
- `.kit/kit.json` — Identifies which kit this project uses (e.g., "sandstream/standard@1.2.0")
|
|
260
|
+
- `.kit/skills-lock.json` — Agent skills with versions and metadata
|
|
261
|
+
- `.kit/cli-lock.json` — CLI tools with versions and installation sources
|
|
262
|
+
|
|
263
|
+
This allows teams to codify and version their development methodology, similar to `package-lock.json` for dependencies.
|
|
264
|
+
|
|
265
|
+
```bash
|
|
266
|
+
kit init # Generate lock files and setup project
|
|
267
|
+
kit upgrade # Update lock files from .kit.toml
|
|
268
|
+
kit check # Verify lock files are in sync
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
## Service Provisioning
|
|
272
|
+
|
|
273
|
+
kit can automatically provision and configure services for your project — designed for agent-native workflows (no browser required):
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
kit add stripe/payments # Set up Stripe with API keys
|
|
277
|
+
kit add supabase/db # Initialize Supabase project
|
|
278
|
+
kit add vercel/hosting # Link repository to Vercel
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### How it works
|
|
282
|
+
|
|
283
|
+
1. Checks if the service CLI is installed and authenticated
|
|
284
|
+
2. Provisions resources via CLI/API (no browser needed)
|
|
285
|
+
3. Extracts credentials and configuration
|
|
286
|
+
4. Writes secrets to `.env.local`
|
|
287
|
+
5. Records provisioning metadata in `skills-lock.json`
|
|
288
|
+
|
|
289
|
+
### Available Services
|
|
290
|
+
|
|
291
|
+
- **stripe/payments** — Payment processing with Stripe
|
|
292
|
+
- Requires: `stripe` CLI ([install](https://stripe.com/docs/stripe-cli))
|
|
293
|
+
- Provisions: API keys, creates test mode configuration
|
|
294
|
+
- Secrets: `STRIPE_SECRET_KEY`, `STRIPE_PUBLISHABLE_KEY`
|
|
295
|
+
- Example:
|
|
296
|
+
```bash
|
|
297
|
+
brew install stripe/stripe-cli/stripe
|
|
298
|
+
stripe login
|
|
299
|
+
kit add stripe/payments
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
- **supabase/db** — Database and authentication with Supabase
|
|
303
|
+
- Requires: `supabase` CLI ([install](https://supabase.com/docs/guides/cli))
|
|
304
|
+
- Provisions: Local dev instance or links existing project
|
|
305
|
+
- Secrets: `SUPABASE_URL`, `SUPABASE_ANON_KEY`, `SUPABASE_SERVICE_ROLE_KEY`
|
|
306
|
+
- Example:
|
|
307
|
+
```bash
|
|
308
|
+
brew install supabase/tap/supabase
|
|
309
|
+
supabase login
|
|
310
|
+
kit add supabase/db
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
- **vercel/hosting** — Hosting and deployment with Vercel
|
|
314
|
+
- Requires: `vercel` CLI ([install](https://vercel.com/docs/cli))
|
|
315
|
+
- Provisions: Links repository, sets up deployment
|
|
316
|
+
- Secrets: `VERCEL_PROJECT_ID`, `VERCEL_ORG_ID`
|
|
317
|
+
- Example:
|
|
318
|
+
```bash
|
|
319
|
+
npm i -g vercel
|
|
320
|
+
vercel login
|
|
321
|
+
kit add vercel/hosting
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
- **expo/eas** — Mobile app builds with Expo EAS
|
|
325
|
+
- Requires: `eas` CLI ([install](https://docs.expo.dev/eas/))
|
|
326
|
+
- Provisions: EAS project, build configuration
|
|
327
|
+
- Secrets: `EXPO_TOKEN`, EAS credentials
|
|
328
|
+
- Example:
|
|
329
|
+
```bash
|
|
330
|
+
npm i -g eas-cli
|
|
331
|
+
eas login
|
|
332
|
+
kit add expo/eas
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
- **searxng/instance** — Privacy-respecting search engine
|
|
336
|
+
- Requires: `docker` and `docker-compose`
|
|
337
|
+
- Provisions: Local SearXNG instance
|
|
338
|
+
- Secrets: `SEARXNG_URL`, `SEARXNG_SECRET`
|
|
339
|
+
- Example:
|
|
340
|
+
```bash
|
|
341
|
+
kit add searxng/instance
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
The full adapter set (each provisions/reuses the relevant keys; run `kit add <id>`):
|
|
345
|
+
|
|
346
|
+
| Service | Purpose |
|
|
347
|
+
|---|---|
|
|
348
|
+
| `stripe/payments` | Stripe payment processing (products + price IDs) |
|
|
349
|
+
| `supabase/db` | Supabase database + authentication |
|
|
350
|
+
| `vercel/hosting` | Vercel hosting + deployment |
|
|
351
|
+
| `flyio/hosting` | Fly.io container deployment |
|
|
352
|
+
| `railway/hosting` | Railway (Heroku-style) deployment |
|
|
353
|
+
| `neon/db` | Neon serverless Postgres |
|
|
354
|
+
| `planetscale/db` | PlanetScale serverless MySQL |
|
|
355
|
+
| `upstash/redis` | Upstash serverless Redis |
|
|
356
|
+
| `cloudflare/r2` | Cloudflare R2 object storage (S3-compatible) |
|
|
357
|
+
| `clerk/auth` | Clerk authentication + user management |
|
|
358
|
+
| `resend/email` | Resend transactional email |
|
|
359
|
+
| `loops/email` | Loops marketing + transactional email |
|
|
360
|
+
| `sentry/monitoring` | Sentry error tracking + performance monitoring |
|
|
361
|
+
| `posthog/analytics` | PostHog product analytics + session recording |
|
|
362
|
+
| `tinybird/analytics` | Tinybird real-time analytics on ClickHouse |
|
|
363
|
+
| `liveblocks/realtime` | Liveblocks collaborative realtime (presence, cursors) |
|
|
364
|
+
| `trigger/background` | Trigger.dev background jobs |
|
|
365
|
+
| `inngest/background` | Inngest event-driven background jobs |
|
|
366
|
+
| `flagsmith/flags` | Flagsmith feature flags + remote config |
|
|
367
|
+
| `expo/eas` | Expo Application Services (mobile builds) |
|
|
368
|
+
| `searxng/instance` | Self-hosted SearXNG search engine |
|
|
369
|
+
|
|
370
|
+
Add your own with `kit create-plugin <name>` (see [docs/PLUGIN_DEVELOPMENT.md](./docs/PLUGIN_DEVELOPMENT.md)).
|
|
371
|
+
|
|
372
|
+
### Example Workflows
|
|
373
|
+
|
|
374
|
+
**New project setup:**
|
|
375
|
+
```bash
|
|
376
|
+
# Clone project
|
|
377
|
+
git clone https://github.com/user/my-app
|
|
378
|
+
cd my-app
|
|
379
|
+
|
|
380
|
+
# Check what's needed
|
|
381
|
+
kit check
|
|
382
|
+
|
|
383
|
+
# Provision all services at once
|
|
384
|
+
kit add stripe/payments
|
|
385
|
+
kit add supabase/db
|
|
386
|
+
kit add vercel/hosting
|
|
387
|
+
|
|
388
|
+
# Verify everything is configured
|
|
389
|
+
kit check
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
**Agent-driven provisioning:**
|
|
393
|
+
```bash
|
|
394
|
+
# Agent provisions services automatically
|
|
395
|
+
kit add stripe/payments
|
|
396
|
+
# → Checks if stripe CLI installed
|
|
397
|
+
# → Verifies authentication
|
|
398
|
+
# → Creates API keys
|
|
399
|
+
# → Writes to .env.local
|
|
400
|
+
# → Updates skills-lock.json
|
|
401
|
+
|
|
402
|
+
# Check what was provisioned
|
|
403
|
+
cat .env.local | grep STRIPE
|
|
404
|
+
cat skills-lock.json | jq '.provisioned["stripe/payments"]'
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
**Creating custom adapters:**
|
|
408
|
+
|
|
409
|
+
See [docs/CUSTOM_ADAPTERS.md](./docs/CUSTOM_ADAPTERS.md) for a complete guide on creating custom service adapters.
|
|
410
|
+
|
|
411
|
+
**Troubleshooting:**
|
|
412
|
+
|
|
413
|
+
Common issues and solutions:
|
|
414
|
+
- **"Required tool not installed"** — Install the service's CLI tool (see examples above)
|
|
415
|
+
- **"Not authenticated"** — Run the service's login command (e.g., `stripe login`)
|
|
416
|
+
- **"Provisioning failed"** — Check CLI is in your PATH: `which stripe`
|
|
417
|
+
- For more help, see [docs/CUSTOM_ADAPTERS.md](./docs/CUSTOM_ADAPTERS.md#troubleshooting)
|
|
418
|
+
|
|
419
|
+
## Agent Integration
|
|
420
|
+
|
|
421
|
+
Agents run `kit check` at start. If anything fails:
|
|
422
|
+
1. Auto-fix what's possible (`kit fix`)
|
|
423
|
+
2. Escalate to human what requires browser auth (`kit escalate`)
|
|
424
|
+
3. Continue working on what's available
|
|
425
|
+
|
|
426
|
+
## Governance & Access Control
|
|
427
|
+
|
|
428
|
+
kit includes governance features for managing agent access to production systems:
|
|
429
|
+
|
|
430
|
+
```toml
|
|
431
|
+
[governance]
|
|
432
|
+
enabled = true
|
|
433
|
+
environment = "dev" # dev, staging, prod
|
|
434
|
+
|
|
435
|
+
[governance.access]
|
|
436
|
+
dev = { read = true, write = true, delete = true }
|
|
437
|
+
staging = { read = true, write = true, delete = false }
|
|
438
|
+
prod = { read = true, write = false, delete = false }
|
|
439
|
+
|
|
440
|
+
[governance.agent]
|
|
441
|
+
id = "agent-123"
|
|
442
|
+
name = "Founding Engineer"
|
|
443
|
+
max_tokens_per_day = 1000000
|
|
444
|
+
max_operations_per_hour = 100
|
|
445
|
+
|
|
446
|
+
[governance.audit]
|
|
447
|
+
enabled = true
|
|
448
|
+
log_file = ".kit-audit.jsonl"
|
|
449
|
+
|
|
450
|
+
[governance.approval]
|
|
451
|
+
destructive_operations = ["delete", "drop", "truncate"]
|
|
452
|
+
production_writes = true
|
|
453
|
+
|
|
454
|
+
[governance.revocation]
|
|
455
|
+
enabled = true
|
|
456
|
+
revocation_endpoint = "https://audit.example.com/agents/{agent_id}/status"
|
|
457
|
+
```
|
|
458
|
+
|
|
459
|
+
### Features
|
|
460
|
+
|
|
461
|
+
- **Environment-based access control** — Different permissions per environment
|
|
462
|
+
- **Audit logging** — All operations logged with automatic secret redaction
|
|
463
|
+
- **Budget limits** — Token (daily) and operation (hourly) tracking
|
|
464
|
+
- **Approval gates** — Interactive prompts for destructive operations
|
|
465
|
+
- **Revocation** — Remote status checking via API
|
|
466
|
+
- **Secret expiration** — Monitoring with warnings for expiring secrets
|
|
467
|
+
|
|
468
|
+
### Environment Detection
|
|
469
|
+
|
|
470
|
+
kit automatically detects the current environment using:
|
|
471
|
+
1. **NODE_ENV** environment variable (highest priority)
|
|
472
|
+
2. **Git branch** name (fallback: main/master→prod, staging→staging, others→dev)
|
|
473
|
+
3. **Default** to dev if neither is available
|
|
474
|
+
|
|
475
|
+
Set NODE_ENV in your `.env.local`:
|
|
476
|
+
```bash
|
|
477
|
+
# Options: development, staging, production
|
|
478
|
+
NODE_ENV=development
|
|
479
|
+
```
|
|
480
|
+
|
|
481
|
+
This affects governance access control, security policies, and audit logging.
|
|
482
|
+
|
|
483
|
+
See [GOVERNANCE.md](./GOVERNANCE.md) for detailed documentation.
|
|
484
|
+
|
|
485
|
+
## AI Assistant Setup
|
|
486
|
+
|
|
487
|
+
kit exposes its capabilities as an MCP server, making it usable directly by Claude Code, Cursor, Windsurf, Cline, and any other MCP-compatible AI assistant. Once registered, assistants can call `kit_check`, `kit_fix`, `kit_add`, and other tools without leaving their context.
|
|
488
|
+
|
|
489
|
+
### Claude Code
|
|
490
|
+
|
|
491
|
+
A template config is included at `claude-mcp.json`. Copy it to activate:
|
|
492
|
+
|
|
493
|
+
```bash
|
|
494
|
+
cp claude-mcp.json .claude/mcp.json
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
Or add manually to `.claude/mcp.json` (or `~/.claude/mcp.json` for all projects):
|
|
498
|
+
|
|
499
|
+
```json
|
|
500
|
+
{
|
|
501
|
+
"mcpServers": {
|
|
502
|
+
"kit": {
|
|
503
|
+
"command": "npx",
|
|
504
|
+
"args": ["sandstream-kit", "mcp"]
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
Or if installed globally (`npm install -g sandstream-kit`):
|
|
511
|
+
|
|
512
|
+
```json
|
|
513
|
+
{
|
|
514
|
+
"mcpServers": {
|
|
515
|
+
"kit": {
|
|
516
|
+
"command": "kit",
|
|
517
|
+
"args": ["mcp"]
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
### Cursor
|
|
524
|
+
|
|
525
|
+
`.cursor/mcp.json` is already included in this repo. For other projects, add to `.cursor/mcp.json` in your project root:
|
|
526
|
+
|
|
527
|
+
```json
|
|
528
|
+
{
|
|
529
|
+
"mcpServers": {
|
|
530
|
+
"kit": {
|
|
531
|
+
"command": "npx",
|
|
532
|
+
"args": ["sandstream-kit", "mcp"]
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
### Windsurf / Cline
|
|
539
|
+
|
|
540
|
+
In Windsurf, open **Settings → MCP Servers** and add:
|
|
541
|
+
|
|
542
|
+
```json
|
|
543
|
+
{
|
|
544
|
+
"kit": {
|
|
545
|
+
"command": "npx",
|
|
546
|
+
"args": ["sandstream-kit", "mcp"],
|
|
547
|
+
"transport": "stdio"
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
For Cline, add the same config to your `cline_mcp_settings.json`.
|
|
553
|
+
|
|
554
|
+
### Available MCP Tools
|
|
555
|
+
|
|
556
|
+
| Tool | Description |
|
|
557
|
+
|------|-------------|
|
|
558
|
+
| `kit_check` | Run all checks, return structured status JSON |
|
|
559
|
+
| `kit_install` | Install missing tools via mise |
|
|
560
|
+
| `kit_login` | Attempt service logins (non-interactive) |
|
|
561
|
+
| `kit_secrets` | Generate `.env.local` from configured sources |
|
|
562
|
+
| `kit_fix` | Auto-fix issues (install tools, generate lock files) |
|
|
563
|
+
| `kit_add` | Provision a service integration (stripe, supabase, etc.) |
|
|
564
|
+
| `kit_env` | Inspect `.env.local` — list keys with set/missing status and redacted values |
|
|
565
|
+
|
|
566
|
+
### Example: kit_check response
|
|
567
|
+
|
|
568
|
+
```json
|
|
569
|
+
{
|
|
570
|
+
"ok": true,
|
|
571
|
+
"tools": [
|
|
572
|
+
{ "name": "node", "required": "latest", "installed": "22.22.2", "ok": true }
|
|
573
|
+
],
|
|
574
|
+
"secrets": [
|
|
575
|
+
{ "name": "APP_NAME", "source": "config", "available": true, "detail": "Derived from config" }
|
|
576
|
+
],
|
|
577
|
+
"security": [
|
|
578
|
+
{ "category": "secrets", "name": ".env gitignored", "status": "pass", "detail": "all .env patterns in .gitignore" },
|
|
579
|
+
{ "category": "supply-chain", "name": "pinned versions", "status": "pass", "detail": "all dependencies pinned" }
|
|
580
|
+
],
|
|
581
|
+
"locks": [
|
|
582
|
+
{ "category": "cli-lock", "exists": true, "inSync": true, "missing": [], "detail": "all tools locked" }
|
|
583
|
+
]
|
|
584
|
+
}
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
## OpenRouter API Key Setup
|
|
588
|
+
|
|
589
|
+
kit uses OpenRouter for AI model access via the OpenCode CLI. To set up:
|
|
590
|
+
|
|
591
|
+
1. Get your API key from [OpenRouter](https://openrouter.ai/keys)
|
|
592
|
+
2. Add it to your `.env.local` file:
|
|
593
|
+
```bash
|
|
594
|
+
OPENROUTER_API_KEY=<your-openrouter-key>
|
|
595
|
+
```
|
|
596
|
+
3. The key is automatically loaded by `opencode.json`
|
|
597
|
+
|
|
598
|
+
**Security Note:** Never commit your API key to git. It's configured as an environment variable in `opencode.json` and should only exist in `.env.local`.
|
|
599
|
+
|
|
600
|
+
## Community & Support
|
|
601
|
+
|
|
602
|
+
### Getting Help
|
|
603
|
+
|
|
604
|
+
- 📚 **Plugin Development** — [docs/PLUGIN_DEVELOPMENT.md](docs/PLUGIN_DEVELOPMENT.md), [docs/ADAPTER_GUIDE.md](docs/ADAPTER_GUIDE.md), [docs/MCP_TOOLS_GUIDE.md](docs/MCP_TOOLS_GUIDE.md)
|
|
605
|
+
- 💬 **Discussions** — [github.com/sandstream/kit/discussions](https://github.com/sandstream/kit/discussions)
|
|
606
|
+
- 🐛 **Issues** — [github.com/sandstream/kit/issues](https://github.com/sandstream/kit/issues)
|
|
607
|
+
- 🤝 **Contributing** — [CONTRIBUTING.md](CONTRIBUTING.md), [COMMUNITY.md](COMMUNITY.md)
|
|
608
|
+
|
|
609
|
+
### Code of Conduct
|
|
610
|
+
|
|
611
|
+
See [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md).
|
|
612
|
+
|
|
613
|
+
## Stack
|
|
614
|
+
|
|
615
|
+
- [mise-en-place](https://mise.jdx.dev) — tool version management
|
|
616
|
+
- [1Password CLI](https://developer.1password.com/docs/cli/) — secret management
|
|
617
|
+
- Node.js CLI (TypeScript)
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ServiceAdapter } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Factory for the common "API-key only" service adapter.
|
|
4
|
+
*
|
|
5
|
+
* Many services have no programmatic account/key creation — provisioning is
|
|
6
|
+
* just "do the required keys exist in the environment?". Those adapters were
|
|
7
|
+
* ~50 lines of identical check/provision boilerplate differing only in key
|
|
8
|
+
* names, an optional value-with-default, an optional key-prefix sanity check,
|
|
9
|
+
* and the dashboard steps. This collapses each to a small spec. Adapters with
|
|
10
|
+
* genuinely bespoke logic (CLI provisioning, key derivation) stay hand-written.
|
|
11
|
+
*/
|
|
12
|
+
interface RequiredKey {
|
|
13
|
+
env: string;
|
|
14
|
+
/** Optional sanity prefix — the key must start with this to count as present. */
|
|
15
|
+
prefix?: string;
|
|
16
|
+
}
|
|
17
|
+
interface OptionalKey {
|
|
18
|
+
env: string;
|
|
19
|
+
/** If set, this value is written when the key is absent. If omitted, the key
|
|
20
|
+
* is pass-through: included in secrets only when already present. */
|
|
21
|
+
default?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface ApiKeyAdapterSpec {
|
|
24
|
+
name: string;
|
|
25
|
+
description: string;
|
|
26
|
+
/** Keys that must all be present for the service to count as configured. */
|
|
27
|
+
required: (string | RequiredKey)[];
|
|
28
|
+
/** Extra keys carried into the generated secrets (defaults / pass-through). */
|
|
29
|
+
optional?: OptionalKey[];
|
|
30
|
+
/** "How to get the key(s)" lines shown when required keys are missing. Must
|
|
31
|
+
* mention the dashboard URL and key names — that's the actionable part. */
|
|
32
|
+
steps: string[];
|
|
33
|
+
}
|
|
34
|
+
export declare function apiKeyAdapter(spec: ApiKeyAdapterSpec): ServiceAdapter;
|
|
35
|
+
export {};
|