sandstream-kit 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +617 -0
- package/dist/adapters/api-key-adapter.d.ts +35 -0
- package/dist/adapters/api-key-adapter.js +46 -0
- package/dist/adapters/api-key-adapter.js.map +1 -0
- package/dist/adapters/clerk-auth.d.ts +6 -0
- package/dist/adapters/clerk-auth.js +20 -0
- package/dist/adapters/clerk-auth.js.map +1 -0
- package/dist/adapters/cloudflare-r2.d.ts +6 -0
- package/dist/adapters/cloudflare-r2.js +136 -0
- package/dist/adapters/cloudflare-r2.js.map +1 -0
- package/dist/adapters/expo-eas.d.ts +6 -0
- package/dist/adapters/expo-eas.js +129 -0
- package/dist/adapters/expo-eas.js.map +1 -0
- package/dist/adapters/flagsmith-flags.d.ts +5 -0
- package/dist/adapters/flagsmith-flags.js +20 -0
- package/dist/adapters/flagsmith-flags.js.map +1 -0
- package/dist/adapters/flyio-hosting.d.ts +2 -0
- package/dist/adapters/flyio-hosting.js +143 -0
- package/dist/adapters/flyio-hosting.js.map +1 -0
- package/dist/adapters/index.d.ts +6 -0
- package/dist/adapters/index.js +48 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/inngest-background.d.ts +5 -0
- package/dist/adapters/inngest-background.js +19 -0
- package/dist/adapters/inngest-background.js.map +1 -0
- package/dist/adapters/liveblocks-realtime.d.ts +11 -0
- package/dist/adapters/liveblocks-realtime.js +62 -0
- package/dist/adapters/liveblocks-realtime.js.map +1 -0
- package/dist/adapters/loops-email.d.ts +6 -0
- package/dist/adapters/loops-email.js +18 -0
- package/dist/adapters/loops-email.js.map +1 -0
- package/dist/adapters/neon-db.d.ts +10 -0
- package/dist/adapters/neon-db.js +94 -0
- package/dist/adapters/neon-db.js.map +1 -0
- package/dist/adapters/planetscale-db.d.ts +11 -0
- package/dist/adapters/planetscale-db.js +134 -0
- package/dist/adapters/planetscale-db.js.map +1 -0
- package/dist/adapters/posthog-analytics.d.ts +6 -0
- package/dist/adapters/posthog-analytics.js +22 -0
- package/dist/adapters/posthog-analytics.js.map +1 -0
- package/dist/adapters/railway-hosting.d.ts +2 -0
- package/dist/adapters/railway-hosting.js +136 -0
- package/dist/adapters/railway-hosting.js.map +1 -0
- package/dist/adapters/resend-email.d.ts +35 -0
- package/dist/adapters/resend-email.js +109 -0
- package/dist/adapters/resend-email.js.map +1 -0
- package/dist/adapters/searxng-instance.d.ts +6 -0
- package/dist/adapters/searxng-instance.js +240 -0
- package/dist/adapters/searxng-instance.js.map +1 -0
- package/dist/adapters/sentry-monitoring.d.ts +7 -0
- package/dist/adapters/sentry-monitoring.js +27 -0
- package/dist/adapters/sentry-monitoring.js.map +1 -0
- package/dist/adapters/stripe-payments.d.ts +6 -0
- package/dist/adapters/stripe-payments.js +134 -0
- package/dist/adapters/stripe-payments.js.map +1 -0
- package/dist/adapters/supabase-db.d.ts +6 -0
- package/dist/adapters/supabase-db.js +130 -0
- package/dist/adapters/supabase-db.js.map +1 -0
- package/dist/adapters/tinybird-analytics.d.ts +5 -0
- package/dist/adapters/tinybird-analytics.js +20 -0
- package/dist/adapters/tinybird-analytics.js.map +1 -0
- package/dist/adapters/trigger-background.d.ts +6 -0
- package/dist/adapters/trigger-background.js +20 -0
- package/dist/adapters/trigger-background.js.map +1 -0
- package/dist/adapters/types.d.ts +7 -0
- package/dist/adapters/types.js +2 -0
- package/dist/adapters/types.js.map +1 -0
- package/dist/adapters/upstash-redis.d.ts +6 -0
- package/dist/adapters/upstash-redis.js +88 -0
- package/dist/adapters/upstash-redis.js.map +1 -0
- package/dist/adapters/vercel-hosting.d.ts +6 -0
- package/dist/adapters/vercel-hosting.js +112 -0
- package/dist/adapters/vercel-hosting.js.map +1 -0
- package/dist/agent-adapter-model.d.ts +108 -0
- package/dist/agent-adapter-model.js +6 -0
- package/dist/agent-adapter-model.js.map +1 -0
- package/dist/agent-adapter-service.d.ts +67 -0
- package/dist/agent-adapter-service.js +299 -0
- package/dist/agent-adapter-service.js.map +1 -0
- package/dist/agent-config.d.ts +56 -0
- package/dist/agent-config.js +129 -0
- package/dist/agent-config.js.map +1 -0
- package/dist/agent-governance-model.d.ts +128 -0
- package/dist/agent-governance-model.js +6 -0
- package/dist/agent-governance-model.js.map +1 -0
- package/dist/agent-governance-service.d.ts +101 -0
- package/dist/agent-governance-service.js +319 -0
- package/dist/agent-governance-service.js.map +1 -0
- package/dist/alert-rules-engine.d.ts +102 -0
- package/dist/alert-rules-engine.js +210 -0
- package/dist/alert-rules-engine.js.map +1 -0
- package/dist/analytics-service.d.ts +126 -0
- package/dist/analytics-service.js +318 -0
- package/dist/analytics-service.js.map +1 -0
- package/dist/analyze.d.ts +19 -0
- package/dist/analyze.js +311 -0
- package/dist/analyze.js.map +1 -0
- package/dist/apm-instrumentor.d.ts +119 -0
- package/dist/apm-instrumentor.js +225 -0
- package/dist/apm-instrumentor.js.map +1 -0
- package/dist/approval-model.d.ts +82 -0
- package/dist/approval-model.js +6 -0
- package/dist/approval-model.js.map +1 -0
- package/dist/approval-service.d.ts +39 -0
- package/dist/approval-service.js +236 -0
- package/dist/approval-service.js.map +1 -0
- package/dist/approval.d.ts +22 -0
- package/dist/approval.js +148 -0
- package/dist/approval.js.map +1 -0
- package/dist/audit-logging-model.d.ts +157 -0
- package/dist/audit-logging-model.js +6 -0
- package/dist/audit-logging-model.js.map +1 -0
- package/dist/audit-logging-service.d.ts +89 -0
- package/dist/audit-logging-service.js +367 -0
- package/dist/audit-logging-service.js.map +1 -0
- package/dist/audit-secrets.d.ts +42 -0
- package/dist/audit-secrets.js +126 -0
- package/dist/audit-secrets.js.map +1 -0
- package/dist/audit.d.ts +43 -0
- package/dist/audit.js +286 -0
- package/dist/audit.js.map +1 -0
- package/dist/author-dashboard.d.ts +84 -0
- package/dist/author-dashboard.js +204 -0
- package/dist/author-dashboard.js.map +1 -0
- package/dist/author-notifications.d.ts +130 -0
- package/dist/author-notifications.js +261 -0
- package/dist/author-notifications.js.map +1 -0
- package/dist/author-verification.d.ts +79 -0
- package/dist/author-verification.js +257 -0
- package/dist/author-verification.js.map +1 -0
- package/dist/autonomous-setup-model.d.ts +117 -0
- package/dist/autonomous-setup-model.js +6 -0
- package/dist/autonomous-setup-model.js.map +1 -0
- package/dist/autonomous-setup-service.d.ts +74 -0
- package/dist/autonomous-setup-service.js +325 -0
- package/dist/autonomous-setup-service.js.map +1 -0
- package/dist/badge-system.d.ts +70 -0
- package/dist/badge-system.js +210 -0
- package/dist/badge-system.js.map +1 -0
- package/dist/baseline.d.ts +34 -0
- package/dist/baseline.js +78 -0
- package/dist/baseline.js.map +1 -0
- package/dist/beta-program-service.d.ts +112 -0
- package/dist/beta-program-service.js +240 -0
- package/dist/beta-program-service.js.map +1 -0
- package/dist/budget.d.ts +34 -0
- package/dist/budget.js +159 -0
- package/dist/budget.js.map +1 -0
- package/dist/bumblebee.d.ts +143 -0
- package/dist/bumblebee.js +384 -0
- package/dist/bumblebee.js.map +1 -0
- package/dist/cache-manager.d.ts +97 -0
- package/dist/cache-manager.js +244 -0
- package/dist/cache-manager.js.map +1 -0
- package/dist/cdn-adapter.d.ts +64 -0
- package/dist/cdn-adapter.js +263 -0
- package/dist/cdn-adapter.js.map +1 -0
- package/dist/certification-workflow-model.d.ts +95 -0
- package/dist/certification-workflow-model.js +6 -0
- package/dist/certification-workflow-model.js.map +1 -0
- package/dist/certification-workflow-service.d.ts +72 -0
- package/dist/certification-workflow-service.js +305 -0
- package/dist/certification-workflow-service.js.map +1 -0
- package/dist/check-design.d.ts +38 -0
- package/dist/check-design.js +256 -0
- package/dist/check-design.js.map +1 -0
- package/dist/check-gitignore.d.ts +39 -0
- package/dist/check-gitignore.js +156 -0
- package/dist/check-gitignore.js.map +1 -0
- package/dist/check-hooks.d.ts +15 -0
- package/dist/check-hooks.js +72 -0
- package/dist/check-hooks.js.map +1 -0
- package/dist/check-lock.d.ts +16 -0
- package/dist/check-lock.js +94 -0
- package/dist/check-lock.js.map +1 -0
- package/dist/check-secrets.d.ts +11 -0
- package/dist/check-secrets.js +320 -0
- package/dist/check-secrets.js.map +1 -0
- package/dist/check-security.d.ts +13 -0
- package/dist/check-security.js +887 -0
- package/dist/check-security.js.map +1 -0
- package/dist/check-services.d.ts +10 -0
- package/dist/check-services.js +44 -0
- package/dist/check-services.js.map +1 -0
- package/dist/check-skills.d.ts +8 -0
- package/dist/check-skills.js +26 -0
- package/dist/check-skills.js.map +1 -0
- package/dist/check-tests.d.ts +43 -0
- package/dist/check-tests.js +175 -0
- package/dist/check-tests.js.map +1 -0
- package/dist/check-tools.d.ts +8 -0
- package/dist/check-tools.js +42 -0
- package/dist/check-tools.js.map +1 -0
- package/dist/check-web-search.d.ts +12 -0
- package/dist/check-web-search.js +168 -0
- package/dist/check-web-search.js.map +1 -0
- package/dist/ci-cd-publisher.d.ts +162 -0
- package/dist/ci-cd-publisher.js +319 -0
- package/dist/ci-cd-publisher.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +4074 -0
- package/dist/cli.js.map +1 -0
- package/dist/clone.d.ts +25 -0
- package/dist/clone.js +73 -0
- package/dist/clone.js.map +1 -0
- package/dist/completions.d.ts +8 -0
- package/dist/completions.js +250 -0
- package/dist/completions.js.map +1 -0
- package/dist/compression-manager.d.ts +107 -0
- package/dist/compression-manager.js +250 -0
- package/dist/compression-manager.js.map +1 -0
- package/dist/config.d.ts +233 -0
- package/dist/config.js +255 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +38 -0
- package/dist/context.js +86 -0
- package/dist/context.js.map +1 -0
- package/dist/cost-monitor.d.ts +72 -0
- package/dist/cost-monitor.js +218 -0
- package/dist/cost-monitor.js.map +1 -0
- package/dist/create-plugin.d.ts +22 -0
- package/dist/create-plugin.js +266 -0
- package/dist/create-plugin.js.map +1 -0
- package/dist/database.d.ts +123 -0
- package/dist/database.js +354 -0
- package/dist/database.js.map +1 -0
- package/dist/datadog-adapter.d.ts +60 -0
- package/dist/datadog-adapter.js +245 -0
- package/dist/datadog-adapter.js.map +1 -0
- package/dist/doctor.d.ts +15 -0
- package/dist/doctor.js +131 -0
- package/dist/doctor.js.map +1 -0
- package/dist/documentation-generator.d.ts +226 -0
- package/dist/documentation-generator.js +348 -0
- package/dist/documentation-generator.js.map +1 -0
- package/dist/elevation-scopes.d.ts +40 -0
- package/dist/elevation-scopes.js +110 -0
- package/dist/elevation-scopes.js.map +1 -0
- package/dist/elevation.d.ts +102 -0
- package/dist/elevation.js +449 -0
- package/dist/elevation.js.map +1 -0
- package/dist/env-diff.d.ts +27 -0
- package/dist/env-diff.js +104 -0
- package/dist/env-diff.js.map +1 -0
- package/dist/env-inspect.d.ts +28 -0
- package/dist/env-inspect.js +81 -0
- package/dist/env-inspect.js.map +1 -0
- package/dist/env-switch.d.ts +37 -0
- package/dist/env-switch.js +102 -0
- package/dist/env-switch.js.map +1 -0
- package/dist/environment.d.ts +27 -0
- package/dist/environment.js +148 -0
- package/dist/environment.js.map +1 -0
- package/dist/error-tracker.d.ts +92 -0
- package/dist/error-tracker.js +206 -0
- package/dist/error-tracker.js.map +1 -0
- package/dist/escalate.d.ts +11 -0
- package/dist/escalate.js +73 -0
- package/dist/escalate.js.map +1 -0
- package/dist/event-stream.d.ts +81 -0
- package/dist/event-stream.js +161 -0
- package/dist/event-stream.js.map +1 -0
- package/dist/fix.d.ts +42 -0
- package/dist/fix.js +419 -0
- package/dist/fix.js.map +1 -0
- package/dist/governance-middleware.d.ts +22 -0
- package/dist/governance-middleware.js +173 -0
- package/dist/governance-middleware.js.map +1 -0
- package/dist/governance.d.ts +44 -0
- package/dist/governance.js +236 -0
- package/dist/governance.js.map +1 -0
- package/dist/hooks.d.ts +25 -0
- package/dist/hooks.js +281 -0
- package/dist/hooks.js.map +1 -0
- package/dist/id-generator.d.ts +43 -0
- package/dist/id-generator.js +47 -0
- package/dist/id-generator.js.map +1 -0
- package/dist/image-optimizer.d.ts +92 -0
- package/dist/image-optimizer.js +202 -0
- package/dist/image-optimizer.js.map +1 -0
- package/dist/install.d.ts +15 -0
- package/dist/install.js +59 -0
- package/dist/install.js.map +1 -0
- package/dist/lock.d.ts +82 -0
- package/dist/lock.js +264 -0
- package/dist/lock.js.map +1 -0
- package/dist/login.d.ts +23 -0
- package/dist/login.js +132 -0
- package/dist/login.js.map +1 -0
- package/dist/mcp-kit-tools-model.d.ts +195 -0
- package/dist/mcp-kit-tools-model.js +6 -0
- package/dist/mcp-kit-tools-model.js.map +1 -0
- package/dist/mcp-kit-tools-service.d.ts +127 -0
- package/dist/mcp-kit-tools-service.js +943 -0
- package/dist/mcp-kit-tools-service.js.map +1 -0
- package/dist/mcp-orchestrator.d.ts +70 -0
- package/dist/mcp-orchestrator.js +175 -0
- package/dist/mcp-orchestrator.js.map +1 -0
- package/dist/mcp-server.d.ts +3 -0
- package/dist/mcp-server.js +722 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/middleware/rate-limiter.d.ts +74 -0
- package/dist/middleware/rate-limiter.js +342 -0
- package/dist/middleware/rate-limiter.js.map +1 -0
- package/dist/migration-runner.d.ts +66 -0
- package/dist/migration-runner.js +192 -0
- package/dist/migration-runner.js.map +1 -0
- package/dist/migrations.d.ts +25 -0
- package/dist/migrations.js +530 -0
- package/dist/migrations.js.map +1 -0
- package/dist/moderation-system.d.ts +153 -0
- package/dist/moderation-system.js +338 -0
- package/dist/moderation-system.js.map +1 -0
- package/dist/multi-agent-workflow-model.d.ts +125 -0
- package/dist/multi-agent-workflow-model.js +6 -0
- package/dist/multi-agent-workflow-model.js.map +1 -0
- package/dist/multi-agent-workflow-service.d.ts +102 -0
- package/dist/multi-agent-workflow-service.js +452 -0
- package/dist/multi-agent-workflow-service.js.map +1 -0
- package/dist/onepassword.d.ts +75 -0
- package/dist/onepassword.js +140 -0
- package/dist/onepassword.js.map +1 -0
- package/dist/open.d.ts +30 -0
- package/dist/open.js +166 -0
- package/dist/open.js.map +1 -0
- package/dist/output.d.ts +32 -0
- package/dist/output.js +295 -0
- package/dist/output.js.map +1 -0
- package/dist/partner-service.d.ts +101 -0
- package/dist/partner-service.js +191 -0
- package/dist/partner-service.js.map +1 -0
- package/dist/payout-service.d.ts +136 -0
- package/dist/payout-service.js +293 -0
- package/dist/payout-service.js.map +1 -0
- package/dist/pkg.d.ts +30 -0
- package/dist/pkg.js +162 -0
- package/dist/pkg.js.map +1 -0
- package/dist/plugin-loader.d.ts +16 -0
- package/dist/plugin-loader.js +124 -0
- package/dist/plugin-loader.js.map +1 -0
- package/dist/plugin-registry-model.d.ts +133 -0
- package/dist/plugin-registry-model.js +6 -0
- package/dist/plugin-registry-model.js.map +1 -0
- package/dist/plugin-registry-service.d.ts +109 -0
- package/dist/plugin-registry-service.js +361 -0
- package/dist/plugin-registry-service.js.map +1 -0
- package/dist/plugin-registry.d.ts +58 -0
- package/dist/plugin-registry.js +108 -0
- package/dist/plugin-registry.js.map +1 -0
- package/dist/plugin-updates.d.ts +135 -0
- package/dist/plugin-updates.js +326 -0
- package/dist/plugin-updates.js.map +1 -0
- package/dist/plugins-cli.d.ts +7 -0
- package/dist/plugins-cli.js +157 -0
- package/dist/plugins-cli.js.map +1 -0
- package/dist/plugins.d.ts +88 -0
- package/dist/plugins.js +251 -0
- package/dist/plugins.js.map +1 -0
- package/dist/policy.d.ts +66 -0
- package/dist/policy.js +160 -0
- package/dist/policy.js.map +1 -0
- package/dist/post-pull-audit.d.ts +39 -0
- package/dist/post-pull-audit.js +151 -0
- package/dist/post-pull-audit.js.map +1 -0
- package/dist/provision.d.ts +17 -0
- package/dist/provision.js +147 -0
- package/dist/provision.js.map +1 -0
- package/dist/query-optimizer.d.ts +102 -0
- package/dist/query-optimizer.js +199 -0
- package/dist/query-optimizer.js.map +1 -0
- package/dist/read-only-mode.d.ts +46 -0
- package/dist/read-only-mode.js +71 -0
- package/dist/read-only-mode.js.map +1 -0
- package/dist/redis-adapter.d.ts +71 -0
- package/dist/redis-adapter.js +278 -0
- package/dist/redis-adapter.js.map +1 -0
- package/dist/resilience-tests.d.ts +120 -0
- package/dist/resilience-tests.js +293 -0
- package/dist/resilience-tests.js.map +1 -0
- package/dist/revocation.d.ts +22 -0
- package/dist/revocation.js +100 -0
- package/dist/revocation.js.map +1 -0
- package/dist/run.d.ts +21 -0
- package/dist/run.js +80 -0
- package/dist/run.js.map +1 -0
- package/dist/scan-build.d.ts +18 -0
- package/dist/scan-build.js +100 -0
- package/dist/scan-build.js.map +1 -0
- package/dist/scan-plaintext.d.ts +24 -0
- package/dist/scan-plaintext.js +147 -0
- package/dist/scan-plaintext.js.map +1 -0
- package/dist/scan-staged.d.ts +15 -0
- package/dist/scan-staged.js +70 -0
- package/dist/scan-staged.js.map +1 -0
- package/dist/scan-transcripts.d.ts +23 -0
- package/dist/scan-transcripts.js +93 -0
- package/dist/scan-transcripts.js.map +1 -0
- package/dist/secret-backends.d.ts +50 -0
- package/dist/secret-backends.js +510 -0
- package/dist/secret-backends.js.map +1 -0
- package/dist/secret-expiration.d.ts +46 -0
- package/dist/secret-expiration.js +172 -0
- package/dist/secret-expiration.js.map +1 -0
- package/dist/secrets-migrate.d.ts +75 -0
- package/dist/secrets-migrate.js +185 -0
- package/dist/secrets-migrate.js.map +1 -0
- package/dist/secrets-model.d.ts +77 -0
- package/dist/secrets-model.js +6 -0
- package/dist/secrets-model.js.map +1 -0
- package/dist/secrets-onecli.d.ts +65 -0
- package/dist/secrets-onecli.js +113 -0
- package/dist/secrets-onecli.js.map +1 -0
- package/dist/secrets-propagate.d.ts +48 -0
- package/dist/secrets-propagate.js +201 -0
- package/dist/secrets-propagate.js.map +1 -0
- package/dist/secrets-pull.d.ts +34 -0
- package/dist/secrets-pull.js +118 -0
- package/dist/secrets-pull.js.map +1 -0
- package/dist/secrets-purge-history.d.ts +53 -0
- package/dist/secrets-purge-history.js +144 -0
- package/dist/secrets-purge-history.js.map +1 -0
- package/dist/secrets-rotate-cli.d.ts +54 -0
- package/dist/secrets-rotate-cli.js +438 -0
- package/dist/secrets-rotate-cli.js.map +1 -0
- package/dist/secrets-rotate.d.ts +38 -0
- package/dist/secrets-rotate.js +65 -0
- package/dist/secrets-rotate.js.map +1 -0
- package/dist/secrets-service.d.ts +73 -0
- package/dist/secrets-service.js +283 -0
- package/dist/secrets-service.js.map +1 -0
- package/dist/secrets-set.d.ts +25 -0
- package/dist/secrets-set.js +33 -0
- package/dist/secrets-set.js.map +1 -0
- package/dist/secrets-sync.d.ts +21 -0
- package/dist/secrets-sync.js +215 -0
- package/dist/secrets-sync.js.map +1 -0
- package/dist/secrets-validate.d.ts +41 -0
- package/dist/secrets-validate.js +126 -0
- package/dist/secrets-validate.js.map +1 -0
- package/dist/secrets-vault-migrate.d.ts +71 -0
- package/dist/secrets-vault-migrate.js +258 -0
- package/dist/secrets-vault-migrate.js.map +1 -0
- package/dist/secrets.d.ts +16 -0
- package/dist/secrets.js +72 -0
- package/dist/secrets.js.map +1 -0
- package/dist/security-hardening.d.ts +150 -0
- package/dist/security-hardening.js +275 -0
- package/dist/security-hardening.js.map +1 -0
- package/dist/security-policy.d.ts +89 -0
- package/dist/security-policy.js +174 -0
- package/dist/security-policy.js.map +1 -0
- package/dist/security-prescan.d.ts +117 -0
- package/dist/security-prescan.js +566 -0
- package/dist/security-prescan.js.map +1 -0
- package/dist/sentry-adapter.d.ts +49 -0
- package/dist/sentry-adapter.js +227 -0
- package/dist/sentry-adapter.js.map +1 -0
- package/dist/service-adapter.d.ts +94 -0
- package/dist/service-adapter.js +162 -0
- package/dist/service-adapter.js.map +1 -0
- package/dist/skills.d.ts +13 -0
- package/dist/skills.js +17 -0
- package/dist/skills.js.map +1 -0
- package/dist/sla-monitor.d.ts +107 -0
- package/dist/sla-monitor.js +233 -0
- package/dist/sla-monitor.js.map +1 -0
- package/dist/stack-detector.d.ts +12 -0
- package/dist/stack-detector.js +251 -0
- package/dist/stack-detector.js.map +1 -0
- package/dist/team-model.d.ts +58 -0
- package/dist/team-model.js +83 -0
- package/dist/team-model.js.map +1 -0
- package/dist/team-service.d.ts +54 -0
- package/dist/team-service.js +206 -0
- package/dist/team-service.js.map +1 -0
- package/dist/toml-generator.d.ts +8 -0
- package/dist/toml-generator.js +223 -0
- package/dist/toml-generator.js.map +1 -0
- package/dist/triage-sandbox.d.ts +34 -0
- package/dist/triage-sandbox.js +167 -0
- package/dist/triage-sandbox.js.map +1 -0
- package/dist/triage.d.ts +30 -0
- package/dist/triage.js +79 -0
- package/dist/triage.js.map +1 -0
- package/dist/update-check.d.ts +13 -0
- package/dist/update-check.js +91 -0
- package/dist/update-check.js.map +1 -0
- package/dist/utils/colors.d.ts +14 -0
- package/dist/utils/colors.js +15 -0
- package/dist/utils/colors.js.map +1 -0
- package/dist/utils/didYouMean.d.ts +15 -0
- package/dist/utils/didYouMean.js +47 -0
- package/dist/utils/didYouMean.js.map +1 -0
- package/dist/utils/exec.d.ts +21 -0
- package/dist/utils/exec.js +23 -0
- package/dist/utils/exec.js.map +1 -0
- package/dist/utils/execFileNoThrow.d.ts +14 -0
- package/dist/utils/execFileNoThrow.js +29 -0
- package/dist/utils/execFileNoThrow.js.map +1 -0
- package/dist/utils/flags.d.ts +19 -0
- package/dist/utils/flags.js +36 -0
- package/dist/utils/flags.js.map +1 -0
- package/dist/utils/parseCommand.d.ts +16 -0
- package/dist/utils/parseCommand.js +13 -0
- package/dist/utils/parseCommand.js.map +1 -0
- package/dist/utils/prompt.d.ts +13 -0
- package/dist/utils/prompt.js +35 -0
- package/dist/utils/prompt.js.map +1 -0
- package/dist/utils/promptSelect.d.ts +19 -0
- package/dist/utils/promptSelect.js +89 -0
- package/dist/utils/promptSelect.js.map +1 -0
- package/dist/utils/redactSecrets.d.ts +24 -0
- package/dist/utils/redactSecrets.js +134 -0
- package/dist/utils/redactSecrets.js.map +1 -0
- package/dist/validation/dynamic-schema.d.ts +29 -0
- package/dist/validation/dynamic-schema.js +76 -0
- package/dist/validation/dynamic-schema.js.map +1 -0
- package/package.json +52 -0
package/dist/baseline.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic baseline file for any kit check category.
|
|
3
|
+
*
|
|
4
|
+
* Pattern (copied from `.checkov.yaml`): freeze the set of currently
|
|
5
|
+
* acceptable warnings so future runs only fail on NET-NEW findings.
|
|
6
|
+
*
|
|
7
|
+
* One file (`.kit-baseline.json`) keyed by check category. Stale
|
|
8
|
+
* entries auto-prune on `kit baseline freeze` so the file shrinks
|
|
9
|
+
* as the codebase improves.
|
|
10
|
+
*
|
|
11
|
+
* {
|
|
12
|
+
* "version": 1,
|
|
13
|
+
* "generated": "2026-05-30T09:50:00Z",
|
|
14
|
+
* "categories": {
|
|
15
|
+
* "tests": { "untested_files": ["src/legacy.ts", ...] },
|
|
16
|
+
* "design": { "a11y_violations": ["btn-name", "color-contrast"] }
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
*/
|
|
20
|
+
import { readFile, writeFile, access } from "node:fs/promises";
|
|
21
|
+
import { resolve } from "node:path";
|
|
22
|
+
export const BASELINE_FILE = ".kit-baseline.json";
|
|
23
|
+
const EMPTY_BASELINE = {
|
|
24
|
+
version: 1,
|
|
25
|
+
generated: new Date(0).toISOString(),
|
|
26
|
+
categories: {},
|
|
27
|
+
};
|
|
28
|
+
async function pathExists(p) {
|
|
29
|
+
try {
|
|
30
|
+
await access(p);
|
|
31
|
+
return true;
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export async function loadBaseline(cwd = process.cwd()) {
|
|
38
|
+
const path = resolve(cwd, BASELINE_FILE);
|
|
39
|
+
if (!(await pathExists(path)))
|
|
40
|
+
return { ...EMPTY_BASELINE };
|
|
41
|
+
try {
|
|
42
|
+
const raw = await readFile(path, "utf-8");
|
|
43
|
+
const parsed = JSON.parse(raw);
|
|
44
|
+
if (parsed.version !== 1)
|
|
45
|
+
throw new Error(`unsupported baseline version: ${parsed.version}`);
|
|
46
|
+
return parsed;
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
throw new Error(`failed to read ${BASELINE_FILE}: ${err instanceof Error ? err.message : String(err)}`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** Lookup baseline entries for one category + key. Returns empty array if absent. */
|
|
53
|
+
export function baselineGet(baseline, category, key) {
|
|
54
|
+
return baseline.categories[category]?.[key] ?? [];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Replace the entries for one category+key. Mutates `baseline`.
|
|
58
|
+
* Empty array drops the key. Empty category drops the category.
|
|
59
|
+
*/
|
|
60
|
+
export function baselineSet(baseline, category, key, entries) {
|
|
61
|
+
if (entries.length === 0) {
|
|
62
|
+
if (baseline.categories[category]) {
|
|
63
|
+
delete baseline.categories[category][key];
|
|
64
|
+
if (Object.keys(baseline.categories[category]).length === 0) {
|
|
65
|
+
delete baseline.categories[category];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
baseline.categories[category] ??= {};
|
|
71
|
+
baseline.categories[category][key] = [...entries].sort();
|
|
72
|
+
}
|
|
73
|
+
export async function saveBaseline(baseline, cwd = process.cwd()) {
|
|
74
|
+
baseline.generated = new Date().toISOString();
|
|
75
|
+
const path = resolve(cwd, BASELINE_FILE);
|
|
76
|
+
await writeFile(path, JSON.stringify(baseline, null, 2) + "\n", "utf-8");
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=baseline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"baseline.js","sourceRoot":"","sources":["../src/baseline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kit Beta Program Service
|
|
3
|
+
*
|
|
4
|
+
* Manages community developer beta enrollment, feedback collection, and certification
|
|
5
|
+
* refinement based on real-world plugin usage patterns.
|
|
6
|
+
*/
|
|
7
|
+
export interface BetaDeveloper {
|
|
8
|
+
id: string;
|
|
9
|
+
email: string;
|
|
10
|
+
name: string;
|
|
11
|
+
organization?: string;
|
|
12
|
+
enrolledAt: string;
|
|
13
|
+
status: "active" | "inactive" | "churned";
|
|
14
|
+
pluginsTested: string[];
|
|
15
|
+
feedbackCount: number;
|
|
16
|
+
lastActivityAt?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface PluginFeedback {
|
|
19
|
+
id: string;
|
|
20
|
+
pluginId: string;
|
|
21
|
+
developerId: string;
|
|
22
|
+
rating: number;
|
|
23
|
+
category: "usability" | "stability" | "performance" | "documentation" | "feature-request" | "bug";
|
|
24
|
+
title: string;
|
|
25
|
+
description: string;
|
|
26
|
+
severity?: "low" | "medium" | "high" | "critical";
|
|
27
|
+
status: "open" | "acknowledged" | "addressed" | "wontfix";
|
|
28
|
+
createdAt: string;
|
|
29
|
+
updatedAt: string;
|
|
30
|
+
}
|
|
31
|
+
export interface CertificationRefinement {
|
|
32
|
+
id: string;
|
|
33
|
+
category: string;
|
|
34
|
+
description: string;
|
|
35
|
+
feedbackCount: number;
|
|
36
|
+
severity: "informational" | "warning" | "critical";
|
|
37
|
+
status: "proposed" | "under-review" | "approved" | "implemented";
|
|
38
|
+
affectedPlugins: string[];
|
|
39
|
+
createdAt: string;
|
|
40
|
+
implementedAt?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface BetaProgram {
|
|
43
|
+
id: string;
|
|
44
|
+
name: string;
|
|
45
|
+
targetDevelopers: number;
|
|
46
|
+
enrolledDevelopers: number;
|
|
47
|
+
status: "recruiting" | "active" | "closed";
|
|
48
|
+
startDate: string;
|
|
49
|
+
endDate?: string;
|
|
50
|
+
feedbackItems: number;
|
|
51
|
+
refinementsProposed: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Beta program management service
|
|
55
|
+
*/
|
|
56
|
+
export declare class BetaProgramService {
|
|
57
|
+
private db;
|
|
58
|
+
constructor(db?: any);
|
|
59
|
+
/**
|
|
60
|
+
* Enroll developer in beta program
|
|
61
|
+
*/
|
|
62
|
+
enrollDeveloper(email: string, name: string, organization?: string): Promise<BetaDeveloper>;
|
|
63
|
+
/**
|
|
64
|
+
* Submit feedback on plugin
|
|
65
|
+
*/
|
|
66
|
+
submitFeedback(pluginId: string, developerId: string, rating: number, category: string, title: string, description: string, severity?: string): Promise<PluginFeedback>;
|
|
67
|
+
/**
|
|
68
|
+
* Get feedback for plugin
|
|
69
|
+
*/
|
|
70
|
+
getPluginFeedback(pluginId: string): Promise<PluginFeedback[]>;
|
|
71
|
+
/**
|
|
72
|
+
* Get developer feedback history
|
|
73
|
+
*/
|
|
74
|
+
getDeveloperFeedback(developerId: string): Promise<PluginFeedback[]>;
|
|
75
|
+
/**
|
|
76
|
+
* Aggregate feedback to identify certification refinements
|
|
77
|
+
*/
|
|
78
|
+
identifyRefinements(): Promise<CertificationRefinement[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Get beta program status
|
|
81
|
+
*/
|
|
82
|
+
getBetaProgramStatus(): Promise<BetaProgram>;
|
|
83
|
+
/**
|
|
84
|
+
* Get developer profile with feedback summary
|
|
85
|
+
*/
|
|
86
|
+
getDeveloperProfile(developerId: string): Promise<BetaDeveloper | null>;
|
|
87
|
+
/**
|
|
88
|
+
* Get beta developers
|
|
89
|
+
*/
|
|
90
|
+
getBetaDevelopers(limit?: number): Promise<BetaDeveloper[]>;
|
|
91
|
+
/**
|
|
92
|
+
* Update feedback status
|
|
93
|
+
*/
|
|
94
|
+
updateFeedbackStatus(feedbackId: string, status: string): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Get feedback analytics
|
|
97
|
+
*/
|
|
98
|
+
getFeedbackAnalytics(): Promise<{
|
|
99
|
+
totalFeedback: number;
|
|
100
|
+
byCategory: {
|
|
101
|
+
category: string;
|
|
102
|
+
count: number;
|
|
103
|
+
}[];
|
|
104
|
+
bySeverity: {
|
|
105
|
+
severity: string;
|
|
106
|
+
count: number;
|
|
107
|
+
}[];
|
|
108
|
+
avgRating: number;
|
|
109
|
+
}>;
|
|
110
|
+
private mapBetaDeveloper;
|
|
111
|
+
private mapPluginFeedback;
|
|
112
|
+
}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* kit Beta Program Service
|
|
3
|
+
*
|
|
4
|
+
* Manages community developer beta enrollment, feedback collection, and certification
|
|
5
|
+
* refinement based on real-world plugin usage patterns.
|
|
6
|
+
*/
|
|
7
|
+
import { IdGenerators } from "./id-generator.js";
|
|
8
|
+
/**
|
|
9
|
+
* Beta program management service
|
|
10
|
+
*/
|
|
11
|
+
export class BetaProgramService {
|
|
12
|
+
db;
|
|
13
|
+
constructor(db) {
|
|
14
|
+
this.db = db;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Enroll developer in beta program
|
|
18
|
+
*/
|
|
19
|
+
async enrollDeveloper(email, name, organization) {
|
|
20
|
+
const id = IdGenerators.betaDev();
|
|
21
|
+
const result = await this.db.query(`
|
|
22
|
+
INSERT INTO beta_developers (id, email, name, organization, enrolled_at, status)
|
|
23
|
+
VALUES ($1, $2, $3, $4, now(), $5)
|
|
24
|
+
RETURNING *
|
|
25
|
+
`, [id, email, name, organization || null, "active"]);
|
|
26
|
+
return this.mapBetaDeveloper(result.rows[0]);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Submit feedback on plugin
|
|
30
|
+
*/
|
|
31
|
+
async submitFeedback(pluginId, developerId, rating, category, title, description, severity) {
|
|
32
|
+
if (rating < 1 || rating > 5) {
|
|
33
|
+
throw new Error("Rating must be between 1 and 5");
|
|
34
|
+
}
|
|
35
|
+
const id = IdGenerators.feedback();
|
|
36
|
+
const result = await this.db.query(`
|
|
37
|
+
INSERT INTO plugin_feedback
|
|
38
|
+
(id, plugin_id, developer_id, rating, category, title, description, severity, status, created_at, updated_at)
|
|
39
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, now(), now())
|
|
40
|
+
RETURNING *
|
|
41
|
+
`, [id, pluginId, developerId, rating, category, title, description, severity || "medium", "open"]);
|
|
42
|
+
// Update developer activity
|
|
43
|
+
await this.db.query(`
|
|
44
|
+
UPDATE beta_developers
|
|
45
|
+
SET last_activity_at = now()
|
|
46
|
+
WHERE id = $1
|
|
47
|
+
`, [developerId]);
|
|
48
|
+
return this.mapPluginFeedback(result.rows[0]);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Get feedback for plugin
|
|
52
|
+
*/
|
|
53
|
+
async getPluginFeedback(pluginId) {
|
|
54
|
+
const result = await this.db.query(`
|
|
55
|
+
SELECT * FROM plugin_feedback
|
|
56
|
+
WHERE plugin_id = $1
|
|
57
|
+
ORDER BY created_at DESC
|
|
58
|
+
`, [pluginId]);
|
|
59
|
+
return result.rows.map((row) => this.mapPluginFeedback(row));
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get developer feedback history
|
|
63
|
+
*/
|
|
64
|
+
async getDeveloperFeedback(developerId) {
|
|
65
|
+
const result = await this.db.query(`
|
|
66
|
+
SELECT * FROM plugin_feedback
|
|
67
|
+
WHERE developer_id = $1
|
|
68
|
+
ORDER BY created_at DESC
|
|
69
|
+
`, [developerId]);
|
|
70
|
+
return result.rows.map((row) => this.mapPluginFeedback(row));
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Aggregate feedback to identify certification refinements
|
|
74
|
+
*/
|
|
75
|
+
async identifyRefinements() {
|
|
76
|
+
const result = await this.db.query(`
|
|
77
|
+
SELECT
|
|
78
|
+
category,
|
|
79
|
+
severity,
|
|
80
|
+
COUNT(*) as feedback_count,
|
|
81
|
+
ARRAY_AGG(DISTINCT plugin_id) as affected_plugins
|
|
82
|
+
FROM plugin_feedback
|
|
83
|
+
WHERE status = $1 AND severity IN ($2, $3, $4)
|
|
84
|
+
GROUP BY category, severity
|
|
85
|
+
HAVING COUNT(*) >= 3
|
|
86
|
+
ORDER BY feedback_count DESC
|
|
87
|
+
`, ["open", "medium", "high", "critical"]);
|
|
88
|
+
const refinements = [];
|
|
89
|
+
for (const row of result.rows) {
|
|
90
|
+
refinements.push({
|
|
91
|
+
id: IdGenerators.refine(),
|
|
92
|
+
category: row.category,
|
|
93
|
+
description: `${row.feedback_count} developers reported issues with ${row.category}`,
|
|
94
|
+
feedbackCount: row.feedback_count,
|
|
95
|
+
severity: row.severity,
|
|
96
|
+
status: "proposed",
|
|
97
|
+
affectedPlugins: row.affected_plugins || [],
|
|
98
|
+
createdAt: new Date().toISOString(),
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return refinements;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get beta program status
|
|
105
|
+
*/
|
|
106
|
+
async getBetaProgramStatus() {
|
|
107
|
+
// Active program
|
|
108
|
+
const devResult = await this.db.query(`
|
|
109
|
+
SELECT COUNT(*) as enrolled FROM beta_developers WHERE status = $1
|
|
110
|
+
`, ["active"]);
|
|
111
|
+
const feedbackResult = await this.db.query(`
|
|
112
|
+
SELECT COUNT(*) as total FROM plugin_feedback
|
|
113
|
+
`);
|
|
114
|
+
const refinementResult = await this.db.query(`
|
|
115
|
+
SELECT COUNT(*) as total FROM certification_refinements WHERE status = $1
|
|
116
|
+
`, ["proposed"]);
|
|
117
|
+
return {
|
|
118
|
+
id: "beta-main-2026",
|
|
119
|
+
name: "kit Community Beta Launch",
|
|
120
|
+
targetDevelopers: 20,
|
|
121
|
+
enrolledDevelopers: devResult.rows[0]?.enrolled || 0,
|
|
122
|
+
status: "active",
|
|
123
|
+
startDate: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString(), // 1 week ago
|
|
124
|
+
feedbackItems: feedbackResult.rows[0]?.total || 0,
|
|
125
|
+
refinementsProposed: refinementResult.rows[0]?.total || 0,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get developer profile with feedback summary
|
|
130
|
+
*/
|
|
131
|
+
async getDeveloperProfile(developerId) {
|
|
132
|
+
const result = await this.db.query(`
|
|
133
|
+
SELECT
|
|
134
|
+
bd.*,
|
|
135
|
+
COUNT(DISTINCT pf.id) as feedback_count,
|
|
136
|
+
ARRAY_AGG(DISTINCT pf.plugin_id) as plugins_tested
|
|
137
|
+
FROM beta_developers bd
|
|
138
|
+
LEFT JOIN plugin_feedback pf ON bd.id = pf.developer_id
|
|
139
|
+
WHERE bd.id = $1
|
|
140
|
+
GROUP BY bd.id
|
|
141
|
+
`, [developerId]);
|
|
142
|
+
if (result.rows.length === 0) {
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
145
|
+
const row = result.rows[0];
|
|
146
|
+
return {
|
|
147
|
+
id: row.id,
|
|
148
|
+
email: row.email,
|
|
149
|
+
name: row.name,
|
|
150
|
+
organization: row.organization,
|
|
151
|
+
enrolledAt: row.enrolled_at,
|
|
152
|
+
status: row.status,
|
|
153
|
+
pluginsTested: row.plugins_tested || [],
|
|
154
|
+
feedbackCount: row.feedback_count || 0,
|
|
155
|
+
lastActivityAt: row.last_activity_at,
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Get beta developers
|
|
160
|
+
*/
|
|
161
|
+
async getBetaDevelopers(limit = 50) {
|
|
162
|
+
const result = await this.db.query(`
|
|
163
|
+
SELECT * FROM beta_developers
|
|
164
|
+
WHERE status = $1
|
|
165
|
+
ORDER BY last_activity_at DESC
|
|
166
|
+
LIMIT $2
|
|
167
|
+
`, ["active", limit]);
|
|
168
|
+
return result.rows.map((row) => this.mapBetaDeveloper(row));
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Update feedback status
|
|
172
|
+
*/
|
|
173
|
+
async updateFeedbackStatus(feedbackId, status) {
|
|
174
|
+
await this.db.query(`
|
|
175
|
+
UPDATE plugin_feedback
|
|
176
|
+
SET status = $1, updated_at = now()
|
|
177
|
+
WHERE id = $2
|
|
178
|
+
`, [status, feedbackId]);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Get feedback analytics
|
|
182
|
+
*/
|
|
183
|
+
async getFeedbackAnalytics() {
|
|
184
|
+
const totalResult = await this.db.query(`SELECT COUNT(*) as total FROM plugin_feedback`);
|
|
185
|
+
const categoryResult = await this.db.query(`
|
|
186
|
+
SELECT category, COUNT(*) as count
|
|
187
|
+
FROM plugin_feedback
|
|
188
|
+
GROUP BY category
|
|
189
|
+
ORDER BY count DESC
|
|
190
|
+
`);
|
|
191
|
+
const severityResult = await this.db.query(`
|
|
192
|
+
SELECT severity, COUNT(*) as count
|
|
193
|
+
FROM plugin_feedback
|
|
194
|
+
GROUP BY severity
|
|
195
|
+
ORDER BY count DESC
|
|
196
|
+
`);
|
|
197
|
+
const ratingResult = await this.db.query(`SELECT AVG(rating) as avg FROM plugin_feedback`);
|
|
198
|
+
return {
|
|
199
|
+
totalFeedback: totalResult.rows[0]?.total || 0,
|
|
200
|
+
byCategory: categoryResult.rows.map((row) => ({
|
|
201
|
+
category: row.category,
|
|
202
|
+
count: row.count,
|
|
203
|
+
})),
|
|
204
|
+
bySeverity: severityResult.rows.map((row) => ({
|
|
205
|
+
severity: row.severity,
|
|
206
|
+
count: row.count,
|
|
207
|
+
})),
|
|
208
|
+
avgRating: parseFloat(ratingResult.rows[0]?.avg) || 0,
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
mapBetaDeveloper(row) {
|
|
212
|
+
return {
|
|
213
|
+
id: row.id,
|
|
214
|
+
email: row.email,
|
|
215
|
+
name: row.name,
|
|
216
|
+
organization: row.organization,
|
|
217
|
+
enrolledAt: row.enrolled_at,
|
|
218
|
+
status: row.status,
|
|
219
|
+
pluginsTested: row.plugins_tested || [],
|
|
220
|
+
feedbackCount: row.feedback_count || 0,
|
|
221
|
+
lastActivityAt: row.last_activity_at,
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
mapPluginFeedback(row) {
|
|
225
|
+
return {
|
|
226
|
+
id: row.id,
|
|
227
|
+
pluginId: row.plugin_id,
|
|
228
|
+
developerId: row.developer_id,
|
|
229
|
+
rating: row.rating,
|
|
230
|
+
category: row.category,
|
|
231
|
+
title: row.title,
|
|
232
|
+
description: row.description,
|
|
233
|
+
severity: row.severity,
|
|
234
|
+
status: row.status,
|
|
235
|
+
createdAt: row.created_at,
|
|
236
|
+
updatedAt: row.updated_at,
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=beta-program-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"beta-program-service.js","sourceRoot":"","sources":["../src/beta-program-service.ts"],"names":[],"mappings":"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"}
|
package/dist/budget.d.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { GovernanceConfig } from "./config.js";
|
|
2
|
+
/**
|
|
3
|
+
* Check if operation is within budget limits
|
|
4
|
+
*/
|
|
5
|
+
export declare function checkBudgetLimits(config: GovernanceConfig | undefined, estimatedTokens?: number): Promise<{
|
|
6
|
+
allowed: boolean;
|
|
7
|
+
reason?: string;
|
|
8
|
+
}>;
|
|
9
|
+
/**
|
|
10
|
+
* Record token and operation usage
|
|
11
|
+
*/
|
|
12
|
+
export declare function recordUsage(config: GovernanceConfig | undefined, tokensUsed: number): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Get current budget status for display
|
|
15
|
+
*/
|
|
16
|
+
export declare function getBudgetStatus(config: GovernanceConfig | undefined): Promise<{
|
|
17
|
+
tokens_used: number;
|
|
18
|
+
tokens_limit: number | undefined;
|
|
19
|
+
operations_used: number;
|
|
20
|
+
operations_limit: number | undefined;
|
|
21
|
+
}>;
|
|
22
|
+
/**
|
|
23
|
+
* Format budget status for display
|
|
24
|
+
*/
|
|
25
|
+
export declare function formatBudgetStatus(status: {
|
|
26
|
+
tokens_used: number;
|
|
27
|
+
tokens_limit: number | undefined;
|
|
28
|
+
operations_used: number;
|
|
29
|
+
operations_limit: number | undefined;
|
|
30
|
+
}): string;
|
|
31
|
+
/**
|
|
32
|
+
* Clear budget state (for testing/development)
|
|
33
|
+
*/
|
|
34
|
+
export declare function clearBudgetState(): Promise<void>;
|
package/dist/budget.js
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { readFile, writeFile, mkdir } from "node:fs/promises";
|
|
2
|
+
import { dirname, resolve } from "node:path";
|
|
3
|
+
import { mergeGovernanceConfig } from "./governance.js";
|
|
4
|
+
const BUDGET_STATE_FILE = ".kit-budget.json";
|
|
5
|
+
/**
|
|
6
|
+
* Check if operation is within budget limits
|
|
7
|
+
*/
|
|
8
|
+
export async function checkBudgetLimits(config, estimatedTokens = 0) {
|
|
9
|
+
const fullConfig = mergeGovernanceConfig(config);
|
|
10
|
+
if (!fullConfig.enabled) {
|
|
11
|
+
return { allowed: true };
|
|
12
|
+
}
|
|
13
|
+
const state = await loadBudgetState();
|
|
14
|
+
// Reset counters if needed
|
|
15
|
+
const now = new Date();
|
|
16
|
+
const resetState = resetCountersIfNeeded(state, now);
|
|
17
|
+
// Check token limit
|
|
18
|
+
const tokenLimit = fullConfig.agent.max_tokens_per_day;
|
|
19
|
+
if (tokenLimit && resetState.tokens_today + estimatedTokens > tokenLimit) {
|
|
20
|
+
return {
|
|
21
|
+
allowed: false,
|
|
22
|
+
reason: `Token budget exceeded: ${resetState.tokens_today}/${tokenLimit} used today`,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
// Check operation limit
|
|
26
|
+
const operationLimit = fullConfig.agent.max_operations_per_hour;
|
|
27
|
+
if (operationLimit &&
|
|
28
|
+
resetState.operations_this_hour >= operationLimit) {
|
|
29
|
+
return {
|
|
30
|
+
allowed: false,
|
|
31
|
+
reason: `Operation budget exceeded: ${resetState.operations_this_hour}/${operationLimit} operations this hour`,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
return { allowed: true };
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Record token and operation usage
|
|
38
|
+
*/
|
|
39
|
+
export async function recordUsage(config, tokensUsed) {
|
|
40
|
+
const fullConfig = mergeGovernanceConfig(config);
|
|
41
|
+
if (!fullConfig.enabled) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
const state = await loadBudgetState();
|
|
45
|
+
const now = new Date();
|
|
46
|
+
const resetState = resetCountersIfNeeded(state, now);
|
|
47
|
+
// Update usage
|
|
48
|
+
resetState.tokens_today += tokensUsed;
|
|
49
|
+
resetState.operations_this_hour += 1;
|
|
50
|
+
await saveBudgetState(resetState);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Load budget state from file
|
|
54
|
+
*/
|
|
55
|
+
async function loadBudgetState() {
|
|
56
|
+
const statePath = resolve(process.cwd(), BUDGET_STATE_FILE);
|
|
57
|
+
try {
|
|
58
|
+
const content = await readFile(statePath, "utf-8");
|
|
59
|
+
return JSON.parse(content);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// No state file exists, return fresh state
|
|
63
|
+
const now = new Date().toISOString();
|
|
64
|
+
return {
|
|
65
|
+
tokens_today: 0,
|
|
66
|
+
operations_this_hour: 0,
|
|
67
|
+
last_token_reset: now,
|
|
68
|
+
last_operation_reset: now,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Save budget state to file
|
|
74
|
+
*/
|
|
75
|
+
async function saveBudgetState(state) {
|
|
76
|
+
const statePath = resolve(process.cwd(), BUDGET_STATE_FILE);
|
|
77
|
+
try {
|
|
78
|
+
await mkdir(dirname(statePath), { recursive: true });
|
|
79
|
+
await writeFile(statePath, JSON.stringify(state, null, 2), "utf-8");
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
console.error("Failed to save budget state:", error);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Reset counters if time periods have elapsed
|
|
87
|
+
*/
|
|
88
|
+
function resetCountersIfNeeded(state, now) {
|
|
89
|
+
const newState = { ...state };
|
|
90
|
+
// Reset token counter at midnight
|
|
91
|
+
const lastTokenReset = new Date(state.last_token_reset);
|
|
92
|
+
const isNewDay = now.getDate() !== lastTokenReset.getDate();
|
|
93
|
+
if (isNewDay) {
|
|
94
|
+
newState.tokens_today = 0;
|
|
95
|
+
newState.last_token_reset = now.toISOString();
|
|
96
|
+
}
|
|
97
|
+
// Reset operation counter every hour
|
|
98
|
+
const lastOperationReset = new Date(state.last_operation_reset);
|
|
99
|
+
const elapsedHours = (now.getTime() - lastOperationReset.getTime()) / (1000 * 60 * 60);
|
|
100
|
+
if (elapsedHours >= 1) {
|
|
101
|
+
newState.operations_this_hour = 0;
|
|
102
|
+
newState.last_operation_reset = now.toISOString();
|
|
103
|
+
}
|
|
104
|
+
return newState;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get current budget status for display
|
|
108
|
+
*/
|
|
109
|
+
export async function getBudgetStatus(config) {
|
|
110
|
+
const fullConfig = mergeGovernanceConfig(config);
|
|
111
|
+
const state = await loadBudgetState();
|
|
112
|
+
const now = new Date();
|
|
113
|
+
const resetState = resetCountersIfNeeded(state, now);
|
|
114
|
+
return {
|
|
115
|
+
tokens_used: resetState.tokens_today,
|
|
116
|
+
tokens_limit: fullConfig.agent.max_tokens_per_day,
|
|
117
|
+
operations_used: resetState.operations_this_hour,
|
|
118
|
+
operations_limit: fullConfig.agent.max_operations_per_hour,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Format budget status for display
|
|
123
|
+
*/
|
|
124
|
+
export function formatBudgetStatus(status) {
|
|
125
|
+
const lines = [];
|
|
126
|
+
lines.push("Budget Status");
|
|
127
|
+
lines.push("─".repeat(50));
|
|
128
|
+
if (status.tokens_limit) {
|
|
129
|
+
const tokenPercent = ((status.tokens_used / status.tokens_limit) *
|
|
130
|
+
100).toFixed(1);
|
|
131
|
+
lines.push(`Tokens: ${status.tokens_used.toLocaleString()}/${status.tokens_limit.toLocaleString()} (${tokenPercent}%)`);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
lines.push(`Tokens: ${status.tokens_used.toLocaleString()} (no limit)`);
|
|
135
|
+
}
|
|
136
|
+
if (status.operations_limit) {
|
|
137
|
+
const opPercent = ((status.operations_used / status.operations_limit) *
|
|
138
|
+
100).toFixed(1);
|
|
139
|
+
lines.push(`Operations: ${status.operations_used}/${status.operations_limit} (${opPercent}%)`);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
lines.push(`Operations: ${status.operations_used} (no limit)`);
|
|
143
|
+
}
|
|
144
|
+
return lines.join("\n");
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Clear budget state (for testing/development)
|
|
148
|
+
*/
|
|
149
|
+
export async function clearBudgetState() {
|
|
150
|
+
const statePath = resolve(process.cwd(), BUDGET_STATE_FILE);
|
|
151
|
+
try {
|
|
152
|
+
const { unlink } = await import("node:fs/promises");
|
|
153
|
+
await unlink(statePath);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// Ignore if file doesn't exist
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=budget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"budget.js","sourceRoot":"","sources":["../src/budget.ts"],"names":[],"mappings":"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"}
|