skybridge 0.0.0-dev.e1b8fe1 → 0.0.0-dev.e1ca873

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 (629) hide show
  1. package/LICENSE +21 -674
  2. package/README.md +126 -91
  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 +49 -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 +90 -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 +125 -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 +26 -0
  57. package/dist/cli/use-nodemon.js +106 -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/app.d.ts +194 -0
  95. package/dist/server/app.js +266 -0
  96. package/dist/server/app.js.map +1 -0
  97. package/dist/server/app.test.js +97 -0
  98. package/dist/server/app.test.js.map +1 -0
  99. package/dist/server/asset-base-url-transform-plugin.d.ts +11 -0
  100. package/dist/server/asset-base-url-transform-plugin.js +48 -0
  101. package/dist/server/asset-base-url-transform-plugin.js.map +1 -0
  102. package/dist/server/asset-base-url-transform-plugin.test.js +134 -0
  103. package/dist/server/asset-base-url-transform-plugin.test.js.map +1 -0
  104. package/dist/server/auth/discovery.d.ts +33 -0
  105. package/dist/server/auth/discovery.js +56 -0
  106. package/dist/server/auth/discovery.js.map +1 -0
  107. package/dist/server/auth/discovery.test.js +93 -0
  108. package/dist/server/auth/discovery.test.js.map +1 -0
  109. package/dist/server/auth/index.d.ts +48 -0
  110. package/dist/server/auth/index.js +2 -0
  111. package/dist/server/auth/index.js.map +1 -0
  112. package/dist/server/auth/providers/auth0.d.ts +40 -0
  113. package/dist/server/auth/providers/auth0.js +36 -0
  114. package/dist/server/auth/providers/auth0.js.map +1 -0
  115. package/dist/server/auth/providers/auth0.test.js +50 -0
  116. package/dist/server/auth/providers/auth0.test.js.map +1 -0
  117. package/dist/server/auth/providers/authplane.d.ts +49 -0
  118. package/dist/server/auth/providers/authplane.js +57 -0
  119. package/dist/server/auth/providers/authplane.js.map +1 -0
  120. package/dist/server/auth/providers/authplane.test.js +143 -0
  121. package/dist/server/auth/providers/authplane.test.js.map +1 -0
  122. package/dist/server/auth/providers/clerk.d.ts +51 -0
  123. package/dist/server/auth/providers/clerk.js +19 -0
  124. package/dist/server/auth/providers/clerk.js.map +1 -0
  125. package/dist/server/auth/providers/clerk.test.js +30 -0
  126. package/dist/server/auth/providers/clerk.test.js.map +1 -0
  127. package/dist/server/auth/providers/custom.d.ts +42 -0
  128. package/dist/server/auth/providers/custom.js +59 -0
  129. package/dist/server/auth/providers/custom.js.map +1 -0
  130. package/dist/server/auth/providers/custom.test.js +161 -0
  131. package/dist/server/auth/providers/custom.test.js.map +1 -0
  132. package/dist/server/auth/providers/descope.d.ts +44 -0
  133. package/dist/server/auth/providers/descope.js +44 -0
  134. package/dist/server/auth/providers/descope.js.map +1 -0
  135. package/dist/server/auth/providers/descope.test.js +62 -0
  136. package/dist/server/auth/providers/descope.test.js.map +1 -0
  137. package/dist/server/auth/providers/shared.d.ts +2 -0
  138. package/dist/server/auth/providers/shared.js +6 -0
  139. package/dist/server/auth/providers/shared.js.map +1 -0
  140. package/dist/server/auth/providers/shared.test.js +10 -0
  141. package/dist/server/auth/providers/shared.test.js.map +1 -0
  142. package/dist/server/auth/providers/stytch.d.ts +25 -0
  143. package/dist/server/auth/providers/stytch.js +16 -0
  144. package/dist/server/auth/providers/stytch.js.map +1 -0
  145. package/dist/server/auth/providers/verify-spy.d.ts +12 -0
  146. package/dist/server/auth/providers/verify-spy.js +21 -0
  147. package/dist/server/auth/providers/verify-spy.js.map +1 -0
  148. package/dist/server/auth/providers/workos.d.ts +34 -0
  149. package/dist/server/auth/providers/workos.js +16 -0
  150. package/dist/server/auth/providers/workos.js.map +1 -0
  151. package/dist/server/auth/security-schemes.d.ts +23 -0
  152. package/dist/server/auth/security-schemes.js +64 -0
  153. package/dist/server/auth/security-schemes.js.map +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 +91 -0
  158. package/dist/server/auth/setup.js.map +1 -0
  159. package/dist/server/auth/setup.test.js +514 -0
  160. package/dist/server/auth/setup.test.js.map +1 -0
  161. package/dist/server/auth/verify.d.ts +48 -0
  162. package/dist/server/auth/verify.js +62 -0
  163. package/dist/server/auth/verify.js.map +1 -0
  164. package/dist/server/auth/verify.test.js +165 -0
  165. package/dist/server/auth/verify.test.js.map +1 -0
  166. package/dist/server/auth-extra.test-d.js +130 -0
  167. package/dist/server/auth-extra.test-d.js.map +1 -0
  168. package/dist/server/auth.d.ts +57 -0
  169. package/dist/server/auth.js +27 -0
  170. package/dist/server/auth.js.map +1 -0
  171. package/dist/server/build-manifest.test.js +28 -0
  172. package/dist/server/build-manifest.test.js.map +1 -0
  173. package/dist/server/content-helpers.d.ts +67 -0
  174. package/dist/server/content-helpers.js +79 -0
  175. package/dist/server/content-helpers.js.map +1 -0
  176. package/dist/server/content-helpers.test.d.ts +1 -0
  177. package/dist/server/content-helpers.test.js +70 -0
  178. package/dist/server/content-helpers.test.js.map +1 -0
  179. package/dist/server/express.d.ts +31 -0
  180. package/dist/server/express.js +107 -0
  181. package/dist/server/express.js.map +1 -0
  182. package/dist/server/express.test.d.ts +1 -0
  183. package/dist/server/express.test.js +608 -0
  184. package/dist/server/express.test.js.map +1 -0
  185. package/dist/server/file-ref.d.ts +28 -0
  186. package/dist/server/file-ref.js +27 -0
  187. package/dist/server/file-ref.js.map +1 -0
  188. package/dist/server/host.d.ts +2 -0
  189. package/dist/server/host.js +11 -0
  190. package/dist/server/host.js.map +1 -0
  191. package/dist/server/host.test.d.ts +1 -0
  192. package/dist/server/host.test.js +13 -0
  193. package/dist/server/host.test.js.map +1 -0
  194. package/dist/server/index.d.ts +22 -0
  195. package/dist/server/index.js +18 -0
  196. package/dist/server/index.js.map +1 -0
  197. package/dist/{src/server → server}/inferUtilityTypes.d.ts +15 -5
  198. package/dist/server/inferUtilityTypes.js.map +1 -0
  199. package/dist/server/mcp-errors.test.d.ts +1 -0
  200. package/dist/server/mcp-errors.test.js +41 -0
  201. package/dist/server/mcp-errors.test.js.map +1 -0
  202. package/dist/server/metric.d.ts +14 -0
  203. package/dist/server/metric.js +62 -0
  204. package/dist/server/metric.js.map +1 -0
  205. package/dist/server/middleware.d.ts +162 -0
  206. package/dist/server/middleware.js +126 -0
  207. package/dist/server/middleware.js.map +1 -0
  208. package/dist/server/middleware.test-d.d.ts +1 -0
  209. package/dist/server/middleware.test-d.js +75 -0
  210. package/dist/server/middleware.test-d.js.map +1 -0
  211. package/dist/server/middleware.test.d.ts +1 -0
  212. package/dist/server/middleware.test.js +601 -0
  213. package/dist/server/middleware.test.js.map +1 -0
  214. package/dist/server/register-tool.test.d.ts +1 -0
  215. package/dist/server/register-tool.test.js +77 -0
  216. package/dist/server/register-tool.test.js.map +1 -0
  217. package/dist/server/requestOrigin.d.ts +7 -0
  218. package/dist/server/requestOrigin.js +25 -0
  219. package/dist/server/requestOrigin.js.map +1 -0
  220. package/dist/server/server.d.ts +495 -0
  221. package/dist/server/server.js +585 -0
  222. package/dist/server/server.js.map +1 -0
  223. package/dist/server/skills-integration.test.d.ts +1 -0
  224. package/dist/server/skills-integration.test.js +86 -0
  225. package/dist/server/skills-integration.test.js.map +1 -0
  226. package/dist/server/skills.d.ts +27 -0
  227. package/dist/server/skills.js +188 -0
  228. package/dist/server/skills.js.map +1 -0
  229. package/dist/server/skills.test.d.ts +1 -0
  230. package/dist/server/skills.test.js +243 -0
  231. package/dist/server/skills.test.js.map +1 -0
  232. package/dist/{src/server → server}/templateHelper.d.ts +2 -4
  233. package/dist/server/templateHelper.js +11 -0
  234. package/dist/server/templateHelper.js.map +1 -0
  235. package/dist/server/templates.generated.d.ts +4 -0
  236. package/dist/server/templates.generated.js +43 -0
  237. package/dist/server/templates.generated.js.map +1 -0
  238. package/dist/server/tool-extra.test.d.ts +1 -0
  239. package/dist/server/tool-extra.test.js +88 -0
  240. package/dist/server/tool-extra.test.js.map +1 -0
  241. package/dist/server/tunnel-proxy-router.d.ts +7 -0
  242. package/dist/server/tunnel-proxy-router.js +110 -0
  243. package/dist/server/tunnel-proxy-router.js.map +1 -0
  244. package/dist/server/tunnel-proxy-router.test.d.ts +1 -0
  245. package/dist/server/tunnel-proxy-router.test.js +229 -0
  246. package/dist/server/tunnel-proxy-router.test.js.map +1 -0
  247. package/dist/server/view-name.test-d.d.ts +1 -0
  248. package/dist/server/view-name.test-d.js +8 -0
  249. package/dist/server/view-name.test-d.js.map +1 -0
  250. package/dist/server/view-resource-resolution.test.d.ts +6 -0
  251. package/dist/server/view-resource-resolution.test.js +176 -0
  252. package/dist/server/view-resource-resolution.test.js.map +1 -0
  253. package/dist/server/viewsDevServer.d.ts +14 -0
  254. package/dist/server/viewsDevServer.js +48 -0
  255. package/dist/server/viewsDevServer.js.map +1 -0
  256. package/dist/test/utils.d.ts +125 -0
  257. package/dist/test/utils.js +266 -0
  258. package/dist/test/utils.js.map +1 -0
  259. package/dist/test/view.test.d.ts +1 -0
  260. package/dist/test/view.test.js +540 -0
  261. package/dist/test/view.test.js.map +1 -0
  262. package/dist/version.d.ts +1 -0
  263. package/dist/version.js +3 -0
  264. package/dist/version.js.map +1 -0
  265. package/dist/views/index.d.ts +10 -0
  266. package/dist/views/index.js +3 -0
  267. package/dist/views/index.js.map +1 -0
  268. package/dist/views/scan-views.d.ts +16 -0
  269. package/dist/views/scan-views.js +88 -0
  270. package/dist/views/scan-views.js.map +1 -0
  271. package/dist/views/scan-views.test.d.ts +1 -0
  272. package/dist/views/scan-views.test.js +99 -0
  273. package/dist/views/scan-views.test.js.map +1 -0
  274. package/dist/views/validate-view.d.ts +1 -0
  275. package/dist/views/validate-view.js +9 -0
  276. package/dist/views/validate-view.js.map +1 -0
  277. package/dist/views/validate-view.test.d.ts +1 -0
  278. package/dist/views/validate-view.test.js +24 -0
  279. package/dist/views/validate-view.test.js.map +1 -0
  280. package/dist/web/bridges/adaptor.d.ts +55 -0
  281. package/dist/web/bridges/adaptor.js +364 -0
  282. package/dist/web/bridges/adaptor.js.map +1 -0
  283. package/dist/web/bridges/adaptor.test.d.ts +1 -0
  284. package/dist/web/bridges/adaptor.test.js +225 -0
  285. package/dist/web/bridges/adaptor.test.js.map +1 -0
  286. package/dist/web/bridges/apps-sdk/bridge.d.ts +15 -0
  287. package/dist/web/bridges/apps-sdk/bridge.js +58 -0
  288. package/dist/web/bridges/apps-sdk/bridge.js.map +1 -0
  289. package/dist/web/bridges/apps-sdk/index.d.ts +4 -0
  290. package/dist/web/bridges/apps-sdk/index.js +4 -0
  291. package/dist/web/bridges/apps-sdk/index.js.map +1 -0
  292. package/dist/web/bridges/apps-sdk/types.d.ts +133 -0
  293. package/dist/{src/web → web/bridges/apps-sdk}/types.js +0 -1
  294. package/dist/web/bridges/apps-sdk/types.js.map +1 -0
  295. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.d.ts +13 -0
  296. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.js +18 -0
  297. package/dist/web/bridges/apps-sdk/use-apps-sdk-context.js.map +1 -0
  298. package/dist/web/bridges/get-adaptor.d.ts +9 -0
  299. package/dist/web/bridges/get-adaptor.js +10 -0
  300. package/dist/web/bridges/get-adaptor.js.map +1 -0
  301. package/dist/web/bridges/get-adaptor.test.d.ts +1 -0
  302. package/dist/web/bridges/get-adaptor.test.js +32 -0
  303. package/dist/web/bridges/get-adaptor.test.js.map +1 -0
  304. package/dist/web/bridges/index.d.ts +5 -0
  305. package/dist/web/bridges/index.js +6 -0
  306. package/dist/web/bridges/index.js.map +1 -0
  307. package/dist/web/bridges/mcp-app/bridge.d.ts +39 -0
  308. package/dist/web/bridges/mcp-app/bridge.js +175 -0
  309. package/dist/web/bridges/mcp-app/bridge.js.map +1 -0
  310. package/dist/web/bridges/mcp-app/bridge.test.d.ts +1 -0
  311. package/dist/web/bridges/mcp-app/bridge.test.js +17 -0
  312. package/dist/web/bridges/mcp-app/bridge.test.js.map +1 -0
  313. package/dist/web/bridges/mcp-app/index.d.ts +3 -0
  314. package/dist/web/bridges/mcp-app/index.js +3 -0
  315. package/dist/web/bridges/mcp-app/index.js.map +1 -0
  316. package/dist/web/bridges/mcp-app/types.d.ts +33 -0
  317. package/dist/web/bridges/mcp-app/types.js +2 -0
  318. package/dist/web/bridges/mcp-app/types.js.map +1 -0
  319. package/dist/web/bridges/mcp-app/use-mcp-app-context.d.ts +19 -0
  320. package/dist/web/bridges/mcp-app/use-mcp-app-context.js +19 -0
  321. package/dist/web/bridges/mcp-app/use-mcp-app-context.js.map +1 -0
  322. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.d.ts +1 -0
  323. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.js +26 -0
  324. package/dist/web/bridges/mcp-app/use-mcp-app-context.test.js.map +1 -0
  325. package/dist/web/bridges/mcp-app/view-tools.test.d.ts +1 -0
  326. package/dist/web/bridges/mcp-app/view-tools.test.js +143 -0
  327. package/dist/web/bridges/mcp-app/view-tools.test.js.map +1 -0
  328. package/dist/web/bridges/types.d.ts +233 -0
  329. package/dist/web/bridges/types.js +15 -0
  330. package/dist/web/bridges/types.js.map +1 -0
  331. package/dist/web/bridges/types.test.d.ts +1 -0
  332. package/dist/web/bridges/types.test.js +19 -0
  333. package/dist/web/bridges/types.test.js.map +1 -0
  334. package/dist/web/bridges/use-host-context.d.ts +7 -0
  335. package/dist/web/bridges/use-host-context.js +13 -0
  336. package/dist/web/bridges/use-host-context.js.map +1 -0
  337. package/dist/web/components/modal-provider.d.ts +4 -0
  338. package/dist/web/components/modal-provider.js +46 -0
  339. package/dist/web/components/modal-provider.js.map +1 -0
  340. package/dist/web/create-store.d.ts +29 -0
  341. package/dist/web/create-store.js +64 -0
  342. package/dist/web/create-store.js.map +1 -0
  343. package/dist/web/create-store.test.d.ts +1 -0
  344. package/dist/web/create-store.test.js +132 -0
  345. package/dist/web/create-store.test.js.map +1 -0
  346. package/dist/web/data-llm.d.ts +47 -0
  347. package/dist/{src/web → web}/data-llm.js +42 -9
  348. package/dist/web/data-llm.js.map +1 -0
  349. package/dist/web/data-llm.test.d.ts +1 -0
  350. package/dist/web/data-llm.test.js +161 -0
  351. package/dist/web/data-llm.test.js.map +1 -0
  352. package/dist/web/generate-helpers.d.ts +124 -0
  353. package/dist/{src/web → web}/generate-helpers.js +42 -32
  354. package/dist/web/generate-helpers.js.map +1 -0
  355. package/dist/web/generate-helpers.test-d.d.ts +1 -0
  356. package/dist/{src/web → web}/generate-helpers.test-d.js +81 -24
  357. package/dist/web/generate-helpers.test-d.js.map +1 -0
  358. package/dist/web/generate-helpers.test.d.ts +1 -0
  359. package/dist/{src/web → web}/generate-helpers.test.js +2 -2
  360. package/dist/web/generate-helpers.test.js.map +1 -0
  361. package/dist/{src/web → web}/helpers/state.d.ts +2 -2
  362. package/dist/web/helpers/state.js +45 -0
  363. package/dist/web/helpers/state.js.map +1 -0
  364. package/dist/web/helpers/state.test.d.ts +1 -0
  365. package/dist/{src/web → web}/helpers/state.test.js +9 -9
  366. package/dist/web/helpers/state.test.js.map +1 -0
  367. package/dist/web/hooks/index.d.ts +18 -0
  368. package/dist/web/hooks/index.js +19 -0
  369. package/dist/web/hooks/index.js.map +1 -0
  370. package/dist/web/hooks/openai-extensions.test.d.ts +1 -0
  371. package/dist/web/hooks/openai-extensions.test.js +104 -0
  372. package/dist/web/hooks/openai-extensions.test.js.map +1 -0
  373. package/dist/web/hooks/test/utils.d.ts +21 -0
  374. package/dist/web/hooks/test/utils.js +75 -0
  375. package/dist/web/hooks/test/utils.js.map +1 -0
  376. package/dist/{src/web → web}/hooks/use-call-tool.d.ts +48 -2
  377. package/dist/web/hooks/use-call-tool.js +101 -0
  378. package/dist/web/hooks/use-call-tool.js.map +1 -0
  379. package/dist/web/hooks/use-call-tool.test-d.d.ts +1 -0
  380. package/dist/web/hooks/use-call-tool.test-d.js.map +1 -0
  381. package/dist/web/hooks/use-call-tool.test.d.ts +1 -0
  382. package/dist/{src/web → web}/hooks/use-call-tool.test.js +99 -38
  383. package/dist/web/hooks/use-call-tool.test.js.map +1 -0
  384. package/dist/web/hooks/use-deep-link.d.ts +22 -0
  385. package/dist/web/hooks/use-deep-link.js +60 -0
  386. package/dist/web/hooks/use-deep-link.js.map +1 -0
  387. package/dist/web/hooks/use-display-mode.d.ts +24 -0
  388. package/dist/web/hooks/use-display-mode.js +29 -0
  389. package/dist/web/hooks/use-display-mode.js.map +1 -0
  390. package/dist/web/hooks/use-display-mode.test-d.d.ts +1 -0
  391. package/dist/web/hooks/use-display-mode.test-d.js +8 -0
  392. package/dist/web/hooks/use-display-mode.test-d.js.map +1 -0
  393. package/dist/web/hooks/use-display-mode.test.d.ts +1 -0
  394. package/dist/web/hooks/use-display-mode.test.js +77 -0
  395. package/dist/web/hooks/use-display-mode.test.js.map +1 -0
  396. package/dist/web/hooks/use-download.d.ts +3 -0
  397. package/dist/web/hooks/use-download.js +7 -0
  398. package/dist/web/hooks/use-download.js.map +1 -0
  399. package/dist/web/hooks/use-download.test.d.ts +1 -0
  400. package/dist/web/hooks/use-download.test.js +103 -0
  401. package/dist/web/hooks/use-download.test.js.map +1 -0
  402. package/dist/web/hooks/use-files.d.ts +39 -0
  403. package/dist/web/hooks/use-files.js +42 -0
  404. package/dist/web/hooks/use-files.js.map +1 -0
  405. package/dist/web/hooks/use-files.test.d.ts +1 -0
  406. package/dist/web/hooks/use-files.test.js +62 -0
  407. package/dist/web/hooks/use-files.test.js.map +1 -0
  408. package/dist/web/hooks/use-host.d.ts +44 -0
  409. package/dist/web/hooks/use-host.js +45 -0
  410. package/dist/web/hooks/use-host.js.map +1 -0
  411. package/dist/web/hooks/use-host.test.d.ts +1 -0
  412. package/dist/web/hooks/use-host.test.js +59 -0
  413. package/dist/web/hooks/use-host.test.js.map +1 -0
  414. package/dist/web/hooks/use-model-context.d.ts +42 -0
  415. package/dist/web/hooks/use-model-context.js +63 -0
  416. package/dist/web/hooks/use-model-context.js.map +1 -0
  417. package/dist/web/hooks/use-open-external.d.ts +20 -0
  418. package/dist/web/hooks/use-open-external.js +24 -0
  419. package/dist/web/hooks/use-open-external.js.map +1 -0
  420. package/dist/web/hooks/use-open-external.test.d.ts +1 -0
  421. package/dist/web/hooks/use-open-external.test.js +75 -0
  422. package/dist/web/hooks/use-open-external.test.js.map +1 -0
  423. package/dist/web/hooks/use-register-view-tool.d.ts +37 -0
  424. package/dist/web/hooks/use-register-view-tool.js +50 -0
  425. package/dist/web/hooks/use-register-view-tool.js.map +1 -0
  426. package/dist/web/hooks/use-request-close.d.ts +16 -0
  427. package/dist/web/hooks/use-request-close.js +21 -0
  428. package/dist/web/hooks/use-request-close.js.map +1 -0
  429. package/dist/web/hooks/use-request-close.test.d.ts +1 -0
  430. package/dist/web/hooks/use-request-close.test.js +47 -0
  431. package/dist/web/hooks/use-request-close.test.js.map +1 -0
  432. package/dist/web/hooks/use-request-modal.d.ts +24 -0
  433. package/dist/web/hooks/use-request-modal.js +31 -0
  434. package/dist/web/hooks/use-request-modal.js.map +1 -0
  435. package/dist/web/hooks/use-request-modal.test.d.ts +1 -0
  436. package/dist/web/hooks/use-request-modal.test.js +71 -0
  437. package/dist/web/hooks/use-request-modal.test.js.map +1 -0
  438. package/dist/web/hooks/use-request-size.d.ts +20 -0
  439. package/dist/web/hooks/use-request-size.js +24 -0
  440. package/dist/web/hooks/use-request-size.js.map +1 -0
  441. package/dist/web/hooks/use-request-size.test.d.ts +1 -0
  442. package/dist/web/hooks/use-request-size.test.js +47 -0
  443. package/dist/web/hooks/use-request-size.test.js.map +1 -0
  444. package/dist/web/hooks/use-send-follow-up-message.d.ts +19 -0
  445. package/dist/web/hooks/use-send-follow-up-message.js +25 -0
  446. package/dist/web/hooks/use-send-follow-up-message.js.map +1 -0
  447. package/dist/web/hooks/use-set-open-in-app-url.d.ts +18 -0
  448. package/dist/web/hooks/use-set-open-in-app-url.js +25 -0
  449. package/dist/web/hooks/use-set-open-in-app-url.js.map +1 -0
  450. package/dist/web/hooks/use-set-open-in-app-url.test.d.ts +1 -0
  451. package/dist/web/hooks/use-set-open-in-app-url.test.js +57 -0
  452. package/dist/web/hooks/use-set-open-in-app-url.test.js.map +1 -0
  453. package/dist/web/hooks/use-tool-info.d.ts +68 -0
  454. package/dist/web/hooks/use-tool-info.js +48 -0
  455. package/dist/web/hooks/use-tool-info.js.map +1 -0
  456. package/dist/web/hooks/use-tool-info.test-d.d.ts +1 -0
  457. package/dist/{src/web → web}/hooks/use-tool-info.test-d.js +19 -6
  458. package/dist/web/hooks/use-tool-info.test-d.js.map +1 -0
  459. package/dist/web/hooks/use-tool-info.test.d.ts +1 -0
  460. package/dist/web/hooks/use-tool-info.test.js +135 -0
  461. package/dist/web/hooks/use-tool-info.test.js.map +1 -0
  462. package/dist/web/hooks/use-user.d.ts +21 -0
  463. package/dist/web/hooks/use-user.js +38 -0
  464. package/dist/web/hooks/use-user.js.map +1 -0
  465. package/dist/web/hooks/use-user.test.d.ts +1 -0
  466. package/dist/web/hooks/use-user.test.js +170 -0
  467. package/dist/web/hooks/use-user.test.js.map +1 -0
  468. package/dist/web/hooks/use-view-state.d.ts +25 -0
  469. package/dist/web/hooks/use-view-state.js +42 -0
  470. package/dist/web/hooks/use-view-state.js.map +1 -0
  471. package/dist/web/hooks/use-view-state.test.d.ts +1 -0
  472. package/dist/web/hooks/use-view-state.test.js +212 -0
  473. package/dist/web/hooks/use-view-state.test.js.map +1 -0
  474. package/dist/web/hooks/use-viewport.d.ts +20 -0
  475. package/dist/web/hooks/use-viewport.js +21 -0
  476. package/dist/web/hooks/use-viewport.js.map +1 -0
  477. package/dist/web/hooks/use-viewport.test.d.ts +1 -0
  478. package/dist/web/hooks/use-viewport.test.js +109 -0
  479. package/dist/web/hooks/use-viewport.test.js.map +1 -0
  480. package/dist/{src/web → web}/index.d.ts +2 -2
  481. package/dist/{src/web → web}/index.js +2 -2
  482. package/dist/web/index.js.map +1 -0
  483. package/dist/web/mount-view.d.ts +21 -0
  484. package/dist/web/mount-view.js +43 -0
  485. package/dist/web/mount-view.js.map +1 -0
  486. package/dist/{src/web → web}/proxy.js +5 -1
  487. package/dist/web/proxy.js.map +1 -0
  488. package/dist/web/types.d.ts +20 -0
  489. package/dist/web/types.js +2 -0
  490. package/dist/web/types.js.map +1 -0
  491. package/package.json +90 -43
  492. package/tsconfig.base.json +33 -0
  493. package/dist/src/server/index.d.ts +0 -4
  494. package/dist/src/server/index.js +0 -3
  495. package/dist/src/server/index.js.map +0 -1
  496. package/dist/src/server/inferUtilityTypes.js.map +0 -1
  497. package/dist/src/server/server.d.ts +0 -57
  498. package/dist/src/server/server.js +0 -62
  499. package/dist/src/server/server.js.map +0 -1
  500. package/dist/src/server/templateHelper.js +0 -29
  501. package/dist/src/server/templateHelper.js.map +0 -1
  502. package/dist/src/server/templates/development.hbs +0 -12
  503. package/dist/src/server/templates/production.hbs +0 -6
  504. package/dist/src/server/widgetsDevServer.d.ts +0 -12
  505. package/dist/src/server/widgetsDevServer.js +0 -39
  506. package/dist/src/server/widgetsDevServer.js.map +0 -1
  507. package/dist/src/test/utils.d.ts +0 -89
  508. package/dist/src/test/utils.js +0 -164
  509. package/dist/src/test/utils.js.map +0 -1
  510. package/dist/src/test/widget.test.js +0 -89
  511. package/dist/src/test/widget.test.js.map +0 -1
  512. package/dist/src/web/create-store.d.ts +0 -3
  513. package/dist/src/web/create-store.js +0 -25
  514. package/dist/src/web/create-store.js.map +0 -1
  515. package/dist/src/web/create-store.test.js +0 -70
  516. package/dist/src/web/create-store.test.js.map +0 -1
  517. package/dist/src/web/data-llm.d.ts +0 -14
  518. package/dist/src/web/data-llm.js.map +0 -1
  519. package/dist/src/web/data-llm.test.js +0 -76
  520. package/dist/src/web/data-llm.test.js.map +0 -1
  521. package/dist/src/web/generate-helpers.d.ts +0 -113
  522. package/dist/src/web/generate-helpers.js.map +0 -1
  523. package/dist/src/web/generate-helpers.test-d.js.map +0 -1
  524. package/dist/src/web/generate-helpers.test.js.map +0 -1
  525. package/dist/src/web/helpers/state.js +0 -40
  526. package/dist/src/web/helpers/state.js.map +0 -1
  527. package/dist/src/web/helpers/state.test.js.map +0 -1
  528. package/dist/src/web/hooks/index.d.ts +0 -12
  529. package/dist/src/web/hooks/index.js +0 -13
  530. package/dist/src/web/hooks/index.js.map +0 -1
  531. package/dist/src/web/hooks/use-call-tool.js +0 -60
  532. package/dist/src/web/hooks/use-call-tool.js.map +0 -1
  533. package/dist/src/web/hooks/use-call-tool.test-d.js.map +0 -1
  534. package/dist/src/web/hooks/use-call-tool.test.js.map +0 -1
  535. package/dist/src/web/hooks/use-display-mode.d.ts +0 -4
  536. package/dist/src/web/hooks/use-display-mode.js +0 -7
  537. package/dist/src/web/hooks/use-display-mode.js.map +0 -1
  538. package/dist/src/web/hooks/use-display-mode.test.js +0 -40
  539. package/dist/src/web/hooks/use-display-mode.test.js.map +0 -1
  540. package/dist/src/web/hooks/use-files.d.ts +0 -10
  541. package/dist/src/web/hooks/use-files.js +0 -7
  542. package/dist/src/web/hooks/use-files.js.map +0 -1
  543. package/dist/src/web/hooks/use-files.test.js +0 -29
  544. package/dist/src/web/hooks/use-files.test.js.map +0 -1
  545. package/dist/src/web/hooks/use-locale.d.ts +0 -1
  546. package/dist/src/web/hooks/use-locale.js +0 -5
  547. package/dist/src/web/hooks/use-locale.js.map +0 -1
  548. package/dist/src/web/hooks/use-locale.test.js +0 -21
  549. package/dist/src/web/hooks/use-locale.test.js.map +0 -1
  550. package/dist/src/web/hooks/use-open-external.d.ts +0 -1
  551. package/dist/src/web/hooks/use-open-external.js +0 -6
  552. package/dist/src/web/hooks/use-open-external.js.map +0 -1
  553. package/dist/src/web/hooks/use-open-external.test.js +0 -24
  554. package/dist/src/web/hooks/use-open-external.test.js.map +0 -1
  555. package/dist/src/web/hooks/use-openai-global.d.ts +0 -2
  556. package/dist/src/web/hooks/use-openai-global.js +0 -23
  557. package/dist/src/web/hooks/use-openai-global.js.map +0 -1
  558. package/dist/src/web/hooks/use-request-modal.d.ts +0 -6
  559. package/dist/src/web/hooks/use-request-modal.js +0 -9
  560. package/dist/src/web/hooks/use-request-modal.js.map +0 -1
  561. package/dist/src/web/hooks/use-request-modal.test.js +0 -24
  562. package/dist/src/web/hooks/use-request-modal.test.js.map +0 -1
  563. package/dist/src/web/hooks/use-send-follow-up-message.d.ts +0 -1
  564. package/dist/src/web/hooks/use-send-follow-up-message.js +0 -11
  565. package/dist/src/web/hooks/use-send-follow-up-message.js.map +0 -1
  566. package/dist/src/web/hooks/use-theme.d.ts +0 -1
  567. package/dist/src/web/hooks/use-theme.js +0 -5
  568. package/dist/src/web/hooks/use-theme.js.map +0 -1
  569. package/dist/src/web/hooks/use-theme.test.js +0 -26
  570. package/dist/src/web/hooks/use-theme.test.js.map +0 -1
  571. package/dist/src/web/hooks/use-tool-info.d.ts +0 -25
  572. package/dist/src/web/hooks/use-tool-info.js +0 -22
  573. package/dist/src/web/hooks/use-tool-info.js.map +0 -1
  574. package/dist/src/web/hooks/use-tool-info.test-d.js.map +0 -1
  575. package/dist/src/web/hooks/use-tool-info.test.js +0 -59
  576. package/dist/src/web/hooks/use-tool-info.test.js.map +0 -1
  577. package/dist/src/web/hooks/use-user-agent.d.ts +0 -1
  578. package/dist/src/web/hooks/use-user-agent.js +0 -5
  579. package/dist/src/web/hooks/use-user-agent.js.map +0 -1
  580. package/dist/src/web/hooks/use-user-agent.test.js +0 -31
  581. package/dist/src/web/hooks/use-user-agent.test.js.map +0 -1
  582. package/dist/src/web/hooks/use-widget-state.d.ts +0 -4
  583. package/dist/src/web/hooks/use-widget-state.js +0 -32
  584. package/dist/src/web/hooks/use-widget-state.js.map +0 -1
  585. package/dist/src/web/hooks/use-widget-state.test.js +0 -60
  586. package/dist/src/web/hooks/use-widget-state.test.js.map +0 -1
  587. package/dist/src/web/index.js.map +0 -1
  588. package/dist/src/web/mount-widget.d.ts +0 -1
  589. package/dist/src/web/mount-widget.js +0 -19
  590. package/dist/src/web/mount-widget.js.map +0 -1
  591. package/dist/src/web/plugin/data-llm.test.js +0 -81
  592. package/dist/src/web/plugin/data-llm.test.js.map +0 -1
  593. package/dist/src/web/plugin/plugin.d.ts +0 -2
  594. package/dist/src/web/plugin/plugin.js +0 -33
  595. package/dist/src/web/plugin/plugin.js.map +0 -1
  596. package/dist/src/web/plugin/transform-data-llm.d.ts +0 -12
  597. package/dist/src/web/plugin/transform-data-llm.js +0 -93
  598. package/dist/src/web/plugin/transform-data-llm.js.map +0 -1
  599. package/dist/src/web/plugin/transform-data-llm.test.js +0 -81
  600. package/dist/src/web/plugin/transform-data-llm.test.js.map +0 -1
  601. package/dist/src/web/proxy.js.map +0 -1
  602. package/dist/src/web/types.d.ts +0 -133
  603. package/dist/src/web/types.js.map +0 -1
  604. package/dist/vitest.config.d.ts +0 -2
  605. package/dist/vitest.config.js +0 -8
  606. package/dist/vitest.config.js.map +0 -1
  607. /package/dist/{src/test/widget.test.d.ts → cli/build-helpers.test.d.ts} +0 -0
  608. /package/dist/{src/web/create-store.test.d.ts → cli/build-steps.test.d.ts} +0 -0
  609. /package/dist/{src/web/data-llm.test.d.ts → cli/tunnel-control-server.test.d.ts} +0 -0
  610. /package/dist/{src/web/generate-helpers.test-d.d.ts → cli/tunnel-handler.test.d.ts} +0 -0
  611. /package/dist/{src/web/generate-helpers.test.d.ts → cli/tunnel.test.d.ts} +0 -0
  612. /package/dist/{src/web/helpers/state.test.d.ts → context-warnings.test.d.ts} +0 -0
  613. /package/dist/{src/web/hooks/use-call-tool.test-d.d.ts → server/app.test.d.ts} +0 -0
  614. /package/dist/{src/web/hooks/use-call-tool.test.d.ts → server/asset-base-url-transform-plugin.test.d.ts} +0 -0
  615. /package/dist/{src/web/hooks/use-files.test.d.ts → server/auth/discovery.test.d.ts} +0 -0
  616. /package/dist/{src/web/hooks/use-locale.test.d.ts → server/auth/providers/auth0.test.d.ts} +0 -0
  617. /package/dist/{src/web/hooks/use-open-external.test.d.ts → server/auth/providers/authplane.test.d.ts} +0 -0
  618. /package/dist/{src/web/hooks/use-request-modal.test.d.ts → server/auth/providers/clerk.test.d.ts} +0 -0
  619. /package/dist/{src/web/hooks/use-theme.test.d.ts → server/auth/providers/custom.test.d.ts} +0 -0
  620. /package/dist/{src/web/hooks/use-tool-info.test-d.d.ts → server/auth/providers/descope.test.d.ts} +0 -0
  621. /package/dist/{src/web/hooks/use-tool-info.test.d.ts → server/auth/providers/shared.test.d.ts} +0 -0
  622. /package/dist/{src/web/hooks/use-user-agent.test.d.ts → server/auth/security-schemes.test.d.ts} +0 -0
  623. /package/dist/{src/web/hooks/use-widget-state.test.d.ts → server/auth/setup.test.d.ts} +0 -0
  624. /package/dist/{src/web/plugin/data-llm.test.d.ts → server/auth/verify.test.d.ts} +0 -0
  625. /package/dist/{src/web/hooks/use-display-mode.test.d.ts → server/auth-extra.test-d.d.ts} +0 -0
  626. /package/dist/{src/web/plugin/transform-data-llm.test.d.ts → server/build-manifest.test.d.ts} +0 -0
  627. /package/dist/{src/server → server}/inferUtilityTypes.js +0 -0
  628. /package/dist/{src/web → web}/hooks/use-call-tool.test-d.js +0 -0
  629. /package/dist/{src/web → web}/proxy.d.ts +0 -0
