s-app-scoder-agent 0.8.7 → 0.8.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/tui/app.js CHANGED
@@ -598,7 +598,7 @@ export function TuiApp({ config, initialTask }) {
598
598
  // flexShrink={0}: pinned chrome must never be squeezed when the chat
599
599
  // content overflows — Ink defaults every box to flexShrink:1, which
600
600
  // shrank the input bar to zero rows once the log outgrew the terminal.
601
- _jsxs(Box, { flexDirection: "column", height: rows || 24, flexShrink: 0, children: [_jsx(BuildRail, { state: state, config: config }), _jsxs(Box, { flexDirection: "row", flexGrow: 1, flexShrink: 1, minHeight: 0, children: [_jsx(Box, { ref: viewportRef, flexDirection: "column", flexGrow: 1, flexShrink: 1, minHeight: 0, overflow: "hidden", contentOffsetY: scrollTop, children: _jsxs(Box, { ref: contentRef, flexDirection: "column", paddingX: 1, flexShrink: 0, children: [state.items.length === 0 ? (_jsxs(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", flexGrow: 1, children: [_jsx(Text, { bold: true, color: theme.brand, children: "\u2691 SCoder" }), _jsx(Text, { dimColor: true, children: `autonomous coding agent · v${getVersion()}` }), _jsx(Text, {}), _jsx(Text, { dimColor: true, children: "type a task to start \u2014 agent plans, edits, and builds" }), _jsx(Text, {}), _jsxs(Text, { dimColor: true, children: ["\u23CE send \u00B7 ", _jsx(Text, { bold: true, children: "ctrl+s" }), " sessions \u00B7 tab complete \u00B7 /help \u00B7 /skills"] })] })) : (state.items.map((item, i) => _jsx(ChatItemView, { item: item }, i))), lastSummary && (_jsx(Box, { marginTop: 1, children: state.status === "success" ? (_jsxs(Text, { color: "green", bold: true, children: ["\u2714 ", lastSummary] })) : state.status === "aborted" ? (_jsxs(Text, { color: "yellow", bold: true, children: ["\u23F9 ", lastSummary] })) : (_jsxs(Text, { color: "red", bold: true, children: ["\u2718 ", lastSummary] })) }))] }) }), showSidebar && _jsx(Sidebar, { state: state, config: config })] }), sessionPickerOpen && (_jsx(SessionPicker, { workdir: config.workdir, onSelect: handleSessionSelect, onClose: () => setSessionPickerOpen(false) })), permPrompt && _jsx(PermissionModal, { prompt: permPrompt }), _jsx(Box, { paddingX: 1, flexShrink: 0, children: _jsx(Input, { valueRef: inputRef, value: input, onChange: writeInput, onSubmit: (v) => void submit(v), historyRef: historyRef, skillNames: skillNames, agentRef: agentRef, config: config, atSources: atSources, modalRef: permPromptRef }) }), _jsx(StatusBar, { state: state, scroll: scrollOffset > 0 ? `↑ ${Math.min(scrollOffset, maxScroll)}/${maxScroll}` : null })] }));
601
+ _jsxs(Box, { flexDirection: "column", height: rows || 24, flexShrink: 0, children: [_jsx(BuildRail, { state: state, config: config }), _jsxs(Box, { flexDirection: "row", flexGrow: 1, flexShrink: 1, minHeight: 0, children: [_jsx(Box, { ref: viewportRef, flexDirection: "column", flexGrow: 1, flexShrink: 1, minHeight: 0, overflow: "hidden", contentOffsetY: scrollTop, children: _jsxs(Box, { ref: contentRef, flexDirection: "column", paddingX: 1, flexShrink: 0, children: [state.items.length === 0 ? (_jsxs(Box, { flexDirection: "column", alignItems: "center", justifyContent: "center", flexGrow: 1, children: [_jsx(Text, { bold: true, color: theme.brand, children: "\u2691 SCoder" }), _jsx(Text, { dimColor: true, children: `autonomous coding agent · v${getVersion()}` }), _jsx(Text, {}), _jsx(Text, { dimColor: true, children: "type a task to start \u2014 agent plans, edits, and builds" }), _jsx(Text, {}), _jsxs(Text, { dimColor: true, children: ["\u23CE send \u00B7 ", _jsx(Text, { bold: true, children: "ctrl+s" }), " sessions \u00B7 tab complete \u00B7 /help \u00B7 /skills"] })] })) : (state.items.map((item, i) => _jsx(ChatItemView, { item: item }, i))), lastSummary && (_jsx(Box, { marginTop: 1, children: state.status === "success" ? (_jsxs(Text, { color: "green", bold: true, children: ["\u2714 ", lastSummary] })) : state.status === "aborted" ? (_jsxs(Text, { color: "yellow", bold: true, children: ["\u23F9 ", lastSummary] })) : (_jsxs(Text, { color: "red", bold: true, children: ["\u2718 ", lastSummary] })) }))] }) }), showSidebar && _jsx(Sidebar, { state: state, config: config })] }), sessionPickerOpen && (_jsx(SessionPicker, { workdir: config.workdir, onSelect: handleSessionSelect, onClose: () => setSessionPickerOpen(false) })), permPrompt && _jsx(PermissionModal, { prompt: permPrompt }), _jsx(Box, { paddingX: 1, paddingTop: 1, paddingBottom: 1, flexShrink: 0, alignSelf: "stretch", children: _jsx(Input, { valueRef: inputRef, value: input, onChange: writeInput, onSubmit: (v) => void submit(v), historyRef: historyRef, skillNames: skillNames, agentRef: agentRef, config: config, atSources: atSources, modalRef: permPromptRef }) }), _jsx(StatusBar, { state: state, scroll: scrollOffset > 0 ? `↑ ${Math.min(scrollOffset, maxScroll)}/${maxScroll}` : null })] }));
602
602
  }
603
603
  /** Mount the TUI (called from the `scoder tui` subcommand). */
604
604
  export async function runTui(config, initialTask) {
@@ -116,7 +116,7 @@ export function ChatItemView({ item }) {
116
116
  case "user":
117
117
  // User messages stand out with a full colored border + bold label so they're
118
118
  // immediately visible at a glance, distinct from the agent's ◆ markdown.
119
- return (_jsx(Box, { marginTop: 1, marginLeft: 1, children: _jsx(Box, { borderStyle: "single", borderColor: theme.user, borderLeft: true, borderRight: false, borderTop: false, borderBottom: false, backgroundColor: "gray", width: "100%", paddingX: 1, paddingTop: 1, paddingBottom: 1, flexDirection: "column", children: _jsxs(Text, { children: [_jsx(Text, { color: "white", bold: true, children: "you \u25B8 " }), _jsx(Text, { color: "white", bold: true, children: item.text })] }) }) }));
119
+ return (_jsx(Box, { marginTop: 1, marginLeft: 1, children: _jsxs(Text, { children: [_jsx(Text, { color: theme.user, bold: true, children: "you \u25B8 " }), _jsx(Text, { bold: true, children: item.text })] }) }));
120
120
  case "assistant": {
121
121
  // Streaming: dim with pulsing cursor; finalized: markdown with agent mark.
122
122
  if (item.streaming || !item.text) {
package/dist/tui/input.js CHANGED
@@ -210,5 +210,5 @@ export function Input({ valueRef, value, onChange, onSubmit, historyRef, skillNa
210
210
  const ghost = useMemo(() => (atState ? null : ghostText(value, providers)), [value, providers, atState]);
211
211
  const ghostRef = useRef(ghost);
212
212
  ghostRef.current = ghost;
213
- return (_jsxs(Box, { flexDirection: "column", children: [at && (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [at.suggestions.map((s, i) => (_jsxs(Text, { color: i === at.idx ? theme.brand : undefined, bold: i === at.idx, children: [i === at.idx ? "▸ " : " ", s] }, s))), _jsx(Text, { dimColor: true, children: " \u2191/\u2193 select \u00B7 tab/enter accept \u00B7 esc close" })] })), _jsxs(Box, { children: [_jsxs(Text, { color: theme.brand, bold: true, children: ["\u276F", " "] }), vimMode === "normal" && cursor !== null ? (_jsxs(_Fragment, { children: [_jsx(Text, { children: value.slice(0, cursor) }), _jsx(Text, { backgroundColor: "gray", color: "black", children: value[cursor] ?? " " }), _jsx(Text, { children: value.slice(cursor + 1) })] })) : (_jsxs(_Fragment, { children: [_jsx(Text, { children: value }), ghost && _jsx(Text, { dimColor: true, children: ghost.rest }), _jsx(Text, { dimColor: true, children: "\u258C" })] }))] }), candidates && _jsxs(Text, { dimColor: true, children: [" ", candidates, " (tab completes)"] }), vimMode === "normal" && _jsx(Text, { dimColor: true, children: " -- NORMAL -- h/l/w/b/e \u00B7 x \u00B7 i/a/A insert \u00B7 \u23CE send" })] }));
213
+ return (_jsxs(Box, { flexDirection: "column", children: [at && (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [at.suggestions.map((s, i) => (_jsxs(Text, { color: i === at.idx ? theme.brand : undefined, bold: i === at.idx, children: [i === at.idx ? "▸ " : " ", s] }, s))), _jsx(Text, { dimColor: true, children: " \u2191/\u2193 select \u00B7 tab/enter accept \u00B7 esc close" })] })), _jsxs(Box, { children: [_jsxs(Text, { color: theme.brand, bold: true, children: ["\u276F", " "] }), vimMode === "normal" && cursor !== null ? (_jsxs(_Fragment, { children: [_jsx(Text, { children: value.slice(0, cursor) }), _jsx(Text, { backgroundColor: "gray", color: "black", children: value[cursor] ?? " " }), _jsx(Text, { children: value.slice(cursor + 1) })] })) : value.length === 0 ? (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: "type a message\u2026" }), _jsx(Text, { dimColor: true, children: "\u258C" })] })) : (_jsxs(_Fragment, { children: [_jsx(Text, { children: value }), ghost && _jsx(Text, { dimColor: true, children: ghost.rest }), _jsx(Text, { dimColor: true, children: "\u258C" })] }))] }), candidates && _jsxs(Text, { dimColor: true, children: [" ", candidates, " (tab completes)"] }), vimMode === "normal" && _jsx(Text, { dimColor: true, children: " -- NORMAL -- h/l/w/b/e \u00B7 x \u00B7 i/a/A insert \u00B7 \u23CE send" })] }));
214
214
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "s-app-scoder-agent",
3
- "version": "0.8.7",
3
+ "version": "0.8.17",
4
4
  "description": "Autonomous coding agent CLI — writes, edits, and builds code autonomously until the project compiles without errors.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",