skybridge 0.0.0-dev.eac9740 → 0.0.0-dev.eaed8a9

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 (600) hide show
  1. package/LICENSE +21 -674
  2. package/README.md +125 -169
  3. package/bin/run.js +5 -0
  4. package/dist/cli/build-helpers.d.ts +11 -0
  5. package/dist/cli/build-helpers.js +107 -0
  6. package/dist/cli/build-helpers.js.map +1 -0
  7. package/dist/cli/build-helpers.test.js +132 -0
  8. package/dist/cli/build-helpers.test.js.map +1 -0
  9. package/dist/cli/build-steps.d.ts +2 -0
  10. package/dist/cli/build-steps.js +73 -0
  11. package/dist/cli/build-steps.js.map +1 -0
  12. package/dist/cli/build-steps.test.js +52 -0
  13. package/dist/cli/build-steps.test.js.map +1 -0
  14. package/dist/cli/detect-port.d.ts +18 -0
  15. package/dist/cli/detect-port.js +50 -0
  16. package/dist/cli/detect-port.js.map +1 -0
  17. package/dist/cli/header.d.ts +4 -0
  18. package/dist/cli/header.js +6 -0
  19. package/dist/cli/header.js.map +1 -0
  20. package/dist/cli/resolve-skybridge-config.d.ts +5 -0
  21. package/dist/cli/resolve-skybridge-config.js +18 -0
  22. package/dist/cli/resolve-skybridge-config.js.map +1 -0
  23. package/dist/cli/run-command.d.ts +2 -0
  24. package/dist/cli/run-command.js +43 -0
  25. package/dist/cli/run-command.js.map +1 -0
  26. package/dist/cli/run-plain.d.ts +18 -0
  27. package/dist/cli/run-plain.js +89 -0
  28. package/dist/cli/run-plain.js.map +1 -0
  29. package/dist/cli/telemetry.d.ts +7 -0
  30. package/dist/cli/telemetry.js +123 -0
  31. package/dist/cli/telemetry.js.map +1 -0
  32. package/dist/cli/tunnel-control-server.d.ts +9 -0
  33. package/dist/cli/tunnel-control-server.js +31 -0
  34. package/dist/cli/tunnel-control-server.js.map +1 -0
  35. package/dist/cli/tunnel-control-server.test.js +39 -0
  36. package/dist/cli/tunnel-control-server.test.js.map +1 -0
  37. package/dist/cli/tunnel-handler.d.ts +3 -0
  38. package/dist/cli/tunnel-handler.js +48 -0
  39. package/dist/cli/tunnel-handler.js.map +1 -0
  40. package/dist/cli/tunnel-handler.test.js +105 -0
  41. package/dist/cli/tunnel-handler.test.js.map +1 -0
  42. package/dist/cli/tunnel.d.ts +57 -0
  43. package/dist/cli/tunnel.js +154 -0
  44. package/dist/cli/tunnel.js.map +1 -0
  45. package/dist/cli/tunnel.test.js +190 -0
  46. package/dist/cli/tunnel.test.js.map +1 -0
  47. package/dist/cli/types.d.ts +5 -0
  48. package/dist/cli/types.js +2 -0
  49. package/dist/cli/types.js.map +1 -0
  50. package/dist/cli/use-execute-steps.d.ts +11 -0
  51. package/dist/cli/use-execute-steps.js +36 -0
  52. package/dist/cli/use-execute-steps.js.map +1 -0
  53. package/dist/cli/use-messages.d.ts +3 -0
  54. package/dist/cli/use-messages.js +11 -0
  55. package/dist/cli/use-messages.js.map +1 -0
  56. package/dist/cli/use-nodemon.d.ts +16 -0
  57. package/dist/cli/use-nodemon.js +84 -0
  58. package/dist/cli/use-nodemon.js.map +1 -0
  59. package/dist/cli/use-open-browser.d.ts +1 -0
  60. package/dist/cli/use-open-browser.js +44 -0
  61. package/dist/cli/use-open-browser.js.map +1 -0
  62. package/dist/cli/use-tunnel.d.ts +14 -0
  63. package/dist/cli/use-tunnel.js +131 -0
  64. package/dist/cli/use-tunnel.js.map +1 -0
  65. package/dist/cli/use-typescript-check.d.ts +15 -0
  66. package/dist/cli/use-typescript-check.js +97 -0
  67. package/dist/cli/use-typescript-check.js.map +1 -0
  68. package/dist/commands/build.d.ts +6 -0
  69. package/dist/commands/build.js +31 -0
  70. package/dist/commands/build.js.map +1 -0
  71. package/dist/commands/create.d.ts +9 -0
  72. package/dist/commands/create.js +30 -0
  73. package/dist/commands/create.js.map +1 -0
  74. package/dist/commands/dev.d.ts +13 -0
  75. package/dist/commands/dev.js +128 -0
  76. package/dist/commands/dev.js.map +1 -0
  77. package/dist/commands/start.d.ts +9 -0
  78. package/dist/commands/start.js +55 -0
  79. package/dist/commands/start.js.map +1 -0
  80. package/dist/commands/telemetry/disable.d.ts +5 -0
  81. package/dist/commands/telemetry/disable.js +14 -0
  82. package/dist/commands/telemetry/disable.js.map +1 -0
  83. package/dist/commands/telemetry/enable.d.ts +5 -0
  84. package/dist/commands/telemetry/enable.js +14 -0
  85. package/dist/commands/telemetry/enable.js.map +1 -0
  86. package/dist/commands/telemetry/status.d.ts +5 -0
  87. package/dist/commands/telemetry/status.js +14 -0
  88. package/dist/commands/telemetry/status.js.map +1 -0
  89. package/dist/context-warnings.d.ts +5 -0
  90. package/dist/context-warnings.js +31 -0
  91. package/dist/context-warnings.js.map +1 -0
  92. package/dist/context-warnings.test.js +28 -0
  93. package/dist/context-warnings.test.js.map +1 -0
  94. package/dist/server/asset-base-url-transform-plugin.d.ts +11 -0
  95. package/dist/server/asset-base-url-transform-plugin.js +48 -0
  96. package/dist/server/asset-base-url-transform-plugin.js.map +1 -0
  97. package/dist/server/asset-base-url-transform-plugin.test.js +134 -0
  98. package/dist/server/asset-base-url-transform-plugin.test.js.map +1 -0
  99. package/dist/server/auth/discovery.d.ts +32 -0
  100. package/dist/server/auth/discovery.js +56 -0
  101. package/dist/server/auth/discovery.js.map +1 -0
  102. package/dist/server/auth/discovery.test.js +93 -0
  103. package/dist/server/auth/discovery.test.js.map +1 -0
  104. package/dist/server/auth/index.d.ts +44 -0
  105. package/dist/server/auth/index.js +2 -0
  106. package/dist/server/auth/index.js.map +1 -0
  107. package/dist/server/auth/providers/auth0.d.ts +40 -0
  108. package/dist/server/auth/providers/auth0.js +31 -0
  109. package/dist/server/auth/providers/auth0.js.map +1 -0
  110. package/dist/server/auth/providers/auth0.test.js +50 -0
  111. package/dist/server/auth/providers/auth0.test.js.map +1 -0
  112. package/dist/server/auth/providers/authplane.d.ts +49 -0
  113. package/dist/server/auth/providers/authplane.js +57 -0
  114. package/dist/server/auth/providers/authplane.js.map +1 -0
  115. package/dist/server/auth/providers/authplane.test.js +140 -0
  116. package/dist/server/auth/providers/authplane.test.js.map +1 -0
  117. package/dist/server/auth/providers/clerk.d.ts +51 -0
  118. package/dist/server/auth/providers/clerk.js +19 -0
  119. package/dist/server/auth/providers/clerk.js.map +1 -0
  120. package/dist/server/auth/providers/clerk.test.d.ts +1 -0
  121. package/dist/server/auth/providers/clerk.test.js +30 -0
  122. package/dist/server/auth/providers/clerk.test.js.map +1 -0
  123. package/dist/server/auth/providers/custom.d.ts +40 -0
  124. package/dist/server/auth/providers/custom.js +56 -0
  125. package/dist/server/auth/providers/custom.js.map +1 -0
  126. package/dist/server/auth/providers/custom.test.d.ts +1 -0
  127. package/dist/server/auth/providers/custom.test.js +158 -0
  128. package/dist/server/auth/providers/custom.test.js.map +1 -0
  129. package/dist/server/auth/providers/descope.d.ts +44 -0
  130. package/dist/server/auth/providers/descope.js +44 -0
  131. package/dist/server/auth/providers/descope.js.map +1 -0
  132. package/dist/server/auth/providers/descope.test.d.ts +1 -0
  133. package/dist/server/auth/providers/descope.test.js +62 -0
  134. package/dist/server/auth/providers/descope.test.js.map +1 -0
  135. package/dist/server/auth/providers/shared.d.ts +2 -0
  136. package/dist/server/auth/providers/shared.js +6 -0
  137. package/dist/server/auth/providers/shared.js.map +1 -0
  138. package/dist/server/auth/providers/shared.test.d.ts +1 -0
  139. package/dist/server/auth/providers/shared.test.js +10 -0
  140. package/dist/server/auth/providers/shared.test.js.map +1 -0
  141. package/dist/server/auth/providers/stytch.d.ts +25 -0
  142. package/dist/server/auth/providers/stytch.js +16 -0
  143. package/dist/server/auth/providers/stytch.js.map +1 -0
  144. package/dist/server/auth/providers/verify-spy.d.ts +12 -0
  145. package/dist/server/auth/providers/verify-spy.js +21 -0
  146. package/dist/server/auth/providers/verify-spy.js.map +1 -0
  147. package/dist/server/auth/providers/workos.d.ts +33 -0
  148. package/dist/server/auth/providers/workos.js +15 -0
  149. package/dist/server/auth/providers/workos.js.map +1 -0
  150. package/dist/server/auth/security-schemes.d.ts +23 -0
  151. package/dist/server/auth/security-schemes.js +64 -0
  152. package/dist/server/auth/security-schemes.js.map +1 -0
  153. package/dist/server/auth/security-schemes.test.d.ts +1 -0
  154. package/dist/server/auth/security-schemes.test.js +99 -0
  155. package/dist/server/auth/security-schemes.test.js.map +1 -0
  156. package/dist/server/auth/setup.d.ts +6 -0
  157. package/dist/server/auth/setup.js +92 -0
  158. package/dist/server/auth/setup.js.map +1 -0
  159. package/dist/server/auth/setup.test.d.ts +1 -0
  160. package/dist/server/auth/setup.test.js +508 -0
  161. package/dist/server/auth/setup.test.js.map +1 -0
  162. package/dist/server/auth/verify.d.ts +46 -0
  163. package/dist/server/auth/verify.js +62 -0
  164. package/dist/server/auth/verify.js.map +1 -0
  165. package/dist/server/auth/verify.test.d.ts +1 -0
  166. package/dist/server/auth/verify.test.js +149 -0
  167. package/dist/server/auth/verify.test.js.map +1 -0
  168. package/dist/server/auth-extra.test-d.js +82 -0
  169. package/dist/server/auth-extra.test-d.js.map +1 -0
  170. package/dist/server/auth.d.ts +58 -0
  171. package/dist/server/auth.js +28 -0
  172. package/dist/server/auth.js.map +1 -0
  173. package/dist/server/build-manifest.test.d.ts +1 -0
  174. package/dist/server/build-manifest.test.js +27 -0
  175. package/dist/server/build-manifest.test.js.map +1 -0
  176. package/dist/server/content-helpers.d.ts +67 -0
  177. package/dist/server/content-helpers.js +79 -0
  178. package/dist/server/content-helpers.js.map +1 -0
  179. package/dist/server/content-helpers.test.d.ts +1 -0
  180. package/dist/server/content-helpers.test.js +70 -0
  181. package/dist/server/content-helpers.test.js.map +1 -0
  182. package/dist/server/express.d.ts +11 -0
  183. package/dist/server/express.js +101 -0
  184. package/dist/server/express.js.map +1 -0
  185. package/dist/server/express.test.d.ts +1 -0
  186. package/dist/server/express.test.js +491 -0
  187. package/dist/server/express.test.js.map +1 -0
  188. package/dist/server/file-ref.d.ts +28 -0
  189. package/dist/server/file-ref.js +27 -0
  190. package/dist/server/file-ref.js.map +1 -0
  191. package/dist/server/host.d.ts +2 -0
  192. package/dist/server/host.js +11 -0
  193. package/dist/server/host.js.map +1 -0
  194. package/dist/server/host.test.d.ts +1 -0
  195. package/dist/server/host.test.js +13 -0
  196. package/dist/server/host.test.js.map +1 -0
  197. package/dist/server/index.d.ts +19 -0
  198. package/dist/server/index.js +16 -0
  199. package/dist/server/index.js.map +1 -0
  200. package/dist/server/inferUtilityTypes.d.ts +64 -0
  201. package/dist/server/inferUtilityTypes.js +2 -0
  202. package/dist/server/inferUtilityTypes.js.map +1 -0
  203. package/dist/server/metric.d.ts +14 -0
  204. package/dist/server/metric.js +62 -0
  205. package/dist/server/metric.js.map +1 -0
  206. package/dist/server/middleware.d.ts +162 -0
  207. package/dist/server/middleware.js +126 -0
  208. package/dist/server/middleware.js.map +1 -0
  209. package/dist/server/middleware.test-d.d.ts +1 -0
  210. package/dist/server/middleware.test-d.js +75 -0
  211. package/dist/server/middleware.test-d.js.map +1 -0
  212. package/dist/server/middleware.test.d.ts +1 -0
  213. package/dist/server/middleware.test.js +529 -0
  214. package/dist/server/middleware.test.js.map +1 -0
  215. package/dist/server/requestOrigin.d.ts +7 -0
  216. package/dist/server/requestOrigin.js +25 -0
  217. package/dist/server/requestOrigin.js.map +1 -0
  218. package/dist/server/server.d.ts +465 -0
  219. package/dist/server/server.js +742 -0
  220. package/dist/server/server.js.map +1 -0
  221. package/dist/server/skills-integration.test.d.ts +1 -0
  222. package/dist/server/skills-integration.test.js +79 -0
  223. package/dist/server/skills-integration.test.js.map +1 -0
  224. package/dist/server/skills.d.ts +29 -0
  225. package/dist/server/skills.js +195 -0
  226. package/dist/server/skills.js.map +1 -0
  227. package/dist/server/skills.test.d.ts +1 -0
  228. package/dist/server/skills.test.js +247 -0
  229. package/dist/server/skills.test.js.map +1 -0
  230. package/dist/{src/server → server}/templateHelper.d.ts +5 -4
  231. package/dist/server/templateHelper.js +11 -0
  232. package/dist/server/templateHelper.js.map +1 -0
  233. package/dist/server/templates.generated.d.ts +4 -0
  234. package/dist/server/templates.generated.js +47 -0
  235. package/dist/server/templates.generated.js.map +1 -0
  236. package/dist/server/tunnel-proxy-router.d.ts +7 -0
  237. package/dist/server/tunnel-proxy-router.js +110 -0
  238. package/dist/server/tunnel-proxy-router.js.map +1 -0
  239. package/dist/server/tunnel-proxy-router.test.d.ts +1 -0
  240. package/dist/server/tunnel-proxy-router.test.js +229 -0
  241. package/dist/server/tunnel-proxy-router.test.js.map +1 -0
  242. package/dist/server/view-name.test-d.d.ts +1 -0
  243. package/dist/server/view-name.test-d.js +8 -0
  244. package/dist/server/view-name.test-d.js.map +1 -0
  245. package/dist/server/view-resource-resolution.test.d.ts +6 -0
  246. package/dist/server/view-resource-resolution.test.js +171 -0
  247. package/dist/server/view-resource-resolution.test.js.map +1 -0
  248. package/dist/server/viewsDevServer.d.ts +14 -0
  249. package/dist/server/viewsDevServer.js +48 -0
  250. package/dist/server/viewsDevServer.js.map +1 -0
  251. package/dist/test/utils.d.ts +127 -0
  252. package/dist/test/utils.js +247 -0
  253. package/dist/test/utils.js.map +1 -0
  254. package/dist/test/view.test.d.ts +1 -0
  255. package/dist/test/view.test.js +552 -0
  256. package/dist/test/view.test.js.map +1 -0
  257. package/dist/version.d.ts +1 -0
  258. package/dist/version.js +3 -0
  259. package/dist/version.js.map +1 -0
  260. package/dist/web/bridges/adaptor.d.ts +51 -0
  261. package/dist/web/bridges/adaptor.js +327 -0
  262. package/dist/web/bridges/adaptor.js.map +1 -0
  263. package/dist/web/bridges/adaptor.test.d.ts +1 -0
  264. package/dist/web/bridges/adaptor.test.js +225 -0
  265. package/dist/web/bridges/adaptor.test.js.map +1 -0
  266. package/dist/web/bridges/apps-sdk/bridge.d.ts +15 -0
  267. package/dist/web/bridges/apps-sdk/bridge.js +58 -0
  268. package/dist/web/bridges/apps-sdk/bridge.js.map +1 -0
  269. package/dist/web/bridges/apps-sdk/index.d.ts +4 -0
  270. package/dist/web/bridges/apps-sdk/index.js +4 -0
  271. package/dist/web/bridges/apps-sdk/index.js.map +1 -0
  272. package/dist/web/bridges/apps-sdk/types.d.ts +133 -0
  273. package/dist/web/bridges/apps-sdk/types.js.map +1 -0
  274. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.d.ts +13 -0
  275. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.js +18 -0
  276. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.js.map +1 -0
  277. package/dist/web/bridges/get-adaptor.d.ts +9 -0
  278. package/dist/web/bridges/get-adaptor.js +10 -0
  279. package/dist/web/bridges/get-adaptor.js.map +1 -0
  280. package/dist/web/bridges/get-adaptor.test.d.ts +1 -0
  281. package/dist/web/bridges/get-adaptor.test.js +32 -0
  282. package/dist/web/bridges/get-adaptor.test.js.map +1 -0
  283. package/dist/web/bridges/index.d.ts +5 -0
  284. package/dist/web/bridges/index.js +6 -0
  285. package/dist/web/bridges/index.js.map +1 -0
  286. package/dist/web/bridges/mcp-app/bridge.d.ts +39 -0
  287. package/dist/web/bridges/mcp-app/bridge.js +168 -0
  288. package/dist/web/bridges/mcp-app/bridge.js.map +1 -0
  289. package/dist/web/bridges/mcp-app/bridge.test.d.ts +1 -0
  290. package/dist/web/bridges/mcp-app/bridge.test.js +17 -0
  291. package/dist/web/bridges/mcp-app/bridge.test.js.map +1 -0
  292. package/dist/web/bridges/mcp-app/index.d.ts +3 -0
  293. package/dist/web/bridges/mcp-app/index.js +3 -0
  294. package/dist/web/bridges/mcp-app/index.js.map +1 -0
  295. package/dist/web/bridges/mcp-app/types.d.ts +10 -0
  296. package/dist/web/bridges/mcp-app/types.js +2 -0
  297. package/dist/web/bridges/mcp-app/types.js.map +1 -0
  298. package/dist/web/bridges/mcp-app/use-mcp-app-context.d.ts +19 -0
  299. package/dist/web/bridges/mcp-app/use-mcp-app-context.js +19 -0
  300. package/dist/web/bridges/mcp-app/use-mcp-app-context.js.map +1 -0
  301. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.d.ts +1 -0
  302. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.js +26 -0
  303. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.js.map +1 -0
  304. package/dist/web/bridges/mcp-app/view-tools.test.d.ts +1 -0
  305. package/dist/web/bridges/mcp-app/view-tools.test.js +143 -0
  306. package/dist/web/bridges/mcp-app/view-tools.test.js.map +1 -0
  307. package/dist/web/bridges/types.d.ts +214 -0
  308. package/dist/web/bridges/types.js +15 -0
  309. package/dist/web/bridges/types.js.map +1 -0
  310. package/dist/web/bridges/types.test.d.ts +1 -0
  311. package/dist/web/bridges/types.test.js +19 -0
  312. package/dist/web/bridges/types.test.js.map +1 -0
  313. package/dist/web/bridges/use-host-context.d.ts +7 -0
  314. package/dist/web/bridges/use-host-context.js +13 -0
  315. package/dist/web/bridges/use-host-context.js.map +1 -0
  316. package/dist/web/components/modal-provider.d.ts +4 -0
  317. package/dist/web/components/modal-provider.js +46 -0
  318. package/dist/web/components/modal-provider.js.map +1 -0
  319. package/dist/web/create-store.d.ts +29 -0
  320. package/dist/web/create-store.js +64 -0
  321. package/dist/web/create-store.js.map +1 -0
  322. package/dist/web/create-store.test.d.ts +1 -0
  323. package/dist/web/create-store.test.js +132 -0
  324. package/dist/web/create-store.test.js.map +1 -0
  325. package/dist/web/data-llm.d.ts +47 -0
  326. package/dist/web/data-llm.js +100 -0
  327. package/dist/web/data-llm.js.map +1 -0
  328. package/dist/web/data-llm.test.d.ts +1 -0
  329. package/dist/web/data-llm.test.js +155 -0
  330. package/dist/web/data-llm.test.js.map +1 -0
  331. package/dist/web/generate-helpers.d.ts +120 -0
  332. package/dist/web/generate-helpers.js +115 -0
  333. package/dist/web/generate-helpers.js.map +1 -0
  334. package/dist/web/generate-helpers.test-d.d.ts +1 -0
  335. package/dist/web/generate-helpers.test-d.js +211 -0
  336. package/dist/web/generate-helpers.test-d.js.map +1 -0
  337. package/dist/web/generate-helpers.test.d.ts +1 -0
  338. package/dist/web/generate-helpers.test.js +17 -0
  339. package/dist/web/generate-helpers.test.js.map +1 -0
  340. package/dist/web/helpers/state.d.ts +7 -0
  341. package/dist/web/helpers/state.js +45 -0
  342. package/dist/web/helpers/state.js.map +1 -0
  343. package/dist/web/helpers/state.test.d.ts +1 -0
  344. package/dist/web/helpers/state.test.js +53 -0
  345. package/dist/web/helpers/state.test.js.map +1 -0
  346. package/dist/web/hooks/index.d.ts +16 -0
  347. package/dist/web/hooks/index.js +17 -0
  348. package/dist/web/hooks/index.js.map +1 -0
  349. package/dist/web/hooks/test/utils.d.ts +21 -0
  350. package/dist/web/hooks/test/utils.js +75 -0
  351. package/dist/web/hooks/test/utils.js.map +1 -0
  352. package/dist/web/hooks/use-call-tool.d.ts +146 -0
  353. package/dist/web/hooks/use-call-tool.js +96 -0
  354. package/dist/web/hooks/use-call-tool.js.map +1 -0
  355. package/dist/web/hooks/use-call-tool.test-d.d.ts +1 -0
  356. package/dist/web/hooks/use-call-tool.test-d.js +104 -0
  357. package/dist/web/hooks/use-call-tool.test-d.js.map +1 -0
  358. package/dist/web/hooks/use-call-tool.test.d.ts +1 -0
  359. package/dist/web/hooks/use-call-tool.test.js +225 -0
  360. package/dist/web/hooks/use-call-tool.test.js.map +1 -0
  361. package/dist/web/hooks/use-display-mode.d.ts +24 -0
  362. package/dist/web/hooks/use-display-mode.js +29 -0
  363. package/dist/web/hooks/use-display-mode.js.map +1 -0
  364. package/dist/web/hooks/use-display-mode.test-d.d.ts +1 -0
  365. package/dist/web/hooks/use-display-mode.test-d.js +8 -0
  366. package/dist/web/hooks/use-display-mode.test-d.js.map +1 -0
  367. package/dist/web/hooks/use-display-mode.test.d.ts +1 -0
  368. package/dist/web/hooks/use-display-mode.test.js +77 -0
  369. package/dist/web/hooks/use-display-mode.test.js.map +1 -0
  370. package/dist/web/hooks/use-download.d.ts +5 -0
  371. package/dist/web/hooks/use-download.js +8 -0
  372. package/dist/web/hooks/use-download.js.map +1 -0
  373. package/dist/web/hooks/use-download.test.d.ts +1 -0
  374. package/dist/web/hooks/use-download.test.js +103 -0
  375. package/dist/web/hooks/use-download.test.js.map +1 -0
  376. package/dist/web/hooks/use-files.d.ts +39 -0
  377. package/dist/web/hooks/use-files.js +42 -0
  378. package/dist/web/hooks/use-files.js.map +1 -0
  379. package/dist/web/hooks/use-files.test.d.ts +1 -0
  380. package/dist/web/hooks/use-files.test.js +62 -0
  381. package/dist/web/hooks/use-files.test.js.map +1 -0
  382. package/dist/web/hooks/use-host-info.d.ts +22 -0
  383. package/dist/web/hooks/use-host-info.js +30 -0
  384. package/dist/web/hooks/use-host-info.js.map +1 -0
  385. package/dist/web/hooks/use-host-info.test.d.ts +1 -0
  386. package/dist/web/hooks/use-host-info.test.js +59 -0
  387. package/dist/web/hooks/use-host-info.test.js.map +1 -0
  388. package/dist/web/hooks/use-layout.d.ts +24 -0
  389. package/dist/web/hooks/use-layout.js +25 -0
  390. package/dist/web/hooks/use-layout.js.map +1 -0
  391. package/dist/web/hooks/use-layout.test.d.ts +1 -0
  392. package/dist/web/hooks/use-layout.test.js +129 -0
  393. package/dist/web/hooks/use-layout.test.js.map +1 -0
  394. package/dist/web/hooks/use-open-external.d.ts +20 -0
  395. package/dist/web/hooks/use-open-external.js +24 -0
  396. package/dist/web/hooks/use-open-external.js.map +1 -0
  397. package/dist/web/hooks/use-open-external.test.d.ts +1 -0
  398. package/dist/web/hooks/use-open-external.test.js +75 -0
  399. package/dist/web/hooks/use-open-external.test.js.map +1 -0
  400. package/dist/web/hooks/use-register-view-tool.d.ts +38 -0
  401. package/dist/web/hooks/use-register-view-tool.js +50 -0
  402. package/dist/web/hooks/use-register-view-tool.js.map +1 -0
  403. package/dist/web/hooks/use-request-close.d.ts +16 -0
  404. package/dist/web/hooks/use-request-close.js +21 -0
  405. package/dist/web/hooks/use-request-close.js.map +1 -0
  406. package/dist/web/hooks/use-request-close.test.d.ts +1 -0
  407. package/dist/web/hooks/use-request-close.test.js +47 -0
  408. package/dist/web/hooks/use-request-close.test.js.map +1 -0
  409. package/dist/web/hooks/use-request-modal.d.ts +24 -0
  410. package/dist/web/hooks/use-request-modal.js +31 -0
  411. package/dist/web/hooks/use-request-modal.js.map +1 -0
  412. package/dist/web/hooks/use-request-modal.test.d.ts +1 -0
  413. package/dist/web/hooks/use-request-modal.test.js +71 -0
  414. package/dist/web/hooks/use-request-modal.test.js.map +1 -0
  415. package/dist/web/hooks/use-request-size.d.ts +20 -0
  416. package/dist/web/hooks/use-request-size.js +24 -0
  417. package/dist/web/hooks/use-request-size.js.map +1 -0
  418. package/dist/web/hooks/use-request-size.test.d.ts +1 -0
  419. package/dist/web/hooks/use-request-size.test.js +47 -0
  420. package/dist/web/hooks/use-request-size.test.js.map +1 -0
  421. package/dist/web/hooks/use-send-follow-up-message.d.ts +19 -0
  422. package/dist/web/hooks/use-send-follow-up-message.js +25 -0
  423. package/dist/web/hooks/use-send-follow-up-message.js.map +1 -0
  424. package/dist/web/hooks/use-set-open-in-app-url.d.ts +18 -0
  425. package/dist/web/hooks/use-set-open-in-app-url.js +25 -0
  426. package/dist/web/hooks/use-set-open-in-app-url.js.map +1 -0
  427. package/dist/web/hooks/use-set-open-in-app-url.test.d.ts +1 -0
  428. package/dist/web/hooks/use-set-open-in-app-url.test.js +63 -0
  429. package/dist/web/hooks/use-set-open-in-app-url.test.js.map +1 -0
  430. package/dist/web/hooks/use-tool-info.d.ts +87 -0
  431. package/dist/web/hooks/use-tool-info.js +49 -0
  432. package/dist/web/hooks/use-tool-info.js.map +1 -0
  433. package/dist/web/hooks/use-tool-info.test-d.d.ts +1 -0
  434. package/dist/web/hooks/use-tool-info.test-d.js +91 -0
  435. package/dist/web/hooks/use-tool-info.test-d.js.map +1 -0
  436. package/dist/web/hooks/use-tool-info.test.d.ts +1 -0
  437. package/dist/web/hooks/use-tool-info.test.js +140 -0
  438. package/dist/web/hooks/use-tool-info.test.js.map +1 -0
  439. package/dist/web/hooks/use-user.d.ts +20 -0
  440. package/dist/web/hooks/use-user.js +37 -0
  441. package/dist/web/hooks/use-user.js.map +1 -0
  442. package/dist/web/hooks/use-user.test.d.ts +1 -0
  443. package/dist/web/hooks/use-user.test.js +168 -0
  444. package/dist/web/hooks/use-user.test.js.map +1 -0
  445. package/dist/web/hooks/use-view-state.d.ts +25 -0
  446. package/dist/web/hooks/use-view-state.js +42 -0
  447. package/dist/web/hooks/use-view-state.js.map +1 -0
  448. package/dist/web/hooks/use-view-state.test.d.ts +1 -0
  449. package/dist/web/hooks/use-view-state.test.js +212 -0
  450. package/dist/web/hooks/use-view-state.test.js.map +1 -0
  451. package/dist/web/index.d.ts +7 -0
  452. package/dist/web/index.js +8 -0
  453. package/dist/web/index.js.map +1 -0
  454. package/dist/web/mount-view.d.ts +20 -0
  455. package/dist/web/mount-view.js +46 -0
  456. package/dist/web/mount-view.js.map +1 -0
  457. package/dist/web/plugin/data-llm.test.d.ts +1 -0
  458. package/dist/web/plugin/data-llm.test.js +81 -0
  459. package/dist/web/plugin/data-llm.test.js.map +1 -0
  460. package/dist/web/plugin/plugin-build.test.d.ts +1 -0
  461. package/dist/web/plugin/plugin-build.test.js +54 -0
  462. package/dist/web/plugin/plugin-build.test.js.map +1 -0
  463. package/dist/web/plugin/plugin.d.ts +39 -0
  464. package/dist/web/plugin/plugin.js +200 -0
  465. package/dist/web/plugin/plugin.js.map +1 -0
  466. package/dist/web/plugin/plugin.test.d.ts +1 -0
  467. package/dist/web/plugin/plugin.test.js +61 -0
  468. package/dist/web/plugin/plugin.test.js.map +1 -0
  469. package/dist/web/plugin/scan-views.d.ts +16 -0
  470. package/dist/web/plugin/scan-views.js +88 -0
  471. package/dist/web/plugin/scan-views.js.map +1 -0
  472. package/dist/web/plugin/scan-views.test.d.ts +1 -0
  473. package/dist/web/plugin/scan-views.test.js +99 -0
  474. package/dist/web/plugin/scan-views.test.js.map +1 -0
  475. package/dist/web/plugin/transform-data-llm.d.ts +12 -0
  476. package/dist/web/plugin/transform-data-llm.js +96 -0
  477. package/dist/web/plugin/transform-data-llm.js.map +1 -0
  478. package/dist/web/plugin/transform-data-llm.test.d.ts +1 -0
  479. package/dist/web/plugin/transform-data-llm.test.js +81 -0
  480. package/dist/web/plugin/transform-data-llm.test.js.map +1 -0
  481. package/dist/web/plugin/validate-view.d.ts +1 -0
  482. package/dist/web/plugin/validate-view.js +9 -0
  483. package/dist/web/plugin/validate-view.js.map +1 -0
  484. package/dist/web/plugin/validate-view.test.d.ts +1 -0
  485. package/dist/web/plugin/validate-view.test.js +24 -0
  486. package/dist/web/plugin/validate-view.test.js.map +1 -0
  487. package/dist/web/proxy.d.ts +1 -0
  488. package/dist/web/proxy.js +52 -0
  489. package/dist/web/proxy.js.map +1 -0
  490. package/dist/web/types.d.ts +20 -0
  491. package/dist/web/types.js +2 -0
  492. package/dist/web/types.js.map +1 -0
  493. package/package.json +90 -35
  494. package/tsconfig.base.json +33 -0
  495. package/dist/src/server/index.d.ts +0 -2
  496. package/dist/src/server/index.js +0 -3
  497. package/dist/src/server/index.js.map +0 -1
  498. package/dist/src/server/server.d.ts +0 -13
  499. package/dist/src/server/server.js +0 -54
  500. package/dist/src/server/server.js.map +0 -1
  501. package/dist/src/server/templateHelper.js +0 -29
  502. package/dist/src/server/templateHelper.js.map +0 -1
  503. package/dist/src/server/templates/development.hbs +0 -12
  504. package/dist/src/server/templates/production.hbs +0 -6
  505. package/dist/src/server/widgetsDevServer.d.ts +0 -12
  506. package/dist/src/server/widgetsDevServer.js +0 -39
  507. package/dist/src/server/widgetsDevServer.js.map +0 -1
  508. package/dist/src/test/setup.js +0 -9
  509. package/dist/src/test/setup.js.map +0 -1
  510. package/dist/src/test/utils.d.ts +0 -28
  511. package/dist/src/test/utils.js +0 -43
  512. package/dist/src/test/utils.js.map +0 -1
  513. package/dist/src/test/widget.test.js +0 -90
  514. package/dist/src/test/widget.test.js.map +0 -1
  515. package/dist/src/web/hooks/index.d.ts +0 -13
  516. package/dist/src/web/hooks/index.js +0 -14
  517. package/dist/src/web/hooks/index.js.map +0 -1
  518. package/dist/src/web/hooks/use-call-tool.d.ts +0 -58
  519. package/dist/src/web/hooks/use-call-tool.js +0 -50
  520. package/dist/src/web/hooks/use-call-tool.js.map +0 -1
  521. package/dist/src/web/hooks/use-call-tool.test.js +0 -104
  522. package/dist/src/web/hooks/use-call-tool.test.js.map +0 -1
  523. package/dist/src/web/hooks/use-display-mode.d.ts +0 -4
  524. package/dist/src/web/hooks/use-display-mode.js +0 -7
  525. package/dist/src/web/hooks/use-display-mode.js.map +0 -1
  526. package/dist/src/web/hooks/use-display-mode.test.js +0 -40
  527. package/dist/src/web/hooks/use-display-mode.test.js.map +0 -1
  528. package/dist/src/web/hooks/use-locale.d.ts +0 -1
  529. package/dist/src/web/hooks/use-locale.js +0 -5
  530. package/dist/src/web/hooks/use-locale.js.map +0 -1
  531. package/dist/src/web/hooks/use-locale.test.js +0 -21
  532. package/dist/src/web/hooks/use-locale.test.js.map +0 -1
  533. package/dist/src/web/hooks/use-open-external.d.ts +0 -1
  534. package/dist/src/web/hooks/use-open-external.js +0 -6
  535. package/dist/src/web/hooks/use-open-external.js.map +0 -1
  536. package/dist/src/web/hooks/use-open-external.test.js +0 -24
  537. package/dist/src/web/hooks/use-open-external.test.js.map +0 -1
  538. package/dist/src/web/hooks/use-openai-global.d.ts +0 -2
  539. package/dist/src/web/hooks/use-openai-global.js +0 -21
  540. package/dist/src/web/hooks/use-openai-global.js.map +0 -1
  541. package/dist/src/web/hooks/use-request-modal.d.ts +0 -5
  542. package/dist/src/web/hooks/use-request-modal.js +0 -9
  543. package/dist/src/web/hooks/use-request-modal.js.map +0 -1
  544. package/dist/src/web/hooks/use-request-modal.test.js +0 -24
  545. package/dist/src/web/hooks/use-request-modal.test.js.map +0 -1
  546. package/dist/src/web/hooks/use-send-follow-up-message.d.ts +0 -1
  547. package/dist/src/web/hooks/use-send-follow-up-message.js +0 -11
  548. package/dist/src/web/hooks/use-send-follow-up-message.js.map +0 -1
  549. package/dist/src/web/hooks/use-theme.d.ts +0 -1
  550. package/dist/src/web/hooks/use-theme.js +0 -5
  551. package/dist/src/web/hooks/use-theme.js.map +0 -1
  552. package/dist/src/web/hooks/use-theme.test.js +0 -26
  553. package/dist/src/web/hooks/use-theme.test.js.map +0 -1
  554. package/dist/src/web/hooks/use-tool-info.d.ts +0 -5
  555. package/dist/src/web/hooks/use-tool-info.js +0 -9
  556. package/dist/src/web/hooks/use-tool-info.js.map +0 -1
  557. package/dist/src/web/hooks/use-tool-info.test.js +0 -38
  558. package/dist/src/web/hooks/use-tool-info.test.js.map +0 -1
  559. package/dist/src/web/hooks/use-tool-output.d.ts +0 -4
  560. package/dist/src/web/hooks/use-tool-output.js +0 -9
  561. package/dist/src/web/hooks/use-tool-output.js.map +0 -1
  562. package/dist/src/web/hooks/use-tool-response-metadata.d.ts +0 -4
  563. package/dist/src/web/hooks/use-tool-response-metadata.js +0 -8
  564. package/dist/src/web/hooks/use-tool-response-metadata.js.map +0 -1
  565. package/dist/src/web/hooks/use-user-agent.d.ts +0 -1
  566. package/dist/src/web/hooks/use-user-agent.js +0 -5
  567. package/dist/src/web/hooks/use-user-agent.js.map +0 -1
  568. package/dist/src/web/hooks/use-user-agent.test.js +0 -31
  569. package/dist/src/web/hooks/use-user-agent.test.js.map +0 -1
  570. package/dist/src/web/hooks/use-widget-state.d.ts +0 -4
  571. package/dist/src/web/hooks/use-widget-state.js +0 -30
  572. package/dist/src/web/hooks/use-widget-state.js.map +0 -1
  573. package/dist/src/web/hooks/use-widget-state.test.js +0 -61
  574. package/dist/src/web/hooks/use-widget-state.test.js.map +0 -1
  575. package/dist/src/web/index.d.ts +0 -4
  576. package/dist/src/web/index.js +0 -5
  577. package/dist/src/web/index.js.map +0 -1
  578. package/dist/src/web/mount-widget.d.ts +0 -1
  579. package/dist/src/web/mount-widget.js +0 -14
  580. package/dist/src/web/mount-widget.js.map +0 -1
  581. package/dist/src/web/plugin.d.ts +0 -2
  582. package/dist/src/web/plugin.js +0 -28
  583. package/dist/src/web/plugin.js.map +0 -1
  584. package/dist/src/web/types.d.ts +0 -110
  585. package/dist/src/web/types.js.map +0 -1
  586. package/dist/vitest.config.d.ts +0 -2
  587. package/dist/vitest.config.js +0 -9
  588. package/dist/vitest.config.js.map +0 -1
  589. /package/dist/{src/test/setup.d.ts → cli/build-helpers.test.d.ts} +0 -0
  590. /package/dist/{src/test/widget.test.d.ts → cli/build-steps.test.d.ts} +0 -0
  591. /package/dist/{src/web/hooks/use-call-tool.test.d.ts → cli/tunnel-control-server.test.d.ts} +0 -0
  592. /package/dist/{src/web/hooks/use-display-mode.test.d.ts → cli/tunnel-handler.test.d.ts} +0 -0
  593. /package/dist/{src/web/hooks/use-locale.test.d.ts → cli/tunnel.test.d.ts} +0 -0
  594. /package/dist/{src/web/hooks/use-open-external.test.d.ts → context-warnings.test.d.ts} +0 -0
  595. /package/dist/{src/web/hooks/use-request-modal.test.d.ts → server/asset-base-url-transform-plugin.test.d.ts} +0 -0
  596. /package/dist/{src/web/hooks/use-tool-info.test.d.ts → server/auth/discovery.test.d.ts} +0 -0
  597. /package/dist/{src/web/hooks/use-user-agent.test.d.ts → server/auth/providers/auth0.test.d.ts} +0 -0
  598. /package/dist/{src/web/hooks/use-widget-state.test.d.ts → server/auth/providers/authplane.test.d.ts} +0 -0
  599. /package/dist/{src/web/hooks/use-theme.test.d.ts → server/auth-extra.test-d.d.ts} +0 -0
  600. /package/dist/{src/web → web/bridges/apps-sdk}/types.js +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-helpers.test.js","sourceRoot":"","sources":["../../src/cli/build-helpers.test.ts"],"names":[],"mappings":"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","sourcesContent":["// @vitest-environment node\n// esbuild's invariant check on TextEncoder/Uint8Array trips jsdom's polyfill.\nimport {\n existsSync,\n mkdirSync,\n mkdtempSync,\n readFileSync,\n writeFileSync,\n} from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport { describe, expect, it } from \"vitest\";\nimport {\n ENTRY_WRAPPER_CONTENT,\n emitEmptyManifestModule,\n emitEntryWrapper,\n emitManifestModule,\n emitSkillsModule,\n emitVercelBuildOutput,\n ensureAssetsDir,\n VERCEL_CONFIG,\n VERCEL_VC_CONFIG,\n} from \"./build-helpers.js\";\n\nfunction mkTmp(prefix = \"skybridge-build-helpers-\") {\n return mkdtempSync(path.join(tmpdir(), prefix));\n}\n\ndescribe(\"emitEntryWrapper\", () => {\n it(\"writes dist/__entry.js that primes the manifest before importing user code\", () => {\n const dir = mkTmp();\n emitEntryWrapper(dir);\n const out = readFileSync(path.join(dir, \"__entry.js\"), \"utf-8\");\n expect(out).toBe(ENTRY_WRAPPER_CONTENT);\n expect(out).toContain(\n 'import { __setBuildManifest, __setSkillsManifest } from \"skybridge/server\"',\n );\n expect(out).toContain('import manifest from \"./vite-manifest.js\"');\n expect(out).toContain('import skills from \"./skills.js\"');\n expect(out).toContain(\"__setBuildManifest(manifest)\");\n expect(out).toContain(\"__setSkillsManifest(skills)\");\n // Dynamic import is load-bearing: `server.js` must evaluate after the\n // setters run, so a static re-export wouldn't work.\n expect(out).toContain('await import(\"./server.js\")');\n expect(out).toContain(\"export default userMod.default\");\n });\n});\n\ndescribe(\"emitSkillsModule\", () => {\n it(\"inlines discovered skills as an ESM default export\", () => {\n const dir = mkTmp();\n const skillsDir = path.join(dir, \"src\", \"skills\");\n mkdirSync(path.join(skillsDir, \"refunds\"), { recursive: true });\n writeFileSync(\n path.join(skillsDir, \"refunds\", \"SKILL.md\"),\n \"---\\nname: refunds\\ndescription: Process refunds\\n---\\nBody\",\n );\n const outPath = path.join(dir, \"skills.js\");\n emitSkillsModule(skillsDir, outPath);\n const out = readFileSync(outPath, \"utf-8\");\n const literal = out\n .slice(\"export default \".length)\n .trim()\n .replace(/;$/, \"\");\n const skills = JSON.parse(literal);\n expect(skills).toHaveLength(1);\n expect(skills[0]).toMatchObject({\n uri: \"skill://refunds/SKILL.md\",\n frontmatter: { name: \"refunds\", description: \"Process refunds\" },\n });\n expect(skills[0].resources).toHaveLength(1);\n expect(skills[0].resources[0].uri).toBe(\"skill://refunds/SKILL.md\");\n expect(skills[0].resources[0].digest).toMatch(/^sha256:[a-f0-9]{64}$/);\n });\n\n it(\"emits an empty array when the skills directory is absent\", () => {\n const dir = mkTmp();\n const outPath = path.join(dir, \"skills.js\");\n emitSkillsModule(path.join(dir, \"nope\"), outPath);\n expect(readFileSync(outPath, \"utf-8\")).toBe(\"export default [];\\n\");\n });\n});\n\ndescribe(\"emitManifestModule\", () => {\n it(\"inlines the JSON manifest as an ESM default export\", () => {\n const dir = mkTmp();\n const inPath = path.join(dir, \"manifest.json\");\n const outPath = path.join(dir, \"vite-manifest.js\");\n const manifest = { \"src/views/foo.tsx\": { file: \"assets/foo-abc.js\" } };\n writeFileSync(inPath, JSON.stringify(manifest));\n emitManifestModule(inPath, outPath);\n const out = readFileSync(outPath, \"utf-8\");\n expect(out.startsWith(\"export default \")).toBe(true);\n const literal = out\n .slice(\"export default \".length)\n .trim()\n .replace(/;$/, \"\");\n expect(JSON.parse(literal)).toEqual(manifest);\n });\n});\n\ndescribe(\"emitEmptyManifestModule\", () => {\n it(\"writes an empty object default export\", () => {\n const dir = mkTmp();\n const outPath = path.join(dir, \"vite-manifest.js\");\n emitEmptyManifestModule(outPath);\n expect(readFileSync(outPath, \"utf-8\")).toBe(\"export default {};\\n\");\n });\n});\n\ndescribe(\"ensureAssetsDir\", () => {\n it(\"creates the assets directory when missing\", () => {\n const dir = mkTmp();\n const assetsDir = path.join(dir, \"dist\", \"assets\");\n ensureAssetsDir(assetsDir);\n expect(existsSync(assetsDir)).toBe(true);\n });\n});\n\ndescribe(\"emitVercelBuildOutput\", () => {\n it(\"emits a Build Output API tree with bundled function and static assets\", async () => {\n const root = mkTmp();\n mkdirSync(path.join(root, \"dist\", \"assets\"), { recursive: true });\n writeFileSync(\n path.join(root, \"dist\", \"server.js\"),\n \"export default function handler(_req, res) { res.end('ok'); }\\n\",\n );\n // Minimal `dist/__entry.js` (the real wrapper imports `skybridge/server`,\n // which isn't resolvable in this test's tmp dir — the function-bundling\n // contract we care about here is just \"bundle whatever `__entry.js`\n // imports into a single function file\").\n writeFileSync(\n path.join(root, \"dist\", \"__entry.js\"),\n \"const userMod = await import('./server.js');\\nexport default userMod.default;\\n\",\n );\n writeFileSync(\n path.join(root, \"dist\", \"assets\", \"view-abc.js\"),\n \"/* bundled view */\\n\",\n );\n\n await emitVercelBuildOutput(root);\n\n const outputDir = path.join(root, \".vercel\", \"output\");\n const funcDir = path.join(outputDir, \"functions\", \"mcp.func\");\n\n expect(existsSync(path.join(funcDir, \"index.js\"))).toBe(true);\n expect(\n JSON.parse(readFileSync(path.join(funcDir, \".vc-config.json\"), \"utf-8\")),\n ).toEqual(VERCEL_VC_CONFIG);\n expect(\n JSON.parse(readFileSync(path.join(funcDir, \"package.json\"), \"utf-8\")),\n ).toEqual({ type: \"module\" });\n expect(\n JSON.parse(readFileSync(path.join(outputDir, \"config.json\"), \"utf-8\")),\n ).toEqual(VERCEL_CONFIG);\n expect(\n readFileSync(\n path.join(outputDir, \"static\", \"assets\", \"view-abc.js\"),\n \"utf-8\",\n ),\n ).toContain(\"bundled view\");\n });\n\n it(\"leaves serverExternal packages unbundled\", async () => {\n const root = mkTmp();\n mkdirSync(path.join(root, \"dist\"), { recursive: true });\n // Unresolvable from the tmp root, so esbuild fails the build unless the\n // package is marked external (bunyan → optional `dtrace-provider`).\n writeFileSync(\n path.join(root, \"dist\", \"__entry.js\"),\n 'import \"dtrace-provider\";\\nexport default null;\\n',\n );\n\n await expect(emitVercelBuildOutput(root)).rejects.toThrow(\n /Could not resolve \"dtrace-provider\"/,\n );\n await emitVercelBuildOutput(root, [\"dtrace-provider\"]);\n\n const bundle = readFileSync(\n path.join(root, \".vercel\", \"output\", \"functions\", \"mcp.func\", \"index.js\"),\n \"utf-8\",\n );\n expect(bundle).toContain('import \"dtrace-provider\"');\n });\n\n it(\"emits static assets directory when dist/assets is missing\", async () => {\n const root = mkTmp();\n mkdirSync(path.join(root, \"dist\"), { recursive: true });\n writeFileSync(\n path.join(root, \"dist\", \"__entry.js\"),\n \"const userMod = await import('./server.js');\\nexport default userMod.default;\\n\",\n );\n writeFileSync(\n path.join(root, \"dist\", \"server.js\"),\n \"export default function handler(_req, res) { res.end('ok'); }\\n\",\n );\n\n await emitVercelBuildOutput(root);\n\n expect(\n existsSync(path.join(root, \".vercel\", \"output\", \"static\", \"assets\")),\n ).toBe(true);\n expect(\n existsSync(\n path.join(\n root,\n \".vercel\",\n \"output\",\n \"functions\",\n \"mcp.func\",\n \"index.js\",\n ),\n ),\n ).toBe(true);\n });\n});\n"]}
