@visorcraft/idlehands 0.9.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 (197) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +30 -0
  3. package/dist/agent.js +2604 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/anton/controller.js +341 -0
  6. package/dist/anton/controller.js.map +1 -0
  7. package/dist/anton/lock.js +110 -0
  8. package/dist/anton/lock.js.map +1 -0
  9. package/dist/anton/parser.js +303 -0
  10. package/dist/anton/parser.js.map +1 -0
  11. package/dist/anton/prompt.js +203 -0
  12. package/dist/anton/prompt.js.map +1 -0
  13. package/dist/anton/reporter.js +119 -0
  14. package/dist/anton/reporter.js.map +1 -0
  15. package/dist/anton/session.js +51 -0
  16. package/dist/anton/session.js.map +1 -0
  17. package/dist/anton/types.js +7 -0
  18. package/dist/anton/types.js.map +1 -0
  19. package/dist/anton/verifier.js +263 -0
  20. package/dist/anton/verifier.js.map +1 -0
  21. package/dist/bench/compare.js +239 -0
  22. package/dist/bench/compare.js.map +1 -0
  23. package/dist/bench/debug_hooks.js +17 -0
  24. package/dist/bench/debug_hooks.js.map +1 -0
  25. package/dist/bench/json_extract.js +22 -0
  26. package/dist/bench/json_extract.js.map +1 -0
  27. package/dist/bench/openclaw.js +86 -0
  28. package/dist/bench/openclaw.js.map +1 -0
  29. package/dist/bench/report.js +116 -0
  30. package/dist/bench/report.js.map +1 -0
  31. package/dist/bench/runner.js +312 -0
  32. package/dist/bench/runner.js.map +1 -0
  33. package/dist/bench/types.js +2 -0
  34. package/dist/bench/types.js.map +1 -0
  35. package/dist/bot/commands.js +444 -0
  36. package/dist/bot/commands.js.map +1 -0
  37. package/dist/bot/confirm-discord.js +133 -0
  38. package/dist/bot/confirm-discord.js.map +1 -0
  39. package/dist/bot/confirm-telegram.js +290 -0
  40. package/dist/bot/confirm-telegram.js.map +1 -0
  41. package/dist/bot/discord.js +826 -0
  42. package/dist/bot/discord.js.map +1 -0
  43. package/dist/bot/format.js +210 -0
  44. package/dist/bot/format.js.map +1 -0
  45. package/dist/bot/session-manager.js +270 -0
  46. package/dist/bot/session-manager.js.map +1 -0
  47. package/dist/bot/telegram.js +678 -0
  48. package/dist/bot/telegram.js.map +1 -0
  49. package/dist/cli/agent-turn.js +45 -0
  50. package/dist/cli/agent-turn.js.map +1 -0
  51. package/dist/cli/args.js +236 -0
  52. package/dist/cli/args.js.map +1 -0
  53. package/dist/cli/bot.js +252 -0
  54. package/dist/cli/bot.js.map +1 -0
  55. package/dist/cli/build-repl-context.js +365 -0
  56. package/dist/cli/build-repl-context.js.map +1 -0
  57. package/dist/cli/command-registry.js +20 -0
  58. package/dist/cli/command-registry.js.map +1 -0
  59. package/dist/cli/commands/anton.js +271 -0
  60. package/dist/cli/commands/anton.js.map +1 -0
  61. package/dist/cli/commands/editing.js +328 -0
  62. package/dist/cli/commands/editing.js.map +1 -0
  63. package/dist/cli/commands/model.js +274 -0
  64. package/dist/cli/commands/model.js.map +1 -0
  65. package/dist/cli/commands/project.js +255 -0
  66. package/dist/cli/commands/project.js.map +1 -0
  67. package/dist/cli/commands/runtime.js +63 -0
  68. package/dist/cli/commands/runtime.js.map +1 -0
  69. package/dist/cli/commands/session.js +281 -0
  70. package/dist/cli/commands/session.js.map +1 -0
  71. package/dist/cli/commands/tools.js +126 -0
  72. package/dist/cli/commands/tools.js.map +1 -0
  73. package/dist/cli/commands/trifecta.js +221 -0
  74. package/dist/cli/commands/trifecta.js.map +1 -0
  75. package/dist/cli/commands/tui.js +17 -0
  76. package/dist/cli/commands/tui.js.map +1 -0
  77. package/dist/cli/init.js +222 -0
  78. package/dist/cli/init.js.map +1 -0
  79. package/dist/cli/input.js +360 -0
  80. package/dist/cli/input.js.map +1 -0
  81. package/dist/cli/oneshot.js +254 -0
  82. package/dist/cli/oneshot.js.map +1 -0
  83. package/dist/cli/repl-context.js +2 -0
  84. package/dist/cli/repl-context.js.map +1 -0
  85. package/dist/cli/runtime-cmds.js +811 -0
  86. package/dist/cli/runtime-cmds.js.map +1 -0
  87. package/dist/cli/service.js +145 -0
  88. package/dist/cli/service.js.map +1 -0
  89. package/dist/cli/session-state.js +130 -0
  90. package/dist/cli/session-state.js.map +1 -0
  91. package/dist/cli/setup.js +815 -0
  92. package/dist/cli/setup.js.map +1 -0
  93. package/dist/cli/shell.js +79 -0
  94. package/dist/cli/shell.js.map +1 -0
  95. package/dist/cli/status.js +392 -0
  96. package/dist/cli/status.js.map +1 -0
  97. package/dist/cli/watch.js +33 -0
  98. package/dist/cli/watch.js.map +1 -0
  99. package/dist/client.js +676 -0
  100. package/dist/client.js.map +1 -0
  101. package/dist/commands.js +194 -0
  102. package/dist/commands.js.map +1 -0
  103. package/dist/config.js +507 -0
  104. package/dist/config.js.map +1 -0
  105. package/dist/confirm/auto.js +13 -0
  106. package/dist/confirm/auto.js.map +1 -0
  107. package/dist/confirm/headless.js +41 -0
  108. package/dist/confirm/headless.js.map +1 -0
  109. package/dist/confirm/terminal.js +90 -0
  110. package/dist/confirm/terminal.js.map +1 -0
  111. package/dist/context.js +49 -0
  112. package/dist/context.js.map +1 -0
  113. package/dist/git.js +136 -0
  114. package/dist/git.js.map +1 -0
  115. package/dist/harnesses.js +171 -0
  116. package/dist/harnesses.js.map +1 -0
  117. package/dist/history.js +139 -0
  118. package/dist/history.js.map +1 -0
  119. package/dist/index.js +700 -0
  120. package/dist/index.js.map +1 -0
  121. package/dist/indexer.js +374 -0
  122. package/dist/indexer.js.map +1 -0
  123. package/dist/jsonrpc.js +76 -0
  124. package/dist/jsonrpc.js.map +1 -0
  125. package/dist/lens.js +525 -0
  126. package/dist/lens.js.map +1 -0
  127. package/dist/lsp.js +605 -0
  128. package/dist/lsp.js.map +1 -0
  129. package/dist/markdown.js +275 -0
  130. package/dist/markdown.js.map +1 -0
  131. package/dist/mcp.js +554 -0
  132. package/dist/mcp.js.map +1 -0
  133. package/dist/recovery.js +178 -0
  134. package/dist/recovery.js.map +1 -0
  135. package/dist/replay.js +132 -0
  136. package/dist/replay.js.map +1 -0
  137. package/dist/replay_cli.js +24 -0
  138. package/dist/replay_cli.js.map +1 -0
  139. package/dist/runtime/executor.js +418 -0
  140. package/dist/runtime/executor.js.map +1 -0
  141. package/dist/runtime/planner.js +197 -0
  142. package/dist/runtime/planner.js.map +1 -0
  143. package/dist/runtime/store.js +289 -0
  144. package/dist/runtime/store.js.map +1 -0
  145. package/dist/runtime/types.js +2 -0
  146. package/dist/runtime/types.js.map +1 -0
  147. package/dist/safety.js +446 -0
  148. package/dist/safety.js.map +1 -0
  149. package/dist/spinner.js +224 -0
  150. package/dist/spinner.js.map +1 -0
  151. package/dist/sys/context.js +124 -0
  152. package/dist/sys/context.js.map +1 -0
  153. package/dist/sys/snapshot.sh +97 -0
  154. package/dist/term.js +61 -0
  155. package/dist/term.js.map +1 -0
  156. package/dist/themes.js +135 -0
  157. package/dist/themes.js.map +1 -0
  158. package/dist/tools.js +1114 -0
  159. package/dist/tools.js.map +1 -0
  160. package/dist/tui/branch-picker.js +65 -0
  161. package/dist/tui/branch-picker.js.map +1 -0
  162. package/dist/tui/command-handler.js +108 -0
  163. package/dist/tui/command-handler.js.map +1 -0
  164. package/dist/tui/confirm.js +90 -0
  165. package/dist/tui/confirm.js.map +1 -0
  166. package/dist/tui/controller.js +463 -0
  167. package/dist/tui/controller.js.map +1 -0
  168. package/dist/tui/event-bridge.js +44 -0
  169. package/dist/tui/event-bridge.js.map +1 -0
  170. package/dist/tui/events.js +2 -0
  171. package/dist/tui/events.js.map +1 -0
  172. package/dist/tui/keymap.js +144 -0
  173. package/dist/tui/keymap.js.map +1 -0
  174. package/dist/tui/layout.js +11 -0
  175. package/dist/tui/layout.js.map +1 -0
  176. package/dist/tui/render.js +186 -0
  177. package/dist/tui/render.js.map +1 -0
  178. package/dist/tui/screen.js +48 -0
  179. package/dist/tui/screen.js.map +1 -0
  180. package/dist/tui/state.js +167 -0
  181. package/dist/tui/state.js.map +1 -0
  182. package/dist/tui/theme.js +70 -0
  183. package/dist/tui/theme.js.map +1 -0
  184. package/dist/tui/types.js +2 -0
  185. package/dist/tui/types.js.map +1 -0
  186. package/dist/types.js +2 -0
  187. package/dist/types.js.map +1 -0
  188. package/dist/upgrade.js +412 -0
  189. package/dist/upgrade.js.map +1 -0
  190. package/dist/utils.js +87 -0
  191. package/dist/utils.js.map +1 -0
  192. package/dist/vault.js +520 -0
  193. package/dist/vault.js.map +1 -0
  194. package/dist/vim.js +160 -0
  195. package/dist/vim.js.map +1 -0
  196. package/package.json +67 -0
  197. package/src/sys/snapshot.sh +97 -0
