verbolab 0.1.0-alpha.1

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 (493) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +71 -0
  3. package/dist/bin/verbo.d.ts +3 -0
  4. package/dist/bin/verbo.d.ts.map +1 -0
  5. package/dist/bin/verbo.js +1156 -0
  6. package/dist/bin/verbo.js.map +1 -0
  7. package/dist/relay/index.d.ts +2 -0
  8. package/dist/relay/index.d.ts.map +1 -0
  9. package/dist/relay/index.js +15 -0
  10. package/dist/relay/index.js.map +1 -0
  11. package/dist/src/agent/agent-launcher.d.ts +64 -0
  12. package/dist/src/agent/agent-launcher.d.ts.map +1 -0
  13. package/dist/src/agent/agent-launcher.js +326 -0
  14. package/dist/src/agent/agent-launcher.js.map +1 -0
  15. package/dist/src/agent/agent-monitor.d.ts +16 -0
  16. package/dist/src/agent/agent-monitor.d.ts.map +1 -0
  17. package/dist/src/agent/agent-monitor.js +41 -0
  18. package/dist/src/agent/agent-monitor.js.map +1 -0
  19. package/dist/src/agent/fun-names.d.ts +9 -0
  20. package/dist/src/agent/fun-names.d.ts.map +1 -0
  21. package/dist/src/agent/fun-names.js +118 -0
  22. package/dist/src/agent/fun-names.js.map +1 -0
  23. package/dist/src/agent/mcp-shim.d.ts +45 -0
  24. package/dist/src/agent/mcp-shim.d.ts.map +1 -0
  25. package/dist/src/agent/mcp-shim.js +192 -0
  26. package/dist/src/agent/mcp-shim.js.map +1 -0
  27. package/dist/src/agent/personas.d.ts +47 -0
  28. package/dist/src/agent/personas.d.ts.map +1 -0
  29. package/dist/src/agent/personas.js +86 -0
  30. package/dist/src/agent/personas.js.map +1 -0
  31. package/dist/src/agent/provider-detection.d.ts +21 -0
  32. package/dist/src/agent/provider-detection.d.ts.map +1 -0
  33. package/dist/src/agent/provider-detection.js +47 -0
  34. package/dist/src/agent/provider-detection.js.map +1 -0
  35. package/dist/src/agent/providers/claude-provider.d.ts +3 -0
  36. package/dist/src/agent/providers/claude-provider.d.ts.map +1 -0
  37. package/dist/src/agent/providers/claude-provider.js +119 -0
  38. package/dist/src/agent/providers/claude-provider.js.map +1 -0
  39. package/dist/src/agent/providers/gemini-provider.d.ts +13 -0
  40. package/dist/src/agent/providers/gemini-provider.d.ts.map +1 -0
  41. package/dist/src/agent/providers/gemini-provider.js +143 -0
  42. package/dist/src/agent/providers/gemini-provider.js.map +1 -0
  43. package/dist/src/agent/providers/openai-provider.d.ts +3 -0
  44. package/dist/src/agent/providers/openai-provider.d.ts.map +1 -0
  45. package/dist/src/agent/providers/openai-provider.js +127 -0
  46. package/dist/src/agent/providers/openai-provider.js.map +1 -0
  47. package/dist/src/agent/providers/registry.d.ts +19 -0
  48. package/dist/src/agent/providers/registry.d.ts.map +1 -0
  49. package/dist/src/agent/providers/registry.js +30 -0
  50. package/dist/src/agent/providers/registry.js.map +1 -0
  51. package/dist/src/agent/providers/types.d.ts +118 -0
  52. package/dist/src/agent/providers/types.d.ts.map +1 -0
  53. package/dist/src/agent/providers/types.js +2 -0
  54. package/dist/src/agent/providers/types.js.map +1 -0
  55. package/dist/src/approval/approval-server.d.ts +17 -0
  56. package/dist/src/approval/approval-server.d.ts.map +1 -0
  57. package/dist/src/approval/approval-server.js +90 -0
  58. package/dist/src/approval/approval-server.js.map +1 -0
  59. package/dist/src/approval/approval-store.d.ts +29 -0
  60. package/dist/src/approval/approval-store.d.ts.map +1 -0
  61. package/dist/src/approval/approval-store.js +94 -0
  62. package/dist/src/approval/approval-store.js.map +1 -0
  63. package/dist/src/auth/auth-store.d.ts +18 -0
  64. package/dist/src/auth/auth-store.d.ts.map +1 -0
  65. package/dist/src/auth/auth-store.js +34 -0
  66. package/dist/src/auth/auth-store.js.map +1 -0
  67. package/dist/src/auth/device-code-client.d.ts +32 -0
  68. package/dist/src/auth/device-code-client.d.ts.map +1 -0
  69. package/dist/src/auth/device-code-client.js +41 -0
  70. package/dist/src/auth/device-code-client.js.map +1 -0
  71. package/dist/src/auth/plan-enforcer.d.ts +8 -0
  72. package/dist/src/auth/plan-enforcer.d.ts.map +1 -0
  73. package/dist/src/auth/plan-enforcer.js +14 -0
  74. package/dist/src/auth/plan-enforcer.js.map +1 -0
  75. package/dist/src/commands/audit.d.ts +7 -0
  76. package/dist/src/commands/audit.d.ts.map +1 -0
  77. package/dist/src/commands/audit.js +92 -0
  78. package/dist/src/commands/audit.js.map +1 -0
  79. package/dist/src/commands/team.d.ts +48 -0
  80. package/dist/src/commands/team.d.ts.map +1 -0
  81. package/dist/src/commands/team.js +175 -0
  82. package/dist/src/commands/team.js.map +1 -0
  83. package/dist/src/config/verbo-config.d.ts +43 -0
  84. package/dist/src/config/verbo-config.d.ts.map +1 -0
  85. package/dist/src/config/verbo-config.js +111 -0
  86. package/dist/src/config/verbo-config.js.map +1 -0
  87. package/dist/src/core/agent-session-store.d.ts +69 -0
  88. package/dist/src/core/agent-session-store.d.ts.map +1 -0
  89. package/dist/src/core/agent-session-store.js +168 -0
  90. package/dist/src/core/agent-session-store.js.map +1 -0
  91. package/dist/src/core/audit-log-store.d.ts +33 -0
  92. package/dist/src/core/audit-log-store.d.ts.map +1 -0
  93. package/dist/src/core/audit-log-store.js +104 -0
  94. package/dist/src/core/audit-log-store.js.map +1 -0
  95. package/dist/src/core/compliance.d.ts +50 -0
  96. package/dist/src/core/compliance.d.ts.map +1 -0
  97. package/dist/src/core/compliance.js +59 -0
  98. package/dist/src/core/compliance.js.map +1 -0
  99. package/dist/src/core/conflict-detector.d.ts +19 -0
  100. package/dist/src/core/conflict-detector.d.ts.map +1 -0
  101. package/dist/src/core/conflict-detector.js +87 -0
  102. package/dist/src/core/conflict-detector.js.map +1 -0
  103. package/dist/src/core/conflict-enforcer.d.ts +37 -0
  104. package/dist/src/core/conflict-enforcer.d.ts.map +1 -0
  105. package/dist/src/core/conflict-enforcer.js +139 -0
  106. package/dist/src/core/conflict-enforcer.js.map +1 -0
  107. package/dist/src/core/cost-store.d.ts +55 -0
  108. package/dist/src/core/cost-store.d.ts.map +1 -0
  109. package/dist/src/core/cost-store.js +140 -0
  110. package/dist/src/core/cost-store.js.map +1 -0
  111. package/dist/src/core/hot-files.d.ts +19 -0
  112. package/dist/src/core/hot-files.d.ts.map +1 -0
  113. package/dist/src/core/hot-files.js +64 -0
  114. package/dist/src/core/hot-files.js.map +1 -0
  115. package/dist/src/core/human-action-store.d.ts +33 -0
  116. package/dist/src/core/human-action-store.d.ts.map +1 -0
  117. package/dist/src/core/human-action-store.js +92 -0
  118. package/dist/src/core/human-action-store.js.map +1 -0
  119. package/dist/src/core/learning-store.d.ts +32 -0
  120. package/dist/src/core/learning-store.d.ts.map +1 -0
  121. package/dist/src/core/learning-store.js +95 -0
  122. package/dist/src/core/learning-store.js.map +1 -0
  123. package/dist/src/core/merge-queue.d.ts +28 -0
  124. package/dist/src/core/merge-queue.d.ts.map +1 -0
  125. package/dist/src/core/merge-queue.js +92 -0
  126. package/dist/src/core/merge-queue.js.map +1 -0
  127. package/dist/src/core/notification-service.d.ts +13 -0
  128. package/dist/src/core/notification-service.d.ts.map +1 -0
  129. package/dist/src/core/notification-service.js +126 -0
  130. package/dist/src/core/notification-service.js.map +1 -0
  131. package/dist/src/core/notifications.d.ts +10 -0
  132. package/dist/src/core/notifications.d.ts.map +1 -0
  133. package/dist/src/core/notifications.js +33 -0
  134. package/dist/src/core/notifications.js.map +1 -0
  135. package/dist/src/core/orchestrator-store.d.ts +44 -0
  136. package/dist/src/core/orchestrator-store.d.ts.map +1 -0
  137. package/dist/src/core/orchestrator-store.js +69 -0
  138. package/dist/src/core/orchestrator-store.js.map +1 -0
  139. package/dist/src/core/parallelizer.d.ts +47 -0
  140. package/dist/src/core/parallelizer.d.ts.map +1 -0
  141. package/dist/src/core/parallelizer.js +224 -0
  142. package/dist/src/core/parallelizer.js.map +1 -0
  143. package/dist/src/core/pipeline-rollback.d.ts +29 -0
  144. package/dist/src/core/pipeline-rollback.d.ts.map +1 -0
  145. package/dist/src/core/pipeline-rollback.js +84 -0
  146. package/dist/src/core/pipeline-rollback.js.map +1 -0
  147. package/dist/src/core/pipeline-runner.d.ts +73 -0
  148. package/dist/src/core/pipeline-runner.d.ts.map +1 -0
  149. package/dist/src/core/pipeline-runner.js +165 -0
  150. package/dist/src/core/pipeline-runner.js.map +1 -0
  151. package/dist/src/core/pr-creator.d.ts +22 -0
  152. package/dist/src/core/pr-creator.d.ts.map +1 -0
  153. package/dist/src/core/pr-creator.js +55 -0
  154. package/dist/src/core/pr-creator.js.map +1 -0
  155. package/dist/src/core/rbac.d.ts +27 -0
  156. package/dist/src/core/rbac.d.ts.map +1 -0
  157. package/dist/src/core/rbac.js +76 -0
  158. package/dist/src/core/rbac.js.map +1 -0
  159. package/dist/src/core/startup-cleanup.d.ts +47 -0
  160. package/dist/src/core/startup-cleanup.d.ts.map +1 -0
  161. package/dist/src/core/startup-cleanup.js +150 -0
  162. package/dist/src/core/startup-cleanup.js.map +1 -0
  163. package/dist/src/core/task-store.d.ts +96 -0
  164. package/dist/src/core/task-store.d.ts.map +1 -0
  165. package/dist/src/core/task-store.js +309 -0
  166. package/dist/src/core/task-store.js.map +1 -0
  167. package/dist/src/core/verbo-config-editor.d.ts +44 -0
  168. package/dist/src/core/verbo-config-editor.d.ts.map +1 -0
  169. package/dist/src/core/verbo-config-editor.js +204 -0
  170. package/dist/src/core/verbo-config-editor.js.map +1 -0
  171. package/dist/src/core/verbo-config.d.ts +35 -0
  172. package/dist/src/core/verbo-config.d.ts.map +1 -0
  173. package/dist/src/core/verbo-config.js +55 -0
  174. package/dist/src/core/verbo-config.js.map +1 -0
  175. package/dist/src/core/verbo-md.d.ts +96 -0
  176. package/dist/src/core/verbo-md.d.ts.map +1 -0
  177. package/dist/src/core/verbo-md.js +410 -0
  178. package/dist/src/core/verbo-md.js.map +1 -0
  179. package/dist/src/db/database.d.ts +9 -0
  180. package/dist/src/db/database.d.ts.map +1 -0
  181. package/dist/src/db/database.js +37 -0
  182. package/dist/src/db/database.js.map +1 -0
  183. package/dist/src/db/migrations/001-personas-subtasks.d.ts +10 -0
  184. package/dist/src/db/migrations/001-personas-subtasks.d.ts.map +1 -0
  185. package/dist/src/db/migrations/001-personas-subtasks.js +32 -0
  186. package/dist/src/db/migrations/001-personas-subtasks.js.map +1 -0
  187. package/dist/src/db/migrations/002-rbac.d.ts +9 -0
  188. package/dist/src/db/migrations/002-rbac.d.ts.map +1 -0
  189. package/dist/src/db/migrations/002-rbac.js +31 -0
  190. package/dist/src/db/migrations/002-rbac.js.map +1 -0
  191. package/dist/src/db/migrations/003-provider-column.d.ts +8 -0
  192. package/dist/src/db/migrations/003-provider-column.d.ts.map +1 -0
  193. package/dist/src/db/migrations/003-provider-column.js +12 -0
  194. package/dist/src/db/migrations/003-provider-column.js.map +1 -0
  195. package/dist/src/db/migrations/004-pipeline-cost.d.ts +8 -0
  196. package/dist/src/db/migrations/004-pipeline-cost.d.ts.map +1 -0
  197. package/dist/src/db/migrations/004-pipeline-cost.js +23 -0
  198. package/dist/src/db/migrations/004-pipeline-cost.js.map +1 -0
  199. package/dist/src/db/migrations/005-audit-log-timestamp.d.ts +10 -0
  200. package/dist/src/db/migrations/005-audit-log-timestamp.d.ts.map +1 -0
  201. package/dist/src/db/migrations/005-audit-log-timestamp.js +39 -0
  202. package/dist/src/db/migrations/005-audit-log-timestamp.js.map +1 -0
  203. package/dist/src/db/migrations/006-human-action-type.d.ts +9 -0
  204. package/dist/src/db/migrations/006-human-action-type.d.ts.map +1 -0
  205. package/dist/src/db/migrations/006-human-action-type.js +16 -0
  206. package/dist/src/db/migrations/006-human-action-type.js.map +1 -0
  207. package/dist/src/db/schema.d.ts +6 -0
  208. package/dist/src/db/schema.d.ts.map +1 -0
  209. package/dist/src/db/schema.js +255 -0
  210. package/dist/src/db/schema.js.map +1 -0
  211. package/dist/src/deps/dependabot-generator.d.ts +22 -0
  212. package/dist/src/deps/dependabot-generator.d.ts.map +1 -0
  213. package/dist/src/deps/dependabot-generator.js +83 -0
  214. package/dist/src/deps/dependabot-generator.js.map +1 -0
  215. package/dist/src/deps/dependabot-monitor.d.ts +22 -0
  216. package/dist/src/deps/dependabot-monitor.d.ts.map +1 -0
  217. package/dist/src/deps/dependabot-monitor.js +28 -0
  218. package/dist/src/deps/dependabot-monitor.js.map +1 -0
  219. package/dist/src/deps/package-auditor.d.ts +24 -0
  220. package/dist/src/deps/package-auditor.d.ts.map +1 -0
  221. package/dist/src/deps/package-auditor.js +118 -0
  222. package/dist/src/deps/package-auditor.js.map +1 -0
  223. package/dist/src/init/ensure-init.d.ts +6 -0
  224. package/dist/src/init/ensure-init.d.ts.map +1 -0
  225. package/dist/src/init/ensure-init.js +27 -0
  226. package/dist/src/init/ensure-init.js.map +1 -0
  227. package/dist/src/init/project-detector.d.ts +11 -0
  228. package/dist/src/init/project-detector.d.ts.map +1 -0
  229. package/dist/src/init/project-detector.js +117 -0
  230. package/dist/src/init/project-detector.js.map +1 -0
  231. package/dist/src/init/questionnaire.d.ts +5 -0
  232. package/dist/src/init/questionnaire.d.ts.map +1 -0
  233. package/dist/src/init/questionnaire.js +112 -0
  234. package/dist/src/init/questionnaire.js.map +1 -0
  235. package/dist/src/init/template.d.ts +17 -0
  236. package/dist/src/init/template.d.ts.map +1 -0
  237. package/dist/src/init/template.js +46 -0
  238. package/dist/src/init/template.js.map +1 -0
  239. package/dist/src/intelligence/claude-client.d.ts +3 -0
  240. package/dist/src/intelligence/claude-client.d.ts.map +1 -0
  241. package/dist/src/intelligence/claude-client.js +12 -0
  242. package/dist/src/intelligence/claude-client.js.map +1 -0
  243. package/dist/src/intelligence/conflict-mediator.d.ts +17 -0
  244. package/dist/src/intelligence/conflict-mediator.d.ts.map +1 -0
  245. package/dist/src/intelligence/conflict-mediator.js +83 -0
  246. package/dist/src/intelligence/conflict-mediator.js.map +1 -0
  247. package/dist/src/intelligence/github-orchestrator.d.ts +30 -0
  248. package/dist/src/intelligence/github-orchestrator.d.ts.map +1 -0
  249. package/dist/src/intelligence/github-orchestrator.js +270 -0
  250. package/dist/src/intelligence/github-orchestrator.js.map +1 -0
  251. package/dist/src/intelligence/kill-switch.d.ts +10 -0
  252. package/dist/src/intelligence/kill-switch.d.ts.map +1 -0
  253. package/dist/src/intelligence/kill-switch.js +12 -0
  254. package/dist/src/intelligence/kill-switch.js.map +1 -0
  255. package/dist/src/intelligence/learnings-extractor.d.ts +13 -0
  256. package/dist/src/intelligence/learnings-extractor.d.ts.map +1 -0
  257. package/dist/src/intelligence/learnings-extractor.js +74 -0
  258. package/dist/src/intelligence/learnings-extractor.js.map +1 -0
  259. package/dist/src/intelligence/project-scanner.d.ts +2 -0
  260. package/dist/src/intelligence/project-scanner.d.ts.map +1 -0
  261. package/dist/src/intelligence/project-scanner.js +28 -0
  262. package/dist/src/intelligence/project-scanner.js.map +1 -0
  263. package/dist/src/intelligence/task-decomposer.d.ts +14 -0
  264. package/dist/src/intelligence/task-decomposer.d.ts.map +1 -0
  265. package/dist/src/intelligence/task-decomposer.js +97 -0
  266. package/dist/src/intelligence/task-decomposer.js.map +1 -0
  267. package/dist/src/intelligence/types.d.ts +14 -0
  268. package/dist/src/intelligence/types.d.ts.map +1 -0
  269. package/dist/src/intelligence/types.js +2 -0
  270. package/dist/src/intelligence/types.js.map +1 -0
  271. package/dist/src/mcp/server.d.ts +63 -0
  272. package/dist/src/mcp/server.d.ts.map +1 -0
  273. package/dist/src/mcp/server.js +537 -0
  274. package/dist/src/mcp/server.js.map +1 -0
  275. package/dist/src/mcp/stdio-entry.d.ts +2 -0
  276. package/dist/src/mcp/stdio-entry.d.ts.map +1 -0
  277. package/dist/src/mcp/stdio-entry.js +124 -0
  278. package/dist/src/mcp/stdio-entry.js.map +1 -0
  279. package/dist/src/mcp/subtask-handlers.d.ts +7 -0
  280. package/dist/src/mcp/subtask-handlers.d.ts.map +1 -0
  281. package/dist/src/mcp/subtask-handlers.js +50 -0
  282. package/dist/src/mcp/subtask-handlers.js.map +1 -0
  283. package/dist/src/security/network-proxy.d.ts +20 -0
  284. package/dist/src/security/network-proxy.d.ts.map +1 -0
  285. package/dist/src/security/network-proxy.js +125 -0
  286. package/dist/src/security/network-proxy.js.map +1 -0
  287. package/dist/src/security/network-sandbox.d.ts +19 -0
  288. package/dist/src/security/network-sandbox.d.ts.map +1 -0
  289. package/dist/src/security/network-sandbox.js +100 -0
  290. package/dist/src/security/network-sandbox.js.map +1 -0
  291. package/dist/src/security/sanitize.d.ts +13 -0
  292. package/dist/src/security/sanitize.d.ts.map +1 -0
  293. package/dist/src/security/sanitize.js +19 -0
  294. package/dist/src/security/sanitize.js.map +1 -0
  295. package/dist/src/security/secrets-patterns.d.ts +29 -0
  296. package/dist/src/security/secrets-patterns.d.ts.map +1 -0
  297. package/dist/src/security/secrets-patterns.js +430 -0
  298. package/dist/src/security/secrets-patterns.js.map +1 -0
  299. package/dist/src/security/secrets-scanner.d.ts +26 -0
  300. package/dist/src/security/secrets-scanner.d.ts.map +1 -0
  301. package/dist/src/security/secrets-scanner.js +62 -0
  302. package/dist/src/security/secrets-scanner.js.map +1 -0
  303. package/dist/src/skills/classifier.d.ts +9 -0
  304. package/dist/src/skills/classifier.d.ts.map +1 -0
  305. package/dist/src/skills/classifier.js +41 -0
  306. package/dist/src/skills/classifier.js.map +1 -0
  307. package/dist/src/skills/registry.d.ts +16 -0
  308. package/dist/src/skills/registry.d.ts.map +1 -0
  309. package/dist/src/skills/registry.js +61 -0
  310. package/dist/src/skills/registry.js.map +1 -0
  311. package/dist/src/sync/events.d.ts +9 -0
  312. package/dist/src/sync/events.d.ts.map +1 -0
  313. package/dist/src/sync/events.js +2 -0
  314. package/dist/src/sync/events.js.map +1 -0
  315. package/dist/src/sync/relay-server.d.ts +18 -0
  316. package/dist/src/sync/relay-server.d.ts.map +1 -0
  317. package/dist/src/sync/relay-server.js +131 -0
  318. package/dist/src/sync/relay-server.js.map +1 -0
  319. package/dist/src/sync/sync-client.d.ts +31 -0
  320. package/dist/src/sync/sync-client.d.ts.map +1 -0
  321. package/dist/src/sync/sync-client.js +314 -0
  322. package/dist/src/sync/sync-client.js.map +1 -0
  323. package/dist/src/tui/app.d.ts +35 -0
  324. package/dist/src/tui/app.d.ts.map +1 -0
  325. package/dist/src/tui/app.js +676 -0
  326. package/dist/src/tui/app.js.map +1 -0
  327. package/dist/src/tui/components/activity-feed.d.ts +12 -0
  328. package/dist/src/tui/components/activity-feed.d.ts.map +1 -0
  329. package/dist/src/tui/components/activity-feed.js +82 -0
  330. package/dist/src/tui/components/activity-feed.js.map +1 -0
  331. package/dist/src/tui/components/agent-list.d.ts +19 -0
  332. package/dist/src/tui/components/agent-list.d.ts.map +1 -0
  333. package/dist/src/tui/components/agent-list.js +33 -0
  334. package/dist/src/tui/components/agent-list.js.map +1 -0
  335. package/dist/src/tui/components/agent-row.d.ts +12 -0
  336. package/dist/src/tui/components/agent-row.d.ts.map +1 -0
  337. package/dist/src/tui/components/agent-row.js +37 -0
  338. package/dist/src/tui/components/agent-row.js.map +1 -0
  339. package/dist/src/tui/components/approval-terminal.d.ts +13 -0
  340. package/dist/src/tui/components/approval-terminal.d.ts.map +1 -0
  341. package/dist/src/tui/components/approval-terminal.js +34 -0
  342. package/dist/src/tui/components/approval-terminal.js.map +1 -0
  343. package/dist/src/tui/components/audit-viewer.d.ts +16 -0
  344. package/dist/src/tui/components/audit-viewer.d.ts.map +1 -0
  345. package/dist/src/tui/components/audit-viewer.js +46 -0
  346. package/dist/src/tui/components/audit-viewer.js.map +1 -0
  347. package/dist/src/tui/components/auth-gate.d.ts +9 -0
  348. package/dist/src/tui/components/auth-gate.d.ts.map +1 -0
  349. package/dist/src/tui/components/auth-gate.js +112 -0
  350. package/dist/src/tui/components/auth-gate.js.map +1 -0
  351. package/dist/src/tui/components/command-palette.d.ts +12 -0
  352. package/dist/src/tui/components/command-palette.d.ts.map +1 -0
  353. package/dist/src/tui/components/command-palette.js +51 -0
  354. package/dist/src/tui/components/command-palette.js.map +1 -0
  355. package/dist/src/tui/components/compliance-badge.d.ts +11 -0
  356. package/dist/src/tui/components/compliance-badge.d.ts.map +1 -0
  357. package/dist/src/tui/components/compliance-badge.js +12 -0
  358. package/dist/src/tui/components/compliance-badge.js.map +1 -0
  359. package/dist/src/tui/components/decomposition-review.d.ts +10 -0
  360. package/dist/src/tui/components/decomposition-review.d.ts.map +1 -0
  361. package/dist/src/tui/components/decomposition-review.js +19 -0
  362. package/dist/src/tui/components/decomposition-review.js.map +1 -0
  363. package/dist/src/tui/components/dependency-graph.d.ts +13 -0
  364. package/dist/src/tui/components/dependency-graph.d.ts.map +1 -0
  365. package/dist/src/tui/components/dependency-graph.js +143 -0
  366. package/dist/src/tui/components/dependency-graph.js.map +1 -0
  367. package/dist/src/tui/components/diff-viewer.d.ts +11 -0
  368. package/dist/src/tui/components/diff-viewer.d.ts.map +1 -0
  369. package/dist/src/tui/components/diff-viewer.js +82 -0
  370. package/dist/src/tui/components/diff-viewer.js.map +1 -0
  371. package/dist/src/tui/components/edit-task-input.d.ts +10 -0
  372. package/dist/src/tui/components/edit-task-input.d.ts.map +1 -0
  373. package/dist/src/tui/components/edit-task-input.js +20 -0
  374. package/dist/src/tui/components/edit-task-input.js.map +1 -0
  375. package/dist/src/tui/components/footer.d.ts +12 -0
  376. package/dist/src/tui/components/footer.d.ts.map +1 -0
  377. package/dist/src/tui/components/footer.js +41 -0
  378. package/dist/src/tui/components/footer.js.map +1 -0
  379. package/dist/src/tui/components/header.d.ts +8 -0
  380. package/dist/src/tui/components/header.d.ts.map +1 -0
  381. package/dist/src/tui/components/header.js +20 -0
  382. package/dist/src/tui/components/header.js.map +1 -0
  383. package/dist/src/tui/components/human-actions.d.ts +14 -0
  384. package/dist/src/tui/components/human-actions.d.ts.map +1 -0
  385. package/dist/src/tui/components/human-actions.js +43 -0
  386. package/dist/src/tui/components/human-actions.js.map +1 -0
  387. package/dist/src/tui/components/log-panel.d.ts +10 -0
  388. package/dist/src/tui/components/log-panel.d.ts.map +1 -0
  389. package/dist/src/tui/components/log-panel.js +38 -0
  390. package/dist/src/tui/components/log-panel.js.map +1 -0
  391. package/dist/src/tui/components/memory-viewer.d.ts +10 -0
  392. package/dist/src/tui/components/memory-viewer.d.ts.map +1 -0
  393. package/dist/src/tui/components/memory-viewer.js +44 -0
  394. package/dist/src/tui/components/memory-viewer.js.map +1 -0
  395. package/dist/src/tui/components/new-task-input.d.ts +9 -0
  396. package/dist/src/tui/components/new-task-input.d.ts.map +1 -0
  397. package/dist/src/tui/components/new-task-input.js +21 -0
  398. package/dist/src/tui/components/new-task-input.js.map +1 -0
  399. package/dist/src/tui/components/orchestrator-status.d.ts +9 -0
  400. package/dist/src/tui/components/orchestrator-status.d.ts.map +1 -0
  401. package/dist/src/tui/components/orchestrator-status.js +15 -0
  402. package/dist/src/tui/components/orchestrator-status.js.map +1 -0
  403. package/dist/src/tui/components/parallelize-banner.d.ts +8 -0
  404. package/dist/src/tui/components/parallelize-banner.d.ts.map +1 -0
  405. package/dist/src/tui/components/parallelize-banner.js +9 -0
  406. package/dist/src/tui/components/parallelize-banner.js.map +1 -0
  407. package/dist/src/tui/components/progress-bar.d.ts +9 -0
  408. package/dist/src/tui/components/progress-bar.d.ts.map +1 -0
  409. package/dist/src/tui/components/progress-bar.js +15 -0
  410. package/dist/src/tui/components/progress-bar.js.map +1 -0
  411. package/dist/src/tui/components/review-queue.d.ts +13 -0
  412. package/dist/src/tui/components/review-queue.d.ts.map +1 -0
  413. package/dist/src/tui/components/review-queue.js +78 -0
  414. package/dist/src/tui/components/review-queue.js.map +1 -0
  415. package/dist/src/tui/components/rich-header.d.ts +11 -0
  416. package/dist/src/tui/components/rich-header.d.ts.map +1 -0
  417. package/dist/src/tui/components/rich-header.js +25 -0
  418. package/dist/src/tui/components/rich-header.js.map +1 -0
  419. package/dist/src/tui/components/spinner.d.ts +7 -0
  420. package/dist/src/tui/components/spinner.d.ts.map +1 -0
  421. package/dist/src/tui/components/spinner.js +8 -0
  422. package/dist/src/tui/components/spinner.js.map +1 -0
  423. package/dist/src/tui/components/status-bar.d.ts +23 -0
  424. package/dist/src/tui/components/status-bar.d.ts.map +1 -0
  425. package/dist/src/tui/components/status-bar.js +28 -0
  426. package/dist/src/tui/components/status-bar.js.map +1 -0
  427. package/dist/src/tui/components/task-queue.d.ts +11 -0
  428. package/dist/src/tui/components/task-queue.d.ts.map +1 -0
  429. package/dist/src/tui/components/task-queue.js +30 -0
  430. package/dist/src/tui/components/task-queue.js.map +1 -0
  431. package/dist/src/tui/components/team-view.d.ts +13 -0
  432. package/dist/src/tui/components/team-view.d.ts.map +1 -0
  433. package/dist/src/tui/components/team-view.js +12 -0
  434. package/dist/src/tui/components/team-view.js.map +1 -0
  435. package/dist/src/tui/graph-renderer.d.ts +11 -0
  436. package/dist/src/tui/graph-renderer.d.ts.map +1 -0
  437. package/dist/src/tui/graph-renderer.js +296 -0
  438. package/dist/src/tui/graph-renderer.js.map +1 -0
  439. package/dist/src/tui/hooks/use-bell.d.ts +21 -0
  440. package/dist/src/tui/hooks/use-bell.d.ts.map +1 -0
  441. package/dist/src/tui/hooks/use-bell.js +38 -0
  442. package/dist/src/tui/hooks/use-bell.js.map +1 -0
  443. package/dist/src/tui/hooks/use-ci-status.d.ts +16 -0
  444. package/dist/src/tui/hooks/use-ci-status.d.ts.map +1 -0
  445. package/dist/src/tui/hooks/use-ci-status.js +97 -0
  446. package/dist/src/tui/hooks/use-ci-status.js.map +1 -0
  447. package/dist/src/tui/hooks/use-command-palette.d.ts +37 -0
  448. package/dist/src/tui/hooks/use-command-palette.d.ts.map +1 -0
  449. package/dist/src/tui/hooks/use-command-palette.js +108 -0
  450. package/dist/src/tui/hooks/use-command-palette.js.map +1 -0
  451. package/dist/src/tui/hooks/use-diff-view.d.ts +16 -0
  452. package/dist/src/tui/hooks/use-diff-view.d.ts.map +1 -0
  453. package/dist/src/tui/hooks/use-diff-view.js +75 -0
  454. package/dist/src/tui/hooks/use-diff-view.js.map +1 -0
  455. package/dist/src/tui/hooks/use-keyboard.d.ts +3 -0
  456. package/dist/src/tui/hooks/use-keyboard.d.ts.map +1 -0
  457. package/dist/src/tui/hooks/use-keyboard.js +70 -0
  458. package/dist/src/tui/hooks/use-keyboard.js.map +1 -0
  459. package/dist/src/tui/hooks/use-log-stream.d.ts +25 -0
  460. package/dist/src/tui/hooks/use-log-stream.d.ts.map +1 -0
  461. package/dist/src/tui/hooks/use-log-stream.js +83 -0
  462. package/dist/src/tui/hooks/use-log-stream.js.map +1 -0
  463. package/dist/src/tui/hooks/use-spinner.d.ts +3 -0
  464. package/dist/src/tui/hooks/use-spinner.d.ts.map +1 -0
  465. package/dist/src/tui/hooks/use-spinner.js +13 -0
  466. package/dist/src/tui/hooks/use-spinner.js.map +1 -0
  467. package/dist/src/tui/hooks/use-store.d.ts +33 -0
  468. package/dist/src/tui/hooks/use-store.d.ts.map +1 -0
  469. package/dist/src/tui/hooks/use-store.js +21 -0
  470. package/dist/src/tui/hooks/use-store.js.map +1 -0
  471. package/dist/src/tui/lib/diff-parser.d.ts +24 -0
  472. package/dist/src/tui/lib/diff-parser.d.ts.map +1 -0
  473. package/dist/src/tui/lib/diff-parser.js +115 -0
  474. package/dist/src/tui/lib/diff-parser.js.map +1 -0
  475. package/dist/src/tui/lib/palette-commands.d.ts +14 -0
  476. package/dist/src/tui/lib/palette-commands.d.ts.map +1 -0
  477. package/dist/src/tui/lib/palette-commands.js +101 -0
  478. package/dist/src/tui/lib/palette-commands.js.map +1 -0
  479. package/dist/src/tui/tui.d.ts +8 -0
  480. package/dist/src/tui/tui.d.ts.map +1 -0
  481. package/dist/src/tui/tui.js +8 -0
  482. package/dist/src/tui/tui.js.map +1 -0
  483. package/package.json +66 -0
  484. package/skills/api-design.md +84 -0
  485. package/skills/backend-typescript.md +76 -0
  486. package/skills/data-modeling.md +73 -0
  487. package/skills/devops-ci.md +82 -0
  488. package/skills/frontend-design.md +69 -0
  489. package/skills/observability.md +73 -0
  490. package/skills/react-nextjs.md +76 -0
  491. package/skills/refactoring.md +77 -0
  492. package/skills/security.md +75 -0
  493. package/skills/testing.md +69 -0
