4runr-os 2.1.4 → 2.1.6

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 (566) hide show
  1. package/dist/index.js +16 -1
  2. package/dist/index.js.map +1 -1
  3. package/dist/tui_mk1/kernel.d.ts.map +1 -1
  4. package/dist/tui_mk1/kernel.js +107 -4
  5. package/dist/tui_mk1/kernel.js.map +1 -1
  6. package/dist/tui_mk1/layout/layoutEngine.d.ts +38 -19
  7. package/dist/tui_mk1/layout/layoutEngine.d.ts.map +1 -1
  8. package/dist/tui_mk1/layout/layoutEngine.js +521 -228
  9. package/dist/tui_mk1/layout/layoutEngine.js.map +1 -1
  10. package/dist/tui_mk1/log.d.ts +23 -0
  11. package/dist/tui_mk1/log.d.ts.map +1 -0
  12. package/dist/tui_mk1/log.js +125 -0
  13. package/dist/tui_mk1/log.js.map +1 -0
  14. package/dist/tui_mk1/logger.d.ts.map +1 -1
  15. package/dist/tui_mk1/logger.js +20 -10
  16. package/dist/tui_mk1/logger.js.map +1 -1
  17. package/dist/tui_mk1/mk1App.d.ts +13 -18
  18. package/dist/tui_mk1/mk1App.d.ts.map +1 -1
  19. package/dist/tui_mk1/mk1App.js +334 -157
  20. package/dist/tui_mk1/mk1App.js.map +1 -1
  21. package/dist/tui_mk1/resizeController.d.ts.map +1 -1
  22. package/dist/tui_mk1/resizeController.js +15 -1
  23. package/dist/tui_mk1/resizeController.js.map +1 -1
  24. package/dist/tui_mk1/stdoutGuard.d.ts.map +1 -1
  25. package/dist/tui_mk1/stdoutGuard.js +7 -0
  26. package/dist/tui_mk1/stdoutGuard.js.map +1 -1
  27. package/dist/tui_mk1/terminalRestore.d.ts.map +1 -1
  28. package/dist/tui_mk1/terminalRestore.js +19 -1
  29. package/dist/tui_mk1/terminalRestore.js.map +1 -1
  30. package/dist/tui_mk1/ui/offenderScanner.d.ts +31 -0
  31. package/dist/tui_mk1/ui/offenderScanner.d.ts.map +1 -0
  32. package/dist/tui_mk1/ui/offenderScanner.js +80 -0
  33. package/dist/tui_mk1/ui/offenderScanner.js.map +1 -0
  34. package/dist/tui_mk1/ui/safe.d.ts +9 -0
  35. package/dist/tui_mk1/ui/safe.d.ts.map +1 -0
  36. package/dist/tui_mk1/ui/safe.js +29 -0
  37. package/dist/tui_mk1/ui/safe.js.map +1 -0
  38. package/dist/tui_mk1/ui/safeText.d.ts +22 -0
  39. package/dist/tui_mk1/ui/safeText.d.ts.map +1 -0
  40. package/dist/tui_mk1/ui/safeText.js +50 -0
  41. package/dist/tui_mk1/ui/safeText.js.map +1 -0
  42. package/dist/tui_mk1/ui/uiBuilder.d.ts +44 -0
  43. package/dist/tui_mk1/ui/uiBuilder.d.ts.map +1 -0
  44. package/dist/tui_mk1/ui/uiBuilder.js +467 -0
  45. package/dist/tui_mk1/ui/uiBuilder.js.map +1 -0
  46. package/dist/tui_mk1/viewport/safeViewport.d.ts +10 -1
  47. package/dist/tui_mk1/viewport/safeViewport.d.ts.map +1 -1
  48. package/dist/tui_mk1/viewport/safeViewport.js +47 -15
  49. package/dist/tui_mk1/viewport/safeViewport.js.map +1 -1
  50. package/dist/tui_mk2/kernel.d.ts +28 -0
  51. package/dist/tui_mk2/kernel.d.ts.map +1 -0
  52. package/dist/tui_mk2/kernel.js +138 -0
  53. package/dist/tui_mk2/kernel.js.map +1 -0
  54. package/dist/tui_mk2/mk2App.d.ts +33 -0
  55. package/dist/tui_mk2/mk2App.d.ts.map +1 -0
  56. package/dist/tui_mk2/mk2App.js +135 -0
  57. package/dist/tui_mk2/mk2App.js.map +1 -0
  58. package/package.json +8 -7
  59. package/dist/tui_mk1/ui/panels/createSection.d.ts +0 -18
  60. package/dist/tui_mk1/ui/panels/createSection.d.ts.map +0 -1
  61. package/dist/tui_mk1/ui/panels/createSection.js +0 -42
  62. package/dist/tui_mk1/ui/panels/createSection.js.map +0 -1
  63. package/dist/tui_mk1/ui/panels.d.ts +0 -23
  64. package/dist/tui_mk1/ui/panels.d.ts.map +0 -1
  65. package/dist/tui_mk1/ui/panels.js +0 -108
  66. package/dist/tui_mk1/ui/panels.js.map +0 -1
  67. package/dist/tui_mk1/ui/render/sectionRenderer.d.ts +0 -21
  68. package/dist/tui_mk1/ui/render/sectionRenderer.d.ts.map +0 -1
  69. package/dist/tui_mk1/ui/render/sectionRenderer.js +0 -32
  70. package/dist/tui_mk1/ui/render/sectionRenderer.js.map +0 -1
  71. package/dist/tui_mk1/ui/widgetManager.d.ts +0 -58
  72. package/dist/tui_mk1/ui/widgetManager.d.ts.map +0 -1
  73. package/dist/tui_mk1/ui/widgetManager.js +0 -197
  74. package/dist/tui_mk1/ui/widgetManager.js.map +0 -1
  75. package/dist/ui/boot/sequence.d.ts +0 -10
  76. package/dist/ui/boot/sequence.d.ts.map +0 -1
  77. package/dist/ui/boot/sequence.js +0 -171
  78. package/dist/ui/boot/sequence.js.map +0 -1
  79. package/dist/ui/constraints/layoutSpec.d.ts +0 -47
  80. package/dist/ui/constraints/layoutSpec.d.ts.map +0 -1
  81. package/dist/ui/constraints/layoutSpec.js +0 -60
  82. package/dist/ui/constraints/layoutSpec.js.map +0 -1
  83. package/dist/ui/constraints/unknownHandling.d.ts +0 -29
  84. package/dist/ui/constraints/unknownHandling.d.ts.map +0 -1
  85. package/dist/ui/constraints/unknownHandling.js +0 -60
  86. package/dist/ui/constraints/unknownHandling.js.map +0 -1
  87. package/dist/ui/drilldowns/feed.d.ts +0 -11
  88. package/dist/ui/drilldowns/feed.d.ts.map +0 -1
  89. package/dist/ui/drilldowns/feed.js +0 -68
  90. package/dist/ui/drilldowns/feed.js.map +0 -1
  91. package/dist/ui/drilldowns/index.d.ts +0 -7
  92. package/dist/ui/drilldowns/index.d.ts.map +0 -1
  93. package/dist/ui/drilldowns/index.js +0 -8
  94. package/dist/ui/drilldowns/index.js.map +0 -1
  95. package/dist/ui/drilldowns/posture.d.ts +0 -11
  96. package/dist/ui/drilldowns/posture.d.ts.map +0 -1
  97. package/dist/ui/drilldowns/posture.js +0 -74
  98. package/dist/ui/drilldowns/posture.js.map +0 -1
  99. package/dist/ui/intelligence-posture-view.d.ts +0 -22
  100. package/dist/ui/intelligence-posture-view.d.ts.map +0 -1
  101. package/dist/ui/intelligence-posture-view.js +0 -169
  102. package/dist/ui/intelligence-posture-view.js.map +0 -1
  103. package/dist/ui/navigation/keymaps.d.ts +0 -26
  104. package/dist/ui/navigation/keymaps.d.ts.map +0 -1
  105. package/dist/ui/navigation/keymaps.js +0 -135
  106. package/dist/ui/navigation/keymaps.js.map +0 -1
  107. package/dist/ui/navigation/palette.d.ts +0 -10
  108. package/dist/ui/navigation/palette.d.ts.map +0 -1
  109. package/dist/ui/navigation/palette.js +0 -133
  110. package/dist/ui/navigation/palette.js.map +0 -1
  111. package/dist/ui/navigation/state.d.ts +0 -47
  112. package/dist/ui/navigation/state.d.ts.map +0 -1
  113. package/dist/ui/navigation/state.js +0 -84
  114. package/dist/ui/navigation/state.js.map +0 -1
  115. package/dist/ui/navigation/types.d.ts +0 -38
  116. package/dist/ui/navigation/types.d.ts.map +0 -1
  117. package/dist/ui/navigation/types.js +0 -36
  118. package/dist/ui/navigation/types.js.map +0 -1
  119. package/dist/ui/panels/active-assets.d.ts +0 -12
  120. package/dist/ui/panels/active-assets.d.ts.map +0 -1
  121. package/dist/ui/panels/active-assets.js +0 -83
  122. package/dist/ui/panels/active-assets.js.map +0 -1
  123. package/dist/ui/panels/capability-flags.d.ts +0 -12
  124. package/dist/ui/panels/capability-flags.d.ts.map +0 -1
  125. package/dist/ui/panels/capability-flags.js +0 -59
  126. package/dist/ui/panels/capability-flags.js.map +0 -1
  127. package/dist/ui/panels/command-surface.d.ts +0 -12
  128. package/dist/ui/panels/command-surface.d.ts.map +0 -1
  129. package/dist/ui/panels/command-surface.js +0 -55
  130. package/dist/ui/panels/command-surface.js.map +0 -1
  131. package/dist/ui/panels/network-origin.d.ts +0 -12
  132. package/dist/ui/panels/network-origin.d.ts.map +0 -1
  133. package/dist/ui/panels/network-origin.js +0 -79
  134. package/dist/ui/panels/network-origin.js.map +0 -1
  135. package/dist/ui/panels/operations-feed.d.ts +0 -12
  136. package/dist/ui/panels/operations-feed.d.ts.map +0 -1
  137. package/dist/ui/panels/operations-feed.js +0 -90
  138. package/dist/ui/panels/operations-feed.js.map +0 -1
  139. package/dist/ui/panels/posture.d.ts +0 -12
  140. package/dist/ui/panels/posture.d.ts.map +0 -1
  141. package/dist/ui/panels/posture.js +0 -84
  142. package/dist/ui/panels/posture.js.map +0 -1
  143. package/dist/ui/panels/resources.d.ts +0 -11
  144. package/dist/ui/panels/resources.d.ts.map +0 -1
  145. package/dist/ui/panels/resources.js +0 -88
  146. package/dist/ui/panels/resources.js.map +0 -1
  147. package/dist/ui/primitives/Panel.d.ts +0 -25
  148. package/dist/ui/primitives/Panel.d.ts.map +0 -1
  149. package/dist/ui/primitives/Panel.js +0 -59
  150. package/dist/ui/primitives/Panel.js.map +0 -1
  151. package/dist/ui/rendering/metricRenderer.d.ts +0 -24
  152. package/dist/ui/rendering/metricRenderer.d.ts.map +0 -1
  153. package/dist/ui/rendering/metricRenderer.js +0 -86
  154. package/dist/ui/rendering/metricRenderer.js.map +0 -1
  155. package/dist/ui/runtime/hub.d.ts +0 -12
  156. package/dist/ui/runtime/hub.d.ts.map +0 -1
  157. package/dist/ui/runtime/hub.js +0 -486
  158. package/dist/ui/runtime/hub.js.map +0 -1
  159. package/dist/ui/runtime/hubValidation.d.ts +0 -23
  160. package/dist/ui/runtime/hubValidation.d.ts.map +0 -1
  161. package/dist/ui/runtime/hubValidation.js +0 -90
  162. package/dist/ui/runtime/hubValidation.js.map +0 -1
  163. package/dist/ui/runtime/index.d.ts +0 -29
  164. package/dist/ui/runtime/index.d.ts.map +0 -1
  165. package/dist/ui/runtime/index.js +0 -297
  166. package/dist/ui/runtime/index.js.map +0 -1
  167. package/dist/ui/runtime/no-tui.d.ts +0 -12
  168. package/dist/ui/runtime/no-tui.d.ts.map +0 -1
  169. package/dist/ui/runtime/no-tui.js +0 -77
  170. package/dist/ui/runtime/no-tui.js.map +0 -1
  171. package/dist/ui/runtime/state-builder.d.ts +0 -13
  172. package/dist/ui/runtime/state-builder.d.ts.map +0 -1
  173. package/dist/ui/runtime/state-builder.js +0 -114
  174. package/dist/ui/runtime/state-builder.js.map +0 -1
  175. package/dist/ui/runtime/terminalSizeCheck.d.ts +0 -10
  176. package/dist/ui/runtime/terminalSizeCheck.d.ts.map +0 -1
  177. package/dist/ui/runtime/terminalSizeCheck.js +0 -51
  178. package/dist/ui/runtime/terminalSizeCheck.js.map +0 -1
  179. package/dist/ui/runtime/tuiLogGate.d.ts +0 -22
  180. package/dist/ui/runtime/tuiLogGate.d.ts.map +0 -1
  181. package/dist/ui/runtime/tuiLogGate.js +0 -68
  182. package/dist/ui/runtime/tuiLogGate.js.map +0 -1
  183. package/dist/ui/state/types.d.ts +0 -72
  184. package/dist/ui/state/types.d.ts.map +0 -1
  185. package/dist/ui/state/types.js +0 -6
  186. package/dist/ui/state/types.js.map +0 -1
  187. package/dist/ui/theme/borders.d.ts +0 -20
  188. package/dist/ui/theme/borders.d.ts.map +0 -1
  189. package/dist/ui/theme/borders.js +0 -55
  190. package/dist/ui/theme/borders.js.map +0 -1
  191. package/dist/ui/theme/tokens.d.ts +0 -28
  192. package/dist/ui/theme/tokens.d.ts.map +0 -1
  193. package/dist/ui/theme/tokens.js +0 -50
  194. package/dist/ui/theme/tokens.js.map +0 -1
  195. package/dist/ui/theme/typography.d.ts +0 -14
  196. package/dist/ui/theme/typography.d.ts.map +0 -1
  197. package/dist/ui/theme/typography.js +0 -30
  198. package/dist/ui/theme/typography.js.map +0 -1
  199. package/dist/ui/v3/collectors/assets.collector.d.ts +0 -20
  200. package/dist/ui/v3/collectors/assets.collector.d.ts.map +0 -1
  201. package/dist/ui/v3/collectors/assets.collector.js +0 -80
  202. package/dist/ui/v3/collectors/assets.collector.js.map +0 -1
  203. package/dist/ui/v3/collectors/capabilities.collector.d.ts +0 -18
  204. package/dist/ui/v3/collectors/capabilities.collector.d.ts.map +0 -1
  205. package/dist/ui/v3/collectors/capabilities.collector.js +0 -113
  206. package/dist/ui/v3/collectors/capabilities.collector.js.map +0 -1
  207. package/dist/ui/v3/collectors/network.collector.d.ts +0 -18
  208. package/dist/ui/v3/collectors/network.collector.d.ts.map +0 -1
  209. package/dist/ui/v3/collectors/network.collector.js +0 -37
  210. package/dist/ui/v3/collectors/network.collector.js.map +0 -1
  211. package/dist/ui/v3/collectors/posture.derive.d.ts +0 -24
  212. package/dist/ui/v3/collectors/posture.derive.d.ts.map +0 -1
  213. package/dist/ui/v3/collectors/posture.derive.js +0 -57
  214. package/dist/ui/v3/collectors/posture.derive.js.map +0 -1
  215. package/dist/ui/v3/collectors/resources.d.ts +0 -23
  216. package/dist/ui/v3/collectors/resources.d.ts.map +0 -1
  217. package/dist/ui/v3/collectors/resources.js +0 -136
  218. package/dist/ui/v3/collectors/resources.js.map +0 -1
  219. package/dist/ui/v3/commands/commandEngine.d.ts +0 -77
  220. package/dist/ui/v3/commands/commandEngine.d.ts.map +0 -1
  221. package/dist/ui/v3/commands/commandEngine.js +0 -3289
  222. package/dist/ui/v3/commands/commandEngine.js.map +0 -1
  223. package/dist/ui/v3/commands/commandResult.d.ts +0 -25
  224. package/dist/ui/v3/commands/commandResult.d.ts.map +0 -1
  225. package/dist/ui/v3/commands/commandResult.js +0 -19
  226. package/dist/ui/v3/commands/commandResult.js.map +0 -1
  227. package/dist/ui/v3/commands/diagnose.d.ts +0 -17
  228. package/dist/ui/v3/commands/diagnose.d.ts.map +0 -1
  229. package/dist/ui/v3/commands/diagnose.js +0 -62
  230. package/dist/ui/v3/commands/diagnose.js.map +0 -1
  231. package/dist/ui/v3/commands/errorClassifier.d.ts +0 -23
  232. package/dist/ui/v3/commands/errorClassifier.d.ts.map +0 -1
  233. package/dist/ui/v3/commands/errorClassifier.js +0 -63
  234. package/dist/ui/v3/commands/errorClassifier.js.map +0 -1
  235. package/dist/ui/v3/commands/parser.d.ts +0 -14
  236. package/dist/ui/v3/commands/parser.d.ts.map +0 -1
  237. package/dist/ui/v3/commands/parser.js +0 -29
  238. package/dist/ui/v3/commands/parser.js.map +0 -1
  239. package/dist/ui/v3/commands/router.d.ts +0 -13
  240. package/dist/ui/v3/commands/router.d.ts.map +0 -1
  241. package/dist/ui/v3/commands/router.js +0 -150
  242. package/dist/ui/v3/commands/router.js.map +0 -1
  243. package/dist/ui/v3/config/gateway.d.ts +0 -40
  244. package/dist/ui/v3/config/gateway.d.ts.map +0 -1
  245. package/dist/ui/v3/config/gateway.js +0 -113
  246. package/dist/ui/v3/config/gateway.js.map +0 -1
  247. package/dist/ui/v3/core/event.d.ts +0 -19
  248. package/dist/ui/v3/core/event.d.ts.map +0 -1
  249. package/dist/ui/v3/core/event.js +0 -7
  250. package/dist/ui/v3/core/event.js.map +0 -1
  251. package/dist/ui/v3/core/eventBus.d.ts +0 -39
  252. package/dist/ui/v3/core/eventBus.d.ts.map +0 -1
  253. package/dist/ui/v3/core/eventBus.js +0 -79
  254. package/dist/ui/v3/core/eventBus.js.map +0 -1
  255. package/dist/ui/v3/core/feedStore.d.ts +0 -34
  256. package/dist/ui/v3/core/feedStore.d.ts.map +0 -1
  257. package/dist/ui/v3/core/feedStore.js +0 -46
  258. package/dist/ui/v3/core/feedStore.js.map +0 -1
  259. package/dist/ui/v3/core/logger.d.ts +0 -40
  260. package/dist/ui/v3/core/logger.d.ts.map +0 -1
  261. package/dist/ui/v3/core/logger.js +0 -191
  262. package/dist/ui/v3/core/logger.js.map +0 -1
  263. package/dist/ui/v3/core/opEvent.d.ts +0 -15
  264. package/dist/ui/v3/core/opEvent.d.ts.map +0 -1
  265. package/dist/ui/v3/core/opEvent.js +0 -7
  266. package/dist/ui/v3/core/opEvent.js.map +0 -1
  267. package/dist/ui/v3/index.d.ts +0 -8
  268. package/dist/ui/v3/index.d.ts.map +0 -1
  269. package/dist/ui/v3/index.js +0 -51
  270. package/dist/ui/v3/index.js.map +0 -1
  271. package/dist/ui/v3/runtime/moduleConfig.d.ts +0 -21
  272. package/dist/ui/v3/runtime/moduleConfig.d.ts.map +0 -1
  273. package/dist/ui/v3/runtime/moduleConfig.js +0 -41
  274. package/dist/ui/v3/runtime/moduleConfig.js.map +0 -1
  275. package/dist/ui/v3/section0/index.d.ts +0 -22
  276. package/dist/ui/v3/section0/index.d.ts.map +0 -1
  277. package/dist/ui/v3/section0/index.js +0 -88
  278. package/dist/ui/v3/section0/index.js.map +0 -1
  279. package/dist/ui/v3/section0/runtime/createScreen.d.ts +0 -27
  280. package/dist/ui/v3/section0/runtime/createScreen.d.ts.map +0 -1
  281. package/dist/ui/v3/section0/runtime/createScreen.js +0 -55
  282. package/dist/ui/v3/section0/runtime/createScreen.js.map +0 -1
  283. package/dist/ui/v3/section0/runtime/lifecycle.d.ts +0 -53
  284. package/dist/ui/v3/section0/runtime/lifecycle.d.ts.map +0 -1
  285. package/dist/ui/v3/section0/runtime/lifecycle.js +0 -172
  286. package/dist/ui/v3/section0/runtime/lifecycle.js.map +0 -1
  287. package/dist/ui/v3/section1/index.d.ts +0 -19
  288. package/dist/ui/v3/section1/index.d.ts.map +0 -1
  289. package/dist/ui/v3/section1/index.js +0 -413
  290. package/dist/ui/v3/section1/index.js.map +0 -1
  291. package/dist/ui/v3/section1/runtime/commandLine.d.ts +0 -49
  292. package/dist/ui/v3/section1/runtime/commandLine.d.ts.map +0 -1
  293. package/dist/ui/v3/section1/runtime/commandLine.js +0 -183
  294. package/dist/ui/v3/section1/runtime/commandLine.js.map +0 -1
  295. package/dist/ui/v3/section1/runtime/focusLock.d.ts +0 -24
  296. package/dist/ui/v3/section1/runtime/focusLock.d.ts.map +0 -1
  297. package/dist/ui/v3/section1/runtime/focusLock.js +0 -44
  298. package/dist/ui/v3/section1/runtime/focusLock.js.map +0 -1
  299. package/dist/ui/v3/state/assertUiState.d.ts +0 -27
  300. package/dist/ui/v3/state/assertUiState.d.ts.map +0 -1
  301. package/dist/ui/v3/state/assertUiState.js +0 -89
  302. package/dist/ui/v3/state/assertUiState.js.map +0 -1
  303. package/dist/ui/v3/state/capabilitiesStore.d.ts +0 -54
  304. package/dist/ui/v3/state/capabilitiesStore.d.ts.map +0 -1
  305. package/dist/ui/v3/state/capabilitiesStore.js +0 -76
  306. package/dist/ui/v3/state/capabilitiesStore.js.map +0 -1
  307. package/dist/ui/v3/state/defaultState.d.ts +0 -19
  308. package/dist/ui/v3/state/defaultState.d.ts.map +0 -1
  309. package/dist/ui/v3/state/defaultState.js +0 -28
  310. package/dist/ui/v3/state/defaultState.js.map +0 -1
  311. package/dist/ui/v3/state/gatewayConnectionStore.d.ts +0 -72
  312. package/dist/ui/v3/state/gatewayConnectionStore.d.ts.map +0 -1
  313. package/dist/ui/v3/state/gatewayConnectionStore.js +0 -108
  314. package/dist/ui/v3/state/gatewayConnectionStore.js.map +0 -1
  315. package/dist/ui/v3/state/initializePostureState.d.ts +0 -23
  316. package/dist/ui/v3/state/initializePostureState.d.ts.map +0 -1
  317. package/dist/ui/v3/state/initializePostureState.js +0 -41
  318. package/dist/ui/v3/state/initializePostureState.js.map +0 -1
  319. package/dist/ui/v3/state/panelStore.d.ts +0 -80
  320. package/dist/ui/v3/state/panelStore.d.ts.map +0 -1
  321. package/dist/ui/v3/state/panelStore.js +0 -131
  322. package/dist/ui/v3/state/panelStore.js.map +0 -1
  323. package/dist/ui/v3/state/resourcesData.d.ts +0 -15
  324. package/dist/ui/v3/state/resourcesData.d.ts.map +0 -1
  325. package/dist/ui/v3/state/resourcesData.js +0 -7
  326. package/dist/ui/v3/state/resourcesData.js.map +0 -1
  327. package/dist/ui/v3/state/uiState.d.ts +0 -22
  328. package/dist/ui/v3/state/uiState.d.ts.map +0 -1
  329. package/dist/ui/v3/state/uiState.js +0 -13
  330. package/dist/ui/v3/state/uiState.js.map +0 -1
  331. package/dist/ui/v3/state/uiStateBuilder.d.ts +0 -32
  332. package/dist/ui/v3/state/uiStateBuilder.d.ts.map +0 -1
  333. package/dist/ui/v3/state/uiStateBuilder.js +0 -73
  334. package/dist/ui/v3/state/uiStateBuilder.js.map +0 -1
  335. package/dist/ui/v3/state/uiStateTypes.d.ts +0 -59
  336. package/dist/ui/v3/state/uiStateTypes.d.ts.map +0 -1
  337. package/dist/ui/v3/state/uiStateTypes.js +0 -8
  338. package/dist/ui/v3/state/uiStateTypes.js.map +0 -1
  339. package/dist/ui/v3/state/value.d.ts +0 -80
  340. package/dist/ui/v3/state/value.d.ts.map +0 -1
  341. package/dist/ui/v3/state/value.js +0 -96
  342. package/dist/ui/v3/state/value.js.map +0 -1
  343. package/dist/ui/v3/tui/geometry.d.ts +0 -83
  344. package/dist/ui/v3/tui/geometry.d.ts.map +0 -1
  345. package/dist/ui/v3/tui/geometry.js +0 -201
  346. package/dist/ui/v3/tui/geometry.js.map +0 -1
  347. package/dist/ui/v3/tui/startTui.d.ts +0 -37
  348. package/dist/ui/v3/tui/startTui.d.ts.map +0 -1
  349. package/dist/ui/v3/tui/startTui.js +0 -61
  350. package/dist/ui/v3/tui/startTui.js.map +0 -1
  351. package/dist/ui/v3/tui/terminalMode.d.ts +0 -31
  352. package/dist/ui/v3/tui/terminalMode.d.ts.map +0 -1
  353. package/dist/ui/v3/tui/terminalMode.js +0 -76
  354. package/dist/ui/v3/tui/terminalMode.js.map +0 -1
  355. package/dist/ui/v3/ui/debugUtils.d.ts +0 -67
  356. package/dist/ui/v3/ui/debugUtils.d.ts.map +0 -1
  357. package/dist/ui/v3/ui/debugUtils.js +0 -238
  358. package/dist/ui/v3/ui/debugUtils.js.map +0 -1
  359. package/dist/ui/v3/ui/focus.d.ts +0 -28
  360. package/dist/ui/v3/ui/focus.d.ts.map +0 -1
  361. package/dist/ui/v3/ui/focus.js +0 -38
  362. package/dist/ui/v3/ui/focus.js.map +0 -1
  363. package/dist/ui/v3/ui/layout/hubLayout.d.ts +0 -43
  364. package/dist/ui/v3/ui/layout/hubLayout.d.ts.map +0 -1
  365. package/dist/ui/v3/ui/layout/hubLayout.js +0 -170
  366. package/dist/ui/v3/ui/layout/hubLayout.js.map +0 -1
  367. package/dist/ui/v3/ui/layout/phase1Layout.d.ts +0 -63
  368. package/dist/ui/v3/ui/layout/phase1Layout.d.ts.map +0 -1
  369. package/dist/ui/v3/ui/layout/phase1Layout.js +0 -274
  370. package/dist/ui/v3/ui/layout/phase1Layout.js.map +0 -1
  371. package/dist/ui/v3/ui/layout/phase1Layout.test.d.ts +0 -5
  372. package/dist/ui/v3/ui/layout/phase1Layout.test.d.ts.map +0 -1
  373. package/dist/ui/v3/ui/layout/phase1Layout.test.js +0 -120
  374. package/dist/ui/v3/ui/layout/phase1Layout.test.js.map +0 -1
  375. package/dist/ui/v3/ui/minimalRuntime.d.ts +0 -14
  376. package/dist/ui/v3/ui/minimalRuntime.d.ts.map +0 -1
  377. package/dist/ui/v3/ui/minimalRuntime.js +0 -111
  378. package/dist/ui/v3/ui/minimalRuntime.js.map +0 -1
  379. package/dist/ui/v3/ui/panels/AssetsPanel.d.ts +0 -17
  380. package/dist/ui/v3/ui/panels/AssetsPanel.d.ts.map +0 -1
  381. package/dist/ui/v3/ui/panels/AssetsPanel.js +0 -53
  382. package/dist/ui/v3/ui/panels/AssetsPanel.js.map +0 -1
  383. package/dist/ui/v3/ui/panels/CapabilitiesPanel.d.ts +0 -20
  384. package/dist/ui/v3/ui/panels/CapabilitiesPanel.d.ts.map +0 -1
  385. package/dist/ui/v3/ui/panels/CapabilitiesPanel.js +0 -67
  386. package/dist/ui/v3/ui/panels/CapabilitiesPanel.js.map +0 -1
  387. package/dist/ui/v3/ui/panels/NetworkPanel.d.ts +0 -31
  388. package/dist/ui/v3/ui/panels/NetworkPanel.d.ts.map +0 -1
  389. package/dist/ui/v3/ui/panels/NetworkPanel.js +0 -153
  390. package/dist/ui/v3/ui/panels/NetworkPanel.js.map +0 -1
  391. package/dist/ui/v3/ui/panels/PosturePanel.d.ts +0 -16
  392. package/dist/ui/v3/ui/panels/PosturePanel.d.ts.map +0 -1
  393. package/dist/ui/v3/ui/panels/PosturePanel.js +0 -60
  394. package/dist/ui/v3/ui/panels/PosturePanel.js.map +0 -1
  395. package/dist/ui/v3/ui/panels/ResourcesPanel.d.ts +0 -20
  396. package/dist/ui/v3/ui/panels/ResourcesPanel.d.ts.map +0 -1
  397. package/dist/ui/v3/ui/panels/ResourcesPanel.js +0 -66
  398. package/dist/ui/v3/ui/panels/ResourcesPanel.js.map +0 -1
  399. package/dist/ui/v3/ui/phase1Runtime.d.ts +0 -29
  400. package/dist/ui/v3/ui/phase1Runtime.d.ts.map +0 -1
  401. package/dist/ui/v3/ui/phase1Runtime.js +0 -1648
  402. package/dist/ui/v3/ui/phase1Runtime.js.map +0 -1
  403. package/dist/ui/v3/ui/phase1RuntimeClean.d.ts +0 -34
  404. package/dist/ui/v3/ui/phase1RuntimeClean.d.ts.map +0 -1
  405. package/dist/ui/v3/ui/phase1RuntimeClean.js +0 -1841
  406. package/dist/ui/v3/ui/phase1RuntimeClean.js.map +0 -1
  407. package/dist/ui/v3/ui/primitives/Panel.d.ts +0 -39
  408. package/dist/ui/v3/ui/primitives/Panel.d.ts.map +0 -1
  409. package/dist/ui/v3/ui/primitives/Panel.js +0 -105
  410. package/dist/ui/v3/ui/primitives/Panel.js.map +0 -1
  411. package/dist/ui/v3/ui/theme.d.ts +0 -37
  412. package/dist/ui/v3/ui/theme.d.ts.map +0 -1
  413. package/dist/ui/v3/ui/theme.js +0 -40
  414. package/dist/ui/v3/ui/theme.js.map +0 -1
  415. package/dist/ui/v3/ui/uiRuntime.d.ts +0 -40
  416. package/dist/ui/v3/ui/uiRuntime.d.ts.map +0 -1
  417. package/dist/ui/v3/ui/uiRuntime.js +0 -60
  418. package/dist/ui/v3/ui/uiRuntime.js.map +0 -1
  419. package/dist/ui/v3/ui/widgets/CommandLine.d.ts +0 -26
  420. package/dist/ui/v3/ui/widgets/CommandLine.d.ts.map +0 -1
  421. package/dist/ui/v3/ui/widgets/CommandLine.js +0 -67
  422. package/dist/ui/v3/ui/widgets/CommandLine.js.map +0 -1
  423. package/dist/ui/v3/v1Adapters/agents.d.ts +0 -72
  424. package/dist/ui/v3/v1Adapters/agents.d.ts.map +0 -1
  425. package/dist/ui/v3/v1Adapters/agents.js +0 -182
  426. package/dist/ui/v3/v1Adapters/agents.js.map +0 -1
  427. package/dist/ui/v3/v1Adapters/config.d.ts +0 -67
  428. package/dist/ui/v3/v1Adapters/config.d.ts.map +0 -1
  429. package/dist/ui/v3/v1Adapters/config.js +0 -78
  430. package/dist/ui/v3/v1Adapters/config.js.map +0 -1
  431. package/dist/ui/v3/v1Adapters/connect.d.ts +0 -77
  432. package/dist/ui/v3/v1Adapters/connect.d.ts.map +0 -1
  433. package/dist/ui/v3/v1Adapters/connect.js +0 -576
  434. package/dist/ui/v3/v1Adapters/connect.js.map +0 -1
  435. package/dist/ui/v3/v1Adapters/httpDebug.d.ts +0 -19
  436. package/dist/ui/v3/v1Adapters/httpDebug.d.ts.map +0 -1
  437. package/dist/ui/v3/v1Adapters/httpDebug.js +0 -60
  438. package/dist/ui/v3/v1Adapters/httpDebug.js.map +0 -1
  439. package/dist/ui/v3/v1Adapters/runs.d.ts +0 -77
  440. package/dist/ui/v3/v1Adapters/runs.d.ts.map +0 -1
  441. package/dist/ui/v3/v1Adapters/runs.js +0 -339
  442. package/dist/ui/v3/v1Adapters/runs.js.map +0 -1
  443. package/dist/ui/v4/engine/renderFrame.d.ts +0 -47
  444. package/dist/ui/v4/engine/renderFrame.d.ts.map +0 -1
  445. package/dist/ui/v4/engine/renderFrame.js +0 -653
  446. package/dist/ui/v4/engine/renderFrame.js.map +0 -1
  447. package/dist/ui/v4/engine/resizeController.d.ts +0 -48
  448. package/dist/ui/v4/engine/resizeController.d.ts.map +0 -1
  449. package/dist/ui/v4/engine/resizeController.js +0 -285
  450. package/dist/ui/v4/engine/resizeController.js.map +0 -1
  451. package/dist/ui/v4/engine/safeViewport.d.ts +0 -47
  452. package/dist/ui/v4/engine/safeViewport.d.ts.map +0 -1
  453. package/dist/ui/v4/engine/safeViewport.js +0 -123
  454. package/dist/ui/v4/engine/safeViewport.js.map +0 -1
  455. package/dist/ui/v4/engine/terminalProfile.d.ts +0 -56
  456. package/dist/ui/v4/engine/terminalProfile.d.ts.map +0 -1
  457. package/dist/ui/v4/engine/terminalProfile.js +0 -115
  458. package/dist/ui/v4/engine/terminalProfile.js.map +0 -1
  459. package/dist/ui/v4/index.d.ts +0 -28
  460. package/dist/ui/v4/index.d.ts.map +0 -1
  461. package/dist/ui/v4/index.js +0 -993
  462. package/dist/ui/v4/index.js.map +0 -1
  463. package/dist/ui/v4/layout/layoutEngine.d.ts +0 -62
  464. package/dist/ui/v4/layout/layoutEngine.d.ts.map +0 -1
  465. package/dist/ui/v4/layout/layoutEngine.js +0 -294
  466. package/dist/ui/v4/layout/layoutEngine.js.map +0 -1
  467. package/dist/ui/v4/runtime/keepAlive.d.ts +0 -21
  468. package/dist/ui/v4/runtime/keepAlive.d.ts.map +0 -1
  469. package/dist/ui/v4/runtime/keepAlive.js +0 -149
  470. package/dist/ui/v4/runtime/keepAlive.js.map +0 -1
  471. package/dist/ui/v4/runtime/logger.d.ts +0 -35
  472. package/dist/ui/v4/runtime/logger.d.ts.map +0 -1
  473. package/dist/ui/v4/runtime/logger.js +0 -109
  474. package/dist/ui/v4/runtime/logger.js.map +0 -1
  475. package/dist/ui/v5/debug/assertNoOverflow.d.ts +0 -28
  476. package/dist/ui/v5/debug/assertNoOverflow.d.ts.map +0 -1
  477. package/dist/ui/v5/debug/assertNoOverflow.js +0 -63
  478. package/dist/ui/v5/debug/assertNoOverflow.js.map +0 -1
  479. package/dist/ui/v5/debug/debugCommands.d.ts +0 -20
  480. package/dist/ui/v5/debug/debugCommands.d.ts.map +0 -1
  481. package/dist/ui/v5/debug/debugCommands.js +0 -461
  482. package/dist/ui/v5/debug/debugCommands.js.map +0 -1
  483. package/dist/ui/v5/debugCommands.d.ts +0 -20
  484. package/dist/ui/v5/debugCommands.d.ts.map +0 -1
  485. package/dist/ui/v5/debugCommands.js +0 -81
  486. package/dist/ui/v5/debugCommands.js.map +0 -1
  487. package/dist/ui/v5/guardrails/stdoutGuard.d.ts +0 -23
  488. package/dist/ui/v5/guardrails/stdoutGuard.d.ts.map +0 -1
  489. package/dist/ui/v5/guardrails/stdoutGuard.js +0 -94
  490. package/dist/ui/v5/guardrails/stdoutGuard.js.map +0 -1
  491. package/dist/ui/v5/guardrails/terminalRestore.d.ts +0 -17
  492. package/dist/ui/v5/guardrails/terminalRestore.d.ts.map +0 -1
  493. package/dist/ui/v5/guardrails/terminalRestore.js +0 -47
  494. package/dist/ui/v5/guardrails/terminalRestore.js.map +0 -1
  495. package/dist/ui/v5/index.d.ts +0 -30
  496. package/dist/ui/v5/index.d.ts.map +0 -1
  497. package/dist/ui/v5/index.js +0 -243
  498. package/dist/ui/v5/index.js.map +0 -1
  499. package/dist/ui/v5/kernel/kernel.d.ts +0 -81
  500. package/dist/ui/v5/kernel/kernel.d.ts.map +0 -1
  501. package/dist/ui/v5/kernel/kernel.js +0 -339
  502. package/dist/ui/v5/kernel/kernel.js.map +0 -1
  503. package/dist/ui/v5/kernel.d.ts +0 -75
  504. package/dist/ui/v5/kernel.d.ts.map +0 -1
  505. package/dist/ui/v5/kernel.js +0 -289
  506. package/dist/ui/v5/kernel.js.map +0 -1
  507. package/dist/ui/v5/layout/clampRect.d.ts +0 -28
  508. package/dist/ui/v5/layout/clampRect.d.ts.map +0 -1
  509. package/dist/ui/v5/layout/clampRect.js +0 -45
  510. package/dist/ui/v5/layout/clampRect.js.map +0 -1
  511. package/dist/ui/v5/layout/layoutEngine.d.ts +0 -16
  512. package/dist/ui/v5/layout/layoutEngine.d.ts.map +0 -1
  513. package/dist/ui/v5/layout/layoutEngine.js +0 -99
  514. package/dist/ui/v5/layout/layoutEngine.js.map +0 -1
  515. package/dist/ui/v5/renderGate.d.ts +0 -19
  516. package/dist/ui/v5/renderGate.d.ts.map +0 -1
  517. package/dist/ui/v5/renderGate.js +0 -36
  518. package/dist/ui/v5/renderGate.js.map +0 -1
  519. package/dist/ui/v5/resize/resizeController.d.ts +0 -62
  520. package/dist/ui/v5/resize/resizeController.d.ts.map +0 -1
  521. package/dist/ui/v5/resize/resizeController.js +0 -141
  522. package/dist/ui/v5/resize/resizeController.js.map +0 -1
  523. package/dist/ui/v5/resizeController.d.ts +0 -55
  524. package/dist/ui/v5/resizeController.d.ts.map +0 -1
  525. package/dist/ui/v5/resizeController.js +0 -124
  526. package/dist/ui/v5/resizeController.js.map +0 -1
  527. package/dist/ui/v5/runtime/keepAlive.d.ts +0 -37
  528. package/dist/ui/v5/runtime/keepAlive.d.ts.map +0 -1
  529. package/dist/ui/v5/runtime/keepAlive.js +0 -122
  530. package/dist/ui/v5/runtime/keepAlive.js.map +0 -1
  531. package/dist/ui/v5/runtime/restoreTerminal.d.ts +0 -34
  532. package/dist/ui/v5/runtime/restoreTerminal.d.ts.map +0 -1
  533. package/dist/ui/v5/runtime/restoreTerminal.js +0 -100
  534. package/dist/ui/v5/runtime/restoreTerminal.js.map +0 -1
  535. package/dist/ui/v5/runtime/stdoutGuard.d.ts +0 -42
  536. package/dist/ui/v5/runtime/stdoutGuard.d.ts.map +0 -1
  537. package/dist/ui/v5/runtime/stdoutGuard.js +0 -156
  538. package/dist/ui/v5/runtime/stdoutGuard.js.map +0 -1
  539. package/dist/ui/v5/viewport/getViewport.d.ts +0 -23
  540. package/dist/ui/v5/viewport/getViewport.d.ts.map +0 -1
  541. package/dist/ui/v5/viewport/getViewport.js +0 -117
  542. package/dist/ui/v5/viewport/getViewport.js.map +0 -1
  543. package/dist/ui/v5/viewport.d.ts +0 -41
  544. package/dist/ui/v5/viewport.d.ts.map +0 -1
  545. package/dist/ui/v5/viewport.js +0 -90
  546. package/dist/ui/v5/viewport.js.map +0 -1
  547. package/dist/ui/widgets/flagRow.d.ts +0 -25
  548. package/dist/ui/widgets/flagRow.d.ts.map +0 -1
  549. package/dist/ui/widgets/flagRow.js +0 -57
  550. package/dist/ui/widgets/flagRow.js.map +0 -1
  551. package/dist/ui/widgets/index.d.ts +0 -9
  552. package/dist/ui/widgets/index.d.ts.map +0 -1
  553. package/dist/ui/widgets/index.js +0 -9
  554. package/dist/ui/widgets/index.js.map +0 -1
  555. package/dist/ui/widgets/meter.d.ts +0 -18
  556. package/dist/ui/widgets/meter.d.ts.map +0 -1
  557. package/dist/ui/widgets/meter.js +0 -38
  558. package/dist/ui/widgets/meter.js.map +0 -1
  559. package/dist/ui/widgets/miniMap.d.ts +0 -26
  560. package/dist/ui/widgets/miniMap.d.ts.map +0 -1
  561. package/dist/ui/widgets/miniMap.js +0 -94
  562. package/dist/ui/widgets/miniMap.js.map +0 -1
  563. package/dist/ui/widgets/sparkline.d.ts +0 -17
  564. package/dist/ui/widgets/sparkline.d.ts.map +0 -1
  565. package/dist/ui/widgets/sparkline.js +0 -65
  566. package/dist/ui/widgets/sparkline.js.map +0 -1
