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,535 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Agent Reports MCP Server
4
+ *
5
+ * Triage queue for agent reports. Agents submit reports here, which are then
6
+ * triaged by the deputy-cto. Only deputy-cto can escalate items to the CTO queue.
7
+ *
8
+ * Flow: Agent → submit_report → Triage Queue → Deputy-CTO triages → (maybe) CTO Queue
9
+ *
10
+ * Features:
11
+ * - Report creation with title, summary, category, priority
12
+ * - List reports (titles/timestamps only to preserve tokens)
13
+ * - Read report (expands full content)
14
+ * - Triage lifecycle (pending → in_progress → completed)
15
+ * - Auto-cleanup: 7 days expiry, max 50 items
16
+ *
17
+ * Protocol: JSON-RPC 2.0 over stdin/stdout (stdio MCP)
18
+ *
19
+ * @version 2.0.0
20
+ */
21
+ import * as fs from 'fs';
22
+ import * as path from 'path';
23
+ import { randomUUID } from 'crypto';
24
+ import Database from 'better-sqlite3';
25
+ import { McpServer } from '../shared/server.js';
26
+ import { ReportToCtoArgsSchema, ListReportsArgsSchema, GetUntriagedCountArgsSchema, ReadReportArgsSchema, AcknowledgeReportArgsSchema, MarkTriagedArgsSchema, StartTriageArgsSchema, CompleteTriageArgsSchema, GetTriageStatsArgsSchema, GetReportsForTriageArgsSchema, } from './types.js';
27
+ // ============================================================================
28
+ // Configuration
29
+ // ============================================================================
30
+ const PROJECT_DIR = path.resolve(process.env['CLAUDE_PROJECT_DIR'] || process.cwd());
31
+ const DB_PATH = path.join(PROJECT_DIR, '.claude', 'cto-reports.db');
32
+ // Cleanup thresholds
33
+ const MAX_REPORTS = 50;
34
+ const MAX_AGE_DAYS = 7;
35
+ // ============================================================================
36
+ // Database Schema
37
+ // ============================================================================
38
+ const SCHEMA = `
39
+ CREATE TABLE IF NOT EXISTS reports (
40
+ id TEXT PRIMARY KEY,
41
+ reporting_agent TEXT NOT NULL,
42
+ title TEXT NOT NULL,
43
+ summary TEXT NOT NULL,
44
+ category TEXT NOT NULL DEFAULT 'other',
45
+ priority TEXT NOT NULL DEFAULT 'normal',
46
+ created_at TEXT NOT NULL,
47
+ created_timestamp INTEGER NOT NULL,
48
+ read_at TEXT,
49
+ acknowledged_at TEXT,
50
+ -- Triage lifecycle fields
51
+ triage_status TEXT NOT NULL DEFAULT 'pending',
52
+ triage_started_at TEXT,
53
+ triage_completed_at TEXT,
54
+ triage_session_id TEXT,
55
+ triage_outcome TEXT,
56
+ triage_attempted_at TEXT, -- Last attempt timestamp (for cooldown tracking)
57
+ -- Legacy fields (for backward compatibility)
58
+ triaged_at TEXT,
59
+ triage_action TEXT,
60
+ CONSTRAINT valid_category CHECK (category IN ('architecture', 'security', 'performance', 'breaking-change', 'blocker', 'decision', 'user-feedback', 'other')),
61
+ CONSTRAINT valid_priority CHECK (priority IN ('low', 'normal', 'high', 'critical')),
62
+ CONSTRAINT valid_triage_status CHECK (triage_status IN ('pending', 'in_progress', 'self_handled', 'escalated', 'dismissed'))
63
+ );
64
+
65
+ CREATE INDEX IF NOT EXISTS idx_reports_created ON reports(created_timestamp DESC);
66
+ CREATE INDEX IF NOT EXISTS idx_reports_acknowledged ON reports(acknowledged_at);
67
+ CREATE INDEX IF NOT EXISTS idx_reports_triage_status ON reports(triage_status);
68
+ CREATE INDEX IF NOT EXISTS idx_reports_triage_completed ON reports(triage_completed_at);
69
+ `;
70
+ // ============================================================================
71
+ // Database Management
72
+ // ============================================================================
73
+ let _db = null;
74
+ function initializeDatabase() {
75
+ const dbDir = path.dirname(DB_PATH);
76
+ if (!fs.existsSync(dbDir)) {
77
+ fs.mkdirSync(dbDir, { recursive: true });
78
+ }
79
+ const db = new Database(DB_PATH);
80
+ db.pragma('journal_mode = WAL');
81
+ db.exec(SCHEMA);
82
+ // Idempotent index creation
83
+ db.exec('CREATE INDEX IF NOT EXISTS idx_reports_triage_status ON reports(triage_status)');
84
+ db.exec('CREATE INDEX IF NOT EXISTS idx_reports_triage_completed ON reports(triage_completed_at)');
85
+ return db;
86
+ }
87
+ function getDb() {
88
+ if (!_db) {
89
+ _db = initializeDatabase();
90
+ }
91
+ return _db;
92
+ }
93
+ function closeDb() {
94
+ if (_db) {
95
+ _db.close();
96
+ _db = null;
97
+ }
98
+ }
99
+ // ============================================================================
100
+ // Cleanup Logic
101
+ // ============================================================================
102
+ function runCleanup() {
103
+ const db = getDb();
104
+ const now = Math.floor(Date.now() / 1000);
105
+ const maxAge = MAX_AGE_DAYS * 24 * 60 * 60;
106
+ const cutoff = now - maxAge;
107
+ // Delete reports older than 7 days
108
+ const oldResult = db.prepare(`
109
+ DELETE FROM reports WHERE created_timestamp < ?
110
+ `).run(cutoff);
111
+ const countResult = db.prepare('SELECT COUNT(*) as count FROM reports').get();
112
+ let deletedExcess = 0;
113
+ if (countResult.count > MAX_REPORTS) {
114
+ const toDelete = countResult.count - MAX_REPORTS;
115
+ const excessResult = db.prepare(`
116
+ DELETE FROM reports WHERE id IN (
117
+ SELECT id FROM reports
118
+ ORDER BY created_timestamp ASC
119
+ LIMIT ?
120
+ )
121
+ `).run(toDelete);
122
+ deletedExcess = excessResult.changes;
123
+ }
124
+ return {
125
+ deleted_old: oldResult.changes,
126
+ deleted_excess: deletedExcess,
127
+ };
128
+ }
129
+ // ============================================================================
130
+ // Tool Implementations
131
+ // ============================================================================
132
+ function reportToCto(args) {
133
+ const db = getDb();
134
+ // Run cleanup first
135
+ runCleanup();
136
+ const id = randomUUID();
137
+ const now = new Date();
138
+ const created_at = now.toISOString();
139
+ const created_timestamp = Math.floor(now.getTime() / 1000);
140
+ db.prepare(`
141
+ INSERT INTO reports (id, reporting_agent, title, summary, category, priority, created_at, created_timestamp)
142
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
143
+ `).run(id, args.reporting_agent, args.title, args.summary, args.category ?? 'other', args.priority ?? 'normal', created_at, created_timestamp);
144
+ return {
145
+ id,
146
+ message: `Report submitted for triage. ID: ${id}`,
147
+ };
148
+ }
149
+ function listReports(args) {
150
+ const db = getDb();
151
+ // Run cleanup first
152
+ runCleanup();
153
+ let sql = 'SELECT id, reporting_agent, title, category, priority, created_at, read_at, acknowledged_at, triage_status, triage_outcome, triaged_at, triage_action FROM reports';
154
+ const conditions = [];
155
+ const params = [];
156
+ if (args.unread_only) {
157
+ conditions.push('read_at IS NULL');
158
+ }
159
+ if (args.untriaged_only) {
160
+ // Use new triage_status field - pending means not triaged
161
+ conditions.push("triage_status = 'pending'");
162
+ }
163
+ if (conditions.length > 0) {
164
+ sql += ` WHERE ${conditions.join(' AND ')}`;
165
+ }
166
+ sql += ' ORDER BY created_timestamp DESC LIMIT ?';
167
+ params.push(args.limit ?? 20);
168
+ const reports = db.prepare(sql).all(...params);
169
+ const unreadCount = db.prepare('SELECT COUNT(*) as count FROM reports WHERE read_at IS NULL').get().count;
170
+ const untriagedCount = db.prepare("SELECT COUNT(*) as count FROM reports WHERE triage_status = 'pending'").get().count;
171
+ const items = reports.map(r => ({
172
+ id: r.id,
173
+ reporting_agent: r.reporting_agent,
174
+ title: r.title,
175
+ category: r.category,
176
+ priority: r.priority,
177
+ created_at: r.created_at,
178
+ is_read: r.read_at !== null,
179
+ is_acknowledged: r.acknowledged_at !== null,
180
+ triage_status: (r.triage_status || 'pending'),
181
+ triage_outcome: r.triage_outcome,
182
+ // Legacy fields
183
+ is_triaged: r.triage_status !== 'pending',
184
+ triage_action: r.triage_action,
185
+ }));
186
+ return {
187
+ reports: items,
188
+ total: items.length,
189
+ unread_count: unreadCount,
190
+ untriaged_count: untriagedCount,
191
+ };
192
+ }
193
+ function readReport(args) {
194
+ const db = getDb();
195
+ const report = db.prepare('SELECT * FROM reports WHERE id = ?').get(args.id);
196
+ if (!report) {
197
+ return { error: `Report not found: ${args.id}` };
198
+ }
199
+ // Mark as read
200
+ const now = new Date().toISOString();
201
+ if (!report.read_at) {
202
+ db.prepare('UPDATE reports SET read_at = ? WHERE id = ?').run(now, args.id);
203
+ }
204
+ return {
205
+ id: report.id,
206
+ reporting_agent: report.reporting_agent,
207
+ title: report.title,
208
+ summary: report.summary,
209
+ category: report.category,
210
+ priority: report.priority,
211
+ created_at: report.created_at,
212
+ read_at: report.read_at ?? now,
213
+ };
214
+ }
215
+ function acknowledgeReport(args) {
216
+ const db = getDb();
217
+ const report = db.prepare('SELECT * FROM reports WHERE id = ?').get(args.id);
218
+ if (!report) {
219
+ return { error: `Report not found: ${args.id}` };
220
+ }
221
+ // Must read before acknowledging
222
+ if (!report.read_at) {
223
+ return {
224
+ error: `Cannot acknowledge report ${args.id} without reading it first. Use read_report to view the full content before acknowledging.`,
225
+ };
226
+ }
227
+ if (report.acknowledged_at) {
228
+ return {
229
+ id: args.id,
230
+ acknowledged: true,
231
+ message: `Report already acknowledged at ${report.acknowledged_at}`,
232
+ };
233
+ }
234
+ const now = new Date().toISOString();
235
+ db.prepare('UPDATE reports SET acknowledged_at = ? WHERE id = ?').run(now, args.id);
236
+ return {
237
+ id: args.id,
238
+ acknowledged: true,
239
+ message: `Report acknowledged. Consider using deputy-cto MCP to add noteworthy items to the CTO question queue.`,
240
+ };
241
+ }
242
+ function getUntriagedCount(_args) {
243
+ const db = getDb();
244
+ // Use new triage_status field - pending means not triaged
245
+ const total = db.prepare("SELECT COUNT(*) as count FROM reports WHERE triage_status = 'pending'").get().count;
246
+ const byPriority = db.prepare(`
247
+ SELECT priority, COUNT(*) as count
248
+ FROM reports
249
+ WHERE triage_status = 'pending'
250
+ GROUP BY priority
251
+ `).all();
252
+ const priorityCounts = {
253
+ critical: 0,
254
+ high: 0,
255
+ normal: 0,
256
+ low: 0,
257
+ };
258
+ for (const row of byPriority) {
259
+ if (row.priority in priorityCounts) {
260
+ priorityCounts[row.priority] = row.count;
261
+ }
262
+ }
263
+ return {
264
+ untriaged_count: total,
265
+ by_priority: priorityCounts,
266
+ };
267
+ }
268
+ function markTriaged(args) {
269
+ const db = getDb();
270
+ const report = db.prepare('SELECT * FROM reports WHERE id = ?').get(args.id);
271
+ if (!report) {
272
+ return { error: `Report not found: ${args.id}` };
273
+ }
274
+ if (report.triaged_at) {
275
+ return {
276
+ id: args.id,
277
+ action: report.triage_action,
278
+ message: `Report already triaged at ${report.triaged_at} with action: ${report.triage_action}`,
279
+ };
280
+ }
281
+ const now = new Date().toISOString();
282
+ db.prepare('UPDATE reports SET triaged_at = ?, triage_action = ? WHERE id = ?').run(now, args.action, args.id);
283
+ // If auto-acknowledged, also set acknowledged_at and read_at
284
+ if (args.action === 'auto-acknowledged') {
285
+ db.prepare('UPDATE reports SET read_at = COALESCE(read_at, ?), acknowledged_at = COALESCE(acknowledged_at, ?) WHERE id = ?').run(now, now, args.id);
286
+ }
287
+ return {
288
+ id: args.id,
289
+ action: args.action,
290
+ message: `Report triaged with action: ${args.action}`,
291
+ };
292
+ }
293
+ // ============================================================================
294
+ // New Triage Lifecycle Tools
295
+ // ============================================================================
296
+ function startTriage(args) {
297
+ const db = getDb();
298
+ const report = db.prepare('SELECT * FROM reports WHERE id = ?').get(args.id);
299
+ if (!report) {
300
+ return { error: `Report not found: ${args.id}` };
301
+ }
302
+ if (report.triage_status === 'in_progress') {
303
+ return {
304
+ id: args.id,
305
+ started: false,
306
+ message: `Report already being triaged (started at ${report.triage_started_at})`,
307
+ };
308
+ }
309
+ if (report.triage_status !== 'pending') {
310
+ return {
311
+ id: args.id,
312
+ started: false,
313
+ message: `Report already triaged with status: ${report.triage_status}`,
314
+ };
315
+ }
316
+ const now = new Date().toISOString();
317
+ db.prepare(`
318
+ UPDATE reports
319
+ SET triage_status = 'in_progress', triage_started_at = ?, triage_session_id = ?,
320
+ triage_attempted_at = ?, read_at = COALESCE(read_at, ?)
321
+ WHERE id = ?
322
+ `).run(now, args.session_id || null, now, now, args.id);
323
+ return {
324
+ id: args.id,
325
+ started: true,
326
+ message: `Triage started for report: ${report.title}`,
327
+ };
328
+ }
329
+ function completeTriage(args) {
330
+ const db = getDb();
331
+ const report = db.prepare('SELECT * FROM reports WHERE id = ?').get(args.id);
332
+ if (!report) {
333
+ return { error: `Report not found: ${args.id}` };
334
+ }
335
+ if (report.triage_status !== 'in_progress' && report.triage_status !== 'pending') {
336
+ return { error: `Report already completed with status: ${report.triage_status}` };
337
+ }
338
+ const now = new Date().toISOString();
339
+ db.prepare(`
340
+ UPDATE reports
341
+ SET triage_status = ?, triage_completed_at = ?, triage_outcome = ?,
342
+ triaged_at = ?, triage_action = ?,
343
+ acknowledged_at = COALESCE(acknowledged_at, ?)
344
+ WHERE id = ?
345
+ `).run(args.status, now, args.outcome, now, args.status, now, args.id);
346
+ return {
347
+ id: args.id,
348
+ status: args.status,
349
+ outcome: args.outcome,
350
+ message: `Triage completed: ${args.status}`,
351
+ };
352
+ }
353
+ function getTriageStats(args) {
354
+ const db = getDb();
355
+ const now = Date.now();
356
+ const recentCutoff = new Date(now - (args.recent_window_hours ?? 24) * 60 * 60 * 1000).toISOString();
357
+ const extendedCutoff = new Date(now - (args.extended_window_hours ?? 168) * 60 * 60 * 1000).toISOString();
358
+ // Current status counts
359
+ const pending = db.prepare("SELECT COUNT(*) as count FROM reports WHERE triage_status = 'pending'").get().count;
360
+ const inProgress = db.prepare("SELECT COUNT(*) as count FROM reports WHERE triage_status = 'in_progress'").get().count;
361
+ // Completed counts by time range (recent = default 24h, extended = default 7d)
362
+ const selfHandledRecent = db.prepare(`
363
+ SELECT COUNT(*) as count FROM reports
364
+ WHERE triage_status = 'self_handled' AND triage_completed_at >= ?
365
+ `).get(recentCutoff).count;
366
+ const selfHandledExtended = db.prepare(`
367
+ SELECT COUNT(*) as count FROM reports
368
+ WHERE triage_status = 'self_handled' AND triage_completed_at >= ?
369
+ `).get(extendedCutoff).count;
370
+ const escalatedRecent = db.prepare(`
371
+ SELECT COUNT(*) as count FROM reports
372
+ WHERE triage_status = 'escalated' AND triage_completed_at >= ?
373
+ `).get(recentCutoff).count;
374
+ const escalatedExtended = db.prepare(`
375
+ SELECT COUNT(*) as count FROM reports
376
+ WHERE triage_status = 'escalated' AND triage_completed_at >= ?
377
+ `).get(extendedCutoff).count;
378
+ const dismissedRecent = db.prepare(`
379
+ SELECT COUNT(*) as count FROM reports
380
+ WHERE triage_status = 'dismissed' AND triage_completed_at >= ?
381
+ `).get(recentCutoff).count;
382
+ const dismissedExtended = db.prepare(`
383
+ SELECT COUNT(*) as count FROM reports
384
+ WHERE triage_status = 'dismissed' AND triage_completed_at >= ?
385
+ `).get(extendedCutoff).count;
386
+ return {
387
+ stats: {
388
+ pending,
389
+ in_progress: inProgress,
390
+ self_handled_24h: selfHandledRecent,
391
+ self_handled_7d: selfHandledExtended,
392
+ escalated_24h: escalatedRecent,
393
+ escalated_7d: escalatedExtended,
394
+ dismissed_24h: dismissedRecent,
395
+ dismissed_7d: dismissedExtended,
396
+ },
397
+ message: `Triage stats: ${pending} pending, ${inProgress} in progress, ${selfHandledRecent}/${selfHandledExtended} self-handled (recent/extended), ${escalatedRecent}/${escalatedExtended} escalated (recent/extended), ${dismissedRecent}/${dismissedExtended} dismissed (recent/extended)`,
398
+ };
399
+ }
400
+ // Cooldown: 1 hour between triage attempts on same report
401
+ const TRIAGE_COOLDOWN_MS = 60 * 60 * 1000;
402
+ function getReportsForTriage(args) {
403
+ const db = getDb();
404
+ const now = new Date();
405
+ const cooldownCutoff = new Date(now.getTime() - TRIAGE_COOLDOWN_MS).toISOString();
406
+ // First, reset stale in_progress reports (started > 1 hour ago) back to pending
407
+ // This handles cases where triage was started but never completed (timeout, crash, etc.)
408
+ db.prepare(`
409
+ UPDATE reports
410
+ SET triage_status = 'pending'
411
+ WHERE triage_status = 'in_progress'
412
+ AND triage_started_at < ?
413
+ `).run(cooldownCutoff);
414
+ // Get reports that are:
415
+ // 1. Status = pending
416
+ // 2. Either never attempted, or last attempt was > 1 hour ago
417
+ const reports = db.prepare(`
418
+ SELECT id, reporting_agent, title, summary, category, priority, created_at
419
+ FROM reports
420
+ WHERE triage_status = 'pending'
421
+ AND (triage_attempted_at IS NULL OR triage_attempted_at < ?)
422
+ ORDER BY
423
+ CASE priority
424
+ WHEN 'critical' THEN 1
425
+ WHEN 'high' THEN 2
426
+ WHEN 'normal' THEN 3
427
+ WHEN 'low' THEN 4
428
+ END,
429
+ created_timestamp ASC
430
+ LIMIT ?
431
+ `).all(cooldownCutoff, args.limit ?? 10);
432
+ // Total pending (regardless of cooldown)
433
+ const totalPending = db.prepare("SELECT COUNT(*) as count FROM reports WHERE triage_status = 'pending'").get().count;
434
+ // Ready for triage (past cooldown)
435
+ const totalReady = db.prepare(`
436
+ SELECT COUNT(*) as count FROM reports
437
+ WHERE triage_status = 'pending'
438
+ AND (triage_attempted_at IS NULL OR triage_attempted_at < ?)
439
+ `).get(cooldownCutoff).count;
440
+ return {
441
+ reports: reports.map(r => ({
442
+ id: r.id,
443
+ reporting_agent: r.reporting_agent,
444
+ title: r.title,
445
+ summary: r.summary,
446
+ category: r.category,
447
+ priority: r.priority,
448
+ created_at: r.created_at,
449
+ })),
450
+ total: totalReady,
451
+ message: `Found ${reports.length} of ${totalReady} reports ready for triage (${totalPending} total pending, ${totalPending - totalReady} on cooldown)`,
452
+ };
453
+ }
454
+ // ============================================================================
455
+ // Server Setup
456
+ // ============================================================================
457
+ const tools = [
458
+ {
459
+ name: 'report_to_deputy_cto',
460
+ description: 'Report an issue to the deputy-cto for triage. Deputy-cto reviews and may escalate to CTO queue. Use for architecture decisions, security concerns, blockers, or important changes.',
461
+ schema: ReportToCtoArgsSchema,
462
+ handler: reportToCto,
463
+ },
464
+ {
465
+ name: 'list_reports',
466
+ description: 'List CTO reports (titles and timestamps only to preserve tokens). Use unread_only=true for unread, untriaged_only=true for reports needing deputy-cto triage.',
467
+ schema: ListReportsArgsSchema,
468
+ handler: listReports,
469
+ },
470
+ {
471
+ name: 'read_report',
472
+ description: 'Read the full content of a report. Marks the report as read. Required before acknowledging.',
473
+ schema: ReadReportArgsSchema,
474
+ handler: readReport,
475
+ },
476
+ {
477
+ name: 'acknowledge_report',
478
+ description: 'Acknowledge a report (must read first). After acknowledging, consider adding noteworthy items to CTO question queue via deputy-cto MCP.',
479
+ schema: AcknowledgeReportArgsSchema,
480
+ handler: acknowledgeReport,
481
+ },
482
+ {
483
+ name: 'get_untriaged_count',
484
+ description: 'Get count of reports not yet triaged by deputy-cto. Used to check if triage is needed before /deputy-cto session.',
485
+ schema: GetUntriagedCountArgsSchema,
486
+ handler: getUntriagedCount,
487
+ },
488
+ {
489
+ name: 'mark_triaged',
490
+ description: 'Mark a report as triaged by deputy-cto. Actions: auto-acknowledged (routine/clear), escalated (added to CTO queue), needs-cto-review (left for manual review).',
491
+ schema: MarkTriagedArgsSchema,
492
+ handler: markTriaged,
493
+ },
494
+ // New triage lifecycle tools
495
+ {
496
+ name: 'start_triage',
497
+ description: 'Start triaging a report. Sets status to in_progress. Call this before investigating a report.',
498
+ schema: StartTriageArgsSchema,
499
+ handler: startTriage,
500
+ },
501
+ {
502
+ name: 'complete_triage',
503
+ description: 'Complete triage of a report. Status: self_handled (spawned task to fix), escalated (added to CTO queue), or dismissed (not a real issue/already resolved). Include outcome description.',
504
+ schema: CompleteTriageArgsSchema,
505
+ handler: completeTriage,
506
+ },
507
+ {
508
+ name: 'get_triage_stats',
509
+ description: 'Get triage statistics: pending, in_progress, self_handled (24h/7d), escalated (24h/7d). Used for CTO reporting.',
510
+ schema: GetTriageStatsArgsSchema,
511
+ handler: getTriageStats,
512
+ },
513
+ {
514
+ name: 'get_reports_for_triage',
515
+ description: 'Get pending reports ready for triage, ordered by priority (critical first). Includes full summary for investigation.',
516
+ schema: GetReportsForTriageArgsSchema,
517
+ handler: getReportsForTriage,
518
+ },
519
+ ];
520
+ const server = new McpServer({
521
+ name: 'agent-reports',
522
+ version: '2.0.0',
523
+ tools,
524
+ });
525
+ // Handle cleanup on exit
526
+ process.on('SIGINT', () => {
527
+ closeDb();
528
+ process.exit(0);
529
+ });
530
+ process.on('SIGTERM', () => {
531
+ closeDb();
532
+ process.exit(0);
533
+ });
534
+ server.start();
535
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/agent-reports/server.ts"],"names":[],"mappings":"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"}