nikcli 0.0.6

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 (602) hide show
  1. package/.turbo/turbo-typecheck.log +1 -0
  2. package/AGENTS.md +27 -0
  3. package/Dockerfile +18 -0
  4. package/README.md +15 -0
  5. package/bin/nikcli +84 -0
  6. package/config.json +13 -0
  7. package/docs/tailscale-mobile/01-tailscale-setup.md +94 -0
  8. package/docs/tailscale-mobile/02-host-setup.md +115 -0
  9. package/docs/tailscale-mobile/03-phone-and-serve.md +134 -0
  10. package/docs/tailscale-mobile/README.md +59 -0
  11. package/examples/README.md +54 -0
  12. package/package.json +147 -0
  13. package/parsers-config.ts +253 -0
  14. package/script/build.ts +179 -0
  15. package/script/postinstall.mjs +125 -0
  16. package/script/publish-registries.ts +187 -0
  17. package/script/publish.ts +100 -0
  18. package/script/schema.ts +47 -0
  19. package/script/seed-e2e.ts +50 -0
  20. package/sequential-prancing-forest.md +373 -0
  21. package/src/acp/README.md +164 -0
  22. package/src/acp/agent.ts +1303 -0
  23. package/src/acp/session.ts +105 -0
  24. package/src/acp/types.ts +22 -0
  25. package/src/agent/agent.ts +528 -0
  26. package/src/agent/generate.txt +32 -0
  27. package/src/agent/prompt/compaction.txt +14 -0
  28. package/src/agent/prompt/explore.txt +18 -0
  29. package/src/agent/prompt/summary.txt +11 -0
  30. package/src/agent/prompt/title.txt +44 -0
  31. package/src/auth/index.ts +73 -0
  32. package/src/bun/index.ts +119 -0
  33. package/src/bun/registry.ts +54 -0
  34. package/src/bus/bus-event.ts +43 -0
  35. package/src/bus/global.ts +10 -0
  36. package/src/bus/index.ts +105 -0
  37. package/src/chatbot/handlers.ts +150 -0
  38. package/src/chatbot/index.ts +132 -0
  39. package/src/cli/bootstrap.ts +17 -0
  40. package/src/cli/cmd/acp.ts +69 -0
  41. package/src/cli/cmd/ads.ts +377 -0
  42. package/src/cli/cmd/agent.ts +259 -0
  43. package/src/cli/cmd/auth.ts +400 -0
  44. package/src/cli/cmd/chatbot.ts +420 -0
  45. package/src/cli/cmd/cmd.ts +7 -0
  46. package/src/cli/cmd/companion.ts +81 -0
  47. package/src/cli/cmd/connectors.ts +593 -0
  48. package/src/cli/cmd/debug/agent.ts +166 -0
  49. package/src/cli/cmd/debug/config.ts +16 -0
  50. package/src/cli/cmd/debug/file.ts +97 -0
  51. package/src/cli/cmd/debug/index.ts +48 -0
  52. package/src/cli/cmd/debug/lsp.ts +52 -0
  53. package/src/cli/cmd/debug/ripgrep.ts +87 -0
  54. package/src/cli/cmd/debug/scrap.ts +16 -0
  55. package/src/cli/cmd/debug/skill.ts +16 -0
  56. package/src/cli/cmd/debug/snapshot.ts +52 -0
  57. package/src/cli/cmd/export.ts +88 -0
  58. package/src/cli/cmd/generate.ts +38 -0
  59. package/src/cli/cmd/github.ts +412 -0
  60. package/src/cli/cmd/image-model.ts +128 -0
  61. package/src/cli/cmd/import.ts +201 -0
  62. package/src/cli/cmd/lovable.ts +128 -0
  63. package/src/cli/cmd/mcp.ts +738 -0
  64. package/src/cli/cmd/mobile.ts +223 -0
  65. package/src/cli/cmd/models.ts +77 -0
  66. package/src/cli/cmd/plug.ts +231 -0
  67. package/src/cli/cmd/pr.ts +104 -0
  68. package/src/cli/cmd/rag-model.ts +167 -0
  69. package/src/cli/cmd/remote.ts +416 -0
  70. package/src/cli/cmd/run.ts +589 -0
  71. package/src/cli/cmd/serve.ts +51 -0
  72. package/src/cli/cmd/session.ts +133 -0
  73. package/src/cli/cmd/speak-model.ts +204 -0
  74. package/src/cli/cmd/stats.ts +402 -0
  75. package/src/cli/cmd/tui/app.tsx +841 -0
  76. package/src/cli/cmd/tui/attach.ts +31 -0
  77. package/src/cli/cmd/tui/component/border.tsx +75 -0
  78. package/src/cli/cmd/tui/component/dialog-agent.tsx +31 -0
  79. package/src/cli/cmd/tui/component/dialog-command.tsx +172 -0
  80. package/src/cli/cmd/tui/component/dialog-config.tsx +291 -0
  81. package/src/cli/cmd/tui/component/dialog-connectors.tsx +440 -0
  82. package/src/cli/cmd/tui/component/dialog-image-model.tsx +97 -0
  83. package/src/cli/cmd/tui/component/dialog-mcp.tsx +86 -0
  84. package/src/cli/cmd/tui/component/dialog-model.tsx +234 -0
  85. package/src/cli/cmd/tui/component/dialog-provider.tsx +260 -0
  86. package/src/cli/cmd/tui/component/dialog-rag-model.tsx +217 -0
  87. package/src/cli/cmd/tui/component/dialog-remote.tsx +489 -0
  88. package/src/cli/cmd/tui/component/dialog-session-list.tsx +170 -0
  89. package/src/cli/cmd/tui/component/dialog-session-rename.tsx +31 -0
  90. package/src/cli/cmd/tui/component/dialog-settings/index.tsx +59 -0
  91. package/src/cli/cmd/tui/component/dialog-settings/prompt.tsx +40 -0
  92. package/src/cli/cmd/tui/component/dialog-settings/sidebar.tsx +39 -0
  93. package/src/cli/cmd/tui/component/dialog-settings/spinner.tsx +62 -0
  94. package/src/cli/cmd/tui/component/dialog-settings/ui.tsx +58 -0
  95. package/src/cli/cmd/tui/component/dialog-skills.tsx +117 -0
  96. package/src/cli/cmd/tui/component/dialog-speak-model.tsx +304 -0
  97. package/src/cli/cmd/tui/component/dialog-stash.tsx +87 -0
  98. package/src/cli/cmd/tui/component/dialog-status.tsx +165 -0
  99. package/src/cli/cmd/tui/component/dialog-tag.tsx +44 -0
  100. package/src/cli/cmd/tui/component/dialog-theme-create.tsx +717 -0
  101. package/src/cli/cmd/tui/component/dialog-theme-list.tsx +52 -0
  102. package/src/cli/cmd/tui/component/dialog-workspace-list.tsx +350 -0
  103. package/src/cli/cmd/tui/component/error-component.tsx +91 -0
  104. package/src/cli/cmd/tui/component/logo.tsx +103 -0
  105. package/src/cli/cmd/tui/component/plugin-route-missing.tsx +14 -0
  106. package/src/cli/cmd/tui/component/prompt/autocomplete.tsx +669 -0
  107. package/src/cli/cmd/tui/component/prompt/frecency.tsx +89 -0
  108. package/src/cli/cmd/tui/component/prompt/history.tsx +108 -0
  109. package/src/cli/cmd/tui/component/prompt/index.tsx +2165 -0
  110. package/src/cli/cmd/tui/component/prompt/stash.tsx +63 -0
  111. package/src/cli/cmd/tui/component/spinner.tsx +24 -0
  112. package/src/cli/cmd/tui/component/startup-loading.tsx +63 -0
  113. package/src/cli/cmd/tui/component/table/markdown-table.tsx +267 -0
  114. package/src/cli/cmd/tui/component/table-db/db/connections.ts +75 -0
  115. package/src/cli/cmd/tui/component/table-db/db/db-connection.ts +223 -0
  116. package/src/cli/cmd/tui/component/table-db/db/db-preview.ts +202 -0
  117. package/src/cli/cmd/tui/component/table-db/db/factory.ts +77 -0
  118. package/src/cli/cmd/tui/component/table-db/db/index.ts +9 -0
  119. package/src/cli/cmd/tui/component/table-db/db/mysql-connection.ts +330 -0
  120. package/src/cli/cmd/tui/component/table-db/db/postgres-connection.ts +338 -0
  121. package/src/cli/cmd/tui/component/table-db/db/sqlite-connection.ts +302 -0
  122. package/src/cli/cmd/tui/component/table-db/db/types.ts +108 -0
  123. package/src/cli/cmd/tui/component/table-db/table/dbedit-hooks.ts +74 -0
  124. package/src/cli/cmd/tui/component/table-db/table/index.ts +15 -0
  125. package/src/cli/cmd/tui/component/table-db/table/table-events.ts +54 -0
  126. package/src/cli/cmd/tui/component/table-db/table/table-formatters.ts +191 -0
  127. package/src/cli/cmd/tui/component/table-db/table/table-hooks.ts +105 -0
  128. package/src/cli/cmd/tui/component/table-db/table/table-keyboard-handler.ts +255 -0
  129. package/src/cli/cmd/tui/component/table-db/table/table-layout-engine.ts +208 -0
  130. package/src/cli/cmd/tui/component/table-db/table/table-renderable.ts +486 -0
  131. package/src/cli/cmd/tui/component/table-db/table/table-selection-manager.ts +136 -0
  132. package/src/cli/cmd/tui/component/table-db/table/table-state.ts +198 -0
  133. package/src/cli/cmd/tui/component/table-db/table/types.ts +69 -0
  134. package/src/cli/cmd/tui/component/table-db/ui/db-visualizer.tsx +71 -0
  135. package/src/cli/cmd/tui/component/table-db/ui/index.ts +2 -0
  136. package/src/cli/cmd/tui/component/table-db/ui/table-renderer.ts +607 -0
  137. package/src/cli/cmd/tui/component/textarea-keybindings.ts +73 -0
  138. package/src/cli/cmd/tui/component/tips.tsx +195 -0
  139. package/src/cli/cmd/tui/component/todo-item.tsx +32 -0
  140. package/src/cli/cmd/tui/context/args.tsx +14 -0
  141. package/src/cli/cmd/tui/context/directory.ts +13 -0
  142. package/src/cli/cmd/tui/context/exit.tsx +24 -0
  143. package/src/cli/cmd/tui/context/helper.tsx +25 -0
  144. package/src/cli/cmd/tui/context/keybind.tsx +102 -0
  145. package/src/cli/cmd/tui/context/kv.tsx +52 -0
  146. package/src/cli/cmd/tui/context/local.tsx +458 -0
  147. package/src/cli/cmd/tui/context/plugin-keybinds.ts +41 -0
  148. package/src/cli/cmd/tui/context/prompt.tsx +18 -0
  149. package/src/cli/cmd/tui/context/route.tsx +54 -0
  150. package/src/cli/cmd/tui/context/sdk.tsx +128 -0
  151. package/src/cli/cmd/tui/context/server.tsx +8 -0
  152. package/src/cli/cmd/tui/context/sync.tsx +510 -0
  153. package/src/cli/cmd/tui/context/theme/abyss.json +233 -0
  154. package/src/cli/cmd/tui/context/theme/apple.json +235 -0
  155. package/src/cli/cmd/tui/context/theme/arctic.json +232 -0
  156. package/src/cli/cmd/tui/context/theme/aura.json +69 -0
  157. package/src/cli/cmd/tui/context/theme/ayu.json +80 -0
  158. package/src/cli/cmd/tui/context/theme/ayuai.json +229 -0
  159. package/src/cli/cmd/tui/context/theme/blood.json +229 -0
  160. package/src/cli/cmd/tui/context/theme/carbonfox.json +248 -0
  161. package/src/cli/cmd/tui/context/theme/catmoe.json +235 -0
  162. package/src/cli/cmd/tui/context/theme/catppuccin-frappe.json +233 -0
  163. package/src/cli/cmd/tui/context/theme/catppuccin-latte.json +233 -0
  164. package/src/cli/cmd/tui/context/theme/catppuccin-macchiato.json +233 -0
  165. package/src/cli/cmd/tui/context/theme/catppuccin.json +259 -0
  166. package/src/cli/cmd/tui/context/theme/charcoal.json +230 -0
  167. package/src/cli/cmd/tui/context/theme/chromatic.json +235 -0
  168. package/src/cli/cmd/tui/context/theme/cobalt2.json +228 -0
  169. package/src/cli/cmd/tui/context/theme/cosmic.json +234 -0
  170. package/src/cli/cmd/tui/context/theme/cursor.json +249 -0
  171. package/src/cli/cmd/tui/context/theme/cyber.json +235 -0
  172. package/src/cli/cmd/tui/context/theme/dawnfox.json +229 -0
  173. package/src/cli/cmd/tui/context/theme/dimension.json +235 -0
  174. package/src/cli/cmd/tui/context/theme/dracula-official.json +222 -0
  175. package/src/cli/cmd/tui/context/theme/dracula.json +219 -0
  176. package/src/cli/cmd/tui/context/theme/dream.json +235 -0
  177. package/src/cli/cmd/tui/context/theme/duo.json +235 -0
  178. package/src/cli/cmd/tui/context/theme/dusk.json +235 -0
  179. package/src/cli/cmd/tui/context/theme/ebony.json +232 -0
  180. package/src/cli/cmd/tui/context/theme/equilibrium.json +232 -0
  181. package/src/cli/cmd/tui/context/theme/ethereal.json +235 -0
  182. package/src/cli/cmd/tui/context/theme/everforest.json +241 -0
  183. package/src/cli/cmd/tui/context/theme/flexoki.json +237 -0
  184. package/src/cli/cmd/tui/context/theme/fusion.json +235 -0
  185. package/src/cli/cmd/tui/context/theme/ghost.json +235 -0
  186. package/src/cli/cmd/tui/context/theme/github-dark.json +229 -0
  187. package/src/cli/cmd/tui/context/theme/github-dimmed.json +231 -0
  188. package/src/cli/cmd/tui/context/theme/github-light.json +229 -0
  189. package/src/cli/cmd/tui/context/theme/github.json +233 -0
  190. package/src/cli/cmd/tui/context/theme/glass.json +235 -0
  191. package/src/cli/cmd/tui/context/theme/gold.json +235 -0
  192. package/src/cli/cmd/tui/context/theme/gone.json +234 -0
  193. package/src/cli/cmd/tui/context/theme/greyscale.json +229 -0
  194. package/src/cli/cmd/tui/context/theme/gruvbox.json +242 -0
  195. package/src/cli/cmd/tui/context/theme/hacker.json +229 -0
  196. package/src/cli/cmd/tui/context/theme/holo.json +235 -0
  197. package/src/cli/cmd/tui/context/theme/ink.json +235 -0
  198. package/src/cli/cmd/tui/context/theme/jet.json +233 -0
  199. package/src/cli/cmd/tui/context/theme/kanagawa.json +227 -0
  200. package/src/cli/cmd/tui/context/theme/lavender.json +236 -0
  201. package/src/cli/cmd/tui/context/theme/lightph.json +235 -0
  202. package/src/cli/cmd/tui/context/theme/lucent-orng.json +237 -0
  203. package/src/cli/cmd/tui/context/theme/material-ocean.json +230 -0
  204. package/src/cli/cmd/tui/context/theme/material.json +235 -0
  205. package/src/cli/cmd/tui/context/theme/matrix.json +227 -0
  206. package/src/cli/cmd/tui/context/theme/mercury.json +245 -0
  207. package/src/cli/cmd/tui/context/theme/midnight.json +235 -0
  208. package/src/cli/cmd/tui/context/theme/modern.json +235 -0
  209. package/src/cli/cmd/tui/context/theme/monokai.json +221 -0
  210. package/src/cli/cmd/tui/context/theme/muted.json +229 -0
  211. package/src/cli/cmd/tui/context/theme/neon.json +229 -0
  212. package/src/cli/cmd/tui/context/theme/neonfusion.json +235 -0
  213. package/src/cli/cmd/tui/context/theme/neutral.json +235 -0
  214. package/src/cli/cmd/tui/context/theme/nightowl.json +221 -0
  215. package/src/cli/cmd/tui/context/theme/nikcli.json +245 -0
  216. package/src/cli/cmd/tui/context/theme/nord.json +223 -0
  217. package/src/cli/cmd/tui/context/theme/nordic.json +235 -0
  218. package/src/cli/cmd/tui/context/theme/nova.json +235 -0
  219. package/src/cli/cmd/tui/context/theme/obsidian.json +234 -0
  220. package/src/cli/cmd/tui/context/theme/one-dark.json +231 -0
  221. package/src/cli/cmd/tui/context/theme/one-pro.json +229 -0
  222. package/src/cli/cmd/tui/context/theme/onyx.json +233 -0
  223. package/src/cli/cmd/tui/context/theme/orng.json +249 -0
  224. package/src/cli/cmd/tui/context/theme/osaka-jade.json +240 -0
  225. package/src/cli/cmd/tui/context/theme/oxocarbon.json +229 -0
  226. package/src/cli/cmd/tui/context/theme/palenight.json +222 -0
  227. package/src/cli/cmd/tui/context/theme/poimandres.json +230 -0
  228. package/src/cli/cmd/tui/context/theme/prism.json +235 -0
  229. package/src/cli/cmd/tui/context/theme/radiant.json +235 -0
  230. package/src/cli/cmd/tui/context/theme/rosepine.json +234 -0
  231. package/src/cli/cmd/tui/context/theme/shadow.json +235 -0
  232. package/src/cli/cmd/tui/context/theme/silicon.json +235 -0
  233. package/src/cli/cmd/tui/context/theme/slate.json +233 -0
  234. package/src/cli/cmd/tui/context/theme/soft.json +235 -0
  235. package/src/cli/cmd/tui/context/theme/solarized.json +223 -0
  236. package/src/cli/cmd/tui/context/theme/spectrum.json +235 -0
  237. package/src/cli/cmd/tui/context/theme/starlight.json +233 -0
  238. package/src/cli/cmd/tui/context/theme/sunrise.json +235 -0
  239. package/src/cli/cmd/tui/context/theme/synthwave84.json +226 -0
  240. package/src/cli/cmd/tui/context/theme/tech.json +235 -0
  241. package/src/cli/cmd/tui/context/theme/tokyonight-storm.json +245 -0
  242. package/src/cli/cmd/tui/context/theme/tokyonight.json +243 -0
  243. package/src/cli/cmd/tui/context/theme/vapor.json +235 -0
  244. package/src/cli/cmd/tui/context/theme/vercel.json +245 -0
  245. package/src/cli/cmd/tui/context/theme/vesper.json +218 -0
  246. package/src/cli/cmd/tui/context/theme/vivid.json +232 -0
  247. package/src/cli/cmd/tui/context/theme/void.json +235 -0
  248. package/src/cli/cmd/tui/context/theme/vscode.json +235 -0
  249. package/src/cli/cmd/tui/context/theme/zenburn.json +223 -0
  250. package/src/cli/cmd/tui/context/theme/zinc.json +236 -0
  251. package/src/cli/cmd/tui/context/theme.tsx +1303 -0
  252. package/src/cli/cmd/tui/event.ts +48 -0
  253. package/src/cli/cmd/tui/feature-plugins/home/tips-view.tsx +152 -0
  254. package/src/cli/cmd/tui/feature-plugins/home/tips.tsx +50 -0
  255. package/src/cli/cmd/tui/feature-plugins/sidebar/context.tsx +63 -0
  256. package/src/cli/cmd/tui/feature-plugins/sidebar/files.tsx +62 -0
  257. package/src/cli/cmd/tui/feature-plugins/sidebar/footer.tsx +93 -0
  258. package/src/cli/cmd/tui/feature-plugins/sidebar/lsp.tsx +66 -0
  259. package/src/cli/cmd/tui/feature-plugins/sidebar/mcp.tsx +96 -0
  260. package/src/cli/cmd/tui/feature-plugins/sidebar/todo.tsx +48 -0
  261. package/src/cli/cmd/tui/feature-plugins/system/plugins.tsx +288 -0
  262. package/src/cli/cmd/tui/plugin/api.tsx +407 -0
  263. package/src/cli/cmd/tui/plugin/index.ts +3 -0
  264. package/src/cli/cmd/tui/plugin/internal.ts +25 -0
  265. package/src/cli/cmd/tui/plugin/runtime.ts +1048 -0
  266. package/src/cli/cmd/tui/plugin/slots.tsx +61 -0
  267. package/src/cli/cmd/tui/routes/home.tsx +153 -0
  268. package/src/cli/cmd/tui/routes/session/dbedit.tsx +474 -0
  269. package/src/cli/cmd/tui/routes/session/dialog-fork-from-timeline.tsx +65 -0
  270. package/src/cli/cmd/tui/routes/session/dialog-message.tsx +110 -0
  271. package/src/cli/cmd/tui/routes/session/dialog-subagent.tsx +105 -0
  272. package/src/cli/cmd/tui/routes/session/dialog-timeline.tsx +47 -0
  273. package/src/cli/cmd/tui/routes/session/footer.tsx +75 -0
  274. package/src/cli/cmd/tui/routes/session/header.tsx +177 -0
  275. package/src/cli/cmd/tui/routes/session/index.tsx +2280 -0
  276. package/src/cli/cmd/tui/routes/session/permission.tsx +540 -0
  277. package/src/cli/cmd/tui/routes/session/question.tsx +435 -0
  278. package/src/cli/cmd/tui/routes/session/sidebar.tsx +313 -0
  279. package/src/cli/cmd/tui/thread.ts +174 -0
  280. package/src/cli/cmd/tui/ui/dialog-alert.tsx +57 -0
  281. package/src/cli/cmd/tui/ui/dialog-confirm.tsx +83 -0
  282. package/src/cli/cmd/tui/ui/dialog-export-options.tsx +204 -0
  283. package/src/cli/cmd/tui/ui/dialog-help.tsx +38 -0
  284. package/src/cli/cmd/tui/ui/dialog-prompt.tsx +102 -0
  285. package/src/cli/cmd/tui/ui/dialog-select.tsx +389 -0
  286. package/src/cli/cmd/tui/ui/dialog.tsx +180 -0
  287. package/src/cli/cmd/tui/ui/link.tsx +34 -0
  288. package/src/cli/cmd/tui/ui/spinner.ts +368 -0
  289. package/src/cli/cmd/tui/ui/toast.tsx +138 -0
  290. package/src/cli/cmd/tui/util/clipboard.ts +154 -0
  291. package/src/cli/cmd/tui/util/editor.ts +32 -0
  292. package/src/cli/cmd/tui/util/signal.ts +7 -0
  293. package/src/cli/cmd/tui/util/terminal.ts +114 -0
  294. package/src/cli/cmd/tui/util/transcript.ts +98 -0
  295. package/src/cli/cmd/tui/win32.ts +110 -0
  296. package/src/cli/cmd/tui/worker.ts +156 -0
  297. package/src/cli/cmd/uninstall.ts +357 -0
  298. package/src/cli/cmd/upgrade.ts +72 -0
  299. package/src/cli/cmd/web.ts +87 -0
  300. package/src/cli/cmd/workspace-serve.ts +16 -0
  301. package/src/cli/error.ts +57 -0
  302. package/src/cli/network.ts +55 -0
  303. package/src/cli/remote/index.ts +36 -0
  304. package/src/cli/remote/notifications.ts +104 -0
  305. package/src/cli/remote/qr-renderer.ts +86 -0
  306. package/src/cli/remote/remote-service.ts +757 -0
  307. package/src/cli/remote/session-manager.ts +284 -0
  308. package/src/cli/remote/subagent-hooks.ts +151 -0
  309. package/src/cli/remote/types.ts +121 -0
  310. package/src/cli/ui.ts +96 -0
  311. package/src/cli/upgrade.ts +25 -0
  312. package/src/command/index.ts +174 -0
  313. package/src/command/template/initialize.txt +10 -0
  314. package/src/command/template/review.txt +99 -0
  315. package/src/config/config.ts +1760 -0
  316. package/src/config/markdown.ts +88 -0
  317. package/src/config/migrate-tui-config.ts +155 -0
  318. package/src/config/paths.ts +174 -0
  319. package/src/config/tui-schema.ts +36 -0
  320. package/src/config/tui.ts +209 -0
  321. package/src/connectors/api/base.ts +75 -0
  322. package/src/connectors/api/figma.ts +103 -0
  323. package/src/connectors/api/github.ts +247 -0
  324. package/src/connectors/api/lovable.ts +126 -0
  325. package/src/connectors/api/slack.ts +137 -0
  326. package/src/connectors/auth.ts +68 -0
  327. package/src/connectors/cache.ts +119 -0
  328. package/src/connectors/credentials.ts +81 -0
  329. package/src/connectors/index.ts +202 -0
  330. package/src/connectors/registry.ts +358 -0
  331. package/src/docs/context.ts +120 -0
  332. package/src/docs/library.ts +189 -0
  333. package/src/env/index.ts +26 -0
  334. package/src/file/ignore.ts +83 -0
  335. package/src/file/index.ts +411 -0
  336. package/src/file/ripgrep.ts +402 -0
  337. package/src/file/time.ts +65 -0
  338. package/src/file/watcher.ts +127 -0
  339. package/src/flag/flag.ts +128 -0
  340. package/src/format/formatter.ts +356 -0
  341. package/src/format/index.ts +137 -0
  342. package/src/global/index.ts +57 -0
  343. package/src/id/id.ts +83 -0
  344. package/src/ide/index.ts +76 -0
  345. package/src/index.ts +184 -0
  346. package/src/installation/index.ts +246 -0
  347. package/src/lsp/client.ts +250 -0
  348. package/src/lsp/index.ts +483 -0
  349. package/src/lsp/language.ts +119 -0
  350. package/src/lsp/server.ts +2046 -0
  351. package/src/mcp/auth.ts +121 -0
  352. package/src/mcp/index.ts +860 -0
  353. package/src/mcp/oauth-callback.ts +198 -0
  354. package/src/mcp/oauth-provider.ts +148 -0
  355. package/src/mobile/auth.ts +97 -0
  356. package/src/mobile/github-repo.ts +185 -0
  357. package/src/patch/index.ts +631 -0
  358. package/src/permission/arity.ts +150 -0
  359. package/src/permission/dbedit.ts +236 -0
  360. package/src/permission/index.ts +210 -0
  361. package/src/permission/next.ts +287 -0
  362. package/src/plugin/codex.ts +493 -0
  363. package/src/plugin/copilot.ts +261 -0
  364. package/src/plugin/index.ts +714 -0
  365. package/src/plugin/install.ts +379 -0
  366. package/src/plugin/meta.ts +165 -0
  367. package/src/plugin/shared.ts +188 -0
  368. package/src/project/bootstrap.ts +35 -0
  369. package/src/project/instance.ts +84 -0
  370. package/src/project/project.ts +373 -0
  371. package/src/project/state.ts +66 -0
  372. package/src/project/vcs.ts +76 -0
  373. package/src/prompt/stash-store.ts +93 -0
  374. package/src/provider/auth.ts +147 -0
  375. package/src/provider/models-macro.ts +22 -0
  376. package/src/provider/models.ts +216 -0
  377. package/src/provider/provider.ts +1483 -0
  378. package/src/provider/sdk/openai-compatible/src/README.md +5 -0
  379. package/src/provider/sdk/openai-compatible/src/index.ts +2 -0
  380. package/src/provider/sdk/openai-compatible/src/openai-compatible-provider.ts +100 -0
  381. package/src/provider/sdk/openai-compatible/src/responses/convert-to-openai-responses-input.ts +303 -0
  382. package/src/provider/sdk/openai-compatible/src/responses/map-openai-responses-finish-reason.ts +22 -0
  383. package/src/provider/sdk/openai-compatible/src/responses/openai-config.ts +18 -0
  384. package/src/provider/sdk/openai-compatible/src/responses/openai-error.ts +22 -0
  385. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-api-types.ts +207 -0
  386. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-language-model.ts +1732 -0
  387. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-prepare-tools.ts +177 -0
  388. package/src/provider/sdk/openai-compatible/src/responses/openai-responses-settings.ts +1 -0
  389. package/src/provider/sdk/openai-compatible/src/responses/tool/code-interpreter.ts +88 -0
  390. package/src/provider/sdk/openai-compatible/src/responses/tool/file-search.ts +128 -0
  391. package/src/provider/sdk/openai-compatible/src/responses/tool/image-generation.ts +115 -0
  392. package/src/provider/sdk/openai-compatible/src/responses/tool/local-shell.ts +65 -0
  393. package/src/provider/sdk/openai-compatible/src/responses/tool/web-search-preview.ts +104 -0
  394. package/src/provider/sdk/openai-compatible/src/responses/tool/web-search.ts +103 -0
  395. package/src/provider/transform.ts +828 -0
  396. package/src/pty/index.ts +241 -0
  397. package/src/question/index.ts +171 -0
  398. package/src/rag/chunk.ts +43 -0
  399. package/src/rag/embed.ts +179 -0
  400. package/src/rag/index.ts +376 -0
  401. package/src/rag/storage.ts +76 -0
  402. package/src/scheduler/index.ts +61 -0
  403. package/src/server/error.ts +36 -0
  404. package/src/server/event.ts +7 -0
  405. package/src/server/mdns.ts +59 -0
  406. package/src/server/routes/chatbot.ts +205 -0
  407. package/src/server/routes/companion.ts +729 -0
  408. package/src/server/routes/config.ts +92 -0
  409. package/src/server/routes/connectors.ts +121 -0
  410. package/src/server/routes/dbedit.ts +76 -0
  411. package/src/server/routes/experimental.ts +210 -0
  412. package/src/server/routes/file.ts +197 -0
  413. package/src/server/routes/global.ts +135 -0
  414. package/src/server/routes/mcp.ts +225 -0
  415. package/src/server/routes/mobile.ts +2044 -0
  416. package/src/server/routes/permission.ts +68 -0
  417. package/src/server/routes/project.ts +82 -0
  418. package/src/server/routes/provider.ts +235 -0
  419. package/src/server/routes/pty.ts +169 -0
  420. package/src/server/routes/question.ts +98 -0
  421. package/src/server/routes/session.ts +968 -0
  422. package/src/server/routes/tui.ts +379 -0
  423. package/src/server/routes/workspace.ts +104 -0
  424. package/src/server/server.ts +761 -0
  425. package/src/server/ssh.ts +207 -0
  426. package/src/session/auth.ts +402 -0
  427. package/src/session/compaction.ts +253 -0
  428. package/src/session/generate.ts +38 -0
  429. package/src/session/index.ts +598 -0
  430. package/src/session/llm.ts +273 -0
  431. package/src/session/message-v2.ts +836 -0
  432. package/src/session/message.ts +189 -0
  433. package/src/session/processor.ts +408 -0
  434. package/src/session/prompt/anthropic-20250930.txt +165 -0
  435. package/src/session/prompt/anthropic.txt +105 -0
  436. package/src/session/prompt/anthropic_spoof.txt +1 -0
  437. package/src/session/prompt/beast.txt +147 -0
  438. package/src/session/prompt/build-switch.txt +5 -0
  439. package/src/session/prompt/codex_header.txt +79 -0
  440. package/src/session/prompt/copilot-gpt-5.txt +143 -0
  441. package/src/session/prompt/gemini.txt +155 -0
  442. package/src/session/prompt/max-steps.txt +16 -0
  443. package/src/session/prompt/plan-reminder-anthropic.txt +67 -0
  444. package/src/session/prompt/plan.txt +25 -0
  445. package/src/session/prompt/qwen.txt +108 -0
  446. package/src/session/prompt.ts +1942 -0
  447. package/src/session/retry.ts +90 -0
  448. package/src/session/revert.ts +120 -0
  449. package/src/session/stats.ts +404 -0
  450. package/src/session/status.ts +84 -0
  451. package/src/session/summary.ts +184 -0
  452. package/src/session/system.ts +195 -0
  453. package/src/session/toast.tsx +105 -0
  454. package/src/session/todo.ts +258 -0
  455. package/src/session/uninstall.ts +357 -0
  456. package/src/share/share-next.ts +421 -0
  457. package/src/share/share.ts +92 -0
  458. package/src/shell/shell.ts +65 -0
  459. package/src/skill/index.ts +1 -0
  460. package/src/skill/skill.ts +232 -0
  461. package/src/snapshot/index.ts +297 -0
  462. package/src/storage/storage.ts +227 -0
  463. package/src/tool/apply_patch.ts +288 -0
  464. package/src/tool/apply_patch.txt +33 -0
  465. package/src/tool/bash.ts +252 -0
  466. package/src/tool/bash.txt +115 -0
  467. package/src/tool/batch.ts +175 -0
  468. package/src/tool/batch.txt +24 -0
  469. package/src/tool/codesearch.ts +132 -0
  470. package/src/tool/codesearch.txt +12 -0
  471. package/src/tool/context_collect.ts +152 -0
  472. package/src/tool/context_collect.txt +9 -0
  473. package/src/tool/context_diagnostics.ts +81 -0
  474. package/src/tool/context_diagnostics.txt +5 -0
  475. package/src/tool/context_related.ts +117 -0
  476. package/src/tool/context_related.txt +5 -0
  477. package/src/tool/context_search.ts +108 -0
  478. package/src/tool/context_search.txt +8 -0
  479. package/src/tool/db-diff.ts +434 -0
  480. package/src/tool/db-table.txt +15 -0
  481. package/src/tool/docs_add.ts +50 -0
  482. package/src/tool/docs_add.txt +5 -0
  483. package/src/tool/docs_context.ts +56 -0
  484. package/src/tool/docs_context.txt +4 -0
  485. package/src/tool/docs_gap_report.ts +79 -0
  486. package/src/tool/docs_gap_report.txt +7 -0
  487. package/src/tool/docs_load.ts +41 -0
  488. package/src/tool/docs_load.txt +4 -0
  489. package/src/tool/docs_request.ts +129 -0
  490. package/src/tool/docs_request.txt +7 -0
  491. package/src/tool/docs_search.ts +51 -0
  492. package/src/tool/docs_search.txt +6 -0
  493. package/src/tool/docs_unload.ts +38 -0
  494. package/src/tool/docs_unload.txt +5 -0
  495. package/src/tool/edit.ts +614 -0
  496. package/src/tool/edit.txt +10 -0
  497. package/src/tool/external-directory.ts +32 -0
  498. package/src/tool/generate_image.ts +174 -0
  499. package/src/tool/generate_image.txt +12 -0
  500. package/src/tool/glob.ts +79 -0
  501. package/src/tool/glob.txt +6 -0
  502. package/src/tool/grep.ts +153 -0
  503. package/src/tool/grep.txt +8 -0
  504. package/src/tool/invalid.ts +17 -0
  505. package/src/tool/ls.ts +116 -0
  506. package/src/tool/ls.txt +1 -0
  507. package/src/tool/lsp.ts +96 -0
  508. package/src/tool/lsp.txt +19 -0
  509. package/src/tool/memory_search.ts +141 -0
  510. package/src/tool/memory_search.txt +8 -0
  511. package/src/tool/multiedit.ts +46 -0
  512. package/src/tool/multiedit.txt +41 -0
  513. package/src/tool/plan-enter.txt +14 -0
  514. package/src/tool/plan-exit.txt +13 -0
  515. package/src/tool/plan.ts +130 -0
  516. package/src/tool/question.ts +33 -0
  517. package/src/tool/question.txt +10 -0
  518. package/src/tool/rag_index.ts +77 -0
  519. package/src/tool/rag_index.txt +10 -0
  520. package/src/tool/rag_reset.ts +26 -0
  521. package/src/tool/rag_reset.txt +4 -0
  522. package/src/tool/rag_search.ts +62 -0
  523. package/src/tool/rag_search.txt +6 -0
  524. package/src/tool/rag_status.ts +45 -0
  525. package/src/tool/rag_status.txt +4 -0
  526. package/src/tool/read.ts +203 -0
  527. package/src/tool/read.txt +12 -0
  528. package/src/tool/registry.ts +214 -0
  529. package/src/tool/skill.ts +169 -0
  530. package/src/tool/skill.txt +3 -0
  531. package/src/tool/smart_docs.ts +74 -0
  532. package/src/tool/smart_docs.txt +7 -0
  533. package/src/tool/speak/elevenlabs.ts +201 -0
  534. package/src/tool/speak/openrouter.ts +240 -0
  535. package/src/tool/speak/provider.ts +83 -0
  536. package/src/tool/speak.ts +440 -0
  537. package/src/tool/task.ts +194 -0
  538. package/src/tool/task.txt +60 -0
  539. package/src/tool/todo.ts +53 -0
  540. package/src/tool/todoread.txt +14 -0
  541. package/src/tool/todowrite.txt +167 -0
  542. package/src/tool/tool.ts +87 -0
  543. package/src/tool/tree.ts +218 -0
  544. package/src/tool/tree.txt +8 -0
  545. package/src/tool/truncation.ts +106 -0
  546. package/src/tool/use-connector.ts +47 -0
  547. package/src/tool/voice.ts +188 -0
  548. package/src/tool/webfetch.ts +205 -0
  549. package/src/tool/webfetch.txt +13 -0
  550. package/src/tool/websearch.ts +150 -0
  551. package/src/tool/websearch.txt +14 -0
  552. package/src/tool/write.ts +80 -0
  553. package/src/tool/write.txt +8 -0
  554. package/src/util/archive.ts +16 -0
  555. package/src/util/color.ts +19 -0
  556. package/src/util/context.ts +25 -0
  557. package/src/util/defer.ts +12 -0
  558. package/src/util/error.ts +77 -0
  559. package/src/util/eventloop.ts +20 -0
  560. package/src/util/filesystem.ts +125 -0
  561. package/src/util/flock.ts +329 -0
  562. package/src/util/fn.ts +11 -0
  563. package/src/util/format.ts +20 -0
  564. package/src/util/hash.ts +7 -0
  565. package/src/util/iife.ts +3 -0
  566. package/src/util/keybind.ts +103 -0
  567. package/src/util/lazy.ts +18 -0
  568. package/src/util/locale.ts +81 -0
  569. package/src/util/lock.ts +98 -0
  570. package/src/util/log.ts +180 -0
  571. package/src/util/network.ts +9 -0
  572. package/src/util/process.ts +15 -0
  573. package/src/util/queue.ts +32 -0
  574. package/src/util/record.ts +3 -0
  575. package/src/util/rpc.ts +66 -0
  576. package/src/util/scrap.ts +10 -0
  577. package/src/util/signal.ts +12 -0
  578. package/src/util/timeout.ts +14 -0
  579. package/src/util/token.ts +7 -0
  580. package/src/util/wildcard.ts +56 -0
  581. package/src/workspace/adaptors/index.ts +271 -0
  582. package/src/workspace/adaptors/types.ts +14 -0
  583. package/src/workspace/adaptors/worktree.ts +31 -0
  584. package/src/workspace/config.ts +19 -0
  585. package/src/workspace/index.ts +223 -0
  586. package/src/workspace/session-proxy-middleware.ts +97 -0
  587. package/src/workspace/sse.ts +66 -0
  588. package/src/workspace/workspace-context.ts +23 -0
  589. package/src/workspace/workspace-server/routes.ts +33 -0
  590. package/src/workspace/workspace-server/server.ts +47 -0
  591. package/src/worktree/index.ts +487 -0
  592. package/sst-env.d.ts +10 -0
  593. package/test/benchmark.test.ts +121 -0
  594. package/test/build-optimizations.test.ts +124 -0
  595. package/test/id-benchmark.test.ts +132 -0
  596. package/test/optimizations.test.ts +302 -0
  597. package/test/preload.ts +1 -0
  598. package/test/solidjs-benchmark.test.ts +262 -0
  599. package/test/solidjs-optimizations.test.ts +259 -0
  600. package/test/tui-benchmark.test.ts +230 -0
  601. package/test/wildcard-benchmark.test.ts +180 -0
  602. package/tsconfig.json +26 -0
