codingbuddy 4.1.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (362) hide show
  1. package/dist/src/agent/agent-summary.utils.d.ts +2 -1
  2. package/dist/src/analyzer/conventions.schemas.d.ts +0 -4
  3. package/dist/src/analyzer/conventions.schemas.js.map +1 -1
  4. package/dist/src/analyzer/conventions.types.d.ts +5 -7
  5. package/dist/src/analyzer/conventions.types.js.map +1 -1
  6. package/dist/src/analyzer/directory.analyzer.d.ts +1 -1
  7. package/dist/src/checklist/checklist.schema.d.ts +2 -1
  8. package/dist/src/cli/cli.d.ts +2 -3
  9. package/dist/src/cli/cli.js +4 -3
  10. package/dist/src/cli/cli.js.map +1 -1
  11. package/dist/src/cli/cli.types.d.ts +3 -0
  12. package/dist/src/cli/init/claude-settings.utils.d.ts +2 -1
  13. package/dist/src/cli/init/config.generator.d.ts +0 -2
  14. package/dist/src/cli/init/config.generator.js +0 -2
  15. package/dist/src/cli/init/config.generator.js.map +1 -1
  16. package/dist/src/cli/init/config.writer.d.ts +0 -1
  17. package/dist/src/cli/init/config.writer.js +0 -1
  18. package/dist/src/cli/init/config.writer.js.map +1 -1
  19. package/dist/src/cli/init/init.constants.js +1 -0
  20. package/dist/src/cli/init/init.constants.js.map +1 -1
  21. package/dist/src/cli/init/init.wizard.d.ts +2 -1
  22. package/dist/src/cli/init/prompts/agent-prompt.d.ts +1 -1
  23. package/dist/src/cli/restart-tui.d.ts +9 -0
  24. package/dist/src/cli/restart-tui.js +30 -0
  25. package/dist/src/cli/restart-tui.js.map +1 -0
  26. package/dist/src/cli/run-tui.d.ts +3 -3
  27. package/dist/src/cli/run-tui.js +32 -58
  28. package/dist/src/cli/run-tui.js.map +1 -1
  29. package/dist/src/config/config.loader.d.ts +0 -2
  30. package/dist/src/config/config.loader.js +0 -2
  31. package/dist/src/config/config.loader.js.map +1 -1
  32. package/dist/src/config/config.schema.d.ts +0 -16
  33. package/dist/src/config/config.schema.js +7 -7
  34. package/dist/src/config/config.schema.js.map +1 -1
  35. package/dist/src/context/context-document.types.d.ts +0 -8
  36. package/dist/src/context/context-document.types.js +9 -9
  37. package/dist/src/context/context-document.types.js.map +1 -1
  38. package/dist/src/context/context-parser.utils.d.ts +1 -9
  39. package/dist/src/context/context-parser.utils.js +0 -36
  40. package/dist/src/context/context-parser.utils.js.map +1 -1
  41. package/dist/src/keyword/keyword.service.js +5 -1
  42. package/dist/src/keyword/keyword.service.js.map +1 -1
  43. package/dist/src/keyword/keyword.types.d.ts +3 -7
  44. package/dist/src/keyword/keyword.types.js +31 -1
  45. package/dist/src/keyword/keyword.types.js.map +1 -1
  46. package/dist/src/keyword/patterns/backend.patterns.js +10 -0
  47. package/dist/src/keyword/patterns/backend.patterns.js.map +1 -1
  48. package/dist/src/keyword/patterns/context.patterns.js +1 -1
  49. package/dist/src/keyword/patterns/data-science.patterns.d.ts +2 -0
  50. package/dist/src/keyword/patterns/data-science.patterns.js +71 -0
  51. package/dist/src/keyword/patterns/data-science.patterns.js.map +1 -0
  52. package/dist/src/keyword/patterns/index.d.ts +3 -0
  53. package/dist/src/keyword/patterns/index.js +7 -1
  54. package/dist/src/keyword/patterns/index.js.map +1 -1
  55. package/dist/src/keyword/patterns/intent-pattern-checks.js +24 -0
  56. package/dist/src/keyword/patterns/intent-pattern-checks.js.map +1 -1
  57. package/dist/src/keyword/patterns/security.patterns.d.ts +2 -0
  58. package/dist/src/keyword/patterns/security.patterns.js +106 -0
  59. package/dist/src/keyword/patterns/security.patterns.js.map +1 -0
  60. package/dist/src/keyword/patterns/systems.patterns.d.ts +2 -0
  61. package/dist/src/keyword/patterns/systems.patterns.js +101 -0
  62. package/dist/src/keyword/patterns/systems.patterns.js.map +1 -0
  63. package/dist/src/keyword/patterns/test.patterns.d.ts +2 -0
  64. package/dist/src/keyword/patterns/test.patterns.js +71 -0
  65. package/dist/src/keyword/patterns/test.patterns.js.map +1 -0
  66. package/dist/src/keyword/srp-template.d.ts +0 -2
  67. package/dist/src/keyword/srp-template.js +0 -2
  68. package/dist/src/keyword/srp-template.js.map +1 -1
  69. package/dist/src/keyword/strategies/__tests__/strategy-test.utils.d.ts +1 -1
  70. package/dist/src/keyword/strategies/__tests__/strategy-test.utils.js +4 -0
  71. package/dist/src/keyword/strategies/__tests__/strategy-test.utils.js.map +1 -1
  72. package/dist/src/keyword/strategies/act-agent.strategy.js +2 -2
  73. package/dist/src/keyword/strategies/act-agent.strategy.js.map +1 -1
  74. package/dist/src/main.js +30 -9
  75. package/dist/src/main.js.map +1 -1
  76. package/dist/src/mcp/handlers/index.d.ts +1 -0
  77. package/dist/src/mcp/handlers/index.js +3 -1
  78. package/dist/src/mcp/handlers/index.js.map +1 -1
  79. package/dist/src/mcp/handlers/mode.handler.js +15 -1
  80. package/dist/src/mcp/handlers/mode.handler.js.map +1 -1
  81. package/dist/src/mcp/handlers/tui.handler.d.ts +8 -0
  82. package/dist/src/mcp/handlers/tui.handler.js +50 -0
  83. package/dist/src/mcp/handlers/tui.handler.js.map +1 -0
  84. package/dist/src/mcp/mcp.module.js +1 -0
  85. package/dist/src/mcp/mcp.module.js.map +1 -1
  86. package/dist/src/rules/rules.types.d.ts +3 -2
  87. package/dist/src/rules/skill.schema.d.ts +0 -5
  88. package/dist/src/rules/skill.schema.js +3 -3
  89. package/dist/src/rules/skill.schema.js.map +1 -1
  90. package/dist/src/shared/async.utils.d.ts +3 -2
  91. package/dist/src/shared/file.utils.d.ts +3 -2
  92. package/dist/src/shared/filesystem.interface.d.ts +0 -10
  93. package/dist/src/shared/filesystem.interface.js +1 -10
  94. package/dist/src/shared/filesystem.interface.js.map +1 -1
  95. package/dist/src/shared/keyword-core.d.ts +2 -1
  96. package/dist/src/shared/keyword-core.js +3 -1
  97. package/dist/src/shared/keyword-core.js.map +1 -1
  98. package/dist/src/shared/language.types.d.ts +2 -1
  99. package/dist/src/shared/lru-cache.d.ts +2 -6
  100. package/dist/src/shared/path.utils.d.ts +0 -1
  101. package/dist/src/shared/path.utils.js +0 -1
  102. package/dist/src/shared/path.utils.js.map +1 -1
  103. package/dist/src/shared/pattern-matcher.d.ts +2 -1
  104. package/dist/src/shared/rules-core.d.ts +3 -2
  105. package/dist/src/shared/security.utils.d.ts +4 -3
  106. package/dist/src/shared/validation.constants.d.ts +2 -3
  107. package/dist/src/shared/validation.constants.js +3 -3
  108. package/dist/src/shared/validation.constants.js.map +1 -1
  109. package/dist/src/shared/verbosity.types.d.ts +2 -1
  110. package/dist/src/shared/version.d.ts +1 -0
  111. package/dist/src/shared/version.js +5 -0
  112. package/dist/src/shared/version.js.map +1 -0
  113. package/dist/src/shared/version.utils.js +2 -14
  114. package/dist/src/shared/version.utils.js.map +1 -1
  115. package/dist/src/skill/skill-content.utils.d.ts +0 -1
  116. package/dist/src/skill/skill-content.utils.js +4 -4
  117. package/dist/src/skill/skill-content.utils.js.map +1 -1
  118. package/dist/src/tui/__perf__/memory-stability.spec.js +8 -8
  119. package/dist/src/tui/__perf__/memory-stability.spec.js.map +1 -1
  120. package/dist/src/tui/__perf__/rendering-performance.spec.js +13 -13
  121. package/dist/src/tui/__perf__/rendering-performance.spec.js.map +1 -1
  122. package/dist/src/tui/components/ActivityVisualizer.d.ts +14 -0
  123. package/dist/src/tui/components/ActivityVisualizer.js +21 -0
  124. package/dist/src/tui/components/ActivityVisualizer.js.map +1 -0
  125. package/dist/src/tui/components/ActivityVisualizer.spec.js +91 -0
  126. package/dist/src/tui/components/ActivityVisualizer.spec.js.map +1 -0
  127. package/dist/src/tui/components/ChecklistPanel.d.ts +10 -0
  128. package/dist/src/tui/components/ChecklistPanel.js +19 -0
  129. package/dist/src/tui/components/ChecklistPanel.js.map +1 -0
  130. package/dist/src/tui/components/ChecklistPanel.spec.js +45 -0
  131. package/dist/src/tui/components/ChecklistPanel.spec.js.map +1 -0
  132. package/dist/src/tui/components/ContextSection.d.ts +7 -0
  133. package/dist/src/tui/components/ContextSection.js +24 -0
  134. package/dist/src/tui/components/ContextSection.js.map +1 -0
  135. package/dist/src/tui/components/FlowMap.d.ts +12 -0
  136. package/dist/src/tui/components/FlowMap.js +55 -0
  137. package/dist/src/tui/components/FlowMap.js.map +1 -0
  138. package/dist/src/tui/components/FlowMap.spec.js +59 -0
  139. package/dist/src/tui/components/FlowMap.spec.js.map +1 -0
  140. package/dist/src/tui/components/FocusedAgentPanel.d.ts +13 -0
  141. package/dist/src/tui/components/FocusedAgentPanel.js +61 -0
  142. package/dist/src/tui/components/FocusedAgentPanel.js.map +1 -0
  143. package/dist/src/tui/components/FocusedAgentPanel.spec.js +109 -0
  144. package/dist/src/tui/components/FocusedAgentPanel.spec.js.map +1 -0
  145. package/dist/src/tui/components/HeaderBar.d.ts +11 -0
  146. package/dist/src/tui/components/HeaderBar.js +51 -0
  147. package/dist/src/tui/components/HeaderBar.js.map +1 -0
  148. package/dist/src/tui/components/HeaderBar.spec.js +78 -0
  149. package/dist/src/tui/components/HeaderBar.spec.js.map +1 -0
  150. package/dist/src/tui/components/SessionTabBar.d.ts +9 -0
  151. package/dist/src/tui/components/SessionTabBar.js +15 -0
  152. package/dist/src/tui/components/SessionTabBar.js.map +1 -0
  153. package/dist/src/tui/components/SessionTabBar.spec.js +59 -0
  154. package/dist/src/tui/components/SessionTabBar.spec.js.map +1 -0
  155. package/dist/src/tui/components/StageHealthBar.d.ts +12 -0
  156. package/dist/src/tui/components/StageHealthBar.js +69 -0
  157. package/dist/src/tui/components/StageHealthBar.js.map +1 -0
  158. package/dist/src/tui/components/StageHealthBar.spec.js +77 -0
  159. package/dist/src/tui/components/StageHealthBar.spec.js.map +1 -0
  160. package/dist/src/tui/components/activity-visualizer.pure.d.ts +4 -0
  161. package/dist/src/tui/components/activity-visualizer.pure.js +133 -0
  162. package/dist/src/tui/components/activity-visualizer.pure.js.map +1 -0
  163. package/dist/src/tui/components/checklist-panel.pure.d.ts +2 -0
  164. package/dist/src/tui/components/checklist-panel.pure.js +18 -0
  165. package/dist/src/tui/components/checklist-panel.pure.js.map +1 -0
  166. package/dist/src/tui/components/context-section.pure.d.ts +3 -0
  167. package/dist/src/tui/components/context-section.pure.js +38 -0
  168. package/dist/src/tui/components/context-section.pure.js.map +1 -0
  169. package/dist/src/tui/components/flow-map.pure.d.ts +26 -0
  170. package/dist/src/tui/components/flow-map.pure.js +354 -0
  171. package/dist/src/tui/components/flow-map.pure.js.map +1 -0
  172. package/dist/src/tui/components/focused-agent.pure.d.ts +9 -0
  173. package/dist/src/tui/components/focused-agent.pure.js +42 -0
  174. package/dist/src/tui/components/focused-agent.pure.js.map +1 -0
  175. package/dist/src/tui/components/grid-layout.pure.d.ts +2 -0
  176. package/dist/src/tui/components/grid-layout.pure.js +72 -0
  177. package/dist/src/tui/components/grid-layout.pure.js.map +1 -0
  178. package/dist/src/tui/components/header-bar.pure.d.ts +1 -0
  179. package/dist/src/tui/components/{header.pure.js → header-bar.pure.js} +1 -7
  180. package/dist/src/tui/components/header-bar.pure.js.map +1 -0
  181. package/dist/src/tui/components/index.d.ts +14 -15
  182. package/dist/src/tui/components/index.js +35 -49
  183. package/dist/src/tui/components/index.js.map +1 -1
  184. package/dist/src/tui/components/session-tab-bar.pure.d.ts +9 -0
  185. package/dist/src/tui/components/session-tab-bar.pure.js +45 -0
  186. package/dist/src/tui/components/session-tab-bar.pure.js.map +1 -0
  187. package/dist/src/tui/components/stage-health.pure.d.ts +5 -0
  188. package/dist/src/tui/components/stage-health.pure.js +63 -0
  189. package/dist/src/tui/components/stage-health.pure.js.map +1 -0
  190. package/dist/src/tui/dashboard-app.d.ts +9 -0
  191. package/dist/src/tui/dashboard-app.js +40 -0
  192. package/dist/src/tui/dashboard-app.js.map +1 -0
  193. package/dist/src/tui/dashboard-app.spec.js +144 -0
  194. package/dist/src/tui/dashboard-app.spec.js.map +1 -0
  195. package/dist/src/tui/dashboard-types.d.ts +94 -0
  196. package/dist/src/tui/dashboard-types.js +33 -0
  197. package/dist/src/tui/dashboard-types.js.map +1 -0
  198. package/dist/src/tui/eventbus-ui.integration.spec.js +133 -167
  199. package/dist/src/tui/eventbus-ui.integration.spec.js.map +1 -1
  200. package/dist/src/tui/events/event-bus.js +1 -1
  201. package/dist/src/tui/events/event-bus.js.map +1 -1
  202. package/dist/src/tui/events/index.d.ts +1 -1
  203. package/dist/src/tui/events/index.js.map +1 -1
  204. package/dist/src/tui/events/parse-agent.js +1 -26
  205. package/dist/src/tui/events/parse-agent.js.map +1 -1
  206. package/dist/src/tui/events/response-event-extractor.d.ts +16 -1
  207. package/dist/src/tui/events/response-event-extractor.js +181 -2
  208. package/dist/src/tui/events/response-event-extractor.js.map +1 -1
  209. package/dist/src/tui/events/tui-interceptor.d.ts +3 -0
  210. package/dist/src/tui/events/tui-interceptor.js +67 -7
  211. package/dist/src/tui/events/tui-interceptor.js.map +1 -1
  212. package/dist/src/tui/events/types.d.ts +46 -2
  213. package/dist/src/tui/events/types.js +6 -0
  214. package/dist/src/tui/events/types.js.map +1 -1
  215. package/dist/src/tui/hooks/index.d.ts +7 -4
  216. package/dist/src/tui/hooks/index.js +12 -7
  217. package/dist/src/tui/hooks/index.js.map +1 -1
  218. package/dist/src/tui/hooks/use-clock.js +3 -3
  219. package/dist/src/tui/hooks/use-clock.js.map +1 -1
  220. package/dist/src/tui/hooks/use-dashboard-state.d.ts +52 -0
  221. package/dist/src/tui/hooks/use-dashboard-state.js +299 -0
  222. package/dist/src/tui/hooks/use-dashboard-state.js.map +1 -0
  223. package/dist/src/tui/hooks/use-focus-agent.d.ts +2 -0
  224. package/dist/src/tui/hooks/use-focus-agent.js +26 -0
  225. package/dist/src/tui/hooks/use-focus-agent.js.map +1 -0
  226. package/dist/src/tui/hooks/use-multi-session-state.d.ts +16 -0
  227. package/dist/src/tui/hooks/use-multi-session-state.js +163 -0
  228. package/dist/src/tui/hooks/use-multi-session-state.js.map +1 -0
  229. package/dist/src/tui/hooks/use-terminal-size.d.ts +9 -0
  230. package/dist/src/tui/hooks/use-terminal-size.js +31 -0
  231. package/dist/src/tui/hooks/use-terminal-size.js.map +1 -0
  232. package/dist/src/tui/index.d.ts +12 -4
  233. package/dist/src/tui/index.js +18 -7
  234. package/dist/src/tui/index.js.map +1 -1
  235. package/dist/src/tui/ipc/index.d.ts +5 -2
  236. package/dist/src/tui/ipc/index.js +5 -5
  237. package/dist/src/tui/ipc/index.js.map +1 -1
  238. package/dist/src/tui/ipc/ipc-state-cache.d.ts +1 -0
  239. package/dist/src/tui/ipc/ipc-state-cache.js +7 -0
  240. package/dist/src/tui/ipc/ipc-state-cache.js.map +1 -1
  241. package/dist/src/tui/ipc/multi-session-manager.d.ts +39 -0
  242. package/dist/src/tui/ipc/multi-session-manager.js +143 -0
  243. package/dist/src/tui/ipc/multi-session-manager.js.map +1 -0
  244. package/dist/src/tui/ipc/tui-auto-launcher.d.ts +22 -0
  245. package/dist/src/tui/ipc/tui-auto-launcher.js +113 -0
  246. package/dist/src/tui/ipc/tui-auto-launcher.js.map +1 -0
  247. package/dist/src/tui/multi-session-app.d.ts +6 -0
  248. package/dist/src/tui/multi-session-app.js +60 -0
  249. package/dist/src/tui/multi-session-app.js.map +1 -0
  250. package/dist/src/tui/multi-session-app.spec.js +95 -0
  251. package/dist/src/tui/multi-session-app.spec.js.map +1 -0
  252. package/dist/src/tui/transport-tui.integration.spec.js +15 -15
  253. package/dist/src/tui/transport-tui.integration.spec.js.map +1 -1
  254. package/dist/src/tui/tui-config.d.ts +3 -2
  255. package/dist/src/tui/types.d.ts +1 -1
  256. package/dist/src/tui/types.js +3 -0
  257. package/dist/src/tui/types.js.map +1 -1
  258. package/dist/src/tui/utils/color-buffer.d.ts +31 -0
  259. package/dist/src/tui/utils/color-buffer.js +86 -0
  260. package/dist/src/tui/utils/color-buffer.js.map +1 -0
  261. package/dist/src/tui/utils/colors.js.map +1 -1
  262. package/dist/src/tui/utils/edge-router.d.ts +9 -0
  263. package/dist/src/tui/utils/edge-router.js +65 -0
  264. package/dist/src/tui/utils/edge-router.js.map +1 -0
  265. package/dist/src/tui/utils/index.d.ts +3 -1
  266. package/dist/src/tui/utils/index.js +21 -4
  267. package/dist/src/tui/utils/index.js.map +1 -1
  268. package/dist/src/tui/utils/theme.d.ts +50 -0
  269. package/dist/src/tui/utils/theme.js +128 -0
  270. package/dist/src/tui/utils/theme.js.map +1 -0
  271. package/dist/src/tui-bundle.mjs +6037 -0
  272. package/dist/tsconfig.build.tsbuildinfo +1 -1
  273. package/package.json +10 -10
  274. package/dist/src/shared/token-counter.d.ts +0 -13
  275. package/dist/src/shared/token-counter.js +0 -41
  276. package/dist/src/shared/token-counter.js.map +0 -1
  277. package/dist/src/tui/app.d.ts +0 -6
  278. package/dist/src/tui/app.js +0 -20
  279. package/dist/src/tui/app.js.map +0 -1
  280. package/dist/src/tui/app.spec.js +0 -226
  281. package/dist/src/tui/app.spec.js.map +0 -1
  282. package/dist/src/tui/components/AgentCard.d.ts +0 -6
  283. package/dist/src/tui/components/AgentCard.js +0 -18
  284. package/dist/src/tui/components/AgentCard.js.map +0 -1
  285. package/dist/src/tui/components/AgentCard.spec.js +0 -118
  286. package/dist/src/tui/components/AgentCard.spec.js.map +0 -1
  287. package/dist/src/tui/components/AgentGrid.d.ts +0 -7
  288. package/dist/src/tui/components/AgentGrid.js +0 -20
  289. package/dist/src/tui/components/AgentGrid.js.map +0 -1
  290. package/dist/src/tui/components/AgentGrid.spec.js +0 -52
  291. package/dist/src/tui/components/AgentGrid.spec.js.map +0 -1
  292. package/dist/src/tui/components/AgentTree.d.ts +0 -7
  293. package/dist/src/tui/components/AgentTree.js +0 -24
  294. package/dist/src/tui/components/AgentTree.js.map +0 -1
  295. package/dist/src/tui/components/AgentTree.spec.js +0 -146
  296. package/dist/src/tui/components/AgentTree.spec.js.map +0 -1
  297. package/dist/src/tui/components/CategoryRow.d.ts +0 -9
  298. package/dist/src/tui/components/CategoryRow.js +0 -15
  299. package/dist/src/tui/components/CategoryRow.js.map +0 -1
  300. package/dist/src/tui/components/CategoryRow.spec.js +0 -58
  301. package/dist/src/tui/components/CategoryRow.spec.js.map +0 -1
  302. package/dist/src/tui/components/Header.d.ts +0 -6
  303. package/dist/src/tui/components/Header.js +0 -18
  304. package/dist/src/tui/components/Header.js.map +0 -1
  305. package/dist/src/tui/components/Header.spec.js +0 -38
  306. package/dist/src/tui/components/Header.spec.js.map +0 -1
  307. package/dist/src/tui/components/ProgressBar.d.ts +0 -7
  308. package/dist/src/tui/components/ProgressBar.js +0 -12
  309. package/dist/src/tui/components/ProgressBar.js.map +0 -1
  310. package/dist/src/tui/components/ProgressBar.spec.js +0 -37
  311. package/dist/src/tui/components/ProgressBar.spec.js.map +0 -1
  312. package/dist/src/tui/components/StatusBar.d.ts +0 -8
  313. package/dist/src/tui/components/StatusBar.js +0 -29
  314. package/dist/src/tui/components/StatusBar.js.map +0 -1
  315. package/dist/src/tui/components/StatusBar.spec.js +0 -93
  316. package/dist/src/tui/components/StatusBar.spec.js.map +0 -1
  317. package/dist/src/tui/components/agent-card.pure.d.ts +0 -7
  318. package/dist/src/tui/components/agent-card.pure.js +0 -65
  319. package/dist/src/tui/components/agent-card.pure.js.map +0 -1
  320. package/dist/src/tui/components/agent-grid.pure.d.ts +0 -3
  321. package/dist/src/tui/components/agent-grid.pure.js +0 -35
  322. package/dist/src/tui/components/agent-grid.pure.js.map +0 -1
  323. package/dist/src/tui/components/agent-mini-card.pure.d.ts +0 -2
  324. package/dist/src/tui/components/agent-mini-card.pure.js +0 -17
  325. package/dist/src/tui/components/agent-mini-card.pure.js.map +0 -1
  326. package/dist/src/tui/components/agent-tree.pure.d.ts +0 -18
  327. package/dist/src/tui/components/agent-tree.pure.js +0 -41
  328. package/dist/src/tui/components/agent-tree.pure.js.map +0 -1
  329. package/dist/src/tui/components/category-row.pure.d.ts +0 -3
  330. package/dist/src/tui/components/category-row.pure.js +0 -26
  331. package/dist/src/tui/components/category-row.pure.js.map +0 -1
  332. package/dist/src/tui/components/header.pure.d.ts +0 -4
  333. package/dist/src/tui/components/header.pure.js.map +0 -1
  334. package/dist/src/tui/components/progress-bar.pure.d.ts +0 -2
  335. package/dist/src/tui/components/progress-bar.pure.js +0 -21
  336. package/dist/src/tui/components/progress-bar.pure.js.map +0 -1
  337. package/dist/src/tui/components/status-bar.pure.d.ts +0 -15
  338. package/dist/src/tui/components/status-bar.pure.js +0 -83
  339. package/dist/src/tui/components/status-bar.pure.js.map +0 -1
  340. package/dist/src/tui/hooks/use-agent-state.d.ts +0 -7
  341. package/dist/src/tui/hooks/use-agent-state.js +0 -13
  342. package/dist/src/tui/hooks/use-agent-state.js.map +0 -1
  343. package/dist/src/tui/hooks/use-agent-state.spec.js +0 -167
  344. package/dist/src/tui/hooks/use-agent-state.spec.js.map +0 -1
  345. package/dist/src/tui/hooks/use-event-bus.d.ts +0 -34
  346. package/dist/src/tui/hooks/use-event-bus.js +0 -91
  347. package/dist/src/tui/hooks/use-event-bus.js.map +0 -1
  348. package/dist/src/tui/hooks/use-event-bus.spec.d.ts +0 -1
  349. package/dist/src/tui/hooks/use-event-bus.spec.js +0 -362
  350. package/dist/src/tui/hooks/use-event-bus.spec.js.map +0 -1
  351. package/dist/src/tui/utils/constants.d.ts +0 -3
  352. package/dist/src/tui/utils/constants.js +0 -15
  353. package/dist/src/tui/utils/constants.js.map +0 -1
  354. /package/dist/src/tui/{app.spec.d.ts → components/ActivityVisualizer.spec.d.ts} +0 -0
  355. /package/dist/src/tui/components/{AgentCard.spec.d.ts → ChecklistPanel.spec.d.ts} +0 -0
  356. /package/dist/src/tui/components/{AgentGrid.spec.d.ts → FlowMap.spec.d.ts} +0 -0
  357. /package/dist/src/tui/components/{AgentTree.spec.d.ts → FocusedAgentPanel.spec.d.ts} +0 -0
  358. /package/dist/src/tui/components/{CategoryRow.spec.d.ts → HeaderBar.spec.d.ts} +0 -0
  359. /package/dist/src/tui/components/{Header.spec.d.ts → SessionTabBar.spec.d.ts} +0 -0
  360. /package/dist/src/tui/components/{ProgressBar.spec.d.ts → StageHealthBar.spec.d.ts} +0 -0
  361. /package/dist/src/tui/{components/StatusBar.spec.d.ts → dashboard-app.spec.d.ts} +0 -0
  362. /package/dist/src/tui/{hooks/use-agent-state.spec.d.ts → multi-session-app.spec.d.ts} +0 -0
