openhorse 0.2.2 → 0.2.4

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 (245) hide show
  1. package/README.md +23 -0
  2. package/dist/cli.js +163 -22
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/index.d.ts.map +1 -1
  5. package/dist/commands/index.js +161 -22
  6. package/dist/commands/index.js.map +1 -1
  7. package/dist/framework/prompt.d.ts +4 -0
  8. package/dist/framework/prompt.d.ts.map +1 -1
  9. package/dist/framework/prompt.js +18 -0
  10. package/dist/framework/prompt.js.map +1 -1
  11. package/dist/framework/query.d.ts +7 -0
  12. package/dist/framework/query.d.ts.map +1 -1
  13. package/dist/framework/query.js +14 -0
  14. package/dist/framework/query.js.map +1 -1
  15. package/dist/framework/store.d.ts +3 -1
  16. package/dist/framework/store.d.ts.map +1 -1
  17. package/dist/framework/store.js +1 -0
  18. package/dist/framework/store.js.map +1 -1
  19. package/dist/harness/context-harness.d.ts +14 -0
  20. package/dist/harness/context-harness.d.ts.map +1 -1
  21. package/dist/harness/context-harness.js +21 -0
  22. package/dist/harness/context-harness.js.map +1 -1
  23. package/dist/harness/evidence.d.ts.map +1 -1
  24. package/dist/harness/evidence.js +2 -1
  25. package/dist/harness/evidence.js.map +1 -1
  26. package/dist/index.d.ts +0 -2
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +1 -4
  29. package/dist/index.js.map +1 -1
  30. package/dist/ink-ui/App.d.ts +4 -1
  31. package/dist/ink-ui/App.d.ts.map +1 -1
  32. package/dist/ink-ui/App.js +2 -2
  33. package/dist/ink-ui/App.js.map +1 -1
  34. package/dist/ink-ui/components/NativeCursor.d.ts +12 -0
  35. package/dist/ink-ui/components/NativeCursor.d.ts.map +1 -0
  36. package/dist/ink-ui/components/NativeCursor.js +35 -0
  37. package/dist/ink-ui/components/NativeCursor.js.map +1 -0
  38. package/dist/ink-ui/components/PromptInput.d.ts +5 -1
  39. package/dist/ink-ui/components/PromptInput.d.ts.map +1 -1
  40. package/dist/ink-ui/components/PromptInput.js +10 -6
  41. package/dist/ink-ui/components/PromptInput.js.map +1 -1
  42. package/dist/ink-ui/components/RunningHorseIndicator.d.ts +1 -1
  43. package/dist/ink-ui/components/RunningHorseIndicator.d.ts.map +1 -1
  44. package/dist/ink-ui/components/RunningHorseIndicator.js +3 -41
  45. package/dist/ink-ui/components/RunningHorseIndicator.js.map +1 -1
  46. package/dist/ink-ui/components/SelectList.d.ts +2 -1
  47. package/dist/ink-ui/components/SelectList.d.ts.map +1 -1
  48. package/dist/ink-ui/components/SelectList.js +26 -11
  49. package/dist/ink-ui/components/SelectList.js.map +1 -1
  50. package/dist/ink-ui/components/StatusLine.d.ts.map +1 -1
  51. package/dist/ink-ui/components/StatusLine.js +22 -31
  52. package/dist/ink-ui/components/StatusLine.js.map +1 -1
  53. package/dist/ink-ui/components/TerminalCursor.d.ts +4 -2
  54. package/dist/ink-ui/components/TerminalCursor.d.ts.map +1 -1
  55. package/dist/ink-ui/components/TerminalCursor.js +18 -43
  56. package/dist/ink-ui/components/TerminalCursor.js.map +1 -1
  57. package/dist/ink-ui/components/ToolActivity.d.ts +17 -0
  58. package/dist/ink-ui/components/ToolActivity.d.ts.map +1 -0
  59. package/dist/ink-ui/components/ToolActivity.js +107 -0
  60. package/dist/ink-ui/components/ToolActivity.js.map +1 -0
  61. package/dist/ink-ui/components/Transcript.d.ts +7 -1
  62. package/dist/ink-ui/components/Transcript.d.ts.map +1 -1
  63. package/dist/ink-ui/components/Transcript.js +40 -3
  64. package/dist/ink-ui/components/Transcript.js.map +1 -1
  65. package/dist/ink-ui/controllers/chat-controller.d.ts +1 -33
  66. package/dist/ink-ui/controllers/chat-controller.d.ts.map +1 -1
  67. package/dist/ink-ui/controllers/chat-controller.js +15 -437
  68. package/dist/ink-ui/controllers/chat-controller.js.map +1 -1
  69. package/dist/ink-ui/hooks/use-raw-input-bridge.d.ts +6 -0
  70. package/dist/ink-ui/hooks/use-raw-input-bridge.d.ts.map +1 -0
  71. package/dist/ink-ui/hooks/use-raw-input-bridge.js +27 -0
  72. package/dist/ink-ui/hooks/use-raw-input-bridge.js.map +1 -0
  73. package/dist/ink-ui/hooks/use-terminal-size.d.ts +7 -0
  74. package/dist/ink-ui/hooks/use-terminal-size.d.ts.map +1 -0
  75. package/dist/ink-ui/hooks/use-terminal-size.js +34 -0
  76. package/dist/ink-ui/hooks/use-terminal-size.js.map +1 -0
  77. package/dist/ink-ui/launch.d.ts +6 -0
  78. package/dist/ink-ui/launch.d.ts.map +1 -1
  79. package/dist/ink-ui/launch.js +60 -2
  80. package/dist/ink-ui/launch.js.map +1 -1
  81. package/dist/ink-ui/runtime/grapheme.d.ts +9 -0
  82. package/dist/ink-ui/runtime/grapheme.d.ts.map +1 -0
  83. package/dist/ink-ui/runtime/grapheme.js +63 -0
  84. package/dist/ink-ui/runtime/grapheme.js.map +1 -0
  85. package/dist/ink-ui/runtime/input-buffer.d.ts +32 -0
  86. package/dist/ink-ui/runtime/input-buffer.d.ts.map +1 -0
  87. package/dist/ink-ui/runtime/input-buffer.js +165 -0
  88. package/dist/ink-ui/runtime/input-buffer.js.map +1 -0
  89. package/dist/ink-ui/runtime/layout-budget.d.ts +13 -0
  90. package/dist/ink-ui/runtime/layout-budget.d.ts.map +1 -0
  91. package/dist/ink-ui/runtime/layout-budget.js +25 -0
  92. package/dist/ink-ui/runtime/layout-budget.js.map +1 -0
  93. package/dist/ink-ui/runtime/native-cursor.d.ts +62 -0
  94. package/dist/ink-ui/runtime/native-cursor.d.ts.map +1 -0
  95. package/dist/ink-ui/runtime/native-cursor.js +423 -0
  96. package/dist/ink-ui/runtime/native-cursor.js.map +1 -0
  97. package/dist/ink-ui/runtime/prompt-layout.d.ts +20 -1
  98. package/dist/ink-ui/runtime/prompt-layout.d.ts.map +1 -1
  99. package/dist/ink-ui/runtime/prompt-layout.js +129 -11
  100. package/dist/ink-ui/runtime/prompt-layout.js.map +1 -1
  101. package/dist/ink-ui/runtime/raw-input.d.ts +4 -0
  102. package/dist/ink-ui/runtime/raw-input.d.ts.map +1 -0
  103. package/dist/ink-ui/runtime/raw-input.js +15 -0
  104. package/dist/ink-ui/runtime/raw-input.js.map +1 -0
  105. package/dist/ink-ui/runtime/stdout.d.ts +11 -0
  106. package/dist/ink-ui/runtime/stdout.d.ts.map +1 -0
  107. package/dist/ink-ui/runtime/stdout.js +82 -0
  108. package/dist/ink-ui/runtime/stdout.js.map +1 -0
  109. package/dist/ink-ui/runtime/transcript-state.d.ts +37 -0
  110. package/dist/ink-ui/runtime/transcript-state.d.ts.map +1 -0
  111. package/dist/ink-ui/runtime/transcript-state.js +89 -0
  112. package/dist/ink-ui/runtime/transcript-state.js.map +1 -0
  113. package/dist/ink-ui/screens/ReplScreen.d.ts +8 -2
  114. package/dist/ink-ui/screens/ReplScreen.d.ts.map +1 -1
  115. package/dist/ink-ui/screens/ReplScreen.js +247 -151
  116. package/dist/ink-ui/screens/ReplScreen.js.map +1 -1
  117. package/dist/ink-ui/types.d.ts +1 -42
  118. package/dist/ink-ui/types.d.ts.map +1 -1
  119. package/dist/ink-ui/types.js +15 -0
  120. package/dist/ink-ui/types.js.map +1 -1
  121. package/dist/print-ui/launch.d.ts +8 -0
  122. package/dist/print-ui/launch.d.ts.map +1 -0
  123. package/dist/print-ui/launch.js +205 -0
  124. package/dist/print-ui/launch.js.map +1 -0
  125. package/dist/runtime/agent-runtime-controller.d.ts +69 -0
  126. package/dist/runtime/agent-runtime-controller.d.ts.map +1 -0
  127. package/dist/runtime/agent-runtime-controller.js +225 -0
  128. package/dist/runtime/agent-runtime-controller.js.map +1 -0
  129. package/dist/runtime/agent-runtime-protocol.d.ts +90 -0
  130. package/dist/runtime/agent-runtime-protocol.d.ts.map +1 -0
  131. package/dist/runtime/agent-runtime-protocol.js +80 -0
  132. package/dist/runtime/agent-runtime-protocol.js.map +1 -0
  133. package/dist/runtime/chat-controller.d.ts +41 -0
  134. package/dist/runtime/chat-controller.d.ts.map +1 -0
  135. package/dist/runtime/chat-controller.js +577 -0
  136. package/dist/runtime/chat-controller.js.map +1 -0
  137. package/dist/runtime/ui-events.d.ts +59 -0
  138. package/dist/runtime/ui-events.d.ts.map +1 -0
  139. package/dist/runtime/ui-events.js +3 -0
  140. package/dist/runtime/ui-events.js.map +1 -0
  141. package/dist/services/commit-plan.d.ts +17 -0
  142. package/dist/services/commit-plan.d.ts.map +1 -0
  143. package/dist/services/commit-plan.js +161 -0
  144. package/dist/services/commit-plan.js.map +1 -0
  145. package/dist/services/compact/auto-compact.d.ts.map +1 -1
  146. package/dist/services/compact/auto-compact.js +3 -2
  147. package/dist/services/compact/auto-compact.js.map +1 -1
  148. package/dist/services/compact/compact.d.ts +3 -0
  149. package/dist/services/compact/compact.d.ts.map +1 -1
  150. package/dist/services/compact/compact.js +4 -1
  151. package/dist/services/compact/compact.js.map +1 -1
  152. package/dist/services/compact/summary-generator.d.ts +11 -0
  153. package/dist/services/compact/summary-generator.d.ts.map +1 -1
  154. package/dist/services/compact/summary-generator.js +57 -0
  155. package/dist/services/compact/summary-generator.js.map +1 -1
  156. package/dist/services/config.d.ts +3 -2
  157. package/dist/services/config.d.ts.map +1 -1
  158. package/dist/services/config.js +7 -6
  159. package/dist/services/config.js.map +1 -1
  160. package/dist/services/doctor.d.ts +33 -0
  161. package/dist/services/doctor.d.ts.map +1 -0
  162. package/dist/services/doctor.js +211 -0
  163. package/dist/services/doctor.js.map +1 -0
  164. package/dist/services/file-context.d.ts +21 -0
  165. package/dist/services/file-context.d.ts.map +1 -0
  166. package/dist/services/file-context.js +194 -0
  167. package/dist/services/file-context.js.map +1 -0
  168. package/dist/services/global-config.d.ts +1 -1
  169. package/dist/services/global-config.d.ts.map +1 -1
  170. package/dist/services/project-instructions.d.ts +16 -0
  171. package/dist/services/project-instructions.d.ts.map +1 -0
  172. package/dist/services/project-instructions.js +135 -0
  173. package/dist/services/project-instructions.js.map +1 -0
  174. package/dist/services/prompt-context.d.ts +3 -0
  175. package/dist/services/prompt-context.d.ts.map +1 -0
  176. package/dist/services/prompt-context.js +13 -0
  177. package/dist/services/prompt-context.js.map +1 -0
  178. package/dist/services/session-index.d.ts +45 -0
  179. package/dist/services/session-index.d.ts.map +1 -0
  180. package/dist/services/session-index.js +183 -0
  181. package/dist/services/session-index.js.map +1 -0
  182. package/dist/services/session-storage.d.ts +3 -0
  183. package/dist/services/session-storage.d.ts.map +1 -1
  184. package/dist/services/session-storage.js +21 -0
  185. package/dist/services/session-storage.js.map +1 -1
  186. package/dist/services/workspace-diff.d.ts +27 -0
  187. package/dist/services/workspace-diff.d.ts.map +1 -0
  188. package/dist/services/workspace-diff.js +129 -0
  189. package/dist/services/workspace-diff.js.map +1 -0
  190. package/dist/terminal-ui/completion.d.ts +6 -0
  191. package/dist/terminal-ui/completion.d.ts.map +1 -0
  192. package/dist/terminal-ui/completion.js +80 -0
  193. package/dist/terminal-ui/completion.js.map +1 -0
  194. package/dist/terminal-ui/editor.d.ts +17 -0
  195. package/dist/terminal-ui/editor.d.ts.map +1 -0
  196. package/dist/terminal-ui/editor.js +42 -0
  197. package/dist/terminal-ui/editor.js.map +1 -0
  198. package/dist/terminal-ui/launch.d.ts +23 -0
  199. package/dist/terminal-ui/launch.d.ts.map +1 -0
  200. package/dist/terminal-ui/launch.js +567 -0
  201. package/dist/terminal-ui/launch.js.map +1 -0
  202. package/dist/terminal-ui/raw-editor.d.ts +57 -0
  203. package/dist/terminal-ui/raw-editor.d.ts.map +1 -0
  204. package/dist/terminal-ui/raw-editor.js +339 -0
  205. package/dist/terminal-ui/raw-editor.js.map +1 -0
  206. package/dist/tools/index.d.ts.map +1 -1
  207. package/dist/tools/index.js +269 -25
  208. package/dist/tools/index.js.map +1 -1
  209. package/dist/tui-core/frame.d.ts +25 -0
  210. package/dist/tui-core/frame.d.ts.map +1 -0
  211. package/dist/tui-core/frame.js +104 -0
  212. package/dist/tui-core/frame.js.map +1 -0
  213. package/dist/tui-core/input-parser.d.ts +25 -0
  214. package/dist/tui-core/input-parser.d.ts.map +1 -0
  215. package/dist/tui-core/input-parser.js +207 -0
  216. package/dist/tui-core/input-parser.js.map +1 -0
  217. package/dist/tui-core/terminal-writer.d.ts +34 -0
  218. package/dist/tui-core/terminal-writer.d.ts.map +1 -0
  219. package/dist/tui-core/terminal-writer.js +92 -0
  220. package/dist/tui-core/terminal-writer.js.map +1 -0
  221. package/dist/tui-ui/launch.d.ts +7 -0
  222. package/dist/tui-ui/launch.d.ts.map +1 -0
  223. package/dist/tui-ui/launch.js +194 -0
  224. package/dist/tui-ui/launch.js.map +1 -0
  225. package/dist/tui-ui/layout.d.ts +9 -0
  226. package/dist/tui-ui/layout.d.ts.map +1 -0
  227. package/dist/tui-ui/layout.js +239 -0
  228. package/dist/tui-ui/layout.js.map +1 -0
  229. package/dist/tui-ui/pickers.d.ts +13 -0
  230. package/dist/tui-ui/pickers.d.ts.map +1 -0
  231. package/dist/tui-ui/pickers.js +79 -0
  232. package/dist/tui-ui/pickers.js.map +1 -0
  233. package/dist/tui-ui/runner.d.ts +43 -0
  234. package/dist/tui-ui/runner.d.ts.map +1 -0
  235. package/dist/tui-ui/runner.js +387 -0
  236. package/dist/tui-ui/runner.js.map +1 -0
  237. package/dist/tui-ui/state.d.ts +106 -0
  238. package/dist/tui-ui/state.d.ts.map +1 -0
  239. package/dist/tui-ui/state.js +202 -0
  240. package/dist/tui-ui/state.js.map +1 -0
  241. package/dist/utils/token-estimate.d.ts +42 -0
  242. package/dist/utils/token-estimate.d.ts.map +1 -0
  243. package/dist/utils/token-estimate.js +150 -0
  244. package/dist/utils/token-estimate.js.map +1 -0
  245. package/package.json +1 -1
