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
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { GovernanceConfig } from "./config.js";
|
|
2
|
+
export type OperationType = "read" | "write" | "delete";
|
|
3
|
+
export interface GovernanceCheckResult {
|
|
4
|
+
allowed: boolean;
|
|
5
|
+
reason?: string;
|
|
6
|
+
requiresApproval?: boolean;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Default governance configuration
|
|
10
|
+
*/
|
|
11
|
+
export declare const DEFAULT_GOVERNANCE: Required<GovernanceConfig>;
|
|
12
|
+
/**
|
|
13
|
+
* Merge user config with defaults (synchronous version)
|
|
14
|
+
*/
|
|
15
|
+
export declare function mergeGovernanceConfig(userConfig?: GovernanceConfig): Required<GovernanceConfig>;
|
|
16
|
+
/**
|
|
17
|
+
* Merge user config with defaults and detect environment (async version)
|
|
18
|
+
*/
|
|
19
|
+
export declare function mergeGovernanceConfigAsync(userConfig?: GovernanceConfig): Promise<Required<GovernanceConfig>>;
|
|
20
|
+
/**
|
|
21
|
+
* Check if an operation is allowed based on governance rules
|
|
22
|
+
*/
|
|
23
|
+
export declare function checkOperationAllowed(config: Required<GovernanceConfig>, operation: OperationType): GovernanceCheckResult;
|
|
24
|
+
/**
|
|
25
|
+
* Check if a command contains destructive operations
|
|
26
|
+
*/
|
|
27
|
+
export declare function isDestructiveOperation(config: Required<GovernanceConfig>, command: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Get current git branch
|
|
30
|
+
*/
|
|
31
|
+
export declare function getCurrentGitBranch(): Promise<string | null>;
|
|
32
|
+
/**
|
|
33
|
+
* Detect environment from git branch
|
|
34
|
+
*/
|
|
35
|
+
export declare function detectEnvironmentFromBranch(branch: string): "dev" | "staging" | "prod" | null;
|
|
36
|
+
/**
|
|
37
|
+
* Get current environment from config, environment variable, or git branch
|
|
38
|
+
* Priority: config.environment > NODE_ENV > git branch > default (dev)
|
|
39
|
+
*/
|
|
40
|
+
export declare function getCurrentEnvironment(config?: GovernanceConfig): Promise<"dev" | "staging" | "prod">;
|
|
41
|
+
/**
|
|
42
|
+
* Format governance status for display
|
|
43
|
+
*/
|
|
44
|
+
export declare function formatGovernanceStatus(config: Required<GovernanceConfig>): string;
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default environment access configurations
|
|
3
|
+
*/
|
|
4
|
+
const DEFAULT_ACCESS = {
|
|
5
|
+
dev: { read: true, write: true, delete: true },
|
|
6
|
+
staging: { read: true, write: true, delete: false },
|
|
7
|
+
prod: { read: true, write: false, delete: false },
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Default governance configuration
|
|
11
|
+
*/
|
|
12
|
+
export const DEFAULT_GOVERNANCE = {
|
|
13
|
+
enabled: false,
|
|
14
|
+
environment: "dev",
|
|
15
|
+
access: DEFAULT_ACCESS,
|
|
16
|
+
agent: {
|
|
17
|
+
id: undefined,
|
|
18
|
+
name: undefined,
|
|
19
|
+
max_tokens_per_day: 1000000,
|
|
20
|
+
max_operations_per_hour: 100,
|
|
21
|
+
},
|
|
22
|
+
audit: {
|
|
23
|
+
enabled: true,
|
|
24
|
+
log_file: ".kit-audit.jsonl",
|
|
25
|
+
log_level: "info",
|
|
26
|
+
include_secrets: false,
|
|
27
|
+
},
|
|
28
|
+
approval: {
|
|
29
|
+
destructive_operations: ["delete", "drop", "truncate", "destroy", "remove"],
|
|
30
|
+
production_writes: true,
|
|
31
|
+
secret_rotations: false,
|
|
32
|
+
approval_timeout: 3600,
|
|
33
|
+
},
|
|
34
|
+
secrets: {
|
|
35
|
+
check_expiration: true,
|
|
36
|
+
warn_days_before_expiry: 30,
|
|
37
|
+
rotate_on_expiry: false,
|
|
38
|
+
revoke_on_agent_disable: true,
|
|
39
|
+
},
|
|
40
|
+
revocation: {
|
|
41
|
+
enabled: false,
|
|
42
|
+
check_interval: 300,
|
|
43
|
+
revocation_endpoint: undefined,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* Merge user config with defaults (synchronous version)
|
|
48
|
+
*/
|
|
49
|
+
export function mergeGovernanceConfig(userConfig) {
|
|
50
|
+
if (!userConfig) {
|
|
51
|
+
return DEFAULT_GOVERNANCE;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
enabled: userConfig.enabled ?? DEFAULT_GOVERNANCE.enabled,
|
|
55
|
+
environment: userConfig.environment ?? DEFAULT_GOVERNANCE.environment,
|
|
56
|
+
access: {
|
|
57
|
+
...DEFAULT_GOVERNANCE.access,
|
|
58
|
+
...userConfig.access,
|
|
59
|
+
},
|
|
60
|
+
agent: {
|
|
61
|
+
...DEFAULT_GOVERNANCE.agent,
|
|
62
|
+
...userConfig.agent,
|
|
63
|
+
},
|
|
64
|
+
audit: {
|
|
65
|
+
...DEFAULT_GOVERNANCE.audit,
|
|
66
|
+
...userConfig.audit,
|
|
67
|
+
},
|
|
68
|
+
approval: {
|
|
69
|
+
...DEFAULT_GOVERNANCE.approval,
|
|
70
|
+
...userConfig.approval,
|
|
71
|
+
},
|
|
72
|
+
secrets: {
|
|
73
|
+
...DEFAULT_GOVERNANCE.secrets,
|
|
74
|
+
...userConfig.secrets,
|
|
75
|
+
},
|
|
76
|
+
revocation: {
|
|
77
|
+
...DEFAULT_GOVERNANCE.revocation,
|
|
78
|
+
...userConfig.revocation,
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Merge user config with defaults and detect environment (async version)
|
|
84
|
+
*/
|
|
85
|
+
export async function mergeGovernanceConfigAsync(userConfig) {
|
|
86
|
+
const merged = mergeGovernanceConfig(userConfig);
|
|
87
|
+
// If environment is not explicitly set, detect it
|
|
88
|
+
if (!userConfig?.environment) {
|
|
89
|
+
merged.environment = await getCurrentEnvironment(userConfig);
|
|
90
|
+
}
|
|
91
|
+
return merged;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Check if an operation is allowed based on governance rules
|
|
95
|
+
*/
|
|
96
|
+
export function checkOperationAllowed(config, operation) {
|
|
97
|
+
if (!config.enabled) {
|
|
98
|
+
return { allowed: true };
|
|
99
|
+
}
|
|
100
|
+
const env = config.environment;
|
|
101
|
+
const access = config.access[env];
|
|
102
|
+
if (!access) {
|
|
103
|
+
return {
|
|
104
|
+
allowed: false,
|
|
105
|
+
reason: `No access configuration for environment: ${env}`,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
switch (operation) {
|
|
109
|
+
case "read":
|
|
110
|
+
if (!access.read) {
|
|
111
|
+
return {
|
|
112
|
+
allowed: false,
|
|
113
|
+
reason: `Read operations not allowed in ${env} environment`,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
break;
|
|
117
|
+
case "write":
|
|
118
|
+
if (!access.write) {
|
|
119
|
+
const requiresApproval = env === "prod" && config.approval.production_writes;
|
|
120
|
+
if (requiresApproval) {
|
|
121
|
+
return {
|
|
122
|
+
allowed: false,
|
|
123
|
+
requiresApproval: true,
|
|
124
|
+
reason: `Write operations in ${env} require approval`,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
allowed: false,
|
|
129
|
+
reason: `Write operations not allowed in ${env} environment`,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
break;
|
|
133
|
+
case "delete":
|
|
134
|
+
if (!access.delete) {
|
|
135
|
+
return {
|
|
136
|
+
allowed: false,
|
|
137
|
+
requiresApproval: true,
|
|
138
|
+
reason: `Delete operations not allowed in ${env} environment`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
return { allowed: true };
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Check if a command contains destructive operations
|
|
147
|
+
*/
|
|
148
|
+
export function isDestructiveOperation(config, command) {
|
|
149
|
+
const keywords = config.approval.destructive_operations || [];
|
|
150
|
+
const lowerCommand = command.toLowerCase();
|
|
151
|
+
return keywords.some((keyword) => lowerCommand.includes(keyword.toLowerCase()));
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get current git branch
|
|
155
|
+
*/
|
|
156
|
+
export async function getCurrentGitBranch() {
|
|
157
|
+
try {
|
|
158
|
+
const { execSync } = await import("node:child_process");
|
|
159
|
+
const branch = execSync("git rev-parse --abbrev-ref HEAD", {
|
|
160
|
+
encoding: "utf-8",
|
|
161
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
162
|
+
}).trim();
|
|
163
|
+
return branch;
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Detect environment from git branch
|
|
171
|
+
*/
|
|
172
|
+
export function detectEnvironmentFromBranch(branch) {
|
|
173
|
+
const lowerBranch = branch.toLowerCase();
|
|
174
|
+
// Production branches
|
|
175
|
+
if (lowerBranch === "main" ||
|
|
176
|
+
lowerBranch === "master" ||
|
|
177
|
+
lowerBranch === "prod" ||
|
|
178
|
+
lowerBranch === "production") {
|
|
179
|
+
return "prod";
|
|
180
|
+
}
|
|
181
|
+
// Staging branches
|
|
182
|
+
if (lowerBranch === "staging" ||
|
|
183
|
+
lowerBranch === "stage" ||
|
|
184
|
+
lowerBranch.startsWith("release/")) {
|
|
185
|
+
return "staging";
|
|
186
|
+
}
|
|
187
|
+
// Development branches (all others)
|
|
188
|
+
return "dev";
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Get current environment from config, environment variable, or git branch
|
|
192
|
+
* Priority: config.environment > NODE_ENV > git branch > default (dev)
|
|
193
|
+
*/
|
|
194
|
+
export async function getCurrentEnvironment(config) {
|
|
195
|
+
// 1. Explicit config takes precedence
|
|
196
|
+
if (config?.environment) {
|
|
197
|
+
return config.environment;
|
|
198
|
+
}
|
|
199
|
+
// 2. NODE_ENV environment variable
|
|
200
|
+
const nodeEnv = process.env.NODE_ENV?.toLowerCase();
|
|
201
|
+
if (nodeEnv === "production")
|
|
202
|
+
return "prod";
|
|
203
|
+
if (nodeEnv === "staging")
|
|
204
|
+
return "staging";
|
|
205
|
+
if (nodeEnv === "development")
|
|
206
|
+
return "dev";
|
|
207
|
+
// 3. Git branch detection
|
|
208
|
+
const branch = await getCurrentGitBranch();
|
|
209
|
+
if (branch) {
|
|
210
|
+
const envFromBranch = detectEnvironmentFromBranch(branch);
|
|
211
|
+
if (envFromBranch) {
|
|
212
|
+
return envFromBranch;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// 4. Default to dev
|
|
216
|
+
return "dev";
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Format governance status for display
|
|
220
|
+
*/
|
|
221
|
+
export function formatGovernanceStatus(config) {
|
|
222
|
+
if (!config.enabled) {
|
|
223
|
+
return "Governance: disabled";
|
|
224
|
+
}
|
|
225
|
+
const env = config.environment;
|
|
226
|
+
const access = config.access[env];
|
|
227
|
+
const permissions = [];
|
|
228
|
+
if (access?.read)
|
|
229
|
+
permissions.push("read");
|
|
230
|
+
if (access?.write)
|
|
231
|
+
permissions.push("write");
|
|
232
|
+
if (access?.delete)
|
|
233
|
+
permissions.push("delete");
|
|
234
|
+
return `Governance: enabled | Environment: ${env} | Permissions: ${permissions.join(", ")}`;
|
|
235
|
+
}
|
|
236
|
+
//# sourceMappingURL=governance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"governance.js","sourceRoot":"","sources":["../src/governance.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { HooksConfig } from "./config.js";
|
|
2
|
+
/**
|
|
3
|
+
* Path (relative to .git) of the sentinel file written by the kit
|
|
4
|
+
* pre-commit hook. The post-commit detector reads it back; if it's missing
|
|
5
|
+
* the commit was made with `--no-verify` and we audit the skip.
|
|
6
|
+
*/
|
|
7
|
+
export declare const HOOK_SENTINEL_REL = ".kit-hook-ran";
|
|
8
|
+
/**
|
|
9
|
+
* Project-relative log of commits that bypassed pre-commit. Written by the
|
|
10
|
+
* post-commit hook; read once per `kit` invocation to surface a banner.
|
|
11
|
+
*/
|
|
12
|
+
export declare const SKIPPED_COMMITS_LOG = ".kit-skipped-commits.jsonl";
|
|
13
|
+
export interface HookInstallResult {
|
|
14
|
+
hookName: string;
|
|
15
|
+
action: "installed" | "updated" | "skipped" | "failed";
|
|
16
|
+
detail: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Install git hooks from configuration
|
|
20
|
+
*/
|
|
21
|
+
export declare function installHooks(config: HooksConfig, gitDir?: string): Promise<HookInstallResult[]>;
|
|
22
|
+
/**
|
|
23
|
+
* Uninstall git hooks
|
|
24
|
+
*/
|
|
25
|
+
export declare function uninstallHooks(hookNames: string[], gitDir?: string): Promise<HookInstallResult[]>;
|
package/dist/hooks.js
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import { writeFile, chmod, mkdir } from "node:fs/promises";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
/**
|
|
5
|
+
* Path (relative to .git) of the sentinel file written by the kit
|
|
6
|
+
* pre-commit hook. The post-commit detector reads it back; if it's missing
|
|
7
|
+
* the commit was made with `--no-verify` and we audit the skip.
|
|
8
|
+
*/
|
|
9
|
+
export const HOOK_SENTINEL_REL = ".kit-hook-ran";
|
|
10
|
+
/**
|
|
11
|
+
* Project-relative log of commits that bypassed pre-commit. Written by the
|
|
12
|
+
* post-commit hook; read once per `kit` invocation to surface a banner.
|
|
13
|
+
*/
|
|
14
|
+
export const SKIPPED_COMMITS_LOG = ".kit-skipped-commits.jsonl";
|
|
15
|
+
/**
|
|
16
|
+
* Install git hooks from configuration
|
|
17
|
+
*/
|
|
18
|
+
export async function installHooks(config, gitDir = ".git") {
|
|
19
|
+
// Read-only mode: hooks are writes to .git/hooks/. Refuse + audit.
|
|
20
|
+
const { isReadOnlyMode, refuseWrite } = await import("./read-only-mode.js");
|
|
21
|
+
if (isReadOnlyMode()) {
|
|
22
|
+
const refusal = await refuseWrite("install-hooks", {
|
|
23
|
+
hook_count: Object.keys(config).length,
|
|
24
|
+
});
|
|
25
|
+
return [{ hookName: "read-only-refusal", action: "failed", detail: refusal.reason }];
|
|
26
|
+
}
|
|
27
|
+
const results = [];
|
|
28
|
+
const hooksDir = resolve(process.cwd(), gitDir, "hooks");
|
|
29
|
+
// Ensure hooks directory exists
|
|
30
|
+
try {
|
|
31
|
+
await mkdir(hooksDir, { recursive: true });
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
return [
|
|
35
|
+
{
|
|
36
|
+
hookName: "hooks-dir",
|
|
37
|
+
action: "failed",
|
|
38
|
+
detail: `Failed to create hooks directory: ${error}`,
|
|
39
|
+
},
|
|
40
|
+
];
|
|
41
|
+
}
|
|
42
|
+
// Install each hook
|
|
43
|
+
for (const [hookName, commands] of Object.entries(config)) {
|
|
44
|
+
if (!commands || commands.length === 0) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const result = await installHook(hooksDir, hookName, commands);
|
|
48
|
+
results.push(result);
|
|
49
|
+
}
|
|
50
|
+
// Always install the bypass detector — independent of HooksConfig so the
|
|
51
|
+
// user can't omit it. Even repos that don't configure any other hooks get
|
|
52
|
+
// the sentinel pair so `--no-verify` is detectable post-facto.
|
|
53
|
+
const detectorResults = await installBypassDetector(hooksDir);
|
|
54
|
+
results.push(...detectorResults);
|
|
55
|
+
return results;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Writes (or re-writes) the pre-commit sentinel-writer and the post-commit
|
|
59
|
+
* detector. The pair makes `git commit --no-verify` non-silent: the
|
|
60
|
+
* post-commit hook compares the sentinel to HEAD and logs a skip event
|
|
61
|
+
* when they don't match (or the sentinel is missing entirely).
|
|
62
|
+
*
|
|
63
|
+
* Git doesn't expose `--no-verify` to hooks, so we can't prevent the skip
|
|
64
|
+
* — but we can guarantee a forensic trail and a stderr banner on the next
|
|
65
|
+
* `kit` command in the repo.
|
|
66
|
+
*/
|
|
67
|
+
async function installBypassDetector(hooksDir) {
|
|
68
|
+
const results = [];
|
|
69
|
+
const preCommitDetectorPath = resolve(hooksDir, "pre-commit");
|
|
70
|
+
const postCommitDetectorPath = resolve(hooksDir, "post-commit");
|
|
71
|
+
// The pre-commit sentinel WRITER must run even when the user has no
|
|
72
|
+
// other pre-commit steps configured. If a real pre-commit script
|
|
73
|
+
// already exists (from installHook above), prepend the sentinel write.
|
|
74
|
+
try {
|
|
75
|
+
const sentinelWriter = sentinelWriterScript();
|
|
76
|
+
if (existsSync(preCommitDetectorPath)) {
|
|
77
|
+
const { readFile } = await import("node:fs/promises");
|
|
78
|
+
const current = await readFile(preCommitDetectorPath, "utf-8");
|
|
79
|
+
if (!current.includes("KIT_HOOK_SENTINEL")) {
|
|
80
|
+
// Inject the sentinel-write block right after the shebang line.
|
|
81
|
+
const lines = current.split("\n");
|
|
82
|
+
const injected = [lines[0], "", sentinelWriter, ...lines.slice(1)].join("\n");
|
|
83
|
+
await writeFile(preCommitDetectorPath, injected, "utf-8");
|
|
84
|
+
await chmod(preCommitDetectorPath, 0o755);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
await writeFile(preCommitDetectorPath, `#!/bin/sh\n${sentinelWriter}\nexit 0\n`, "utf-8");
|
|
89
|
+
await chmod(preCommitDetectorPath, 0o755);
|
|
90
|
+
}
|
|
91
|
+
results.push({
|
|
92
|
+
hookName: "pre-commit (sentinel)",
|
|
93
|
+
action: "installed",
|
|
94
|
+
detail: "writes .git/.kit-hook-ran on every pre-commit pass",
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
results.push({
|
|
99
|
+
hookName: "pre-commit (sentinel)",
|
|
100
|
+
action: "failed",
|
|
101
|
+
detail: error instanceof Error ? error.message : String(error),
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
try {
|
|
105
|
+
const detectorScript = postCommitDetectorScript();
|
|
106
|
+
if (existsSync(postCommitDetectorPath)) {
|
|
107
|
+
const { readFile } = await import("node:fs/promises");
|
|
108
|
+
const current = await readFile(postCommitDetectorPath, "utf-8");
|
|
109
|
+
if (!current.includes("KIT_HOOK_SENTINEL")) {
|
|
110
|
+
const lines = current.split("\n");
|
|
111
|
+
const injected = [lines[0], "", detectorScript, ...lines.slice(1)].join("\n");
|
|
112
|
+
await writeFile(postCommitDetectorPath, injected, "utf-8");
|
|
113
|
+
await chmod(postCommitDetectorPath, 0o755);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
await writeFile(postCommitDetectorPath, `#!/bin/sh\n${detectorScript}\nexit 0\n`, "utf-8");
|
|
118
|
+
await chmod(postCommitDetectorPath, 0o755);
|
|
119
|
+
}
|
|
120
|
+
results.push({
|
|
121
|
+
hookName: "post-commit (bypass-detector)",
|
|
122
|
+
action: "installed",
|
|
123
|
+
detail: "logs commits whose pre-commit hook didn't run",
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
results.push({
|
|
128
|
+
hookName: "post-commit (bypass-detector)",
|
|
129
|
+
action: "failed",
|
|
130
|
+
detail: error instanceof Error ? error.message : String(error),
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
return results;
|
|
134
|
+
}
|
|
135
|
+
function sentinelWriterScript() {
|
|
136
|
+
return `# KIT_HOOK_SENTINEL: record that pre-commit actually ran. The
|
|
137
|
+
# post-commit detector compares the sentinel to HEAD; mismatch or absence
|
|
138
|
+
# means \`git commit --no-verify\` skipped the gate.
|
|
139
|
+
__kit_git_dir=\${GIT_DIR:-$(git rev-parse --git-dir 2>/dev/null)}
|
|
140
|
+
if [ -n "$__kit_git_dir" ]; then
|
|
141
|
+
date -u +"%Y-%m-%dT%H:%M:%SZ" > "$__kit_git_dir/${HOOK_SENTINEL_REL}" 2>/dev/null || true
|
|
142
|
+
fi`;
|
|
143
|
+
}
|
|
144
|
+
function postCommitDetectorScript() {
|
|
145
|
+
return `# KIT_HOOK_SENTINEL: detect --no-verify skips. If the sentinel
|
|
146
|
+
# is missing OR older than the commit (i.e. wasn't written by this commit's
|
|
147
|
+
# pre-commit pass), record a skip event so the operator and CI can see it.
|
|
148
|
+
__kit_git_dir=\${GIT_DIR:-$(git rev-parse --git-dir 2>/dev/null)}
|
|
149
|
+
__kit_repo_root=$(git rev-parse --show-toplevel 2>/dev/null)
|
|
150
|
+
if [ -n "$__kit_git_dir" ] && [ -n "$__kit_repo_root" ]; then
|
|
151
|
+
__kit_sentinel="$__kit_git_dir/${HOOK_SENTINEL_REL}"
|
|
152
|
+
__kit_head=$(git rev-parse HEAD 2>/dev/null)
|
|
153
|
+
if [ ! -f "$__kit_sentinel" ]; then
|
|
154
|
+
__kit_reason="sentinel-missing"
|
|
155
|
+
else
|
|
156
|
+
# If the sentinel timestamp pre-dates the commit author time by more
|
|
157
|
+
# than ~5min, treat as stale (left from an earlier run).
|
|
158
|
+
__kit_sentinel_ts=$(stat -c %Y "$__kit_sentinel" 2>/dev/null || stat -f %m "$__kit_sentinel" 2>/dev/null)
|
|
159
|
+
__kit_commit_ts=$(git log -1 --format=%ct HEAD 2>/dev/null)
|
|
160
|
+
if [ -n "$__kit_sentinel_ts" ] && [ -n "$__kit_commit_ts" ]; then
|
|
161
|
+
__kit_delta=$(( __kit_commit_ts - __kit_sentinel_ts ))
|
|
162
|
+
if [ "$__kit_delta" -gt 300 ] || [ "$__kit_delta" -lt -300 ]; then
|
|
163
|
+
__kit_reason="sentinel-stale"
|
|
164
|
+
fi
|
|
165
|
+
fi
|
|
166
|
+
fi
|
|
167
|
+
if [ -n "$__kit_reason" ]; then
|
|
168
|
+
__kit_log="$__kit_repo_root/${SKIPPED_COMMITS_LOG}"
|
|
169
|
+
__kit_ts=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
170
|
+
printf '{"timestamp":"%s","sha":"%s","reason":"%s","user":"%s"}\\n' \\
|
|
171
|
+
"$__kit_ts" "$__kit_head" "$__kit_reason" "\${USER:-unknown}" \\
|
|
172
|
+
>> "$__kit_log" 2>/dev/null || true
|
|
173
|
+
echo "[kit] WARNING: pre-commit hook was skipped ($__kit_reason). Logged to ${SKIPPED_COMMITS_LOG}." >&2
|
|
174
|
+
fi
|
|
175
|
+
# Clean up sentinel so the next commit starts fresh.
|
|
176
|
+
rm -f "$__kit_sentinel" 2>/dev/null || true
|
|
177
|
+
fi`;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Install a single git hook
|
|
181
|
+
*/
|
|
182
|
+
async function installHook(hooksDir, hookName, commands) {
|
|
183
|
+
const hookPath = resolve(hooksDir, hookName);
|
|
184
|
+
const hookContent = generateHookScript(hookName, commands);
|
|
185
|
+
try {
|
|
186
|
+
// Check if hook already exists
|
|
187
|
+
const exists = existsSync(hookPath);
|
|
188
|
+
const action = exists ? "updated" : "installed";
|
|
189
|
+
// Write hook file
|
|
190
|
+
await writeFile(hookPath, hookContent, "utf-8");
|
|
191
|
+
// Make executable
|
|
192
|
+
await chmod(hookPath, 0o755);
|
|
193
|
+
return {
|
|
194
|
+
hookName,
|
|
195
|
+
action,
|
|
196
|
+
detail: `${commands.length} command(s)`,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
return {
|
|
201
|
+
hookName,
|
|
202
|
+
action: "failed",
|
|
203
|
+
detail: error instanceof Error ? error.message : String(error),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Generate hook script content
|
|
209
|
+
*/
|
|
210
|
+
function generateHookScript(hookName, commands) {
|
|
211
|
+
const total = commands.length;
|
|
212
|
+
// Each command is framed as a numbered step with live ▶ / ✓ / ✗ markers and
|
|
213
|
+
// a per-step duration, mirroring the runStep() util used by the CLI
|
|
214
|
+
// (src/output.ts). The raw command text is echoed and executed verbatim so
|
|
215
|
+
// check-hooks' `content.includes(cmd)` up-to-date detection keeps working.
|
|
216
|
+
const steps = commands
|
|
217
|
+
.map((cmd, index) => {
|
|
218
|
+
const n = index + 1;
|
|
219
|
+
return `
|
|
220
|
+
__s=$(date +%s)
|
|
221
|
+
echo "▶ [${n}/${total}] ${cmd}"
|
|
222
|
+
if ${cmd}; then
|
|
223
|
+
echo "✓ [${n}/${total}] ${cmd} ($(( $(date +%s) - __s ))s)"
|
|
224
|
+
else
|
|
225
|
+
echo "✗ ${hookName} step ${n}/${total} failed: ${cmd}"
|
|
226
|
+
exit 1
|
|
227
|
+
fi`;
|
|
228
|
+
})
|
|
229
|
+
.join("\n");
|
|
230
|
+
return `#!/bin/sh
|
|
231
|
+
# Generated by kit
|
|
232
|
+
# Hook: ${hookName}
|
|
233
|
+
# Commands: ${total}
|
|
234
|
+
|
|
235
|
+
set -e
|
|
236
|
+
|
|
237
|
+
__t0=$(date +%s)
|
|
238
|
+
echo "🔍 ${hookName} — running ${total} step(s)…"
|
|
239
|
+
${steps}
|
|
240
|
+
|
|
241
|
+
echo "✅ ${hookName} passed — ${total} step(s) in $(( $(date +%s) - __t0 ))s"
|
|
242
|
+
exit 0
|
|
243
|
+
`;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Uninstall git hooks
|
|
247
|
+
*/
|
|
248
|
+
export async function uninstallHooks(hookNames, gitDir = ".git") {
|
|
249
|
+
const results = [];
|
|
250
|
+
const hooksDir = resolve(process.cwd(), gitDir, "hooks");
|
|
251
|
+
for (const hookName of hookNames) {
|
|
252
|
+
const hookPath = resolve(hooksDir, hookName);
|
|
253
|
+
try {
|
|
254
|
+
if (existsSync(hookPath)) {
|
|
255
|
+
const { unlink } = await import("node:fs/promises");
|
|
256
|
+
await unlink(hookPath);
|
|
257
|
+
results.push({
|
|
258
|
+
hookName,
|
|
259
|
+
action: "installed", // Using "installed" to mean "removed"
|
|
260
|
+
detail: "uninstalled",
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
results.push({
|
|
265
|
+
hookName,
|
|
266
|
+
action: "skipped",
|
|
267
|
+
detail: "not found",
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
results.push({
|
|
273
|
+
hookName,
|
|
274
|
+
action: "failed",
|
|
275
|
+
detail: error instanceof Error ? error.message : String(error),
|
|
276
|
+
});
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return results;
|
|
280
|
+
}
|
|
281
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized ID generation utility
|
|
3
|
+
* Consolidates Date.now() + random pattern used across services
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Generate unique ID with optional prefix
|
|
7
|
+
* Pattern: prefix + timestamp-randomString (max 255 chars)
|
|
8
|
+
*/
|
|
9
|
+
export declare function generateId(prefix?: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Generate prefixed IDs for domain entities
|
|
12
|
+
*/
|
|
13
|
+
export declare const IdGenerators: {
|
|
14
|
+
partner: (suffix?: string) => string;
|
|
15
|
+
agreement: (suffix?: string) => string;
|
|
16
|
+
apiKey: (suffix?: string) => string;
|
|
17
|
+
coPlugin: (suffix?: string) => string;
|
|
18
|
+
featured: (suffix?: string) => string;
|
|
19
|
+
feedback: (suffix?: string) => string;
|
|
20
|
+
betaDev: (suffix?: string) => string;
|
|
21
|
+
refine: (suffix?: string) => string;
|
|
22
|
+
payout: (suffix?: string) => string;
|
|
23
|
+
grant: (suffix?: string) => string;
|
|
24
|
+
approval: (suffix?: string) => string;
|
|
25
|
+
alert: (suffix?: string) => string;
|
|
26
|
+
trace: (suffix?: string) => string;
|
|
27
|
+
span: (suffix?: string) => string;
|
|
28
|
+
notification: (suffix?: string) => string;
|
|
29
|
+
publish: (suffix?: string) => string;
|
|
30
|
+
documentation: (suffix?: string) => string;
|
|
31
|
+
error: (suffix?: string) => string;
|
|
32
|
+
errorGroup: (suffix?: string) => string;
|
|
33
|
+
search: (suffix?: string) => string;
|
|
34
|
+
review: (suffix?: string) => string;
|
|
35
|
+
report: (suffix?: string) => string;
|
|
36
|
+
modAction: (suffix?: string) => string;
|
|
37
|
+
appeal: (suffix?: string) => string;
|
|
38
|
+
audit: (suffix?: string) => string;
|
|
39
|
+
policy: (suffix?: string) => string;
|
|
40
|
+
transaction: (suffix?: string) => string;
|
|
41
|
+
sla: (suffix?: string) => string;
|
|
42
|
+
breach: (suffix?: string) => string;
|
|
43
|
+
};
|