@@ -0,0 +1,75 @@
1
+ export abstract class BaseApiClient<AuthConfig extends Record<string, string>> {
2
+ protected abstract baseUrl: string
3
+
4
+ protected abstract getAuth(authConfig: AuthConfig): Record<string, string>
5
+
6
+ protected async request<T>(
7
+ path: string,
8
+ options: RequestInit & { query?: Record<string, string | number>; auth?: AuthConfig } = {},
9
+ ): Promise<T> {
10
+ let url = path.startsWith("http") ? path : `${this.baseUrl}${path}`
11
+
12
+ if (options.query) {
13
+ const params = new URLSearchParams()
14
+ for (const [key, value] of Object.entries(options.query)) {
15
+ params.append(key, String(value))
16
+ }
17
+ const separator = url.includes("?") ? "&" : "?"
18
+ url += separator + params.toString()
19
+ }
20
+
21
+ const { query, auth, ...fetchOptions } = options
22
+ const authHeaders = auth ? this.getAuth(auth) : {}
23
+
24
+ const response = await fetch(url, {
25
+ ...fetchOptions,
26
+ headers: {
27
+ ...authHeaders,
28
+ ...(fetchOptions.headers || {}),
29
+ },
30
+ })
31
+
32
+ if (!response.ok) {
33
+ const errorText = await response.text().catch(() => "")
34
+ throw new Error(
35
+ `${this.constructor.name} error: ${response.status} ${response.statusText}${errorText ? ` - ${errorText}` : ""}`,
36
+ )
37
+ }
38
+
39
+ return response.json()
40
+ }
41
+
42
+ protected async get<T>(
43
+ path: string,
44
+ options?: Omit<RequestInit, "method"> & { query?: Record<string, string | number>; auth?: AuthConfig },
45
+ ): Promise<T> {
46
+ return this.request<T>(path, { ...options, method: "GET" })
47
+ }
48
+
49
+ protected async post<T>(
50
+ path: string,
51
+ body?: unknown,
52
+ options?: Omit<RequestInit, "method" | "body"> & { auth?: AuthConfig },
53
+ ): Promise<T> {
54
+ return this.request<T>(path, {
55
+ ...options,
56
+ method: "POST",
57
+ headers: {
58
+ ...(options?.headers || {}),
59
+ "Content-Type": "application/json",
60
+ },
61
+ body: JSON.stringify(body),
62
+ })
63
+ }
64
+ }
65
+
66
+ export class ApiError extends Error {
67
+ constructor(
68
+ public readonly service: string,
69
+ public readonly status: number,
70
+ public override readonly message: string,
71
+ ) {
72
+ super(`${service} error: ${status} ${message}`)
73
+ this.name = "ApiError"
74
+ }
75
+ }
@@ -0,0 +1,103 @@
1
+ import { ConnectorAuth } from "../auth"
2
+
3
+ const FIGMA_API_BASE = "https://api.figma.com/v1"
4
+
5
+ export namespace FigmaApi {
6
+ export async function getFile(token: string, fileKey: string): Promise<any> {
7
+ const response = await fetch(`${FIGMA_API_BASE}/files/${fileKey}`, {
8
+ headers: { "X-Figma-Token": token },
9
+ })
10
+ if (!response.ok) {
11
+ throw new Error(`Figma API error: ${response.status} ${response.statusText}`)
12
+ }
13
+ return response.json()
14
+ }
15
+
16
+ export async function getFileComponents(token: string, fileKey: string): Promise<any> {
17
+ const response = await fetch(`${FIGMA_API_BASE}/files/${fileKey}/components`, {
18
+ headers: { "X-Figma-Token": token },
19
+ })
20
+ if (!response.ok) {
21
+ throw new Error(`Figma API error: ${response.status} ${response.statusText}`)
22
+ }
23
+ return response.json()
24
+ }
25
+
26
+ export async function getFileStyles(token: string, fileKey: string): Promise<any> {
27
+ const response = await fetch(`${FIGMA_API_BASE}/files/${fileKey}/styles`, {
28
+ headers: { "X-Figma-Token": token },
29
+ })
30
+ if (!response.ok) {
31
+ throw new Error(`Figma API error: ${response.status} ${response.statusText}`)
32
+ }
33
+ return response.json()
34
+ }
35
+
36
+ export async function getComments(token: string, fileKey: string): Promise<any> {
37
+ const response = await fetch(`${FIGMA_API_BASE}/files/${fileKey}/comments`, {
38
+ headers: { "X-Figma-Token": token },
39
+ })
40
+ if (!response.ok) {
41
+ throw new Error(`Figma API error: ${response.status} ${response.statusText}`)
42
+ }
43
+ return response.json()
44
+ }
45
+
46
+ export async function getImage(token: string, fileKey: string, nodeIds: string[], scale: number = 2): Promise<any> {
47
+ const response = await fetch(
48
+ `${FIGMA_API_BASE}/images/${fileKey}?ids=${nodeIds.join(",")}&scale=${scale}&format=png`,
49
+ {
50
+ headers: { "X-Figma-Token": token },
51
+ },
52
+ )
53
+ if (!response.ok) {
54
+ throw new Error(`Figma API error: ${response.status} ${response.statusText}`)
55
+ }
56
+ return response.json()
57
+ }
58
+
59
+ export async function getTeamProjects(token: string, teamId: string): Promise<any> {
60
+ const response = await fetch(`${FIGMA_API_BASE}/teams/${teamId}/projects`, {
61
+ headers: { "X-Figma-Token": token },
62
+ })
63
+ if (!response.ok) {
64
+ throw new Error(`Figma API error: ${response.status} ${response.statusText}`)
65
+ }
66
+ return response.json()
67
+ }
68
+
69
+ export async function getProjectFiles(token: string, projectId: string): Promise<any> {
70
+ const response = await fetch(`${FIGMA_API_BASE}/projects/${projectId}/files`, {
71
+ headers: { "X-Figma-Token": token },
72
+ })
73
+ if (!response.ok) {
74
+ throw new Error(`Figma API error: ${response.status} ${response.statusText}`)
75
+ }
76
+ return response.json()
77
+ }
78
+
79
+ export async function getMe(token: string): Promise<any> {
80
+ const response = await fetch(`${FIGMA_API_BASE}/me`, {
81
+ headers: { "X-Figma-Token": token },
82
+ })
83
+ if (!response.ok) {
84
+ throw new Error(`Figma API error: ${response.status} ${response.statusText}`)
85
+ }
86
+ return response.json()
87
+ }
88
+
89
+ export async function getNode(token: string, fileKey: string, nodeId: string): Promise<any> {
90
+ const response = await fetch(`${FIGMA_API_BASE}/files/${fileKey}/nodes?ids=${nodeId}`, {
91
+ headers: { "X-Figma-Token": token },
92
+ })
93
+ if (!response.ok) {
94
+ throw new Error(`Figma API error: ${response.status} ${response.statusText}`)
95
+ }
96
+ return response.json()
97
+ }
98
+ }
99
+
100
+ export async function getToken(name: string): Promise<string | null> {
101
+ const auth = await ConnectorAuth.get(name)
102
+ return auth?.token ?? null
103
+ }
@@ -0,0 +1,247 @@
1
+ import { ConnectorAuth } from "../auth"
2
+
3
+ const GITHUB_API_BASE = "https://api.github.com"
4
+
5
+ export namespace GithubApi {
6
+ export async function getRepo(token: string, owner: string, repo: string): Promise<any> {
7
+ const response = await fetch(`${GITHUB_API_BASE}/repos/${owner}/${repo}`, {
8
+ headers: {
9
+ Authorization: `Bearer ${token}`,
10
+ Accept: "application/vnd.github.v3+json",
11
+ },
12
+ })
13
+ if (!response.ok) {
14
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
15
+ }
16
+ return response.json()
17
+ }
18
+
19
+ export async function getRepoContent(
20
+ token: string,
21
+ owner: string,
22
+ repo: string,
23
+ path: string,
24
+ ref?: string,
25
+ ): Promise<any> {
26
+ const url = ref
27
+ ? `${GITHUB_API_BASE}/repos/${owner}/${repo}/contents/${path}?ref=${ref}`
28
+ : `${GITHUB_API_BASE}/repos/${owner}/${repo}/contents/${path}`
29
+ const response = await fetch(url, {
30
+ headers: {
31
+ Authorization: `Bearer ${token}`,
32
+ Accept: "application/vnd.github.v3+json",
33
+ },
34
+ })
35
+ if (!response.ok) {
36
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
37
+ }
38
+ return response.json()
39
+ }
40
+
41
+ export async function createIssue(
42
+ token: string,
43
+ owner: string,
44
+ repo: string,
45
+ title: string,
46
+ body?: string,
47
+ ): Promise<any> {
48
+ const response = await fetch(`${GITHUB_API_BASE}/repos/${owner}/${repo}/issues`, {
49
+ method: "POST",
50
+ headers: {
51
+ Authorization: `Bearer ${token}`,
52
+ Accept: "application/vnd.github.v3+json",
53
+ "Content-Type": "application/json",
54
+ },
55
+ body: JSON.stringify({ title, body }),
56
+ })
57
+ if (!response.ok) {
58
+ const error = await response.text()
59
+ throw new Error(`GitHub API error: ${response.status} - ${error}`)
60
+ }
61
+ return response.json()
62
+ }
63
+
64
+ export async function getIssue(token: string, owner: string, repo: string, issueNumber: number): Promise<any> {
65
+ const response = await fetch(`${GITHUB_API_BASE}/repos/${owner}/${repo}/issues/${issueNumber}`, {
66
+ headers: {
67
+ Authorization: `Bearer ${token}`,
68
+ Accept: "application/vnd.github.v3+json",
69
+ },
70
+ })
71
+ if (!response.ok) {
72
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
73
+ }
74
+ return response.json()
75
+ }
76
+
77
+ export async function listIssues(
78
+ token: string,
79
+ owner: string,
80
+ repo: string,
81
+ state: "open" | "closed" | "all" = "open",
82
+ ): Promise<any> {
83
+ const response = await fetch(`${GITHUB_API_BASE}/repos/${owner}/${repo}/issues?state=${state}`, {
84
+ headers: {
85
+ Authorization: `Bearer ${token}`,
86
+ Accept: "application/vnd.github.v3+json",
87
+ },
88
+ })
89
+ if (!response.ok) {
90
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
91
+ }
92
+ return response.json()
93
+ }
94
+
95
+ export async function searchCode(token: string, query: string, sort?: string, order?: "asc" | "desc"): Promise<any> {
96
+ let url = `${GITHUB_API_BASE}/search/code?q=${encodeURIComponent(query)}`
97
+ if (sort) url += `&sort=${sort}&order=${order}`
98
+ const response = await fetch(url, {
99
+ headers: {
100
+ Authorization: `Bearer ${token}`,
101
+ Accept: "application/vnd.github.v3+json",
102
+ },
103
+ })
104
+ if (!response.ok) {
105
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
106
+ }
107
+ return response.json()
108
+ }
109
+
110
+ export async function searchRepos(
111
+ token: string,
112
+ query: string,
113
+ sort?: "stars" | "updated" | "help-wanted-issues",
114
+ ): Promise<any> {
115
+ let url = `${GITHUB_API_BASE}/search/repositories?q=${encodeURIComponent(query)}`
116
+ if (sort) url += `&sort=${sort}`
117
+ const response = await fetch(url, {
118
+ headers: {
119
+ Authorization: `Bearer ${token}`,
120
+ Accept: "application/vnd.github.v3+json",
121
+ },
122
+ })
123
+ if (!response.ok) {
124
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
125
+ }
126
+ return response.json()
127
+ }
128
+
129
+ export async function getUser(token: string): Promise<any> {
130
+ const response = await fetch(`${GITHUB_API_BASE}/user`, {
131
+ headers: {
132
+ Authorization: `Bearer ${token}`,
133
+ Accept: "application/vnd.github.v3+json",
134
+ },
135
+ })
136
+ if (!response.ok) {
137
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
138
+ }
139
+ return response.json()
140
+ }
141
+
142
+ export async function listRepos(
143
+ token: string,
144
+ type: "all" | "owner" | "member" = "owner",
145
+ sort?: "updated" | "pushed" | "full_name",
146
+ ): Promise<any> {
147
+ let url = `${GITHUB_API_BASE}/user/repos?type=${type}`
148
+ if (sort) url += `&sort=${sort}`
149
+ const response = await fetch(url, {
150
+ headers: {
151
+ Authorization: `Bearer ${token}`,
152
+ Accept: "application/vnd.github.v3+json",
153
+ },
154
+ })
155
+ if (!response.ok) {
156
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
157
+ }
158
+ return response.json()
159
+ }
160
+
161
+ export async function listBranches(token: string, owner: string, repo: string): Promise<any> {
162
+ const response = await fetch(`${GITHUB_API_BASE}/repos/${owner}/${repo}/branches?per_page=100`, {
163
+ headers: {
164
+ Authorization: `Bearer ${token}`,
165
+ Accept: "application/vnd.github.v3+json",
166
+ },
167
+ })
168
+ if (!response.ok) {
169
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
170
+ }
171
+ return response.json()
172
+ }
173
+
174
+ export async function findPullRequestByHead(
175
+ token: string,
176
+ owner: string,
177
+ repo: string,
178
+ head: string,
179
+ state: "open" | "closed" | "all" = "open",
180
+ ): Promise<any | undefined> {
181
+ const response = await fetch(
182
+ `${GITHUB_API_BASE}/repos/${owner}/${repo}/pulls?head=${encodeURIComponent(head)}&state=${state}&per_page=1`,
183
+ {
184
+ headers: {
185
+ Authorization: `Bearer ${token}`,
186
+ Accept: "application/vnd.github.v3+json",
187
+ },
188
+ },
189
+ )
190
+ if (!response.ok) {
191
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
192
+ }
193
+ const pulls = (await response.json()) as any[]
194
+ return pulls[0]
195
+ }
196
+
197
+ export async function createPullRequest(
198
+ token: string,
199
+ owner: string,
200
+ repo: string,
201
+ title: string,
202
+ head: string,
203
+ base: string,
204
+ body?: string,
205
+ ): Promise<any> {
206
+ const response = await fetch(`${GITHUB_API_BASE}/repos/${owner}/${repo}/pulls`, {
207
+ method: "POST",
208
+ headers: {
209
+ Authorization: `Bearer ${token}`,
210
+ Accept: "application/vnd.github.v3+json",
211
+ "Content-Type": "application/json",
212
+ },
213
+ body: JSON.stringify({ title, head, base, body }),
214
+ })
215
+ if (!response.ok) {
216
+ const error = await response.text()
217
+ throw new Error(`GitHub API error: ${response.status} - ${error}`)
218
+ }
219
+ return response.json()
220
+ }
221
+
222
+ export async function getPullRequest(token: string, owner: string, repo: string, pullNumber: number): Promise<any> {
223
+ const response = await fetch(`${GITHUB_API_BASE}/repos/${owner}/${repo}/pulls/${pullNumber}`, {
224
+ headers: {
225
+ Authorization: `Bearer ${token}`,
226
+ Accept: "application/vnd.github.v3+json",
227
+ },
228
+ })
229
+ if (!response.ok) {
230
+ throw new Error(`GitHub API error: ${response.status} ${response.statusText}`)
231
+ }
232
+ return response.json()
233
+ }
234
+
235
+ export async function getFileContent(token: string, owner: string, repo: string, path: string): Promise<string> {
236
+ const content = await getRepoContent(token, owner, repo, path)
237
+ if (content.encoding === "base64" && content.content) {
238
+ return Buffer.from(content.content, "base64").toString("utf-8")
239
+ }
240
+ throw new Error("Unable to decode file content")
241
+ }
242
+ }
243
+
244
+ export async function getToken(name: string): Promise<string | null> {
245
+ const auth = await ConnectorAuth.get(name)
246
+ return auth?.token ?? null
247
+ }
@@ -0,0 +1,126 @@
1
+ import { ConnectorAuth } from "../auth"
2
+
3
+ const LOVABLE_API_BASE = "https://api.lovable.dev/v1"
4
+
5
+ export namespace LovableApi {
6
+ export async function getProjects(token: string): Promise<any> {
7
+ const response = await fetch(`${LOVABLE_API_BASE}/projects`, {
8
+ headers: {
9
+ Authorization: `Bearer ${token}`,
10
+ Accept: "application/json",
11
+ },
12
+ })
13
+ if (!response.ok) {
14
+ throw new Error(`Lovable API error: ${response.status} ${response.statusText}`)
15
+ }
16
+ return response.json()
17
+ }
18
+
19
+ export async function getProject(token: string, projectId: string): Promise<any> {
20
+ const response = await fetch(`${LOVABLE_API_BASE}/projects/${projectId}`, {
21
+ headers: {
22
+ Authorization: `Bearer ${token}`,
23
+ Accept: "application/json",
24
+ },
25
+ })
26
+ if (!response.ok) {
27
+ throw new Error(`Lovable API error: ${response.status} ${response.statusText}`)
28
+ }
29
+ return response.json()
30
+ }
31
+
32
+ export async function getChats(token: string, projectId: string): Promise<any> {
33
+ const response = await fetch(`${LOVABLE_API_BASE}/projects/${projectId}/chats`, {
34
+ headers: {
35
+ Authorization: `Bearer ${token}`,
36
+ Accept: "application/json",
37
+ },
38
+ })
39
+ if (!response.ok) {
40
+ throw new Error(`Lovable API error: ${response.status} ${response.statusText}`)
41
+ }
42
+ return response.json()
43
+ }
44
+
45
+ export async function getChatMessages(token: string, projectId: string, chatId: string): Promise<any> {
46
+ const response = await fetch(`${LOVABLE_API_BASE}/projects/${projectId}/chats/${chatId}/messages`, {
47
+ headers: {
48
+ Authorization: `Bearer ${token}`,
49
+ Accept: "application/json",
50
+ },
51
+ })
52
+ if (!response.ok) {
53
+ throw new Error(`Lovable API error: ${response.status} ${response.statusText}`)
54
+ }
55
+ return response.json()
56
+ }
57
+
58
+ export async function sendMessage(token: string, projectId: string, message: string, chatId?: string): Promise<any> {
59
+ const response = await fetch(`${LOVABLE_API_BASE}/projects/${projectId}/chats`, {
60
+ method: "POST",
61
+ headers: {
62
+ Authorization: `Bearer ${token}`,
63
+ Accept: "application/json",
64
+ "Content-Type": "application/json",
65
+ },
66
+ body: JSON.stringify({ message, chatId }),
67
+ })
68
+ if (!response.ok) {
69
+ const error = await response.text()
70
+ throw new Error(`Lovable API error: ${response.status} - ${error}`)
71
+ }
72
+ return response.json()
73
+ }
74
+
75
+ export async function getProjectFiles(token: string, projectId: string): Promise<any> {
76
+ const response = await fetch(`${LOVABLE_API_BASE}/projects/${projectId}/files`, {
77
+ headers: {
78
+ Authorization: `Bearer ${token}`,
79
+ Accept: "application/json",
80
+ },
81
+ })
82
+ if (!response.ok) {
83
+ throw new Error(`Lovable API error: ${response.status} ${response.statusText}`)
84
+ }
85
+ return response.json()
86
+ }
87
+
88
+ export async function getFileContent(token: string, projectId: string, filePath: string): Promise<any> {
89
+ const response = await fetch(
90
+ `${LOVABLE_API_BASE}/projects/${projectId}/files/${encodeURIComponent(filePath)}/content`,
91
+ {
92
+ headers: {
93
+ Authorization: `Bearer ${token}`,
94
+ Accept: "application/json",
95
+ },
96
+ },
97
+ )
98
+ if (!response.ok) {
99
+ throw new Error(`Lovable API error: ${response.status} ${response.statusText}`)
100
+ }
101
+ return response.json()
102
+ }
103
+
104
+ export async function runPrompt(token: string, projectId: string, prompt: string): Promise<any> {
105
+ const response = await fetch(`${LOVABLE_API_BASE}/projects/${projectId}/prompts`, {
106
+ method: "POST",
107
+ headers: {
108
+ Authorization: `Bearer ${token}`,
109
+ Accept: "application/json",
110
+ "Content-Type": "application/json",
111
+ },
112
+ body: JSON.stringify({ prompt }),
113
+ })
114
+ if (!response.ok) {
115
+ const error = await response.text()
116
+ throw new Error(`Lovable API error: ${response.status} - ${error}`)
117
+ }
118
+ return response.json()
119
+ }
120
+ }
121
+
122
+ export async function getToken(name: string): Promise<string | null> {
123
+ const auth = await ConnectorAuth.get(name)
124
+ if (auth?.token) return auth.token
125
+ return auth?.apiKey ?? null
126
+ }
@@ -0,0 +1,137 @@
1
+ import { ConnectorAuth } from "../auth"
2
+
3
+ const SLACK_API_BASE = "https://slack.com/api"
4
+
5
+ export namespace SlackApi {
6
+ export async function sendMessage(botToken: string, channel: string, text: string, blocks?: any[]): Promise<any> {
7
+ const body: any = { channel, text }
8
+ if (blocks) body.blocks = blocks
9
+
10
+ const response = await fetch(`${SLACK_API_BASE}/chat.postMessage`, {
11
+ method: "POST",
12
+ headers: {
13
+ Authorization: `Bearer ${botToken}`,
14
+ "Content-Type": "application/json",
15
+ },
16
+ body: JSON.stringify(body),
17
+ })
18
+ const result = await response.json()
19
+ if (!result.ok) {
20
+ throw new Error(`Slack API error: ${result.error}`)
21
+ }
22
+ return result
23
+ }
24
+
25
+ export async function getConversationInfo(botToken: string, channel: string): Promise<any> {
26
+ const response = await fetch(`${SLACK_API_BASE}/conversations.info?channel=${channel}`, {
27
+ headers: { Authorization: `Bearer ${botToken}` },
28
+ })
29
+ const result = await response.json()
30
+ if (!result.ok) {
31
+ throw new Error(`Slack API error: ${result.error}`)
32
+ }
33
+ return result
34
+ }
35
+
36
+ export async function listConversations(botToken: string, types?: string): Promise<any> {
37
+ const url = types ? `${SLACK_API_BASE}/conversations.list?types=${types}` : `${SLACK_API_BASE}/conversations.list`
38
+ const response = await fetch(url, {
39
+ headers: { Authorization: `Bearer ${botToken}` },
40
+ })
41
+ const result = await response.json()
42
+ if (!result.ok) {
43
+ throw new Error(`Slack API error: ${result.error}`)
44
+ }
45
+ return result
46
+ }
47
+
48
+ export async function searchMessages(botToken: string, query: string, count: number = 20): Promise<any> {
49
+ const response = await fetch(
50
+ `${SLACK_API_BASE}/search.messages?query=${encodeURIComponent(query)}&count=${count}`,
51
+ {
52
+ headers: { Authorization: `Bearer ${botToken}` },
53
+ },
54
+ )
55
+ const result = await response.json()
56
+ if (!result.ok) {
57
+ throw new Error(`Slack API error: ${result.error}`)
58
+ }
59
+ return result
60
+ }
61
+
62
+ export async function getPermalink(botToken: string, channel: string, timestamp: string): Promise<any> {
63
+ const response = await fetch(`${SLACK_API_BASE}/chat.getPermalink?channel=${channel}&message_ts=${timestamp}`, {
64
+ headers: { Authorization: `Bearer ${botToken}` },
65
+ })
66
+ const result = await response.json()
67
+ if (!result.ok) {
68
+ throw new Error(`Slack API error: ${result.error}`)
69
+ }
70
+ return result
71
+ }
72
+
73
+ export async function replyToMessage(
74
+ botToken: string,
75
+ channel: string,
76
+ threadTs: string,
77
+ text: string,
78
+ ): Promise<any> {
79
+ const response = await fetch(`${SLACK_API_BASE}/chat.postMessage`, {
80
+ method: "POST",
81
+ headers: {
82
+ Authorization: `Bearer ${botToken}`,
83
+ "Content-Type": "application/json",
84
+ },
85
+ body: JSON.stringify({ channel, text, thread_ts: threadTs }),
86
+ })
87
+ const result = await response.json()
88
+ if (!result.ok) {
89
+ throw new Error(`Slack API error: ${result.error}`)
90
+ }
91
+ return result
92
+ }
93
+
94
+ export async function uploadFile(
95
+ botToken: string,
96
+ channels: string,
97
+ fileData: Uint8Array,
98
+ filename: string,
99
+ ): Promise<any> {
100
+ const formData = new FormData()
101
+ formData.append("channels", channels)
102
+ formData.append("file", new Blob([fileData.buffer as ArrayBuffer]), filename)
103
+ formData.append("filename", filename)
104
+
105
+ const response = await fetch(`${SLACK_API_BASE}/files.upload`, {
106
+ method: "POST",
107
+ headers: { Authorization: `Bearer ${botToken}` },
108
+ body: formData,
109
+ })
110
+ const result = await response.json()
111
+ if (!result.ok) {
112
+ throw new Error(`Slack API error: ${result.error}`)
113
+ }
114
+ return result
115
+ }
116
+
117
+ export async function listUsers(botToken: string): Promise<any> {
118
+ const response = await fetch(`${SLACK_API_BASE}/users.list`, {
119
+ headers: { Authorization: `Bearer ${botToken}` },
120
+ })
121
+ const result = await response.json()
122
+ if (!result.ok) {
123
+ throw new Error(`Slack API error: ${result.error}`)
124
+ }
125
+ return result
126
+ }
127
+ }
128
+
129
+ export async function getBotToken(name: string): Promise<string | null> {
130
+ const auth = await ConnectorAuth.get(name)
131
+ return auth?.botToken ?? null
132
+ }
133
+
134
+ export async function getTeamId(name: string): Promise<string | null> {
135
+ const auth = await ConnectorAuth.get(name)
136
+ return auth?.teamId ?? null
137
+ }