openhorse 0.1.19 → 0.1.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/cli.js +446 -33
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/index.d.ts.map +1 -1
  4. package/dist/commands/index.js +99 -40
  5. package/dist/commands/index.js.map +1 -1
  6. package/dist/commands/types.d.ts +14 -0
  7. package/dist/commands/types.d.ts.map +1 -1
  8. package/dist/commands/types.js.map +1 -1
  9. package/dist/framework/query.d.ts.map +1 -1
  10. package/dist/framework/query.js +25 -7
  11. package/dist/framework/query.js.map +1 -1
  12. package/dist/runtime/turn-controller.d.ts +37 -0
  13. package/dist/runtime/turn-controller.d.ts.map +1 -0
  14. package/dist/runtime/turn-controller.js +84 -0
  15. package/dist/runtime/turn-controller.js.map +1 -0
  16. package/dist/services/config.d.ts +4 -2
  17. package/dist/services/config.d.ts.map +1 -1
  18. package/dist/services/config.js +30 -0
  19. package/dist/services/config.js.map +1 -1
  20. package/dist/services/global-config.d.ts +13 -0
  21. package/dist/services/global-config.d.ts.map +1 -1
  22. package/dist/services/global-config.js +4 -0
  23. package/dist/services/global-config.js.map +1 -1
  24. package/dist/services/llm.d.ts +4 -1
  25. package/dist/services/llm.d.ts.map +1 -1
  26. package/dist/services/llm.js +15 -2
  27. package/dist/services/llm.js.map +1 -1
  28. package/dist/ui/command-panel.d.ts +17 -0
  29. package/dist/ui/command-panel.d.ts.map +1 -1
  30. package/dist/ui/command-panel.js +234 -93
  31. package/dist/ui/command-panel.js.map +1 -1
  32. package/dist/ui/file-completion.d.ts +3 -0
  33. package/dist/ui/file-completion.d.ts.map +1 -1
  34. package/dist/ui/file-completion.js +7 -2
  35. package/dist/ui/file-completion.js.map +1 -1
  36. package/dist/ui/multiline-input.d.ts +4 -0
  37. package/dist/ui/multiline-input.d.ts.map +1 -1
  38. package/dist/ui/multiline-input.js +7 -0
  39. package/dist/ui/multiline-input.js.map +1 -1
  40. package/dist/ui/user-input.d.ts +1 -0
  41. package/dist/ui/user-input.d.ts.map +1 -1
  42. package/dist/ui/user-input.js +8 -4
  43. package/dist/ui/user-input.js.map +1 -1
  44. package/dist/ui-v2/components/command-palette.d.ts +6 -0
  45. package/dist/ui-v2/components/command-palette.d.ts.map +1 -0
  46. package/dist/ui-v2/components/command-palette.js +57 -0
  47. package/dist/ui-v2/components/command-palette.js.map +1 -0
  48. package/dist/ui-v2/components/session-picker.d.ts +17 -0
  49. package/dist/ui-v2/components/session-picker.d.ts.map +1 -0
  50. package/dist/ui-v2/components/session-picker.js +23 -0
  51. package/dist/ui-v2/components/session-picker.js.map +1 -0
  52. package/dist/ui-v2/components/shell.d.ts +49 -0
  53. package/dist/ui-v2/components/shell.d.ts.map +1 -0
  54. package/dist/ui-v2/components/shell.js +190 -0
  55. package/dist/ui-v2/components/shell.js.map +1 -0
  56. package/dist/ui-v2/index.d.ts +10 -0
  57. package/dist/ui-v2/index.d.ts.map +1 -0
  58. package/dist/ui-v2/index.js +26 -0
  59. package/dist/ui-v2/index.js.map +1 -0
  60. package/dist/ui-v2/runtime/text.d.ts +8 -0
  61. package/dist/ui-v2/runtime/text.d.ts.map +1 -0
  62. package/dist/ui-v2/runtime/text.js +58 -0
  63. package/dist/ui-v2/runtime/text.js.map +1 -0
  64. package/dist/ui-v2/state/input-reducer.d.ts +39 -0
  65. package/dist/ui-v2/state/input-reducer.d.ts.map +1 -0
  66. package/dist/ui-v2/state/input-reducer.js +82 -0
  67. package/dist/ui-v2/state/input-reducer.js.map +1 -0
  68. package/dist/ui-v2/state/picker.d.ts +16 -0
  69. package/dist/ui-v2/state/picker.d.ts.map +1 -0
  70. package/dist/ui-v2/state/picker.js +52 -0
  71. package/dist/ui-v2/state/picker.js.map +1 -0
  72. package/dist/ui-v2/state/sessions.d.ts +14 -0
  73. package/dist/ui-v2/state/sessions.d.ts.map +1 -0
  74. package/dist/ui-v2/state/sessions.js +65 -0
  75. package/dist/ui-v2/state/sessions.js.map +1 -0
  76. package/dist/ui-v2/state/suggestions.d.ts +22 -0
  77. package/dist/ui-v2/state/suggestions.d.ts.map +1 -0
  78. package/dist/ui-v2/state/suggestions.js +55 -0
  79. package/dist/ui-v2/state/suggestions.js.map +1 -0
  80. package/dist/ui-v2/types.d.ts +33 -0
  81. package/dist/ui-v2/types.d.ts.map +1 -0
  82. package/dist/ui-v2/types.js +9 -0
  83. package/dist/ui-v2/types.js.map +1 -0
  84. package/package.json +2 -2
