@roackb2/heddle 0.0.7 → 0.0.8

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 (203) hide show
  1. package/README.md +120 -2
  2. package/dist/examples/heartbeat.d.ts +2 -0
  3. package/dist/examples/heartbeat.d.ts.map +1 -0
  4. package/dist/examples/heartbeat.js +61 -0
  5. package/dist/examples/heartbeat.js.map +1 -0
  6. package/dist/examples/programmatic-loop.d.ts +2 -0
  7. package/dist/examples/programmatic-loop.d.ts.map +1 -0
  8. package/dist/examples/programmatic-loop.js +126 -0
  9. package/dist/examples/programmatic-loop.js.map +1 -0
  10. package/dist/src/cli/ask.d.ts.map +1 -1
  11. package/dist/src/cli/ask.js +10 -41
  12. package/dist/src/cli/ask.js.map +1 -1
  13. package/dist/src/cli/chat/hooks/useAgentRun.d.ts.map +1 -1
  14. package/dist/src/cli/chat/hooks/useAgentRun.js +14 -25
  15. package/dist/src/cli/chat/hooks/useAgentRun.js.map +1 -1
  16. package/dist/src/cli/chat/utils/runtime.d.ts.map +1 -1
  17. package/dist/src/cli/chat/utils/runtime.js +3 -19
  18. package/dist/src/cli/chat/utils/runtime.js.map +1 -1
  19. package/dist/src/cli/main.js +0 -0
  20. package/dist/src/index.d.ts +12 -0
  21. package/dist/src/index.d.ts.map +1 -1
  22. package/dist/src/index.js +6 -0
  23. package/dist/src/index.js.map +1 -1
  24. package/dist/src/llm/factory.d.ts +1 -1
  25. package/dist/src/llm/factory.d.ts.map +1 -1
  26. package/dist/src/llm/factory.js +2 -19
  27. package/dist/src/llm/factory.js.map +1 -1
  28. package/dist/src/llm/providers.d.ts +3 -0
  29. package/dist/src/llm/providers.d.ts.map +1 -0
  30. package/dist/src/llm/providers.js +21 -0
  31. package/dist/src/llm/providers.js.map +1 -0
  32. package/dist/src/runtime/agent-loop.d.ts +42 -0
  33. package/dist/src/runtime/agent-loop.d.ts.map +1 -0
  34. package/dist/src/runtime/agent-loop.js +118 -0
  35. package/dist/src/runtime/agent-loop.js.map +1 -0
  36. package/dist/src/runtime/api-keys.d.ts +8 -0
  37. package/dist/src/runtime/api-keys.d.ts.map +1 -0
  38. package/dist/src/runtime/api-keys.js +25 -0
  39. package/dist/src/runtime/api-keys.js.map +1 -0
  40. package/dist/src/runtime/default-tools.d.ts +12 -0
  41. package/dist/src/runtime/default-tools.d.ts.map +1 -0
  42. package/dist/src/runtime/default-tools.js +40 -0
  43. package/dist/src/runtime/default-tools.js.map +1 -0
  44. package/dist/src/runtime/events.d.ts +62 -0
  45. package/dist/src/runtime/events.d.ts.map +1 -0
  46. package/dist/src/runtime/events.js +30 -0
  47. package/dist/src/runtime/events.js.map +1 -0
  48. package/dist/src/runtime/heartbeat-store.d.ts +20 -0
  49. package/dist/src/runtime/heartbeat-store.d.ts.map +1 -0
  50. package/dist/src/runtime/heartbeat-store.js +42 -0
  51. package/dist/src/runtime/heartbeat-store.js.map +1 -0
  52. package/dist/src/runtime/heartbeat.d.ts +39 -0
  53. package/dist/src/runtime/heartbeat.d.ts.map +1 -0
  54. package/dist/src/runtime/heartbeat.js +72 -0
  55. package/dist/src/runtime/heartbeat.js.map +1 -0
  56. package/dist/src/utils/logger.d.ts.map +1 -1
  57. package/dist/src/utils/logger.js +2 -2
  58. package/dist/src/utils/logger.js.map +1 -1
  59. package/package.json +18 -2
  60. package/dist/src/__tests__/chat-activity-format.test.d.ts +0 -2
  61. package/dist/src/__tests__/chat-activity-format.test.d.ts.map +0 -1
  62. package/dist/src/__tests__/chat-activity-format.test.js +0 -41
  63. package/dist/src/__tests__/chat-activity-format.test.js.map +0 -1
  64. package/dist/src/__tests__/chat-compaction.test.d.ts +0 -2
  65. package/dist/src/__tests__/chat-compaction.test.d.ts.map +0 -1
  66. package/dist/src/__tests__/chat-compaction.test.js +0 -63
  67. package/dist/src/__tests__/chat-compaction.test.js.map +0 -1
  68. package/dist/src/__tests__/chat-format.test.d.ts +0 -2
  69. package/dist/src/__tests__/chat-format.test.d.ts.map +0 -1
  70. package/dist/src/__tests__/chat-format.test.js +0 -137
  71. package/dist/src/__tests__/chat-format.test.js.map +0 -1
  72. package/dist/src/__tests__/chat-runtime.test.d.ts +0 -2
  73. package/dist/src/__tests__/chat-runtime.test.d.ts.map +0 -1
  74. package/dist/src/__tests__/chat-runtime.test.js +0 -39
  75. package/dist/src/__tests__/chat-runtime.test.js.map +0 -1
  76. package/dist/src/__tests__/core-utils.test.d.ts +0 -2
  77. package/dist/src/__tests__/core-utils.test.d.ts.map +0 -1
  78. package/dist/src/__tests__/core-utils.test.js +0 -87
  79. package/dist/src/__tests__/core-utils.test.js.map +0 -1
  80. package/dist/src/__tests__/file-mentions.test.d.ts +0 -2
  81. package/dist/src/__tests__/file-mentions.test.d.ts.map +0 -1
  82. package/dist/src/__tests__/file-mentions.test.js +0 -29
  83. package/dist/src/__tests__/file-mentions.test.js.map +0 -1
  84. package/dist/src/__tests__/llm-factory.test.d.ts +0 -2
  85. package/dist/src/__tests__/llm-factory.test.d.ts.map +0 -1
  86. package/dist/src/__tests__/llm-factory.test.js +0 -45
  87. package/dist/src/__tests__/llm-factory.test.js.map +0 -1
  88. package/dist/src/__tests__/local-commands.test.d.ts +0 -2
  89. package/dist/src/__tests__/local-commands.test.d.ts.map +0 -1
  90. package/dist/src/__tests__/local-commands.test.js +0 -153
  91. package/dist/src/__tests__/local-commands.test.js.map +0 -1
  92. package/dist/src/__tests__/project-approval-rules.test.d.ts +0 -2
  93. package/dist/src/__tests__/project-approval-rules.test.d.ts.map +0 -1
  94. package/dist/src/__tests__/project-approval-rules.test.js +0 -135
  95. package/dist/src/__tests__/project-approval-rules.test.js.map +0 -1
  96. package/dist/src/__tests__/prompt-input.test.d.ts +0 -2
  97. package/dist/src/__tests__/prompt-input.test.d.ts.map +0 -1
  98. package/dist/src/__tests__/prompt-input.test.js +0 -57
  99. package/dist/src/__tests__/prompt-input.test.js.map +0 -1
  100. package/dist/src/__tests__/prompts.test.d.ts +0 -2
  101. package/dist/src/__tests__/prompts.test.d.ts.map +0 -1
  102. package/dist/src/__tests__/prompts.test.js +0 -46
  103. package/dist/src/__tests__/prompts.test.js.map +0 -1
  104. package/dist/src/__tests__/run-agent.test.d.ts +0 -2
  105. package/dist/src/__tests__/run-agent.test.d.ts.map +0 -1
  106. package/dist/src/__tests__/run-agent.test.js +0 -1276
  107. package/dist/src/__tests__/run-agent.test.js.map +0 -1
  108. package/dist/src/__tests__/run-shell.command.test.d.ts +0 -2
  109. package/dist/src/__tests__/run-shell.command.test.d.ts.map +0 -1
  110. package/dist/src/__tests__/run-shell.command.test.js +0 -188
  111. package/dist/src/__tests__/run-shell.command.test.js.map +0 -1
  112. package/dist/src/__tests__/smoke.test.d.ts +0 -2
  113. package/dist/src/__tests__/smoke.test.d.ts.map +0 -1
  114. package/dist/src/__tests__/smoke.test.js +0 -314
  115. package/dist/src/__tests__/smoke.test.js.map +0 -1
  116. package/dist/src/__tests__/tools.test.d.ts +0 -2
  117. package/dist/src/__tests__/tools.test.d.ts.map +0 -1
  118. package/dist/src/__tests__/tools.test.js +0 -698
  119. package/dist/src/__tests__/tools.test.js.map +0 -1
  120. package/dist/src/__tests__/trace-format.test.d.ts +0 -2
  121. package/dist/src/__tests__/trace-format.test.d.ts.map +0 -1
  122. package/dist/src/__tests__/trace-format.test.js +0 -148
  123. package/dist/src/__tests__/trace-format.test.js.map +0 -1
  124. package/dist/src/cli/chat/actions.d.ts +0 -47
  125. package/dist/src/cli/chat/actions.d.ts.map +0 -1
  126. package/dist/src/cli/chat/actions.js +0 -215
  127. package/dist/src/cli/chat/actions.js.map +0 -1
  128. package/dist/src/cli/chat/format.d.ts +0 -23
  129. package/dist/src/cli/chat/format.d.ts.map +0 -1
  130. package/dist/src/cli/chat/format.js +0 -243
  131. package/dist/src/cli/chat/format.js.map +0 -1
  132. package/dist/src/cli/chat/local-commands.d.ts +0 -17
  133. package/dist/src/cli/chat/local-commands.d.ts.map +0 -1
  134. package/dist/src/cli/chat/local-commands.js +0 -180
  135. package/dist/src/cli/chat/local-commands.js.map +0 -1
  136. package/dist/src/cli/chat/panels.d.ts +0 -37
  137. package/dist/src/cli/chat/panels.d.ts.map +0 -1
  138. package/dist/src/cli/chat/panels.js +0 -142
  139. package/dist/src/cli/chat/panels.js.map +0 -1
  140. package/dist/src/cli/chat/runtime.d.ts +0 -26
  141. package/dist/src/cli/chat/runtime.d.ts.map +0 -1
  142. package/dist/src/cli/chat/runtime.js +0 -28
  143. package/dist/src/cli/chat/runtime.js.map +0 -1
  144. package/dist/src/cli/chat/storage.d.ts +0 -13
  145. package/dist/src/cli/chat/storage.d.ts.map +0 -1
  146. package/dist/src/cli/chat/storage.js +0 -126
  147. package/dist/src/cli/chat/storage.js.map +0 -1
  148. package/dist/src/cli/chat/types.d.ts +0 -51
  149. package/dist/src/cli/chat/types.d.ts.map +0 -1
  150. package/dist/src/cli/chat/types.js +0 -2
  151. package/dist/src/cli/chat/types.js.map +0 -1
  152. package/dist/src/cli/chat/use-run-state.d.ts +0 -23
  153. package/dist/src/cli/chat/use-run-state.d.ts.map +0 -1
  154. package/dist/src/cli/chat/use-run-state.js +0 -118
  155. package/dist/src/cli/chat/use-run-state.js.map +0 -1
  156. package/dist/src/cli/chat/use-sessions.d.ts +0 -21
  157. package/dist/src/cli/chat/use-sessions.d.ts.map +0 -1
  158. package/dist/src/cli/chat/use-sessions.js +0 -111
  159. package/dist/src/cli/chat/use-sessions.js.map +0 -1
  160. package/dist/src/cli/chat-actions.d.ts +0 -47
  161. package/dist/src/cli/chat-actions.d.ts.map +0 -1
  162. package/dist/src/cli/chat-actions.js +0 -215
  163. package/dist/src/cli/chat-actions.js.map +0 -1
  164. package/dist/src/cli/chat-format.d.ts +0 -23
  165. package/dist/src/cli/chat-format.d.ts.map +0 -1
  166. package/dist/src/cli/chat-format.js +0 -243
  167. package/dist/src/cli/chat-format.js.map +0 -1
  168. package/dist/src/cli/chat-local-commands.d.ts +0 -17
  169. package/dist/src/cli/chat-local-commands.d.ts.map +0 -1
  170. package/dist/src/cli/chat-local-commands.js +0 -180
  171. package/dist/src/cli/chat-local-commands.js.map +0 -1
  172. package/dist/src/cli/chat-panels.d.ts +0 -37
  173. package/dist/src/cli/chat-panels.d.ts.map +0 -1
  174. package/dist/src/cli/chat-panels.js +0 -142
  175. package/dist/src/cli/chat-panels.js.map +0 -1
  176. package/dist/src/cli/chat-runtime.d.ts +0 -26
  177. package/dist/src/cli/chat-runtime.d.ts.map +0 -1
  178. package/dist/src/cli/chat-runtime.js +0 -28
  179. package/dist/src/cli/chat-runtime.js.map +0 -1
  180. package/dist/src/cli/chat-storage.d.ts +0 -13
  181. package/dist/src/cli/chat-storage.d.ts.map +0 -1
  182. package/dist/src/cli/chat-storage.js +0 -126
  183. package/dist/src/cli/chat-storage.js.map +0 -1
  184. package/dist/src/cli/chat-submit.d.ts +0 -28
  185. package/dist/src/cli/chat-submit.d.ts.map +0 -1
  186. package/dist/src/cli/chat-submit.js +0 -90
  187. package/dist/src/cli/chat-submit.js.map +0 -1
  188. package/dist/src/cli/chat-types.d.ts +0 -51
  189. package/dist/src/cli/chat-types.d.ts.map +0 -1
  190. package/dist/src/cli/chat-types.js +0 -2
  191. package/dist/src/cli/chat-types.js.map +0 -1
  192. package/dist/src/cli/chat.d.ts +0 -4
  193. package/dist/src/cli/chat.d.ts.map +0 -1
  194. package/dist/src/cli/chat.js +0 -153
  195. package/dist/src/cli/chat.js.map +0 -1
  196. package/dist/src/cli/useChatRunState.d.ts +0 -23
  197. package/dist/src/cli/useChatRunState.d.ts.map +0 -1
  198. package/dist/src/cli/useChatRunState.js +0 -118
  199. package/dist/src/cli/useChatRunState.js.map +0 -1
  200. package/dist/src/cli/useChatSessions.d.ts +0 -21
  201. package/dist/src/cli/useChatSessions.d.ts.map +0 -1
  202. package/dist/src/cli/useChatSessions.js +0 -111
  203. package/dist/src/cli/useChatSessions.js.map +0 -1