@@ -0,0 +1,275 @@
1
+ /**
2
+ * Terminal markdown renderer — ANSI escape-based rendering for model output.
3
+ * No external dependencies. ~200 lines.
4
+ *
5
+ * Supports: bold, italic, inline code, strikethrough, fenced code blocks,
6
+ * headings (1-3), bullet/numbered lists, links, think block collapsing.
7
+ * Degrades gracefully to plain text when piped (!isTTY).
8
+ */
9
+ const ESC = '\x1b[';
10
+ const RESET = `${ESC}0m`;
11
+ const BOLD = `${ESC}1m`;
12
+ const DIM = `${ESC}2m`;
13
+ const ITALIC = `${ESC}3m`;
14
+ const UNDERLINE = `${ESC}4m`;
15
+ const STRIKE = `${ESC}9m`;
16
+ const CYAN = `${ESC}36m`;
17
+ const GREEN = `${ESC}32m`;
18
+ const YELLOW = `${ESC}33m`;
19
+ const MAGENTA = `${ESC}35m`;
20
+ const BG_GRAY = `${ESC}48;5;236m`;
21
+ /**
22
+ * Render markdown text with ANSI escape sequences for terminal display.
23
+ */
24
+ export function renderMarkdown(text, opts = {}) {
25
+ const color = opts.color ?? process.stdout.isTTY ?? false;
26
+ if (!color)
27
+ return stripMarkdown(text);
28
+ const lines = text.split('\n');
29
+ const out = [];
30
+ let inCodeBlock = false;
31
+ let codeLang = '';
32
+ let codeLines = [];
33
+ let inThink = false;
34
+ let thinkTokens = 0;
35
+ for (let i = 0; i < lines.length; i++) {
36
+ const line = lines[i];
37
+ // Think block handling
38
+ if (line.includes('<think>')) {
39
+ inThink = true;
40
+ thinkTokens = 0;
41
+ continue;
42
+ }
43
+ if (line.includes('</think>')) {
44
+ inThink = false;
45
+ if (!opts.verbose) {
46
+ out.push(`${DIM}[thinking... ~${Math.round(thinkTokens / 4)} tokens]${RESET}`);
47
+ }
48
+ continue;
49
+ }
50
+ if (inThink) {
51
+ thinkTokens += line.length + 1;
52
+ if (opts.verbose) {
53
+ out.push(`${DIM}${line}${RESET}`);
54
+ }
55
+ continue;
56
+ }
57
+ // Fenced code blocks
58
+ const fenceMatch = line.match(/^```(\w*)$/);
59
+ if (fenceMatch) {
60
+ if (!inCodeBlock) {
61
+ inCodeBlock = true;
62
+ codeLang = fenceMatch[1] || '';
63
+ codeLines = [];
64
+ }
65
+ else {
66
+ // End of code block — render
67
+ const langLabel = codeLang ? ` ${codeLang}` : '';
68
+ out.push(`${DIM}┌──${langLabel}${'─'.repeat(Math.max(0, 40 - langLabel.length))}${RESET}`);
69
+ for (const cl of codeLines) {
70
+ const hl = highlightCodeLine(cl, codeLang);
71
+ out.push(`${DIM}│${RESET} ${BG_GRAY}${hl}${RESET}`);
72
+ }
73
+ out.push(`${DIM}└${'─'.repeat(42)}${RESET}`);
74
+ inCodeBlock = false;
75
+ codeLang = '';
76
+ codeLines = [];
77
+ }
78
+ continue;
79
+ }
80
+ if (inCodeBlock) {
81
+ codeLines.push(line);
82
+ continue;
83
+ }
84
+ // Headings
85
+ const h3 = line.match(/^### (.+)/);
86
+ if (h3) {
87
+ out.push(`${BOLD}${h3[1]}${RESET}`);
88
+ continue;
89
+ }
90
+ const h2 = line.match(/^## (.+)/);
91
+ if (h2) {
92
+ out.push(`${BOLD}${UNDERLINE}${h2[1]}${RESET}`);
93
+ continue;
94
+ }
95
+ const h1 = line.match(/^# (.+)/);
96
+ if (h1) {
97
+ out.push(`\n${BOLD}${UNDERLINE}${h1[1]}${RESET}\n`);
98
+ continue;
99
+ }
100
+ // Horizontal rules
101
+ if (/^---+$/.test(line.trim())) {
102
+ out.push(`${DIM}${'─'.repeat(40)}${RESET}`);
103
+ continue;
104
+ }
105
+ // Bullet lists
106
+ const bullet = line.match(/^(\s*)[*-] (.+)/);
107
+ if (bullet) {
108
+ const indent = bullet[1];
109
+ const content = renderInline(bullet[2]);
110
+ out.push(`${indent}• ${content}`);
111
+ continue;
112
+ }
113
+ // Numbered lists
114
+ const numbered = line.match(/^(\s*)(\d+)\. (.+)/);
115
+ if (numbered) {
116
+ const indent = numbered[1];
117
+ const num = numbered[2];
118
+ const content = renderInline(numbered[3]);
119
+ out.push(`${indent}${DIM}${num}.${RESET} ${content}`);
120
+ continue;
121
+ }
122
+ // Markdown tables (best effort)
123
+ if (isTableHeader(line) && i + 1 < lines.length && isTableSeparator(lines[i + 1])) {
124
+ const rows = [line];
125
+ // skip separator line i+1
126
+ i += 2;
127
+ while (i < lines.length && isTableRow(lines[i])) {
128
+ rows.push(lines[i]);
129
+ i += 1;
130
+ }
131
+ i -= 1; // compensate loop increment
132
+ out.push(...renderTable(rows));
133
+ continue;
134
+ }
135
+ // Regular paragraph lines — apply inline formatting
136
+ out.push(renderInline(line));
137
+ }
138
+ // Handle unclosed code block
139
+ if (inCodeBlock && codeLines.length > 0) {
140
+ const langLabel = codeLang ? ` ${codeLang}` : '';
141
+ out.push(`${DIM}┌──${langLabel}${'─'.repeat(Math.max(0, 40 - langLabel.length))}${RESET}`);
142
+ for (const cl of codeLines) {
143
+ const hl = highlightCodeLine(cl, codeLang);
144
+ out.push(`${DIM}│${RESET} ${BG_GRAY}${hl}${RESET}`);
145
+ }
146
+ out.push(`${DIM}└${'─'.repeat(42)}${RESET}`);
147
+ }
148
+ return out.join('\n');
149
+ }
150
+ /**
151
+ * Apply inline markdown formatting (bold, italic, code, strikethrough, links).
152
+ */
153
+ function renderInline(text) {
154
+ // Process inline code first (preserve contents from other formatting)
155
+ let result = '';
156
+ let i = 0;
157
+ while (i < text.length) {
158
+ // Inline code: `...`
159
+ if (text[i] === '`') {
160
+ const end = text.indexOf('`', i + 1);
161
+ if (end !== -1) {
162
+ const code = text.slice(i + 1, end);
163
+ result += `${CYAN}${code}${RESET}`;
164
+ i = end + 1;
165
+ continue;
166
+ }
167
+ }
168
+ result += text[i];
169
+ i++;
170
+ }
171
+ // Bold: **text** or __text__
172
+ result = result.replace(/\*\*(.+?)\*\*/g, `${BOLD}$1${RESET}`);
173
+ result = result.replace(/__(.+?)__/g, `${BOLD}$1${RESET}`);
174
+ // Italic: *text* or _text_ (but not inside words for _)
175
+ result = result.replace(/(?<!\w)\*([^*]+?)\*(?!\w)/g, `${ITALIC}$1${RESET}`);
176
+ result = result.replace(/(?<!\w)_([^_]+?)_(?!\w)/g, `${ITALIC}$1${RESET}`);
177
+ // Strikethrough: ~~text~~
178
+ result = result.replace(/~~(.+?)~~/g, `${STRIKE}$1${RESET}`);
179
+ // Links: [text](url)
180
+ result = result.replace(/\[([^\]]+)\]\(([^)]+)\)/g, `$1 ${DIM}($2)${RESET}`);
181
+ return result;
182
+ }
183
+ /**
184
+ * Strip markdown for plain text output (non-TTY).
185
+ */
186
+ function stripMarkdown(text) {
187
+ return text
188
+ .replace(/<think>[\s\S]*?<\/think>/g, '[thinking...]')
189
+ .replace(/```\w*\n/g, '')
190
+ .replace(/```/g, '')
191
+ .replace(/^#{1,6}\s+/gm, '')
192
+ .replace(/\*\*(.+?)\*\*/g, '$1')
193
+ .replace(/__(.+?)__/g, '$1')
194
+ .replace(/\*(.+?)\*/g, '$1')
195
+ .replace(/_(.+?)_/g, '$1')
196
+ .replace(/~~(.+?)~~/g, '$1')
197
+ .replace(/`(.+?)`/g, '$1')
198
+ .replace(/\[([^\]]+)\]\(([^)]+)\)/g, '$1 ($2)');
199
+ }
200
+ function isTableRow(line) {
201
+ const t = line.trim();
202
+ return t.includes('|') && t.split('|').length >= 3;
203
+ }
204
+ function isTableHeader(line) {
205
+ return isTableRow(line);
206
+ }
207
+ function isTableSeparator(line) {
208
+ const t = line.trim();
209
+ return /^\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?$/.test(t);
210
+ }
211
+ function splitTableRow(line) {
212
+ const t = line.trim().replace(/^\|/, '').replace(/\|$/, '');
213
+ return t.split('|').map(c => c.trim());
214
+ }
215
+ function renderTable(rows) {
216
+ const cells = rows.map(splitTableRow);
217
+ const cols = Math.max(...cells.map(r => r.length));
218
+ const widths = Array.from({ length: cols }, (_, i) => Math.max(...cells.map(r => (r[i] ?? '').length)));
219
+ const renderRow = (row) => {
220
+ const padded = widths.map((w, i) => {
221
+ const cell = renderInline(row[i] ?? '');
222
+ // Visible width is approximate because ANSI codes count as chars; acceptable best effort.
223
+ const plain = String(row[i] ?? '');
224
+ const pad = ' '.repeat(Math.max(0, w - plain.length));
225
+ return ` ${cell}${pad} `;
226
+ });
227
+ return `${DIM}│${RESET}${padded.join(`${DIM}│${RESET}`)}${DIM}│${RESET}`;
228
+ };
229
+ const border = `${DIM}├${widths.map(w => '─'.repeat(w + 2)).join('┼')}┤${RESET}`;
230
+ const top = `${DIM}┌${widths.map(w => '─'.repeat(w + 2)).join('┬')}┐${RESET}`;
231
+ const bottom = `${DIM}└${widths.map(w => '─'.repeat(w + 2)).join('┴')}┘${RESET}`;
232
+ const out = [top];
233
+ if (cells.length > 0)
234
+ out.push(renderRow(cells[0]));
235
+ out.push(border);
236
+ for (let i = 1; i < cells.length; i++)
237
+ out.push(renderRow(cells[i]));
238
+ out.push(bottom);
239
+ return out;
240
+ }
241
+ function highlightCodeLine(line, lang) {
242
+ const l = (lang || '').toLowerCase();
243
+ let s = line;
244
+ // Strings
245
+ s = s.replace(/("[^"\\]*(?:\\.[^"\\]*)*"|'[^'\\]*(?:\\.[^'\\]*)*')/g, `${GREEN}$1${RESET}${BG_GRAY}`);
246
+ // Numbers
247
+ s = s.replace(/\b(\d+(?:\.\d+)?)\b/g, `${YELLOW}$1${RESET}${BG_GRAY}`);
248
+ const applyKeywords = (re) => {
249
+ s = s.replace(re, `${MAGENTA}$1${RESET}${BG_GRAY}`);
250
+ };
251
+ if (['js', 'ts', 'javascript', 'typescript'].includes(l)) {
252
+ applyKeywords(/\b(const|let|var|function|return|if|else|for|while|class|import|export|async|await|try|catch|throw|new)\b/g);
253
+ }
254
+ else if (['py', 'python'].includes(l)) {
255
+ applyKeywords(/\b(def|class|return|if|elif|else|for|while|import|from|as|try|except|raise|with|yield|async|await|lambda)\b/g);
256
+ }
257
+ else if (['bash', 'sh', 'zsh'].includes(l)) {
258
+ applyKeywords(/\b(if|then|else|fi|for|do|done|while|case|esac|function|export|local)\b/g);
259
+ }
260
+ else if (['rust', 'rs'].includes(l)) {
261
+ applyKeywords(/\b(fn|let|mut|pub|impl|struct|enum|trait|use|mod|match|if|else|for|while|loop|return|async|await)\b/g);
262
+ }
263
+ else if (['go', 'golang'].includes(l)) {
264
+ applyKeywords(/\b(func|var|const|type|struct|interface|package|import|return|if|else|for|range|go|defer|switch|case)\b/g);
265
+ }
266
+ else if (['c', 'cpp', 'c++', 'h', 'hpp'].includes(l)) {
267
+ applyKeywords(/\b(int|char|void|float|double|struct|class|if|else|for|while|return|include|typedef|static|const)\b/g);
268
+ }
269
+ else if (['json', 'yaml', 'yml'].includes(l)) {
270
+ // keys before ':'
271
+ s = s.replace(/^\s*([\w"'-]+)\s*:/g, `${CYAN}$1${RESET}${BG_GRAY}:`);
272
+ }
273
+ return s;
274
+ }
275
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"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"}