gentyr 1.3.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/.claude/agents/antipattern-hunter.md +176 -0
- package/.claude/agents/code-reviewer.md +205 -0
- package/.claude/agents/code-writer.md +154 -0
- package/.claude/agents/deputy-cto.md +309 -0
- package/.claude/agents/feedback-agent.md +101 -0
- package/.claude/agents/investigator.md +136 -0
- package/.claude/agents/product-manager.md +97 -0
- package/.claude/agents/project-manager.md +116 -0
- package/.claude/agents/repo-hygiene-expert.md +626 -0
- package/.claude/agents/secret-manager.md +324 -0
- package/.claude/agents/test-writer.md +354 -0
- package/.claude/commands/configure-personas.md +144 -0
- package/.claude/commands/cto-report.md +36 -0
- package/.claude/commands/demo.md +89 -0
- package/.claude/commands/deputy-cto.md +345 -0
- package/.claude/commands/hotfix.md +31 -0
- package/.claude/commands/overdrive-gentyr.md +167 -0
- package/.claude/commands/product-manager.md +32 -0
- package/.claude/commands/push-migrations.md +86 -0
- package/.claude/commands/push-secrets.md +97 -0
- package/.claude/commands/services.json.example +30 -0
- package/.claude/commands/setup-gentyr.md +396 -0
- package/.claude/commands/show.md +42 -0
- package/.claude/commands/spawn-tasks.md +79 -0
- package/.claude/commands/toggle-automation-gentyr.md +75 -0
- package/.claude/commands/toggle-product-manager.md +19 -0
- package/.claude/commands/triage.md +69 -0
- package/.claude/hooks/README.md +686 -0
- package/.claude/hooks/__tests__/README.md +129 -0
- package/.claude/hooks/agent-tracker.js +434 -0
- package/.claude/hooks/antipattern-hunter-hook.js +401 -0
- package/.claude/hooks/api-key-watcher.js +289 -0
- package/.claude/hooks/block-no-verify.js +301 -0
- package/.claude/hooks/bypass-approval-hook.js +313 -0
- package/.claude/hooks/compliance-checker.js +1309 -0
- package/.claude/hooks/config-reader.js +143 -0
- package/.claude/hooks/credential-file-guard.js +1139 -0
- package/.claude/hooks/credential-health-check.js +168 -0
- package/.claude/hooks/credential-sync-hook.js +79 -0
- package/.claude/hooks/cto-notification-hook.js +656 -0
- package/.claude/hooks/feedback-launcher.js +424 -0
- package/.claude/hooks/feedback-orchestrator.js +367 -0
- package/.claude/hooks/gentyr-splash.js +47 -0
- package/.claude/hooks/gentyr-sync.js +389 -0
- package/.claude/hooks/hourly-automation.js +3340 -0
- package/.claude/hooks/key-sync.js +899 -0
- package/.claude/hooks/lib/approval-utils.js +731 -0
- package/.claude/hooks/lib/feature-branch-helper.js +102 -0
- package/.claude/hooks/lib/worktree-manager.js +330 -0
- package/.claude/hooks/mapping-validator.js +285 -0
- package/.claude/hooks/plan-executor.js +398 -0
- package/.claude/hooks/playwright-cli-guard.js +104 -0
- package/.claude/hooks/playwright-health-check.js +71 -0
- package/.claude/hooks/pre-commit-review.js +725 -0
- package/.claude/hooks/prompts/local-spec-enforcement.md +310 -0
- package/.claude/hooks/prompts/mapping-fix.md +92 -0
- package/.claude/hooks/prompts/mapping-review.md +140 -0
- package/.claude/hooks/prompts/schema-mapper.md +185 -0
- package/.claude/hooks/prompts/spec-enforcement.md +233 -0
- package/.claude/hooks/protected-action-approval-hook.js +336 -0
- package/.claude/hooks/protected-action-gate.js +562 -0
- package/.claude/hooks/protected-actions.json +208 -0
- package/.claude/hooks/protected-actions.json.template +122 -0
- package/.claude/hooks/quota-monitor.js +490 -0
- package/.claude/hooks/reporters/jest-failure-reporter.js +401 -0
- package/.claude/hooks/reporters/playwright-failure-reporter.js +446 -0
- package/.claude/hooks/reporters/vitest-failure-reporter.js +443 -0
- package/.claude/hooks/schema-mapper-hook.js +544 -0
- package/.claude/hooks/secret-leak-detector.js +216 -0
- package/.claude/hooks/session-reviver.js +514 -0
- package/.claude/hooks/slash-command-prefetch.js +1145 -0
- package/.claude/hooks/stale-work-detector.js +205 -0
- package/.claude/hooks/stop-continue-hook.js +414 -0
- package/.claude/hooks/todo-maintenance.js +522 -0
- package/.claude/hooks/todo-processing-prompt.md +75 -0
- package/.claude/hooks/usage-optimizer.js +791 -0
- package/.claude/mcp/README.md +246 -0
- package/.claude/settings.json.template +168 -0
- package/.mcp.json.template +207 -0
- package/CLAUDE.md +340 -0
- package/CLAUDE.md.gentyr-section +89 -0
- package/LICENSE +21 -0
- package/README.md +297 -0
- package/cli/commands/init.js +471 -0
- package/cli/commands/migrate.js +132 -0
- package/cli/commands/protect.js +271 -0
- package/cli/commands/scaffold.js +48 -0
- package/cli/commands/status.js +133 -0
- package/cli/commands/sync.js +101 -0
- package/cli/commands/uninstall.js +207 -0
- package/cli/index.js +111 -0
- package/cli/lib/config-gen.js +214 -0
- package/cli/lib/resolve-framework.js +97 -0
- package/cli/lib/state.js +140 -0
- package/cli/lib/symlinks.js +260 -0
- package/docs/AUTOMATION-SYSTEMS.md +484 -0
- package/docs/BINARY-PATCHING.md +212 -0
- package/docs/CHANGELOG.md +2830 -0
- package/docs/CREDENTIAL-DETECTION.md +151 -0
- package/docs/CTO-DASHBOARD.md +476 -0
- package/docs/DEPLOYMENT-FLOW.md +477 -0
- package/docs/DEVELOPER.md +116 -0
- package/docs/Executive.md +372 -0
- package/docs/SECRET-PATHS.md +77 -0
- package/docs/SETUP-GUIDE.md +419 -0
- package/docs/STACK.md +109 -0
- package/docs/TESTING.md +440 -0
- package/docs/assets/claude-logo.svg +3 -0
- package/docs/sessions/2026-01-24-spec-suite-implementation.md +190 -0
- package/docs/sessions/2026-02-15-feedback-e2e-audit.md +484 -0
- package/docs/sessions/2026-02-20-credential-rotation-experiments.md +340 -0
- package/docs/sessions/TEST-COVERAGE-REPORT-2026-02-20.md +168 -0
- package/docs/shared/EPHEMERAL-STATE-FILES.md +115 -0
- package/docs/shared/PROTECTION-SYSTEM.md +341 -0
- package/husky/post-commit +10 -0
- package/husky/pre-commit +40 -0
- package/husky/pre-push +94 -0
- package/package.json +43 -0
- package/packages/cto-dashboard/package-lock.json +3510 -0
- package/packages/cto-dashboard/package.json +41 -0
- package/packages/cto-dashboard/pnpm-lock.yaml +2168 -0
- package/packages/mcp-servers/dist/__testUtils__/fixtures.d.ts +220 -0
- package/packages/mcp-servers/dist/__testUtils__/fixtures.d.ts.map +1 -0
- package/packages/mcp-servers/dist/__testUtils__/fixtures.js +376 -0
- package/packages/mcp-servers/dist/__testUtils__/fixtures.js.map +1 -0
- package/packages/mcp-servers/dist/__testUtils__/index.d.ts +121 -0
- package/packages/mcp-servers/dist/__testUtils__/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/__testUtils__/index.js +180 -0
- package/packages/mcp-servers/dist/__testUtils__/index.js.map +1 -0
- package/packages/mcp-servers/dist/__testUtils__/schemas.d.ts +84 -0
- package/packages/mcp-servers/dist/__testUtils__/schemas.d.ts.map +1 -0
- package/packages/mcp-servers/dist/__testUtils__/schemas.js +309 -0
- package/packages/mcp-servers/dist/__testUtils__/schemas.js.map +1 -0
- package/packages/mcp-servers/dist/agent-reports/index.d.ts +7 -0
- package/packages/mcp-servers/dist/agent-reports/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/agent-reports/index.js +8 -0
- package/packages/mcp-servers/dist/agent-reports/index.js.map +1 -0
- package/packages/mcp-servers/dist/agent-reports/server.d.ts +22 -0
- package/packages/mcp-servers/dist/agent-reports/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/agent-reports/server.js +535 -0
- package/packages/mcp-servers/dist/agent-reports/server.js.map +1 -0
- package/packages/mcp-servers/dist/agent-reports/types.d.ts +258 -0
- package/packages/mcp-servers/dist/agent-reports/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/agent-reports/types.js +81 -0
- package/packages/mcp-servers/dist/agent-reports/types.js.map +1 -0
- package/packages/mcp-servers/dist/agent-tracker/index.d.ts +5 -0
- package/packages/mcp-servers/dist/agent-tracker/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/agent-tracker/index.js +5 -0
- package/packages/mcp-servers/dist/agent-tracker/index.js.map +1 -0
- package/packages/mcp-servers/dist/agent-tracker/server.d.ts +12 -0
- package/packages/mcp-servers/dist/agent-tracker/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/agent-tracker/server.js +919 -0
- package/packages/mcp-servers/dist/agent-tracker/server.js.map +1 -0
- package/packages/mcp-servers/dist/agent-tracker/types.d.ts +328 -0
- package/packages/mcp-servers/dist/agent-tracker/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/agent-tracker/types.js +128 -0
- package/packages/mcp-servers/dist/agent-tracker/types.js.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/browser-tips.d.ts +27 -0
- package/packages/mcp-servers/dist/chrome-bridge/browser-tips.d.ts.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/browser-tips.js +167 -0
- package/packages/mcp-servers/dist/chrome-bridge/browser-tips.js.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/index.d.ts +6 -0
- package/packages/mcp-servers/dist/chrome-bridge/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/index.js +6 -0
- package/packages/mcp-servers/dist/chrome-bridge/index.js.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/server.d.ts +13 -0
- package/packages/mcp-servers/dist/chrome-bridge/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/server.js +959 -0
- package/packages/mcp-servers/dist/chrome-bridge/server.js.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/types.d.ts +41 -0
- package/packages/mcp-servers/dist/chrome-bridge/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/chrome-bridge/types.js +8 -0
- package/packages/mcp-servers/dist/chrome-bridge/types.js.map +1 -0
- package/packages/mcp-servers/dist/cloudflare/index.d.ts +8 -0
- package/packages/mcp-servers/dist/cloudflare/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cloudflare/index.js +8 -0
- package/packages/mcp-servers/dist/cloudflare/index.js.map +1 -0
- package/packages/mcp-servers/dist/cloudflare/server.d.ts +16 -0
- package/packages/mcp-servers/dist/cloudflare/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cloudflare/server.js +253 -0
- package/packages/mcp-servers/dist/cloudflare/server.js.map +1 -0
- package/packages/mcp-servers/dist/cloudflare/types.d.ts +141 -0
- package/packages/mcp-servers/dist/cloudflare/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cloudflare/types.js +53 -0
- package/packages/mcp-servers/dist/cloudflare/types.js.map +1 -0
- package/packages/mcp-servers/dist/codecov/index.d.ts +7 -0
- package/packages/mcp-servers/dist/codecov/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/codecov/index.js +7 -0
- package/packages/mcp-servers/dist/codecov/index.js.map +1 -0
- package/packages/mcp-servers/dist/codecov/server.d.ts +21 -0
- package/packages/mcp-servers/dist/codecov/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/codecov/server.js +376 -0
- package/packages/mcp-servers/dist/codecov/server.js.map +1 -0
- package/packages/mcp-servers/dist/codecov/types.d.ts +269 -0
- package/packages/mcp-servers/dist/codecov/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/codecov/types.js +128 -0
- package/packages/mcp-servers/dist/codecov/types.js.map +1 -0
- package/packages/mcp-servers/dist/cto-report/index.d.ts +9 -0
- package/packages/mcp-servers/dist/cto-report/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cto-report/index.js +9 -0
- package/packages/mcp-servers/dist/cto-report/index.js.map +1 -0
- package/packages/mcp-servers/dist/cto-report/server.d.ts +14 -0
- package/packages/mcp-servers/dist/cto-report/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cto-report/server.js +859 -0
- package/packages/mcp-servers/dist/cto-report/server.js.map +1 -0
- package/packages/mcp-servers/dist/cto-report/types.d.ts +213 -0
- package/packages/mcp-servers/dist/cto-report/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cto-report/types.js +29 -0
- package/packages/mcp-servers/dist/cto-report/types.js.map +1 -0
- package/packages/mcp-servers/dist/cto-reports/index.d.ts +7 -0
- package/packages/mcp-servers/dist/cto-reports/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cto-reports/index.js +8 -0
- package/packages/mcp-servers/dist/cto-reports/index.js.map +1 -0
- package/packages/mcp-servers/dist/cto-reports/server.d.ts +20 -0
- package/packages/mcp-servers/dist/cto-reports/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cto-reports/server.js +538 -0
- package/packages/mcp-servers/dist/cto-reports/server.js.map +1 -0
- package/packages/mcp-servers/dist/cto-reports/types.d.ts +236 -0
- package/packages/mcp-servers/dist/cto-reports/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/cto-reports/types.js +77 -0
- package/packages/mcp-servers/dist/cto-reports/types.js.map +1 -0
- package/packages/mcp-servers/dist/deputy-cto/index.d.ts +7 -0
- package/packages/mcp-servers/dist/deputy-cto/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/deputy-cto/index.js +8 -0
- package/packages/mcp-servers/dist/deputy-cto/index.js.map +1 -0
- package/packages/mcp-servers/dist/deputy-cto/server.d.ts +23 -0
- package/packages/mcp-servers/dist/deputy-cto/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/deputy-cto/server.js +1700 -0
- package/packages/mcp-servers/dist/deputy-cto/server.js.map +1 -0
- package/packages/mcp-servers/dist/deputy-cto/types.d.ts +439 -0
- package/packages/mcp-servers/dist/deputy-cto/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/deputy-cto/types.js +102 -0
- package/packages/mcp-servers/dist/deputy-cto/types.js.map +1 -0
- package/packages/mcp-servers/dist/elastic-logs/index.d.ts +5 -0
- package/packages/mcp-servers/dist/elastic-logs/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/elastic-logs/index.js +5 -0
- package/packages/mcp-servers/dist/elastic-logs/index.js.map +1 -0
- package/packages/mcp-servers/dist/elastic-logs/server.d.ts +18 -0
- package/packages/mcp-servers/dist/elastic-logs/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/elastic-logs/server.js +259 -0
- package/packages/mcp-servers/dist/elastic-logs/server.js.map +1 -0
- package/packages/mcp-servers/dist/elastic-logs/types.d.ts +107 -0
- package/packages/mcp-servers/dist/elastic-logs/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/elastic-logs/types.js +31 -0
- package/packages/mcp-servers/dist/elastic-logs/types.js.map +1 -0
- package/packages/mcp-servers/dist/feedback-explorer/index.d.ts +2 -0
- package/packages/mcp-servers/dist/feedback-explorer/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/feedback-explorer/index.js +2 -0
- package/packages/mcp-servers/dist/feedback-explorer/index.js.map +1 -0
- package/packages/mcp-servers/dist/feedback-explorer/server.d.ts +21 -0
- package/packages/mcp-servers/dist/feedback-explorer/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/feedback-explorer/server.js +580 -0
- package/packages/mcp-servers/dist/feedback-explorer/server.js.map +1 -0
- package/packages/mcp-servers/dist/feedback-explorer/types.d.ts +331 -0
- package/packages/mcp-servers/dist/feedback-explorer/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/feedback-explorer/types.js +40 -0
- package/packages/mcp-servers/dist/feedback-explorer/types.js.map +1 -0
- package/packages/mcp-servers/dist/feedback-reporter/index.d.ts +9 -0
- package/packages/mcp-servers/dist/feedback-reporter/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/feedback-reporter/index.js +9 -0
- package/packages/mcp-servers/dist/feedback-reporter/index.js.map +1 -0
- package/packages/mcp-servers/dist/feedback-reporter/server.d.ts +36 -0
- package/packages/mcp-servers/dist/feedback-reporter/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/feedback-reporter/server.js +392 -0
- package/packages/mcp-servers/dist/feedback-reporter/server.js.map +1 -0
- package/packages/mcp-servers/dist/feedback-reporter/types.d.ts +152 -0
- package/packages/mcp-servers/dist/feedback-reporter/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/feedback-reporter/types.js +67 -0
- package/packages/mcp-servers/dist/feedback-reporter/types.js.map +1 -0
- package/packages/mcp-servers/dist/github/index.d.ts +7 -0
- package/packages/mcp-servers/dist/github/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/github/index.js +7 -0
- package/packages/mcp-servers/dist/github/index.js.map +1 -0
- package/packages/mcp-servers/dist/github/server.d.ts +15 -0
- package/packages/mcp-servers/dist/github/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/github/server.js +686 -0
- package/packages/mcp-servers/dist/github/server.js.map +1 -0
- package/packages/mcp-servers/dist/github/types.d.ts +660 -0
- package/packages/mcp-servers/dist/github/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/github/types.js +209 -0
- package/packages/mcp-servers/dist/github/types.js.map +1 -0
- package/packages/mcp-servers/dist/index.d.ts +30 -0
- package/packages/mcp-servers/dist/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/index.js +32 -0
- package/packages/mcp-servers/dist/index.js.map +1 -0
- package/packages/mcp-servers/dist/makerkit-docs/index.d.ts +5 -0
- package/packages/mcp-servers/dist/makerkit-docs/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/makerkit-docs/index.js +5 -0
- package/packages/mcp-servers/dist/makerkit-docs/index.js.map +1 -0
- package/packages/mcp-servers/dist/makerkit-docs/server.d.ts +15 -0
- package/packages/mcp-servers/dist/makerkit-docs/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/makerkit-docs/server.js +252 -0
- package/packages/mcp-servers/dist/makerkit-docs/server.js.map +1 -0
- package/packages/mcp-servers/dist/makerkit-docs/types.d.ts +74 -0
- package/packages/mcp-servers/dist/makerkit-docs/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/makerkit-docs/types.js +20 -0
- package/packages/mcp-servers/dist/makerkit-docs/types.js.map +1 -0
- package/packages/mcp-servers/dist/onepassword/index.d.ts +2 -0
- package/packages/mcp-servers/dist/onepassword/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/onepassword/index.js +2 -0
- package/packages/mcp-servers/dist/onepassword/index.js.map +1 -0
- package/packages/mcp-servers/dist/onepassword/server.d.ts +2 -0
- package/packages/mcp-servers/dist/onepassword/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/onepassword/server.js +159 -0
- package/packages/mcp-servers/dist/onepassword/server.js.map +1 -0
- package/packages/mcp-servers/dist/onepassword/types.d.ts +55 -0
- package/packages/mcp-servers/dist/onepassword/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/onepassword/types.js +22 -0
- package/packages/mcp-servers/dist/onepassword/types.js.map +1 -0
- package/packages/mcp-servers/dist/playwright/helpers.d.ts +20 -0
- package/packages/mcp-servers/dist/playwright/helpers.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright/helpers.js +31 -0
- package/packages/mcp-servers/dist/playwright/helpers.js.map +1 -0
- package/packages/mcp-servers/dist/playwright/index.d.ts +5 -0
- package/packages/mcp-servers/dist/playwright/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright/index.js +5 -0
- package/packages/mcp-servers/dist/playwright/index.js.map +1 -0
- package/packages/mcp-servers/dist/playwright/server.d.ts +13 -0
- package/packages/mcp-servers/dist/playwright/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright/server.js +1201 -0
- package/packages/mcp-servers/dist/playwright/server.js.map +1 -0
- package/packages/mcp-servers/dist/playwright/types.d.ts +216 -0
- package/packages/mcp-servers/dist/playwright/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright/types.js +172 -0
- package/packages/mcp-servers/dist/playwright/types.js.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/browser-manager.d.ts +39 -0
- package/packages/mcp-servers/dist/playwright-feedback/browser-manager.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/browser-manager.js +71 -0
- package/packages/mcp-servers/dist/playwright-feedback/browser-manager.js.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/index.d.ts +5 -0
- package/packages/mcp-servers/dist/playwright-feedback/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/index.js +5 -0
- package/packages/mcp-servers/dist/playwright-feedback/index.js.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/server.d.ts +34 -0
- package/packages/mcp-servers/dist/playwright-feedback/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/server.js +538 -0
- package/packages/mcp-servers/dist/playwright-feedback/server.js.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/types.d.ts +305 -0
- package/packages/mcp-servers/dist/playwright-feedback/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/playwright-feedback/types.js +123 -0
- package/packages/mcp-servers/dist/playwright-feedback/types.js.map +1 -0
- package/packages/mcp-servers/dist/product-manager/server.d.ts +17 -0
- package/packages/mcp-servers/dist/product-manager/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/product-manager/server.js +690 -0
- package/packages/mcp-servers/dist/product-manager/server.js.map +1 -0
- package/packages/mcp-servers/dist/product-manager/types.d.ts +286 -0
- package/packages/mcp-servers/dist/product-manager/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/product-manager/types.js +99 -0
- package/packages/mcp-servers/dist/product-manager/types.js.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/index.d.ts +7 -0
- package/packages/mcp-servers/dist/programmatic-feedback/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/index.js +7 -0
- package/packages/mcp-servers/dist/programmatic-feedback/index.js.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/sandbox.d.ts +19 -0
- package/packages/mcp-servers/dist/programmatic-feedback/sandbox.d.ts.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/sandbox.js +174 -0
- package/packages/mcp-servers/dist/programmatic-feedback/sandbox.js.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/server.d.ts +35 -0
- package/packages/mcp-servers/dist/programmatic-feedback/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/server.js +465 -0
- package/packages/mcp-servers/dist/programmatic-feedback/server.js.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/types.d.ts +127 -0
- package/packages/mcp-servers/dist/programmatic-feedback/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/programmatic-feedback/types.js +80 -0
- package/packages/mcp-servers/dist/programmatic-feedback/types.js.map +1 -0
- package/packages/mcp-servers/dist/render/index.d.ts +8 -0
- package/packages/mcp-servers/dist/render/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/render/index.js +8 -0
- package/packages/mcp-servers/dist/render/index.js.map +1 -0
- package/packages/mcp-servers/dist/render/server.d.ts +15 -0
- package/packages/mcp-servers/dist/render/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/render/server.js +428 -0
- package/packages/mcp-servers/dist/render/server.js.map +1 -0
- package/packages/mcp-servers/dist/render/types.d.ts +273 -0
- package/packages/mcp-servers/dist/render/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/render/types.js +102 -0
- package/packages/mcp-servers/dist/render/types.js.map +1 -0
- package/packages/mcp-servers/dist/resend/index.d.ts +7 -0
- package/packages/mcp-servers/dist/resend/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/resend/index.js +7 -0
- package/packages/mcp-servers/dist/resend/index.js.map +1 -0
- package/packages/mcp-servers/dist/resend/server.d.ts +15 -0
- package/packages/mcp-servers/dist/resend/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/resend/server.js +298 -0
- package/packages/mcp-servers/dist/resend/server.js.map +1 -0
- package/packages/mcp-servers/dist/resend/types.d.ts +222 -0
- package/packages/mcp-servers/dist/resend/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/resend/types.js +58 -0
- package/packages/mcp-servers/dist/resend/types.js.map +1 -0
- package/packages/mcp-servers/dist/review-queue/index.d.ts +6 -0
- package/packages/mcp-servers/dist/review-queue/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/review-queue/index.js +6 -0
- package/packages/mcp-servers/dist/review-queue/index.js.map +1 -0
- package/packages/mcp-servers/dist/review-queue/server.d.ts +17 -0
- package/packages/mcp-servers/dist/review-queue/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/review-queue/server.js +348 -0
- package/packages/mcp-servers/dist/review-queue/server.js.map +1 -0
- package/packages/mcp-servers/dist/review-queue/types.d.ts +162 -0
- package/packages/mcp-servers/dist/review-queue/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/review-queue/types.js +56 -0
- package/packages/mcp-servers/dist/review-queue/types.js.map +1 -0
- package/packages/mcp-servers/dist/secret-sync/server.d.ts +19 -0
- package/packages/mcp-servers/dist/secret-sync/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/secret-sync/server.js +1139 -0
- package/packages/mcp-servers/dist/secret-sync/server.js.map +1 -0
- package/packages/mcp-servers/dist/secret-sync/types.d.ts +442 -0
- package/packages/mcp-servers/dist/secret-sync/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/secret-sync/types.js +113 -0
- package/packages/mcp-servers/dist/secret-sync/types.js.map +1 -0
- package/packages/mcp-servers/dist/session-events/index.d.ts +5 -0
- package/packages/mcp-servers/dist/session-events/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/session-events/index.js +5 -0
- package/packages/mcp-servers/dist/session-events/index.js.map +1 -0
- package/packages/mcp-servers/dist/session-events/server.d.ts +11 -0
- package/packages/mcp-servers/dist/session-events/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/session-events/server.js +290 -0
- package/packages/mcp-servers/dist/session-events/server.js.map +1 -0
- package/packages/mcp-servers/dist/session-events/types.d.ts +213 -0
- package/packages/mcp-servers/dist/session-events/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/session-events/types.js +69 -0
- package/packages/mcp-servers/dist/session-events/types.js.map +1 -0
- package/packages/mcp-servers/dist/session-restart/index.d.ts +9 -0
- package/packages/mcp-servers/dist/session-restart/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/session-restart/index.js +9 -0
- package/packages/mcp-servers/dist/session-restart/index.js.map +1 -0
- package/packages/mcp-servers/dist/session-restart/server.d.ts +20 -0
- package/packages/mcp-servers/dist/session-restart/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/session-restart/server.js +411 -0
- package/packages/mcp-servers/dist/session-restart/server.js.map +1 -0
- package/packages/mcp-servers/dist/session-restart/types.d.ts +26 -0
- package/packages/mcp-servers/dist/session-restart/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/session-restart/types.js +16 -0
- package/packages/mcp-servers/dist/session-restart/types.js.map +1 -0
- package/packages/mcp-servers/dist/setup-helper/index.d.ts +5 -0
- package/packages/mcp-servers/dist/setup-helper/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/setup-helper/index.js +5 -0
- package/packages/mcp-servers/dist/setup-helper/index.js.map +1 -0
- package/packages/mcp-servers/dist/setup-helper/server.d.ts +14 -0
- package/packages/mcp-servers/dist/setup-helper/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/setup-helper/server.js +454 -0
- package/packages/mcp-servers/dist/setup-helper/server.js.map +1 -0
- package/packages/mcp-servers/dist/setup-helper/types.d.ts +81 -0
- package/packages/mcp-servers/dist/setup-helper/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/setup-helper/types.js +41 -0
- package/packages/mcp-servers/dist/setup-helper/types.js.map +1 -0
- package/packages/mcp-servers/dist/shared/audited-server.d.ts +31 -0
- package/packages/mcp-servers/dist/shared/audited-server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/shared/audited-server.js +126 -0
- package/packages/mcp-servers/dist/shared/audited-server.js.map +1 -0
- package/packages/mcp-servers/dist/shared/constants.d.ts +26 -0
- package/packages/mcp-servers/dist/shared/constants.d.ts.map +1 -0
- package/packages/mcp-servers/dist/shared/constants.js +41 -0
- package/packages/mcp-servers/dist/shared/constants.js.map +1 -0
- package/packages/mcp-servers/dist/shared/index.d.ts +6 -0
- package/packages/mcp-servers/dist/shared/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/shared/index.js +6 -0
- package/packages/mcp-servers/dist/shared/index.js.map +1 -0
- package/packages/mcp-servers/dist/shared/readonly-db.d.ts +11 -0
- package/packages/mcp-servers/dist/shared/readonly-db.d.ts.map +1 -0
- package/packages/mcp-servers/dist/shared/readonly-db.js +47 -0
- package/packages/mcp-servers/dist/shared/readonly-db.js.map +1 -0
- package/packages/mcp-servers/dist/shared/resolve-framework.d.ts +20 -0
- package/packages/mcp-servers/dist/shared/resolve-framework.d.ts.map +1 -0
- package/packages/mcp-servers/dist/shared/resolve-framework.js +65 -0
- package/packages/mcp-servers/dist/shared/resolve-framework.js.map +1 -0
- package/packages/mcp-servers/dist/shared/server.d.ts +86 -0
- package/packages/mcp-servers/dist/shared/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/shared/server.js +291 -0
- package/packages/mcp-servers/dist/shared/server.js.map +1 -0
- package/packages/mcp-servers/dist/shared/types.d.ts +113 -0
- package/packages/mcp-servers/dist/shared/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/shared/types.js +36 -0
- package/packages/mcp-servers/dist/shared/types.js.map +1 -0
- package/packages/mcp-servers/dist/show/server.d.ts +12 -0
- package/packages/mcp-servers/dist/show/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/show/server.js +97 -0
- package/packages/mcp-servers/dist/show/server.js.map +1 -0
- package/packages/mcp-servers/dist/show/types.d.ts +19 -0
- package/packages/mcp-servers/dist/show/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/show/types.js +32 -0
- package/packages/mcp-servers/dist/show/types.js.map +1 -0
- package/packages/mcp-servers/dist/specs-browser/index.d.ts +5 -0
- package/packages/mcp-servers/dist/specs-browser/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/specs-browser/index.js +5 -0
- package/packages/mcp-servers/dist/specs-browser/index.js.map +1 -0
- package/packages/mcp-servers/dist/specs-browser/server.d.ts +13 -0
- package/packages/mcp-servers/dist/specs-browser/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/specs-browser/server.js +692 -0
- package/packages/mcp-servers/dist/specs-browser/server.js.map +1 -0
- package/packages/mcp-servers/dist/specs-browser/types.d.ts +337 -0
- package/packages/mcp-servers/dist/specs-browser/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/specs-browser/types.js +134 -0
- package/packages/mcp-servers/dist/specs-browser/types.js.map +1 -0
- package/packages/mcp-servers/dist/supabase/index.d.ts +10 -0
- package/packages/mcp-servers/dist/supabase/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/supabase/index.js +10 -0
- package/packages/mcp-servers/dist/supabase/index.js.map +1 -0
- package/packages/mcp-servers/dist/supabase/server.d.ts +20 -0
- package/packages/mcp-servers/dist/supabase/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/supabase/server.js +451 -0
- package/packages/mcp-servers/dist/supabase/server.js.map +1 -0
- package/packages/mcp-servers/dist/supabase/types.d.ts +196 -0
- package/packages/mcp-servers/dist/supabase/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/supabase/types.js +76 -0
- package/packages/mcp-servers/dist/supabase/types.js.map +1 -0
- package/packages/mcp-servers/dist/todo-db/index.d.ts +5 -0
- package/packages/mcp-servers/dist/todo-db/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/todo-db/index.js +5 -0
- package/packages/mcp-servers/dist/todo-db/index.js.map +1 -0
- package/packages/mcp-servers/dist/todo-db/server.d.ts +13 -0
- package/packages/mcp-servers/dist/todo-db/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/todo-db/server.js +649 -0
- package/packages/mcp-servers/dist/todo-db/server.js.map +1 -0
- package/packages/mcp-servers/dist/todo-db/types.d.ts +225 -0
- package/packages/mcp-servers/dist/todo-db/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/todo-db/types.js +69 -0
- package/packages/mcp-servers/dist/todo-db/types.js.map +1 -0
- package/packages/mcp-servers/dist/user-feedback/index.d.ts +7 -0
- package/packages/mcp-servers/dist/user-feedback/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/user-feedback/index.js +8 -0
- package/packages/mcp-servers/dist/user-feedback/index.js.map +1 -0
- package/packages/mcp-servers/dist/user-feedback/server.d.ts +25 -0
- package/packages/mcp-servers/dist/user-feedback/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/user-feedback/server.js +914 -0
- package/packages/mcp-servers/dist/user-feedback/server.js.map +1 -0
- package/packages/mcp-servers/dist/user-feedback/types.d.ts +415 -0
- package/packages/mcp-servers/dist/user-feedback/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/user-feedback/types.js +132 -0
- package/packages/mcp-servers/dist/user-feedback/types.js.map +1 -0
- package/packages/mcp-servers/dist/vercel/index.d.ts +9 -0
- package/packages/mcp-servers/dist/vercel/index.d.ts.map +1 -0
- package/packages/mcp-servers/dist/vercel/index.js +9 -0
- package/packages/mcp-servers/dist/vercel/index.js.map +1 -0
- package/packages/mcp-servers/dist/vercel/server.d.ts +17 -0
- package/packages/mcp-servers/dist/vercel/server.d.ts.map +1 -0
- package/packages/mcp-servers/dist/vercel/server.js +265 -0
- package/packages/mcp-servers/dist/vercel/server.js.map +1 -0
- package/packages/mcp-servers/dist/vercel/types.d.ts +189 -0
- package/packages/mcp-servers/dist/vercel/types.d.ts.map +1 -0
- package/packages/mcp-servers/dist/vercel/types.js +65 -0
- package/packages/mcp-servers/dist/vercel/types.js.map +1 -0
- package/packages/mcp-servers/package-lock.json +3765 -0
- package/packages/mcp-servers/package.json +64 -0
- package/packages/mcp-servers/test/reporters/test-failure-reporter.ts +372 -0
- package/packages/mcp-servers/vitest.config.ts +27 -0
- package/scripts/__tests__/README.md +163 -0
- package/scripts/apply-credential-hardening.sh +271 -0
- package/scripts/credential-providers/manual.js +56 -0
- package/scripts/credential-providers/onepassword.js +85 -0
- package/scripts/credential-providers/provider-interface.js +104 -0
- package/scripts/encrypt-credential.js +337 -0
- package/scripts/feedback-launcher.js +338 -0
- package/scripts/feedback-orchestrator.js +373 -0
- package/scripts/fix-mcp-launcher-issues.sh +97 -0
- package/scripts/force-spawn-tasks.js +651 -0
- package/scripts/force-triage-reports.js +560 -0
- package/scripts/generate-protected-actions-spec.js +142 -0
- package/scripts/generate-proxy-certs.sh +158 -0
- package/scripts/grant-chrome-ext-permissions.sh +242 -0
- package/scripts/mcp-launcher.js +125 -0
- package/scripts/merge-settings.cjs +167 -0
- package/scripts/patch-clawd.py +844 -0
- package/scripts/patch-credential-cache.py +313 -0
- package/scripts/patches/credential-file-guard-patched.mjs +573 -0
- package/scripts/patches/credential-file-guard.js.patched +573 -0
- package/scripts/patches/verify-tokenizer.mjs +132 -0
- package/scripts/protect-framework.sh +478 -0
- package/scripts/readme-chrome.template +12 -0
- package/scripts/reap-completed-agents.js +439 -0
- package/scripts/reinstall.sh +86 -0
- package/scripts/resign-node.sh +185 -0
- package/scripts/rotation-proxy.js +656 -0
- package/scripts/rotation-stress-monitor.mjs +862 -0
- package/scripts/setup-automation-service.sh +648 -0
- package/scripts/setup-check.js +251 -0
- package/scripts/watch-claude-version.js +142 -0
- package/specs/framework/CORE-INVARIANTS.md +161 -0
- package/specs/patterns/AGENT-PATTERNS.md +223 -0
- package/specs/patterns/HOOK-PATTERNS.md +242 -0
- package/specs/patterns/MCP-SERVER-PATTERNS.md +144 -0
- package/templates/config/gitignore.template +14 -0
- package/templates/config/merge-chain-check.yml.template +51 -0
- package/templates/config/package.json.template +18 -0
- package/templates/config/pnpm-workspace.yaml +5 -0
- package/templates/config/services.json.template +18 -0
- package/templates/config/tsconfig.base.json +17 -0
- package/templates/scaffold/integrations/_template/.gitkeep +0 -0
- package/templates/scaffold/packages/logger/package.json +17 -0
- package/templates/scaffold/packages/logger/src/logger.ts +44 -0
- package/templates/scaffold/packages/shared/package.json +17 -0
- package/templates/scaffold/packages/shared/src/errors.ts +43 -0
- package/templates/scaffold/products/_product/apps/backend/package.json +21 -0
- package/templates/scaffold/products/_product/apps/backend/src/index.ts +17 -0
- package/templates/scaffold/products/_product/apps/extension/.gitkeep +0 -0
- package/templates/scaffold/products/_product/apps/web/.gitkeep +0 -0
- package/templates/scaffold/specs/global/.gitkeep +0 -0
- package/templates/scaffold/specs/local/.gitkeep +0 -0
- package/templates/scaffold/specs/reference/.gitkeep +0 -0
- package/version.json +15 -0
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
<!-- HOOK:GENTYR:setup-gentyr -->
|
|
2
|
+
# /setup-gentyr - GENTYR Framework Setup
|
|
3
|
+
|
|
4
|
+
One command for full GENTYR project setup. Runs a programmatic check script, displays results, guides through missing credentials using the setup documentation, and writes vault mappings for the MCP launcher to resolve at runtime.
|
|
5
|
+
|
|
6
|
+
The prefetch hook has pre-run `setup-check.js` and injected its JSON output as `[PREFETCH:setup-gentyr]` context above. Use that data for Phase 1 instead of running the script. If the prefetch data is missing, run the script directly.
|
|
7
|
+
|
|
8
|
+
## Security Architecture
|
|
9
|
+
|
|
10
|
+
- **No credentials on disk.** Vault mappings (`.claude/vault-mappings.json`) contain only `op://` references and non-secret identifiers, not actual secret values.
|
|
11
|
+
- **Runtime resolution.** The MCP launcher (`scripts/mcp-launcher.js`) resolves credentials from 1Password when each MCP server starts.
|
|
12
|
+
- **Credentials in memory only.** Secret values exist only in the MCP server process memory.
|
|
13
|
+
- **credential-file-guard.js** blocks agents from reading `.mcp.json` (defense-in-depth, since `.mcp.json` contains no credentials with the launcher architecture).
|
|
14
|
+
- **OP_SERVICE_ACCOUNT_TOKEN** is injected into `.mcp.json` by the install script (`--op-token` arg), not stored in vault-mappings.json.
|
|
15
|
+
|
|
16
|
+
## Credential Classification
|
|
17
|
+
|
|
18
|
+
The `setup-check.js` script is the authoritative source for credential classification. The table below is for human reference.
|
|
19
|
+
|
|
20
|
+
| Key | Type | Predefined Path |
|
|
21
|
+
|-----|------|----------------|
|
|
22
|
+
| GITHUB_TOKEN | secret | op://Production/GitHub/token |
|
|
23
|
+
| GITHUB_PAT | secret | op://Production/GitHub/token |
|
|
24
|
+
| RENDER_API_KEY | secret | op://Production/Render/api-key |
|
|
25
|
+
| VERCEL_TOKEN | secret | op://Production/Vercel/token |
|
|
26
|
+
| CLOUDFLARE_API_TOKEN | secret | op://Production/Cloudflare/api-token |
|
|
27
|
+
| CLOUDFLARE_ZONE_ID | identifier | (direct value) |
|
|
28
|
+
| SUPABASE_SERVICE_ROLE_KEY | secret | op://Production/Supabase/service-role-key |
|
|
29
|
+
| SUPABASE_ANON_KEY | identifier | (direct value — public key, no protected actions) |
|
|
30
|
+
| SUPABASE_URL | identifier | (direct value) |
|
|
31
|
+
| RESEND_API_KEY | secret | op://Production/Resend/api-key |
|
|
32
|
+
| ELASTIC_API_KEY | secret | op://Production/Elastic/api-key-query |
|
|
33
|
+
| ELASTIC_CLOUD_ID | identifier | (direct value — hosted deployments) |
|
|
34
|
+
| ELASTIC_ENDPOINT | identifier | (direct value — Serverless projects, alternative to ELASTIC_CLOUD_ID) |
|
|
35
|
+
| CODECOV_TOKEN | secret | op://Production/Codecov/token |
|
|
36
|
+
| OP_CONNECT_TOKEN | secret | op://Production/1Password/connect-token |
|
|
37
|
+
| SUPABASE_ACCESS_TOKEN | secret | op://Production/Supabase/access-token |
|
|
38
|
+
| OP_SERVICE_ACCOUNT_TOKEN | special | (injected via setup.sh --op-token, not in vault-mappings) |
|
|
39
|
+
|
|
40
|
+
## Setup Flow
|
|
41
|
+
|
|
42
|
+
**Output Format:** All status output MUST use the exact format templates in this document. Generate dynamically from JSON data — do NOT ad-lib or freestyle formatting. Use ✓ for pass/configured, ✗ for fail/missing, ⚠ for warn, ○ for skip.
|
|
43
|
+
|
|
44
|
+
### Phase 1: Run Setup Check
|
|
45
|
+
|
|
46
|
+
Run the programmatic setup-check script to get complete project state in one call:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
node node_modules/gentyr/scripts/setup-check.js 2>/dev/null
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Parse the JSON output. This single call determines everything — do NOT run individual `op` commands to check credentials. The script checks:
|
|
53
|
+
- GENTYR installation
|
|
54
|
+
- 1Password CLI availability and authentication
|
|
55
|
+
- Vault-mappings.json current state
|
|
56
|
+
- Each secret's existence at its predefined `op://` path in 1Password
|
|
57
|
+
- Each identifier's presence in vault-mappings.json
|
|
58
|
+
|
|
59
|
+
**Decision tree based on JSON output:**
|
|
60
|
+
|
|
61
|
+
1. If `gentyrInstalled === false`:
|
|
62
|
+
- Inform the user: "GENTYR is not installed."
|
|
63
|
+
- Provide: `sudo node_modules/gentyr/scripts/reinstall.sh --path $(pwd) --op-token <token>`
|
|
64
|
+
- Stop and wait for user to complete this step and restart their Claude Code session.
|
|
65
|
+
|
|
66
|
+
2. If `opCliAvailable === false`:
|
|
67
|
+
- Inform the user: "1Password CLI (`op`) is not installed."
|
|
68
|
+
- Provide: `brew install --cask 1password-cli`
|
|
69
|
+
- Then: "Connect to your 1Password account and re-run `/setup-gentyr`"
|
|
70
|
+
- Stop here.
|
|
71
|
+
|
|
72
|
+
3. If `opAuthenticated === false` and secrets have `existsInOp === null`:
|
|
73
|
+
- Inform the user: "1Password is not authenticated."
|
|
74
|
+
- Provide: `op signin` or "Set OP_SERVICE_ACCOUNT_TOKEN"
|
|
75
|
+
- Stop here and wait for user to authenticate, then re-run `/setup-gentyr`.
|
|
76
|
+
|
|
77
|
+
4. Display the credential status table from the `credentials` object. Format:
|
|
78
|
+
```
|
|
79
|
+
Credential Status (X of Y configured):
|
|
80
|
+
|
|
81
|
+
Secrets (1Password):
|
|
82
|
+
[check/x] GITHUB_TOKEN — exists in 1Password / MISSING from 1Password
|
|
83
|
+
[check/x] RENDER_API_KEY — ...
|
|
84
|
+
...
|
|
85
|
+
|
|
86
|
+
Identifiers (direct values):
|
|
87
|
+
[check/x] CLOUDFLARE_ZONE_ID — configured / not configured
|
|
88
|
+
[check/x] SUPABASE_URL — configured / not configured
|
|
89
|
+
...
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
5. If everything is configured (`summary.secretsMissing === 0` and `summary.identifiersMissing === 0`), skip to Phase 5 (Write Vault Mappings).
|
|
93
|
+
|
|
94
|
+
6. Otherwise, proceed to Phase 2 (account inventory), Phase 3 (missing secrets), and Phase 4 (missing identifiers).
|
|
95
|
+
|
|
96
|
+
### Phase 2: Claude Account Inventory
|
|
97
|
+
|
|
98
|
+
The prefetch hook injected account inventory data in `[PREFETCH:setup-gentyr]`.
|
|
99
|
+
|
|
100
|
+
1. **Display current account inventory** from `gathered.accountInventory`:
|
|
101
|
+
```
|
|
102
|
+
Claude Accounts ({N} detected):
|
|
103
|
+
|
|
104
|
+
✓ user@example.com — active (5h: 45%, 7d: 30%) [Max plan]
|
|
105
|
+
✗ user2@example.com — expired (last seen 2d ago)
|
|
106
|
+
○ (no other accounts)
|
|
107
|
+
|
|
108
|
+
Active key: a1b2c3d4... | Available quota headroom: ~55%
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
If `gathered.accountInventory` is null, display: "No account rotation state found. Run `/login` to authenticate your first Claude account."
|
|
112
|
+
|
|
113
|
+
For accounts where `email` is null (profile not yet fetched), show the `keyId` prefix instead.
|
|
114
|
+
|
|
115
|
+
2. **Ask if user wants to add another account**:
|
|
116
|
+
Use `AskUserQuestion`:
|
|
117
|
+
- "Do you want to add another Claude account for quota rotation?"
|
|
118
|
+
- Options: "Yes, add an account" / "No, continue setup"
|
|
119
|
+
|
|
120
|
+
3. **If yes — guide through login**:
|
|
121
|
+
a. Instruct: "Run `/login` now. This will open your browser to authenticate with a different Claude account."
|
|
122
|
+
b. Wait for user to confirm they've completed the login.
|
|
123
|
+
c. **Detect the new account** by running:
|
|
124
|
+
```bash
|
|
125
|
+
node --input-type=module -e "
|
|
126
|
+
import { syncKeys, readRotationState, checkKeyHealth } from './.claude/hooks/key-sync.js';
|
|
127
|
+
const sync = await syncKeys(console.error);
|
|
128
|
+
const state = readRotationState();
|
|
129
|
+
const accounts = new Map();
|
|
130
|
+
for (const [id, k] of Object.entries(state.keys)) {
|
|
131
|
+
if (k.status === 'invalid') continue;
|
|
132
|
+
const key = k.account_uuid || id;
|
|
133
|
+
if (!accounts.has(key)) accounts.set(key, { ...k, keyId: id });
|
|
134
|
+
}
|
|
135
|
+
console.log(JSON.stringify({
|
|
136
|
+
keysAdded: sync.keysAdded,
|
|
137
|
+
tokensRefreshed: sync.tokensRefreshed,
|
|
138
|
+
totalKeys: Object.keys(state.keys).length,
|
|
139
|
+
accounts: [...accounts.values()].map(a => ({
|
|
140
|
+
email: a.account_email, status: a.status,
|
|
141
|
+
usage: a.last_usage, subscription: a.subscriptionType,
|
|
142
|
+
})),
|
|
143
|
+
}));
|
|
144
|
+
"
|
|
145
|
+
```
|
|
146
|
+
d. **Parse output and confirm to user**:
|
|
147
|
+
- If `keysAdded > 0`: "New account detected! {email}" + updated inventory table
|
|
148
|
+
- If `keysAdded === 0` but `tokensRefreshed > 0`: "Account token refreshed for {email}"
|
|
149
|
+
- If neither: "No new account found. Make sure you logged in with a different account."
|
|
150
|
+
e. **Loop back to step 2** — ask if they want to add another account.
|
|
151
|
+
|
|
152
|
+
4. **When done** (user says "No, continue setup"), proceed to Phase 3 (Missing Secrets).
|
|
153
|
+
|
|
154
|
+
### Phase 3: Guide User Through Missing Secrets
|
|
155
|
+
|
|
156
|
+
For each credential in the JSON output where `type === "secret"` AND (`existsInOp === false` OR `mappedInVault === false`):
|
|
157
|
+
|
|
158
|
+
1. **Group by `setupGuidePhase`** — deduplicate so you show each guide section only once. For example, GITHUB_TOKEN and GITHUB_PAT share `"Phase 2: GitHub Token"`, so show that section once.
|
|
159
|
+
|
|
160
|
+
2. **Read** `node_modules/gentyr/docs/SETUP-GUIDE.md`.
|
|
161
|
+
|
|
162
|
+
3. For each unique `setupGuidePhase` value (e.g., `"Phase 5: Cloudflare API Token"`):
|
|
163
|
+
a. Find the section matching the heading `## {setupGuidePhase}` in SETUP-GUIDE.md.
|
|
164
|
+
b. Extract the content from that heading until the next `## Phase` heading (or end of file).
|
|
165
|
+
c. **Present the section's instructions to the user nearly verbatim.** Include both the service creation steps AND the "1Password Storage" block (vault, item title, field names, predefined path).
|
|
166
|
+
d. List which credential keys from the JSON output this section covers.
|
|
167
|
+
|
|
168
|
+
4. After presenting instructions for a missing secret, wait for the user to confirm they've created the 1Password item.
|
|
169
|
+
|
|
170
|
+
5. **Re-run the setup-check script** to verify the item was created:
|
|
171
|
+
```bash
|
|
172
|
+
node node_modules/gentyr/scripts/setup-check.js 2>/dev/null
|
|
173
|
+
```
|
|
174
|
+
Check the updated `existsInOp` value. If still `false`, inform the user and offer to skip.
|
|
175
|
+
|
|
176
|
+
6. If the user wants to skip a credential, note it and move on. They can re-run `/setup-gentyr` later.
|
|
177
|
+
|
|
178
|
+
**IMPORTANT:** NEVER read the actual secret value. The setup-check script only checks existence (never reads values). You should only display the credential name and its `op://` reference.
|
|
179
|
+
|
|
180
|
+
### Phase 4: Collect Non-Secret Identifiers
|
|
181
|
+
|
|
182
|
+
For each credential in the JSON output where `type === "identifier"` AND `mappedInVault === false`:
|
|
183
|
+
|
|
184
|
+
1. **Read** `node_modules/gentyr/docs/SETUP-GUIDE.md`.
|
|
185
|
+
|
|
186
|
+
2. Find the `setupGuidePhase` section and locate the **"Non-secret (share in chat during /setup-gentyr):"** subsection within it.
|
|
187
|
+
|
|
188
|
+
3. **Present the non-secret instructions to the user nearly verbatim.** This tells them where to find the value (e.g., "Cloudflare Dashboard > your domain > right sidebar under API").
|
|
189
|
+
|
|
190
|
+
4. Use `AskUserQuestion` to collect the value:
|
|
191
|
+
- **Question:** Based on the SETUP-GUIDE.md description (e.g., "What is your Cloudflare Zone ID? (32-character hex string from Cloudflare Dashboard > your domain > API sidebar)")
|
|
192
|
+
- **Header:** The credential name (e.g., "Zone ID")
|
|
193
|
+
- **Options:** "I'll provide it" + "Skip for now"
|
|
194
|
+
|
|
195
|
+
5. If the user provides a value, note it for Phase 5 (vault-mappings write). These are NOT `op://` references — they are stored as direct values.
|
|
196
|
+
|
|
197
|
+
### Phase 5: Write Vault Mappings
|
|
198
|
+
|
|
199
|
+
Write `.claude/vault-mappings.json` with:
|
|
200
|
+
- `op://` references for all secrets whose `existsInOp === true` (use the `opPath` from the JSON output)
|
|
201
|
+
- Direct values for non-secret identifiers collected in Phase 4
|
|
202
|
+
- Preserve any existing mappings that are still valid
|
|
203
|
+
|
|
204
|
+
File: `.claude/vault-mappings.json`
|
|
205
|
+
```json
|
|
206
|
+
{
|
|
207
|
+
"provider": "1password",
|
|
208
|
+
"mappings": {
|
|
209
|
+
"GITHUB_TOKEN": "op://Production/GitHub/token",
|
|
210
|
+
"GITHUB_PAT": "op://Production/GitHub/token",
|
|
211
|
+
"RENDER_API_KEY": "op://Production/Render/api-key",
|
|
212
|
+
"VERCEL_TOKEN": "op://Production/Vercel/token",
|
|
213
|
+
"CLOUDFLARE_API_TOKEN": "op://Production/Cloudflare/api-token",
|
|
214
|
+
"CLOUDFLARE_ZONE_ID": "abc123def456...",
|
|
215
|
+
"SUPABASE_SERVICE_ROLE_KEY": "op://Production/Supabase/service-role-key",
|
|
216
|
+
"SUPABASE_URL": "https://abcdefghijklmnop.supabase.co",
|
|
217
|
+
"SUPABASE_ANON_KEY": "eyJhbGci...",
|
|
218
|
+
"RESEND_API_KEY": "op://Production/Resend/api-key",
|
|
219
|
+
"ELASTIC_API_KEY": "op://Production/Elastic/api-key-query",
|
|
220
|
+
"ELASTIC_CLOUD_ID": "my-deployment:dXMtY2VudH...",
|
|
221
|
+
"CODECOV_TOKEN": "op://Production/Codecov/token",
|
|
222
|
+
"OP_CONNECT_TOKEN": "op://Production/1Password/connect-token",
|
|
223
|
+
"SUPABASE_ACCESS_TOKEN": "op://Production/Supabase/access-token"
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**Note:** For Elastic Serverless projects, use `ELASTIC_ENDPOINT` instead of `ELASTIC_CLOUD_ID`:
|
|
229
|
+
```json
|
|
230
|
+
"ELASTIC_ENDPOINT": "https://my-project-abc123.es.us-central1.gcp.elastic.cloud"
|
|
231
|
+
```
|
|
232
|
+
Only one of `ELASTIC_CLOUD_ID` or `ELASTIC_ENDPOINT` should be present. The setup-check.js `altKey` mechanism treats them as alternatives.
|
|
233
|
+
|
|
234
|
+
This file is NOT blocked by credential-file-guard (it contains only `op://` references and non-secret identifiers).
|
|
235
|
+
|
|
236
|
+
**Credential-to-server mapping reference:**
|
|
237
|
+
|
|
238
|
+
| Credential | Server(s) | Env Var |
|
|
239
|
+
|-----------|-----------|---------|
|
|
240
|
+
| GitHub Token | `github` | `GITHUB_TOKEN` |
|
|
241
|
+
| GitHub PAT | `github` | `GITHUB_PAT` |
|
|
242
|
+
| Render API Key | `render`, `secret-sync` | `RENDER_API_KEY` |
|
|
243
|
+
| Vercel Token | `vercel`, `secret-sync` | `VERCEL_TOKEN` |
|
|
244
|
+
| Cloudflare Token | `cloudflare` | `CLOUDFLARE_API_TOKEN` |
|
|
245
|
+
| Cloudflare Zone ID | `cloudflare` | `CLOUDFLARE_ZONE_ID` |
|
|
246
|
+
| Supabase URL | `supabase` | `SUPABASE_URL` |
|
|
247
|
+
| Supabase Service Role Key | `supabase` | `SUPABASE_SERVICE_ROLE_KEY` |
|
|
248
|
+
| Supabase Anon Key | `supabase` | `SUPABASE_ANON_KEY` |
|
|
249
|
+
| Supabase Access Token | `supabase` | `SUPABASE_ACCESS_TOKEN` |
|
|
250
|
+
| 1Password Connect Token | `onepassword` | `OP_CONNECT_TOKEN` |
|
|
251
|
+
| Elastic API Key | `elastic-logs` | `ELASTIC_API_KEY` |
|
|
252
|
+
| Elastic Cloud ID | `elastic-logs` | `ELASTIC_CLOUD_ID` (hosted) |
|
|
253
|
+
| Elastic Endpoint | `elastic-logs` | `ELASTIC_ENDPOINT` (Serverless, alternative to Cloud ID) |
|
|
254
|
+
| Resend API Key | `resend` | `RESEND_API_KEY` |
|
|
255
|
+
| Codecov Token | `codecov` | `CODECOV_TOKEN` |
|
|
256
|
+
|
|
257
|
+
### Phase 6: Service Config
|
|
258
|
+
|
|
259
|
+
If `.claude/config/services.json` does not exist:
|
|
260
|
+
|
|
261
|
+
1. Use `AskUserQuestion` to collect:
|
|
262
|
+
- Render Production service ID (e.g., `srv-xxx`)
|
|
263
|
+
- Render Staging service ID (e.g., `srv-yyy`)
|
|
264
|
+
- Vercel project ID (e.g., `prj_xxx`)
|
|
265
|
+
2. Create `.claude/config/services.json` with the provided values and empty secret mappings
|
|
266
|
+
3. Inform the user they can populate the `secrets` section later for `/push-secrets` to use
|
|
267
|
+
|
|
268
|
+
### Phase 7: Verify & Validate
|
|
269
|
+
|
|
270
|
+
This phase is **mandatory** — always run both scripts, never ask the user if they want validation.
|
|
271
|
+
|
|
272
|
+
1. **Re-run setup-check** to confirm final credential state:
|
|
273
|
+
```bash
|
|
274
|
+
node node_modules/gentyr/scripts/setup-check.js 2>/dev/null
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
2. **Run permission validation** (always — do NOT offer this as optional):
|
|
278
|
+
```bash
|
|
279
|
+
node node_modules/gentyr/scripts/setup-validate.js 2>/dev/null
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
3. **Display combined results** using this exact format (dynamically populated from the two JSON outputs):
|
|
283
|
+
|
|
284
|
+
```
|
|
285
|
+
═══════════════════════════════════════════════════
|
|
286
|
+
GENTYR Setup Status
|
|
287
|
+
═══════════════════════════════════════════════════
|
|
288
|
+
|
|
289
|
+
Credential Mapping ({secretsConfigured + identifiersConfigured} of {totalCredentials}):
|
|
290
|
+
|
|
291
|
+
Secrets (1Password):
|
|
292
|
+
✓ {KEY} → {opPath}
|
|
293
|
+
✗ {KEY} — MISSING
|
|
294
|
+
|
|
295
|
+
Identifiers:
|
|
296
|
+
✓ {KEY} → configured
|
|
297
|
+
✗ {KEY} — not configured
|
|
298
|
+
|
|
299
|
+
Permission Validation ({passed} of {totalServices} services):
|
|
300
|
+
✓ {service} — {message}
|
|
301
|
+
⚠ {service} — {message}
|
|
302
|
+
✗ {service} — {message}
|
|
303
|
+
○ {service} — {message}
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
Use ✓ for pass/configured, ✗ for fail/missing, ⚠ for warn, ○ for skip. Populate dynamically from JSON — every credential and every service must appear.
|
|
307
|
+
|
|
308
|
+
4. **For any missing credentials** (`existsInOp === false` OR `mappedInVault === false`):
|
|
309
|
+
- Read `node_modules/gentyr/docs/SETUP-GUIDE.md`
|
|
310
|
+
- Find the section matching the credential's `setupGuidePhase` heading (e.g., `## Phase 6: Supabase Credentials`)
|
|
311
|
+
- **Output the entire section verbatim** — from the `## Phase N` heading through to the next `## Phase` heading (or end of file). Do NOT paraphrase, summarize, or reformat.
|
|
312
|
+
- List which credential keys from the JSON output this section covers
|
|
313
|
+
- Wait for the user to confirm they've completed the step
|
|
314
|
+
- Re-run `setup-check.js` to verify the item was created
|
|
315
|
+
|
|
316
|
+
5. **For any failed validations** (status: `fail`):
|
|
317
|
+
- Output the `remediation` text from the validation JSON
|
|
318
|
+
- Also read and output the relevant `node_modules/gentyr/docs/SETUP-GUIDE.md` section for context
|
|
319
|
+
- Wait for user to fix, then re-run `setup-validate.js`
|
|
320
|
+
|
|
321
|
+
6. **Warnings** (status: `warn`) are informational, not blocking. Display the `remediation` text but proceed.
|
|
322
|
+
|
|
323
|
+
7. **Proceed to Phase 8** when:
|
|
324
|
+
- All credentials are mapped (`secretsMissing === 0` and `identifiersMissing === 0`)
|
|
325
|
+
- No validation failures (warns are acceptable)
|
|
326
|
+
|
|
327
|
+
8. Remind the user: **"Restart Claude Code to activate the updated credential mappings."**
|
|
328
|
+
|
|
329
|
+
### Phase 8: Branch Protection & Deployment Pipeline
|
|
330
|
+
|
|
331
|
+
After verifying MCP servers, set up the deployment pipeline:
|
|
332
|
+
|
|
333
|
+
1. **Create branches** (if missing):
|
|
334
|
+
```bash
|
|
335
|
+
# Check if preview and staging branches exist
|
|
336
|
+
git rev-parse --verify origin/preview 2>/dev/null || (git branch preview && git push -u origin preview)
|
|
337
|
+
git rev-parse --verify origin/staging 2>/dev/null || (git branch staging && git push -u origin staging)
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
2. **Install merge-chain-check workflow**:
|
|
341
|
+
- Check if `.github/workflows/merge-chain-check.yml` exists
|
|
342
|
+
- If missing, copy from GENTYR template: `${FRAMEWORK_PATH}/templates/config/merge-chain-check.yml.template`
|
|
343
|
+
- This workflow enforces the merge chain: `feature/* -> preview -> staging -> main`
|
|
344
|
+
|
|
345
|
+
3. **Verify `gh` CLI**:
|
|
346
|
+
```bash
|
|
347
|
+
gh auth status
|
|
348
|
+
```
|
|
349
|
+
- If not authenticated, inform the user to run `gh auth login`
|
|
350
|
+
|
|
351
|
+
4. **Branch protection setup**:
|
|
352
|
+
- Use `AskUserQuestion` to ask: "Which GitHub plan are you on?"
|
|
353
|
+
- Option 1: "Teams" -- Show Teams-compatible branch protection instructions
|
|
354
|
+
- Option 2: "Enterprise Cloud" -- Show Enterprise instructions with additional features
|
|
355
|
+
- Display the branch protection instructions from `node_modules/gentyr/docs/DEPLOYMENT-FLOW.md` (Branch Protection Setup section)
|
|
356
|
+
- Use `AskUserQuestion`: "Have you configured branch protection rules for preview, staging, and main?"
|
|
357
|
+
- Option 1: "Yes, all configured"
|
|
358
|
+
- Option 2: "I'll do it later"
|
|
359
|
+
|
|
360
|
+
5. **Enable automated promotion**:
|
|
361
|
+
- Read `.claude/autonomous-mode.json`
|
|
362
|
+
- Add/update flags:
|
|
363
|
+
- `previewPromotionEnabled: true`
|
|
364
|
+
- `stagingPromotionEnabled: true`
|
|
365
|
+
- `stagingHealthMonitorEnabled: true`
|
|
366
|
+
- `productionHealthMonitorEnabled: true`
|
|
367
|
+
- Write back to `.claude/autonomous-mode.json`
|
|
368
|
+
|
|
369
|
+
6. **Update summary** to include:
|
|
370
|
+
```
|
|
371
|
+
Deployment Pipeline:
|
|
372
|
+
+ preview branch exists
|
|
373
|
+
+ staging branch exists
|
|
374
|
+
+ merge-chain-check.yml installed
|
|
375
|
+
+ gh CLI authenticated
|
|
376
|
+
o Branch protection (configure manually in GitHub Settings)
|
|
377
|
+
+ Automated promotion enabled
|
|
378
|
+
+ Health monitoring enabled
|
|
379
|
+
|
|
380
|
+
Merge chain: feature/* -> preview -> staging -> main
|
|
381
|
+
Promotion: preview->staging (6h), staging->main (nightly)
|
|
382
|
+
Health: staging (3h), production (1h)
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
## Important
|
|
386
|
+
|
|
387
|
+
- NEVER echo, log, or display resolved credential values -- only show the credential name and `op://` reference
|
|
388
|
+
- NEVER store actual credential values in any file -- only `op://` references and non-secret identifiers go in `vault-mappings.json`
|
|
389
|
+
- If a user skips a credential, note it and move on -- they can run `/setup-gentyr` again later
|
|
390
|
+
- Re-running `/setup-gentyr` is safe -- it reads existing mappings and only prompts for missing ones
|
|
391
|
+
- All infrastructure MCP servers are designed to fail gracefully if credentials are missing
|
|
392
|
+
- The MCP launcher resolves credentials from 1Password at server startup time
|
|
393
|
+
- Non-secret identifiers (URLs, zone IDs) are stored directly in vault-mappings.json without 1Password
|
|
394
|
+
- OP_SERVICE_ACCOUNT_TOKEN is handled by the install script, not this command
|
|
395
|
+
- Always use `setup-check.js` for evaluation -- do NOT run individual `op` commands
|
|
396
|
+
- Always read SETUP-GUIDE.md and present instructions nearly verbatim -- do NOT paraphrase or summarize
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<!-- HOOK:GENTYR:show -->
|
|
2
|
+
# /show - Status Display Reference
|
|
3
|
+
|
|
4
|
+
View individual dashboard sections using `mcp__show__*` tools.
|
|
5
|
+
|
|
6
|
+
## Available Sections
|
|
7
|
+
|
|
8
|
+
| Tool | Description |
|
|
9
|
+
|---|---|
|
|
10
|
+
| `mcp__show__show_quota()` | API quota utilization (5-hour and 7-day usage bars) |
|
|
11
|
+
| `mcp__show__show_accounts()` | Account overview with key status, usage, and subscription info |
|
|
12
|
+
| `mcp__show__show_deputy_cto()` | Deputy-CTO triage pipeline (pending questions, rejections, reports) |
|
|
13
|
+
| `mcp__show__show_usage()` | Usage trends and trajectory projections (line graphs) |
|
|
14
|
+
| `mcp__show__show_automations()` | Running automated agents, token usage by type, and concurrency |
|
|
15
|
+
| `mcp__show__show_testing()` | Test health (pass/fail rates, coverage, Codecov integration) |
|
|
16
|
+
| `mcp__show__show_deployments()` | Recent deployments across Render and Vercel with pipeline status |
|
|
17
|
+
| `mcp__show__show_worktrees()` | Active git worktrees with branch, age, and PR status |
|
|
18
|
+
| `mcp__show__show_infra()` | Infrastructure status (Render, Vercel, Supabase, Elastic, Cloudflare) |
|
|
19
|
+
| `mcp__show__show_logging()` | Log volume, error rates, and top error messages from Elasticsearch |
|
|
20
|
+
| `mcp__show__show_timeline()` | Chronological timeline of recent system events |
|
|
21
|
+
| `mcp__show__show_tasks()` | Task metrics (pending, active, completed) and token usage summary |
|
|
22
|
+
| `mcp__show__show_product_market_fit()` | Product-market-fit analysis with full section content and compliance |
|
|
23
|
+
|
|
24
|
+
## Usage
|
|
25
|
+
|
|
26
|
+
Call any tool directly. Pass `{ limit: N }` to expand the number of rows shown:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
mcp__show__show_deployments() // default rows
|
|
30
|
+
mcp__show__show_deployments({ limit: 20 }) // expanded view
|
|
31
|
+
mcp__show__show_timeline({ limit: 50 }) // more timeline events
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## When to Use
|
|
35
|
+
|
|
36
|
+
- **Before deploying** — check `show_deployments` and `show_infra`
|
|
37
|
+
- **Before heavy work** — check `show_quota` and `show_usage`
|
|
38
|
+
- **Before writing tests** — check `show_testing`
|
|
39
|
+
- **Before spawning agents** — check `show_automations` and `show_tasks`
|
|
40
|
+
- **Before provisioning worktrees** — check `show_worktrees`
|
|
41
|
+
|
|
42
|
+
For the full dashboard, use `/cto-report` instead.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
<!-- HOOK:GENTYR:spawn-tasks -->
|
|
2
|
+
# /spawn-tasks - Force-Spawn Pending TODO Tasks
|
|
3
|
+
|
|
4
|
+
On-demand command to **force-spawn all pending tasks immediately**, bypassing the hourly automation's age filter, batch limit, cooldowns, and CTO activity gate.
|
|
5
|
+
|
|
6
|
+
The prefetch hook has pre-gathered pending task counts, running agent info, and concurrency limits, injected as `[PREFETCH:spawn-tasks]` context above. Use that data for Step 1.
|
|
7
|
+
|
|
8
|
+
## Step 1: Display Current State
|
|
9
|
+
|
|
10
|
+
From the prefetch data, display a summary table:
|
|
11
|
+
|
|
12
|
+
| Section | Pending Tasks |
|
|
13
|
+
|---------|--------------|
|
|
14
|
+
| CODE-REVIEWER | N |
|
|
15
|
+
| INVESTIGATOR & PLANNER | N |
|
|
16
|
+
| TEST-WRITER | N |
|
|
17
|
+
| PROJECT-MANAGER | N |
|
|
18
|
+
| DEPUTY-CTO | N |
|
|
19
|
+
| **Total** | **N** |
|
|
20
|
+
|
|
21
|
+
Also show: **Running agents**: N / M (N running, M max concurrent, K available slots)
|
|
22
|
+
|
|
23
|
+
If there are **0 pending tasks**, inform the user and stop — nothing to spawn.
|
|
24
|
+
|
|
25
|
+
## Step 2: Ask User
|
|
26
|
+
|
|
27
|
+
Use AskUserQuestion with **two questions**:
|
|
28
|
+
|
|
29
|
+
**Question 1** — Which sections to spawn (multiSelect: true):
|
|
30
|
+
- **"Implementation agents"** — CODE-REVIEWER, INVESTIGATOR & PLANNER, TEST-WRITER
|
|
31
|
+
- **"Management agents"** — PROJECT-MANAGER, DEPUTY-CTO
|
|
32
|
+
- **"All sections"** — All 5 sections
|
|
33
|
+
- **"Cancel"** — Do nothing
|
|
34
|
+
|
|
35
|
+
**Question 2** — Concurrency limit (multiSelect: false):
|
|
36
|
+
- **"Current default (N)"** — Use the maxConcurrent value from prefetch (Recommended)
|
|
37
|
+
- **"5"** — Conservative limit
|
|
38
|
+
- **"15"** — Higher limit
|
|
39
|
+
- **"20"** — Maximum limit
|
|
40
|
+
|
|
41
|
+
## Step 3: Spawn via MCP Tool
|
|
42
|
+
|
|
43
|
+
Map the user's section selection:
|
|
44
|
+
- "Implementation agents" → `["CODE-REVIEWER", "INVESTIGATOR & PLANNER", "TEST-WRITER"]`
|
|
45
|
+
- "Management agents" → `["PROJECT-MANAGER", "DEPUTY-CTO"]`
|
|
46
|
+
- "All sections" → `["CODE-REVIEWER", "INVESTIGATOR & PLANNER", "TEST-WRITER", "PROJECT-MANAGER", "DEPUTY-CTO"]`
|
|
47
|
+
- If both "Implementation agents" and "Management agents" selected → combine both arrays
|
|
48
|
+
- "Cancel" → stop, do nothing
|
|
49
|
+
|
|
50
|
+
If the user chose "Other" and typed specific section names, parse those into the array.
|
|
51
|
+
|
|
52
|
+
Call a single MCP tool:
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
mcp__agent-tracker__force_spawn_tasks({ sections: [...], maxConcurrent: N })
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Step 4: Display Results
|
|
59
|
+
|
|
60
|
+
From the tool response, display:
|
|
61
|
+
|
|
62
|
+
- **Spawned** (N): list each task title + agent type + PID
|
|
63
|
+
- **Skipped** (N): list each with reason (e.g., "concurrency limit reached")
|
|
64
|
+
- **Errors** (N): list each with error message
|
|
65
|
+
|
|
66
|
+
## What This Bypasses
|
|
67
|
+
|
|
68
|
+
- Automation enabled flag (`autonomous-mode.json`)
|
|
69
|
+
- CTO activity gate (24h briefing requirement)
|
|
70
|
+
- Task runner cooldown (1h between cycles)
|
|
71
|
+
- Task age filter (1h minimum age)
|
|
72
|
+
- MAX_TASKS_PER_CYCLE (3 per cycle)
|
|
73
|
+
|
|
74
|
+
## What This Preserves
|
|
75
|
+
|
|
76
|
+
- Concurrency guard (configurable via maxConcurrent parameter)
|
|
77
|
+
- Task status tracking (marks in_progress, resets on failure)
|
|
78
|
+
- Agent tracker registration (spawned agents appear in `/cto-report`)
|
|
79
|
+
- Tasks already in_progress are excluded
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<!-- HOOK:GENTYR:toggle-automation -->
|
|
2
|
+
# /toggle-automation-gentyr - Toggle GENTYR Automation
|
|
3
|
+
|
|
4
|
+
Toggles the GENTYR automation service between active and paused states. The persistent service (launchd/systemd) keeps running but does nothing when paused.
|
|
5
|
+
|
|
6
|
+
The prefetch hook has pre-gathered the current automation state and injected it as `[PREFETCH:toggle-automation]` context above. Use that data for Step 1 instead of calling the MCP tool. If the prefetch data is missing, fall back to the MCP call.
|
|
7
|
+
|
|
8
|
+
## What This Controls
|
|
9
|
+
|
|
10
|
+
The automation service runs every 10 minutes and handles:
|
|
11
|
+
- Report triage (deputy-cto reviews pending agent reports)
|
|
12
|
+
- Lint checking and auto-fixing
|
|
13
|
+
- Task runner (processes pending TODO items)
|
|
14
|
+
- Preview -> Staging promotion pipeline
|
|
15
|
+
- Staging -> Production promotion pipeline
|
|
16
|
+
- Staging health monitoring
|
|
17
|
+
- Production health monitoring
|
|
18
|
+
- Standalone antipattern hunting
|
|
19
|
+
- Standalone compliance checking
|
|
20
|
+
- CLAUDE.md size refactoring
|
|
21
|
+
|
|
22
|
+
When **paused**, the service still fires every 10 minutes but immediately exits without doing anything.
|
|
23
|
+
|
|
24
|
+
## Flow
|
|
25
|
+
|
|
26
|
+
### Step 1: Check Current Status
|
|
27
|
+
|
|
28
|
+
```javascript
|
|
29
|
+
mcp__deputy-cto__get_autonomous_mode_status()
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Display the current state to the user:
|
|
33
|
+
- Whether automation is enabled or disabled
|
|
34
|
+
- When it was last modified and by whom
|
|
35
|
+
|
|
36
|
+
### Step 2: Toggle
|
|
37
|
+
|
|
38
|
+
Use `AskUserQuestion` to confirm the action:
|
|
39
|
+
- **Question:** "Automation is currently {ENABLED/DISABLED}. What would you like to do?"
|
|
40
|
+
- **Header:** "Automation"
|
|
41
|
+
- **Options:**
|
|
42
|
+
- "Pause all automation" (if currently enabled)
|
|
43
|
+
- "Resume all automation" (if currently disabled)
|
|
44
|
+
- "Show detailed status" (shows last log entries)
|
|
45
|
+
|
|
46
|
+
If "Show detailed status":
|
|
47
|
+
- Read the last 30 lines of `.claude/hourly-automation.log`
|
|
48
|
+
- Read `.claude/hourly-automation-state.json` for last run timestamps
|
|
49
|
+
- Display summary of each automation's last run time and next scheduled run
|
|
50
|
+
- Return to Step 2
|
|
51
|
+
|
|
52
|
+
If toggling:
|
|
53
|
+
|
|
54
|
+
```javascript
|
|
55
|
+
mcp__deputy-cto__toggle_autonomous_mode({ enabled: true/false })
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Step 3: Confirm
|
|
59
|
+
|
|
60
|
+
Display the new state:
|
|
61
|
+
```
|
|
62
|
+
GENTYR Automation: {ENABLED/PAUSED}
|
|
63
|
+
|
|
64
|
+
The persistent service (launchd) continues running.
|
|
65
|
+
{If paused: It will check every 10 minutes but take no actions until re-enabled.}
|
|
66
|
+
{If enabled: Automations will resume on the next 10-minute cycle.}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Important
|
|
70
|
+
|
|
71
|
+
- This does NOT stop or remove the launchd/systemd service
|
|
72
|
+
- This only sets `enabled: false` in `.claude/autonomous-mode.json`
|
|
73
|
+
- The service reads this config on every run and skips all work when disabled
|
|
74
|
+
- Individual automations can also be toggled separately in `autonomous-mode.json`
|
|
75
|
+
- To fully remove the service: `node_modules/gentyr/scripts/setup-automation-service.sh remove`
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<!-- HOOK:GENTYR:toggle-product-manager -->
|
|
2
|
+
# /toggle-product-manager - Enable/Disable Product Market Fit Analysis
|
|
3
|
+
|
|
4
|
+
Read the current state from `.claude/autonomous-mode.json` field `productManagerEnabled`.
|
|
5
|
+
|
|
6
|
+
## If currently DISABLED:
|
|
7
|
+
1. Show explanation: "Product-market-fit analysis adds a product-manager agent that researches your competitive landscape, buyer personas, pricing models, and user sentiment. It integrates with the persona/feedback system."
|
|
8
|
+
2. Ask: "Enable product-market-fit analysis?"
|
|
9
|
+
3. If yes:
|
|
10
|
+
- Read `.claude/autonomous-mode.json`, set `productManagerEnabled: true`, write back
|
|
11
|
+
- Copy the product-manager agent: create symlink at `.claude/agents/product-manager.md` pointing to `../../node_modules/gentyr/.claude/agents/product-manager.md`
|
|
12
|
+
- Inform the user that changes are saved and they should restart Claude Code manually for the agent to take effect
|
|
13
|
+
|
|
14
|
+
## If currently ENABLED:
|
|
15
|
+
1. Ask: "Disable product-market-fit analysis? The agent will be removed but your analysis data in `.claude/state/product-manager.db` will be preserved."
|
|
16
|
+
2. If yes:
|
|
17
|
+
- Read `.claude/autonomous-mode.json`, set `productManagerEnabled: false`, write back
|
|
18
|
+
- Remove `.claude/agents/product-manager.md` symlink
|
|
19
|
+
- Inform the user that changes are saved and they should restart Claude Code manually for the change to take effect
|