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,9 @@
1
+ /**
2
+ * Extension system for lifecycle events and custom tools.
3
+ */
4
+ export { createExtensionRuntime, discoverAndLoadExtensions, loadExtensionFromFactory, loadExtensions } from './loader.js';
5
+ export { ExtensionRunner } from './runner.js';
6
+ // Type guards
7
+ export { isBashToolResult, isEditToolResult, isFindToolResult, isGrepToolResult, isLsToolResult, isReadToolResult, isToolCallEventType, isWriteToolResult } from './types.js';
8
+ export { wrapRegisteredTool, wrapRegisteredTools, wrapToolWithExtensions, wrapToolsWithExtensions } from './wrapper.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,422 @@
1
+ /**
2
+ * Extension loader - loads TypeScript extension modules using jiti.
3
+ *
4
+ * Uses @mariozechner/jiti fork with virtualModules support for compiled Bun binaries.
5
+ */
6
+ import { createJiti } from '@mariozechner/jiti';
7
+ import * as _bundledPiAgentCore from '@mariozechner/pi-agent-core';
8
+ import * as _bundledPiAi from '@mariozechner/pi-ai';
9
+ import * as _bundledPiTui from '../../tui/index.js';
10
+ import * as fs from 'node:fs';
11
+ import { createRequire } from 'node:module';
12
+ import * as os from 'node:os';
13
+ import * as path from 'node:path';
14
+ import { fileURLToPath } from 'node:url';
15
+ // Static imports of packages that extensions may use.
16
+ // These MUST be static so Bun bundles them into the compiled binary.
17
+ // The virtualModules option then makes them available to extensions.
18
+ import * as _bundledTypebox from '@sinclair/typebox';
19
+ import { getAgentDir, isBunBinary } from '../../config.js';
20
+ // NOTE: This import works because loader.ts exports are NOT re-exported from index.ts,
21
+ // avoiding a circular dependency. Extensions can import from @mariozechner/pi-coding-agent.
22
+ import * as _bundledPiCodingAgent from '../../index.js';
23
+ import { createEventBus } from '../event-bus.js';
24
+ import { execCommand } from '../exec.js';
25
+ /** Modules available to extensions via virtualModules (for compiled Bun binary) */
26
+ const VIRTUAL_MODULES = {
27
+ '@sinclair/typebox': _bundledTypebox,
28
+ '@mariozechner/pi-agent-core': _bundledPiAgentCore,
29
+ '../../tui/index.js': _bundledPiTui,
30
+ '@mariozechner/pi-ai': _bundledPiAi,
31
+ '@mariozechner/pi-coding-agent': _bundledPiCodingAgent
32
+ };
33
+ const require = createRequire(import.meta.url);
34
+ /**
35
+ * Get aliases for jiti (used in Node.js/development mode).
36
+ * In Bun binary mode, virtualModules is used instead.
37
+ */
38
+ let _aliases = null;
39
+ function getAliases() {
40
+ if (_aliases)
41
+ return _aliases;
42
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
43
+ const packageIndex = path.resolve(__dirname, '../..', 'index.js');
44
+ const typeboxEntry = require.resolve('@sinclair/typebox');
45
+ const typeboxRoot = typeboxEntry.replace(/[\\/]build[\\/]cjs[\\/]index\.js$/, '');
46
+ _aliases = {
47
+ '@mariozechner/pi-coding-agent': packageIndex,
48
+ '@mariozechner/pi-agent-core': require.resolve('@mariozechner/pi-agent-core'),
49
+ '../../tui/index.js': require.resolve('../../tui/index.js'),
50
+ '@mariozechner/pi-ai': require.resolve('@mariozechner/pi-ai'),
51
+ '@sinclair/typebox': typeboxRoot
52
+ };
53
+ return _aliases;
54
+ }
55
+ const UNICODE_SPACES = /[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g;
56
+ function normalizeUnicodeSpaces(str) {
57
+ return str.replace(UNICODE_SPACES, ' ');
58
+ }
59
+ function expandPath(p) {
60
+ const normalized = normalizeUnicodeSpaces(p);
61
+ if (normalized.startsWith('~/')) {
62
+ return path.join(os.homedir(), normalized.slice(2));
63
+ }
64
+ if (normalized.startsWith('~')) {
65
+ return path.join(os.homedir(), normalized.slice(1));
66
+ }
67
+ return normalized;
68
+ }
69
+ function resolvePath(extPath, cwd) {
70
+ const expanded = expandPath(extPath);
71
+ if (path.isAbsolute(expanded)) {
72
+ return expanded;
73
+ }
74
+ return path.resolve(cwd, expanded);
75
+ }
76
+ /**
77
+ * Create a runtime with throwing stubs for action methods.
78
+ * Runner.bindCore() replaces these with real implementations.
79
+ */
80
+ export function createExtensionRuntime() {
81
+ const notInitialized = () => {
82
+ throw new Error('Extension runtime not initialized. Action methods cannot be called during extension loading.');
83
+ };
84
+ const runtime = {
85
+ sendMessage: notInitialized,
86
+ sendUserMessage: notInitialized,
87
+ appendEntry: notInitialized,
88
+ setSessionName: notInitialized,
89
+ getSessionName: notInitialized,
90
+ setLabel: notInitialized,
91
+ getActiveTools: notInitialized,
92
+ getAllTools: notInitialized,
93
+ setActiveTools: notInitialized,
94
+ // registerTool() is valid during extension load; refresh is only needed post-bind.
95
+ refreshTools: () => { },
96
+ getCommands: notInitialized,
97
+ setModel: () => Promise.reject(new Error('Extension runtime not initialized')),
98
+ getThinkingLevel: notInitialized,
99
+ setThinkingLevel: notInitialized,
100
+ flagValues: new Map(),
101
+ pendingProviderRegistrations: [],
102
+ // Pre-bind: queue registrations so bindCore() can flush them once the
103
+ // model registry is available. bindCore() replaces both with direct calls.
104
+ registerProvider: (name, config) => {
105
+ runtime.pendingProviderRegistrations.push({ name, config });
106
+ },
107
+ unregisterProvider: (name) => {
108
+ runtime.pendingProviderRegistrations = runtime.pendingProviderRegistrations.filter((r) => r.name !== name);
109
+ }
110
+ };
111
+ return runtime;
112
+ }
113
+ /**
114
+ * Create the ExtensionAPI for an extension.
115
+ * Registration methods write to the extension object.
116
+ * Action methods delegate to the shared runtime.
117
+ */
118
+ function createExtensionAPI(extension, runtime, cwd, eventBus) {
119
+ const api = {
120
+ // Registration methods - write to extension
121
+ on(event, handler) {
122
+ const list = extension.handlers.get(event) ?? [];
123
+ list.push(handler);
124
+ extension.handlers.set(event, list);
125
+ },
126
+ registerTool(tool) {
127
+ extension.tools.set(tool.name, {
128
+ definition: tool,
129
+ extensionPath: extension.path
130
+ });
131
+ runtime.refreshTools();
132
+ },
133
+ registerCommand(name, options) {
134
+ extension.commands.set(name, { name, ...options });
135
+ },
136
+ registerShortcut(shortcut, options) {
137
+ extension.shortcuts.set(shortcut, { shortcut, extensionPath: extension.path, ...options });
138
+ },
139
+ registerFlag(name, options) {
140
+ extension.flags.set(name, { name, extensionPath: extension.path, ...options });
141
+ if (options.default !== undefined && !runtime.flagValues.has(name)) {
142
+ runtime.flagValues.set(name, options.default);
143
+ }
144
+ },
145
+ registerMessageRenderer(customType, renderer) {
146
+ extension.messageRenderers.set(customType, renderer);
147
+ },
148
+ // Flag access - checks extension registered it, reads from runtime
149
+ getFlag(name) {
150
+ if (!extension.flags.has(name))
151
+ return undefined;
152
+ return runtime.flagValues.get(name);
153
+ },
154
+ // Action methods - delegate to shared runtime
155
+ sendMessage(message, options) {
156
+ runtime.sendMessage(message, options);
157
+ },
158
+ sendUserMessage(content, options) {
159
+ runtime.sendUserMessage(content, options);
160
+ },
161
+ appendEntry(customType, data) {
162
+ runtime.appendEntry(customType, data);
163
+ },
164
+ setSessionName(name) {
165
+ runtime.setSessionName(name);
166
+ },
167
+ getSessionName() {
168
+ return runtime.getSessionName();
169
+ },
170
+ setLabel(entryId, label) {
171
+ runtime.setLabel(entryId, label);
172
+ },
173
+ exec(command, args, options) {
174
+ return execCommand(command, args, options?.cwd ?? cwd, options);
175
+ },
176
+ getActiveTools() {
177
+ return runtime.getActiveTools();
178
+ },
179
+ getAllTools() {
180
+ return runtime.getAllTools();
181
+ },
182
+ setActiveTools(toolNames) {
183
+ runtime.setActiveTools(toolNames);
184
+ },
185
+ getCommands() {
186
+ return runtime.getCommands();
187
+ },
188
+ setModel(model) {
189
+ return runtime.setModel(model);
190
+ },
191
+ getThinkingLevel() {
192
+ return runtime.getThinkingLevel();
193
+ },
194
+ setThinkingLevel(level) {
195
+ runtime.setThinkingLevel(level);
196
+ },
197
+ registerProvider(name, config) {
198
+ runtime.registerProvider(name, config);
199
+ },
200
+ unregisterProvider(name) {
201
+ runtime.unregisterProvider(name);
202
+ },
203
+ events: eventBus
204
+ };
205
+ return api;
206
+ }
207
+ async function loadExtensionModule(extensionPath) {
208
+ const jiti = createJiti(import.meta.url, {
209
+ moduleCache: false,
210
+ // In Bun binary: use virtualModules for bundled packages (no filesystem resolution)
211
+ // Also disable tryNative so jiti handles ALL imports (not just the entry point)
212
+ // In Node.js/dev: use aliases to resolve to node_modules paths
213
+ ...(isBunBinary
214
+ ? { virtualModules: VIRTUAL_MODULES, tryNative: false }
215
+ : { alias: getAliases() })
216
+ });
217
+ // eslint-disable-next-line @next/next/no-assign-module-variable
218
+ const module = await jiti.import(extensionPath, { default: true });
219
+ const factory = module;
220
+ return typeof factory !== 'function' ? undefined : factory;
221
+ }
222
+ /**
223
+ * Create an Extension object with empty collections.
224
+ */
225
+ function createExtension(extensionPath, resolvedPath) {
226
+ return {
227
+ path: extensionPath,
228
+ resolvedPath,
229
+ handlers: new Map(),
230
+ tools: new Map(),
231
+ messageRenderers: new Map(),
232
+ commands: new Map(),
233
+ flags: new Map(),
234
+ shortcuts: new Map()
235
+ };
236
+ }
237
+ async function loadExtension(extensionPath, cwd, eventBus, runtime) {
238
+ const resolvedPath = resolvePath(extensionPath, cwd);
239
+ try {
240
+ const factory = await loadExtensionModule(resolvedPath);
241
+ if (!factory) {
242
+ return {
243
+ extension: null,
244
+ error: `Extension does not export a valid factory function: ${extensionPath}`
245
+ };
246
+ }
247
+ const extension = createExtension(extensionPath, resolvedPath);
248
+ const api = createExtensionAPI(extension, runtime, cwd, eventBus);
249
+ await factory(api);
250
+ return { extension, error: null };
251
+ }
252
+ catch (err) {
253
+ const message = err instanceof Error ? err.message : String(err);
254
+ return { extension: null, error: `Failed to load extension: ${message}` };
255
+ }
256
+ }
257
+ /**
258
+ * Create an Extension from an inline factory function.
259
+ */
260
+ export async function loadExtensionFromFactory(factory, cwd, eventBus, runtime, extensionPath = '<inline>') {
261
+ const extension = createExtension(extensionPath, extensionPath);
262
+ const api = createExtensionAPI(extension, runtime, cwd, eventBus);
263
+ await factory(api);
264
+ return extension;
265
+ }
266
+ /**
267
+ * Load extensions from paths.
268
+ */
269
+ export async function loadExtensions(paths, cwd, eventBus) {
270
+ const extensions = [];
271
+ const errors = [];
272
+ const resolvedEventBus = eventBus ?? createEventBus();
273
+ const runtime = createExtensionRuntime();
274
+ for (const extPath of paths) {
275
+ const { extension, error } = await loadExtension(extPath, cwd, resolvedEventBus, runtime);
276
+ if (error) {
277
+ errors.push({ path: extPath, error });
278
+ continue;
279
+ }
280
+ if (extension) {
281
+ extensions.push(extension);
282
+ }
283
+ }
284
+ return {
285
+ extensions,
286
+ errors,
287
+ runtime
288
+ };
289
+ }
290
+ function readPiManifest(packageJsonPath) {
291
+ try {
292
+ const content = fs.readFileSync(packageJsonPath, 'utf-8');
293
+ const pkg = JSON.parse(content);
294
+ // SHORTCUT PATCH: renamed manifest key from "pi" to "shortcut"
295
+ if (pkg.shortcut && typeof pkg.shortcut === 'object') {
296
+ return pkg.shortcut;
297
+ }
298
+ return null;
299
+ }
300
+ catch {
301
+ return null;
302
+ }
303
+ }
304
+ function isExtensionFile(name) {
305
+ return name.endsWith('.ts') || name.endsWith('.js');
306
+ }
307
+ /**
308
+ * Resolve extension entry points from a directory.
309
+ *
310
+ * Checks for:
311
+ * 1. package.json with "pi.extensions" field -> returns declared paths
312
+ * 2. index.ts or index.js -> returns the index file
313
+ *
314
+ * Returns resolved paths or null if no entry points found.
315
+ */
316
+ function resolveExtensionEntries(dir) {
317
+ // Check for package.json with "pi" field first
318
+ const packageJsonPath = path.join(dir, 'package.json');
319
+ if (fs.existsSync(packageJsonPath)) {
320
+ const manifest = readPiManifest(packageJsonPath);
321
+ if (manifest?.extensions?.length) {
322
+ const entries = [];
323
+ for (const extPath of manifest.extensions) {
324
+ const resolvedExtPath = path.resolve(dir, extPath);
325
+ if (fs.existsSync(resolvedExtPath)) {
326
+ entries.push(resolvedExtPath);
327
+ }
328
+ }
329
+ if (entries.length > 0) {
330
+ return entries;
331
+ }
332
+ }
333
+ }
334
+ // Check for index.ts or index.js
335
+ const indexTs = path.join(dir, 'index.ts');
336
+ const indexJs = path.join(dir, 'index.js');
337
+ if (fs.existsSync(indexTs)) {
338
+ return [indexTs];
339
+ }
340
+ if (fs.existsSync(indexJs)) {
341
+ return [indexJs];
342
+ }
343
+ return null;
344
+ }
345
+ /**
346
+ * Discover extensions in a directory.
347
+ *
348
+ * Discovery rules:
349
+ * 1. Direct files: `extensions/*.ts` or `*.js` → load
350
+ * 2. Subdirectory with index: `extensions/* /index.ts` or `index.js` → load
351
+ * 3. Subdirectory with package.json: `extensions/* /package.json` with "pi" field → load what it declares
352
+ *
353
+ * No recursion beyond one level. Complex packages must use package.json manifest.
354
+ */
355
+ function discoverExtensionsInDir(dir) {
356
+ if (!fs.existsSync(dir)) {
357
+ return [];
358
+ }
359
+ const discovered = [];
360
+ try {
361
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
362
+ for (const entry of entries) {
363
+ const entryPath = path.join(dir, entry.name);
364
+ // 1. Direct files: *.ts or *.js
365
+ if ((entry.isFile() || entry.isSymbolicLink()) && isExtensionFile(entry.name)) {
366
+ discovered.push(entryPath);
367
+ continue;
368
+ }
369
+ // 2 & 3. Subdirectories
370
+ if (entry.isDirectory() || entry.isSymbolicLink()) {
371
+ const entries = resolveExtensionEntries(entryPath);
372
+ if (entries) {
373
+ discovered.push(...entries);
374
+ }
375
+ }
376
+ }
377
+ }
378
+ catch {
379
+ return [];
380
+ }
381
+ return discovered;
382
+ }
383
+ /**
384
+ * Discover and load extensions from standard locations.
385
+ */
386
+ export async function discoverAndLoadExtensions(configuredPaths, cwd, agentDir = getAgentDir(), eventBus) {
387
+ const allPaths = [];
388
+ const seen = new Set();
389
+ const addPaths = (paths) => {
390
+ for (const p of paths) {
391
+ const resolved = path.resolve(p);
392
+ if (!seen.has(resolved)) {
393
+ seen.add(resolved);
394
+ allPaths.push(p);
395
+ }
396
+ }
397
+ };
398
+ // 1. Project-local extensions: cwd/.pi/extensions/
399
+ const localExtDir = path.join(cwd, '.pi', 'extensions');
400
+ addPaths(discoverExtensionsInDir(localExtDir));
401
+ // 2. Global extensions: agentDir/extensions/
402
+ const globalExtDir = path.join(agentDir, 'extensions');
403
+ addPaths(discoverExtensionsInDir(globalExtDir));
404
+ // 3. Explicitly configured paths
405
+ for (const p of configuredPaths) {
406
+ const resolved = resolvePath(p, cwd);
407
+ if (fs.existsSync(resolved) && fs.statSync(resolved).isDirectory()) {
408
+ // Check for package.json with pi manifest or index.ts
409
+ const entries = resolveExtensionEntries(resolved);
410
+ if (entries) {
411
+ addPaths(entries);
412
+ continue;
413
+ }
414
+ // No explicit entries - discover individual files in directory
415
+ addPaths(discoverExtensionsInDir(resolved));
416
+ continue;
417
+ }
418
+ addPaths([resolved]);
419
+ }
420
+ return loadExtensions(allPaths, cwd, eventBus);
421
+ }
422
+ //# sourceMappingURL=loader.js.map