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.
Files changed (599) hide show
  1. package/.claude/agents/antipattern-hunter.md +176 -0
  2. package/.claude/agents/code-reviewer.md +205 -0
  3. package/.claude/agents/code-writer.md +154 -0
  4. package/.claude/agents/deputy-cto.md +309 -0
  5. package/.claude/agents/feedback-agent.md +101 -0
  6. package/.claude/agents/investigator.md +136 -0
  7. package/.claude/agents/product-manager.md +97 -0
  8. package/.claude/agents/project-manager.md +116 -0
  9. package/.claude/agents/repo-hygiene-expert.md +626 -0
  10. package/.claude/agents/secret-manager.md +324 -0
  11. package/.claude/agents/test-writer.md +354 -0
  12. package/.claude/commands/configure-personas.md +144 -0
  13. package/.claude/commands/cto-report.md +36 -0
  14. package/.claude/commands/demo.md +89 -0
  15. package/.claude/commands/deputy-cto.md +345 -0
  16. package/.claude/commands/hotfix.md +31 -0
  17. package/.claude/commands/overdrive-gentyr.md +167 -0
  18. package/.claude/commands/product-manager.md +32 -0
  19. package/.claude/commands/push-migrations.md +86 -0
  20. package/.claude/commands/push-secrets.md +97 -0
  21. package/.claude/commands/services.json.example +30 -0
  22. package/.claude/commands/setup-gentyr.md +396 -0
  23. package/.claude/commands/show.md +42 -0
  24. package/.claude/commands/spawn-tasks.md +79 -0
  25. package/.claude/commands/toggle-automation-gentyr.md +75 -0
  26. package/.claude/commands/toggle-product-manager.md +19 -0
  27. package/.claude/commands/triage.md +69 -0
  28. package/.claude/hooks/README.md +686 -0
  29. package/.claude/hooks/__tests__/README.md +129 -0
  30. package/.claude/hooks/agent-tracker.js +434 -0
  31. package/.claude/hooks/antipattern-hunter-hook.js +401 -0
  32. package/.claude/hooks/api-key-watcher.js +289 -0
  33. package/.claude/hooks/block-no-verify.js +301 -0
  34. package/.claude/hooks/bypass-approval-hook.js +313 -0
  35. package/.claude/hooks/compliance-checker.js +1309 -0
  36. package/.claude/hooks/config-reader.js +143 -0
  37. package/.claude/hooks/credential-file-guard.js +1139 -0
  38. package/.claude/hooks/credential-health-check.js +168 -0
  39. package/.claude/hooks/credential-sync-hook.js +79 -0
  40. package/.claude/hooks/cto-notification-hook.js +656 -0
  41. package/.claude/hooks/feedback-launcher.js +424 -0
  42. package/.claude/hooks/feedback-orchestrator.js +367 -0
  43. package/.claude/hooks/gentyr-splash.js +47 -0
  44. package/.claude/hooks/gentyr-sync.js +389 -0
  45. package/.claude/hooks/hourly-automation.js +3340 -0
  46. package/.claude/hooks/key-sync.js +899 -0
  47. package/.claude/hooks/lib/approval-utils.js +731 -0
  48. package/.claude/hooks/lib/feature-branch-helper.js +102 -0
  49. package/.claude/hooks/lib/worktree-manager.js +330 -0
  50. package/.claude/hooks/mapping-validator.js +285 -0
  51. package/.claude/hooks/plan-executor.js +398 -0
  52. package/.claude/hooks/playwright-cli-guard.js +104 -0
  53. package/.claude/hooks/playwright-health-check.js +71 -0
  54. package/.claude/hooks/pre-commit-review.js +725 -0
  55. package/.claude/hooks/prompts/local-spec-enforcement.md +310 -0
  56. package/.claude/hooks/prompts/mapping-fix.md +92 -0
  57. package/.claude/hooks/prompts/mapping-review.md +140 -0
  58. package/.claude/hooks/prompts/schema-mapper.md +185 -0
  59. package/.claude/hooks/prompts/spec-enforcement.md +233 -0
  60. package/.claude/hooks/protected-action-approval-hook.js +336 -0
  61. package/.claude/hooks/protected-action-gate.js +562 -0
  62. package/.claude/hooks/protected-actions.json +208 -0
  63. package/.claude/hooks/protected-actions.json.template +122 -0
  64. package/.claude/hooks/quota-monitor.js +490 -0
  65. package/.claude/hooks/reporters/jest-failure-reporter.js +401 -0
  66. package/.claude/hooks/reporters/playwright-failure-reporter.js +446 -0
  67. package/.claude/hooks/reporters/vitest-failure-reporter.js +443 -0
  68. package/.claude/hooks/schema-mapper-hook.js +544 -0
  69. package/.claude/hooks/secret-leak-detector.js +216 -0
  70. package/.claude/hooks/session-reviver.js +514 -0
  71. package/.claude/hooks/slash-command-prefetch.js +1145 -0
  72. package/.claude/hooks/stale-work-detector.js +205 -0
  73. package/.claude/hooks/stop-continue-hook.js +414 -0
  74. package/.claude/hooks/todo-maintenance.js +522 -0
  75. package/.claude/hooks/todo-processing-prompt.md +75 -0
  76. package/.claude/hooks/usage-optimizer.js +791 -0
  77. package/.claude/mcp/README.md +246 -0
  78. package/.claude/settings.json.template +168 -0
  79. package/.mcp.json.template +207 -0
  80. package/CLAUDE.md +340 -0
  81. package/CLAUDE.md.gentyr-section +89 -0
  82. package/LICENSE +21 -0
  83. package/README.md +297 -0
  84. package/cli/commands/init.js +471 -0
  85. package/cli/commands/migrate.js +132 -0
  86. package/cli/commands/protect.js +271 -0
  87. package/cli/commands/scaffold.js +48 -0
  88. package/cli/commands/status.js +133 -0
  89. package/cli/commands/sync.js +101 -0
  90. package/cli/commands/uninstall.js +207 -0
  91. package/cli/index.js +111 -0
  92. package/cli/lib/config-gen.js +214 -0
  93. package/cli/lib/resolve-framework.js +97 -0
  94. package/cli/lib/state.js +140 -0
  95. package/cli/lib/symlinks.js +260 -0
  96. package/docs/AUTOMATION-SYSTEMS.md +484 -0
  97. package/docs/BINARY-PATCHING.md +212 -0
  98. package/docs/CHANGELOG.md +2830 -0
  99. package/docs/CREDENTIAL-DETECTION.md +151 -0
  100. package/docs/CTO-DASHBOARD.md +476 -0
  101. package/docs/DEPLOYMENT-FLOW.md +477 -0
  102. package/docs/DEVELOPER.md +116 -0
  103. package/docs/Executive.md +372 -0
  104. package/docs/SECRET-PATHS.md +77 -0
  105. package/docs/SETUP-GUIDE.md +419 -0
  106. package/docs/STACK.md +109 -0
  107. package/docs/TESTING.md +440 -0
  108. package/docs/assets/claude-logo.svg +3 -0
  109. package/docs/sessions/2026-01-24-spec-suite-implementation.md +190 -0
  110. package/docs/sessions/2026-02-15-feedback-e2e-audit.md +484 -0
  111. package/docs/sessions/2026-02-20-credential-rotation-experiments.md +340 -0
  112. package/docs/sessions/TEST-COVERAGE-REPORT-2026-02-20.md +168 -0
  113. package/docs/shared/EPHEMERAL-STATE-FILES.md +115 -0
  114. package/docs/shared/PROTECTION-SYSTEM.md +341 -0
  115. package/husky/post-commit +10 -0
  116. package/husky/pre-commit +40 -0
  117. package/husky/pre-push +94 -0
  118. package/package.json +43 -0
  119. package/packages/cto-dashboard/package-lock.json +3510 -0
  120. package/packages/cto-dashboard/package.json +41 -0
  121. package/packages/cto-dashboard/pnpm-lock.yaml +2168 -0
  122. package/packages/mcp-servers/dist/__testUtils__/fixtures.d.ts +220 -0
  123. package/packages/mcp-servers/dist/__testUtils__/fixtures.d.ts.map +1 -0
  124. package/packages/mcp-servers/dist/__testUtils__/fixtures.js +376 -0
  125. package/packages/mcp-servers/dist/__testUtils__/fixtures.js.map +1 -0
  126. package/packages/mcp-servers/dist/__testUtils__/index.d.ts +121 -0
  127. package/packages/mcp-servers/dist/__testUtils__/index.d.ts.map +1 -0
  128. package/packages/mcp-servers/dist/__testUtils__/index.js +180 -0
  129. package/packages/mcp-servers/dist/__testUtils__/index.js.map +1 -0
  130. package/packages/mcp-servers/dist/__testUtils__/schemas.d.ts +84 -0
  131. package/packages/mcp-servers/dist/__testUtils__/schemas.d.ts.map +1 -0
  132. package/packages/mcp-servers/dist/__testUtils__/schemas.js +309 -0
  133. package/packages/mcp-servers/dist/__testUtils__/schemas.js.map +1 -0
  134. package/packages/mcp-servers/dist/agent-reports/index.d.ts +7 -0
  135. package/packages/mcp-servers/dist/agent-reports/index.d.ts.map +1 -0
  136. package/packages/mcp-servers/dist/agent-reports/index.js +8 -0
  137. package/packages/mcp-servers/dist/agent-reports/index.js.map +1 -0
  138. package/packages/mcp-servers/dist/agent-reports/server.d.ts +22 -0
  139. package/packages/mcp-servers/dist/agent-reports/server.d.ts.map +1 -0
  140. package/packages/mcp-servers/dist/agent-reports/server.js +535 -0
  141. package/packages/mcp-servers/dist/agent-reports/server.js.map +1 -0
  142. package/packages/mcp-servers/dist/agent-reports/types.d.ts +258 -0
  143. package/packages/mcp-servers/dist/agent-reports/types.d.ts.map +1 -0
  144. package/packages/mcp-servers/dist/agent-reports/types.js +81 -0
  145. package/packages/mcp-servers/dist/agent-reports/types.js.map +1 -0
  146. package/packages/mcp-servers/dist/agent-tracker/index.d.ts +5 -0
  147. package/packages/mcp-servers/dist/agent-tracker/index.d.ts.map +1 -0
  148. package/packages/mcp-servers/dist/agent-tracker/index.js +5 -0
  149. package/packages/mcp-servers/dist/agent-tracker/index.js.map +1 -0
  150. package/packages/mcp-servers/dist/agent-tracker/server.d.ts +12 -0
  151. package/packages/mcp-servers/dist/agent-tracker/server.d.ts.map +1 -0
  152. package/packages/mcp-servers/dist/agent-tracker/server.js +919 -0
  153. package/packages/mcp-servers/dist/agent-tracker/server.js.map +1 -0
  154. package/packages/mcp-servers/dist/agent-tracker/types.d.ts +328 -0
  155. package/packages/mcp-servers/dist/agent-tracker/types.d.ts.map +1 -0
  156. package/packages/mcp-servers/dist/agent-tracker/types.js +128 -0
  157. package/packages/mcp-servers/dist/agent-tracker/types.js.map +1 -0
  158. package/packages/mcp-servers/dist/chrome-bridge/browser-tips.d.ts +27 -0
  159. package/packages/mcp-servers/dist/chrome-bridge/browser-tips.d.ts.map +1 -0
  160. package/packages/mcp-servers/dist/chrome-bridge/browser-tips.js +167 -0
  161. package/packages/mcp-servers/dist/chrome-bridge/browser-tips.js.map +1 -0
  162. package/packages/mcp-servers/dist/chrome-bridge/index.d.ts +6 -0
  163. package/packages/mcp-servers/dist/chrome-bridge/index.d.ts.map +1 -0
  164. package/packages/mcp-servers/dist/chrome-bridge/index.js +6 -0
  165. package/packages/mcp-servers/dist/chrome-bridge/index.js.map +1 -0
  166. package/packages/mcp-servers/dist/chrome-bridge/server.d.ts +13 -0
  167. package/packages/mcp-servers/dist/chrome-bridge/server.d.ts.map +1 -0
  168. package/packages/mcp-servers/dist/chrome-bridge/server.js +959 -0
  169. package/packages/mcp-servers/dist/chrome-bridge/server.js.map +1 -0
  170. package/packages/mcp-servers/dist/chrome-bridge/types.d.ts +41 -0
  171. package/packages/mcp-servers/dist/chrome-bridge/types.d.ts.map +1 -0
  172. package/packages/mcp-servers/dist/chrome-bridge/types.js +8 -0
  173. package/packages/mcp-servers/dist/chrome-bridge/types.js.map +1 -0
  174. package/packages/mcp-servers/dist/cloudflare/index.d.ts +8 -0
  175. package/packages/mcp-servers/dist/cloudflare/index.d.ts.map +1 -0
  176. package/packages/mcp-servers/dist/cloudflare/index.js +8 -0
  177. package/packages/mcp-servers/dist/cloudflare/index.js.map +1 -0
  178. package/packages/mcp-servers/dist/cloudflare/server.d.ts +16 -0
  179. package/packages/mcp-servers/dist/cloudflare/server.d.ts.map +1 -0
  180. package/packages/mcp-servers/dist/cloudflare/server.js +253 -0
  181. package/packages/mcp-servers/dist/cloudflare/server.js.map +1 -0
  182. package/packages/mcp-servers/dist/cloudflare/types.d.ts +141 -0
  183. package/packages/mcp-servers/dist/cloudflare/types.d.ts.map +1 -0
  184. package/packages/mcp-servers/dist/cloudflare/types.js +53 -0
  185. package/packages/mcp-servers/dist/cloudflare/types.js.map +1 -0
  186. package/packages/mcp-servers/dist/codecov/index.d.ts +7 -0
  187. package/packages/mcp-servers/dist/codecov/index.d.ts.map +1 -0
  188. package/packages/mcp-servers/dist/codecov/index.js +7 -0
  189. package/packages/mcp-servers/dist/codecov/index.js.map +1 -0
  190. package/packages/mcp-servers/dist/codecov/server.d.ts +21 -0
  191. package/packages/mcp-servers/dist/codecov/server.d.ts.map +1 -0
  192. package/packages/mcp-servers/dist/codecov/server.js +376 -0
  193. package/packages/mcp-servers/dist/codecov/server.js.map +1 -0
  194. package/packages/mcp-servers/dist/codecov/types.d.ts +269 -0
  195. package/packages/mcp-servers/dist/codecov/types.d.ts.map +1 -0
  196. package/packages/mcp-servers/dist/codecov/types.js +128 -0
  197. package/packages/mcp-servers/dist/codecov/types.js.map +1 -0
  198. package/packages/mcp-servers/dist/cto-report/index.d.ts +9 -0
  199. package/packages/mcp-servers/dist/cto-report/index.d.ts.map +1 -0
  200. package/packages/mcp-servers/dist/cto-report/index.js +9 -0
  201. package/packages/mcp-servers/dist/cto-report/index.js.map +1 -0
  202. package/packages/mcp-servers/dist/cto-report/server.d.ts +14 -0
  203. package/packages/mcp-servers/dist/cto-report/server.d.ts.map +1 -0
  204. package/packages/mcp-servers/dist/cto-report/server.js +859 -0
  205. package/packages/mcp-servers/dist/cto-report/server.js.map +1 -0
  206. package/packages/mcp-servers/dist/cto-report/types.d.ts +213 -0
  207. package/packages/mcp-servers/dist/cto-report/types.d.ts.map +1 -0
  208. package/packages/mcp-servers/dist/cto-report/types.js +29 -0
  209. package/packages/mcp-servers/dist/cto-report/types.js.map +1 -0
  210. package/packages/mcp-servers/dist/cto-reports/index.d.ts +7 -0
  211. package/packages/mcp-servers/dist/cto-reports/index.d.ts.map +1 -0
  212. package/packages/mcp-servers/dist/cto-reports/index.js +8 -0
  213. package/packages/mcp-servers/dist/cto-reports/index.js.map +1 -0
  214. package/packages/mcp-servers/dist/cto-reports/server.d.ts +20 -0
  215. package/packages/mcp-servers/dist/cto-reports/server.d.ts.map +1 -0
  216. package/packages/mcp-servers/dist/cto-reports/server.js +538 -0
  217. package/packages/mcp-servers/dist/cto-reports/server.js.map +1 -0
  218. package/packages/mcp-servers/dist/cto-reports/types.d.ts +236 -0
  219. package/packages/mcp-servers/dist/cto-reports/types.d.ts.map +1 -0
  220. package/packages/mcp-servers/dist/cto-reports/types.js +77 -0
  221. package/packages/mcp-servers/dist/cto-reports/types.js.map +1 -0
  222. package/packages/mcp-servers/dist/deputy-cto/index.d.ts +7 -0
  223. package/packages/mcp-servers/dist/deputy-cto/index.d.ts.map +1 -0
  224. package/packages/mcp-servers/dist/deputy-cto/index.js +8 -0
  225. package/packages/mcp-servers/dist/deputy-cto/index.js.map +1 -0
  226. package/packages/mcp-servers/dist/deputy-cto/server.d.ts +23 -0
  227. package/packages/mcp-servers/dist/deputy-cto/server.d.ts.map +1 -0
  228. package/packages/mcp-servers/dist/deputy-cto/server.js +1700 -0
  229. package/packages/mcp-servers/dist/deputy-cto/server.js.map +1 -0
  230. package/packages/mcp-servers/dist/deputy-cto/types.d.ts +439 -0
  231. package/packages/mcp-servers/dist/deputy-cto/types.d.ts.map +1 -0
  232. package/packages/mcp-servers/dist/deputy-cto/types.js +102 -0
  233. package/packages/mcp-servers/dist/deputy-cto/types.js.map +1 -0
  234. package/packages/mcp-servers/dist/elastic-logs/index.d.ts +5 -0
  235. package/packages/mcp-servers/dist/elastic-logs/index.d.ts.map +1 -0
  236. package/packages/mcp-servers/dist/elastic-logs/index.js +5 -0
  237. package/packages/mcp-servers/dist/elastic-logs/index.js.map +1 -0
  238. package/packages/mcp-servers/dist/elastic-logs/server.d.ts +18 -0
  239. package/packages/mcp-servers/dist/elastic-logs/server.d.ts.map +1 -0
  240. package/packages/mcp-servers/dist/elastic-logs/server.js +259 -0
  241. package/packages/mcp-servers/dist/elastic-logs/server.js.map +1 -0
  242. package/packages/mcp-servers/dist/elastic-logs/types.d.ts +107 -0
  243. package/packages/mcp-servers/dist/elastic-logs/types.d.ts.map +1 -0
  244. package/packages/mcp-servers/dist/elastic-logs/types.js +31 -0
  245. package/packages/mcp-servers/dist/elastic-logs/types.js.map +1 -0
  246. package/packages/mcp-servers/dist/feedback-explorer/index.d.ts +2 -0
  247. package/packages/mcp-servers/dist/feedback-explorer/index.d.ts.map +1 -0
  248. package/packages/mcp-servers/dist/feedback-explorer/index.js +2 -0
  249. package/packages/mcp-servers/dist/feedback-explorer/index.js.map +1 -0
  250. package/packages/mcp-servers/dist/feedback-explorer/server.d.ts +21 -0
  251. package/packages/mcp-servers/dist/feedback-explorer/server.d.ts.map +1 -0
  252. package/packages/mcp-servers/dist/feedback-explorer/server.js +580 -0
  253. package/packages/mcp-servers/dist/feedback-explorer/server.js.map +1 -0
  254. package/packages/mcp-servers/dist/feedback-explorer/types.d.ts +331 -0
  255. package/packages/mcp-servers/dist/feedback-explorer/types.d.ts.map +1 -0
  256. package/packages/mcp-servers/dist/feedback-explorer/types.js +40 -0
  257. package/packages/mcp-servers/dist/feedback-explorer/types.js.map +1 -0
  258. package/packages/mcp-servers/dist/feedback-reporter/index.d.ts +9 -0
  259. package/packages/mcp-servers/dist/feedback-reporter/index.d.ts.map +1 -0
  260. package/packages/mcp-servers/dist/feedback-reporter/index.js +9 -0
  261. package/packages/mcp-servers/dist/feedback-reporter/index.js.map +1 -0
  262. package/packages/mcp-servers/dist/feedback-reporter/server.d.ts +36 -0
  263. package/packages/mcp-servers/dist/feedback-reporter/server.d.ts.map +1 -0
  264. package/packages/mcp-servers/dist/feedback-reporter/server.js +392 -0
  265. package/packages/mcp-servers/dist/feedback-reporter/server.js.map +1 -0
  266. package/packages/mcp-servers/dist/feedback-reporter/types.d.ts +152 -0
  267. package/packages/mcp-servers/dist/feedback-reporter/types.d.ts.map +1 -0
  268. package/packages/mcp-servers/dist/feedback-reporter/types.js +67 -0
  269. package/packages/mcp-servers/dist/feedback-reporter/types.js.map +1 -0
  270. package/packages/mcp-servers/dist/github/index.d.ts +7 -0
  271. package/packages/mcp-servers/dist/github/index.d.ts.map +1 -0
  272. package/packages/mcp-servers/dist/github/index.js +7 -0
  273. package/packages/mcp-servers/dist/github/index.js.map +1 -0
  274. package/packages/mcp-servers/dist/github/server.d.ts +15 -0
  275. package/packages/mcp-servers/dist/github/server.d.ts.map +1 -0
  276. package/packages/mcp-servers/dist/github/server.js +686 -0
  277. package/packages/mcp-servers/dist/github/server.js.map +1 -0
  278. package/packages/mcp-servers/dist/github/types.d.ts +660 -0
  279. package/packages/mcp-servers/dist/github/types.d.ts.map +1 -0
  280. package/packages/mcp-servers/dist/github/types.js +209 -0
  281. package/packages/mcp-servers/dist/github/types.js.map +1 -0
  282. package/packages/mcp-servers/dist/index.d.ts +30 -0
  283. package/packages/mcp-servers/dist/index.d.ts.map +1 -0
  284. package/packages/mcp-servers/dist/index.js +32 -0
  285. package/packages/mcp-servers/dist/index.js.map +1 -0
  286. package/packages/mcp-servers/dist/makerkit-docs/index.d.ts +5 -0
  287. package/packages/mcp-servers/dist/makerkit-docs/index.d.ts.map +1 -0
  288. package/packages/mcp-servers/dist/makerkit-docs/index.js +5 -0
  289. package/packages/mcp-servers/dist/makerkit-docs/index.js.map +1 -0
  290. package/packages/mcp-servers/dist/makerkit-docs/server.d.ts +15 -0
  291. package/packages/mcp-servers/dist/makerkit-docs/server.d.ts.map +1 -0
  292. package/packages/mcp-servers/dist/makerkit-docs/server.js +252 -0
  293. package/packages/mcp-servers/dist/makerkit-docs/server.js.map +1 -0
  294. package/packages/mcp-servers/dist/makerkit-docs/types.d.ts +74 -0
  295. package/packages/mcp-servers/dist/makerkit-docs/types.d.ts.map +1 -0
  296. package/packages/mcp-servers/dist/makerkit-docs/types.js +20 -0
  297. package/packages/mcp-servers/dist/makerkit-docs/types.js.map +1 -0
  298. package/packages/mcp-servers/dist/onepassword/index.d.ts +2 -0
  299. package/packages/mcp-servers/dist/onepassword/index.d.ts.map +1 -0
  300. package/packages/mcp-servers/dist/onepassword/index.js +2 -0
  301. package/packages/mcp-servers/dist/onepassword/index.js.map +1 -0
  302. package/packages/mcp-servers/dist/onepassword/server.d.ts +2 -0
  303. package/packages/mcp-servers/dist/onepassword/server.d.ts.map +1 -0
  304. package/packages/mcp-servers/dist/onepassword/server.js +159 -0
  305. package/packages/mcp-servers/dist/onepassword/server.js.map +1 -0
  306. package/packages/mcp-servers/dist/onepassword/types.d.ts +55 -0
  307. package/packages/mcp-servers/dist/onepassword/types.d.ts.map +1 -0
  308. package/packages/mcp-servers/dist/onepassword/types.js +22 -0
  309. package/packages/mcp-servers/dist/onepassword/types.js.map +1 -0
  310. package/packages/mcp-servers/dist/playwright/helpers.d.ts +20 -0
  311. package/packages/mcp-servers/dist/playwright/helpers.d.ts.map +1 -0
  312. package/packages/mcp-servers/dist/playwright/helpers.js +31 -0
  313. package/packages/mcp-servers/dist/playwright/helpers.js.map +1 -0
  314. package/packages/mcp-servers/dist/playwright/index.d.ts +5 -0
  315. package/packages/mcp-servers/dist/playwright/index.d.ts.map +1 -0
  316. package/packages/mcp-servers/dist/playwright/index.js +5 -0
  317. package/packages/mcp-servers/dist/playwright/index.js.map +1 -0
  318. package/packages/mcp-servers/dist/playwright/server.d.ts +13 -0
  319. package/packages/mcp-servers/dist/playwright/server.d.ts.map +1 -0
  320. package/packages/mcp-servers/dist/playwright/server.js +1201 -0
  321. package/packages/mcp-servers/dist/playwright/server.js.map +1 -0
  322. package/packages/mcp-servers/dist/playwright/types.d.ts +216 -0
  323. package/packages/mcp-servers/dist/playwright/types.d.ts.map +1 -0
  324. package/packages/mcp-servers/dist/playwright/types.js +172 -0
  325. package/packages/mcp-servers/dist/playwright/types.js.map +1 -0
  326. package/packages/mcp-servers/dist/playwright-feedback/browser-manager.d.ts +39 -0
  327. package/packages/mcp-servers/dist/playwright-feedback/browser-manager.d.ts.map +1 -0
  328. package/packages/mcp-servers/dist/playwright-feedback/browser-manager.js +71 -0
  329. package/packages/mcp-servers/dist/playwright-feedback/browser-manager.js.map +1 -0
  330. package/packages/mcp-servers/dist/playwright-feedback/index.d.ts +5 -0
  331. package/packages/mcp-servers/dist/playwright-feedback/index.d.ts.map +1 -0
  332. package/packages/mcp-servers/dist/playwright-feedback/index.js +5 -0
  333. package/packages/mcp-servers/dist/playwright-feedback/index.js.map +1 -0
  334. package/packages/mcp-servers/dist/playwright-feedback/server.d.ts +34 -0
  335. package/packages/mcp-servers/dist/playwright-feedback/server.d.ts.map +1 -0
  336. package/packages/mcp-servers/dist/playwright-feedback/server.js +538 -0
  337. package/packages/mcp-servers/dist/playwright-feedback/server.js.map +1 -0
  338. package/packages/mcp-servers/dist/playwright-feedback/types.d.ts +305 -0
  339. package/packages/mcp-servers/dist/playwright-feedback/types.d.ts.map +1 -0
  340. package/packages/mcp-servers/dist/playwright-feedback/types.js +123 -0
  341. package/packages/mcp-servers/dist/playwright-feedback/types.js.map +1 -0
  342. package/packages/mcp-servers/dist/product-manager/server.d.ts +17 -0
  343. package/packages/mcp-servers/dist/product-manager/server.d.ts.map +1 -0
  344. package/packages/mcp-servers/dist/product-manager/server.js +690 -0
  345. package/packages/mcp-servers/dist/product-manager/server.js.map +1 -0
  346. package/packages/mcp-servers/dist/product-manager/types.d.ts +286 -0
  347. package/packages/mcp-servers/dist/product-manager/types.d.ts.map +1 -0
  348. package/packages/mcp-servers/dist/product-manager/types.js +99 -0
  349. package/packages/mcp-servers/dist/product-manager/types.js.map +1 -0
  350. package/packages/mcp-servers/dist/programmatic-feedback/index.d.ts +7 -0
  351. package/packages/mcp-servers/dist/programmatic-feedback/index.d.ts.map +1 -0
  352. package/packages/mcp-servers/dist/programmatic-feedback/index.js +7 -0
  353. package/packages/mcp-servers/dist/programmatic-feedback/index.js.map +1 -0
  354. package/packages/mcp-servers/dist/programmatic-feedback/sandbox.d.ts +19 -0
  355. package/packages/mcp-servers/dist/programmatic-feedback/sandbox.d.ts.map +1 -0
  356. package/packages/mcp-servers/dist/programmatic-feedback/sandbox.js +174 -0
  357. package/packages/mcp-servers/dist/programmatic-feedback/sandbox.js.map +1 -0
  358. package/packages/mcp-servers/dist/programmatic-feedback/server.d.ts +35 -0
  359. package/packages/mcp-servers/dist/programmatic-feedback/server.d.ts.map +1 -0
  360. package/packages/mcp-servers/dist/programmatic-feedback/server.js +465 -0
  361. package/packages/mcp-servers/dist/programmatic-feedback/server.js.map +1 -0
  362. package/packages/mcp-servers/dist/programmatic-feedback/types.d.ts +127 -0
  363. package/packages/mcp-servers/dist/programmatic-feedback/types.d.ts.map +1 -0
  364. package/packages/mcp-servers/dist/programmatic-feedback/types.js +80 -0
  365. package/packages/mcp-servers/dist/programmatic-feedback/types.js.map +1 -0
  366. package/packages/mcp-servers/dist/render/index.d.ts +8 -0
  367. package/packages/mcp-servers/dist/render/index.d.ts.map +1 -0
  368. package/packages/mcp-servers/dist/render/index.js +8 -0
  369. package/packages/mcp-servers/dist/render/index.js.map +1 -0
  370. package/packages/mcp-servers/dist/render/server.d.ts +15 -0
  371. package/packages/mcp-servers/dist/render/server.d.ts.map +1 -0
  372. package/packages/mcp-servers/dist/render/server.js +428 -0
  373. package/packages/mcp-servers/dist/render/server.js.map +1 -0
  374. package/packages/mcp-servers/dist/render/types.d.ts +273 -0
  375. package/packages/mcp-servers/dist/render/types.d.ts.map +1 -0
  376. package/packages/mcp-servers/dist/render/types.js +102 -0
  377. package/packages/mcp-servers/dist/render/types.js.map +1 -0
  378. package/packages/mcp-servers/dist/resend/index.d.ts +7 -0
  379. package/packages/mcp-servers/dist/resend/index.d.ts.map +1 -0
  380. package/packages/mcp-servers/dist/resend/index.js +7 -0
  381. package/packages/mcp-servers/dist/resend/index.js.map +1 -0
  382. package/packages/mcp-servers/dist/resend/server.d.ts +15 -0
  383. package/packages/mcp-servers/dist/resend/server.d.ts.map +1 -0
  384. package/packages/mcp-servers/dist/resend/server.js +298 -0
  385. package/packages/mcp-servers/dist/resend/server.js.map +1 -0
  386. package/packages/mcp-servers/dist/resend/types.d.ts +222 -0
  387. package/packages/mcp-servers/dist/resend/types.d.ts.map +1 -0
  388. package/packages/mcp-servers/dist/resend/types.js +58 -0
  389. package/packages/mcp-servers/dist/resend/types.js.map +1 -0
  390. package/packages/mcp-servers/dist/review-queue/index.d.ts +6 -0
  391. package/packages/mcp-servers/dist/review-queue/index.d.ts.map +1 -0
  392. package/packages/mcp-servers/dist/review-queue/index.js +6 -0
  393. package/packages/mcp-servers/dist/review-queue/index.js.map +1 -0
  394. package/packages/mcp-servers/dist/review-queue/server.d.ts +17 -0
  395. package/packages/mcp-servers/dist/review-queue/server.d.ts.map +1 -0
  396. package/packages/mcp-servers/dist/review-queue/server.js +348 -0
  397. package/packages/mcp-servers/dist/review-queue/server.js.map +1 -0
  398. package/packages/mcp-servers/dist/review-queue/types.d.ts +162 -0
  399. package/packages/mcp-servers/dist/review-queue/types.d.ts.map +1 -0
  400. package/packages/mcp-servers/dist/review-queue/types.js +56 -0
  401. package/packages/mcp-servers/dist/review-queue/types.js.map +1 -0
  402. package/packages/mcp-servers/dist/secret-sync/server.d.ts +19 -0
  403. package/packages/mcp-servers/dist/secret-sync/server.d.ts.map +1 -0
  404. package/packages/mcp-servers/dist/secret-sync/server.js +1139 -0
  405. package/packages/mcp-servers/dist/secret-sync/server.js.map +1 -0
  406. package/packages/mcp-servers/dist/secret-sync/types.d.ts +442 -0
  407. package/packages/mcp-servers/dist/secret-sync/types.d.ts.map +1 -0
  408. package/packages/mcp-servers/dist/secret-sync/types.js +113 -0
  409. package/packages/mcp-servers/dist/secret-sync/types.js.map +1 -0
  410. package/packages/mcp-servers/dist/session-events/index.d.ts +5 -0
  411. package/packages/mcp-servers/dist/session-events/index.d.ts.map +1 -0
  412. package/packages/mcp-servers/dist/session-events/index.js +5 -0
  413. package/packages/mcp-servers/dist/session-events/index.js.map +1 -0
  414. package/packages/mcp-servers/dist/session-events/server.d.ts +11 -0
  415. package/packages/mcp-servers/dist/session-events/server.d.ts.map +1 -0
  416. package/packages/mcp-servers/dist/session-events/server.js +290 -0
  417. package/packages/mcp-servers/dist/session-events/server.js.map +1 -0
  418. package/packages/mcp-servers/dist/session-events/types.d.ts +213 -0
  419. package/packages/mcp-servers/dist/session-events/types.d.ts.map +1 -0
  420. package/packages/mcp-servers/dist/session-events/types.js +69 -0
  421. package/packages/mcp-servers/dist/session-events/types.js.map +1 -0
  422. package/packages/mcp-servers/dist/session-restart/index.d.ts +9 -0
  423. package/packages/mcp-servers/dist/session-restart/index.d.ts.map +1 -0
  424. package/packages/mcp-servers/dist/session-restart/index.js +9 -0
  425. package/packages/mcp-servers/dist/session-restart/index.js.map +1 -0
  426. package/packages/mcp-servers/dist/session-restart/server.d.ts +20 -0
  427. package/packages/mcp-servers/dist/session-restart/server.d.ts.map +1 -0
  428. package/packages/mcp-servers/dist/session-restart/server.js +411 -0
  429. package/packages/mcp-servers/dist/session-restart/server.js.map +1 -0
  430. package/packages/mcp-servers/dist/session-restart/types.d.ts +26 -0
  431. package/packages/mcp-servers/dist/session-restart/types.d.ts.map +1 -0
  432. package/packages/mcp-servers/dist/session-restart/types.js +16 -0
  433. package/packages/mcp-servers/dist/session-restart/types.js.map +1 -0
  434. package/packages/mcp-servers/dist/setup-helper/index.d.ts +5 -0
  435. package/packages/mcp-servers/dist/setup-helper/index.d.ts.map +1 -0
  436. package/packages/mcp-servers/dist/setup-helper/index.js +5 -0
  437. package/packages/mcp-servers/dist/setup-helper/index.js.map +1 -0
  438. package/packages/mcp-servers/dist/setup-helper/server.d.ts +14 -0
  439. package/packages/mcp-servers/dist/setup-helper/server.d.ts.map +1 -0
  440. package/packages/mcp-servers/dist/setup-helper/server.js +454 -0
  441. package/packages/mcp-servers/dist/setup-helper/server.js.map +1 -0
  442. package/packages/mcp-servers/dist/setup-helper/types.d.ts +81 -0
  443. package/packages/mcp-servers/dist/setup-helper/types.d.ts.map +1 -0
  444. package/packages/mcp-servers/dist/setup-helper/types.js +41 -0
  445. package/packages/mcp-servers/dist/setup-helper/types.js.map +1 -0
  446. package/packages/mcp-servers/dist/shared/audited-server.d.ts +31 -0
  447. package/packages/mcp-servers/dist/shared/audited-server.d.ts.map +1 -0
  448. package/packages/mcp-servers/dist/shared/audited-server.js +126 -0
  449. package/packages/mcp-servers/dist/shared/audited-server.js.map +1 -0
  450. package/packages/mcp-servers/dist/shared/constants.d.ts +26 -0
  451. package/packages/mcp-servers/dist/shared/constants.d.ts.map +1 -0
  452. package/packages/mcp-servers/dist/shared/constants.js +41 -0
  453. package/packages/mcp-servers/dist/shared/constants.js.map +1 -0
  454. package/packages/mcp-servers/dist/shared/index.d.ts +6 -0
  455. package/packages/mcp-servers/dist/shared/index.d.ts.map +1 -0
  456. package/packages/mcp-servers/dist/shared/index.js +6 -0
  457. package/packages/mcp-servers/dist/shared/index.js.map +1 -0
  458. package/packages/mcp-servers/dist/shared/readonly-db.d.ts +11 -0
  459. package/packages/mcp-servers/dist/shared/readonly-db.d.ts.map +1 -0
  460. package/packages/mcp-servers/dist/shared/readonly-db.js +47 -0
  461. package/packages/mcp-servers/dist/shared/readonly-db.js.map +1 -0
  462. package/packages/mcp-servers/dist/shared/resolve-framework.d.ts +20 -0
  463. package/packages/mcp-servers/dist/shared/resolve-framework.d.ts.map +1 -0
  464. package/packages/mcp-servers/dist/shared/resolve-framework.js +65 -0
  465. package/packages/mcp-servers/dist/shared/resolve-framework.js.map +1 -0
  466. package/packages/mcp-servers/dist/shared/server.d.ts +86 -0
  467. package/packages/mcp-servers/dist/shared/server.d.ts.map +1 -0
  468. package/packages/mcp-servers/dist/shared/server.js +291 -0
  469. package/packages/mcp-servers/dist/shared/server.js.map +1 -0
  470. package/packages/mcp-servers/dist/shared/types.d.ts +113 -0
  471. package/packages/mcp-servers/dist/shared/types.d.ts.map +1 -0
  472. package/packages/mcp-servers/dist/shared/types.js +36 -0
  473. package/packages/mcp-servers/dist/shared/types.js.map +1 -0
  474. package/packages/mcp-servers/dist/show/server.d.ts +12 -0
  475. package/packages/mcp-servers/dist/show/server.d.ts.map +1 -0
  476. package/packages/mcp-servers/dist/show/server.js +97 -0
  477. package/packages/mcp-servers/dist/show/server.js.map +1 -0
  478. package/packages/mcp-servers/dist/show/types.d.ts +19 -0
  479. package/packages/mcp-servers/dist/show/types.d.ts.map +1 -0
  480. package/packages/mcp-servers/dist/show/types.js +32 -0
  481. package/packages/mcp-servers/dist/show/types.js.map +1 -0
  482. package/packages/mcp-servers/dist/specs-browser/index.d.ts +5 -0
  483. package/packages/mcp-servers/dist/specs-browser/index.d.ts.map +1 -0
  484. package/packages/mcp-servers/dist/specs-browser/index.js +5 -0
  485. package/packages/mcp-servers/dist/specs-browser/index.js.map +1 -0
  486. package/packages/mcp-servers/dist/specs-browser/server.d.ts +13 -0
  487. package/packages/mcp-servers/dist/specs-browser/server.d.ts.map +1 -0
  488. package/packages/mcp-servers/dist/specs-browser/server.js +692 -0
  489. package/packages/mcp-servers/dist/specs-browser/server.js.map +1 -0
  490. package/packages/mcp-servers/dist/specs-browser/types.d.ts +337 -0
  491. package/packages/mcp-servers/dist/specs-browser/types.d.ts.map +1 -0
  492. package/packages/mcp-servers/dist/specs-browser/types.js +134 -0
  493. package/packages/mcp-servers/dist/specs-browser/types.js.map +1 -0
  494. package/packages/mcp-servers/dist/supabase/index.d.ts +10 -0
  495. package/packages/mcp-servers/dist/supabase/index.d.ts.map +1 -0
  496. package/packages/mcp-servers/dist/supabase/index.js +10 -0
  497. package/packages/mcp-servers/dist/supabase/index.js.map +1 -0
  498. package/packages/mcp-servers/dist/supabase/server.d.ts +20 -0
  499. package/packages/mcp-servers/dist/supabase/server.d.ts.map +1 -0
  500. package/packages/mcp-servers/dist/supabase/server.js +451 -0
  501. package/packages/mcp-servers/dist/supabase/server.js.map +1 -0
  502. package/packages/mcp-servers/dist/supabase/types.d.ts +196 -0
  503. package/packages/mcp-servers/dist/supabase/types.d.ts.map +1 -0
  504. package/packages/mcp-servers/dist/supabase/types.js +76 -0
  505. package/packages/mcp-servers/dist/supabase/types.js.map +1 -0
  506. package/packages/mcp-servers/dist/todo-db/index.d.ts +5 -0
  507. package/packages/mcp-servers/dist/todo-db/index.d.ts.map +1 -0
  508. package/packages/mcp-servers/dist/todo-db/index.js +5 -0
  509. package/packages/mcp-servers/dist/todo-db/index.js.map +1 -0
  510. package/packages/mcp-servers/dist/todo-db/server.d.ts +13 -0
  511. package/packages/mcp-servers/dist/todo-db/server.d.ts.map +1 -0
  512. package/packages/mcp-servers/dist/todo-db/server.js +649 -0
  513. package/packages/mcp-servers/dist/todo-db/server.js.map +1 -0
  514. package/packages/mcp-servers/dist/todo-db/types.d.ts +225 -0
  515. package/packages/mcp-servers/dist/todo-db/types.d.ts.map +1 -0
  516. package/packages/mcp-servers/dist/todo-db/types.js +69 -0
  517. package/packages/mcp-servers/dist/todo-db/types.js.map +1 -0
  518. package/packages/mcp-servers/dist/user-feedback/index.d.ts +7 -0
  519. package/packages/mcp-servers/dist/user-feedback/index.d.ts.map +1 -0
  520. package/packages/mcp-servers/dist/user-feedback/index.js +8 -0
  521. package/packages/mcp-servers/dist/user-feedback/index.js.map +1 -0
  522. package/packages/mcp-servers/dist/user-feedback/server.d.ts +25 -0
  523. package/packages/mcp-servers/dist/user-feedback/server.d.ts.map +1 -0
  524. package/packages/mcp-servers/dist/user-feedback/server.js +914 -0
  525. package/packages/mcp-servers/dist/user-feedback/server.js.map +1 -0
  526. package/packages/mcp-servers/dist/user-feedback/types.d.ts +415 -0
  527. package/packages/mcp-servers/dist/user-feedback/types.d.ts.map +1 -0
  528. package/packages/mcp-servers/dist/user-feedback/types.js +132 -0
  529. package/packages/mcp-servers/dist/user-feedback/types.js.map +1 -0
  530. package/packages/mcp-servers/dist/vercel/index.d.ts +9 -0
  531. package/packages/mcp-servers/dist/vercel/index.d.ts.map +1 -0
  532. package/packages/mcp-servers/dist/vercel/index.js +9 -0
  533. package/packages/mcp-servers/dist/vercel/index.js.map +1 -0
  534. package/packages/mcp-servers/dist/vercel/server.d.ts +17 -0
  535. package/packages/mcp-servers/dist/vercel/server.d.ts.map +1 -0
  536. package/packages/mcp-servers/dist/vercel/server.js +265 -0
  537. package/packages/mcp-servers/dist/vercel/server.js.map +1 -0
  538. package/packages/mcp-servers/dist/vercel/types.d.ts +189 -0
  539. package/packages/mcp-servers/dist/vercel/types.d.ts.map +1 -0
  540. package/packages/mcp-servers/dist/vercel/types.js +65 -0
  541. package/packages/mcp-servers/dist/vercel/types.js.map +1 -0
  542. package/packages/mcp-servers/package-lock.json +3765 -0
  543. package/packages/mcp-servers/package.json +64 -0
  544. package/packages/mcp-servers/test/reporters/test-failure-reporter.ts +372 -0
  545. package/packages/mcp-servers/vitest.config.ts +27 -0
  546. package/scripts/__tests__/README.md +163 -0
  547. package/scripts/apply-credential-hardening.sh +271 -0
  548. package/scripts/credential-providers/manual.js +56 -0
  549. package/scripts/credential-providers/onepassword.js +85 -0
  550. package/scripts/credential-providers/provider-interface.js +104 -0
  551. package/scripts/encrypt-credential.js +337 -0
  552. package/scripts/feedback-launcher.js +338 -0
  553. package/scripts/feedback-orchestrator.js +373 -0
  554. package/scripts/fix-mcp-launcher-issues.sh +97 -0
  555. package/scripts/force-spawn-tasks.js +651 -0
  556. package/scripts/force-triage-reports.js +560 -0
  557. package/scripts/generate-protected-actions-spec.js +142 -0
  558. package/scripts/generate-proxy-certs.sh +158 -0
  559. package/scripts/grant-chrome-ext-permissions.sh +242 -0
  560. package/scripts/mcp-launcher.js +125 -0
  561. package/scripts/merge-settings.cjs +167 -0
  562. package/scripts/patch-clawd.py +844 -0
  563. package/scripts/patch-credential-cache.py +313 -0
  564. package/scripts/patches/credential-file-guard-patched.mjs +573 -0
  565. package/scripts/patches/credential-file-guard.js.patched +573 -0
  566. package/scripts/patches/verify-tokenizer.mjs +132 -0
  567. package/scripts/protect-framework.sh +478 -0
  568. package/scripts/readme-chrome.template +12 -0
  569. package/scripts/reap-completed-agents.js +439 -0
  570. package/scripts/reinstall.sh +86 -0
  571. package/scripts/resign-node.sh +185 -0
  572. package/scripts/rotation-proxy.js +656 -0
  573. package/scripts/rotation-stress-monitor.mjs +862 -0
  574. package/scripts/setup-automation-service.sh +648 -0
  575. package/scripts/setup-check.js +251 -0
  576. package/scripts/watch-claude-version.js +142 -0
  577. package/specs/framework/CORE-INVARIANTS.md +161 -0
  578. package/specs/patterns/AGENT-PATTERNS.md +223 -0
  579. package/specs/patterns/HOOK-PATTERNS.md +242 -0
  580. package/specs/patterns/MCP-SERVER-PATTERNS.md +144 -0
  581. package/templates/config/gitignore.template +14 -0
  582. package/templates/config/merge-chain-check.yml.template +51 -0
  583. package/templates/config/package.json.template +18 -0
  584. package/templates/config/pnpm-workspace.yaml +5 -0
  585. package/templates/config/services.json.template +18 -0
  586. package/templates/config/tsconfig.base.json +17 -0
  587. package/templates/scaffold/integrations/_template/.gitkeep +0 -0
  588. package/templates/scaffold/packages/logger/package.json +17 -0
  589. package/templates/scaffold/packages/logger/src/logger.ts +44 -0
  590. package/templates/scaffold/packages/shared/package.json +17 -0
  591. package/templates/scaffold/packages/shared/src/errors.ts +43 -0
  592. package/templates/scaffold/products/_product/apps/backend/package.json +21 -0
  593. package/templates/scaffold/products/_product/apps/backend/src/index.ts +17 -0
  594. package/templates/scaffold/products/_product/apps/extension/.gitkeep +0 -0
  595. package/templates/scaffold/products/_product/apps/web/.gitkeep +0 -0
  596. package/templates/scaffold/specs/global/.gitkeep +0 -0
  597. package/templates/scaffold/specs/local/.gitkeep +0 -0
  598. package/templates/scaffold/specs/reference/.gitkeep +0 -0
  599. package/version.json +15 -0