@@ -1,440 +1,18 @@
1
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
+ };
2
16
  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
- }
17
+ __exportStar(require("../../runtime/chat-controller"), exports);
440
18
  //# sourceMappingURL=chat-controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat-controller.js","sourceRoot":"","sources":["../../../src/ink-ui/controllers/chat-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat-controller.js","sourceRoot":"","sources":["../../../src/ink-ui/controllers/chat-controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C"}
@@ -0,0 +1,6 @@
1
+ import { type MutableRefObject } from 'react';
2
+ export type CtrlCHandler = (options?: {
3
+ allowRapidRepeat?: boolean;
4
+ }) => void;
5
+ export declare function useRawInputBridge(onCtrlC: CtrlCHandler): MutableRefObject<string>;
6
+ //# sourceMappingURL=use-raw-input-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-raw-input-bridge.d.ts","sourceRoot":"","sources":["../../../src/ink-ui/hooks/use-raw-input-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAGjE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,CAAC,EAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,KAAK,IAAI,CAAC;AAE9E,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAuBjF"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useRawInputBridge = useRawInputBridge;
4
+ const react_1 = require("react");
5
+ const raw_input_1 = require("../runtime/raw-input");
6
+ function useRawInputBridge(onCtrlC) {
7
+ const lastRawInputRef = (0, react_1.useRef)('');
8
+ (0, react_1.useEffect)(() => {
9
+ const onSignal = () => onCtrlC();
10
+ const onData = (chunk) => {
11
+ const rawInput = String(chunk);
12
+ lastRawInputRef.current = rawInput;
13
+ const ctrlCCount = (0, raw_input_1.countCtrlCEvents)(rawInput);
14
+ for (let index = 0; index < ctrlCCount; index += 1) {
15
+ onCtrlC({ allowRapidRepeat: index > 0 });
16
+ }
17
+ };
18
+ process.on('SIGINT', onSignal);
19
+ process.stdin.prependListener('data', onData);
20
+ return () => {
21
+ process.off('SIGINT', onSignal);
22
+ process.stdin.off('data', onData);
23
+ };
24
+ }, [onCtrlC]);
25
+ return lastRawInputRef;
26
+ }
27
+ //# sourceMappingURL=use-raw-input-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-raw-input-bridge.js","sourceRoot":"","sources":["../../../src/ink-ui/hooks/use-raw-input-bridge.ts"],"names":[],"mappings":";;AAKA,8CAuBC;AA5BD,iCAAiE;AACjE,oDAAwD;AAIxD,SAAgB,iBAAiB,CAAC,OAAqB;IACrD,MAAM,eAAe,GAAG,IAAA,cAAM,EAAC,EAAE,CAAC,CAAC;IAEnC,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,CAAC,KAAsB,EAAE,EAAE;YACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC/B,eAAe,CAAC,OAAO,GAAG,QAAQ,CAAC;YACnC,MAAM,UAAU,GAAG,IAAA,4BAAgB,EAAC,QAAQ,CAAC,CAAC;YAC9C,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;gBACnD,OAAO,CAAC,EAAE,gBAAgB,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC;QAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9C,OAAO,GAAG,EAAE;YACV,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAChC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAEd,OAAO,eAAe,CAAC;AACzB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface TerminalSize {
2
+ width: number;
3
+ height: number;
4
+ }
5
+ export declare function readTerminalSize(stdout?: Pick<NodeJS.WriteStream, 'columns' | 'rows'>, fallback?: Pick<NodeJS.WriteStream, 'columns' | 'rows'>): TerminalSize;
6
+ export declare function useTerminalSize(stdout?: NodeJS.WriteStream): TerminalSize;
7
+ //# sourceMappingURL=use-terminal-size.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-terminal-size.d.ts","sourceRoot":"","sources":["../../../src/ink-ui/hooks/use-terminal-size.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,GAAG,MAAM,CAAC,EACrD,QAAQ,GAAE,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,GAAG,MAAM,CAAkB,GACtE,YAAY,CAKd;AAED,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,GAAG,YAAY,CAyBzE"}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readTerminalSize = readTerminalSize;
4
+ exports.useTerminalSize = useTerminalSize;
5
+ const react_1 = require("react");
6
+ function readTerminalSize(stdout, fallback = process.stdout) {
7
+ return {
8
+ width: stdout?.columns || fallback.columns || 80,
9
+ height: stdout?.rows || fallback.rows || 24,
10
+ };
11
+ }
12
+ function useTerminalSize(stdout) {
13
+ const [terminalSize, setTerminalSize] = (0, react_1.useState)(() => readTerminalSize(stdout));
14
+ const latestSize = readTerminalSize(stdout);
15
+ (0, react_1.useEffect)(() => {
16
+ const output = stdout ?? process.stdout;
17
+ const updateSize = () => setTerminalSize(readTerminalSize(output));
18
+ updateSize();
19
+ output.on?.('resize', updateSize);
20
+ if (output !== process.stdout) {
21
+ process.stdout.on?.('resize', updateSize);
22
+ }
23
+ return () => {
24
+ output.off?.('resize', updateSize);
25
+ if (output !== process.stdout) {
26
+ process.stdout.off?.('resize', updateSize);
27
+ }
28
+ };
29
+ }, [stdout]);
30
+ return terminalSize.width === latestSize.width && terminalSize.height === latestSize.height
31
+ ? terminalSize
32
+ : latestSize;
33
+ }
34
+ //# sourceMappingURL=use-terminal-size.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-terminal-size.js","sourceRoot":"","sources":["../../../src/ink-ui/hooks/use-terminal-size.ts"],"names":[],"mappings":";;AAOA,4CAQC;AAED,0CAyBC;AA1CD,iCAA4C;AAO5C,SAAgB,gBAAgB,CAC9B,MAAqD,EACrD,WAAyD,OAAO,CAAC,MAAM;IAEvE,OAAO;QACL,KAAK,EAAE,MAAM,EAAE,OAAO,IAAI,QAAQ,CAAC,OAAO,IAAI,EAAE;QAChD,MAAM,EAAE,MAAM,EAAE,IAAI,IAAI,QAAQ,CAAC,IAAI,IAAI,EAAE;KAC5C,CAAC;AACJ,CAAC;AAED,SAAgB,eAAe,CAAC,MAA2B;IACzD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,IAAA,gBAAQ,EAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE5C,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;QACxC,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,eAAe,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC;QAEnE,UAAU,EAAE,CAAC;QACb,MAAM,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAClC,IAAI,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YACnC,IAAI,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC9B,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,YAAY,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK,IAAI,YAAY,CAAC,MAAM,KAAK,UAAU,CAAC,MAAM;QACzF,CAAC,CAAC,YAAY;QACd,CAAC,CAAC,UAAU,CAAC;AACjB,CAAC"}
@@ -1,3 +1,9 @@
1
1
  import type { OpenHorseInkRuntime } from './types';
2
+ type RawModeStream = NodeJS.ReadStream & {
3
+ isRaw?: boolean;
4
+ setRawMode?: (mode: boolean) => NodeJS.ReadStream;
5
+ };
6
+ export declare function prepareInkStdin(stdin?: RawModeStream): () => void;
2
7
  export declare function launchInkUI(runtime: OpenHorseInkRuntime): Promise<void>;
8
+ export {};
3
9
  //# sourceMappingURL=launch.d.ts.map
@@ -1 +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"}
1
+ {"version":3,"file":"launch.d.ts","sourceRoot":"","sources":["../../src/ink-ui/launch.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,KAAK,aAAa,GAAG,MAAM,CAAC,UAAU,GAAG;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC,UAAU,CAAC;CACnD,CAAC;AAEF,wBAAgB,eAAe,CAAC,KAAK,GAAE,aAA6B,GAAG,MAAM,IAAI,CAehF;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C7E"}