@@ -0,0 +1,467 @@
1
+ /**
2
+ * MK1 UI Builder - Single function that creates all widgets
3
+ *
4
+ * Rules:
5
+ * - Only place widgets are created
6
+ * - All positions come from layout spec
7
+ * - Never hardcode positions
8
+ */
9
+ import blessed from 'neo-blessed';
10
+ import { fileLogger } from '../log.js';
11
+ import { feedStore } from '../core/feedStore.js';
12
+ import { setShown } from './safe.js';
13
+ import { safeTextForBox, safeTextLines } from './safeText.js';
14
+ /**
15
+ * Destroy all UI widgets
16
+ */
17
+ export function destroyUI(uiRefs, screen) {
18
+ if (!uiRefs) {
19
+ return;
20
+ }
21
+ fileLogger.debug(`[UI_BUILDER] Destroying ${uiRefs.rootChildren.length} widgets`);
22
+ // Destroy only the widgets we created (tracked in rootChildren)
23
+ for (const child of uiRefs.rootChildren) {
24
+ try {
25
+ // Check if child is still attached before destroying
26
+ if (child && typeof child.destroy === 'function') {
27
+ child.destroy();
28
+ }
29
+ }
30
+ catch (error) {
31
+ fileLogger.warn(`Error destroying widget: ${error}`);
32
+ }
33
+ }
34
+ // Clear references
35
+ uiRefs.rootChildren = [];
36
+ uiRefs.header = undefined;
37
+ uiRefs.posture = undefined;
38
+ uiRefs.resources = undefined;
39
+ uiRefs.assets = undefined;
40
+ uiRefs.operations = undefined;
41
+ uiRefs.network = undefined;
42
+ uiRefs.capabilities = undefined;
43
+ uiRefs.command = undefined;
44
+ fileLogger.debug(`[UI_BUILDER] Destroy complete, screen has ${screen.children?.length || 0} children remaining`);
45
+ }
46
+ /**
47
+ * Format operations feed content
48
+ * CRITICAL: Ensure lines don't exceed panel width to prevent overflow
49
+ */
50
+ function formatOperationsFeed(maxWidth) {
51
+ const events = feedStore.getRecent(20);
52
+ if (events.length === 0) {
53
+ return 'Waiting for events...';
54
+ }
55
+ // Format events as lines, truncate if needed
56
+ const lines = events.map((event) => {
57
+ const time = new Date(event.timestamp).toLocaleTimeString();
58
+ let line = `[${time}] [${event.tag}] ${event.message}`;
59
+ // Truncate line if it exceeds maxWidth
60
+ if (maxWidth && line.length > maxWidth) {
61
+ line = line.substring(0, maxWidth - 3) + '...';
62
+ }
63
+ return line;
64
+ });
65
+ return lines.join('\n');
66
+ }
67
+ /**
68
+ * Get placeholder content for a panel
69
+ */
70
+ function getPlaceholderContent(name) {
71
+ const placeholders = {
72
+ posture: 'Posture status\n\nHealthy',
73
+ resources: 'System resources\n\nCPU: --\nMemory: --',
74
+ assets: 'Agent assets\n\nCount: 0',
75
+ network: 'Network status\n\nConnected',
76
+ capabilities: 'Capabilities\n\nList: --',
77
+ };
78
+ return placeholders[name] || `${name} content`;
79
+ }
80
+ /**
81
+ * Build header text with layout info
82
+ */
83
+ function buildHeaderText(spec, canvas, gitSha) {
84
+ const sha = gitSha ? gitSha.substring(0, 7) : 'dev';
85
+ // Phase C: This text will be truncated in buildUI using safeTextForBox
86
+ return `MK1 ${sha} layout=${spec.mode} canvas=${canvas.cols}x${canvas.rows} reason=${spec.reason}`;
87
+ }
88
+ /**
89
+ * Clamp box dimensions to safe viewport
90
+ * Ensures no element extends past safeCols/safeRows
91
+ * CRITICAL: In 0-indexed system, if safeCols=280, usable columns are 0-279
92
+ * So left + width must be <= safeCols (meaning max right edge is at column safeCols-1)
93
+ */
94
+ function clampBox(rect, safeCols, safeRows) {
95
+ // Clamp position to valid range (0 to safeCols-1 for x, 0 to safeRows-1 for y)
96
+ const left = Math.max(0, Math.min(rect.x, safeCols - 1));
97
+ const top = Math.max(0, Math.min(rect.y, safeRows - 1));
98
+ // CRITICAL: Ensure left + width < safeCols (strictly less)
99
+ // If safeCols=280, usable columns are 0-279 (280 columns)
100
+ // If left=0 and width=280, right edge is at column 280 (1 past usable)
101
+ // So we need: left + width < safeCols, meaning width < safeCols - left
102
+ // Or equivalently: width <= safeCols - left - 1
103
+ const maxWidth = Math.max(1, safeCols - left - 1); // Ensure right edge < safeCols
104
+ const maxHeight = Math.max(1, safeRows - top - 1); // Ensure bottom edge < safeRows
105
+ let width = Math.max(1, Math.min(rect.w, maxWidth));
106
+ let height = Math.max(1, Math.min(rect.h, maxHeight));
107
+ // Final safety check - ensure right edge is strictly less than safeCols
108
+ if (left + width >= safeCols) {
109
+ width = Math.max(1, safeCols - left - 1);
110
+ fileLogger.force(`[CLAMP] FORCED: left=${left} width clamped to ${width} (was ${rect.w}), rightEdge=${left + width} < safeCols=${safeCols}`);
111
+ }
112
+ if (top + height >= safeRows) {
113
+ height = Math.max(1, safeRows - top - 1);
114
+ fileLogger.force(`[CLAMP] FORCED: top=${top} height clamped to ${height} (was ${rect.h}), bottomEdge=${top + height} < safeRows=${safeRows}`);
115
+ }
116
+ // Verify final result - must be strictly less
117
+ if (left + width >= safeCols || top + height >= safeRows) {
118
+ fileLogger.force(`[CLAMP] ERROR: Still invalid after clamping! left=${left} width=${width} top=${top} height=${height} safeCols=${safeCols} safeRows=${safeRows}`);
119
+ }
120
+ return { left, top, width, height };
121
+ }
122
+ /**
123
+ * Build UI from layout spec
124
+ *
125
+ * This is the ONLY place widgets are created.
126
+ */
127
+ export function buildUI(screen, spec, canvas, commandValue = '', gitSha) {
128
+ const uiRefs = {
129
+ rootChildren: [],
130
+ commandValue,
131
+ };
132
+ // Clamp all rects before creating widgets
133
+ // canvas.cols/rows already account for SAFE_PAD, so use them directly
134
+ // But ensure we never exceed them
135
+ const safeCols = canvas.cols;
136
+ const safeRows = canvas.rows;
137
+ // Phase A: Use safeCols directly (already has RIGHT_GAP applied in getSafeViewport)
138
+ // No more usableCols - safeCols IS the usable width
139
+ fileLogger.force(`[UI_BUILDER] Building UI with safeCols=${safeCols} safeRows=${safeRows}`);
140
+ // Phase D: Create header - MUST use safeCols width and truncate text
141
+ // Phase C: Header text MUST be truncated to prevent long lines causing scrollbars
142
+ const headerRect = clampBox(spec.rects.header, safeCols, safeRows);
143
+ const headerTextRaw = buildHeaderText(spec, canvas, gitSha);
144
+ const headerContent = safeTextForBox(headerTextRaw, headerRect.width, false, 0, 0); // No borders, no padding
145
+ fileLogger.force(`[UI_BUILDER] Header: left=${headerRect.left} width=${headerRect.width} rightEdge=${headerRect.left + headerRect.width} safeCols=${safeCols} contentLength=${headerContent.length}`);
146
+ // Phase E: Critical anti-scroll rule - verify header doesn't exceed safeCols
147
+ if (headerRect.left + headerRect.width > safeCols) {
148
+ throw new Error(`[UI_BUILDER ERROR] Header exceeds safeCols: left=${headerRect.left} width=${headerRect.width} ` +
149
+ `rightEdge=${headerRect.left + headerRect.width} > safeCols=${safeCols}`);
150
+ }
151
+ const header = blessed.box({
152
+ left: headerRect.left,
153
+ top: headerRect.top,
154
+ width: headerRect.width,
155
+ height: headerRect.height,
156
+ content: headerContent, // Phase C: Already truncated
157
+ style: {
158
+ fg: 'yellow',
159
+ },
160
+ tags: false, // Phase C: Disable tags to prevent escape sequences
161
+ });
162
+ // Append to screen FIRST (before any other operations)
163
+ screen.append(header);
164
+ uiRefs.rootChildren.push(header);
165
+ uiRefs.header = header;
166
+ // Ensure it's shown (use safe method)
167
+ setShown(header, true);
168
+ // Create panels
169
+ const panels = [
170
+ { name: 'posture', title: 'POSTURE' },
171
+ { name: 'resources', title: 'RESOURCES' },
172
+ { name: 'assets', title: 'ASSETS' },
173
+ { name: 'operations', title: 'OPERATIONS' },
174
+ { name: 'network', title: 'NETWORK' },
175
+ { name: 'capabilities', title: 'CAPABILITIES' },
176
+ ];
177
+ for (const { name, title } of panels) {
178
+ const rect = spec.rects[name];
179
+ if (!rect) {
180
+ fileLogger.warn(`Missing rect for panel: ${name}`);
181
+ continue;
182
+ }
183
+ // Clamp dimensions before creating widget
184
+ const clampedRect = clampBox(rect, safeCols, safeRows);
185
+ // Phase C1/C2: Ensure panels use explicit integers from layout spec (no %, no right: 0)
186
+ // CRITICAL: All values must be integers, not strings, not percentages
187
+ const panelLeft = Math.floor(clampedRect.left);
188
+ const panelTop = Math.floor(clampedRect.top);
189
+ const panelWidth = Math.floor(clampedRect.width);
190
+ const panelHeight = Math.floor(clampedRect.height);
191
+ // Verify these are actual integers (sanity check)
192
+ if (isNaN(panelLeft) || isNaN(panelTop) || isNaN(panelWidth) || isNaN(panelHeight)) {
193
+ throw new Error(`[UI_BUILDER] Invalid panel dimensions for ${name}: left=${panelLeft} top=${panelTop} width=${panelWidth} height=${panelHeight}`);
194
+ }
195
+ fileLogger.force(`[UI_BUILDER] ${name}: left=${panelLeft} top=${panelTop} width=${panelWidth} height=${panelHeight} rightEdge=${panelLeft + panelWidth}`);
196
+ let widget;
197
+ // CLOSED BOXES: Every panel has all 4 borders (top, bottom, left, right) to form a complete rectangle
198
+ // All panels have all borders for visual closure
199
+ const hasLeftBorder = true;
200
+ const hasRightBorder = true;
201
+ const hasTopBorder = true;
202
+ const hasBottomBorder = true;
203
+ // CLOSED BOXES: All borders are always present
204
+ // User: "boarder on the right side of the network and capabilities tab have zero margins or padding"
205
+ // For NETWORK and CAPABILITIES (right column), remove space before right border to save 1 char
206
+ const isRightColumn = name === 'network' || name === 'capabilities';
207
+ const rightBorderPadding = isRightColumn ? 0 : 1; // Zero padding for right column panels
208
+ const leftBorderPadding = 1; // Always 1 space after left border
209
+ // Content width: panelWidth minus borders and padding
210
+ // Structure: leftBorder(│) + leftPadding(space) + content + rightPadding(space?) + rightBorder(│) = panelWidth
211
+ // For normal panels: 1 + 1 + content + 1 + 1 = panelWidth → content = panelWidth - 4
212
+ // For right-column (zero padding): 1 + 1 + content + 0 + 1 = panelWidth → content = panelWidth - 3
213
+ const contentWidth = Math.max(1, panelWidth - 1 - leftBorderPadding - rightBorderPadding - 1);
214
+ fileLogger.force(`[UI_BUILDER] ${name} contentWidth=${contentWidth} (panelWidth=${panelWidth} rightBorderPadding=${rightBorderPadding} isRightColumn=${isRightColumn})`);
215
+ // Build closed box borders (all 4 sides) - FULL WIDTH
216
+ // Every panel must be a complete closed rectangle with all 4 sides connected
217
+ const leftChar = '│';
218
+ const rightChar = '│';
219
+ const topLeftChar = '┌';
220
+ const topRightChar = '┐';
221
+ const bottomLeftChar = '└';
222
+ const bottomRightChar = '┘';
223
+ const topHorizontalChar = '─';
224
+ const bottomHorizontalChar = '─';
225
+ const separatorLeftChar = '├';
226
+ const separatorRightChar = '┤';
227
+ const separatorHorizontalChar = '─';
228
+ // Helper function to ensure line is exactly panelWidth (CRITICAL for closed boxes)
229
+ const ensureWidth = (line, targetWidth, label) => {
230
+ if (line.length === targetWidth) {
231
+ return line; // Perfect - already correct width
232
+ }
233
+ else if (line.length > targetWidth) {
234
+ fileLogger.force(`[BORDER] ${name} ${label} too long: ${line.length} > ${targetWidth}, truncating`);
235
+ return line.substring(0, targetWidth);
236
+ }
237
+ else {
238
+ // Pad to exact width - CRITICAL for closed boxes
239
+ // For borders, pad with ─ characters for horizontal lines, spaces for content
240
+ if (label.includes('Border') && (line.startsWith('┌') || line.startsWith('└'))) {
241
+ // For top/bottom borders, pad with ─ characters in the middle
242
+ const corner1 = line[0];
243
+ const corner2 = line[line.length - 1];
244
+ const currentLineLength = line.length - 2; // Exclude corners
245
+ const needed = targetWidth - 2 - currentLineLength;
246
+ if (needed > 0) {
247
+ const fillChar = '─';
248
+ return `${corner1}${line.substring(1, line.length - 1)}${fillChar.repeat(needed)}${corner2}`;
249
+ }
250
+ }
251
+ // For other lines (title, separator, body), pad with spaces
252
+ return line.padEnd(targetWidth, ' ');
253
+ }
254
+ };
255
+ // Horizontal line MUST span full width minus corner chars to form complete box
256
+ // panelWidth includes borders, so: corners (2) + horizontal line (panelWidth - 2) = panelWidth
257
+ const horizontalLineLength = Math.max(0, panelWidth - 2); // Full width minus 2 corner chars
258
+ const topLine = topHorizontalChar.repeat(horizontalLineLength);
259
+ const bottomLine = bottomHorizontalChar.repeat(horizontalLineLength);
260
+ const separatorLine = separatorHorizontalChar.repeat(horizontalLineLength);
261
+ // Build closed box borders - these MUST be exactly panelWidth to form complete rectangles
262
+ const topBorder = `${topLeftChar}${topLine}${topRightChar}`;
263
+ const bottomBorder = `${bottomLeftChar}${bottomLine}${bottomRightChar}`;
264
+ const separator = `${separatorLeftChar}${separatorLine}${separatorRightChar}`; // Separator with full borders
265
+ // Title row with borders on both sides
266
+ // User: Right column panels (NETWORK, CAPABILITIES) have zero padding before right border
267
+ const paddedTitle = title.substring(0, contentWidth).padEnd(contentWidth, ' ');
268
+ const titleRow = rightBorderPadding === 0
269
+ ? `${leftChar} ${paddedTitle}${rightChar}` // No space before right border
270
+ : `${leftChar} ${paddedTitle} ${rightChar}`; // Normal spacing
271
+ // Ensure all border lines are exactly panelWidth (forms complete closed rectangles)
272
+ const safeTopBorder = ensureWidth(topBorder, panelWidth, 'topBorder');
273
+ const safeTitleRow = ensureWidth(titleRow, panelWidth, 'titleRow');
274
+ const safeSeparator = ensureWidth(separator, panelWidth, 'separator');
275
+ const safeBottomBorder = ensureWidth(bottomBorder, panelWidth, 'bottomBorder');
276
+ // Content area width (inside borders)
277
+ const maxContentWidth = contentWidth;
278
+ if (name === 'operations') {
279
+ // Operations panel with feed content (center column, not right column, so has normal padding)
280
+ // Phase C: Use safeTextForBox to truncate operations feed content
281
+ const feedContent = formatOperationsFeed(maxContentWidth);
282
+ // Operations is in center column, so has normal padding: leftBorder(│) + padding(1) + content + padding(1) + rightBorder(│) = panelWidth
283
+ // internal width = panelWidth - 4 (borders + padding)
284
+ const internalWidth = panelWidth - 4; // 2 for borders (left+right), 2 for padding (left+right) - operations has normal padding
285
+ const safeFeedContent = safeTextLines(feedContent, internalWidth);
286
+ const contentLines = safeFeedContent.split('\n');
287
+ // Build body lines with left and right borders - each line must be exactly panelWidth
288
+ const bodyLines = contentLines.map(line => {
289
+ // Phase C: Each line is already truncated by safeTextLines, but ensure it fits inside borders
290
+ const safeLine = line.length > maxContentWidth ? line.substring(0, maxContentWidth - 3) + '...' : line;
291
+ const bodyLine = `${leftChar} ${safeLine.padEnd(maxContentWidth, ' ')} ${rightChar}`;
292
+ // Ensure body line is exactly panelWidth (same as borders)
293
+ return ensureWidth(bodyLine, panelWidth, 'bodyLine');
294
+ });
295
+ // Calculate how much space we've used (all borders are always present)
296
+ const headerHeight = 3; // top border, title row, separator
297
+ const footerHeight = 1; // bottom border
298
+ const usedContentHeight = bodyLines.length;
299
+ const remainingHeight = Math.max(0, panelHeight - headerHeight - footerHeight - usedContentHeight);
300
+ // Empty body lines must also be exactly panelWidth with borders
301
+ const emptyBodyLine = ensureWidth(`${leftChar} ${' '.repeat(maxContentWidth)} ${rightChar}`, panelWidth, 'emptyBodyLine');
302
+ const emptyBodyLines = Array(remainingHeight).fill(emptyBodyLine);
303
+ // Build content with all borders (closed box) - every line is exactly panelWidth
304
+ const fullContent = `${safeTopBorder}\n${safeTitleRow}\n${safeSeparator}\n${bodyLines.join('\n')}\n${emptyBodyLines.join('\n')}\n${safeBottomBorder}`;
305
+ widget = blessed.box({
306
+ left: panelLeft,
307
+ top: panelTop,
308
+ width: panelWidth,
309
+ height: panelHeight,
310
+ content: fullContent,
311
+ style: {
312
+ fg: 'cyan',
313
+ bg: 'black',
314
+ },
315
+ tags: false,
316
+ scrollable: false,
317
+ alwaysScroll: false,
318
+ });
319
+ }
320
+ else {
321
+ // Other panels with placeholder content
322
+ // Phase C: Use safeTextLines to truncate placeholder content
323
+ const placeholder = getPlaceholderContent(name);
324
+ // hasBorders=true (2 cols), padding=1 each side = 4 total, so internal width = panelWidth - 4
325
+ const internalWidth = panelWidth - 4; // 2 for borders (left+right), 2 for padding (left+right)
326
+ const safePlaceholder = safeTextLines(placeholder, internalWidth);
327
+ const contentLines = safePlaceholder.split('\n');
328
+ // Build body lines with left and right borders - each line must be exactly panelWidth
329
+ // User: Right column panels have zero padding before right border
330
+ const bodyLines = contentLines.map(line => {
331
+ // Phase C: Each line is already truncated by safeTextLines, but ensure it fits inside borders
332
+ const safeLine = line.length > maxContentWidth ? line.substring(0, maxContentWidth - 3) + '...' : line;
333
+ const bodyLine = rightBorderPadding === 0
334
+ ? `${leftChar} ${safeLine.padEnd(maxContentWidth, ' ')}${rightChar}` // No space before right border
335
+ : `${leftChar} ${safeLine.padEnd(maxContentWidth, ' ')} ${rightChar}`; // Normal spacing
336
+ // Ensure body line is exactly panelWidth (same as borders)
337
+ return ensureWidth(bodyLine, panelWidth, 'bodyLine');
338
+ });
339
+ // Calculate how much space we've used (all borders are always present)
340
+ const headerHeight = 3; // top border, title row, separator
341
+ const footerHeight = 1; // bottom border
342
+ const usedContentHeight = bodyLines.length;
343
+ const remainingHeight = Math.max(0, panelHeight - headerHeight - footerHeight - usedContentHeight);
344
+ // Empty body lines must also be exactly panelWidth with borders
345
+ // User: Right column panels have zero padding before right border
346
+ const emptyBodyLinePattern = rightBorderPadding === 0
347
+ ? `${leftChar} ${' '.repeat(maxContentWidth)}${rightChar}` // No space before right border
348
+ : `${leftChar} ${' '.repeat(maxContentWidth)} ${rightChar}`; // Normal spacing
349
+ const emptyBodyLine = ensureWidth(emptyBodyLinePattern, panelWidth, 'emptyBodyLine');
350
+ const emptyBodyLines = Array(remainingHeight).fill(emptyBodyLine);
351
+ // Build content with all borders (closed box) - every line is exactly panelWidth
352
+ const fullContent = `${safeTopBorder}\n${safeTitleRow}\n${safeSeparator}\n${bodyLines.join('\n')}\n${emptyBodyLines.join('\n')}\n${safeBottomBorder}`;
353
+ widget = blessed.box({
354
+ left: panelLeft,
355
+ top: panelTop,
356
+ width: panelWidth,
357
+ height: panelHeight,
358
+ content: fullContent,
359
+ style: {
360
+ fg: 'cyan',
361
+ bg: 'black', // Solid black background, not faded
362
+ },
363
+ tags: false,
364
+ scrollable: false,
365
+ alwaysScroll: false,
366
+ });
367
+ }
368
+ // Append to screen FIRST
369
+ screen.append(widget);
370
+ uiRefs.rootChildren.push(widget);
371
+ uiRefs[name] = widget;
372
+ // Ensure it's shown (use safe method)
373
+ setShown(widget, true);
374
+ }
375
+ // Create command line (clamp dimensions)
376
+ // Command spans full width - ensure it's clamped
377
+ const commandRect = clampBox(spec.rects.command, safeCols, safeRows);
378
+ fileLogger.force(`[UI_BUILDER] Command: left=${commandRect.left} width=${commandRect.width} rightEdge=${commandRect.left + commandRect.width} safeCols=${safeCols}`);
379
+ const prompt = '4runr> ' + commandValue;
380
+ const command = blessed.box({
381
+ left: commandRect.left,
382
+ top: commandRect.top,
383
+ width: commandRect.width,
384
+ height: commandRect.height,
385
+ content: prompt,
386
+ style: {
387
+ fg: 'green',
388
+ },
389
+ tags: true,
390
+ scrollable: false,
391
+ alwaysScroll: false,
392
+ });
393
+ // Append to screen FIRST
394
+ screen.append(command);
395
+ uiRefs.rootChildren.push(command);
396
+ uiRefs.command = command;
397
+ // Ensure it's shown (use safe method)
398
+ setShown(command, true);
399
+ // Add separator line right below command line - use balanced width
400
+ // Balance: Use 70% for footer (enough visual but safe from overflow)
401
+ const footerLineY = commandRect.top + commandRect.height;
402
+ if (footerLineY < safeRows) {
403
+ const FOOTER_WIDTH_PERCENT = 0.70; // Balance: enough visual but safe
404
+ const maxSeparatorWidth = Math.floor(commandRect.width * FOOTER_WIDTH_PERCENT);
405
+ const footerLine = '─'.repeat(Math.max(0, maxSeparatorWidth));
406
+ // Hard clamp: ensure footer never exceeds safeCols
407
+ const footerWidth = Math.min(maxSeparatorWidth, safeCols - commandRect.left - 2); // -2 for safety margin
408
+ const footer = blessed.box({
409
+ left: commandRect.left,
410
+ top: footerLineY,
411
+ width: footerWidth,
412
+ height: 1,
413
+ content: footerLine.substring(0, footerWidth), // Truncate content to match width
414
+ style: {
415
+ fg: 'cyan',
416
+ },
417
+ tags: false,
418
+ scrollable: false,
419
+ alwaysScroll: false,
420
+ });
421
+ screen.append(footer);
422
+ uiRefs.rootChildren.push(footer);
423
+ setShown(footer, true);
424
+ fileLogger.force(`[FOOTER] width=${footerWidth} (70% of ${commandRect.width}) rightEdge=${commandRect.left + footerWidth} safeCols=${safeCols}`);
425
+ }
426
+ // Phase B: Offender scanner is now run AFTER render in mk1App.ts
427
+ // (Called via scanAndLogOffenders which is imported there)
428
+ // No need to run it here - it will catch offenders after screen.render()
429
+ // Phase B: Log basic build info for debugging
430
+ const childCount = screen.children?.length || 0;
431
+ fileLogger.force(`[UI_BUILDER] Built ${uiRefs.rootChildren.length} widgets, screen has ${childCount} children, safeCols=${safeCols} safeRows=${safeRows}`);
432
+ // Phase B: Offender scanner is now run AFTER render in mk1App.ts
433
+ // (Called via scanAndLogOffenders which is imported there)
434
+ // No need to run it here - it will catch offenders after screen.render()
435
+ return uiRefs;
436
+ }
437
+ /**
438
+ * Update operations feed in existing UI
439
+ */
440
+ export function updateOperationsFeed(uiRefs) {
441
+ if (!uiRefs.operations) {
442
+ return;
443
+ }
444
+ // CRITICAL: Ensure content doesn't cause overflow
445
+ // Get current widget dimensions and clamp content
446
+ const widget = uiRefs.operations;
447
+ const maxWidth = (widget.width || 0) - 0; // Use full width (header already has margin)
448
+ const feedContent = formatOperationsFeed(maxWidth);
449
+ // Preserve header when updating content
450
+ const currentContent = (widget.content || '');
451
+ const headerLine = currentContent.split('\n')[0] || '';
452
+ const newContent = headerLine ? `${headerLine}\n${feedContent}` : feedContent;
453
+ uiRefs.operations.setContent(newContent);
454
+ uiRefs.operations.content = newContent;
455
+ }
456
+ /**
457
+ * Update command line value
458
+ */
459
+ export function updateCommandValue(uiRefs, value) {
460
+ uiRefs.commandValue = value;
461
+ if (uiRefs.command) {
462
+ const prompt = '4runr> ' + value;
463
+ uiRefs.command.setContent(prompt);
464
+ uiRefs.command.content = prompt;
465
+ }
466
+ }
467
+ //# sourceMappingURL=uiBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uiBuilder.js","sourceRoot":"","sources":["../../../src/tui_mk1/ui/uiBuilder.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,16 @@ export interface SafeViewport {
13
13
  screenRows: number;