@@ -0,0 +1,2 @@
1
+ import type { CommandStep } from "./use-execute-steps.js";
2
+ export declare function getCommandSteps(root?: string): Promise<CommandStep[]>;
@@ -0,0 +1,73 @@
1
+ import { rmSync, writeFileSync } from "node:fs";
2
+ import path, { isAbsolute, resolve } from "node:path";
3
+ import { scanAndWriteViewsDts, scanViewsSync, } from "../web/plugin/scan-views.js";
4
+ import { emitEmptyManifestModule, emitEntryWrapper, emitManifestModule, emitSkillsModule, emitVercelBuildOutput, ensureAssetsDir, } from "./build-helpers.js";
5
+ import { resolveSkybridgeConfig } from "./resolve-skybridge-config.js";
6
+ export async function getCommandSteps(root = process.cwd()) {
7
+ const { viewsDir, serverExternal } = await resolveSkybridgeConfig(root);
8
+ const rawDir = viewsDir ?? "src/views";
9
+ const resolvedDir = isAbsolute(rawDir) ? rawDir : resolve(root, rawDir);
10
+ // Non-throwing pre-check: duplicate view names are validated in the
11
+ // "Scanning views" step so useExecuteSteps can render a styled error.
12
+ const hasViews = scanViewsSync(resolvedDir).valid.length > 0;
13
+ const steps = [
14
+ {
15
+ label: "Scanning views",
16
+ run: async () => {
17
+ scanAndWriteViewsDts(root, viewsDir);
18
+ },
19
+ },
20
+ {
21
+ label: "Compiling server",
22
+ run: () => rmSync(path.join(root, "dist"), { recursive: true, force: true }),
23
+ command: "tsc -b --force",
24
+ },
25
+ ];
26
+ if (hasViews) {
27
+ steps.push({
28
+ label: "Building views",
29
+ command: "vite build",
30
+ });
31
+ }
32
+ steps.push({
33
+ label: "Emitting manifest module",
34
+ run: () => {
35
+ const manifestOut = path.join(root, "dist", "vite-manifest.js");
36
+ if (hasViews) {
37
+ emitManifestModule(path.join(root, "dist", "assets", ".vite", "manifest.json"), manifestOut);
38
+ }
39
+ else {
40
+ emitEmptyManifestModule(manifestOut);
41
+ }
42
+ },
43
+ }, {
44
+ label: "Emitting skills module",
45
+ run: () => {
46
+ emitSkillsModule(resolve(root, "src/skills"), path.join(root, "dist", "skills.js"));
47
+ },
48
+ }, {
49
+ label: "Emitting entry wrapper",
50
+ run: () => {
51
+ emitEntryWrapper(path.join(root, "dist"));
52
+ },
53
+ }, {
54
+ label: "Emitting Cloudflare redirects",
55
+ run: () => {
56
+ const assetsDir = path.join(root, "dist", "assets");
57
+ ensureAssetsDir(assetsDir);
58
+ writeFileSync(path.join(assetsDir, "_redirects"), "/assets/assets/* /assets/:splat 200\n");
59
+ },
60
+ }, {
61
+ label: "Emitting Cloudflare headers",
62
+ run: () => {
63
+ const assetsDir = path.join(root, "dist", "assets");
64
+ ensureAssetsDir(assetsDir);
65
+ writeFileSync(path.join(assetsDir, "_headers"), "/assets/*\n Access-Control-Allow-Origin: *\n");
66
+ },
67
+ }, {
68
+ label: "Emitting Vercel build output",
69
+ run: () => emitVercelBuildOutput(root, serverExternal),
70
+ });
71
+ return steps;
72
+ }
73
+ //# sourceMappingURL=build-steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-steps.js","sourceRoot":"","sources":["../../src/cli/build-steps.ts"],"names":[],"mappings":"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","sourcesContent":["import { rmSync, writeFileSync } from \"node:fs\";\nimport path, { isAbsolute, resolve } from \"node:path\";\nimport {\n scanAndWriteViewsDts,\n scanViewsSync,\n} from \"../web/plugin/scan-views.js\";\nimport {\n emitEmptyManifestModule,\n emitEntryWrapper,\n emitManifestModule,\n emitSkillsModule,\n emitVercelBuildOutput,\n ensureAssetsDir,\n} from \"./build-helpers.js\";\nimport { resolveSkybridgeConfig } from \"./resolve-skybridge-config.js\";\nimport type { CommandStep } from \"./use-execute-steps.js\";\n\nexport async function getCommandSteps(\n root = process.cwd(),\n): Promise<CommandStep[]> {\n const { viewsDir, serverExternal } = await resolveSkybridgeConfig(root);\n const rawDir = viewsDir ?? \"src/views\";\n const resolvedDir = isAbsolute(rawDir) ? rawDir : resolve(root, rawDir);\n // Non-throwing pre-check: duplicate view names are validated in the\n // \"Scanning views\" step so useExecuteSteps can render a styled error.\n const hasViews = scanViewsSync(resolvedDir).valid.length > 0;\n\n const steps: CommandStep[] = [\n {\n label: \"Scanning views\",\n run: async () => {\n scanAndWriteViewsDts(root, viewsDir);\n },\n },\n {\n label: \"Compiling server\",\n run: () =>\n rmSync(path.join(root, \"dist\"), { recursive: true, force: true }),\n command: \"tsc -b --force\",\n },\n ];\n\n if (hasViews) {\n steps.push({\n label: \"Building views\",\n command: \"vite build\",\n });\n }\n\n steps.push(\n {\n label: \"Emitting manifest module\",\n run: () => {\n const manifestOut = path.join(root, \"dist\", \"vite-manifest.js\");\n if (hasViews) {\n emitManifestModule(\n path.join(root, \"dist\", \"assets\", \".vite\", \"manifest.json\"),\n manifestOut,\n );\n } else {\n emitEmptyManifestModule(manifestOut);\n }\n },\n },\n {\n label: \"Emitting skills module\",\n run: () => {\n emitSkillsModule(\n resolve(root, \"src/skills\"),\n path.join(root, \"dist\", \"skills.js\"),\n );\n },\n },\n {\n label: \"Emitting entry wrapper\",\n run: () => {\n emitEntryWrapper(path.join(root, \"dist\"));\n },\n },\n {\n label: \"Emitting Cloudflare redirects\",\n run: () => {\n const assetsDir = path.join(root, \"dist\", \"assets\");\n ensureAssetsDir(assetsDir);\n writeFileSync(\n path.join(assetsDir, \"_redirects\"),\n \"/assets/assets/* /assets/:splat 200\\n\",\n );\n },\n },\n {\n label: \"Emitting Cloudflare headers\",\n run: () => {\n const assetsDir = path.join(root, \"dist\", \"assets\");\n ensureAssetsDir(assetsDir);\n writeFileSync(\n path.join(assetsDir, \"_headers\"),\n \"/assets/*\\n Access-Control-Allow-Origin: *\\n\",\n );\n },\n },\n {\n label: \"Emitting Vercel build output\",\n run: () => emitVercelBuildOutput(root, serverExternal),\n },\n );\n\n return steps;\n}\n"]}
@@ -0,0 +1,52 @@
1
+ // @vitest-environment node
2
+ import { existsSync, mkdirSync, mkdtempSync, readFileSync, writeFileSync, } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import path from "node:path";
5
+ import { describe, expect, it } from "vitest";
6
+ import { getCommandSteps } from "./build-steps.js";
7
+ function mkTmp(prefix = "skybridge-build-steps-") {
8
+ return mkdtempSync(path.join(tmpdir(), prefix));
9
+ }
10
+ describe("getCommandSteps", () => {
11
+ it("omits the vite build step when no views are registered", async () => {
12
+ const root = mkTmp();
13
+ mkdirSync(path.join(root, "src"), { recursive: true });
14
+ writeFileSync(path.join(root, "vite.config.ts"), `import { defineConfig } from "vite";
15
+ import { skybridge } from "skybridge/vite";
16
+ export default defineConfig({ plugins: [skybridge()] });`);
17
+ writeFileSync(path.join(root, "tsconfig.json"), JSON.stringify({ compilerOptions: { strict: true } }));
18
+ const steps = await getCommandSteps(root);
19
+ const labels = steps.map((step) => step.label);
20
+ expect(labels).not.toContain("Building views");
21
+ expect(labels).toContain("Emitting manifest module");
22
+ expect(labels.at(-1)).toBe("Emitting Vercel build output");
23
+ });
24
+ it("includes the vite build step when views are present", async () => {
25
+ const root = mkTmp();
26
+ mkdirSync(path.join(root, "src", "views"), { recursive: true });
27
+ writeFileSync(path.join(root, "src", "views", "hello.tsx"), "export default function Hello() { return null; }\n");
28
+ writeFileSync(path.join(root, "vite.config.ts"), `import { defineConfig } from "vite";
29
+ import { skybridge } from "skybridge/vite";
30
+ export default defineConfig({ plugins: [skybridge()] });`);
31
+ writeFileSync(path.join(root, "tsconfig.json"), JSON.stringify({ compilerOptions: { strict: true } }));
32
+ const steps = await getCommandSteps(root);
33
+ const labels = steps.map((step) => step.label);
34
+ expect(labels).toContain("Building views");
35
+ });
36
+ it("emits an empty manifest module when there are no views", async () => {
37
+ const root = mkTmp();
38
+ mkdirSync(path.join(root, "src"), { recursive: true });
39
+ writeFileSync(path.join(root, "vite.config.ts"), `import { defineConfig } from "vite";
40
+ import { skybridge } from "skybridge/vite";
41
+ export default defineConfig({ plugins: [skybridge()] });`);
42
+ const steps = await getCommandSteps(root);
43
+ const emitManifest = steps.find((step) => step.label === "Emitting manifest module");
44
+ expect(emitManifest?.run).toBeDefined();
45
+ mkdirSync(path.join(root, "dist"), { recursive: true });
46
+ await emitManifest?.run?.();
47
+ const manifestOut = path.join(root, "dist", "vite-manifest.js");
48
+ expect(existsSync(manifestOut)).toBe(true);
49
+ expect(readFileSync(manifestOut, "utf-8")).toBe("export default {};\n");
50
+ });
51
+ });
52
+ //# sourceMappingURL=build-steps.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-steps.test.js","sourceRoot":"","sources":["../../src/cli/build-steps.test.ts"],"names":[],"mappings":"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","sourcesContent":["// @vitest-environment node\nimport {\n existsSync,\n mkdirSync,\n mkdtempSync,\n readFileSync,\n writeFileSync,\n} from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport { describe, expect, it } from \"vitest\";\nimport { getCommandSteps } from \"./build-steps.js\";\n\nfunction mkTmp(prefix = \"skybridge-build-steps-\") {\n return mkdtempSync(path.join(tmpdir(), prefix));\n}\n\ndescribe(\"getCommandSteps\", () => {\n it(\"omits the vite build step when no views are registered\", async () => {\n const root = mkTmp();\n mkdirSync(path.join(root, \"src\"), { recursive: true });\n writeFileSync(\n path.join(root, \"vite.config.ts\"),\n `import { defineConfig } from \"vite\";\nimport { skybridge } from \"skybridge/vite\";\nexport default defineConfig({ plugins: [skybridge()] });`,\n );\n writeFileSync(\n path.join(root, \"tsconfig.json\"),\n JSON.stringify({ compilerOptions: { strict: true } }),\n );\n\n const steps = await getCommandSteps(root);\n const labels = steps.map((step) => step.label);\n\n expect(labels).not.toContain(\"Building views\");\n expect(labels).toContain(\"Emitting manifest module\");\n expect(labels.at(-1)).toBe(\"Emitting Vercel build output\");\n });\n\n it(\"includes the vite build step when views are present\", async () => {\n const root = mkTmp();\n mkdirSync(path.join(root, \"src\", \"views\"), { recursive: true });\n writeFileSync(\n path.join(root, \"src\", \"views\", \"hello.tsx\"),\n \"export default function Hello() { return null; }\\n\",\n );\n writeFileSync(\n path.join(root, \"vite.config.ts\"),\n `import { defineConfig } from \"vite\";\nimport { skybridge } from \"skybridge/vite\";\nexport default defineConfig({ plugins: [skybridge()] });`,\n );\n writeFileSync(\n path.join(root, \"tsconfig.json\"),\n JSON.stringify({ compilerOptions: { strict: true } }),\n );\n\n const steps = await getCommandSteps(root);\n const labels = steps.map((step) => step.label);\n\n expect(labels).toContain(\"Building views\");\n });\n\n it(\"emits an empty manifest module when there are no views\", async () => {\n const root = mkTmp();\n mkdirSync(path.join(root, \"src\"), { recursive: true });\n writeFileSync(\n path.join(root, \"vite.config.ts\"),\n `import { defineConfig } from \"vite\";\nimport { skybridge } from \"skybridge/vite\";\nexport default defineConfig({ plugins: [skybridge()] });`,\n );\n\n const steps = await getCommandSteps(root);\n const emitManifest = steps.find(\n (step) => step.label === \"Emitting manifest module\",\n );\n expect(emitManifest?.run).toBeDefined();\n\n mkdirSync(path.join(root, \"dist\"), { recursive: true });\n await emitManifest?.run?.();\n\n const manifestOut = path.join(root, \"dist\", \"vite-manifest.js\");\n expect(existsSync(manifestOut)).toBe(true);\n expect(readFileSync(manifestOut, \"utf-8\")).toBe(\"export default {};\\n\");\n });\n});\n"]}
@@ -0,0 +1,18 @@
1
+ export declare function resolvePort(flagPort?: number): Promise<{
2
+ port: number;
3
+ fallback: boolean;
4
+ envWarning?: undefined;
5
+ } | {
6
+ port: number;
7
+ fallback: boolean;
8
+ envWarning: string;
9
+ }>;
10
+ /**
11
+ * Returns the first available port at or after `startPort`, incrementing
12
+ * by one until a free port is found or `MAX_PORT_INCREMENT` is reached.
13
+ *
14
+ * @param host - Bind address for the check. Pass `"localhost"` for
15
+ * services that bind to 127.0.0.1 (e.g. Vite HMR). Omit for
16
+ * services that bind to all interfaces (e.g. the HTTP server).
17
+ */
18
+ export declare function detectAvailablePort(startPort: number, host?: string): Promise<number>;
@@ -0,0 +1,50 @@
1
+ import net from "node:net";
2
+ const DEFAULT_PORT = 3000;
3
+ const MAX_PORT_INCREMENT = 100;
4
+ export async function resolvePort(flagPort) {
5
+ if (flagPort && flagPort > 1) {
6
+ return { port: flagPort, fallback: false };
7
+ }
8
+ const rawEnv = process.env.PORT;
9
+ if (rawEnv) {
10
+ const parsed = Number(rawEnv);
11
+ if (Number.isInteger(parsed) && parsed > 0) {
12
+ return { port: parsed, fallback: false };
13
+ }
14
+ return {
15
+ port: await detectAvailablePort(DEFAULT_PORT),
16
+ fallback: false,
17
+ envWarning: `Invalid PORT="${rawEnv}", ignoring and using default`,
18
+ };
19
+ }
20
+ const port = await detectAvailablePort(DEFAULT_PORT);
21
+ return { port, fallback: port !== DEFAULT_PORT };
22
+ }
23
+ /**
24
+ * Returns the first available port at or after `startPort`, incrementing
25
+ * by one until a free port is found or `MAX_PORT_INCREMENT` is reached.
26
+ *
27
+ * @param host - Bind address for the check. Pass `"localhost"` for
28
+ * services that bind to 127.0.0.1 (e.g. Vite HMR). Omit for
29
+ * services that bind to all interfaces (e.g. the HTTP server).
30
+ */
31
+ export async function detectAvailablePort(startPort, host) {
32
+ for (let port = startPort; port < startPort + MAX_PORT_INCREMENT; port++) {
33
+ if (await isPortAvailable(port, host)) {
34
+ return port;
35
+ }
36
+ console.log(`Port ${port} is in use, trying another one...`);
37
+ }
38
+ throw new Error(`No available port found between ${startPort} and ${startPort + MAX_PORT_INCREMENT - 1}`);
39
+ }
40
+ function isPortAvailable(port, host) {
41
+ return new Promise((resolve) => {
42
+ const server = net.createServer();
43
+ server.once("error", () => resolve(false));
44
+ server.once("listening", () => {
45
+ server.close(() => resolve(true));
46
+ });
47
+ server.listen(port, host);
48
+ });
49
+ }
50
+ //# sourceMappingURL=detect-port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-port.js","sourceRoot":"","sources":["../../src/cli/detect-port.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAE3B,MAAM,YAAY,GAAG,IAAI,CAAC;AAC1B,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAiB;IACjD,IAAI,QAAQ,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAChC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC3C,CAAC;QACD,OAAO;YACL,IAAI,EAAE,MAAM,mBAAmB,CAAC,YAAY,CAAC;YAC7C,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,iBAAiB,MAAM,+BAA+B;SACnE,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACrD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,KAAK,YAAY,EAAE,CAAC;AACnD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAiB,EACjB,IAAa;IAEb,KAAK,IAAI,IAAI,GAAG,SAAS,EAAE,IAAI,GAAG,SAAS,GAAG,kBAAkB,EAAE,IAAI,EAAE,EAAE,CAAC;QACzE,IAAI,MAAM,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,mCAAmC,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,IAAI,KAAK,CACb,mCAAmC,SAAS,QAAQ,SAAS,GAAG,kBAAkB,GAAG,CAAC,EAAE,CACzF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,IAAa;IAClD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;QAElC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;YAC5B,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import net from \"node:net\";\n\nconst DEFAULT_PORT = 3000;\nconst MAX_PORT_INCREMENT = 100;\n\nexport async function resolvePort(flagPort?: number) {\n if (flagPort && flagPort > 1) {\n return { port: flagPort, fallback: false };\n }\n\n const rawEnv = process.env.PORT;\n if (rawEnv) {\n const parsed = Number(rawEnv);\n if (Number.isInteger(parsed) && parsed > 0) {\n return { port: parsed, fallback: false };\n }\n return {\n port: await detectAvailablePort(DEFAULT_PORT),\n fallback: false,\n envWarning: `Invalid PORT=\"${rawEnv}\", ignoring and using default`,\n };\n }\n\n const port = await detectAvailablePort(DEFAULT_PORT);\n return { port, fallback: port !== DEFAULT_PORT };\n}\n\n/**\n * Returns the first available port at or after `startPort`, incrementing\n * by one until a free port is found or `MAX_PORT_INCREMENT` is reached.\n *\n * @param host - Bind address for the check. Pass `\"localhost\"` for\n * services that bind to 127.0.0.1 (e.g. Vite HMR). Omit for\n * services that bind to all interfaces (e.g. the HTTP server).\n */\nexport async function detectAvailablePort(\n startPort: number,\n host?: string,\n): Promise<number> {\n for (let port = startPort; port < startPort + MAX_PORT_INCREMENT; port++) {\n if (await isPortAvailable(port, host)) {\n return port;\n }\n console.log(`Port ${port} is in use, trying another one...`);\n }\n throw new Error(\n `No available port found between ${startPort} and ${startPort + MAX_PORT_INCREMENT - 1}`,\n );\n}\n\nfunction isPortAvailable(port: number, host?: string): Promise<boolean> {\n return new Promise((resolve) => {\n const server = net.createServer();\n\n server.once(\"error\", () => resolve(false));\n server.once(\"listening\", () => {\n server.close(() => resolve(true));\n });\n\n server.listen(port, host);\n });\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export declare const Header: ({ version, children, }: {
2
+ version: string;
3
+ children?: React.ReactNode;
4
+ }) => import("react").JSX.Element;
@@ -0,0 +1,6 @@
1
+ import { jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Text } from "ink";
3
+ export const Header = ({ version, children, }) => {
4
+ return (_jsxs(Box, { marginBottom: 1, children: [_jsxs(Text, { color: "cyan", bold: true, children: ["\u26F0", " ", "Skybridge"] }), _jsxs(Text, { color: "cyan", children: [" v", version] }), children] }));
5
+ };
6
+ //# sourceMappingURL=header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.js","sourceRoot":"","sources":["../../src/cli/header.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,EACrB,OAAO,EACP,QAAQ,GAIT,EAAE,EAAE;IACH,OAAO,CACL,MAAC,GAAG,IAAC,YAAY,EAAE,CAAC,aAClB,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,EAAC,IAAI,6BACnB,IAAI,iBACD,EACP,MAAC,IAAI,IAAC,KAAK,EAAC,MAAM,mBAAI,OAAO,IAAQ,EACpC,QAAQ,IACL,CACP,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { Box, Text } from \"ink\";\n\nexport const Header = ({\n version,\n children,\n}: {\n version: string;\n children?: React.ReactNode;\n}) => {\n return (\n <Box marginBottom={1}>\n <Text color=\"cyan\" bold>\n ā›°{\" \"}Skybridge\n </Text>\n <Text color=\"cyan\"> v{version}</Text>\n {children}\n </Box>\n );\n};\n"]}
@@ -0,0 +1,5 @@
1
+ export interface SkybridgeConfig {
2
+ viewsDir?: string;
3
+ serverExternal?: string[];
4
+ }
5
+ export declare function resolveSkybridgeConfig(root: string): Promise<SkybridgeConfig>;
@@ -0,0 +1,18 @@
1
+ export async function resolveSkybridgeConfig(root) {
2
+ const { loadConfigFromFile } = await import("vite");
3
+ const loaded = await loadConfigFromFile({ command: "build", mode: "production" }, undefined, root);
4
+ const isPluginCandidate = (value) => typeof value === "object" && value !== null;
5
+ const plugins = [];
6
+ const walk = (value) => {
7
+ if (Array.isArray(value)) {
8
+ value.forEach(walk);
9
+ }
10
+ else if (isPluginCandidate(value)) {
11
+ plugins.push(value);
12
+ }
13
+ };
14
+ walk(loaded?.config.plugins ?? []);
15
+ const api = plugins.find((p) => p.name === "skybridge")?.api;
16
+ return { viewsDir: api?.viewsDir, serverExternal: api?.serverExternal };
17
+ }
18
+ //# sourceMappingURL=resolve-skybridge-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-skybridge-config.js","sourceRoot":"","sources":["../../src/cli/resolve-skybridge-config.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,IAAY;IAEZ,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EACxC,SAAS,EACT,IAAI,CACL,CAAC;IAEF,MAAM,iBAAiB,GAAG,CACxB,KAAc,EACqC,EAAE,CACrD,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;IAE9C,MAAM,OAAO,GAAoD,EAAE,CAAC;IACpE,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,EAAE;QAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,EAAE,GAAG,CAAC;IAC7D,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,EAAE,cAAc,EAAE,CAAC;AAC1E,CAAC","sourcesContent":["export interface SkybridgeConfig {\n viewsDir?: string;\n serverExternal?: string[];\n}\n\nexport async function resolveSkybridgeConfig(\n root: string,\n): Promise<SkybridgeConfig> {\n const { loadConfigFromFile } = await import(\"vite\");\n const loaded = await loadConfigFromFile(\n { command: \"build\", mode: \"production\" },\n undefined,\n root,\n );\n\n const isPluginCandidate = (\n value: unknown,\n ): value is { name?: string; api?: SkybridgeConfig } =>\n typeof value === \"object\" && value !== null;\n\n const plugins: Array<{ name?: string; api?: SkybridgeConfig }> = [];\n const walk = (value: unknown) => {\n if (Array.isArray(value)) {\n value.forEach(walk);\n } else if (isPluginCandidate(value)) {\n plugins.push(value);\n }\n };\n walk(loaded?.config.plugins ?? []);\n const api = plugins.find((p) => p.name === \"skybridge\")?.api;\n return { viewsDir: api?.viewsDir, serverExternal: api?.serverExternal };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import { type SpawnOptions } from "node:child_process";
2
+ export declare function runCommand(command: string, options?: SpawnOptions): Promise<void>;
@@ -0,0 +1,43 @@
1
+ import { spawn } from "node:child_process";
2
+ export function runCommand(command, options = {
3
+ stdio: ["ignore", "inherit", "inherit"],
4
+ }) {
5
+ return new Promise((resolve, reject) => {
6
+ const stdoutChunks = [];
7
+ const stderrChunks = [];
8
+ const proc = spawn(command, {
9
+ ...options,
10
+ shell: true,
11
+ });
12
+ if (proc.stdout) {
13
+ proc.stdout.on("data", (chunk) => {
14
+ stdoutChunks.push(chunk);
15
+ });
16
+ }
17
+ if (proc.stderr) {
18
+ proc.stderr.on("data", (chunk) => {
19
+ stderrChunks.push(chunk);
20
+ });
21
+ }
22
+ proc.on("close", (code) => {
23
+ if (code === 0) {
24
+ resolve();
25
+ }
26
+ else {
27
+ const stdoutOutput = Buffer.concat(stdoutChunks).toString();
28
+ const stderrOutput = Buffer.concat(stderrChunks).toString();
29
+ const allOutput = [stdoutOutput, stderrOutput]
30
+ .filter((output) => output.trim())
31
+ .join("\n");
32
+ const errorMessage = allOutput
33
+ ? `Command failed with exit code ${code}\n${allOutput}`
34
+ : `Command failed with exit code ${code}`;
35
+ reject(new Error(errorMessage));
36
+ }
37
+ });
38
+ proc.on("error", (error) => {
39
+ reject(error);
40
+ });
41
+ });
42
+ }
43
+ //# sourceMappingURL=run-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-command.js","sourceRoot":"","sources":["../../src/cli/run-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,UAAU,UAAU,CACxB,OAAe,EACf,UAAwB;IACtB,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC;CACxC;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,YAAY,GAAa,EAAE,CAAC;QAClC,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE;YAC1B,GAAG,OAAO;YACV,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC/B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC/B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,CAAC;YACZ,CAAC;iBAAM,CAAC;gBACN,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC5D,MAAM,SAAS,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC;qBAC3C,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;qBACjC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACd,MAAM,YAAY,GAAG,SAAS;oBAC5B,CAAC,CAAC,iCAAiC,IAAI,KAAK,SAAS,EAAE;oBACvD,CAAC,CAAC,iCAAiC,IAAI,EAAE,CAAC;gBAC5C,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;YAClC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YACzB,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { type SpawnOptions, spawn } from \"node:child_process\";\n\nexport function runCommand(\n command: string,\n options: SpawnOptions = {\n stdio: [\"ignore\", \"inherit\", \"inherit\"],\n },\n): Promise<void> {\n return new Promise((resolve, reject) => {\n const stdoutChunks: Buffer[] = [];\n const stderrChunks: Buffer[] = [];\n\n const proc = spawn(command, {\n ...options,\n shell: true,\n });\n\n if (proc.stdout) {\n proc.stdout.on(\"data\", (chunk) => {\n stdoutChunks.push(chunk);\n });\n }\n\n if (proc.stderr) {\n proc.stderr.on(\"data\", (chunk) => {\n stderrChunks.push(chunk);\n });\n }\n\n proc.on(\"close\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n const stdoutOutput = Buffer.concat(stdoutChunks).toString();\n const stderrOutput = Buffer.concat(stderrChunks).toString();\n const allOutput = [stdoutOutput, stderrOutput]\n .filter((output) => output.trim())\n .join(\"\\n\");\n const errorMessage = allOutput\n ? `Command failed with exit code ${code}\\n${allOutput}`\n : `Command failed with exit code ${code}`;\n reject(new Error(errorMessage));\n }\n });\n\n proc.on(\"error\", (error) => {\n reject(error);\n });\n });\n}\n"]}
@@ -0,0 +1,18 @@
1
+ import type { TunnelManager } from "./tunnel.js";
2
+ export interface RunPlainOptions {
3
+ env: NodeJS.ProcessEnv;
4
+ port: number;
5
+ fallback: boolean;
6
+ version: string;
7
+ tunnel: boolean;
8
+ tunnelManager: TunnelManager;
9
+ }
10
+ /**
11
+ * Run `skybridge dev` without the Ink UI. The server's stdout is forwarded
12
+ * verbatim to the real stdout so it can be piped through a formatter
13
+ * (`skybridge dev --plain | bunyan`); everything else (banner, URLs, tunnel
14
+ * state, TypeScript errors, restarts) is written to stderr.
15
+ *
16
+ * Returns a cleanup function that tears down nodemon and the tsc watcher.
17
+ */
18
+ export declare function runPlain(options: RunPlainOptions): () => void;
@@ -0,0 +1,89 @@
1
+ import { startNodemon } from "./use-nodemon.js";
2
+ import { startTypeScriptCheck } from "./use-typescript-check.js";
3
+ // Banner/URLs/diagnostics go to stderr so a downstream pipe (e.g.
4
+ // `skybridge dev --plain | bunyan`) only ever sees the server's own stdout.
5
+ function info(message) {
6
+ process.stderr.write(`${message}\n`);
7
+ }
8
+ function describeTunnel(state, port) {
9
+ switch (state.status) {
10
+ case "starting":
11
+ return `šŸŒ ${state.message}`;
12
+ case "connected":
13
+ return `šŸŒ Exposed on ${state.url}/mcp\n→ Test with an LLM on Playground: ${state.url}/try`;
14
+ case "error":
15
+ return `šŸŒ Cannot open tunnel: ${state.message}\n→ Try manually: npx alpic tunnel --port ${port}`;
16
+ default:
17
+ return "";
18
+ }
19
+ }
20
+ /**
21
+ * Run `skybridge dev` without the Ink UI. The server's stdout is forwarded
22
+ * verbatim to the real stdout so it can be piped through a formatter
23
+ * (`skybridge dev --plain | bunyan`); everything else (banner, URLs, tunnel
24
+ * state, TypeScript errors, restarts) is written to stderr.
25
+ *
26
+ * Returns a cleanup function that tears down nodemon and the tsc watcher.
27
+ */
28
+ export function runPlain(options) {
29
+ const { env, port, fallback, version, tunnel, tunnelManager } = options;
30
+ // If the downstream formatter (e.g. `| bunyan`) exits, the next write raises
31
+ // EPIPE. Swallow it so a closed pipe doesn't crash the dev server.
32
+ const ignoreEpipe = (err) => {
33
+ if (err.code !== "EPIPE") {
34
+ throw err;
35
+ }
36
+ };
37
+ process.stdout.on("error", ignoreEpipe);
38
+ process.stderr.on("error", ignoreEpipe);
39
+ info(`ā›° Skybridge v${version}`);
40
+ info(fallback
41
+ ? `šŸ  3000 in use, running on http://localhost:${port}/mcp`
42
+ : `šŸ  Running on http://localhost:${port}/mcp`);
43
+ info(`→ Test locally with DevTools: http://localhost:${port}/`);
44
+ if (!tunnel) {
45
+ info("šŸŒ Get a public URL and LLM Playground access with --tunnel.");
46
+ }
47
+ const stopNodemon = startNodemon(env, {
48
+ onStdout: (chunk) => process.stdout.write(chunk),
49
+ onStderr: (message) => info(message),
50
+ onRestart: (files) => info(`āœ“ Server restarted due to file changes: ${files.join(", ")}`),
51
+ });
52
+ let lastTsErrorKey = "";
53
+ const stopTypeScriptCheck = startTypeScriptCheck((errors) => {
54
+ // tsc re-emits on every save; only print when the error set actually changes.
55
+ const key = errors
56
+ .map((e) => `${e.file}:${e.line}:${e.col}:${e.message}`)
57
+ .join("|");
58
+ if (key === lastTsErrorKey) {
59
+ return;
60
+ }
61
+ lastTsErrorKey = key;
62
+ if (errors.length === 0) {
63
+ return;
64
+ }
65
+ info("āš ļø TypeScript errors found:");
66
+ for (const error of errors) {
67
+ info(` ${error.file}(${error.line},${error.col}): ${error.message}`);
68
+ }
69
+ });
70
+ const unsubscribeTunnel = tunnel
71
+ ? tunnelManager.subscribe((state) => {
72
+ const message = describeTunnel(state, port);
73
+ if (message) {
74
+ info(message);
75
+ }
76
+ })
77
+ : () => { };
78
+ if (tunnel) {
79
+ tunnelManager.start();
80
+ }
81
+ return () => {
82
+ unsubscribeTunnel();
83
+ stopNodemon();
84
+ stopTypeScriptCheck();
85
+ process.stdout.off("error", ignoreEpipe);
86
+ process.stderr.off("error", ignoreEpipe);
87
+ };
88
+ }
89
+ //# sourceMappingURL=run-plain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-plain.js","sourceRoot":"","sources":["../../src/cli/run-plain.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TunnelManager, TunnelState } from \"./tunnel.js\";\nimport { startNodemon } from \"./use-nodemon.js\";\nimport { startTypeScriptCheck, type TsError } from \"./use-typescript-check.js\";\n\nexport interface RunPlainOptions {\n env: NodeJS.ProcessEnv;\n port: number;\n fallback: boolean;\n version: string;\n tunnel: boolean;\n tunnelManager: TunnelManager;\n}\n\n// Banner/URLs/diagnostics go to stderr so a downstream pipe (e.g.\n// `skybridge dev --plain | bunyan`) only ever sees the server's own stdout.\nfunction info(message: string): void {\n process.stderr.write(`${message}\\n`);\n}\n\nfunction describeTunnel(state: TunnelState, port: number): string {\n switch (state.status) {\n case \"starting\":\n return `šŸŒ ${state.message}`;\n case \"connected\":\n return `šŸŒ Exposed on ${state.url}/mcp\\n→ Test with an LLM on Playground: ${state.url}/try`;\n case \"error\":\n return `šŸŒ Cannot open tunnel: ${state.message}\\n→ Try manually: npx alpic tunnel --port ${port}`;\n default:\n return \"\";\n }\n}\n\n/**\n * Run `skybridge dev` without the Ink UI. The server's stdout is forwarded\n * verbatim to the real stdout so it can be piped through a formatter\n * (`skybridge dev --plain | bunyan`); everything else (banner, URLs, tunnel\n * state, TypeScript errors, restarts) is written to stderr.\n *\n * Returns a cleanup function that tears down nodemon and the tsc watcher.\n */\nexport function runPlain(options: RunPlainOptions): () => void {\n const { env, port, fallback, version, tunnel, tunnelManager } = options;\n\n // If the downstream formatter (e.g. `| bunyan`) exits, the next write raises\n // EPIPE. Swallow it so a closed pipe doesn't crash the dev server.\n const ignoreEpipe = (err: NodeJS.ErrnoException) => {\n if (err.code !== \"EPIPE\") {\n throw err;\n }\n };\n process.stdout.on(\"error\", ignoreEpipe);\n process.stderr.on(\"error\", ignoreEpipe);\n\n info(`ā›° Skybridge v${version}`);\n info(\n fallback\n ? `šŸ  3000 in use, running on http://localhost:${port}/mcp`\n : `šŸ  Running on http://localhost:${port}/mcp`,\n );\n info(`→ Test locally with DevTools: http://localhost:${port}/`);\n if (!tunnel) {\n info(\"šŸŒ Get a public URL and LLM Playground access with --tunnel.\");\n }\n\n const stopNodemon = startNodemon(env, {\n onStdout: (chunk) => process.stdout.write(chunk),\n onStderr: (message) => info(message),\n onRestart: (files) =>\n info(`āœ“ Server restarted due to file changes: ${files.join(\", \")}`),\n });\n\n let lastTsErrorKey = \"\";\n const stopTypeScriptCheck = startTypeScriptCheck((errors: Array<TsError>) => {\n // tsc re-emits on every save; only print when the error set actually changes.\n const key = errors\n .map((e) => `${e.file}:${e.line}:${e.col}:${e.message}`)\n .join(\"|\");\n if (key === lastTsErrorKey) {\n return;\n }\n lastTsErrorKey = key;\n if (errors.length === 0) {\n return;\n }\n info(\"āš ļø TypeScript errors found:\");\n for (const error of errors) {\n info(` ${error.file}(${error.line},${error.col}): ${error.message}`);\n }\n });\n\n const unsubscribeTunnel = tunnel\n ? tunnelManager.subscribe((state) => {\n const message = describeTunnel(state, port);\n if (message) {\n info(message);\n }\n })\n : () => {};\n\n if (tunnel) {\n tunnelManager.start();\n }\n\n return () => {\n unsubscribeTunnel();\n stopNodemon();\n stopTypeScriptCheck();\n process.stdout.off(\"error\", ignoreEpipe);\n process.stderr.off(\"error\", ignoreEpipe);\n };\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import type { Hook } from "@oclif/core";
2
+ export declare function isEnabled(): boolean;
3
+ export declare function isDebugMode(): boolean;
4
+ export declare function setEnabled(enabled: boolean): void;
5
+ export declare function getMachineId(): string;
6
+ declare const hook: Hook<"finally">;
7
+ export default hook;