shortcutxl 0.2.0

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 (423) hide show
  1. package/README.md +59 -0
  2. package/agent-docs/README.md +397 -0
  3. package/agent-docs/docs/compaction.md +390 -0
  4. package/agent-docs/docs/custom-provider.md +580 -0
  5. package/agent-docs/docs/development.md +69 -0
  6. package/agent-docs/docs/extensions.md +1971 -0
  7. package/agent-docs/docs/json.md +79 -0
  8. package/agent-docs/docs/keybindings.md +174 -0
  9. package/agent-docs/docs/models.md +293 -0
  10. package/agent-docs/docs/packages.md +209 -0
  11. package/agent-docs/docs/prompt-templates.md +67 -0
  12. package/agent-docs/docs/providers.md +186 -0
  13. package/agent-docs/docs/rpc.md +1317 -0
  14. package/agent-docs/docs/sdk.md +962 -0
  15. package/agent-docs/docs/session.md +412 -0
  16. package/agent-docs/docs/settings.md +223 -0
  17. package/agent-docs/docs/shell-aliases.md +13 -0
  18. package/agent-docs/docs/skills.md +231 -0
  19. package/agent-docs/docs/terminal-setup.md +70 -0
  20. package/agent-docs/docs/termux.md +127 -0
  21. package/agent-docs/docs/themes.md +295 -0
  22. package/agent-docs/docs/tree.md +219 -0
  23. package/agent-docs/docs/tui.md +887 -0
  24. package/agent-docs/docs/windows.md +17 -0
  25. package/agent-docs/examples/README.md +25 -0
  26. package/agent-docs/examples/extensions/README.md +205 -0
  27. package/agent-docs/examples/extensions/antigravity-image-gen.ts +447 -0
  28. package/agent-docs/examples/extensions/auto-commit-on-exit.ts +49 -0
  29. package/agent-docs/examples/extensions/bash-spawn-hook.ts +30 -0
  30. package/agent-docs/examples/extensions/bookmark.ts +50 -0
  31. package/agent-docs/examples/extensions/built-in-tool-renderer.ts +256 -0
  32. package/agent-docs/examples/extensions/claude-rules.ts +86 -0
  33. package/agent-docs/examples/extensions/commands.ts +75 -0
  34. package/agent-docs/examples/extensions/confirm-destructive.ts +59 -0
  35. package/agent-docs/examples/extensions/custom-compaction.ts +126 -0
  36. package/agent-docs/examples/extensions/custom-footer.ts +63 -0
  37. package/agent-docs/examples/extensions/custom-header.ts +73 -0
  38. package/agent-docs/examples/extensions/custom-provider-anthropic/index.ts +660 -0
  39. package/agent-docs/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
  40. package/agent-docs/examples/extensions/custom-provider-anthropic/package.json +19 -0
  41. package/agent-docs/examples/extensions/custom-provider-gitlab-duo/index.ts +362 -0
  42. package/agent-docs/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
  43. package/agent-docs/examples/extensions/custom-provider-gitlab-duo/test.ts +88 -0
  44. package/agent-docs/examples/extensions/custom-provider-qwen-cli/index.ts +349 -0
  45. package/agent-docs/examples/extensions/custom-provider-qwen-cli/package.json +16 -0
  46. package/agent-docs/examples/extensions/dirty-repo-guard.ts +56 -0
  47. package/agent-docs/examples/extensions/doom-overlay/README.md +46 -0
  48. package/agent-docs/examples/extensions/doom-overlay/doom/build.sh +152 -0
  49. package/agent-docs/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
  50. package/agent-docs/examples/extensions/doom-overlay/doom-component.ts +133 -0
  51. package/agent-docs/examples/extensions/doom-overlay/doom-engine.ts +186 -0
  52. package/agent-docs/examples/extensions/doom-overlay/doom-keys.ts +108 -0
  53. package/agent-docs/examples/extensions/doom-overlay/index.ts +74 -0
  54. package/agent-docs/examples/extensions/doom-overlay/wad-finder.ts +51 -0
  55. package/agent-docs/examples/extensions/dynamic-resources/SKILL.md +8 -0
  56. package/agent-docs/examples/extensions/dynamic-resources/dynamic.json +79 -0
  57. package/agent-docs/examples/extensions/dynamic-resources/dynamic.md +5 -0
  58. package/agent-docs/examples/extensions/dynamic-resources/index.ts +15 -0
  59. package/agent-docs/examples/extensions/dynamic-tools.ts +77 -0
  60. package/agent-docs/examples/extensions/event-bus.ts +43 -0
  61. package/agent-docs/examples/extensions/file-trigger.ts +41 -0
  62. package/agent-docs/examples/extensions/git-checkpoint.ts +53 -0
  63. package/agent-docs/examples/extensions/handoff.ts +155 -0
  64. package/agent-docs/examples/extensions/hello.ts +25 -0
  65. package/agent-docs/examples/extensions/inline-bash.ts +94 -0
  66. package/agent-docs/examples/extensions/input-transform.ts +43 -0
  67. package/agent-docs/examples/extensions/interactive-shell.ts +209 -0
  68. package/agent-docs/examples/extensions/mac-system-theme.ts +47 -0
  69. package/agent-docs/examples/extensions/message-renderer.ts +59 -0
  70. package/agent-docs/examples/extensions/minimal-mode.ts +430 -0
  71. package/agent-docs/examples/extensions/modal-editor.ts +90 -0
  72. package/agent-docs/examples/extensions/model-status.ts +31 -0
  73. package/agent-docs/examples/extensions/notify.ts +55 -0
  74. package/agent-docs/examples/extensions/overlay-qa-tests.ts +936 -0
  75. package/agent-docs/examples/extensions/overlay-test.ts +159 -0
  76. package/agent-docs/examples/extensions/permission-gate.ts +37 -0
  77. package/agent-docs/examples/extensions/pirate.ts +47 -0
  78. package/agent-docs/examples/extensions/plan-mode/README.md +65 -0
  79. package/agent-docs/examples/extensions/plan-mode/index.ts +363 -0
  80. package/agent-docs/examples/extensions/plan-mode/utils.ts +173 -0
  81. package/agent-docs/examples/extensions/preset.ts +418 -0
  82. package/agent-docs/examples/extensions/protected-paths.ts +30 -0
  83. package/agent-docs/examples/extensions/qna.ts +122 -0
  84. package/agent-docs/examples/extensions/question.ts +278 -0
  85. package/agent-docs/examples/extensions/questionnaire.ts +440 -0
  86. package/agent-docs/examples/extensions/rainbow-editor.ts +90 -0
  87. package/agent-docs/examples/extensions/reload-runtime.ts +37 -0
  88. package/agent-docs/examples/extensions/rpc-demo.ts +124 -0
  89. package/agent-docs/examples/extensions/sandbox/index.ts +324 -0
  90. package/agent-docs/examples/extensions/sandbox/package-lock.json +92 -0
  91. package/agent-docs/examples/extensions/sandbox/package.json +19 -0
  92. package/agent-docs/examples/extensions/send-user-message.ts +97 -0
  93. package/agent-docs/examples/extensions/session-name.ts +27 -0
  94. package/agent-docs/examples/extensions/shutdown-command.ts +69 -0
  95. package/agent-docs/examples/extensions/snake.ts +343 -0
  96. package/agent-docs/examples/extensions/space-invaders.ts +566 -0
  97. package/agent-docs/examples/extensions/ssh.ts +233 -0
  98. package/agent-docs/examples/extensions/status-line.ts +40 -0
  99. package/agent-docs/examples/extensions/subagent/README.md +172 -0
  100. package/agent-docs/examples/extensions/subagent/agents/planner.md +37 -0
  101. package/agent-docs/examples/extensions/subagent/agents/reviewer.md +35 -0
  102. package/agent-docs/examples/extensions/subagent/agents/scout.md +50 -0
  103. package/agent-docs/examples/extensions/subagent/agents/worker.md +24 -0
  104. package/agent-docs/examples/extensions/subagent/agents.ts +130 -0
  105. package/agent-docs/examples/extensions/subagent/index.ts +1068 -0
  106. package/agent-docs/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
  107. package/agent-docs/examples/extensions/subagent/prompts/implement.md +10 -0
  108. package/agent-docs/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
  109. package/agent-docs/examples/extensions/summarize.ts +206 -0
  110. package/agent-docs/examples/extensions/system-prompt-header.ts +17 -0
  111. package/agent-docs/examples/extensions/timed-confirm.ts +72 -0
  112. package/agent-docs/examples/extensions/titlebar-spinner.ts +58 -0
  113. package/agent-docs/examples/extensions/todo.ts +314 -0
  114. package/agent-docs/examples/extensions/tool-override.ts +146 -0
  115. package/agent-docs/examples/extensions/tools.ts +145 -0
  116. package/agent-docs/examples/extensions/trigger-compact.ts +40 -0
  117. package/agent-docs/examples/extensions/truncated-tool.ts +194 -0
  118. package/agent-docs/examples/extensions/widget-placement.ts +17 -0
  119. package/agent-docs/examples/extensions/with-deps/index.ts +37 -0
  120. package/agent-docs/examples/extensions/with-deps/package-lock.json +31 -0
  121. package/agent-docs/examples/extensions/with-deps/package.json +22 -0
  122. package/agent-docs/examples/rpc-extension-ui.ts +654 -0
  123. package/agent-docs/examples/sdk/01-minimal.ts +22 -0
  124. package/agent-docs/examples/sdk/02-custom-model.ts +48 -0
  125. package/agent-docs/examples/sdk/03-custom-prompt.ts +55 -0
  126. package/agent-docs/examples/sdk/04-skills.ts +53 -0
  127. package/agent-docs/examples/sdk/05-tools.ts +56 -0
  128. package/agent-docs/examples/sdk/06-extensions.ts +88 -0
  129. package/agent-docs/examples/sdk/07-context-files.ts +40 -0
  130. package/agent-docs/examples/sdk/08-prompt-templates.ts +47 -0
  131. package/agent-docs/examples/sdk/09-api-keys-and-oauth.ts +48 -0
  132. package/agent-docs/examples/sdk/10-settings.ts +54 -0
  133. package/agent-docs/examples/sdk/11-sessions.ts +48 -0
  134. package/agent-docs/examples/sdk/12-full-control.ts +82 -0
  135. package/agent-docs/examples/sdk/README.md +144 -0
  136. package/agent-docs/xll-skill.md +61 -0
  137. package/agent-docs/xll-spec.md +110 -0
  138. package/dist/cli/args.js +290 -0
  139. package/dist/cli/config-selector.js +31 -0
  140. package/dist/cli/file-processor.js +79 -0
  141. package/dist/cli/list-models.js +92 -0
  142. package/dist/cli/package-commands.js +210 -0
  143. package/dist/cli/report-settings-errors.js +11 -0
  144. package/dist/cli/session-picker.js +34 -0
  145. package/dist/cli.js +19 -0
  146. package/dist/config.js +288 -0
  147. package/dist/core/abort.js +15 -0
  148. package/dist/core/agent-loop.js +352 -0
  149. package/dist/core/agent-session.js +2019 -0
  150. package/dist/core/agent.js +410 -0
  151. package/dist/core/auth-storage.js +456 -0
  152. package/dist/core/bash-executor.js +222 -0
  153. package/dist/core/compaction/branch-summarization.js +242 -0
  154. package/dist/core/compaction/compaction.js +610 -0
  155. package/dist/core/compaction/index.js +7 -0
  156. package/dist/core/compaction/utils.js +139 -0
  157. package/dist/core/defaults.js +6 -0
  158. package/dist/core/diagnostics.js +2 -0
  159. package/dist/core/event-bus.js +25 -0
  160. package/dist/core/exec.js +71 -0
  161. package/dist/core/export-html/ansi-to-html.js +256 -0
  162. package/dist/core/export-html/index.js +238 -0
  163. package/dist/core/export-html/session-view-model.js +342 -0
  164. package/dist/core/export-html/template.css +1110 -0
  165. package/dist/core/export-html/template.html +76 -0
  166. package/dist/core/export-html/template.js +1990 -0
  167. package/dist/core/export-html/tool-renderer.js +63 -0
  168. package/dist/core/export-html/vendor/highlight.min.js +7725 -0
  169. package/dist/core/export-html/vendor/marked.min.js +1803 -0
  170. package/dist/core/extensions/index.js +9 -0
  171. package/dist/core/extensions/loader.js +422 -0
  172. package/dist/core/extensions/runner.js +651 -0
  173. package/dist/core/extensions/types.js +35 -0
  174. package/dist/core/extensions/wrapper.js +102 -0
  175. package/dist/core/footer-data-provider.js +162 -0
  176. package/dist/core/index.js +9 -0
  177. package/dist/core/keybindings.js +153 -0
  178. package/dist/core/messages.js +133 -0
  179. package/dist/core/model-registry.js +539 -0
  180. package/dist/core/model-resolver.js +370 -0
  181. package/dist/core/package-manager.js +1485 -0
  182. package/dist/core/prompt-templates.js +253 -0
  183. package/dist/core/resolve-config-value.js +59 -0
  184. package/dist/core/resource-loader.js +700 -0
  185. package/dist/core/sdk.js +197 -0
  186. package/dist/core/session-bash.js +99 -0
  187. package/dist/core/session-compaction.js +165 -0
  188. package/dist/core/session-manager.js +1153 -0
  189. package/dist/core/session-models.js +99 -0
  190. package/dist/core/session-retry.js +155 -0
  191. package/dist/core/settings-manager.js +572 -0
  192. package/dist/core/skills.js +382 -0
  193. package/dist/core/slash-commands.js +31 -0
  194. package/dist/core/system-prompt.js +161 -0
  195. package/dist/core/theme.js +770 -0
  196. package/dist/core/timings.js +26 -0
  197. package/dist/core/tools/bash.js +258 -0
  198. package/dist/core/tools/edit-diff.js +245 -0
  199. package/dist/core/tools/edit.js +148 -0
  200. package/dist/core/tools/find.js +208 -0
  201. package/dist/core/tools/grep.js +246 -0
  202. package/dist/core/tools/index.js +67 -0
  203. package/dist/core/tools/ls.js +123 -0
  204. package/dist/core/tools/path-utils.js +81 -0
  205. package/dist/core/tools/read.js +160 -0
  206. package/dist/core/tools/truncate.js +70 -0
  207. package/dist/core/tools/write.js +82 -0
  208. package/dist/custom/agents/action.js +13 -0
  209. package/dist/custom/agents/document-reader.js +70 -0
  210. package/dist/custom/agents/general.js +26 -0
  211. package/dist/custom/agents/index.js +49 -0
  212. package/dist/custom/agents/installation.js +13 -0
  213. package/dist/custom/agents/types.js +7 -0
  214. package/dist/custom/auth/refresh-timer.js +33 -0
  215. package/dist/custom/auth/shortcut-oauth.js +145 -0
  216. package/dist/custom/constants.js +21 -0
  217. package/dist/custom/context/workbook-summary.js +73 -0
  218. package/dist/custom/credits/shortcut-credits.js +29 -0
  219. package/dist/custom/cron/cron-daemon-entry.js +18 -0
  220. package/dist/custom/cron/daemon-ipc.js +131 -0
  221. package/dist/custom/cron/daemon.js +224 -0
  222. package/dist/custom/cron/jobs.js +226 -0
  223. package/dist/custom/cron/run-log.js +51 -0
  224. package/dist/custom/cron/schedule.js +72 -0
  225. package/dist/custom/cron/status-line.js +98 -0
  226. package/dist/custom/cron/store.js +87 -0
  227. package/dist/custom/cron/types.js +8 -0
  228. package/dist/custom/dev/index.js +59 -0
  229. package/dist/custom/dev/trace-export.js +58 -0
  230. package/dist/custom/ensure-excel.js +63 -0
  231. package/dist/custom/excel-config.js +36 -0
  232. package/dist/custom/preflight.js +422 -0
  233. package/dist/custom/prompts/action.js +100 -0
  234. package/dist/custom/prompts/api.js +66 -0
  235. package/dist/custom/prompts/installation.js +124 -0
  236. package/dist/custom/prompts/shared.js +138 -0
  237. package/dist/custom/providers/llm-usage.js +42 -0
  238. package/dist/custom/providers/message-converter.js +74 -0
  239. package/dist/custom/providers/provider-ids.js +9 -0
  240. package/dist/custom/providers/register-openai-codex-provider.js +27 -0
  241. package/dist/custom/providers/register-shortcut-provider.js +52 -0
  242. package/dist/custom/providers/shortcut-invoke.js +117 -0
  243. package/dist/custom/providers/shortcut-stream.js +252 -0
  244. package/dist/custom/providers/sse-protocol.js +38 -0
  245. package/dist/custom/sync-xll.js +130 -0
  246. package/dist/custom/tools/cron.js +413 -0
  247. package/dist/custom/tools/excel-exec.js +167 -0
  248. package/dist/custom/tools/excel-range.js +50 -0
  249. package/dist/custom/tools/llm-analysis.js +265 -0
  250. package/dist/custom/tools/render-helpers.js +38 -0
  251. package/dist/custom/tools/switch-mode.js +94 -0
  252. package/dist/custom/tools/task/agents.js +6 -0
  253. package/dist/custom/tools/task/index.js +8 -0
  254. package/dist/custom/tools/task/render.js +348 -0
  255. package/dist/custom/tools/task/subprocess.js +320 -0
  256. package/dist/custom/tools/task/task.js +205 -0
  257. package/dist/custom/tools/todo-list.js +195 -0
  258. package/dist/custom/tracing/session-upload.js +93 -0
  259. package/dist/index.js +45 -0
  260. package/dist/main.js +613 -0
  261. package/dist/migrations.js +265 -0
  262. package/dist/modes/index.js +8 -0
  263. package/dist/modes/interactive/components/armin.js +337 -0
  264. package/dist/modes/interactive/components/assistant-message.js +94 -0
  265. package/dist/modes/interactive/components/bash-execution.js +171 -0
  266. package/dist/modes/interactive/components/bordered-loader.js +51 -0
  267. package/dist/modes/interactive/components/branch-summary-message.js +45 -0
  268. package/dist/modes/interactive/components/compaction-summary-message.js +46 -0
  269. package/dist/modes/interactive/components/config-selector.js +488 -0
  270. package/dist/modes/interactive/components/countdown-timer.js +33 -0
  271. package/dist/modes/interactive/components/custom-editor.js +93 -0
  272. package/dist/modes/interactive/components/custom-message.js +81 -0
  273. package/dist/modes/interactive/components/daxnuts.js +140 -0
  274. package/dist/modes/interactive/components/diff.js +133 -0
  275. package/dist/modes/interactive/components/dynamic-border.js +21 -0
  276. package/dist/modes/interactive/components/extension-editor.js +105 -0
  277. package/dist/modes/interactive/components/extension-input.js +61 -0
  278. package/dist/modes/interactive/components/extension-selector.js +78 -0
  279. package/dist/modes/interactive/components/footer.js +309 -0
  280. package/dist/modes/interactive/components/index.js +33 -0
  281. package/dist/modes/interactive/components/keybinding-hints.js +61 -0
  282. package/dist/modes/interactive/components/layout.js +64 -0
  283. package/dist/modes/interactive/components/login-dialog.js +148 -0
  284. package/dist/modes/interactive/components/model-selector.js +237 -0
  285. package/dist/modes/interactive/components/oauth-selector.js +111 -0
  286. package/dist/modes/interactive/components/session-selector-search.js +157 -0
  287. package/dist/modes/interactive/components/session-selector.js +860 -0
  288. package/dist/modes/interactive/components/settings-selector.js +123 -0
  289. package/dist/modes/interactive/components/show-images-selector.js +35 -0
  290. package/dist/modes/interactive/components/skill-invocation-message.js +48 -0
  291. package/dist/modes/interactive/components/theme-selector.js +47 -0
  292. package/dist/modes/interactive/components/thinking-selector.js +47 -0
  293. package/dist/modes/interactive/components/tool-execution.js +789 -0
  294. package/dist/modes/interactive/components/tool-group.js +106 -0
  295. package/dist/modes/interactive/components/tree-selector.js +962 -0
  296. package/dist/modes/interactive/components/user-message-selector.js +115 -0
  297. package/dist/modes/interactive/components/user-message.js +48 -0
  298. package/dist/modes/interactive/components/visual-truncate.js +33 -0
  299. package/dist/modes/interactive/file-attachments.js +135 -0
  300. package/dist/modes/interactive/interactive-mode.js +3775 -0
  301. package/dist/modes/interactive/theme/dark.json +85 -0
  302. package/dist/modes/interactive/theme/light.json +85 -0
  303. package/dist/modes/interactive/theme/theme-schema.json +335 -0
  304. package/dist/modes/interactive/theme/theme.js +177 -0
  305. package/dist/modes/print-mode.js +101 -0
  306. package/dist/modes/rpc/rpc-client.js +387 -0
  307. package/dist/modes/rpc/rpc-mode.js +509 -0
  308. package/dist/modes/rpc/rpc-types.js +8 -0
  309. package/dist/subagent-entry.js +145 -0
  310. package/dist/tool-names.js +34 -0
  311. package/dist/tui/autocomplete.js +596 -0
  312. package/dist/tui/components/box.js +104 -0
  313. package/dist/tui/components/cancellable-loader.js +35 -0
  314. package/dist/tui/components/editor.js +1679 -0
  315. package/dist/tui/components/image.js +69 -0
  316. package/dist/tui/components/input.js +433 -0
  317. package/dist/tui/components/loader.js +49 -0
  318. package/dist/tui/components/markdown.js +629 -0
  319. package/dist/tui/components/select-list.js +152 -0
  320. package/dist/tui/components/settings-list.js +185 -0
  321. package/dist/tui/components/spacer.js +23 -0
  322. package/dist/tui/components/text.js +89 -0
  323. package/dist/tui/components/truncated-text.js +51 -0
  324. package/dist/tui/editor-component.js +2 -0
  325. package/dist/tui/fuzzy.js +107 -0
  326. package/dist/tui/get-east-asian-width/index.js +32 -0
  327. package/dist/tui/get-east-asian-width/lookup.js +404 -0
  328. package/dist/tui/index.js +32 -0
  329. package/dist/tui/keybindings.js +114 -0
  330. package/dist/tui/keys.js +959 -0
  331. package/dist/tui/kill-ring.js +44 -0
  332. package/dist/tui/stdin-buffer.js +317 -0
  333. package/dist/tui/terminal-image.js +288 -0
  334. package/dist/tui/terminal.js +249 -0
  335. package/dist/tui/tui/autocomplete.js +596 -0
  336. package/dist/tui/tui/components/box.js +106 -0
  337. package/dist/tui/tui/components/cancellable-loader.js +35 -0
  338. package/dist/tui/tui/components/editor.js +1679 -0
  339. package/dist/tui/tui/components/image.js +69 -0
  340. package/dist/tui/tui/components/input.js +433 -0
  341. package/dist/tui/tui/components/loader.js +49 -0
  342. package/dist/tui/tui/components/markdown.js +629 -0
  343. package/dist/tui/tui/components/select-list.js +152 -0
  344. package/dist/tui/tui/components/settings-list.js +185 -0
  345. package/dist/tui/tui/components/spacer.js +23 -0
  346. package/dist/tui/tui/components/text.js +91 -0
  347. package/dist/tui/tui/components/truncated-text.js +51 -0
  348. package/dist/tui/tui/editor-component.js +2 -0
  349. package/dist/tui/tui/fuzzy.js +107 -0
  350. package/dist/tui/tui/get-east-asian-width/index.js +32 -0
  351. package/dist/tui/tui/get-east-asian-width/lookup.js +404 -0
  352. package/dist/tui/tui/index.js +32 -0
  353. package/dist/tui/tui/keybindings.js +114 -0
  354. package/dist/tui/tui/keys.js +959 -0
  355. package/dist/tui/tui/kill-ring.js +44 -0
  356. package/dist/tui/tui/stdin-buffer.js +317 -0
  357. package/dist/tui/tui/terminal-image.js +288 -0
  358. package/dist/tui/tui/terminal.js +249 -0
  359. package/dist/tui/tui/tui.js +955 -0
  360. package/dist/tui/tui/undo-stack.js +25 -0
  361. package/dist/tui/tui/utils.js +800 -0
  362. package/dist/tui/tui.js +955 -0
  363. package/dist/tui/undo-stack.js +25 -0
  364. package/dist/tui/utils.js +800 -0
  365. package/dist/utils/changelog.js +87 -0
  366. package/dist/utils/clipboard-image.js +164 -0
  367. package/dist/utils/clipboard-native.js +14 -0
  368. package/dist/utils/clipboard.js +67 -0
  369. package/dist/utils/frontmatter.js +26 -0
  370. package/dist/utils/git.js +166 -0
  371. package/dist/utils/image-convert.js +35 -0
  372. package/dist/utils/image-resize.js +183 -0
  373. package/dist/utils/mime.js +26 -0
  374. package/dist/utils/photon.js +121 -0
  375. package/dist/utils/shell.js +217 -0
  376. package/dist/utils/sleep.js +17 -0
  377. package/dist/utils/tools-manager.js +259 -0
  378. package/package.json +78 -0
  379. package/skills/excel-com-api/SKILL.md +74 -0
  380. package/skills/excel-com-api/excel-type-library.py +27767 -0
  381. package/skills/excel-com-api/office-type-library.py +10867 -0
  382. package/skills/integrations/SKILL.md +138 -0
  383. package/skills/integrations/alphasense.md +457 -0
  384. package/skills/integrations/bloomberg.md +803 -0
  385. package/skills/integrations/calcbench.md +315 -0
  386. package/skills/integrations/capiq.md +848 -0
  387. package/skills/integrations/dynamics-365-finance.md +354 -0
  388. package/skills/integrations/earnings_transcripts.md +387 -0
  389. package/skills/integrations/factset.md +758 -0
  390. package/skills/integrations/ice-fixed-income.md +344 -0
  391. package/skills/integrations/moodys-analytics.md +313 -0
  392. package/skills/integrations/morningstar.md +433 -0
  393. package/skills/integrations/nasdaq-data-link.md +249 -0
  394. package/skills/integrations/pitchbook.md +413 -0
  395. package/skills/integrations/preqin.md +422 -0
  396. package/skills/integrations/quickbooks.md +289 -0
  397. package/skills/integrations/quickfs.md +314 -0
  398. package/skills/integrations/refinitiv.md +473 -0
  399. package/skills/integrations/sage-intacct.md +401 -0
  400. package/skills/integrations/visible-alpha.md +320 -0
  401. package/skills/integrations/xero.md +393 -0
  402. package/skills/integrations/ycharts.md +306 -0
  403. package/skills/pdf-creation/SKILL.md +93 -0
  404. package/skills/pdf-extraction/SKILL.md +32 -0
  405. package/skills/powerpoint-creation/SKILL.md +110 -0
  406. package/skills/sec-edgar/SKILL.md +127 -0
  407. package/skills/sec-edgar/sec_to_pdf.py +109 -0
  408. package/xll/ShortcutXL.xll +0 -0
  409. package/xll/modules/debug_render.py +272 -0
  410. package/xll/modules/gameboy.py +241 -0
  411. package/xll/modules/pong.py +188 -0
  412. package/xll/modules/shortcut_xl/__init__.py +18 -0
  413. package/xll/modules/shortcut_xl/_categorize.py +200 -0
  414. package/xll/modules/shortcut_xl/_com.py +108 -0
  415. package/xll/modules/shortcut_xl/_format.py +252 -0
  416. package/xll/modules/shortcut_xl/_log.py +12 -0
  417. package/xll/modules/shortcut_xl/_managed.py +116 -0
  418. package/xll/modules/shortcut_xl/_registry.py +44 -0
  419. package/xll/modules/shortcut_xl/_threading.py +161 -0
  420. package/xll/modules/shortcut_xl/_tracking.py +283 -0
  421. package/xll/modules/stocks.py +100 -0
  422. package/xll/python3.dll +0 -0
  423. package/xll/python312.dll +0 -0
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Shared utilities for compaction and branch summarization.
3
+ */
4
+ import { EDIT, READ, WRITE } from '../../tool-names.js';
5
+ export function createFileOps() {
6
+ return {
7
+ read: new Set(),
8
+ written: new Set(),
9
+ edited: new Set()
10
+ };
11
+ }
12
+ /**
13
+ * Extract file operations from tool calls in an assistant message.
14
+ */
15
+ export function extractFileOpsFromMessage(message, fileOps) {
16
+ if (message.role !== 'assistant')
17
+ return;
18
+ if (!('content' in message) || !Array.isArray(message.content))
19
+ return;
20
+ for (const block of message.content) {
21
+ if (typeof block !== 'object' || block === null)
22
+ continue;
23
+ if (!('type' in block) || block.type !== 'toolCall')
24
+ continue;
25
+ if (!('arguments' in block) || !('name' in block))
26
+ continue;
27
+ const args = block.arguments;
28
+ if (!args)
29
+ continue;
30
+ const path = typeof args.path === 'string' ? args.path : undefined;
31
+ if (!path)
32
+ continue;
33
+ switch (block.name) {
34
+ case READ:
35
+ fileOps.read.add(path);
36
+ break;
37
+ case WRITE:
38
+ fileOps.written.add(path);
39
+ break;
40
+ case EDIT:
41
+ fileOps.edited.add(path);
42
+ break;
43
+ }
44
+ }
45
+ }
46
+ /**
47
+ * Compute final file lists from file operations.
48
+ * Returns readFiles (files only read, not modified) and modifiedFiles.
49
+ */
50
+ export function computeFileLists(fileOps) {
51
+ const modified = new Set([...fileOps.edited, ...fileOps.written]);
52
+ const readOnly = [...fileOps.read].filter((f) => !modified.has(f)).sort();
53
+ const modifiedFiles = [...modified].sort();
54
+ return { readFiles: readOnly, modifiedFiles };
55
+ }
56
+ /**
57
+ * Format file operations as XML tags for summary.
58
+ */
59
+ export function formatFileOperations(readFiles, modifiedFiles) {
60
+ const sections = [];
61
+ if (readFiles.length > 0) {
62
+ sections.push(`<read-files>\n${readFiles.join('\n')}\n</read-files>`);
63
+ }
64
+ if (modifiedFiles.length > 0) {
65
+ sections.push(`<modified-files>\n${modifiedFiles.join('\n')}\n</modified-files>`);
66
+ }
67
+ if (sections.length === 0)
68
+ return '';
69
+ return `\n\n${sections.join('\n\n')}`;
70
+ }
71
+ // ============================================================================
72
+ // Message Serialization
73
+ // ============================================================================
74
+ /**
75
+ * Serialize LLM messages to text for summarization.
76
+ * This prevents the model from treating it as a conversation to continue.
77
+ * Call convertToLlm() first to handle custom message types.
78
+ */
79
+ export function serializeConversation(messages) {
80
+ const parts = [];
81
+ for (const msg of messages) {
82
+ if (msg.role === 'user') {
83
+ const content = typeof msg.content === 'string'
84
+ ? msg.content
85
+ : msg.content
86
+ .filter((c) => c.type === 'text')
87
+ .map((c) => c.text)
88
+ .join('');
89
+ if (content)
90
+ parts.push(`[User]: ${content}`);
91
+ }
92
+ else if (msg.role === 'assistant') {
93
+ const textParts = [];
94
+ const thinkingParts = [];
95
+ const toolCalls = [];
96
+ for (const block of msg.content) {
97
+ if (block.type === 'text') {
98
+ textParts.push(block.text);
99
+ }
100
+ else if (block.type === 'thinking') {
101
+ thinkingParts.push(block.thinking);
102
+ }
103
+ else if (block.type === 'toolCall') {
104
+ const args = block.arguments;
105
+ const argsStr = Object.entries(args)
106
+ .map(([k, v]) => `${k}=${JSON.stringify(v)}`)
107
+ .join(', ');
108
+ toolCalls.push(`${block.name}(${argsStr})`);
109
+ }
110
+ }
111
+ if (thinkingParts.length > 0) {
112
+ parts.push(`[Assistant thinking]: ${thinkingParts.join('\n')}`);
113
+ }
114
+ if (textParts.length > 0) {
115
+ parts.push(`[Assistant]: ${textParts.join('\n')}`);
116
+ }
117
+ if (toolCalls.length > 0) {
118
+ parts.push(`[Assistant tool calls]: ${toolCalls.join('; ')}`);
119
+ }
120
+ }
121
+ else if (msg.role === 'toolResult') {
122
+ const content = msg.content
123
+ .filter((c) => c.type === 'text')
124
+ .map((c) => c.text)
125
+ .join('');
126
+ if (content) {
127
+ parts.push(`[Tool result]: ${content}`);
128
+ }
129
+ }
130
+ }
131
+ return parts.join('\n\n');
132
+ }
133
+ // ============================================================================
134
+ // Summarization System Prompt
135
+ // ============================================================================
136
+ export const SUMMARIZATION_SYSTEM_PROMPT = `You are a context summarization assistant. Your task is to read a conversation between a user and an AI coding assistant, then produce a structured summary following the exact format specified.
137
+
138
+ Do NOT continue the conversation. Do NOT respond to any questions in the conversation. ONLY output the structured summary.`;
139
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1,6 @@
1
+ export const VALID_THINKING_LEVELS = ['off', 'minimal', 'low', 'medium', 'high', 'xhigh'];
2
+ export function isValidThinkingLevel(level) {
3
+ return VALID_THINKING_LEVELS.includes(level);
4
+ }
5
+ export const DEFAULT_THINKING_LEVEL = 'medium';
6
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1,25 @@
1
+ import { EventEmitter } from 'node:events';
2
+ export function createEventBus() {
3
+ const emitter = new EventEmitter();
4
+ return {
5
+ emit: (channel, data) => {
6
+ emitter.emit(channel, data);
7
+ },
8
+ on: (channel, handler) => {
9
+ const safeHandler = async (data) => {
10
+ try {
11
+ await handler(data);
12
+ }
13
+ catch (err) {
14
+ console.error(`Event handler error (${channel}):`, err);
15
+ }
16
+ };
17
+ emitter.on(channel, safeHandler);
18
+ return () => emitter.off(channel, safeHandler);
19
+ },
20
+ clear: () => {
21
+ emitter.removeAllListeners();
22
+ }
23
+ };
24
+ }
25
+ //# sourceMappingURL=event-bus.js.map
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Shared command execution utilities for extensions and custom tools.
3
+ */
4
+ import { spawn } from 'node:child_process';
5
+ /**
6
+ * Execute a shell command and return stdout/stderr/code.
7
+ * Supports timeout and abort signal.
8
+ */
9
+ export async function execCommand(command, args, cwd, options) {
10
+ return new Promise((resolve) => {
11
+ const proc = spawn(command, args, {
12
+ cwd,
13
+ shell: false,
14
+ stdio: ['ignore', 'pipe', 'pipe']
15
+ });
16
+ let stdout = '';
17
+ let stderr = '';
18
+ let killed = false;
19
+ let timeoutId;
20
+ const killProcess = () => {
21
+ if (!killed) {
22
+ killed = true;
23
+ proc.kill('SIGTERM');
24
+ // Force kill after 5 seconds if SIGTERM doesn't work
25
+ setTimeout(() => {
26
+ if (!proc.killed) {
27
+ proc.kill('SIGKILL');
28
+ }
29
+ }, 5000);
30
+ }
31
+ };
32
+ // Handle abort signal
33
+ if (options?.signal) {
34
+ if (options.signal.aborted) {
35
+ killProcess();
36
+ }
37
+ else {
38
+ options.signal.addEventListener('abort', killProcess, { once: true });
39
+ }
40
+ }
41
+ // Handle timeout
42
+ if (options?.timeout && options.timeout > 0) {
43
+ timeoutId = setTimeout(() => {
44
+ killProcess();
45
+ }, options.timeout);
46
+ }
47
+ proc.stdout?.on('data', (data) => {
48
+ stdout += data.toString();
49
+ });
50
+ proc.stderr?.on('data', (data) => {
51
+ stderr += data.toString();
52
+ });
53
+ proc.on('close', (code) => {
54
+ if (timeoutId)
55
+ clearTimeout(timeoutId);
56
+ if (options?.signal) {
57
+ options.signal.removeEventListener('abort', killProcess);
58
+ }
59
+ resolve({ stdout, stderr, code: code ?? 0, killed });
60
+ });
61
+ proc.on('error', (_err) => {
62
+ if (timeoutId)
63
+ clearTimeout(timeoutId);
64
+ if (options?.signal) {
65
+ options.signal.removeEventListener('abort', killProcess);
66
+ }
67
+ resolve({ stdout, stderr, code: 1, killed });
68
+ });
69
+ });
70
+ }
71
+ //# sourceMappingURL=exec.js.map
@@ -0,0 +1,256 @@
1
+ /**
2
+ * ANSI escape code to HTML converter.
3
+ *
4
+ * Converts terminal ANSI color/style codes to HTML with inline styles.
5
+ * Supports:
6
+ * - Standard foreground colors (30-37) and bright variants (90-97)
7
+ * - Standard background colors (40-47) and bright variants (100-107)
8
+ * - 256-color palette (38;5;N and 48;5;N)
9
+ * - RGB true color (38;2;R;G;B and 48;2;R;G;B)
10
+ * - Text styles: bold (1), dim (2), italic (3), underline (4)
11
+ * - Reset (0)
12
+ */
13
+ // Standard ANSI color palette (0-15)
14
+ const ANSI_COLORS = [
15
+ '#000000', // 0: black
16
+ '#800000', // 1: red
17
+ '#008000', // 2: green
18
+ '#808000', // 3: yellow
19
+ '#000080', // 4: blue
20
+ '#800080', // 5: magenta
21
+ '#008080', // 6: cyan
22
+ '#c0c0c0', // 7: white
23
+ '#808080', // 8: bright black
24
+ '#ff0000', // 9: bright red
25
+ '#00ff00', // 10: bright green
26
+ '#ffff00', // 11: bright yellow
27
+ '#0000ff', // 12: bright blue
28
+ '#ff00ff', // 13: bright magenta
29
+ '#00ffff', // 14: bright cyan
30
+ '#ffffff' // 15: bright white
31
+ ];
32
+ /**
33
+ * Convert 256-color index to hex.
34
+ */
35
+ function color256ToHex(index) {
36
+ // Standard colors (0-15)
37
+ if (index < 16) {
38
+ return ANSI_COLORS[index];
39
+ }
40
+ // Color cube (16-231): 6x6x6 = 216 colors
41
+ if (index < 232) {
42
+ const cubeIndex = index - 16;
43
+ const r = Math.floor(cubeIndex / 36);
44
+ const g = Math.floor((cubeIndex % 36) / 6);
45
+ const b = cubeIndex % 6;
46
+ const toComponent = (n) => (n === 0 ? 0 : 55 + n * 40);
47
+ const toHex = (n) => toComponent(n).toString(16).padStart(2, '0');
48
+ return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
49
+ }
50
+ // Grayscale (232-255): 24 shades
51
+ const gray = 8 + (index - 232) * 10;
52
+ const grayHex = gray.toString(16).padStart(2, '0');
53
+ return `#${grayHex}${grayHex}${grayHex}`;
54
+ }
55
+ /**
56
+ * Escape HTML special characters.
57
+ */
58
+ function escapeHtml(text) {
59
+ return text
60
+ .replace(/&/g, '&amp;')
61
+ .replace(/</g, '&lt;')
62
+ .replace(/>/g, '&gt;')
63
+ .replace(/"/g, '&quot;')
64
+ .replace(/'/g, '&#039;');
65
+ }
66
+ function createEmptyStyle() {
67
+ return {
68
+ fg: null,
69
+ bg: null,
70
+ bold: false,
71
+ dim: false,
72
+ italic: false,
73
+ underline: false
74
+ };
75
+ }
76
+ function styleToInlineCSS(style) {
77
+ const parts = [];
78
+ if (style.fg)
79
+ parts.push(`color:${style.fg}`);
80
+ if (style.bg)
81
+ parts.push(`background-color:${style.bg}`);
82
+ if (style.bold)
83
+ parts.push('font-weight:bold');
84
+ if (style.dim)
85
+ parts.push('opacity:0.6');
86
+ if (style.italic)
87
+ parts.push('font-style:italic');
88
+ if (style.underline)
89
+ parts.push('text-decoration:underline');
90
+ return parts.join(';');
91
+ }
92
+ function hasStyle(style) {
93
+ return (style.fg !== null ||
94
+ style.bg !== null ||
95
+ style.bold ||
96
+ style.dim ||
97
+ style.italic ||
98
+ style.underline);
99
+ }
100
+ /**
101
+ * Parse ANSI SGR (Select Graphic Rendition) codes and update style.
102
+ */
103
+ function applySgrCode(params, style) {
104
+ let i = 0;
105
+ while (i < params.length) {
106
+ const code = params[i];
107
+ if (code === 0) {
108
+ // Reset all
109
+ style.fg = null;
110
+ style.bg = null;
111
+ style.bold = false;
112
+ style.dim = false;
113
+ style.italic = false;
114
+ style.underline = false;
115
+ }
116
+ else if (code === 1) {
117
+ style.bold = true;
118
+ }
119
+ else if (code === 2) {
120
+ style.dim = true;
121
+ }
122
+ else if (code === 3) {
123
+ style.italic = true;
124
+ }
125
+ else if (code === 4) {
126
+ style.underline = true;
127
+ }
128
+ else if (code === 22) {
129
+ // Reset bold/dim
130
+ style.bold = false;
131
+ style.dim = false;
132
+ }
133
+ else if (code === 23) {
134
+ style.italic = false;
135
+ }
136
+ else if (code === 24) {
137
+ style.underline = false;
138
+ }
139
+ else if (code >= 30 && code <= 37) {
140
+ // Standard foreground colors
141
+ style.fg = ANSI_COLORS[code - 30];
142
+ }
143
+ else if (code === 38) {
144
+ // Extended foreground color
145
+ if (params[i + 1] === 5 && params.length > i + 2) {
146
+ // 256-color: 38;5;N
147
+ style.fg = color256ToHex(params[i + 2]);
148
+ i += 2;
149
+ }
150
+ else if (params[i + 1] === 2 && params.length > i + 4) {
151
+ // RGB: 38;2;R;G;B
152
+ const r = params[i + 2];
153
+ const g = params[i + 3];
154
+ const b = params[i + 4];
155
+ style.fg = `rgb(${r},${g},${b})`;
156
+ i += 4;
157
+ }
158
+ }
159
+ else if (code === 39) {
160
+ // Default foreground
161
+ style.fg = null;
162
+ }
163
+ else if (code >= 40 && code <= 47) {
164
+ // Standard background colors
165
+ style.bg = ANSI_COLORS[code - 40];
166
+ }
167
+ else if (code === 48) {
168
+ // Extended background color
169
+ if (params[i + 1] === 5 && params.length > i + 2) {
170
+ // 256-color: 48;5;N
171
+ style.bg = color256ToHex(params[i + 2]);
172
+ i += 2;
173
+ }
174
+ else if (params[i + 1] === 2 && params.length > i + 4) {
175
+ // RGB: 48;2;R;G;B
176
+ const r = params[i + 2];
177
+ const g = params[i + 3];
178
+ const b = params[i + 4];
179
+ style.bg = `rgb(${r},${g},${b})`;
180
+ i += 4;
181
+ }
182
+ }
183
+ else if (code === 49) {
184
+ // Default background
185
+ style.bg = null;
186
+ }
187
+ else if (code >= 90 && code <= 97) {
188
+ // Bright foreground colors
189
+ style.fg = ANSI_COLORS[code - 90 + 8];
190
+ }
191
+ else if (code >= 100 && code <= 107) {
192
+ // Bright background colors
193
+ style.bg = ANSI_COLORS[code - 100 + 8];
194
+ }
195
+ // Ignore unrecognized codes
196
+ i++;
197
+ }
198
+ }
199
+ // Match ANSI escape sequences: ESC[ followed by params and ending with 'm'
200
+ const ANSI_REGEX = /\x1b\[([\d;]*)m/g;
201
+ /**
202
+ * Convert ANSI-escaped text to HTML with inline styles.
203
+ */
204
+ export function ansiToHtml(text) {
205
+ const style = createEmptyStyle();
206
+ let result = '';
207
+ let lastIndex = 0;
208
+ let inSpan = false;
209
+ // Reset regex state
210
+ ANSI_REGEX.lastIndex = 0;
211
+ let match = ANSI_REGEX.exec(text);
212
+ while (match !== null) {
213
+ // Add text before this escape sequence
214
+ const beforeText = text.slice(lastIndex, match.index);
215
+ if (beforeText) {
216
+ result += escapeHtml(beforeText);
217
+ }
218
+ // Parse SGR parameters
219
+ const paramStr = match[1];
220
+ const params = paramStr ? paramStr.split(';').map((p) => parseInt(p, 10) || 0) : [0];
221
+ // Close existing span if we have one
222
+ if (inSpan) {
223
+ result += '</span>';
224
+ inSpan = false;
225
+ }
226
+ // Apply the codes
227
+ applySgrCode(params, style);
228
+ // Open new span if we have any styling
229
+ if (hasStyle(style)) {
230
+ result += `<span style="${styleToInlineCSS(style)}">`;
231
+ inSpan = true;
232
+ }
233
+ lastIndex = match.index + match[0].length;
234
+ match = ANSI_REGEX.exec(text);
235
+ }
236
+ // Add remaining text
237
+ const remainingText = text.slice(lastIndex);
238
+ if (remainingText) {
239
+ result += escapeHtml(remainingText);
240
+ }
241
+ // Close any open span
242
+ if (inSpan) {
243
+ result += '</span>';
244
+ }
245
+ return result;
246
+ }
247
+ /**
248
+ * Convert array of ANSI-escaped lines to HTML.
249
+ * Each line is wrapped in a div element.
250
+ */
251
+ export function ansiLinesToHtml(lines) {
252
+ return lines
253
+ .map((line) => `<div class="ansi-line">${ansiToHtml(line) || '&nbsp;'}</div>`)
254
+ .join('\n');
255
+ }
256
+ //# sourceMappingURL=ansi-to-html.js.map