@@ -9,11 +9,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.renderUserInputPrompt = renderUserInputPrompt;
10
10
  exports.renderUserInputContent = renderUserInputContent;
11
11
  exports.renderUserInputEcho = renderUserInputEcho;
12
+ exports.renderUserInputEchoFrame = renderUserInputEchoFrame;
12
13
  const INPUT_BG = [56, 56, 56];
13
14
  const INPUT_FG = [226, 232, 240];
14
- const ACCENT_FG = [0, 212, 170];
15
15
  const DEFAULT_TERMINAL_WIDTH = 80;
16
- const PROMPT_WIDTH = 2;
17
16
  const CONTENT_PADDING = 2;
18
17
  function colorsDisabled() {
19
18
  return process.env.NO_COLOR !== undefined || process.env.TERM === 'dumb';
@@ -48,11 +47,11 @@ function visualWidth(text) {
48
47
  return width;
49
48
  }
50
49
  function renderUserInputPrompt() {
51
- return style('', ACCENT_FG);
50
+ return '';
52
51
  }
53
52
  function renderUserInputContent(text, width) {
54
53
  const terminalWidth = Math.max(1, width || process.stdout.columns || DEFAULT_TERMINAL_WIDTH);
55
- const targetWidth = Math.max(CONTENT_PADDING, terminalWidth - PROMPT_WIDTH);
54
+ const targetWidth = Math.max(CONTENT_PADDING, terminalWidth);
56
55
  const visibleWidth = CONTENT_PADDING + visualWidth(text);
57
56
  const fill = Math.max(0, targetWidth - visibleWidth);
58
57
  return style(` ${text}${' '.repeat(fill)} `, INPUT_FG);
@@ -63,4 +62,9 @@ function renderUserInputEcho(input, width) {
63
62
  .map(line => renderUserInputPrompt() + renderUserInputContent(line, width))
64
63
  .join('\n');
65
64
  }
65
+ function renderUserInputEchoFrame(input, width) {
66
+ // Kept for compatibility with the v2 caller. Submitted input should read as
67
+ // conversation content, not as a bordered live input frame.
68
+ return renderUserInputEcho(input, width);
69
+ }
66
70
  //# sourceMappingURL=user-input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-input.js","sourceRoot":"","sources":["../../src/ui/user-input.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-input.js","sourceRoot":"","sources":["../../src/ui/user-input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * UI v2 command palette renderer.
3
+ */
4
+ import type { PaletteRenderOptions } from '../types';
5
+ export declare function renderCommandPalette(options: PaletteRenderOptions): string[];
6
+ //# sourceMappingURL=command-palette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-palette.d.ts","sourceRoot":"","sources":["../../../src/ui-v2/components/command-palette.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAkB,MAAM,UAAU,CAAC;AAMrE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,EAAE,CAiC5E"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /**
3
+ * UI v2 command palette renderer.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.renderCommandPalette = renderCommandPalette;
7
+ const text_1 = require("../runtime/text");
8
+ const MIN_PALETTE_WIDTH = 28;
9
+ const MAX_PALETTE_WIDTH = 64;
10
+ function renderCommandPalette(options) {
11
+ const innerWidth = Math.max(MIN_PALETTE_WIDTH, Math.min(options.width - 4, MAX_PALETTE_WIDTH));
12
+ const title = (0, text_1.truncateVisible)(options.title, Math.max(8, innerWidth - 4));
13
+ const titleWidth = (0, text_1.visualWidth)(title);
14
+ const headerFill = Math.max(1, innerWidth - titleWidth - 3);
15
+ const lines = [
16
+ options.theme.dim(`┌─ ${title} ${'─'.repeat(headerFill)}┐`),
17
+ ];
18
+ if (options.items.length === 0) {
19
+ lines.push(renderEmptyRow(options.emptyLabel ?? 'No matches', innerWidth, options.theme.dim));
20
+ }
21
+ else {
22
+ options.items.forEach((item, index) => {
23
+ lines.push(renderSuggestionRow({
24
+ item,
25
+ selected: index === options.selectedIndex,
26
+ innerWidth,
27
+ theme: options.theme,
28
+ }));
29
+ });
30
+ }
31
+ if (options.moreCount && options.moreCount > 0) {
32
+ const more = `${options.moreCount} more results`;
33
+ lines.push(options.theme.dim(`│ ${(0, text_1.padEndVisible)(more, innerWidth - 2)} │`));
34
+ }
35
+ lines.push(options.theme.dim(`└${'─'.repeat(innerWidth)}┘`));
36
+ lines.push(options.theme.dim(options.footer ?? ' ↑↓ Select Enter Esc'));
37
+ return lines;
38
+ }
39
+ function renderSuggestionRow(options) {
40
+ const label = formatLabel(options.item);
41
+ const detailWidth = Math.max(0, options.innerWidth - (0, text_1.visualWidth)(label) - 3);
42
+ const detail = options.item.detail ? (0, text_1.truncateVisible)(options.item.detail, detailWidth) : '';
43
+ const gapWidth = Math.max(1, options.innerWidth - (0, text_1.visualWidth)(label) - (0, text_1.visualWidth)(detail) - 2);
44
+ const rowContent = label + ' '.repeat(gapWidth) + detail;
45
+ const padded = (0, text_1.padEndVisible)(rowContent, options.innerWidth - 2);
46
+ if (options.selected) {
47
+ return options.theme.dim('│ ') + options.theme.selected(padded) + options.theme.dim(' │');
48
+ }
49
+ return options.theme.dim('│ ') + options.theme.accent(label) + ' '.repeat(gapWidth) + options.theme.dim(detail) + options.theme.dim(' │');
50
+ }
51
+ function renderEmptyRow(label, innerWidth, dim) {
52
+ return dim(`│ ${(0, text_1.padEndVisible)((0, text_1.truncateVisible)(label, innerWidth - 2), innerWidth - 2)} │`);
53
+ }
54
+ function formatLabel(item) {
55
+ return item.shortcut ? `${item.label} (${item.shortcut})` : item.label;
56
+ }
57
+ //# sourceMappingURL=command-palette.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-palette.js","sourceRoot":"","sources":["../../../src/ui-v2/components/command-palette.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * UI v2 session picker renderer.
3
+ */
4
+ import type { SessionMeta } from '../../services/session-storage';
5
+ import type { PaletteTheme } from '../types';
6
+ export interface RenderSessionPickerOptions {
7
+ title?: string;
8
+ sessions: SessionMeta[];
9
+ selectedIndex?: number;
10
+ width: number;
11
+ showProject?: boolean;
12
+ moreCount?: number;
13
+ footer?: string;
14
+ theme: PaletteTheme;
15
+ }
16
+ export declare function renderSessionPicker(options: RenderSessionPickerOptions): string[];
17
+ //# sourceMappingURL=session-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-picker.d.ts","sourceRoot":"","sources":["../../../src/ui-v2/components/session-picker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAI7C,MAAM,WAAW,0BAA0B;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,YAAY,CAAC;CACrB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,MAAM,EAAE,CAajF"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * UI v2 session picker renderer.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.renderSessionPicker = renderSessionPicker;
7
+ const command_palette_1 = require("./command-palette");
8
+ const sessions_1 = require("../state/sessions");
9
+ function renderSessionPicker(options) {
10
+ return (0, command_palette_1.renderCommandPalette)({
11
+ title: options.title ?? 'Pick a Session',
12
+ items: (0, sessions_1.buildSessionSuggestions)(options.sessions, {
13
+ showProject: options.showProject,
14
+ }),
15
+ selectedIndex: options.selectedIndex ?? 0,
16
+ width: options.width,
17
+ moreCount: options.moreCount,
18
+ emptyLabel: 'No sessions found',
19
+ footer: options.footer ?? ' ↑↓ Select Enter Resume Esc Cancel',
20
+ theme: options.theme,
21
+ });
22
+ }
23
+ //# sourceMappingURL=session-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-picker.js","sourceRoot":"","sources":["../../../src/ui-v2/components/session-picker.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAkBH,kDAaC;AA3BD,uDAAyD;AACzD,gDAA4D;AAa5D,SAAgB,mBAAmB,CAAC,OAAmC;IACrE,OAAO,IAAA,sCAAoB,EAAC;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,gBAAgB;QACxC,KAAK,EAAE,IAAA,kCAAuB,EAAC,OAAO,CAAC,QAAQ,EAAE;YAC/C,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC;QACF,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,CAAC;QACzC,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,UAAU,EAAE,mBAAmB;QAC/B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,uCAAuC;QACjE,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * UI v2 visible shell components.
3
+ */
4
+ export interface V2ShellHeaderConfig {
5
+ provider: string;
6
+ model: string;
7
+ projectPath: string;
8
+ status: 'ready' | 'loading' | 'error' | 'processing';
9
+ statusText?: string;
10
+ version: string;
11
+ width?: number;
12
+ }
13
+ export interface V2StatusLineStats {
14
+ model: string;
15
+ tokens: number;
16
+ promptTokens: number;
17
+ completionTokens: number;
18
+ cost: number;
19
+ ctxPercent: number;
20
+ mcpConnected: number;
21
+ mcpTotal: number;
22
+ sessionId?: string;
23
+ modeText?: string;
24
+ width?: number;
25
+ }
26
+ export interface V2ShortcutItem {
27
+ key: string;
28
+ label: string;
29
+ }
30
+ export interface V2InputFrameOptions {
31
+ input: string;
32
+ modeIndicator?: string;
33
+ width?: number;
34
+ statusText?: string;
35
+ }
36
+ export interface V2InputFrameRender {
37
+ output: string;
38
+ height: number;
39
+ cursorRow: number;
40
+ cursorColumn: number;
41
+ }
42
+ export declare function renderV2ShellHeader(config: V2ShellHeaderConfig): string;
43
+ export declare function renderV2Prompt(modeIndicator?: string): string;
44
+ export declare function renderV2InputFrame(options: V2InputFrameOptions): V2InputFrameRender;
45
+ export declare function renderV2StatusBadge(stats: V2StatusLineStats): string;
46
+ export declare function renderV2StatusLine(stats: V2StatusLineStats): string;
47
+ export declare function renderV2FooterHint(width?: number): string;
48
+ export declare function renderV2Shortcuts(width?: number): string;
49
+ //# sourceMappingURL=shell.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/ui-v2/components/shell.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+BH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,YAAY,CAAC;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAWD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAoBvE;AAED,wBAAgB,cAAc,CAAC,aAAa,GAAE,MAAW,GAAG,MAAM,CAGjE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB,CA4BnF;AAoBD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAIpE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CAInE;AAcD,wBAAgB,kBAAkB,CAAC,KAAK,GAAE,MAAqC,GAAG,MAAM,CAMvF;AAED,wBAAgB,iBAAiB,CAAC,KAAK,GAAE,MAAqC,GAAG,MAAM,CAetF"}
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ /**
3
+ * UI v2 visible shell components.
4
+ */
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.renderV2ShellHeader = renderV2ShellHeader;
10
+ exports.renderV2Prompt = renderV2Prompt;
11
+ exports.renderV2InputFrame = renderV2InputFrame;
12
+ exports.renderV2StatusBadge = renderV2StatusBadge;
13
+ exports.renderV2StatusLine = renderV2StatusLine;
14
+ exports.renderV2FooterHint = renderV2FooterHint;
15
+ exports.renderV2Shortcuts = renderV2Shortcuts;
16
+ const path_1 = require("path");
17
+ const chalk_1 = __importDefault(require("chalk"));
18
+ const text_1 = require("../runtime/text");
19
+ const NO_COLOR = process.env.NO_COLOR !== undefined || process.env.TERM === 'dumb';
20
+ const colorize = NO_COLOR ? {
21
+ brand: (s) => s,
22
+ accent: (s) => s,
23
+ dim: (s) => s,
24
+ success: (s) => s,
25
+ warn: (s) => s,
26
+ danger: (s) => s,
27
+ label: (s) => s,
28
+ } : {
29
+ brand: chalk_1.default.hex('#FF6B35').bold,
30
+ accent: chalk_1.default.hex('#00D4AA'),
31
+ dim: chalk_1.default.dim,
32
+ success: chalk_1.default.green,
33
+ warn: chalk_1.default.yellow,
34
+ danger: chalk_1.default.red,
35
+ label: chalk_1.default.hex('#94A3B8'),
36
+ };
37
+ const INPUT_BG = '\x1b[48;2;56;56;56m';
38
+ const INPUT_FG = '\x1b[38;2;226;232;240m';
39
+ const RESET_COLORS = '\x1b[39;49m';
40
+ const CLEAR_TO_EOL = '\x1b[K';
41
+ const DEFAULT_SHORTCUTS = [
42
+ { key: '/', label: 'commands' },
43
+ { key: '@', label: 'files' },
44
+ { key: 'Ctrl+R', label: 'history' },
45
+ { key: 'Ctrl+L', label: 'clear view' },
46
+ { key: '?', label: 'shortcuts' },
47
+ { key: 'Ctrl+C', label: 'exit' },
48
+ ];
49
+ function renderV2ShellHeader(config) {
50
+ const width = Math.max(44, config.width || process.stdout.columns || 80);
51
+ const innerWidth = Math.max(24, width - 4);
52
+ const title = `OpenHorse v${config.version}`;
53
+ const topFill = Math.max(1, innerWidth - (0, text_1.visualWidth)(title) - 3);
54
+ const projectName = (0, path_1.basename)(config.projectPath) || config.projectPath;
55
+ const status = renderStatus(config.status, config.statusText);
56
+ const body = [
57
+ renderToken('model', config.model),
58
+ renderToken('provider', shortProvider(config.provider)),
59
+ renderToken('project', projectName),
60
+ status,
61
+ ].filter(Boolean).join(colorize.dim(' | '));
62
+ return [
63
+ colorize.dim(`╭─ ${colorize.brand(title)} ${'─'.repeat(topFill)}╮`),
64
+ colorize.dim('│ ') + (0, text_1.padEndVisible)((0, text_1.truncateVisible)(body, innerWidth - 2), innerWidth - 2) + colorize.dim(' │'),
65
+ colorize.dim(`╰${'─'.repeat(innerWidth)}╯`),
66
+ ].join('\n');
67
+ }
68
+ function renderV2Prompt(modeIndicator = '') {
69
+ const mode = modeIndicator ? colorize.dim(`${modeIndicator} `) : '';
70
+ return `${colorize.accent('›')} ${mode}`;
71
+ }
72
+ function renderV2InputFrame(options) {
73
+ const width = Math.max(24, options.width || process.stdout.columns || 80);
74
+ const inputWidth = Math.max(1, width - 1);
75
+ const logicalLines = options.input.length > 0 ? options.input.split('\n') : [''];
76
+ const firstPrompt = renderV2Prompt(options.modeIndicator || '');
77
+ const continuationPrompt = ' '.repeat((0, text_1.visualWidth)(firstPrompt));
78
+ const renderedLines = logicalLines.map((line, index) => {
79
+ const prefix = index === 0 ? firstPrompt : continuationPrompt;
80
+ return renderInputLine((0, text_1.truncateVisible)(prefix + line, inputWidth));
81
+ });
82
+ const statusLine = options.statusText ? renderInputStatusLine(inputWidth, options.statusText) : undefined;
83
+ const rowSpans = logicalLines.map((line, index) => {
84
+ const prefix = index === 0 ? firstPrompt : continuationPrompt;
85
+ return terminalRowsFor((0, text_1.visualWidth)(prefix) + (0, text_1.visualWidth)(line), width);
86
+ });
87
+ const rowsBeforeCursor = rowSpans.slice(0, -1).reduce((sum, rows) => sum + rows, 0);
88
+ const lastLine = logicalLines[logicalLines.length - 1] || '';
89
+ const lastPrefix = logicalLines.length === 1 ? firstPrompt : continuationPrompt;
90
+ const lastVisibleWidth = (0, text_1.visualWidth)(lastPrefix) + (0, text_1.visualWidth)(lastLine);
91
+ return {
92
+ output: [...renderedLines, ...(statusLine ? [statusLine] : [])].join('\n'),
93
+ height: rowSpans.reduce((sum, rows) => sum + rows, 0) + (statusLine ? 1 : 0),
94
+ cursorRow: rowsBeforeCursor + Math.floor(lastVisibleWidth / width),
95
+ cursorColumn: (lastVisibleWidth % width) + 1,
96
+ };
97
+ }
98
+ function renderInputLine(content) {
99
+ if (NO_COLOR) {
100
+ return content;
101
+ }
102
+ return `${INPUT_BG}${INPUT_FG}${content}${CLEAR_TO_EOL}${RESET_COLORS}`;
103
+ }
104
+ function renderInputStatusLine(width, statusText) {
105
+ const badge = ` ${statusText} `;
106
+ const badgeWidth = (0, text_1.visualWidth)(badge);
107
+ if (badgeWidth >= width) {
108
+ return (0, text_1.truncateVisible)(badge, width);
109
+ }
110
+ return ' '.repeat(width - badgeWidth) + badge;
111
+ }
112
+ function renderV2StatusBadge(stats) {
113
+ const width = Math.max(20, stats.width || process.stdout.columns || 80);
114
+ const parts = buildStatusParts(stats).join(colorize.dim(' '));
115
+ return (0, text_1.truncateVisible)(parts, Math.max(1, width));
116
+ }
117
+ function renderV2StatusLine(stats) {
118
+ const width = Math.max(44, stats.width || process.stdout.columns || 80);
119
+ const content = buildStatusParts(stats).join(colorize.dim(' '));
120
+ return colorize.dim(' ') + (0, text_1.truncateVisible)(content, Math.max(1, width - 2));
121
+ }
122
+ function buildStatusParts(stats) {
123
+ return [
124
+ renderToken('model', stats.model),
125
+ stats.sessionId ? renderToken('session', stats.sessionId.slice(0, 8)) : '',
126
+ renderToken('tokens', formatTokens(stats.tokens)),
127
+ stats.cost > 0 ? renderToken('cost', formatCost(stats.cost)) : '',
128
+ stats.ctxPercent > 0 ? renderToken('ctx', `${stats.ctxPercent}%`) : '',
129
+ stats.mcpTotal > 0 ? renderToken('mcp', `${stats.mcpConnected}/${stats.mcpTotal}`) : '',
130
+ stats.modeText ? renderToken('mode', stats.modeText) : '',
131
+ ].filter(Boolean);
132
+ }
133
+ function renderV2FooterHint(width = process.stdout.columns || 80) {
134
+ const text = DEFAULT_SHORTCUTS
135
+ .slice(0, 5)
136
+ .map(item => `${colorize.accent(item.key)} ${colorize.label(item.label)}`)
137
+ .join(colorize.dim(' '));
138
+ return colorize.dim(' ') + (0, text_1.truncateVisible)(text, Math.max(1, width - 2));
139
+ }
140
+ function renderV2Shortcuts(width = process.stdout.columns || 80) {
141
+ const innerWidth = Math.max(36, Math.min(width - 4, 72));
142
+ const title = 'Shortcuts';
143
+ const titleFill = Math.max(1, innerWidth - (0, text_1.visualWidth)(title) - 3);
144
+ const rows = DEFAULT_SHORTCUTS.map(item => {
145
+ const key = (0, text_1.padEndVisible)(item.key, 8);
146
+ const content = `${colorize.accent(key)} ${colorize.label(item.label)}`;
147
+ return colorize.dim('│ ') + (0, text_1.padEndVisible)((0, text_1.truncateVisible)(content, innerWidth - 2), innerWidth - 2) + colorize.dim(' │');
148
+ });
149
+ return [
150
+ colorize.dim(`┌─ ${title} ${'─'.repeat(titleFill)}┐`),
151
+ ...rows,
152
+ colorize.dim(`└${'─'.repeat(innerWidth)}┘`),
153
+ ].join('\n');
154
+ }
155
+ function renderStatus(status, text) {
156
+ const dot = status === 'ready'
157
+ ? colorize.success('●')
158
+ : status === 'loading'
159
+ ? colorize.warn('●')
160
+ : status === 'error'
161
+ ? colorize.danger('●')
162
+ : colorize.accent('●');
163
+ return `${dot} ${colorize.label(text || status)}`;
164
+ }
165
+ function renderToken(label, value) {
166
+ return `${colorize.label(label)}=${colorize.accent(value)}`;
167
+ }
168
+ function terminalRowsFor(visibleWidth, terminalWidth) {
169
+ if (visibleWidth <= 0)
170
+ return 1;
171
+ return Math.floor(visibleWidth / terminalWidth) + 1;
172
+ }
173
+ function shortProvider(provider) {
174
+ return provider === 'Alibaba Cloud' ? 'Qwen' : provider;
175
+ }
176
+ function formatTokens(tokens) {
177
+ if (tokens >= 1000000)
178
+ return `${(tokens / 1000000).toFixed(1)}M`;
179
+ if (tokens >= 1000)
180
+ return `${(tokens / 1000).toFixed(1)}K`;
181
+ return String(tokens);
182
+ }
183
+ function formatCost(cost) {
184
+ if (cost < 0.01)
185
+ return `$${cost.toFixed(4)}`;
186
+ if (cost < 1)
187
+ return `$${cost.toFixed(2)}`;
188
+ return `$${cost.toFixed(1)}`;
189
+ }
190
+ //# sourceMappingURL=shell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/ui-v2/components/shell.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export * from './types';
2
+ export * from './runtime/text';
3
+ export * from './state/suggestions';
4
+ export * from './state/sessions';
5
+ export * from './state/picker';
6
+ export * from './state/input-reducer';
7
+ export * from './components/command-palette';
8
+ export * from './components/session-picker';
9
+ export * from './components/shell';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui-v2/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./types"), exports);
18
+ __exportStar(require("./runtime/text"), exports);
19
+ __exportStar(require("./state/suggestions"), exports);
20
+ __exportStar(require("./state/sessions"), exports);
21
+ __exportStar(require("./state/picker"), exports);
22
+ __exportStar(require("./state/input-reducer"), exports);
23
+ __exportStar(require("./components/command-palette"), exports);
24
+ __exportStar(require("./components/session-picker"), exports);
25
+ __exportStar(require("./components/shell"), exports);
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui-v2/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,iDAA+B;AAC/B,sDAAoC;AACpC,mDAAiC;AACjC,iDAA+B;AAC/B,wDAAsC;AACtC,+DAA6C;AAC7C,8DAA4C;AAC5C,qDAAmC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Text measurement helpers for terminal UI rendering.
3
+ */
4
+ export declare function stripAnsi(text: string): string;
5
+ export declare function visualWidth(text: string): number;
6
+ export declare function padEndVisible(text: string, targetWidth: number): string;
7
+ export declare function truncateVisible(text: string, targetWidth: number): string;
8
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/ui-v2/runtime/text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAGvE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAkBzE"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ /**
3
+ * Text measurement helpers for terminal UI rendering.
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.stripAnsi = stripAnsi;
7
+ exports.visualWidth = visualWidth;
8
+ exports.padEndVisible = padEndVisible;
9
+ exports.truncateVisible = truncateVisible;
10
+ const ANSI_PATTERN = /\x1b\[[0-9;]*m/g;
11
+ function stripAnsi(text) {
12
+ return text.replace(ANSI_PATTERN, '');
13
+ }
14
+ function visualWidth(text) {
15
+ let width = 0;
16
+ for (const ch of stripAnsi(text)) {
17
+ const cp = ch.codePointAt(0) || 0;
18
+ width += isWideCodePoint(cp) ? 2 : 1;
19
+ }
20
+ return width;
21
+ }
22
+ function padEndVisible(text, targetWidth) {
23
+ const width = visualWidth(text);
24
+ return width >= targetWidth ? text : text + ' '.repeat(targetWidth - width);
25
+ }
26
+ function truncateVisible(text, targetWidth) {
27
+ if (targetWidth <= 0)
28
+ return '';
29
+ if (visualWidth(text) <= targetWidth)
30
+ return text;
31
+ if (targetWidth <= 1)
32
+ return '…';
33
+ let out = '';
34
+ let width = 0;
35
+ const limit = targetWidth - 1;
36
+ for (const ch of text) {
37
+ const cp = ch.codePointAt(0) || 0;
38
+ const chWidth = isWideCodePoint(cp) ? 2 : 1;
39
+ if (width + chWidth > limit)
40
+ break;
41
+ out += ch;
42
+ width += chWidth;
43
+ }
44
+ return out + '…';
45
+ }
46
+ function isWideCodePoint(cp) {
47
+ return cp >= 0x1100 && (cp <= 0x115F || cp === 0x2329 || cp === 0x232A ||
48
+ (cp >= 0x2E80 && cp <= 0xA4CF && cp !== 0x303F) ||
49
+ (cp >= 0xAC00 && cp <= 0xD7A3) ||
50
+ (cp >= 0xF900 && cp <= 0xFAFF) ||
51
+ (cp >= 0xFE10 && cp <= 0xFE19) ||
52
+ (cp >= 0xFE30 && cp <= 0xFE6F) ||
53
+ (cp >= 0xFF01 && cp <= 0xFF60) ||
54
+ (cp >= 0xFFE0 && cp <= 0xFFE6) ||
55
+ (cp >= 0x20000 && cp <= 0x2FFFD) ||
56
+ (cp >= 0x30000 && cp <= 0x3FFFD));
57
+ }
58
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/ui-v2/runtime/text.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAIH,8BAEC;AAED,kCAOC;AAED,sCAGC;AAED,0CAkBC;AAtCD,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAEvC,SAAgB,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,WAAW,CAAC,IAAY;IACtC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,EAAE,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClC,KAAK,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,aAAa,CAAC,IAAY,EAAE,WAAmB;IAC7D,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAgB,eAAe,CAAC,IAAY,EAAE,WAAmB;IAC/D,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW;QAAE,OAAO,IAAI,CAAC;IAClD,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,GAAG,CAAC;IAEjC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,WAAW,GAAG,CAAC,CAAC;IAE9B,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK;YAAE,MAAM;QACnC,GAAG,IAAI,EAAE,CAAC;QACV,KAAK,IAAI,OAAO,CAAC;IACnB,CAAC;IAED,OAAO,GAAG,GAAG,GAAG,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,EAAU;IACjC,OAAO,EAAE,IAAI,MAAM,IAAI,CACrB,EAAE,IAAI,MAAM,IAAI,EAAE,KAAK,MAAM,IAAI,EAAE,KAAK,MAAM;QAC9C,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,IAAI,EAAE,KAAK,MAAM,CAAC;QAC/C,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC;QAC9B,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,CAAC;QAChC,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,IAAI,OAAO,CAAC,CACjC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Prompt input reducer for UI v2.
3
+ */
4
+ export interface InputState {
5
+ value: string;
6
+ cursor: number;
7
+ multiline: boolean;
8
+ historyIndex: number | null;
9
+ searchQuery: string | null;
10
+ }
11
+ export type InputAction = {
12
+ type: 'insert';
13
+ text: string;
14
+ } | {
15
+ type: 'backspace';
16
+ } | {
17
+ type: 'delete';
18
+ } | {
19
+ type: 'move';
20
+ direction: 'left' | 'right' | 'home' | 'end';
21
+ } | {
22
+ type: 'set';
23
+ value: string;
24
+ cursor?: number;
25
+ } | {
26
+ type: 'clear';
27
+ } | {
28
+ type: 'setMultiline';
29
+ multiline: boolean;
30
+ } | {
31
+ type: 'setHistoryIndex';
32
+ historyIndex: number | null;
33
+ } | {
34
+ type: 'setSearchQuery';
35
+ searchQuery: string | null;
36
+ };
37
+ export declare const initialInputState: InputState;
38
+ export declare function reduceInput(state: InputState, action: InputAction): InputState;
39
+ //# sourceMappingURL=input-reducer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-reducer.d.ts","sourceRoot":"","sources":["../../../src/ui-v2/state/input-reducer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAE3D,eAAO,MAAM,iBAAiB,EAAE,UAM/B,CAAC;AAEF,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,GAAG,UAAU,CAqD9E"}