@interactive-inc/claude-funnel 0.4.1 → 0.8.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 (349) hide show
  1. package/README.md +233 -111
  2. package/dist/bin.js +1417 -0
  3. package/dist/gateway/daemon.js +513 -0
  4. package/dist/highlights-eq9cgrbb.scm +604 -0
  5. package/dist/highlights-ghv9g403.scm +205 -0
  6. package/dist/highlights-hk7bwhj4.scm +284 -0
  7. package/dist/highlights-r812a2qc.scm +150 -0
  8. package/dist/highlights-x6tmsnaa.scm +115 -0
  9. package/dist/injections-73j83es3.scm +27 -0
  10. package/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
  11. package/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
  12. package/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
  13. package/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
  14. package/dist/tree-sitter-zig-e78zbjpm.wasm +0 -0
  15. package/lib/bin.ts +78 -0
  16. package/lib/{modules → cli}/router/to-request.ts +13 -20
  17. package/lib/cli/routes/channels.$channel.connectors.$connector.rename.$newName.ts +27 -0
  18. package/lib/cli/routes/channels.$channel.connectors.$connector.request.ts +40 -0
  19. package/lib/cli/routes/channels.$channel.connectors.$connector.schedules.add.$id.ts +41 -0
  20. package/lib/cli/routes/channels.$channel.connectors.$connector.schedules.remove.$id.ts +22 -0
  21. package/lib/cli/routes/channels.$channel.connectors.$connector.schedules.ts +23 -0
  22. package/lib/cli/routes/channels.$channel.connectors.$connector.ts +26 -0
  23. package/lib/cli/routes/channels.$channel.connectors.add.$connector.ts +92 -0
  24. package/lib/cli/routes/channels.$channel.connectors.remove.$connector.ts +22 -0
  25. package/lib/cli/routes/channels.$channel.connectors.set.$connector.ts +63 -0
  26. package/lib/cli/routes/channels.$channel.connectors.ts +26 -0
  27. package/lib/cli/routes/channels.$channel.rename.$newName.ts +22 -0
  28. package/lib/cli/routes/channels.$channel.set.delivery.$mode.ts +34 -0
  29. package/lib/cli/routes/channels.$channel.ts +34 -0
  30. package/lib/cli/routes/channels.add.$channel.ts +33 -0
  31. package/lib/cli/routes/channels.remove.$channel.ts +20 -0
  32. package/lib/cli/routes/channels.ts +39 -0
  33. package/lib/cli/routes/claude.ts +69 -0
  34. package/lib/cli/routes/gateway.listeners.ts +41 -0
  35. package/lib/cli/routes/gateway.logs.ts +123 -0
  36. package/lib/{routes/gateway/restart.ts → cli/routes/gateway.restart.ts} +20 -5
  37. package/lib/cli/routes/gateway.run.ts +41 -0
  38. package/lib/cli/routes/gateway.start.ts +50 -0
  39. package/lib/cli/routes/gateway.status.ts +19 -0
  40. package/lib/cli/routes/gateway.stop.ts +32 -0
  41. package/lib/cli/routes/gateway.ts +55 -0
  42. package/lib/cli/routes/index.ts +202 -0
  43. package/lib/cli/routes/profiles.$profile.as-default.ts +22 -0
  44. package/lib/cli/routes/profiles.$profile.rename.$newName.ts +22 -0
  45. package/lib/cli/routes/profiles.$profile.run.ts +36 -0
  46. package/lib/cli/routes/profiles.add.$profile.ts +46 -0
  47. package/lib/cli/routes/profiles.remove.$profile.ts +20 -0
  48. package/lib/cli/routes/profiles.set.$profile.ts +46 -0
  49. package/lib/cli/routes/profiles.ts +40 -0
  50. package/lib/cli/routes/status.ts +93 -0
  51. package/lib/cli/routes/update.ts +27 -0
  52. package/lib/connectors/connector-config-schema.ts +16 -0
  53. package/lib/connectors/connector-factory.ts +94 -0
  54. package/lib/connectors/connector-listener.ts +20 -0
  55. package/lib/{modules/connectors/funnel-discord-adapter.ts → connectors/discord-adapter.ts} +6 -11
  56. package/lib/{modules/connectors → connectors}/discord-connector-schema.ts +4 -1
  57. package/lib/connectors/discord-listener.ts +111 -0
  58. package/lib/{modules/connectors/funnel-gh-adapter.ts → connectors/gh-adapter.ts} +3 -6
  59. package/lib/{modules/connectors → connectors}/gh-connector-schema.ts +4 -1
  60. package/lib/{modules/connectors/funnel-gh-listener.ts → connectors/gh-listener.ts} +57 -22
  61. package/lib/{modules/connectors → connectors}/match-cron.ts +10 -4
  62. package/lib/connectors/schedule-connector-schema.ts +33 -0
  63. package/lib/connectors/schedule-listener.ts +207 -0
  64. package/lib/connectors/schedule-state-store.ts +54 -0
  65. package/lib/connectors/slack-adapter.ts +36 -0
  66. package/lib/{modules/connectors → connectors}/slack-connector-schema.ts +4 -1
  67. package/lib/{modules/connectors/funnel-slack-event-processor.ts → connectors/slack-event-processor.ts} +15 -9
  68. package/lib/{modules/connectors/funnel-slack-listener.ts → connectors/slack-listener.ts} +39 -14
  69. package/lib/engine/channels/channels.ts +520 -0
  70. package/lib/{modules/claude/funnel-claude.ts → engine/claude/claude.ts} +47 -62
  71. package/lib/engine/claude/gateway-controller.ts +4 -0
  72. package/lib/{modules/fs/funnel-file-system.ts → engine/fs/file-system.ts} +9 -0
  73. package/lib/{modules/fs/memory-funnel-file-system.ts → engine/fs/memory-file-system.ts} +20 -3
  74. package/lib/{modules/fs/node-funnel-file-system.ts → engine/fs/node-file-system.ts} +14 -2
  75. package/lib/{modules/http/memory-funnel-http-client.ts → engine/http/memory-http-client.ts} +1 -5
  76. package/lib/{modules/http/node-funnel-http-client.ts → engine/http/node-http-client.ts} +1 -5
  77. package/lib/engine/id/id-generator.ts +7 -0
  78. package/lib/engine/id/memory-id-generator.ts +20 -0
  79. package/lib/engine/id/node-id-generator.ts +7 -0
  80. package/lib/engine/logger/logger.ts +11 -0
  81. package/lib/engine/logger/memory-logger.ts +28 -0
  82. package/lib/engine/logger/node-logger.ts +49 -0
  83. package/lib/engine/logger/noop-logger.ts +9 -0
  84. package/lib/engine/mcp/channel-server.ts +204 -0
  85. package/lib/{modules/mcp/funnel-mcp.ts → engine/mcp/mcp.ts} +29 -10
  86. package/lib/{modules/process/memory-funnel-process-runner.ts → engine/process/memory-process-runner.ts} +1 -1
  87. package/lib/{modules/process/node-funnel-process-runner.ts → engine/process/node-process-runner.ts} +12 -21
  88. package/lib/{modules/process/funnel-process-runner.ts → engine/process/process-runner.ts} +5 -0
  89. package/lib/engine/profiles/profile-channel-checker.ts +7 -0
  90. package/lib/engine/profiles/profiles.ts +126 -0
  91. package/lib/{modules/settings/mock-funnel-settings-reader.ts → engine/settings/mock-settings-reader.ts} +4 -3
  92. package/lib/{modules/settings/funnel-settings-reader.ts → engine/settings/settings-reader.ts} +1 -1
  93. package/lib/engine/settings/settings-schema.ts +46 -0
  94. package/lib/engine/settings/settings-store.ts +110 -0
  95. package/lib/engine/time/clock.ts +15 -0
  96. package/lib/engine/time/memory-clock.ts +26 -0
  97. package/lib/engine/time/node-clock.ts +7 -0
  98. package/lib/funnel.ts +148 -56
  99. package/lib/gateway/auth-middleware.ts +44 -0
  100. package/lib/gateway/broadcaster.ts +319 -0
  101. package/lib/gateway/daemon.ts +47 -0
  102. package/lib/gateway/factory.ts +10 -0
  103. package/lib/gateway/funnel-event-store.ts +155 -0
  104. package/lib/gateway/gateway-server.ts +414 -0
  105. package/lib/gateway/gateway-token.ts +79 -0
  106. package/lib/{modules/gateway/funnel-gateway.ts → gateway/gateway.ts} +70 -27
  107. package/lib/{modules/gateway → gateway}/kill-competing-slack-gateways.ts +7 -3
  108. package/lib/gateway/listener-supervisor.ts +339 -0
  109. package/lib/gateway/listeners-client.ts +128 -0
  110. package/lib/gateway/resolve-daemon-script.ts +26 -0
  111. package/lib/gateway/routes/channels.connectors.call.ts +39 -0
  112. package/lib/gateway/routes/health.ts +13 -0
  113. package/lib/gateway/routes/index.ts +24 -0
  114. package/lib/gateway/routes/listeners.list.ts +6 -0
  115. package/lib/gateway/routes/listeners.restart.ts +15 -0
  116. package/lib/gateway/routes/listeners.start.ts +15 -0
  117. package/lib/gateway/routes/listeners.stop.ts +15 -0
  118. package/lib/gateway/routes/route-deps.ts +11 -0
  119. package/lib/gateway/routes/status.ts +15 -0
  120. package/lib/gateway/routes/validator.ts +17 -0
  121. package/lib/index.ts +50 -92
  122. package/lib/logger/leuco-human-file-writer.ts +65 -0
  123. package/lib/logger/leuco-human-logger.ts +98 -0
  124. package/lib/logger/leuco-human-record.ts +16 -0
  125. package/lib/logger/leuco-human-stdout-writer.ts +26 -0
  126. package/lib/logger/leuco-human-writer.ts +14 -0
  127. package/lib/logger/leuco-logger-memory-sink.ts +67 -0
  128. package/lib/logger/leuco-logger-record.ts +13 -0
  129. package/lib/logger/leuco-logger-sink.ts +33 -0
  130. package/lib/logger/leuco-logger-sqlite-sink.ts +355 -0
  131. package/lib/logger/leuco-logger.ts +135 -0
  132. package/lib/tui/app.tsx +357 -0
  133. package/lib/tui/components/add-row.tsx +18 -0
  134. package/lib/tui/components/brand.tsx +27 -0
  135. package/lib/tui/components/card.tsx +44 -0
  136. package/lib/tui/components/detail-bar.tsx +46 -0
  137. package/lib/tui/components/editable-field.tsx +33 -0
  138. package/lib/tui/components/empty-state.tsx +11 -0
  139. package/lib/tui/components/gateway-status.tsx +66 -0
  140. package/lib/tui/components/keymap.tsx +29 -0
  141. package/lib/tui/components/menu-item.tsx +73 -0
  142. package/lib/tui/components/menu.tsx +26 -0
  143. package/lib/tui/components/panel-header.tsx +22 -0
  144. package/lib/tui/components/readonly-field.tsx +18 -0
  145. package/lib/tui/components/section-header.tsx +25 -0
  146. package/lib/tui/components/selection-accent.tsx +32 -0
  147. package/lib/tui/components/session-item.tsx +33 -0
  148. package/lib/tui/components/session-list.tsx +33 -0
  149. package/lib/tui/components/ui/hascii/accordion-item.tsx +88 -0
  150. package/lib/tui/components/ui/hascii/accordion.tsx +96 -0
  151. package/lib/tui/components/ui/hascii/alert-dialog.tsx +43 -0
  152. package/lib/tui/components/ui/hascii/badge.tsx +51 -0
  153. package/lib/tui/components/ui/hascii/breadcrumb.tsx +58 -0
  154. package/lib/tui/components/ui/hascii/button.tsx +194 -0
  155. package/lib/tui/components/ui/hascii/card-content.tsx +14 -0
  156. package/lib/tui/components/ui/hascii/card-description.tsx +13 -0
  157. package/lib/tui/components/ui/hascii/card-footer.tsx +14 -0
  158. package/lib/tui/components/ui/hascii/card-header.tsx +14 -0
  159. package/lib/tui/components/ui/hascii/card-title.tsx +13 -0
  160. package/lib/tui/components/ui/hascii/card.tsx +27 -0
  161. package/lib/tui/components/ui/hascii/checkbox.tsx +65 -0
  162. package/lib/tui/components/ui/hascii/command.tsx +159 -0
  163. package/lib/tui/components/ui/hascii/dialog-content.tsx +14 -0
  164. package/lib/tui/components/ui/hascii/dialog-description.tsx +13 -0
  165. package/lib/tui/components/ui/hascii/dialog-footer.tsx +14 -0
  166. package/lib/tui/components/ui/hascii/dialog-header.tsx +14 -0
  167. package/lib/tui/components/ui/hascii/dialog-title.tsx +13 -0
  168. package/lib/tui/components/ui/hascii/dialog.tsx +27 -0
  169. package/lib/tui/components/ui/hascii/file-tree.tsx +142 -0
  170. package/lib/tui/components/ui/hascii/focus-group.tsx +62 -0
  171. package/lib/tui/components/ui/hascii/form-item.tsx +43 -0
  172. package/lib/tui/components/ui/hascii/input-otp.tsx +86 -0
  173. package/lib/tui/components/ui/hascii/input.tsx +130 -0
  174. package/lib/tui/components/ui/hascii/pagination.tsx +105 -0
  175. package/lib/tui/components/ui/hascii/progress.tsx +28 -0
  176. package/lib/tui/components/ui/hascii/select.tsx +131 -0
  177. package/lib/tui/components/ui/hascii/separator.tsx +35 -0
  178. package/lib/tui/components/ui/hascii/sidebar-content.tsx +23 -0
  179. package/lib/tui/components/ui/hascii/sidebar-header.tsx +14 -0
  180. package/lib/tui/components/ui/hascii/sidebar-menu-item.tsx +67 -0
  181. package/lib/tui/components/ui/hascii/sidebar.tsx +24 -0
  182. package/lib/tui/components/ui/hascii/skeleton.tsx +60 -0
  183. package/lib/tui/components/ui/hascii/slider.tsx +91 -0
  184. package/lib/tui/components/ui/hascii/snackbar.tsx +75 -0
  185. package/lib/tui/components/ui/hascii/sparkline.tsx +53 -0
  186. package/lib/tui/components/ui/hascii/spinner.tsx +47 -0
  187. package/lib/tui/components/ui/hascii/stepper.tsx +54 -0
  188. package/lib/tui/components/ui/hascii/switch.tsx +66 -0
  189. package/lib/tui/components/ui/hascii/table.tsx +95 -0
  190. package/lib/tui/components/ui/hascii/tabs.tsx +59 -0
  191. package/lib/tui/components/ui/hascii/toggle-group-item.tsx +45 -0
  192. package/lib/tui/components/ui/hascii/toggle-group.tsx +99 -0
  193. package/lib/tui/components/ui/hascii/tree.tsx +104 -0
  194. package/lib/tui/components/view-shell.tsx +44 -0
  195. package/lib/tui/filter-input.tsx +33 -0
  196. package/lib/tui/hooks/hascii/use-pressable.ts +54 -0
  197. package/lib/tui/parse-comma-list.ts +14 -0
  198. package/lib/tui/profile-launcher.tsx +61 -0
  199. package/lib/tui/scrollbar-options.ts +19 -0
  200. package/lib/tui/sidebar.tsx +50 -0
  201. package/lib/tui/theme.ts +40 -0
  202. package/lib/tui/tui.tsx +20 -0
  203. package/lib/tui/types.ts +38 -0
  204. package/lib/tui/unique-name.ts +18 -0
  205. package/lib/tui/use-event-stream.ts +133 -0
  206. package/lib/tui/use-snapshot.ts +99 -0
  207. package/lib/tui/utils/hascii/form-item-context.tsx +23 -0
  208. package/lib/tui/utils/hascii/input-focus-context.tsx +31 -0
  209. package/lib/tui/utils/hascii/theme-context.tsx +26 -0
  210. package/lib/tui/utils/hascii/theme.ts +176 -0
  211. package/lib/tui/views/channels-view.tsx +108 -0
  212. package/lib/tui/views/connectors-view.tsx +164 -0
  213. package/lib/tui/views/events-view.tsx +160 -0
  214. package/lib/tui/views/listeners-view.tsx +80 -0
  215. package/lib/tui/views/profiles-view.tsx +152 -0
  216. package/package.json +51 -34
  217. package/lib/modules/channels/channel-connector-ref-updater.ts +0 -4
  218. package/lib/modules/channels/funnel-channels.ts +0 -155
  219. package/lib/modules/connectors/connector-config-schema.ts +0 -16
  220. package/lib/modules/connectors/connector-existence-checker.ts +0 -3
  221. package/lib/modules/connectors/funnel-callable-connector-store.ts +0 -9
  222. package/lib/modules/connectors/funnel-connector-listener.ts +0 -5
  223. package/lib/modules/connectors/funnel-connector-stores.ts +0 -24
  224. package/lib/modules/connectors/funnel-connector-type-store.ts +0 -24
  225. package/lib/modules/connectors/funnel-connectors.ts +0 -145
  226. package/lib/modules/connectors/funnel-discord-listener.ts +0 -65
  227. package/lib/modules/connectors/funnel-discord-store.ts +0 -84
  228. package/lib/modules/connectors/funnel-gh-store.ts +0 -84
  229. package/lib/modules/connectors/funnel-json-connector-store.ts +0 -100
  230. package/lib/modules/connectors/funnel-schedule-listener.ts +0 -124
  231. package/lib/modules/connectors/funnel-schedule-store.ts +0 -178
  232. package/lib/modules/connectors/funnel-slack-adapter.ts +0 -31
  233. package/lib/modules/connectors/funnel-slack-store.ts +0 -86
  234. package/lib/modules/connectors/migrate-legacy-connectors.ts +0 -77
  235. package/lib/modules/connectors/schedule-connector-schema.ts +0 -18
  236. package/lib/modules/connectors/schedule-last-fired-store.ts +0 -48
  237. package/lib/modules/gateway/daemon.ts +0 -207
  238. package/lib/modules/gateway/funnel-broadcaster.ts +0 -37
  239. package/lib/modules/gateway/funnel-event-logger.ts +0 -59
  240. package/lib/modules/logger.ts +0 -26
  241. package/lib/modules/mcp/channel-server.ts +0 -76
  242. package/lib/modules/profiles/funnel-profiles.ts +0 -123
  243. package/lib/modules/profiles/profile-channel-checker.ts +0 -3
  244. package/lib/modules/profiles/profile-channel-ref-updater.ts +0 -3
  245. package/lib/modules/repos/funnel-repositories.ts +0 -107
  246. package/lib/modules/schedule/funnel-schedule.ts +0 -34
  247. package/lib/modules/settings/funnel-settings-store.ts +0 -56
  248. package/lib/modules/settings/settings-schema.ts +0 -33
  249. package/lib/modules/tui/app.tsx +0 -44
  250. package/lib/modules/tui/tui.tsx +0 -13
  251. package/lib/routes/channels/add.help.ts +0 -3
  252. package/lib/routes/channels/add.ts +0 -21
  253. package/lib/routes/channels/connectors-attach.help.ts +0 -3
  254. package/lib/routes/channels/connectors-attach.ts +0 -17
  255. package/lib/routes/channels/connectors-detach.help.ts +0 -3
  256. package/lib/routes/channels/connectors-detach.ts +0 -17
  257. package/lib/routes/channels/group.help.ts +0 -16
  258. package/lib/routes/channels/group.ts +0 -22
  259. package/lib/routes/channels/remove.help.ts +0 -3
  260. package/lib/routes/channels/remove.ts +0 -17
  261. package/lib/routes/channels/rename.help.ts +0 -5
  262. package/lib/routes/channels/rename.ts +0 -17
  263. package/lib/routes/channels/routes.ts +0 -19
  264. package/lib/routes/channels/show.help.ts +0 -1
  265. package/lib/routes/channels/show.ts +0 -26
  266. package/lib/routes/claude/claude.help.ts +0 -16
  267. package/lib/routes/claude/claude.ts +0 -76
  268. package/lib/routes/claude/routes.ts +0 -4
  269. package/lib/routes/connectors/add.help.ts +0 -28
  270. package/lib/routes/connectors/add.ts +0 -64
  271. package/lib/routes/connectors/group.help.ts +0 -14
  272. package/lib/routes/connectors/group.ts +0 -18
  273. package/lib/routes/connectors/remove.help.ts +0 -3
  274. package/lib/routes/connectors/remove.ts +0 -17
  275. package/lib/routes/connectors/rename.help.ts +0 -5
  276. package/lib/routes/connectors/rename.ts +0 -17
  277. package/lib/routes/connectors/routes.ts +0 -23
  278. package/lib/routes/connectors/schedules-add.help.ts +0 -11
  279. package/lib/routes/connectors/schedules-add.ts +0 -33
  280. package/lib/routes/connectors/schedules-group.help.ts +0 -1
  281. package/lib/routes/connectors/schedules-group.ts +0 -38
  282. package/lib/routes/connectors/schedules-remove.help.ts +0 -3
  283. package/lib/routes/connectors/schedules-remove.ts +0 -17
  284. package/lib/routes/connectors/set.help.ts +0 -8
  285. package/lib/routes/connectors/set.ts +0 -72
  286. package/lib/routes/connectors/show.help.ts +0 -1
  287. package/lib/routes/connectors/show.ts +0 -41
  288. package/lib/routes/gateway/group.help.ts +0 -15
  289. package/lib/routes/gateway/group.ts +0 -28
  290. package/lib/routes/gateway/logs.help.ts +0 -13
  291. package/lib/routes/gateway/logs.ts +0 -100
  292. package/lib/routes/gateway/restart.help.ts +0 -10
  293. package/lib/routes/gateway/routes.ts +0 -18
  294. package/lib/routes/gateway/run.help.ts +0 -12
  295. package/lib/routes/gateway/run.ts +0 -35
  296. package/lib/routes/gateway/start.help.ts +0 -15
  297. package/lib/routes/gateway/start.ts +0 -32
  298. package/lib/routes/gateway/status.help.ts +0 -9
  299. package/lib/routes/gateway/status.ts +0 -28
  300. package/lib/routes/gateway/stop.help.ts +0 -8
  301. package/lib/routes/gateway/stop.ts +0 -21
  302. package/lib/routes/profiles/add.help.ts +0 -3
  303. package/lib/routes/profiles/add.ts +0 -33
  304. package/lib/routes/profiles/group.help.ts +0 -16
  305. package/lib/routes/profiles/group.ts +0 -25
  306. package/lib/routes/profiles/launch.help.ts +0 -4
  307. package/lib/routes/profiles/launch.ts +0 -36
  308. package/lib/routes/profiles/remove.help.ts +0 -3
  309. package/lib/routes/profiles/remove.ts +0 -17
  310. package/lib/routes/profiles/rename.help.ts +0 -5
  311. package/lib/routes/profiles/rename.ts +0 -17
  312. package/lib/routes/profiles/routes.ts +0 -18
  313. package/lib/routes/profiles/set.help.ts +0 -5
  314. package/lib/routes/profiles/set.ts +0 -32
  315. package/lib/routes/repos/add.help.ts +0 -6
  316. package/lib/routes/repos/add.ts +0 -20
  317. package/lib/routes/repos/group.help.ts +0 -11
  318. package/lib/routes/repos/group.ts +0 -18
  319. package/lib/routes/repos/remove.help.ts +0 -3
  320. package/lib/routes/repos/remove.ts +0 -17
  321. package/lib/routes/repos/rename.help.ts +0 -5
  322. package/lib/routes/repos/rename.ts +0 -17
  323. package/lib/routes/repos/routes.ts +0 -17
  324. package/lib/routes/repos/set.help.ts +0 -5
  325. package/lib/routes/repos/set.ts +0 -21
  326. package/lib/routes/repos/show.help.ts +0 -1
  327. package/lib/routes/repos/show.ts +0 -19
  328. package/lib/routes/request/discord-help.ts +0 -9
  329. package/lib/routes/request/discord.help.ts +0 -19
  330. package/lib/routes/request/discord.ts +0 -65
  331. package/lib/routes/request/group.help.ts +0 -15
  332. package/lib/routes/request/group.ts +0 -9
  333. package/lib/routes/request/routes.ts +0 -14
  334. package/lib/routes/request/slack-help.ts +0 -9
  335. package/lib/routes/request/slack.help.ts +0 -19
  336. package/lib/routes/request/slack.ts +0 -61
  337. package/lib/routes/status/routes.ts +0 -4
  338. package/lib/routes/status/status.help.ts +0 -6
  339. package/lib/routes/status/status.ts +0 -77
  340. package/lib/routes/update/routes.ts +0 -4
  341. package/lib/routes/update/update.help.ts +0 -5
  342. package/lib/routes/update/update.ts +0 -21
  343. package/lib/routes.ts +0 -40
  344. /package/lib/{factory.ts → cli/factory.ts} +0 -0
  345. /package/lib/{modules → cli}/router/query-to-cli-args.ts +0 -0
  346. /package/lib/{modules → cli}/router/validator.ts +0 -0
  347. /package/lib/{modules/connectors/funnel-connector-adapter.ts → connectors/connector-adapter.ts} +0 -0
  348. /package/lib/{modules/connectors/funnel-discord-event-processor.ts → connectors/discord-event-processor.ts} +0 -0
  349. /package/lib/{modules/http/funnel-http-client.ts → engine/http/http-client.ts} +0 -0