@@ -0,0 +1,118 @@
1
+ import { execSync } from 'child_process';
2
+ /**
3
+ * Create a package auditor that runs security audit commands for various ecosystems.
4
+ */
5
+ export function createPackageAuditor(projectDir) {
6
+ function runCommand(cmd, timeout) {
7
+ return execSync(cmd, {
8
+ cwd: projectDir,
9
+ encoding: 'utf-8',
10
+ timeout,
11
+ });
12
+ }
13
+ function auditNpm() {
14
+ try {
15
+ let output;
16
+ try {
17
+ output = runCommand('npm audit --json', 60000);
18
+ }
19
+ catch (err) {
20
+ // npm audit exits non-zero when vulnerabilities exist — use stdout
21
+ if (err.stdout) {
22
+ output = err.stdout;
23
+ }
24
+ else {
25
+ return { ecosystem: 'npm', vulnerabilities: [], error: String(err.message ?? err) };
26
+ }
27
+ }
28
+ const parsed = JSON.parse(output);
29
+ const vulns = Object.entries(parsed.vulnerabilities ?? {}).map(([name, info]) => ({
30
+ name,
31
+ severity: info.severity,
32
+ title: Array.isArray(info.via) ? info.via[0]?.title : undefined,
33
+ url: Array.isArray(info.via) ? info.via[0]?.url : undefined,
34
+ fixAvailable: info.fixAvailable ?? false,
35
+ }));
36
+ return { ecosystem: 'npm', vulnerabilities: vulns };
37
+ }
38
+ catch (err) {
39
+ return { ecosystem: 'npm', vulnerabilities: [], error: String(err.message ?? err) };
40
+ }
41
+ }
42
+ function auditCargo() {
43
+ try {
44
+ let output;
45
+ try {
46
+ output = runCommand('cargo audit --json', 120000);
47
+ }
48
+ catch (err) {
49
+ if (err.stdout) {
50
+ output = err.stdout;
51
+ }
52
+ else {
53
+ return { ecosystem: 'cargo', vulnerabilities: [], error: String(err.message ?? err) };
54
+ }
55
+ }
56
+ const parsed = JSON.parse(output);
57
+ const list = parsed.vulnerabilities?.list ?? [];
58
+ const vulns = list.map((v) => ({
59
+ name: v.advisory?.package ?? 'unknown',
60
+ id: v.advisory?.id,
61
+ title: v.advisory?.title,
62
+ url: v.advisory?.url,
63
+ }));
64
+ return { ecosystem: 'cargo', vulnerabilities: vulns };
65
+ }
66
+ catch (err) {
67
+ return { ecosystem: 'cargo', vulnerabilities: [], error: String(err.message ?? err) };
68
+ }
69
+ }
70
+ function auditPip() {
71
+ try {
72
+ let output;
73
+ try {
74
+ output = runCommand('pip-audit --format=json', 120000);
75
+ }
76
+ catch (err) {
77
+ if (err.stdout) {
78
+ output = err.stdout;
79
+ }
80
+ else {
81
+ return { ecosystem: 'pip', vulnerabilities: [], error: String(err.message ?? err) };
82
+ }
83
+ }
84
+ const parsed = JSON.parse(output);
85
+ const vulns = [];
86
+ for (const pkg of parsed) {
87
+ for (const vuln of pkg.vulns ?? []) {
88
+ vulns.push({
89
+ name: pkg.name,
90
+ id: vuln.id,
91
+ title: vuln.description,
92
+ fixAvailable: Array.isArray(vuln.fix_versions) && vuln.fix_versions.length > 0,
93
+ });
94
+ }
95
+ }
96
+ return { ecosystem: 'pip', vulnerabilities: vulns };
97
+ }
98
+ catch (err) {
99
+ return { ecosystem: 'pip', vulnerabilities: [], error: String(err.message ?? err) };
100
+ }
101
+ }
102
+ function auditAll(ecosystems) {
103
+ const auditors = {
104
+ npm: auditNpm,
105
+ cargo: auditCargo,
106
+ pip: auditPip,
107
+ };
108
+ return ecosystems.map((eco) => {
109
+ const fn = auditors[eco];
110
+ if (!fn) {
111
+ return { ecosystem: eco, vulnerabilities: [], error: `Unsupported ecosystem: ${eco}` };
112
+ }
113
+ return fn();
114
+ });
115
+ }
116
+ return { auditNpm, auditCargo, auditPip, auditAll };
117
+ }
118
+ //# sourceMappingURL=package-auditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-auditor.js","sourceRoot":"","sources":["../../../src/deps/package-auditor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface EnsureInitResult {
2
+ skipped: boolean;
3
+ verboMdPath: string;
4
+ }
5
+ export declare function ensureInit(dir: string): Promise<EnsureInitResult>;
6
+ //# sourceMappingURL=ensure-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-init.d.ts","sourceRoot":"","sources":["../../../src/init/ensure-init.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAyBvE"}
@@ -0,0 +1,27 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { detectProject } from './project-detector.js';
4
+ import { buildDefaults, runQuestionnaire } from './questionnaire.js';
5
+ import { renderVerboMd } from './template.js';
6
+ export async function ensureInit(dir) {
7
+ const verboMdPath = path.join(dir, 'VERBO.md');
8
+ if (fs.existsSync(verboMdPath)) {
9
+ return { skipped: true, verboMdPath };
10
+ }
11
+ const projectName = path.basename(dir);
12
+ const info = detectProject(dir);
13
+ const defaults = buildDefaults(projectName, info);
14
+ const answers = await runQuestionnaire(defaults);
15
+ const content = renderVerboMd(answers);
16
+ fs.writeFileSync(verboMdPath, content, 'utf-8');
17
+ console.log('');
18
+ console.log(' VERBO.md created successfully!');
19
+ console.log('');
20
+ console.log(` Project: ${answers.projectName}`);
21
+ console.log(` Branch strategy: ${answers.branchStrategy}`);
22
+ console.log(` Merge mode: ${answers.mergeMode}`);
23
+ console.log(` Trust level: ${answers.defaultTrust}`);
24
+ console.log('');
25
+ return { skipped: false, verboMdPath };
26
+ }
27
+ //# sourceMappingURL=ensure-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ensure-init.js","sourceRoot":"","sources":["../../../src/init/ensure-init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAO9C,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAE/C,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAEvC,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAEhD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,kBAAkB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AACzC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface ProjectInfo {
2
+ language: string;
3
+ frameworks: string[];
4
+ testRunner: string;
5
+ hasEslint: boolean;
6
+ hasGitHubActions: boolean;
7
+ baseBranch: string;
8
+ packageManager: 'npm' | 'yarn' | 'pnpm' | '';
9
+ }
10
+ export declare function detectProject(dir: string): ProjectInfo;
11
+ //# sourceMappingURL=project-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-detector.d.ts","sourceRoot":"","sources":["../../../src/init/project-detector.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC;CAC9C;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAwGtD"}
@@ -0,0 +1,117 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { execSync } from 'child_process';
4
+ export function detectProject(dir) {
5
+ const info = {
6
+ language: '',
7
+ frameworks: [],
8
+ testRunner: '',
9
+ hasEslint: false,
10
+ hasGitHubActions: false,
11
+ baseBranch: 'main',
12
+ packageManager: '',
13
+ };
14
+ // Detect package.json (Node.js projects)
15
+ const pkgPath = path.join(dir, 'package.json');
16
+ if (fs.existsSync(pkgPath)) {
17
+ try {
18
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
19
+ const allDeps = { ...pkg.dependencies, ...pkg.devDependencies };
20
+ // Language
21
+ if (allDeps.typescript || fs.existsSync(path.join(dir, 'tsconfig.json'))) {
22
+ info.language = 'TypeScript';
23
+ }
24
+ else {
25
+ info.language = 'JavaScript';
26
+ }
27
+ // Frameworks
28
+ if (allDeps.react)
29
+ info.frameworks.push('React');
30
+ if (allDeps.next)
31
+ info.frameworks.push('Next.js');
32
+ if (allDeps.vue)
33
+ info.frameworks.push('Vue');
34
+ if (allDeps.express)
35
+ info.frameworks.push('Express');
36
+ if (allDeps.fastify)
37
+ info.frameworks.push('Fastify');
38
+ if (allDeps['@nestjs/core'])
39
+ info.frameworks.push('NestJS');
40
+ // Test runner
41
+ if (allDeps.vitest)
42
+ info.testRunner = 'vitest';
43
+ else if (allDeps.jest)
44
+ info.testRunner = 'jest';
45
+ else if (allDeps.mocha)
46
+ info.testRunner = 'mocha';
47
+ // ESLint
48
+ if (allDeps.eslint)
49
+ info.hasEslint = true;
50
+ // Package manager
51
+ if (fs.existsSync(path.join(dir, 'pnpm-lock.yaml')))
52
+ info.packageManager = 'pnpm';
53
+ else if (fs.existsSync(path.join(dir, 'yarn.lock')))
54
+ info.packageManager = 'yarn';
55
+ else if (fs.existsSync(path.join(dir, 'package-lock.json')))
56
+ info.packageManager = 'npm';
57
+ }
58
+ catch {
59
+ // Invalid package.json — skip
60
+ }
61
+ }
62
+ // Detect Python
63
+ const reqPath = path.join(dir, 'requirements.txt');
64
+ const pyprojectPath = path.join(dir, 'pyproject.toml');
65
+ if (fs.existsSync(reqPath) || fs.existsSync(pyprojectPath)) {
66
+ info.language = info.language || 'Python';
67
+ try {
68
+ const reqs = fs.existsSync(reqPath) ? fs.readFileSync(reqPath, 'utf-8') : '';
69
+ const pyproject = fs.existsSync(pyprojectPath) ? fs.readFileSync(pyprojectPath, 'utf-8') : '';
70
+ const combined = reqs + '\n' + pyproject;
71
+ if (/\bflask\b/i.test(combined))
72
+ info.frameworks.push('Flask');
73
+ if (/\bdjango\b/i.test(combined))
74
+ info.frameworks.push('Django');
75
+ if (/\bfastapi\b/i.test(combined))
76
+ info.frameworks.push('FastAPI');
77
+ if (/\bpytest\b/i.test(combined))
78
+ info.testRunner = 'pytest';
79
+ else if (/\bunittest\b/i.test(combined))
80
+ info.testRunner = 'unittest';
81
+ }
82
+ catch {
83
+ // Read error — skip
84
+ }
85
+ }
86
+ // Detect Go
87
+ if (fs.existsSync(path.join(dir, 'go.mod'))) {
88
+ info.language = info.language || 'Go';
89
+ info.testRunner = info.testRunner || 'go test';
90
+ }
91
+ // Detect Rust
92
+ if (fs.existsSync(path.join(dir, 'Cargo.toml'))) {
93
+ info.language = info.language || 'Rust';
94
+ info.testRunner = info.testRunner || 'cargo test';
95
+ }
96
+ // ESLint config files
97
+ if (!info.hasEslint) {
98
+ const eslintConfigs = ['.eslintrc', '.eslintrc.json', '.eslintrc.js', '.eslintrc.yml', 'eslint.config.js', 'eslint.config.mjs'];
99
+ info.hasEslint = eslintConfigs.some((f) => fs.existsSync(path.join(dir, f)));
100
+ }
101
+ // GitHub Actions
102
+ info.hasGitHubActions = fs.existsSync(path.join(dir, '.github', 'workflows'));
103
+ // Git base branch
104
+ try {
105
+ const result = execSync('git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null || echo refs/heads/main', {
106
+ cwd: dir,
107
+ encoding: 'utf-8',
108
+ timeout: 5000,
109
+ }).trim();
110
+ info.baseBranch = result.replace(/^refs\/(remotes\/origin|heads)\//, '');
111
+ }
112
+ catch {
113
+ info.baseBranch = 'main';
114
+ }
115
+ return info;
116
+ }
117
+ //# sourceMappingURL=project-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-detector.js","sourceRoot":"","sources":["../../../src/init/project-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { ProjectInfo } from './project-detector.js';
2
+ import type { VerboInitAnswers } from './template.js';
3
+ export declare function buildDefaults(projectName: string, info: ProjectInfo): VerboInitAnswers;
4
+ export declare function runQuestionnaire(defaults: VerboInitAnswers): Promise<VerboInitAnswers>;
5
+ //# sourceMappingURL=questionnaire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questionnaire.d.ts","sourceRoot":"","sources":["../../../src/init/questionnaire.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEtD,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,gBAAgB,CAgBtF;AA8DD,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2C5F"}
@@ -0,0 +1,112 @@
1
+ import readline from 'readline';
2
+ export function buildDefaults(projectName, info) {
3
+ return {
4
+ projectName,
5
+ language: info.language,
6
+ framework: info.frameworks.join(', '),
7
+ testRunner: info.testRunner,
8
+ branchStrategy: 'feature-branches',
9
+ branchPrefix: 'verbo/',
10
+ baseBranch: info.baseBranch,
11
+ commitConvention: 'conventional-commits',
12
+ mergeMode: 'review-required',
13
+ linting: info.hasEslint ? 'eslint' : '',
14
+ testBeforeCommit: !!info.testRunner,
15
+ defaultTrust: 'medium',
16
+ neverTouch: ['.env', '.env.*'],
17
+ };
18
+ }
19
+ function buildQuestions(_defaults) {
20
+ return [
21
+ {
22
+ key: 'branchStrategy',
23
+ label: 'Branch strategy',
24
+ options: [
25
+ { value: 'feature-branches', label: 'Feature branches (recommended)' },
26
+ { value: 'trunk-based', label: 'Trunk-based' },
27
+ { value: 'gitflow', label: 'Gitflow' },
28
+ ],
29
+ },
30
+ {
31
+ key: 'commitConvention',
32
+ label: 'Commit convention',
33
+ options: [
34
+ { value: 'conventional-commits', label: 'Conventional Commits (feat:, fix:, chore:)' },
35
+ { value: 'free', label: 'Free-form' },
36
+ ],
37
+ },
38
+ {
39
+ key: 'mergeMode',
40
+ label: 'Merge mode',
41
+ options: [
42
+ { value: 'manual', label: 'Manual — human merges PRs' },
43
+ { value: 'review-required', label: 'Review required — agent opens PR, human merges (recommended)' },
44
+ { value: 'auto', label: 'Auto — agent merges after CI passes' },
45
+ ],
46
+ },
47
+ {
48
+ key: 'defaultTrust',
49
+ label: 'Default agent trust level',
50
+ options: [
51
+ { value: 'low', label: 'Low — asks approval for everything' },
52
+ { value: 'medium', label: 'Medium — reads freely, asks for writes (recommended)' },
53
+ { value: 'high', label: 'High — full autonomy, only stops on delete/force' },
54
+ ],
55
+ },
56
+ {
57
+ key: 'testBeforeCommit',
58
+ label: 'Require tests before commit',
59
+ options: [
60
+ { value: 'true', label: 'Yes' },
61
+ { value: 'false', label: 'No' },
62
+ ],
63
+ },
64
+ ];
65
+ }
66
+ async function ask(rl, prompt) {
67
+ return new Promise((resolve) => {
68
+ rl.question(prompt, (answer) => resolve(answer.trim()));
69
+ });
70
+ }
71
+ export async function runQuestionnaire(defaults) {
72
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
73
+ const answers = { ...defaults };
74
+ const questions = buildQuestions(defaults);
75
+ console.log('');
76
+ if (defaults.language) {
77
+ console.log(` Detected: ${defaults.language}${defaults.framework ? ', ' + defaults.framework : ''}${defaults.testRunner ? ', ' + defaults.testRunner : ''}${defaults.linting ? ', ESLint' : ''}`);
78
+ console.log(` Base branch: ${defaults.baseBranch}`);
79
+ console.log('');
80
+ }
81
+ for (const q of questions) {
82
+ if (q.options) {
83
+ console.log(` ${q.label}:`);
84
+ const defaultIdx = q.options.findIndex((o) => o.value === String(defaults[q.key]));
85
+ q.options.forEach((opt, i) => {
86
+ const marker = i === defaultIdx ? ' (default)' : '';
87
+ console.log(` [${i + 1}] ${opt.label}${marker}`);
88
+ });
89
+ const choice = await ask(rl, ` > Choice [${defaultIdx + 1}]: `);
90
+ const idx = choice ? parseInt(choice, 10) - 1 : defaultIdx;
91
+ if (idx >= 0 && idx < q.options.length) {
92
+ const val = q.options[idx].value;
93
+ if (q.key === 'testBeforeCommit') {
94
+ answers[q.key] = val === 'true';
95
+ }
96
+ else {
97
+ answers[q.key] = val;
98
+ }
99
+ }
100
+ console.log('');
101
+ }
102
+ }
103
+ // Never-touch files
104
+ const defaultNever = defaults.neverTouch.join(', ');
105
+ const neverInput = await ask(rl, ` Files/folders agents must never touch [${defaultNever}]: `);
106
+ if (neverInput) {
107
+ answers.neverTouch = neverInput.split(',').map((s) => s.trim()).filter(Boolean);
108
+ }
109
+ rl.close();
110
+ return answers;
111
+ }
112
+ //# sourceMappingURL=questionnaire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"questionnaire.js","sourceRoot":"","sources":["../../../src/init/questionnaire.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface VerboInitAnswers {
2
+ projectName: string;
3
+ language: string;
4
+ framework: string;
5
+ testRunner: string;
6
+ branchStrategy: string;
7
+ branchPrefix: string;
8
+ baseBranch: string;
9
+ commitConvention: string;
10
+ mergeMode: 'manual' | 'review-required' | 'auto';
11
+ linting: string;
12
+ testBeforeCommit: boolean;
13
+ defaultTrust: 'low' | 'medium' | 'high';
14
+ neverTouch: string[];
15
+ }
16
+ export declare function renderVerboMd(answers: VerboInitAnswers): string;
17
+ //# sourceMappingURL=template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/init/template.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,QAAQ,GAAG,iBAAiB,GAAG,MAAM,CAAC;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACxC,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAMD,wBAAgB,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAgD/D"}
@@ -0,0 +1,46 @@
1
+ function line(key, value) {
2
+ return value ? `${key}: ${value}\n` : '';
3
+ }
4
+ export function renderVerboMd(answers) {
5
+ let md = `# VERBO.md\n\n`;
6
+ // Project
7
+ md += `## Project\n`;
8
+ md += line('name', answers.projectName);
9
+ md += line('language', answers.language);
10
+ md += line('framework', answers.framework);
11
+ md += line('test_runner', answers.testRunner);
12
+ md += `\n`;
13
+ // Git Workflow
14
+ md += `## Git Workflow\n`;
15
+ md += line('branch_strategy', answers.branchStrategy);
16
+ md += line('branch_prefix', answers.branchPrefix);
17
+ md += line('base_branch', answers.baseBranch);
18
+ md += line('commit_convention', answers.commitConvention);
19
+ md += `merge_mode: ${answers.mergeMode}\n`;
20
+ md += `auto_pr: true\n`;
21
+ md += `\n`;
22
+ // Code Standards
23
+ md += `## Code Standards\n`;
24
+ md += line('linting', answers.linting);
25
+ md += `test_before_commit: ${answers.testBeforeCommit}\n`;
26
+ md += `\n`;
27
+ // Agent Rules
28
+ md += `## Agent Rules\n`;
29
+ md += `default_trust: ${answers.defaultTrust}\n`;
30
+ md += `allowed_tools: [Read, Glob, Grep, WebSearch]\n`;
31
+ md += `approval_required: [Edit, Write, Bash, Delete]\n`;
32
+ md += `never_touch: [${answers.neverTouch.join(', ')}]\n`;
33
+ md += `\n`;
34
+ // PR Standards
35
+ md += `## PR Standards\n`;
36
+ md += `title_format: "feat|fix|chore: description"\n`;
37
+ md += `require_tests: ${answers.testBeforeCommit}\n`;
38
+ md += `require_description: true\n`;
39
+ md += `max_files_per_pr: 20\n`;
40
+ md += `\n`;
41
+ // Intelligence Features
42
+ md += `## Intelligence Features\n`;
43
+ md += `enabled: true\n`;
44
+ return md;
45
+ }
46
+ //# sourceMappingURL=template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/init/template.ts"],"names":[],"mappings":"AAgBA,SAAS,IAAI,CAAC,GAAW,EAAE,KAAa;IACtC,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAyB;IACrD,IAAI,EAAE,GAAG,gBAAgB,CAAC;IAE1B,UAAU;IACV,EAAE,IAAI,cAAc,CAAC;IACrB,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACxC,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzC,EAAE,IAAI,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC3C,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C,EAAE,IAAI,IAAI,CAAC;IAEX,eAAe;IACf,EAAE,IAAI,mBAAmB,CAAC;IAC1B,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC;IACtD,EAAE,IAAI,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAClD,EAAE,IAAI,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C,EAAE,IAAI,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC1D,EAAE,IAAI,eAAe,OAAO,CAAC,SAAS,IAAI,CAAC;IAC3C,EAAE,IAAI,iBAAiB,CAAC;IACxB,EAAE,IAAI,IAAI,CAAC;IAEX,iBAAiB;IACjB,EAAE,IAAI,qBAAqB,CAAC;IAC5B,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACvC,EAAE,IAAI,uBAAuB,OAAO,CAAC,gBAAgB,IAAI,CAAC;IAC1D,EAAE,IAAI,IAAI,CAAC;IAEX,cAAc;IACd,EAAE,IAAI,kBAAkB,CAAC;IACzB,EAAE,IAAI,kBAAkB,OAAO,CAAC,YAAY,IAAI,CAAC;IACjD,EAAE,IAAI,gDAAgD,CAAC;IACvD,EAAE,IAAI,kDAAkD,CAAC;IACzD,EAAE,IAAI,iBAAiB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1D,EAAE,IAAI,IAAI,CAAC;IAEX,eAAe;IACf,EAAE,IAAI,mBAAmB,CAAC;IAC1B,EAAE,IAAI,+CAA+C,CAAC;IACtD,EAAE,IAAI,kBAAkB,OAAO,CAAC,gBAAgB,IAAI,CAAC;IACrD,EAAE,IAAI,6BAA6B,CAAC;IACpC,EAAE,IAAI,wBAAwB,CAAC;IAC/B,EAAE,IAAI,IAAI,CAAC;IAEX,wBAAwB;IACxB,EAAE,IAAI,4BAA4B,CAAC;IACnC,EAAE,IAAI,iBAAiB,CAAC;IAExB,OAAO,EAAE,CAAC;AACZ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ export declare function getClaudeClient(): Anthropic | null;
3
+ //# sourceMappingURL=claude-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-client.d.ts","sourceRoot":"","sources":["../../../src/intelligence/claude-client.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAI1C,wBAAgB,eAAe,IAAI,SAAS,GAAG,IAAI,CAQlD"}
@@ -0,0 +1,12 @@
1
+ import Anthropic from '@anthropic-ai/sdk';
2
+ let client = null;
3
+ export function getClaudeClient() {
4
+ if (!process.env.ANTHROPIC_API_KEY) {
5
+ return null;
6
+ }
7
+ if (!client) {
8
+ client = new Anthropic({ apiKey: process.env.ANTHROPIC_API_KEY });
9
+ }
10
+ return client;
11
+ }
12
+ //# sourceMappingURL=claude-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-client.js","sourceRoot":"","sources":["../../../src/intelligence/claude-client.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAE1C,IAAI,MAAM,GAAqB,IAAI,CAAC;AAEpC,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,17 @@
1
+ export type ConflictType = 'STRUCTURAL' | 'ADDITIVE' | 'COSMETIC';
2
+ export interface ConflictHunk {
3
+ ours: string;
4
+ theirs: string;
5
+ base?: string;
6
+ }
7
+ export interface MergeResult {
8
+ success: boolean;
9
+ merged?: string;
10
+ conflictType: ConflictType;
11
+ }
12
+ export interface ConflictMediator {
13
+ classifyConflict(hunk: ConflictHunk): Promise<ConflictType>;
14
+ attemptGitMergeFile(base: string, ours: string, theirs: string): Promise<MergeResult>;
15
+ }
16
+ export declare function createConflictMediator(apiKey?: string): ConflictMediator;
17
+ //# sourceMappingURL=conflict-mediator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict-mediator.d.ts","sourceRoot":"","sources":["../../../src/intelligence/conflict-mediator.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,CAAC;AAElE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC5D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACvF;AAgBD,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,gBAAgB,CA6ExE"}