@@ -0,0 +1,419 @@
1
+ # GENTYR Setup Guide
2
+
3
+ <!-- CREDENTIAL-PHASE-MAP
4
+ GITHUB_TOKEN: Phase 2: GitHub Token
5
+ GITHUB_PAT: Phase 2: GitHub Token
6
+ RENDER_API_KEY: Phase 3: Render API Key
7
+ VERCEL_TOKEN: Phase 4: Vercel Token
8
+ CLOUDFLARE_API_TOKEN: Phase 5: Cloudflare API Token
9
+ CLOUDFLARE_ZONE_ID: Phase 5: Cloudflare API Token
10
+ SUPABASE_SERVICE_ROLE_KEY: Phase 6: Supabase Credentials
11
+ SUPABASE_URL: Phase 6: Supabase Credentials
12
+ SUPABASE_ANON_KEY: Phase 6: Supabase Credentials
13
+ SUPABASE_ACCESS_TOKEN: Phase 6: Supabase Credentials
14
+ ELASTIC_API_KEY: Phase 7: Elastic Cloud Credentials
15
+ ELASTIC_CLOUD_ID: Phase 7: Elastic Cloud Credentials
16
+ RESEND_API_KEY: Phase 8: Resend API Key
17
+ CODECOV_TOKEN: Phase 9: Codecov Token
18
+ OP_CONNECT_TOKEN: Phase 1: 1Password Service Account
19
+ -->
20
+
21
+ This guide walks through setting up credentials for each service in the GENTYR stack.
22
+
23
+ ## Prerequisites
24
+
25
+ - Node.js 20+
26
+ - pnpm 8+
27
+ - 1Password CLI (`op`) installed: `brew install --cask 1password-cli`
28
+ - Claude Code installed
29
+
30
+ ## Browser Automation Notes
31
+
32
+ These instructions are frequently consumed by AI agents using browser automation (e.g., Claude Cowork). The tips below each phase help agents avoid common pitfalls.
33
+
34
+ **General patterns for all phases:**
35
+ - Prefer `form_input` over `click` + `type` for filling form fields — it's more reliable and handles special characters (e.g., `/`, `@`) that `type` may misinterpret as keyboard shortcuts.
36
+ - Use `read_page(filter="interactive")` to discover form elements and buttons before interacting with them.
37
+ - Use `zoom` tool to verify small UI elements (checkboxes, toggles, dropdown states) before and after interaction.
38
+ - Use `get_page_text` to extract values from the page (API keys, tokens, IDs) rather than trying to select/copy text via UI interactions.
39
+ - **Chrome Extension interference**: Browser extensions (especially 1Password) can inject errors like `Cannot access a chrome-extension:// URL` across unrelated sites. Recovery: call `navigate()` to the current URL to refresh the page, then retry. If errors persist on a specific page, try navigating away and back.
40
+ - When a page action triggers a new tab or popup, use `get_browser_state()` to check for the new tab, then `switch_tab()` to it.
41
+
42
+ ## Phase 1: 1Password Service Account
43
+
44
+ 1. Open 1Password Desktop app
45
+ 2. Go to **Settings > Integrations > Service Accounts**
46
+ 3. Click **Create Service Account**
47
+ 4. Name it "Claude Code MCP"
48
+ 5. Grant access to: Production, Staging, Preview vaults
49
+ 6. Copy the service account token
50
+ 7. The setup command will inject this into your MCP config
51
+
52
+ **Shell profile sync**: When you run `npx gentyr init --op-token <TOKEN>`, the installer writes a managed block to `~/.zshrc` (or `~/.bashrc`) so that subprocesses spawned from your shell inherit the token automatically:
53
+
54
+ ```
55
+ # BEGIN GENTYR OP
56
+ # 1Password Service Account Token (managed by GENTYR — do not edit manually)
57
+ export OP_SERVICE_ACCOUNT_TOKEN="<token>"
58
+ # END GENTYR OP
59
+ ```
60
+
61
+ This block is updated on reinstall and removed on uninstall. `.mcp.json` is always the source of truth. If they ever drift, `credential-health-check.js` warns at session start and `setup-validate.js` reports a `shellSync` failure.
62
+
63
+ ## Phase 2: GitHub Token
64
+
65
+ 1. Go to https://github.com/settings/tokens
66
+ 2. Click **Generate new token (fine-grained)**
67
+ 3. Name: "GENTYR - {project-name}"
68
+ 4. Repository access: Select your repository
69
+ 5. Permissions (all required for GENTYR MCP tools):
70
+ - **Actions**: Read and Write (workflow runs, re-runs, cancellation)
71
+ - **Contents**: Read and Write (file read/write via GitHub API)
72
+ - **Issues**: Read and Write (issue creation, comments)
73
+ - **Pull requests**: Read and Write (PR creation, merge, file listing)
74
+ - **Secrets**: Read and Write (repository and environment secrets)
75
+ - **Environments**: Read and Write (deployment environment management)
76
+ 6. Copy the token
77
+
78
+ **Validation:** setup-validate probes each permission endpoint. Missing permissions appear as warnings with direct links to fix.
79
+
80
+ **1Password Storage:**
81
+ - Vault: **Production**
82
+ - Item title: **GitHub**
83
+ - Item type: Login
84
+ - Fields:
85
+ - `token` = [paste the token]
86
+ - Predefined path: `op://Production/GitHub/token`
87
+
88
+ > **Browser automation tip — GitHub:** Use `form_input` (not `type`) for the token name field, especially if the name contains `/` or other special characters that browsers interpret as shortcuts.
89
+
90
+ > **Browser automation tip — 1Password (applies to all phases):** When adding fields to a 1Password item, the `+ add another field` button and its dropdown chevron (`▼`) are **separate clickable controls**. Click the chevron first to select the field type (e.g., "password"), then click the `+` button to create the field. After creating the field, use `form_input` to set both the label and value. Verify the save completed by checking for a URL change or confirmation indicator — 1Password auto-saves on navigation but not always on field edit. Built-in template fields (e.g., "username", "password" on Login items) have pre-set names that may not match the required field name — always add a **new custom field** with the exact name specified (e.g., `token`, `api-key`).
91
+
92
+ ## Phase 3: Render API Key
93
+
94
+ 1. Go to https://dashboard.render.com/account/api-keys
95
+ 2. Click **Create API Key**
96
+ 3. Name: "GENTYR - {project-name}"
97
+ 4. Copy the API key
98
+
99
+ **1Password Storage:**
100
+ - Vault: **Production**
101
+ - Item title: **Render**
102
+ - Item type: Login
103
+ - Fields:
104
+ - `api-key` = [paste the API key]
105
+ - Predefined path: `op://Production/Render/api-key`
106
+
107
+ > **Browser automation tip — Render:** The API key is displayed once after creation. Use `get_page_text` immediately to capture it before navigating away.
108
+
109
+ ## Phase 4: Vercel Token
110
+
111
+ 1. Go to https://vercel.com/account/tokens
112
+ 2. Click **Create Token**
113
+ 3. Name: "GENTYR - {project-name}"
114
+ 4. Scope: **Full Account** (required for deployments, projects, env vars, domains)
115
+ 5. Copy the token
116
+
117
+ **1Password Storage:**
118
+ - Vault: **Production**
119
+ - Item title: **Vercel**
120
+ - Item type: Login
121
+ - Fields:
122
+ - `token` = [paste the token]
123
+ - Predefined path: `op://Production/Vercel/token`
124
+
125
+ To find your Team ID:
126
+ 1. Go to https://vercel.com/teams
127
+ 2. Click your team
128
+ 3. Go to **Settings > General**
129
+ 4. Copy the Team ID
130
+
131
+ > **Browser automation tip — Vercel:** The token is displayed once after creation. Use `get_page_text` to capture it. The Team ID on the Settings page can also be extracted via `get_page_text` — look for the string labeled "Team ID".
132
+
133
+ ## Phase 5: Cloudflare API Token
134
+
135
+ 1. Go to https://dash.cloudflare.com/profile/api-tokens
136
+ 2. Click **Create Token**
137
+ 3. Use template: **Edit zone DNS** (required for DNS record management)
138
+ 4. Zone Resources: Include > Specific zone > your domain
139
+ 5. Copy the token
140
+
141
+ **1Password Storage:**
142
+ - Vault: **Production**
143
+ - Item title: **Cloudflare**
144
+ - Item type: Login
145
+ - Fields:
146
+ - `api-token` = [paste the API token]
147
+ - Predefined path: `op://Production/Cloudflare/api-token`
148
+
149
+ To find your Zone ID:
150
+ 1. Go to your domain's overview page in Cloudflare
151
+ 2. The Zone ID is in the right sidebar under **API**
152
+
153
+ **Non-secret (share in chat during /setup-gentyr):**
154
+ - Cloudflare Zone ID (32-character hex string)
155
+ - Find at: Cloudflare Dashboard > your domain > right sidebar under "API"
156
+
157
+ > **Browser automation tip — Cloudflare:** The Zone ID is visible on the domain overview page without clicking into any sub-menus. Use `get_page_text` to extract it — look for a 32-character hex string near "Zone ID" in the right sidebar. The token creation flow uses a multi-step wizard with dropdowns for zone selection; use `read_page(filter="interactive")` to find the correct selectors at each step.
158
+
159
+ ## Phase 6: Supabase Credentials
160
+
161
+ ### Service Role Key (secret)
162
+ 1. Go to your Supabase project dashboard
163
+ 2. Navigate to **Project Settings > API**
164
+ 3. Copy the **service_role** key (secret — never expose in frontend)
165
+
166
+ **1Password Storage:**
167
+ - Vault: **Production**
168
+ - Item title: **Supabase**
169
+ - Item type: Login
170
+ - Fields:
171
+ - `service-role-key` = [paste service role key]
172
+ - Predefined path: `op://Production/Supabase/service-role-key`
173
+
174
+ ### Non-secret identifiers (share in chat during /setup-gentyr)
175
+ - **Supabase URL** (e.g., `https://abcdefghijklmnop.supabase.co`)
176
+ - Find at: Supabase Dashboard > Project Settings > API > URL
177
+ - **Supabase Anon Key** (public API key, embedded in frontend code)
178
+ - Find at: Supabase Dashboard > Project Settings > API > anon (public)
179
+
180
+ ### Management Access Token
181
+ 1. Go to https://supabase.com/dashboard/account/tokens
182
+ 2. Click **Generate new token**
183
+ 3. Name: "GENTYR - {project-name}"
184
+ 4. Copy the token
185
+
186
+ **1Password Storage:**
187
+ - Vault: **Production**
188
+ - Item: **Supabase** (same item as service-role-key)
189
+ - Fields:
190
+ - `access-token` = [paste management token]
191
+ - Predefined path: `op://Production/Supabase/access-token`
192
+
193
+ **What this enables:** `supabase_sql`, `supabase_push_migration`, `supabase_list_migrations`, `supabase_get_project` MCP tools. Without it, `supabase_list_tables` and `supabase_describe_table` use a PostgREST fallback with slightly less detail.
194
+
195
+ > **Browser automation tip — Supabase:** The API page shows the `anon` key, `service_role` key, and URL all on one page. Use `get_page_text` to extract all three at once. The `service_role` key is hidden behind a "Reveal" button — click it first, then extract. For the management access token at `supabase.com/dashboard/account/tokens`, the token is displayed once after generation — capture immediately with `get_page_text`.
196
+
197
+ ## Phase 7: Elastic Cloud Credentials
198
+
199
+ ### API Keys
200
+
201
+ #### For Hosted Deployments
202
+ 1. Go to https://cloud.elastic.co
203
+ 2. Open your deployment
204
+ 3. Click **Manage** > **Security** > **Create API Key**
205
+ 4. Create two keys:
206
+ - "Ingest" key (for backend logging): Index privileges on `logs-*`
207
+ - "Query" key (for Claude Code): Read privileges on `logs-*`
208
+
209
+ #### For Serverless Projects
210
+ 1. Go to https://cloud.elastic.co/serverless
211
+ 2. Open your project
212
+ 3. Go to **Project Settings** > **Management** > **API Keys**
213
+ 4. Create two keys:
214
+ - "Ingest" key (for backend logging): Index privileges on `logs-*`
215
+ - "Query" key (for Claude Code): Read privileges on `logs-*`
216
+
217
+ **1Password Storage:**
218
+ - Vault: **Production**
219
+ - Item title: **Elastic**
220
+ - Item type: Login
221
+ - Fields:
222
+ - `api-key` = [paste ingest API key]
223
+ - `api-key-query` = [paste query API key]
224
+ - Predefined paths:
225
+ - `op://Production/Elastic/api-key` (ingest — for backend logging, not used by GENTYR)
226
+ - `op://Production/Elastic/api-key-query` (query — **used by GENTYR MCP `elastic-logs` server**)
227
+
228
+ ### Connection Identifier
229
+
230
+ Provide **one** of the following (not both):
231
+
232
+ **Non-secret (share in chat during /setup-gentyr):**
233
+
234
+ **Option A — Hosted Deployment (Cloud ID):**
235
+ - Elastic Cloud ID (e.g., `my-deployment:dXMtY2VudH...`)
236
+ - Find at: Elastic Cloud > Deployments > your deployment > Cloud ID
237
+ - Stored as: `ELASTIC_CLOUD_ID` in vault-mappings.json
238
+
239
+ **Option B — Serverless Project (Endpoint URL):**
240
+ - Elasticsearch endpoint URL (e.g., `https://my-project-abc123.es.us-central1.gcp.elastic.cloud`)
241
+ - Find at: Elastic Cloud > Serverless > your project > Endpoints
242
+ - Stored as: `ELASTIC_ENDPOINT` in vault-mappings.json
243
+
244
+ > **Browser automation tip — Elastic Cloud:** The "Create API Key" UI has toggles and role selectors that are unreliable with browser automation. **Strongly prefer using the Dev Tools Console** (REST API) instead:
245
+ >
246
+ > 1. Navigate to your project's Dev Tools Console: `https://cloud.elastic.co/.../app/dev_tools#/console/shell`
247
+ > 2. Run the following REST command to create each key:
248
+ > ```
249
+ > POST /_security/api_key
250
+ > {
251
+ > "name": "log-query-readonly",
252
+ > "role_descriptors": {
253
+ > "logs_reader": {
254
+ > "indices": [{ "names": ["logs-*"], "privileges": ["read"] }]
255
+ > }
256
+ > }
257
+ > }
258
+ > ```
259
+ > 3. Use `get_page_text` to extract the JSON response from the console output panel.
260
+ > 4. The response contains `id`, `api_key`, and `encoded` fields. **Store the `encoded` value** — this is the base64-encoded `id:api_key` string ready for use. A valid encoded key is ~60 characters. If it's ~36 characters or less, the key was likely truncated during copy.
261
+ > 5. For the ingest key, change `"privileges": ["read"]` to `"privileges": ["index", "create_index"]`.
262
+ >
263
+ > The Endpoint URL for Serverless projects can be found at the project's Endpoints page — use `get_page_text` to extract it.
264
+
265
+ ## Phase 8: Resend API Key
266
+
267
+ 1. Go to https://resend.com/api-keys
268
+ 2. Click **Create API Key**
269
+ 3. Name: "GENTYR - {project-name}"
270
+ 4. Permission: **Full access** (recommended)
271
+ - "Full access" enables domain management, API key listing, and all MCP tools
272
+ - "Sending access" is sufficient if you only need email sending (setup-validate will warn about limited tools)
273
+ 5. Domain: your domain (or leave blank for all domains)
274
+ 6. Copy the API key
275
+
276
+ **1Password Storage:**
277
+ - Vault: **Production**
278
+ - Item title: **Resend**
279
+ - Item type: Login
280
+ - Fields:
281
+ - `api-key` = [paste the API key]
282
+ - Predefined path: `op://Production/Resend/api-key`
283
+
284
+ > **Browser automation tip — Resend:** The API key is displayed once after creation. Use `get_page_text` to capture it immediately. The permission dropdown ("Full access" vs "Sending access") should be selected before clicking "Create".
285
+
286
+ ## Phase 9: Codecov Token
287
+
288
+ 1. Go to https://app.codecov.io
289
+ 2. Navigate to your repository settings
290
+ 3. Copy the **Upload Token**
291
+
292
+ **1Password Storage:**
293
+ - Vault: **Production**
294
+ - Item title: **Codecov**
295
+ - Item type: Login
296
+ - Fields:
297
+ - `token` = [paste the upload token]
298
+ - Predefined path: `op://Production/Codecov/token`
299
+
300
+ > **Browser automation tip — Codecov:** Codecov uses GitHub OAuth for login, which can be disrupted by Chrome extensions. If the OAuth redirect fails or loops, ask the user to log in manually in the browser first, then navigate directly to the repository settings page. The Upload Token is visible on the settings page without any reveal/toggle interaction — use `get_page_text` to extract it.
301
+
302
+ ## How Credentials Work
303
+
304
+ After creating each credential in your service provider, store it in 1Password:
305
+
306
+ 1. Open 1Password Desktop app
307
+ 2. Navigate to the **Production** vault
308
+ 3. Create a new item with the exact title and field names specified in each phase above
309
+ 4. Run `/setup-gentyr` — it verifies these exist and writes `op://` references to `.claude/vault-mappings.json`
310
+ 5. The MCP launcher resolves these at server startup — credentials exist only in process memory
311
+
312
+ **Non-secret identifiers** (URLs, zone IDs, cloud IDs) don't need 1Password. Share them in chat during `/setup-gentyr` and they'll be written directly to `vault-mappings.json`.
313
+
314
+ ## Phase 10: Branch Protection & Deployment Pipeline
315
+
316
+ GENTYR enforces a strict merge chain: `feature/* -> preview -> staging -> main (production)`.
317
+
318
+ ### Why the Merge Chain Matters
319
+
320
+ - **Feature branches** can only merge into `preview` (no approval needed)
321
+ - **Preview** can only merge into `staging` (deputy-CTO approval)
322
+ - **Staging** can only merge into `main` (CTO approval)
323
+ - Direct merges from feature branches to staging/main are **forbidden**
324
+
325
+ ### CI Enforcement
326
+
327
+ GitHub has no native rule to restrict which source branch a PR comes from. GENTYR includes a `merge-chain-check.yml` CI workflow that enforces this. It must be added as a **required status check** on all protected branches.
328
+
329
+ The workflow template is at: `node_modules/gentyr/templates/config/merge-chain-check.yml.template`
330
+
331
+ Copy it to `.github/workflows/merge-chain-check.yml` in your project.
332
+
333
+ ### Branch Protection (GitHub Teams)
334
+
335
+ Go to: Repository > Settings > Branches > Add branch protection rule
336
+
337
+ **For each branch (`preview`, `staging`, `main`):**
338
+ 1. Require a pull request before merging
339
+ 2. Require status checks to pass (include `Validate Merge Chain`)
340
+ 3. Block force pushes
341
+ 4. Do not allow bypassing settings
342
+
343
+ **Additional for `staging`:** Require 1 approving review (deputy-CTO)
344
+ **Additional for `main`:** Require 1 approving review (CTO) + Security Scan check
345
+
346
+ See `node_modules/gentyr/docs/DEPLOYMENT-FLOW.md` for complete branch protection instructions.
347
+
348
+ ### GitHub Enterprise Cloud
349
+
350
+ If on Enterprise Cloud, also configure:
351
+ - Organization Rulesets for cross-repo enforcement
352
+ - Deployment Protection Rules for staging/production environments
353
+ - Merge Queue for the `main` branch
354
+
355
+ ### `gh` CLI Authentication
356
+
357
+ The automated promotion pipelines use `gh` CLI for PR operations. Ensure it's authenticated:
358
+
359
+ ```bash
360
+ gh auth login
361
+ gh auth status
362
+ ```
363
+
364
+ ### Automated Promotion
365
+
366
+ Once branch protection is configured, GENTYR's hourly automation handles promotion:
367
+
368
+ - **Preview -> Staging**: Every 6 hours, reviews new commits and promotes if stable (24h or bug-fix)
369
+ - **Staging -> Main**: Nightly at midnight, promotes if staging is 24h+ stable (requires CTO approval)
370
+
371
+ ### Health Monitoring
372
+
373
+ GENTYR monitors deployed environments:
374
+
375
+ - **Staging**: Every 3 hours -- checks Render, Vercel, Elasticsearch, Codecov
376
+ - **Production**: Every 1 hour -- same checks + CTO escalation for issues
377
+
378
+ Enable/disable via `.claude/autonomous-mode.json`:
379
+ ```json
380
+ {
381
+ "previewPromotionEnabled": true,
382
+ "stagingPromotionEnabled": true,
383
+ "stagingHealthMonitorEnabled": true,
384
+ "productionHealthMonitorEnabled": true
385
+ }
386
+ ```
387
+
388
+ ## Permission Validation
389
+
390
+ After completing setup, run permission validation to verify all credentials work and have correct permissions:
391
+
392
+ ```bash
393
+ node node_modules/gentyr/scripts/setup-validate.js
394
+ ```
395
+
396
+ This makes **read-only** API calls to each service and reports:
397
+
398
+ | Status | Meaning |
399
+ |--------|---------|
400
+ | **pass** | Credential works with correct permissions |
401
+ | **warn** | Credential works but with limited permissions (some MCP tools may not function) |
402
+ | **fail** | Credential is invalid, expired, or lacks required permissions |
403
+ | **skip** | Credential not configured |
404
+
405
+ Each failure includes specific **remediation instructions** with URLs to fix the issue.
406
+
407
+ ### Required API Permissions by Service
408
+
409
+ | Service | Required Permissions | Key Type |
410
+ |---------|---------------------|----------|
411
+ | **Vercel** | Full Account scope | Personal token |
412
+ | **Render** | Full API access | API key (not scoped) |
413
+ | **GitHub** | Actions R/W, Contents R/W, Issues R/W, PRs R/W, Secrets R/W, Environments R/W | Fine-grained PAT |
414
+ | **Cloudflare** | Zone DNS Edit (for specific zone) | API token (Edit zone DNS template) |
415
+ | **Supabase** | Service role key (admin), anon key (public) | Project API keys |
416
+ | **Resend** | Full access (recommended) or Sending access (limited) | API key |
417
+ | **Elastic** | Read-only on `logs-*` indices | API key |
418
+ | **Codecov** | Any valid token (read-only API) | Upload token |
419
+ | **1Password** | Service account with vault access | Service account token |
package/docs/STACK.md ADDED
@@ -0,0 +1,109 @@
1
+ # the stack
2
+
3
+ GENTYR chose managed services so every agent, hook, and server is purpose-built for exactly these tools. No abstraction layers. No configuration matrices. No "bring your own database."
4
+
5
+ Every technology below exists for one reason: it removes a decision that agents would otherwise need a human to make. Supabase provides auth, storage, and a database behind a single API. Vercel deploys frontend on push. Render deploys backend on push. 1Password resolves secrets without exposing values. The stack is not configurable because configurability is the enemy of autonomous operation.
6
+
7
+ Thirty MCP servers connect agents to these services. Each server speaks one protocol to one provider. When an agent needs to deploy, it talks to the Render server. When it needs a secret, it talks to the 1Password server. When it needs to query logs, it talks to the Elastic server. No adapters. No middleware. No indirection.
8
+
9
+ This is the stack. Learn it or choose a different framework.
10
+
11
+ ---
12
+
13
+ ## Application Layer
14
+
15
+ **TypeScript (strict, ESM)** is the only language. Strict mode catches type errors before agents write tests. ESM modules mean consistent import semantics across frontend, backend, and tooling. Every package in the monorepo shares the same language, the same compiler, the same rules.
16
+
17
+ **Next.js on Vercel** handles the frontend. Vercel's zero-config deployment means agents push code and it goes live. No Dockerfile, no build pipeline to maintain, no CDN to configure. The MCP server (`vercel`) manages deployments, environment variables, and project settings through Vercel's API.
18
+
19
+ **Hono on Render** runs the backend API. Hono is lightweight, TypeScript-native, and fast. Render provides persistent web services with health checks, auto-deploy from git, and managed TLS. The MCP server (`render`) handles service management, deploy triggers, and environment configuration.
20
+
21
+ **Supabase** provides PostgreSQL, authentication, file storage, and row-level security through a single dashboard and API. Agents interact through the MCP server (`supabase`) for schema management and through the Supabase client SDK for runtime queries. RLS policies are enforced at the database level, which means security doesn't depend on application code.
22
+
23
+ **Zod** handles runtime validation. Every API endpoint, every webhook handler, every configuration file gets a Zod schema. The compliance checker verifies this. Silent JSON parsing without validation is a spec violation.
24
+
25
+ ## Infrastructure Layer
26
+
27
+ **pnpm monorepo** organizes the project. A single `pnpm-workspace.yaml` defines the package graph. Shared types live in `packages/shared`. The logger lives in `packages/logger`. Build and test commands run from the root.
28
+
29
+ **GitHub + Actions** handles source control and CI/CD. The merge chain (`feature -> preview -> staging -> main`) is enforced locally by hooks and remotely by branch protection rules. Actions run tests, lint, and type-checking on every push.
30
+
31
+ **1Password** is the single source of truth for secrets. Every credential is an `op://` reference. The MCP server (`onepassword`) resolves references at runtime. The secret-sync server pushes secrets to deployment platforms. Nothing is stored on disk. Nothing passes through agent context.
32
+
33
+ **Cloudflare** manages DNS. The MCP server (`cloudflare`) handles record creation and verification. Free tier is sufficient for most projects.
34
+
35
+ **Elastic Cloud** provides centralized logging. Application logs ship in ECS format from the structured logger (`packages/logger`). The MCP server (`elastic-logs`) queries Elasticsearch for error patterns, warning trends, and service health. The CTO dashboard aggregates log metrics from this source.
36
+
37
+ **Resend** handles transactional email. The MCP server (`resend`) sends emails and checks delivery status. Simple API, reliable delivery, no SMTP configuration.
38
+
39
+ **Codecov** reports test coverage. The MCP server (`codecov`) fetches coverage data for the CTO dashboard. Coverage trends are tracked over time and displayed in the testing section.
40
+
41
+ ## Testing Layer
42
+
43
+ **Vitest** runs unit and integration tests. Fast, TypeScript-native, compatible with the monorepo structure. Test failures trigger automatic agent spawns via the test-failure-reporter hook.
44
+
45
+ **Playwright** runs end-to-end and browser tests. The MCP server (`playwright`) and feedback MCP servers (`playwright-feedback`, `programmatic-feedback`) enable AI personas to test the product as real users. No headless browser configuration needed.
46
+
47
+ ---
48
+
49
+ ## MCP Server Mappings
50
+
51
+ Each infrastructure service maps to one or more MCP servers that give agents programmatic access:
52
+
53
+ | Service | MCP Server(s) | Capabilities |
54
+ |---------|--------------|--------------|
55
+ | 1Password | `onepassword`, `secret-sync` | Resolve `op://` refs, sync to platforms, run with injected secrets |
56
+ | Render | `render` | Service management, deploys, environment variables, logs |
57
+ | Vercel | `vercel` | Project management, deploys, environment variables |
58
+ | Supabase | `supabase` | Schema management, migrations, RLS policies |
59
+ | GitHub | `github` | PRs, issues, Actions, branch management |
60
+ | Cloudflare | `cloudflare` | DNS records, zone management |
61
+ | Elastic Cloud | `elastic-logs` | Log queries, error analysis, volume metrics |
62
+ | Resend | `resend` | Email sending, delivery status |
63
+ | Codecov | `codecov` | Coverage data, trends |
64
+ | Chrome | `chrome-bridge` | Browser automation, page interaction, debugging |
65
+
66
+ Internal MCP servers (not tied to external providers):
67
+
68
+ | Server | Purpose |
69
+ |--------|---------|
70
+ | `todo-db` | Task database (SQLite) |
71
+ | `deputy-cto` | Triage pipeline, commit review, CTO questions |
72
+ | `agent-tracker` | Agent lifecycle, spawn/reap tracking |
73
+ | `agent-reports` | Report submission and query |
74
+ | `cto-reports`, `cto-report` | Dashboard data aggregation |
75
+ | `review-queue` | Commit review queue |
76
+ | `session-events` | Session lifecycle events |
77
+ | `feedback-reporter`, `feedback-explorer`, `user-feedback` | Feedback pipeline |
78
+ | `playwright-feedback`, `programmatic-feedback` | AI persona testing |
79
+ | `specs-browser` | Specification document access |
80
+ | `setup-helper` | Installation and configuration |
81
+ | `makerkit-docs` | MakerKit documentation reference |
82
+ | `shared` | Shared utilities across servers |
83
+
84
+ ---
85
+
86
+ ## Monorepo Structure
87
+
88
+ ```
89
+ project-root/
90
+ ├── node_modules/gentyr/ # GENTYR (npm package)
91
+ ├── .claude/config/services.json # Project-specific service IDs
92
+ ├── products/
93
+ │ └── {product-name}/
94
+ │ └── apps/
95
+ │ ├── backend/ # Hono on Render
96
+ │ ├── web/ # Next.js on Vercel (MakerKit)
97
+ │ └── extension/ # Browser extension (optional)
98
+ ├── packages/
99
+ │ ├── shared/ # Shared types and utilities
100
+ │ └── logger/ # Structured logger (ECS format)
101
+ ├── integrations/ # Platform connectors
102
+ ├── specs/
103
+ │ ├── global/ # System-wide invariants
104
+ │ ├── local/ # Component specifications
105
+ │ └── reference/ # Development guides
106
+ ├── render.yaml # Render blueprint
107
+ ├── pnpm-workspace.yaml # Monorepo config
108
+ └── .github/workflows/ci.yml # CI pipeline
109
+ ```