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,97 @@
1
+ import { useState, useEffect, useRef, useMemo } from 'react';
2
+ import { execFile } from 'child_process';
3
+ export function parsePrUrl(prUrl) {
4
+ const match = prUrl.match(/github\.com\/([^/]+)\/([^/]+)\/pull\/(\d+)/);
5
+ if (!match)
6
+ return null;
7
+ return { owner: match[1], repo: match[2], number: parseInt(match[3], 10) };
8
+ }
9
+ export function deriveStatus(checks) {
10
+ if (checks.length === 0)
11
+ return 'pending';
12
+ const hasFailure = checks.some((c) => c.conclusion === 'FAILURE' ||
13
+ c.conclusion === 'ACTION_REQUIRED' ||
14
+ c.conclusion === 'TIMED_OUT' ||
15
+ c.conclusion === 'CANCELLED');
16
+ if (hasFailure)
17
+ return 'failure';
18
+ const allDone = checks.every((c) => c.conclusion === 'SUCCESS' ||
19
+ c.conclusion === 'NEUTRAL' ||
20
+ c.conclusion === 'SKIPPED');
21
+ if (allDone)
22
+ return 'success';
23
+ return 'pending';
24
+ }
25
+ export function fetchCiForPr(prUrl) {
26
+ return new Promise((resolve) => {
27
+ const pr = parsePrUrl(prUrl);
28
+ if (!pr) {
29
+ resolve('error');
30
+ return;
31
+ }
32
+ execFile('gh', [
33
+ 'pr',
34
+ 'view',
35
+ String(pr.number),
36
+ '--repo',
37
+ `${pr.owner}/${pr.repo}`,
38
+ '--json',
39
+ 'statusCheckRollup',
40
+ ], { timeout: 10_000 }, (err, stdout) => {
41
+ if (err) {
42
+ resolve('error');
43
+ return;
44
+ }
45
+ try {
46
+ const data = JSON.parse(stdout);
47
+ const checks = data.statusCheckRollup ?? [];
48
+ resolve(deriveStatus(checks));
49
+ }
50
+ catch {
51
+ resolve('error');
52
+ }
53
+ });
54
+ });
55
+ }
56
+ const DEFAULT_POLL_MS = 30_000;
57
+ export function useCiStatus(tasks, pollIntervalMs = DEFAULT_POLL_MS) {
58
+ const [statuses, setStatuses] = useState(new Map());
59
+ const tasksRef = useRef(tasks);
60
+ tasksRef.current = tasks;
61
+ // Stable key: only re-poll when the set of done-task PR URLs changes
62
+ const prKey = useMemo(() => tasks
63
+ .filter((t) => t.status === 'done' && t.prUrl)
64
+ .map((t) => `${t.id}:${t.prUrl}`)
65
+ .join(','), [tasks]);
66
+ useEffect(() => {
67
+ let cancelled = false;
68
+ async function poll() {
69
+ const prTasks = tasksRef.current.filter((t) => t.status === 'done' && t.prUrl);
70
+ if (prTasks.length === 0) {
71
+ setStatuses(new Map());
72
+ return;
73
+ }
74
+ const results = await Promise.allSettled(prTasks.map(async (task) => {
75
+ const status = await fetchCiForPr(task.prUrl);
76
+ return { taskId: task.id, status };
77
+ }));
78
+ if (cancelled)
79
+ return;
80
+ const newMap = new Map();
81
+ for (const result of results) {
82
+ if (result.status === 'fulfilled') {
83
+ newMap.set(result.value.taskId, result.value.status);
84
+ }
85
+ }
86
+ setStatuses(newMap);
87
+ }
88
+ poll();
89
+ const timer = setInterval(poll, pollIntervalMs);
90
+ return () => {
91
+ cancelled = true;
92
+ clearInterval(timer);
93
+ };
94
+ }, [prKey, pollIntervalMs]);
95
+ return statuses;
96
+ }
97
+ //# sourceMappingURL=use-ci-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-ci-status.js","sourceRoot":"","sources":["../../../../src/tui/hooks/use-ci-status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { Dispatch, SetStateAction } from 'react';
2
+ import type { PaletteCommand } from '../lib/palette-commands.js';
3
+ export interface FuzzyMatch {
4
+ score: number;
5
+ /** Matched character positions within the label string. */
6
+ indices: number[];
7
+ }
8
+ export interface PaletteResult extends PaletteCommand {
9
+ match: FuzzyMatch;
10
+ }
11
+ /**
12
+ * Fuzzy-scores a query against a text string.
13
+ *
14
+ * Returns null when not all query characters appear (in order) in text.
15
+ * Returns a FuzzyMatch with a score and the matched char positions otherwise.
16
+ *
17
+ * Scoring bonuses applied:
18
+ * - +10 per matched character (base)
19
+ * - +5 for each pair of consecutive matched characters
20
+ * - +15 when the first matched character is at position 0
21
+ * - +3 for each matched character that starts a word (preceded by space/dash/underscore)
22
+ * - -0.1 × span (first-to-last match distance) to favour compact matches
23
+ */
24
+ export declare function fuzzyScore(query: string, text: string): FuzzyMatch | null;
25
+ export interface CommandPaletteState {
26
+ query: string;
27
+ /** Update the search query; also resets selectedIndex to 0. */
28
+ setQuery: (q: string) => void;
29
+ results: PaletteResult[];
30
+ selectedIndex: number;
31
+ setSelectedIndex: Dispatch<SetStateAction<number>>;
32
+ /** Record that a command was used (moves it to front of recency list). */
33
+ recordUsed: (commandId: string) => void;
34
+ recentIds: readonly string[];
35
+ }
36
+ export declare function useCommandPalette(commands: PaletteCommand[]): CommandPaletteState;
37
+ //# sourceMappingURL=use-command-palette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-command-palette.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/use-command-palette.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,cAAc;IACnD,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAkDzE;AAID,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACnD,0EAA0E;IAC1E,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,mBAAmB,CAuDjF"}
@@ -0,0 +1,108 @@
1
+ import { useState, useMemo, useCallback } from 'react';
2
+ /**
3
+ * Fuzzy-scores a query against a text string.
4
+ *
5
+ * Returns null when not all query characters appear (in order) in text.
6
+ * Returns a FuzzyMatch with a score and the matched char positions otherwise.
7
+ *
8
+ * Scoring bonuses applied:
9
+ * - +10 per matched character (base)
10
+ * - +5 for each pair of consecutive matched characters
11
+ * - +15 when the first matched character is at position 0
12
+ * - +3 for each matched character that starts a word (preceded by space/dash/underscore)
13
+ * - -0.1 × span (first-to-last match distance) to favour compact matches
14
+ */
15
+ export function fuzzyScore(query, text) {
16
+ if (query === '') {
17
+ return { score: 0, indices: [] };
18
+ }
19
+ const q = query.toLowerCase();
20
+ const t = text.toLowerCase();
21
+ const indices = [];
22
+ let qi = 0;
23
+ for (let ti = 0; ti < t.length && qi < q.length; ti++) {
24
+ if (t[ti] === q[qi]) {
25
+ indices.push(ti);
26
+ qi++;
27
+ }
28
+ }
29
+ if (qi < q.length) {
30
+ return null; // not all query chars found in text
31
+ }
32
+ let score = indices.length * 10;
33
+ // Consecutive match bonus
34
+ for (let i = 1; i < indices.length; i++) {
35
+ if (indices[i] === indices[i - 1] + 1) {
36
+ score += 5;
37
+ }
38
+ }
39
+ // Start-of-string bonus
40
+ if (indices[0] === 0) {
41
+ score += 15;
42
+ }
43
+ // Word-boundary bonus
44
+ for (const idx of indices) {
45
+ if (idx > 0) {
46
+ const prev = text[idx - 1];
47
+ if (prev === ' ' || prev === '-' || prev === '_') {
48
+ score += 3;
49
+ }
50
+ }
51
+ }
52
+ // Span penalty: prefer matches that are clustered together
53
+ const span = indices[indices.length - 1] - indices[0] + 1;
54
+ score -= span * 0.1;
55
+ return { score, indices };
56
+ }
57
+ const MAX_RECENT = 5;
58
+ export function useCommandPalette(commands) {
59
+ const [query, setQueryRaw] = useState('');
60
+ const [selectedIndex, setSelectedIndex] = useState(0);
61
+ const [recentIds, setRecentIds] = useState([]);
62
+ // Wrap setQuery so it also resets the selection cursor
63
+ const setQuery = useCallback((q) => {
64
+ setQueryRaw(q);
65
+ setSelectedIndex(0);
66
+ }, []);
67
+ const results = useMemo(() => {
68
+ const matched = [];
69
+ for (const cmd of commands) {
70
+ const match = fuzzyScore(query, cmd.label);
71
+ if (match !== null) {
72
+ matched.push({ ...cmd, match });
73
+ }
74
+ }
75
+ matched.sort((a, b) => {
76
+ const ai = recentIds.indexOf(a.id);
77
+ const bi = recentIds.indexOf(b.id);
78
+ // Both recently used: preserve recency order (lower index = more recent)
79
+ if (ai !== -1 && bi !== -1)
80
+ return ai - bi;
81
+ // Only a is recent: promote it
82
+ if (ai !== -1)
83
+ return -1;
84
+ // Only b is recent: promote it
85
+ if (bi !== -1)
86
+ return 1;
87
+ // Neither is recent: rank by fuzzy score descending
88
+ return b.match.score - a.match.score;
89
+ });
90
+ return matched;
91
+ }, [commands, query, recentIds]);
92
+ const recordUsed = useCallback((commandId) => {
93
+ setRecentIds((prev) => {
94
+ const filtered = prev.filter((id) => id !== commandId);
95
+ return [commandId, ...filtered].slice(0, MAX_RECENT);
96
+ });
97
+ }, []);
98
+ return {
99
+ query,
100
+ setQuery,
101
+ results,
102
+ selectedIndex,
103
+ setSelectedIndex,
104
+ recordUsed,
105
+ recentIds,
106
+ };
107
+ }
108
+ //# sourceMappingURL=use-command-palette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-command-palette.js","sourceRoot":"","sources":["../../../../src/tui/hooks/use-command-palette.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAcvD;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,IAAY;IACpD,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;QACjB,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,EAAE,GAAG,CAAC,CAAC;IAEX,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;QACtD,IAAI,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,EAAE,EAAE,CAAC;QACP,CAAC;IACH,CAAC;IAED,IAAI,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,CAAC,oCAAoC;IACnD,CAAC;IAED,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC;IAEhC,0BAA0B;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YACtC,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IAED,wBAAwB;IACxB,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,KAAK,IAAI,EAAE,CAAC;IACd,CAAC;IAED,sBAAsB;IACtB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YAC3B,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjD,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC1D,KAAK,IAAI,IAAI,GAAG,GAAG,CAAC;IAEpB,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,CAAC;AAcrB,MAAM,UAAU,iBAAiB,CAAC,QAA0B;IAC1D,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IAEzD,uDAAuD;IACvD,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAS,EAAE,EAAE;QACzC,WAAW,CAAC,CAAC,CAAC,CAAC;QACf,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACtB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,OAAO,CAAkB,GAAG,EAAE;QAC5C,MAAM,OAAO,GAAoB,EAAE,CAAC;QAEpC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACpB,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACnC,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAEnC,yEAAyE;YACzE,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YAC3C,+BAA+B;YAC/B,IAAI,EAAE,KAAK,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC;YACzB,+BAA+B;YAC/B,IAAI,EAAE,KAAK,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC;YAExB,oDAAoD;YACpD,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC;IACjB,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;IAEjC,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,SAAiB,EAAE,EAAE;QACnD,YAAY,CAAC,CAAC,IAAI,EAAE,EAAE;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;YACvD,OAAO,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,KAAK;QACL,QAAQ;QACR,OAAO;QACP,aAAa;QACb,gBAAgB;QAChB,UAAU;QACV,SAAS;KACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { DiffFile } from '../lib/diff-parser.js';
2
+ export interface DiffViewState {
3
+ files: DiffFile[];
4
+ loading: boolean;
5
+ error: string | null;
6
+ fileIndex: number;
7
+ hunkIndex: number;
8
+ }
9
+ export interface UseDiffViewResult extends DiffViewState {
10
+ nextFile: () => void;
11
+ prevFile: () => void;
12
+ nextHunk: () => void;
13
+ prevHunk: () => void;
14
+ }
15
+ export declare function useDiffView(worktreePath: string | null, branch: string | null, baseBranch?: string): UseDiffViewResult;
16
+ //# sourceMappingURL=use-diff-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-diff-view.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/use-diff-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,WAAW,CACzB,YAAY,EAAE,MAAM,GAAG,IAAI,EAC3B,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,UAAU,SAAW,GACpB,iBAAiB,CA2EnB"}
@@ -0,0 +1,75 @@
1
+ import { useState, useEffect, useCallback, useRef } from 'react';
2
+ import { simpleGit } from 'simple-git';
3
+ import { parseDiff } from '../lib/diff-parser.js';
4
+ export function useDiffView(worktreePath, branch, baseBranch = 'master') {
5
+ const [files, setFiles] = useState([]);
6
+ const [loading, setLoading] = useState(false);
7
+ const [error, setError] = useState(null);
8
+ const [fileIndex, setFileIndex] = useState(0);
9
+ const [hunkIndex, setHunkIndex] = useState(0);
10
+ const abortRef = useRef(null);
11
+ useEffect(() => {
12
+ if (!worktreePath || !branch) {
13
+ setFiles([]);
14
+ setError(null);
15
+ setLoading(false);
16
+ return;
17
+ }
18
+ // Abort any in-flight fetch
19
+ abortRef.current?.abort();
20
+ const controller = new AbortController();
21
+ abortRef.current = controller;
22
+ setLoading(true);
23
+ setError(null);
24
+ setFileIndex(0);
25
+ setHunkIndex(0);
26
+ const git = simpleGit(worktreePath);
27
+ git
28
+ .raw(['diff', `${baseBranch}...${branch}`])
29
+ .then((raw) => {
30
+ if (controller.signal.aborted)
31
+ return;
32
+ setFiles(parseDiff(raw));
33
+ setLoading(false);
34
+ })
35
+ .catch((err) => {
36
+ if (controller.signal.aborted)
37
+ return;
38
+ const msg = err instanceof Error ? err.message : String(err);
39
+ setError(msg);
40
+ setLoading(false);
41
+ });
42
+ return () => {
43
+ controller.abort();
44
+ };
45
+ }, [worktreePath, branch, baseBranch]);
46
+ const nextFile = useCallback(() => {
47
+ if (files.length === 0)
48
+ return;
49
+ setFileIndex((prev) => {
50
+ const next = Math.min(prev + 1, files.length - 1);
51
+ if (next !== prev)
52
+ setHunkIndex(0);
53
+ return next;
54
+ });
55
+ }, [files.length]);
56
+ const prevFile = useCallback(() => {
57
+ setFileIndex((prev) => {
58
+ const next = Math.max(prev - 1, 0);
59
+ if (next !== prev)
60
+ setHunkIndex(0);
61
+ return next;
62
+ });
63
+ }, []);
64
+ const nextHunk = useCallback(() => {
65
+ const currentFile = files[fileIndex];
66
+ if (!currentFile || currentFile.hunks.length === 0)
67
+ return;
68
+ setHunkIndex((prev) => Math.min(prev + 1, currentFile.hunks.length - 1));
69
+ }, [files, fileIndex]);
70
+ const prevHunk = useCallback(() => {
71
+ setHunkIndex((prev) => Math.max(prev - 1, 0));
72
+ }, []);
73
+ return { files, loading, error, fileIndex, hunkIndex, nextFile, prevFile, nextHunk, prevHunk };
74
+ }
75
+ //# sourceMappingURL=use-diff-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-diff-view.js","sourceRoot":"","sources":["../../../../src/tui/hooks/use-diff-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type KeyAction = 'new-task' | 'launch' | 'parallelize' | 'kill' | 'delete-task' | 'toggle-review' | 'toggle-feed' | 'cycle-trust' | 'focus-agents' | 'focus-tasks' | 'focus-your-turn' | 'focus-activity' | 'nav-up' | 'nav-down' | 'help' | 'dismiss' | 'approve-once' | 'approve-session' | 'deny' | 'yolo-toggle' | 'open-pr' | 'factory-toggle' | 'decompose' | 'diff' | 'hunk-prev' | 'log' | 'open-log' | 'memory' | 'palette' | 'open-action-pr' | 'resolve-action' | 'action-up' | 'action-down' | 'review-up' | 'review-down' | 'feed-scroll-down' | 'feed-scroll-up' | 'audit' | 'graph';
2
+ export declare function useKeyboard(onAction: (action: KeyAction) => void): void;
3
+ //# sourceMappingURL=use-keyboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-keyboard.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/use-keyboard.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GACjB,UAAU,GACV,QAAQ,GACR,aAAa,GACb,MAAM,GACN,aAAa,GACb,eAAe,GACf,aAAa,GACb,aAAa,GACb,cAAc,GACd,aAAa,GACb,iBAAiB,GACjB,gBAAgB,GAChB,QAAQ,GACR,UAAU,GACV,MAAM,GACN,SAAS,GACT,cAAc,GACd,iBAAiB,GACjB,MAAM,GACN,aAAa,GACb,SAAS,GACT,gBAAgB,GAChB,WAAW,GACX,MAAM,GACN,WAAW,GACX,KAAK,GACL,UAAU,GACV,QAAQ,GACR,SAAS,GACT,gBAAgB,GAChB,gBAAgB,GAChB,WAAW,GACX,aAAa,GACb,WAAW,GACX,aAAa,GACb,kBAAkB,GAClB,gBAAgB,GAChB,OAAO,GACP,OAAO,CAAC;AAEZ,wBAAgB,WAAW,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,GAAG,IAAI,CAmCvE"}
@@ -0,0 +1,70 @@
1
+ import { useInput } from 'ink';
2
+ export function useKeyboard(onAction) {
3
+ useInput((input, key) => {
4
+ if (input === '1')
5
+ onAction('approve-once');
6
+ else if (input === '2')
7
+ onAction('approve-session');
8
+ else if (input === '3')
9
+ onAction('deny');
10
+ else if (input === '!')
11
+ onAction('yolo-toggle');
12
+ else if (input === '@')
13
+ onAction('factory-toggle');
14
+ else if (input === 'n')
15
+ onAction('new-task');
16
+ else if (input === 'a')
17
+ onAction('focus-agents');
18
+ else if (input === 't')
19
+ onAction('focus-tasks');
20
+ else if (input === 'w')
21
+ onAction('focus-your-turn');
22
+ else if (input === 'f')
23
+ onAction('toggle-feed');
24
+ else if (input === 'l')
25
+ onAction('launch');
26
+ else if (input === 'x')
27
+ onAction('kill');
28
+ else if (input === 'r')
29
+ onAction('toggle-review');
30
+ else if (input === 'T')
31
+ onAction('cycle-trust');
32
+ else if (input === 'j')
33
+ onAction('nav-down');
34
+ else if (input === 'k')
35
+ onAction('nav-up');
36
+ else if (input === 'J')
37
+ onAction('review-down');
38
+ else if (input === 'K')
39
+ onAction('review-up');
40
+ else if (input === ']')
41
+ onAction('feed-scroll-down');
42
+ else if (input === '[')
43
+ onAction('feed-scroll-up');
44
+ else if (input === 'm')
45
+ onAction('memory');
46
+ else if (input === 'd')
47
+ onAction('diff');
48
+ else if (input === 'p')
49
+ onAction('hunk-prev');
50
+ else if (input === 'g')
51
+ onAction('graph');
52
+ else if (input === 'o')
53
+ onAction('open-log');
54
+ else if (input === 'R')
55
+ onAction('open-action-pr');
56
+ else if (input === 'A')
57
+ onAction('audit');
58
+ else if (input === '?')
59
+ onAction('help');
60
+ else if (input === ':')
61
+ onAction('palette');
62
+ else if (key.delete || key.backspace)
63
+ onAction('delete-task');
64
+ else if (key.return)
65
+ onAction('parallelize');
66
+ else if (key.escape)
67
+ onAction('dismiss');
68
+ });
69
+ }
70
+ //# sourceMappingURL=use-keyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-keyboard.js","sourceRoot":"","sources":["../../../../src/tui/hooks/use-keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AA2C/B,MAAM,UAAU,WAAW,CAAC,QAAqC;IAC/D,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACtB,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;aACvC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;aAC/C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;aACpC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;aAC3C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;aAC9C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;aACxC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,cAAc,CAAC,CAAC;aAC5C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;aAC3C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;aAC/C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;aAC3C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACtC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;aACpC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;aAC7C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;aAC3C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;aACxC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACtC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;aAC3C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;aACzC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,kBAAkB,CAAC,CAAC;aAChD,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;aAC9C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;aACtC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;aACpC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;aACzC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;aACrC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;aACxC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC;aAC9C,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;aACrC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;aACpC,IAAI,KAAK,KAAK,GAAG;YAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;aACvC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,SAAS;YAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;aACzD,IAAI,GAAG,CAAC,MAAM;YAAE,QAAQ,CAAC,aAAa,CAAC,CAAC;aACxC,IAAI,GAAG,CAAC,MAAM;YAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,25 @@
1
+ export interface LogLine {
2
+ timestamp: string;
3
+ text: string;
4
+ stream: 'stdout' | 'stderr';
5
+ }
6
+ export declare class LogRingBuffer {
7
+ private capacity;
8
+ private buf;
9
+ private head;
10
+ private size;
11
+ constructor(capacity?: number);
12
+ push(line: LogLine): void;
13
+ getLines(): LogLine[];
14
+ clear(): void;
15
+ }
16
+ export interface LogStreamState {
17
+ lines: LogLine[];
18
+ scrollOffset: number;
19
+ autoScroll: boolean;
20
+ toggleAutoScroll: () => void;
21
+ scrollUp: () => void;
22
+ scrollDown: () => void;
23
+ }
24
+ export declare function useLogStream(getLines: () => LogLine[], intervalMs?: number): LogStreamState;
25
+ //# sourceMappingURL=use-log-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-log-stream.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/use-log-stream.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,OAAO;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;CAC7B;AAGD,qBAAa,aAAa;IAKZ,OAAO,CAAC,QAAQ;IAJ5B,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,IAAI,CAAK;gBAEG,QAAQ,SAAM;IAIlC,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAWzB,QAAQ,IAAI,OAAO,EAAE;IASrB,KAAK,IAAI,IAAI;CAId;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAID,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,OAAO,EAAE,EACzB,UAAU,SAAM,GACf,cAAc,CAiDhB"}
@@ -0,0 +1,83 @@
1
+ import { useState, useEffect, useCallback } from 'react';
2
+ // Fixed-capacity circular ring buffer for log lines
3
+ export class LogRingBuffer {
4
+ capacity;
5
+ buf;
6
+ head = 0; // index of oldest entry
7
+ size = 0;
8
+ constructor(capacity = 200) {
9
+ this.capacity = capacity;
10
+ this.buf = new Array(capacity);
11
+ }
12
+ push(line) {
13
+ const idx = (this.head + this.size) % this.capacity;
14
+ this.buf[idx] = line;
15
+ if (this.size < this.capacity) {
16
+ this.size++;
17
+ }
18
+ else {
19
+ // Overwrite oldest: advance head
20
+ this.head = (this.head + 1) % this.capacity;
21
+ }
22
+ }
23
+ getLines() {
24
+ const out = [];
25
+ for (let i = 0; i < this.size; i++) {
26
+ const entry = this.buf[(this.head + i) % this.capacity];
27
+ if (entry !== undefined)
28
+ out.push(entry);
29
+ }
30
+ return out;
31
+ }
32
+ clear() {
33
+ this.head = 0;
34
+ this.size = 0;
35
+ }
36
+ }
37
+ const VISIBLE_LINES = 20;
38
+ export function useLogStream(getLines, intervalMs = 200) {
39
+ const [lines, setLines] = useState(() => getLines());
40
+ const [scrollOffset, setScrollOffset] = useState(0);
41
+ const [autoScroll, setAutoScroll] = useState(true);
42
+ useEffect(() => {
43
+ const timer = setInterval(() => {
44
+ setLines(getLines());
45
+ }, intervalMs);
46
+ return () => clearInterval(timer);
47
+ }, [getLines, intervalMs]);
48
+ // When autoScroll is enabled, keep offset pinned to tail
49
+ const effectiveOffset = autoScroll
50
+ ? Math.max(0, lines.length - VISIBLE_LINES)
51
+ : scrollOffset;
52
+ const toggleAutoScroll = useCallback(() => {
53
+ setAutoScroll((prev) => {
54
+ if (!prev) {
55
+ // Re-enable: jump to end
56
+ setScrollOffset(Math.max(0, lines.length - VISIBLE_LINES));
57
+ }
58
+ return !prev;
59
+ });
60
+ }, [lines.length]);
61
+ const scrollUp = useCallback(() => {
62
+ setAutoScroll(false);
63
+ setScrollOffset((prev) => Math.max(0, prev - 1));
64
+ }, []);
65
+ const scrollDown = useCallback(() => {
66
+ setScrollOffset((prev) => {
67
+ const max = Math.max(0, lines.length - VISIBLE_LINES);
68
+ const next = Math.min(prev + 1, max);
69
+ if (next >= max)
70
+ setAutoScroll(true);
71
+ return next;
72
+ });
73
+ }, [lines.length]);
74
+ return {
75
+ lines,
76
+ scrollOffset: effectiveOffset,
77
+ autoScroll,
78
+ toggleAutoScroll,
79
+ scrollUp,
80
+ scrollDown,
81
+ };
82
+ }
83
+ //# sourceMappingURL=use-log-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-log-stream.js","sourceRoot":"","sources":["../../../../src/tui/hooks/use-log-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const SPINNER_FRAMES: readonly ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
2
+ export declare function useSpinner(interval?: number): string;
3
+ //# sourceMappingURL=use-spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-spinner.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/use-spinner.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,cAAc,6DAA8D,CAAC;AAE1F,wBAAgB,UAAU,CAAC,QAAQ,SAAK,GAAG,MAAM,CAWhD"}
@@ -0,0 +1,13 @@
1
+ import { useState, useEffect } from 'react';
2
+ export const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
3
+ export function useSpinner(interval = 80) {
4
+ const [frame, setFrame] = useState(0);
5
+ useEffect(() => {
6
+ const timer = setInterval(() => {
7
+ setFrame((f) => (f + 1) % SPINNER_FRAMES.length);
8
+ }, interval);
9
+ return () => clearInterval(timer);
10
+ }, [interval]);
11
+ return SPINNER_FRAMES[frame];
12
+ }
13
+ //# sourceMappingURL=use-spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-spinner.js","sourceRoot":"","sources":["../../../../src/tui/hooks/use-spinner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAU,CAAC;AAE1F,MAAM,UAAU,UAAU,CAAC,QAAQ,GAAG,EAAE;IACtC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC,EAAE,QAAQ,CAAC,CAAC;QACb,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,33 @@
1
+ import type { Task } from '../../core/task-store.js';
2
+ import type { AgentSession } from '../../core/agent-session-store.js';
3
+ import type { FileConflict } from '../../core/conflict-detector.js';
4
+ import type { ApprovalRequest } from '../../approval/approval-store.js';
5
+ import type { HumanAction } from '../../core/human-action-store.js';
6
+ import type { OrchestratorState } from '../../core/orchestrator-store.js';
7
+ import type { MergeQueueItem } from '../../core/merge-queue.js';
8
+ export interface TeamMember {
9
+ humanId: string;
10
+ sessions: AgentSession[];
11
+ }
12
+ export interface StoreState {
13
+ tasks: Task[];
14
+ activeSessions: AgentSession[];
15
+ conflicts: FileConflict[];
16
+ parallelBatch: Task[];
17
+ teamMembers: TeamMember[];
18
+ syncStatus: 'connected' | 'disconnected' | 'syncing';
19
+ pendingApprovals: ApprovalRequest[];
20
+ resolvedApprovals: ApprovalRequest[];
21
+ humanActions: HumanAction[];
22
+ orchestratorStates: OrchestratorState[];
23
+ yoloMode: boolean;
24
+ factoryMode: boolean;
25
+ flashMessage: string | null;
26
+ intelligenceEnabled: boolean;
27
+ isCompliance: boolean;
28
+ sandboxEnabled: boolean;
29
+ mergeQueueItems: MergeQueueItem[];
30
+ mergeQueueProcessing: boolean;
31
+ }
32
+ export declare function useStore(getState: () => StoreState, intervalMs?: number): StoreState;
33
+ //# sourceMappingURL=use-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-store.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/use-store.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,cAAc,EAAE,YAAY,EAAE,CAAC;IAC/B,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,aAAa,EAAE,IAAI,EAAE,CAAC;IACtB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,UAAU,EAAE,WAAW,GAAG,cAAc,GAAG,SAAS,CAAC;IACrD,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,MAAM,UAAU,EAC1B,UAAU,SAAO,GAChB,UAAU,CAqBZ"}