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,28 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { useState, useEffect } from 'react';
3
+ import { Box, Text } from 'ink';
4
+ import { ComplianceBadge } from './compliance-badge.js';
5
+ const PROVIDER_COLORS = {
6
+ claude: 'yellow',
7
+ codex: 'green',
8
+ gemini: 'blue',
9
+ };
10
+ export function StatusBar({ agentsRunning, warnings, tasks, blocked, humanActions, factoryMode, yoloMode, orchestratorReviewing, orchestratorBlocked, prsToday, cols = 80, autoMergeMessage, flashMessage, isCompliance = false, activeProvider, mergeQueuePending, mergeQueueProcessing }) {
11
+ const [displayMerge, setDisplayMerge] = useState(null);
12
+ const narrow = cols < 80;
13
+ useEffect(() => {
14
+ if (!autoMergeMessage)
15
+ return;
16
+ setDisplayMerge(autoMergeMessage);
17
+ const timer = setTimeout(() => setDisplayMerge(null), 5000);
18
+ return () => clearTimeout(timer);
19
+ }, [autoMergeMessage]);
20
+ const modeLabel = factoryMode && yoloMode ? 'YOLO' : factoryMode ? 'FACTORY' : yoloMode ? 'AUTO' : null;
21
+ const modeColor = factoryMode && yoloMode ? 'red' : factoryMode ? 'cyan' : 'yellow';
22
+ if (narrow) {
23
+ // Abbreviated single-line mode for narrow terminals
24
+ return (_jsxs(Box, { flexDirection: "column", children: [flashMessage && (_jsx(Box, { paddingX: 1, children: _jsxs(Text, { color: "yellow", children: ["\u26A0 ", flashMessage] }) })), _jsxs(Box, { flexDirection: "row", gap: 1, paddingX: 1, children: [_jsxs(Text, { children: [_jsx(Text, { color: "green", children: agentsRunning }), _jsx(Text, { dimColor: true, children: "\u2191" })] }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: tasks }), _jsx(Text, { dimColor: true, children: "t" })] }), blocked > 0 && _jsxs(Text, { color: "red", children: [blocked, "!"] }), humanActions > 0 && _jsxs(Text, { color: "magenta", children: [humanActions, "\u2605"] }), warnings > 0 && _jsxs(Text, { color: "yellow", children: [warnings, "\u26A0"] }), orchestratorBlocked > 0 && _jsx(Text, { color: "red", bold: true, children: "BLOCKED" }), modeLabel && _jsx(Text, { color: modeColor, bold: true, children: modeLabel }), _jsx(ComplianceBadge, { isCompliance: isCompliance }), activeProvider && _jsx(Text, { color: PROVIDER_COLORS[activeProvider] ?? 'white', children: activeProvider }), (mergeQueuePending ?? 0) > 0 && _jsxs(Text, { color: "cyan", children: [mergeQueueProcessing ? '↻' : '⏳', mergeQueuePending] }), displayMerge && _jsx(Text, { color: "cyan", children: "\u2713" })] })] }));
25
+ }
26
+ return (_jsxs(Box, { flexDirection: "column", children: [flashMessage && (_jsx(Box, { paddingX: 1, children: _jsxs(Text, { color: "yellow", children: ["\u26A0 ", flashMessage] }) })), _jsxs(Box, { flexDirection: "row", gap: 2, paddingX: 1, children: [_jsxs(Text, { children: [_jsx(Text, { color: "green", children: agentsRunning }), _jsx(Text, { dimColor: true, children: " running" })] }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: tasks }), _jsx(Text, { dimColor: true, children: " tasks" })] }), blocked > 0 && _jsxs(Text, { children: [_jsx(Text, { color: "red", children: blocked }), _jsx(Text, { dimColor: true, children: " blocked" })] }), humanActions > 0 && _jsxs(Text, { children: [_jsx(Text, { color: "magenta", children: humanActions }), _jsx(Text, { dimColor: true, children: " your turn" })] }), warnings > 0 && _jsxs(Text, { children: [_jsx(Text, { color: "yellow", children: warnings }), _jsx(Text, { dimColor: true, children: " warnings" })] }), orchestratorReviewing > 0 && _jsx(Text, { dimColor: true, children: "reviewing\u2026" }), orchestratorBlocked > 0 && _jsx(Text, { color: "red", bold: true, children: "push blocked" }), modeLabel && _jsx(Text, { color: modeColor, bold: true, children: modeLabel }), _jsx(ComplianceBadge, { isCompliance: isCompliance }), activeProvider && _jsx(Text, { children: _jsx(Text, { color: PROVIDER_COLORS[activeProvider] ?? 'white', bold: true, children: activeProvider }) }), _jsxs(Text, { dimColor: true, children: ["\u2191 ", prsToday, " PRs"] }), (mergeQueuePending ?? 0) > 0 && (_jsxs(Text, { children: [_jsx(Text, { color: "cyan", children: mergeQueueProcessing ? '↻' : '⏳' }), _jsxs(Text, { dimColor: true, children: [" merge ", mergeQueueProcessing ? 'rebasing' : 'queued', ": ", mergeQueuePending] })] })), displayMerge && _jsxs(Text, { children: [_jsx(Text, { color: "cyan", children: "\u2713 merged: " }), _jsx(Text, { children: displayMerge })] })] })] }));
27
+ }
28
+ //# sourceMappingURL=status-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-bar.js","sourceRoot":"","sources":["../../../../src/tui/components/status-bar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import type { Task } from '../../core/task-store.js';
3
+ interface TaskQueueProps {
4
+ tasks: Task[];
5
+ cols?: number;
6
+ isActive?: boolean;
7
+ selectedIndex?: number;
8
+ }
9
+ export declare function TaskQueue({ tasks, cols, isActive, selectedIndex }: TaskQueueProps): React.JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=task-queue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-queue.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/task-queue.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAErD,UAAU,cAAc;IACtB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAaD,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,IAAS,EAAE,QAAgB,EAAE,aAAiB,EAAE,EAAE,cAAc,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CA2CtH"}
@@ -0,0 +1,30 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ const MAX_TASKS = 20;
4
+ function priorityColor(priority) {
5
+ switch (priority) {
6
+ case 'p0': return 'red';
7
+ case 'p1': return 'yellow';
8
+ case 'p2': return 'green';
9
+ case 'p3': return 'white';
10
+ }
11
+ }
12
+ export function TaskQueue({ tasks, cols = 80, isActive = false, selectedIndex = 0 }) {
13
+ const todoTasks = tasks
14
+ .filter((t) => (t.status === 'todo' || t.status === 'blocked') && !t.title.startsWith('HUMANO:'))
15
+ .slice(0, MAX_TASKS);
16
+ const tasksLeft = tasks.filter((t) => t.status !== 'done').length;
17
+ // Reserve space for priority label "[p0] " (5) + padding (2) + blocked label (8)
18
+ const titleMaxLen = Math.max(10, cols / 2 - 15);
19
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { paddingX: 1, children: _jsxs(Text, { bold: isActive, color: isActive ? 'green' : undefined, dimColor: !isActive, children: ["TASK QUEUE \u00B7 ", tasksLeft, " left"] }) }), todoTasks.length === 0 ? (_jsx(Box, { paddingX: 1, children: _jsx(Text, { color: "gray", children: "No pending tasks" }) })) : (todoTasks.map((task, idx) => {
20
+ const isSelected = isActive && idx === selectedIndex;
21
+ const title = task.title.length > titleMaxLen
22
+ ? task.title.slice(0, titleMaxLen - 1) + '\u2026'
23
+ : task.title;
24
+ const titleColor = task.status === 'blocked'
25
+ ? 'gray'
26
+ : isSelected ? 'cyan' : 'white';
27
+ return (_jsxs(Box, { flexDirection: "row", gap: 1, paddingX: 1, children: [_jsx(Text, { color: "cyan", children: isSelected ? '▶' : ' ' }), _jsxs(Text, { color: priorityColor(task.priority), children: ["[", task.priority, "]"] }), _jsx(Text, { color: titleColor, bold: isSelected, children: title }), task.status === 'blocked' && (_jsx(Text, { color: "red", children: "blocked" }))] }, task.id));
28
+ }))] }));
29
+ }
30
+ //# sourceMappingURL=task-queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-queue.js","sourceRoot":"","sources":["../../../../src/tui/components/task-queue.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import type { AgentSession } from '../../core/agent-session-store.js';
3
+ interface TeamMember {
4
+ humanId: string;
5
+ sessions: AgentSession[];
6
+ }
7
+ interface TeamViewProps {
8
+ members: TeamMember[];
9
+ visible: boolean;
10
+ }
11
+ export declare function TeamView({ members, visible }: TeamViewProps): React.JSX.Element | null;
12
+ export {};
13
+ //# sourceMappingURL=team-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-view.d.ts","sourceRoot":"","sources":["../../../../src/tui/components/team-view.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAEtE,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,YAAY,EAAE,CAAC;CAC1B;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAqCtF"}
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from 'ink';
3
+ export function TeamView({ members, visible }) {
4
+ if (!visible) {
5
+ return null;
6
+ }
7
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { paddingX: 1, children: _jsx(Text, { bold: true, color: "white", children: "Team" }) }), members.length === 0 ? (_jsx(Box, { paddingX: 1, children: _jsx(Text, { color: "gray", children: "No team members" }) })) : (members.map((member) => {
8
+ const isActive = member.sessions.length > 0;
9
+ return (_jsxs(Box, { flexDirection: "row", gap: 1, paddingX: 1, children: [_jsx(Text, { color: isActive ? 'green' : 'gray', children: isActive ? '●' : '○' }), _jsx(Text, { color: isActive ? 'white' : 'gray', children: member.humanId }), isActive && (_jsxs(Text, { color: "gray", children: [member.sessions.length, " agent", member.sessions.length !== 1 ? 's' : ''] })), !isActive && (_jsx(Text, { color: "gray", children: "idle" }))] }, member.humanId));
10
+ }))] }));
11
+ }
12
+ //# sourceMappingURL=team-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-view.js","sourceRoot":"","sources":["../../../../src/tui/components/team-view.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAahC,MAAM,UAAU,QAAQ,CAAC,EAAE,OAAO,EAAE,OAAO,EAAiB;IAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,YACd,KAAC,IAAI,IAAC,IAAI,QAAC,KAAK,EAAC,OAAO,qBAAY,GAChC,EACL,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CACtB,KAAC,GAAG,IAAC,QAAQ,EAAE,CAAC,YACd,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,gCAAuB,GACrC,CACP,CAAC,CAAC,CAAC,CACF,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;gBACrB,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC5C,OAAO,CACL,MAAC,GAAG,IAAsB,aAAa,EAAC,KAAK,EAAC,GAAG,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,aAC/D,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,YACrC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAChB,EACP,KAAC,IAAI,IAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,YAAG,MAAM,CAAC,OAAO,GAAQ,EAChE,QAAQ,IAAI,CACX,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,aACf,MAAM,CAAC,QAAQ,CAAC,MAAM,YAAQ,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IACjE,CACR,EACA,CAAC,QAAQ,IAAI,CACZ,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,qBAAY,CAC/B,KAZO,MAAM,CAAC,OAAO,CAalB,CACP,CAAC;YACJ,CAAC,CAAC,CACH,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Task } from '../core/task-store.js';
2
+ export declare const BOX_WIDTH = 19;
3
+ export declare const BOX_HEIGHT = 4;
4
+ export declare const LAYER_SPACING = 4;
5
+ export declare function assignLayers(tasks: Task[]): Map<string, number>;
6
+ export declare function assignColumns(tasks: Task[], layers: Map<string, number>): Map<string, number>;
7
+ export declare function findCriticalPath(tasks: Task[], layers: Map<string, number>): Set<string>;
8
+ export declare function renderGraphToGrid(tasks: Task[], layers: Map<string, number>, columns: Map<string, number>): string[][];
9
+ export declare function renderArrows(tasks: Task[], layers: Map<string, number>, columns: Map<string, number>, grid: string[][]): void;
10
+ export declare function renderGraph(tasks: Task[], useColors?: boolean): string;
11
+ //# sourceMappingURL=graph-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-renderer.d.ts","sourceRoot":"","sources":["../../../src/tui/graph-renderer.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAElD,eAAO,MAAM,SAAS,KAAK,CAAC;AAC5B,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,aAAa,IAAI,CAAC;AAkB/B,wBAAgB,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgD/D;AAWD,wBAAgB,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAsB7F;AAID,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAsCxF;AA8BD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,MAAM,EAAE,EAAE,CAuCZ;AAID,wBAAgB,YAAY,CAC1B,KAAK,EAAE,IAAI,EAAE,EACb,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,IAAI,EAAE,MAAM,EAAE,EAAE,GACf,IAAI,CAwCN;AAiED,wBAAgB,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,SAAS,UAAO,GAAG,MAAM,CAcnE"}
@@ -0,0 +1,296 @@
1
+ // ASCII dependency-graph renderer — layered DAG with arrows.
2
+ // Exports: assignLayers, assignColumns, findCriticalPath,
3
+ // renderGraphToGrid, renderArrows, renderGraph
4
+ export const BOX_WIDTH = 19;
5
+ export const BOX_HEIGHT = 4; // rows: top border, title, status+priority, bottom border
6
+ export const LAYER_SPACING = 4; // gap rows between box-bottom and next box-top
7
+ const BAND = BOX_HEIGHT + LAYER_SPACING; // 8 rows per layer slot
8
+ const COL_STRIDE = BOX_WIDTH + 1; // 20 chars per column slot (box + 1-char gap)
9
+ const CONTENT_WIDTH = BOX_WIDTH - 4; // 15 chars (borders + spaces = 4 overhead)
10
+ // ANSI colour codes
11
+ const STATUS_COLOR = {
12
+ in_progress: '\x1b[36m',
13
+ done: '\x1b[32m',
14
+ blocked: '\x1b[31m',
15
+ todo: '',
16
+ };
17
+ const CRITICAL_COLOR = '\x1b[33;1m';
18
+ const RESET = '\x1b[0m';
19
+ // ─── assignLayers (Kahn's topological sort) ───────────────────────────────────
20
+ export function assignLayers(tasks) {
21
+ if (tasks.length === 0)
22
+ return new Map();
23
+ const taskSet = new Set(tasks.map(t => t.id));
24
+ // in-degree = count of valid dependencies (within task set)
25
+ const inDeg = new Map();
26
+ // children[dep] = tasks that list dep in their dependencies
27
+ const children = new Map();
28
+ for (const t of tasks) {
29
+ const validDeps = t.dependencies.filter(d => taskSet.has(d));
30
+ inDeg.set(t.id, validDeps.length);
31
+ for (const dep of validDeps) {
32
+ const list = children.get(dep);
33
+ if (list)
34
+ list.push(t.id);
35
+ else
36
+ children.set(dep, [t.id]);
37
+ }
38
+ }
39
+ const layers = new Map();
40
+ const queue = [];
41
+ for (const t of tasks) {
42
+ if ((inDeg.get(t.id) ?? 0) === 0) {
43
+ layers.set(t.id, 0);
44
+ queue.push(t.id);
45
+ }
46
+ }
47
+ while (queue.length > 0) {
48
+ const id = queue.shift();
49
+ const layer = layers.get(id);
50
+ for (const child of children.get(id) ?? []) {
51
+ const next = Math.max(layers.get(child) ?? 0, layer + 1);
52
+ layers.set(child, next);
53
+ const deg = (inDeg.get(child) ?? 1) - 1;
54
+ inDeg.set(child, deg);
55
+ if (deg === 0)
56
+ queue.push(child);
57
+ }
58
+ }
59
+ // Fallback for tasks stuck in cycles: assign layer 0
60
+ for (const t of tasks) {
61
+ if (!layers.has(t.id))
62
+ layers.set(t.id, 0);
63
+ }
64
+ return layers;
65
+ }
66
+ // ─── assignColumns (sort within layer by status / priority / title) ───────────
67
+ const STATUS_ORDER = {
68
+ in_progress: 0, todo: 1, blocked: 2, done: 3,
69
+ };
70
+ const PRIORITY_ORDER = {
71
+ p0: 0, p1: 1, p2: 2, p3: 3,
72
+ };
73
+ export function assignColumns(tasks, layers) {
74
+ const byLayer = new Map();
75
+ for (const t of tasks) {
76
+ const l = layers.get(t.id) ?? 0;
77
+ const group = byLayer.get(l);
78
+ if (group)
79
+ group.push(t);
80
+ else
81
+ byLayer.set(l, [t]);
82
+ }
83
+ const columns = new Map();
84
+ for (const group of byLayer.values()) {
85
+ group.sort((a, b) => {
86
+ const sd = (STATUS_ORDER[a.status] ?? 9) - (STATUS_ORDER[b.status] ?? 9);
87
+ if (sd !== 0)
88
+ return sd;
89
+ const pd = (PRIORITY_ORDER[a.priority] ?? 9) - (PRIORITY_ORDER[b.priority] ?? 9);
90
+ if (pd !== 0)
91
+ return pd;
92
+ return a.title.localeCompare(b.title);
93
+ });
94
+ group.forEach((t, i) => columns.set(t.id, i));
95
+ }
96
+ return columns;
97
+ }
98
+ // ─── findCriticalPath (longest path traced by layer depth) ────────────────────
99
+ export function findCriticalPath(tasks, layers) {
100
+ if (tasks.length === 0)
101
+ return new Set();
102
+ const idMap = new Map(tasks.map(t => [t.id, t]));
103
+ // Find the deepest endpoint (max layer; ties broken by lexicographic ID)
104
+ let endId = '';
105
+ let maxLayer = -1;
106
+ for (const [id, layer] of layers) {
107
+ if (layer > maxLayer || (layer === maxLayer && id < endId)) {
108
+ maxLayer = layer;
109
+ endId = id;
110
+ }
111
+ }
112
+ if (!endId)
113
+ return new Set();
114
+ // Trace back greedily: always follow the dependency with the highest layer
115
+ const path = new Set();
116
+ let current = endId;
117
+ while (current) {
118
+ path.add(current);
119
+ const task = idMap.get(current);
120
+ if (!task || task.dependencies.length === 0)
121
+ break;
122
+ let best;
123
+ let bestLayer = -1;
124
+ for (const dep of task.dependencies) {
125
+ const l = layers.get(dep) ?? -1;
126
+ if (l > bestLayer) {
127
+ bestLayer = l;
128
+ best = dep;
129
+ }
130
+ }
131
+ current = best;
132
+ }
133
+ return path;
134
+ }
135
+ // ─── Grid helpers ─────────────────────────────────────────────────────────────
136
+ function makeGrid(rows, cols) {
137
+ return Array.from({ length: rows }, () => Array(cols).fill(' '));
138
+ }
139
+ function setStr(grid, row, col, s) {
140
+ const gridRow = grid[row];
141
+ if (!gridRow)
142
+ return;
143
+ for (let i = 0; i < s.length; i++) {
144
+ if (col + i < gridRow.length)
145
+ gridRow[col + i] = s[i];
146
+ }
147
+ }
148
+ function placeArrow(grid, row, col, ch) {
149
+ const gridRow = grid[row];
150
+ if (!gridRow || col < 0 || col >= gridRow.length)
151
+ return;
152
+ const cur = gridRow[col];
153
+ // Crossing: | meets - → +
154
+ if ((cur === '|' && ch === '-') || (cur === '-' && ch === '|')) {
155
+ gridRow[col] = '+';
156
+ }
157
+ else if (cur === ' ' || ch === '+') {
158
+ gridRow[col] = ch;
159
+ }
160
+ }
161
+ // ─── renderGraphToGrid ────────────────────────────────────────────────────────
162
+ export function renderGraphToGrid(tasks, layers, columns) {
163
+ if (tasks.length === 0)
164
+ return [];
165
+ const maxLayer = Math.max(...layers.values());
166
+ // Count tasks per layer to determine grid width
167
+ const colsPerLayer = new Map();
168
+ for (const t of tasks) {
169
+ const l = layers.get(t.id) ?? 0;
170
+ colsPerLayer.set(l, (colsPerLayer.get(l) ?? 0) + 1);
171
+ }
172
+ const maxCols = Math.max(...colsPerLayer.values());
173
+ // Grid dimensions: no trailing gap column; no trailing spacing rows
174
+ const gridRows = maxLayer * BAND + BOX_HEIGHT;
175
+ const gridCols = (maxCols - 1) * COL_STRIDE + BOX_WIDTH;
176
+ const grid = makeGrid(gridRows, gridCols);
177
+ const border = '+' + '-'.repeat(BOX_WIDTH - 2) + '+'; // '+-----------------+'
178
+ for (const task of tasks) {
179
+ const layer = layers.get(task.id) ?? 0;
180
+ const col = columns.get(task.id) ?? 0;
181
+ const r = layer * BAND;
182
+ const c = col * COL_STRIDE;
183
+ const title = task.title.substring(0, CONTENT_WIDTH).padEnd(CONTENT_WIDTH);
184
+ const statusStr = `[${task.status}] ${task.priority}`
185
+ .substring(0, CONTENT_WIDTH)
186
+ .padEnd(CONTENT_WIDTH);
187
+ setStr(grid, r, c, border);
188
+ setStr(grid, r + 1, c, `| ${title} |`);
189
+ setStr(grid, r + 2, c, `| ${statusStr} |`);
190
+ setStr(grid, r + 3, c, border);
191
+ }
192
+ return grid;
193
+ }
194
+ // ─── renderArrows ─────────────────────────────────────────────────────────────
195
+ export function renderArrows(tasks, layers, columns, grid) {
196
+ const inSet = new Set(tasks.map(t => t.id));
197
+ for (const task of tasks) {
198
+ const cL = layers.get(task.id) ?? 0;
199
+ const cC = columns.get(task.id) ?? 0;
200
+ const cx = cC * COL_STRIDE + Math.floor(BOX_WIDTH / 2); // child box centre x
201
+ for (const depId of task.dependencies) {
202
+ if (!inSet.has(depId))
203
+ continue;
204
+ const pL = layers.get(depId) ?? 0;
205
+ const pC = columns.get(depId) ?? 0;
206
+ const px = pC * COL_STRIDE + Math.floor(BOX_WIDTH / 2); // parent box centre x
207
+ if (cL !== pL + 1)
208
+ continue; // only handle adjacent layers
209
+ // Spacing rows just below the parent box
210
+ const r0 = pL * BAND + BOX_HEIGHT; // +0
211
+ const r1 = r0 + 1; // +1
212
+ const r2 = r0 + 2; // +2
213
+ const r3 = r0 + 3; // +3
214
+ if (px === cx) {
215
+ // Straight vertical arrow
216
+ for (let r = r0; r <= r3; r++)
217
+ placeArrow(grid, r, px, '|');
218
+ }
219
+ else {
220
+ // Elbow: down from parent, horizontal run, down to child
221
+ placeArrow(grid, r0, px, '|');
222
+ // Horizontal connector on r1
223
+ placeArrow(grid, r1, px, '+');
224
+ const x1 = Math.min(px, cx);
225
+ const x2 = Math.max(px, cx);
226
+ for (let x = x1 + 1; x < x2; x++)
227
+ placeArrow(grid, r1, x, '-');
228
+ placeArrow(grid, r1, cx, '+');
229
+ // Vertical down to child on r2, r3
230
+ placeArrow(grid, r2, cx, '|');
231
+ placeArrow(grid, r3, cx, '|');
232
+ }
233
+ }
234
+ }
235
+ }
236
+ // ─── Color application ────────────────────────────────────────────────────────
237
+ function applyColors(tasks, layers, columns, criticalPath, grid) {
238
+ const rowSpans = new Map();
239
+ for (const task of tasks) {
240
+ const isCritical = criticalPath.has(task.id);
241
+ const color = isCritical ? CRITICAL_COLOR : (STATUS_COLOR[task.status] ?? '');
242
+ if (!color)
243
+ continue;
244
+ const layer = layers.get(task.id) ?? 0;
245
+ const col = columns.get(task.id) ?? 0;
246
+ const startCol = col * COL_STRIDE;
247
+ const endCol = startCol + BOX_WIDTH - 1;
248
+ for (let r = layer * BAND; r < layer * BAND + BOX_HEIGHT; r++) {
249
+ const spans = rowSpans.get(r);
250
+ if (spans)
251
+ spans.push({ startCol, endCol, color });
252
+ else
253
+ rowSpans.set(r, [{ startCol, endCol, color }]);
254
+ }
255
+ }
256
+ const lines = [];
257
+ for (let r = 0; r < grid.length; r++) {
258
+ const row = grid[r];
259
+ const spans = rowSpans.get(r);
260
+ if (!spans) {
261
+ lines.push(row.join('').trimEnd());
262
+ continue;
263
+ }
264
+ const sorted = [...spans].sort((a, b) => a.startCol - b.startCol);
265
+ let line = '';
266
+ let colIdx = 0;
267
+ for (const span of sorted) {
268
+ if (colIdx < span.startCol) {
269
+ line += row.slice(colIdx, span.startCol).join('');
270
+ colIdx = span.startCol;
271
+ }
272
+ const chars = row.slice(span.startCol, span.endCol + 1).join('');
273
+ line += span.color + chars + RESET;
274
+ colIdx = span.endCol + 1;
275
+ }
276
+ if (colIdx < row.length)
277
+ line += row.slice(colIdx).join('');
278
+ lines.push(line.trimEnd());
279
+ }
280
+ return lines.join('\n');
281
+ }
282
+ // ─── renderGraph (main entry point) ──────────────────────────────────────────
283
+ export function renderGraph(tasks, useColors = true) {
284
+ if (tasks.length === 0)
285
+ return '';
286
+ const layers = assignLayers(tasks);
287
+ const columns = assignColumns(tasks, layers);
288
+ const criticalPath = findCriticalPath(tasks, layers);
289
+ const grid = renderGraphToGrid(tasks, layers, columns);
290
+ renderArrows(tasks, layers, columns, grid);
291
+ if (!useColors) {
292
+ return grid.map(row => row.join('').trimEnd()).join('\n');
293
+ }
294
+ return applyColors(tasks, layers, columns, criticalPath, grid);
295
+ }
296
+ //# sourceMappingURL=graph-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-renderer.js","sourceRoot":"","sources":["../../../src/tui/graph-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { StoreState } from './use-store.js';
2
+ /**
3
+ * Pure detection: given previous and current snapshots, determine if
4
+ * a terminal bell should fire.
5
+ */
6
+ export declare function shouldBell(prev: {
7
+ pendingCount: number;
8
+ doneIds: Set<string>;
9
+ }, current: {
10
+ pendingCount: number;
11
+ doneIds: Set<string>;
12
+ }): boolean;
13
+ /**
14
+ * React hook: emits terminal bell (\x07) when notable events occur:
15
+ * - New pending approval arrives (human action requested)
16
+ * - A task transitions to 'done' (agent finished)
17
+ *
18
+ * Uses stderr to avoid interfering with Ink's stdout rendering.
19
+ */
20
+ export declare function useBell(state: StoreState): void;
21
+ //# sourceMappingURL=use-bell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-bell.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/use-bell.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,EACpD,OAAO,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,GACtD,OAAO,CAcT;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAqB/C"}
@@ -0,0 +1,38 @@
1
+ import { useEffect, useRef } from 'react';
2
+ /**
3
+ * Pure detection: given previous and current snapshots, determine if
4
+ * a terminal bell should fire.
5
+ */
6
+ export function shouldBell(prev, current) {
7
+ // New pending approvals appeared (approval arrives / human action requested)
8
+ if (current.pendingCount > prev.pendingCount) {
9
+ return true;
10
+ }
11
+ // A task newly transitioned to done (agent finished)
12
+ for (const id of current.doneIds) {
13
+ if (!prev.doneIds.has(id)) {
14
+ return true;
15
+ }
16
+ }
17
+ return false;
18
+ }
19
+ /**
20
+ * React hook: emits terminal bell (\x07) when notable events occur:
21
+ * - New pending approval arrives (human action requested)
22
+ * - A task transitions to 'done' (agent finished)
23
+ *
24
+ * Uses stderr to avoid interfering with Ink's stdout rendering.
25
+ */
26
+ export function useBell(state) {
27
+ const prevPendingCountRef = useRef(state.pendingApprovals.length);
28
+ const prevDoneIdsRef = useRef(new Set(state.tasks.filter((t) => t.status === 'done').map((t) => t.id)));
29
+ useEffect(() => {
30
+ const currentDoneIds = new Set(state.tasks.filter((t) => t.status === 'done').map((t) => t.id));
31
+ if (shouldBell({ pendingCount: prevPendingCountRef.current, doneIds: prevDoneIdsRef.current }, { pendingCount: state.pendingApprovals.length, doneIds: currentDoneIds })) {
32
+ process.stderr.write('\x07');
33
+ }
34
+ prevPendingCountRef.current = state.pendingApprovals.length;
35
+ prevDoneIdsRef.current = currentDoneIds;
36
+ }, [state.pendingApprovals, state.tasks]);
37
+ }
38
+ //# sourceMappingURL=use-bell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-bell.js","sourceRoot":"","sources":["../../../../src/tui/hooks/use-bell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAG1C;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,IAAoD,EACpD,OAAuD;IAEvD,6EAA6E;IAC7E,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qDAAqD;IACrD,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACjC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,KAAiB;IACvC,MAAM,mBAAmB,GAAG,MAAM,CAAS,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC1E,MAAM,cAAc,GAAG,MAAM,CAC3B,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CACzE,CAAC;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,cAAc,GAAG,IAAI,GAAG,CAC5B,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAChE,CAAC;QAEF,IAAI,UAAU,CACZ,EAAE,YAAY,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,CAAC,OAAO,EAAE,EAC9E,EAAE,YAAY,EAAE,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,CACzE,EAAE,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QAED,mBAAmB,CAAC,OAAO,GAAG,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAC5D,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC;IAC1C,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { Task } from '../../core/task-store.js';
2
+ export type CiStatus = 'pending' | 'success' | 'failure' | 'error';
3
+ interface PrIdentifier {
4
+ owner: string;
5
+ repo: string;
6
+ number: number;
7
+ }
8
+ export declare function parsePrUrl(prUrl: string): PrIdentifier | null;
9
+ interface CheckRollup {
10
+ conclusion: string;
11
+ }
12
+ export declare function deriveStatus(checks: CheckRollup[]): CiStatus;
13
+ export declare function fetchCiForPr(prUrl: string): Promise<CiStatus>;
14
+ export declare function useCiStatus(tasks: Task[], pollIntervalMs?: number): Map<string, CiStatus>;
15
+ export {};
16
+ //# sourceMappingURL=use-ci-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-ci-status.d.ts","sourceRoot":"","sources":["../../../../src/tui/hooks/use-ci-status.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnE,UAAU,YAAY;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAI7D;AAED,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAqB5D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoC7D;AAID,wBAAgB,WAAW,CACzB,KAAK,EAAE,IAAI,EAAE,EACb,cAAc,SAAkB,GAC/B,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAsDvB"}