@@ -0,0 +1,55 @@
1
+ import { existsSync } from "node:fs";
2
+ import { resolve } from "node:path";
3
+ import { Command, Flags } from "@oclif/core";
4
+ import { resolvePort } from "../cli/detect-port.js";
5
+ import { runCommand } from "../cli/run-command.js";
6
+ export default class Start extends Command {
7
+ static description = "Start production server";
8
+ static examples = ["skybridge start"];
9
+ static flags = {
10
+ port: Flags.integer({
11
+ char: "p",
12
+ description: "Port to run the server on",
13
+ min: 1,
14
+ }),
15
+ };
16
+ async run() {
17
+ const { flags } = await this.parse(Start);
18
+ const { port, fallback, envWarning } = await resolvePort(flags.port);
19
+ if (envWarning) {
20
+ this.warn(envWarning);
21
+ }
22
+ console.clear();
23
+ // `dist/index.js` is the natural entry (the user's `await app.run()`
24
+ // binds the port). Prefer `dist/__entry.js` when present because it
25
+ // primes the Vite manifest first — without it, hashed asset URLs in
26
+ // views won't resolve.
27
+ const entryPath = resolve(process.cwd(), "dist/__entry.js");
28
+ const fallbackPath = resolve(process.cwd(), "dist/index.js");
29
+ const indexPath = existsSync(entryPath) ? entryPath : fallbackPath;
30
+ if (!existsSync(indexPath)) {
31
+ console.error("❌ Error: No build output found");
32
+ console.error("");
33
+ console.error("Please build your project first:");
34
+ console.error(" skybridge build");
35
+ console.error("");
36
+ process.exit(1);
37
+ }
38
+ console.log(`\x1b[36m\x1b[1m⛰ Skybridge\x1b[0m \x1b[36mv${this.config.version}\x1b[0m`);
39
+ if (fallback) {
40
+ console.log(`\x1b[33m3000 in use, running on\x1b[0m \x1b[32mhttp://localhost:${port}/mcp\x1b[0m`);
41
+ }
42
+ else {
43
+ console.log(`Running on \x1b[32mhttp://localhost:${port}/mcp\x1b[0m`);
44
+ }
45
+ await runCommand(`node ${indexPath}`, {
46
+ stdio: ["ignore", "inherit", "inherit"],
47
+ env: {
48
+ ...process.env,
49
+ NODE_ENV: "production",
50
+ __PORT: String(port),
51
+ },
52
+ });
53
+ }
54
+ }
55
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,OAAO;IACxC,MAAM,CAAU,WAAW,GAAG,yBAAyB,CAAC;IACxD,MAAM,CAAU,QAAQ,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC/C,MAAM,CAAU,KAAK,GAAG;QACtB,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC;YAClB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,2BAA2B;YACxC,GAAG,EAAE,CAAC;SACP,CAAC;KACH,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1C,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxB,CAAC;QAED,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,qEAAqE;QACrE,oEAAoE;QACpE,oEAAoE;QACpE,uBAAuB;QACvB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,iBAAiB,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;QAC7D,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;QAEnE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAClD,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACnC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CACT,8CAA8C,IAAI,CAAC,MAAM,CAAC,OAAO,SAAS,CAC3E,CAAC;QACF,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,CAAC,GAAG,CACT,mEAAmE,IAAI,aAAa,CACrF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,uCAAuC,IAAI,aAAa,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,UAAU,CAAC,QAAQ,SAAS,EAAE,EAAE;YACpC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC;YACvC,GAAG,EAAE;gBACH,GAAG,OAAO,CAAC,GAAG;gBACd,QAAQ,EAAE,YAAY;gBACtB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC;aACrB;SACF,CAAC,CAAC;IACL,CAAC","sourcesContent":["import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { Command, Flags } from \"@oclif/core\";\nimport { resolvePort } from \"../cli/detect-port.js\";\nimport { runCommand } from \"../cli/run-command.js\";\n\nexport default class Start extends Command {\n static override description = \"Start production server\";\n static override examples = [\"skybridge start\"];\n static override flags = {\n port: Flags.integer({\n char: \"p\",\n description: \"Port to run the server on\",\n min: 1,\n }),\n };\n\n public async run(): Promise<void> {\n const { flags } = await this.parse(Start);\n const { port, fallback, envWarning } = await resolvePort(flags.port);\n if (envWarning) {\n this.warn(envWarning);\n }\n\n console.clear();\n\n // `dist/index.js` is the natural entry (the user's `await app.run()`\n // binds the port). Prefer `dist/__entry.js` when present because it\n // primes the Vite manifest first — without it, hashed asset URLs in\n // views won't resolve.\n const entryPath = resolve(process.cwd(), \"dist/__entry.js\");\n const fallbackPath = resolve(process.cwd(), \"dist/index.js\");\n const indexPath = existsSync(entryPath) ? entryPath : fallbackPath;\n\n if (!existsSync(indexPath)) {\n console.error(\"❌ Error: No build output found\");\n console.error(\"\");\n console.error(\"Please build your project first:\");\n console.error(\" skybridge build\");\n console.error(\"\");\n process.exit(1);\n }\n\n console.log(\n `\\x1b[36m\\x1b[1m⛰ Skybridge\\x1b[0m \\x1b[36mv${this.config.version}\\x1b[0m`,\n );\n if (fallback) {\n console.log(\n `\\x1b[33m3000 in use, running on\\x1b[0m \\x1b[32mhttp://localhost:${port}/mcp\\x1b[0m`,\n );\n } else {\n console.log(`Running on \\x1b[32mhttp://localhost:${port}/mcp\\x1b[0m`);\n }\n\n await runCommand(`node ${indexPath}`, {\n stdio: [\"ignore\", \"inherit\", \"inherit\"],\n env: {\n ...process.env,\n NODE_ENV: \"production\",\n __PORT: String(port),\n },\n });\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import { Command } from "@oclif/core";
2
+ export default class TelemetryDisable extends Command {
3
+ static description: string;
4
+ run(): Promise<void>;
5
+ }
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Command } from "@oclif/core";
3
+ import { Box, render, Text } from "ink";
4
+ import { setEnabled } from "../../cli/telemetry.js";
5
+ export default class TelemetryDisable extends Command {
6
+ static description = "Disable Skybridge telemetry on this machine";
7
+ async run() {
8
+ await this.parse(TelemetryDisable);
9
+ setEnabled(false);
10
+ const App = () => (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: "yellow", children: "\u2713" }), _jsx(Text, { children: " Telemetry has been " }), _jsx(Text, { color: "yellow", bold: true, children: "disabled" })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "Config saved to ~/.skybridge/config.json" }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "Skybridge never collects Personally Identifiable Information (PII). If you'd like to help us improve Skybridge by allowing anonymous CLI usage data, please reenable telemetry with: skybridge telemetry enable" }) })] }));
11
+ render(_jsx(App, {}));
12
+ }
13
+ }
14
+ //# sourceMappingURL=disable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disable.js","sourceRoot":"","sources":["../../../src/commands/telemetry/disable.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,OAAO;IACnD,MAAM,CAAU,WAAW,GAAG,6CAA6C,CAAC;IAErE,KAAK,CAAC,GAAG;QACd,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACnC,UAAU,CAAC,KAAK,CAAC,CAAC;QAElB,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,CAChB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,uBAAS,EAC7B,KAAC,IAAI,uCAA4B,EACjC,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,+BAElB,IACH,EACN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,yDAAgD,GAC9D,EACN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,gOAKX,GACH,IACF,CACP,CAAC;QAEF,MAAM,CAAC,KAAC,GAAG,KAAG,CAAC,CAAC;IAClB,CAAC","sourcesContent":["import { Command } from \"@oclif/core\";\nimport { Box, render, Text } from \"ink\";\nimport { setEnabled } from \"../../cli/telemetry.js\";\n\nexport default class TelemetryDisable extends Command {\n static override description = \"Disable Skybridge telemetry on this machine\";\n\n public async run(): Promise<void> {\n await this.parse(TelemetryDisable);\n setEnabled(false);\n\n const App = () => (\n <Box flexDirection=\"column\" padding={1}>\n <Box>\n <Text color=\"yellow\">✓</Text>\n <Text> Telemetry has been </Text>\n <Text color=\"yellow\" bold>\n disabled\n </Text>\n </Box>\n <Box marginTop={1}>\n <Text color=\"gray\">Config saved to ~/.skybridge/config.json</Text>\n </Box>\n <Box marginTop={1}>\n <Text color=\"gray\">\n Skybridge never collects Personally Identifiable Information (PII).\n If you'd like to help us improve Skybridge by allowing anonymous CLI\n usage data, please reenable telemetry with: skybridge telemetry\n enable\n </Text>\n </Box>\n </Box>\n );\n\n render(<App />);\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import { Command } from "@oclif/core";
2
+ export default class TelemetryEnable extends Command {
3
+ static description: string;
4
+ run(): Promise<void>;
5
+ }
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Command } from "@oclif/core";
3
+ import { Box, render, Text } from "ink";
4
+ import { setEnabled } from "../../cli/telemetry.js";
5
+ export default class TelemetryEnable extends Command {
6
+ static description = "Enable Skybridge telemetry on this machine";
7
+ async run() {
8
+ await this.parse(TelemetryEnable);
9
+ setEnabled(true);
10
+ const App = () => (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: "green", children: "\u2713" }), _jsx(Text, { children: " Telemetry has been " }), _jsx(Text, { color: "green", bold: true, children: "enabled" })] }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "Config saved to ~/.skybridge/config.json" }) })] }));
11
+ render(_jsx(App, {}));
12
+ }
13
+ }
14
+ //# sourceMappingURL=enable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enable.js","sourceRoot":"","sources":["../../../src/commands/telemetry/enable.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,OAAO;IAClD,MAAM,CAAU,WAAW,GAAG,4CAA4C,CAAC;IAEpE,KAAK,CAAC,GAAG;QACd,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAClC,UAAU,CAAC,IAAI,CAAC,CAAC;QAEjB,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,CAChB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,MAAC,GAAG,eACF,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,uBAAS,EAC5B,KAAC,IAAI,uCAA4B,EACjC,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,8BAEjB,IACH,EACN,KAAC,GAAG,IAAC,SAAS,EAAE,CAAC,YACf,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,yDAAgD,GAC9D,IACF,CACP,CAAC;QAEF,MAAM,CAAC,KAAC,GAAG,KAAG,CAAC,CAAC;IAClB,CAAC","sourcesContent":["import { Command } from \"@oclif/core\";\nimport { Box, render, Text } from \"ink\";\nimport { setEnabled } from \"../../cli/telemetry.js\";\n\nexport default class TelemetryEnable extends Command {\n static override description = \"Enable Skybridge telemetry on this machine\";\n\n public async run(): Promise<void> {\n await this.parse(TelemetryEnable);\n setEnabled(true);\n\n const App = () => (\n <Box flexDirection=\"column\" padding={1}>\n <Box>\n <Text color=\"green\">✓</Text>\n <Text> Telemetry has been </Text>\n <Text color=\"green\" bold>\n enabled\n </Text>\n </Box>\n <Box marginTop={1}>\n <Text color=\"gray\">Config saved to ~/.skybridge/config.json</Text>\n </Box>\n </Box>\n );\n\n render(<App />);\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ import { Command } from "@oclif/core";
2
+ export default class TelemetryStatus extends Command {
3
+ static description: string;
4
+ run(): Promise<void>;
5
+ }
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Command } from "@oclif/core";
3
+ import { Box, render, Text } from "ink";
4
+ import { getMachineId, isEnabled } from "../../cli/telemetry.js";
5
+ export default class TelemetryStatus extends Command {
6
+ static description = "Get Skybridge current telemetry settings for this machine";
7
+ async run() {
8
+ await this.parse(TelemetryStatus);
9
+ const enabled = isEnabled();
10
+ const App = () => (_jsxs(Box, { flexDirection: "column", padding: 1, children: [_jsx(Text, { bold: true, underline: true, children: "Skybridge Telemetry" }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { children: "Status: " }), enabled ? (_jsx(Text, { color: "green", bold: true, children: "Enabled" })) : (_jsx(Text, { color: "yellow", bold: true, children: "Disabled" }))] }), _jsxs(Box, { marginTop: 1, children: [_jsx(Text, { color: "gray", children: "Machine ID: " }), _jsx(Text, { children: getMachineId() })] })] }), _jsxs(Box, { marginTop: 1, flexDirection: "column", children: [_jsx(Text, { color: "gray", children: "To opt out, run: skybridge telemetry disable" }), _jsx(Text, { color: "gray", children: "Or set: SKYBRIDGE_TELEMETRY_DISABLED=1" }), _jsx(Text, { color: "gray", children: "Debug mode: SKYBRIDGE_TELEMETRY_DEBUG=1" })] })] }));
11
+ render(_jsx(App, {}));
12
+ }
13
+ }
14
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/telemetry/status.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,OAAO;IAClD,MAAM,CAAU,WAAW,GACzB,2DAA2D,CAAC;IAEvD,KAAK,CAAC,GAAG;QACd,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QAClC,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC;QAE5B,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC,CAChB,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,OAAO,EAAE,CAAC,aACpC,KAAC,IAAI,IAAC,IAAI,QAAC,SAAS,0CAEb,EAEP,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACvC,MAAC,GAAG,eACF,KAAC,IAAI,2BAAgB,EACpB,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,IAAI,IAAC,KAAK,EAAC,OAAO,EAAC,IAAI,8BAEjB,CACR,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,EAAC,IAAI,+BAElB,CACR,IACG,EAEN,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,aACf,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,6BAAoB,EACtC,KAAC,IAAI,cAAE,YAAY,EAAE,GAAQ,IACzB,IACF,EAEN,MAAC,GAAG,IAAC,SAAS,EAAE,CAAC,EAAE,aAAa,EAAC,QAAQ,aACvC,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,6DAAoD,EACtE,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,uDAA8C,EAChE,KAAC,IAAI,IAAC,KAAK,EAAC,MAAM,wDAA+C,IAC7D,IACF,CACP,CAAC;QAEF,MAAM,CAAC,KAAC,GAAG,KAAG,CAAC,CAAC;IAClB,CAAC","sourcesContent":["import { Command } from \"@oclif/core\";\nimport { Box, render, Text } from \"ink\";\nimport { getMachineId, isEnabled } from \"../../cli/telemetry.js\";\n\nexport default class TelemetryStatus extends Command {\n static override description =\n \"Get Skybridge current telemetry settings for this machine\";\n\n public async run(): Promise<void> {\n await this.parse(TelemetryStatus);\n const enabled = isEnabled();\n\n const App = () => (\n <Box flexDirection=\"column\" padding={1}>\n <Text bold underline>\n Skybridge Telemetry\n </Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Box>\n <Text>Status: </Text>\n {enabled ? (\n <Text color=\"green\" bold>\n Enabled\n </Text>\n ) : (\n <Text color=\"yellow\" bold>\n Disabled\n </Text>\n )}\n </Box>\n\n <Box marginTop={1}>\n <Text color=\"gray\">Machine ID: </Text>\n <Text>{getMachineId()}</Text>\n </Box>\n </Box>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"gray\">To opt out, run: skybridge telemetry disable</Text>\n <Text color=\"gray\">Or set: SKYBRIDGE_TELEMETRY_DISABLED=1</Text>\n <Text color=\"gray\">Debug mode: SKYBRIDGE_TELEMETRY_DEBUG=1</Text>\n </Box>\n </Box>\n );\n\n render(<App />);\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ export declare const TOOL_OUTPUT_WARNING_TOKENS = 5000;
2
+ export declare const VIEW_STATE_WARNING_TOKENS = 20000;
3
+ export declare function estimateContextTokens(value: unknown): number;
4
+ export declare function warnOnLargeToolOutput(result: unknown, toolName: string): void;
5
+ export declare function warnOnLargeViewState(value: unknown, source: string): void;
@@ -0,0 +1,31 @@
1
+ export const TOOL_OUTPUT_WARNING_TOKENS = 5_000;
2
+ export const VIEW_STATE_WARNING_TOKENS = 20_000;
3
+ export function estimateContextTokens(value) {
4
+ try {
5
+ const serialized = JSON.stringify(value);
6
+ if (!serialized) {
7
+ return 0;
8
+ }
9
+ return Math.ceil(new TextEncoder().encode(serialized).length / 4);
10
+ }
11
+ catch {
12
+ return 0;
13
+ }
14
+ }
15
+ export function warnOnLargeToolOutput(result, toolName) {
16
+ if (!result || typeof result !== "object" || Array.isArray(result)) {
17
+ return;
18
+ }
19
+ const { _meta, ...modelVisibleResult } = result;
20
+ const tokenCount = estimateContextTokens(modelVisibleResult);
21
+ if (tokenCount >= TOOL_OUTPUT_WARNING_TOKENS) {
22
+ console.warn(`[skybridge] Tool "${toolName}" returned ${tokenCount} estimated model-visible tokens; this reaches the ${TOOL_OUTPUT_WARNING_TOKENS}-token warning threshold and may overload model context. Content and structured content are included in this estimate.`);
23
+ }
24
+ }
25
+ export function warnOnLargeViewState(value, source) {
26
+ const tokenCount = estimateContextTokens(value);
27
+ if (tokenCount >= VIEW_STATE_WARNING_TOKENS) {
28
+ console.warn(`[skybridge] ${source} is persisting ${tokenCount} estimated tokens in model-visible view state; this reaches the ${VIEW_STATE_WARNING_TOKENS}-token warning threshold and may overload model context. Persisted view state and data-llm context are included in this estimate.`);
29
+ }
30
+ }
31
+ //# sourceMappingURL=context-warnings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-warnings.js","sourceRoot":"","sources":["../src/context-warnings.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,0BAA0B,GAAG,KAAK,CAAC;AAChD,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAC;AAEhD,MAAM,UAAU,qBAAqB,CAAC,KAAc;IAClD,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAe,EAAE,QAAgB;IACrE,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,OAAO;IACT,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,GAAG,kBAAkB,EAAE,GAAG,MAAiC,CAAC;IAC3E,MAAM,UAAU,GAAG,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;IAC7D,IAAI,UAAU,IAAI,0BAA0B,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CACV,qBAAqB,QAAQ,cAAc,UAAU,qDAAqD,0BAA0B,wHAAwH,CAC7P,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc,EAAE,MAAc;IACjE,MAAM,UAAU,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,UAAU,IAAI,yBAAyB,EAAE,CAAC;QAC5C,OAAO,CAAC,IAAI,CACV,eAAe,MAAM,kBAAkB,UAAU,mEAAmE,yBAAyB,mIAAmI,CACjR,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["export const TOOL_OUTPUT_WARNING_TOKENS = 5_000;\nexport const VIEW_STATE_WARNING_TOKENS = 20_000;\n\nexport function estimateContextTokens(value: unknown): number {\n try {\n const serialized = JSON.stringify(value);\n if (!serialized) {\n return 0;\n }\n return Math.ceil(new TextEncoder().encode(serialized).length / 4);\n } catch {\n return 0;\n }\n}\n\nexport function warnOnLargeToolOutput(result: unknown, toolName: string): void {\n if (!result || typeof result !== \"object\" || Array.isArray(result)) {\n return;\n }\n const { _meta, ...modelVisibleResult } = result as Record<string, unknown>;\n const tokenCount = estimateContextTokens(modelVisibleResult);\n if (tokenCount >= TOOL_OUTPUT_WARNING_TOKENS) {\n console.warn(\n `[skybridge] Tool \"${toolName}\" returned ${tokenCount} estimated model-visible tokens; this reaches the ${TOOL_OUTPUT_WARNING_TOKENS}-token warning threshold and may overload model context. Content and structured content are included in this estimate.`,\n );\n }\n}\n\nexport function warnOnLargeViewState(value: unknown, source: string): void {\n const tokenCount = estimateContextTokens(value);\n if (tokenCount >= VIEW_STATE_WARNING_TOKENS) {\n console.warn(\n `[skybridge] ${source} is persisting ${tokenCount} estimated tokens in model-visible view state; this reaches the ${VIEW_STATE_WARNING_TOKENS}-token warning threshold and may overload model context. Persisted view state and data-llm context are included in this estimate.`,\n );\n }\n}\n"]}
@@ -0,0 +1,28 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { estimateContextTokens, TOOL_OUTPUT_WARNING_TOKENS, warnOnLargeToolOutput, } from "./context-warnings.js";
3
+ describe("context warnings", () => {
4
+ it("estimates UTF-8 bytes and returns zero for no content", () => {
5
+ expect(estimateContextTokens("é")).toBe(1);
6
+ expect(estimateContextTokens(undefined)).toBe(0);
7
+ });
8
+ it("warns when model-visible tool output reaches the threshold", () => {
9
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
10
+ warnOnLargeToolOutput({
11
+ content: [
12
+ {
13
+ type: "text",
14
+ text: "x".repeat(TOOL_OUTPUT_WARNING_TOKENS * 4),
15
+ },
16
+ ],
17
+ }, "large-output");
18
+ expect(warnSpy).toHaveBeenCalledWith(expect.stringContaining('Tool "large-output" returned'));
19
+ warnSpy.mockRestore();
20
+ });
21
+ it("does not warn for large metadata", () => {
22
+ const warnSpy = vi.spyOn(console, "warn").mockImplementation(() => { });
23
+ warnOnLargeToolOutput({ content: [], _meta: { private: "x".repeat(100_000) } }, "large-meta");
24
+ expect(warnSpy).not.toHaveBeenCalled();
25
+ warnSpy.mockRestore();
26
+ });
27
+ });
28
+ //# sourceMappingURL=context-warnings.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-warnings.test.js","sourceRoot":"","sources":["../src/context-warnings.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAE/B,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEvE,qBAAqB,CACnB;YACE,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,0BAA0B,GAAG,CAAC,CAAC;iBACjD;aACF;SACF,EACD,cAAc,CACf,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,oBAAoB,CAClC,MAAM,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,CACxD,CAAC;QACF,OAAO,CAAC,WAAW,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEvE,qBAAqB,CACnB,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,EACxD,YAAY,CACb,CAAC;QAEF,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACvC,OAAO,CAAC,WAAW,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, expect, it, vi } from \"vitest\";\nimport {\n estimateContextTokens,\n TOOL_OUTPUT_WARNING_TOKENS,\n warnOnLargeToolOutput,\n} from \"./context-warnings.js\";\n\ndescribe(\"context warnings\", () => {\n it(\"estimates UTF-8 bytes and returns zero for no content\", () => {\n expect(estimateContextTokens(\"é\")).toBe(1);\n expect(estimateContextTokens(undefined)).toBe(0);\n });\n\n it(\"warns when model-visible tool output reaches the threshold\", () => {\n const warnSpy = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n\n warnOnLargeToolOutput(\n {\n content: [\n {\n type: \"text\",\n text: \"x\".repeat(TOOL_OUTPUT_WARNING_TOKENS * 4),\n },\n ],\n },\n \"large-output\",\n );\n\n expect(warnSpy).toHaveBeenCalledWith(\n expect.stringContaining('Tool \"large-output\" returned'),\n );\n warnSpy.mockRestore();\n });\n\n it(\"does not warn for large metadata\", () => {\n const warnSpy = vi.spyOn(console, \"warn\").mockImplementation(() => {});\n\n warnOnLargeToolOutput(\n { content: [], _meta: { private: \"x\".repeat(100_000) } },\n \"large-meta\",\n );\n\n expect(warnSpy).not.toHaveBeenCalled();\n warnSpy.mockRestore();\n });\n});\n"]}
@@ -0,0 +1,194 @@
1
+ import type { Implementation, Server as SdkServer, ServerOptions } from "@modelcontextprotocol/server";
2
+ import type { ErrorRequestHandler, Express, RequestHandler } from "express";
3
+ import type { OAuthConfig, OAuthProvider } from "./auth/index.js";
4
+ import type { ExtraClaims } from "./auth.js";
5
+ import { type JsonOptions, McpServer, type McpServerTypes, type ToolDef } from "./server.js";
6
+ /**
7
+ * The `handler` field of {@link SkybridgeConfig}: builds the app's MCP
8
+ * surface. Runs again for **every incoming request**, on a fresh
9
+ * {@link McpServer}, so keep it to registration: pools, clients and any other
10
+ * one-time work belong in `setup`, whose result is the second argument. It
11
+ * must **return** the chained server so `typeof app` carries the registered
12
+ * tool types.
13
+ *
14
+ * @typeParam TConfig - What `setup` resolved to, passed as the second argument.
15
+ */
16
+ export type SkybridgeHandler<TTools extends Record<string, ToolDef>, TConfig, TAuthExtra extends ExtraClaims> = (server: McpServer<Record<never, ToolDef>, TAuthExtra>, config: TConfig) => McpServer<TTools, TAuthExtra>;
17
+ /**
18
+ * What the `oauth` field accepts: an {@link OAuthConfig}, a provider
19
+ * (`oauth: auth0Provider(...)`), or a function of the `setup` result returning
20
+ * either. Providers and functions resolve once, at {@link Skybridge.run} or on
21
+ * the first request, never at module import. Anything asynchronous belongs in
22
+ * a provider's `resolve`.
23
+ */
24
+ export type SkybridgeOAuthInput<TConfig, TExtra extends ExtraClaims> = OAuthConfig<TExtra> | OAuthProvider<TExtra> | ((config: TConfig) => OAuthConfig<TExtra> | OAuthProvider<TExtra>);
25
+ /**
26
+ * Everything a Skybridge app needs in one bag: the MCP implementation info
27
+ * (`name`, `version`, …), the SDK's {@link ServerOptions} (`capabilities`,
28
+ * `instructions`, …), the Express and skills options, and the app's behavior
29
+ * (`setup`, `oauth`, `handler`).
30
+ *
31
+ * All type parameters are inferred from the value: the config from `setup`,
32
+ * the auth claims from `oauth`, and the tool registry from the server
33
+ * `handler` returns.
34
+ */
35
+ export type SkybridgeConfig<TTools extends Record<string, ToolDef> = Record<never, ToolDef>, TConfig = undefined, TAuthExtra extends ExtraClaims = ExtraClaims> = Implementation & ServerOptions & {
36
+ /** Options for the built-in `express.json()` middleware, e.g. `{ limit: "10mb" }`. */
37
+ json?: JsonOptions;
38
+ /**
39
+ * @experimental Serve Agent Skills from `src/skills` over MCP (SEP-2640).
40
+ * API may change.
41
+ */
42
+ skills?: boolean;
43
+ /**
44
+ * Loads whatever the app needs up front (remote config, secrets, datasets,
45
+ * …). Runs **once** — at {@link Skybridge.run} or on the first request,
46
+ * never at module import — and its awaited return value is passed to an
47
+ * `oauth` function and to `handler` as the second argument.
48
+ */
49
+ setup?: () => TConfig;
50
+ /**
51
+ * Resource-server OAuth. When set, mounts the well-known metadata routes
52
+ * and bearer auth on `/mcp`, and the verifier's claims type
53
+ * `extra.http.authInfo.extra` in tool handlers.
54
+ */
55
+ oauth?: SkybridgeOAuthInput<Awaited<TConfig>, TAuthExtra>;
56
+ /** Registers the MCP surface, per request. See {@link SkybridgeHandler}. */
57
+ handler: SkybridgeHandler<TTools, Awaited<TConfig>, TAuthExtra>;
58
+ };
59
+ /**
60
+ * A Skybridge app: the HTTP surface (Express, OAuth metadata, the `/mcp`
61
+ * route) plus a handler that builds the MCP server for each request.
62
+ *
63
+ * The handler runs for every request, so tools, resources, prompts and views
64
+ * are always registered on the instance that serves the request. Anything in
65
+ * the handler body other than registration therefore runs per request too.
66
+ * Anything asynchronous the app needs (remote config, secrets, …) goes in
67
+ * `setup`, which runs once and feeds the handler's second argument.
68
+ *
69
+ * @example
70
+ * ```ts
71
+ * export const app = new Skybridge({
72
+ * name: "my-app",
73
+ * version: "1.0.0",
74
+ * setup: async () => loadConfig(),
75
+ * oauth: (config) => descopeProvider({ url: config.mcpServerUrl }),
76
+ * handler: (server, config) =>
77
+ * server.registerTool(
78
+ * {
79
+ * name: "search",
80
+ * inputSchema: { query: z.string() },
81
+ * view: { component: "search" },
82
+ * },
83
+ * async ({ query }) => ({ content: `Results for ${query}` }),
84
+ * ),
85
+ * });
86
+ *
87
+ * export type AppType = typeof app;
88
+ * ```
89
+ *
90
+ * @see https://docs.skybridge.tech/api-reference/mcp-server
91
+ */
92
+ export declare class Skybridge<TTools extends Record<string, ToolDef> = Record<never, ToolDef>, TConfig = undefined, TAuthExtra extends ExtraClaims = ExtraClaims> {
93
+ readonly $types: McpServerTypes<TTools>;
94
+ private readonly serverInfo;
95
+ private readonly serverOptions;
96
+ private readonly skills?;
97
+ private oauthEnabled;
98
+ private readonly handler;
99
+ private readonly setup?;
100
+ private readonly oauthInput?;
101
+ private config?;
102
+ private readonly expressApp;
103
+ private readonly errorMiddleware;
104
+ private readonly monitoringEntry;
105
+ private resolveResourceMetadataUrl?;
106
+ private readyPromise?;
107
+ private slowHandlerWarned;
108
+ constructor({ name, title, version, description, icons, websiteUrl, json, skills, setup, oauth, handler, ...serverOptions }: SkybridgeConfig<TTools, TConfig, TAuthExtra>);
109
+ /**
110
+ * Resolve `setup` and `oauth`, then wire OAuth onto the Express app. Runs
111
+ * once; every entry point that needs a built server awaits it, and a failed
112
+ * attempt is retried on the next call.
113
+ *
114
+ * @internal
115
+ */
116
+ ready(): Promise<void>;
117
+ /**
118
+ * The underlying Express app. Use this to extend the HTTP server with
119
+ * custom routes, middleware, or settings — e.g.
120
+ * `app.express.get("/health", ...)`.
121
+ *
122
+ * `express.json()` is pre-applied — tune it via the `json` config field,
123
+ * e.g. `new Skybridge({ name, version, json: { limit: "10mb" }, handler })`.
124
+ * Register your handlers before `run()`; after `run()`, dev-mode middleware,
125
+ * the `/mcp` route, and the default error handler are appended in that order.
126
+ *
127
+ * Note: Alpic Cloud only routes traffic to `/mcp` — custom routes work
128
+ * locally and on self-hosted deployments.
129
+ */
130
+ get express(): Express;
131
+ /**
132
+ * Build a fresh server for one stateless HTTP request, as
133
+ * `createMcpHandler`'s factory contract requires: the handler runs again so
134
+ * the SDK's handler closures belong to the instance whose protocol era it
135
+ * stamps. Sharing one instance's handler maps instead would bind them to an
136
+ * instance that is never marked, pinning every request to the 2025 codec and
137
+ * letting concurrent callers overwrite each other's negotiated version.
138
+ *
139
+ * Awaits `setup` and the `oauth` input on first use.
140
+ */
141
+ createServerInstance(): Promise<SdkServer>;
142
+ /**
143
+ * Connect a Skybridge app to an MCP transport. Use this when you're
144
+ * embedding Skybridge in a host that already manages its own transport
145
+ * (e.g. stdio for desktop apps); for HTTP, prefer {@link Skybridge.run}
146
+ * which sets the transport up for you.
147
+ */
148
+ connect(transport: Parameters<SdkServer["connect"]>[0]): Promise<void>;
149
+ /**
150
+ * Register Express middleware on the underlying app. Mirrors `app.use` —
151
+ * pass handlers directly or a path-prefixed handler list. Register before
152
+ * {@link Skybridge.run}; ordering matches Express.
153
+ *
154
+ * Note: Alpic Cloud only routes traffic to `/mcp`. Custom paths work
155
+ * locally and on self-hosted deployments.
156
+ */
157
+ use(...handlers: RequestHandler[]): this;
158
+ use(path: string, ...handlers: RequestHandler[]): this;
159
+ /**
160
+ * Register Express error-handling middleware to run after the built-in
161
+ * `/mcp` route (or your custom route). Use this to log or transform errors
162
+ * thrown by tool handlers before the default error handler responds.
163
+ *
164
+ * @example
165
+ * ```ts
166
+ * app.useOnError((err, _req, _res, next) => {
167
+ * logger.error(err);
168
+ * next(err);
169
+ * });
170
+ * ```
171
+ */
172
+ useOnError(...handlers: ErrorRequestHandler[]): this;
173
+ useOnError(path: string, ...handlers: ErrorRequestHandler[]): this;
174
+ /**
175
+ * Start the HTTP server. Listens on `process.env.__PORT` (default `3000`),
176
+ * mounts the `/mcp` route, and applies any custom Express middleware
177
+ * registered via {@link Skybridge.use} / {@link Skybridge.useOnError}.
178
+ *
179
+ * On Cloudflare Workers / workerd, returns an object exposing `fetch` so
180
+ * the runtime can bridge incoming requests to the Node HTTP server. On
181
+ * Vercel (`VERCEL === "1"`), returns the Express app directly so the
182
+ * serverless function entry can call it as a `(req, res)` handler. On
183
+ * Node, returns `undefined` once listening. When the process was spawned
184
+ * with an IPC channel, the bound port is reported to the parent as
185
+ * `{ type: "skybridge:listening", port }`, the readiness signal test runners
186
+ * wait on instead of polling.
187
+ */
188
+ run(): Promise<{
189
+ fetch: (...args: unknown[]) => unknown;
190
+ } | Express | undefined>;
191
+ private buildServer;
192
+ private middlewareEntries;
193
+ private instrumentHandlers;
194
+ }