@wizardingcode/shibaox-tui 0.1.3 → 0.1.5
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/LICENSE +216 -0
- package/dist/main.js +8188 -0
- package/dist/main.js.map +67 -0
- package/package.json +9 -12
- package/src/app.tsx +0 -300
- package/src/component/dialogs/confirm.tsx +0 -29
- package/src/component/dialogs/diff.tsx +0 -143
- package/src/component/dialogs/help.tsx +0 -99
- package/src/component/dialogs/keys.tsx +0 -201
- package/src/component/dialogs/palette.tsx +0 -95
- package/src/component/dialogs/runs.tsx +0 -115
- package/src/component/dialogs/tiers.tsx +0 -240
- package/src/component/footer.tsx +0 -66
- package/src/component/logo.tsx +0 -29
- package/src/component/prompt/autocomplete.tsx +0 -44
- package/src/component/prompt/index.tsx +0 -213
- package/src/component/reconnecting.tsx +0 -44
- package/src/component/sidebar.tsx +0 -235
- package/src/component/tabs.tsx +0 -116
- package/src/component/too-small.tsx +0 -15
- package/src/context/client.tsx +0 -54
- package/src/context/commands.tsx +0 -44
- package/src/context/config.tsx +0 -22
- package/src/context/data-state.ts +0 -41
- package/src/context/data.tsx +0 -308
- package/src/context/exit.tsx +0 -13
- package/src/context/keys.tsx +0 -70
- package/src/context/poller.ts +0 -352
- package/src/context/prefs.tsx +0 -54
- package/src/context/route.tsx +0 -23
- package/src/main.tsx +0 -55
- package/src/model/format.ts +0 -38
- package/src/model/prompt-commands.ts +0 -315
- package/src/model/status.ts +0 -55
- package/src/model/stream.ts +0 -464
- package/src/motion/animation.ts +0 -235
- package/src/motion/config.tsx +0 -15
- package/src/motion/fade-in-text.tsx +0 -93
- package/src/motion/masked-text.ts +0 -62
- package/src/motion/one-cell-motion.ts +0 -100
- package/src/motion/pulse.ts +0 -38
- package/src/motion/shimmer-text.tsx +0 -78
- package/src/motion/spinner-renderable.ts +0 -171
- package/src/motion/spinner.tsx +0 -100
- package/src/motion/subcell.ts +0 -40
- package/src/routes/home.tsx +0 -365
- package/src/routes/session/approval-bar.tsx +0 -136
- package/src/routes/session/cards.tsx +0 -495
- package/src/routes/session/context-line.tsx +0 -129
- package/src/routes/session/continue.tsx +0 -104
- package/src/routes/session/index.tsx +0 -340
- package/src/routes/session/request.tsx +0 -87
- package/src/routes/session/timeline.tsx +0 -313
- package/src/testing/fake-client.ts +0 -249
- package/src/theme/context.tsx +0 -44
- package/src/theme/resolve.ts +0 -196
- package/src/theme/shibaox.json +0 -159
- package/src/ui/border.ts +0 -20
- package/src/ui/delayed-presence.ts +0 -23
- package/src/ui/dialog.tsx +0 -123
- package/src/ui/layout.ts +0 -23
- package/src/ui/marquee.ts +0 -75
- package/src/ui/pane-resize.ts +0 -77
- package/src/ui/toast.tsx +0 -203
- package/tsconfig.json +0 -19
package/dist/main.js.map
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/main.tsx", "../src/app.tsx", "../src/component/dialogs/help.tsx", "../src/theme/context.tsx", "../src/theme/resolve.ts", "../src/ui/dialog.tsx", "../src/context/keys.tsx", "../src/component/dialogs/palette.tsx", "../src/context/commands.tsx", "../src/component/dialogs/runs.tsx", "../src/context/data.tsx", "../src/model/format.ts", "../src/model/stream.ts", "../src/routes/session/request.tsx", "../src/context/config.tsx", "../src/context/data-state.ts", "../src/context/poller.ts", "../src/model/status.ts", "../src/component/reconnecting.tsx", "../src/motion/spinner.tsx", "../src/motion/config.tsx", "../src/motion/subcell.ts", "../src/motion/one-cell-motion.ts", "../src/motion/spinner-renderable.ts", "../src/ui/delayed-presence.ts", "../src/component/tabs.tsx", "../src/motion/pulse.ts", "../src/component/logo.tsx", "../src/component/too-small.tsx", "../src/ui/layout.ts", "../src/context/client.tsx", "../src/context/exit.tsx", "../src/context/prefs.tsx", "../src/context/route.tsx", "../src/routes/home.tsx", "../src/component/dialogs/keys.tsx", "../src/ui/toast.tsx", "../src/ui/border.ts", "../src/component/dialogs/tiers.tsx", "../src/component/footer.tsx", "../src/ui/marquee.ts", "../src/component/prompt/index.tsx", "../src/model/prompt-commands.ts", "../src/component/prompt/autocomplete.tsx", "../src/routes/session/index.tsx", "../src/component/dialogs/confirm.tsx", "../src/component/dialogs/diff.tsx", "../src/component/sidebar.tsx", "../src/routes/session/approval-bar.tsx", "../src/motion/animation.ts", "../src/motion/shimmer-text.tsx", "../src/motion/masked-text.ts", "../src/ui/pane-resize.ts", "../src/routes/session/context-line.tsx", "../src/routes/session/continue.tsx", "../src/routes/session/timeline.tsx", "../src/routes/session/cards.tsx", "../src/motion/fade-in-text.tsx"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * The Bun entry the CLI spawns (from the apps/tui root, with @opentui/solid/preload):\n * bun --preload @opentui/solid/preload src/main.tsx dashboard --socket <path> --home <dir> --version <v> [--cwd <dir>]\n * bun --preload @opentui/solid/preload src/main.tsx stream <runId> --socket <path> --home <dir>\n */\nimport { appendFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { DaemonClient } from '@wizardingcode/shibaox-daemon/client';\nimport { runDashboard, runStream } from './app.js';\nfunction arg(name) {\n const i = process.argv.indexOf(`--${name}`);\n return i >= 0 ? process.argv[i + 1] : undefined;\n}\nconst mode = process.argv[2];\nconst socket = arg('socket');\nconst home = arg('home');\nif (!socket || !home || mode !== 'dashboard' && mode !== 'stream') {\n console.error('usage: main.tsx dashboard|stream [runId] --socket <path> --home <dir> [--version <v>] [--cwd <dir>]');\n process.exit(2);\n}\nconst client = new DaemonClient(socket);\nconst log = line => {\n try {\n appendFileSync(join(home, 'tui.log'), `${new Date().toISOString()} ${line}\\n`);\n } catch {\n // the log is a convenience; never fail the UI over it\n }\n};\nif (mode === 'dashboard') {\n const code = await runDashboard(client, {\n version: arg('version') ?? '0.0.0',\n home,\n cwd: arg('cwd'),\n log\n });\n process.exit(code);\n} else {\n const runId = process.argv[3];\n if (!runId) {\n console.error('usage: main.tsx stream <runId> ...');\n process.exit(2);\n }\n const r = await runStream(client, runId, {\n version: arg('version') ?? '0.0.0',\n home,\n cwd: arg('cwd'),\n log\n });\n if (r.message) console.log(r.message);\n process.exit(r.code);\n}",
|
|
6
|
+
"import { effect as _$effect } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { createCliRenderer } from '@opentui/core';\nimport { render, useTerminalDimensions } from '@opentui/solid';\nimport { createEffect, Match, Show, Switch } from 'solid-js';\nimport { HelpDialog } from './component/dialogs/help.js';\nimport { PaletteDialog } from './component/dialogs/palette.js';\nimport { RunsDialog } from './component/dialogs/runs.js';\nimport { Reconnecting } from './component/reconnecting.js';\nimport { Tabs } from './component/tabs.js';\nimport { TooSmall } from './component/too-small.js';\nimport { ClientProvider } from './context/client.js';\nimport { CommandsProvider, useCommands } from './context/commands.js';\nimport { ConfigProvider } from './context/config.js';\nimport { DataProvider, useData } from './context/data.js';\nimport { ExitProvider, useExit } from './context/exit.js';\nimport { KeysProvider, useKeys } from './context/keys.js';\nimport { loadPrefs, PrefsProvider } from './context/prefs.js';\nimport { RouteProvider } from './context/route.js';\nimport { MotionProvider, motionEnabled } from './motion/config.js';\nimport { Home } from './routes/home.js';\nimport { SessionFrame } from './routes/session/index.js';\nimport { ThemeProvider, useTheme } from './theme/context.js';\nimport { DialogProvider, useDialog } from './ui/dialog.js';\nimport { tooSmall } from './ui/layout.js';\nimport { Toast, ToastProvider, useToast } from './ui/toast.js';\n\n/** What tests and the stream entry get from a mounted app. */\n\n/** Tabs rail, the active tab's screen (home or a run), overlays and toasts. */\nfunction Shell(props) {\n const data = useData();\n const dialog = useDialog();\n const commands = useCommands();\n const exit = useExit();\n const theme = useTheme();\n const dimensions = useTerminalDimensions();\n const active = () => props.single ?? data.state.active;\n const help = () => dialog.open(() => _$createComponent(HelpDialog, {}));\n const shell = [{\n id: 'home',\n label: 'New run',\n keys: 'ctrl+n',\n run: () => data.activate(undefined),\n when: () => !props.single\n }, {\n id: 'runs',\n label: 'Open a run',\n keys: 'ctrl+o',\n run: () => dialog.open(() => _$createComponent(RunsDialog, {})),\n when: () => !props.single\n }, {\n id: 'next',\n label: 'Next tab',\n keys: 'ctrl+]',\n run: () => data.nextTab(1),\n when: () => !props.single\n }, {\n id: 'prev',\n label: 'Previous tab',\n keys: 'ctrl+p',\n run: () => data.nextTab(-1),\n when: () => !props.single\n }, {\n id: 'close',\n label: 'Close tab',\n keys: 'ctrl+w',\n run: () => data.state.active && data.closeRun(data.state.active),\n when: () => !!data.state.active && !props.single\n }, {\n id: 'help',\n label: 'Help',\n keys: '?',\n run: help\n }, {\n id: 'quit',\n label: 'Quit',\n keys: 'ctrl+q',\n run: () => exit(0)\n }];\n commands.register(shell);\n useKeys('global', key => {\n if (key.name === '?' && !key.ctrl) {\n help();\n return true;\n }\n if (!key.ctrl) return false;\n if (key.name === 'k') {\n dialog.open(() => _$createComponent(PaletteDialog, {}));\n return true;\n }\n if (props.single) return false;\n const cmd = shell.find(c => c.keys === `ctrl+${key.name}`);\n if (!cmd) return false;\n cmd.run();\n return true;\n });\n return (() => {\n var _el$ = _$createElement(\"box\");\n _$setProp(_el$, \"width\", \"100%\");\n _$setProp(_el$, \"height\", \"100%\");\n _$setProp(_el$, \"flexDirection\", \"column\");\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return !tooSmall(dimensions().width, dimensions().height);\n },\n get fallback() {\n return _$createComponent(TooSmall, {});\n },\n get children() {\n var _el$2 = _$createElement(\"box\"),\n _el$3 = _$createElement(\"box\");\n _$insertNode(_el$2, _el$3);\n _$setProp(_el$2, \"width\", \"100%\");\n _$setProp(_el$2, \"height\", \"100%\");\n _$setProp(_el$2, \"flexDirection\", \"column\");\n _$insert(_el$2, _$createComponent(Show, {\n get when() {\n return _$memo(() => !!!props.single)() && data.state.open.length > 0;\n },\n get children() {\n return _$createComponent(Tabs, {});\n }\n }), _el$3);\n _$setProp(_el$3, \"flexGrow\", 1);\n _$setProp(_el$3, \"flexDirection\", \"column\");\n _$setProp(_el$3, \"width\", \"100%\");\n _$insert(_el$3, _$createComponent(Switch, {\n get children() {\n return [_$createComponent(Match, {\n get when() {\n return !active();\n },\n get children() {\n return _$createComponent(Home, {});\n }\n }), _$createComponent(Match, {\n get when() {\n return active();\n },\n children: id => _$createComponent(SessionFrame, {\n get runId() {\n return id();\n },\n get single() {\n return !!props.single;\n }\n })\n })];\n }\n }));\n return _el$2;\n }\n }), null);\n _$insert(_el$, _$createComponent(Reconnecting, {\n since: () => data.state.unreachableSince\n }), null);\n _$insert(_el$, _$createComponent(Toast, {}), null);\n _$effect(_$p => _$setProp(_el$, \"backgroundColor\", theme.background.base, _$p));\n return _el$;\n })();\n}\nfunction Hooks(props) {\n const data = useData();\n props.onMount?.({\n data\n });\n createEffect(() => {\n const status = props.runId ? data.state.ended[props.runId] : undefined;\n if (status) props.onEnded?.(status);\n });\n return null;\n}\nfunction WithData(props) {\n const toast = useToast();\n return _$createComponent(DataProvider, {\n get client() {\n return props.client;\n },\n get single() {\n return props.runId;\n },\n toast: t => toast.show(t),\n get log() {\n return props.log;\n },\n get children() {\n return _$createComponent(RouteProvider, {\n get initial() {\n return _$memo(() => !!props.runId)() ? {\n type: 'session',\n runId: props.runId\n } : {\n type: 'home'\n };\n },\n get children() {\n return [_$createComponent(Hooks, {\n get onMount() {\n return props.onMount;\n },\n get runId() {\n return props.runId;\n },\n get onEnded() {\n return props.onEnded;\n }\n }), _$createComponent(CommandsProvider, {\n get children() {\n return _$createComponent(DialogProvider, {\n get children() {\n return _$createComponent(Shell, {\n get single() {\n return props.runId;\n }\n });\n }\n });\n }\n })];\n }\n });\n }\n });\n}\n\n/** The whole dashboard: providers around the shell. */\nexport function App(props) {\n const env = props.env ?? process.env;\n const cwd = props.cwd ?? process.cwd();\n return _$createComponent(ClientProvider, {\n get client() {\n return props.client;\n },\n get children() {\n return _$createComponent(ConfigProvider, {\n get config() {\n return {\n version: props.version,\n home: props.home,\n cwd,\n env\n };\n },\n get children() {\n return _$createComponent(PrefsProvider, {\n get home() {\n return props.home;\n },\n get children() {\n return _$createComponent(MotionProvider, {\n get enabled() {\n return motionEnabled(env, loadPrefs(props.home));\n },\n get children() {\n return _$createComponent(ThemeProvider, {\n get children() {\n return _$createComponent(KeysProvider, {\n get onExit() {\n return props.onExit;\n },\n get children() {\n return _$createComponent(ExitProvider, {\n get onExit() {\n return props.onExit;\n },\n get children() {\n return _$createComponent(ToastProvider, {\n get children() {\n return _$createComponent(WithData, props);\n }\n });\n }\n });\n }\n });\n }\n });\n }\n });\n }\n });\n }\n });\n }\n });\n}\nasync function rendererFor(o) {\n if (o.renderer) return {\n renderer: o.renderer,\n owned: false\n };\n const renderer = await createCliRenderer({\n exitOnCtrlC: false,\n screenMode: 'alternate-screen',\n useMouse: true\n });\n return {\n renderer,\n owned: true\n };\n}\n\n/** Ctrl-C outside Solid so a crash before the first frame can never trap the terminal. */\nfunction onCtrlC(renderer, fn) {\n const handler = key => {\n if (key.ctrl && key.name === 'c') fn();\n };\n renderer.keyInput.on('keypress', handler);\n return () => renderer.keyInput.off('keypress', handler);\n}\nfunction mount(client, o, finish) {\n return rendererFor(o).then(async ({\n renderer,\n owned\n }) => {\n let done = false;\n let rendered = false;\n const end = outcome => {\n if (done) return;\n done = true;\n off();\n if (owned) renderer.destroy();\n finish(outcome);\n };\n // the in-app handler decides ctrl+c (a prompt may consume it); this listener only saves\n // the terminal when the app never rendered\n const off = onCtrlC(renderer, () => {\n if (!rendered) end({\n code: 0\n });\n });\n await render(() => _$createComponent(App, {\n client: client,\n get version() {\n return o.version;\n },\n get home() {\n return o.home;\n },\n get cwd() {\n return o.cwd;\n },\n get env() {\n return o.env;\n },\n get runId() {\n return o.runId;\n },\n get log() {\n return o.log;\n },\n onExit: code => end({\n code\n }),\n onEnded: status => end({\n code: status === 'completed' ? 0 : 2,\n ended: status\n }),\n onMount: () => {\n rendered = true;\n }\n }), renderer);\n return () => end({\n code: 0\n });\n });\n}\n\n/** `shibaox` / `shibaox ui`: resolves with the exit code when the user quits. */\nexport function runDashboard(client, o) {\n return new Promise(resolve => {\n void mount(client, o, r => resolve(r.code));\n });\n}\n\n/**\n * `shibaox run|follow` with a TTY: one run; ends with the run (0 done, 2 otherwise) or when the\n * user leaves (then the message says the run keeps running).\n */\nexport function runStream(client, runId, o) {\n return new Promise(resolve => {\n void mount(client, {\n ...o,\n runId\n }, r => resolve(r.ended ? {\n code: r.code\n } : {\n code: r.code,\n message: r.code === 0 ? `Run ${runId} keeps running. Follow it with: shibaox follow ${runId}` : undefined\n })).then(stop => o.signal?.addEventListener('abort', stop, {\n once: true\n }));\n });\n}",
|
|
7
|
+
"import { effect as _$effect } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { TextAttributes } from '@opentui/core';\nimport { For } from 'solid-js';\nimport { useTheme } from '../../theme/context.js';\nimport { Dialog, useDialog } from '../../ui/dialog.js';\nconst LEFT = [{\n title: 'Global',\n keys: [['ctrl+n', 'home / new run'], ['ctrl+o', 'open a run'], ['ctrl+k', 'command palette'], ['ctrl+b', 'toggle the sidebar'], ['ctrl+] · ctrl+p', 'next / previous tab'], ['ctrl+w', 'close the tab'], ['?', 'this help (outside inputs)'], ['ctrl+q', 'quit; runs keep going']]\n}, {\n title: 'Dialogs',\n keys: [['esc', 'close'], ['↑/↓ · enter', 'choose'], ['typing', 'filters']]\n}];\nconst RIGHT = [{\n title: 'Session',\n keys: [['j / k', 'move the cursor'], ['↑ / ↓ · wheel', 'scroll the view'], ['enter', 'expand / collapse'], ['g · G', 'top · follow the end'], ['d', 'diff (deny while waiting)'], ['c', 'cancel the run'], ['r', 'resume a paused run'], ['a · d · n', 'approve · deny · note'], ['tab', 'focus the sidebar']]\n}, {\n title: 'Sidebar',\n keys: [['j/k', 'select a run'], ['enter', 'open it'], ['a · d', 'answer its item'], ['tab', 'back']]\n}];\nfunction Column(props) {\n const theme = useTheme().surface('dialog');\n return (() => {\n var _el$ = _$createElement(\"box\");\n _$setProp(_el$, \"flexDirection\", \"column\");\n _$setProp(_el$, \"flexGrow\", 1);\n _$setProp(_el$, \"flexBasis\", 0);\n _$insert(_el$, _$createComponent(For, {\n get each() {\n return props.sections;\n },\n children: s => (() => {\n var _el$2 = _$createElement(\"box\"),\n _el$3 = _$createElement(\"text\");\n _$insertNode(_el$2, _el$3);\n _$setProp(_el$2, \"flexDirection\", \"column\");\n _$setProp(_el$2, \"flexShrink\", 0);\n _$setProp(_el$2, \"marginBottom\", 1);\n _$insert(_el$3, () => s.title);\n _$insert(_el$2, _$createComponent(For, {\n get each() {\n return s.keys;\n },\n children: ([k, what]) => (() => {\n var _el$4 = _$createElement(\"box\"),\n _el$5 = _$createElement(\"box\"),\n _el$6 = _$createElement(\"text\"),\n _el$7 = _$createElement(\"text\");\n _$insertNode(_el$4, _el$5);\n _$insertNode(_el$4, _el$7);\n _$setProp(_el$4, \"height\", 1);\n _$setProp(_el$4, \"flexShrink\", 0);\n _$setProp(_el$4, \"flexDirection\", \"row\");\n _$insertNode(_el$5, _el$6);\n _$setProp(_el$5, \"width\", 16);\n _$setProp(_el$5, \"flexShrink\", 0);\n _$setProp(_el$6, \"wrapMode\", \"none\");\n _$insert(_el$6, k);\n _$setProp(_el$7, \"wrapMode\", \"none\");\n _$insert(_el$7, what);\n _$effect(_p$ => {\n var _v$3 = theme.text.base,\n _v$4 = theme.text.muted;\n _v$3 !== _p$.e && (_p$.e = _$setProp(_el$6, \"fg\", _v$3, _p$.e));\n _v$4 !== _p$.t && (_p$.t = _$setProp(_el$7, \"fg\", _v$4, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$4;\n })()\n }), null);\n _$effect(_p$ => {\n var _v$ = theme.text.action.primary.selected,\n _v$2 = TextAttributes.BOLD;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$3, \"fg\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$3, \"attributes\", _v$2, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$2;\n })()\n }));\n return _el$;\n })();\n}\n\n/** Every key, by context, in two columns. */\nexport function HelpDialog() {\n const dialog = useDialog();\n return _$createComponent(Dialog, {\n size: \"large\",\n title: \"Keys\",\n onClose: () => dialog.close(),\n get children() {\n var _el$8 = _$createElement(\"box\");\n _$setProp(_el$8, \"flexDirection\", \"row\");\n _$setProp(_el$8, \"width\", \"100%\");\n _$setProp(_el$8, \"gap\", 2);\n _$insert(_el$8, _$createComponent(Column, {\n sections: LEFT\n }), null);\n _$insert(_el$8, _$createComponent(Column, {\n sections: RIGHT\n }), null);\n return _el$8;\n }\n });\n}",
|
|
8
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { SyntaxStyle } from '@opentui/core';\nimport { createContext, createMemo, onCleanup, useContext } from 'solid-js';\nimport { resolveTheme, syntaxStyles } from './resolve.js';\nimport shibaox from './shibaox.json' with { type: 'json' };\nlet cached;\n/** The built-in shibaox theme, resolved once. */\nexport function defaultTheme() {\n cached ??= resolveTheme(shibaox);\n return cached;\n}\nconst Context = createContext();\nexport function ThemeProvider(props) {\n const theme = props.theme ?? defaultTheme();\n const syntax = createMemo(() => SyntaxStyle.fromStyles(syntaxStyles(theme)));\n // a native handle: released a little after the provider goes, once no renderable draws with it\n onCleanup(() => {\n const style = syntax();\n setTimeout(() => style.destroy(), 500);\n });\n return _$createComponent(Context.Provider, {\n value: {\n theme,\n syntax\n },\n get children() {\n return props.children;\n }\n });\n}\nexport function useTheme() {\n const c = useContext(Context);\n if (!c) throw new Error('useTheme outside ThemeProvider');\n return c.theme;\n}\n\n/** The syntax style for `<markdown>`, `<code>` and `<diff>`, memoized per theme. */\nexport function useSyntax() {\n const c = useContext(Context);\n if (!c) throw new Error('useSyntax outside ThemeProvider');\n return c.syntax();\n}",
|
|
9
|
+
"import { RGBA, type StyleDefinitionInput } from '@opentui/core';\n\nexport type Feedback = 'error' | 'warning' | 'success' | 'info' | 'running';\nexport type SurfaceName = 'dialog' | 'sidebar' | 'toast';\nexport type SyntaxToken =\n | 'keyword'\n | 'string'\n | 'comment'\n | 'function'\n | 'type'\n | 'number'\n | 'heading'\n | 'link';\n\nexport interface ResolvedTheme {\n text: {\n base: RGBA;\n muted: RGBA;\n action: { primary: { base: RGBA; focused: RGBA; selected: RGBA; disabled: RGBA } };\n feedback: Record<Feedback, RGBA>;\n };\n background: {\n base: RGBA;\n raised: { base: RGBA; high: RGBA; max: RGBA };\n action: { primary: { hovered: RGBA; focused: RGBA; selected: RGBA } };\n feedback: Record<Feedback, RGBA>;\n };\n border: { base: RGBA };\n scrollbar: { base: RGBA };\n diff: { added: RGBA; removed: RGBA; addedBg: RGBA; removedBg: RGBA };\n syntax: Record<SyntaxToken, RGBA>;\n /** The same theme one level up: dialogs, sidebars and toasts sit on a raised surface. */\n surface(name: SurfaceName): ResolvedTheme;\n}\n\ntype Json = string | number | boolean | null | Json[] | { [k: string]: Json };\n\nconst FEEDBACK: Feedback[] = ['error', 'warning', 'success', 'info', 'running'];\nconst SYNTAX: SyntaxToken[] = [\n 'keyword',\n 'string',\n 'comment',\n 'function',\n 'type',\n 'number',\n 'heading',\n 'link',\n];\n\nfunction lookup(root: Json, path: string): Json | undefined {\n let cur: Json | undefined = root;\n for (const part of path.split('.')) {\n if (cur === null || typeof cur !== 'object' || Array.isArray(cur)) return undefined;\n cur = (cur as { [k: string]: Json })[part];\n }\n return cur;\n}\n\n/** Turns `#rrggbb` or a `$a.b.c` reference (recursively) into an RGBA; throws on a dangling ref. */\nfunction color(root: Json, value: Json | undefined, ref: string, depth = 0): RGBA {\n if (typeof value !== 'string' || depth > 16) throw new Error(`theme: unresolved ${ref}`);\n if (value.startsWith('$')) {\n const target = lookup(root, value.slice(1));\n if (target === undefined) throw new Error(`theme: unresolved ${value}`);\n return color(root, target, value, depth + 1);\n }\n if (!/^#[0-9a-fA-F]{6}$/.test(value)) throw new Error(`theme: unresolved ${ref}`);\n return RGBA.fromHex(value);\n}\n\nfunction build(get: (path: string) => RGBA): ResolvedTheme {\n const feedback = (prefix: string): Record<Feedback, RGBA> =>\n Object.fromEntries(FEEDBACK.map((f) => [f, get(`${prefix}.${f}`)])) as Record<Feedback, RGBA>;\n const theme: ResolvedTheme = {\n text: {\n base: get('text.base'),\n muted: get('text.muted'),\n action: {\n primary: {\n base: get('text.action.primary.base'),\n focused: get('text.action.primary.focused'),\n selected: get('text.action.primary.selected'),\n disabled: get('text.action.primary.disabled'),\n },\n },\n feedback: feedback('text.feedback'),\n },\n background: {\n base: get('background.base'),\n raised: {\n base: get('background.raised.base'),\n high: get('background.raised.high'),\n max: get('background.raised.max'),\n },\n action: {\n primary: {\n hovered: get('background.action.primary.hovered'),\n focused: get('background.action.primary.focused'),\n selected: get('background.action.primary.selected'),\n },\n },\n feedback: feedback('background.feedback'),\n },\n border: { base: get('border.base') },\n scrollbar: { base: get('scrollbar.base') },\n diff: {\n added: get('diff.added'),\n removed: get('diff.removed'),\n addedBg: get('diff.addedBg'),\n removedBg: get('diff.removedBg'),\n },\n syntax: Object.fromEntries(SYNTAX.map((s) => [s, get(`syntax.${s}`)])) as Record<\n SyntaxToken,\n RGBA\n >,\n surface: () => raise(theme),\n };\n return theme;\n}\n\n/** Re-resolves the theme on a raised surface: each background level moves one step up. */\nfunction raise(base: ResolvedTheme): ResolvedTheme {\n const theme: ResolvedTheme = {\n ...base,\n background: {\n ...base.background,\n base: base.background.raised.base,\n raised: {\n base: base.background.raised.high,\n high: base.background.raised.max,\n max: base.background.raised.max,\n },\n },\n surface: () => raise(theme),\n };\n return theme;\n}\n\n/** Resolves a theme JSON (hue scales + semantic tokens with `$` references) into RGBA tokens. */\nexport function resolveTheme(json: unknown): ResolvedTheme {\n const root = json as Json;\n const cache = new Map<string, RGBA>();\n const get = (path: string): RGBA => {\n let c = cache.get(path);\n if (!c) {\n c = color(root, lookup(root, path), `$${path}`);\n cache.set(path, c);\n }\n return c;\n };\n return build(get);\n}\n\n/** What the markdown, code and diff renderables ask a `SyntaxStyle` for. */\nexport function syntaxStyles(t: ResolvedTheme): Record<string, StyleDefinitionInput> {\n const s = t.syntax;\n return {\n default: { fg: t.text.base },\n conceal: { fg: t.text.muted },\n keyword: { fg: s.keyword },\n 'keyword.function': { fg: s.keyword },\n 'keyword.return': { fg: s.keyword },\n 'keyword.import': { fg: s.keyword },\n string: { fg: s.string },\n 'string.special': { fg: s.string },\n comment: { fg: s.comment, italic: true },\n function: { fg: s.function },\n 'function.call': { fg: s.function },\n 'function.method': { fg: s.function },\n type: { fg: s.type },\n 'type.builtin': { fg: s.type },\n number: { fg: s.number },\n boolean: { fg: s.number },\n constant: { fg: s.number },\n operator: { fg: t.text.muted },\n punctuation: { fg: t.text.muted },\n 'punctuation.bracket': { fg: t.text.muted },\n variable: { fg: t.text.base },\n property: { fg: t.text.base },\n 'markup.heading': { fg: s.heading, bold: true },\n 'markup.bold': { fg: t.text.base, bold: true },\n 'markup.strong': { fg: t.text.base, bold: true },\n 'markup.italic': { fg: t.text.base, italic: true },\n 'markup.raw': { fg: s.string },\n 'markup.raw.block': { fg: t.text.base },\n 'markup.raw.inline': { fg: s.string },\n 'markup.link': { fg: s.link, underline: true },\n 'markup.link.url': { fg: s.link, underline: true },\n 'markup.link.label': { fg: s.link },\n 'markup.list': { fg: s.keyword },\n 'markup.quote': { fg: t.text.muted, italic: true },\n 'markup.strikethrough': { fg: t.text.muted },\n 'diff.plus': { fg: t.diff.added },\n 'diff.minus': { fg: t.diff.removed },\n };\n}\n",
|
|
10
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\n// Adapted from opencode (MIT) — https://github.com/anomalyco/opencode\nimport { RGBA, TextAttributes } from '@opentui/core';\nimport { useTerminalDimensions } from '@opentui/solid';\nimport { createContext, For, useContext } from 'solid-js';\nimport { createStore } from 'solid-js/store';\nimport { useKeys } from '../context/keys.js';\nimport { useTheme } from '../theme/context.js';\nexport function dialogWidth(size) {\n if (size === 'xlarge') return 116;\n if (size === 'large') return 88;\n return 60;\n}\n\n/** A modal surface over a dimmed page; esc (or a click outside) calls onClose. */\nexport function Dialog(props) {\n const dimensions = useTerminalDimensions();\n const theme = useTheme().surface('dialog');\n useKeys('dialog', key => {\n if (key.name === 'escape') {\n props.onClose();\n return true;\n }\n return false;\n });\n return (() => {\n var _el$ = _$createElement(\"box\"),\n _el$2 = _$createElement(\"box\");\n _$insertNode(_el$, _el$2);\n _$setProp(_el$, \"position\", \"absolute\");\n _$setProp(_el$, \"left\", 0);\n _$setProp(_el$, \"top\", 0);\n _$setProp(_el$, \"zIndex\", 3000);\n _$setProp(_el$, \"alignItems\", \"center\");\n _$setProp(_el$, \"onMouseUp\", () => props.onClose());\n _$setProp(_el$2, \"paddingTop\", 1);\n _$setProp(_el$2, \"paddingBottom\", 1);\n _$setProp(_el$2, \"paddingLeft\", 2);\n _$setProp(_el$2, \"paddingRight\", 2);\n _$setProp(_el$2, \"flexDirection\", \"column\");\n _$setProp(_el$2, \"onMouseUp\", e => e.stopPropagation());\n _$insert(_el$2, (() => {\n var _c$ = _$memo(() => !!props.title);\n return () => _c$() ? (() => {\n var _el$3 = _$createElement(\"box\"),\n _el$4 = _$createElement(\"text\");\n _$insertNode(_el$3, _el$4);\n _$setProp(_el$3, \"height\", 1);\n _$setProp(_el$3, \"flexShrink\", 0);\n _$setProp(_el$3, \"marginBottom\", 1);\n _$insert(_el$4, () => props.title);\n _$effect(_p$ => {\n var _v$9 = TextAttributes.BOLD,\n _v$0 = theme.text.base;\n _v$9 !== _p$.e && (_p$.e = _$setProp(_el$4, \"attributes\", _v$9, _p$.e));\n _v$0 !== _p$.t && (_p$.t = _$setProp(_el$4, \"fg\", _v$0, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$3;\n })() : null;\n })(), null);\n _$insert(_el$2, () => props.children, null);\n _$effect(_p$ => {\n var _v$ = dimensions().width,\n _v$2 = dimensions().height,\n _v$3 = props.centered ? 'center' : undefined,\n _v$4 = props.centered ? 0 : Math.floor(dimensions().height / 4),\n _v$5 = RGBA.fromInts(0, 0, 0, 150),\n _v$6 = dialogWidth(props.size ?? 'medium'),\n _v$7 = dimensions().width - 2,\n _v$8 = theme.background.base;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$, \"width\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$, \"height\", _v$2, _p$.t));\n _v$3 !== _p$.a && (_p$.a = _$setProp(_el$, \"justifyContent\", _v$3, _p$.a));\n _v$4 !== _p$.o && (_p$.o = _$setProp(_el$, \"paddingTop\", _v$4, _p$.o));\n _v$5 !== _p$.i && (_p$.i = _$setProp(_el$, \"backgroundColor\", _v$5, _p$.i));\n _v$6 !== _p$.n && (_p$.n = _$setProp(_el$2, \"width\", _v$6, _p$.n));\n _v$7 !== _p$.s && (_p$.s = _$setProp(_el$2, \"maxWidth\", _v$7, _p$.s));\n _v$8 !== _p$.h && (_p$.h = _$setProp(_el$2, \"backgroundColor\", _v$8, _p$.h));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined,\n n: undefined,\n s: undefined,\n h: undefined\n });\n return _el$;\n })();\n}\nconst Context = createContext();\n\n/** Keeps the dialog stack and draws it above the page. */\nexport function DialogProvider(props) {\n const [store, setStore] = createStore({\n stack: []\n });\n const api = {\n open(element, o) {\n setStore('stack', s => [...s, {\n element,\n onClose: o?.onClose\n }]);\n },\n close() {\n const top = store.stack.at(-1);\n if (!top) return;\n setStore('stack', s => s.slice(0, -1));\n top.onClose?.();\n },\n clear() {\n const all = [...store.stack];\n setStore('stack', []);\n for (const d of all) d.onClose?.();\n },\n depth: () => store.stack.length\n };\n return _$createComponent(Context.Provider, {\n value: api,\n get children() {\n return [_$memo(() => props.children), _$createComponent(For, {\n get each() {\n return store.stack;\n },\n children: d => d.element()\n })];\n }\n });\n}\nexport function useDialog() {\n const c = useContext(Context);\n if (!c) throw new Error('useDialog outside DialogProvider');\n return c;\n}",
|
|
11
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { TextareaRenderable } from '@opentui/core';\nimport { useKeyboard, useRenderer } from '@opentui/solid';\nimport { createContext, onCleanup, useContext } from 'solid-js';\n\n/** Returns true when the key was consumed. */\n\nconst Context = createContext();\n\n/**\n * One keyboard listener for the whole app, dispatched by scope: ctrl+q exits always; an open\n * dialog is modal (only dialog handlers see keys, newest first); a focused text input keeps every\n * plain key for prompt handlers; otherwise prompt handlers, then pane handlers, then global\n * handlers, each newest first, until one consumes the key.\n * ctrl+c exits unless a prompt handler consumes it (clearing its text) or a dialog is open.\n */\nexport function KeysProvider(props) {\n const entries = [];\n const renderer = useRenderer();\n useKeyboard(key => {\n if (key.ctrl && key.name === 'q') return props.onExit(0);\n // a focused text input owns every plain key: only prompt handlers may look at it\n // (they still see ctrl/meta chords and escape through the normal dispatch)\n const typing = renderer.currentFocusedRenderable instanceof TextareaRenderable && !key.ctrl && !key.meta && key.name !== 'escape';\n if (entries.some(e => e.scope === 'dialog')) {\n // modal: every key (ctrl+c included) belongs to the open dialogs, newest handler first\n for (const e of [...entries].reverse()) if (e.scope === 'dialog' && e.handler(key)) return;\n return;\n }\n const ordered = [...entries].reverse();\n const dispatch = scope => ordered.some(e => e.scope === scope && e.handler(key));\n if (typing) {\n dispatch('prompt');\n return;\n }\n if (key.ctrl && key.name === 'c') {\n if (dispatch('prompt')) return;\n return props.onExit(0);\n }\n if (dispatch('prompt')) return;\n if (dispatch('pane')) return;\n dispatch('global');\n });\n const register = e => {\n entries.push(e);\n return () => {\n const i = entries.indexOf(e);\n if (i >= 0) entries.splice(i, 1);\n };\n };\n return _$createComponent(Context.Provider, {\n value: {\n register\n },\n get children() {\n return props.children;\n }\n });\n}\n\n/** Registers a key handler for this component's lifetime. */\nexport function useKeys(scope, handler) {\n const c = useContext(Context);\n if (!c) throw new Error('useKeys outside KeysProvider');\n const off = c.register({\n scope,\n handler\n });\n onCleanup(off);\n}",
|
|
12
|
+
"import { insert as _$insert } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { TextAttributes } from '@opentui/core';\nimport fuzzysort from 'fuzzysort';\nimport { createMemo, createSignal, For } from 'solid-js';\nimport { useCommands } from '../../context/commands.js';\nimport { useKeys } from '../../context/keys.js';\nimport { useTheme } from '../../theme/context.js';\nimport { Dialog, useDialog } from '../../ui/dialog.js';\n\n/** Every available command with its keys; enter runs the selected one. */\nexport function PaletteDialog() {\n const registry = useCommands();\n const dialog = useDialog();\n const theme = useTheme().surface('dialog');\n const [query, setQuery] = createSignal('');\n const [cursor, setCursor] = createSignal(0);\n const rows = createMemo(() => {\n const all = registry.commands().filter(c => c.when?.() ?? true);\n const q = query().trim();\n if (!q) return all;\n return fuzzysort.go(q, all, {\n key: 'label'\n }).map(r => r.obj);\n });\n const run = () => {\n const c = rows()[Math.min(cursor(), rows().length - 1)];\n if (!c) return;\n dialog.close();\n c.run();\n };\n useKeys('dialog', key => {\n if (key.name === 'up') {\n setCursor(c => Math.max(0, c - 1));\n return true;\n }\n if (key.name === 'down') {\n setCursor(c => Math.min(rows().length - 1, c + 1));\n return true;\n }\n if (key.name === 'return') {\n run();\n return true;\n }\n return false;\n });\n return _$createComponent(Dialog, {\n title: \"Commands\",\n onClose: () => dialog.close(),\n get children() {\n return [(() => {\n var _el$ = _$createElement(\"box\"),\n _el$2 = _$createElement(\"text\"),\n _el$4 = _$createElement(\"input\");\n _$insertNode(_el$, _el$2);\n _$insertNode(_el$, _el$4);\n _$setProp(_el$, \"height\", 1);\n _$setProp(_el$, \"flexShrink\", 0);\n _$setProp(_el$, \"flexDirection\", \"row\");\n _$setProp(_el$, \"marginBottom\", 1);\n _$insertNode(_el$2, _$createTextNode(`› `));\n _$setProp(_el$2, \"flexShrink\", 0);\n _$setProp(_el$4, \"focused\", true);\n _$setProp(_el$4, \"placeholder\", \"type a command\");\n _$setProp(_el$4, \"onInput\", v => {\n setQuery(v);\n setCursor(0);\n });\n _$setProp(_el$4, \"flexGrow\", 1);\n _$effect(_p$ => {\n var _v$ = theme.text.action.primary.selected,\n _v$2 = theme.background.base,\n _v$3 = theme.background.base,\n _v$4 = theme.text.base,\n _v$5 = theme.text.muted,\n _v$6 = theme.text.action.primary.selected;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$2, \"fg\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$4, \"backgroundColor\", _v$2, _p$.t));\n _v$3 !== _p$.a && (_p$.a = _$setProp(_el$4, \"focusedBackgroundColor\", _v$3, _p$.a));\n _v$4 !== _p$.o && (_p$.o = _$setProp(_el$4, \"textColor\", _v$4, _p$.o));\n _v$5 !== _p$.i && (_p$.i = _$setProp(_el$4, \"placeholderColor\", _v$5, _p$.i));\n _v$6 !== _p$.n && (_p$.n = _$setProp(_el$4, \"cursorColor\", _v$6, _p$.n));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined,\n n: undefined\n });\n return _el$;\n })(), _$createComponent(For, {\n get each() {\n return rows().slice(0, 12);\n },\n children: (c, i) => {\n const selected = () => i() === Math.min(cursor(), rows().length - 1);\n return (() => {\n var _el$5 = _$createElement(\"box\"),\n _el$6 = _$createElement(\"text\"),\n _el$7 = _$createElement(\"box\"),\n _el$8 = _$createElement(\"text\");\n _$insertNode(_el$5, _el$6);\n _$insertNode(_el$5, _el$7);\n _$insertNode(_el$5, _el$8);\n _$setProp(_el$5, \"height\", 1);\n _$setProp(_el$5, \"flexShrink\", 0);\n _$setProp(_el$5, \"flexDirection\", \"row\");\n _$setProp(_el$5, \"onMouseUp\", () => {\n setCursor(i());\n run();\n });\n _$setProp(_el$6, \"wrapMode\", \"none\");\n _$insert(_el$6, () => c.label);\n _$setProp(_el$7, \"flexGrow\", 1);\n _$setProp(_el$8, \"wrapMode\", \"none\");\n _$insert(_el$8, () => c.keys);\n _$effect(_p$ => {\n var _v$7 = selected() ? theme.background.action.primary.selected : undefined,\n _v$8 = theme.text.base,\n _v$9 = selected() ? TextAttributes.BOLD : undefined,\n _v$0 = theme.text.muted;\n _v$7 !== _p$.e && (_p$.e = _$setProp(_el$5, \"backgroundColor\", _v$7, _p$.e));\n _v$8 !== _p$.t && (_p$.t = _$setProp(_el$6, \"fg\", _v$8, _p$.t));\n _v$9 !== _p$.a && (_p$.a = _$setProp(_el$6, \"attributes\", _v$9, _p$.a));\n _v$0 !== _p$.o && (_p$.o = _$setProp(_el$8, \"fg\", _v$0, _p$.o));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined\n });\n return _el$5;\n })();\n }\n })];\n }\n });\n}",
|
|
13
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { createContext, createSignal, useContext } from 'solid-js';\n\n/** An action the palette can run; `when` hides it while false. */\n\nconst Context = createContext();\n\n/** Screens register their commands here so the palette and help can list them. */\nexport function CommandsProvider(props) {\n const [all, setAll] = createSignal([]);\n const register = cmds => {\n setAll(a => [...a, cmds]);\n return () => setAll(a => a.filter(c => c !== cmds));\n };\n return _$createComponent(Context.Provider, {\n value: {\n commands: () => all().flat(),\n register\n },\n get children() {\n return props.children;\n }\n });\n}\nexport function useCommands() {\n const c = useContext(Context);\n if (!c) throw new Error('useCommands outside CommandsProvider');\n return c;\n}",
|
|
14
|
+
"import { insert as _$insert } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { TextAttributes } from '@opentui/core';\nimport fuzzysort from 'fuzzysort';\nimport { createMemo, createSignal, For } from 'solid-js';\nimport { useData } from '../../context/data.js';\nimport { useKeys } from '../../context/keys.js';\nimport { age, money, shortId } from '../../model/format.js';\nimport { statusOf } from '../../model/status.js';\nimport { useTheme } from '../../theme/context.js';\nimport { Dialog, useDialog } from '../../ui/dialog.js';\nconst VISIBLE = 20;\n\n/** Every run the daemon knows, filtered as you type; enter opens the selected one in a tab. */\nexport function RunsDialog() {\n const data = useData();\n const dialog = useDialog();\n const theme = useTheme().surface('dialog');\n const [query, setQuery] = createSignal('');\n const [cursor, setCursor] = createSignal(0);\n const rows = createMemo(() => {\n const runs = [...data.state.runs].sort((a, b) => b.createdAt.localeCompare(a.createdAt));\n const q = query().trim();\n if (!q) return runs;\n return fuzzysort.go(q, runs, {\n key: r => `${r.runId} ${r.workflow} ${r.status}`\n }).map(r => r.obj);\n });\n const open = () => {\n const r = rows()[Math.min(cursor(), rows().length - 1)];\n if (!r) return;\n dialog.close();\n data.openRun(r.runId);\n };\n useKeys('dialog', key => {\n if (key.name === 'up') {\n setCursor(c => Math.max(0, c - 1));\n return true;\n }\n if (key.name === 'down') {\n setCursor(c => Math.min(rows().length - 1, c + 1));\n return true;\n }\n if (key.name === 'return') {\n open();\n return true;\n }\n return false;\n });\n const start = () => Math.max(0, Math.min(cursor() - Math.floor(VISIBLE / 2), rows().length - VISIBLE));\n return _$createComponent(Dialog, {\n size: \"large\",\n title: \"Runs\",\n onClose: () => dialog.close(),\n get children() {\n return [(() => {\n var _el$ = _$createElement(\"box\"),\n _el$2 = _$createElement(\"text\"),\n _el$4 = _$createElement(\"input\");\n _$insertNode(_el$, _el$2);\n _$insertNode(_el$, _el$4);\n _$setProp(_el$, \"height\", 1);\n _$setProp(_el$, \"flexShrink\", 0);\n _$setProp(_el$, \"flexDirection\", \"row\");\n _$setProp(_el$, \"marginBottom\", 1);\n _$insertNode(_el$2, _$createTextNode(`› `));\n _$setProp(_el$2, \"flexShrink\", 0);\n _$setProp(_el$4, \"focused\", true);\n _$setProp(_el$4, \"placeholder\", \"type to filter\");\n _$setProp(_el$4, \"onInput\", v => {\n setQuery(v);\n setCursor(0);\n });\n _$setProp(_el$4, \"flexGrow\", 1);\n _$effect(_p$ => {\n var _v$ = theme.text.action.primary.selected,\n _v$2 = theme.background.base,\n _v$3 = theme.background.base,\n _v$4 = theme.text.base,\n _v$5 = theme.text.muted,\n _v$6 = theme.text.action.primary.selected;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$2, \"fg\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$4, \"backgroundColor\", _v$2, _p$.t));\n _v$3 !== _p$.a && (_p$.a = _$setProp(_el$4, \"focusedBackgroundColor\", _v$3, _p$.a));\n _v$4 !== _p$.o && (_p$.o = _$setProp(_el$4, \"textColor\", _v$4, _p$.o));\n _v$5 !== _p$.i && (_p$.i = _$setProp(_el$4, \"placeholderColor\", _v$5, _p$.i));\n _v$6 !== _p$.n && (_p$.n = _$setProp(_el$4, \"cursorColor\", _v$6, _p$.n));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined,\n n: undefined\n });\n return _el$;\n })(), _$createComponent(For, {\n get each() {\n return rows().slice(start(), start() + VISIBLE);\n },\n children: (r, i) => {\n const selected = () => start() + i() === Math.min(cursor(), rows().length - 1);\n const look = () => statusOf({\n status: r.status\n });\n const color = () => {\n const f = look().feedback;\n return f === 'muted' ? theme.text.muted : theme.text.feedback[f];\n };\n return (() => {\n var _el$7 = _$createElement(\"box\"),\n _el$8 = _$createElement(\"text\"),\n _el$9 = _$createElement(\"text\"),\n _el$0 = _$createElement(\"box\"),\n _el$1 = _$createElement(\"text\");\n _$insertNode(_el$7, _el$8);\n _$insertNode(_el$7, _el$9);\n _$insertNode(_el$7, _el$0);\n _$insertNode(_el$7, _el$1);\n _$setProp(_el$7, \"height\", 1);\n _$setProp(_el$7, \"flexShrink\", 0);\n _$setProp(_el$7, \"flexDirection\", \"row\");\n _$setProp(_el$7, \"onMouseUp\", () => {\n setCursor(start() + i());\n open();\n });\n _$setProp(_el$8, \"wrapMode\", \"none\");\n _$insert(_el$8, () => `${look().symbol} `);\n _$setProp(_el$9, \"wrapMode\", \"none\");\n _$insert(_el$9, () => `${shortId(r.runId)} ${r.workflow}`);\n _$setProp(_el$0, \"flexGrow\", 1);\n _$setProp(_el$1, \"wrapMode\", \"none\");\n _$insert(_el$1, () => `${look().word} · ${age(r.createdAt)} · ${money(r.spentUsd)}`);\n _$effect(_p$ => {\n var _v$7 = selected() ? theme.background.action.primary.selected : undefined,\n _v$8 = color(),\n _v$9 = theme.text.base,\n _v$0 = selected() ? TextAttributes.BOLD : undefined,\n _v$1 = theme.text.muted;\n _v$7 !== _p$.e && (_p$.e = _$setProp(_el$7, \"backgroundColor\", _v$7, _p$.e));\n _v$8 !== _p$.t && (_p$.t = _$setProp(_el$8, \"fg\", _v$8, _p$.t));\n _v$9 !== _p$.a && (_p$.a = _$setProp(_el$9, \"fg\", _v$9, _p$.a));\n _v$0 !== _p$.o && (_p$.o = _$setProp(_el$9, \"attributes\", _v$0, _p$.o));\n _v$1 !== _p$.i && (_p$.i = _$setProp(_el$1, \"fg\", _v$1, _p$.i));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined\n });\n return _el$7;\n })();\n }\n }), (() => {\n var _el$5 = _$createElement(\"box\"),\n _el$6 = _$createElement(\"text\");\n _$insertNode(_el$5, _el$6);\n _$setProp(_el$5, \"height\", 1);\n _$setProp(_el$5, \"flexShrink\", 0);\n _$setProp(_el$5, \"marginTop\", 1);\n _$setProp(_el$6, \"wrapMode\", \"none\");\n _$insert(_el$6, () => rows().length === 0 ? 'No runs match' : '↑/↓ select · enter open · esc close');\n _$effect(_$p => _$setProp(_el$6, \"fg\", theme.text.muted, _$p));\n return _el$5;\n })()];\n }\n });\n}",
|
|
15
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { conversationOf } from '@wizardingcode/shibaox-core';\nimport { createContext, createEffect, createRoot, onCleanup, useContext } from 'solid-js';\nimport { createStore, reconcile } from 'solid-js/store';\nimport { money } from '../model/format.js';\nimport { reduceTimeline } from '../model/stream.js';\nimport { requestText } from '../routes/session/request.js';\nimport { useConfig } from './config.js';\nimport { FRAME_LIMIT, initialData } from './data-state.js';\nimport { Poller } from './poller.js';\nconst Context = createContext();\nexport function DataProvider(props) {\n const [state, set] = createStore(initialData());\n const TERMINAL = new Set(['completed', 'failed', 'cancelled']);\n // how long a follow-up waits for the previous turn to end (tests shorten it)\n const turnWaitMs = Number(useConfig().env.SHIBAOX_TURN_WAIT_MS) || 60_000;\n // frames stay out of the reactive store: a reduce over 20 000 proxied envelopes would\n // subscribe to every property it reads; `versions` is the only signal\n const frames = new Map();\n const bump = runId => set('versions', runId, (v = 0) => v + 1);\n const sink = {\n reset: runId => {\n frames.set(runId, []);\n bump(runId);\n },\n append: (runId, batch) => {\n const all = [...(frames.get(runId) ?? []), ...batch];\n frames.set(runId, all.length > FRAME_LIMIT ? all.slice(-FRAME_LIMIT) : all);\n bump(runId);\n }\n };\n const timelines = new Map();\n const activate = runId => {\n set('active', runId);\n if (runId) set('unread', runId, undefined);\n };\n const openRun = runId => {\n if (!state.open.includes(runId)) set('open', o => [...o, runId]);\n if (!state.threads[runId]) set('threads', runId, [runId]);\n for (const id of state.threads[runId] ?? [runId]) poller.subscribe(id);\n activate(runId);\n };\n const threadOf = runId => state.threads[runId] ?? [runId];\n /** The conversation turns of a tab: the runs the user talked to (dispatched runs are not turns). */\n const turnsOf = rootId => threadOf(rootId).filter(id => !state.states[id]?.parentRunId);\n const replyOf = id => timeline(id)().flatMap(c => c.kind === 'node' ? c.blocks : []).flatMap(b => b.kind === 'text' && !b.parentId ? [b.text.trim()] : []).join('\\n').trim();\n // turns of a tab go one at a time: the next one builds on the previous one's reply\n const chains = new Map();\n const continueRun = (rootId, text, o = {}) => {\n const next = (chains.get(rootId) ?? Promise.resolve()).then(() => submitTurn(rootId, text, o), () => submitTurn(rootId, text, o));\n chains.set(rootId, next);\n return next;\n };\n /** Waits (bounded) until `runId` is no longer working, so its reply is whole. */\n const settled = async runId => {\n const until = Date.now() + turnWaitMs;\n while (Date.now() < until) {\n const st = state.states[runId];\n if (st && TERMINAL.has(st.status)) return;\n await new Promise(r => setTimeout(r, 25));\n }\n };\n const submitTurn = async (rootId, text, o = {}) => {\n const turns = turnsOf(rootId);\n const previousId = turns[turns.length - 1] ?? rootId;\n await settled(previousId);\n const previous = state.states[previousId];\n if (!previous) return undefined;\n // the conversation so far travels as structured messages; the input is the new turn only.\n // It builds on the thread the daemon kept for the previous run (it may have compacted\n // the oldest turns into a summary) plus that run's own request and reply.\n const reply = replyOf(previousId);\n const messages = [...conversationOf(previous.input), {\n role: 'user',\n content: requestText(previous.input)\n }, ...(reply ? [{\n role: 'assistant',\n content: reply\n }] : [])];\n const model = state.models[rootId] ?? previous.model;\n const runId = await poller.submit({\n orgRoot: previous.orgRoot ?? '',\n project: previous.project ?? previous.workspace,\n workflow: previous.workflow,\n input: text,\n messages,\n ...(o.event ? {\n event: true\n } : {}),\n // with a model the daemon derives the adapter from it\n ...(model ? {\n model\n } : {}),\n adapter: previous.adapter,\n workspace: previous.workspaceMode,\n budgetUsd: previous.budgetUsd\n });\n if (!runId) return undefined;\n set('threads', rootId, (t = [rootId]) => [...t, runId]);\n poller.subscribe(runId);\n return runId;\n };\n /** The tab whose thread holds `runId`, when one does. */\n const rootOf = runId => state.open.find(root => (state.threads[root] ?? [root]).includes(runId));\n /** What the orchestrator is told when a run it dispatched ends. */\n const eventText = (st, status) => {\n const nodes = Object.entries(st.nodes);\n const summaries = nodes.filter(([, n]) => n.summary).map(([id, n]) => `${id}: ${String(n.summary).replace(/\\s+/g, ' ').slice(0, 200)}`);\n const files = timeline(st.runId)().find(c => c.kind === 'summary');\n const parts = [`workflow ${st.workflow} finished: ${status}`, `${nodes.length} node${nodes.length === 1 ? '' : 's'}`, money(st.spentUsd), ...(files?.kind === 'summary' && files.files.length > 0 ? [`files: ${files.files.slice(0, 20).join(', ')}`] : []), ...(st.branch ? [`branch ${st.branch}`] : []), ...(st.error ? [`error: ${st.error}`] : []), ...summaries];\n return parts.join(' · ').slice(0, 2000);\n };\n const poller = new Poller({\n client: props.client,\n set,\n get: () => state,\n frames: sink,\n toast: t => props.toast?.(t),\n log: props.log,\n open: openRun,\n now: props.now,\n intervals: props.intervals\n });\n const release = runId => {\n timelines.get(runId)?.dispose();\n timelines.delete(runId);\n frames.delete(runId);\n set('versions', runId, undefined);\n };\n const closeRun = runId => {\n const i = state.open.indexOf(runId);\n if (i < 0) return;\n set('open', o => o.filter(id => id !== runId));\n for (const id of threadOf(runId)) {\n poller.unsubscribe(id);\n release(id);\n }\n set('threads', runId, undefined);\n set('models', runId, undefined);\n if (state.active === runId) activate(state.open[Math.min(i, state.open.length - 1)]);\n };\n const nextTab = direction => {\n const tabs = [undefined, ...state.open];\n const i = tabs.indexOf(state.active);\n activate(tabs[(i + direction + tabs.length) % tabs.length]);\n };\n const timeline = runId => {\n let entry = timelines.get(runId);\n if (!entry) {\n entry = createRoot(dispose => {\n const [cards, setCards] = createStore({\n list: []\n });\n createEffect(() => {\n state.versions[runId];\n const run = state.states[runId];\n // a malformed frame must never take the screen down: keep the last good cards and log\n try {\n const next = reduceTimeline(run, frames.get(runId) ?? []);\n setCards('list', reconcile(next, {\n key: 'key'\n }));\n } catch (e) {\n props.log?.(`timeline ${runId}: ${e instanceof Error ? e.message : String(e)}`);\n }\n });\n return {\n cards: () => cards.list,\n dispose\n };\n });\n timelines.set(runId, entry);\n }\n return entry.cards;\n };\n\n // children whose end was already history when they joined a tab are never reported again\n const reported = new Set();\n // a run dispatched from a conversation (`parentRunId`) joins the tab of its parent\n createEffect(() => {\n if (props.single) return;\n for (const r of state.runs) {\n if (!r.parentRunId) continue;\n const root = rootOf(r.parentRunId);\n if (!root || threadOf(root).includes(r.runId)) continue;\n if (TERMINAL.has(r.status)) reported.add(r.runId);\n set('threads', root, (t = [root]) => [...t, r.runId]);\n poller.subscribe(r.runId);\n }\n });\n // when a dispatched run ends, the conversation continues with an event for the orchestrator\n createEffect(() => {\n if (props.single) return;\n for (const root of state.open) for (const id of state.threads[root] ?? []) {\n const st = state.states[id];\n const status = state.ended[id];\n if (!st?.parentRunId || !status || reported.has(id)) continue;\n reported.add(id);\n void continueRun(root, eventText(st, status), {\n event: true\n });\n }\n });\n poller.start();\n if (props.single) {\n set('open', [props.single]);\n set('active', props.single);\n poller.subscribe(props.single);\n }\n onCleanup(() => {\n poller.stop();\n for (const id of [...timelines.keys()]) release(id);\n });\n const value = {\n state,\n timeline,\n frameCount: runId => frames.get(runId)?.length,\n openRun,\n closeRun,\n threadOf,\n continueRun,\n setModel: (rootId, ref) => set('models', rootId, ref),\n activate,\n nextTab,\n markRead: runId => set('unread', runId, undefined),\n actions: {\n answer: (id, approved, note) => poller.answer(id, approved, note),\n cancel: runId => poller.cancel(runId),\n resume: (runId, budgetUsd) => poller.resume(runId, budgetUsd),\n submit: req => poller.submit(req)\n },\n poller\n };\n return _$createComponent(Context.Provider, {\n value: value,\n get children() {\n return props.children;\n }\n });\n}\nexport function useData() {\n const c = useContext(Context);\n if (!c) throw new Error('useData outside DataProvider');\n return c;\n}",
|
|
16
|
+
"/** `$0.0020` under a dollar, `$1.50` from a dollar up. */\nexport const money = (usd: number): string =>\n usd < 1 ? `$${usd.toFixed(4)}` : `$${usd.toFixed(2)}`;\n\n/** `41 s`, `2m 13s`, `1h 04m`. */\nexport const duration = (ms: number): string => {\n const s = Math.floor(ms / 1000);\n if (s < 60) return `${s} s`;\n const m = Math.floor(s / 60);\n if (m < 60) return `${m}m ${String(s % 60).padStart(2, '0')}s`;\n const h = Math.floor(m / 60);\n return `${h}h ${String(m % 60).padStart(2, '0')}m`;\n};\n\n/** How long ago an ISO timestamp was: `12 s`, `3 m`, `2 h`, `4 d`. */\nexport const age = (iso: string, now = Date.now()): string => {\n const s = Math.max(0, Math.floor((now - Date.parse(iso)) / 1000));\n if (s < 60) return `${s} s`;\n const m = Math.floor(s / 60);\n if (m < 60) return `${m} m`;\n const h = Math.floor(m / 60);\n if (h < 24) return `${h} h`;\n return `${Math.floor(h / 24)} d`;\n};\n\nexport const shortId = (id: string): string => id.slice(0, 8);\n\n/** `~/dir` for paths under the home directory. */\nexport function tilde(p: string, home: string | undefined = process.env.HOME): string {\n return home && p.startsWith(home) ? `~${p.slice(home.length)}` : p;\n}\n\n/** `24.0k` / `1.2M` for token counts. */\nexport function tokens(n: number): string {\n if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;\n if (n >= 1000) return `${(n / 1000).toFixed(1)}k`;\n return String(n);\n}\n",
|
|
17
|
+
"import type { NodeStatus, RunState, RunStatus } from '@wizardingcode/shibaox-core';\nimport type { Envelope } from '@wizardingcode/shibaox-daemon';\nimport type { WorkflowNode } from '@wizardingcode/shibaox-schemas';\n\n/** `key` is stable across reductions so the screen can reconcile instead of remounting. */\nexport type Block =\n | { kind: 'text'; key: string; text: string; parentId?: string }\n | {\n kind: 'tool';\n key: string;\n id: string;\n name: string;\n summary: string;\n input: unknown;\n output?: unknown;\n ms?: number;\n status: 'running' | 'done' | 'error';\n parentId?: string;\n }\n | { kind: 'file'; key: string; path: string };\n\nexport type Card =\n | {\n kind: 'node';\n key: string;\n nodeId: string;\n type: 'task' | 'code';\n role?: string;\n runtime?: string;\n status: NodeStatus;\n attempts: number;\n costUsd?: number;\n startedAt?: string;\n endedAt?: string;\n blocks: Block[];\n tools: number;\n /** The model at work and how full its context is (latest `usage` frame of the node). */\n usage?: RunUsage;\n }\n | {\n kind: 'gate';\n key: string;\n nodeId: string;\n status: NodeStatus;\n checks: { name: string; passed: boolean; ms?: number; message?: string }[];\n passed?: boolean;\n report?: string;\n attempts: number;\n }\n | {\n kind: 'decide';\n key: string;\n nodeId: string;\n status: NodeStatus;\n choice?: string;\n confidence?: number;\n }\n | {\n kind: 'human';\n key: string;\n nodeId: string;\n prompt: string;\n action?: string;\n pending: boolean;\n answer?: { approved: boolean; note?: string; via?: string; at: string };\n }\n | { kind: 'error'; key: string; nodeId?: string; message: string }\n | { kind: 'earlier'; key: string; count: number }\n | {\n kind: 'summary';\n key: string;\n status: RunStatus;\n costUsd: number;\n durationMs?: number;\n files: string[];\n branch?: string;\n error?: string;\n };\n\nexport const CARD_LIMIT = 5000;\n\nexport interface RunUsage {\n model?: string;\n contextTokens?: number;\n contextWindow?: number;\n inputTokens?: number;\n outputTokens?: number;\n}\n\n/** The latest usage of a run: the last node card that reported one. */\nexport function runUsage(cards: readonly Card[]): RunUsage | undefined {\n for (let i = cards.length - 1; i >= 0; i--) {\n const c = cards[i];\n if (c?.kind === 'node' && c.usage) return c.usage;\n }\n return undefined;\n}\n\n/** A conversation turn: a run of a workflow marked `conversation: true` (the org's `chat`). */\nexport function isChatRun(state: RunState | undefined): boolean {\n return state?.workflowSnapshot?.conversation === true;\n}\n\n/** A turn shibaox submitted itself (a dispatched run ended), never typed by the user. */\nexport function isEventRun(state: RunState | undefined): boolean {\n return state?.input.event === true;\n}\nconst SUMMARY_LIMIT = 80;\n\n/** Run events after which the dashboard refreshes the run's state. */\nexport const RUN_EVENT_REFRESH: ReadonlySet<string> = new Set([\n 'NodeStarted',\n 'NodeCompleted',\n 'NodeFailed',\n 'NodeSuspended',\n 'GatePassed',\n 'GateFailed',\n 'DecisionMade',\n 'HumanRequested',\n 'HumanResponded',\n 'ToolApprovalRequested',\n 'ToolApprovalResolved',\n 'BudgetWarning',\n 'BudgetExceeded',\n 'RunResumed',\n 'RunCompleted',\n 'RunCancelled',\n]);\n\n/** A one-line summary of a tool input: its path or command when it has one, else trimmed JSON. */\nexport function summarizeInput(input: unknown, limit = SUMMARY_LIMIT): string {\n if (input === undefined) return '';\n if (input && typeof input === 'object' && !Array.isArray(input)) {\n const o = input as Record<string, unknown>;\n for (const key of ['file_path', 'command']) {\n const v = o[key];\n if (typeof v === 'string' && v) return v.length > limit ? v.slice(0, limit) : v;\n }\n }\n let s: string;\n try {\n s = JSON.stringify(input) ?? String(input);\n } catch {\n s = String(input);\n }\n return s.length > limit ? s.slice(0, limit) : s;\n}\n\ntype Ev = Record<string, unknown> & { type: string; at?: string; nodeId?: string };\n\nconst TERMINAL: ReadonlySet<string> = new Set(['completed', 'failed', 'cancelled']);\n\n/** Nodes of the snapshot in reading order: breadth-first from `start`, then the rest by key. */\nfunction nodeOrder(state: RunState | undefined): string[] {\n const wf = state?.workflowSnapshot;\n if (!wf) return Object.keys(state?.nodes ?? {});\n const out: string[] = [];\n const seen = new Set<string>();\n const queue = [wf.start];\n while (queue.length > 0) {\n const id = queue.shift() as string;\n if (seen.has(id) || !wf.nodes[id]) continue;\n seen.add(id);\n out.push(id);\n const node = wf.nodes[id] as WorkflowNode;\n const next: string[] =\n node.type === 'decide'\n ? Object.values(node.next)\n : node.type === 'gate'\n ? [node.on_pass, node.on_fail]\n : node.type === 'parallel'\n ? [...node.branches, node.join]\n : node.next\n ? [node.next]\n : [];\n queue.push(...next);\n }\n for (const id of Object.keys(wf.nodes)) if (!seen.has(id)) out.push(id);\n return out;\n}\n\nfunction newCard(state: RunState | undefined, nodeId: string): Card {\n const def = state?.workflowSnapshot?.nodes[nodeId] as WorkflowNode | undefined;\n const st = state?.nodes[nodeId];\n const status: NodeStatus = st?.status ?? 'pending';\n const attempts = st?.attempts ?? 0;\n switch (def?.type) {\n case 'gate':\n return {\n kind: 'gate',\n key: `card:${nodeId}`,\n nodeId,\n status,\n attempts,\n checks: st?.report?.checks.map(check) ?? [],\n passed: st?.report?.passed,\n report: st?.report ? failures(st.report.checks) : undefined,\n };\n case 'decide':\n return { kind: 'decide', key: `card:${nodeId}`, nodeId, status, choice: st?.choice };\n case 'human':\n return {\n kind: 'human',\n key: `card:${nodeId}`,\n nodeId,\n prompt: def.prompt ?? def.action,\n action: def.action,\n pending: state?.pendingHumans.some((p) => p.nodeId === nodeId) ?? false,\n };\n default:\n return {\n kind: 'node',\n key: `card:${nodeId}`,\n nodeId,\n type: def?.type === 'code' || def?.type === 'git' ? 'code' : 'task',\n role: def?.type === 'task' ? def.role : undefined,\n runtime: def?.type === 'task' ? state?.adapter : undefined,\n status,\n attempts,\n costUsd: undefined,\n blocks: [],\n tools: 0,\n };\n }\n}\n\nfunction check(c: { name: string; passed: boolean; evidence: string }) {\n return { name: c.name, passed: c.passed, message: c.evidence || undefined };\n}\n\nfunction failures(checks: { passed: boolean; evidence: string }[]): string | undefined {\n const lines = checks.filter((c) => !c.passed && c.evidence).map((c) => c.evidence);\n return lines.length > 0 ? lines.join('\\n') : undefined;\n}\n\n/**\n * Folds the run's state and its SSE frames into the cards of the session view: one per node\n * in the order the nodes started, runtime frames inside their node's card, errors and the\n * summary as cards of their own. Without frames the cards come from the state alone.\n */\nexport function reduceTimeline(state: RunState | undefined, frames: Envelope[]): Card[] {\n const cards: Card[] = [];\n const byNode = new Map<string, Card>();\n const files = new Set<string>();\n let startedAt: string | undefined;\n let lastAt: string | undefined;\n let ended = false;\n\n const cardFor = (nodeId: string): Card => {\n let c = byNode.get(nodeId);\n if (!c) {\n c = newCard(state, nodeId);\n byNode.set(nodeId, c);\n cards.push(c);\n }\n return c;\n };\n const cost = (c: Card, ev: Ev) => {\n const usd = (ev.cost as { usd?: number } | undefined)?.usd;\n if (c.kind === 'node' && typeof usd === 'number') c.costUsd = (c.costUsd ?? 0) + usd;\n };\n const finish = (c: Card, ev: Ev, status: NodeStatus) => {\n if (c.kind === 'node') {\n c.endedAt = ev.at;\n if (!state?.nodes[c.nodeId]) c.status = status;\n } else if ((c.kind === 'gate' || c.kind === 'decide') && !state?.nodes[c.nodeId])\n c.status = status;\n cost(c, ev);\n };\n\n for (const frame of frames) {\n if (frame.kind === 'end') {\n ended = true;\n continue;\n }\n if (frame.kind === 'run') {\n const ev = frame.event as unknown as Ev;\n lastAt = ev.at ?? lastAt;\n switch (ev.type) {\n case 'RunStarted':\n startedAt = ev.at;\n break;\n case 'NodeStarted': {\n const c = cardFor(ev.nodeId as string);\n if ('attempts' in c && !state?.nodes[c.nodeId]) c.attempts += 1;\n if (c.kind === 'node') {\n c.startedAt = ev.at;\n if (!state?.nodes[c.nodeId]) c.status = 'running';\n }\n break;\n }\n case 'NodeCompleted':\n finish(cardFor(ev.nodeId as string), ev, 'completed');\n break;\n case 'NodeFailed':\n finish(cardFor(ev.nodeId as string), ev, 'failed');\n break;\n case 'GatePassed':\n case 'GateFailed': {\n const c = cardFor(ev.nodeId as string);\n const report = ev.report as {\n passed: boolean;\n checks: { name: string; passed: boolean; evidence: string }[];\n };\n if (c.kind === 'gate') {\n c.checks = report.checks.map(check);\n c.passed = report.passed;\n c.report = failures(report.checks);\n }\n finish(c, ev, ev.type === 'GatePassed' ? 'passed' : 'gate_failed');\n break;\n }\n case 'DecisionMade': {\n const c = cardFor(ev.nodeId as string);\n if (c.kind === 'decide') {\n c.choice = ev.choice as string;\n c.confidence = ev.confidence as number | undefined;\n }\n cost(c, ev);\n break;\n }\n case 'HumanRequested': {\n const c = cardFor(ev.nodeId as string);\n if (c.kind === 'human') {\n c.prompt = ev.prompt as string;\n c.action = ev.action as string;\n }\n break;\n }\n case 'HumanResponded': {\n const c = cardFor(ev.nodeId as string);\n if (c.kind === 'human') {\n c.answer = {\n approved: ev.approved as boolean,\n note: ev.note as string | undefined,\n at: ev.at ?? '',\n };\n c.pending = false;\n }\n break;\n }\n case 'RunCompleted':\n case 'RunCancelled':\n ended = true;\n break;\n default:\n break;\n }\n continue;\n }\n // runtime frame\n const env = frame.event;\n const c = cardFor(env.nodeId);\n const rt = env.event as Record<string, unknown> & { type: string };\n if (c.kind !== 'node') {\n if (rt.type === 'file_changed') files.add(rt.path as string);\n continue;\n }\n switch (rt.type) {\n case 'text': {\n const text = rt.text as string;\n const parentId = rt.parentToolUseId as string | undefined;\n const last = c.blocks.at(-1);\n const key = `text:${c.blocks.length}`;\n if (last?.kind === 'text' && last.parentId === parentId) last.text += text;\n else\n c.blocks.push(\n parentId ? { kind: 'text', key, text, parentId } : { kind: 'text', key, text },\n );\n break;\n }\n case 'tool_use': {\n const id = (rt.id as string | undefined) ?? `tool-${c.tools + 1}`;\n const parentId = rt.parentToolUseId as string | undefined;\n c.blocks.push({\n kind: 'tool',\n key: `tool:${id}`,\n id,\n name: rt.name as string,\n summary: summarizeInput(rt.input),\n input: rt.input,\n status: 'running',\n ...(parentId ? { parentId } : {}),\n });\n c.tools += 1;\n break;\n }\n case 'tool_result': {\n const id = rt.id as string | undefined;\n const block = [...c.blocks]\n .reverse()\n .find(\n (b): b is Block & { kind: 'tool' } =>\n b.kind === 'tool' &&\n (id ? b.id === id : b.name === rt.name && b.status === 'running'),\n );\n if (block) {\n block.output = rt.output;\n if (typeof rt.durationMs === 'number') block.ms = rt.durationMs;\n block.status = 'done';\n }\n break;\n }\n case 'file_changed':\n files.add(rt.path as string);\n c.blocks.push({ kind: 'file', key: `file:${c.blocks.length}`, path: rt.path as string });\n break;\n case 'usage': {\n const u = rt as RunUsage & { type: string };\n c.usage = {\n ...c.usage,\n ...(u.model ? { model: u.model } : {}),\n ...(u.contextTokens !== undefined ? { contextTokens: u.contextTokens } : {}),\n ...(u.contextWindow !== undefined ? { contextWindow: u.contextWindow } : {}),\n ...(u.inputTokens !== undefined ? { inputTokens: u.inputTokens } : {}),\n ...(u.outputTokens !== undefined ? { outputTokens: u.outputTokens } : {}),\n };\n break;\n }\n case 'error':\n cards.push({\n kind: 'error',\n key: `error:${cards.length}`,\n nodeId: env.nodeId,\n message: rt.message as string,\n });\n break;\n default:\n break;\n }\n }\n\n // nodes the state knows but no frame mentioned (no stream, or history already gone)\n if (state)\n for (const id of nodeOrder(state))\n if (state.nodes[id] && !byNode.has(id)) {\n const c = newCard(state, id);\n byNode.set(id, c);\n cards.push(c);\n }\n\n // a chat turn that ended well needs no summary line: the reply is the result\n const chatDone = isChatRun(state) && (state?.status ?? 'completed') === 'completed';\n if ((ended || (state && TERMINAL.has(state.status))) && !chatDone) {\n const status: RunStatus = state?.status ?? 'completed';\n cards.push({\n kind: 'summary',\n key: 'summary',\n status,\n costUsd: state?.spentUsd ?? 0,\n durationMs:\n startedAt && lastAt ? Math.max(0, Date.parse(lastAt) - Date.parse(startedAt)) : undefined,\n files: [...files],\n branch: state?.branch,\n error: state?.error,\n });\n }\n\n if (cards.length > CARD_LIMIT) {\n const drop = cards.length - CARD_LIMIT;\n return [{ kind: 'earlier', key: 'earlier', count: drop }, ...cards.slice(drop)];\n }\n return cards;\n}\n",
|
|
18
|
+
"import { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { TextAttributes } from '@opentui/core';\nimport { Show } from 'solid-js';\nimport { useData } from '../../context/data.js';\nimport { shortId } from '../../model/format.js';\nimport { isEventRun } from '../../model/stream.js';\nimport { useTheme } from '../../theme/context.js';\n\n/** The text a run was asked for, from its state (`input.spec` for daemon and inline runs). */\nexport function requestText(input) {\n if (!input) return '';\n for (const key of ['spec', 'input', 'text', 'prompt']) {\n const v = input[key];\n if (typeof v === 'string' && v.trim()) return v.trim();\n }\n try {\n return JSON.stringify(input);\n } catch {\n return '';\n }\n}\n\n/** The run's request at the top of the conversation: a block with the accent bar on the left. */\nexport function RequestBlock(props) {\n const data = useData();\n const theme = useTheme();\n const state = () => data.state.states[props.runId];\n const summary = () => data.state.runs.find(r => r.runId === props.runId);\n const meta = () => {\n const parts = [summary()?.workflow ?? state()?.workflow ?? '', state()?.adapter ?? '', shortId(props.runId)];\n return parts.filter(Boolean).join(' · ');\n };\n const text = () => requestText(state()?.input);\n const event = () => isEventRun(state());\n const child = () => state()?.parentRunId !== undefined;\n const workflow = () => summary()?.workflow ?? state()?.workflow ?? '';\n return _$createComponent(Show, {\n get when() {\n return !event();\n },\n get fallback() {\n return (// a message from shibaox itself (a dispatched run ended): one quiet line, no block\n (() => {\n var _el$9 = _$createElement(\"box\"),\n _el$0 = _$createElement(\"text\"),\n _el$1 = _$createElement(\"span\");\n _$insertNode(_el$9, _el$0);\n _$setProp(_el$9, \"width\", \"100%\");\n _$setProp(_el$9, \"flexShrink\", 0);\n _$setProp(_el$9, \"marginBottom\", 1);\n _$setProp(_el$9, \"paddingLeft\", 1);\n _$insertNode(_el$0, _el$1);\n _$setProp(_el$0, \"wrapMode\", \"word\");\n _$insertNode(_el$1, _$createTextNode(`↳ `));\n _$insert(_el$0, text, null);\n _$effect(_p$ => {\n var _v$8 = theme.text.muted,\n _v$9 = {\n fg: theme.text.action.primary.selected\n };\n _v$8 !== _p$.e && (_p$.e = _$setProp(_el$0, \"fg\", _v$8, _p$.e));\n _v$9 !== _p$.t && (_p$.t = _$setProp(_el$1, \"style\", _v$9, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$9;\n })()\n );\n },\n get children() {\n var _el$ = _$createElement(\"box\"),\n _el$2 = _$createElement(\"box\"),\n _el$3 = _$createElement(\"box\"),\n _el$6 = _$createElement(\"text\"),\n _el$7 = _$createElement(\"box\"),\n _el$8 = _$createElement(\"text\");\n _$insertNode(_el$, _el$2);\n _$insertNode(_el$, _el$3);\n _$setProp(_el$, \"flexDirection\", \"row\");\n _$setProp(_el$, \"width\", \"100%\");\n _$setProp(_el$, \"flexShrink\", 0);\n _$setProp(_el$, \"marginBottom\", 1);\n _$setProp(_el$2, \"width\", 1);\n _$setProp(_el$2, \"flexShrink\", 0);\n _$insertNode(_el$3, _el$6);\n _$insertNode(_el$3, _el$7);\n _$setProp(_el$3, \"flexGrow\", 1);\n _$setProp(_el$3, \"flexDirection\", \"column\");\n _$setProp(_el$3, \"paddingLeft\", 2);\n _$setProp(_el$3, \"paddingRight\", 2);\n _$setProp(_el$3, \"paddingTop\", 1);\n _$setProp(_el$3, \"paddingBottom\", 1);\n _$insert(_el$3, _$createComponent(Show, {\n get when() {\n return child();\n },\n get children() {\n var _el$4 = _$createElement(\"box\"),\n _el$5 = _$createElement(\"text\");\n _$insertNode(_el$4, _el$5);\n _$setProp(_el$4, \"height\", 1);\n _$setProp(_el$4, \"flexShrink\", 0);\n _$setProp(_el$5, \"wrapMode\", \"none\");\n _$insert(_el$5, () => `→ ${workflow()}`);\n _$effect(_p$ => {\n var _v$ = theme.text.action.primary.selected,\n _v$2 = TextAttributes.BOLD;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$5, \"fg\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$5, \"attributes\", _v$2, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$4;\n }\n }), _el$6);\n _$setProp(_el$6, \"wrapMode\", \"word\");\n _$insert(_el$6, () => text() || '…');\n _$insertNode(_el$7, _el$8);\n _$setProp(_el$7, \"height\", 1);\n _$setProp(_el$7, \"flexShrink\", 0);\n _$setProp(_el$8, \"wrapMode\", \"none\");\n _$insert(_el$8, meta);\n _$effect(_p$ => {\n var _v$3 = theme.text.action.primary.selected,\n _v$4 = theme.background.raised.base,\n _v$5 = theme.text.base,\n _v$6 = TextAttributes.BOLD,\n _v$7 = theme.text.muted;\n _v$3 !== _p$.e && (_p$.e = _$setProp(_el$2, \"backgroundColor\", _v$3, _p$.e));\n _v$4 !== _p$.t && (_p$.t = _$setProp(_el$3, \"backgroundColor\", _v$4, _p$.t));\n _v$5 !== _p$.a && (_p$.a = _$setProp(_el$6, \"fg\", _v$5, _p$.a));\n _v$6 !== _p$.o && (_p$.o = _$setProp(_el$6, \"attributes\", _v$6, _p$.o));\n _v$7 !== _p$.i && (_p$.i = _$setProp(_el$8, \"fg\", _v$7, _p$.i));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined\n });\n return _el$;\n }\n });\n}",
|
|
19
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { createContext, useContext } from 'solid-js';\n\n/** Where this instance runs: the CLI version, the shibaox home and the directory it was launched from. */\n\nconst Context = createContext();\nexport function ConfigProvider(props) {\n return _$createComponent(Context.Provider, {\n get value() {\n return props.config;\n },\n get children() {\n return props.children;\n }\n });\n}\nexport function useConfig() {\n const c = useContext(Context);\n if (!c) throw new Error('useConfig outside ConfigProvider');\n return c;\n}",
|
|
20
|
+
"import type { RunState, RunStatus } from '@wizardingcode/shibaox-core';\nimport type { Health, InboxItem, RunSummaryPlus } from '@wizardingcode/shibaox-daemon';\n\n/** Everything the screens read; fed by the Poller and by user actions. */\nexport interface DataState {\n health?: Health;\n reachable: boolean;\n /** When the daemon stopped answering (ms epoch), for the delayed \"reconnecting\" overlay. */\n unreachableSince?: number;\n runs: RunSummaryPlus[];\n inbox: InboxItem[];\n states: Record<string, RunState>;\n /** Bumped whenever a run's frames change (the frames themselves live outside the store). */\n versions: Record<string, number>;\n ended: Record<string, RunStatus>;\n /** Open tabs (root run ids) in order; `active` undefined means the home tab. */\n open: string[];\n /** The runs of each tab, oldest first: a tab continues into follow-up runs. */\n threads: Record<string, string[]>;\n /** The model chosen with `/model` in a tab, for its next turns. */\n models: Record<string, string>;\n active?: string;\n /** Runs with something the user has not looked at yet (tab pulse). */\n unread: Record<string, 'done' | 'needs'>;\n}\n\nexport const initialData = (): DataState => ({\n reachable: true,\n runs: [],\n inbox: [],\n states: {},\n versions: {},\n ended: {},\n open: [],\n threads: {},\n models: {},\n unread: {},\n});\n\n/** Frames kept per run (the cards cap at 5000; frames are a few per card). */\nexport const FRAME_LIMIT = 20_000;\n",
|
|
21
|
+
"import type { RunState } from '@wizardingcode/shibaox-core';\nimport type { Envelope, InboxId, SubmitRequest } from '@wizardingcode/shibaox-daemon';\nimport { DaemonHttpError } from '@wizardingcode/shibaox-daemon/client';\nimport type { SetStoreFunction } from 'solid-js/store';\nimport { RUN_EVENT_REFRESH } from '../model/stream.js';\nimport type { Feedback } from '../theme/resolve.js';\nimport type { DaemonClientLike } from './client.js';\nimport type { DataState } from './data-state.js';\n\nexport interface PollerIntervals {\n fast: number;\n normal: number;\n slow: number;\n health: number;\n}\n\nexport interface PollerToast {\n message: string;\n variant: Feedback;\n action?: { label: string; run: () => void };\n}\n\n/** Where the frames of a run go: a plain array per run, outside the reactive store. */\nexport interface FrameSink {\n reset(runId: string): void;\n append(runId: string, batch: Envelope[]): void;\n}\n\nexport interface PollerOptions {\n client: DaemonClientLike;\n set: SetStoreFunction<DataState>;\n get: () => DataState;\n frames: FrameSink;\n toast: (t: PollerToast) => void;\n /** Opens a run's tab (the toast's Open action). */\n open?: (runId: string) => void;\n /** Where stream failures and malformed frames are noted (`~/.shibaox/tui.log`). */\n log?: (line: string) => void;\n now?: () => number;\n intervals?: Partial<PollerIntervals>;\n}\n\ninterface Sub {\n runId: string;\n controller: AbortController;\n cursor?: string;\n /** Frames received but not yet written to the store (flushed every FLUSH_MS). */\n pending: Envelope[];\n flushTimer?: NodeJS.Timeout;\n /** The stream closed without an `end` frame (daemon restart, socket error): reopen on the next tick. */\n broken?: boolean;\n}\n\nconst DEFAULTS: PollerIntervals = { fast: 500, normal: 1000, slow: 5000, health: 5000 };\nconst FAST_WINDOW_MS = 3000;\nconst REFRESH_THROTTLE_MS = 200;\n/** Frames are written to the store in batches: one store update per burst, not per frame. */\nconst FLUSH_MS = 50;\n\n/**\n * Feeds the data store: `listRuns` + `inbox` on a timer (faster after an action, slower while\n * the daemon is unreachable), `health` on its own timer, and one SSE subscription per open tab\n * (reopened with its cursor when the daemon comes back). Actions call the client and toast.\n */\nexport class Poller {\n private readonly client: DaemonClientLike;\n private readonly set: SetStoreFunction<DataState>;\n private readonly get: () => DataState;\n private readonly frames: FrameSink;\n private readonly toast: (t: PollerToast) => void;\n private readonly open: (runId: string) => void;\n private readonly log: (line: string) => void;\n private readonly now: () => number;\n private readonly intervals: PollerIntervals;\n private tickTimer: NodeJS.Timeout | undefined;\n private healthTimer: NodeJS.Timeout | undefined;\n private readonly subs = new Map<string, Sub>();\n private readonly refreshTimers = new Map<string, NodeJS.Timeout>();\n private fastUntil = 0;\n private running = false;\n private ticking = false;\n\n constructor(o: PollerOptions) {\n this.client = o.client;\n this.set = o.set;\n this.get = o.get;\n this.frames = o.frames;\n this.toast = o.toast;\n this.open = o.open ?? (() => undefined);\n this.log = o.log ?? (() => undefined);\n this.now = o.now ?? (() => Date.now());\n this.intervals = { ...DEFAULTS, ...o.intervals };\n }\n\n start(): void {\n if (this.running) return;\n this.running = true;\n this.schedule(0);\n this.healthTimer = setInterval(() => void this.healthTick(), this.intervals.health);\n void this.healthTick();\n }\n\n stop(): void {\n this.running = false;\n if (this.tickTimer) clearTimeout(this.tickTimer);\n if (this.healthTimer) clearInterval(this.healthTimer);\n this.tickTimer = undefined;\n this.healthTimer = undefined;\n for (const t of this.refreshTimers.values()) clearTimeout(t);\n this.refreshTimers.clear();\n for (const runId of [...this.subs.keys()]) this.close(runId);\n }\n\n private schedule(delay: number): void {\n if (!this.running) return;\n if (this.tickTimer) clearTimeout(this.tickTimer);\n this.tickTimer = setTimeout(() => void this.tick(), delay);\n }\n\n private nextDelay(): number {\n if (!this.get().reachable) return this.intervals.slow;\n return this.now() < this.fastUntil ? this.intervals.fast : this.intervals.normal;\n }\n\n /** One `listRuns` + `inbox` round; reschedules itself while started. */\n async tick(): Promise<void> {\n if (this.ticking) return;\n this.ticking = true;\n try {\n const [runs, inbox] = await Promise.all([this.client.listRuns(), this.client.inbox()]);\n const wasDown = !this.get().reachable;\n this.set('reachable', true);\n this.set('unreachableSince', undefined);\n this.set('runs', runs);\n this.set('inbox', inbox);\n for (const sub of [...this.subs.values()]) if (wasDown || sub.broken) this.reopen(sub);\n } catch {\n if (this.get().reachable) {\n this.set('reachable', false);\n this.set('unreachableSince', this.now());\n }\n for (const sub of this.subs.values()) sub.controller.abort();\n } finally {\n this.ticking = false;\n this.schedule(this.nextDelay());\n }\n }\n\n async healthTick(): Promise<void> {\n try {\n this.set('health', await this.client.health());\n } catch {\n this.set('health', undefined);\n }\n }\n\n /** Opens the run's SSE stream (history first); a no-op when already subscribed. */\n subscribe(runId: string): void {\n if (this.subs.has(runId)) return;\n const sub: Sub = { runId, controller: new AbortController(), pending: [] };\n this.subs.set(runId, sub);\n if (this.get().reachable) void this.consume(sub);\n }\n\n unsubscribe(runId: string): void {\n this.close(runId);\n }\n\n private close(runId: string): void {\n const sub = this.subs.get(runId);\n if (!sub) return;\n this.flush(sub);\n sub.controller.abort();\n this.subs.delete(runId);\n }\n\n private flush(sub: Sub): void {\n if (sub.flushTimer) clearTimeout(sub.flushTimer);\n sub.flushTimer = undefined;\n if (sub.pending.length === 0) return;\n const batch = sub.pending;\n sub.pending = [];\n this.frames.append(sub.runId, batch);\n }\n\n private queue(sub: Sub, env: Envelope): void {\n sub.pending.push(env);\n if (!sub.flushTimer) sub.flushTimer = setTimeout(() => this.flush(sub), FLUSH_MS);\n }\n\n private reopen(old: Sub): void {\n this.flush(old);\n old.controller.abort();\n const sub: Sub = {\n runId: old.runId,\n controller: new AbortController(),\n cursor: old.cursor,\n pending: [],\n };\n this.subs.set(old.runId, sub);\n void this.consume(sub);\n }\n\n private async consume(sub: Sub): Promise<void> {\n const { runId, controller } = sub;\n const mine = () => this.subs.get(runId) === sub && !controller.signal.aborted;\n let ended = false;\n // a fresh subscription replays the history: start the run's frames over, and show the\n // run's nodes right away instead of waiting for its first event\n if (!sub.cursor) this.frames.reset(runId);\n await this.refreshRun(runId);\n if (!mine()) return;\n try {\n for await (const env of this.client.events(runId, {\n signal: controller.signal,\n since: sub.cursor,\n })) {\n if (!mine()) return;\n if (env.kind !== 'end') {\n sub.cursor = env.cursor;\n this.queue(sub, env);\n }\n if (env.kind === 'run' && RUN_EVENT_REFRESH.has(env.event.type)) this.refreshSoon(runId);\n if (env.kind === 'end') {\n ended = true;\n this.flush(sub);\n await this.refreshRun(runId);\n this.set('ended', runId, env.status);\n this.subs.delete(runId);\n if (this.get().active !== runId) {\n this.set('unread', runId, 'done');\n const failed = env.status !== 'completed';\n this.toast({\n message: `Run ${runId.slice(0, 8)} ${failed ? env.status : 'is done'}`,\n variant: failed ? 'error' : 'success',\n action: { label: 'Open', run: () => this.open(runId) },\n });\n }\n return;\n }\n }\n } catch (e) {\n // aborted, or the daemon went away: the poll loop notices and reopens\n if (!controller.signal.aborted)\n this.log(`stream ${runId}: ${e instanceof Error ? e.message : String(e)}`);\n } finally {\n // closed without an end frame while still ours: the next successful tick reopens it\n if (!ended && mine()) sub.broken = true;\n }\n }\n\n /** While the daemon is known as down, actions only say so (no call, no error toast). */\n private down(): boolean {\n if (this.get().reachable) return false;\n this.toast({ message: 'Daemon unreachable', variant: 'info' });\n return true;\n }\n\n private refreshSoon(runId: string): void {\n if (this.refreshTimers.has(runId)) return;\n this.refreshTimers.set(\n runId,\n setTimeout(() => {\n this.refreshTimers.delete(runId);\n void this.refreshRun(runId);\n }, REFRESH_THROTTLE_MS),\n );\n }\n\n /** Fetches the run's state; marks it unread as \"needs\" when it waits and is not active. */\n async refreshRun(runId: string): Promise<void> {\n try {\n const state = await this.client.getRun(runId);\n this.setState(state);\n } catch {\n // gone (404) or unreachable: the list refresh handles it\n }\n }\n\n private setState(state: RunState): void {\n const before = this.get().states[state.runId];\n // read through the store proxy before writing: it reflects the write immediately\n const waited = (before?.pendingApprovals.length ?? 0) + (before?.pendingHumans.length ?? 0) > 0;\n this.set('states', state.runId, state);\n const waits = state.pendingApprovals.length + state.pendingHumans.length > 0;\n if (waits && !waited && this.get().active !== state.runId)\n this.set('unread', state.runId, 'needs');\n }\n\n private toastError(e: unknown, fallback: string): void {\n if (e instanceof DaemonHttpError && e.status === 409 && /already answered/i.test(e.message)) {\n this.toast({ message: 'Already answered elsewhere', variant: 'info' });\n return;\n }\n const message = e instanceof Error ? e.message : String(e);\n this.toast({ message: message || fallback, variant: 'error' });\n }\n\n private afterAction(): void {\n this.fastUntil = this.now() + FAST_WINDOW_MS;\n this.schedule(0);\n }\n\n async answer(id: InboxId, approved: boolean, note?: string): Promise<void> {\n if (this.down()) return;\n try {\n await this.client.answer(id, { approved, note, via: 'cli' });\n this.toast({ message: approved ? 'Approved' : 'Denied', variant: 'success' });\n } catch (e) {\n this.toastError(e, 'Could not record the answer');\n }\n this.afterAction();\n }\n\n async cancel(runId: string): Promise<void> {\n if (this.down()) return;\n try {\n this.setState(await this.client.cancel(runId));\n this.toast({ message: `Run ${runId.slice(0, 8)} cancelled`, variant: 'success' });\n } catch (e) {\n this.toastError(e, 'Could not cancel the run');\n }\n this.afterAction();\n }\n\n async resume(runId: string, budgetUsd?: number): Promise<void> {\n if (this.down()) return;\n try {\n this.setState(await this.client.resume(runId, { budgetUsd }));\n this.toast({ message: `Run ${runId.slice(0, 8)} resumed`, variant: 'success' });\n } catch (e) {\n this.toastError(e, 'Could not resume the run');\n }\n this.afterAction();\n }\n\n /** Submits a run; returns its id, or undefined on failure (toast shown). */\n async submit(req: SubmitRequest): Promise<string | undefined> {\n if (this.down()) return undefined;\n try {\n const { runId, warnings } = await this.client.submitRun(req);\n const note = warnings.length ? ` (${warnings.join('; ')})` : '';\n this.toast({ message: `Run ${runId.slice(0, 8)} queued${note}`, variant: 'success' });\n this.afterAction();\n return runId;\n } catch (e) {\n this.toastError(e, 'Could not submit the run');\n this.afterAction();\n return undefined;\n }\n }\n}\n",
|
|
22
|
+
"import type { Feedback } from '../theme/resolve.js';\n\nexport type StatusWord =\n | 'Working'\n | 'Needs you'\n | 'Queued'\n | 'Done'\n | 'Failed'\n | 'Paused'\n | 'Cancelled';\n\nexport interface StatusLook {\n word: StatusWord;\n symbol: string;\n feedback: Feedback | 'muted';\n}\n\n/** A run status as a word plus a symbol (never colour alone). */\nexport function statusOf(run: { status: string }): StatusLook {\n switch (run.status) {\n case 'running':\n return { word: 'Working', symbol: '●', feedback: 'running' };\n case 'waiting_human':\n case 'waiting_approval':\n return { word: 'Needs you', symbol: '●', feedback: 'warning' };\n case 'queued':\n return { word: 'Queued', symbol: '○', feedback: 'muted' };\n case 'completed':\n return { word: 'Done', symbol: '✓', feedback: 'success' };\n case 'failed':\n return { word: 'Failed', symbol: '✗', feedback: 'error' };\n case 'paused_budget':\n return { word: 'Paused', symbol: '‖', feedback: 'warning' };\n default:\n return { word: 'Cancelled', symbol: '—', feedback: 'muted' };\n }\n}\n\n/** A node status as a symbol plus feedback colour. */\nexport function nodeLook(status: string): { symbol: string; feedback: Feedback | 'muted' } {\n switch (status) {\n case 'running':\n return { symbol: '●', feedback: 'running' };\n case 'waiting':\n return { symbol: '●', feedback: 'warning' };\n case 'completed':\n case 'passed':\n return { symbol: '✓', feedback: 'success' };\n case 'failed':\n case 'gate_failed':\n return { symbol: '✗', feedback: 'error' };\n default:\n return { symbol: '○', feedback: 'muted' };\n }\n}\n",
|
|
23
|
+
"import { effect as _$effect } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\n// Adapted from opencode (MIT) — https://github.com/anomalyco/opencode\nimport { RGBA } from '@opentui/core';\nimport { Show } from 'solid-js';\nimport { Spinner } from '../motion/spinner.js';\nimport { useTheme } from '../theme/context.js';\nimport { createDelayedPresence } from '../ui/delayed-presence.js';\nconst DELAY_MS = 2000;\n\n/** Covers the page while the daemon has been unreachable for more than two seconds. */\nexport function Reconnecting(props) {\n const theme = useTheme();\n const visible = createDelayedPresence(props.since, DELAY_MS);\n return _$createComponent(Show, {\n get when() {\n return visible();\n },\n get children() {\n var _el$ = _$createElement(\"box\"),\n _el$2 = _$createElement(\"box\"),\n _el$3 = _$createElement(\"text\");\n _$insertNode(_el$, _el$2);\n _$setProp(_el$, \"position\", \"absolute\");\n _$setProp(_el$, \"zIndex\", 10_000);\n _$setProp(_el$, \"top\", 0);\n _$setProp(_el$, \"right\", 0);\n _$setProp(_el$, \"bottom\", 0);\n _$setProp(_el$, \"left\", 0);\n _$setProp(_el$, \"alignItems\", \"center\");\n _$setProp(_el$, \"justifyContent\", \"center\");\n _$insertNode(_el$2, _el$3);\n _$setProp(_el$2, \"width\", 48);\n _$setProp(_el$2, \"maxWidth\", \"90%\");\n _$setProp(_el$2, \"flexDirection\", \"column\");\n _$setProp(_el$2, \"paddingTop\", 1);\n _$setProp(_el$2, \"paddingBottom\", 1);\n _$setProp(_el$2, \"paddingLeft\", 2);\n _$setProp(_el$2, \"paddingRight\", 2);\n _$setProp(_el$2, \"gap\", 1);\n _$insert(_el$2, _$createComponent(Spinner, {\n get color() {\n return theme.text.base;\n },\n children: \"Connection lost\\u2026\"\n }), _el$3);\n _$insertNode(_el$3, _$createTextNode(`Reconnecting to the daemon automatically.`));\n _$effect(_p$ => {\n var _v$ = RGBA.fromInts(0, 0, 0, 150),\n _v$2 = theme.background.raised.base,\n _v$3 = theme.text.muted;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$, \"backgroundColor\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$2, \"backgroundColor\", _v$2, _p$.t));\n _v$3 !== _p$.a && (_p$.a = _$setProp(_el$3, \"fg\", _v$3, _p$.a));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined\n });\n return _el$;\n }\n });\n}",
|
|
24
|
+
"import { memo as _$memo } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\n// Adapted from opencode (MIT) — https://github.com/anomalyco/opencode\nimport { parseColor, RGBA } from '@opentui/core';\nimport { createEffect, createMemo, createSignal, onCleanup, Show } from 'solid-js';\nimport { useMotion } from './config.js';\nimport { oneCellFrame } from './one-cell-motion.js';\nimport { registerSpinner } from './spinner-renderable.js';\nregisterSpinner();\nexport const SPINNER_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\n\n/** A braille spinner with an optional label; without motion it is a still `⋯`. */\nexport function Spinner(props) {\n const motion = useMotion();\n const color = () => props.color ?? RGBA.defaultForeground();\n return _$createComponent(Show, {\n get when() {\n return motion();\n },\n get fallback() {\n return (() => {\n var _el$5 = _$createElement(\"text\");\n _$insert(_el$5, (() => {\n var _c$ = _$memo(() => !!props.children);\n return () => _c$() ? ['⋯ ', _$memo(() => props.children)] : '⋯';\n })());\n _$effect(_$p => _$setProp(_el$5, \"fg\", color(), _$p));\n return _el$5;\n })();\n },\n get children() {\n var _el$ = _$createElement(\"box\"),\n _el$2 = _$createElement(\"box\"),\n _el$3 = _$createElement(\"spinner\");\n _$insertNode(_el$, _el$2);\n _$setProp(_el$, \"flexDirection\", \"row\");\n _$setProp(_el$, \"gap\", 1);\n _$insertNode(_el$2, _el$3);\n _$setProp(_el$2, \"flexShrink\", 0);\n _$setProp(_el$3, \"frames\", SPINNER_FRAMES);\n _$setProp(_el$3, \"interval\", 80);\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return props.children;\n },\n get children() {\n var _el$4 = _$createElement(\"text\");\n _$insert(_el$4, () => props.children);\n _$effect(_$p => _$setProp(_el$4, \"fg\", color(), _$p));\n return _el$4;\n }\n }), null);\n _$effect(_p$ => {\n var _v$ = props.children ? 1 : 0,\n _v$2 = color();\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$, \"flexShrink\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$3, \"color\", _v$2, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$;\n }\n });\n}\n\n/** One cell of motion (octant sweeps) for a working node; without motion a still glyph. */\nexport function OneCellSpinner(props) {\n const motion = useMotion();\n const [elapsed, setElapsed] = createSignal(0);\n const sequenced = () => !!props.animation.intro || !!props.animation.once || !!props.animation.pace;\n const frame = createMemo(() => oneCellFrame(props.animation, elapsed()));\n const base = createMemo(() => parseColor(props.color));\n const color = createMemo(() => {\n if (sequenced()) {\n const c = RGBA.clone(base());\n c.a *= frame().level;\n return c;\n }\n return base();\n });\n createEffect(() => {\n props.animation;\n setElapsed(0);\n });\n createEffect(() => {\n if (!sequenced() || !motion() || props.paused || frame().complete) return;\n let previous = performance.now();\n const timer = setInterval(() => {\n const now = performance.now();\n setElapsed(value => value + (now - previous));\n previous = now;\n }, Math.max(1000 / 60, Math.min(40, props.animation.interval / (props.animation.pace?.initial ?? 1))));\n onCleanup(() => clearInterval(timer));\n });\n return (() => {\n var _el$6 = _$createElement(\"box\");\n _$setProp(_el$6, \"width\", 1);\n _$setProp(_el$6, \"height\", 1);\n _$setProp(_el$6, \"flexShrink\", 0);\n _$insert(_el$6, _$createComponent(Show, {\n get when() {\n return motion();\n },\n get fallback() {\n return (() => {\n var _el$8 = _$createElement(\"text\");\n _$insert(_el$8, () => props.still ?? '▪');\n _$effect(_$p => _$setProp(_el$8, \"fg\", base(), _$p));\n return _el$8;\n })();\n },\n get children() {\n var _el$7 = _$createElement(\"spinner\");\n _$effect(_p$ => {\n var _v$3 = sequenced() ? [frame().glyph] : props.animation.frames,\n _v$4 = props.animation.interval,\n _v$5 = !props.paused && !sequenced(),\n _v$6 = color();\n _v$3 !== _p$.e && (_p$.e = _$setProp(_el$7, \"frames\", _v$3, _p$.e));\n _v$4 !== _p$.t && (_p$.t = _$setProp(_el$7, \"interval\", _v$4, _p$.t));\n _v$5 !== _p$.a && (_p$.a = _$setProp(_el$7, \"autoplay\", _v$5, _p$.a));\n _v$6 !== _p$.o && (_p$.o = _$setProp(_el$7, \"color\", _v$6, _p$.o));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined\n });\n return _el$7;\n }\n }));\n return _el$6;\n })();\n}",
|
|
25
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { createContext, useContext } from 'solid-js';\nconst Context = createContext(() => true);\n\n/** Whether animations run; off with `SHIBAOX_NO_MOTION=1` or `prefs.animations === false`. */\nexport function MotionProvider(props) {\n return _$createComponent(Context.Provider, {\n value: () => props.enabled,\n get children() {\n return props.children;\n }\n });\n}\nexport function useMotion() {\n return useContext(Context);\n}\nexport const motionEnabled = (env, prefs) => env.SHIBAOX_NO_MOTION !== '1' && prefs?.animations !== false;",
|
|
26
|
+
"// Adapted from opencode (MIT) — https://github.com/anomalyco/opencode\n// Masks use row-major bits in a 2x4 grid. Unicode reuses these older glyphs\n// instead of duplicating them in the otherwise mask-ordered octant block.\nconst OCTANTS = new Map<number, string>([\n [0x00, ' '],\n [0x01, '\\u{1cea8}'],\n [0x02, '\\u{1ceab}'],\n [0x03, '\\u{1fb82}'],\n [0x05, '▘'],\n [0x0a, '▝'],\n [0x0f, '▀'],\n [0x14, '\\u{1fbe6}'],\n [0x28, '\\u{1fbe7}'],\n [0x3f, '\\u{1fb85}'],\n [0x40, '\\u{1cea3}'],\n [0x50, '▖'],\n [0x55, '▌'],\n [0x5a, '▞'],\n [0x5f, '▛'],\n [0x80, '\\u{1cea0}'],\n [0xa0, '▗'],\n [0xa5, '▚'],\n [0xaa, '▐'],\n [0xaf, '▜'],\n [0xc0, '▂'],\n [0xf0, '▄'],\n [0xf5, '▙'],\n [0xfa, '▟'],\n [0xfc, '▆'],\n [0xff, '█'],\n]);\n\nexport function octantGlyph(mask: number): string {\n return (\n OCTANTS.get(mask) ??\n String.fromCodePoint(\n 0x1cd00 + mask - [...OCTANTS.keys()].filter((value) => value < mask).length,\n )\n );\n}\n",
|
|
27
|
+
"// Adapted from opencode (MIT) — https://github.com/anomalyco/opencode\nimport { octantGlyph } from './subcell.js';\n\nexport interface OneCellMotion {\n frames: string[];\n interval: number;\n levels?: number[];\n intro?: Pick<OneCellMotion, 'frames' | 'interval' | 'levels'>;\n once?: boolean;\n pace?: { initial: number; final: number; after: number; duration: number };\n}\n\nexport function oneCellFrame(\n animation: OneCellMotion,\n elapsed: number,\n): { glyph: string; level: number; complete: boolean } {\n const introDuration = animation.intro\n ? animation.intro.frames.length * animation.intro.interval\n : 0;\n const intro = elapsed < introDuration;\n const clip = intro && animation.intro ? animation.intro : animation;\n const pace = animation.pace;\n const progress = pace ? Math.max(0, Math.min(1, (elapsed - pace.after) / pace.duration)) : 0;\n // Integrate the changing rate so slowing down does not jump or restart the motion.\n const time = intro\n ? elapsed\n : !pace\n ? elapsed - introDuration\n : (elapsed - introDuration) * pace.initial +\n (pace.final - pace.initial) *\n (pace.duration * (progress ** 3 - progress ** 4 / 2) +\n Math.max(0, elapsed - pace.after - pace.duration));\n const frame = Math.floor((time * clip.frames.length) / (clip.interval * clip.frames.length));\n const index =\n !intro && animation.once ? Math.min(frame, clip.frames.length - 1) : frame % clip.frames.length;\n return {\n glyph: clip.frames[index] ?? ' ',\n level: clip.levels?.[index] ?? 1,\n complete: !intro && !!animation.once && frame >= clip.frames.length - 1,\n };\n}\n\nexport const SEED_WORK: OneCellMotion = {\n frames: Array.from({ length: 40 }, () => '▪'),\n interval: 40,\n levels: Array.from(\n { length: 40 },\n (_, index) => 0.3 + (0.7 * (1 - Math.cos((index / 40) * 2 * Math.PI))) / 2,\n ),\n intro: {\n frames: Array.from({ length: 80 }, () => '▪'),\n interval: 40,\n levels: Array.from({ length: 80 }, (_, index) => {\n const phase = index / 80;\n return (\n 0.3 + 0.7 * (phase < 0.125 ? phase / 0.125 : phase < 0.375 ? 1 : ((1 - phase) / 0.625) ** 3)\n );\n }),\n },\n pace: { initial: 1.25, final: 0.5, after: 30_000, duration: 30_000 },\n};\n\nconst WORK_PACE = { initial: 1.2, final: 0.96, after: 30_000, duration: 30_000 };\nconst lower = [2, 3, 5, 7, 6, 4];\n\nexport const BLOCK_LOW_COMET: OneCellMotion = {\n frames: lower.flatMap((point, index, path) => {\n const leading = (1 << point) | (1 << (path[(index + 5) % 6] ?? 0));\n const full = leading | (1 << (path[(index + 4) % 6] ?? 0));\n return [full, full, full, leading, leading].map(octantGlyph);\n }),\n interval: 40,\n pace: WORK_PACE,\n};\n\nexport const BLOCK_SOFT_SWEEP: OneCellMotion = {\n frames: [0x14, 0x14, 0x14, 0x1c, 0x3c, 0x38, 0x28, 0x28, 0x28, 0x38, 0x3c, 0x1c].map(octantGlyph),\n interval: 100,\n pace: WORK_PACE,\n};\n\nexport const BLOCK_SOFT_SLIDE: OneCellMotion = {\n frames: [0x14, 0x14, 0x14, 0x14, 0x14, 0x28, 0x28, 0x28, 0x28, 0x28].map(octantGlyph),\n interval: 100,\n levels: [0.55, 0.85, 1, 0.85, 0.55, 0.55, 0.85, 1, 0.85, 0.55],\n};\n\nexport const WORK_SPINNERS = {\n 'block-soft-sweep': BLOCK_SOFT_SWEEP,\n 'block-soft-slide': BLOCK_SOFT_SLIDE,\n 'block-low-comet': BLOCK_LOW_COMET,\n seed: SEED_WORK,\n} satisfies Record<string, OneCellMotion>;\n\nexport const SEED_LAUNCH: OneCellMotion = {\n frames: Array.from({ length: 21 }, (_, index) => (index < 10 ? '▫' : '▪')),\n interval: 40,\n levels: (SEED_WORK.levels ?? []).slice(0, 21),\n once: true,\n};\n",
|
|
28
|
+
"// A small port of opentui-spinner (MIT, https://github.com/…/opentui-spinner): the package\n// pins its OpenTUI peers to 0.3, which an npm install resolves to a second OpenTUI copy\n// next to ours and the dashboard refuses to start. What we use fits in this file.\nimport {\n type ColorInput,\n type OptimizedBuffer,\n parseColor,\n Renderable,\n type RenderableOptions,\n type RenderContext,\n type RGBA,\n resolveRenderLib,\n} from '@opentui/core';\nimport { extend } from '@opentui/solid/components';\n\nexport interface SpinnerOptions extends RenderableOptions<SpinnerRenderable> {\n frames?: string[];\n /** Milliseconds per frame (16–1000). */\n interval?: number;\n autoplay?: boolean;\n color?: ColorInput;\n backgroundColor?: ColorInput;\n}\n\nconst DEFAULT_FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];\nconst clampInterval = (ms: number) => Math.min(1000, Math.max(1000 / 60, ms));\ntype Encoded = ReturnType<ReturnType<typeof resolveRenderLib>['encodeUnicode']>;\n\n/** One cell (or a few) that cycles through `frames` every `interval` ms while visible. */\nexport class SpinnerRenderable extends Renderable {\n private _frames: string[];\n private _interval: number;\n private _running = false;\n private _index = 0;\n private _timer: ReturnType<typeof setInterval> | undefined;\n private _color: RGBA;\n private _background: RGBA;\n private readonly _lib = resolveRenderLib();\n private _encoded = new Map<string, NonNullable<Encoded>>();\n\n constructor(ctx: RenderContext, options: SpinnerOptions) {\n super(ctx, options);\n this._frames = options.frames?.length ? options.frames : DEFAULT_FRAMES;\n this._interval = clampInterval(options.interval ?? 80);\n this._color = parseColor(options.color ?? 'white');\n this._background = parseColor(options.backgroundColor ?? 'transparent');\n this.height = 1;\n this.encode();\n if (options.autoplay ?? true) this.start();\n }\n\n private encode(): void {\n let width = 0;\n for (const f of this._frames) {\n const e = this._encoded.get(f) ?? this._lib.encodeUnicode(f, this.ctx.widthMethod);\n if (!e) continue;\n this._encoded.set(f, e);\n width = Math.max(\n width,\n e.data.reduce((n: number, c: { width: number }) => n + c.width, 0),\n );\n }\n this.width = width;\n }\n private free(): void {\n for (const e of this._encoded.values()) this._lib.freeUnicode(e);\n this._encoded.clear();\n }\n private arm(): void {\n this.disarm();\n if (!this._running || !this.visible) return;\n this._timer = setInterval(() => {\n if (this.isDestroyed) return this.disarm();\n this._index = (this._index + 1) % this._frames.length;\n this.requestRender();\n }, this._interval);\n this._timer.unref?.();\n }\n private disarm(): void {\n if (this._timer !== undefined) clearInterval(this._timer);\n this._timer = undefined;\n }\n\n get frames(): string[] {\n return this._frames;\n }\n set frames(value: string[]) {\n const next = value.length ? value : DEFAULT_FRAMES;\n if (next.length === this._frames.length && next.every((f, i) => f === this._frames[i])) return;\n this.free();\n this._frames = next;\n this._index = 0;\n this.encode();\n this.requestRender();\n }\n get interval(): number {\n return this._interval;\n }\n set interval(ms: number) {\n this._interval = clampInterval(ms);\n this.arm();\n }\n get color(): RGBA {\n return this._color;\n }\n set color(value: ColorInput) {\n this._color = parseColor(value);\n this.requestRender();\n }\n get backgroundColor(): RGBA {\n return this._background;\n }\n set backgroundColor(value: ColorInput) {\n this._background = parseColor(value);\n this.requestRender();\n }\n get autoplay(): boolean {\n return this._running;\n }\n set autoplay(value: boolean) {\n if (value) this.start();\n else this.stop();\n }\n override get visible(): boolean {\n return super.visible;\n }\n override set visible(value: boolean) {\n super.visible = value;\n this.arm();\n }\n start(): void {\n if (this._running || this.isDestroyed) return;\n this._running = true;\n this.arm();\n }\n stop(): void {\n this._running = false;\n this.disarm();\n }\n\n protected override renderSelf(buffer: OptimizedBuffer): void {\n if (!this.visible) return;\n const frame = this._frames[this._index];\n const e = frame ? this._encoded.get(frame) : undefined;\n if (!e) return;\n let x = this.x;\n for (const c of e.data) {\n buffer.drawChar(c.char, x, this.y, this._color, this._background);\n x += c.width;\n }\n }\n protected override destroySelf(): void {\n this.stop();\n this.free();\n super.destroySelf();\n }\n}\n\ndeclare module '@opentui/solid' {\n interface OpenTUIComponents {\n spinner: typeof SpinnerRenderable;\n }\n}\n\nlet registered = false;\n/** Makes `<spinner>` available to the Solid renderer (once). */\nexport function registerSpinner(): void {\n if (registered) return;\n registered = true;\n extend({ spinner: SpinnerRenderable });\n}\n",
|
|
29
|
+
"// Adapted from opencode (MIT) — https://github.com/anomalyco/opencode\nimport { type Accessor, createEffect, createSignal, onCleanup } from 'solid-js';\n\n/** True once `source` has been defined for `delay` ms; resets whenever it changes (no flicker under the delay). */\nexport function createDelayedPresence<T>(\n source: Accessor<T | undefined>,\n delay: number | ((value: T) => number),\n): Accessor<boolean> {\n const [visible, setVisible] = createSignal(false);\n createEffect(() => {\n const current = source();\n setVisible(false);\n if (current === undefined) return;\n const remaining = typeof delay === 'function' ? delay(current) : delay;\n if (remaining <= 0) {\n setVisible(true);\n return;\n }\n const timer = setTimeout(() => setVisible(true), remaining);\n onCleanup(() => clearTimeout(timer));\n });\n return visible;\n}\n",
|
|
30
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { TextAttributes } from '@opentui/core';\nimport { createEffect, createSignal, For, onCleanup } from 'solid-js';\nimport { useData } from '../context/data.js';\nimport { shortId } from '../model/format.js';\nimport { statusOf } from '../model/status.js';\nimport { useMotion } from '../motion/config.js';\nimport { completionPulseOpacity } from '../motion/pulse.js';\nimport { useTheme } from '../theme/context.js';\nimport { tint } from './logo.js';\nconst PULSE_MS = 1200;\nconst PULSES = 3;\n\n/** 0..1 pulse level for an unread tab: three attack/decay beats, then rest (motion only). */\nfunction usePulse(unread) {\n const motion = useMotion();\n const [level, setLevel] = createSignal(0);\n createEffect(() => {\n if (!unread() || !motion()) {\n setLevel(0);\n return;\n }\n const started = performance.now();\n const t = setInterval(() => {\n const elapsed = performance.now() - started;\n if (elapsed >= PULSE_MS * PULSES) {\n setLevel(0);\n clearInterval(t);\n return;\n }\n setLevel(completionPulseOpacity(elapsed % PULSE_MS / PULSE_MS));\n }, 50);\n onCleanup(() => clearInterval(t));\n });\n return level;\n}\nfunction Tab(props) {\n const data = useData();\n const theme = useTheme();\n const active = () => data.state.active === props.runId;\n const unread = () => props.runId ? data.state.unread[props.runId] : undefined;\n const pulse = usePulse(() => !!unread());\n const summary = () => props.runId ? data.state.runs.find(r => r.runId === props.runId) : undefined;\n const status = () => (props.runId ? data.state.ended[props.runId] ?? data.state.states[props.runId]?.status ?? summary()?.status : undefined) ?? 'queued';\n const look = () => statusOf({\n status: status()\n });\n const feedback = () => {\n const f = look().feedback;\n return f === 'muted' ? theme.text.muted : theme.text.feedback[f];\n };\n const pulseColor = () => unread() === 'needs' ? theme.text.feedback.warning : theme.text.feedback.success;\n const bg = () => {\n const base = active() ? theme.background.raised.high : theme.background.raised.base;\n return pulse() > 0 ? tint(base, pulseColor(), pulse() * 0.5) : base;\n };\n const label = () => props.runId ? `${look().symbol} ${shortId(props.runId)} ${summary()?.workflow ?? ''}${unread() ? ' •' : ''}` : '⌂';\n return (() => {\n var _el$ = _$createElement(\"box\"),\n _el$2 = _$createElement(\"text\");\n _$insertNode(_el$, _el$2);\n _$setProp(_el$, \"flexDirection\", \"row\");\n _$setProp(_el$, \"flexShrink\", 0);\n _$setProp(_el$, \"height\", 1);\n _$setProp(_el$, \"paddingLeft\", 2);\n _$setProp(_el$, \"paddingRight\", 2);\n _$setProp(_el$, \"onMouseUp\", () => data.activate(props.runId));\n _$setProp(_el$2, \"wrapMode\", \"none\");\n _$insert(_el$2, (() => {\n var _c$ = _$memo(() => !!props.runId);\n return () => _c$() ? '' : label();\n })());\n _$insert(_el$, (() => {\n var _c$2 = _$memo(() => !!props.runId);\n return () => _c$2() ? [(() => {\n var _el$3 = _$createElement(\"text\");\n _$setProp(_el$3, \"wrapMode\", \"none\");\n _$insert(_el$3, () => `${look().symbol} `);\n _$effect(_$p => _$setProp(_el$3, \"fg\", feedback(), _$p));\n return _el$3;\n })(), (() => {\n var _el$4 = _$createElement(\"text\");\n _$setProp(_el$4, \"wrapMode\", \"none\");\n _$insert(_el$4, () => `${shortId(props.runId)} ${summary()?.workflow ?? ''}${unread() ? ' •' : ''}`);\n _$effect(_p$ => {\n var _v$4 = active() ? theme.text.base : theme.text.muted,\n _v$5 = active() ? TextAttributes.BOLD : undefined;\n _v$4 !== _p$.e && (_p$.e = _$setProp(_el$4, \"fg\", _v$4, _p$.e));\n _v$5 !== _p$.t && (_p$.t = _$setProp(_el$4, \"attributes\", _v$5, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$4;\n })()] : null;\n })(), null);\n _$effect(_p$ => {\n var _v$ = bg(),\n _v$2 = props.runId ? active() ? theme.text.base : theme.text.muted : theme.text.base,\n _v$3 = active() ? TextAttributes.BOLD : undefined;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$, \"backgroundColor\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$2, \"fg\", _v$2, _p$.t));\n _v$3 !== _p$.a && (_p$.a = _$setProp(_el$2, \"attributes\", _v$3, _p$.a));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined\n });\n return _el$;\n })();\n}\n\n/** One line of tabs on top: home, then every open run. Only shown while runs are open. */\nexport function Tabs() {\n const data = useData();\n const theme = useTheme();\n return (() => {\n var _el$5 = _$createElement(\"box\");\n _$setProp(_el$5, \"height\", 1);\n _$setProp(_el$5, \"flexShrink\", 0);\n _$setProp(_el$5, \"flexDirection\", \"row\");\n _$setProp(_el$5, \"width\", \"100%\");\n _$insert(_el$5, _$createComponent(Tab, {}), null);\n _$insert(_el$5, _$createComponent(For, {\n get each() {\n return data.state.open;\n },\n children: id => _$createComponent(Tab, {\n runId: id\n })\n }), null);\n _$effect(_$p => _$setProp(_el$5, \"backgroundColor\", theme.background.raised.base, _$p));\n return _el$5;\n })();\n}",
|
|
31
|
+
"// Adapted from opencode (MIT) — https://github.com/anomalyco/opencode\n// The pulse math of opencode's tab-pulse: shaped sweeps and attack/decay envelopes.\nconst clamp = (value: number) => Math.max(0, Math.min(1, value));\n\nexport const smootherstep = (value: number): number =>\n value * value * value * (value * (value * 6 - 15) + 10);\n\n/** Intensity of a sweep with a soft head ahead of `front` and a long tail behind it. */\nexport const intensityAt = (index: number, front: number, head: number, tail: number): number => {\n const distance = front - index;\n return distance < 0\n ? smootherstep(clamp(1 + distance / head))\n : smootherstep(clamp(1 - distance / tail));\n};\n\n/** Eases the ends of a 0..1 progress so a sweep starts and stops gently. */\nexport const coast = (value: number): number => {\n const ramp = 0.2;\n if (value < ramp) return (value * value) / (2 * ramp * (1 - ramp));\n if (value > 1 - ramp) return 1 - ((1 - value) * (1 - value)) / (2 * ramp * (1 - ramp));\n return (value - ramp / 2) / (1 - ramp);\n};\n\n/** Rise to peak over the attack fraction, then settle to rest over the remainder. */\nexport const attackDecay = (\n progress: number,\n attack: number,\n peak: number,\n rest: number,\n): number =>\n progress < attack\n ? peak * smootherstep(clamp(progress / attack))\n : peak - (peak - rest) * smootherstep(clamp((progress - attack) / (1 - attack)));\n\nconst COMPLETION_ATTACK = 0.12;\n/** Opacity of the completion pulse over a 0..1 progress. */\nexport const completionPulseOpacity = (progress: number): number =>\n attackDecay(progress, COMPLETION_ATTACK, 1, 0);\n",
|
|
32
|
+
"import { effect as _$effect } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { RGBA } from '@opentui/core';\nimport { useTerminalDimensions } from '@opentui/solid';\nimport { useTheme } from '../theme/context.js';\n\n/** Blends `overlay` over `base` by `alpha`. */\nexport function tint(base, overlay, alpha) {\n const r = base.r + (overlay.r - base.r) * alpha;\n const g = base.g + (overlay.g - base.g) * alpha;\n const b = base.b + (overlay.b - base.b) * alpha;\n return RGBA.fromInts(Math.round(r * 255), Math.round(g * 255), Math.round(b * 255));\n}\n\n/** The wordmark in two tones: `shiba` muted, `ox` in the brand orange. Smaller under 60 columns, gone under 20 rows. */\nexport function Logo() {\n const theme = useTheme();\n const dimensions = useTerminalDimensions();\n const font = () => dimensions().width < 60 ? 'tiny' : 'block';\n return (() => {\n var _el$ = _$createElement(\"box\");\n _$setProp(_el$, \"flexShrink\", 0);\n _$setProp(_el$, \"flexDirection\", \"row\");\n _$insert(_el$, (() => {\n var _c$ = _$memo(() => dimensions().height < 20);\n return () => _c$() ? null : [(() => {\n var _el$2 = _$createElement(\"ascii_font\");\n _$setProp(_el$2, \"text\", \"shiba\");\n _$setProp(_el$2, \"selectable\", false);\n _$effect(_p$ => {\n var _v$ = font(),\n _v$2 = theme.text.muted;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$2, \"font\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$2, \"color\", _v$2, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$2;\n })(), (() => {\n var _el$3 = _$createElement(\"ascii_font\");\n _$setProp(_el$3, \"text\", \"ox\");\n _$setProp(_el$3, \"selectable\", false);\n _$effect(_p$ => {\n var _v$3 = font(),\n _v$4 = theme.syntax.heading;\n _v$3 !== _p$.e && (_p$.e = _$setProp(_el$3, \"font\", _v$3, _p$.e));\n _v$4 !== _p$.t && (_p$.t = _$setProp(_el$3, \"color\", _v$4, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$3;\n })()];\n })());\n return _el$;\n })();\n}",
|
|
33
|
+
"import { effect as _$effect } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { useTheme } from '../theme/context.js';\nimport { MIN_COLS, MIN_ROWS } from '../ui/layout.js';\n\n/** Replaces the page when the terminal is under 60×15. */\nexport function TooSmall() {\n const theme = useTheme();\n return (() => {\n var _el$ = _$createElement(\"box\"),\n _el$2 = _$createElement(\"text\");\n _$insertNode(_el$, _el$2);\n _$setProp(_el$, \"width\", \"100%\");\n _$setProp(_el$, \"height\", \"100%\");\n _$setProp(_el$, \"alignItems\", \"center\");\n _$setProp(_el$, \"justifyContent\", \"center\");\n _$insert(_el$2, `Terminal too small (${MIN_COLS}×${MIN_ROWS} minimum)`);\n _$effect(_$p => _$setProp(_el$2, \"fg\", theme.text.feedback.warning, _$p));\n return _el$;\n })();\n}",
|
|
34
|
+
"export const RAIL_WIDTH = 20;\nexport const RAIL_BREAKPOINT = 106;\nexport const SIDEBAR_WIDTH = 42;\nexport const SIDEBAR_MIN = 24;\nexport const SIDEBAR_MAX = 72;\nexport const CONTENT_MIN = 44;\nexport const SIDEBAR_AUTO_MIN = 120;\nexport const MIN_COLS = 60;\nexport const MIN_ROWS = 15;\n\n/** The tabs rail stands on the left from 106 columns; below that it is one line on top. */\nexport const railVertical = (width: number): boolean => width >= RAIL_BREAKPOINT;\n\n/** The sidebar opens by itself when the content keeps 120 columns beside the rail. */\nexport const sidebarAuto = (width: number, rail: number): boolean =>\n width - rail >= SIDEBAR_AUTO_MIN;\n\n/** A sidebar width between 24 and 72 that leaves the content at least 44 columns. */\nexport const clampSidebarWidth = (w: number, total: number): number =>\n Math.max(SIDEBAR_MIN, Math.min(w, SIDEBAR_MAX, total - CONTENT_MIN));\n\nexport const tooSmall = (width: number, height: number): boolean =>\n width < MIN_COLS || height < MIN_ROWS;\n",
|
|
35
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { createContext, useContext } from 'solid-js';\n\n/** The subset of the daemon client the dashboard uses; the fake implements it in tests. */\n\nconst Context = createContext();\nexport function ClientProvider(props) {\n return _$createComponent(Context.Provider, {\n get value() {\n return props.client;\n },\n get children() {\n return props.children;\n }\n });\n}\nexport function useClient() {\n const c = useContext(Context);\n if (!c) throw new Error('useClient outside ClientProvider');\n return c;\n}",
|
|
36
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { createContext, useContext } from 'solid-js';\nconst Context = createContext();\nexport function ExitProvider(props) {\n return _$createComponent(Context.Provider, {\n get value() {\n return props.onExit;\n },\n get children() {\n return props.children;\n }\n });\n}\nexport function useExit() {\n const c = useContext(Context);\n if (!c) throw new Error('useExit outside ExitProvider');\n return c;\n}",
|
|
37
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { createContext, useContext } from 'solid-js';\nimport { createStore } from 'solid-js/store';\nconst FILE = 'ui.json';\n\n/** `~/.shibaox/ui.json`; unreadable or malformed means empty. */\nexport function loadPrefs(home) {\n try {\n const raw = JSON.parse(readFileSync(join(home, FILE), 'utf8'));\n return raw && typeof raw === 'object' ? raw : {};\n } catch {\n return {};\n }\n}\nexport function savePrefs(home, p) {\n try {\n mkdirSync(home, {\n recursive: true\n });\n writeFileSync(join(home, FILE), `${JSON.stringify(p, null, 2)}\\n`);\n } catch {\n // preferences are a convenience; never fail the UI over them\n }\n}\nconst Context = createContext();\nexport function PrefsProvider(props) {\n const [data, set] = createStore(loadPrefs(props.home));\n const update = patch => {\n set(patch);\n const next = Object.fromEntries(Object.entries({\n ...data\n }).filter(([, v]) => v !== undefined));\n savePrefs(props.home, next);\n };\n return _$createComponent(Context.Provider, {\n value: {\n data,\n update\n },\n get children() {\n return props.children;\n }\n });\n}\nexport function usePrefs() {\n const c = useContext(Context);\n if (!c) throw new Error('usePrefs outside PrefsProvider');\n return c;\n}",
|
|
38
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { createContext, createSignal, useContext } from 'solid-js';\nconst Context = createContext();\nexport function RouteProvider(props) {\n const [data, setData] = createSignal(props.initial ?? {\n type: 'home'\n });\n return _$createComponent(Context.Provider, {\n value: {\n data,\n navigate: setData\n },\n get children() {\n return props.children;\n }\n });\n}\nexport function useRoute() {\n const c = useContext(Context);\n if (!c) throw new Error('useRoute outside RouteProvider');\n return c;\n}",
|
|
39
|
+
"import { effect as _$effect } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { existsSync, mkdirSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { join, resolve } from 'node:path';\nimport { useTerminalDimensions } from '@opentui/solid';\nimport { loadOrg, OrgLoadError } from '@wizardingcode/shibaox-schemas';\nimport { createEffect, createMemo, createResource, createSignal, on, Show } from 'solid-js';\nimport { HelpDialog } from '../component/dialogs/help.js';\nimport { KeysDialog } from '../component/dialogs/keys.js';\nimport { RunsDialog } from '../component/dialogs/runs.js';\nimport { TiersDialog } from '../component/dialogs/tiers.js';\nimport { KeyHints } from '../component/footer.js';\nimport { Logo } from '../component/logo.js';\nimport { Prompt } from '../component/prompt/index.js';\nimport { useClient } from '../context/client.js';\nimport { useConfig } from '../context/config.js';\nimport { useData } from '../context/data.js';\nimport { usePrefs } from '../context/prefs.js';\nimport { useRoute } from '../context/route.js';\nimport { money, tilde } from '../model/format.js';\nimport { ADAPTERS, adapterForModel, applyPromptCommand, COMMAND_HINT, homeCommands, toSubmitRequest } from '../model/prompt-commands.js';\nimport { useTheme } from '../theme/context.js';\nimport { useDialog } from '../ui/dialog.js';\nimport { useToast } from '../ui/toast.js';\nexport const PLACEHOLDERS = ['Ask the team anything… \"Add a /health endpoint\"', 'Ask the team anything… \"Fix the failing tests\"', 'Ask the team anything… \"What does this repo do?\"'];\nexport const HOME_HINTS = [{\n key: '/',\n label: 'commands'\n}, {\n key: 'ctrl+o',\n label: 'runs'\n}, {\n key: 'ctrl+k',\n label: 'palette'\n}, {\n key: '?',\n label: 'help'\n}];\n/** The org's workflows and whether its strong tier runs on a subscription runtime, or why it could not be loaded. */\nfunction orgInfo(root) {\n try {\n const org = loadOrg(root);\n const strong = String(org.models.tiers?.strong ?? '');\n return {\n workflows: Object.keys(org.workflows),\n single: Object.values(org.workflows).filter(w => w.conversation).map(w => w.workflow),\n subscription: /-subscription\\//.test(strong),\n adapter: org.org.adapter\n };\n } catch (e) {\n if (e instanceof OrgLoadError && /not found/i.test(e.message)) return {\n workflows: [],\n single: [],\n subscription: false,\n error: `Org not found: ${root}`\n };\n return {\n workflows: [],\n single: [],\n subscription: false,\n error: e instanceof Error ? e.message : String(e)\n };\n }\n}\n\n/**\n * The project the dashboard works on: the current directory, except the home directory itself,\n * where the orchestrator gets a workspace of its own (`~/.shibaox/workspace`).\n */\nexport function defaultProject(cwd, home) {\n const h = home || homedir();\n return h && resolve(cwd) === resolve(h) ? join(h, '.shibaox', 'workspace') : cwd;\n}\n\n/** `daemon 0.0.1 · 2 running · 1 queued · ▲ 1 needs you`, or the unreachable notice. */\nexport function daemonLine(d, version) {\n if (!d.reachable) return 'Daemon unreachable';\n const running = d.runs.filter(r => r.status === 'running').length;\n const queued = d.runs.filter(r => r.status === 'queued').length;\n const needs = d.inbox.length;\n return `daemon ${version} · ${running} running · ${queued} queued${needs ? ` · ▲ ${needs} needs you` : ''}`;\n}\nexport const MOCK_NOTICE = 'mock runs no model: the nodes complete at once. /adapter claude-code uses your Claude login';\nexport { tilde } from '../model/format.js';\nexport function Home() {\n const theme = useTheme();\n const config = useConfig();\n const client = useClient();\n const data = useData();\n const prefs = usePrefs();\n const route = useRoute();\n const toast = useToast();\n const dialog = useDialog();\n const dimensions = useTerminalDimensions();\n let prompt;\n // the org: the remembered one, else `./org` next to the project, else the daemon's default\n const localOrg = join(config.cwd, 'org');\n const [ctx, setCtx] = createSignal({\n org: prefs.data.lastOrg ?? (existsSync(join(localOrg, 'org.yaml')) ? localOrg : ''),\n project: defaultProject(config.cwd, config.env.HOME),\n // the org's models decide the runtime: a subscription tier runs through claude-code, an API\n // or local tier through our own agent loop (direct); mock is never the remembered choice\n adapter: ADAPTERS.find(a => a === prefs.data.lastAdapter && a !== 'mock') ?? 'direct',\n model: prefs.data.lastModel\n });\n // the models a run can be pointed at (`/model`), from the daemon\n const [models] = createResource(() => client.models().catch(() => []));\n // the daemon's default org, asked with a few retries: the daemon may still be settling\n // (a fresh install starts it on demand) and a transient failure must not leave the home\n // without an org\n const [defaultOrg] = createResource(async () => {\n for (const wait of [0, 250, 1000, 2000]) {\n if (wait) await new Promise(r => setTimeout(r, wait));\n try {\n return await client.defaultOrg();\n } catch {\n // try again\n }\n }\n return {\n root: '',\n created: false,\n error: 'the daemon did not answer for the default org'\n };\n });\n createEffect(() => {\n const d = defaultOrg();\n if (d?.root && !ctx().org) setCtx(c => ({\n ...c,\n org: d.root\n }));\n });\n const orgRoot = createMemo(() => ctx().org);\n // bumped when the org's files change under us (a /tiers save) so the memo reads them again\n const [orgVersion, setOrgVersion] = createSignal(0);\n const org = createMemo(() => {\n orgVersion();\n return orgInfo(orgRoot());\n });\n // what the project is (stack, tests, size), from the daemon; nothing when it cannot say\n const [profile] = createResource(() => ({\n project: ctx().project,\n org: orgRoot()\n }), k => client.projectProfile(k.project, k.org).catch(() => undefined));\n // only the chosen model (not every context change) may move the adapter\n const chosenModel = createMemo(() => ctx().model);\n createEffect(() => {\n // a chosen model decides the adapter; otherwise the org's tiers do (unless remembered)\n const ref = chosenModel();\n const chosen = ref ? adapterForModel(ref, models() ?? []) : undefined;\n if (!chosen && prefs.data.lastAdapter && prefs.data.lastAdapter !== 'mock') return;\n const adapter = chosen ?? org().adapter ?? (org().subscription ? 'claude-code' : 'direct');\n setCtx(c => c.adapter === adapter ? c : {\n ...c,\n adapter\n });\n });\n // a closed dialog gives the keyboard back to the prompt\n createEffect(on(dialog.depth, d => {\n if (d === 0) setTimeout(() => prompt?.focus(), 0);\n }, {\n defer: true\n }));\n const [error, setError] = createSignal();\n const [hint, setHint] = createSignal();\n // the first workflow of the org when none was picked yet\n // chat is the entry of the dashboard when the org has it; other workflows are one `/workflow` away\n const workflow = () => ctx().workflow ?? (org().workflows.includes('chat') ? 'chat' : org().workflows[0]);\n const onCommand = cmd => {\n setError(undefined);\n setHint(undefined);\n if (cmd.command === 'help') return dialog.open(() => _$createComponent(HelpDialog, {}));\n if (cmd.command === 'runs') return dialog.open(() => _$createComponent(RunsDialog, {}));\n if (cmd.command === 'keys') return dialog.open(() => _$createComponent(KeysDialog, {}));\n if (cmd.command === 'tiers') return dialog.open(() => _$createComponent(TiersDialog, {\n get orgRoot() {\n return orgRoot();\n },\n onSaved: () => setOrgVersion(v => v + 1)\n }));\n if (cmd.command === 'key') {\n const [name, ...rest] = cmd.arg.split(/\\s+/);\n const value = rest.join(' ').trim();\n if (!name || !value) return setError('Usage: /key NAME VALUE');\n void client.setKey(name, value).then(() => toast.show({\n message: `${name} saved in the vault`,\n variant: 'success'\n })).catch(e => setError(`Could not save ${name}: ${e instanceof Error ? e.message : String(e)}`));\n return;\n }\n const next = applyPromptCommand(ctx(), cmd, {\n cwd: config.cwd\n });\n if ('error' in next) return setError(next.error);\n setCtx(next);\n };\n const onSubmit = async text => {\n setError(undefined);\n setHint(undefined);\n if (org().error) return setError(org().error);\n const wf = workflow();\n if (!wf) return setError('Pick a workflow first: /workflow <name>');\n const req = toSubmitRequest({\n ...ctx(),\n workflow: wf\n }, text);\n // a conversation acts on the checkout itself; teams get the org default (a worktree)\n if (req.workspace === undefined && org().single.includes(wf)) req.workspace = 'inplace';\n if (req.project === join(config.env.HOME || homedir(), '.shibaox', 'workspace')) mkdirSync(req.project, {\n recursive: true\n });\n const runId = await data.actions.submit(req);\n if (!runId) return;\n prefs.update({\n lastOrg: req.orgRoot,\n lastAdapter: req.adapter === 'mock' ? undefined : req.adapter,\n lastWorkflow: wf,\n lastModel: req.model\n });\n prompt?.clear();\n data.openRun(runId);\n route.navigate({\n type: 'session',\n runId\n });\n };\n\n // no org known yet: while the daemon is still being asked, say so instead of an error\n const orgPending = () => !orgRoot() && (defaultOrg.loading || defaultOrg() === undefined);\n const notice = () => error() ?? (orgPending() ? 'finding the org…' : !orgRoot() && defaultOrg()?.error ? defaultOrg()?.error : org().error);\n const mockNotice = () => ctx().adapter === 'mock' ? MOCK_NOTICE : undefined;\n const contextFooter = () => {\n const c = ctx();\n const muted = theme.text.muted;\n const accent = theme.text.action.primary.selected;\n return (() => {\n var _el$ = _$createElement(\"text\"),\n _el$2 = _$createElement(\"span\"),\n _el$4 = _$createElement(\"span\"),\n _el$5 = _$createElement(\"span\");\n _$insertNode(_el$, _el$2);\n _$insertNode(_el$, _el$4);\n _$insertNode(_el$, _el$5);\n _$setProp(_el$, \"wrapMode\", \"none\");\n _$insertNode(_el$2, _$createTextNode(`workflow `));\n _$setProp(_el$2, \"style\", {\n fg: muted\n });\n _$setProp(_el$4, \"style\", {\n fg: accent\n });\n _$insert(_el$4, () => workflow() ?? '—');\n _$insert(_el$, (() => {\n var _c$ = _$memo(() => !!c.model);\n return () => _c$() ? // a chosen model implies its adapter\n [(() => {\n var _el$7 = _$createElement(\"span\");\n _$insertNode(_el$7, _$createTextNode(` model `));\n _$setProp(_el$7, \"style\", {\n fg: muted\n });\n return _el$7;\n })(), _$memo(() => c.model)] : [(() => {\n var _el$9 = _$createElement(\"span\");\n _$insertNode(_el$9, _$createTextNode(` adapter `));\n _$setProp(_el$9, \"style\", {\n fg: muted\n });\n return _el$9;\n })(), _$memo(() => c.adapter)];\n })(), _el$5);\n _$insertNode(_el$5, _$createTextNode(` project `));\n _$setProp(_el$5, \"style\", {\n fg: muted\n });\n _$insert(_el$, () => tilde(c.project, config.env.HOME), null);\n _$insert(_el$, (() => {\n var _c$2 = _$memo(() => !!c.workspace);\n return () => _c$2() ? (() => {\n var _el$1 = _$createElement(\"span\");\n _$setProp(_el$1, \"style\", {\n fg: muted\n });\n _$insert(_el$1, () => ` workspace ${c.workspace}`);\n return _el$1;\n })() : '';\n })(), null);\n _$insert(_el$, (() => {\n var _c$3 = _$memo(() => c.budgetUsd !== undefined);\n return () => _c$3() ? (() => {\n var _el$10 = _$createElement(\"span\");\n _$setProp(_el$10, \"style\", {\n fg: muted\n });\n _$insert(_el$10, () => ` budget ${money(c.budgetUsd)}`);\n return _el$10;\n })() : '';\n })(), null);\n _$effect(_$p => _$setProp(_el$, \"fg\", theme.text.base, _$p));\n return _el$;\n })();\n };\n return (() => {\n var _el$11 = _$createElement(\"box\"),\n _el$12 = _$createElement(\"box\"),\n _el$13 = _$createElement(\"box\"),\n _el$14 = _$createElement(\"box\"),\n _el$15 = _$createElement(\"box\"),\n _el$18 = _$createElement(\"box\"),\n _el$20 = _$createElement(\"box\"),\n _el$21 = _$createElement(\"box\"),\n _el$22 = _$createElement(\"box\"),\n _el$23 = _$createElement(\"text\"),\n _el$24 = _$createElement(\"text\"),\n _el$25 = _$createElement(\"box\"),\n _el$26 = _$createElement(\"text\");\n _$insertNode(_el$11, _el$12);\n _$insertNode(_el$11, _el$22);\n _$setProp(_el$11, \"flexDirection\", \"column\");\n _$setProp(_el$11, \"width\", \"100%\");\n _$setProp(_el$11, \"height\", \"100%\");\n _$insertNode(_el$12, _el$13);\n _$insertNode(_el$12, _el$14);\n _$insertNode(_el$12, _el$15);\n _$insertNode(_el$12, _el$21);\n _$setProp(_el$12, \"flexGrow\", 1);\n _$setProp(_el$12, \"alignItems\", \"center\");\n _$setProp(_el$13, \"flexGrow\", 1);\n _$setProp(_el$13, \"minHeight\", 0);\n _$insert(_el$12, _$createComponent(Logo, {}), _el$14);\n _$setProp(_el$14, \"height\", 1);\n _$setProp(_el$14, \"flexShrink\", 0);\n _$insertNode(_el$15, _el$18);\n _$setProp(_el$15, \"width\", \"100%\");\n _$setProp(_el$15, \"maxWidth\", 76);\n _$setProp(_el$15, \"flexShrink\", 0);\n _$setProp(_el$15, \"flexDirection\", \"column\");\n _$insert(_el$15, _$createComponent(Prompt, {\n ref: r => {\n prompt = r;\n },\n placeholders: PLACEHOLDERS,\n get commands() {\n return homeCommands(org().workflows, models() ?? []);\n },\n get disabled() {\n return dialog.depth() > 0;\n },\n onSubmit: t => void onSubmit(t),\n onCommand: onCommand,\n onInput: () => {\n setError(undefined);\n setHint(undefined);\n },\n onNeedValue: c => setHint(COMMAND_HINT[c]),\n get footer() {\n return contextFooter();\n }\n }), _el$18);\n _$insert(_el$15, _$createComponent(Show, {\n get when() {\n return profile()?.summary;\n },\n get children() {\n var _el$16 = _$createElement(\"box\"),\n _el$17 = _$createElement(\"text\");\n _$insertNode(_el$16, _el$17);\n _$setProp(_el$16, \"height\", 1);\n _$setProp(_el$16, \"flexShrink\", 0);\n _$setProp(_el$16, \"width\", \"100%\");\n _$setProp(_el$16, \"paddingLeft\", 1);\n _$setProp(_el$17, \"wrapMode\", \"none\");\n _$insert(_el$17, () => profile()?.summary ?? '');\n _$effect(_$p => _$setProp(_el$17, \"fg\", theme.text.muted, _$p));\n return _el$16;\n }\n }), _el$18);\n _$insertNode(_el$18, _el$20);\n _$setProp(_el$18, \"height\", 1);\n _$setProp(_el$18, \"flexShrink\", 0);\n _$setProp(_el$18, \"flexDirection\", \"row\");\n _$setProp(_el$18, \"width\", \"100%\");\n _$setProp(_el$18, \"paddingLeft\", 1);\n _$insert(_el$18, _$createComponent(Show, {\n get when() {\n return notice() ?? hint() ?? mockNotice();\n },\n get children() {\n var _el$19 = _$createElement(\"text\");\n _$setProp(_el$19, \"wrapMode\", \"none\");\n _$insert(_el$19, () => notice() ?? hint() ?? mockNotice() ?? '');\n _$effect(_$p => _$setProp(_el$19, \"fg\", notice() ? theme.text.feedback.error : hint() ? theme.text.muted : theme.text.feedback.warning, _$p));\n return _el$19;\n }\n }), _el$20);\n _$setProp(_el$20, \"flexGrow\", 1);\n _$insert(_el$18, _$createComponent(KeyHints, {\n hints: HOME_HINTS\n }), null);\n _$setProp(_el$21, \"flexGrow\", 1);\n _$setProp(_el$21, \"minHeight\", 0);\n _$insertNode(_el$22, _el$23);\n _$insertNode(_el$22, _el$24);\n _$insertNode(_el$22, _el$25);\n _$insertNode(_el$22, _el$26);\n _$setProp(_el$22, \"height\", 1);\n _$setProp(_el$22, \"flexShrink\", 0);\n _$setProp(_el$22, \"flexDirection\", \"row\");\n _$setProp(_el$22, \"paddingLeft\", 2);\n _$setProp(_el$22, \"paddingRight\", 2);\n _$setProp(_el$22, \"width\", \"100%\");\n _$setProp(_el$23, \"flexShrink\", 1);\n _$setProp(_el$23, \"wrapMode\", \"none\");\n _$insert(_el$23, () => tilde(config.cwd, config.env.HOME));\n _$setProp(_el$24, \"flexShrink\", 0);\n _$setProp(_el$24, \"wrapMode\", \"none\");\n _$insert(_el$24, () => ` · ${daemonLine(data.state, config.version)}`);\n _$setProp(_el$25, \"flexGrow\", 1);\n _$setProp(_el$25, \"flexShrink\", 0);\n _$setProp(_el$25, \"width\", 2);\n _$setProp(_el$26, \"flexShrink\", 0);\n _$setProp(_el$26, \"wrapMode\", \"none\");\n _$insert(_el$26, () => `shibaox ${config.version}`);\n _$effect(_p$ => {\n var _v$ = dimensions().width < 44 ? 1 : 2,\n _v$2 = dimensions().width < 44 ? 1 : 2,\n _v$3 = theme.text.muted,\n _v$4 = theme.text.muted,\n _v$5 = theme.text.muted;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$12, \"paddingLeft\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$12, \"paddingRight\", _v$2, _p$.t));\n _v$3 !== _p$.a && (_p$.a = _$setProp(_el$23, \"fg\", _v$3, _p$.a));\n _v$4 !== _p$.o && (_p$.o = _$setProp(_el$24, \"fg\", _v$4, _p$.o));\n _v$5 !== _p$.i && (_p$.i = _$setProp(_el$26, \"fg\", _v$5, _p$.i));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined\n });\n return _el$11;\n })();\n}",
|
|
40
|
+
"import { memo as _$memo } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { TextAttributes } from '@opentui/core';\nimport { createMemo, createResource, createSignal, For, Show } from 'solid-js';\nimport { useClient } from '../../context/client.js';\nimport { useKeys } from '../../context/keys.js';\nimport { useTheme } from '../../theme/context.js';\nimport { Dialog, useDialog } from '../../ui/dialog.js';\nimport { useToast } from '../../ui/toast.js';\nconst VISIBLE = 16;\n/** The keys most people set first, ahead of the rest of the catalog. */\nconst PRIORITY = ['ANTHROPIC_API_KEY', 'OPENROUTER_API_KEY', 'OPENAI_API_KEY', 'GOOGLE_GENERATIVE_AI_API_KEY', 'TYPESAFE_API_KEY', 'SHIBAOX_TELEGRAM_TOKEN'];\n\n/** Set keys first, then the usual ones, then the rest by name. */\nexport function orderKeys(rows) {\n const rank = r => {\n const p = PRIORITY.indexOf(r.name);\n return (r.set ? 0 : 1000) + (p < 0 ? PRIORITY.length : p);\n };\n return [...rows].sort((a, b) => rank(a) - rank(b) || a.name.localeCompare(b.name));\n}\n\n/**\n * The key vault: ↑/↓ pick a key, enter types its value (masked) and enter again saves it,\n * `x` removes the selected one. Values never show on screen.\n */\nexport function KeysDialog() {\n const client = useClient();\n const dialog = useDialog();\n const toast = useToast();\n const theme = useTheme().surface('dialog');\n const [rows, {\n refetch\n }] = createResource(() => client.keys().catch(() => []));\n const sorted = createMemo(() => orderKeys(rows() ?? []));\n const [cursor, setCursor] = createSignal(0);\n /** After a save the list reorders (set keys first): the cursor stays on the same key. */\n const reload = async () => {\n const name = selected()?.name;\n await refetch();\n if (name) {\n const i = sorted().findIndex(r => r.name === name);\n if (i >= 0) setCursor(i);\n }\n };\n const [editing, setEditing] = createSignal();\n const [value, setValue] = createSignal('');\n const selected = () => sorted()[Math.min(cursor(), Math.max(0, sorted().length - 1))];\n const save = async () => {\n const name = editing();\n const v = value().trim();\n if (!name) return;\n if (!v) {\n setEditing(undefined);\n return;\n }\n try {\n await client.setKey(name, v);\n toast.show({\n message: `${name} saved in the vault`,\n variant: 'success'\n });\n await reload();\n } catch (e) {\n toast.show({\n message: `Could not save ${name}: ${e instanceof Error ? e.message : String(e)}`,\n variant: 'error'\n });\n }\n setValue('');\n setEditing(undefined);\n };\n const remove = async () => {\n const r = selected();\n if (!r?.set || r.source !== 'vault') {\n if (r?.source === 'env') toast.show({\n message: `${r.name} comes from the shell, not the vault`,\n variant: 'info'\n });\n return;\n }\n await client.unsetKey(r.name).catch(() => undefined);\n toast.show({\n message: `${r.name} removed from the vault`,\n variant: 'info'\n });\n await reload();\n };\n useKeys('dialog', key => {\n if (editing()) return false; // the input owns the keys while a value is typed\n if (key.name === 'up') {\n setCursor(c => Math.max(0, c - 1));\n return true;\n }\n if (key.name === 'down') {\n setCursor(c => Math.min(sorted().length - 1, c + 1));\n return true;\n }\n if (key.name === 'return') {\n const r = selected();\n // the input mounts on the next tick: a focused input would receive this same enter\n if (r) setTimeout(() => {\n setValue('');\n setEditing(r.name);\n }, 0);\n return true;\n }\n if (key.name === 'x' && !key.ctrl) {\n void remove();\n return true;\n }\n return false;\n });\n const start = () => Math.max(0, Math.min(cursor() - Math.floor(VISIBLE / 2), sorted().length - VISIBLE));\n const window = () => sorted().slice(start(), start() + VISIBLE);\n return _$createComponent(Dialog, {\n size: \"large\",\n title: \"Keys\",\n onClose: () => dialog.close(),\n get children() {\n var _el$ = _$createElement(\"box\"),\n _el$6 = _$createElement(\"box\");\n _$insertNode(_el$, _el$6);\n _$setProp(_el$, \"flexDirection\", \"column\");\n _$setProp(_el$, \"width\", \"100%\");\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return rows.loading;\n },\n get children() {\n var _el$2 = _$createElement(\"text\");\n _$insertNode(_el$2, _$createTextNode(`Reading the vault…`));\n _$effect(_$p => _$setProp(_el$2, \"fg\", theme.text.muted, _$p));\n return _el$2;\n }\n }), _el$6);\n _$insert(_el$, _$createComponent(For, {\n get each() {\n return window();\n },\n children: (r, i) => {\n const active = () => start() + i() === cursor();\n return (() => {\n var _el$11 = _$createElement(\"box\"),\n _el$12 = _$createElement(\"text\"),\n _el$13 = _$createElement(\"text\"),\n _el$14 = _$createElement(\"text\"),\n _el$15 = _$createElement(\"text\");\n _$insertNode(_el$11, _el$12);\n _$insertNode(_el$11, _el$13);\n _$insertNode(_el$11, _el$14);\n _$insertNode(_el$11, _el$15);\n _$setProp(_el$11, \"height\", 1);\n _$setProp(_el$11, \"flexShrink\", 0);\n _$setProp(_el$11, \"flexDirection\", \"row\");\n _$setProp(_el$12, \"wrapMode\", \"none\");\n _$setProp(_el$12, \"flexShrink\", 0);\n _$insert(_el$12, () => r.set ? ' ● ' : ' ○ ');\n _$setProp(_el$13, \"wrapMode\", \"none\");\n _$setProp(_el$13, \"flexShrink\", 0);\n _$insert(_el$13, () => r.name.padEnd(28));\n _$setProp(_el$14, \"wrapMode\", \"none\");\n _$setProp(_el$14, \"flexShrink\", 0);\n _$insert(_el$14, () => (r.set ? `${r.masked ?? ''} ${r.source ?? ''}` : 'missing').padEnd(22));\n _$setProp(_el$15, \"wrapMode\", \"none\");\n _$setProp(_el$15, \"flexShrink\", 1);\n _$insert(_el$15, () => r.description);\n _$effect(_p$ => {\n var _v$6 = active() ? theme.background.action.primary.selected : undefined,\n _v$7 = r.set ? theme.text.feedback.success : theme.text.muted,\n _v$8 = active() ? theme.text.action.primary.selected : theme.text.base,\n _v$9 = TextAttributes.BOLD,\n _v$0 = theme.text.muted,\n _v$1 = theme.text.muted;\n _v$6 !== _p$.e && (_p$.e = _$setProp(_el$11, \"backgroundColor\", _v$6, _p$.e));\n _v$7 !== _p$.t && (_p$.t = _$setProp(_el$12, \"fg\", _v$7, _p$.t));\n _v$8 !== _p$.a && (_p$.a = _$setProp(_el$13, \"fg\", _v$8, _p$.a));\n _v$9 !== _p$.o && (_p$.o = _$setProp(_el$13, \"attributes\", _v$9, _p$.o));\n _v$0 !== _p$.i && (_p$.i = _$setProp(_el$14, \"fg\", _v$0, _p$.i));\n _v$1 !== _p$.n && (_p$.n = _$setProp(_el$15, \"fg\", _v$1, _p$.n));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined,\n n: undefined\n });\n return _el$11;\n })();\n }\n }), _el$6);\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return sorted().length > VISIBLE;\n },\n get children() {\n var _el$4 = _$createElement(\"box\"),\n _el$5 = _$createElement(\"text\");\n _$insertNode(_el$4, _el$5);\n _$setProp(_el$4, \"height\", 1);\n _$setProp(_el$4, \"flexShrink\", 0);\n _$setProp(_el$5, \"wrapMode\", \"none\");\n _$insert(_el$5, () => `${cursor() + 1} of ${sorted().length}`);\n _$effect(_$p => _$setProp(_el$5, \"fg\", theme.text.muted, _$p));\n return _el$4;\n }\n }), _el$6);\n _$setProp(_el$6, \"height\", 1);\n _$setProp(_el$6, \"flexShrink\", 0);\n _$setProp(_el$6, \"marginTop\", 1);\n _$setProp(_el$6, \"flexDirection\", \"row\");\n _$insert(_el$6, _$createComponent(Show, {\n get when() {\n return editing();\n },\n get fallback() {\n return (() => {\n var _el$16 = _$createElement(\"text\");\n _$insertNode(_el$16, _$createTextNode(`↑/↓ choose · enter set a value · x remove · esc close`));\n _$setProp(_el$16, \"wrapMode\", \"none\");\n _$effect(_$p => _$setProp(_el$16, \"fg\", theme.text.muted, _$p));\n return _el$16;\n })();\n },\n get children() {\n return [(() => {\n var _el$7 = _$createElement(\"text\");\n _$setProp(_el$7, \"wrapMode\", \"none\");\n _$setProp(_el$7, \"flexShrink\", 0);\n _$insert(_el$7, () => `value for ${editing() ?? ''}: `);\n _$effect(_$p => _$setProp(_el$7, \"fg\", theme.text.base, _$p));\n return _el$7;\n })(), (() => {\n var _el$8 = _$createElement(\"text\");\n _$setProp(_el$8, \"wrapMode\", \"none\");\n _$setProp(_el$8, \"flexShrink\", 1);\n _$insert(_el$8, () => '•'.repeat(Math.min(value().length, 40)));\n _$effect(_$p => _$setProp(_el$8, \"fg\", theme.text.action.primary.selected, _$p));\n return _el$8;\n })(), (() => {\n var _el$9 = _$createElement(\"text\");\n _$setProp(_el$9, \"wrapMode\", \"none\");\n _$setProp(_el$9, \"flexShrink\", 0);\n _$insert(_el$9, (() => {\n var _c$ = _$memo(() => value().length > 40);\n return () => _c$() ? ` (${value().length} chars)` : '';\n })());\n _$effect(_$p => _$setProp(_el$9, \"fg\", theme.text.muted, _$p));\n return _el$9;\n })(), (() => {\n var _el$0 = _$createElement(\"input\");\n _$setProp(_el$0, \"focused\", true);\n _$setProp(_el$0, \"width\", 1);\n _$setProp(_el$0, \"onInput\", setValue);\n _$setProp(_el$0, \"onSubmit\", () => void save());\n _$effect(_p$ => {\n var _v$ = theme.background.base,\n _v$2 = theme.background.base,\n _v$3 = theme.background.base,\n _v$4 = theme.background.base,\n _v$5 = theme.text.action.primary.selected;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$0, \"backgroundColor\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$0, \"focusedBackgroundColor\", _v$2, _p$.t));\n _v$3 !== _p$.a && (_p$.a = _$setProp(_el$0, \"textColor\", _v$3, _p$.a));\n _v$4 !== _p$.o && (_p$.o = _$setProp(_el$0, \"placeholderColor\", _v$4, _p$.o));\n _v$5 !== _p$.i && (_p$.i = _$setProp(_el$0, \"cursorColor\", _v$5, _p$.i));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined\n });\n return _el$0;\n })(), (() => {\n var _el$1 = _$createElement(\"text\");\n _$insertNode(_el$1, _$createTextNode(` enter saves`));\n _$setProp(_el$1, \"wrapMode\", \"none\");\n _$setProp(_el$1, \"flexShrink\", 0);\n _$effect(_$p => _$setProp(_el$1, \"fg\", theme.text.muted, _$p));\n return _el$1;\n })()];\n }\n }));\n return _el$;\n }\n });\n}",
|
|
41
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\n// Adapted from opencode (MIT) — https://github.com/anomalyco/opencode\nimport { TextAttributes } from '@opentui/core';\nimport { useTerminalDimensions } from '@opentui/solid';\nimport { createContext, createSignal, onCleanup, Show, useContext } from 'solid-js';\nimport { useTheme } from '../theme/context.js';\nimport { SplitBorder } from './border.js';\nconst DEFAULT_MS = 5000;\nfunction ToastSurface(props) {\n const theme = useTheme().surface('toast');\n const dimensions = useTerminalDimensions();\n const [hovered, setHovered] = createSignal(false);\n const hover = v => {\n setHovered(v);\n if (v) props.api.pause();else props.api.resume();\n };\n const affordance = () => (() => {\n var _el$ = _$createElement(\"text\");\n _$setProp(_el$, \"flexShrink\", 0);\n _$setProp(_el$, \"marginLeft\", 2);\n _$setProp(_el$, \"wrapMode\", \"none\");\n _$insert(_el$, (() => {\n var _c$ = _$memo(() => !!props.toast.action);\n return () => _c$() ? `› ${props.toast.action.label}` : 'x';\n })());\n _$effect(_p$ => {\n var _v$ = hovered() && props.toast.action ? TextAttributes.BOLD : undefined,\n _v$2 = hovered() ? theme.text.action.primary.selected : theme.text.muted;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$, \"attributes\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$, \"fg\", _v$2, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$;\n })();\n return (() => {\n var _el$2 = _$createElement(\"box\"),\n _el$3 = _$createElement(\"box\");\n _$insertNode(_el$2, _el$3);\n _$setProp(_el$2, \"position\", \"absolute\");\n _$setProp(_el$2, \"top\", 1);\n _$setProp(_el$2, \"right\", 2);\n _$setProp(_el$2, \"zIndex\", 4000);\n _$setProp(_el$2, \"onMouseOver\", () => hover(true));\n _$setProp(_el$2, \"onMouseOut\", () => hover(false));\n _$setProp(_el$2, \"onMouseUp\", () => props.api.activate());\n _$setProp(_el$3, \"width\", \"100%\");\n _$setProp(_el$3, \"paddingLeft\", 2);\n _$setProp(_el$3, \"paddingRight\", 2);\n _$setProp(_el$3, \"paddingTop\", 1);\n _$setProp(_el$3, \"paddingBottom\", 1);\n _$insert(_el$3, _$createComponent(Show, {\n get when() {\n return props.toast.title;\n },\n get fallback() {\n return (() => {\n var _el$9 = _$createElement(\"box\"),\n _el$0 = _$createElement(\"text\");\n _$insertNode(_el$9, _el$0);\n _$setProp(_el$9, \"flexDirection\", \"row\");\n _$setProp(_el$9, \"width\", \"100%\");\n _$setProp(_el$0, \"wrapMode\", \"word\");\n _$setProp(_el$0, \"flexGrow\", 1);\n _$insert(_el$0, () => props.toast.message);\n _$insert(_el$9, affordance, null);\n _$effect(_$p => _$setProp(_el$0, \"fg\", theme.text.base, _$p));\n return _el$9;\n })();\n },\n get children() {\n return [(() => {\n var _el$4 = _$createElement(\"box\"),\n _el$5 = _$createElement(\"text\"),\n _el$6 = _$createElement(\"box\");\n _$insertNode(_el$4, _el$5);\n _$insertNode(_el$4, _el$6);\n _$setProp(_el$4, \"flexDirection\", \"row\");\n _$setProp(_el$4, \"width\", \"100%\");\n _$setProp(_el$4, \"marginBottom\", 1);\n _$insert(_el$5, () => props.toast.title ?? '');\n _$setProp(_el$6, \"flexGrow\", 1);\n _$insert(_el$4, affordance, null);\n _$effect(_p$ => {\n var _v$3 = TextAttributes.BOLD,\n _v$4 = theme.text.base;\n _v$3 !== _p$.e && (_p$.e = _$setProp(_el$5, \"attributes\", _v$3, _p$.e));\n _v$4 !== _p$.t && (_p$.t = _$setProp(_el$5, \"fg\", _v$4, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$4;\n })(), (() => {\n var _el$7 = _$createElement(\"text\");\n _$setProp(_el$7, \"wrapMode\", \"word\");\n _$setProp(_el$7, \"width\", \"100%\");\n _$insert(_el$7, () => props.toast.message);\n _$effect(_$p => _$setProp(_el$7, \"fg\", theme.text.base, _$p));\n return _el$7;\n })()];\n }\n }), null);\n _$insert(_el$3, _$createComponent(Show, {\n get when() {\n return props.pending > 0;\n },\n get children() {\n var _el$8 = _$createElement(\"text\");\n _$setProp(_el$8, \"marginTop\", 1);\n _$insert(_el$8, () => `+${props.pending} more`);\n _$effect(_$p => _$setProp(_el$8, \"fg\", theme.text.muted, _$p));\n return _el$8;\n }\n }), null);\n _$effect(_p$ => {\n var _v$5 = Math.min(60, dimensions().width - 6),\n _v$6 = theme.text.feedback[props.toast.variant],\n _v$7 = SplitBorder.border,\n _v$8 = SplitBorder.customBorderChars,\n _v$9 = theme.background.raised.high;\n _v$5 !== _p$.e && (_p$.e = _$setProp(_el$2, \"maxWidth\", _v$5, _p$.e));\n _v$6 !== _p$.t && (_p$.t = _$setProp(_el$2, \"borderColor\", _v$6, _p$.t));\n _v$7 !== _p$.a && (_p$.a = _$setProp(_el$2, \"border\", _v$7, _p$.a));\n _v$8 !== _p$.o && (_p$.o = _$setProp(_el$2, \"customBorderChars\", _v$8, _p$.o));\n _v$9 !== _p$.i && (_p$.i = _$setProp(_el$3, \"backgroundColor\", _v$9, _p$.i));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined\n });\n return _el$2;\n })();\n}\n\n/** Draws the current toast (top-right); mount it once, above everything else. */\nexport function Toast() {\n const api = useToast();\n return _$createComponent(Show, {\n get when() {\n return api.current();\n },\n children: current => _$createComponent(ToastSurface, {\n get toast() {\n return current();\n },\n get pending() {\n return api.pending();\n },\n api: api\n })\n });\n}\nfunction init() {\n // signals, not a store: a store would merge the next toast into the current one\n const [current, setCurrent] = createSignal(undefined);\n const [queue, setQueue] = createSignal([]);\n let timeout;\n let startedAt = 0;\n let remaining = 0;\n let paused = false;\n const clear = () => {\n if (timeout) clearTimeout(timeout);\n timeout = undefined;\n };\n const start = duration => {\n clear();\n remaining = duration;\n startedAt = Date.now();\n timeout = setTimeout(() => dismiss(), duration);\n timeout.unref?.();\n };\n const dismiss = () => {\n clear();\n const next = queue()[0];\n setQueue(q => q.slice(1));\n setCurrent(next);\n if (!next) {\n paused = false;\n return;\n }\n remaining = next.duration;\n if (!paused) start(next.duration);\n };\n const api = {\n show(input) {\n const t = {\n ...input,\n duration: input.duration ?? DEFAULT_MS\n };\n if (current()) {\n setQueue(q => [...q, t]);\n return;\n }\n setCurrent(t);\n start(t.duration);\n },\n error(e) {\n api.show({\n variant: 'error',\n message: e instanceof Error ? e.message : String(e)\n });\n },\n pause() {\n if (!current() || paused) return;\n paused = true;\n remaining = Math.max(0, remaining - (Date.now() - startedAt));\n clear();\n },\n resume() {\n if (!current() || !paused) return;\n paused = false;\n start(remaining);\n },\n dismiss,\n activate() {\n const action = current()?.action;\n paused = false; // the pointer is still over the spot; the next toast must expire on its own\n dismiss();\n action?.run();\n },\n current,\n pending: () => queue().length\n };\n onCleanup(clear);\n return api;\n}\nconst Context = createContext();\nexport function ToastProvider(props) {\n const value = init();\n return _$createComponent(Context.Provider, {\n value: value,\n get children() {\n return props.children;\n }\n });\n}\nexport function useToast() {\n const value = useContext(Context);\n if (!value) throw new Error('useToast outside ToastProvider');\n return value;\n}",
|
|
42
|
+
"// Adapted from opencode (MIT) — https://github.com/anomalyco/opencode\nexport const EmptyBorder = {\n topLeft: '',\n bottomLeft: '',\n vertical: '',\n topRight: '',\n bottomRight: '',\n horizontal: ' ',\n bottomT: '',\n topT: '',\n cross: '',\n leftT: '',\n rightT: '',\n};\n\n/** Only the left and right edges, drawn as a heavy bar: cards, toasts, the active tab. */\nexport const SplitBorder = {\n border: ['left' as const, 'right' as const],\n customBorderChars: { ...EmptyBorder, vertical: '┃' },\n};\n",
|
|
43
|
+
"import { memo as _$memo } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { TextAttributes } from '@opentui/core';\nimport fuzzysort from 'fuzzysort';\nimport { createMemo, createResource, createSignal, For, Show } from 'solid-js';\nimport { useClient } from '../../context/client.js';\nimport { useKeys } from '../../context/keys.js';\nimport { useTheme } from '../../theme/context.js';\nimport { Dialog, useDialog } from '../../ui/dialog.js';\nimport { useToast } from '../../ui/toast.js';\nconst VISIBLE = 12;\nconst ADAPTERS = ['direct', 'claude-code', 'mock'];\n\n/** What the dialog lists for an org config, in the order people read it. */\nexport function tierRows(c) {\n return [{\n name: 'strong',\n value: c?.tiers.strong,\n note: 'tasks that need the best model'\n }, {\n name: 'cheap',\n value: c?.tiers.cheap,\n note: 'the orchestrator and light roles'\n }, {\n name: 'decision',\n value: c?.tiers.decision,\n note: 'decide nodes (model ref or jev-latest)'\n }, {\n name: 'judge',\n value: c?.judge,\n note: 'judge checks (default: decision, then strong)'\n }, {\n name: 'adapter',\n value: c?.adapter,\n note: 'default runtime; a chosen model overrides it'\n }];\n}\n\n/** The choices for a row: the daemon's models (usable first) for a tier, the adapters otherwise. */\nexport function tierChoices(name, models) {\n if (name === 'adapter') return ADAPTERS;\n const refs = [...models].sort((a, b) => Number(b.configured) - Number(a.configured)).map(m => m.ref);\n return name === 'decision' ? ['jev-latest', ...refs] : refs;\n}\n\n/**\n * The org's tiers, judge and adapter: ↑/↓ pick a row, enter opens the list of models (typed\n * text filters it), enter again saves through the daemon; `x` clears judge/adapter.\n */\nexport function TiersDialog(props) {\n const client = useClient();\n const dialog = useDialog();\n const toast = useToast();\n const theme = useTheme().surface('dialog');\n const [config, {\n refetch\n }] = createResource(() => client.orgConfig(props.orgRoot));\n const [models] = createResource(() => client.models().catch(() => []));\n const rows = createMemo(() => tierRows(config()));\n const [cursor, setCursor] = createSignal(0);\n const [editing, setEditing] = createSignal();\n const [query, setQuery] = createSignal('');\n const [pick, setPick] = createSignal(0);\n const choices = createMemo(() => {\n const name = editing();\n if (!name) return [];\n const all = tierChoices(name, models() ?? []);\n const q = query().trim();\n if (!q) return all;\n return fuzzysort.go(q, all).map(r => r.target);\n });\n const selected = () => rows()[Math.min(cursor(), rows().length - 1)];\n const patchFor = (name, value) => name === 'judge' ? {\n judge: value\n } : name === 'adapter' ? {\n adapter: value\n } : {\n tiers: {\n [name]: value\n }\n };\n const save = async (name, value) => {\n try {\n await client.setOrgConfig(props.orgRoot, patchFor(name, value));\n toast.show({\n message: value ? `${name} → ${value}` : `${name} cleared`,\n variant: 'success'\n });\n await refetch();\n props.onSaved?.();\n } catch (e) {\n toast.show({\n message: `Could not set ${name}: ${e instanceof Error ? e.message : String(e)}`,\n variant: 'error'\n });\n }\n };\n const choose = () => {\n const name = editing();\n const value = choices()[Math.min(pick(), choices().length - 1)];\n setEditing(undefined);\n setQuery('');\n if (name && value) void save(name, value);\n };\n useKeys('dialog', key => {\n if (editing()) {\n // the input has the text; the list keys are ours\n if (key.name === 'up') {\n setPick(c => Math.max(0, c - 1));\n return true;\n }\n if (key.name === 'down') {\n setPick(c => Math.min(choices().length - 1, c + 1));\n return true;\n }\n return false;\n }\n if (key.name === 'up') {\n setCursor(c => Math.max(0, c - 1));\n return true;\n }\n if (key.name === 'down') {\n setCursor(c => Math.min(rows().length - 1, c + 1));\n return true;\n }\n if (key.name === 'return') {\n const r = selected();\n // the input mounts on the next tick: a focused input would receive this same enter\n if (r) setTimeout(() => {\n setQuery('');\n setPick(0);\n setEditing(r.name);\n }, 0);\n return true;\n }\n if (key.name === 'x' && !key.ctrl) {\n const r = selected();\n if (r && (r.name === 'judge' || r.name === 'adapter')) void save(r.name, null);else toast.show({\n message: 'Tiers cannot be cleared, pick another model',\n variant: 'info'\n });\n return true;\n }\n return false;\n });\n const start = () => Math.max(0, Math.min(pick() - Math.floor(VISIBLE / 2), choices().length - VISIBLE));\n const title = () => `Tiers · ${config()?.organization ?? ''}`;\n // the Dialog sees escape first (its handler is the newest): back out of the list, else close\n const back = () => {\n if (!editing()) return dialog.close();\n setEditing(undefined);\n setQuery('');\n };\n return _$createComponent(Dialog, {\n size: \"large\",\n get title() {\n return title();\n },\n onClose: back,\n get children() {\n var _el$ = _$createElement(\"box\");\n _$setProp(_el$, \"flexDirection\", \"column\");\n _$setProp(_el$, \"width\", \"100%\");\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return config.error;\n },\n get children() {\n var _el$2 = _$createElement(\"text\");\n _$insert(_el$2, () => `Could not read the org: ${String(config.error?.message ?? config.error)}`);\n _$effect(_$p => _$setProp(_el$2, \"fg\", theme.text.feedback.error, _$p));\n return _el$2;\n }\n }), null);\n _$insert(_el$, _$createComponent(For, {\n get each() {\n return rows();\n },\n children: (r, i) => {\n const active = () => i() === Math.min(cursor(), rows().length - 1);\n return (() => {\n var _el$8 = _$createElement(\"box\"),\n _el$9 = _$createElement(\"text\"),\n _el$0 = _$createElement(\"text\"),\n _el$1 = _$createElement(\"text\");\n _$insertNode(_el$8, _el$9);\n _$insertNode(_el$8, _el$0);\n _$insertNode(_el$8, _el$1);\n _$setProp(_el$8, \"height\", 1);\n _$setProp(_el$8, \"flexShrink\", 0);\n _$setProp(_el$8, \"flexDirection\", \"row\");\n _$setProp(_el$9, \"wrapMode\", \"none\");\n _$setProp(_el$9, \"flexShrink\", 0);\n _$insert(_el$9, () => ` ${r.name.padEnd(10)}`);\n _$setProp(_el$0, \"wrapMode\", \"none\");\n _$setProp(_el$0, \"flexShrink\", 0);\n _$insert(_el$0, () => (r.value ?? '—').padEnd(44));\n _$setProp(_el$1, \"wrapMode\", \"none\");\n _$setProp(_el$1, \"flexShrink\", 1);\n _$insert(_el$1, () => r.note);\n _$effect(_p$ => {\n var _v$7 = active() ? theme.background.action.primary.selected : undefined,\n _v$8 = active() ? theme.text.action.primary.selected : theme.text.base,\n _v$9 = TextAttributes.BOLD,\n _v$0 = r.value ? theme.text.base : theme.text.muted,\n _v$1 = theme.text.muted;\n _v$7 !== _p$.e && (_p$.e = _$setProp(_el$8, \"backgroundColor\", _v$7, _p$.e));\n _v$8 !== _p$.t && (_p$.t = _$setProp(_el$9, \"fg\", _v$8, _p$.t));\n _v$9 !== _p$.a && (_p$.a = _$setProp(_el$9, \"attributes\", _v$9, _p$.a));\n _v$0 !== _p$.o && (_p$.o = _$setProp(_el$0, \"fg\", _v$0, _p$.o));\n _v$1 !== _p$.i && (_p$.i = _$setProp(_el$1, \"fg\", _v$1, _p$.i));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined\n });\n return _el$8;\n })();\n }\n }), null);\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return editing();\n },\n get fallback() {\n return (() => {\n var _el$10 = _$createElement(\"box\"),\n _el$11 = _$createElement(\"text\");\n _$insertNode(_el$10, _el$11);\n _$setProp(_el$10, \"height\", 1);\n _$setProp(_el$10, \"flexShrink\", 0);\n _$setProp(_el$10, \"marginTop\", 1);\n _$setProp(_el$11, \"wrapMode\", \"none\");\n _$insert(_el$11, () => `${config()?.per_run_usd !== undefined ? `budget $${config()?.per_run_usd} per run (/budget for this run) · ` : ''}↑/↓ choose · enter change · x clear judge/adapter · esc close`);\n _$effect(_$p => _$setProp(_el$11, \"fg\", theme.text.muted, _$p));\n return _el$10;\n })();\n },\n get children() {\n return [(() => {\n var _el$3 = _$createElement(\"box\"),\n _el$4 = _$createElement(\"text\"),\n _el$5 = _$createElement(\"input\");\n _$insertNode(_el$3, _el$4);\n _$insertNode(_el$3, _el$5);\n _$setProp(_el$3, \"height\", 1);\n _$setProp(_el$3, \"flexShrink\", 0);\n _$setProp(_el$3, \"marginTop\", 1);\n _$setProp(_el$3, \"flexDirection\", \"row\");\n _$setProp(_el$4, \"wrapMode\", \"none\");\n _$setProp(_el$4, \"flexShrink\", 0);\n _$insert(_el$4, () => `${editing() ?? ''} › `);\n _$setProp(_el$5, \"focused\", true);\n _$setProp(_el$5, \"placeholder\", \"type to filter\");\n _$setProp(_el$5, \"onInput\", v => {\n setQuery(v);\n setPick(0);\n });\n _$setProp(_el$5, \"onSubmit\", choose);\n _$setProp(_el$5, \"flexGrow\", 1);\n _$effect(_p$ => {\n var _v$ = theme.text.base,\n _v$2 = theme.background.base,\n _v$3 = theme.background.base,\n _v$4 = theme.text.base,\n _v$5 = theme.text.muted,\n _v$6 = theme.text.action.primary.selected;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$4, \"fg\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$5, \"backgroundColor\", _v$2, _p$.t));\n _v$3 !== _p$.a && (_p$.a = _$setProp(_el$5, \"focusedBackgroundColor\", _v$3, _p$.a));\n _v$4 !== _p$.o && (_p$.o = _$setProp(_el$5, \"textColor\", _v$4, _p$.o));\n _v$5 !== _p$.i && (_p$.i = _$setProp(_el$5, \"placeholderColor\", _v$5, _p$.i));\n _v$6 !== _p$.n && (_p$.n = _$setProp(_el$5, \"cursorColor\", _v$6, _p$.n));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined,\n n: undefined\n });\n return _el$3;\n })(), _$createComponent(For, {\n get each() {\n return choices().slice(start(), start() + VISIBLE);\n },\n children: (c, i) => {\n const active = () => start() + i() === Math.min(pick(), choices().length - 1);\n return (() => {\n var _el$12 = _$createElement(\"box\"),\n _el$13 = _$createElement(\"text\");\n _$insertNode(_el$12, _el$13);\n _$setProp(_el$12, \"height\", 1);\n _$setProp(_el$12, \"flexShrink\", 0);\n _$setProp(_el$13, \"wrapMode\", \"none\");\n _$insert(_el$13, ` ${c}`);\n _$effect(_p$ => {\n var _v$10 = active() ? theme.background.action.primary.selected : undefined,\n _v$11 = active() ? theme.text.action.primary.selected : theme.text.base;\n _v$10 !== _p$.e && (_p$.e = _$setProp(_el$12, \"backgroundColor\", _v$10, _p$.e));\n _v$11 !== _p$.t && (_p$.t = _$setProp(_el$13, \"fg\", _v$11, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$12;\n })();\n }\n }), (() => {\n var _el$6 = _$createElement(\"box\"),\n _el$7 = _$createElement(\"text\");\n _$insertNode(_el$6, _el$7);\n _$setProp(_el$6, \"height\", 1);\n _$setProp(_el$6, \"flexShrink\", 0);\n _$setProp(_el$7, \"wrapMode\", \"none\");\n _$insert(_el$7, (() => {\n var _c$ = _$memo(() => choices().length === 0);\n return () => _c$() ? 'No model matches' : `${choices().length} choices · ↑/↓ pick · enter save · esc back`;\n })());\n _$effect(_$p => _$setProp(_el$7, \"fg\", theme.text.muted, _$p));\n return _el$6;\n })()];\n }\n }), null);\n return _el$;\n }\n });\n}",
|
|
44
|
+
"import { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { TextAttributes } from '@opentui/core';\nimport { useTerminalDimensions } from '@opentui/solid';\nimport { For } from 'solid-js';\nimport { useTheme } from '../theme/context.js';\nimport { stringWidth, takeWidth } from '../ui/marquee.js';\n/** `key label · key label` with the keys in bold, as one row of texts. */\nexport function KeyHints(props) {\n const theme = useTheme();\n return (() => {\n var _el$ = _$createElement(\"box\");\n _$setProp(_el$, \"flexDirection\", \"row\");\n _$setProp(_el$, \"flexShrink\", 0);\n _$insert(_el$, _$createComponent(For, {\n get each() {\n return props.hints;\n },\n children: (h, i) => [_$memo(() => _$memo(() => i() > 0)() ? (() => {\n var _el$4 = _$createElement(\"text\");\n _$insertNode(_el$4, _$createTextNode(` `));\n _$effect(_$p => _$setProp(_el$4, \"fg\", theme.text.muted, _$p));\n return _el$4;\n })() : null), (() => {\n var _el$2 = _$createElement(\"text\");\n _$setProp(_el$2, \"wrapMode\", \"none\");\n _$insert(_el$2, () => h.key);\n _$effect(_p$ => {\n var _v$ = theme.text.base,\n _v$2 = TextAttributes.BOLD;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$2, \"fg\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$2, \"attributes\", _v$2, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$2;\n })(), (() => {\n var _el$3 = _$createElement(\"text\");\n _$setProp(_el$3, \"wrapMode\", \"none\");\n _$insert(_el$3, () => ` ${h.label}`);\n _$effect(_$p => _$setProp(_el$3, \"fg\", theme.text.muted, _$p));\n return _el$3;\n })()]\n }));\n return _el$;\n })();\n}\n\n/** The last line: status on the left, key hints on the right; the left side yields when space is short. */\nexport function Footer(props) {\n const theme = useTheme();\n const dimensions = useTerminalDimensions();\n const rightWidth = () => props.right ? stringWidth(props.right) : (props.hints ?? []).reduce((w, h) => w + stringWidth(h.key) + stringWidth(h.label) + 3, 0);\n const left = () => {\n const room = dimensions().width - 4 - rightWidth();\n return stringWidth(props.left) > room ? takeWidth(props.left, Math.max(0, room)) : props.left;\n };\n return (() => {\n var _el$6 = _$createElement(\"box\"),\n _el$7 = _$createElement(\"text\"),\n _el$8 = _$createElement(\"box\");\n _$insertNode(_el$6, _el$7);\n _$insertNode(_el$6, _el$8);\n _$setProp(_el$6, \"height\", 1);\n _$setProp(_el$6, \"flexShrink\", 0);\n _$setProp(_el$6, \"flexDirection\", \"row\");\n _$setProp(_el$6, \"paddingLeft\", 2);\n _$setProp(_el$6, \"paddingRight\", 2);\n _$setProp(_el$6, \"width\", \"100%\");\n _$setProp(_el$7, \"flexShrink\", 1);\n _$setProp(_el$7, \"wrapMode\", \"none\");\n _$insert(_el$7, left);\n _$setProp(_el$8, \"flexGrow\", 1);\n _$setProp(_el$8, \"flexShrink\", 0);\n _$setProp(_el$8, \"width\", 2);\n _$insert(_el$6, (() => {\n var _c$ = _$memo(() => !!props.right);\n return () => _c$() ? (() => {\n var _el$9 = _$createElement(\"text\");\n _$setProp(_el$9, \"flexShrink\", 0);\n _$setProp(_el$9, \"wrapMode\", \"none\");\n _$insert(_el$9, () => props.right);\n _$effect(_$p => _$setProp(_el$9, \"fg\", theme.text.muted, _$p));\n return _el$9;\n })() : _$createComponent(KeyHints, {\n get hints() {\n return props.hints ?? [];\n }\n });\n })(), null);\n _$effect(_$p => _$setProp(_el$7, \"fg\", theme.text.muted, _$p));\n return _el$6;\n })();\n}",
|
|
45
|
+
"// Adapted from opencode (MIT) — https://github.com/anomalyco/opencode\nconst GAP = ' · ';\nconst segmenter = new Intl.Segmenter(undefined, { granularity: 'grapheme' });\n\n/** Terminal cell width of a grapheme: 2 for East Asian wide/fullwidth and most emoji, else 1. */\nexport function graphemeWidth(g: string): number {\n const cp = g.codePointAt(0) ?? 0;\n if (cp < 0x1100) return 1;\n if (\n (cp >= 0x1100 && cp <= 0x115f) ||\n (cp >= 0x2e80 && cp <= 0xa4cf) ||\n (cp >= 0xac00 && cp <= 0xd7a3) ||\n (cp >= 0xf900 && cp <= 0xfaff) ||\n (cp >= 0xfe30 && cp <= 0xfe4f) ||\n (cp >= 0xff00 && cp <= 0xff60) ||\n (cp >= 0xffe0 && cp <= 0xffe6) ||\n (cp >= 0x1f300 && cp <= 0x1faff) ||\n (cp >= 0x20000 && cp <= 0x3fffd)\n )\n return 2;\n return 1;\n}\n\nexport function graphemes(value: string): string[] {\n return [...segmenter.segment(value)].map((s) => s.segment);\n}\n\nexport function stringWidth(value: string): number {\n return graphemes(value).reduce((w, g) => w + graphemeWidth(g), 0);\n}\n\n/** The longest prefix of `value` that fits in `width` cells. */\nexport function takeWidth(value: string, width: number): string {\n let out = '';\n let w = 0;\n for (const g of graphemes(value)) {\n const gw = graphemeWidth(g);\n if (w + gw > width) break;\n out += g;\n w += gw;\n }\n return out;\n}\n\nexport function marqueeCycleWidth(value: string): number {\n return stringWidth(value + GAP);\n}\n\nexport function marqueeOverflows(value: string, width: number): boolean {\n return stringWidth(value) > width;\n}\n\n/** `value` scrolled by `offset` cells inside `width`, looping with a ` · ` gap; unscrolled when it fits. */\nexport function marqueeText(value: string, width: number, offset: number): string {\n if (width <= 0) return '';\n if (stringWidth(value) <= width || offset <= 0) return takeWidth(value, width);\n const loop = [...graphemes(value), ...graphemes(GAP)];\n const cursor = offset % marqueeCycleWidth(value);\n const parts = [...loop, ...loop];\n let start = 0;\n let skipped = 0;\n while (start < parts.length && skipped < cursor) {\n skipped += graphemeWidth(parts[start] ?? '');\n start++;\n }\n let out = '';\n let w = 0;\n for (const g of parts.slice(start)) {\n const gw = graphemeWidth(g);\n if (w + gw > width) break;\n out += g;\n w += gw;\n }\n return out;\n}\n",
|
|
46
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { use as _$use } from \"@opentui/solid\";\nimport { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { createEffect, createMemo, createSignal, onCleanup, Show } from 'solid-js';\nimport { useKeys } from '../../context/keys.js';\nimport { completeCommand, parsePromptCommand } from '../../model/prompt-commands.js';\nimport { useMotion } from '../../motion/config.js';\nimport { useTheme } from '../../theme/context.js';\nimport { Autocomplete } from './autocomplete.js';\nconst PLACEHOLDER_MS = 4000;\n\n/**\n * The input of the home screen: `/` commands autocomplete (↑/↓ choose, tab/enter insert), enter\n * with a command calls onCommand, enter with text calls onSubmit; ctrl+c clears the text.\n */\nexport function Prompt(props) {\n const theme = useTheme();\n const motion = useMotion();\n let input;\n const [text, setText] = createSignal('');\n const [selected, setSelected] = createSignal(0);\n const [placeholder, setPlaceholder] = createSignal(0);\n const suggestions = createMemo(() => completeCommand(text(), {\n commands: props.commands\n }));\n createEffect(() => {\n suggestions();\n setSelected(0);\n });\n createEffect(() => {\n if (!motion() || props.placeholders.length < 2) return;\n const t = setInterval(() => setPlaceholder(i => (i + 1) % props.placeholders.length), PLACEHOLDER_MS);\n onCleanup(() => clearInterval(t));\n });\n const set = value => {\n if (input && !input.isDestroyed) input.value = value;\n setText(value);\n };\n const api = {\n // the home may already be gone when a closed dialog hands focus back\n focus: () => {\n if (input && !input.isDestroyed) input.focus();\n },\n set,\n current: text,\n clear: () => set('')\n };\n props.ref?.(api);\n const accept = () => {\n const s = suggestions()[selected()];\n if (!s) return;\n set(s.insert);\n };\n const submit = () => {\n if (props.disabled) return;\n const value = text().trim();\n if (!value) return;\n if (!value.startsWith('/')) return props.onSubmit(value);\n const s = suggestions()[selected()];\n const parsed = parsePromptCommand(value, props.commands);\n if (!parsed) {\n // only the command name so far: enter takes the highlighted command\n if (s) set(s.insert);\n return;\n }\n const kind = props.commands.find(c => c.name === parsed.command)?.kind ?? 'action';\n if (kind === 'action') {\n set('');\n props.onCommand(parsed);\n return;\n }\n if (!parsed.arg && !value.endsWith(' ') && text() === value) {\n // `/adapter` + enter: step into its values (a list to pick from, or a hint of what to type)\n set(`/${parsed.command} `);\n if (kind === 'text') props.onNeedValue?.(parsed.command);\n return;\n }\n if (kind === 'choice') {\n // no value or a partial one: the highlighted choice is the value\n const chosen = s?.insert.startsWith(`/${parsed.command} `) ? parsePromptCommand(s.insert, props.commands) : undefined;\n const cmd = chosen?.arg ? chosen : parsed;\n if (!cmd.arg) return;\n set('');\n props.onCommand(cmd);\n return;\n }\n if (!parsed.arg) {\n props.onNeedValue?.(parsed.command);\n return;\n }\n set('');\n props.onCommand(parsed);\n };\n useKeys('prompt', key => {\n if (key.ctrl && key.name === 'c') {\n if (!text()) return false;\n set('');\n return true;\n }\n if (key.name === '?') return true; // typed into the input, never the help shortcut\n if (suggestions().length === 0) return false;\n if (key.name === 'up') {\n setSelected(i => (i - 1 + suggestions().length) % suggestions().length);\n return true;\n }\n if (key.name === 'down') {\n setSelected(i => (i + 1) % suggestions().length);\n return true;\n }\n if (key.name === 'tab') {\n accept();\n return true;\n }\n return false;\n });\n const inner = () => [(() => {\n var _el$ = _$createElement(\"box\"),\n _el$2 = _$createElement(\"text\"),\n _el$4 = _$createElement(\"input\");\n _$insertNode(_el$, _el$2);\n _$insertNode(_el$, _el$4);\n _$setProp(_el$, \"flexDirection\", \"row\");\n _$setProp(_el$, \"width\", \"100%\");\n _$setProp(_el$, \"height\", 1);\n _$insertNode(_el$2, _$createTextNode(`› `));\n _$setProp(_el$2, \"flexShrink\", 0);\n _$use(r => {\n input = r;\n }, _el$4);\n _$setProp(_el$4, \"onInput\", v => {\n setText(v);\n props.onInput?.(v);\n });\n _$setProp(_el$4, \"onSubmit\", submit);\n _$setProp(_el$4, \"flexGrow\", 1);\n _$effect(_p$ => {\n var _v$ = theme.text.action.primary.selected,\n _v$2 = !props.disabled,\n _v$3 = props.placeholders[placeholder()] ?? '',\n _v$4 = theme.background.raised.base,\n _v$5 = theme.background.raised.base,\n _v$6 = theme.text.base,\n _v$7 = theme.text.muted,\n _v$8 = theme.text.action.primary.selected;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$2, \"fg\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$4, \"focused\", _v$2, _p$.t));\n _v$3 !== _p$.a && (_p$.a = _$setProp(_el$4, \"placeholder\", _v$3, _p$.a));\n _v$4 !== _p$.o && (_p$.o = _$setProp(_el$4, \"backgroundColor\", _v$4, _p$.o));\n _v$5 !== _p$.i && (_p$.i = _$setProp(_el$4, \"focusedBackgroundColor\", _v$5, _p$.i));\n _v$6 !== _p$.n && (_p$.n = _$setProp(_el$4, \"textColor\", _v$6, _p$.n));\n _v$7 !== _p$.s && (_p$.s = _$setProp(_el$4, \"placeholderColor\", _v$7, _p$.s));\n _v$8 !== _p$.h && (_p$.h = _$setProp(_el$4, \"cursorColor\", _v$8, _p$.h));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined,\n n: undefined,\n s: undefined,\n h: undefined\n });\n return _el$;\n })(), _$createComponent(Show, {\n get when() {\n return props.footer;\n },\n get children() {\n return [(() => {\n var _el$5 = _$createElement(\"box\");\n _$setProp(_el$5, \"height\", 1);\n _$setProp(_el$5, \"flexShrink\", 0);\n return _el$5;\n })(), (() => {\n var _el$6 = _$createElement(\"box\");\n _$setProp(_el$6, \"height\", 1);\n _$setProp(_el$6, \"flexShrink\", 0);\n _$setProp(_el$6, \"flexDirection\", \"row\");\n _$insert(_el$6, () => props.footer);\n return _el$6;\n })()];\n }\n })];\n return (() => {\n var _el$7 = _$createElement(\"box\");\n _$setProp(_el$7, \"flexDirection\", \"column\");\n _$setProp(_el$7, \"width\", \"100%\");\n _$insert(_el$7, _$createComponent(Show, {\n get when() {\n return suggestions().length > 0;\n },\n get children() {\n return _$createComponent(Autocomplete, {\n get items() {\n return suggestions();\n },\n get selected() {\n return selected();\n }\n });\n }\n }), null);\n _$insert(_el$7, _$createComponent(Show, {\n get when() {\n return !props.bare;\n },\n get fallback() {\n return (() => {\n var _el$1 = _$createElement(\"box\");\n _$setProp(_el$1, \"flexDirection\", \"column\");\n _$setProp(_el$1, \"width\", \"100%\");\n _$insert(_el$1, inner);\n return _el$1;\n })();\n },\n get children() {\n var _el$8 = _$createElement(\"box\"),\n _el$9 = _$createElement(\"box\"),\n _el$0 = _$createElement(\"box\");\n _$insertNode(_el$8, _el$9);\n _$insertNode(_el$8, _el$0);\n _$setProp(_el$8, \"flexDirection\", \"row\");\n _$setProp(_el$8, \"width\", \"100%\");\n _$setProp(_el$9, \"width\", 1);\n _$setProp(_el$9, \"flexShrink\", 0);\n _$setProp(_el$0, \"flexGrow\", 1);\n _$setProp(_el$0, \"flexDirection\", \"column\");\n _$setProp(_el$0, \"paddingLeft\", 2);\n _$setProp(_el$0, \"paddingRight\", 2);\n _$setProp(_el$0, \"paddingTop\", 1);\n _$setProp(_el$0, \"paddingBottom\", 1);\n _$insert(_el$0, inner);\n _$effect(_p$ => {\n var _v$9 = theme.text.action.primary.selected,\n _v$0 = theme.background.raised.base;\n _v$9 !== _p$.e && (_p$.e = _$setProp(_el$9, \"backgroundColor\", _v$9, _p$.e));\n _v$0 !== _p$.t && (_p$.t = _$setProp(_el$0, \"backgroundColor\", _v$0, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$8;\n }\n }), null);\n return _el$7;\n })();\n}",
|
|
47
|
+
"import { existsSync } from 'node:fs';\nimport { homedir } from 'node:os';\nimport { isAbsolute, join, resolve } from 'node:path';\nimport type { ModelChoice, SubmitRequest } from '@wizardingcode/shibaox-daemon';\nimport fuzzysort from 'fuzzysort';\n\nexport type Adapter = 'mock' | 'claude-code' | 'direct';\nexport const ADAPTERS: Adapter[] = ['mock', 'claude-code', 'direct'];\nconst WORKSPACES = ['inplace', 'worktree'] as const;\n\nexport interface PromptContext {\n org: string;\n project: string;\n workflow?: string;\n adapter: Adapter;\n budgetUsd?: number;\n workspace?: 'inplace' | 'worktree';\n /** A model ref (`provider/model`) for every task; the adapter follows from it. */\n model?: string;\n}\n\nexport const COMMANDS = [\n 'model',\n 'workflow',\n 'project',\n 'org',\n 'adapter',\n 'budget',\n 'workspace',\n 'runs',\n 'keys',\n 'key',\n 'tiers',\n 'help',\n] as const;\nexport type CommandName = (typeof COMMANDS)[number];\n\n/** How each command takes its value: from a list, as free text, or none (it acts at once). */\nexport const COMMAND_KIND: Record<CommandName, 'choice' | 'text' | 'action'> = {\n model: 'choice',\n workflow: 'choice',\n adapter: 'choice',\n workspace: 'choice',\n project: 'text',\n org: 'text',\n budget: 'text',\n runs: 'action',\n keys: 'action',\n key: 'text',\n tiers: 'action',\n help: 'action',\n};\n\n/** What to ask for when a free-text command is entered without its value. */\nexport const COMMAND_HINT: Record<CommandName, string> = {\n model: 'pick the provider/model for the run',\n workflow: 'pick a workflow of the org',\n adapter: 'pick an adapter: mock, claude-code or direct',\n workspace: 'pick inplace or worktree',\n project: 'type the project directory and press enter',\n org: 'type the org directory and press enter',\n budget: 'type the budget in USD and press enter',\n runs: 'open a run',\n keys: 'the key vault: which API keys and tokens are set',\n key: 'type NAME VALUE (e.g. OPENROUTER_API_KEY sk-or-…) and press enter',\n tiers: \"the org's model tiers, judge and adapter\",\n help: 'show the keys',\n};\nexport interface PromptCommand {\n command: string;\n arg: string;\n}\n\n/** A value a choice command offers, with what to say about it. */\nexport interface ValueChoice {\n value: string;\n hint?: string;\n /** Listed after the usable values whatever the match (a model whose key is missing). */\n disabled?: boolean;\n}\n\n/** A `/command` a prompt offers: its kind decides what enter does, `values` feed the list. */\nexport interface PromptCommandSpec {\n name: string;\n kind: 'choice' | 'text' | 'action';\n hint: string;\n values?: () => readonly (string | ValueChoice)[];\n}\n\n/** The `/model` value that goes back to the org's routing (per-role tiers). */\nexport const DEFAULT_MODEL = 'default';\n\n/** Whether `ref` looks like `provider/model`. */\nexport const isModelRef = (ref: string): boolean => /^[a-z0-9][a-z0-9-]*\\/\\S+$/i.test(ref);\n\n/** `1.25`, `10.00`, `0.004`: two decimals, more only when the price needs them, never \"0.00\" for a price. */\nconst usd = (v: number): string =>\n v === 0 ? '0.00' : v >= 0.1 ? v.toFixed(2) : v.toPrecision(2).replace(/\\.?0+$/, '');\n\n/** `$0.30/$2.50 per M`, `free`, or nothing when the price is unknown. */\nexport function priceLabel(m: Pick<ModelChoice, 'pricing' | 'free'>): string | undefined {\n if (m.pricing && (m.pricing.input_per_m > 0 || m.pricing.output_per_m > 0))\n return `$${usd(m.pricing.input_per_m)}/$${usd(m.pricing.output_per_m)} per M`;\n if (m.free || (m.pricing && m.pricing.input_per_m === 0 && m.pricing.output_per_m === 0))\n return 'free';\n return undefined;\n}\n\n/** `128k ctx`, `1.0M ctx`. */\nexport function windowLabel(tokens: number | undefined): string | undefined {\n if (!tokens) return undefined;\n return tokens >= 1_000_000\n ? `${(tokens / 1_000_000).toFixed(1)}M ctx`\n : `${Math.round(tokens / 1000)}k ctx`;\n}\n\n/** What a usable model's hint says: where it runs, what it costs, how much it holds. */\nfunction modelHint(m: ModelChoice): string {\n if (m.local && m.available === false) return 'local (server not reachable)';\n if (!m.local && !m.configured) return `needs ${m.missing?.join(', ') || 'configuration'}`;\n return [m.local ? 'local' : (m.runtime ?? 'direct'), priceLabel(m), windowLabel(m.contextWindow)]\n .filter((p): p is string => !!p)\n .join(' · ');\n}\n\n/** `/model` values: org routing first, then the daemon's models, usable ones ahead, the others say what they miss. */\nexport function modelValues(models: readonly ModelChoice[]): ValueChoice[] {\n return [\n { value: DEFAULT_MODEL, hint: 'org routing' },\n ...[...models]\n .sort((a, b) => Number(b.configured) - Number(a.configured))\n .map((m) => ({\n value: m.ref,\n hint: modelHint(m),\n disabled: !m.configured || m.available === false,\n })),\n ];\n}\n\n/** The model spec of a `/model` command for both prompts. */\nexport function modelCommand(models: () => readonly ModelChoice[]): PromptCommandSpec {\n return {\n name: 'model',\n kind: 'choice',\n hint: COMMAND_HINT.model,\n values: () => modelValues(models()),\n };\n}\n\n/** The home prompt's commands (the run context), with the org's workflows and the models as values. */\nexport function homeCommands(\n workflows: readonly string[],\n models: readonly ModelChoice[] = [],\n): PromptCommandSpec[] {\n return COMMANDS.map((name) =>\n name === 'model'\n ? modelCommand(() => models)\n : {\n name,\n kind: COMMAND_KIND[name],\n hint: COMMAND_HINT[name],\n values:\n name === 'workflow'\n ? () => workflows\n : name === 'adapter'\n ? () => ADAPTERS\n : name === 'workspace'\n ? () => WORKSPACES\n : undefined,\n },\n );\n}\n\n/** The adapter a chosen model runs through, from the daemon's list (`claude-code` for a subscription). */\nexport function adapterForModel(ref: string, models: readonly ModelChoice[]): Adapter | undefined {\n const m = models.find((x) => x.ref === ref);\n if (!m) return undefined;\n return m.runtime === 'claude-code' ? 'claude-code' : 'direct';\n}\n\nexport function parsePromptCommand(\n text: string,\n commands: readonly PromptCommandSpec[],\n): PromptCommand | undefined {\n const m = /^\\/(\\S+)\\s*(.*)$/s.exec(text.trim());\n if (!m) return undefined;\n const command = commands.find((c) => c.name === m[1]);\n if (!command) return undefined;\n return { command: command.name, arg: (m[2] ?? '').trim() };\n}\n\n/** Rows the suggestion list shows at most. */\nexport const SUGGESTIONS = 10;\n\nfunction rank(query: string, targets: readonly string[], limit = SUGGESTIONS): string[] {\n if (!query) return targets.slice(0, limit);\n return fuzzysort.go(query, targets, { limit }).map((r) => r.target);\n}\n\nexport interface Suggestion {\n label: string;\n insert: string;\n /** What the command does, shown beside it. */\n hint?: string;\n}\n\n/** Suggestions for the text typed so far: command names, then the values of the current command. */\nexport function completeCommand(\n text: string,\n o: { commands: readonly PromptCommandSpec[] },\n): Suggestion[] {\n if (!text.startsWith('/')) return [];\n const m = /^\\/(\\S*)(\\s+(.*))?$/s.exec(text);\n if (!m) return [];\n const name = m[1] ?? '';\n const byName = new Map(o.commands.map((c) => [c.name, c]));\n if (m[2] === undefined) {\n return rank(name, [...byName.keys()]).map((c) => ({\n label: `/${c}`,\n insert: `/${c} `,\n hint: byName.get(c)?.hint,\n }));\n }\n const arg = (m[3] ?? '').trim();\n const values = (byName.get(name)?.values?.() ?? []).map((v) =>\n typeof v === 'string' ? { value: v } : v,\n );\n const byValue = new Map(values.map((v) => [v.value, v]));\n // rank everything, then put the usable values first and only then cut the list: a usable\n // match must never be pushed out by better-scoring values that cannot run\n const ranked = rank(\n arg,\n values.map((v) => v.value),\n Number.POSITIVE_INFINITY,\n );\n const usable = ranked.filter((v) => !byValue.get(v)?.disabled);\n const rest = ranked.filter((v) => byValue.get(v)?.disabled);\n return [...usable, ...rest].slice(0, SUGGESTIONS).map((v) => ({\n label: v,\n insert: `/${name} ${v}`,\n hint: byValue.get(v)?.hint,\n }));\n}\n\nexport function expandHome(p: string): string {\n if (p === '~') return homedir();\n if (p.startsWith('~/')) return join(homedir(), p.slice(2));\n return p;\n}\n\n/** Applies a `/command arg` to the prompt context, or explains why it cannot. */\nexport function applyPromptCommand(\n ctx: PromptContext,\n cmd: PromptCommand,\n o: { cwd: string },\n): PromptContext | { error: string } {\n const dir = (p: string) => {\n const e = expandHome(p);\n return isAbsolute(e) ? e : resolve(o.cwd, e);\n };\n switch (cmd.command as CommandName) {\n case 'model': {\n if (cmd.arg === DEFAULT_MODEL) return { ...ctx, model: undefined };\n if (!isModelRef(cmd.arg))\n return { error: 'Model must look like provider/model (see /model for the list)' };\n return { ...ctx, model: cmd.arg };\n }\n case 'workflow':\n if (!cmd.arg) return { error: 'Workflow name is required' };\n return { ...ctx, workflow: cmd.arg };\n case 'project': {\n if (!cmd.arg) return { error: 'Project directory is required' };\n const p = dir(cmd.arg);\n if (!existsSync(p)) return { error: `Project not found: ${p}` };\n return { ...ctx, project: p };\n }\n case 'org': {\n if (!cmd.arg) return { error: 'Org directory is required' };\n const p = dir(cmd.arg);\n if (!existsSync(p)) return { error: `Org not found: ${p}` };\n return { ...ctx, org: p };\n }\n case 'adapter': {\n const a = ADAPTERS.find((x) => x === cmd.arg);\n if (!a) return { error: `Adapter must be one of ${ADAPTERS.join(', ')}` };\n // an adapter chosen by hand replaces the model (which would otherwise decide it)\n return { ...ctx, adapter: a, model: undefined };\n }\n case 'budget': {\n const n = Number(cmd.arg);\n if (!cmd.arg || !Number.isFinite(n) || n <= 0) return { error: 'Budget must be a number' };\n return { ...ctx, budgetUsd: n };\n }\n case 'workspace': {\n const w = WORKSPACES.find((x) => x === cmd.arg);\n if (!w) return { error: `Workspace must be one of ${WORKSPACES.join(', ')}` };\n return { ...ctx, workspace: w };\n }\n default:\n return ctx;\n }\n}\n\nexport function toSubmitRequest(ctx: PromptContext, input: string): SubmitRequest {\n return {\n orgRoot: ctx.org,\n project: ctx.project,\n workflow: ctx.workflow ?? '',\n input,\n adapter: ctx.adapter,\n workspace: ctx.workspace,\n budgetUsd: ctx.budgetUsd,\n ...(ctx.model ? { model: ctx.model } : {}),\n };\n}\n",
|
|
48
|
+
"import { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { TextAttributes } from '@opentui/core';\nimport { For } from 'solid-js';\nimport { SUGGESTIONS } from '../../model/prompt-commands.js';\nimport { useTheme } from '../../theme/context.js';\n/** The suggestion list above the prompt: up to ten rows, the selected one highlighted. */\nexport function Autocomplete(props) {\n const theme = useTheme();\n return (() => {\n var _el$ = _$createElement(\"box\");\n _$setProp(_el$, \"flexDirection\", \"column\");\n _$setProp(_el$, \"paddingLeft\", 1);\n _$setProp(_el$, \"paddingRight\", 1);\n _$insert(_el$, _$createComponent(For, {\n get each() {\n return props.items.slice(0, SUGGESTIONS);\n },\n children: (item, i) => (() => {\n var _el$2 = _$createElement(\"box\"),\n _el$3 = _$createElement(\"text\"),\n _el$4 = _$createElement(\"text\");\n _$insertNode(_el$2, _el$3);\n _$insertNode(_el$2, _el$4);\n _$setProp(_el$2, \"height\", 1);\n _$setProp(_el$2, \"flexShrink\", 0);\n _$setProp(_el$2, \"flexDirection\", \"row\");\n _$setProp(_el$3, \"wrapMode\", \"none\");\n _$setProp(_el$3, \"flexShrink\", 0);\n _$insert(_el$3, () => item.label);\n _$setProp(_el$4, \"wrapMode\", \"none\");\n _$setProp(_el$4, \"flexShrink\", 1);\n _$insert(_el$4, (() => {\n var _c$ = _$memo(() => !!item.hint);\n return () => _c$() ? ` ${item.hint}` : '';\n })());\n _$effect(_p$ => {\n var _v$ = i() === props.selected ? theme.background.action.primary.selected : undefined,\n _v$2 = i() === props.selected ? theme.text.action.primary.selected : theme.text.base,\n _v$3 = i() === props.selected ? TextAttributes.BOLD : undefined,\n _v$4 = theme.text.muted;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$2, \"backgroundColor\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$3, \"fg\", _v$2, _p$.t));\n _v$3 !== _p$.a && (_p$.a = _$setProp(_el$3, \"attributes\", _v$3, _p$.a));\n _v$4 !== _p$.o && (_p$.o = _$setProp(_el$4, \"fg\", _v$4, _p$.o));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined\n });\n return _el$2;\n })()\n }));\n _$effect(_$p => _$setProp(_el$, \"backgroundColor\", theme.background.raised.base, _$p));\n return _el$;\n })();\n}",
|
|
49
|
+
"import { memo as _$memo } from \"@opentui/solid\";\nimport { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { TextAttributes } from '@opentui/core';\nimport { useTerminalDimensions } from '@opentui/solid';\nimport { createEffect, createMemo, createSignal, onCleanup, Show } from 'solid-js';\nimport { Confirm } from '../../component/dialogs/confirm.js';\nimport { DiffDialog } from '../../component/dialogs/diff.js';\nimport { KeyHints } from '../../component/footer.js';\nimport { Sidebar } from '../../component/sidebar.js';\nimport { useCommands } from '../../context/commands.js';\nimport { useData } from '../../context/data.js';\nimport { useKeys } from '../../context/keys.js';\nimport { usePrefs } from '../../context/prefs.js';\nimport { duration, shortId } from '../../model/format.js';\nimport { statusOf } from '../../model/status.js';\nimport { createAnimatable, spring } from '../../motion/animation.js';\nimport { useMotion } from '../../motion/config.js';\nimport { ShimmerText } from '../../motion/shimmer-text.js';\nimport { useTheme } from '../../theme/context.js';\nimport { useDialog } from '../../ui/dialog.js';\nimport { clampSidebarWidth, SIDEBAR_WIDTH, sidebarAuto } from '../../ui/layout.js';\nimport { createPaneResize } from '../../ui/pane-resize.js';\nimport { useToast } from '../../ui/toast.js';\nimport { ApprovalBar, pendingFor } from './approval-bar.js';\nimport { ContextLine } from './context-line.js';\nimport { ContinuePrompt } from './continue.js';\nimport { Timeline } from './timeline.js';\nexport const SESSION_HINTS = [{\n key: 'enter',\n label: 'expand'\n}, {\n key: 'd',\n label: 'diff'\n}, {\n key: 'tab',\n label: 'sidebar'\n}, {\n key: 'ctrl+n',\n label: 'home'\n}, {\n key: '?',\n label: 'help'\n}];\nexport const STREAM_HINTS = [{\n key: 'enter',\n label: 'expand'\n}, {\n key: 'd',\n label: 'diff'\n}, {\n key: 'q',\n label: 'quit'\n}];\nconst DOTS = ['·', '·', '·', '·', '·', '·'];\nconst DOT_MS = 120;\n\n/** The dotted progress of a working run (the reference's `······` under the prompt). */\nfunction Dots(props) {\n const theme = useTheme();\n const motion = useMotion();\n const [head, setHead] = createSignal(0);\n createEffect(() => {\n if (!props.active || !motion()) return;\n const t = setInterval(() => setHead(h => (h + 1) % (DOTS.length + 2)), DOT_MS);\n onCleanup(() => clearInterval(t));\n });\n const glyphs = () => DOTS.map((_, i) => props.active && motion() && Math.abs(i - head()) <= 1 ? '▪' : '·').join('');\n return (() => {\n var _el$ = _$createElement(\"text\");\n _$setProp(_el$, \"wrapMode\", \"none\");\n _$insert(_el$, glyphs);\n _$effect(_$p => _$setProp(_el$, \"fg\", props.active ? theme.text.action.primary.selected : theme.text.muted, _$p));\n return _el$;\n })();\n}\n\n/** One run as a conversation: request, cards, the status box (or the approval bar), and the sidebar. */\nexport function SessionFrame(props) {\n const data = useData();\n const theme = useTheme();\n const dialog = useDialog();\n const toast = useToast();\n const prefs = usePrefs();\n const motion = useMotion();\n const dimensions = useTerminalDimensions();\n const [now, setNow] = createSignal(Date.now());\n const tick = setInterval(() => setNow(Date.now()), 1000);\n onCleanup(() => clearInterval(tick));\n\n // the tab is a thread: the status, the pending items and the prompt belong to its latest run\n const latest = () => {\n const runs = data.threadOf(props.runId);\n return runs[runs.length - 1] ?? props.runId;\n };\n const summary = () => data.state.runs.find(r => r.runId === latest());\n const state = () => data.state.states[latest()];\n const status = () => data.state.ended[latest()] ?? state()?.status ?? summary()?.status ?? 'queued';\n const look = () => statusOf({\n status: status()\n });\n const working = () => status() === 'running';\n const elapsed = () => {\n const created = summary()?.createdAt;\n const updated = summary()?.updatedAt;\n if (!created) return undefined;\n const from = Date.parse(created);\n const terminal = status() === 'completed' || status() === 'failed' || status() === 'cancelled';\n const to = terminal && updated ? Date.parse(updated) : now();\n return Number.isFinite(from) && Number.isFinite(to) ? duration(Math.max(0, to - from)) : undefined;\n };\n const activeNode = () => {\n const nodes = state()?.nodes ?? {};\n return Object.entries(nodes).find(([, n]) => n.status === 'running' || n.status === 'waiting')?.[0];\n };\n const color = () => {\n const f = look().feedback;\n return f === 'muted' ? theme.text.muted : theme.text.feedback[f];\n };\n const pending = createMemo(() => pendingFor(data.state.inbox, latest()));\n const finished = () => ['completed', 'failed', 'cancelled'].includes(status());\n let timeline;\n\n // sidebar: automatic on wide terminals, toggled with ctrl+b, resizable with the mouse\n const area = () => dimensions().width;\n const [openedByKey, setOpenedByKey] = createSignal(undefined);\n const sidebarVisible = createMemo(() => {\n if (props.single) return false;\n if (openedByKey() !== undefined) return openedByKey();\n return prefs.data.sidebar !== 'hide' && sidebarAuto(dimensions().width, 0);\n });\n const resize = createPaneResize({\n value: () => prefs.data.sidebarWidth ?? SIDEBAR_WIDTH,\n defaultValue: () => SIDEBAR_WIDTH,\n clamp: w => clampSidebarWidth(w, area()),\n fromMouse: e => dimensions().width - e.x - 1,\n contains: (e, w) => e.x >= dimensions().width - w - 1 && e.x <= dimensions().width - w,\n onCommit: w => prefs.update({\n sidebarWidth: w\n })\n });\n const anim = createAnimatable({\n w: sidebarVisible() ? resize.size() : 0\n }, {\n transition: spring({\n visualDuration: 0.25\n }),\n enabled: motion\n });\n createEffect(() => anim.animate({\n w: sidebarVisible() ? resize.size() : 0\n }));\n const sidebarWidth = () => Math.round(anim.value().w);\n const [focus, setFocus] = createSignal('conversation');\n createEffect(() => {\n if (!sidebarVisible()) setFocus('conversation');\n });\n const toggleSidebar = () => {\n const next = !sidebarVisible();\n setOpenedByKey(next);\n prefs.update({\n sidebar: next ? 'auto' : 'hide'\n });\n };\n const cancel = () => dialog.open(() => _$createComponent(Confirm, {\n get message() {\n return `Cancel run ${shortId(latest())}?`;\n },\n onYes: () => {\n dialog.close();\n void data.actions.cancel(latest());\n },\n onNo: () => dialog.close()\n }));\n const resume = () => {\n if (status() === 'paused_budget') void data.actions.resume(latest());else toast.show({\n message: 'Nothing to resume',\n variant: 'info'\n });\n };\n const diff = () => dialog.open(() => _$createComponent(DiffDialog, {\n get runId() {\n return latest();\n }\n }));\n const unregister = useCommands().register([{\n id: 'diff',\n label: 'Diff of the run',\n keys: 'd',\n run: diff\n }, {\n id: 'sidebar',\n label: 'Toggle sidebar',\n keys: 'ctrl+b',\n run: toggleSidebar,\n when: () => !props.single\n }, {\n id: 'cancel',\n label: 'Cancel run',\n keys: 'c',\n run: cancel,\n when: () => !finished()\n }, {\n id: 'resume',\n label: 'Resume run',\n keys: 'r',\n run: resume,\n when: () => status() === 'paused_budget'\n }]);\n onCleanup(unregister);\n useKeys('global', key => {\n if (props.single || !(key.ctrl && key.name === 'b')) return false;\n toggleSidebar();\n return true;\n });\n useKeys('pane', key => {\n if (key.ctrl || key.meta) return false;\n if (key.name === 'tab' && sidebarVisible()) {\n setFocus(f => f === 'sidebar' ? 'conversation' : 'sidebar');\n return true;\n }\n if (focus() !== 'conversation') return false;\n if (key.name === 'c') {\n cancel();\n return true;\n }\n if (key.name === 'r') {\n resume();\n return true;\n }\n if (key.name === 'd' && pending().length === 0) {\n diff();\n return true;\n }\n return false;\n });\n const hints = () => {\n const base = props.single ? STREAM_HINTS : SESSION_HINTS;\n if (status() === 'paused_budget') return [{\n key: 'r',\n label: 'resume'\n }, ...base];\n return base;\n };\n return (() => {\n var _el$2 = _$createElement(\"box\"),\n _el$3 = _$createElement(\"box\"),\n _el$4 = _$createElement(\"box\"),\n _el$5 = _$createElement(\"box\"),\n _el$6 = _$createElement(\"box\"),\n _el$7 = _$createElement(\"box\"),\n _el$8 = _$createElement(\"text\"),\n _el$0 = _$createElement(\"box\");\n _$insertNode(_el$2, _el$3);\n _$setProp(_el$2, \"flexDirection\", \"row\");\n _$setProp(_el$2, \"width\", \"100%\");\n _$setProp(_el$2, \"height\", \"100%\");\n _$insertNode(_el$3, _el$4);\n _$insertNode(_el$3, _el$7);\n _$setProp(_el$3, \"flexDirection\", \"column\");\n _$setProp(_el$3, \"flexGrow\", 1);\n _$setProp(_el$3, \"height\", \"100%\");\n _$insert(_el$3, _$createComponent(Timeline, {\n get runId() {\n return props.runId;\n },\n get focused() {\n return focus() === 'conversation';\n },\n api: a => {\n timeline = a;\n }\n }), _el$4);\n _$insertNode(_el$4, _el$5);\n _$insertNode(_el$4, _el$6);\n _$setProp(_el$4, \"flexDirection\", \"row\");\n _$setProp(_el$4, \"width\", \"100%\");\n _$setProp(_el$4, \"flexShrink\", 0);\n _$setProp(_el$4, \"paddingLeft\", 2);\n _$setProp(_el$4, \"paddingRight\", 2);\n _$setProp(_el$5, \"width\", 1);\n _$setProp(_el$5, \"flexShrink\", 0);\n _$setProp(_el$6, \"flexGrow\", 1);\n _$setProp(_el$6, \"flexDirection\", \"column\");\n _$setProp(_el$6, \"paddingLeft\", 2);\n _$setProp(_el$6, \"paddingRight\", 2);\n _$setProp(_el$6, \"paddingTop\", 1);\n _$setProp(_el$6, \"paddingBottom\", 1);\n _$insert(_el$6, _$createComponent(Show, {\n get when() {\n return pending().length > 0;\n },\n get fallback() {\n return _$createComponent(Show, {\n get when() {\n return !finished() || props.single;\n },\n get fallback() {\n return _$createComponent(ContinuePrompt, {\n get runId() {\n return props.runId;\n },\n onSubmit: t => void data.continueRun(props.runId, t),\n onScroll: n => timeline?.scrollBy(n),\n get footer() {\n return _$createComponent(ContextLine, {\n get runId() {\n return props.runId;\n },\n get elapsed() {\n return elapsed();\n }\n });\n }\n });\n },\n get children() {\n return [(() => {\n var _el$10 = _$createElement(\"box\"),\n _el$11 = _$createElement(\"text\");\n _$insertNode(_el$10, _el$11);\n _$setProp(_el$10, \"height\", 1);\n _$setProp(_el$10, \"flexShrink\", 0);\n _$setProp(_el$10, \"flexDirection\", \"row\");\n _$insert(_el$10, _$createComponent(Show, {\n get when() {\n return working();\n },\n get fallback() {\n return (() => {\n var _el$13 = _$createElement(\"text\");\n _$setProp(_el$13, \"wrapMode\", \"none\");\n _$insert(_el$13, () => `${look().symbol} ${look().word}`);\n _$effect(_p$ => {\n var _v$1 = color(),\n _v$10 = TextAttributes.BOLD;\n _v$1 !== _p$.e && (_p$.e = _$setProp(_el$13, \"fg\", _v$1, _p$.e));\n _v$10 !== _p$.t && (_p$.t = _$setProp(_el$13, \"attributes\", _v$10, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$13;\n })();\n },\n get children() {\n return _$createComponent(ShimmerText, {\n get fg() {\n return color();\n },\n get shimmer() {\n return theme.text.base;\n },\n get attributes() {\n return TextAttributes.BOLD;\n },\n wrapMode: \"none\",\n get children() {\n return `${look().symbol} ${look().word}`;\n }\n });\n }\n }), _el$11);\n _$setProp(_el$11, \"wrapMode\", \"none\");\n _$insert(_el$11, (() => {\n var _c$ = _$memo(() => !!activeNode());\n return () => _c$() ? ` · ${activeNode()}` : '';\n })());\n _$effect(_$p => _$setProp(_el$11, \"fg\", theme.text.muted, _$p));\n return _el$10;\n })(), (() => {\n var _el$12 = _$createElement(\"box\");\n _$setProp(_el$12, \"height\", 1);\n _$setProp(_el$12, \"flexShrink\", 0);\n _$setProp(_el$12, \"flexDirection\", \"row\");\n _$insert(_el$12, _$createComponent(ContextLine, {\n get runId() {\n return props.runId;\n },\n get elapsed() {\n return elapsed();\n }\n }));\n return _el$12;\n })()];\n }\n });\n },\n get children() {\n return _$createComponent(ApprovalBar, {\n get runId() {\n return latest();\n }\n });\n }\n }));\n _$insertNode(_el$7, _el$8);\n _$insertNode(_el$7, _el$0);\n _$setProp(_el$7, \"height\", 1);\n _$setProp(_el$7, \"flexShrink\", 0);\n _$setProp(_el$7, \"flexDirection\", \"row\");\n _$setProp(_el$7, \"paddingLeft\", 2);\n _$setProp(_el$7, \"paddingRight\", 2);\n _$setProp(_el$7, \"width\", \"100%\");\n _$insert(_el$7, _$createComponent(Dots, {\n get active() {\n return working();\n }\n }), _el$8);\n _$insertNode(_el$8, _$createTextNode(` `));\n _$setProp(_el$8, \"wrapMode\", \"none\");\n _$insert(_el$7, _$createComponent(Show, {\n get when() {\n return working() || status() === 'waiting_human' || status() === 'waiting_approval';\n },\n get children() {\n return _$createComponent(KeyHints, {\n hints: [{\n key: 'c',\n label: 'cancel'\n }]\n });\n }\n }), _el$0);\n _$setProp(_el$0, \"flexGrow\", 1);\n _$setProp(_el$0, \"flexShrink\", 0);\n _$setProp(_el$0, \"width\", 2);\n _$insert(_el$7, _$createComponent(KeyHints, {\n get hints() {\n return hints();\n }\n }), null);\n _$insert(_el$2, _$createComponent(Show, {\n get when() {\n return sidebarWidth() > 0;\n },\n get children() {\n return [(() => {\n var _el$1 = _$createElement(\"box\");\n _$setProp(_el$1, \"width\", 1);\n _$setProp(_el$1, \"flexShrink\", 0);\n _$setProp(_el$1, \"height\", \"100%\");\n _$effect(_p$ => {\n var _v$ = resize.hovered() || resize.resizing() ? theme.background.raised.high : theme.background.base,\n _v$2 = resize.onMouseOver,\n _v$3 = resize.onMouseOut,\n _v$4 = resize.onMouseDown;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$1, \"backgroundColor\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$1, \"onMouseOver\", _v$2, _p$.t));\n _v$3 !== _p$.a && (_p$.a = _$setProp(_el$1, \"onMouseOut\", _v$3, _p$.a));\n _v$4 !== _p$.o && (_p$.o = _$setProp(_el$1, \"onMouseDown\", _v$4, _p$.o));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined\n });\n return _el$1;\n })(), _$createComponent(Sidebar, {\n get runId() {\n return latest();\n },\n get rootId() {\n return props.runId;\n },\n get width() {\n return sidebarWidth();\n },\n get focused() {\n return focus() === 'sidebar';\n },\n onFocusBack: () => setFocus('conversation')\n })];\n }\n }), null);\n _$effect(_p$ => {\n var _v$5 = resize.onMouseDrag,\n _v$6 = resize.onMouseDragEnd,\n _v$7 = resize.onMouseUp,\n _v$8 = pending().length > 0 ? theme.text.feedback.warning : theme.text.action.primary.selected,\n _v$9 = theme.background.raised.base,\n _v$0 = theme.text.muted;\n _v$5 !== _p$.e && (_p$.e = _$setProp(_el$2, \"onMouseDrag\", _v$5, _p$.e));\n _v$6 !== _p$.t && (_p$.t = _$setProp(_el$2, \"onMouseDragEnd\", _v$6, _p$.t));\n _v$7 !== _p$.a && (_p$.a = _$setProp(_el$2, \"onMouseUp\", _v$7, _p$.a));\n _v$8 !== _p$.o && (_p$.o = _$setProp(_el$5, \"backgroundColor\", _v$8, _p$.o));\n _v$9 !== _p$.i && (_p$.i = _$setProp(_el$6, \"backgroundColor\", _v$9, _p$.i));\n _v$0 !== _p$.n && (_p$.n = _$setProp(_el$8, \"fg\", _v$0, _p$.n));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined,\n n: undefined\n });\n return _el$2;\n })();\n}",
|
|
50
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { useKeys } from '../../context/keys.js';\nimport { useTheme } from '../../theme/context.js';\nimport { Dialog } from '../../ui/dialog.js';\n\n/** `<message> (y/n)`: y runs onYes, n and esc run onNo. */\nexport function Confirm(props) {\n const theme = useTheme().surface('dialog');\n useKeys('dialog', key => {\n if (key.name === 'y') {\n props.onYes();\n return true;\n }\n if (key.name === 'n') {\n props.onNo();\n return true;\n }\n return false;\n });\n return _$createComponent(Dialog, {\n centered: true,\n get onClose() {\n return props.onNo;\n },\n get children() {\n var _el$ = _$createElement(\"text\");\n _$insert(_el$, () => `${props.message} (y/n)`);\n _$effect(_$p => _$setProp(_el$, \"fg\", theme.text.base, _$p));\n return _el$;\n }\n });\n}",
|
|
51
|
+
"import { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { extname } from 'node:path';\nimport { TextAttributes } from '@opentui/core';\nimport { DaemonHttpError } from '@wizardingcode/shibaox-daemon/client';\nimport { createMemo, createResource, createSignal, For, Show } from 'solid-js';\nimport { useClient } from '../../context/client.js';\nimport { useKeys } from '../../context/keys.js';\nimport { Spinner } from '../../motion/spinner.js';\nimport { useSyntax, useTheme } from '../../theme/context.js';\nimport { Dialog, useDialog } from '../../ui/dialog.js';\nconst LIST_WIDTH = 24;\nconst FILETYPES = {\n '.ts': 'typescript',\n '.tsx': 'tsx',\n '.js': 'javascript',\n '.jsx': 'jsx',\n '.json': 'json',\n '.md': 'markdown',\n '.py': 'python',\n '.go': 'go',\n '.rs': 'rust',\n '.sh': 'bash',\n '.yaml': 'yaml',\n '.yml': 'yaml',\n '.css': 'css',\n '.html': 'html'\n};\n\n/** The part of a multi-file patch that belongs to `path`. */\nexport function patchOf(patch, path) {\n const header = `diff --git a/${path} b/${path}`;\n const start = patch.indexOf(header);\n if (start < 0) return '';\n const next = patch.indexOf('\\ndiff --git ', start + header.length);\n return next < 0 ? patch.slice(start) : patch.slice(start, next + 1);\n}\n\n/** The run's changes: a file list on the left, the selected file's diff on the right. */\nexport function DiffDialog(props) {\n const client = useClient();\n const dialog = useDialog();\n const theme = useTheme().surface('dialog');\n const syntax = useSyntax();\n const [result] = createResource(async () => {\n try {\n return {\n diff: await client.diff(props.runId)\n };\n } catch (e) {\n if (e instanceof DaemonHttpError && e.code === 'no_workspace') return {\n error: 'Workspace is gone'\n };\n return {\n error: e instanceof Error ? e.message : String(e)\n };\n }\n });\n const [cursor, setCursor] = createSignal(0);\n const files = () => result()?.diff?.files ?? [];\n const selected = () => files()[Math.min(cursor(), Math.max(0, files().length - 1))];\n const patch = createMemo(() => {\n const d = result()?.diff;\n const f = selected();\n return d && f ? patchOf(d.patch, f.path) : '';\n });\n const totals = () => {\n const fs = files();\n return `${fs.length} file${fs.length === 1 ? '' : 's'} · +${fs.reduce((a, f) => a + f.additions, 0)} −${fs.reduce((a, f) => a + f.deletions, 0)}`;\n };\n useKeys('dialog', key => {\n if (key.name === ']' || key.name === 'down' || key.name === 'j') {\n setCursor(c => Math.min(files().length - 1, c + 1));\n return true;\n }\n if (key.name === '[' || key.name === 'up' || key.name === 'k') {\n setCursor(c => Math.max(0, c - 1));\n return true;\n }\n return false;\n });\n return _$createComponent(Dialog, {\n size: \"xlarge\",\n get title() {\n return _$memo(() => !!result()?.diff)() ? `Diff · ${totals()}` : 'Diff';\n },\n onClose: () => dialog.close(),\n get children() {\n return _$createComponent(Show, {\n get when() {\n return !result.loading;\n },\n get fallback() {\n return _$createComponent(Spinner, {\n get color() {\n return theme.text.muted;\n },\n children: \"Reading the workspace\\u2026\"\n });\n },\n get children() {\n return _$createComponent(Show, {\n get when() {\n return !result()?.error;\n },\n get fallback() {\n return (() => {\n var _el$7 = _$createElement(\"text\");\n _$insert(_el$7, () => result()?.error ?? '');\n _$effect(_$p => _$setProp(_el$7, \"fg\", theme.text.feedback.error, _$p));\n return _el$7;\n })();\n },\n get children() {\n return _$createComponent(Show, {\n get when() {\n return files().length > 0;\n },\n get fallback() {\n return (() => {\n var _el$8 = _$createElement(\"text\");\n _$insertNode(_el$8, _$createTextNode(`No changes`));\n _$effect(_$p => _$setProp(_el$8, \"fg\", theme.text.muted, _$p));\n return _el$8;\n })();\n },\n get children() {\n return [(() => {\n var _el$ = _$createElement(\"box\"),\n _el$2 = _$createElement(\"box\"),\n _el$3 = _$createElement(\"scrollbox\"),\n _el$4 = _$createElement(\"diff\");\n _$insertNode(_el$, _el$2);\n _$insertNode(_el$, _el$3);\n _$setProp(_el$, \"flexDirection\", \"row\");\n _$setProp(_el$, \"width\", \"100%\");\n _$setProp(_el$, \"height\", 22);\n _$setProp(_el$2, \"width\", 24);\n _$setProp(_el$2, \"flexShrink\", 0);\n _$setProp(_el$2, \"flexDirection\", \"column\");\n _$setProp(_el$2, \"paddingRight\", 1);\n _$insert(_el$2, _$createComponent(For, {\n get each() {\n return files();\n },\n children: (f, i) => (() => {\n var _el$0 = _$createElement(\"box\"),\n _el$1 = _$createElement(\"text\");\n _$insertNode(_el$0, _el$1);\n _$setProp(_el$0, \"height\", 1);\n _$setProp(_el$0, \"flexShrink\", 0);\n _$setProp(_el$0, \"onMouseUp\", () => setCursor(i()));\n _$setProp(_el$1, \"wrapMode\", \"none\");\n _$insert(_el$1, () => `${f.status === 'added' ? '+' : f.status === 'deleted' ? '−' : '±'} ${f.path}`);\n _$effect(_p$ => {\n var _v$5 = i() === cursor() ? theme.background.action.primary.selected : undefined,\n _v$6 = f.status === 'added' ? theme.diff.added : f.status === 'deleted' ? theme.diff.removed : theme.text.base,\n _v$7 = i() === cursor() ? TextAttributes.BOLD : undefined;\n _v$5 !== _p$.e && (_p$.e = _$setProp(_el$0, \"backgroundColor\", _v$5, _p$.e));\n _v$6 !== _p$.t && (_p$.t = _$setProp(_el$1, \"fg\", _v$6, _p$.t));\n _v$7 !== _p$.a && (_p$.a = _$setProp(_el$1, \"attributes\", _v$7, _p$.a));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined\n });\n return _el$0;\n })()\n }));\n _$insertNode(_el$3, _el$4);\n _$setProp(_el$3, \"flexGrow\", 1);\n _$setProp(_el$3, \"height\", \"100%\");\n _$setProp(_el$4, \"view\", \"unified\");\n _$setProp(_el$4, \"syntaxStyle\", syntax);\n _$setProp(_el$4, \"showLineNumbers\", true);\n _$effect(_p$ => {\n var _v$ = patch(),\n _v$2 = FILETYPES[extname(selected()?.path ?? '')] ?? 'text',\n _v$3 = theme.diff.addedBg,\n _v$4 = theme.diff.removedBg;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$4, \"diff\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$4, \"filetype\", _v$2, _p$.t));\n _v$3 !== _p$.a && (_p$.a = _$setProp(_el$4, \"addedBg\", _v$3, _p$.a));\n _v$4 !== _p$.o && (_p$.o = _$setProp(_el$4, \"removedBg\", _v$4, _p$.o));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined\n });\n return _el$;\n })(), (() => {\n var _el$5 = _$createElement(\"box\"),\n _el$6 = _$createElement(\"text\");\n _$insertNode(_el$5, _el$6);\n _$setProp(_el$5, \"height\", 1);\n _$setProp(_el$5, \"flexShrink\", 0);\n _$setProp(_el$5, \"marginTop\", 1);\n _$setProp(_el$6, \"wrapMode\", \"none\");\n _$insert(_el$6, () => `${result()?.diff?.truncated ? '… truncated · ' : ''}] / [ next / previous file · esc close`);\n _$effect(_$p => _$setProp(_el$6, \"fg\", theme.text.muted, _$p));\n return _el$5;\n })()];\n }\n });\n }\n });\n }\n });\n }\n });\n}",
|
|
52
|
+
"import { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { TextAttributes } from '@opentui/core';\nimport { createMemo, createSignal, For, Show } from 'solid-js';\nimport { useConfig } from '../context/config.js';\nimport { useData } from '../context/data.js';\nimport { useKeys } from '../context/keys.js';\nimport { duration, money, shortId } from '../model/format.js';\nimport { tilde } from '../routes/home.js';\nimport { pendingFor } from '../routes/session/approval-bar.js';\nimport { requestText } from '../routes/session/request.js';\nimport { useTheme } from '../theme/context.js';\nimport { useDialog } from '../ui/dialog.js';\nimport { marqueeText } from '../ui/marquee.js';\nimport { useToast } from '../ui/toast.js';\nimport { Confirm } from './dialogs/confirm.js';\nfunction Title(props) {\n const theme = useTheme();\n return (() => {\n var _el$ = _$createElement(\"box\"),\n _el$2 = _$createElement(\"text\");\n _$insertNode(_el$, _el$2);\n _$setProp(_el$, \"height\", 1);\n _$setProp(_el$, \"flexShrink\", 0);\n _$setProp(_el$, \"marginTop\", 1);\n _$setProp(_el$2, \"wrapMode\", \"none\");\n _$insert(_el$2, () => props.text);\n _$effect(_p$ => {\n var _v$ = theme.text.base,\n _v$2 = TextAttributes.BOLD;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$2, \"fg\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$2, \"attributes\", _v$2, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$;\n })();\n}\nconst NODE_MARK = {\n completed: '✓',\n passed: '✓',\n running: '·',\n waiting: '▲',\n failed: '✗',\n gate_failed: '✗'\n};\n\n/** The current run at a glance: request, context, nodes as a checklist, files, and what needs you. */\nexport function Sidebar(props) {\n const data = useData();\n const config = useConfig();\n const theme = useTheme().surface('sidebar');\n const dialog = useDialog();\n const toast = useToast();\n const state = () => data.state.states[props.runId];\n const root = () => data.state.states[props.rootId ?? props.runId];\n const summary = () => data.state.runs.find(r => r.runId === props.runId);\n const spent = () => data.threadOf(props.rootId ?? props.runId).reduce((n, id) => n + (data.state.states[id]?.spentUsd ?? 0), 0);\n const cards = data.timeline(props.runId);\n const inner = () => Math.max(8, props.width - 2);\n const nodes = createMemo(() => {\n const wf = state()?.workflowSnapshot;\n const st = state()?.nodes ?? {};\n const ids = wf ? Object.keys(wf.nodes) : Object.keys(st);\n return ids.map(id => ({\n id,\n status: st[id]?.status ?? 'pending'\n }));\n });\n const done = () => nodes().filter(n => n.status === 'completed' || n.status === 'passed').length;\n const files = createMemo(() => {\n const out = new Set();\n for (const c of cards()) {\n if (c.kind === 'node') for (const b of c.blocks) if (b.kind === 'file') out.add(b.path);\n if (c.kind === 'summary') for (const f of c.files) out.add(f);\n }\n return [...out];\n });\n const elapsed = () => {\n const created = summary()?.createdAt;\n if (!created) return undefined;\n const from = Date.parse(created);\n const terminal = ['completed', 'failed', 'cancelled'].includes(summary()?.status ?? '');\n const to = terminal ? Date.parse(summary()?.updatedAt ?? created) : Date.now();\n return Number.isFinite(from) && Number.isFinite(to) ? duration(Math.max(0, to - from)) : undefined;\n };\n const items = createMemo(() => pendingFor(data.state.inbox, props.runId));\n const [cursor, setCursor] = createSignal(0);\n const selectedItem = () => items()[Math.min(cursor(), Math.max(0, items().length - 1))];\n\n /** Answers like the approval bar: a command approval asks y first. */\n const answer = (item, approved) => {\n if (approved && item.kind === 'approval') {\n dialog.open(() => _$createComponent(Confirm, {\n get message() {\n return `Approve ${item.prompt}?`;\n },\n onYes: () => {\n dialog.close();\n void data.actions.answer(item.id, true);\n },\n onNo: () => dialog.close()\n }));\n return;\n }\n void data.actions.answer(item.id, approved);\n };\n useKeys('pane', key => {\n if (!props.focused || key.ctrl || key.meta) return false;\n switch (key.name) {\n case 'j':\n case 'down':\n if (cursor() < items().length - 1) setCursor(c => c + 1);\n return true;\n case 'k':\n case 'up':\n if (cursor() > 0) setCursor(c => c - 1);\n return true;\n case 'a':\n case 'd':\n {\n const item = selectedItem();\n if (item) answer(item, key.name === 'a');else toast.show({\n message: 'Nothing waiting',\n variant: 'info'\n });\n return true;\n }\n default:\n return false;\n }\n });\n return (() => {\n var _el$3 = _$createElement(\"box\"),\n _el$4 = _$createElement(\"text\"),\n _el$5 = _$createElement(\"text\"),\n _el$6 = _$createElement(\"text\"),\n _el$8 = _$createElement(\"box\"),\n _el$1 = _$createElement(\"box\"),\n _el$10 = _$createElement(\"text\"),\n _el$11 = _$createElement(\"box\"),\n _el$12 = _$createElement(\"text\"),\n _el$13 = _$createElement(\"span\");\n _$insertNode(_el$3, _el$4);\n _$insertNode(_el$3, _el$5);\n _$insertNode(_el$3, _el$6);\n _$insertNode(_el$3, _el$8);\n _$insertNode(_el$3, _el$1);\n _$insertNode(_el$3, _el$11);\n _$setProp(_el$3, \"flexShrink\", 0);\n _$setProp(_el$3, \"height\", \"100%\");\n _$setProp(_el$3, \"flexDirection\", \"column\");\n _$setProp(_el$3, \"paddingLeft\", 2);\n _$setProp(_el$3, \"paddingRight\", 1);\n _$setProp(_el$3, \"paddingTop\", 1);\n _$setProp(_el$4, \"wrapMode\", \"word\");\n _$insert(_el$4, () => marqueeText(requestText(root()?.input) || (summary()?.workflow ?? ''), inner() * 3, 0));\n _$insert(_el$3, _$createComponent(Title, {\n text: \"Context\"\n }), _el$5);\n _$setProp(_el$5, \"wrapMode\", \"none\");\n _$insert(_el$5, () => `${money(spent() || (summary()?.spentUsd ?? 0))} spent`);\n _$setProp(_el$6, \"wrapMode\", \"none\");\n _$insert(_el$6, () => `${done()} of ${nodes().length} nodes done`);\n _$insert(_el$3, _$createComponent(Show, {\n get when() {\n return elapsed();\n },\n get children() {\n var _el$7 = _$createElement(\"text\");\n _$setProp(_el$7, \"wrapMode\", \"none\");\n _$insert(_el$7, () => elapsed() ?? '');\n _$effect(_$p => _$setProp(_el$7, \"fg\", theme.text.muted, _$p));\n return _el$7;\n }\n }), _el$8);\n _$insert(_el$3, _$createComponent(Title, {\n text: \"Nodes\"\n }), _el$8);\n _$insert(_el$3, _$createComponent(For, {\n get each() {\n return nodes();\n },\n children: n => (() => {\n var _el$15 = _$createElement(\"box\"),\n _el$16 = _$createElement(\"text\");\n _$insertNode(_el$15, _el$16);\n _$setProp(_el$15, \"height\", 1);\n _$setProp(_el$15, \"flexShrink\", 0);\n _$setProp(_el$16, \"wrapMode\", \"none\");\n _$insert(_el$16, () => `[${NODE_MARK[n.status] ?? ' '}] ${n.id}`);\n _$effect(_$p => _$setProp(_el$16, \"fg\", n.status === 'running' ? theme.text.action.primary.selected : n.status === 'failed' || n.status === 'gate_failed' ? theme.text.feedback.error : n.status === 'pending' ? theme.text.muted : theme.text.base, _$p));\n return _el$15;\n })()\n }), _el$8);\n _$insert(_el$3, _$createComponent(Show, {\n get when() {\n return files().length > 0;\n },\n get children() {\n return [_$createComponent(Title, {\n text: \"Files\"\n }), _$createComponent(For, {\n get each() {\n return files();\n },\n children: f => (() => {\n var _el$17 = _$createElement(\"box\"),\n _el$18 = _$createElement(\"text\");\n _$insertNode(_el$17, _el$18);\n _$setProp(_el$17, \"height\", 1);\n _$setProp(_el$17, \"flexShrink\", 0);\n _$setProp(_el$18, \"wrapMode\", \"none\");\n _$insert(_el$18, () => marqueeText(`± ${f}`, inner(), 0));\n _$effect(_$p => _$setProp(_el$18, \"fg\", theme.text.base, _$p));\n return _el$17;\n })()\n })];\n }\n }), _el$8);\n _$insert(_el$3, _$createComponent(Show, {\n get when() {\n return items().length > 0;\n },\n get children() {\n return [_$createComponent(Title, {\n get text() {\n return `Needs you (${items().length})`;\n }\n }), _$createComponent(For, {\n get each() {\n return items();\n },\n children: i => (() => {\n var _el$19 = _$createElement(\"box\"),\n _el$20 = _$createElement(\"text\");\n _$insertNode(_el$19, _el$20);\n _$setProp(_el$19, \"height\", 1);\n _$setProp(_el$19, \"flexShrink\", 0);\n _$setProp(_el$20, \"wrapMode\", \"none\");\n _$insert(_el$20, () => marqueeText(`▲ ${i.prompt}`, inner(), 0));\n _$effect(_p$ => {\n var _v$10 = props.focused && selectedItem()?.id === i.id ? theme.background.action.primary.selected : undefined,\n _v$11 = theme.text.feedback.warning;\n _v$10 !== _p$.e && (_p$.e = _$setProp(_el$19, \"backgroundColor\", _v$10, _p$.e));\n _v$11 !== _p$.t && (_p$.t = _$setProp(_el$20, \"fg\", _v$11, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$19;\n })()\n })];\n }\n }), _el$8);\n _$setProp(_el$8, \"flexGrow\", 1);\n _$insert(_el$3, _$createComponent(Show, {\n get when() {\n return props.focused;\n },\n get children() {\n var _el$9 = _$createElement(\"box\"),\n _el$0 = _$createElement(\"text\");\n _$insertNode(_el$9, _el$0);\n _$setProp(_el$9, \"height\", 1);\n _$setProp(_el$9, \"flexShrink\", 0);\n _$setProp(_el$0, \"wrapMode\", \"none\");\n _$insert(_el$0, () => items().length > 0 ? 'j/k select · a/d answer · tab back' : 'tab back');\n _$effect(_$p => _$setProp(_el$0, \"fg\", theme.text.muted, _$p));\n return _el$9;\n }\n }), _el$1);\n _$insertNode(_el$1, _el$10);\n _$setProp(_el$1, \"height\", 1);\n _$setProp(_el$1, \"flexShrink\", 0);\n _$setProp(_el$10, \"wrapMode\", \"none\");\n _$insert(_el$10, () => marqueeText(tilde(state()?.project ?? state()?.workspace ?? config.cwd), inner(), 0));\n _$insertNode(_el$11, _el$12);\n _$setProp(_el$11, \"height\", 1);\n _$setProp(_el$11, \"flexShrink\", 0);\n _$setProp(_el$11, \"marginBottom\", 1);\n _$insertNode(_el$12, _el$13);\n _$setProp(_el$12, \"wrapMode\", \"none\");\n _$insertNode(_el$13, _$createTextNode(`● `));\n _$insert(_el$12, () => `shibaox ${config.version} · ${shortId(props.runId)}`, null);\n _$effect(_p$ => {\n var _v$3 = props.width,\n _v$4 = theme.background.base,\n _v$5 = theme.text.base,\n _v$6 = TextAttributes.BOLD,\n _v$7 = theme.text.muted,\n _v$8 = theme.text.muted,\n _v$9 = theme.text.muted,\n _v$0 = theme.text.muted,\n _v$1 = {\n fg: theme.text.feedback.success\n };\n _v$3 !== _p$.e && (_p$.e = _$setProp(_el$3, \"width\", _v$3, _p$.e));\n _v$4 !== _p$.t && (_p$.t = _$setProp(_el$3, \"backgroundColor\", _v$4, _p$.t));\n _v$5 !== _p$.a && (_p$.a = _$setProp(_el$4, \"fg\", _v$5, _p$.a));\n _v$6 !== _p$.o && (_p$.o = _$setProp(_el$4, \"attributes\", _v$6, _p$.o));\n _v$7 !== _p$.i && (_p$.i = _$setProp(_el$5, \"fg\", _v$7, _p$.i));\n _v$8 !== _p$.n && (_p$.n = _$setProp(_el$6, \"fg\", _v$8, _p$.n));\n _v$9 !== _p$.s && (_p$.s = _$setProp(_el$10, \"fg\", _v$9, _p$.s));\n _v$0 !== _p$.h && (_p$.h = _$setProp(_el$12, \"fg\", _v$0, _p$.h));\n _v$1 !== _p$.r && (_p$.r = _$setProp(_el$13, \"style\", _v$1, _p$.r));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined,\n n: undefined,\n s: undefined,\n h: undefined,\n r: undefined\n });\n return _el$3;\n })();\n}",
|
|
53
|
+
"import { insert as _$insert } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { use as _$use } from \"@opentui/solid\";\nimport { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { createMemo, createSignal, Show } from 'solid-js';\nimport { useData } from '../../context/data.js';\nimport { useKeys } from '../../context/keys.js';\nimport { useTheme } from '../../theme/context.js';\nexport const APPROVAL_KEYS = '[a]pprove [d]eny [n]ote';\n\n/** The pending items of a run (approvals first): the one the keys act on is the first. */\nexport function pendingFor(inbox, runId) {\n return inbox.filter(i => i.runId === runId).sort((a, b) => a.kind === b.kind ? 0 : a.kind === 'approval' ? -1 : 1);\n}\n\n/**\n * Replaces the key hints while the run waits for the user: a approves (an approval of a command\n * asks y first), d denies, n asks for a note and approves with it; esc backs out.\n */\nexport function ApprovalBar(props) {\n const data = useData();\n const theme = useTheme();\n const items = createMemo(() => pendingFor(data.state.inbox, props.runId));\n const item = () => items()[0];\n const [mode, setMode] = createSignal('idle');\n const [note, setNote] = createSignal('');\n const answer = (approved, text) => {\n const i = item();\n if (!i) return;\n setMode('idle');\n setNote('');\n void data.actions.answer(i.id, approved, text || undefined);\n };\n useKeys('pane', key => {\n const i = item();\n if (!i || mode() === 'note' || key.ctrl || key.meta) return false;\n if (mode() === 'confirm') {\n if (key.name === 'y') answer(true);else if (key.name === 'n' || key.name === 'escape') setMode('idle');\n return true;\n }\n if (key.name === 'a') {\n if (i.kind === 'approval') setMode('confirm');else answer(true);\n return true;\n }\n if (key.name === 'd') {\n answer(false);\n return true;\n }\n if (key.name === 'n') {\n // after this key event: the focused renderable receives the key after the listeners,\n // so a synchronously mounted input would get the `n` typed into it\n setTimeout(() => setMode('note'), 0);\n return true;\n }\n return false;\n });\n useKeys('prompt', key => {\n if (mode() !== 'note') return false;\n if (key.name === 'escape' || key.ctrl && key.name === 'c') {\n setMode('idle');\n setNote('');\n return true;\n }\n return false;\n });\n const who = () => {\n const i = item();\n if (!i) return '';\n return i.kind === 'approval' ? i.detail.role ?? i.detail.program ?? '' : i.detail.action ?? i.nodeId;\n };\n return (() => {\n var _el$ = _$createElement(\"box\"),\n _el$6 = _$createElement(\"box\"),\n _el$7 = _$createElement(\"text\");\n _$insertNode(_el$, _el$6);\n _$setProp(_el$, \"height\", 2);\n _$setProp(_el$, \"flexShrink\", 0);\n _$setProp(_el$, \"flexDirection\", \"column\");\n _$setProp(_el$, \"width\", \"100%\");\n _$insert(_el$, _$createComponent(Show, {\n get when() {\n return mode() === 'note';\n },\n get fallback() {\n return _$createComponent(Show, {\n get when() {\n return mode() === 'confirm';\n },\n get fallback() {\n return (() => {\n var _el$0 = _$createElement(\"box\"),\n _el$1 = _$createElement(\"text\"),\n _el$10 = _$createElement(\"text\");\n _$insertNode(_el$0, _el$1);\n _$insertNode(_el$0, _el$10);\n _$setProp(_el$0, \"height\", 1);\n _$setProp(_el$0, \"flexDirection\", \"row\");\n _$setProp(_el$1, \"wrapMode\", \"none\");\n _$insert(_el$1, () => `▲ ${item()?.prompt ?? ''} · ${who()} · `);\n _$insertNode(_el$10, _$createTextNode(`[a]pprove [d]eny [n]ote`));\n _$setProp(_el$10, \"wrapMode\", \"none\");\n _$effect(_p$ => {\n var _v$6 = theme.text.feedback.warning,\n _v$7 = theme.text.base;\n _v$6 !== _p$.e && (_p$.e = _$setProp(_el$1, \"fg\", _v$6, _p$.e));\n _v$7 !== _p$.t && (_p$.t = _$setProp(_el$10, \"fg\", _v$7, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$0;\n })();\n },\n get children() {\n var _el$8 = _$createElement(\"box\"),\n _el$9 = _$createElement(\"text\");\n _$insertNode(_el$8, _el$9);\n _$setProp(_el$8, \"height\", 1);\n _$setProp(_el$9, \"wrapMode\", \"none\");\n _$insert(_el$9, () => `Approve ${item()?.prompt ?? ''}? (y/n)`);\n _$effect(_$p => _$setProp(_el$9, \"fg\", theme.text.feedback.warning, _$p));\n return _el$8;\n }\n });\n },\n get children() {\n var _el$2 = _$createElement(\"box\"),\n _el$3 = _$createElement(\"text\"),\n _el$5 = _$createElement(\"input\");\n _$insertNode(_el$2, _el$3);\n _$insertNode(_el$2, _el$5);\n _$setProp(_el$2, \"height\", 1);\n _$setProp(_el$2, \"flexDirection\", \"row\");\n _$insertNode(_el$3, _$createTextNode(`Note · `));\n _$setProp(_el$3, \"flexShrink\", 0);\n _$use(r => r.focus(), _el$5);\n _$setProp(_el$5, \"focused\", true);\n _$setProp(_el$5, \"onInput\", setNote);\n _$setProp(_el$5, \"onSubmit\", () => answer(true, note()));\n _$setProp(_el$5, \"flexGrow\", 1);\n _$effect(_p$ => {\n var _v$ = theme.text.feedback.warning,\n _v$2 = theme.background.raised.base,\n _v$3 = theme.background.raised.base,\n _v$4 = theme.text.base,\n _v$5 = theme.text.feedback.warning;\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$3, \"fg\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$5, \"backgroundColor\", _v$2, _p$.t));\n _v$3 !== _p$.a && (_p$.a = _$setProp(_el$5, \"focusedBackgroundColor\", _v$3, _p$.a));\n _v$4 !== _p$.o && (_p$.o = _$setProp(_el$5, \"textColor\", _v$4, _p$.o));\n _v$5 !== _p$.i && (_p$.i = _$setProp(_el$5, \"cursorColor\", _v$5, _p$.i));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined,\n i: undefined\n });\n return _el$2;\n }\n }), _el$6);\n _$insertNode(_el$6, _el$7);\n _$setProp(_el$6, \"height\", 1);\n _$setProp(_el$7, \"wrapMode\", \"none\");\n _$insert(_el$7, (() => {\n var _c$ = _$memo(() => items().length > 1);\n return () => _c$() ? `+${items().length - 1} more waiting` : item()?.kind === 'approval' ? 'a command needs your approval before it runs' : 'the workflow waits for your answer';\n })());\n _$effect(_$p => _$setProp(_el$7, \"fg\", theme.text.muted, _$p));\n return _el$;\n })();\n}",
|
|
54
|
+
"// Adapted from opencode (MIT) — https://github.com/anomalyco/opencode\nimport { type Accessor, createEffect, createSignal, onCleanup } from 'solid-js';\n\ntype AnimatableValue = number | readonly number[];\ntype AnimatableTarget = Record<string, AnimatableValue>;\ntype Ease = (progress: number) => number;\n\ninterface SpringTransition {\n type: 'spring';\n visualDuration: number;\n restDelta: number;\n restSpeed: number;\n}\ninterface TweenTransition {\n type: 'tween';\n duration: number;\n ease: Ease;\n}\nexport type Transition = SpringTransition | TweenTransition;\n\ninterface ValueState {\n scalar: boolean;\n value: number[];\n target: number[];\n velocity: number[];\n from: number[];\n}\n\ntype AnimationTask = (now: number) => boolean;\n\nconst tasks = new Set<AnimationTask>();\nlet timer: ReturnType<typeof setInterval> | undefined;\n\nconst smoothstep = (progress: number) => progress * progress * (3 - 2 * progress);\n\nexport function spring(options: {\n visualDuration: number;\n restDelta?: number;\n restSpeed?: number;\n}): Transition {\n return {\n type: 'spring',\n visualDuration: options.visualDuration,\n restDelta: options.restDelta ?? 0.002,\n restSpeed: options.restSpeed ?? 0.002,\n };\n}\n\nexport function tween(options: { duration: number; ease?: Ease }): Transition {\n return { type: 'tween', duration: options.duration, ease: options.ease ?? smoothstep };\n}\n\n/** A set of numbers that move towards their target on a shared 60 fps clock (or jump when disabled). */\nexport function createAnimatable<T extends AnimatableTarget>(\n initial: T,\n options: { transition: Transition; enabled?: Accessor<boolean> },\n): { value: Accessor<T>; animate(next: T): void; jump(next: T): void; stop(): void } {\n const enabled = options.enabled ?? (() => true);\n const state = new Map<string, ValueState>();\n const [value, setValue] = createSignal(clone(initial), { equals: false });\n let target = clone(initial);\n let started = performance.now();\n let previous = started;\n\n rebuild(initial);\n\n const step: AnimationTask = (now) => {\n if (!enabled()) {\n jump(target);\n return false;\n }\n const delta = Math.min(0.05, (now - previous) / 1_000);\n previous = now;\n const moving = options.transition.type === 'spring' ? advanceSpring(delta) : advanceTween(now);\n if (!moving) {\n jump(target);\n return false;\n }\n setValue(() => read());\n return true;\n };\n\n function animate(next: T) {\n if (sameTarget(next)) return;\n target = clone(next);\n if (!enabled() || !sameShape(next)) return jump(next);\n started = performance.now();\n previous = started;\n for (const [key, current] of state) {\n current.from = [...current.value];\n current.target = values(next[key] as AnimatableValue);\n }\n if (settled()) return jump(next);\n schedule(step);\n }\n\n function jump(next: T) {\n target = clone(next);\n unschedule(step);\n rebuild(next);\n setValue(() => clone(next));\n }\n\n function stop() {\n unschedule(step);\n }\n\n function rebuild(next: T) {\n state.clear();\n for (const [key, nextValue] of Object.entries(next)) {\n const v = values(nextValue);\n state.set(key, {\n scalar: typeof nextValue === 'number',\n value: v,\n target: [...v],\n velocity: v.map(() => 0),\n from: [...v],\n });\n }\n started = performance.now();\n previous = started;\n }\n\n function sameShape(next: T) {\n const entries = Object.entries(next);\n if (entries.length !== state.size) return false;\n return entries.every(([key, nextValue]) => {\n const current = state.get(key);\n if (!current || current.scalar !== (typeof nextValue === 'number')) return false;\n return current.value.length === values(nextValue).length;\n });\n }\n\n function sameTarget(next: T) {\n if (!sameShape(next)) return false;\n return Object.entries(next).every(([key, v]) =>\n values(v).every((part, index) => part === state.get(key)?.target[index]),\n );\n }\n\n function settled() {\n return [...state.values()].every(\n (current) =>\n current.value.every((v, index) => v === current.target[index]) &&\n current.velocity.every((v) => v === 0),\n );\n }\n\n function advanceSpring(delta: number) {\n const transition = options.transition;\n if (transition.type !== 'spring') return false;\n const frequency = (2 * Math.PI) / (Math.max(0.001, transition.visualDuration) * 1.2);\n let moving = false;\n for (const current of state.values()) {\n current.value.forEach((v, index) => {\n const t = current.target[index] ?? v;\n const velocity = current.velocity[index] ?? 0;\n const offset = v - t;\n const decay = Math.exp(-frequency * delta);\n const nextVelocity = velocity + frequency * offset;\n current.value[index] = t + (offset + nextVelocity * delta) * decay;\n current.velocity[index] = (velocity - frequency * nextVelocity * delta) * decay;\n moving ||=\n Math.abs((current.value[index] ?? 0) - t) > transition.restDelta ||\n Math.abs(current.velocity[index] ?? 0) > transition.restSpeed;\n });\n }\n return moving;\n }\n\n function advanceTween(now: number) {\n const transition = options.transition;\n if (transition.type !== 'tween') return false;\n const progress = Math.min(1, (now - started) / 1_000 / Math.max(0.001, transition.duration));\n const eased = transition.ease(progress);\n for (const current of state.values())\n current.value.forEach((_, index) => {\n const from = current.from[index] ?? 0;\n current.value[index] = from + ((current.target[index] ?? from) - from) * eased;\n current.velocity[index] = 0;\n });\n return progress < 1;\n }\n\n function read() {\n return Object.fromEntries(\n [...state].map(([key, current]) => [\n key,\n current.scalar ? (current.value[0] ?? 0) : [...current.value],\n ]),\n ) as T;\n }\n\n createEffect(() => {\n if (enabled()) return;\n jump(target);\n });\n onCleanup(stop);\n\n return { value, animate, jump, stop };\n}\n\nfunction values(value: AnimatableValue): number[] {\n return typeof value === 'number' ? [value] : [...value];\n}\n\nfunction clone<T extends AnimatableTarget>(target: T): T {\n return Object.fromEntries(\n Object.entries(target).map(([key, value]) => [\n key,\n typeof value === 'number' ? value : [...value],\n ]),\n ) as T;\n}\n\nfunction schedule(task: AnimationTask) {\n tasks.add(task);\n if (timer) return;\n timer = setInterval(tick, 16);\n}\n\nfunction unschedule(task: AnimationTask) {\n tasks.delete(task);\n if (tasks.size > 0 || !timer) return;\n clearInterval(timer);\n timer = undefined;\n}\n\nfunction tick() {\n const now = performance.now();\n for (const task of tasks) if (!task(now)) tasks.delete(task);\n if (tasks.size > 0 || !timer) return;\n clearInterval(timer);\n timer = undefined;\n}\n",
|
|
55
|
+
"import { spread as _$spread } from \"@opentui/solid\";\nimport { mergeProps as _$mergeProps } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\n// Adapted from opencode (MIT) — https://github.com/anomalyco/opencode\nimport { RGBA } from '@opentui/core';\nimport { extend } from '@opentui/solid';\nimport { splitProps } from 'solid-js';\nimport { useMotion } from './config.js';\nimport { MaskedTextRenderable } from './masked-text.js';\nimport { coast, intensityAt } from './pulse.js';\nconst DURATION = 1200;\nclass ShimmerTextRenderable extends MaskedTextRenderable {\n _shimmer = RGBA.defaultForeground();\n _enabled = true;\n elapsed = 0;\n constructor(ctx, options) {\n super(ctx, options);\n this.matrix[15] = 1;\n if (options.shimmer) this.shimmer = options.shimmer;\n if (options.enabled === false) this.enabled = false;\n this.live = this._enabled;\n }\n set shimmer(value) {\n if (value.equals(this._shimmer)) return;\n this._shimmer = value;\n this.matrix[3] = value.r;\n this.matrix[7] = value.g;\n this.matrix[11] = value.b;\n this.requestRender();\n }\n set enabled(value) {\n if (value === this._enabled) return;\n this._enabled = value;\n this.live = value;\n this.requestRender();\n }\n render(buffer, deltaTime) {\n if (!this._enabled) {\n super.render(buffer, deltaTime);\n return;\n }\n if (!this.visible || this.isDestroyed || !Number.isFinite(this.width) || this.width <= 0 || this.height <= 0) return;\n this.elapsed = (this.elapsed + deltaTime) % DURATION;\n this.renderMasked(buffer, 0, end => {\n const front = -4 + coast(this.elapsed / DURATION) * (end + 22);\n return column => intensityAt(column, front, 4, 18);\n });\n }\n}\nextend({\n shimmer_text: ShimmerTextRenderable\n});\n/** Text with a light sweep travelling across it (the \"working\" affordance). */\nexport function ShimmerText(props) {\n const motion = useMotion();\n const [local, text] = splitProps(props, ['shimmer']);\n return (() => {\n var _el$ = _$createElement(\"shimmer_text\");\n _$spread(_el$, _$mergeProps(text, {\n get shimmer() {\n return local.shimmer;\n },\n get enabled() {\n return motion();\n }\n }), false);\n return _el$;\n })();\n}",
|
|
56
|
+
"// Adapted from opencode (MIT) — https://github.com/anomalyco/opencode\nimport { OptimizedBuffer, RGBA, TargetChannel, TextRenderable } from '@opentui/core';\n\nconst TRANSPARENT = RGBA.fromValues(0, 0, 0, 0);\nconst CONTINUATION = 0xc0000000 | 0;\n\n/** A text renderable that paints itself through a per-column intensity mask (shimmer, fade-in). */\nexport class MaskedTextRenderable extends TextRenderable {\n protected readonly matrix = new Float32Array(16);\n private scratch: OptimizedBuffer | undefined;\n private mask = new Float32Array(0);\n\n protected renderMasked(\n buffer: OptimizedBuffer,\n initialStrength: number,\n shade: (width: number) => (column: number) => number,\n ): void {\n if (!this.scratch)\n this.scratch = OptimizedBuffer.create(this.width, this.height, this._ctx.widthMethod, {\n respectAlpha: true,\n });\n if (this.scratch.width !== this.width || this.scratch.height !== this.height)\n this.scratch.resize(this.width, this.height);\n\n this.scratch.clear(TRANSPARENT);\n this.scratch.drawTextBuffer(this.textBufferView, 0, 0);\n const characters = this.scratch.buffers.char;\n let end = 0;\n for (let row = 0; row < this.height; row++) {\n let column = this.width;\n while (\n column > 0 &&\n (characters[row * this.width + column - 1] === 32 ||\n characters[row * this.width + column - 1] === 0)\n )\n column--;\n end = Math.max(end, column);\n }\n const intensity = shade(end);\n if (this.mask.length !== this.width * this.height * 3)\n this.mask = new Float32Array(this.width * this.height * 3);\n let strength = initialStrength;\n for (let cell = 0; cell < characters.length; cell++) {\n const column = cell % this.width;\n // Wide glyph continuation cells retain the head cell's intensity.\n if (((characters[cell] ?? 0) & CONTINUATION) !== CONTINUATION) strength = intensity(column);\n this.mask[cell * 3] = column;\n this.mask[cell * 3 + 1] = Math.floor(cell / this.width);\n this.mask[cell * 3 + 2] = strength;\n }\n this.scratch.colorMatrix(this.matrix, this.mask, 1, TargetChannel.FG);\n buffer.drawFrameBuffer(this.screenX, this.screenY, this.scratch);\n this.markClean();\n this._ctx.addToHitGrid(this.screenX, this.screenY, this.width, this.height, this.num);\n }\n\n override destroy(): void {\n this.scratch?.destroy();\n this.scratch = undefined;\n super.destroy();\n }\n}\n",
|
|
57
|
+
"// Adapted from opencode (MIT) — https://github.com/anomalyco/opencode\nimport { MouseButton, type MouseEvent } from '@opentui/core';\nimport { createEffect, createSignal } from 'solid-js';\n\n/** Drag state for a pane edge: the size while dragging, and a commit when the pointer releases. */\nexport function createPaneResize(options: {\n value: () => number;\n defaultValue: () => number;\n clamp: (size: number) => number;\n fromMouse: (event: MouseEvent) => number;\n contains: (event: MouseEvent, size: number) => boolean;\n onCommit: (size: number) => void;\n}) {\n const [preferredSize, setPreferredSize] = createSignal(options.value());\n const [hovered, setHovered] = createSignal(false);\n const [resizing, setResizing] = createSignal(false);\n let requestedSize = options.value();\n createEffect(() => {\n if (resizing()) return;\n requestedSize = options.value();\n setPreferredSize(requestedSize);\n });\n const size = () => options.clamp(preferredSize());\n const commit = (value: number) => {\n const next = options.clamp(value);\n setPreferredSize(next);\n if (requestedSize === next) return;\n requestedSize = next;\n options.onCommit(next);\n };\n let moved = false;\n let lastBoundaryClick = 0;\n const finish = (event: MouseEvent) => {\n if (!resizing()) return;\n const next = moved ? options.fromMouse(event) : size();\n setResizing(false);\n lastBoundaryClick = moved ? 0 : Date.now();\n commit(next);\n setHovered(options.contains(event, options.clamp(next)));\n event.stopPropagation();\n };\n // Bind drag/release on the parent so resizing continues outside the handle.\n return {\n preferredSize,\n size,\n hovered,\n resizing,\n onMouseOver: () => setHovered(true),\n onMouseOut: () => setHovered(false),\n onMouseDown: (event: MouseEvent) => {\n if (event.button !== MouseButton.LEFT) return;\n const now = Date.now();\n if (now - lastBoundaryClick < 300) {\n lastBoundaryClick = 0;\n setResizing(false);\n setHovered(false);\n commit(options.defaultValue());\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n moved = false;\n setResizing(true);\n event.preventDefault();\n event.stopPropagation();\n },\n onMouseDrag: (event: MouseEvent) => {\n if (!resizing()) return;\n moved = true;\n lastBoundaryClick = 0;\n setPreferredSize(options.clamp(options.fromMouse(event)));\n event.stopPropagation();\n },\n onMouseDragEnd: finish,\n onMouseUp: finish,\n };\n}\n",
|
|
58
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { loadOrg } from '@wizardingcode/shibaox-schemas';\nimport { createMemo, createResource, For } from 'solid-js';\nimport { useClient } from '../../context/client.js';\nimport { useConfig } from '../../context/config.js';\nimport { useData } from '../../context/data.js';\nimport { money, tilde, tokens } from '../../model/format.js';\nimport { runUsage } from '../../model/stream.js';\nimport { useTheme } from '../../theme/context.js';\nconst orgs = new Map();\n/** The org of a run, loaded once per directory (undefined when it cannot be read). */\nfunction orgOf(root) {\n if (!root) return undefined;\n if (!orgs.has(root)) {\n try {\n orgs.set(root, loadOrg(root));\n } catch {\n orgs.set(root, undefined);\n }\n }\n return orgs.get(root);\n}\n\n/** The model a run's last task role is routed to by the org (before any runtime says which one ran). */\nexport function plannedModel(org, state) {\n if (!org || !state?.workflowSnapshot) return undefined;\n const tasks = Object.values(state.workflowSnapshot.nodes).filter(n => n.type === 'task');\n const roleName = tasks.at(-1)?.role;\n const role = roleName ? org.roles[roleName] : undefined;\n if (!role) return undefined;\n return org.models.roles?.[role.role]?.model ?? org.models.tiers?.[role.model_tier];\n}\n\n/** `12% ctx` / `24.0k tokens` from a usage record. */\nexport function contextLabel(u) {\n // only what the runtime measured as the context; call totals would overstate it\n const used = u?.contextTokens;\n if (used === undefined) return undefined;\n const window = u?.contextWindow;\n if (window) {\n const ratio = used / window;\n return {\n text: `${Math.round(ratio * 100)}% ctx`,\n ratio\n };\n }\n return {\n text: `${tokens(used)} tokens`\n };\n}\n\n/**\n * The line under the status and under the prompt of a run tab: how full the model's context\n * is, which model, the git branch, the project, the org and workflow, the cost so far and the\n * time. Everything comes from the latest run of the thread.\n */\nexport function ContextLine(props) {\n const theme = useTheme();\n const data = useData();\n const client = useClient();\n const config = useConfig();\n const latest = () => {\n const runs = data.threadOf(props.runId);\n return runs[runs.length - 1] ?? props.runId;\n };\n const state = () => data.state.states[latest()];\n const summary = () => data.state.runs.find(r => r.runId === latest());\n const project = () => state()?.project ?? state()?.workspace;\n const [profile] = createResource(() => ({\n project: project(),\n org: state()?.orgRoot\n }), k => k.project ? client.projectProfile(k.project, k.org).catch(() => undefined) : undefined);\n const org = createMemo(() => orgOf(state()?.orgRoot));\n const usage = createMemo(() => runUsage(data.timeline(latest())()));\n // the model at work; before any usage, the one chosen for the tab or recorded on the run\n const model = () => data.state.models[props.runId] ?? usage()?.model ?? state()?.model;\n const planned = () => plannedModel(org(), state());\n const ctx = () => contextLabel(usage());\n const branch = () => state()?.branch ?? profile()?.branch;\n const spent = () => data.threadOf(props.runId).reduce((n, id) => n + (data.state.states[id]?.spentUsd ?? 0), 0) || (summary()?.spentUsd ?? 0);\n const muted = theme.text.muted;\n const ctxColor = () => {\n const r = ctx()?.ratio ?? 0;\n return r >= 0.95 ? theme.text.feedback.error : r >= 0.8 ? theme.text.feedback.warning : theme.text.base;\n };\n const parts = () => {\n const out = [];\n const c = ctx();\n if (c) out.push((() => {\n var _el$ = _$createElement(\"span\");\n _$insert(_el$, () => c.text);\n _$effect(_$p => _$setProp(_el$, \"style\", {\n fg: ctxColor()\n }, _$p));\n return _el$;\n })());\n if (model()) out.push((() => {\n var _el$2 = _$createElement(\"span\");\n _$insert(_el$2, () => model() ?? '');\n return _el$2;\n })());else if (planned()) out.push((() => {\n var _el$3 = _$createElement(\"span\");\n _$setProp(_el$3, \"style\", {\n fg: muted\n });\n _$insert(_el$3, () => planned() ?? '');\n return _el$3;\n })());\n if (branch()) out.push((() => {\n var _el$4 = _$createElement(\"span\"),\n _el$5 = _$createElement(\"span\");\n _$insertNode(_el$4, _el$5);\n _$insertNode(_el$5, _$createTextNode(`⎇ `));\n _$insert(_el$4, branch, null);\n _$effect(_$p => _$setProp(_el$5, \"style\", {\n fg: theme.text.action.primary.selected\n }, _$p));\n return _el$4;\n })());\n if (project()) out.push((() => {\n var _el$7 = _$createElement(\"span\");\n _$insert(_el$7, () => tilde(project() ?? '', config.env.HOME));\n return _el$7;\n })());\n const organization = org()?.org.organization;\n if (organization) out.push((() => {\n var _el$8 = _$createElement(\"span\");\n _$setProp(_el$8, \"style\", {\n fg: muted\n });\n _$insert(_el$8, organization);\n return _el$8;\n })());\n const workflow = summary()?.workflow ?? state()?.workflow;\n if (workflow) out.push((() => {\n var _el$9 = _$createElement(\"span\");\n _$insert(_el$9, workflow);\n _$effect(_$p => _$setProp(_el$9, \"style\", {\n fg: theme.text.action.primary.selected\n }, _$p));\n return _el$9;\n })());\n out.push((() => {\n var _el$0 = _$createElement(\"span\");\n _$setProp(_el$0, \"style\", {\n fg: muted\n });\n _$insert(_el$0, () => money(spent()));\n return _el$0;\n })());\n if (props.elapsed) out.push((() => {\n var _el$1 = _$createElement(\"span\");\n _$setProp(_el$1, \"style\", {\n fg: muted\n });\n _$insert(_el$1, () => props.elapsed);\n return _el$1;\n })());\n return out;\n };\n return (() => {\n var _el$10 = _$createElement(\"text\");\n _$setProp(_el$10, \"wrapMode\", \"none\");\n _$setProp(_el$10, \"flexShrink\", 1);\n _$insert(_el$10, _$createComponent(For, {\n get each() {\n return parts();\n },\n children: (part, i) => [_$memo(() => _$memo(() => i() > 0)() ? (() => {\n var _el$11 = _$createElement(\"span\");\n _$insertNode(_el$11, _$createTextNode(` · `));\n _$setProp(_el$11, \"style\", {\n fg: muted\n });\n return _el$11;\n })() : ''), part]\n }));\n _$effect(_$p => _$setProp(_el$10, \"fg\", theme.text.base, _$p));\n return _el$10;\n })();\n}",
|
|
59
|
+
"import { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { createEffect, createMemo, createResource, on } from 'solid-js';\nimport { Prompt } from '../../component/prompt/index.js';\nimport { useClient } from '../../context/client.js';\nimport { useCommands } from '../../context/commands.js';\nimport { useData } from '../../context/data.js';\nimport { useKeys } from '../../context/keys.js';\nimport { DEFAULT_MODEL, isModelRef, modelCommand } from '../../model/prompt-commands.js';\nimport { useDialog } from '../../ui/dialog.js';\nimport { useToast } from '../../ui/toast.js';\nconst PLACEHOLDERS = ['Continue… \"Now add tests for it\"', 'Continue… \"/diff shows the changes\"'];\n\n/**\n * The prompt at the bottom of a finished run: the next request runs in the same tab. `/`\n * offers the commands of this screen (the same ones as the palette): `/diff`, `/cancel`,\n * `/help`, `/home`…\n */\nexport function ContinuePrompt(props) {\n const registry = useCommands();\n const dialog = useDialog();\n const client = useClient();\n const data = useData();\n const toast = useToast();\n const [models] = createResource(() => client.models().catch(() => []));\n let prompt;\n // a dialog opened from here (diff, help, runs) takes the keys; the prompt gets them back after\n createEffect(on(dialog.depth, d => {\n if (d === 0) setTimeout(() => prompt?.focus(), 0);\n }, {\n defer: true\n }));\n // the screen's own commands first, then the shell's\n const ORDER = ['diff', 'cancel', 'resume', 'sidebar', 'home', 'runs', 'help', 'close', 'quit'];\n const rank = id => {\n const i = ORDER.indexOf(id);\n return i < 0 ? ORDER.length : i;\n };\n const commands = createMemo(() => [modelCommand(() => models() ?? []), ...registry.commands().filter(c => c.when?.() ?? true).sort((a, b) => rank(a.id) - rank(b.id)).map(c => ({\n name: c.id,\n kind: 'action',\n hint: c.label\n }))]);\n // registered before the prompt mounts: its handler runs after the prompt's, so the arrows\n // scroll the conversation only while no suggestion list is showing\n useKeys('prompt', key => {\n const scroll = {\n up: -2,\n down: 2,\n pageup: -20,\n pagedown: 20\n };\n const lines = scroll[key.name];\n if (lines === undefined) return false;\n props.onScroll?.(lines);\n return true;\n });\n return _$createComponent(Prompt, {\n ref: r => {\n prompt = r;\n },\n bare: true,\n get disabled() {\n return dialog.depth() > 0;\n },\n placeholders: PLACEHOLDERS,\n get commands() {\n return commands();\n },\n get onSubmit() {\n return props.onSubmit;\n },\n onCommand: cmd => {\n if (cmd.command === 'model') {\n if (cmd.arg === DEFAULT_MODEL) {\n data.setModel(props.runId, undefined);\n toast.show({\n message: 'Next turns follow the org routing',\n variant: 'info'\n });\n } else if (!isModelRef(cmd.arg)) {\n toast.show({\n message: 'Model must look like provider/model (see /model for the list)',\n variant: 'error'\n });\n } else {\n data.setModel(props.runId, cmd.arg);\n toast.show({\n message: `Next turns run on ${cmd.arg}`,\n variant: 'info'\n });\n }\n return;\n }\n registry.commands().find(c => c.id === cmd.command)?.run();\n },\n get footer() {\n return props.footer;\n }\n });\n}",
|
|
60
|
+
"import { memo as _$memo } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { use as _$use } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { useTerminalDimensions } from '@opentui/solid';\nimport { createEffect, createMemo, createSignal, For, getOwner, Match, on, onCleanup, runWithOwner, Switch } from 'solid-js';\nimport { useData } from '../../context/data.js';\nimport { useKeys } from '../../context/keys.js';\nimport { isChatRun } from '../../model/stream.js';\nimport { useTheme } from '../../theme/context.js';\nimport { DecideCard, EarlierCard, ErrorCard, GateCard, HumanCard, NodeCard, SummaryCard } from './cards.js';\nimport { RequestBlock } from './request.js';\n\n/** How many cards the screen mounts per run (the model keeps up to 5000). */\nexport const RENDER_LIMIT = 300;\n\n/** Ids of the rows the cursor can land on: card headers and tool lines, in reading order. */\nexport function selectableRows(cards) {\n const rows = [];\n for (const c of cards) {\n if (c.kind === 'error' || c.kind === 'earlier') continue;\n if (c.kind === 'summary') {\n rows.push('card:summary');\n continue;\n }\n rows.push(`card:${c.nodeId}`);\n if (c.kind === 'node') for (const b of c.blocks) if (b.kind === 'tool') rows.push(`tool:${c.nodeId}:${b.id}`);\n }\n return rows;\n}\n/**\n * The conversation of a tab: every run of its thread (request block, then cards), in a\n * scrollbox that follows the newest content until the user scrolls up, with a cursor over card\n * headers and tool lines (enter expands or collapses).\n */\nexport function Timeline(props) {\n const data = useData();\n const theme = useTheme();\n const dimensions = useTerminalDimensions();\n const runs = createMemo(() => data.threadOf(props.runId));\n const owner = getOwner();\n const memos = new Map();\n // per-run memos live under the timeline itself, never under whichever computation asks first\n const cardsOf = run => {\n let m = memos.get(run);\n if (!m) {\n const all = data.timeline(run);\n // only the newest cards are mounted: every card costs native renderables (spinner,\n // fade-in, markdown); older ones fold into the \"earlier\" line\n const limited = () => {\n const list = all();\n if (list.length <= RENDER_LIMIT) return list;\n const dropped = list.slice(0, list.length - RENDER_LIMIT);\n const earlier = dropped.reduce((n, c) => n + (c.kind === 'earlier' ? c.count : 1), 0);\n return [{\n kind: 'earlier',\n key: 'earlier',\n count: earlier\n }, ...list.slice(-RENDER_LIMIT)];\n };\n m = runWithOwner(owner, () => createMemo(limited)) ?? limited;\n memos.set(run, m);\n }\n return m;\n };\n const rows = createMemo(() => runs().flatMap(run => selectableRows(cardsOf(run)()).map(id => `${run}|${id}`)));\n const version = createMemo(() => runs().reduce((n, run) => n + cardsOf(run)().length, 0));\n const [cursor, setCursor] = createSignal(0);\n const [expanded, setExpanded] = createSignal(new Set(), {\n equals: false\n });\n const [now, setNow] = createSignal(Date.now());\n // true until the user scrolls up: the view then follows the newest content\n const [following, setFollowing] = createSignal(true);\n const refs = new Map();\n let scroll;\n const tick = setInterval(() => setNow(Date.now()), 1000);\n onCleanup(() => clearInterval(tick));\n\n // OpenTUI's stickyScroll re-sticks after a programmatic scrollTo(0), so following is ours alone\n const follow = () => {\n if (!following() || !scroll) return;\n scroll.scrollTo(scroll.scrollHeight);\n };\n createEffect(on([version, dimensions], () => {\n setTimeout(follow, 0);\n setTimeout(follow, 120);\n }));\n props.api?.({\n scrollBy: n => scroll?.scrollBy(n)\n });\n const selectedRow = () => rows()[Math.min(cursor(), rows().length - 1)];\n /** The selected row id inside `run`, or undefined when the cursor is in another run. */\n const selectedIn = run => {\n const s = selectedRow();\n return props.focused && s?.startsWith(`${run}|`) ? s.slice(run.length + 1) : undefined;\n };\n const ensureVisible = () => {\n const id = selectedRow();\n const el = id ? refs.get(id) : undefined;\n if (!el || !scroll) return;\n const top = el.y - scroll.viewport.y + scroll.scrollTop;\n if (top < scroll.scrollTop) scroll.scrollTo(top);else if (top + el.height > scroll.scrollTop + scroll.viewport.height) scroll.scrollTo(top + el.height - scroll.viewport.height);\n };\n // only after a one-row move: right after scrollTo(0)/scrollTo(end) the row positions are stale\n const move = delta => {\n setCursor(c => c + delta);\n setTimeout(ensureVisible, 0);\n };\n const toggle = () => {\n const id = selectedRow();\n if (!id) return;\n setExpanded(s => {\n if (s.has(id)) s.delete(id);else s.add(id);\n return s;\n });\n props.onToggle?.(id);\n };\n /** The expanded set as the cards see it: ids of this run only. */\n const expandedIn = run => new Set([...expanded()].filter(id => id.startsWith(`${run}|`)).map(id => id.slice(run.length + 1)));\n useKeys('pane', key => {\n if (!props.focused || key.ctrl || key.meta) return false;\n const n = rows().length;\n switch (key.name) {\n // j/k walk the cursor; the arrows (and a wheel the terminal turns into arrows) scroll the view\n case 'j':\n if (cursor() < n - 1) move(1);else scroll?.scrollBy(1);\n return true;\n case 'k':\n setFollowing(false);\n if (cursor() > 0) move(-1);else scroll?.scrollBy(-1);\n return true;\n case 'down':\n scroll?.scrollBy(2);\n return true;\n case 'up':\n setFollowing(false);\n scroll?.scrollBy(-2);\n return true;\n case 'pagedown':\n scroll?.scrollBy(scroll.viewport.height);\n return true;\n case 'pageup':\n setFollowing(false);\n scroll?.scrollBy(-scroll.viewport.height);\n return true;\n case 'g':\n if (key.shift) {\n setFollowing(true);\n setCursor(Math.max(0, n - 1));\n follow();\n } else {\n setFollowing(false);\n setCursor(0);\n scroll?.scrollTo(0);\n }\n return true;\n case 'return':\n toggle();\n return true;\n default:\n return false;\n }\n });\n const rowRefFor = run => (id, el) => {\n const key = `${run}|${id}`;\n if (el) refs.set(key, el);else refs.delete(key);\n };\n return (() => {\n var _el$ = _$createElement(\"scrollbox\");\n _$use(r => {\n scroll = r;\n }, _el$);\n _$setProp(_el$, \"flexGrow\", 1);\n _$setProp(_el$, \"width\", \"100%\");\n _$setProp(_el$, \"horizontalScrollbarOptions\", {\n visible: false\n });\n _$setProp(_el$, \"contentOptions\", {\n flexDirection: 'column',\n paddingTop: 1,\n paddingLeft: 2,\n paddingRight: 2\n });\n _$insert(_el$, _$createComponent(For, {\n get each() {\n return runs();\n },\n children: run => {\n const cards = cardsOf(run);\n const rowRef = rowRefFor(run);\n const selected = createMemo(() => selectedIn(run));\n const expandedHere = createMemo(() => expandedIn(run));\n const nodes = createMemo(() => cards().filter(c => c.kind !== 'error' && c.kind !== 'earlier' && c.kind !== 'summary').length);\n return [_$createComponent(RequestBlock, {\n runId: run\n }), _$createComponent(For, {\n get each() {\n return cards();\n },\n children: card => _$createComponent(Switch, {\n get children() {\n return [_$createComponent(Match, {\n get when() {\n return card.kind === 'node' && card;\n },\n children: c => _$createComponent(NodeCard, {\n get card() {\n return c();\n },\n get now() {\n return now();\n },\n get selectedRow() {\n return selected();\n },\n get expanded() {\n return expandedHere();\n },\n rowRef: rowRef,\n get chat() {\n return isChatRun(data.state.states[run]);\n }\n })\n }), _$createComponent(Match, {\n get when() {\n return card.kind === 'gate' && card;\n },\n children: c => _$createComponent(GateCard, {\n get card() {\n return c();\n },\n get selected() {\n return selected() === `card:${c().nodeId}`;\n },\n rowRef: rowRef\n })\n }), _$createComponent(Match, {\n get when() {\n return card.kind === 'decide' && card;\n },\n children: c => _$createComponent(DecideCard, {\n get card() {\n return c();\n },\n get selected() {\n return selected() === `card:${c().nodeId}`;\n },\n rowRef: rowRef\n })\n }), _$createComponent(Match, {\n get when() {\n return card.kind === 'human' && card;\n },\n children: c => _$createComponent(HumanCard, {\n get card() {\n return c();\n },\n get selected() {\n return selected() === `card:${c().nodeId}`;\n },\n rowRef: rowRef\n })\n }), _$createComponent(Match, {\n get when() {\n return card.kind === 'error' && card;\n },\n children: c => _$createComponent(ErrorCard, {\n get card() {\n return c();\n }\n })\n }), _$createComponent(Match, {\n get when() {\n return card.kind === 'earlier' && card;\n },\n children: c => _$createComponent(EarlierCard, {\n get card() {\n return c();\n }\n })\n }), _$createComponent(Match, {\n get when() {\n return card.kind === 'summary' && card;\n },\n children: c => _$createComponent(SummaryCard, {\n get card() {\n return c();\n },\n get nodes() {\n return nodes();\n },\n get selected() {\n return selected() === 'card:summary';\n },\n rowRef: rowRef\n })\n })];\n }\n })\n })];\n }\n }));\n _$effect(_$p => _$setProp(_el$, \"verticalScrollbarOptions\", {\n visible: true,\n trackOptions: {\n backgroundColor: theme.background.base,\n foregroundColor: theme.scrollbar.base\n }\n }, _$p));\n return _el$;\n })();\n}",
|
|
61
|
+
"import { memo as _$memo } from \"@opentui/solid\";\nimport { createTextNode as _$createTextNode } from \"@opentui/solid\";\nimport { insertNode as _$insertNode } from \"@opentui/solid\";\nimport { createComponent as _$createComponent } from \"@opentui/solid\";\nimport { effect as _$effect } from \"@opentui/solid\";\nimport { insert as _$insert } from \"@opentui/solid\";\nimport { setProp as _$setProp } from \"@opentui/solid\";\nimport { use as _$use } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\nimport { TextAttributes } from '@opentui/core';\nimport { For, Show } from 'solid-js';\nimport { duration, money } from '../../model/format.js';\nimport { nodeLook, statusOf } from '../../model/status.js';\nimport { summarizeInput } from '../../model/stream.js';\nimport { FadeInText } from '../../motion/fade-in-text.js';\nimport { WORK_SPINNERS } from '../../motion/one-cell-motion.js';\nimport { OneCellSpinner } from '../../motion/spinner.js';\nimport { useSyntax, useTheme } from '../../theme/context.js';\nconst OUTPUT_LIMIT = 4096;\n/** One selectable row: highlighted when selected. */\nexport function Row(props) {\n const theme = useTheme();\n return (() => {\n var _el$ = _$createElement(\"box\");\n var _ref$ = props.ref;\n typeof _ref$ === \"function\" ? _$use(_ref$, _el$) : props.ref = _el$;\n _$setProp(_el$, \"flexDirection\", \"row\");\n _$setProp(_el$, \"width\", \"100%\");\n _$setProp(_el$, \"flexShrink\", 0);\n _$insert(_el$, () => props.children);\n _$effect(_$p => _$setProp(_el$, \"backgroundColor\", props.selected ? theme.background.action.primary.selected : undefined, _$p));\n return _el$;\n })();\n}\n\n/** A raised surface: the unit of the conversation. */\nfunction Surface(props) {\n const theme = useTheme();\n return (() => {\n var _el$2 = _$createElement(\"box\");\n _$setProp(_el$2, \"flexDirection\", \"column\");\n _$setProp(_el$2, \"width\", \"100%\");\n _$setProp(_el$2, \"flexShrink\", 0);\n _$setProp(_el$2, \"marginBottom\", 1);\n _$setProp(_el$2, \"paddingLeft\", 2);\n _$setProp(_el$2, \"paddingRight\", 2);\n _$setProp(_el$2, \"paddingTop\", 1);\n _$setProp(_el$2, \"paddingBottom\", 1);\n _$insert(_el$2, () => props.children);\n _$effect(_$p => _$setProp(_el$2, \"backgroundColor\", props.tone ? theme.background.feedback[props.tone] : theme.background.raised.base, _$p));\n return _el$2;\n })();\n}\nfunction feedbackColor(theme, f) {\n return f === 'muted' ? theme.text.muted : theme.text.feedback[f];\n}\nfunction StatusSymbol(props) {\n const theme = useTheme();\n const look = () => nodeLook(props.status);\n return _$createComponent(Show, {\n get when() {\n return props.status === 'running';\n },\n get fallback() {\n return (() => {\n var _el$5 = _$createElement(\"text\");\n _$insert(_el$5, () => `${look().symbol} `);\n _$effect(_$p => _$setProp(_el$5, \"fg\", feedbackColor(theme, look().feedback), _$p));\n return _el$5;\n })();\n },\n get children() {\n return [_$createComponent(OneCellSpinner, {\n get animation() {\n return WORK_SPINNERS['block-soft-sweep'];\n },\n get color() {\n return theme.text.feedback.running;\n }\n }), (() => {\n var _el$3 = _$createElement(\"text\");\n _$insertNode(_el$3, _$createTextNode(` `));\n return _el$3;\n })()];\n }\n });\n}\nfunction elapsed(card, now) {\n if (!card.startedAt) return undefined;\n const from = Date.parse(card.startedAt);\n const to = card.endedAt ? Date.parse(card.endedAt) : now;\n if (!Number.isFinite(from) || !Number.isFinite(to)) return undefined;\n return duration(Math.max(0, to - from));\n}\n\n/** Header row of a card: symbol, bold title, and muted details pushed to the right. */\nfunction Header(props) {\n const theme = useTheme();\n return _$createComponent(Row, {\n get selected() {\n return props.selected;\n },\n ref(r$) {\n var _ref$2 = props.ref;\n typeof _ref$2 === \"function\" ? _ref$2(r$) : props.ref = r$;\n },\n get children() {\n return [_$createComponent(StatusSymbol, {\n get status() {\n return props.status;\n }\n }), _$createComponent(FadeInText, {\n get fg() {\n return theme.text.base;\n },\n get attributes() {\n return TextAttributes.BOLD;\n },\n wrapMode: \"none\",\n flexShrink: 1,\n get children() {\n return props.title;\n }\n }), (() => {\n var _el$6 = _$createElement(\"box\");\n _$setProp(_el$6, \"flexGrow\", 1);\n _$setProp(_el$6, \"flexShrink\", 0);\n _$setProp(_el$6, \"width\", 2);\n return _el$6;\n })(), (() => {\n var _el$7 = _$createElement(\"text\");\n _$setProp(_el$7, \"wrapMode\", \"none\");\n _$setProp(_el$7, \"flexShrink\", 0);\n _$insert(_el$7, () => props.details ?? '');\n _$effect(_$p => _$setProp(_el$7, \"fg\", theme.text.muted, _$p));\n return _el$7;\n })()];\n }\n });\n}\n\n/** A task or code node: header, then the agent's text, tool calls and touched files. */\nexport function NodeCard(props) {\n const theme = useTheme();\n const syntax = useSyntax();\n const headerId = () => `card:${props.card.nodeId}`;\n const title = () => {\n const c = props.card;\n const parts = [c.nodeId];\n if (c.role) parts.push(c.role);\n if (c.runtime) parts.push(c.runtime);\n return parts.join(' · ');\n };\n const details = () => {\n const c = props.card;\n const parts = [`${c.tools} tool${c.tools === 1 ? '' : 's'}`];\n if (c.costUsd !== undefined) parts.push(money(c.costUsd));\n const e = elapsed(c, props.now);\n if (e) parts.push(e);\n return parts.join(' · ');\n };\n const collapsed = () => props.expanded.has(headerId());\n const finished = () => props.card.status !== 'running' && props.card.status !== 'pending' && props.card.endedAt;\n const blocks = () => _$createComponent(For, {\n get each() {\n return props.card.blocks;\n },\n children: block => _$createComponent(BlockView, {\n block: block,\n get nodeId() {\n return props.card.nodeId;\n },\n get running() {\n return props.card.status === 'running';\n },\n get selectedRow() {\n return props.selectedRow;\n },\n get expanded() {\n return props.expanded;\n },\n get rowRef() {\n return props.rowRef;\n },\n syntax: syntax\n })\n });\n if (props.chat) return (() => {\n var _el$8 = _$createElement(\"box\");\n _$setProp(_el$8, \"flexDirection\", \"column\");\n _$setProp(_el$8, \"width\", \"100%\");\n _$setProp(_el$8, \"flexShrink\", 0);\n _$setProp(_el$8, \"paddingLeft\", 1);\n _$setProp(_el$8, \"marginBottom\", 1);\n _$insert(_el$8, blocks);\n return _el$8;\n })();\n return _$createComponent(Surface, {\n get children() {\n return [_$createComponent(Header, {\n get status() {\n return props.card.status;\n },\n get title() {\n return title();\n },\n get details() {\n return details();\n },\n get selected() {\n return props.selectedRow === headerId();\n },\n ref: el => props.rowRef(headerId(), el)\n }), _$createComponent(Show, {\n get when() {\n return !collapsed();\n },\n get children() {\n var _el$9 = _$createElement(\"box\");\n _$setProp(_el$9, \"flexDirection\", \"column\");\n _$setProp(_el$9, \"width\", \"100%\");\n _$insert(_el$9, blocks);\n _$effect(_$p => _$setProp(_el$9, \"paddingTop\", props.card.blocks.length > 0 ? 1 : 0, _$p));\n return _el$9;\n }\n }), _$createComponent(Show, {\n get when() {\n return finished();\n },\n get children() {\n var _el$0 = _$createElement(\"box\"),\n _el$1 = _$createElement(\"text\"),\n _el$10 = _$createElement(\"span\");\n _$insertNode(_el$0, _el$1);\n _$setProp(_el$0, \"height\", 1);\n _$setProp(_el$0, \"flexShrink\", 0);\n _$setProp(_el$0, \"marginTop\", 1);\n _$insertNode(_el$1, _el$10);\n _$setProp(_el$1, \"wrapMode\", \"none\");\n _$insertNode(_el$10, _$createTextNode(`■ `));\n _$insert(_el$1, () => `${props.card.status === 'completed' ? 'done' : props.card.status}${elapsed(props.card, props.now) ? ` · ${elapsed(props.card, props.now)}` : ''}`, null);\n _$effect(_p$ => {\n var _v$ = theme.text.muted,\n _v$2 = {\n fg: theme.text.action.primary.selected\n };\n _v$ !== _p$.e && (_p$.e = _$setProp(_el$1, \"fg\", _v$, _p$.e));\n _v$2 !== _p$.t && (_p$.t = _$setProp(_el$10, \"style\", _v$2, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$0;\n }\n })];\n }\n });\n}\nfunction BlockView(props) {\n const theme = useTheme();\n const b = props.block;\n // no wrapping box and no margin: either one around a tall markdown block breaks the scroll\n // layout in OpenTUI 0.5.12 (the block vanishes)\n if (b.kind === 'text') return (() => {\n var _el$12 = _$createElement(\"markdown\");\n _$setProp(_el$12, \"conceal\", true);\n _$effect(_p$ => {\n var _v$3 = b.text,\n _v$4 = props.syntax,\n _v$5 = props.running;\n _v$3 !== _p$.e && (_p$.e = _$setProp(_el$12, \"content\", _v$3, _p$.e));\n _v$4 !== _p$.t && (_p$.t = _$setProp(_el$12, \"syntaxStyle\", _v$4, _p$.t));\n _v$5 !== _p$.a && (_p$.a = _$setProp(_el$12, \"streaming\", _v$5, _p$.a));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined\n });\n return _el$12;\n })();\n if (b.kind === 'file') return (() => {\n var _el$13 = _$createElement(\"box\"),\n _el$14 = _$createElement(\"text\");\n _$insertNode(_el$13, _el$14);\n _$setProp(_el$13, \"height\", 1);\n _$setProp(_el$13, \"flexShrink\", 0);\n _$setProp(_el$14, \"wrapMode\", \"none\");\n _$insert(_el$14, () => `± ${b.path}`);\n _$effect(_$p => _$setProp(_el$14, \"fg\", theme.text.muted, _$p));\n return _el$13;\n })();\n const id = `tool:${props.nodeId}:${b.id}`;\n return _$createComponent(ToolLine, {\n block: b,\n get selected() {\n return props.selectedRow === id;\n },\n get expanded() {\n return props.expanded.has(id);\n },\n ref: el => props.rowRef(id, el),\n get syntax() {\n return props.syntax;\n }\n });\n}\n\n/** A unified patch for an edit tool call (Claude Code's `Edit`/`Write` inputs), or undefined. */\nexport function editPatch(name, input) {\n if (!input || typeof input !== 'object') return undefined;\n const o = input;\n const path = typeof o.file_path === 'string' ? o.file_path : typeof o.path === 'string' ? o.path : undefined;\n if (!path) return undefined;\n const before = typeof o.old_string === 'string' ? o.old_string : /write/i.test(name) ? '' : undefined;\n const after = typeof o.new_string === 'string' ? o.new_string : typeof o.content === 'string' ? o.content : undefined;\n if (before === undefined || after === undefined) return undefined;\n const a = before ? before.split('\\n') : [];\n const b = after ? after.split('\\n') : [];\n const body = [...a.map(l => `-${l}`), ...b.map(l => `+${l}`)].join('\\n');\n return {\n path,\n patch: `diff --git a/${path} b/${path}\\n--- a/${path}\\n+++ b/${path}\\n@@ -1,${a.length} +1,${b.length} @@\\n${body}\\n`\n };\n}\n\n/** `⊙ Read src/a.ts` with the duration on the right; expanded, the input and output follow. */\nexport function ToolLine(props) {\n const theme = useTheme();\n const edit = () => editPatch(props.block.name, props.block.input);\n const label = () => {\n const b = props.block;\n const prefix = b.parentId ? '├ ' : '⊙ ';\n const e = edit();\n const counts = e ? ` (+${e.patch.split('\\n').filter(l => l.startsWith('+') && !l.startsWith('+++')).length} −${e.patch.split('\\n').filter(l => l.startsWith('-') && !l.startsWith('---')).length})` : '';\n return `${prefix}${b.name} ${b.summary}${counts}`.trimEnd();\n };\n const right = () => {\n const b = props.block;\n if (b.status === 'running') return 'running…';\n if (b.status === 'error') return 'error';\n return b.ms !== undefined ? `${b.ms} ms` : '';\n };\n const output = () => {\n const o = props.block.output;\n const s = typeof o === 'string' ? o : JSON.stringify(o, null, 2) ?? '';\n return s.length > OUTPUT_LIMIT ? `${s.slice(0, OUTPUT_LIMIT)}\\n…` : s;\n };\n const color = () => props.block.status === 'error' ? theme.text.feedback.error : theme.text.muted;\n return (() => {\n var _el$15 = _$createElement(\"box\");\n _$setProp(_el$15, \"flexDirection\", \"column\");\n _$setProp(_el$15, \"width\", \"100%\");\n _$setProp(_el$15, \"flexShrink\", 0);\n _$insert(_el$15, _$createComponent(Row, {\n get selected() {\n return props.selected;\n },\n ref(r$) {\n var _ref$3 = props.ref;\n typeof _ref$3 === \"function\" ? _ref$3(r$) : props.ref = r$;\n },\n get children() {\n return [(() => {\n var _el$16 = _$createElement(\"text\");\n _$setProp(_el$16, \"wrapMode\", \"none\");\n _$setProp(_el$16, \"flexShrink\", 1);\n _$insert(_el$16, label);\n _$effect(_$p => _$setProp(_el$16, \"fg\", color(), _$p));\n return _el$16;\n })(), (() => {\n var _el$17 = _$createElement(\"box\");\n _$setProp(_el$17, \"flexGrow\", 1);\n _$setProp(_el$17, \"flexShrink\", 0);\n _$setProp(_el$17, \"width\", 2);\n return _el$17;\n })(), (() => {\n var _el$18 = _$createElement(\"text\");\n _$setProp(_el$18, \"wrapMode\", \"none\");\n _$setProp(_el$18, \"flexShrink\", 0);\n _$insert(_el$18, right);\n _$effect(_$p => _$setProp(_el$18, \"fg\", theme.text.muted, _$p));\n return _el$18;\n })()];\n }\n }), null);\n _$insert(_el$15, _$createComponent(Show, {\n get when() {\n return props.expanded;\n },\n get children() {\n var _el$19 = _$createElement(\"box\");\n _$setProp(_el$19, \"flexDirection\", \"column\");\n _$setProp(_el$19, \"width\", \"100%\");\n _$setProp(_el$19, \"paddingLeft\", 2);\n _$setProp(_el$19, \"paddingTop\", 1);\n _$setProp(_el$19, \"paddingBottom\", 1);\n _$insert(_el$19, _$createComponent(Show, {\n get when() {\n return edit();\n },\n get fallback() {\n return (() => {\n var _el$21 = _$createElement(\"text\");\n _$setProp(_el$21, \"wrapMode\", \"none\");\n _$insert(_el$21, () => `input ${summarizeInput(props.block.input, 200)}`);\n _$effect(_$p => _$setProp(_el$21, \"fg\", theme.text.muted, _$p));\n return _el$21;\n })();\n },\n children: e => (() => {\n var _el$22 = _$createElement(\"diff\");\n _$setProp(_el$22, \"view\", \"unified\");\n _$setProp(_el$22, \"filetype\", \"text\");\n _$effect(_p$ => {\n var _v$8 = e().patch,\n _v$9 = props.syntax,\n _v$0 = theme.diff.addedBg,\n _v$1 = theme.diff.removedBg;\n _v$8 !== _p$.e && (_p$.e = _$setProp(_el$22, \"diff\", _v$8, _p$.e));\n _v$9 !== _p$.t && (_p$.t = _$setProp(_el$22, \"syntaxStyle\", _v$9, _p$.t));\n _v$0 !== _p$.a && (_p$.a = _$setProp(_el$22, \"addedBg\", _v$0, _p$.a));\n _v$1 !== _p$.o && (_p$.o = _$setProp(_el$22, \"removedBg\", _v$1, _p$.o));\n return _p$;\n }, {\n e: undefined,\n t: undefined,\n a: undefined,\n o: undefined\n });\n return _el$22;\n })()\n }), null);\n _$insert(_el$19, _$createComponent(Show, {\n get when() {\n return _$memo(() => props.block.output !== undefined)() && !edit();\n },\n get children() {\n var _el$20 = _$createElement(\"code\");\n _$setProp(_el$20, \"filetype\", \"text\");\n _$effect(_p$ => {\n var _v$6 = output(),\n _v$7 = props.syntax;\n _v$6 !== _p$.e && (_p$.e = _$setProp(_el$20, \"content\", _v$6, _p$.e));\n _v$7 !== _p$.t && (_p$.t = _$setProp(_el$20, \"syntaxStyle\", _v$7, _p$.t));\n return _p$;\n }, {\n e: undefined,\n t: undefined\n });\n return _el$20;\n }\n }), null);\n _$effect(_$p => _$setProp(_el$19, \"backgroundColor\", theme.background.raised.high, _$p));\n return _el$19;\n }\n }), null);\n return _el$15;\n })();\n}\nexport function GateCard(props) {\n const theme = useTheme();\n const id = () => `card:${props.card.nodeId}`;\n return _$createComponent(Surface, {\n get children() {\n return [_$createComponent(Header, {\n get status() {\n return props.card.status;\n },\n get title() {\n return `${props.card.nodeId} · gate`;\n },\n get details() {\n return _$memo(() => props.card.attempts > 1)() ? `attempt ${props.card.attempts}` : '';\n },\n get selected() {\n return props.selected;\n },\n ref: el => props.rowRef(id(), el)\n }), (() => {\n var _el$23 = _$createElement(\"box\");\n _$setProp(_el$23, \"flexDirection\", \"column\");\n _$insert(_el$23, _$createComponent(For, {\n get each() {\n return props.card.checks;\n },\n children: c => (() => {\n var _el$26 = _$createElement(\"box\"),\n _el$27 = _$createElement(\"text\");\n _$insertNode(_el$26, _el$27);\n _$setProp(_el$26, \"height\", 1);\n _$setProp(_el$26, \"flexShrink\", 0);\n _$setProp(_el$27, \"wrapMode\", \"none\");\n _$insert(_el$27, () => `[${c.passed ? '✓' : '✗'}] ${c.name}${c.ms !== undefined ? ` · ${c.ms} ms` : ''}`);\n _$effect(_$p => _$setProp(_el$27, \"fg\", c.passed ? theme.text.feedback.success : theme.text.feedback.error, _$p));\n return _el$26;\n })()\n }), null);\n _$insert(_el$23, _$createComponent(Show, {\n get when() {\n return props.card.report;\n },\n get children() {\n var _el$24 = _$createElement(\"box\"),\n _el$25 = _$createElement(\"text\");\n _$insertNode(_el$24, _el$25);\n _$setProp(_el$24, \"paddingTop\", 1);\n _$setProp(_el$25, \"wrapMode\", \"word\");\n _$insert(_el$25, () => props.card.report ?? '');\n _$effect(_$p => _$setProp(_el$25, \"fg\", theme.text.muted, _$p));\n return _el$24;\n }\n }), null);\n _$effect(_$p => _$setProp(_el$23, \"paddingTop\", props.card.checks.length > 0 ? 1 : 0, _$p));\n return _el$23;\n })()];\n }\n });\n}\nexport function DecideCard(props) {\n const id = () => `card:${props.card.nodeId}`;\n const title = () => {\n const c = props.card;\n if (!c.choice) return `${c.nodeId} · deciding…`;\n return `${c.nodeId} → ${c.choice}${c.confidence !== undefined ? ` (${c.confidence.toFixed(2)})` : ''}`;\n };\n return _$createComponent(Surface, {\n get children() {\n return _$createComponent(Header, {\n get status() {\n return props.card.status;\n },\n get title() {\n return title();\n },\n get selected() {\n return props.selected;\n },\n ref: el => props.rowRef(id(), el)\n });\n }\n });\n}\nexport function HumanCard(props) {\n const theme = useTheme();\n const id = () => `card:${props.card.nodeId}`;\n const answer = () => {\n const a = props.card.answer;\n if (!a) return props.card.pending ? 'waiting for you' : 'waiting';\n return `${a.approved ? 'approved' : 'denied'}${a.note ? ` · ${a.note}` : ''}`;\n };\n return _$createComponent(Surface, {\n get tone() {\n return props.card.pending ? 'warning' : undefined;\n },\n get children() {\n return [_$createComponent(Row, {\n get selected() {\n return props.selected;\n },\n ref: el => props.rowRef(id(), el),\n get children() {\n return [(() => {\n var _el$28 = _$createElement(\"text\");\n _$insert(_el$28, () => props.card.pending ? '▲ ' : '✓ ');\n _$effect(_$p => _$setProp(_el$28, \"fg\", props.card.pending ? theme.text.feedback.warning : theme.text.feedback.success, _$p));\n return _el$28;\n })(), _$createComponent(FadeInText, {\n get fg() {\n return theme.text.base;\n },\n get attributes() {\n return TextAttributes.BOLD;\n },\n wrapMode: \"none\",\n get children() {\n return `${props.card.nodeId} · ${props.card.prompt}`;\n }\n })];\n }\n }), (() => {\n var _el$29 = _$createElement(\"box\"),\n _el$30 = _$createElement(\"text\");\n _$insertNode(_el$29, _el$30);\n _$setProp(_el$29, \"height\", 1);\n _$setProp(_el$29, \"flexShrink\", 0);\n _$setProp(_el$30, \"wrapMode\", \"none\");\n _$insert(_el$30, answer);\n _$effect(_$p => _$setProp(_el$30, \"fg\", props.card.answer?.approved === false ? theme.text.feedback.error : theme.text.muted, _$p));\n return _el$29;\n })()];\n }\n });\n}\nexport function ErrorCard(props) {\n const theme = useTheme();\n return _$createComponent(Surface, {\n tone: \"error\",\n get children() {\n var _el$31 = _$createElement(\"text\");\n _$setProp(_el$31, \"wrapMode\", \"word\");\n _$insert(_el$31, () => `✗ ${props.card.nodeId ? `${props.card.nodeId}: ` : ''}${props.card.message}`);\n _$effect(_$p => _$setProp(_el$31, \"fg\", theme.text.feedback.error, _$p));\n return _el$31;\n }\n });\n}\nexport function EarlierCard(props) {\n const theme = useTheme();\n return (() => {\n var _el$32 = _$createElement(\"box\"),\n _el$33 = _$createElement(\"text\");\n _$insertNode(_el$32, _el$33);\n _$setProp(_el$32, \"height\", 1);\n _$setProp(_el$32, \"flexShrink\", 0);\n _$setProp(_el$32, \"marginBottom\", 1);\n _$insert(_el$33, () => `… ${props.card.count} earlier`);\n _$effect(_$p => _$setProp(_el$33, \"fg\", theme.text.muted, _$p));\n return _el$32;\n })();\n}\n\n/** The closing line of a finished run: `✓ Done · 5 nodes · $0.0020 · 3m 02s · 4 files changed · branch`. */\nexport function SummaryCard(props) {\n const theme = useTheme();\n const look = () => statusOf({\n status: props.card.status\n });\n const line = () => {\n const c = props.card;\n const parts = [`${look().symbol} ${look().word}`, `${props.nodes} node${props.nodes === 1 ? '' : 's'}`, money(c.costUsd)];\n if (c.durationMs !== undefined) parts.push(duration(c.durationMs));\n parts.push(`${c.files.length} file${c.files.length === 1 ? '' : 's'} changed`);\n if (c.branch) parts.push(c.branch);\n return parts.join(' · ');\n };\n return (() => {\n var _el$34 = _$createElement(\"box\");\n _$setProp(_el$34, \"flexDirection\", \"column\");\n _$setProp(_el$34, \"width\", \"100%\");\n _$setProp(_el$34, \"flexShrink\", 0);\n _$setProp(_el$34, \"marginBottom\", 1);\n _$insert(_el$34, _$createComponent(Row, {\n get selected() {\n return props.selected;\n },\n ref: el => props.rowRef('card:summary', el),\n get children() {\n return _$createComponent(FadeInText, {\n get fg() {\n return feedbackColor(theme, look().feedback);\n },\n get attributes() {\n return TextAttributes.BOLD;\n },\n wrapMode: \"none\",\n get children() {\n return line();\n }\n });\n }\n }), null);\n _$insert(_el$34, _$createComponent(Show, {\n get when() {\n return props.card.error;\n },\n get children() {\n var _el$35 = _$createElement(\"text\");\n _$setProp(_el$35, \"wrapMode\", \"word\");\n _$insert(_el$35, () => props.card.error ?? '');\n _$effect(_$p => _$setProp(_el$35, \"fg\", theme.text.feedback.error, _$p));\n return _el$35;\n }\n }), null);\n return _el$34;\n })();\n}",
|
|
62
|
+
"import { spread as _$spread } from \"@opentui/solid\";\nimport { mergeProps as _$mergeProps } from \"@opentui/solid\";\nimport { memo as _$memo } from \"@opentui/solid\";\nimport { createElement as _$createElement } from \"@opentui/solid\";\n// Adapted from opencode (MIT) — https://github.com/anomalyco/opencode\nimport { RGBA } from '@opentui/core';\nimport { extend } from '@opentui/solid';\nimport { splitProps } from 'solid-js';\nimport { useMotion } from './config.js';\nimport { MaskedTextRenderable } from './masked-text.js';\nimport { coast, smootherstep } from './pulse.js';\nconst DURATION = 200;\nconst FEATHER = 8;\nconst clamp = value => Math.max(0, Math.min(1, value));\nclass FadeInTextRenderable extends MaskedTextRenderable {\n _backdrop = RGBA.defaultBackground();\n _enabled = true;\n elapsed = 0;\n constructor(ctx, options) {\n super(ctx, options);\n this.matrix[15] = 1;\n this.updateBackdrop();\n if (options.backdrop) this.backdrop = options.backdrop;\n if (options.enabled === false) this.enabled = false;\n this.live = this._enabled;\n }\n set backdrop(value) {\n if (value.equals(this._backdrop)) return;\n this._backdrop = value;\n this.updateBackdrop();\n this.requestRender();\n }\n set enabled(value) {\n if (value === this._enabled) return;\n this._enabled = value;\n this.live = value && this.elapsed < DURATION;\n this.requestRender();\n }\n updateBackdrop() {\n this.matrix[3] = this._backdrop.r;\n this.matrix[7] = this._backdrop.g;\n this.matrix[11] = this._backdrop.b;\n }\n render(buffer, deltaTime) {\n if (!this._enabled || this.elapsed >= DURATION) {\n super.render(buffer, deltaTime);\n return;\n }\n if (!this.visible || this.isDestroyed || !Number.isFinite(this.width) || this.width <= 0 || this.height <= 0) return;\n this.elapsed = Math.min(DURATION, this.elapsed + deltaTime);\n this.renderMasked(buffer, 1, end => {\n const progress = this.elapsed / DURATION;\n const front = -FEATHER + coast(progress) * (end + FEATHER * 2);\n return column => 1 - smootherstep(clamp((front - column) / FEATHER));\n });\n if (this.elapsed >= DURATION) this.live = false;\n }\n}\nextend({\n fade_in_text: FadeInTextRenderable\n});\n/** Text that sweeps in from the left over 200 ms when it first appears. */\nexport function FadeInText(props) {\n const motion = useMotion();\n const [local, text] = splitProps(props, ['animate', 'backdrop']);\n return (() => {\n var _el$ = _$createElement(\"fade_in_text\");\n _$spread(_el$, _$mergeProps(text, {\n get backdrop() {\n return local.backdrop;\n },\n get enabled() {\n return _$memo(() => !!(local.animate ?? true))() && motion();\n }\n }), false);\n return _el$;\n })();\n}"
|
|
63
|
+
],
|
|
64
|
+
"mappings": "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",
|
|
65
|
+
"debugId": "ED4BCCBD0CE7087B64756E2164756E21",
|
|
66
|
+
"names": []
|
|
67
|
+
}
|