openhorse 0.1.23 → 0.2.1

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 (79) hide show
  1. package/dist/agents/fork.js +1 -1
  2. package/dist/agents/fork.js.map +1 -1
  3. package/dist/cli.d.ts +1 -3
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +125 -1136
  6. package/dist/cli.js.map +1 -1
  7. package/dist/commands/index.d.ts +4 -1
  8. package/dist/commands/index.d.ts.map +1 -1
  9. package/dist/commands/index.js +352 -105
  10. package/dist/commands/index.js.map +1 -1
  11. package/dist/commands/types.d.ts +6 -0
  12. package/dist/commands/types.d.ts.map +1 -1
  13. package/dist/commands/types.js.map +1 -1
  14. package/dist/framework/query.d.ts +4 -0
  15. package/dist/framework/query.d.ts.map +1 -1
  16. package/dist/framework/query.js +4 -0
  17. package/dist/framework/query.js.map +1 -1
  18. package/dist/ink-ui/App.d.ts +6 -0
  19. package/dist/ink-ui/App.d.ts.map +1 -0
  20. package/dist/ink-ui/App.js +12 -0
  21. package/dist/ink-ui/App.js.map +1 -0
  22. package/dist/ink-ui/components/Markdown.d.ts +9 -0
  23. package/dist/ink-ui/components/Markdown.d.ts.map +1 -0
  24. package/dist/ink-ui/components/Markdown.js +188 -0
  25. package/dist/ink-ui/components/Markdown.js.map +1 -0
  26. package/dist/ink-ui/components/PixelHorseBanner.d.ts +8 -0
  27. package/dist/ink-ui/components/PixelHorseBanner.d.ts.map +1 -0
  28. package/dist/ink-ui/components/PixelHorseBanner.js +97 -0
  29. package/dist/ink-ui/components/PixelHorseBanner.js.map +1 -0
  30. package/dist/ink-ui/components/PromptInput.d.ts +9 -0
  31. package/dist/ink-ui/components/PromptInput.d.ts.map +1 -0
  32. package/dist/ink-ui/components/PromptInput.js +24 -0
  33. package/dist/ink-ui/components/PromptInput.js.map +1 -0
  34. package/dist/ink-ui/components/SelectList.d.ts +15 -0
  35. package/dist/ink-ui/components/SelectList.d.ts.map +1 -0
  36. package/dist/ink-ui/components/SelectList.js +39 -0
  37. package/dist/ink-ui/components/SelectList.js.map +1 -0
  38. package/dist/ink-ui/components/StatusLine.d.ts +9 -0
  39. package/dist/ink-ui/components/StatusLine.d.ts.map +1 -0
  40. package/dist/ink-ui/components/StatusLine.js +71 -0
  41. package/dist/ink-ui/components/StatusLine.js.map +1 -0
  42. package/dist/ink-ui/components/TerminalCursor.d.ts +13 -0
  43. package/dist/ink-ui/components/TerminalCursor.d.ts.map +1 -0
  44. package/dist/ink-ui/components/TerminalCursor.js +74 -0
  45. package/dist/ink-ui/components/TerminalCursor.js.map +1 -0
  46. package/dist/ink-ui/components/Transcript.d.ts +8 -0
  47. package/dist/ink-ui/components/Transcript.d.ts.map +1 -0
  48. package/dist/ink-ui/components/Transcript.js +29 -0
  49. package/dist/ink-ui/components/Transcript.js.map +1 -0
  50. package/dist/ink-ui/controllers/chat-controller.d.ts +34 -0
  51. package/dist/ink-ui/controllers/chat-controller.d.ts.map +1 -0
  52. package/dist/ink-ui/controllers/chat-controller.js +440 -0
  53. package/dist/ink-ui/controllers/chat-controller.js.map +1 -0
  54. package/dist/ink-ui/launch.d.ts +3 -0
  55. package/dist/ink-ui/launch.d.ts.map +1 -0
  56. package/dist/ink-ui/launch.js +14 -0
  57. package/dist/ink-ui/launch.js.map +1 -0
  58. package/dist/ink-ui/runtime/prompt-layout.d.ts +11 -0
  59. package/dist/ink-ui/runtime/prompt-layout.d.ts.map +1 -0
  60. package/dist/ink-ui/runtime/prompt-layout.js +51 -0
  61. package/dist/ink-ui/runtime/prompt-layout.js.map +1 -0
  62. package/dist/ink-ui/screens/ReplScreen.d.ts +14 -0
  63. package/dist/ink-ui/screens/ReplScreen.d.ts.map +1 -0
  64. package/dist/ink-ui/screens/ReplScreen.js +485 -0
  65. package/dist/ink-ui/screens/ReplScreen.js.map +1 -0
  66. package/dist/ink-ui/types.d.ts +43 -0
  67. package/dist/ink-ui/types.d.ts.map +1 -0
  68. package/dist/ink-ui/types.js +3 -0
  69. package/dist/ink-ui/types.js.map +1 -0
  70. package/dist/services/auto-fix/autoFixHook.js +1 -1
  71. package/dist/services/auto-fix/autoFixHook.js.map +1 -1
  72. package/dist/services/config.js +2 -2
  73. package/dist/services/config.js.map +1 -1
  74. package/dist/services/global-config.d.ts +1 -1
  75. package/dist/services/global-config.d.ts.map +1 -1
  76. package/dist/ui-v2/state/suggestions.d.ts.map +1 -1
  77. package/dist/ui-v2/state/suggestions.js +16 -1
  78. package/dist/ui-v2/state/suggestions.js.map +1 -1
  79. package/package.json +5 -1
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getPromptCursorPosition = getPromptCursorPosition;
7
+ exports.getCursorRestoreDelays = getCursorRestoreDelays;
8
+ exports.TerminalCursor = TerminalCursor;
9
+ const react_1 = require("react");
10
+ const ink_1 = require("ink");
11
+ const string_width_1 = __importDefault(require("string-width"));
12
+ const prompt_layout_1 = require("../runtime/prompt-layout");
13
+ const NORMAL_RESTORE_DELAYS_MS = [0, 16];
14
+ const STICKY_RESTORE_DELAYS_MS = [0, 16, 64];
15
+ const STICKY_RESTORE_INTERVAL_MS = 120;
16
+ function getPromptCursorPosition(value, terminalHeight, terminalWidth) {
17
+ const lines = value.length > 0 ? value.split('\n') : [''];
18
+ const maxTextWidth = (0, prompt_layout_1.promptTextWidth)(terminalWidth);
19
+ const rows = lines.map(line => (0, prompt_layout_1.splitByVisualWidth)(line, maxTextWidth).length);
20
+ const totalInputRows = rows.reduce((sum, rowCount) => sum + rowCount, 0);
21
+ const activeLine = lines[lines.length - 1] ?? '';
22
+ const previousRows = rows.slice(0, -1).reduce((sum, rowCount) => sum + rowCount, 0);
23
+ const activeChunks = (0, prompt_layout_1.splitByVisualWidth)(activeLine, maxTextWidth);
24
+ const wrapRow = Math.max(0, activeChunks.length - 1);
25
+ const activeChunk = activeChunks[activeChunks.length - 1] ?? '';
26
+ const columnInContent = 2 + (0, string_width_1.default)(activeChunk);
27
+ return {
28
+ row: Math.max(1, terminalHeight - totalInputRows + previousRows + wrapRow),
29
+ column: Math.max(1, 3 + columnInContent),
30
+ };
31
+ }
32
+ function writePromptCursor(stream, value, terminalHeight, terminalWidth) {
33
+ const position = getPromptCursorPosition(value, terminalHeight, terminalWidth);
34
+ stream.write(`\x1b[?25h\x1b[${position.row};${position.column}H`);
35
+ }
36
+ function getCursorRestoreDelays(sticky = false) {
37
+ return sticky ? STICKY_RESTORE_DELAYS_MS : NORMAL_RESTORE_DELAYS_MS;
38
+ }
39
+ function TerminalCursor({ value, terminalHeight, terminalWidth, sticky = false }) {
40
+ const { stdout } = (0, ink_1.useStdout)();
41
+ const latestRef = (0, react_1.useRef)({
42
+ stream: stdout ?? process.stdout,
43
+ value,
44
+ terminalHeight,
45
+ terminalWidth,
46
+ });
47
+ latestRef.current = {
48
+ stream: stdout ?? process.stdout,
49
+ value,
50
+ terminalHeight,
51
+ terminalWidth,
52
+ };
53
+ // Ink leaves the terminal cursor after the last rendered text. During streaming
54
+ // the footer can flush after the input box, so restore the cursor in a few
55
+ // closely-spaced passes rather than racing Ink with a single setTimeout(0).
56
+ (0, react_1.useEffect)(() => {
57
+ const timers = getCursorRestoreDelays(sticky).map(delay => setTimeout(() => {
58
+ const latest = latestRef.current;
59
+ writePromptCursor(latest.stream, latest.value, latest.terminalHeight, latest.terminalWidth);
60
+ }, delay));
61
+ return () => timers.forEach(timer => clearTimeout(timer));
62
+ });
63
+ (0, react_1.useEffect)(() => {
64
+ if (!sticky)
65
+ return undefined;
66
+ const interval = setInterval(() => {
67
+ const latest = latestRef.current;
68
+ writePromptCursor(latest.stream, latest.value, latest.terminalHeight, latest.terminalWidth);
69
+ }, STICKY_RESTORE_INTERVAL_MS);
70
+ return () => clearInterval(interval);
71
+ }, [sticky]);
72
+ return null;
73
+ }
74
+ //# sourceMappingURL=TerminalCursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TerminalCursor.js","sourceRoot":"","sources":["../../../src/ink-ui/components/TerminalCursor.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { TranscriptEntry } from '../types';
2
+ export interface TranscriptProps {
3
+ entries: TranscriptEntry[];
4
+ maxItems?: number;
5
+ width?: number;
6
+ }
7
+ export declare function Transcript({ entries, maxItems, width }: TranscriptProps): JSX.Element;
8
+ //# sourceMappingURL=Transcript.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transcript.d.ts","sourceRoot":"","sources":["../../../src/ink-ui/components/Transcript.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAIhD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAoBD,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,QAAa,EAAE,KAAU,EAAE,EAAE,eAAe,GAAG,GAAG,CAAC,OAAO,CA8B/F"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Transcript = Transcript;
7
+ const react_1 = __importDefault(require("react"));
8
+ const ink_1 = require("ink");
9
+ const string_width_1 = __importDefault(require("string-width"));
10
+ const prompt_layout_1 = require("../runtime/prompt-layout");
11
+ const Markdown_1 = require("./Markdown");
12
+ const USER_BACKGROUND = '#50545c';
13
+ function padLine(line, width) {
14
+ const padding = Math.max(0, width - (0, string_width_1.default)(line));
15
+ return line + ' '.repeat(padding);
16
+ }
17
+ function transcriptLines(entry, width) {
18
+ const rawLines = entry.content.split('\n');
19
+ if (entry.role !== 'user' && entry.role !== 'command') {
20
+ return rawLines.map(line => line || ' ');
21
+ }
22
+ return rawLines.flatMap(line => (0, prompt_layout_1.splitByVisualWidth)(line || ' ', width).map(chunk => padLine(chunk, width)));
23
+ }
24
+ function Transcript({ entries, maxItems = 20, width = 80 }) {
25
+ const visible = entries.slice(Math.max(0, entries.length - maxItems));
26
+ const contentWidth = Math.max(1, width - 2);
27
+ return (react_1.default.createElement(ink_1.Box, { flexDirection: "column", flexGrow: 1 }, visible.length === 0 ? (react_1.default.createElement(ink_1.Text, { color: "gray" }, "OpenHorse is ready.")) : (visible.map(entry => (react_1.default.createElement(ink_1.Box, { key: entry.id, flexDirection: "column", marginBottom: 1 }, entry.role === 'assistant' || entry.role === 'system' || entry.role === 'status' ? (react_1.default.createElement(Markdown_1.Markdown, { width: contentWidth }, entry.content)) : (transcriptLines(entry, contentWidth).map((line, index) => (react_1.default.createElement(ink_1.Text, { key: index, color: entry.role === 'error' ? 'red' : entry.role === 'tool' ? 'gray' : undefined, backgroundColor: entry.role === 'user' || entry.role === 'command' ? USER_BACKGROUND : undefined, wrap: "truncate" }, line))))))))));
28
+ }
29
+ //# sourceMappingURL=Transcript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transcript.js","sourceRoot":"","sources":["../../../src/ink-ui/components/Transcript.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { type QueryEvent } from '../../framework';
2
+ import type { OpenHorseInkRuntime, UiEventSink } from '../types';
3
+ export interface AssistantStreamPresenter {
4
+ appendChunk(chunk: string): void;
5
+ closeSegment(): void;
6
+ ensureMessage(content: string): void;
7
+ }
8
+ export declare function createAssistantStreamPresenter(events: UiEventSink, abortSignal?: AbortSignal): AssistantStreamPresenter;
9
+ type ToolCallEvent = Extract<QueryEvent, {
10
+ type: 'tool_call';
11
+ }>;
12
+ type ToolResultEvent = Extract<QueryEvent, {
13
+ type: 'tool_result';
14
+ }>;
15
+ export interface ToolEventPresenter {
16
+ start(event: ToolCallEvent): void;
17
+ finish(event: ToolResultEvent): void;
18
+ }
19
+ export declare function createToolEventPresenter(events: UiEventSink): ToolEventPresenter;
20
+ export interface RunInputOptions {
21
+ abortSignal?: AbortSignal;
22
+ }
23
+ export declare class InkChatController {
24
+ private readonly runtime;
25
+ private readonly events;
26
+ constructor(runtime: OpenHorseInkRuntime, events: UiEventSink);
27
+ runInput(input: string, options?: RunInputOptions): Promise<void>;
28
+ private createCommandContext;
29
+ private runChat;
30
+ }
31
+ export declare function loadSessionIntoRuntime(runtime: OpenHorseInkRuntime, sessionId: string): string;
32
+ export declare function closeSession(runtime: OpenHorseInkRuntime): void;
33
+ export {};
34
+ //# sourceMappingURL=chat-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-controller.d.ts","sourceRoot":"","sources":["../../../src/ink-ui/controllers/chat-controller.ts"],"names":[],"mappings":"AAkBA,OAAO,EAA8C,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI9F,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAoCjE,MAAM,WAAW,wBAAwB;IACvC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,YAAY,IAAI,IAAI,CAAC;IACrB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,wBAAwB,CAiCvH;AAED,KAAK,aAAa,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,CAAC,CAAC;AAChE,KAAK,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,CAAC,CAAC;AAEpE,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAClC,MAAM,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;CACtC;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW,GAAG,kBAAkB,CAsChF;AAwBD,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,qBAAa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,mBAAmB,EAC5B,MAAM,EAAE,WAAW;IAGhC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IA4E3E,OAAO,CAAC,oBAAoB;YAyBd,OAAO;CA+MtB;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAK9F;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAQ/D"}
@@ -0,0 +1,440 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InkChatController = void 0;
4
+ exports.createAssistantStreamPresenter = createAssistantStreamPresenter;
5
+ exports.createToolEventPresenter = createToolEventPresenter;
6
+ exports.loadSessionIntoRuntime = loadSessionIntoRuntime;
7
+ exports.closeSession = closeSession;
8
+ const commands_1 = require("../../commands");
9
+ const parser_1 = require("../../commands/parser");
10
+ const session_storage_1 = require("../../services/session-storage");
11
+ const config_1 = require("../../services/config");
12
+ const framework_1 = require("../../framework");
13
+ const harness_1 = require("../../harness");
14
+ const tools_1 = require("../../tools");
15
+ const skills_1 = require("../../skills");
16
+ const ANSI_PATTERN = /\x1b\[[0-9;?]*[A-Za-z]/g;
17
+ function stripAnsi(text) {
18
+ return text.replace(ANSI_PATTERN, '');
19
+ }
20
+ function isAbortError(error, abortSignal) {
21
+ if (abortSignal?.aborted)
22
+ return true;
23
+ if (error instanceof Error) {
24
+ return error.name === 'AbortError' || error.message.toLowerCase().includes('aborted');
25
+ }
26
+ return false;
27
+ }
28
+ function compactToolArgs(args) {
29
+ for (const key of ['path', 'command', 'pattern']) {
30
+ const value = args[key];
31
+ if (typeof value === 'string') {
32
+ return value.length > 56 ? `${value.slice(0, 53)}...` : value;
33
+ }
34
+ }
35
+ const firstString = Object.values(args).find(value => typeof value === 'string');
36
+ if (typeof firstString === 'string') {
37
+ return firstString.length > 56 ? `${firstString.slice(0, 53)}...` : firstString;
38
+ }
39
+ return '';
40
+ }
41
+ function toolSummary(name, args, success, duration) {
42
+ const details = compactToolArgs(args);
43
+ const suffix = details ? ` ${details}` : '';
44
+ return `${success ? '✓' : '✗'} ${name}${suffix} (${duration}ms)`;
45
+ }
46
+ function createAssistantStreamPresenter(events, abortSignal) {
47
+ let activeEntryId = null;
48
+ let activeSegmentText = '';
49
+ return {
50
+ appendChunk(chunk) {
51
+ if (abortSignal?.aborted || !chunk)
52
+ return;
53
+ activeSegmentText += chunk;
54
+ if (!activeEntryId) {
55
+ activeEntryId = events.append({
56
+ role: 'assistant',
57
+ content: activeSegmentText,
58
+ });
59
+ }
60
+ else {
61
+ events.update(activeEntryId, { content: activeSegmentText });
62
+ }
63
+ },
64
+ closeSegment() {
65
+ activeEntryId = null;
66
+ activeSegmentText = '';
67
+ },
68
+ ensureMessage(content) {
69
+ if (abortSignal?.aborted || !content || activeSegmentText.length > 0)
70
+ return;
71
+ activeSegmentText = content;
72
+ activeEntryId = events.append({
73
+ role: 'assistant',
74
+ content,
75
+ });
76
+ },
77
+ };
78
+ }
79
+ function createToolEventPresenter(events) {
80
+ const runningToolEntries = new Map();
81
+ return {
82
+ start(event) {
83
+ const detail = compactToolArgs(event.args);
84
+ const entryId = events.append({
85
+ role: 'tool',
86
+ title: 'tool',
87
+ content: `Running ${event.name}${detail ? ` ${detail}` : ''}`,
88
+ });
89
+ runningToolEntries.set(event.callId, entryId);
90
+ },
91
+ finish(event) {
92
+ const content = [
93
+ toolSummary(event.name, event.args, event.success, event.duration),
94
+ event.error ? `Error: ${event.error}` : '',
95
+ ].filter(Boolean).join('\n');
96
+ const existingEntryId = runningToolEntries.get(event.callId);
97
+ if (existingEntryId) {
98
+ events.update(existingEntryId, {
99
+ role: event.success ? 'tool' : 'error',
100
+ title: 'tool',
101
+ content,
102
+ });
103
+ runningToolEntries.delete(event.callId);
104
+ return;
105
+ }
106
+ events.append({
107
+ role: event.success ? 'tool' : 'error',
108
+ title: 'tool',
109
+ content,
110
+ });
111
+ },
112
+ };
113
+ }
114
+ async function captureConsoleOutput(fn) {
115
+ const lines = [];
116
+ const originalLog = console.log;
117
+ const originalError = console.error;
118
+ const originalWarn = console.warn;
119
+ const capture = (...args) => {
120
+ lines.push(stripAnsi(args.map(arg => typeof arg === 'string' ? arg : JSON.stringify(arg)).join(' ')));
121
+ };
122
+ console.log = capture;
123
+ console.error = capture;
124
+ console.warn = capture;
125
+ try {
126
+ const result = await fn();
127
+ return { result, output: lines.join('\n').trim() };
128
+ }
129
+ finally {
130
+ console.log = originalLog;
131
+ console.error = originalError;
132
+ console.warn = originalWarn;
133
+ }
134
+ }
135
+ class InkChatController {
136
+ constructor(runtime, events) {
137
+ this.runtime = runtime;
138
+ this.events = events;
139
+ }
140
+ async runInput(input, options = {}) {
141
+ const text = input.trim();
142
+ if (!text)
143
+ return;
144
+ const parsed = (0, parser_1.parseInput)(text);
145
+ if (!parsed.isCommand) {
146
+ await this.runChat(text, options.abortSignal);
147
+ return;
148
+ }
149
+ if (parsed.name === 'clear') {
150
+ this.events.clearTranscript();
151
+ this.events.setStatus('View cleared. Conversation context is preserved.');
152
+ return;
153
+ }
154
+ if (parsed.name === 'exit' || parsed.name === 'quit' || parsed.name === 'q') {
155
+ await this.runtime.shutdown();
156
+ return;
157
+ }
158
+ const command = (0, commands_1.findCommand)(parsed.name);
159
+ if (!command) {
160
+ if ((0, skills_1.hasMatchingSkill)(text)) {
161
+ await this.runChat(text, options.abortSignal);
162
+ return;
163
+ }
164
+ const suggestions = (0, parser_1.buildCommandSuggestions)(parsed.name);
165
+ this.events.append({
166
+ role: 'error',
167
+ title: 'unknown command',
168
+ content: suggestions.length > 0
169
+ ? `Unknown command: /${parsed.name}\nDid you mean: ${suggestions.map(item => `/${item}`).join(', ')}?`
170
+ : `Unknown command: /${parsed.name}`,
171
+ });
172
+ return;
173
+ }
174
+ const ctx = this.createCommandContext(options.abortSignal);
175
+ const { result, output } = await captureConsoleOutput(() => command.execute(ctx, parsed.args));
176
+ if (output) {
177
+ this.events.append({
178
+ role: result.success ? 'system' : 'error',
179
+ title: `/${command.name}`,
180
+ content: output,
181
+ });
182
+ }
183
+ if (result.output) {
184
+ this.events.append({
185
+ role: result.success ? 'system' : 'error',
186
+ title: `/${command.name}`,
187
+ content: result.output,
188
+ });
189
+ }
190
+ if (result.error) {
191
+ this.events.append({
192
+ role: 'error',
193
+ title: `/${command.name}`,
194
+ content: result.error,
195
+ });
196
+ }
197
+ if (result.sessionPicker) {
198
+ this.events.showSessionPicker(result.sessionPicker);
199
+ return;
200
+ }
201
+ if (result.continueAsChat) {
202
+ await this.runChat(result.chatInput ?? parsed.args, options.abortSignal);
203
+ }
204
+ }
205
+ createCommandContext(abortSignal) {
206
+ return {
207
+ cwd: this.runtime.cwd,
208
+ config: this.runtime.config,
209
+ store: this.runtime.store,
210
+ llm: this.runtime.llm,
211
+ runtime: this.runtime.runtime,
212
+ sessionId: this.runtime.getSession()?.id,
213
+ ensureSession: this.runtime.ensureSession,
214
+ setSession: session => this.runtime.setSession(session),
215
+ getSession: this.runtime.getSession,
216
+ abortSignal,
217
+ writeOutput: text => {
218
+ if (text.trim()) {
219
+ this.events.append({ role: 'system', content: text });
220
+ }
221
+ },
222
+ writeLine: text => {
223
+ if (text?.trim()) {
224
+ this.events.append({ role: 'system', content: text });
225
+ }
226
+ },
227
+ };
228
+ }
229
+ async runChat(input, abortSignal) {
230
+ if (!input) {
231
+ this.events.append({ role: 'error', content: 'Usage: /chat <message>' });
232
+ return;
233
+ }
234
+ if (!this.runtime.llm || !(0, config_1.isConfigured)(this.runtime.config)) {
235
+ this.events.append({
236
+ role: 'error',
237
+ content: 'LLM is not configured. Set OPENHORSE_API_KEY in ~/.openhorse/openhorse.json or environment.',
238
+ });
239
+ return;
240
+ }
241
+ const activeSession = this.runtime.getSession() ?? this.runtime.ensureSession() ?? (0, session_storage_1.loadSessionMeta)(this.runtime.getSession()?.id ?? '');
242
+ const sessionId = activeSession?.id;
243
+ const runtimeTools = (0, tools_1.getRuntimeTools)();
244
+ const skillResolution = (0, skills_1.resolveSkillsForTurn)({
245
+ cwd: this.runtime.cwd,
246
+ input,
247
+ tools: runtimeTools,
248
+ projectPath: activeSession?.projectPath,
249
+ sessionId,
250
+ });
251
+ const appliedSkillNames = skillResolution.skills.map(skill => skill.name);
252
+ if (sessionId) {
253
+ (0, session_storage_1.appendSessionMessage)(sessionId, {
254
+ role: 'user',
255
+ content: input,
256
+ timestamp: Date.now(),
257
+ appliedSkills: appliedSkillNames.length > 0 ? appliedSkillNames : undefined,
258
+ });
259
+ }
260
+ this.runtime.store.addMessage({ role: 'user', content: input });
261
+ const snapshot = this.runtime.store.getSnapshot();
262
+ const harness = (0, harness_1.createContextHarness)({
263
+ cwd: this.runtime.cwd,
264
+ modelId: this.runtime.llm.getModel(),
265
+ state: snapshot.harnessState,
266
+ config: {
267
+ enabled: true,
268
+ driftGuard: 'warn',
269
+ completionGate: true,
270
+ },
271
+ });
272
+ const intent = harness.updateContractFromUserInput(input);
273
+ harness.recordAppliedSkills(skillResolution.skills);
274
+ const promptCtx = {
275
+ cwd: this.runtime.cwd,
276
+ platform: process.platform,
277
+ nodeVersion: process.version,
278
+ tools: skillResolution.tools,
279
+ memoryContent: snapshot.memoryContent,
280
+ skillsContent: snapshot.skillsContent,
281
+ activeSkillsContent: skillResolution.promptInjection,
282
+ };
283
+ const systemPrompt = (0, framework_1.getSystemPrompt)(promptCtx);
284
+ const messages = [{ role: 'system', content: systemPrompt }, ...snapshot.conversationHistory];
285
+ let finalContent = '';
286
+ let finalUsage;
287
+ let finalModel = '';
288
+ const sessionMessagesToRecord = [];
289
+ const assistantStream = createAssistantStreamPresenter(this.events, abortSignal);
290
+ const toolEvents = createToolEventPresenter(this.events);
291
+ const streamCallbacks = {
292
+ onChunk: chunk => {
293
+ assistantStream.appendChunk(chunk);
294
+ },
295
+ };
296
+ const toolExecutor = async (name, args, signal) => {
297
+ if (!skillResolution.tools.some(tool => tool.name === name)) {
298
+ return JSON.stringify({
299
+ success: false,
300
+ error: skillResolution.toolScopeActive
301
+ ? `Tool ${name} is not available for the active skill scope. Available tools: ${skillResolution.tools.map(tool => tool.name).join(', ') || 'none'}`
302
+ : `Tool ${name} is not available.`,
303
+ });
304
+ }
305
+ return (0, tools_1.executeTool)(name, args, signal);
306
+ };
307
+ try {
308
+ for await (const event of (0, framework_1.query)({
309
+ messages,
310
+ tools: skillResolution.tools,
311
+ toolExecutor,
312
+ llm: this.runtime.llm,
313
+ streamCallbacks,
314
+ costTracker: snapshot.costTracker,
315
+ permissionMode: snapshot.permissionMode,
316
+ toolConfirmation: this.runtime.config.toolConfirmation,
317
+ toolContext: {
318
+ cwd: this.runtime.cwd,
319
+ config: {
320
+ name: this.runtime.config.name,
321
+ mode: this.runtime.config.mode,
322
+ },
323
+ },
324
+ abortSignal,
325
+ harness,
326
+ input,
327
+ })) {
328
+ switch (event.type) {
329
+ case 'request_start':
330
+ this.events.setStatus(`Turn ${event.turn}...`);
331
+ break;
332
+ case 'assistant_tool_calls':
333
+ assistantStream.ensureMessage(event.content || '');
334
+ assistantStream.closeSegment();
335
+ sessionMessagesToRecord.push({
336
+ role: 'assistant',
337
+ content: event.content || '',
338
+ timestamp: Date.now(),
339
+ tool_calls: event.toolCalls,
340
+ });
341
+ break;
342
+ case 'tool_call':
343
+ assistantStream.closeSegment();
344
+ toolEvents.start(event);
345
+ break;
346
+ case 'tool_result': {
347
+ toolEvents.finish(event);
348
+ sessionMessagesToRecord.push({
349
+ role: 'tool',
350
+ content: event.result,
351
+ timestamp: Date.now(),
352
+ toolCallId: event.callId,
353
+ });
354
+ break;
355
+ }
356
+ case 'strategy_exhausted':
357
+ this.events.append({ role: 'status', content: event.suggestion });
358
+ break;
359
+ case 'message':
360
+ finalContent = event.content;
361
+ assistantStream.ensureMessage(event.content);
362
+ if (event.content) {
363
+ sessionMessagesToRecord.push({
364
+ role: 'assistant',
365
+ content: event.content,
366
+ timestamp: Date.now(),
367
+ });
368
+ }
369
+ break;
370
+ case 'complete':
371
+ finalContent = event.content;
372
+ finalUsage = event.usage;
373
+ finalModel = event.model;
374
+ break;
375
+ }
376
+ }
377
+ const wasAborted = abortSignal?.aborted === true;
378
+ if (wasAborted) {
379
+ this.events.setStatus('Interrupted.');
380
+ return;
381
+ }
382
+ if (finalContent) {
383
+ this.runtime.store.addMessage({ role: 'assistant', content: finalContent });
384
+ }
385
+ if (sessionId && sessionMessagesToRecord.length > 0) {
386
+ (0, session_storage_1.appendSessionMessages)(sessionId, sessionMessagesToRecord);
387
+ }
388
+ if (finalUsage) {
389
+ this.runtime.store.setTokenUsage(finalUsage);
390
+ }
391
+ harness.ingestTurn({
392
+ userInput: input,
393
+ assistantContent: finalContent,
394
+ sessionMessages: sessionMessagesToRecord,
395
+ intent,
396
+ });
397
+ const harnessState = harness.toJSON();
398
+ this.runtime.store.setState({ harnessState });
399
+ if (sessionId) {
400
+ (0, session_storage_1.updateSessionSkills)(sessionId, appliedSkillNames);
401
+ (0, session_storage_1.updateSessionHarnessState)(sessionId, harnessState);
402
+ const recordedMessages = (0, session_storage_1.readSessionMessages)(sessionId);
403
+ if (recordedMessages.length > 0) {
404
+ (0, session_storage_1.updateSessionSummary)(sessionId, recordedMessages);
405
+ }
406
+ }
407
+ this.events.setStatus(finalModel ? `Completed with ${finalModel}` : 'Completed');
408
+ }
409
+ catch (error) {
410
+ if (isAbortError(error, abortSignal)) {
411
+ this.events.setStatus('Interrupted.');
412
+ return;
413
+ }
414
+ const message = error instanceof Error ? error.message : String(error);
415
+ this.events.append({ role: 'error', content: message });
416
+ const history = this.runtime.store.getSnapshot().conversationHistory;
417
+ if (history.length > 0) {
418
+ this.runtime.store.setState({ conversationHistory: history.slice(0, -1) });
419
+ }
420
+ }
421
+ }
422
+ }
423
+ exports.InkChatController = InkChatController;
424
+ function loadSessionIntoRuntime(runtime, sessionId) {
425
+ const history = (0, session_storage_1.loadSessionHistory)(sessionId);
426
+ runtime.store.setState({ conversationHistory: history });
427
+ runtime.store.setState({ harnessState: (0, session_storage_1.loadSessionHarnessState)(sessionId) ?? (0, session_storage_1.loadSessionMeta)(sessionId)?.harnessState });
428
+ return `Restored ${history.length} messages`;
429
+ }
430
+ function closeSession(runtime) {
431
+ const session = runtime.getSession();
432
+ if (!session)
433
+ return;
434
+ const messages = (0, session_storage_1.readSessionMessages)(session.id);
435
+ if (messages.length > 0) {
436
+ (0, session_storage_1.updateSessionSummary)(session.id, messages);
437
+ }
438
+ (0, session_storage_1.endSession)(session.id);
439
+ }
440
+ //# sourceMappingURL=chat-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat-controller.js","sourceRoot":"","sources":["../../../src/ink-ui/controllers/chat-controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { OpenHorseInkRuntime } from './types';
2
+ export declare function launchInkUI(runtime: OpenHorseInkRuntime): Promise<void>;
3
+ //# sourceMappingURL=launch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../src/ink-ui/launch.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,wBAAsB,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7E"}