@@ -1,33 +0,0 @@
1
- import { z } from "zod"
2
- import { factory } from "@/factory"
3
- import { zValidator } from "@/modules/router/validator"
4
- import { help } from "@/routes/profiles/add.help"
5
-
6
- export const profilesAddHandler = factory.createHandlers(
7
- zValidator("param", z.object({ name: z.string() })),
8
- zValidator(
9
- "query",
10
- z.object({
11
- channel: z.string(),
12
- repo: z.string().optional(),
13
- "sub-agent": z.string().optional(),
14
- "env-file": z.string().optional(),
15
- }),
16
- help,
17
- ),
18
- (c) => {
19
- const param = c.req.valid("param")
20
- const query = c.req.valid("query")
21
- const funnel = c.var.funnel
22
-
23
- funnel.profiles.add({
24
- name: param.name,
25
- channel: query.channel,
26
- repo: query.repo,
27
- subAgent: query["sub-agent"],
28
- envFiles: query["env-file"] ? [query["env-file"]] : undefined,
29
- })
30
-
31
- return c.text(`added profile "${param.name}"`)
32
- },
33
- )
@@ -1,16 +0,0 @@
1
- export const help = `funnel profiles — manage launch profiles
2
-
3
- usage: funnel profiles [subcommand]
4
-
5
- subcommands:
6
- (none) list
7
- add <name> --channel <ch> [--repo <r>] [--sub-agent <s>] [--env-file <f>]
8
- <name> set [--channel ...] [--repo ...] [--sub-agent ...] [--env-file ...]
9
- rename <old> <new> rename
10
- remove <name> remove
11
- <name> run launch (sugar for fnl claude)
12
- <name> launch (alias for run)
13
-
14
- examples:
15
- funnel profiles add cto --channel prod-inbox --repo myapp --sub-agent cto
16
- funnel profiles cto run`
@@ -1,25 +0,0 @@
1
- import { z } from "zod"
2
- import { factory } from "@/factory"
3
- import { zValidator } from "@/modules/router/validator"
4
- import { help } from "@/routes/profiles/group.help"
5
-
6
- export const profilesGroupHandler = factory.createHandlers(
7
- zValidator("query", z.object({}), help),
8
- (c) => {
9
- const funnel = c.var.funnel
10
- const profiles = funnel.profiles.list()
11
-
12
- if (profiles.length === 0) return c.text("no profiles")
13
-
14
- const lines = profiles.map((profile) => {
15
- const parts = [`channel=${profile.channel}`]
16
-
17
- if (profile.repo) parts.push(`repo=${profile.repo}`)
18
- if (profile.subAgent) parts.push(`subAgent=${profile.subAgent}`)
19
-
20
- return `${profile.name} [${parts.join(", ")}]`
21
- })
22
-
23
- return c.text(lines.join("\n"))
24
- },
25
- )
@@ -1,4 +0,0 @@
1
- export const help = `funnel profiles <name> run — launch a profile (sugar for fnl claude)
2
-
3
- usage: funnel profiles <name> run [additional claude args...]
4
- funnel profiles <name> (alias)`
@@ -1,36 +0,0 @@
1
- import { HTTPException } from "hono/http-exception"
2
- import { z } from "zod"
3
- import { factory } from "@/factory"
4
- import { queryToCliArgs } from "@/modules/router/query-to-cli-args"
5
- import { zValidator } from "@/modules/router/validator"
6
- import { help } from "@/routes/profiles/launch.help"
7
-
8
- const RESERVED_KEYS = ["channel", "repo", "sub-agent", "env-file"]
9
-
10
- export const profilesLaunchHandler = factory.createHandlers(
11
- zValidator("param", z.object({ name: z.string() })),
12
- zValidator("query", z.object({}).passthrough(), help),
13
- async (c) => {
14
- const param = c.req.valid("param")
15
- const funnel = c.var.funnel
16
- const profile = funnel.profiles.get(param.name)
17
-
18
- if (!profile) throw new HTTPException(404, { message: `profile "${param.name}" not found` })
19
-
20
- const overrideChannel = c.req.query("channel")
21
- const overrideRepo = c.req.query("repo")
22
- const overrideSubAgent = c.req.query("sub-agent")
23
- const overrideEnvFile = c.req.query("env-file")
24
-
25
- const exitCode = await funnel.claude.launch({
26
- channel: overrideChannel ?? profile.channel,
27
- repo: overrideRepo ?? profile.repo,
28
- subAgent: overrideSubAgent ?? profile.subAgent,
29
- envFiles: overrideEnvFile ? [overrideEnvFile] : profile.envFiles,
30
- userArgs: queryToCliArgs(c.req.url, RESERVED_KEYS),
31
- profileName: profile.name,
32
- })
33
-
34
- process.exit(exitCode)
35
- },
36
- )
@@ -1,3 +0,0 @@
1
- export const help = `funnel profiles remove — remove a profile
2
-
3
- usage: funnel profiles remove <name>`
@@ -1,17 +0,0 @@
1
- import { z } from "zod"
2
- import { factory } from "@/factory"
3
- import { zValidator } from "@/modules/router/validator"
4
- import { help } from "@/routes/profiles/remove.help"
5
-
6
- export const profilesRemoveHandler = factory.createHandlers(
7
- zValidator("param", z.object({ name: z.string() })),
8
- zValidator("query", z.object({}), help),
9
- (c) => {
10
- const param = c.req.valid("param")
11
- const funnel = c.var.funnel
12
-
13
- funnel.profiles.remove(param.name)
14
-
15
- return c.text(`removed profile "${param.name}"`)
16
- },
17
- )
@@ -1,5 +0,0 @@
1
- export const help = `funnel profiles rename — rename a profile
2
-
3
- usage:
4
- funnel profiles rename <old> <new>
5
- funnel profiles <old> rename <new>`
@@ -1,17 +0,0 @@
1
- import { z } from "zod"
2
- import { factory } from "@/factory"
3
- import { zValidator } from "@/modules/router/validator"
4
- import { help } from "@/routes/profiles/rename.help"
5
-
6
- export const profilesRenameHandler = factory.createHandlers(
7
- zValidator("param", z.object({ name: z.string(), newName: z.string() })),
8
- zValidator("query", z.object({}), help),
9
- (c) => {
10
- const param = c.req.valid("param")
11
- const funnel = c.var.funnel
12
-
13
- funnel.profiles.rename(param.name, param["newName"])
14
-
15
- return c.text(`renamed profile "${param.name}" to "${param["newName"]}"`)
16
- },
17
- )
@@ -1,18 +0,0 @@
1
- import { factory } from "@/factory"
2
- import { profilesAddHandler } from "@/routes/profiles/add"
3
- import { profilesGroupHandler } from "@/routes/profiles/group"
4
- import { profilesLaunchHandler } from "@/routes/profiles/launch"
5
- import { profilesRemoveHandler } from "@/routes/profiles/remove"
6
- import { profilesRenameHandler } from "@/routes/profiles/rename"
7
- import { profilesSetHandler } from "@/routes/profiles/set"
8
-
9
- export const profilesRoutes = factory
10
- .createApp()
11
- .get("/", ...profilesGroupHandler)
12
- .put("/:name/rename/:newName", ...profilesRenameHandler)
13
- .put("/rename/:name/:newName", ...profilesRenameHandler)
14
- .post("/:name", ...profilesAddHandler)
15
- .put("/:name", ...profilesSetHandler)
16
- .delete("/:name", ...profilesRemoveHandler)
17
- .get("/:name/run", ...profilesLaunchHandler)
18
- .get("/:name", ...profilesLaunchHandler)
@@ -1,5 +0,0 @@
1
- export const help = `funnel profiles <name> set — update a profile
2
-
3
- usage: funnel profiles <name> set [--channel <ch>] [--repo <r>] [--sub-agent <s>] [--env-file <f>]
4
-
5
- pass an empty string to --repo / --sub-agent to unset them.`
@@ -1,32 +0,0 @@
1
- import { z } from "zod"
2
- import { factory } from "@/factory"
3
- import { zValidator } from "@/modules/router/validator"
4
- import { help } from "@/routes/profiles/set.help"
5
-
6
- export const profilesSetHandler = factory.createHandlers(
7
- zValidator("param", z.object({ name: z.string() })),
8
- zValidator(
9
- "query",
10
- z.object({
11
- channel: z.string().optional(),
12
- repo: z.string().optional(),
13
- "sub-agent": z.string().optional(),
14
- "env-file": z.string().optional(),
15
- }),
16
- help,
17
- ),
18
- (c) => {
19
- const param = c.req.valid("param")
20
- const query = c.req.valid("query")
21
- const funnel = c.var.funnel
22
-
23
- funnel.profiles.update(param.name, {
24
- channel: query.channel,
25
- repo: query.repo,
26
- subAgent: query["sub-agent"],
27
- envFiles: query["env-file"] !== undefined ? [query["env-file"]] : undefined,
28
- })
29
-
30
- return c.text(`updated profile "${param.name}"`)
31
- },
32
- )
@@ -1,6 +0,0 @@
1
- export const help = `funnel repos add — add a repo
2
-
3
- usage: funnel repos add <name> [--path <path>]
4
-
5
- Writes the funnel MCP server into the .mcp.json of the given directory.
6
- When --path is omitted, the current working directory is used.`
@@ -1,20 +0,0 @@
1
- import { resolve } from "node:path"
2
- import { z } from "zod"
3
- import { factory } from "@/factory"
4
- import { zValidator } from "@/modules/router/validator"
5
- import { help } from "@/routes/repos/add.help"
6
-
7
- export const reposAddHandler = factory.createHandlers(
8
- zValidator("param", z.object({ name: z.string() })),
9
- zValidator("query", z.object({ path: z.string().optional() }), help),
10
- (c) => {
11
- const param = c.req.valid("param")
12
- const query = c.req.valid("query")
13
- const funnel = c.var.funnel
14
- const path = resolve(query.path ?? process.cwd())
15
-
16
- funnel.repositories.add({ name: param.name, path })
17
-
18
- return c.text(`added repo "${param.name}"`)
19
- },
20
- )
@@ -1,11 +0,0 @@
1
- export const help = `funnel repos — manage repositories (extra)
2
-
3
- usage: funnel repos [subcommand]
4
-
5
- subcommands:
6
- (none) list
7
- add <name> [--path <p>] add (path defaults to cwd; writes funnel into .mcp.json)
8
- <name> set --path <p> change path
9
- rename <old> <new> rename
10
- remove <name> remove
11
- <name> show details`
@@ -1,18 +0,0 @@
1
- import { z } from "zod"
2
- import { factory } from "@/factory"
3
- import { zValidator } from "@/modules/router/validator"
4
- import { help } from "@/routes/repos/group.help"
5
-
6
- export const reposGroupHandler = factory.createHandlers(
7
- zValidator("query", z.object({}), help),
8
- (c) => {
9
- const funnel = c.var.funnel
10
- const repos = funnel.repositories.list()
11
-
12
- if (repos.length === 0) return c.text("no repos")
13
-
14
- const lines = repos.map((repo) => `${repo.name} ${repo.path}`)
15
-
16
- return c.text(lines.join("\n"))
17
- },
18
- )
@@ -1,3 +0,0 @@
1
- export const help = `funnel repos remove — remove a repo
2
-
3
- usage: funnel repos remove <name>`
@@ -1,17 +0,0 @@
1
- import { z } from "zod"
2
- import { factory } from "@/factory"
3
- import { zValidator } from "@/modules/router/validator"
4
- import { help } from "@/routes/repos/remove.help"
5
-
6
- export const reposRemoveHandler = factory.createHandlers(
7
- zValidator("param", z.object({ name: z.string() })),
8
- zValidator("query", z.object({}), help),
9
- (c) => {
10
- const param = c.req.valid("param")
11
- const funnel = c.var.funnel
12
-
13
- funnel.repositories.remove(param.name)
14
-
15
- return c.text(`removed repo "${param.name}"`)
16
- },
17
- )
@@ -1,5 +0,0 @@
1
- export const help = `funnel repos rename — rename a repo
2
-
3
- usage:
4
- funnel repos rename <old> <new>
5
- funnel repos <old> rename <new>`
@@ -1,17 +0,0 @@
1
- import { z } from "zod"
2
- import { factory } from "@/factory"
3
- import { zValidator } from "@/modules/router/validator"
4
- import { help } from "@/routes/repos/rename.help"
5
-
6
- export const reposRenameHandler = factory.createHandlers(
7
- zValidator("param", z.object({ name: z.string(), newName: z.string() })),
8
- zValidator("query", z.object({}), help),
9
- (c) => {
10
- const param = c.req.valid("param")
11
- const funnel = c.var.funnel
12
-
13
- funnel.repositories.rename(param.name, param["newName"])
14
-
15
- return c.text(`renamed repo "${param.name}" to "${param["newName"]}"`)
16
- },
17
- )
@@ -1,17 +0,0 @@
1
- import { factory } from "@/factory"
2
- import { reposAddHandler } from "@/routes/repos/add"
3
- import { reposGroupHandler } from "@/routes/repos/group"
4
- import { reposRemoveHandler } from "@/routes/repos/remove"
5
- import { reposRenameHandler } from "@/routes/repos/rename"
6
- import { reposSetHandler } from "@/routes/repos/set"
7
- import { reposShowHandler } from "@/routes/repos/show"
8
-
9
- export const reposRoutes = factory
10
- .createApp()
11
- .get("/", ...reposGroupHandler)
12
- .put("/:name/rename/:newName", ...reposRenameHandler)
13
- .put("/rename/:name/:newName", ...reposRenameHandler)
14
- .post("/:name", ...reposAddHandler)
15
- .put("/:name", ...reposSetHandler)
16
- .delete("/:name", ...reposRemoveHandler)
17
- .get("/:name", ...reposShowHandler)
@@ -1,5 +0,0 @@
1
- export const help = `funnel repos <name> set — update a repo
2
-
3
- usage: funnel repos <name> set --path <path>
4
-
5
- When the path changes, the old path's .mcp.json has funnel MCP removed and the new path has it written.`
@@ -1,21 +0,0 @@
1
- import { resolve } from "node:path"
2
- import { z } from "zod"
3
- import { factory } from "@/factory"
4
- import { zValidator } from "@/modules/router/validator"
5
- import { help } from "@/routes/repos/set.help"
6
-
7
- export const reposSetHandler = factory.createHandlers(
8
- zValidator("param", z.object({ name: z.string() })),
9
- zValidator("query", z.object({ path: z.string().optional() }), help),
10
- (c) => {
11
- const param = c.req.valid("param")
12
- const query = c.req.valid("query")
13
- const funnel = c.var.funnel
14
-
15
- funnel.repositories.update(param.name, {
16
- path: query.path !== undefined ? resolve(query.path) : undefined,
17
- })
18
-
19
- return c.text(`updated repo "${param.name}"`)
20
- },
21
- )
@@ -1 +0,0 @@
1
- export const help = `funnel repos <name> — show repo details`
@@ -1,19 +0,0 @@
1
- import { HTTPException } from "hono/http-exception"
2
- import { z } from "zod"
3
- import { factory } from "@/factory"
4
- import { zValidator } from "@/modules/router/validator"
5
- import { help } from "@/routes/repos/show.help"
6
-
7
- export const reposShowHandler = factory.createHandlers(
8
- zValidator("param", z.object({ name: z.string() })),
9
- zValidator("query", z.object({}), help),
10
- (c) => {
11
- const param = c.req.valid("param")
12
- const funnel = c.var.funnel
13
- const repo = funnel.repositories.get(param.name)
14
-
15
- if (!repo) throw new HTTPException(404, { message: `repo "${param.name}" not found` })
16
-
17
- return c.text(`name: ${repo.name}\npath: ${repo.path}`)
18
- },
19
- )
@@ -1,9 +0,0 @@
1
- import { z } from "zod"
2
- import { factory } from "@/factory"
3
- import { zValidator } from "@/modules/router/validator"
4
- import { help } from "@/routes/request/discord.help"
5
-
6
- export const requestDiscordHelpHandler = factory.createHandlers(
7
- zValidator("query", z.object({}), help),
8
- (c) => c.text(help),
9
- )
@@ -1,19 +0,0 @@
1
- export const help = `funnel request discord — call the Discord REST API via a connector
2
-
3
- usage: funnel request discord <method> <path> [<json-body>] --connector <name>
4
-
5
- <method> is the HTTP verb (post / put / delete / patch / get).
6
- <path> is the Discord API path relative to https://discord.com/api/v10 (without leading /).
7
- <name> must match the connector's name (typically meta.connector on an inbound event).
8
-
9
- Reply only when meta.mentioned="true" unless instructed otherwise.
10
-
11
- examples (reply):
12
- funnel request discord post channels/<meta.channel_id>/messages \\
13
- '{"content":"...","message_reference":{"message_id":"<id>"}}' \\
14
- --connector <meta.connector>
15
-
16
- examples (react / delete / edit):
17
- funnel request discord put channels/<cid>/messages/<mid>/reactions/<emoji>/@me --connector <name>
18
- funnel request discord delete channels/<cid>/messages/<mid> --connector <name>
19
- funnel request discord patch channels/<cid>/messages/<mid> '{"content":"edit"}' --connector <name>`
@@ -1,65 +0,0 @@
1
- import { HTTPException } from "hono/http-exception"
2
- import { z } from "zod"
3
- import { factory } from "@/factory"
4
- import { zValidator } from "@/modules/router/validator"
5
- import { help } from "@/routes/request/discord.help"
6
-
7
- const ALLOWED_METHODS = new Set(["get", "post", "put", "patch", "delete"])
8
-
9
- const parseBody = (raw: string | undefined): unknown => {
10
- if (!raw) return {}
11
-
12
- try {
13
- return JSON.parse(raw)
14
- } catch (error) {
15
- throw new HTTPException(400, {
16
- message: `body is not valid JSON: ${error instanceof Error ? error.message : String(error)}`,
17
- })
18
- }
19
- }
20
-
21
- export const requestDiscordHandler = factory.createHandlers(
22
- zValidator("param", z.object({ method: z.string() })),
23
- zValidator(
24
- "query",
25
- z.object({
26
- connector: z.string(),
27
- path: z.string(),
28
- body: z.string().optional(),
29
- }),
30
- help,
31
- ),
32
- async (c) => {
33
- const param = c.req.valid("param")
34
- const query = c.req.valid("query")
35
- const funnel = c.var.funnel
36
-
37
- const method = param.method.toLowerCase()
38
-
39
- if (!ALLOWED_METHODS.has(method)) {
40
- throw new HTTPException(400, {
41
- message: `unsupported method "${param.method}" (allowed: ${[...ALLOWED_METHODS].join(", ")})`,
42
- })
43
- }
44
-
45
- const connector = funnel.connectors.get(query.connector)
46
-
47
- if (!connector) {
48
- throw new HTTPException(404, { message: `connector "${query.connector}" not found` })
49
- }
50
-
51
- if (connector.type !== "discord") {
52
- throw new HTTPException(400, {
53
- message: `connector "${query.connector}" is type "${connector.type}", not "discord"`,
54
- })
55
- }
56
-
57
- const result = await funnel.connectors.callDiscord(query.connector, {
58
- method: method.toUpperCase(),
59
- path: query.path,
60
- body: parseBody(query.body),
61
- })
62
-
63
- return c.text(JSON.stringify(result, null, 2))
64
- },
65
- )
@@ -1,15 +0,0 @@
1
- export const help = `funnel request — send an outbound API call via a connector
2
-
3
- usage: funnel request <platform> <method> <path> [<json-body>] --connector <name>
4
-
5
- platforms:
6
- slack
7
- discord
8
-
9
- examples:
10
- funnel request slack post chat.postMessage '{"channel":"...","text":"..."}' --connector my-slack
11
- funnel request discord post channels/<cid>/messages '{"content":"..."}' --connector my-discord
12
-
13
- more:
14
- funnel request slack --help
15
- funnel request discord --help`
@@ -1,9 +0,0 @@
1
- import { z } from "zod"
2
- import { factory } from "@/factory"
3
- import { zValidator } from "@/modules/router/validator"
4
- import { help } from "@/routes/request/group.help"
5
-
6
- export const requestGroupHandler = factory.createHandlers(
7
- zValidator("query", z.object({}), help),
8
- (c) => c.text(help),
9
- )
@@ -1,14 +0,0 @@
1
- import { factory } from "@/factory"
2
- import { requestDiscordHandler } from "@/routes/request/discord"
3
- import { requestDiscordHelpHandler } from "@/routes/request/discord-help"
4
- import { requestGroupHandler } from "@/routes/request/group"
5
- import { requestSlackHandler } from "@/routes/request/slack"
6
- import { requestSlackHelpHandler } from "@/routes/request/slack-help"
7
-
8
- export const requestRoutes = factory
9
- .createApp()
10
- .get("/", ...requestGroupHandler)
11
- .get("/slack", ...requestSlackHelpHandler)
12
- .get("/slack/:method", ...requestSlackHandler)
13
- .get("/discord", ...requestDiscordHelpHandler)
14
- .get("/discord/:method", ...requestDiscordHandler)
@@ -1,9 +0,0 @@
1
- import { z } from "zod"
2
- import { factory } from "@/factory"
3
- import { zValidator } from "@/modules/router/validator"
4
- import { help } from "@/routes/request/slack.help"
5
-
6
- export const requestSlackHelpHandler = factory.createHandlers(
7
- zValidator("query", z.object({}), help),
8
- (c) => c.text(help),
9
- )
@@ -1,19 +0,0 @@
1
- export const help = `funnel request slack — call the Slack Web API via a connector
2
-
3
- usage: funnel request slack post <path> [<json-body>] --connector <name>
4
-
5
- Slack always uses POST. <path> is the Web API method name (e.g. chat.postMessage).
6
- <name> must match the connector's name (typically meta.connector on an inbound event).
7
-
8
- Reply only when meta.mentioned="true" unless instructed otherwise.
9
-
10
- examples (reply):
11
- funnel request slack post chat.postMessage \\
12
- '{"channel":"<meta.channel_id>","text":"...","thread_ts":"<meta.thread_ts>"}' \\
13
- --connector <meta.connector>
14
-
15
- examples (edit / delete / react / lookup):
16
- funnel request slack post chat.update '{"channel":"...","ts":"...","text":"edit"}' --connector <name>
17
- funnel request slack post chat.delete '{"channel":"...","ts":"..."}' --connector <name>
18
- funnel request slack post reactions.add '{"channel":"...","timestamp":"...","name":"eyes"}' --connector <name>
19
- funnel request slack post users.info '{"user":"U..."}' --connector <name>`
@@ -1,61 +0,0 @@
1
- import { HTTPException } from "hono/http-exception"
2
- import { z } from "zod"
3
- import { factory } from "@/factory"
4
- import { zValidator } from "@/modules/router/validator"
5
- import { help } from "@/routes/request/slack.help"
6
-
7
- const parseBody = (raw: string | undefined): unknown => {
8
- if (!raw) return {}
9
-
10
- try {
11
- return JSON.parse(raw)
12
- } catch (error) {
13
- throw new HTTPException(400, {
14
- message: `body is not valid JSON: ${error instanceof Error ? error.message : String(error)}`,
15
- })
16
- }
17
- }
18
-
19
- export const requestSlackHandler = factory.createHandlers(
20
- zValidator("param", z.object({ method: z.string() })),
21
- zValidator(
22
- "query",
23
- z.object({
24
- connector: z.string(),
25
- path: z.string(),
26
- body: z.string().optional(),
27
- }),
28
- help,
29
- ),
30
- async (c) => {
31
- const param = c.req.valid("param")
32
- const query = c.req.valid("query")
33
- const funnel = c.var.funnel
34
-
35
- if (param.method.toLowerCase() !== "post") {
36
- throw new HTTPException(400, {
37
- message: `slack only supports POST (got "${param.method}")`,
38
- })
39
- }
40
-
41
- const connector = funnel.connectors.get(query.connector)
42
-
43
- if (!connector) {
44
- throw new HTTPException(404, { message: `connector "${query.connector}" not found` })
45
- }
46
-
47
- if (connector.type !== "slack") {
48
- throw new HTTPException(400, {
49
- message: `connector "${query.connector}" is type "${connector.type}", not "slack"`,
50
- })
51
- }
52
-
53
- const result = await funnel.connectors.callSlack(query.connector, {
54
- method: "POST",
55
- path: query.path,
56
- body: parseBody(query.body),
57
- })
58
-
59
- return c.text(JSON.stringify(result, null, 2))
60
- },
61
- )
@@ -1,4 +0,0 @@
1
- import { factory } from "@/factory"
2
- import { statusHandler } from "@/routes/status/status"
3
-
4
- export const statusRoutes = factory.createApp().get("/", ...statusHandler)