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.
- package/dist/index.js +16 -1
- package/dist/index.js.map +1 -1
- package/dist/tui_mk1/kernel.d.ts.map +1 -1
- package/dist/tui_mk1/kernel.js +107 -4
- package/dist/tui_mk1/kernel.js.map +1 -1
- package/dist/tui_mk1/layout/layoutEngine.d.ts +38 -19
- package/dist/tui_mk1/layout/layoutEngine.d.ts.map +1 -1
- package/dist/tui_mk1/layout/layoutEngine.js +521 -228
- package/dist/tui_mk1/layout/layoutEngine.js.map +1 -1
- package/dist/tui_mk1/log.d.ts +23 -0
- package/dist/tui_mk1/log.d.ts.map +1 -0
- package/dist/tui_mk1/log.js +125 -0
- package/dist/tui_mk1/log.js.map +1 -0
- package/dist/tui_mk1/logger.d.ts.map +1 -1
- package/dist/tui_mk1/logger.js +20 -10
- package/dist/tui_mk1/logger.js.map +1 -1
- package/dist/tui_mk1/mk1App.d.ts +13 -18
- package/dist/tui_mk1/mk1App.d.ts.map +1 -1
- package/dist/tui_mk1/mk1App.js +334 -157
- package/dist/tui_mk1/mk1App.js.map +1 -1
- package/dist/tui_mk1/resizeController.d.ts.map +1 -1
- package/dist/tui_mk1/resizeController.js +15 -1
- package/dist/tui_mk1/resizeController.js.map +1 -1
- package/dist/tui_mk1/stdoutGuard.d.ts.map +1 -1
- package/dist/tui_mk1/stdoutGuard.js +7 -0
- package/dist/tui_mk1/stdoutGuard.js.map +1 -1
- package/dist/tui_mk1/terminalRestore.d.ts.map +1 -1
- package/dist/tui_mk1/terminalRestore.js +19 -1
- package/dist/tui_mk1/terminalRestore.js.map +1 -1
- package/dist/tui_mk1/ui/offenderScanner.d.ts +31 -0
- package/dist/tui_mk1/ui/offenderScanner.d.ts.map +1 -0
- package/dist/tui_mk1/ui/offenderScanner.js +80 -0
- package/dist/tui_mk1/ui/offenderScanner.js.map +1 -0
- package/dist/tui_mk1/ui/safe.d.ts +9 -0
- package/dist/tui_mk1/ui/safe.d.ts.map +1 -0
- package/dist/tui_mk1/ui/safe.js +29 -0
- package/dist/tui_mk1/ui/safe.js.map +1 -0
- package/dist/tui_mk1/ui/safeText.d.ts +22 -0
- package/dist/tui_mk1/ui/safeText.d.ts.map +1 -0
- package/dist/tui_mk1/ui/safeText.js +50 -0
- package/dist/tui_mk1/ui/safeText.js.map +1 -0
- package/dist/tui_mk1/ui/uiBuilder.d.ts +44 -0
- package/dist/tui_mk1/ui/uiBuilder.d.ts.map +1 -0
- package/dist/tui_mk1/ui/uiBuilder.js +467 -0
- package/dist/tui_mk1/ui/uiBuilder.js.map +1 -0
- package/dist/tui_mk1/viewport/safeViewport.d.ts +10 -1
- package/dist/tui_mk1/viewport/safeViewport.d.ts.map +1 -1
- package/dist/tui_mk1/viewport/safeViewport.js +47 -15
- package/dist/tui_mk1/viewport/safeViewport.js.map +1 -1
- package/dist/tui_mk2/kernel.d.ts +28 -0
- package/dist/tui_mk2/kernel.d.ts.map +1 -0
- package/dist/tui_mk2/kernel.js +138 -0
- package/dist/tui_mk2/kernel.js.map +1 -0
- package/dist/tui_mk2/mk2App.d.ts +33 -0
- package/dist/tui_mk2/mk2App.d.ts.map +1 -0
- package/dist/tui_mk2/mk2App.js +135 -0
- package/dist/tui_mk2/mk2App.js.map +1 -0
- package/package.json +8 -7
- package/dist/tui_mk1/ui/panels/createSection.d.ts +0 -18
- package/dist/tui_mk1/ui/panels/createSection.d.ts.map +0 -1
- package/dist/tui_mk1/ui/panels/createSection.js +0 -42
- package/dist/tui_mk1/ui/panels/createSection.js.map +0 -1
- package/dist/tui_mk1/ui/panels.d.ts +0 -23
- package/dist/tui_mk1/ui/panels.d.ts.map +0 -1
- package/dist/tui_mk1/ui/panels.js +0 -108
- package/dist/tui_mk1/ui/panels.js.map +0 -1
- package/dist/tui_mk1/ui/render/sectionRenderer.d.ts +0 -21
- package/dist/tui_mk1/ui/render/sectionRenderer.d.ts.map +0 -1
- package/dist/tui_mk1/ui/render/sectionRenderer.js +0 -32
- package/dist/tui_mk1/ui/render/sectionRenderer.js.map +0 -1
- package/dist/tui_mk1/ui/widgetManager.d.ts +0 -58
- package/dist/tui_mk1/ui/widgetManager.d.ts.map +0 -1
- package/dist/tui_mk1/ui/widgetManager.js +0 -197
- package/dist/tui_mk1/ui/widgetManager.js.map +0 -1
- package/dist/ui/boot/sequence.d.ts +0 -10
- package/dist/ui/boot/sequence.d.ts.map +0 -1
- package/dist/ui/boot/sequence.js +0 -171
- package/dist/ui/boot/sequence.js.map +0 -1
- package/dist/ui/constraints/layoutSpec.d.ts +0 -47
- package/dist/ui/constraints/layoutSpec.d.ts.map +0 -1
- package/dist/ui/constraints/layoutSpec.js +0 -60
- package/dist/ui/constraints/layoutSpec.js.map +0 -1
- package/dist/ui/constraints/unknownHandling.d.ts +0 -29
- package/dist/ui/constraints/unknownHandling.d.ts.map +0 -1
- package/dist/ui/constraints/unknownHandling.js +0 -60
- package/dist/ui/constraints/unknownHandling.js.map +0 -1
- package/dist/ui/drilldowns/feed.d.ts +0 -11
- package/dist/ui/drilldowns/feed.d.ts.map +0 -1
- package/dist/ui/drilldowns/feed.js +0 -68
- package/dist/ui/drilldowns/feed.js.map +0 -1
- package/dist/ui/drilldowns/index.d.ts +0 -7
- package/dist/ui/drilldowns/index.d.ts.map +0 -1
- package/dist/ui/drilldowns/index.js +0 -8
- package/dist/ui/drilldowns/index.js.map +0 -1
- package/dist/ui/drilldowns/posture.d.ts +0 -11
- package/dist/ui/drilldowns/posture.d.ts.map +0 -1
- package/dist/ui/drilldowns/posture.js +0 -74
- package/dist/ui/drilldowns/posture.js.map +0 -1
- package/dist/ui/intelligence-posture-view.d.ts +0 -22
- package/dist/ui/intelligence-posture-view.d.ts.map +0 -1
- package/dist/ui/intelligence-posture-view.js +0 -169
- package/dist/ui/intelligence-posture-view.js.map +0 -1
- package/dist/ui/navigation/keymaps.d.ts +0 -26
- package/dist/ui/navigation/keymaps.d.ts.map +0 -1
- package/dist/ui/navigation/keymaps.js +0 -135
- package/dist/ui/navigation/keymaps.js.map +0 -1
- package/dist/ui/navigation/palette.d.ts +0 -10
- package/dist/ui/navigation/palette.d.ts.map +0 -1
- package/dist/ui/navigation/palette.js +0 -133
- package/dist/ui/navigation/palette.js.map +0 -1
- package/dist/ui/navigation/state.d.ts +0 -47
- package/dist/ui/navigation/state.d.ts.map +0 -1
- package/dist/ui/navigation/state.js +0 -84
- package/dist/ui/navigation/state.js.map +0 -1
- package/dist/ui/navigation/types.d.ts +0 -38
- package/dist/ui/navigation/types.d.ts.map +0 -1
- package/dist/ui/navigation/types.js +0 -36
- package/dist/ui/navigation/types.js.map +0 -1
- package/dist/ui/panels/active-assets.d.ts +0 -12
- package/dist/ui/panels/active-assets.d.ts.map +0 -1
- package/dist/ui/panels/active-assets.js +0 -83
- package/dist/ui/panels/active-assets.js.map +0 -1
- package/dist/ui/panels/capability-flags.d.ts +0 -12
- package/dist/ui/panels/capability-flags.d.ts.map +0 -1
- package/dist/ui/panels/capability-flags.js +0 -59
- package/dist/ui/panels/capability-flags.js.map +0 -1
- package/dist/ui/panels/command-surface.d.ts +0 -12
- package/dist/ui/panels/command-surface.d.ts.map +0 -1
- package/dist/ui/panels/command-surface.js +0 -55
- package/dist/ui/panels/command-surface.js.map +0 -1
- package/dist/ui/panels/network-origin.d.ts +0 -12
- package/dist/ui/panels/network-origin.d.ts.map +0 -1
- package/dist/ui/panels/network-origin.js +0 -79
- package/dist/ui/panels/network-origin.js.map +0 -1
- package/dist/ui/panels/operations-feed.d.ts +0 -12
- package/dist/ui/panels/operations-feed.d.ts.map +0 -1
- package/dist/ui/panels/operations-feed.js +0 -90
- package/dist/ui/panels/operations-feed.js.map +0 -1
- package/dist/ui/panels/posture.d.ts +0 -12
- package/dist/ui/panels/posture.d.ts.map +0 -1
- package/dist/ui/panels/posture.js +0 -84
- package/dist/ui/panels/posture.js.map +0 -1
- package/dist/ui/panels/resources.d.ts +0 -11
- package/dist/ui/panels/resources.d.ts.map +0 -1
- package/dist/ui/panels/resources.js +0 -88
- package/dist/ui/panels/resources.js.map +0 -1
- package/dist/ui/primitives/Panel.d.ts +0 -25
- package/dist/ui/primitives/Panel.d.ts.map +0 -1
- package/dist/ui/primitives/Panel.js +0 -59
- package/dist/ui/primitives/Panel.js.map +0 -1
- package/dist/ui/rendering/metricRenderer.d.ts +0 -24
- package/dist/ui/rendering/metricRenderer.d.ts.map +0 -1
- package/dist/ui/rendering/metricRenderer.js +0 -86
- package/dist/ui/rendering/metricRenderer.js.map +0 -1
- package/dist/ui/runtime/hub.d.ts +0 -12
- package/dist/ui/runtime/hub.d.ts.map +0 -1
- package/dist/ui/runtime/hub.js +0 -486
- package/dist/ui/runtime/hub.js.map +0 -1
- package/dist/ui/runtime/hubValidation.d.ts +0 -23
- package/dist/ui/runtime/hubValidation.d.ts.map +0 -1
- package/dist/ui/runtime/hubValidation.js +0 -90
- package/dist/ui/runtime/hubValidation.js.map +0 -1
- package/dist/ui/runtime/index.d.ts +0 -29
- package/dist/ui/runtime/index.d.ts.map +0 -1
- package/dist/ui/runtime/index.js +0 -297
- package/dist/ui/runtime/index.js.map +0 -1
- package/dist/ui/runtime/no-tui.d.ts +0 -12
- package/dist/ui/runtime/no-tui.d.ts.map +0 -1
- package/dist/ui/runtime/no-tui.js +0 -77
- package/dist/ui/runtime/no-tui.js.map +0 -1
- package/dist/ui/runtime/state-builder.d.ts +0 -13
- package/dist/ui/runtime/state-builder.d.ts.map +0 -1
- package/dist/ui/runtime/state-builder.js +0 -114
- package/dist/ui/runtime/state-builder.js.map +0 -1
- package/dist/ui/runtime/terminalSizeCheck.d.ts +0 -10
- package/dist/ui/runtime/terminalSizeCheck.d.ts.map +0 -1
- package/dist/ui/runtime/terminalSizeCheck.js +0 -51
- package/dist/ui/runtime/terminalSizeCheck.js.map +0 -1
- package/dist/ui/runtime/tuiLogGate.d.ts +0 -22
- package/dist/ui/runtime/tuiLogGate.d.ts.map +0 -1
- package/dist/ui/runtime/tuiLogGate.js +0 -68
- package/dist/ui/runtime/tuiLogGate.js.map +0 -1
- package/dist/ui/state/types.d.ts +0 -72
- package/dist/ui/state/types.d.ts.map +0 -1
- package/dist/ui/state/types.js +0 -6
- package/dist/ui/state/types.js.map +0 -1
- package/dist/ui/theme/borders.d.ts +0 -20
- package/dist/ui/theme/borders.d.ts.map +0 -1
- package/dist/ui/theme/borders.js +0 -55
- package/dist/ui/theme/borders.js.map +0 -1
- package/dist/ui/theme/tokens.d.ts +0 -28
- package/dist/ui/theme/tokens.d.ts.map +0 -1
- package/dist/ui/theme/tokens.js +0 -50
- package/dist/ui/theme/tokens.js.map +0 -1
- package/dist/ui/theme/typography.d.ts +0 -14
- package/dist/ui/theme/typography.d.ts.map +0 -1
- package/dist/ui/theme/typography.js +0 -30
- package/dist/ui/theme/typography.js.map +0 -1
- package/dist/ui/v3/collectors/assets.collector.d.ts +0 -20
- package/dist/ui/v3/collectors/assets.collector.d.ts.map +0 -1
- package/dist/ui/v3/collectors/assets.collector.js +0 -80
- package/dist/ui/v3/collectors/assets.collector.js.map +0 -1
- package/dist/ui/v3/collectors/capabilities.collector.d.ts +0 -18
- package/dist/ui/v3/collectors/capabilities.collector.d.ts.map +0 -1
- package/dist/ui/v3/collectors/capabilities.collector.js +0 -113
- package/dist/ui/v3/collectors/capabilities.collector.js.map +0 -1
- package/dist/ui/v3/collectors/network.collector.d.ts +0 -18
- package/dist/ui/v3/collectors/network.collector.d.ts.map +0 -1
- package/dist/ui/v3/collectors/network.collector.js +0 -37
- package/dist/ui/v3/collectors/network.collector.js.map +0 -1
- package/dist/ui/v3/collectors/posture.derive.d.ts +0 -24
- package/dist/ui/v3/collectors/posture.derive.d.ts.map +0 -1
- package/dist/ui/v3/collectors/posture.derive.js +0 -57
- package/dist/ui/v3/collectors/posture.derive.js.map +0 -1
- package/dist/ui/v3/collectors/resources.d.ts +0 -23
- package/dist/ui/v3/collectors/resources.d.ts.map +0 -1
- package/dist/ui/v3/collectors/resources.js +0 -136
- package/dist/ui/v3/collectors/resources.js.map +0 -1
- package/dist/ui/v3/commands/commandEngine.d.ts +0 -77
- package/dist/ui/v3/commands/commandEngine.d.ts.map +0 -1
- package/dist/ui/v3/commands/commandEngine.js +0 -3289
- package/dist/ui/v3/commands/commandEngine.js.map +0 -1
- package/dist/ui/v3/commands/commandResult.d.ts +0 -25
- package/dist/ui/v3/commands/commandResult.d.ts.map +0 -1
- package/dist/ui/v3/commands/commandResult.js +0 -19
- package/dist/ui/v3/commands/commandResult.js.map +0 -1
- package/dist/ui/v3/commands/diagnose.d.ts +0 -17
- package/dist/ui/v3/commands/diagnose.d.ts.map +0 -1
- package/dist/ui/v3/commands/diagnose.js +0 -62
- package/dist/ui/v3/commands/diagnose.js.map +0 -1
- package/dist/ui/v3/commands/errorClassifier.d.ts +0 -23
- package/dist/ui/v3/commands/errorClassifier.d.ts.map +0 -1
- package/dist/ui/v3/commands/errorClassifier.js +0 -63
- package/dist/ui/v3/commands/errorClassifier.js.map +0 -1
- package/dist/ui/v3/commands/parser.d.ts +0 -14
- package/dist/ui/v3/commands/parser.d.ts.map +0 -1
- package/dist/ui/v3/commands/parser.js +0 -29
- package/dist/ui/v3/commands/parser.js.map +0 -1
- package/dist/ui/v3/commands/router.d.ts +0 -13
- package/dist/ui/v3/commands/router.d.ts.map +0 -1
- package/dist/ui/v3/commands/router.js +0 -150
- package/dist/ui/v3/commands/router.js.map +0 -1
- package/dist/ui/v3/config/gateway.d.ts +0 -40
- package/dist/ui/v3/config/gateway.d.ts.map +0 -1
- package/dist/ui/v3/config/gateway.js +0 -113
- package/dist/ui/v3/config/gateway.js.map +0 -1
- package/dist/ui/v3/core/event.d.ts +0 -19
- package/dist/ui/v3/core/event.d.ts.map +0 -1
- package/dist/ui/v3/core/event.js +0 -7
- package/dist/ui/v3/core/event.js.map +0 -1
- package/dist/ui/v3/core/eventBus.d.ts +0 -39
- package/dist/ui/v3/core/eventBus.d.ts.map +0 -1
- package/dist/ui/v3/core/eventBus.js +0 -79
- package/dist/ui/v3/core/eventBus.js.map +0 -1
- package/dist/ui/v3/core/feedStore.d.ts +0 -34
- package/dist/ui/v3/core/feedStore.d.ts.map +0 -1
- package/dist/ui/v3/core/feedStore.js +0 -46
- package/dist/ui/v3/core/feedStore.js.map +0 -1
- package/dist/ui/v3/core/logger.d.ts +0 -40
- package/dist/ui/v3/core/logger.d.ts.map +0 -1
- package/dist/ui/v3/core/logger.js +0 -191
- package/dist/ui/v3/core/logger.js.map +0 -1
- package/dist/ui/v3/core/opEvent.d.ts +0 -15
- package/dist/ui/v3/core/opEvent.d.ts.map +0 -1
- package/dist/ui/v3/core/opEvent.js +0 -7
- package/dist/ui/v3/core/opEvent.js.map +0 -1
- package/dist/ui/v3/index.d.ts +0 -8
- package/dist/ui/v3/index.d.ts.map +0 -1
- package/dist/ui/v3/index.js +0 -51
- package/dist/ui/v3/index.js.map +0 -1
- package/dist/ui/v3/runtime/moduleConfig.d.ts +0 -21
- package/dist/ui/v3/runtime/moduleConfig.d.ts.map +0 -1
- package/dist/ui/v3/runtime/moduleConfig.js +0 -41
- package/dist/ui/v3/runtime/moduleConfig.js.map +0 -1
- package/dist/ui/v3/section0/index.d.ts +0 -22
- package/dist/ui/v3/section0/index.d.ts.map +0 -1
- package/dist/ui/v3/section0/index.js +0 -88
- package/dist/ui/v3/section0/index.js.map +0 -1
- package/dist/ui/v3/section0/runtime/createScreen.d.ts +0 -27
- package/dist/ui/v3/section0/runtime/createScreen.d.ts.map +0 -1
- package/dist/ui/v3/section0/runtime/createScreen.js +0 -55
- package/dist/ui/v3/section0/runtime/createScreen.js.map +0 -1
- package/dist/ui/v3/section0/runtime/lifecycle.d.ts +0 -53
- package/dist/ui/v3/section0/runtime/lifecycle.d.ts.map +0 -1
- package/dist/ui/v3/section0/runtime/lifecycle.js +0 -172
- package/dist/ui/v3/section0/runtime/lifecycle.js.map +0 -1
- package/dist/ui/v3/section1/index.d.ts +0 -19
- package/dist/ui/v3/section1/index.d.ts.map +0 -1
- package/dist/ui/v3/section1/index.js +0 -413
- package/dist/ui/v3/section1/index.js.map +0 -1
- package/dist/ui/v3/section1/runtime/commandLine.d.ts +0 -49
- package/dist/ui/v3/section1/runtime/commandLine.d.ts.map +0 -1
- package/dist/ui/v3/section1/runtime/commandLine.js +0 -183
- package/dist/ui/v3/section1/runtime/commandLine.js.map +0 -1
- package/dist/ui/v3/section1/runtime/focusLock.d.ts +0 -24
- package/dist/ui/v3/section1/runtime/focusLock.d.ts.map +0 -1
- package/dist/ui/v3/section1/runtime/focusLock.js +0 -44
- package/dist/ui/v3/section1/runtime/focusLock.js.map +0 -1
- package/dist/ui/v3/state/assertUiState.d.ts +0 -27
- package/dist/ui/v3/state/assertUiState.d.ts.map +0 -1
- package/dist/ui/v3/state/assertUiState.js +0 -89
- package/dist/ui/v3/state/assertUiState.js.map +0 -1
- package/dist/ui/v3/state/capabilitiesStore.d.ts +0 -54
- package/dist/ui/v3/state/capabilitiesStore.d.ts.map +0 -1
- package/dist/ui/v3/state/capabilitiesStore.js +0 -76
- package/dist/ui/v3/state/capabilitiesStore.js.map +0 -1
- package/dist/ui/v3/state/defaultState.d.ts +0 -19
- package/dist/ui/v3/state/defaultState.d.ts.map +0 -1
- package/dist/ui/v3/state/defaultState.js +0 -28
- package/dist/ui/v3/state/defaultState.js.map +0 -1
- package/dist/ui/v3/state/gatewayConnectionStore.d.ts +0 -72
- package/dist/ui/v3/state/gatewayConnectionStore.d.ts.map +0 -1
- package/dist/ui/v3/state/gatewayConnectionStore.js +0 -108
- package/dist/ui/v3/state/gatewayConnectionStore.js.map +0 -1
- package/dist/ui/v3/state/initializePostureState.d.ts +0 -23
- package/dist/ui/v3/state/initializePostureState.d.ts.map +0 -1
- package/dist/ui/v3/state/initializePostureState.js +0 -41
- package/dist/ui/v3/state/initializePostureState.js.map +0 -1
- package/dist/ui/v3/state/panelStore.d.ts +0 -80
- package/dist/ui/v3/state/panelStore.d.ts.map +0 -1
- package/dist/ui/v3/state/panelStore.js +0 -131
- package/dist/ui/v3/state/panelStore.js.map +0 -1
- package/dist/ui/v3/state/resourcesData.d.ts +0 -15
- package/dist/ui/v3/state/resourcesData.d.ts.map +0 -1
- package/dist/ui/v3/state/resourcesData.js +0 -7
- package/dist/ui/v3/state/resourcesData.js.map +0 -1
- package/dist/ui/v3/state/uiState.d.ts +0 -22
- package/dist/ui/v3/state/uiState.d.ts.map +0 -1
- package/dist/ui/v3/state/uiState.js +0 -13
- package/dist/ui/v3/state/uiState.js.map +0 -1
- package/dist/ui/v3/state/uiStateBuilder.d.ts +0 -32
- package/dist/ui/v3/state/uiStateBuilder.d.ts.map +0 -1
- package/dist/ui/v3/state/uiStateBuilder.js +0 -73
- package/dist/ui/v3/state/uiStateBuilder.js.map +0 -1
- package/dist/ui/v3/state/uiStateTypes.d.ts +0 -59
- package/dist/ui/v3/state/uiStateTypes.d.ts.map +0 -1
- package/dist/ui/v3/state/uiStateTypes.js +0 -8
- package/dist/ui/v3/state/uiStateTypes.js.map +0 -1
- package/dist/ui/v3/state/value.d.ts +0 -80
- package/dist/ui/v3/state/value.d.ts.map +0 -1
- package/dist/ui/v3/state/value.js +0 -96
- package/dist/ui/v3/state/value.js.map +0 -1
- package/dist/ui/v3/tui/geometry.d.ts +0 -83
- package/dist/ui/v3/tui/geometry.d.ts.map +0 -1
- package/dist/ui/v3/tui/geometry.js +0 -201
- package/dist/ui/v3/tui/geometry.js.map +0 -1
- package/dist/ui/v3/tui/startTui.d.ts +0 -37
- package/dist/ui/v3/tui/startTui.d.ts.map +0 -1
- package/dist/ui/v3/tui/startTui.js +0 -61
- package/dist/ui/v3/tui/startTui.js.map +0 -1
- package/dist/ui/v3/tui/terminalMode.d.ts +0 -31
- package/dist/ui/v3/tui/terminalMode.d.ts.map +0 -1
- package/dist/ui/v3/tui/terminalMode.js +0 -76
- package/dist/ui/v3/tui/terminalMode.js.map +0 -1
- package/dist/ui/v3/ui/debugUtils.d.ts +0 -67
- package/dist/ui/v3/ui/debugUtils.d.ts.map +0 -1
- package/dist/ui/v3/ui/debugUtils.js +0 -238
- package/dist/ui/v3/ui/debugUtils.js.map +0 -1
- package/dist/ui/v3/ui/focus.d.ts +0 -28
- package/dist/ui/v3/ui/focus.d.ts.map +0 -1
- package/dist/ui/v3/ui/focus.js +0 -38
- package/dist/ui/v3/ui/focus.js.map +0 -1
- package/dist/ui/v3/ui/layout/hubLayout.d.ts +0 -43
- package/dist/ui/v3/ui/layout/hubLayout.d.ts.map +0 -1
- package/dist/ui/v3/ui/layout/hubLayout.js +0 -170
- package/dist/ui/v3/ui/layout/hubLayout.js.map +0 -1
- package/dist/ui/v3/ui/layout/phase1Layout.d.ts +0 -63
- package/dist/ui/v3/ui/layout/phase1Layout.d.ts.map +0 -1
- package/dist/ui/v3/ui/layout/phase1Layout.js +0 -274
- package/dist/ui/v3/ui/layout/phase1Layout.js.map +0 -1
- package/dist/ui/v3/ui/layout/phase1Layout.test.d.ts +0 -5
- package/dist/ui/v3/ui/layout/phase1Layout.test.d.ts.map +0 -1
- package/dist/ui/v3/ui/layout/phase1Layout.test.js +0 -120
- package/dist/ui/v3/ui/layout/phase1Layout.test.js.map +0 -1
- package/dist/ui/v3/ui/minimalRuntime.d.ts +0 -14
- package/dist/ui/v3/ui/minimalRuntime.d.ts.map +0 -1
- package/dist/ui/v3/ui/minimalRuntime.js +0 -111
- package/dist/ui/v3/ui/minimalRuntime.js.map +0 -1
- package/dist/ui/v3/ui/panels/AssetsPanel.d.ts +0 -17
- package/dist/ui/v3/ui/panels/AssetsPanel.d.ts.map +0 -1
- package/dist/ui/v3/ui/panels/AssetsPanel.js +0 -53
- package/dist/ui/v3/ui/panels/AssetsPanel.js.map +0 -1
- package/dist/ui/v3/ui/panels/CapabilitiesPanel.d.ts +0 -20
- package/dist/ui/v3/ui/panels/CapabilitiesPanel.d.ts.map +0 -1
- package/dist/ui/v3/ui/panels/CapabilitiesPanel.js +0 -67
- package/dist/ui/v3/ui/panels/CapabilitiesPanel.js.map +0 -1
- package/dist/ui/v3/ui/panels/NetworkPanel.d.ts +0 -31
- package/dist/ui/v3/ui/panels/NetworkPanel.d.ts.map +0 -1
- package/dist/ui/v3/ui/panels/NetworkPanel.js +0 -153
- package/dist/ui/v3/ui/panels/NetworkPanel.js.map +0 -1
- package/dist/ui/v3/ui/panels/PosturePanel.d.ts +0 -16
- package/dist/ui/v3/ui/panels/PosturePanel.d.ts.map +0 -1
- package/dist/ui/v3/ui/panels/PosturePanel.js +0 -60
- package/dist/ui/v3/ui/panels/PosturePanel.js.map +0 -1
- package/dist/ui/v3/ui/panels/ResourcesPanel.d.ts +0 -20
- package/dist/ui/v3/ui/panels/ResourcesPanel.d.ts.map +0 -1
- package/dist/ui/v3/ui/panels/ResourcesPanel.js +0 -66
- package/dist/ui/v3/ui/panels/ResourcesPanel.js.map +0 -1
- package/dist/ui/v3/ui/phase1Runtime.d.ts +0 -29
- package/dist/ui/v3/ui/phase1Runtime.d.ts.map +0 -1
- package/dist/ui/v3/ui/phase1Runtime.js +0 -1648
- package/dist/ui/v3/ui/phase1Runtime.js.map +0 -1
- package/dist/ui/v3/ui/phase1RuntimeClean.d.ts +0 -34
- package/dist/ui/v3/ui/phase1RuntimeClean.d.ts.map +0 -1
- package/dist/ui/v3/ui/phase1RuntimeClean.js +0 -1841
- package/dist/ui/v3/ui/phase1RuntimeClean.js.map +0 -1
- package/dist/ui/v3/ui/primitives/Panel.d.ts +0 -39
- package/dist/ui/v3/ui/primitives/Panel.d.ts.map +0 -1
- package/dist/ui/v3/ui/primitives/Panel.js +0 -105
- package/dist/ui/v3/ui/primitives/Panel.js.map +0 -1
- package/dist/ui/v3/ui/theme.d.ts +0 -37
- package/dist/ui/v3/ui/theme.d.ts.map +0 -1
- package/dist/ui/v3/ui/theme.js +0 -40
- package/dist/ui/v3/ui/theme.js.map +0 -1
- package/dist/ui/v3/ui/uiRuntime.d.ts +0 -40
- package/dist/ui/v3/ui/uiRuntime.d.ts.map +0 -1
- package/dist/ui/v3/ui/uiRuntime.js +0 -60
- package/dist/ui/v3/ui/uiRuntime.js.map +0 -1
- package/dist/ui/v3/ui/widgets/CommandLine.d.ts +0 -26
- package/dist/ui/v3/ui/widgets/CommandLine.d.ts.map +0 -1
- package/dist/ui/v3/ui/widgets/CommandLine.js +0 -67
- package/dist/ui/v3/ui/widgets/CommandLine.js.map +0 -1
- package/dist/ui/v3/v1Adapters/agents.d.ts +0 -72
- package/dist/ui/v3/v1Adapters/agents.d.ts.map +0 -1
- package/dist/ui/v3/v1Adapters/agents.js +0 -182
- package/dist/ui/v3/v1Adapters/agents.js.map +0 -1
- package/dist/ui/v3/v1Adapters/config.d.ts +0 -67
- package/dist/ui/v3/v1Adapters/config.d.ts.map +0 -1
- package/dist/ui/v3/v1Adapters/config.js +0 -78
- package/dist/ui/v3/v1Adapters/config.js.map +0 -1
- package/dist/ui/v3/v1Adapters/connect.d.ts +0 -77
- package/dist/ui/v3/v1Adapters/connect.d.ts.map +0 -1
- package/dist/ui/v3/v1Adapters/connect.js +0 -576
- package/dist/ui/v3/v1Adapters/connect.js.map +0 -1
- package/dist/ui/v3/v1Adapters/httpDebug.d.ts +0 -19
- package/dist/ui/v3/v1Adapters/httpDebug.d.ts.map +0 -1
- package/dist/ui/v3/v1Adapters/httpDebug.js +0 -60
- package/dist/ui/v3/v1Adapters/httpDebug.js.map +0 -1
- package/dist/ui/v3/v1Adapters/runs.d.ts +0 -77
- package/dist/ui/v3/v1Adapters/runs.d.ts.map +0 -1
- package/dist/ui/v3/v1Adapters/runs.js +0 -339
- package/dist/ui/v3/v1Adapters/runs.js.map +0 -1
- package/dist/ui/v4/engine/renderFrame.d.ts +0 -47
- package/dist/ui/v4/engine/renderFrame.d.ts.map +0 -1
- package/dist/ui/v4/engine/renderFrame.js +0 -653
- package/dist/ui/v4/engine/renderFrame.js.map +0 -1
- package/dist/ui/v4/engine/resizeController.d.ts +0 -48
- package/dist/ui/v4/engine/resizeController.d.ts.map +0 -1
- package/dist/ui/v4/engine/resizeController.js +0 -285
- package/dist/ui/v4/engine/resizeController.js.map +0 -1
- package/dist/ui/v4/engine/safeViewport.d.ts +0 -47
- package/dist/ui/v4/engine/safeViewport.d.ts.map +0 -1
- package/dist/ui/v4/engine/safeViewport.js +0 -123
- package/dist/ui/v4/engine/safeViewport.js.map +0 -1
- package/dist/ui/v4/engine/terminalProfile.d.ts +0 -56
- package/dist/ui/v4/engine/terminalProfile.d.ts.map +0 -1
- package/dist/ui/v4/engine/terminalProfile.js +0 -115
- package/dist/ui/v4/engine/terminalProfile.js.map +0 -1
- package/dist/ui/v4/index.d.ts +0 -28
- package/dist/ui/v4/index.d.ts.map +0 -1
- package/dist/ui/v4/index.js +0 -993
- package/dist/ui/v4/index.js.map +0 -1
- package/dist/ui/v4/layout/layoutEngine.d.ts +0 -62
- package/dist/ui/v4/layout/layoutEngine.d.ts.map +0 -1
- package/dist/ui/v4/layout/layoutEngine.js +0 -294
- package/dist/ui/v4/layout/layoutEngine.js.map +0 -1
- package/dist/ui/v4/runtime/keepAlive.d.ts +0 -21
- package/dist/ui/v4/runtime/keepAlive.d.ts.map +0 -1
- package/dist/ui/v4/runtime/keepAlive.js +0 -149
- package/dist/ui/v4/runtime/keepAlive.js.map +0 -1
- package/dist/ui/v4/runtime/logger.d.ts +0 -35
- package/dist/ui/v4/runtime/logger.d.ts.map +0 -1
- package/dist/ui/v4/runtime/logger.js +0 -109
- package/dist/ui/v4/runtime/logger.js.map +0 -1
- package/dist/ui/v5/debug/assertNoOverflow.d.ts +0 -28
- package/dist/ui/v5/debug/assertNoOverflow.d.ts.map +0 -1
- package/dist/ui/v5/debug/assertNoOverflow.js +0 -63
- package/dist/ui/v5/debug/assertNoOverflow.js.map +0 -1
- package/dist/ui/v5/debug/debugCommands.d.ts +0 -20
- package/dist/ui/v5/debug/debugCommands.d.ts.map +0 -1
- package/dist/ui/v5/debug/debugCommands.js +0 -461
- package/dist/ui/v5/debug/debugCommands.js.map +0 -1
- package/dist/ui/v5/debugCommands.d.ts +0 -20
- package/dist/ui/v5/debugCommands.d.ts.map +0 -1
- package/dist/ui/v5/debugCommands.js +0 -81
- package/dist/ui/v5/debugCommands.js.map +0 -1
- package/dist/ui/v5/guardrails/stdoutGuard.d.ts +0 -23
- package/dist/ui/v5/guardrails/stdoutGuard.d.ts.map +0 -1
- package/dist/ui/v5/guardrails/stdoutGuard.js +0 -94
- package/dist/ui/v5/guardrails/stdoutGuard.js.map +0 -1
- package/dist/ui/v5/guardrails/terminalRestore.d.ts +0 -17
- package/dist/ui/v5/guardrails/terminalRestore.d.ts.map +0 -1
- package/dist/ui/v5/guardrails/terminalRestore.js +0 -47
- package/dist/ui/v5/guardrails/terminalRestore.js.map +0 -1
- package/dist/ui/v5/index.d.ts +0 -30
- package/dist/ui/v5/index.d.ts.map +0 -1
- package/dist/ui/v5/index.js +0 -243
- package/dist/ui/v5/index.js.map +0 -1
- package/dist/ui/v5/kernel/kernel.d.ts +0 -81
- package/dist/ui/v5/kernel/kernel.d.ts.map +0 -1
- package/dist/ui/v5/kernel/kernel.js +0 -339
- package/dist/ui/v5/kernel/kernel.js.map +0 -1
- package/dist/ui/v5/kernel.d.ts +0 -75
- package/dist/ui/v5/kernel.d.ts.map +0 -1
- package/dist/ui/v5/kernel.js +0 -289
- package/dist/ui/v5/kernel.js.map +0 -1
- package/dist/ui/v5/layout/clampRect.d.ts +0 -28
- package/dist/ui/v5/layout/clampRect.d.ts.map +0 -1
- package/dist/ui/v5/layout/clampRect.js +0 -45
- package/dist/ui/v5/layout/clampRect.js.map +0 -1
- package/dist/ui/v5/layout/layoutEngine.d.ts +0 -16
- package/dist/ui/v5/layout/layoutEngine.d.ts.map +0 -1
- package/dist/ui/v5/layout/layoutEngine.js +0 -99
- package/dist/ui/v5/layout/layoutEngine.js.map +0 -1
- package/dist/ui/v5/renderGate.d.ts +0 -19
- package/dist/ui/v5/renderGate.d.ts.map +0 -1
- package/dist/ui/v5/renderGate.js +0 -36
- package/dist/ui/v5/renderGate.js.map +0 -1
- package/dist/ui/v5/resize/resizeController.d.ts +0 -62
- package/dist/ui/v5/resize/resizeController.d.ts.map +0 -1
- package/dist/ui/v5/resize/resizeController.js +0 -141
- package/dist/ui/v5/resize/resizeController.js.map +0 -1
- package/dist/ui/v5/resizeController.d.ts +0 -55
- package/dist/ui/v5/resizeController.d.ts.map +0 -1
- package/dist/ui/v5/resizeController.js +0 -124
- package/dist/ui/v5/resizeController.js.map +0 -1
- package/dist/ui/v5/runtime/keepAlive.d.ts +0 -37
- package/dist/ui/v5/runtime/keepAlive.d.ts.map +0 -1
- package/dist/ui/v5/runtime/keepAlive.js +0 -122
- package/dist/ui/v5/runtime/keepAlive.js.map +0 -1
- package/dist/ui/v5/runtime/restoreTerminal.d.ts +0 -34
- package/dist/ui/v5/runtime/restoreTerminal.d.ts.map +0 -1
- package/dist/ui/v5/runtime/restoreTerminal.js +0 -100
- package/dist/ui/v5/runtime/restoreTerminal.js.map +0 -1
- package/dist/ui/v5/runtime/stdoutGuard.d.ts +0 -42
- package/dist/ui/v5/runtime/stdoutGuard.d.ts.map +0 -1
- package/dist/ui/v5/runtime/stdoutGuard.js +0 -156
- package/dist/ui/v5/runtime/stdoutGuard.js.map +0 -1
- package/dist/ui/v5/viewport/getViewport.d.ts +0 -23
- package/dist/ui/v5/viewport/getViewport.d.ts.map +0 -1
- package/dist/ui/v5/viewport/getViewport.js +0 -117
- package/dist/ui/v5/viewport/getViewport.js.map +0 -1
- package/dist/ui/v5/viewport.d.ts +0 -41
- package/dist/ui/v5/viewport.d.ts.map +0 -1
- package/dist/ui/v5/viewport.js +0 -90
- package/dist/ui/v5/viewport.js.map +0 -1
- package/dist/ui/widgets/flagRow.d.ts +0 -25
- package/dist/ui/widgets/flagRow.d.ts.map +0 -1
- package/dist/ui/widgets/flagRow.js +0 -57
- package/dist/ui/widgets/flagRow.js.map +0 -1
- package/dist/ui/widgets/index.d.ts +0 -9
- package/dist/ui/widgets/index.d.ts.map +0 -1
- package/dist/ui/widgets/index.js +0 -9
- package/dist/ui/widgets/index.js.map +0 -1
- package/dist/ui/widgets/meter.d.ts +0 -18
- package/dist/ui/widgets/meter.d.ts.map +0 -1
- package/dist/ui/widgets/meter.js +0 -38
- package/dist/ui/widgets/meter.js.map +0 -1
- package/dist/ui/widgets/miniMap.d.ts +0 -26
- package/dist/ui/widgets/miniMap.d.ts.map +0 -1
- package/dist/ui/widgets/miniMap.js +0 -94
- package/dist/ui/widgets/miniMap.js.map +0 -1
- package/dist/ui/widgets/sparkline.d.ts +0 -17
- package/dist/ui/widgets/sparkline.d.ts.map +0 -1
- package/dist/ui/widgets/sparkline.js +0 -65
- 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":"AAAA;;;;;;;GAOG;AAEH,OAAO,OAAO,MAAM,aAAa,CAAC;AAGlC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAGrC,OAAO,EAAE,cAAc,EAAY,aAAa,EAAE,MAAM,eAAe,CAAC;AAexE;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,MAAqB,EAAE,MAAsB;IACrE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO;IACT,CAAC;IAED,UAAU,CAAC,KAAK,CAAC,2BAA2B,MAAM,CAAC,YAAY,CAAC,MAAM,UAAU,CAAC,CAAC;IAElF,gEAAgE;IAChE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,qDAAqD;YACrD,IAAI,KAAK,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;gBACjD,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,IAAI,CAAC,4BAA4B,KAAK,EAAE,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;IACzB,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC;IAE3B,UAAU,CAAC,KAAK,CAAC,6CAA8C,MAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAC5H,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,QAAiB;IAC7C,MAAM,MAAM,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAEvC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAED,6CAA6C;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC;QAC5D,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,KAAK,CAAC,GAAG,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;QAEvD,uCAAuC;QACvC,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;YACvC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;QACjD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,IAAY;IACzC,MAAM,YAAY,GAA2B;QAC3C,OAAO,EAAE,2BAA2B;QACpC,SAAS,EAAE,yCAAyC;QACpD,MAAM,EAAE,0BAA0B;QAClC,OAAO,EAAE,6BAA6B;QACtC,YAAY,EAAE,0BAA0B;KACzC,CAAC;IACF,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,IAAgB,EAAE,MAAsC,EAAE,MAAe;IAChG,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,uEAAuE;IACvE,OAAO,OAAO,GAAG,WAAW,IAAI,CAAC,IAAI,WAAW,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;AACrG,CAAC;AAED;;;;;GAKG;AACH,SAAS,QAAQ,CACf,IAAoD,EACpD,QAAgB,EAChB,QAAgB;IAEhB,+EAA+E;IAC/E,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC;IAExD,2DAA2D;IAC3D,0DAA0D;IAC1D,uEAAuE;IACvE,uEAAuE;IACvE,gDAAgD;IAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,+BAA+B;IAClF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,gCAAgC;IAEnF,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;IACpD,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;IAEtD,wEAAwE;IACxE,IAAI,IAAI,GAAG,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;QACzC,UAAU,CAAC,KAAK,CAAC,wBAAwB,IAAI,qBAAqB,KAAK,SAAS,IAAI,CAAC,CAAC,gBAAgB,IAAI,GAAG,KAAK,eAAe,QAAQ,EAAE,CAAC,CAAC;IAC/I,CAAC;IACD,IAAI,GAAG,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;QACzC,UAAU,CAAC,KAAK,CAAC,uBAAuB,GAAG,sBAAsB,MAAM,SAAS,IAAI,CAAC,CAAC,iBAAiB,GAAG,GAAG,MAAM,eAAe,QAAQ,EAAE,CAAC,CAAC;IAChJ,CAAC;IAED,8CAA8C;IAC9C,IAAI,IAAI,GAAG,KAAK,IAAI,QAAQ,IAAI,GAAG,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAC;QACzD,UAAU,CAAC,KAAK,CAAC,qDAAqD,IAAI,UAAU,KAAK,QAAQ,GAAG,WAAW,MAAM,aAAa,QAAQ,aAAa,QAAQ,EAAE,CAAC,CAAC;IACrK,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACtC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CACrB,MAAsB,EACtB,IAAgB,EAChB,MAAsC,EACtC,eAAuB,EAAE,EACzB,MAAe;IAEf,MAAM,MAAM,GAAW;QACrB,YAAY,EAAE,EAAE;QAChB,YAAY;KACb,CAAC;IAEF,0CAA0C;IAC1C,sEAAsE;IACtE,kCAAkC;IAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;IAC7B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC;IAE7B,oFAAoF;IACpF,oDAAoD;IACpD,UAAU,CAAC,KAAK,CAAC,0CAA0C,QAAQ,aAAa,QAAQ,EAAE,CAAC,CAAC;IAE5F,qEAAqE;IACrE,kFAAkF;IAClF,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,cAAc,CAAC,aAAa,EAAE,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,yBAAyB;IAE7G,UAAU,CAAC,KAAK,CAAC,6BAA6B,UAAU,CAAC,IAAI,UAAU,UAAU,CAAC,KAAK,cAAc,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,aAAa,QAAQ,kBAAkB,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IAEtM,6EAA6E;IAC7E,IAAI,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,oDAAoD,UAAU,CAAC,IAAI,UAAU,UAAU,CAAC,KAAK,GAAG;YAChG,aAAa,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,KAAK,eAAe,QAAQ,EAAE,CACzE,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;QACzB,IAAI,EAAE,UAAU,CAAC,IAAI;QACrB,GAAG,EAAE,UAAU,CAAC,GAAG;QACnB,KAAK,EAAE,UAAU,CAAC,KAAK;QACvB,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,OAAO,EAAE,aAAa,EAAE,6BAA6B;QACrD,KAAK,EAAE;YACL,EAAE,EAAE,QAAQ;SACb;QACD,IAAI,EAAE,KAAK,EAAE,oDAAoD;KAC3D,CAAgB,CAAC;IAEzB,uDAAuD;IACvD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IAEvB,sCAAsC;IACtC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAEvB,gBAAgB;IAChB,MAAM,MAAM,GAAG;QACb,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;QACrC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE;QACzC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;QACnC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE;QAC3C,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;QACrC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,EAAE;KACvC,CAAC;IAEX,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,MAAM,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAA+B,CAAC,CAAC;QACzD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,UAAU,CAAC,IAAI,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;YACnD,SAAS;QACX,CAAC;QAEH,0CAA0C;QAC1C,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEvD,wFAAwF;QACxF,sEAAsE;QACtE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEnD,kDAAkD;QAClD,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;YACnF,MAAM,IAAI,KAAK,CAAC,6CAA6C,IAAI,UAAU,SAAS,QAAQ,QAAQ,UAAU,UAAU,WAAW,WAAW,EAAE,CAAC,CAAC;QACpJ,CAAC;QAED,UAAU,CAAC,KAAK,CAAC,gBAAgB,IAAI,UAAU,SAAS,QAAQ,QAAQ,UAAU,UAAU,WAAW,WAAW,cAAc,SAAS,GAAG,UAAU,EAAE,CAAC,CAAC;QAE1J,IAAI,MAAmB,CAAC;QAExB,sGAAsG;QACtG,iDAAiD;QACjD,MAAM,aAAa,GAAG,IAAI,CAAC;QAC3B,MAAM,cAAc,GAAG,IAAI,CAAC;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC;QAC1B,MAAM,eAAe,GAAG,IAAI,CAAC;QAE7B,+CAA+C;QAC/C,qGAAqG;QACrG,+FAA+F;QAC/F,MAAM,aAAa,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,cAAc,CAAC;QACpE,MAAM,kBAAkB,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,uCAAuC;QACzF,MAAM,iBAAiB,GAAG,CAAC,CAAC,CAAC,mCAAmC;QAEhE,sDAAsD;QACtD,+GAA+G;QAC/G,qFAAqF;QACrF,mGAAmG;QACnG,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,CAAC,CAAC,CAAC;QAC9F,UAAU,CAAC,KAAK,CAAC,gBAAgB,IAAI,iBAAiB,YAAY,gBAAgB,UAAU,uBAAuB,kBAAkB,kBAAkB,aAAa,GAAG,CAAC,CAAC;QAEzK,sDAAsD;QACtD,6EAA6E;QAC7E,MAAM,QAAQ,GAAG,GAAG,CAAC;QACrB,MAAM,SAAS,GAAG,GAAG,CAAC;QACtB,MAAM,WAAW,GAAG,GAAG,CAAC;QACxB,MAAM,YAAY,GAAG,GAAG,CAAC;QACzB,MAAM,cAAc,GAAG,GAAG,CAAC;QAC3B,MAAM,eAAe,GAAG,GAAG,CAAC;QAC5B,MAAM,iBAAiB,GAAG,GAAG,CAAC;QAC9B,MAAM,oBAAoB,GAAG,GAAG,CAAC;QACjC,MAAM,iBAAiB,GAAG,GAAG,CAAC;QAC9B,MAAM,kBAAkB,GAAG,GAAG,CAAC;QAC/B,MAAM,uBAAuB,GAAG,GAAG,CAAC;QAEpC,mFAAmF;QACnF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,WAAmB,EAAE,KAAa,EAAU,EAAE;YAC/E,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAChC,OAAO,IAAI,CAAC,CAAC,kCAAkC;YACjD,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;gBACrC,UAAU,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,KAAK,cAAc,IAAI,CAAC,MAAM,MAAM,WAAW,cAAc,CAAC,CAAC;gBACpG,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,iDAAiD;gBACjD,8EAA8E;gBAC9E,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBAC/E,8DAA8D;oBAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;oBACxB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACtC,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,kBAAkB;oBAC7D,MAAM,MAAM,GAAG,WAAW,GAAG,CAAC,GAAG,iBAAiB,CAAC;oBACnD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;wBACf,MAAM,QAAQ,GAAG,GAAG,CAAC;wBACrB,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;oBAC/F,CAAC;gBACH,CAAC;gBACD,4DAA4D;gBAC5D,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC;QAEF,+EAA+E;QAC/E,+FAA+F;QAC/F,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,kCAAkC;QAC5F,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC/D,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACrE,MAAM,aAAa,GAAG,uBAAuB,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAE3E,0FAA0F;QAC1F,MAAM,SAAS,GAAG,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,EAAE,CAAC;QAC5D,MAAM,YAAY,GAAG,GAAG,cAAc,GAAG,UAAU,GAAG,eAAe,EAAE,CAAC;QACxE,MAAM,SAAS,GAAG,GAAG,iBAAiB,GAAG,aAAa,GAAG,kBAAkB,EAAE,CAAC,CAAC,8BAA8B;QAE7G,uCAAuC;QACvC,0FAA0F;QAC1F,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,kBAAkB,KAAK,CAAC;YACvC,CAAC,CAAC,GAAG,QAAQ,IAAI,WAAW,GAAG,SAAS,EAAE,CAAE,+BAA+B;YAC3E,CAAC,CAAC,GAAG,QAAQ,IAAI,WAAW,IAAI,SAAS,EAAE,CAAC,CAAC,iBAAiB;QAEhE,oFAAoF;QACpF,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACtE,MAAM,YAAY,GAAG,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACnE,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QACtE,MAAM,gBAAgB,GAAG,WAAW,CAAC,YAAY,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;QAE/E,sCAAsC;QACtC,MAAM,eAAe,GAAG,YAAY,CAAC;QAErC,IAAI,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1B,8FAA8F;YAC9F,kEAAkE;YAClE,MAAM,WAAW,GAAG,oBAAoB,CAAC,eAAe,CAAC,CAAC;YAC1D,yIAAyI;YACzI,sDAAsD;YACtD,MAAM,aAAa,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,yFAAyF;YAC/H,MAAM,eAAe,GAAG,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;YAClE,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEjD,sFAAsF;YACtF,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACxC,8FAA8F;gBAC9F,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvG,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,SAAS,EAAE,CAAC;gBACrF,2DAA2D;gBAC3D,OAAO,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,uEAAuE;YACvE,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,mCAAmC;YAC3D,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,gBAAgB;YACxC,MAAM,iBAAiB,GAAG,SAAS,CAAC,MAAM,CAAC;YAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,iBAAiB,CAAC,CAAC;YACnG,gEAAgE;YAChE,MAAM,aAAa,GAAG,WAAW,CAAC,GAAG,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,SAAS,EAAE,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;YAC1H,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAElE,iFAAiF;YACjF,MAAM,WAAW,GAAG,GAAG,aAAa,KAAK,YAAY,KAAK,aAAa,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,gBAAgB,EAAE,CAAC;YAEtJ,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;gBACnB,IAAI,EAAE,SAAS;gBACf,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,UAAU;gBACjB,MAAM,EAAE,WAAW;gBACnB,OAAO,EAAE,WAAW;gBACpB,KAAK,EAAE;oBACL,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,OAAO;iBACZ;gBACD,IAAI,EAAE,KAAK;gBACX,UAAU,EAAE,KAAK;gBACjB,YAAY,EAAE,KAAK;aACb,CAAgB,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,wCAAwC;YACxC,6DAA6D;YAC7D,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAChD,8FAA8F;YAC9F,MAAM,aAAa,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,yDAAyD;YAC/F,MAAM,eAAe,GAAG,aAAa,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;YAClE,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEjD,sFAAsF;YACtF,kEAAkE;YAClE,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;gBACxC,8FAA8F;gBAC9F,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,eAAe,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;gBACvG,MAAM,QAAQ,GAAG,kBAAkB,KAAK,CAAC;oBACvC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,GAAG,SAAS,EAAE,CAAE,+BAA+B;oBACrG,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,iBAAiB;gBAC1F,2DAA2D;gBAC3D,OAAO,WAAW,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,uEAAuE;YACvE,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,mCAAmC;YAC3D,MAAM,YAAY,GAAG,CAAC,CAAC,CAAC,gBAAgB;YACxC,MAAM,iBAAiB,GAAG,SAAS,CAAC,MAAM,CAAC;YAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,iBAAiB,CAAC,CAAC;YACnG,gEAAgE;YAChE,kEAAkE;YAClE,MAAM,oBAAoB,GAAG,kBAAkB,KAAK,CAAC;gBACnD,CAAC,CAAC,GAAG,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,SAAS,EAAE,CAAE,+BAA+B;gBAC3F,CAAC,CAAC,GAAG,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC,iBAAiB;YAChF,MAAM,aAAa,GAAG,WAAW,CAAC,oBAAoB,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;YACrF,MAAM,cAAc,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAElE,iFAAiF;YACjF,MAAM,WAAW,GAAG,GAAG,aAAa,KAAK,YAAY,KAAK,aAAa,KAAK,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,gBAAgB,EAAE,CAAC;YAE1J,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;gBACnB,IAAI,EAAE,SAAS;gBACf,GAAG,EAAE,QAAQ;gBACb,KAAK,EAAE,UAAU;gBACjB,MAAM,EAAE,WAAW;gBACnB,OAAO,EAAE,WAAW;gBACpB,KAAK,EAAE;oBACL,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,OAAO,EAAE,oCAAoC;iBAClD;gBACD,IAAI,EAAE,KAAK;gBACX,UAAU,EAAE,KAAK;gBACjB,YAAY,EAAE,KAAK;aACb,CAAgB,CAAC;QAC3B,CAAC;QAED,yBAAyB;QACzB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAChC,MAAc,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;QAE/B,sCAAsC;QACtC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACzB,CAAC;IAED,yCAAyC;IACzC,iDAAiD;IACjD,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACrE,UAAU,CAAC,KAAK,CAAC,8BAA8B,WAAW,CAAC,IAAI,UAAU,WAAW,CAAC,KAAK,cAAc,WAAW,CAAC,IAAI,GAAG,WAAW,CAAC,KAAK,aAAa,QAAQ,EAAE,CAAC,CAAC;IACrK,MAAM,MAAM,GAAG,SAAS,GAAG,YAAY,CAAC;IACxC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;QAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,GAAG,EAAE,WAAW,CAAC,GAAG;QACpB,KAAK,EAAE,WAAW,CAAC,KAAK;QACxB,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,OAAO,EAAE,MAAM;QACf,KAAK,EAAE;YACL,EAAE,EAAE,OAAO;SACZ;QACD,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;KACb,CAAgB,CAAC;IACzB,yBAAyB;IACzB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAEzB,sCAAsC;IACtC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAExB,mEAAmE;IACnE,qEAAqE;IACrE,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC;IACzD,IAAI,WAAW,GAAG,QAAQ,EAAE,CAAC;QAC3B,MAAM,oBAAoB,GAAG,IAAI,CAAC,CAAC,kCAAkC;QACrE,MAAM,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,GAAG,oBAAoB,CAAC,CAAC;QAC/E,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC;QAC9D,mDAAmD;QACnD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,QAAQ,GAAG,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,uBAAuB;QACzG,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;YACzB,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,CAAC;YACT,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,kCAAkC;YACjF,KAAK,EAAE;gBACL,EAAE,EAAE,MAAM;aACX;YACD,IAAI,EAAE,KAAK;YACX,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,KAAK;SACb,CAAgB,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACvB,UAAU,CAAC,KAAK,CAAC,kBAAkB,WAAW,YAAY,WAAW,CAAC,KAAK,eAAe,WAAW,CAAC,IAAI,GAAG,WAAW,aAAa,QAAQ,EAAE,CAAC,CAAC;IACnJ,CAAC;IAED,iEAAiE;IACjE,2DAA2D;IAC3D,yEAAyE;IAEzE,8CAA8C;IAC9C,MAAM,UAAU,GAAI,MAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,CAAC;IACzD,UAAU,CAAC,KAAK,CAAC,sBAAsB,MAAM,CAAC,YAAY,CAAC,MAAM,wBAAwB,UAAU,uBAAuB,QAAQ,aAAa,QAAQ,EAAE,CAAC,CAAC;IAE3J,iEAAiE;IACjE,2DAA2D;IAC3D,yEAAyE;IAEzE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO;IACT,CAAC;IAED,kDAAkD;IAClD,kDAAkD;IAClD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAiB,CAAC;IACxC,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,6CAA6C;IAEvF,MAAM,WAAW,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IAEnD,wCAAwC;IACxC,MAAM,cAAc,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAW,CAAC;IACxD,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,KAAK,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;IAE7E,MAAM,CAAC,UAAkB,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,CAAC,UAAkB,CAAC,OAAO,GAAG,UAAU,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,KAAa;IAC9D,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC;IAC5B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;QAChC,MAAM,CAAC,OAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,CAAC,OAAe,CAAC,OAAO,GAAG,MAAM,CAAC;IAC3C,CAAC;AACH,CAAC"}
|
|
@@ -13,7 +13,16 @@ export interface SafeViewport {
|
|
|
13
13
|
screenRows: number;
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
* Get
|
|
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;
|
|
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
|
|
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
|
-
//
|
|
12
|
-
const
|
|
13
|
-
const
|
|
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 =
|
|
16
|
-
let bottomMargin =
|
|
17
|
-
// Check for preset
|
|
32
|
+
let rightMargin = RIGHT_GAP;
|
|
33
|
+
let bottomMargin = BOTTOM_GAP;
|
|
18
34
|
if (safePreset === 'aws') {
|
|
19
|
-
rightMargin =
|
|
35
|
+
rightMargin = 6; // Keep conservative during debug
|
|
20
36
|
bottomMargin = 2;
|
|
21
37
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
//
|
|
28
|
-
|
|
29
|
-
|
|
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;
|
|
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"}
|