@@ -1,52 +1,38 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getPhaseColor = exports.buildCompactStatusParts = exports.buildSkillsDisplay = exports.determinePhase = exports.calculateOverallProgress = exports.countActiveAgents = exports.StatusBar = exports.sortCategoriesByActivity = exports.groupByCategory = exports.AgentGrid = exports.LABEL_WIDTH = exports.buildCompactCategoryRow = exports.buildCategoryLabel = exports.CategoryRow = exports.joinAgentTags = exports.buildInlineAgentTag = exports.buildCompactTree = exports.TREE_CHARS = exports.AgentTree = exports.INLINE_NAME_COL_WIDTH = exports.buildInlineCard = exports.resolveIcon = exports.buildStatusLabel = exports.abbreviateName = exports.resolveProgress = exports.AgentCard = exports.MODE_INDICATOR = exports.buildModeIndicator = exports.formatTime = exports.Header = exports.clampValue = exports.buildProgressBar = exports.ProgressBar = void 0;
4
- var ProgressBar_1 = require("./ProgressBar");
5
- Object.defineProperty(exports, "ProgressBar", { enumerable: true, get: function () { return ProgressBar_1.ProgressBar; } });
6
- var progress_bar_pure_1 = require("./progress-bar.pure");
7
- Object.defineProperty(exports, "buildProgressBar", { enumerable: true, get: function () { return progress_bar_pure_1.buildProgressBar; } });
8
- Object.defineProperty(exports, "clampValue", { enumerable: true, get: function () { return progress_bar_pure_1.clampValue; } });
9
- var Header_1 = require("./Header");
10
- Object.defineProperty(exports, "Header", { enumerable: true, get: function () { return Header_1.Header; } });
11
- var header_pure_1 = require("./header.pure");
12
- Object.defineProperty(exports, "formatTime", { enumerable: true, get: function () { return header_pure_1.formatTime; } });
13
- Object.defineProperty(exports, "buildModeIndicator", { enumerable: true, get: function () { return header_pure_1.buildModeIndicator; } });
14
- Object.defineProperty(exports, "MODE_INDICATOR", { enumerable: true, get: function () { return header_pure_1.MODE_INDICATOR; } });
15
- var AgentCard_1 = require("./AgentCard");
16
- Object.defineProperty(exports, "AgentCard", { enumerable: true, get: function () { return AgentCard_1.AgentCard; } });
17
- var agent_card_pure_1 = require("./agent-card.pure");
18
- Object.defineProperty(exports, "resolveProgress", { enumerable: true, get: function () { return agent_card_pure_1.resolveProgress; } });
19
- Object.defineProperty(exports, "abbreviateName", { enumerable: true, get: function () { return agent_card_pure_1.abbreviateName; } });
20
- Object.defineProperty(exports, "buildStatusLabel", { enumerable: true, get: function () { return agent_card_pure_1.buildStatusLabel; } });
21
- Object.defineProperty(exports, "resolveIcon", { enumerable: true, get: function () { return agent_card_pure_1.resolveIcon; } });
22
- Object.defineProperty(exports, "buildInlineCard", { enumerable: true, get: function () { return agent_card_pure_1.buildInlineCard; } });
23
- Object.defineProperty(exports, "INLINE_NAME_COL_WIDTH", { enumerable: true, get: function () { return agent_card_pure_1.INLINE_NAME_COL_WIDTH; } });
24
- var AgentTree_1 = require("./AgentTree");
25
- Object.defineProperty(exports, "AgentTree", { enumerable: true, get: function () { return AgentTree_1.AgentTree; } });
26
- var agent_tree_pure_1 = require("./agent-tree.pure");
27
- Object.defineProperty(exports, "TREE_CHARS", { enumerable: true, get: function () { return agent_tree_pure_1.TREE_CHARS; } });
28
- Object.defineProperty(exports, "buildCompactTree", { enumerable: true, get: function () { return agent_tree_pure_1.buildCompactTree; } });
29
- var agent_mini_card_pure_1 = require("./agent-mini-card.pure");
30
- Object.defineProperty(exports, "buildInlineAgentTag", { enumerable: true, get: function () { return agent_mini_card_pure_1.buildInlineAgentTag; } });
31
- Object.defineProperty(exports, "joinAgentTags", { enumerable: true, get: function () { return agent_mini_card_pure_1.joinAgentTags; } });
32
- var CategoryRow_1 = require("./CategoryRow");
33
- Object.defineProperty(exports, "CategoryRow", { enumerable: true, get: function () { return CategoryRow_1.CategoryRow; } });
34
- var category_row_pure_1 = require("./category-row.pure");
35
- Object.defineProperty(exports, "buildCategoryLabel", { enumerable: true, get: function () { return category_row_pure_1.buildCategoryLabel; } });
36
- Object.defineProperty(exports, "buildCompactCategoryRow", { enumerable: true, get: function () { return category_row_pure_1.buildCompactCategoryRow; } });
37
- Object.defineProperty(exports, "LABEL_WIDTH", { enumerable: true, get: function () { return category_row_pure_1.LABEL_WIDTH; } });
38
- var AgentGrid_1 = require("./AgentGrid");
39
- Object.defineProperty(exports, "AgentGrid", { enumerable: true, get: function () { return AgentGrid_1.AgentGrid; } });
40
- var agent_grid_pure_1 = require("./agent-grid.pure");
41
- Object.defineProperty(exports, "groupByCategory", { enumerable: true, get: function () { return agent_grid_pure_1.groupByCategory; } });
42
- Object.defineProperty(exports, "sortCategoriesByActivity", { enumerable: true, get: function () { return agent_grid_pure_1.sortCategoriesByActivity; } });
43
- var StatusBar_1 = require("./StatusBar");
44
- Object.defineProperty(exports, "StatusBar", { enumerable: true, get: function () { return StatusBar_1.StatusBar; } });
45
- var status_bar_pure_1 = require("./status-bar.pure");
46
- Object.defineProperty(exports, "countActiveAgents", { enumerable: true, get: function () { return status_bar_pure_1.countActiveAgents; } });
47
- Object.defineProperty(exports, "calculateOverallProgress", { enumerable: true, get: function () { return status_bar_pure_1.calculateOverallProgress; } });
48
- Object.defineProperty(exports, "determinePhase", { enumerable: true, get: function () { return status_bar_pure_1.determinePhase; } });
49
- Object.defineProperty(exports, "buildSkillsDisplay", { enumerable: true, get: function () { return status_bar_pure_1.buildSkillsDisplay; } });
50
- Object.defineProperty(exports, "buildCompactStatusParts", { enumerable: true, get: function () { return status_bar_pure_1.buildCompactStatusParts; } });
51
- Object.defineProperty(exports, "getPhaseColor", { enumerable: true, get: function () { return status_bar_pure_1.getPhaseColor; } });
3
+ exports.SessionTabBar = exports.renderAgentStatusCard = exports.renderAgentTree = exports.ActivityVisualizer = exports.computeGridLayout = exports.detectBottlenecks = exports.computeStageHealth = exports.StageHealthBar = exports.formatSectionDivider = exports.formatLogTail = exports.formatObjective = exports.resolveChecklistTasks = exports.ChecklistPanel = exports.FocusedAgentPanel = exports.layoutAgentNodes = exports.layoutStageColumns = exports.renderFlowMapCompact = exports.renderFlowMapSimplified = exports.renderFlowMap = exports.FlowMap = exports.HeaderBar = void 0;
4
+ var HeaderBar_1 = require("./HeaderBar");
5
+ Object.defineProperty(exports, "HeaderBar", { enumerable: true, get: function () { return HeaderBar_1.HeaderBar; } });
6
+ var FlowMap_1 = require("./FlowMap");
7
+ Object.defineProperty(exports, "FlowMap", { enumerable: true, get: function () { return FlowMap_1.FlowMap; } });
8
+ var flow_map_pure_1 = require("./flow-map.pure");
9
+ Object.defineProperty(exports, "renderFlowMap", { enumerable: true, get: function () { return flow_map_pure_1.renderFlowMap; } });
10
+ Object.defineProperty(exports, "renderFlowMapSimplified", { enumerable: true, get: function () { return flow_map_pure_1.renderFlowMapSimplified; } });
11
+ Object.defineProperty(exports, "renderFlowMapCompact", { enumerable: true, get: function () { return flow_map_pure_1.renderFlowMapCompact; } });
12
+ Object.defineProperty(exports, "layoutStageColumns", { enumerable: true, get: function () { return flow_map_pure_1.layoutStageColumns; } });
13
+ Object.defineProperty(exports, "layoutAgentNodes", { enumerable: true, get: function () { return flow_map_pure_1.layoutAgentNodes; } });
14
+ var FocusedAgentPanel_1 = require("./FocusedAgentPanel");
15
+ Object.defineProperty(exports, "FocusedAgentPanel", { enumerable: true, get: function () { return FocusedAgentPanel_1.FocusedAgentPanel; } });
16
+ var ChecklistPanel_1 = require("./ChecklistPanel");
17
+ Object.defineProperty(exports, "ChecklistPanel", { enumerable: true, get: function () { return ChecklistPanel_1.ChecklistPanel; } });
18
+ var checklist_panel_pure_1 = require("./checklist-panel.pure");
19
+ Object.defineProperty(exports, "resolveChecklistTasks", { enumerable: true, get: function () { return checklist_panel_pure_1.resolveChecklistTasks; } });
20
+ var focused_agent_pure_1 = require("./focused-agent.pure");
21
+ Object.defineProperty(exports, "formatObjective", { enumerable: true, get: function () { return focused_agent_pure_1.formatObjective; } });
22
+ Object.defineProperty(exports, "formatLogTail", { enumerable: true, get: function () { return focused_agent_pure_1.formatLogTail; } });
23
+ Object.defineProperty(exports, "formatSectionDivider", { enumerable: true, get: function () { return focused_agent_pure_1.formatSectionDivider; } });
24
+ var StageHealthBar_1 = require("./StageHealthBar");
25
+ Object.defineProperty(exports, "StageHealthBar", { enumerable: true, get: function () { return StageHealthBar_1.StageHealthBar; } });
26
+ var stage_health_pure_1 = require("./stage-health.pure");
27
+ Object.defineProperty(exports, "computeStageHealth", { enumerable: true, get: function () { return stage_health_pure_1.computeStageHealth; } });
28
+ Object.defineProperty(exports, "detectBottlenecks", { enumerable: true, get: function () { return stage_health_pure_1.detectBottlenecks; } });
29
+ var grid_layout_pure_1 = require("./grid-layout.pure");
30
+ Object.defineProperty(exports, "computeGridLayout", { enumerable: true, get: function () { return grid_layout_pure_1.computeGridLayout; } });
31
+ var ActivityVisualizer_1 = require("./ActivityVisualizer");
32
+ Object.defineProperty(exports, "ActivityVisualizer", { enumerable: true, get: function () { return ActivityVisualizer_1.ActivityVisualizer; } });
33
+ var activity_visualizer_pure_1 = require("./activity-visualizer.pure");
34
+ Object.defineProperty(exports, "renderAgentTree", { enumerable: true, get: function () { return activity_visualizer_pure_1.renderAgentTree; } });
35
+ Object.defineProperty(exports, "renderAgentStatusCard", { enumerable: true, get: function () { return activity_visualizer_pure_1.renderAgentStatusCard; } });
36
+ var SessionTabBar_1 = require("./SessionTabBar");
37
+ Object.defineProperty(exports, "SessionTabBar", { enumerable: true, get: function () { return SessionTabBar_1.SessionTabBar; } });
52
38
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tui/components/index.ts"],"names":[],"mappings":";;;AAAA,6CAAmE;AAA1D,0GAAA,WAAW,OAAA;AACpB,yDAAmE;AAA1D,qHAAA,gBAAgB,OAAA;AAAE,+GAAA,UAAU,OAAA;AACrC,mCAAoD;AAA3C,gGAAA,MAAM,OAAA;AACf,6CAA+E;AAAtE,yGAAA,UAAU,OAAA;AAAE,iHAAA,kBAAkB,OAAA;AAAE,6GAAA,cAAc,OAAA;AACvD,yCAA6D;AAApD,sGAAA,SAAS,OAAA;AAClB,qDAO2B;AANzB,kHAAA,eAAe,OAAA;AACf,iHAAA,cAAc,OAAA;AACd,mHAAA,gBAAgB,OAAA;AAChB,8GAAA,WAAW,OAAA;AACX,kHAAA,eAAe,OAAA;AACf,wHAAA,qBAAqB,OAAA;AAEvB,yCAA6D;AAApD,sGAAA,SAAS,OAAA;AAClB,qDAK2B;AAJzB,6GAAA,UAAU,OAAA;AACV,mHAAA,gBAAgB,OAAA;AAIlB,+DAA4E;AAAnE,2HAAA,mBAAmB,OAAA;AAAE,qHAAA,aAAa,OAAA;AAC3C,6CAAmE;AAA1D,0GAAA,WAAW,OAAA;AACpB,yDAA+F;AAAtF,uHAAA,kBAAkB,OAAA;AAAE,4HAAA,uBAAuB,OAAA;AAAE,gHAAA,WAAW,OAAA;AACjE,yCAA6D;AAApD,sGAAA,SAAS,OAAA;AAClB,qDAA8E;AAArE,kHAAA,eAAe,OAAA;AAAE,2HAAA,wBAAwB,OAAA;AAClD,yCAA6D;AAApD,sGAAA,SAAS,OAAA;AAClB,qDAS2B;AARzB,oHAAA,iBAAiB,OAAA;AACjB,2HAAA,wBAAwB,OAAA;AACxB,iHAAA,cAAc,OAAA;AACd,qHAAA,kBAAkB,OAAA;AAClB,0HAAA,uBAAuB,OAAA;AACvB,gHAAA,aAAa,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/tui/components/index.ts"],"names":[],"mappings":";;;AAAA,yCAA6D;AAApD,sGAAA,SAAS,OAAA;AAClB,qCAAuD;AAA9C,kGAAA,OAAO,OAAA;AAChB,iDAMyB;AALvB,8GAAA,aAAa,OAAA;AACb,wHAAA,uBAAuB,OAAA;AACvB,qHAAA,oBAAoB,OAAA;AACpB,mHAAA,kBAAkB,OAAA;AAClB,iHAAA,gBAAgB,OAAA;AAElB,yDAAqF;AAA5E,sHAAA,iBAAiB,OAAA;AAC1B,mDAA4E;AAAnE,gHAAA,cAAc,OAAA;AACvB,+DAA+D;AAAtD,6HAAA,qBAAqB,OAAA;AAC9B,2DAA4F;AAAnF,qHAAA,eAAe,OAAA;AAAE,mHAAA,aAAa,OAAA;AAAE,0HAAA,oBAAoB,OAAA;AAC7D,mDAA4E;AAAnE,gHAAA,cAAc,OAAA;AACvB,yDAA4E;AAAnE,uHAAA,kBAAkB,OAAA;AAAE,sHAAA,iBAAiB,OAAA;AAC9C,uDAAuD;AAA9C,qHAAA,iBAAiB,OAAA;AAC1B,2DAAwF;AAA/E,wHAAA,kBAAkB,OAAA;AAC3B,uEAAoF;AAA3E,2HAAA,eAAe,OAAA;AAAE,iIAAA,qBAAqB,OAAA;AAC/C,iDAAgD;AAAvC,8GAAA,aAAa,OAAA"}
@@ -0,0 +1,9 @@
1
+ import type { GlobalRunState, LayoutMode } from '../dashboard-types';
2
+ export interface SessionTab {
3
+ pid: number;
4
+ index: number;
5
+ projectName: string;
6
+ globalState: GlobalRunState | 'DISCONNECTED';
7
+ isActive: boolean;
8
+ }
9
+ export declare function formatSessionTabs(tabs: SessionTab[], maxWidth: number, layoutMode: LayoutMode): string;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatSessionTabs = formatSessionTabs;
4
+ const STATUS_ICONS = {
5
+ RUNNING: '●',
6
+ IDLE: '○',
7
+ ERROR: '✗',
8
+ DISCONNECTED: '?',
9
+ };
10
+ function formatTab(tab, maxNameLen) {
11
+ let name = tab.projectName;
12
+ const chars = Array.from(name);
13
+ if (chars.length > maxNameLen && maxNameLen > 1) {
14
+ name = chars.slice(0, maxNameLen - 1).join('') + '…';
15
+ }
16
+ else if (maxNameLen <= 1) {
17
+ name = '…';
18
+ }
19
+ const icon = STATUS_ICONS[tab.globalState];
20
+ return `[${tab.index}] ${name} ${icon}`;
21
+ }
22
+ function tabOverhead(tab) {
23
+ return tab.index.toString().length + 3 + 2;
24
+ }
25
+ function formatSessionTabs(tabs, maxWidth, layoutMode) {
26
+ if (tabs.length <= 1) {
27
+ return '';
28
+ }
29
+ if (layoutMode === 'narrow') {
30
+ const active = tabs.find(t => t.isActive);
31
+ const activeIndex = active ? active.index : 1;
32
+ return `(${activeIndex}/${tabs.length})`;
33
+ }
34
+ const separatorWidth = tabs.length - 1;
35
+ const totalOverhead = tabs.reduce((sum, t) => sum + tabOverhead(t), 0) + separatorWidth;
36
+ const availableForNames = maxWidth - totalOverhead;
37
+ const maxNameLen = Math.max(1, Math.floor(availableForNames / tabs.length));
38
+ const segments = tabs.map(tab => formatTab(tab, maxNameLen));
39
+ const result = segments.join(' ');
40
+ if (result.length > maxWidth) {
41
+ return result.slice(0, maxWidth);
42
+ }
43
+ return result;
44
+ }
45
+ //# sourceMappingURL=session-tab-bar.pure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-tab-bar.pure.js","sourceRoot":"","sources":["../../../../src/tui/components/session-tab-bar.pure.ts"],"names":[],"mappings":";;AAqDA,8CA+BC;AArED,MAAM,YAAY,GAAoD;IACpE,OAAO,EAAE,GAAG;IACZ,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,GAAG;IACV,YAAY,EAAE,GAAG;CAClB,CAAC;AAKF,SAAS,SAAS,CAAC,GAAe,EAAE,UAAkB;IACpD,IAAI,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC;IAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,KAAK,CAAC,MAAM,GAAG,UAAU,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QAChD,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IACvD,CAAC;SAAM,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QAC3B,IAAI,GAAG,GAAG,CAAC;IACb,CAAC;IACD,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3C,OAAO,IAAI,GAAG,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,EAAE,CAAC;AAC1C,CAAC;AAMD,SAAS,WAAW,CAAC,GAAe;IAClC,OAAO,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7C,CAAC;AAUD,SAAgB,iBAAiB,CAC/B,IAAkB,EAClB,QAAgB,EAChB,UAAsB;IAEtB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,OAAO,IAAI,WAAW,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;IAC3C,CAAC;IAID,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,cAAc,CAAC;IACxF,MAAM,iBAAiB,GAAG,QAAQ,GAAG,aAAa,CAAC;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE5E,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAGlC,IAAI,MAAM,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Mode } from '../types';
2
+ import type { DashboardNode, StageStats, EventLogEntry } from '../dashboard-types';
3
+ export declare function formatCount(n: number): string;
4
+ export declare function computeStageHealth(agents: Map<string, DashboardNode>): Record<Mode, StageStats>;
5
+ export declare function detectBottlenecks(eventLog: EventLogEntry[]): string[];
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatCount = formatCount;
4
+ exports.computeStageHealth = computeStageHealth;
5
+ exports.detectBottlenecks = detectBottlenecks;
6
+ const dashboard_types_1 = require("../dashboard-types");
7
+ function formatCount(n) {
8
+ return n >= 1000 ? `${Math.round(n / 1000)}k` : String(n);
9
+ }
10
+ function computeStageHealth(agents) {
11
+ const health = {
12
+ PLAN: (0, dashboard_types_1.createEmptyStageStats)(),
13
+ ACT: (0, dashboard_types_1.createEmptyStageStats)(),
14
+ EVAL: (0, dashboard_types_1.createEmptyStageStats)(),
15
+ AUTO: (0, dashboard_types_1.createEmptyStageStats)(),
16
+ };
17
+ for (const agent of agents.values()) {
18
+ const stage = health[agent.stage];
19
+ if (!stage)
20
+ continue;
21
+ switch (agent.status) {
22
+ case 'running':
23
+ stage.running++;
24
+ break;
25
+ case 'blocked':
26
+ stage.blocked++;
27
+ break;
28
+ case 'idle':
29
+ stage.waiting++;
30
+ break;
31
+ case 'done':
32
+ stage.done++;
33
+ break;
34
+ case 'error':
35
+ stage.error++;
36
+ break;
37
+ }
38
+ }
39
+ return health;
40
+ }
41
+ function detectBottlenecks(eventLog) {
42
+ const bottlenecks = new Set();
43
+ for (const entry of eventLog) {
44
+ if (entry.level === 'error') {
45
+ const testMatch = entry.message.match(/(?:test_run|tests?):\s*FAIL\s*\((\d+)\)/i);
46
+ if (testMatch) {
47
+ bottlenecks.add(`tests failing(${testMatch[1]})`);
48
+ continue;
49
+ }
50
+ const lintMatch = entry.message.match(/lint\(([^)]+)\)/i);
51
+ if (lintMatch) {
52
+ bottlenecks.add(`lint(${lintMatch[1]})`);
53
+ continue;
54
+ }
55
+ const envMatch = entry.message.match(/missing\s+env\(([^)]+)\)/i);
56
+ if (envMatch) {
57
+ bottlenecks.add(`missing env(${envMatch[1]})`);
58
+ }
59
+ }
60
+ }
61
+ return [...bottlenecks];
62
+ }
63
+ //# sourceMappingURL=stage-health.pure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-health.pure.js","sourceRoot":"","sources":["../../../../src/tui/components/stage-health.pure.ts"],"names":[],"mappings":";;AAOA,kCAEC;AAKD,gDAgCC;AAKD,8CA4BC;AA7ED,wDAA2D;AAK3D,SAAgB,WAAW,CAAC,CAAS;IACnC,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAKD,SAAgB,kBAAkB,CAAC,MAAkC;IACnE,MAAM,MAAM,GAA6B;QACvC,IAAI,EAAE,IAAA,uCAAqB,GAAE;QAC7B,GAAG,EAAE,IAAA,uCAAqB,GAAE;QAC5B,IAAI,EAAE,IAAA,uCAAqB,GAAE;QAC7B,IAAI,EAAE,IAAA,uCAAqB,GAAE;KAC9B,CAAC;IAEF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,SAAS;QAErB,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;YACrB,KAAK,SAAS;gBACZ,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,MAAM;YACR,KAAK,SAAS;gBACZ,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,MAAM;YACR,KAAK,MAAM;gBACT,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChB,MAAM;YACR,KAAK,MAAM;gBACT,KAAK,CAAC,IAAI,EAAE,CAAC;gBACb,MAAM;YACR,KAAK,OAAO;gBACV,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAKD,SAAgB,iBAAiB,CAAC,QAAyB;IACzD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IAEtC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YAE5B,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAClF,IAAI,SAAS,EAAE,CAAC;gBACd,WAAW,CAAC,GAAG,CAAC,iBAAiB,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAClD,SAAS;YACX,CAAC;YAGD,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAC1D,IAAI,SAAS,EAAE,CAAC;gBACd,WAAW,CAAC,GAAG,CAAC,QAAQ,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBACzC,SAAS;YACX,CAAC;YAGD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAClE,IAAI,QAAQ,EAAE,CAAC;gBACb,WAAW,CAAC,GAAG,CAAC,eAAe,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ import type { TuiEventBus } from './events';
3
+ import type { DashboardState } from './dashboard-types';
4
+ export interface DashboardAppProps {
5
+ eventBus?: TuiEventBus;
6
+ externalState?: DashboardState;
7
+ workspace?: string;
8
+ }
9
+ export declare function DashboardApp({ eventBus, externalState, workspace: workspaceProp, }: DashboardAppProps): React.ReactElement;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DashboardApp = DashboardApp;
4
+ const react_1 = require("react");
5
+ const ink_1 = require("ink");
6
+ const use_terminal_size_1 = require("./hooks/use-terminal-size");
7
+ const use_dashboard_state_1 = require("./hooks/use-dashboard-state");
8
+ const HeaderBar_1 = require("./components/HeaderBar");
9
+ const FlowMap_1 = require("./components/FlowMap");
10
+ const FocusedAgentPanel_1 = require("./components/FocusedAgentPanel");
11
+ const ChecklistPanel_1 = require("./components/ChecklistPanel");
12
+ const StageHealthBar_1 = require("./components/StageHealthBar");
13
+ const ActivityVisualizer_1 = require("./components/ActivityVisualizer");
14
+ const stage_health_pure_1 = require("./components/stage-health.pure");
15
+ const grid_layout_pure_1 = require("./components/grid-layout.pure");
16
+ function DashboardApp({ eventBus, externalState, workspace: workspaceProp, }) {
17
+ const { columns, rows, layoutMode } = (0, use_terminal_size_1.useTerminalSize)();
18
+ const internalState = (0, use_dashboard_state_1.useDashboardState)(externalState ? undefined : eventBus);
19
+ const state = externalState ?? internalState;
20
+ const focusedAgent = state.focusedAgentId
21
+ ? (state.agents.get(state.focusedAgentId) ?? null)
22
+ : null;
23
+ const stageHealth = (0, react_1.useMemo)(() => (0, stage_health_pure_1.computeStageHealth)(state.agents), [state.agents]);
24
+ const bottlenecks = (0, react_1.useMemo)(() => (0, stage_health_pure_1.detectBottlenecks)(state.eventLog), [state.eventLog]);
25
+ const grid = (0, react_1.useMemo)(() => (0, grid_layout_pure_1.computeGridLayout)(columns, rows, layoutMode), [columns, rows, layoutMode]);
26
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", width: grid.total.width, height: grid.total.height },
27
+ react_1.default.createElement(HeaderBar_1.HeaderBar, { workspace: workspaceProp ?? state.workspace, currentMode: state.currentMode, globalState: state.globalState, layoutMode: layoutMode, width: grid.header.width }),
28
+ layoutMode === 'narrow' ? (react_1.default.createElement(ink_1.Box, { flexDirection: "column" },
29
+ grid.checklistPanel.height > 0 && (react_1.default.createElement(ChecklistPanel_1.ChecklistPanel, { tasks: state.tasks, contextDecisions: state.contextDecisions, contextNotes: state.contextNotes, width: grid.checklistPanel.width, height: grid.checklistPanel.height })),
30
+ react_1.default.createElement(FocusedAgentPanel_1.FocusedAgentPanel, { agent: focusedAgent, objectives: state.objectives, activeSkills: state.activeSkills, eventLog: state.eventLog, contextDecisions: state.contextDecisions, contextNotes: state.contextNotes, width: grid.focusedAgent.width, height: grid.focusedAgent.height }),
31
+ react_1.default.createElement(FlowMap_1.FlowMap, { agents: state.agents, edges: state.edges, layoutMode: layoutMode, width: grid.flowMap.width, height: grid.flowMap.height, activeStage: state.currentMode }))) : (react_1.default.createElement(ink_1.Box, { flexDirection: "row", width: grid.total.width, height: grid.checklistPanel.height + grid.focusedAgent.height },
32
+ react_1.default.createElement(ink_1.Box, { flexDirection: "column", width: grid.flowMap.width },
33
+ react_1.default.createElement(FlowMap_1.FlowMap, { agents: state.agents, edges: state.edges, layoutMode: layoutMode, width: grid.flowMap.width, height: grid.flowMap.height, activeStage: state.currentMode }),
34
+ react_1.default.createElement(ActivityVisualizer_1.ActivityVisualizer, { currentMode: state.currentMode, focusedAgent: focusedAgent, agents: state.agents, edges: state.edges, activeSkills: state.activeSkills, objectives: state.objectives, width: grid.monitorPanel.width, height: grid.monitorPanel.height })),
35
+ react_1.default.createElement(ink_1.Box, { flexDirection: "column", width: grid.checklistPanel.width },
36
+ react_1.default.createElement(ChecklistPanel_1.ChecklistPanel, { tasks: state.tasks, contextDecisions: state.contextDecisions, contextNotes: state.contextNotes, width: grid.checklistPanel.width, height: grid.checklistPanel.height }),
37
+ react_1.default.createElement(FocusedAgentPanel_1.FocusedAgentPanel, { agent: focusedAgent, objectives: state.objectives, activeSkills: state.activeSkills, eventLog: state.eventLog, contextDecisions: state.contextDecisions, contextNotes: state.contextNotes, width: grid.focusedAgent.width, height: grid.focusedAgent.height })))),
38
+ react_1.default.createElement(StageHealthBar_1.StageHealthBar, { stageHealth: stageHealth, bottlenecks: bottlenecks, toolCount: state.toolInvokeCount, agentCount: state.agentActivateCount, skillCount: state.skillInvokeCount, width: grid.stageHealth.width })));
39
+ }
40
+ //# sourceMappingURL=dashboard-app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-app.js","sourceRoot":"","sources":["../../../src/tui/dashboard-app.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const react_1 = require("react");
4
+ const vitest_1 = require("vitest");
5
+ const ink_testing_library_1 = require("ink-testing-library");
6
+ const dashboard_app_1 = require("./dashboard-app");
7
+ const events_1 = require("./events");
8
+ const use_dashboard_state_1 = require("./hooks/use-dashboard-state");
9
+ vitest_1.vi.mock('./utils/icons', async (importOriginal) => {
10
+ const actual = await importOriginal();
11
+ return { ...actual, isNerdFontEnabled: () => false };
12
+ });
13
+ const tick = () => new Promise(resolve => setTimeout(resolve, 0));
14
+ (0, vitest_1.describe)('DashboardApp', () => {
15
+ (0, vitest_1.it)('renders without eventBus (idle state)', () => {
16
+ const { lastFrame } = (0, ink_testing_library_1.render)(react_1.default.createElement(dashboard_app_1.DashboardApp, null));
17
+ const frame = lastFrame() ?? '';
18
+ (0, vitest_1.expect)(frame).toContain('CODINGBUDDY');
19
+ (0, vitest_1.expect)(frame).toContain('IDLE');
20
+ });
21
+ (0, vitest_1.it)('shows RUNNING state when agent is activated', async () => {
22
+ const eventBus = new events_1.TuiEventBus();
23
+ const { lastFrame } = (0, ink_testing_library_1.render)(react_1.default.createElement(dashboard_app_1.DashboardApp, { eventBus: eventBus }));
24
+ await tick();
25
+ eventBus.emit(events_1.TUI_EVENTS.AGENT_ACTIVATED, {
26
+ agentId: 'arch-1',
27
+ name: 'solution-architect',
28
+ role: 'primary',
29
+ isPrimary: true,
30
+ });
31
+ await tick();
32
+ const frame = lastFrame() ?? '';
33
+ (0, vitest_1.expect)(frame).toContain('RUNNING');
34
+ (0, vitest_1.expect)(frame).toContain('solution-arch');
35
+ });
36
+ (0, vitest_1.it)('shows IDLE after all agents deactivated', async () => {
37
+ const eventBus = new events_1.TuiEventBus();
38
+ const { lastFrame } = (0, ink_testing_library_1.render)(react_1.default.createElement(dashboard_app_1.DashboardApp, { eventBus: eventBus }));
39
+ await tick();
40
+ eventBus.emit(events_1.TUI_EVENTS.AGENT_ACTIVATED, {
41
+ agentId: 'a1',
42
+ name: 'test-agent',
43
+ role: 'primary',
44
+ isPrimary: true,
45
+ });
46
+ await tick();
47
+ (0, vitest_1.expect)(lastFrame()).toContain('RUNNING');
48
+ eventBus.emit(events_1.TUI_EVENTS.AGENT_DEACTIVATED, {
49
+ agentId: 'a1',
50
+ reason: 'completed',
51
+ durationMs: 100,
52
+ });
53
+ await tick();
54
+ (0, vitest_1.expect)(lastFrame()).toContain('IDLE');
55
+ });
56
+ (0, vitest_1.it)('handles mode change events', async () => {
57
+ const eventBus = new events_1.TuiEventBus();
58
+ const { lastFrame } = (0, ink_testing_library_1.render)(react_1.default.createElement(dashboard_app_1.DashboardApp, { eventBus: eventBus }));
59
+ await tick();
60
+ eventBus.emit(events_1.TUI_EVENTS.MODE_CHANGED, { from: null, to: 'PLAN' });
61
+ await tick();
62
+ const frame = lastFrame() ?? '';
63
+ (0, vitest_1.expect)(frame).toBeTruthy();
64
+ (0, vitest_1.expect)(frame).toContain('PLAN');
65
+ });
66
+ (0, vitest_1.it)('shows multiple agents in FlowMap', async () => {
67
+ const eventBus = new events_1.TuiEventBus();
68
+ const { lastFrame } = (0, ink_testing_library_1.render)(react_1.default.createElement(dashboard_app_1.DashboardApp, { eventBus: eventBus }));
69
+ await tick();
70
+ eventBus.emit(events_1.TUI_EVENTS.AGENT_ACTIVATED, {
71
+ agentId: 'p1',
72
+ name: 'solution-architect',
73
+ role: 'primary',
74
+ isPrimary: true,
75
+ });
76
+ eventBus.emit(events_1.TUI_EVENTS.AGENT_ACTIVATED, {
77
+ agentId: 's1',
78
+ name: 'security-specialist',
79
+ role: 'specialist',
80
+ isPrimary: false,
81
+ });
82
+ await tick();
83
+ const frame = lastFrame() ?? '';
84
+ (0, vitest_1.expect)(frame).toContain('RUNNING');
85
+ (0, vitest_1.expect)(frame).toContain('solution-arch');
86
+ (0, vitest_1.expect)(frame).toContain('security-');
87
+ });
88
+ (0, vitest_1.it)('shows focused agent in FocusedAgentPanel without Tools/IO section', async () => {
89
+ const eventBus = new events_1.TuiEventBus();
90
+ const { lastFrame } = (0, ink_testing_library_1.render)(react_1.default.createElement(dashboard_app_1.DashboardApp, { eventBus: eventBus }));
91
+ await tick();
92
+ eventBus.emit(events_1.TUI_EVENTS.AGENT_ACTIVATED, {
93
+ agentId: 'a1',
94
+ name: 'test-agent',
95
+ role: 'primary',
96
+ isPrimary: true,
97
+ });
98
+ await tick();
99
+ eventBus.emit(events_1.TUI_EVENTS.TOOL_INVOKED, {
100
+ toolName: 'file_edit',
101
+ agentId: 'a1',
102
+ timestamp: Date.now(),
103
+ });
104
+ await tick();
105
+ const frame = lastFrame() ?? '';
106
+ (0, vitest_1.expect)(frame).not.toContain('IN :');
107
+ (0, vitest_1.expect)(frame).not.toContain('─── Tools / IO');
108
+ });
109
+ (0, vitest_1.it)('focuses on primary running agent', async () => {
110
+ const eventBus = new events_1.TuiEventBus();
111
+ const { lastFrame } = (0, ink_testing_library_1.render)(react_1.default.createElement(dashboard_app_1.DashboardApp, { eventBus: eventBus }));
112
+ await tick();
113
+ eventBus.emit(events_1.TUI_EVENTS.AGENT_ACTIVATED, {
114
+ agentId: 'p1',
115
+ name: 'solution-architect',
116
+ role: 'primary',
117
+ isPrimary: true,
118
+ });
119
+ await tick();
120
+ const frame = lastFrame() ?? '';
121
+ (0, vitest_1.expect)(frame).toContain('solution-arch');
122
+ (0, vitest_1.expect)(frame).toContain('Objective');
123
+ });
124
+ (0, vitest_1.it)('should use workspace prop over state.workspace when provided', () => {
125
+ const mockState = (0, use_dashboard_state_1.createInitialDashboardState)();
126
+ mockState.workspace = '/from-state';
127
+ const { lastFrame } = (0, ink_testing_library_1.render)(react_1.default.createElement(dashboard_app_1.DashboardApp, { externalState: mockState, workspace: "/from-prop" }));
128
+ const frame = lastFrame() ?? '';
129
+ (0, vitest_1.expect)(frame).toContain('/from-prop');
130
+ (0, vitest_1.expect)(frame).not.toContain('/from-state');
131
+ });
132
+ (0, vitest_1.it)('should use externalState when provided (multi-session mode)', () => {
133
+ const mockState = (0, use_dashboard_state_1.createInitialDashboardState)();
134
+ mockState.workspace = '/ext';
135
+ mockState.globalState = 'RUNNING';
136
+ mockState.currentMode = 'ACT';
137
+ const { lastFrame } = (0, ink_testing_library_1.render)(react_1.default.createElement(dashboard_app_1.DashboardApp, { externalState: mockState }));
138
+ const frame = lastFrame() ?? '';
139
+ (0, vitest_1.expect)(frame).toContain('/ext');
140
+ (0, vitest_1.expect)(frame).toContain('RUNNING');
141
+ (0, vitest_1.expect)(frame).toContain('ACT');
142
+ });
143
+ });
144
+ //# sourceMappingURL=dashboard-app.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-app.spec.js","sourceRoot":"","sources":["../../../src/tui/dashboard-app.spec.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import type { Mode } from './types';
2
+ export type LayoutMode = 'narrow' | 'medium' | 'wide';
3
+ export declare function getLayoutMode(columns: number): LayoutMode;
4
+ export declare const DASHBOARD_NODE_STATUSES: readonly ["running", "idle", "blocked", "error", "done"];
5
+ export type DashboardNodeStatus = (typeof DASHBOARD_NODE_STATUSES)[number];
6
+ export interface DashboardNode {
7
+ id: string;
8
+ name: string;
9
+ stage: Mode;
10
+ status: DashboardNodeStatus;
11
+ isPrimary: boolean;
12
+ progress: number;
13
+ isParallel: boolean;
14
+ startedAt?: number;
15
+ completedAt?: number;
16
+ }
17
+ type DashboardNodeRequired = Pick<DashboardNode, 'id' | 'name' | 'stage'>;
18
+ type DashboardNodeOptional = Partial<Omit<DashboardNode, 'id' | 'name' | 'stage'>>;
19
+ export declare function createDefaultDashboardNode(params: DashboardNodeRequired & DashboardNodeOptional): DashboardNode;
20
+ export type EdgeType = 'delegation' | 'output' | 'dependency' | 'recommendation';
21
+ export interface Edge {
22
+ from: string;
23
+ to: string;
24
+ label: string;
25
+ type: EdgeType;
26
+ }
27
+ export type LogLevel = 'info' | 'warn' | 'error';
28
+ export interface EventLogEntry {
29
+ timestamp: string;
30
+ message: string;
31
+ level: LogLevel;
32
+ }
33
+ export interface StageStats {
34
+ running: number;
35
+ blocked: number;
36
+ waiting: number;
37
+ done: number;
38
+ error: number;
39
+ }
40
+ export declare function createEmptyStageStats(): StageStats;
41
+ export interface TaskItem {
42
+ id: string;
43
+ subject: string;
44
+ completed: boolean;
45
+ }
46
+ export type GlobalRunState = 'RUNNING' | 'IDLE' | 'ERROR';
47
+ export type ToolCallStatus = 'active' | 'completed' | 'error';
48
+ export interface ToolCallRecord {
49
+ agentId: string;
50
+ toolName: string;
51
+ timestamp: number;
52
+ status: ToolCallStatus;
53
+ }
54
+ export interface DashboardState {
55
+ workspace: string;
56
+ sessionId: string;
57
+ currentMode: Mode | null;
58
+ globalState: GlobalRunState;
59
+ agents: Map<string, DashboardNode>;
60
+ edges: Edge[];
61
+ focusedAgentId: string | null;
62
+ tasks: TaskItem[];
63
+ eventLog: EventLogEntry[];
64
+ toolCalls: ToolCallRecord[];
65
+ objectives: string[];
66
+ activeSkills: string[];
67
+ toolInvokeCount: number;
68
+ agentActivateCount: number;
69
+ skillInvokeCount: number;
70
+ outputStats: {
71
+ files: number;
72
+ commits: number;
73
+ };
74
+ contextDecisions: string[];
75
+ contextNotes: string[];
76
+ contextMode: string | null;
77
+ contextStatus: string | null;
78
+ }
79
+ export interface GridRegion {
80
+ x: number;
81
+ y: number;
82
+ width: number;
83
+ height: number;
84
+ }
85
+ export interface DashboardGrid {
86
+ header: GridRegion;
87
+ checklistPanel: GridRegion;
88
+ flowMap: GridRegion;
89
+ monitorPanel: GridRegion;
90
+ focusedAgent: GridRegion;
91
+ stageHealth: GridRegion;
92
+ total: Pick<GridRegion, 'width' | 'height'>;
93
+ }
94
+ export {};
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DASHBOARD_NODE_STATUSES = void 0;
4
+ exports.getLayoutMode = getLayoutMode;
5
+ exports.createDefaultDashboardNode = createDefaultDashboardNode;
6
+ exports.createEmptyStageStats = createEmptyStageStats;
7
+ function getLayoutMode(columns) {
8
+ if (columns < 80)
9
+ return 'narrow';
10
+ if (columns < 120)
11
+ return 'medium';
12
+ return 'wide';
13
+ }
14
+ exports.DASHBOARD_NODE_STATUSES = Object.freeze([
15
+ 'running',
16
+ 'idle',
17
+ 'blocked',
18
+ 'error',
19
+ 'done',
20
+ ]);
21
+ function createDefaultDashboardNode(params) {
22
+ return {
23
+ status: 'idle',
24
+ isPrimary: false,
25
+ progress: 0,
26
+ isParallel: false,
27
+ ...params,
28
+ };
29
+ }
30
+ function createEmptyStageStats() {
31
+ return { running: 0, blocked: 0, waiting: 0, done: 0, error: 0 };
32
+ }
33
+ //# sourceMappingURL=dashboard-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-types.js","sourceRoot":"","sources":["../../../src/tui/dashboard-types.ts"],"names":[],"mappings":";;;AAgBA,sCAIC;AAmCD,gEAUC;AA6CD,sDAEC;AAhGD,SAAgB,aAAa,CAAC,OAAe;IAC3C,IAAI,OAAO,GAAG,EAAE;QAAE,OAAO,QAAQ,CAAC;IAClC,IAAI,OAAO,GAAG,GAAG;QAAE,OAAO,QAAQ,CAAC;IACnC,OAAO,MAAM,CAAC;AAChB,CAAC;AAKY,QAAA,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,SAAS;IACT,MAAM;IACN,SAAS;IACT,OAAO;IACP,MAAM;CACE,CAAC,CAAC;AAwBZ,SAAgB,0BAA0B,CACxC,MAAqD;IAErD,OAAO;QACL,MAAM,EAAE,MAAM;QACd,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,CAAC;QACX,UAAU,EAAE,KAAK;QACjB,GAAG,MAAM;KACV,CAAC;AACJ,CAAC;AA6CD,SAAgB,qBAAqB;IACnC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACnE,CAAC"}