14
14
  }
15
15
  /**
16
- * Get safe viewport dimensions
16
+ * Phase A: Get Safe Viewport - Single Source of Truth
17
+ *
18
+ * Rule: last usable column = cols - RIGHT_GAP
19
+ * last usable row = rows - BOTTOM_GAP
20
+ *
21
+ * Conservative gaps during debugging to kill scrollbars:
22
+ * - RIGHT_GAP = 6 (can reduce later once offenders are gone)
23
+ * - BOTTOM_GAP = 2
24
+ *
25
+ * Hard clamps: safeCols >= MIN_COLS, safeRows >= MIN_ROWS
17
26
  */
18
27
  export declare function getSafeViewport(screenCols: number, screenRows: number): SafeViewport;
19
28
  //# sourceMappingURL=safeViewport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"safeViewport.d.ts","sourceRoot":"","sources":["../../../src/tui_mk1/viewport/safeViewport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CA+BpF"}
1
+ {"version":3,"file":"safeViewport.d.ts","sourceRoot":"","sources":["../../../src/tui_mk1/viewport/safeViewport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CA8DpF"}
@@ -4,29 +4,61 @@
4
4
  * Computes safeCols and safeRows that all layout uses.
5
5
  * Subtracts configurable margins to prevent overflow in problematic terminals.
6
6
  */
7
+ import { logger } from '../logger.js';
7
8
  /**
8
- * Get safe viewport dimensions
9
+ * Phase A: Get Safe Viewport - Single Source of Truth
10
+ *
11
+ * Rule: last usable column = cols - RIGHT_GAP
12
+ * last usable row = rows - BOTTOM_GAP
13
+ *
14
+ * Conservative gaps during debugging to kill scrollbars:
15
+ * - RIGHT_GAP = 6 (can reduce later once offenders are gone)
16
+ * - BOTTOM_GAP = 2
17
+ *
18
+ * Hard clamps: safeCols >= MIN_COLS, safeRows >= MIN_ROWS
9
19
  */
10
20
  export function getSafeViewport(screenCols, screenRows) {
11
- // Read environment variables
12
- const safeRightEnv = process.env.TUI_SAFE_RIGHT;
13
- const safeBottomEnv = process.env.TUI_SAFE_BOTTOM;
21
+ // Phase A: Conservative gaps for debugging (can tighten later)
22
+ const MIN_COLS = 40;
23
+ const MIN_ROWS = 20;
24
+ // Read environment variables with conservative defaults
25
+ // INCREASED RIGHT_GAP: Add more margin to eliminate horizontal scrollbar
26
+ const RIGHT_GAP = process.env.TUI_SAFE_PAD_X ? Number(process.env.TUI_SAFE_PAD_X) :
27
+ process.env.TUI_SAFE_RIGHT ? Number(process.env.TUI_SAFE_RIGHT) : 8; // Increased from 6 to 8 for more safety
28
+ const BOTTOM_GAP = process.env.TUI_SAFE_PAD_Y ? Number(process.env.TUI_SAFE_PAD_Y) :
29
+ process.env.TUI_SAFE_BOTTOM ? Number(process.env.TUI_SAFE_BOTTOM) : 2; // Conservative: 2 for debugging
30
+ // Check for preset (overrides)
14
31
  const safePreset = process.env.TUI_SAFE_PRESET;
15
- let rightMargin = 0;
16
- let bottomMargin = 0;
17
- // Check for preset
32
+ let rightMargin = RIGHT_GAP;
33
+ let bottomMargin = BOTTOM_GAP;
18
34
  if (safePreset === 'aws') {
19
- rightMargin = 3;
35
+ rightMargin = 6; // Keep conservative during debug
20
36
  bottomMargin = 2;
21
37
  }
22
- else {
23
- // Parse env vars (default to 0)
24
- rightMargin = safeRightEnv ? parseInt(safeRightEnv, 10) || 0 : 0;
25
- bottomMargin = safeBottomEnv ? parseInt(safeBottomEnv, 10) || 0 : 0;
38
+ // Phase A: Compute safe viewport with hard clamps
39
+ const safeCols = Math.max(MIN_COLS, screenCols - rightMargin);
40
+ const safeRows = Math.max(MIN_ROWS, screenRows - bottomMargin);
41
+ // Phase A: Hard assertions to catch math bugs
42
+ if (safeCols > screenCols) {
43
+ throw new Error(`[TUI] safeCols > screenCols (math bug): safeCols=${safeCols} screenCols=${screenCols} RIGHT_GAP=${rightMargin}`);
44
+ }
45
+ if (safeRows > screenRows) {
46
+ throw new Error(`[TUI] safeRows > screenRows (math bug): safeRows=${safeRows} screenRows=${screenRows} BOTTOM_GAP=${bottomMargin}`);
26
47
  }
27
- // Clamp to minimums
28
- const safeCols = Math.max(40, screenCols - rightMargin);
29
- const safeRows = Math.max(20, screenRows - bottomMargin);
48
+ // Phase A: Log safe viewport for debugging (to file, not stdout)
49
+ // Use fileLogger here to avoid stdout corruption - import dynamically to avoid circular deps
50
+ import('../log.js').then(({ fileLogger }) => {
51
+ fileLogger.force(`[SAFE_VIEWPORT] cols=${screenCols} rows=${screenRows} ` +
52
+ `safeCols=${safeCols} safeRows=${safeRows} ` +
53
+ `RIGHT_GAP=${rightMargin} BOTTOM_GAP=${bottomMargin}`);
54
+ }).catch(() => {
55
+ // Fallback to logger if fileLogger not available yet
56
+ if (logger) {
57
+ logger.debug(`[SAFE_VIEWPORT] cols=${screenCols} rows=${screenRows} ` +
58
+ `safeCols=${safeCols} safeRows=${safeRows} ` +
59
+ `RIGHT_GAP=${rightMargin} BOTTOM_GAP=${bottomMargin}`);
60
+ }
61
+ });
30
62
  return {
31
63
  safeCols,
32
64
  safeRows,
@@ -1 +1 @@
1
- {"version":3,"file":"safeViewport.js","sourceRoot":"","sources":["../../../src/tui_mk1/viewport/safeViewport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,UAAkB;IACpE,6BAA6B;IAC7B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAChD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAClD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAE/C,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,mBAAmB;IACnB,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,WAAW,GAAG,CAAC,CAAC;QAChB,YAAY,GAAG,CAAC,CAAC;IACnB,CAAC;SAAM,CAAC;QACN,gCAAgC;QAChC,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;IAED,oBAAoB;IACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,WAAW,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,UAAU,GAAG,YAAY,CAAC,CAAC;IAEzD,OAAO;QACL,QAAQ;QACR,QAAQ;QACR,WAAW;QACX,YAAY;QACZ,UAAU;QACV,UAAU;KACX,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"safeViewport.js","sourceRoot":"","sources":["../../../src/tui_mk1/viewport/safeViewport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAWtC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB,EAAE,UAAkB;IACpE,+DAA+D;IAC/D,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,MAAM,QAAQ,GAAG,EAAE,CAAC;IAEpB,wDAAwD;IACxD,yEAAyE;IACzE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wCAAwC;IAC/H,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gCAAgC;IAE3H,+BAA+B;IAC/B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;IAC/C,IAAI,WAAW,GAAG,SAAS,CAAC;IAC5B,IAAI,YAAY,GAAG,UAAU,CAAC;IAE9B,IAAI,UAAU,KAAK,KAAK,EAAE,CAAC;QACzB,WAAW,GAAG,CAAC,CAAC,CAAC,iCAAiC;QAClD,YAAY,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,kDAAkD;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,GAAG,WAAW,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,GAAG,YAAY,CAAC,CAAC;IAE/D,8CAA8C;IAC9C,IAAI,QAAQ,GAAG,UAAU,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,oDAAoD,QAAQ,eAAe,UAAU,cAAc,WAAW,EAAE,CAAC,CAAC;IACpI,CAAC;IAED,IAAI,QAAQ,GAAG,UAAU,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,oDAAoD,QAAQ,eAAe,UAAU,eAAe,YAAY,EAAE,CAAC,CAAC;IACtI,CAAC;IAED,iEAAiE;IACjE,6FAA6F;IAC7F,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE;QAC1C,UAAU,CAAC,KAAK,CACd,wBAAwB,UAAU,SAAS,UAAU,GAAG;YACxD,YAAY,QAAQ,aAAa,QAAQ,GAAG;YAC5C,aAAa,WAAW,eAAe,YAAY,EAAE,CACtD,CAAC;IACJ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QACZ,qDAAqD;QACrD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,KAAK,CACV,wBAAwB,UAAU,SAAS,UAAU,GAAG;gBACxD,YAAY,QAAQ,aAAa,QAAQ,GAAG;gBAC5C,aAAa,WAAW,eAAe,YAAY,EAAE,CACtD,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ;QACR,QAAQ;QACR,WAAW;QACX,YAAY;QACZ,UAAU;QACV,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * MK2 Kernel - Screen initialization and lifecycle management
3
+ *
4
+ * MK2 Phase 1: Frame Lock
5
+ * - Clean screen initialization
6
+ * - Lifecycle management
7
+ * - No command logic, no adapters, no AI features
8
+ */
9
+ import { type Widgets } from 'neo-blessed';
10
+ export interface KernelOptions {
11
+ onRebuild?: (cols: number, rows: number) => void | Promise<void>;
12
+ }
13
+ export declare class MK2Kernel {
14
+ private screen;
15
+ /**
16
+ * Get the screen instance
17
+ */
18
+ getScreen(): Widgets.Screen | null;
19
+ /**
20
+ * Start kernel - initialize screen
21
+ */
22
+ start(renderFn: () => void, options?: KernelOptions): Promise<void>;
23
+ /**
24
+ * Stop kernel - cleanup
25
+ */
26
+ stop(): void;
27
+ }
28
+ //# sourceMappingURL=kernel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../src/tui_mk2/kernel.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AA6CpD,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAA+B;IAE7C;;OAEG;IACH,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwE7E;;OAEG;IACH,IAAI,IAAI,IAAI;CAWb"}