mu-harness 0.16.14 → 0.16.16
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/esm/{harness/npm/src/common → common}/index.d.ts +1 -1
- package/esm/{harness/npm/src/common → common}/index.js +1 -1
- package/{script/harness/npm/src → esm}/common/utils.d.ts +2 -0
- package/esm/common/utils.js +22 -0
- package/esm/harness/{npm/src/harness/create.js → create.js} +2 -1
- package/esm/harness/{npm/src/harness/types.d.ts → types.d.ts} +7 -1
- package/esm/{harness/npm/src/skills → skills}/index.d.ts +2 -1
- package/esm/{harness/npm/src/skills → skills}/index.js +1 -0
- package/esm/skills/loader.d.ts +10 -0
- package/esm/skills/loader.js +59 -0
- package/esm/skills/parser.js +16 -0
- package/esm/skills/platform.d.ts +6 -0
- package/esm/skills/platform.js +14 -0
- package/esm/skills/types.d.ts +8 -0
- package/esm/{harness/npm/src/skills → skills}/writer.d.ts +1 -0
- package/esm/skills/writer.js +55 -0
- package/esm/tui/chat/ChatApp.d.ts +188 -0
- package/esm/tui/chat/ChatApp.js +1306 -0
- package/esm/tui/chat/commands.d.ts +16 -0
- package/esm/tui/chat/commands.js +21 -0
- package/{script/tui/src/components → esm/tui/chat}/editor.d.ts +14 -9
- package/esm/tui/chat/editor.js +147 -0
- package/esm/tui/chat/index.d.ts +9 -0
- package/esm/tui/chat/index.js +7 -0
- package/esm/tui/chat/markdown.d.ts +9 -0
- package/esm/tui/chat/markdown.js +295 -0
- package/esm/tui/chat/picker.d.ts +13 -0
- package/esm/tui/chat/picker.js +123 -0
- package/esm/tui/chat/status.d.ts +15 -0
- package/esm/tui/chat/status.js +48 -0
- package/esm/tui/chat/theme.d.ts +97 -0
- package/esm/tui/chat/theme.js +201 -0
- package/esm/tui/chat/transcript.d.ts +79 -0
- package/esm/tui/chat/transcript.js +422 -0
- package/esm/tui/index.d.ts +8 -0
- package/esm/tui/index.js +12 -0
- package/package.json +15 -7
- package/script/{harness/npm/src/common → common}/index.d.ts +1 -1
- package/script/{harness/npm/src/common → common}/index.js +2 -1
- package/{esm/harness/npm/src → script}/common/utils.d.ts +2 -0
- package/script/common/utils.js +27 -0
- package/script/harness/{npm/src/harness/create.js → create.js} +2 -1
- package/script/harness/{npm/src/harness/types.d.ts → types.d.ts} +7 -1
- package/script/{harness/npm/src/skills → skills}/index.d.ts +2 -1
- package/script/{harness/npm/src/skills → skills}/index.js +3 -1
- package/script/skills/loader.d.ts +10 -0
- package/script/skills/loader.js +63 -0
- package/script/{harness/npm/src/skills → skills}/parser.js +8 -2
- package/script/skills/platform.d.ts +6 -0
- package/script/skills/platform.js +18 -0
- package/script/skills/types.d.ts +8 -0
- package/script/{harness/npm/src/skills → skills}/writer.d.ts +1 -0
- package/script/skills/writer.js +59 -0
- package/script/tui/chat/ChatApp.d.ts +188 -0
- package/script/tui/chat/ChatApp.js +1310 -0
- package/script/tui/chat/commands.d.ts +16 -0
- package/script/tui/chat/commands.js +25 -0
- package/{esm/tui/src/components → script/tui/chat}/editor.d.ts +14 -9
- package/script/tui/chat/editor.js +151 -0
- package/script/tui/chat/index.d.ts +9 -0
- package/script/tui/chat/index.js +25 -0
- package/script/tui/chat/markdown.d.ts +9 -0
- package/script/tui/chat/markdown.js +300 -0
- package/script/tui/chat/picker.d.ts +13 -0
- package/script/tui/chat/picker.js +129 -0
- package/script/tui/chat/status.d.ts +15 -0
- package/script/tui/chat/status.js +55 -0
- package/script/tui/chat/theme.d.ts +97 -0
- package/script/tui/chat/theme.js +209 -0
- package/script/tui/chat/transcript.d.ts +79 -0
- package/script/tui/chat/transcript.js +430 -0
- package/script/tui/index.d.ts +8 -0
- package/script/{harness/npm/src/tui → tui}/index.js +11 -10
- package/esm/core/src/agent.d.ts +0 -39
- package/esm/core/src/agent.js +0 -96
- package/esm/core/src/index.d.ts +0 -4
- package/esm/core/src/index.js +0 -2
- package/esm/core/src/types.d.ts +0 -59
- package/esm/core/src/types.js +0 -3
- package/esm/harness/npm/src/common/utils.js +0 -13
- package/esm/harness/npm/src/skills/loader.d.ts +0 -2
- package/esm/harness/npm/src/skills/loader.js +0 -26
- package/esm/harness/npm/src/skills/parser.js +0 -10
- package/esm/harness/npm/src/skills/types.d.ts +0 -6
- package/esm/harness/npm/src/skills/writer.js +0 -42
- package/esm/harness/npm/src/tui/channel.d.ts +0 -3
- package/esm/harness/npm/src/tui/channel.js +0 -53
- package/esm/harness/npm/src/tui/components/composer.d.ts +0 -3
- package/esm/harness/npm/src/tui/components/composer.js +0 -13
- package/esm/harness/npm/src/tui/components/header.d.ts +0 -3
- package/esm/harness/npm/src/tui/components/header.js +0 -1
- package/esm/harness/npm/src/tui/components/index.d.ts +0 -5
- package/esm/harness/npm/src/tui/components/index.js +0 -5
- package/esm/harness/npm/src/tui/components/message.d.ts +0 -6
- package/esm/harness/npm/src/tui/components/message.js +0 -26
- package/esm/harness/npm/src/tui/components/status.d.ts +0 -3
- package/esm/harness/npm/src/tui/components/status.js +0 -8
- package/esm/harness/npm/src/tui/components/transcript.d.ts +0 -4
- package/esm/harness/npm/src/tui/components/transcript.js +0 -4
- package/esm/harness/npm/src/tui/index.d.ts +0 -7
- package/esm/harness/npm/src/tui/index.js +0 -10
- package/esm/harness/npm/src/tui/kit.d.ts +0 -15
- package/esm/harness/npm/src/tui/kit.js +0 -7
- package/esm/harness/npm/src/tui/types.d.ts +0 -38
- package/esm/harness/npm/src/tui/types.js +0 -1
- package/esm/tui/src/capabilities.d.ts +0 -72
- package/esm/tui/src/capabilities.js +0 -90
- package/esm/tui/src/components/command-palette.d.ts +0 -24
- package/esm/tui/src/components/command-palette.js +0 -60
- package/esm/tui/src/components/editor.js +0 -111
- package/esm/tui/src/components/scroll-view.d.ts +0 -26
- package/esm/tui/src/components/scroll-view.js +0 -70
- package/esm/tui/src/components/select-list.d.ts +0 -24
- package/esm/tui/src/components/select-list.js +0 -71
- package/esm/tui/src/events.d.ts +0 -56
- package/esm/tui/src/events.js +0 -6
- package/esm/tui/src/index.d.ts +0 -17
- package/esm/tui/src/index.js +0 -13
- package/esm/tui/src/inputRouter.d.ts +0 -28
- package/esm/tui/src/inputRouter.js +0 -128
- package/esm/tui/src/keybinds.d.ts +0 -13
- package/esm/tui/src/keybinds.js +0 -15
- package/esm/tui/src/keyboard.d.ts +0 -2
- package/esm/tui/src/keyboard.js +0 -319
- package/esm/tui/src/layout/ansi.d.ts +0 -3
- package/esm/tui/src/layout/ansi.js +0 -330
- package/esm/tui/src/layout/cell.d.ts +0 -24
- package/esm/tui/src/layout/cell.js +0 -46
- package/esm/tui/src/layout/cellbuffer.d.ts +0 -29
- package/esm/tui/src/layout/cellbuffer.js +0 -306
- package/esm/tui/src/layout/color.d.ts +0 -22
- package/esm/tui/src/layout/color.js +0 -163
- package/esm/tui/src/layout/insets.d.ts +0 -8
- package/esm/tui/src/layout/insets.js +0 -55
- package/esm/tui/src/layout/types.d.ts +0 -33
- package/esm/tui/src/layout/types.js +0 -8
- package/esm/tui/src/parser.d.ts +0 -18
- package/esm/tui/src/parser.js +0 -136
- package/esm/tui/src/renderer.d.ts +0 -32
- package/esm/tui/src/renderer.js +0 -168
- package/esm/tui/src/surface.d.ts +0 -27
- package/esm/tui/src/surface.js +0 -110
- package/esm/tui/src/terminal.d.ts +0 -48
- package/esm/tui/src/terminal.js +0 -255
- package/esm/tui/src/tui.d.ts +0 -60
- package/esm/tui/src/tui.js +0 -194
- package/esm/tui/src/types/terminal.d.ts +0 -20
- package/esm/tui/src/types/terminal.js +0 -1
- package/esm/tui/src/utils.d.ts +0 -6
- package/esm/tui/src/utils.js +0 -292
- package/esm/tui/src/views.d.ts +0 -35
- package/esm/tui/src/views.js +0 -112
- package/script/core/src/agent.d.ts +0 -39
- package/script/core/src/agent.js +0 -101
- package/script/core/src/index.d.ts +0 -4
- package/script/core/src/index.js +0 -10
- package/script/core/src/types.d.ts +0 -59
- package/script/core/src/types.js +0 -9
- package/script/harness/npm/src/common/utils.js +0 -17
- package/script/harness/npm/src/skills/loader.d.ts +0 -2
- package/script/harness/npm/src/skills/loader.js +0 -30
- package/script/harness/npm/src/skills/types.d.ts +0 -6
- package/script/harness/npm/src/skills/writer.js +0 -46
- package/script/harness/npm/src/tui/channel.d.ts +0 -3
- package/script/harness/npm/src/tui/channel.js +0 -57
- package/script/harness/npm/src/tui/components/composer.d.ts +0 -3
- package/script/harness/npm/src/tui/components/composer.js +0 -17
- package/script/harness/npm/src/tui/components/header.d.ts +0 -3
- package/script/harness/npm/src/tui/components/header.js +0 -5
- package/script/harness/npm/src/tui/components/index.d.ts +0 -5
- package/script/harness/npm/src/tui/components/index.js +0 -16
- package/script/harness/npm/src/tui/components/message.d.ts +0 -6
- package/script/harness/npm/src/tui/components/message.js +0 -32
- package/script/harness/npm/src/tui/components/status.d.ts +0 -3
- package/script/harness/npm/src/tui/components/status.js +0 -12
- package/script/harness/npm/src/tui/components/transcript.d.ts +0 -4
- package/script/harness/npm/src/tui/components/transcript.js +0 -9
- package/script/harness/npm/src/tui/index.d.ts +0 -7
- package/script/harness/npm/src/tui/kit.d.ts +0 -15
- package/script/harness/npm/src/tui/kit.js +0 -10
- package/script/harness/npm/src/tui/types.d.ts +0 -38
- package/script/harness/npm/src/tui/types.js +0 -2
- package/script/tui/src/capabilities.d.ts +0 -72
- package/script/tui/src/capabilities.js +0 -98
- package/script/tui/src/components/command-palette.d.ts +0 -24
- package/script/tui/src/components/command-palette.js +0 -65
- package/script/tui/src/components/editor.js +0 -116
- package/script/tui/src/components/scroll-view.d.ts +0 -26
- package/script/tui/src/components/scroll-view.js +0 -75
- package/script/tui/src/components/select-list.d.ts +0 -24
- package/script/tui/src/components/select-list.js +0 -76
- package/script/tui/src/events.d.ts +0 -56
- package/script/tui/src/events.js +0 -9
- package/script/tui/src/index.d.ts +0 -17
- package/script/tui/src/index.js +0 -46
- package/script/tui/src/inputRouter.d.ts +0 -28
- package/script/tui/src/inputRouter.js +0 -132
- package/script/tui/src/keybinds.d.ts +0 -13
- package/script/tui/src/keybinds.js +0 -18
- package/script/tui/src/keyboard.d.ts +0 -2
- package/script/tui/src/keyboard.js +0 -322
- package/script/tui/src/layout/ansi.d.ts +0 -3
- package/script/tui/src/layout/ansi.js +0 -334
- package/script/tui/src/layout/cell.d.ts +0 -24
- package/script/tui/src/layout/cell.js +0 -54
- package/script/tui/src/layout/cellbuffer.d.ts +0 -29
- package/script/tui/src/layout/cellbuffer.js +0 -321
- package/script/tui/src/layout/color.d.ts +0 -22
- package/script/tui/src/layout/color.js +0 -174
- package/script/tui/src/layout/insets.d.ts +0 -8
- package/script/tui/src/layout/insets.js +0 -64
- package/script/tui/src/layout/types.d.ts +0 -33
- package/script/tui/src/layout/types.js +0 -11
- package/script/tui/src/parser.d.ts +0 -18
- package/script/tui/src/parser.js +0 -140
- package/script/tui/src/renderer.d.ts +0 -32
- package/script/tui/src/renderer.js +0 -175
- package/script/tui/src/surface.d.ts +0 -27
- package/script/tui/src/surface.js +0 -115
- package/script/tui/src/terminal.d.ts +0 -48
- package/script/tui/src/terminal.js +0 -262
- package/script/tui/src/tui.d.ts +0 -60
- package/script/tui/src/tui.js +0 -198
- package/script/tui/src/types/terminal.d.ts +0 -20
- package/script/tui/src/types/terminal.js +0 -2
- package/script/tui/src/utils.d.ts +0 -6
- package/script/tui/src/utils.js +0 -300
- package/script/tui/src/views.d.ts +0 -35
- package/script/tui/src/views.js +0 -123
- /package/esm/{harness/npm/src/_dnt.polyfills.d.ts → _dnt.polyfills.d.ts} +0 -0
- /package/esm/{harness/npm/src/_dnt.polyfills.js → _dnt.polyfills.js} +0 -0
- /package/esm/{harness/npm/src/agents → agents}/index.d.ts +0 -0
- /package/esm/{harness/npm/src/agents → agents}/index.js +0 -0
- /package/esm/{harness/npm/src/agents → agents}/loader.d.ts +0 -0
- /package/esm/{harness/npm/src/agents → agents}/loader.js +0 -0
- /package/esm/{harness/npm/src/agents → agents}/parser.d.ts +0 -0
- /package/esm/{harness/npm/src/agents → agents}/parser.js +0 -0
- /package/esm/{harness/npm/src/agents → agents}/registry.d.ts +0 -0
- /package/esm/{harness/npm/src/agents → agents}/registry.js +0 -0
- /package/esm/{harness/npm/src/agents → agents}/types.d.ts +0 -0
- /package/esm/{harness/npm/src/agents → agents}/types.js +0 -0
- /package/esm/{harness/npm/src/channels → channels}/channel.d.ts +0 -0
- /package/esm/{harness/npm/src/channels → channels}/channel.js +0 -0
- /package/esm/{harness/npm/src/channels → channels}/index.d.ts +0 -0
- /package/esm/{harness/npm/src/channels → channels}/index.js +0 -0
- /package/esm/{harness/npm/src/channels → channels}/manager.d.ts +0 -0
- /package/esm/{harness/npm/src/channels → channels}/manager.js +0 -0
- /package/esm/{harness/npm/src/channels → channels}/types.d.ts +0 -0
- /package/esm/{harness/npm/src/channels → channels}/types.js +0 -0
- /package/esm/{harness/npm/src/commands → commands}/defaults.d.ts +0 -0
- /package/esm/{harness/npm/src/commands → commands}/defaults.js +0 -0
- /package/esm/{harness/npm/src/commands → commands}/index.d.ts +0 -0
- /package/esm/{harness/npm/src/commands → commands}/index.js +0 -0
- /package/esm/{harness/npm/src/commands → commands}/registry.d.ts +0 -0
- /package/esm/{harness/npm/src/commands → commands}/registry.js +0 -0
- /package/esm/{harness/npm/src/commands → commands}/types.d.ts +0 -0
- /package/esm/{harness/npm/src/commands → commands}/types.js +0 -0
- /package/esm/{harness/npm/src/common → common}/frontmatter.d.ts +0 -0
- /package/esm/{harness/npm/src/common → common}/frontmatter.js +0 -0
- /package/esm/{harness/npm/src/config → config}/index.d.ts +0 -0
- /package/esm/{harness/npm/src/config → config}/index.js +0 -0
- /package/esm/{harness/npm/src/config → config}/resolve.d.ts +0 -0
- /package/esm/{harness/npm/src/config → config}/resolve.js +0 -0
- /package/esm/{harness/npm/src/config → config}/types.d.ts +0 -0
- /package/esm/{harness/npm/src/config → config}/types.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_chars.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_chars.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_dumper_state.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_dumper_state.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_loader_state.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_loader_state.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_schema.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_schema.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/binary.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/binary.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/bool.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/bool.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/float.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/float.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/int.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/int.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/map.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/map.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/merge.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/merge.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/nil.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/nil.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/omap.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/omap.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/pairs.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/pairs.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/regexp.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/regexp.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/seq.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/seq.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/set.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/set.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/str.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/str.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/timestamp.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/timestamp.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/undefined.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/undefined.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_utils.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_utils.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/mod.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/mod.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/parse.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/parse.js +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/stringify.d.ts +0 -0
- /package/esm/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/stringify.js +0 -0
- /package/esm/harness/{npm/src/harness/create.d.ts → create.d.ts} +0 -0
- /package/esm/harness/{npm/src/harness/index.d.ts → index.d.ts} +0 -0
- /package/esm/harness/{npm/src/harness/index.js → index.js} +0 -0
- /package/esm/harness/{npm/src/harness/models.d.ts → models.d.ts} +0 -0
- /package/esm/harness/{npm/src/harness/models.js → models.js} +0 -0
- /package/esm/harness/{npm/src/harness/types.js → types.js} +0 -0
- /package/esm/{harness/npm/src/hooks → hooks}/index.d.ts +0 -0
- /package/esm/{harness/npm/src/hooks → hooks}/index.js +0 -0
- /package/esm/{harness/npm/src/hooks → hooks}/merge-hooks.d.ts +0 -0
- /package/esm/{harness/npm/src/hooks → hooks}/merge-hooks.js +0 -0
- /package/esm/{harness/npm/src/hooks → hooks}/types.d.ts +0 -0
- /package/esm/{harness/npm/src/hooks → hooks}/types.js +0 -0
- /package/esm/{harness/npm/src/hooks → hooks}/with-hooks.d.ts +0 -0
- /package/esm/{harness/npm/src/hooks → hooks}/with-hooks.js +0 -0
- /package/esm/{harness/npm/src/index.d.ts → index.d.ts} +0 -0
- /package/esm/{harness/npm/src/index.js → index.js} +0 -0
- /package/esm/{harness/npm/src/permissions → permissions}/allow-list.d.ts +0 -0
- /package/esm/{harness/npm/src/permissions → permissions}/allow-list.js +0 -0
- /package/esm/{harness/npm/src/permissions → permissions}/approval-manager.d.ts +0 -0
- /package/esm/{harness/npm/src/permissions → permissions}/approval-manager.js +0 -0
- /package/esm/{harness/npm/src/permissions → permissions}/approval.d.ts +0 -0
- /package/esm/{harness/npm/src/permissions → permissions}/approval.js +0 -0
- /package/esm/{harness/npm/src/permissions → permissions}/glob.d.ts +0 -0
- /package/esm/{harness/npm/src/permissions → permissions}/glob.js +0 -0
- /package/esm/{harness/npm/src/permissions → permissions}/index.d.ts +0 -0
- /package/esm/{harness/npm/src/permissions → permissions}/index.js +0 -0
- /package/esm/{harness/npm/src/plugin → plugin}/define.d.ts +0 -0
- /package/esm/{harness/npm/src/plugin → plugin}/define.js +0 -0
- /package/esm/{harness/npm/src/plugin → plugin}/import-ts.d.ts +0 -0
- /package/esm/{harness/npm/src/plugin → plugin}/import-ts.js +0 -0
- /package/esm/{harness/npm/src/plugin → plugin}/index.d.ts +0 -0
- /package/esm/{harness/npm/src/plugin → plugin}/index.js +0 -0
- /package/esm/{harness/npm/src/plugin → plugin}/resolve.d.ts +0 -0
- /package/esm/{harness/npm/src/plugin → plugin}/resolve.js +0 -0
- /package/esm/{harness/npm/src/plugin → plugin}/store.d.ts +0 -0
- /package/esm/{harness/npm/src/plugin → plugin}/store.js +0 -0
- /package/esm/{harness/npm/src/plugin → plugin}/types.d.ts +0 -0
- /package/esm/{harness/npm/src/plugin → plugin}/types.js +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/command.d.ts +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/command.js +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/engine/index.d.ts +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/engine/index.js +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/engine/memory-store.d.ts +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/engine/memory-store.js +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/engine/scheduler.d.ts +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/engine/scheduler.js +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/engine/store.d.ts +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/engine/store.js +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/engine/types.d.ts +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/engine/types.js +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/index.d.ts +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/index.js +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/tool.d.ts +0 -0
- /package/esm/{harness/npm/src/scheduler → scheduler}/tool.js +0 -0
- /package/esm/{harness/npm/src/session → session}/agent-session.d.ts +0 -0
- /package/esm/{harness/npm/src/session → session}/agent-session.js +0 -0
- /package/esm/{harness/npm/src/session → session}/catalog.d.ts +0 -0
- /package/esm/{harness/npm/src/session → session}/catalog.js +0 -0
- /package/esm/{harness/npm/src/session → session}/index.d.ts +0 -0
- /package/esm/{harness/npm/src/session → session}/index.js +0 -0
- /package/esm/{harness/npm/src/session → session}/manager.d.ts +0 -0
- /package/esm/{harness/npm/src/session → session}/manager.js +0 -0
- /package/esm/{harness/npm/src/session → session}/persist.d.ts +0 -0
- /package/esm/{harness/npm/src/session → session}/persist.js +0 -0
- /package/esm/{harness/npm/src/session → session}/store.d.ts +0 -0
- /package/esm/{harness/npm/src/session → session}/store.js +0 -0
- /package/esm/{harness/npm/src/session → session}/title.d.ts +0 -0
- /package/esm/{harness/npm/src/session → session}/title.js +0 -0
- /package/esm/{harness/npm/src/session → session}/types.d.ts +0 -0
- /package/esm/{harness/npm/src/session → session}/types.js +0 -0
- /package/esm/{harness/npm/src/skills → skills}/parser.d.ts +0 -0
- /package/esm/{harness/npm/src/skills → skills}/registry.d.ts +0 -0
- /package/esm/{harness/npm/src/skills → skills}/registry.js +0 -0
- /package/esm/{harness/npm/src/skills → skills}/run.d.ts +0 -0
- /package/esm/{harness/npm/src/skills → skills}/run.js +0 -0
- /package/esm/{harness/npm/src/skills → skills}/tool.d.ts +0 -0
- /package/esm/{harness/npm/src/skills → skills}/tool.js +0 -0
- /package/esm/{harness/npm/src/skills → skills}/types.js +0 -0
- /package/esm/{harness/npm/src/subAgents → subAgents}/index.d.ts +0 -0
- /package/esm/{harness/npm/src/subAgents → subAgents}/index.js +0 -0
- /package/esm/{harness/npm/src/subAgents → subAgents}/registry.d.ts +0 -0
- /package/esm/{harness/npm/src/subAgents → subAgents}/registry.js +0 -0
- /package/esm/{harness/npm/src/subAgents → subAgents}/runner.d.ts +0 -0
- /package/esm/{harness/npm/src/subAgents → subAgents}/runner.js +0 -0
- /package/esm/{harness/npm/src/subAgents → subAgents}/tool.d.ts +0 -0
- /package/esm/{harness/npm/src/subAgents → subAgents}/tool.js +0 -0
- /package/esm/{harness/npm/src/subAgents → subAgents}/types.d.ts +0 -0
- /package/esm/{harness/npm/src/subAgents → subAgents}/types.js +0 -0
- /package/script/{harness/npm/src/_dnt.polyfills.d.ts → _dnt.polyfills.d.ts} +0 -0
- /package/script/{harness/npm/src/_dnt.polyfills.js → _dnt.polyfills.js} +0 -0
- /package/script/{harness/npm/src/agents → agents}/index.d.ts +0 -0
- /package/script/{harness/npm/src/agents → agents}/index.js +0 -0
- /package/script/{harness/npm/src/agents → agents}/loader.d.ts +0 -0
- /package/script/{harness/npm/src/agents → agents}/loader.js +0 -0
- /package/script/{harness/npm/src/agents → agents}/parser.d.ts +0 -0
- /package/script/{harness/npm/src/agents → agents}/parser.js +0 -0
- /package/script/{harness/npm/src/agents → agents}/registry.d.ts +0 -0
- /package/script/{harness/npm/src/agents → agents}/registry.js +0 -0
- /package/script/{harness/npm/src/agents → agents}/types.d.ts +0 -0
- /package/script/{harness/npm/src/agents → agents}/types.js +0 -0
- /package/script/{harness/npm/src/channels → channels}/channel.d.ts +0 -0
- /package/script/{harness/npm/src/channels → channels}/channel.js +0 -0
- /package/script/{harness/npm/src/channels → channels}/index.d.ts +0 -0
- /package/script/{harness/npm/src/channels → channels}/index.js +0 -0
- /package/script/{harness/npm/src/channels → channels}/manager.d.ts +0 -0
- /package/script/{harness/npm/src/channels → channels}/manager.js +0 -0
- /package/script/{harness/npm/src/channels → channels}/types.d.ts +0 -0
- /package/script/{harness/npm/src/channels → channels}/types.js +0 -0
- /package/script/{harness/npm/src/commands → commands}/defaults.d.ts +0 -0
- /package/script/{harness/npm/src/commands → commands}/defaults.js +0 -0
- /package/script/{harness/npm/src/commands → commands}/index.d.ts +0 -0
- /package/script/{harness/npm/src/commands → commands}/index.js +0 -0
- /package/script/{harness/npm/src/commands → commands}/registry.d.ts +0 -0
- /package/script/{harness/npm/src/commands → commands}/registry.js +0 -0
- /package/script/{harness/npm/src/commands → commands}/types.d.ts +0 -0
- /package/script/{harness/npm/src/commands → commands}/types.js +0 -0
- /package/script/{harness/npm/src/common → common}/frontmatter.d.ts +0 -0
- /package/script/{harness/npm/src/common → common}/frontmatter.js +0 -0
- /package/script/{harness/npm/src/config → config}/index.d.ts +0 -0
- /package/script/{harness/npm/src/config → config}/index.js +0 -0
- /package/script/{harness/npm/src/config → config}/resolve.d.ts +0 -0
- /package/script/{harness/npm/src/config → config}/resolve.js +0 -0
- /package/script/{harness/npm/src/config → config}/types.d.ts +0 -0
- /package/script/{harness/npm/src/config → config}/types.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_chars.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_chars.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_dumper_state.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_dumper_state.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_loader_state.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_loader_state.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_schema.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_schema.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/binary.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/binary.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/bool.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/bool.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/float.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/float.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/int.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/int.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/map.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/map.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/merge.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/merge.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/nil.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/nil.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/omap.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/omap.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/pairs.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/pairs.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/regexp.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/regexp.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/seq.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/seq.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/set.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/set.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/str.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/str.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/timestamp.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/timestamp.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/undefined.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type/undefined.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_type.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_utils.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/_utils.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/mod.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/mod.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/parse.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/parse.js +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/stringify.d.ts +0 -0
- /package/script/{harness/npm/src/deps → deps}/jsr.io/@std/yaml/1.1.0/stringify.js +0 -0
- /package/script/harness/{npm/src/harness/create.d.ts → create.d.ts} +0 -0
- /package/script/harness/{npm/src/harness/index.d.ts → index.d.ts} +0 -0
- /package/script/harness/{npm/src/harness/index.js → index.js} +0 -0
- /package/script/harness/{npm/src/harness/models.d.ts → models.d.ts} +0 -0
- /package/script/harness/{npm/src/harness/models.js → models.js} +0 -0
- /package/script/harness/{npm/src/harness/types.js → types.js} +0 -0
- /package/script/{harness/npm/src/hooks → hooks}/index.d.ts +0 -0
- /package/script/{harness/npm/src/hooks → hooks}/index.js +0 -0
- /package/script/{harness/npm/src/hooks → hooks}/merge-hooks.d.ts +0 -0
- /package/script/{harness/npm/src/hooks → hooks}/merge-hooks.js +0 -0
- /package/script/{harness/npm/src/hooks → hooks}/types.d.ts +0 -0
- /package/script/{harness/npm/src/hooks → hooks}/types.js +0 -0
- /package/script/{harness/npm/src/hooks → hooks}/with-hooks.d.ts +0 -0
- /package/script/{harness/npm/src/hooks → hooks}/with-hooks.js +0 -0
- /package/script/{harness/npm/src/index.d.ts → index.d.ts} +0 -0
- /package/script/{harness/npm/src/index.js → index.js} +0 -0
- /package/script/{harness/npm/src/permissions → permissions}/allow-list.d.ts +0 -0
- /package/script/{harness/npm/src/permissions → permissions}/allow-list.js +0 -0
- /package/script/{harness/npm/src/permissions → permissions}/approval-manager.d.ts +0 -0
- /package/script/{harness/npm/src/permissions → permissions}/approval-manager.js +0 -0
- /package/script/{harness/npm/src/permissions → permissions}/approval.d.ts +0 -0
- /package/script/{harness/npm/src/permissions → permissions}/approval.js +0 -0
- /package/script/{harness/npm/src/permissions → permissions}/glob.d.ts +0 -0
- /package/script/{harness/npm/src/permissions → permissions}/glob.js +0 -0
- /package/script/{harness/npm/src/permissions → permissions}/index.d.ts +0 -0
- /package/script/{harness/npm/src/permissions → permissions}/index.js +0 -0
- /package/script/{harness/npm/src/plugin → plugin}/define.d.ts +0 -0
- /package/script/{harness/npm/src/plugin → plugin}/define.js +0 -0
- /package/script/{harness/npm/src/plugin → plugin}/import-ts.d.ts +0 -0
- /package/script/{harness/npm/src/plugin → plugin}/import-ts.js +0 -0
- /package/script/{harness/npm/src/plugin → plugin}/index.d.ts +0 -0
- /package/script/{harness/npm/src/plugin → plugin}/index.js +0 -0
- /package/script/{harness/npm/src/plugin → plugin}/resolve.d.ts +0 -0
- /package/script/{harness/npm/src/plugin → plugin}/resolve.js +0 -0
- /package/script/{harness/npm/src/plugin → plugin}/store.d.ts +0 -0
- /package/script/{harness/npm/src/plugin → plugin}/store.js +0 -0
- /package/script/{harness/npm/src/plugin → plugin}/types.d.ts +0 -0
- /package/script/{harness/npm/src/plugin → plugin}/types.js +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/command.d.ts +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/command.js +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/engine/index.d.ts +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/engine/index.js +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/engine/memory-store.d.ts +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/engine/memory-store.js +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/engine/scheduler.d.ts +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/engine/scheduler.js +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/engine/store.d.ts +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/engine/store.js +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/engine/types.d.ts +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/engine/types.js +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/index.d.ts +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/index.js +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/tool.d.ts +0 -0
- /package/script/{harness/npm/src/scheduler → scheduler}/tool.js +0 -0
- /package/script/{harness/npm/src/session → session}/agent-session.d.ts +0 -0
- /package/script/{harness/npm/src/session → session}/agent-session.js +0 -0
- /package/script/{harness/npm/src/session → session}/catalog.d.ts +0 -0
- /package/script/{harness/npm/src/session → session}/catalog.js +0 -0
- /package/script/{harness/npm/src/session → session}/index.d.ts +0 -0
- /package/script/{harness/npm/src/session → session}/index.js +0 -0
- /package/script/{harness/npm/src/session → session}/manager.d.ts +0 -0
- /package/script/{harness/npm/src/session → session}/manager.js +0 -0
- /package/script/{harness/npm/src/session → session}/persist.d.ts +0 -0
- /package/script/{harness/npm/src/session → session}/persist.js +0 -0
- /package/script/{harness/npm/src/session → session}/store.d.ts +0 -0
- /package/script/{harness/npm/src/session → session}/store.js +0 -0
- /package/script/{harness/npm/src/session → session}/title.d.ts +0 -0
- /package/script/{harness/npm/src/session → session}/title.js +0 -0
- /package/script/{harness/npm/src/session → session}/types.d.ts +0 -0
- /package/script/{harness/npm/src/session → session}/types.js +0 -0
- /package/script/{harness/npm/src/skills → skills}/parser.d.ts +0 -0
- /package/script/{harness/npm/src/skills → skills}/registry.d.ts +0 -0
- /package/script/{harness/npm/src/skills → skills}/registry.js +0 -0
- /package/script/{harness/npm/src/skills → skills}/run.d.ts +0 -0
- /package/script/{harness/npm/src/skills → skills}/run.js +0 -0
- /package/script/{harness/npm/src/skills → skills}/tool.d.ts +0 -0
- /package/script/{harness/npm/src/skills → skills}/tool.js +0 -0
- /package/script/{harness/npm/src/skills → skills}/types.js +0 -0
- /package/script/{harness/npm/src/subAgents → subAgents}/index.d.ts +0 -0
- /package/script/{harness/npm/src/subAgents → subAgents}/index.js +0 -0
- /package/script/{harness/npm/src/subAgents → subAgents}/registry.d.ts +0 -0
- /package/script/{harness/npm/src/subAgents → subAgents}/registry.js +0 -0
- /package/script/{harness/npm/src/subAgents → subAgents}/runner.d.ts +0 -0
- /package/script/{harness/npm/src/subAgents → subAgents}/runner.js +0 -0
- /package/script/{harness/npm/src/subAgents → subAgents}/tool.d.ts +0 -0
- /package/script/{harness/npm/src/subAgents → subAgents}/tool.js +0 -0
- /package/script/{harness/npm/src/subAgents → subAgents}/types.d.ts +0 -0
- /package/script/{harness/npm/src/subAgents → subAgents}/types.js +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { createEmitter, type Emitter } from './utils.js';
|
|
1
|
+
export { createEmitter, type Emitter, strList } from './utils.js';
|
|
2
2
|
export { type Frontmatter, parseFrontmatter, str } from './frontmatter.js';
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { createEmitter } from './utils.js';
|
|
1
|
+
export { createEmitter, strList } from './utils.js';
|
|
2
2
|
export { parseFrontmatter, str } from './frontmatter.js';
|
|
@@ -3,3 +3,5 @@ export interface Emitter<T> {
|
|
|
3
3
|
subscribe(listener: (event: T) => void): () => void;
|
|
4
4
|
}
|
|
5
5
|
export declare const createEmitter: <T>() => Emitter<T>;
|
|
6
|
+
/** Normalize a YAML value that may be a string[] or a comma-separated string into a trimmed string[]. */
|
|
7
|
+
export declare const strList: (value: unknown) => string[];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export const createEmitter = () => {
|
|
2
|
+
const listeners = new Set();
|
|
3
|
+
return {
|
|
4
|
+
emit: (event) => {
|
|
5
|
+
for (const listener of listeners)
|
|
6
|
+
listener(event);
|
|
7
|
+
},
|
|
8
|
+
subscribe: (listener) => {
|
|
9
|
+
listeners.add(listener);
|
|
10
|
+
return () => listeners.delete(listener);
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
/** Normalize a YAML value that may be a string[] or a comma-separated string into a trimmed string[]. */
|
|
15
|
+
export const strList = (value) => {
|
|
16
|
+
if (Array.isArray(value)) {
|
|
17
|
+
return value.filter((v) => typeof v === 'string').map((v) => v.trim()).filter(Boolean);
|
|
18
|
+
}
|
|
19
|
+
if (typeof value === 'string')
|
|
20
|
+
return value.split(',').map((v) => v.trim()).filter(Boolean);
|
|
21
|
+
return [];
|
|
22
|
+
};
|
|
@@ -18,7 +18,7 @@ const TITLE_AGENT = {
|
|
|
18
18
|
tools: [],
|
|
19
19
|
};
|
|
20
20
|
export const createHarness = async (options) => {
|
|
21
|
-
const { hostName, xdg, providers, model, agents: hostAgents = [], skills: hostSkills = [], title, titleModel, scheduler: enableScheduler = false, approvals, ...sessionDefaults } = options;
|
|
21
|
+
const { hostName, xdg, providers, model, agents: hostAgents = [], skills: hostSkills = [], skillScope, title, titleModel, scheduler: enableScheduler = false, approvals, ...sessionDefaults } = options;
|
|
22
22
|
const cwd = options.cwd ?? process.cwd();
|
|
23
23
|
const config = createHarnessConfig({ hostName, xdg });
|
|
24
24
|
const models = createModelRegistry({ providers, default: model });
|
|
@@ -36,6 +36,7 @@ export const createHarness = async (options) => {
|
|
|
36
36
|
const skillWriterTool = createSkillWriterTool({
|
|
37
37
|
dirs: { local: cwdSkillsDir, config: skillsDir },
|
|
38
38
|
registry: skills,
|
|
39
|
+
forceScope: skillScope,
|
|
39
40
|
});
|
|
40
41
|
const scopeSkills = (agent) => {
|
|
41
42
|
if (!agent)
|
|
@@ -6,7 +6,7 @@ import type { ApprovalManager } from '../permissions/index.js';
|
|
|
6
6
|
import type { PluginStore } from '../plugin/index.js';
|
|
7
7
|
import type { Scheduler, TaskStore } from '../scheduler/index.js';
|
|
8
8
|
import type { AgentSessionConfig, SessionManager } from '../session/index.js';
|
|
9
|
-
import type { Skill, SkillRegistry } from '../skills/index.js';
|
|
9
|
+
import type { Skill, SkillRegistry, SkillScope } from '../skills/index.js';
|
|
10
10
|
import type { SubAgentRegistry, SubAgentResult } from '../subAgents/index.js';
|
|
11
11
|
import type { ModelRegistry } from './models.js';
|
|
12
12
|
export type HarnessOptions = HarnessConfigOptions & Omit<AgentSessionConfig, 'provider' | 'model' | 'id' | 'messages'> & {
|
|
@@ -14,6 +14,12 @@ export type HarnessOptions = HarnessConfigOptions & Omit<AgentSessionConfig, 'pr
|
|
|
14
14
|
model: string;
|
|
15
15
|
agents?: Agent[];
|
|
16
16
|
skills?: Skill[];
|
|
17
|
+
/**
|
|
18
|
+
* Forces the save location of `create_skill`. When set, the model's `scope`
|
|
19
|
+
* argument is overridden (and dropped from the tool schema). Unset → the
|
|
20
|
+
* model chooses, defaulting to 'local'.
|
|
21
|
+
*/
|
|
22
|
+
skillScope?: SkillScope;
|
|
17
23
|
title?: boolean;
|
|
18
24
|
titleModel?: string;
|
|
19
25
|
cwd?: string;
|
|
@@ -2,6 +2,7 @@ export type { Skill } from './types.js';
|
|
|
2
2
|
export { createSkillRegistry, type SkillRegistry } from './registry.js';
|
|
3
3
|
export { parseSkill } from './parser.js';
|
|
4
4
|
export { loadSkills } from './loader.js';
|
|
5
|
+
export { skillMatchesPlatform } from './platform.js';
|
|
5
6
|
export { createSkillTool } from './tool.js';
|
|
6
|
-
export { createSkillWriterTool } from './writer.js';
|
|
7
|
+
export { createSkillWriterTool, type SkillScope } from './writer.js';
|
|
7
8
|
export { createRunSkillTool, runSkill, type RunSkillDeps } from './run.js';
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { createSkillRegistry } from './registry.js';
|
|
2
2
|
export { parseSkill } from './parser.js';
|
|
3
3
|
export { loadSkills } from './loader.js';
|
|
4
|
+
export { skillMatchesPlatform } from './platform.js';
|
|
4
5
|
export { createSkillTool } from './tool.js';
|
|
5
6
|
export { createSkillWriterTool } from './writer.js';
|
|
6
7
|
export { createRunSkillTool, runSkill } from './run.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Skill } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Loads skills from `dir`, supporting Hermes/agentskills.io layout:
|
|
4
|
+
* - flat `dir/<skill>/SKILL.md`
|
|
5
|
+
* - one level of category nesting `dir/<category>/<skill>/SKILL.md`
|
|
6
|
+
* Hidden dirs (.git/.github/.hub) are skipped. Skills whose `platforms` does not
|
|
7
|
+
* include the current OS are filtered out (so the registry never sees them).
|
|
8
|
+
* `current` is injectable for testing; defaults to `process.platform`.
|
|
9
|
+
*/
|
|
10
|
+
export declare const loadSkills: (dir: string, current?: string) => Promise<Skill[]>;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { readdir, readFile, stat } from 'node:fs/promises';
|
|
2
|
+
import { basename, join } from 'node:path';
|
|
3
|
+
import { parseSkill } from './parser.js';
|
|
4
|
+
import { skillMatchesPlatform } from './platform.js';
|
|
5
|
+
const isHidden = (name) => name.startsWith('.'); // .git, .github, .hub, dotfiles
|
|
6
|
+
const readDirSorted = async (dir) => {
|
|
7
|
+
try {
|
|
8
|
+
return (await readdir(dir)).filter((e) => !isHidden(e)).sort();
|
|
9
|
+
}
|
|
10
|
+
catch {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const isDir = async (path) => {
|
|
15
|
+
try {
|
|
16
|
+
return (await stat(path)).isDirectory();
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Loads skills from `dir`, supporting Hermes/agentskills.io layout:
|
|
24
|
+
* - flat `dir/<skill>/SKILL.md`
|
|
25
|
+
* - one level of category nesting `dir/<category>/<skill>/SKILL.md`
|
|
26
|
+
* Hidden dirs (.git/.github/.hub) are skipped. Skills whose `platforms` does not
|
|
27
|
+
* include the current OS are filtered out (so the registry never sees them).
|
|
28
|
+
* `current` is injectable for testing; defaults to `process.platform`.
|
|
29
|
+
*/
|
|
30
|
+
export const loadSkills = async (dir, current = process.platform) => {
|
|
31
|
+
const skills = [];
|
|
32
|
+
// Load the skill at `skillDir` if it has a SKILL.md. Returns true when it WAS a skill dir.
|
|
33
|
+
const tryLoad = async (skillDir) => {
|
|
34
|
+
let source;
|
|
35
|
+
try {
|
|
36
|
+
source = await readFile(join(skillDir, 'SKILL.md'), 'utf-8');
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
const skill = parseSkill(source, basename(skillDir), skillDir);
|
|
42
|
+
if (skillMatchesPlatform(skill.platforms, current))
|
|
43
|
+
skills.push(skill);
|
|
44
|
+
return true;
|
|
45
|
+
};
|
|
46
|
+
for (const entry of await readDirSorted(dir)) {
|
|
47
|
+
const entryDir = join(dir, entry);
|
|
48
|
+
if (!(await isDir(entryDir)))
|
|
49
|
+
continue;
|
|
50
|
+
if (await tryLoad(entryDir))
|
|
51
|
+
continue; // flat: dir/<skill>/SKILL.md
|
|
52
|
+
for (const child of await readDirSorted(entryDir)) { // category: dir/<category>/<skill>/SKILL.md
|
|
53
|
+
const childDir = join(entryDir, child);
|
|
54
|
+
if (await isDir(childDir))
|
|
55
|
+
await tryLoad(childDir);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return skills;
|
|
59
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { parseFrontmatter, str, strList } from '../common/index.js';
|
|
2
|
+
export const parseSkill = (source, fallbackName, dir) => {
|
|
3
|
+
const { fields, body } = parseFrontmatter(source);
|
|
4
|
+
const platforms = strList(fields.platforms);
|
|
5
|
+
const skill = {
|
|
6
|
+
name: str(fields.name) ?? fallbackName,
|
|
7
|
+
description: str(fields.description) ?? '',
|
|
8
|
+
prompt: body,
|
|
9
|
+
};
|
|
10
|
+
// Emit optional keys only when present — strict-equality tests rely on no `undefined`-valued keys.
|
|
11
|
+
if (dir !== undefined)
|
|
12
|
+
skill.dir = dir;
|
|
13
|
+
if (platforms.length)
|
|
14
|
+
skill.platforms = platforms;
|
|
15
|
+
return skill;
|
|
16
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mirror of Hermes' `skill_matches_platform`. Returns true when a skill is compatible
|
|
3
|
+
* with the current OS. Empty/absent `platforms` matches every OS. `current` is a
|
|
4
|
+
* `process.platform` value ('darwin' | 'linux' | 'win32'); injectable for testing.
|
|
5
|
+
*/
|
|
6
|
+
export declare const skillMatchesPlatform: (platforms: string[] | undefined, current?: string) => boolean;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const PLATFORM_MAP = { macos: 'darwin', linux: 'linux', windows: 'win32' };
|
|
2
|
+
/**
|
|
3
|
+
* Mirror of Hermes' `skill_matches_platform`. Returns true when a skill is compatible
|
|
4
|
+
* with the current OS. Empty/absent `platforms` matches every OS. `current` is a
|
|
5
|
+
* `process.platform` value ('darwin' | 'linux' | 'win32'); injectable for testing.
|
|
6
|
+
*/
|
|
7
|
+
export const skillMatchesPlatform = (platforms, current = process.platform) => {
|
|
8
|
+
if (!platforms || platforms.length === 0)
|
|
9
|
+
return true;
|
|
10
|
+
return platforms.some((p) => {
|
|
11
|
+
const mapped = PLATFORM_MAP[p.trim().toLowerCase()];
|
|
12
|
+
return mapped !== undefined && current.startsWith(mapped);
|
|
13
|
+
});
|
|
14
|
+
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { parseSkill } from './parser.js';
|
|
4
|
+
const slug = (name) => name.trim().toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+|-+$/g, '');
|
|
5
|
+
export const createSkillWriterTool = (deps) => {
|
|
6
|
+
const { forceScope } = deps;
|
|
7
|
+
const scopeProp = forceScope ? {} : {
|
|
8
|
+
scope: {
|
|
9
|
+
type: 'string',
|
|
10
|
+
enum: ['local', 'config'],
|
|
11
|
+
description: 'Where to save it: "local" = this project (<cwd>/skills), "config" = global config dir. Defaults to "local".',
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
return {
|
|
15
|
+
name: 'create_skill',
|
|
16
|
+
description: forceScope
|
|
17
|
+
? `Create a reusable skill (name, description, instructions) the agent can load on demand later — capture a reusable workflow worth keeping. Always saved to the global "${forceScope}" skills directory; load it later via \`skill\`.`
|
|
18
|
+
: 'Create a reusable skill (name, description, instructions) the agent can load on demand later — capture a reusable workflow worth keeping. `scope: "local"` saves it to this project, `scope: "config"` makes it available across all projects; load it later via `skill`.',
|
|
19
|
+
parameters: {
|
|
20
|
+
type: 'object',
|
|
21
|
+
properties: {
|
|
22
|
+
name: { type: 'string', description: 'Short skill name (kebab-case).' },
|
|
23
|
+
description: { type: 'string', description: 'One line describing when this skill should be used.' },
|
|
24
|
+
instructions: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
description: 'The skill body: the instructions to follow when it is invoked.',
|
|
27
|
+
},
|
|
28
|
+
...scopeProp,
|
|
29
|
+
},
|
|
30
|
+
required: ['name', 'description', 'instructions'],
|
|
31
|
+
additionalProperties: false,
|
|
32
|
+
},
|
|
33
|
+
run: async (input) => {
|
|
34
|
+
const { name, description, instructions, scope } = (input ?? {});
|
|
35
|
+
if (!name || !description || !instructions) {
|
|
36
|
+
return [{ type: 'text', text: 'Error: create_skill requires `name`, `description`, and `instructions`.' }];
|
|
37
|
+
}
|
|
38
|
+
// A configured forceScope wins over whatever the model passed.
|
|
39
|
+
const resolved = forceScope ?? scope ?? 'local';
|
|
40
|
+
const base = deps.dirs[resolved];
|
|
41
|
+
if (!base)
|
|
42
|
+
return [{ type: 'text', text: `Error: unknown scope "${scope}".` }];
|
|
43
|
+
const id = slug(name);
|
|
44
|
+
if (!id)
|
|
45
|
+
return [{ type: 'text', text: `Error: invalid skill name "${name}".` }];
|
|
46
|
+
const skillDir = join(base, id);
|
|
47
|
+
const file = join(skillDir, 'SKILL.md');
|
|
48
|
+
const source = `---\nname: ${id}\ndescription: ${JSON.stringify(description)}\n---\n\n${instructions.trim()}\n`;
|
|
49
|
+
await mkdir(skillDir, { recursive: true });
|
|
50
|
+
await writeFile(file, source, 'utf-8');
|
|
51
|
+
deps.registry.add(parseSkill(source, id, skillDir));
|
|
52
|
+
return [{ type: 'text', text: `Created skill "${id}" at ${file}. It is now available via the \`skill\` tool.` }];
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
};
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import type { AgentSession, SessionRecord } from '../../session/index.js';
|
|
2
|
+
import type { ApprovalManager } from '../../permissions/index.js';
|
|
3
|
+
import type { SubAgentRegistry, SubAgentResult } from '../../subAgents/index.js';
|
|
4
|
+
export interface ModelInfo {
|
|
5
|
+
id: string;
|
|
6
|
+
ownedBy?: string;
|
|
7
|
+
}
|
|
8
|
+
/** Toggles for optional chat affordances. Each defaults to enabled (true). */
|
|
9
|
+
export interface ChatFeatures {
|
|
10
|
+
/** Tool-approval modal driven by the approval manager. */
|
|
11
|
+
approvals?: boolean;
|
|
12
|
+
/** Sub-agent panel, @mention dispatch, and the agent picker. */
|
|
13
|
+
subAgents?: boolean;
|
|
14
|
+
/** `/sessions` + `/new` session switching. */
|
|
15
|
+
sessionPicker?: boolean;
|
|
16
|
+
/** `/model` model switching. */
|
|
17
|
+
modelPicker?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface ChatHost {
|
|
20
|
+
/**
|
|
21
|
+
* The initial session. Optional: when omitted, the session is created lazily
|
|
22
|
+
* via {@link ChatHost.createSession} on the first user message — nothing is
|
|
23
|
+
* persisted until the user actually sends something.
|
|
24
|
+
*/
|
|
25
|
+
session?: AgentSession;
|
|
26
|
+
approvals: ApprovalManager;
|
|
27
|
+
cwd: string;
|
|
28
|
+
createSession(): AgentSession;
|
|
29
|
+
forkSession(id: string, upToIndex: number): Promise<AgentSession>;
|
|
30
|
+
listSessions(): Promise<SessionRecord[]>;
|
|
31
|
+
openSession(id: string): Promise<AgentSession>;
|
|
32
|
+
selectModel(ref: string): void;
|
|
33
|
+
modelRef(): string;
|
|
34
|
+
listModels(): Promise<ModelInfo[]>;
|
|
35
|
+
agentRef(): string;
|
|
36
|
+
agentColor(): string | undefined;
|
|
37
|
+
cycleAgent(): string;
|
|
38
|
+
agentNames(): string[];
|
|
39
|
+
subAgents: SubAgentRegistry;
|
|
40
|
+
dispatchSubAgent(agent: string, task: string, parentId: string): Promise<SubAgentResult>;
|
|
41
|
+
initialTheme: string;
|
|
42
|
+
saveTheme(name: string): void;
|
|
43
|
+
initialThinking: boolean;
|
|
44
|
+
saveThinking(visible: boolean): void;
|
|
45
|
+
/** Input-line history persistence. Optional; in-memory only when omitted. */
|
|
46
|
+
history?: {
|
|
47
|
+
load(): string[];
|
|
48
|
+
append(text: string): void;
|
|
49
|
+
};
|
|
50
|
+
features?: ChatFeatures;
|
|
51
|
+
/**
|
|
52
|
+
* ASCII art shown centered in the empty transcript, before the first message
|
|
53
|
+
* (a splash). Cleared once the conversation starts.
|
|
54
|
+
*/
|
|
55
|
+
banner?: string;
|
|
56
|
+
onExit(code: number): void;
|
|
57
|
+
}
|
|
58
|
+
export declare class ChatApp {
|
|
59
|
+
private readonly host;
|
|
60
|
+
private readonly tui;
|
|
61
|
+
private readonly terminal;
|
|
62
|
+
private readonly editor;
|
|
63
|
+
private readonly scroll;
|
|
64
|
+
private readonly transcript;
|
|
65
|
+
private readonly subScroll;
|
|
66
|
+
private readonly subTranscript;
|
|
67
|
+
private readonly themeProvider;
|
|
68
|
+
private readonly commands;
|
|
69
|
+
private session;
|
|
70
|
+
private readonly features;
|
|
71
|
+
private readonly banner;
|
|
72
|
+
private unsubscribe;
|
|
73
|
+
private unsubscribeTheme;
|
|
74
|
+
private unsubscribeSubAgents;
|
|
75
|
+
private readonly runUnsubs;
|
|
76
|
+
private readonly activeRuns;
|
|
77
|
+
private mentionAc;
|
|
78
|
+
private readonly status;
|
|
79
|
+
private running;
|
|
80
|
+
private readonly queue;
|
|
81
|
+
private readonly pendingShell;
|
|
82
|
+
private models;
|
|
83
|
+
private paletteCursor;
|
|
84
|
+
private paletteDismissedFor;
|
|
85
|
+
private pickerMention;
|
|
86
|
+
private pickerRanked;
|
|
87
|
+
private pickerCursor;
|
|
88
|
+
private history;
|
|
89
|
+
private historyIndex;
|
|
90
|
+
private historyDraft;
|
|
91
|
+
private spinnerTimer;
|
|
92
|
+
private lastEsc;
|
|
93
|
+
private modelPickerOpen;
|
|
94
|
+
private modelHandle;
|
|
95
|
+
private sessionPickerOpen;
|
|
96
|
+
private sessionHandle;
|
|
97
|
+
private approvalQueue;
|
|
98
|
+
private approvalCursor;
|
|
99
|
+
private unsubscribeApproval;
|
|
100
|
+
private errorText;
|
|
101
|
+
private errorTimer;
|
|
102
|
+
private stopped;
|
|
103
|
+
constructor(host: ChatHost);
|
|
104
|
+
start(): Promise<void>;
|
|
105
|
+
stop(): Promise<void>;
|
|
106
|
+
private theme;
|
|
107
|
+
private commandHost;
|
|
108
|
+
private openSessionPicker;
|
|
109
|
+
private buildSessionPicker;
|
|
110
|
+
private bindSession;
|
|
111
|
+
private feature;
|
|
112
|
+
/** Returns the active session, creating it lazily on first use. */
|
|
113
|
+
private ensureSession;
|
|
114
|
+
private clearRuns;
|
|
115
|
+
private abortRuns;
|
|
116
|
+
private onSubAgentRun;
|
|
117
|
+
private tryDispatch;
|
|
118
|
+
private dispatchMention;
|
|
119
|
+
private swapSession;
|
|
120
|
+
private handleEvent;
|
|
121
|
+
private applyUsage;
|
|
122
|
+
private onTurnComplete;
|
|
123
|
+
private stripFileMentions;
|
|
124
|
+
private send;
|
|
125
|
+
private flushShellContext;
|
|
126
|
+
private submit;
|
|
127
|
+
private enqueueFromInput;
|
|
128
|
+
private onInputChange;
|
|
129
|
+
private intercept;
|
|
130
|
+
private cycleAgent;
|
|
131
|
+
private onEscape;
|
|
132
|
+
private cancelGeneration;
|
|
133
|
+
private paletteItems;
|
|
134
|
+
private paletteMove;
|
|
135
|
+
private paletteComplete;
|
|
136
|
+
private paletteRun;
|
|
137
|
+
private runCommand;
|
|
138
|
+
private pickerVisible;
|
|
139
|
+
private pickerMove;
|
|
140
|
+
private pickerAccept;
|
|
141
|
+
private deleteMention;
|
|
142
|
+
private pushHistory;
|
|
143
|
+
private navigateHistory;
|
|
144
|
+
private newSession;
|
|
145
|
+
private openModelPicker;
|
|
146
|
+
private buildModelPicker;
|
|
147
|
+
private moveApproval;
|
|
148
|
+
private resolveApproval;
|
|
149
|
+
private approvalView;
|
|
150
|
+
private switchModel;
|
|
151
|
+
private exportContext;
|
|
152
|
+
private toggleExpand;
|
|
153
|
+
private toggleThinking;
|
|
154
|
+
private toggleTheme;
|
|
155
|
+
private onCtrlC;
|
|
156
|
+
private recordShell;
|
|
157
|
+
private runShell;
|
|
158
|
+
private setStatus;
|
|
159
|
+
private showError;
|
|
160
|
+
private clearError;
|
|
161
|
+
private startSpinner;
|
|
162
|
+
private stopSpinner;
|
|
163
|
+
private loadModels;
|
|
164
|
+
/** Plain model id (+ provider) shown in the status bar. */
|
|
165
|
+
private modelText;
|
|
166
|
+
private updateSpeaker;
|
|
167
|
+
private promptGlyph;
|
|
168
|
+
private inputPanel;
|
|
169
|
+
private editorInner;
|
|
170
|
+
private errorView;
|
|
171
|
+
private waitingView;
|
|
172
|
+
/** The input area: error/palette/picker/waiting affordances + the input panel (no status bar). */
|
|
173
|
+
private inputGroup;
|
|
174
|
+
private statusBar;
|
|
175
|
+
private dock;
|
|
176
|
+
private jumpToBottom;
|
|
177
|
+
private jumpToBottomHint;
|
|
178
|
+
private stickyHeaderView;
|
|
179
|
+
private governingUser;
|
|
180
|
+
private focusedSub;
|
|
181
|
+
private subAgentHeader;
|
|
182
|
+
private subAgentView;
|
|
183
|
+
/** Wraps a child to a max width, horizontally centered (keeps its natural height). */
|
|
184
|
+
private centered;
|
|
185
|
+
/** The ASCII banner rendered at its natural height, centered as a block. */
|
|
186
|
+
private bannerBlock;
|
|
187
|
+
private root;
|
|
188
|
+
}
|