@@ -1,243 +0,0 @@
1
- const MAX_SHELL_OUTPUT_CHARS = 1400;
2
- const MAX_TOOL_CALL_SUMMARY_CHARS = 96;
3
- export function buildConversationMessages(history) {
4
- return history.flatMap((message, index) => {
5
- if (message.role === 'user' || message.role === 'assistant') {
6
- if (!message.content.trim()) {
7
- return [];
8
- }
9
- return [{ id: `${message.role}-${index}-${message.content}`, role: message.role, text: message.content }];
10
- }
11
- return [];
12
- });
13
- }
14
- export function summarizeTrace(trace) {
15
- return trace.flatMap((event) => {
16
- switch (event.type) {
17
- case 'assistant.turn':
18
- return [
19
- ...(event.diagnostics?.rationale ? [`reasoning: ${truncate(event.diagnostics.rationale, 140)}`] : []),
20
- event.requestedTools ?
21
- `assistant requested ${event.toolCalls?.map((call) => summarizeToolCall(call.tool, call.input)).join(', ')}`
22
- : 'assistant answered',
23
- ];
24
- case 'tool.approval_requested':
25
- return [`approval requested for ${summarizeToolCall(event.call.tool, event.call.input)}`];
26
- case 'tool.approval_resolved':
27
- return [`approval ${event.approved ? 'granted' : 'denied'} for ${summarizeToolCall(event.call.tool, event.call.input)}`];
28
- case 'tool.call':
29
- return [`tool call ${summarizeToolCall(event.call.tool, event.call.input)}`];
30
- case 'tool.result':
31
- return [
32
- `tool result ${summarizeToolResult(event.tool, extractShellCommand(event.result.output))}: ${event.result.ok ? 'ok' : event.result.error ?? 'error'}`,
33
- ];
34
- case 'run.finished':
35
- return [`run finished: ${event.outcome}`];
36
- default:
37
- return [];
38
- }
39
- });
40
- }
41
- export function countAssistantSteps(trace) {
42
- return trace.filter((event) => event.type === 'assistant.turn').length;
43
- }
44
- export function toLiveEvent(event) {
45
- switch (event.type) {
46
- case 'run.started':
47
- return 'thinking';
48
- case 'assistant.turn':
49
- if (event.diagnostics?.rationale) {
50
- return `reasoning: ${truncate(event.diagnostics.rationale, 140)}`;
51
- }
52
- if (event.requestedTools) {
53
- return undefined;
54
- }
55
- return 'answer ready';
56
- case 'tool.approval_requested':
57
- return `approval needed for ${summarizeToolCall(event.call.tool, event.call.input)}`;
58
- case 'tool.approval_resolved':
59
- return `approval ${event.approved ? 'granted' : 'denied'} for ${summarizeToolCall(event.call.tool, event.call.input)}`;
60
- case 'tool.call':
61
- return `running ${summarizeToolCall(event.call.tool, event.call.input)}`;
62
- case 'tool.result':
63
- return `${summarizeToolResult(event.tool, extractShellCommand(event.result.output))} ${event.result.ok ? 'completed' : `failed: ${event.result.error ?? 'error'}`}`;
64
- case 'run.finished':
65
- return event.outcome === 'done' ? undefined : `stopped: ${event.outcome}`;
66
- default:
67
- return undefined;
68
- }
69
- }
70
- export function currentActivityText(liveEvents, isRunning, elapsedSeconds, pendingApproval, interruptRequested) {
71
- if (pendingApproval) {
72
- return formatApprovalPrompt(pendingApproval);
73
- }
74
- if (interruptRequested) {
75
- return 'interrupt requested; waiting for the current step to finish';
76
- }
77
- const current = liveEvents[liveEvents.length - 1]?.text;
78
- if (isRunning) {
79
- return current ? `${current} · ${elapsedSeconds}s` : 'waiting for first agent event...';
80
- }
81
- return current ?? 'idle';
82
- }
83
- export function formatApprovalPrompt(pendingApproval) {
84
- const command = extractShellCommand(pendingApproval.call.input);
85
- if (command) {
86
- return `Allow mutation command: ${truncate(command, 120)}`;
87
- }
88
- return `Allow ${pendingApproval.call.tool}`;
89
- }
90
- export function formatApprovalHint(pendingApproval) {
91
- return `Tool: ${pendingApproval.call.tool}`;
92
- }
93
- export function summarizeToolCall(tool, input) {
94
- const shellCommand = extractShellCommand(input);
95
- if (shellCommand) {
96
- return `${tool} (${truncate(shellCommand, MAX_TOOL_CALL_SUMMARY_CHARS)})`;
97
- }
98
- return tool;
99
- }
100
- export function summarizeToolResult(tool, command) {
101
- if (command) {
102
- return `${tool} (${truncate(command, MAX_TOOL_CALL_SUMMARY_CHARS)})`;
103
- }
104
- return tool;
105
- }
106
- export function extractShellCommand(value) {
107
- if (!value || typeof value !== 'object' || Array.isArray(value)) {
108
- return undefined;
109
- }
110
- const command = value.command;
111
- return typeof command === 'string' && command.trim() ? command.trim() : undefined;
112
- }
113
- export function truncate(value, maxLength) {
114
- if (value.length <= maxLength) {
115
- return value;
116
- }
117
- return `${value.slice(0, maxLength - 1)}…`;
118
- }
119
- export function normalizeInlineText(value) {
120
- return value.replace(/\r?\n+/g, ' ').replace(/\s+/g, ' ').trim();
121
- }
122
- export function parsePositiveInt(raw) {
123
- if (!raw) {
124
- return undefined;
125
- }
126
- const value = Number.parseInt(raw, 10);
127
- if (!Number.isFinite(value) || value <= 0) {
128
- return undefined;
129
- }
130
- return value;
131
- }
132
- export function shouldFallbackToMutate(error) {
133
- if (!error) {
134
- return false;
135
- }
136
- return error.includes('run_shell_inspect policy');
137
- }
138
- export function formatDirectShellResponse(toolName, command, result) {
139
- const lines = [
140
- 'Direct shell result',
141
- '',
142
- `Command: ${command}`,
143
- `Tool: ${toolName}`,
144
- ];
145
- const policy = extractPolicySummary(result.output);
146
- if (policy) {
147
- lines.push(`Policy: ${policy}`);
148
- }
149
- if (result.ok) {
150
- const stdout = extractTextOutput(result.output, 'stdout');
151
- const stderr = extractTextOutput(result.output, 'stderr');
152
- lines.push('Outcome: success');
153
- if (stdout) {
154
- lines.push('', 'stdout:', truncate(stdout, MAX_SHELL_OUTPUT_CHARS));
155
- }
156
- if (stderr) {
157
- lines.push('', 'stderr:', truncate(stderr, MAX_SHELL_OUTPUT_CHARS));
158
- }
159
- if (!stdout && !stderr) {
160
- lines.push('', 'No stdout or stderr output.');
161
- }
162
- return lines.join('\n');
163
- }
164
- lines.push('Outcome: failed');
165
- if (result.error) {
166
- lines.push('', `Error: ${result.error}`);
167
- }
168
- const stdout = extractTextOutput(result.output, 'stdout');
169
- const stderr = extractTextOutput(result.output, 'stderr');
170
- if (stdout) {
171
- lines.push('', 'stdout:', truncate(stdout, MAX_SHELL_OUTPUT_CHARS));
172
- }
173
- if (stderr) {
174
- lines.push('', 'stderr:', truncate(stderr, MAX_SHELL_OUTPUT_CHARS));
175
- }
176
- return lines.join('\n');
177
- }
178
- export function extractTextOutput(value, field) {
179
- if (!value || typeof value !== 'object' || Array.isArray(value)) {
180
- return undefined;
181
- }
182
- const candidate = value[field];
183
- return typeof candidate === 'string' && candidate.trim() ? candidate.trim() : undefined;
184
- }
185
- export function extractPolicySummary(value) {
186
- if (!value || typeof value !== 'object' || Array.isArray(value)) {
187
- return undefined;
188
- }
189
- const policy = value.policy;
190
- if (!policy || typeof policy !== 'object' || Array.isArray(policy)) {
191
- return undefined;
192
- }
193
- const candidate = policy;
194
- const scope = typeof candidate.scope === 'string' ? candidate.scope : undefined;
195
- const risk = typeof candidate.risk === 'string' ? candidate.risk : undefined;
196
- const reason = typeof candidate.reason === 'string' ? candidate.reason : undefined;
197
- const parts = [scope, risk, reason].filter(Boolean);
198
- return parts.length > 0 ? parts.join(' • ') : undefined;
199
- }
200
- export function isGenericSessionName(name) {
201
- return /^Session \d+$/.test(name.trim());
202
- }
203
- export function normalizeSessionTitle(value) {
204
- if (!value) {
205
- return undefined;
206
- }
207
- const normalized = value
208
- .replace(/[\r\n]+/g, ' ')
209
- .replace(/["'`]/g, '')
210
- .replace(/\s+/g, ' ')
211
- .trim();
212
- if (!normalized) {
213
- return undefined;
214
- }
215
- return truncate(normalized, 48);
216
- }
217
- export function appendDirectShellHistory(history, shellDisplay, toolName, result) {
218
- const summary = buildDirectShellHistorySummary(toolName, result);
219
- const userMessage = { role: 'user', content: shellDisplay };
220
- const assistantMessage = { role: 'assistant', content: summary };
221
- return [...history, userMessage, assistantMessage].slice(-60);
222
- }
223
- function buildDirectShellHistorySummary(toolName, result) {
224
- const lines = [`Direct shell command via ${toolName}.`];
225
- const policy = extractPolicySummary(result.output);
226
- if (policy) {
227
- lines.push(`Policy: ${policy}`);
228
- }
229
- lines.push(`Outcome: ${result.ok ? 'success' : 'failure'}`);
230
- if (result.error) {
231
- lines.push(`Error: ${result.error}`);
232
- }
233
- const stdout = extractTextOutput(result.output, 'stdout');
234
- const stderr = extractTextOutput(result.output, 'stderr');
235
- if (stdout) {
236
- lines.push(`stdout:\n${truncate(stdout, 1200)}`);
237
- }
238
- if (stderr) {
239
- lines.push(`stderr:\n${truncate(stderr, 800)}`);
240
- }
241
- return lines.join('\n\n');
242
- }
243
- //# sourceMappingURL=format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../../src/cli/chat/format.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import type { ChatSession, LocalCommandResult } from './types.js';
2
- export type LocalCommandArgs = {
3
- prompt: string;
4
- activeModel: string;
5
- setActiveModel: (model: string) => void;
6
- sessions: ChatSession[];
7
- recentSessions: ChatSession[];
8
- activeSessionId: string;
9
- switchSession: (id: string) => void;
10
- createSession: (name?: string) => ChatSession;
11
- renameSession: (name: string) => void;
12
- removeSession: (id: string) => void;
13
- clearConversation: () => void;
14
- listRecentSessionsMessage: string[];
15
- };
16
- export declare function runLocalCommand(args: LocalCommandArgs): LocalCommandResult;
17
- //# sourceMappingURL=local-commands.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-commands.d.ts","sourceRoot":"","sources":["../../../../src/cli/chat/local-commands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAKlE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,cAAc,EAAE,WAAW,EAAE,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,aAAa,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,KAAK,WAAW,CAAC;IAC9C,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,iBAAiB,EAAE,MAAM,IAAI,CAAC;IAC9B,yBAAyB,EAAE,MAAM,EAAE,CAAC;CACrC,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,gBAAgB,GAAG,kBAAkB,CA+L1E"}
@@ -1,180 +0,0 @@
1
- import { summarizeSession } from './storage.js';
2
- const knownModels = ['gpt-5.1-codex-mini', 'gpt-5.1-codex'];
3
- export function runLocalCommand(args) {
4
- const trimmed = args.prompt.trim();
5
- if (!trimmed.startsWith('/')) {
6
- return { handled: false };
7
- }
8
- if (trimmed === '/help') {
9
- return {
10
- handled: true,
11
- kind: 'message',
12
- message: [
13
- 'Local commands',
14
- '',
15
- '/model',
16
- 'Show the active model.',
17
- '',
18
- '/model <name>',
19
- 'Switch the current model.',
20
- '',
21
- '/models',
22
- 'List common model choices.',
23
- '',
24
- '/continue',
25
- 'Resume the current session from its last interrupted or prior run.',
26
- '',
27
- '/clear',
28
- 'Reset the current session transcript.',
29
- '',
30
- '/session list',
31
- 'List recent saved sessions.',
32
- '',
33
- '/session new [name]',
34
- 'Create and switch to a new session.',
35
- '',
36
- '/session switch <id>',
37
- 'Switch to another saved session.',
38
- '',
39
- '/session continue <id>',
40
- 'Switch to another saved session and immediately resume it.',
41
- '',
42
- '/session rename <name>',
43
- 'Rename the current session.',
44
- '',
45
- '/session close <id>',
46
- 'Remove a saved session.',
47
- '',
48
- '!<command>',
49
- 'Run a shell command directly in chat using the current inspect or execute policy.',
50
- '',
51
- '/help',
52
- 'Show this message.',
53
- ].join('\n'),
54
- };
55
- }
56
- if (trimmed === '/models') {
57
- return {
58
- handled: true,
59
- kind: 'message',
60
- message: `Common model choices: ${knownModels.join(', ')}`,
61
- };
62
- }
63
- if (trimmed === '/model') {
64
- return {
65
- handled: true,
66
- kind: 'message',
67
- message: `Current model: ${args.activeModel}`,
68
- };
69
- }
70
- if (trimmed.startsWith('/model ')) {
71
- const nextModel = trimmed.slice('/model '.length).trim();
72
- if (!nextModel) {
73
- return { handled: true, kind: 'message', message: 'Usage: /model <name>' };
74
- }
75
- args.setActiveModel(nextModel);
76
- return {
77
- handled: true,
78
- kind: 'message',
79
- message: knownModels.includes(nextModel) ?
80
- `Switched model to ${nextModel}`
81
- : `Switched model to ${nextModel}. This name is not in Heddle's common shortlist, so the next API call will fail if the provider does not recognize it.`,
82
- };
83
- }
84
- if (trimmed === '/clear') {
85
- args.clearConversation();
86
- return {
87
- handled: true,
88
- kind: 'message',
89
- message: 'Cleared the current chat transcript.',
90
- };
91
- }
92
- if (trimmed === '/continue') {
93
- return { handled: true, kind: 'continue' };
94
- }
95
- if (trimmed === '/session list') {
96
- return {
97
- handled: true,
98
- kind: 'message',
99
- message: args.sessions.length > 0 ? args.listRecentSessionsMessage.join('\n') : 'No sessions available.',
100
- };
101
- }
102
- if (trimmed.startsWith('/session new')) {
103
- const maybeName = trimmed.slice('/session new'.length).trim();
104
- const session = args.createSession(maybeName || undefined);
105
- return {
106
- handled: true,
107
- kind: 'message',
108
- message: `Created and switched to ${session.id} (${session.name}).`,
109
- };
110
- }
111
- if (trimmed.startsWith('/session switch ')) {
112
- const id = trimmed.slice('/session switch '.length).trim();
113
- const session = args.sessions.find((candidate) => candidate.id === id);
114
- if (!session) {
115
- return {
116
- handled: true,
117
- kind: 'message',
118
- message: `Unknown session: ${id}. Use /session list to inspect available sessions.`,
119
- };
120
- }
121
- args.switchSession(id);
122
- return {
123
- handled: true,
124
- kind: 'message',
125
- message: `Switched to ${session.id} (${session.name}).\n${summarizeSession(session)}`,
126
- };
127
- }
128
- if (trimmed.startsWith('/session continue ')) {
129
- const id = trimmed.slice('/session continue '.length).trim();
130
- const session = args.sessions.find((candidate) => candidate.id === id);
131
- if (!session) {
132
- return {
133
- handled: true,
134
- kind: 'message',
135
- message: `Unknown session: ${id}.\nUse /session list to inspect available sessions.`,
136
- };
137
- }
138
- return {
139
- handled: true,
140
- kind: 'continue',
141
- sessionId: id,
142
- message: `Switched to ${session.id} (${session.name}).\nContinuing from that session transcript.`,
143
- };
144
- }
145
- if (trimmed.startsWith('/session rename ')) {
146
- const name = trimmed.slice('/session rename '.length).trim();
147
- if (!name) {
148
- return { handled: true, kind: 'message', message: 'Usage: /session rename <name>' };
149
- }
150
- args.renameSession(name);
151
- return {
152
- handled: true,
153
- kind: 'message',
154
- message: `Renamed current session to ${name}.`,
155
- };
156
- }
157
- if (trimmed.startsWith('/session close ')) {
158
- const id = trimmed.slice('/session close '.length).trim();
159
- const session = args.sessions.find((candidate) => candidate.id === id);
160
- if (!session) {
161
- return {
162
- handled: true,
163
- kind: 'message',
164
- message: `Unknown session: ${id}.\nUse /session list to inspect available sessions.`,
165
- };
166
- }
167
- args.removeSession(id);
168
- return {
169
- handled: true,
170
- kind: 'message',
171
- message: `Closed ${session.id} (${session.name}).`,
172
- };
173
- }
174
- return {
175
- handled: true,
176
- kind: 'message',
177
- message: `Unknown command: ${trimmed}. Use /help for available commands.`,
178
- };
179
- }
180
- //# sourceMappingURL=local-commands.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"local-commands.js","sourceRoot":"","sources":["../../../../src/cli/chat/local-commands.ts"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- import type { ChatSession, ApprovalChoice, ConversationLine, LiveEvent, PendingApproval, TurnSummary } from './types.js';
2
- export declare function ConversationPanel({ messages }: {
3
- messages: ConversationLine[];
4
- }): import("react/jsx-runtime").JSX.Element;
5
- export declare function RecentTurnsPanel({ turns }: {
6
- turns: TurnSummary[];
7
- }): import("react/jsx-runtime").JSX.Element;
8
- export declare function ActivityPanel({ isRunning, workingFrame, elapsedSeconds, liveEvents, pendingApproval, interruptRequested, }: {
9
- isRunning: boolean;
10
- workingFrame: number;
11
- elapsedSeconds: number;
12
- liveEvents: LiveEvent[];
13
- pendingApproval?: PendingApproval;
14
- interruptRequested: boolean;
15
- }): import("react/jsx-runtime").JSX.Element;
16
- export declare function ApprovalComposer({ pendingApproval, approvalChoice, }: {
17
- pendingApproval: PendingApproval;
18
- approvalChoice: ApprovalChoice;
19
- }): import("react/jsx-runtime").JSX.Element;
20
- export declare function PromptInput({ value, isDisabled, placeholder, onChange, onSubmit, }: {
21
- value: string;
22
- isDisabled: boolean;
23
- placeholder: string;
24
- onChange: (value: string) => void;
25
- onSubmit: (value: string) => void;
26
- }): import("react/jsx-runtime").JSX.Element;
27
- export declare function SlashHintPanel({ draft, activeSessionId, sessions, }: {
28
- draft: string;
29
- activeSessionId: string;
30
- sessions: ChatSession[];
31
- }): import("react/jsx-runtime").JSX.Element;
32
- export declare function CommandHintPanel({ draft }: {
33
- draft: string;
34
- }): import("react/jsx-runtime").JSX.Element;
35
- export declare function shouldShowSlashHints(draft: string): boolean;
36
- export declare function shouldShowCommandHint(draft: string): boolean;
37
- //# sourceMappingURL=panels.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"panels.d.ts","sourceRoot":"","sources":["../../../../src/cli/chat/panels.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAKzH,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAA;CAAE,2CAa/E;AAED,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,WAAW,EAAE,CAAA;CAAE,2CAkBnE;AAED,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,YAAY,EACZ,cAAc,EACd,UAAU,EACV,eAAe,EACf,kBAAkB,GACnB,EAAE;IACD,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,kBAAkB,EAAE,OAAO,CAAC;CAC7B,2CAgBA;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,eAAe,EACf,cAAc,GACf,EAAE;IACD,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,EAAE,cAAc,CAAC;CAChC,2CAYA;AAgBD,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,UAAU,EACV,WAAW,EACX,QAAQ,EACR,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC,2CAoEA;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,eAAe,EACf,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB,2CAaA;AAED,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,2CAY5D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE5D"}
@@ -1,142 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useState } from 'react';
3
- import { Box, Text, useInput } from 'ink';
4
- import { currentActivityText, formatApprovalHint, formatApprovalPrompt, truncate } from './format.js';
5
- const MAX_VISIBLE_INPUT_CHARS = 96;
6
- export function ConversationPanel({ messages }) {
7
- return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Conversation" }), messages.slice(-8).map((message) => (_jsx(Box, { borderStyle: "round", borderColor: message.role === 'user' ? 'cyan' : 'gray', paddingX: 1, marginBottom: 1, children: _jsxs(Text, { color: message.role === 'user' ? 'cyan' : 'white', children: [message.role === 'user' ? 'You' : 'Heddle', ": ", message.text] }) }, message.id)))] }));
8
- }
9
- export function RecentTurnsPanel({ turns }) {
10
- const latestTurn = turns[turns.length - 1];
11
- return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Recent Turns" }), !latestTurn ?
12
- _jsx(Text, { dimColor: true, children: "No completed turns yet." })
13
- : (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { color: "magenta", children: truncate(latestTurn.prompt, 120) }), _jsxs(Text, { dimColor: true, children: ["outcome=", latestTurn.outcome, " steps=", latestTurn.steps, " trace=", latestTurn.traceFile] }), latestTurn.outcome !== 'done' ? _jsx(Text, { color: "red", children: latestTurn.summary }) : null, _jsx(Text, { dimColor: true, children: latestTurn.events.slice(0, 4).map((event) => truncate(event, 160)).join(' • ') })] }))] }));
14
- }
15
- export function ActivityPanel({ isRunning, workingFrame, elapsedSeconds, liveEvents, pendingApproval, interruptRequested, }) {
16
- const visibleEvents = isRunning ? liveEvents.slice(-3) : liveEvents.slice(-1);
17
- return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { bold: true, children: "Current Activity" }), _jsx(Text, { color: pendingApproval ? 'yellow' : interruptRequested ? 'yellow' : isRunning ? 'yellow' : 'gray', children: currentActivityText(liveEvents, isRunning, elapsedSeconds, pendingApproval, interruptRequested) }), visibleEvents.map((event) => (_jsx(Box, { children: _jsx(Text, { dimColor: true, children: truncate(event.text, 160) }) }, event.id)))] }));
18
- }
19
- export function ApprovalComposer({ pendingApproval, approvalChoice, }) {
20
- return (_jsxs(_Fragment, { children: [_jsx(Text, { color: "white", children: formatApprovalPrompt(pendingApproval) }), _jsx(Text, { dimColor: true, children: formatApprovalHint(pendingApproval) }), _jsx(ApprovalSelector, { choice: approvalChoice }), _jsxs(Box, { justifyContent: "space-between", children: [_jsx(Text, { dimColor: true, children: "Use \u2190/\u2192 then Enter" }), _jsx(Text, { dimColor: true, children: "Input paused during approval" })] })] }));
21
- }
22
- function ApprovalSelector({ choice }) {
23
- return (_jsxs(Box, { marginBottom: 0, children: [_jsx(Text, { color: choice === 'approve' ? 'green' : 'gray', children: choice === 'approve' ? '◉ Approve' : '○ Approve' }), _jsx(Text, { dimColor: true, children: " " }), _jsx(Text, { color: choice === 'deny' ? 'red' : 'gray', children: choice === 'deny' ? '◉ Deny' : '○ Deny' })] }));
24
- }
25
- export function PromptInput({ value, isDisabled, placeholder, onChange, onSubmit, }) {
26
- const [cursor, setCursor] = useState(value.length);
27
- useInput((input, key) => {
28
- if (isDisabled) {
29
- return;
30
- }
31
- if (key.return) {
32
- onSubmit(value);
33
- setCursor(0);
34
- return;
35
- }
36
- if ((key.meta && key.backspace) || (key.ctrl && input === 'u')) {
37
- onChange(value.slice(cursor));
38
- setCursor(0);
39
- return;
40
- }
41
- if (key.backspace || key.delete) {
42
- if (cursor === 0) {
43
- return;
44
- }
45
- onChange(value.slice(0, cursor - 1) + value.slice(cursor));
46
- setCursor(cursor - 1);
47
- return;
48
- }
49
- if (key.leftArrow) {
50
- setCursor(Math.max(0, cursor - 1));
51
- return;
52
- }
53
- if (key.rightArrow) {
54
- setCursor(Math.min(value.length, cursor + 1));
55
- return;
56
- }
57
- if (key.home) {
58
- setCursor(0);
59
- return;
60
- }
61
- if (key.end) {
62
- setCursor(value.length);
63
- return;
64
- }
65
- if (key.ctrl || key.meta || key.escape || key.tab) {
66
- return;
67
- }
68
- if (!input) {
69
- return;
70
- }
71
- const nextInput = normalizePastedInput(input);
72
- onChange(value.slice(0, cursor) + nextInput + value.slice(cursor));
73
- setCursor(cursor + nextInput.length);
74
- }, { isActive: !isDisabled });
75
- if (!value) {
76
- return _jsx(Text, { dimColor: true, children: placeholder });
77
- }
78
- return _jsx(Text, { children: buildPromptViewport(value, cursor) });
79
- }
80
- export function SlashHintPanel({ draft, activeSessionId, sessions, }) {
81
- const hints = getSlashHints(draft, activeSessionId, sessions).slice(0, 10);
82
- return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { dimColor: true, children: "Slash commands" }), hints.map((hint) => (_jsxs(Text, { dimColor: true, children: [hint.command, " ", hint.description] }, hint.command)))] }));
83
- }
84
- export function CommandHintPanel({ draft }) {
85
- const command = draft.trim().slice(1).trim();
86
- return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [_jsx(Text, { dimColor: true, children: "Direct shell" }), _jsx(Text, { dimColor: true, children: command ?
87
- `Run ${truncate(command, 100)} directly in chat. Read-oriented commands stay in inspect mode; other commands fall back to approval-gated execution.`
88
- : 'Start with ! to run a shell command directly in chat.' })] }));
89
- }
90
- export function shouldShowSlashHints(draft) {
91
- return draft.trimStart().startsWith('/');
92
- }
93
- export function shouldShowCommandHint(draft) {
94
- return draft.trimStart().startsWith('!');
95
- }
96
- function getSlashHints(draft, activeSessionId, sessions) {
97
- const base = [
98
- { command: '/help', description: 'show available local commands' },
99
- { command: '/model', description: 'show the active model' },
100
- { command: '/model <name>', description: 'switch the current model' },
101
- { command: '/models', description: 'list common model choices' },
102
- { command: '/continue', description: 'resume from the current transcript' },
103
- { command: '/clear', description: 'reset the current session transcript' },
104
- { command: '/session list', description: 'list local chat sessions' },
105
- { command: '/session new [name]', description: 'create and switch to a new session' },
106
- { command: '/session switch <id>', description: 'switch to another session' },
107
- { command: '/session continue <id>', description: 'switch to a session and resume it' },
108
- { command: '/session rename <name>', description: 'rename the current session' },
109
- { command: '/session close <id>', description: 'remove a saved session' },
110
- ];
111
- const trimmed = draft.trim();
112
- const filtered = base.filter((hint) => hint.command.startsWith(trimmed) || trimmed === '/');
113
- if (trimmed.startsWith('/session switch ')) {
114
- const sessionHints = sessions.map((session) => ({
115
- command: `/session switch ${session.id}`,
116
- description: `${session.id === activeSessionId ? '(current) ' : ''}${session.name}`,
117
- }));
118
- return sessionHints.filter((hint) => hint.command.startsWith(trimmed));
119
- }
120
- return filtered.length > 0 ? filtered : base;
121
- }
122
- function normalizePastedInput(input) {
123
- return input.replace(/\r?\n+/g, ' ');
124
- }
125
- function buildPromptViewport(value, cursor) {
126
- const withCursor = `${value.slice(0, cursor)}|${value.slice(cursor)}`;
127
- if (withCursor.length <= MAX_VISIBLE_INPUT_CHARS) {
128
- return withCursor;
129
- }
130
- const targetCursor = cursor + 1;
131
- const half = Math.floor(MAX_VISIBLE_INPUT_CHARS / 2);
132
- let start = Math.max(0, targetCursor - half);
133
- let end = Math.min(withCursor.length, start + MAX_VISIBLE_INPUT_CHARS);
134
- if (end - start < MAX_VISIBLE_INPUT_CHARS) {
135
- start = Math.max(0, end - MAX_VISIBLE_INPUT_CHARS);
136
- }
137
- const prefix = start > 0 ? '…' : '';
138
- const suffix = end < withCursor.length ? '…' : '';
139
- const slice = withCursor.slice(start, end);
140
- return `${prefix}${slice}${suffix}`;
141
- }
142
- //# sourceMappingURL=panels.js.map