akanjs 3.0.2 → 3.1.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (378) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/base/baseEnv.ts +0 -4
  3. package/base/primitiveRegistry.ts +2 -2
  4. package/client/cookie.ts +5 -1
  5. package/client/csrLocation.ts +122 -0
  6. package/client/csrTypes.ts +32 -4
  7. package/client/device.ts +2 -1
  8. package/client/frameConfig.ts +78 -7
  9. package/client/index.ts +3 -0
  10. package/client/makePageProto.tsx +3 -2
  11. package/client/native/external-view.ts +1 -0
  12. package/client/route/RootLayoutDefinition.ts +7 -1
  13. package/client/route/RouteHead.ts +108 -0
  14. package/client/route/index.ts +1 -0
  15. package/client/router.ts +36 -23
  16. package/client/rscNavigation.ts +8 -2
  17. package/client/viewportMeta.ts +60 -0
  18. package/client/webManifest.ts +18 -0
  19. package/common/Logger.ts +7 -2
  20. package/common/PipelineNames.ts +31 -0
  21. package/common/PipelinePattern.ts +70 -0
  22. package/common/PipelinePlanSchema.ts +490 -0
  23. package/common/backoff.ts +14 -0
  24. package/common/index.ts +39 -0
  25. package/common/pipelinePlan.ts +259 -0
  26. package/common/routeConvention.ts +1 -0
  27. package/common/types.ts +17 -0
  28. package/constant/constantRegistry.ts +26 -6
  29. package/dictionary/base.dictionary.ts +8 -0
  30. package/dictionary/trans.ts +9 -1
  31. package/document/into.ts +5 -0
  32. package/fetch/client/fetchClient.ts +135 -31
  33. package/fetch/client/httpClient.ts +45 -0
  34. package/fetch/client/wsClient.ts +125 -16
  35. package/fetch/fetchType/buildFetch.type.ts +1 -0
  36. package/index.ts +243 -10
  37. package/package.json +1 -5
  38. package/server/akanApp.ts +5 -2
  39. package/server/akanServer.ts +44 -8
  40. package/server/artifact/builderRpc.ts +8 -3
  41. package/server/artifact/ipcTypes.ts +5 -2
  42. package/server/di/diLifecycle.ts +39 -3
  43. package/server/di/utils.ts +28 -1
  44. package/server/ed25519Key.ts +48 -0
  45. package/server/index.ts +1 -0
  46. package/server/machine/index.ts +2 -0
  47. package/server/machine/machineAccount.ts +27 -0
  48. package/server/machine/machineToken.ts +151 -0
  49. package/server/mcp/McpApps.ts +256 -0
  50. package/server/mcp/McpDispatcher.ts +31 -7
  51. package/server/mcp/McpRouter.ts +209 -46
  52. package/server/ops/opsToken.ts +3 -10
  53. package/server/resolver/database.resolver.ts +3 -0
  54. package/server/resolver/signal.resolver.ts +40 -3
  55. package/server/routeElementComposer.tsx +78 -2
  56. package/server/routeState.ts +6 -0
  57. package/server/routeTreeBuilder.ts +26 -9
  58. package/server/routing/apiRouter.ts +6 -3
  59. package/server/routing/roomReplay.ts +88 -0
  60. package/server/rscClient.tsx +53 -8
  61. package/server/rscWorker.tsx +141 -27
  62. package/server/rscWorkerHost.ts +18 -5
  63. package/server/sitemap.ts +14 -0
  64. package/server/ssrFromRscRenderer.tsx +12 -6
  65. package/server/ssrTypes.ts +3 -1
  66. package/server/systemPageDocument.tsx +38 -30
  67. package/server/types.tsx +2 -0
  68. package/server/webRouter.ts +74 -5
  69. package/service/injectInfo.ts +9 -1
  70. package/service/ipcTypes.ts +2 -1
  71. package/service/predefinedAdaptor/database.adaptor.ts +1 -146
  72. package/service/predefinedAdaptor/queue.adaptor.ts +44 -6
  73. package/service/predefinedAdaptor/queueBackoff.ts +12 -0
  74. package/service/predefinedAdaptor/solidQueue.adaptor.ts +17 -13
  75. package/service/predefinedAdaptor/sql/SqlDocumentStore.ts +44 -2
  76. package/service/predefinedAdaptor/sql/dialect/postgres.ts +3 -0
  77. package/service/predefinedAdaptor/sql/dialect/sqlite.ts +5 -2
  78. package/service/predefinedAdaptor/sql/search/fts5.ts +1 -1
  79. package/service/predefinedAdaptor/sql/types.ts +8 -6
  80. package/service/predefinedAdaptor/sql/values.ts +0 -23
  81. package/service/serve.ts +5 -1
  82. package/signal/agent.signal.ts +1 -1
  83. package/signal/base.signal.ts +2 -2
  84. package/signal/endpointIdempotency.ts +53 -0
  85. package/signal/internalArg.ts +14 -0
  86. package/signal/mcp/McpDocument.ts +38 -1
  87. package/signal/mcp/mcpProtocol.ts +18 -0
  88. package/signal/signalContext.ts +58 -30
  89. package/signal/signalRegistry.ts +14 -4
  90. package/signal/types.ts +18 -3
  91. package/store/agent/StoreSurfaceSource.ts +1 -1
  92. package/store/agentic/StToolBuilder.ts +3 -0
  93. package/test/conformance.ts +9 -33
  94. package/types/base/baseEnv.d.ts +0 -4
  95. package/types/base/primitiveRegistry.d.ts +1 -1
  96. package/types/client/csrLocation.d.ts +32 -0
  97. package/types/client/csrTypes.d.ts +40 -4
  98. package/types/client/frameConfig.d.ts +14 -2
  99. package/types/client/index.d.ts +3 -0
  100. package/types/client/native/external-view.d.ts +1 -0
  101. package/types/client/route/RootLayoutDefinition.d.ts +2 -1
  102. package/types/client/route/RouteHead.d.ts +13 -0
  103. package/types/client/route/index.d.ts +1 -0
  104. package/types/client/router.d.ts +6 -0
  105. package/types/client/rscNavigation.d.ts +4 -0
  106. package/types/client/viewportMeta.d.ts +18 -0
  107. package/types/client/webManifest.d.ts +4 -0
  108. package/types/common/PipelineNames.d.ts +6 -0
  109. package/types/common/PipelinePattern.d.ts +14 -0
  110. package/types/common/PipelinePlanSchema.d.ts +9 -0
  111. package/types/common/backoff.d.ts +10 -0
  112. package/types/common/index.d.ts +5 -0
  113. package/types/common/pipelinePlan.d.ts +224 -0
  114. package/types/common/types.d.ts +16 -0
  115. package/types/constant/constantRegistry.d.ts +5 -2
  116. package/types/dictionary/base.dictionary.d.ts +1 -1
  117. package/types/dictionary/dictionary.d.ts +8 -8
  118. package/types/document/into.d.ts +9 -0
  119. package/types/fetch/client/fetchClient.d.ts +31 -4
  120. package/types/fetch/client/httpClient.d.ts +8 -0
  121. package/types/fetch/client/wsClient.d.ts +26 -2
  122. package/types/fetch/fetchType/buildFetch.type.d.ts +1 -0
  123. package/types/index.d.ts +230 -9
  124. package/types/server/akanServer.d.ts +16 -1
  125. package/types/server/artifact/builderRpc.d.ts +7 -2
  126. package/types/server/artifact/ipcTypes.d.ts +5 -1
  127. package/types/server/di/utils.d.ts +1 -0
  128. package/types/server/ed25519Key.d.ts +13 -0
  129. package/types/server/index.d.ts +1 -0
  130. package/types/server/machine/index.d.ts +2 -0
  131. package/types/server/machine/machineAccount.d.ts +5 -0
  132. package/types/server/machine/machineToken.d.ts +29 -0
  133. package/types/server/machine.d.ts +1 -0
  134. package/types/server/mcp/McpApps.d.ts +50 -0
  135. package/types/server/mcp/McpDispatcher.d.ts +4 -1
  136. package/types/server/mcp/McpRouter.d.ts +4 -0
  137. package/types/server/resolver/signal.resolver.d.ts +2 -1
  138. package/types/server/routeElementComposer.d.ts +24 -4
  139. package/types/server/routeState.d.ts +4 -1
  140. package/types/server/routing/roomReplay.d.ts +24 -0
  141. package/types/server/rscWorkerHost.d.ts +5 -2
  142. package/types/server/sitemap.d.ts +2 -0
  143. package/types/server/ssrFromRscRenderer.d.ts +3 -3
  144. package/types/server/ssrTypes.d.ts +4 -1
  145. package/types/server/systemPageDocument.d.ts +2 -0
  146. package/types/server/types.d.ts +4 -1
  147. package/types/server/webRouter.d.ts +3 -1
  148. package/types/service/ipcTypes.d.ts +2 -0
  149. package/types/service/predefinedAdaptor/database.adaptor.d.ts +1 -24
  150. package/types/service/predefinedAdaptor/queue.adaptor.d.ts +10 -3
  151. package/types/service/predefinedAdaptor/queueBackoff.d.ts +4 -0
  152. package/types/service/predefinedAdaptor/solidQueue.adaptor.d.ts +3 -3
  153. package/types/service/predefinedAdaptor/sql/SqlDocumentStore.d.ts +6 -1
  154. package/types/service/predefinedAdaptor/sql/dialect/postgres.d.ts +1 -0
  155. package/types/service/predefinedAdaptor/sql/dialect/sqlite.d.ts +1 -0
  156. package/types/service/predefinedAdaptor/sql/search/fts5.d.ts +1 -1
  157. package/types/service/predefinedAdaptor/sql/types.d.ts +9 -5
  158. package/types/service/predefinedAdaptor/sql/values.d.ts +0 -3
  159. package/types/service/serve.d.ts +3 -0
  160. package/types/signal/endpointIdempotency.d.ts +7 -0
  161. package/types/signal/internalArg.d.ts +10 -0
  162. package/types/signal/mcp/McpDocument.d.ts +8 -0
  163. package/types/signal/mcp/mcpProtocol.d.ts +17 -0
  164. package/types/signal/signalContext.d.ts +5 -3
  165. package/types/signal/signalRegistry.d.ts +4 -4
  166. package/types/signal/types.d.ts +21 -1
  167. package/types/store/agentic/StToolBuilder.d.ts +2 -0
  168. package/types/test/conformance.d.ts +7 -10
  169. package/types/ui/Agent/Chat.d.ts +5 -1
  170. package/types/ui/Agent/EmbedApproval.d.ts +1 -0
  171. package/types/ui/Agent/index.d.ts +3 -0
  172. package/types/ui/Agent/useKeyboardFrame.d.ts +2 -0
  173. package/types/ui/Agent/useScreenActions.d.ts +18 -0
  174. package/types/ui/BottomSheet.d.ts +1 -0
  175. package/types/ui/Constant/Doc.d.ts +11 -17
  176. package/types/ui/Constant/index.d.ts +7 -2
  177. package/types/ui/Constant/schemaDoc.d.ts +11 -0
  178. package/types/ui/Dialog/Modal.d.ts +6 -1
  179. package/types/ui/Dialog/index.d.ts +1 -1
  180. package/types/ui/Dialog/modalSurface.d.ts +12 -0
  181. package/types/ui/Layout/BottomTab.d.ts +11 -2
  182. package/types/ui/Layout/FrameSlotFallback.d.ts +9 -0
  183. package/types/ui/Layout/Navbar.d.ts +4 -1
  184. package/types/ui/Layout/TopInset.d.ts +1 -1
  185. package/types/ui/Layout/index.d.ts +3 -3
  186. package/types/ui/Link/Action.d.ts +5 -1
  187. package/types/ui/Link/Anchor.d.ts +5 -3
  188. package/types/ui/Link/activePath.d.ts +13 -0
  189. package/types/ui/Link/index.d.ts +1 -1
  190. package/types/ui/Modal.d.ts +6 -1
  191. package/types/ui/Model/EditModal.d.ts +6 -1
  192. package/types/ui/Model/New.d.ts +6 -1
  193. package/types/ui/Model/ViewEditModal.d.ts +6 -1
  194. package/types/ui/Model/ViewModal.d.ts +6 -1
  195. package/types/ui/Model/newFormOrigin.d.ts +7 -0
  196. package/types/ui/Portal.d.ts +3 -1
  197. package/types/ui/Reference/origin.d.ts +12 -0
  198. package/types/ui/Signal/Doc.d.ts +23 -18
  199. package/types/ui/Signal/Listener.d.ts +2 -6
  200. package/types/ui/Signal/Object.d.ts +6 -10
  201. package/types/ui/Signal/Response.d.ts +3 -6
  202. package/types/ui/Signal/RestApi.d.ts +11 -15
  203. package/types/ui/Signal/WebSocket.d.ts +11 -21
  204. package/types/ui/Signal/endpointEntries.d.ts +8 -0
  205. package/types/ui/Signal/index.d.ts +35 -12
  206. package/types/ui/Signal/signalText.d.ts +178 -0
  207. package/types/ui/System/CSR.d.ts +2 -2
  208. package/types/ui/System/Client.d.ts +4 -3
  209. package/types/ui/System/Common.d.ts +27 -6
  210. package/types/ui/System/SSR.d.ts +6 -6
  211. package/types/ui/Tooltip.d.ts +4 -2
  212. package/types/ui/index.d.ts +2 -1
  213. package/types/ui/overlayLayer.d.ts +6 -0
  214. package/types/ui/overlayPosition.d.ts +17 -0
  215. package/types/vendor/@akanjs/native/packages/cli/src/api.d.ts +14 -3
  216. package/types/vendor/@akanjs/native/packages/cli/src/commands/update.d.ts +1 -1
  217. package/types/vendor/@akanjs/native/packages/cli/src/config.d.ts +30 -5
  218. package/types/vendor/@akanjs/native/packages/cli/src/lib/compat.d.ts +8 -0
  219. package/types/vendor/@akanjs/native/packages/cli/src/lib/desktop-server.d.ts +5 -0
  220. package/types/vendor/@akanjs/native/packages/cli/src/lib/distribution.d.ts +22 -0
  221. package/types/vendor/@akanjs/native/packages/cli/src/lib/project.d.ts +4 -0
  222. package/types/vendor/@akanjs/native/packages/cli/src/lib/publish.d.ts +16 -10
  223. package/types/vendor/@akanjs/native/packages/cli/src/lib/updates.d.ts +51 -7
  224. package/types/vendor/@akanjs/native/packages/cli/src/lib/vectors.d.ts +1 -1
  225. package/types/vendor/@akanjs/native/packages/cli/src/platforms/windows-installer.d.ts +7 -0
  226. package/types/vendor/@akanjs/native/packages/cli/src/platforms/windows.d.ts +5 -0
  227. package/types/vendor/@akanjs/native/packages/core/src/kernel.d.ts +36 -0
  228. package/types/vendor/@akanjs/native/packages/desktop/src/plugin.d.ts +2 -0
  229. package/types/vendor/@akanjs/native/packages/desktop/src/server.d.ts +11 -0
  230. package/types/vendor/@akanjs/native/plugins/external-view/src/desktop.d.ts +17 -0
  231. package/types/vendor/@akanjs/native/plugins/external-view/src/index.d.ts +132 -0
  232. package/types/vendor/@akanjs/native/plugins/external-view/src.d.ts +1 -0
  233. package/types/vendor/@akanjs/native/plugins/updates/src/index.d.ts +8 -0
  234. package/types/vendor/@akanjs/native/plugins/window/src/desktop.d.ts +4 -1
  235. package/types/vendor/@akanjs/native/plugins/window/src/index.d.ts +49 -0
  236. package/types/vendor/use-agentic/types.d.ts +2 -0
  237. package/types/webkit/CsrStack.d.ts +1 -1
  238. package/types/webkit/McpAppAgent.d.ts +14 -0
  239. package/types/webkit/McpAppApprovals.d.ts +8 -0
  240. package/types/webkit/McpAppBridge.d.ts +101 -0
  241. package/types/webkit/McpAppView.d.ts +21 -0
  242. package/types/webkit/index.d.ts +1 -0
  243. package/types/webkit/useLocation.d.ts +1 -1
  244. package/types/webkit/useVisualViewportFrame.d.ts +13 -0
  245. package/ui/Agent/Chat.tsx +29 -10
  246. package/ui/Agent/Composer.tsx +2 -1
  247. package/ui/Agent/EmbedApproval.tsx +17 -0
  248. package/ui/Agent/RichInput.tsx +1 -1
  249. package/ui/Agent/index.ts +2 -0
  250. package/ui/Agent/useKeyboardFrame.ts +10 -0
  251. package/ui/Agent/useScreenActions.ts +45 -0
  252. package/ui/BottomSheet.tsx +82 -53
  253. package/ui/Constant/Doc.tsx +113 -60
  254. package/ui/Constant/index.ts +2 -2
  255. package/ui/Constant/schemaDoc.ts +86 -26
  256. package/ui/Dialog/LegacyModal.tsx +53 -52
  257. package/ui/Dialog/Modal.tsx +93 -49
  258. package/ui/Dialog/modalSurface.ts +61 -0
  259. package/ui/DragAction.tsx +1 -1
  260. package/ui/DraggableList.tsx +1 -1
  261. package/ui/Dropdown.tsx +4 -6
  262. package/ui/KeyboardAvoiding.tsx +1 -1
  263. package/ui/Layout/BottomInset.tsx +20 -14
  264. package/ui/Layout/BottomTab.tsx +42 -16
  265. package/ui/Layout/FrameSlotFallback.tsx +59 -0
  266. package/ui/Layout/Navbar.tsx +37 -11
  267. package/ui/Layout/Sider.tsx +1 -1
  268. package/ui/Layout/TopInset.tsx +15 -14
  269. package/ui/Link/Action.tsx +15 -5
  270. package/ui/Link/Anchor.tsx +25 -13
  271. package/ui/Link/activePath.ts +25 -0
  272. package/ui/Link/index.tsx +1 -1
  273. package/ui/Load/Pagination.tsx +1 -1
  274. package/ui/Load/Units.tsx +1 -1
  275. package/ui/Loading/ProgressBar.tsx +1 -1
  276. package/ui/Modal.tsx +9 -0
  277. package/ui/Model/EditModal.tsx +16 -1
  278. package/ui/Model/New.tsx +25 -2
  279. package/ui/Model/NewWrapper_Client.tsx +2 -0
  280. package/ui/Model/ViewEditModal.tsx +9 -0
  281. package/ui/Model/ViewModal.tsx +16 -1
  282. package/ui/Model/newFormOrigin.ts +45 -0
  283. package/ui/Popconfirm.tsx +5 -7
  284. package/ui/Portal.tsx +4 -7
  285. package/ui/Reference/origin.ts +31 -0
  286. package/ui/ScreenNavigator.tsx +1 -1
  287. package/ui/Select.tsx +2 -7
  288. package/ui/Signal/Arg.tsx +2 -2
  289. package/ui/Signal/Doc.tsx +125 -63
  290. package/ui/Signal/Endpoint.tsx +11 -10
  291. package/ui/Signal/Listener.tsx +7 -10
  292. package/ui/Signal/Object.tsx +7 -14
  293. package/ui/Signal/Response.tsx +24 -24
  294. package/ui/Signal/RestApi.tsx +63 -52
  295. package/ui/Signal/WebSocket.tsx +65 -72
  296. package/ui/Signal/endpointEntries.ts +25 -0
  297. package/ui/Signal/index.ts +23 -6
  298. package/ui/Signal/signalText.ts +59 -0
  299. package/ui/System/CSR.tsx +34 -8
  300. package/ui/System/Client.tsx +36 -5
  301. package/ui/System/Common.tsx +76 -32
  302. package/ui/System/SSR.tsx +73 -31
  303. package/ui/Toast.tsx +1 -1
  304. package/ui/Tooltip.tsx +84 -30
  305. package/ui/index.ts +11 -1
  306. package/ui/overlayLayer.ts +25 -2
  307. package/ui/overlayPosition.ts +90 -0
  308. package/ui/recipe/inputRecipe.ts +8 -1
  309. package/ui/styles.css +152 -0
  310. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeActivity.kt +22 -2
  311. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeKernel.kt +37 -0
  312. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeUpdateReports.kt +169 -0
  313. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeUpdates.kt +110 -38
  314. package/vendor/@akanjs/native/native/android/src/com/akanjs/runtime/AkanNativeVectors.kt +20 -0
  315. package/vendor/@akanjs/native/native/desktop/Cargo.lock +16 -16
  316. package/vendor/@akanjs/native/native/desktop/src/external.rs +651 -0
  317. package/vendor/@akanjs/native/native/desktop/src/json.rs +23 -0
  318. package/vendor/@akanjs/native/native/desktop/src/lib.rs +228 -5
  319. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeApp.swift +2 -1
  320. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeKernel.swift +47 -1
  321. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeUpdateReports.swift +145 -0
  322. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeUpdates.swift +112 -43
  323. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeVectors.swift +18 -0
  324. package/vendor/@akanjs/native/native/ios/Sources/AkanNativeViewController.swift +24 -2
  325. package/vendor/@akanjs/native/packages/cli/src/api.ts +22 -6
  326. package/vendor/@akanjs/native/packages/cli/src/commands/build.ts +24 -8
  327. package/vendor/@akanjs/native/packages/cli/src/commands/update.ts +11 -9
  328. package/vendor/@akanjs/native/packages/cli/src/config.ts +35 -7
  329. package/vendor/@akanjs/native/packages/cli/src/lib/compat.ts +2 -0
  330. package/vendor/@akanjs/native/packages/cli/src/lib/configkeys.ts +6 -4
  331. package/vendor/@akanjs/native/packages/cli/src/lib/desktop-server.ts +11 -1
  332. package/vendor/@akanjs/native/packages/cli/src/lib/distribution.ts +73 -0
  333. package/vendor/@akanjs/native/packages/cli/src/lib/project.ts +15 -3
  334. package/vendor/@akanjs/native/packages/cli/src/lib/publish.ts +70 -23
  335. package/vendor/@akanjs/native/packages/cli/src/lib/updates.ts +159 -23
  336. package/vendor/@akanjs/native/packages/cli/src/lib/vectors.ts +2 -0
  337. package/vendor/@akanjs/native/packages/cli/src/platforms/android.ts +9 -4
  338. package/vendor/@akanjs/native/packages/cli/src/platforms/desktop-update.ts +1 -1
  339. package/vendor/@akanjs/native/packages/cli/src/platforms/desktop.ts +4 -2
  340. package/vendor/@akanjs/native/packages/cli/src/platforms/ios.ts +9 -4
  341. package/vendor/@akanjs/native/packages/cli/src/platforms/windows-installer.ts +25 -11
  342. package/vendor/@akanjs/native/packages/cli/src/platforms/windows.ts +14 -3
  343. package/vendor/@akanjs/native/packages/core/src/kernel.ts +49 -0
  344. package/vendor/@akanjs/native/packages/core/vectors/updates.json +31 -0
  345. package/vendor/@akanjs/native/packages/desktop/src/main.ts +3 -0
  346. package/vendor/@akanjs/native/packages/desktop/src/plugin.ts +2 -0
  347. package/vendor/@akanjs/native/packages/desktop/src/server.ts +70 -6
  348. package/vendor/@akanjs/native/plugins/external-view/native-plugin.json +23 -0
  349. package/vendor/@akanjs/native/plugins/external-view/src/desktop.ts +321 -0
  350. package/vendor/@akanjs/native/plugins/external-view/src/index.ts +106 -0
  351. package/vendor/@akanjs/native/plugins/updates/android/UpdatesPlugin.kt +133 -41
  352. package/vendor/@akanjs/native/plugins/updates/ios/UpdatesPlugin.swift +101 -36
  353. package/vendor/@akanjs/native/plugins/updates/native-plugin.json +4 -2
  354. package/vendor/@akanjs/native/plugins/updates/src/desktop.ts +15 -1
  355. package/vendor/@akanjs/native/plugins/updates/src/index.ts +7 -1
  356. package/vendor/@akanjs/native/plugins/window/native-plugin.json +4 -0
  357. package/vendor/@akanjs/native/plugins/window/src/desktop.ts +68 -1
  358. package/vendor/@akanjs/native/plugins/window/src/index.ts +47 -0
  359. package/vendor/use-agentic/ToolRunner.ts +8 -1
  360. package/vendor/use-agentic/types.ts +2 -0
  361. package/webkit/CsrRouteTable.ts +1 -0
  362. package/webkit/CsrStack.ts +9 -2
  363. package/webkit/McpAppAgent.ts +138 -0
  364. package/webkit/McpAppApprovals.ts +56 -0
  365. package/webkit/McpAppBridge.ts +291 -0
  366. package/webkit/McpAppView.ts +258 -0
  367. package/webkit/bootCsr.tsx +54 -5
  368. package/webkit/index.ts +1 -0
  369. package/webkit/useCsrValues.ts +16 -10
  370. package/webkit/useFrameRuntime.ts +10 -1
  371. package/webkit/useLocation.ts +4 -3
  372. package/webkit/useVisualViewportFrame.tsx +52 -0
  373. package/service/predefinedAdaptor/sql/driver/libsql.ts +0 -45
  374. package/types/service/predefinedAdaptor/sql/driver/libsql.d.ts +0 -20
  375. package/types/ui/Agent/useKeyboardInset.d.ts +0 -1
  376. package/types/ui/ServerPortal.d.ts +0 -15
  377. package/ui/Agent/useKeyboardInset.ts +0 -19
  378. package/ui/ServerPortal.tsx +0 -49
@@ -1,6 +1,13 @@
1
1
  import type { Head, LayoutFallbackRoute, PathRoute, ResolvedHead, RouteRender } from "akanjs/client";
2
2
  import { type ReactElement, type ReactNode } from "react";
3
3
  import { type AkanRouteSegmentState } from "./routeState.d.ts";
4
+ /** How a render reached after the layouts streamed answers `router.notFound()` — in place, since its parents are out. */
5
+ export interface RouteNotFoundInPlace {
6
+ pathname: string;
7
+ /** Rendered when no layout above the thrower declares `.notFound()`. */
8
+ systemFallback: () => ReactNode;
9
+ onNotFound: () => void;
10
+ }
4
11
  export declare class RouteElementComposer {
5
12
  #private;
6
13
  static resolveSsrFramePathRoute({ pathRoute, basePath, }: {
@@ -11,18 +18,25 @@ export declare class RouteElementComposer {
11
18
  route: PathRoute | LayoutFallbackRoute;
12
19
  basePath?: string | null;
13
20
  }): Promise<import("akanjs/client").PageState>;
14
- static compose({ pathRoute, params, searchParams, navKey, }: {
21
+ static compose({ pathRoute, params, searchParams, navKey, notFound, }: {
15
22
  pathRoute: PathRoute;
16
23
  params: Record<string, string>;
17
24
  searchParams: Record<string, string | string[]>;
18
25
  navKey?: string;
26
+ notFound?: RouteNotFoundInPlace;
19
27
  }): ReactNode;
20
- static composeSuffix({ pathRoute, params, searchParams, patchStartIndex, navKey, }: {
28
+ static checkArgs({ pathRoute, params, searchParams, }: {
29
+ pathRoute: PathRoute;
30
+ params: Record<string, string>;
31
+ searchParams: Record<string, string | string[]>;
32
+ }): Promise<void>;
33
+ static composeSuffix({ pathRoute, params, searchParams, patchStartIndex, navKey, notFound, }: {
21
34
  pathRoute: PathRoute;
22
35
  params: Record<string, string>;
23
36
  searchParams: Record<string, string | string[]>;
24
37
  patchStartIndex: number;
25
38
  navKey?: string;
39
+ notFound?: RouteNotFoundInPlace;
26
40
  }): ReactNode | null;
27
41
  static resolveSuffixLoadings(pathRoute: PathRoute, patchStartIndex: number): Promise<void>;
28
42
  static resolveHead({ pathRoute, params, searchParams, }: {
@@ -44,17 +58,23 @@ export declare class RouteElementComposer {
44
58
  error?: unknown;
45
59
  digest?: string;
46
60
  }): Promise<ReactNode | null>;
47
- static composeRenders({ renders, segments, params, searchParams, navKey, }: {
61
+ static composeRenders({ renders, owners, segments, params, searchParams, navKey, notFound, }: {
48
62
  renders: RouteRender[];
63
+ /** Layouts above `renders` that this element leaves out (a patch) but whose `.notFound()` still applies. */
64
+ owners?: RouteRender[];
49
65
  segments?: AkanRouteSegmentState[];
50
66
  params: Record<string, string>;
51
67
  searchParams: Record<string, string | string[]>;
52
68
  navKey?: string;
69
+ notFound?: RouteNotFoundInPlace;
53
70
  }): ReactNode;
54
- static AsyncRender: ({ routeRender, children, params, searchParams, }: {
71
+ static AsyncRender: ({ routeRender, children, params, searchParams, notFound, }: {
55
72
  routeRender: RouteRender;
56
73
  children: ReactNode;
57
74
  params: Record<string, string>;
58
75
  searchParams: Record<string, string | string[]>;
76
+ notFound?: RouteNotFoundInPlace & {
77
+ owners: RouteRender[];
78
+ };
59
79
  }) => Promise<ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | (string | number | bigint | boolean | import("react").ReactPortal | ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined)>;
60
80
  }
@@ -23,6 +23,8 @@ export interface AkanRouterStateV1 {
23
23
  href: string;
24
24
  routeId: string;
25
25
  segments: AkanRouteSegmentState[];
26
+ /** The route's `.config({ transition })`, which the browser plays as a view transition on the way in and out. */
27
+ transition?: string;
26
28
  }
27
29
  export type AkanHeadSnapshotTag = "title" | "meta" | "link";
28
30
  export interface AkanHeadSnapshotNode {
@@ -68,10 +70,11 @@ export declare function readAkanRouterStateResponseHeader(headers: Headers): Aka
68
70
  export declare function encodeAkanRscPatchSegmentPath(segmentPath: string[]): string;
69
71
  export declare function decodeAkanRscPatchSegmentPath(value: string | null | undefined): string[] | null;
70
72
  export declare function readAkanRscPatchMetadataResponseHeaders(headers: Headers): AkanRscPatchMetadata | null;
71
- export declare function createAkanRouterState({ pathRoute, href, buildId, }: {
73
+ export declare function createAkanRouterState({ pathRoute, href, buildId, transition, }: {
72
74
  pathRoute: PathRoute;
73
75
  href: string;
74
76
  buildId?: number;
77
+ transition?: string;
75
78
  }): AkanRouterStateV1;
76
79
  export declare function createAkanRouteSegments(pathRoute: PathRoute): AkanRouteSegmentState[];
77
80
  export declare function createAkanSegmentOutletKey(segmentPath: string[], segmentIndex: number): string | null;
@@ -0,0 +1,24 @@
1
+ import type { WebsocketPublishData, WebsocketRoomCursor } from "akanjs/signal";
2
+ export interface RoomReplayOptions {
3
+ /** Whether this process sees every publish to a room, so a run of sequence numbers it holds has no hole. */
4
+ vouches: boolean;
5
+ /** Frames kept per room. */
6
+ depth?: number;
7
+ /** How long a room nobody subscribes to here keeps numbering and keeping its frames. */
8
+ retainMs?: number;
9
+ /** Rooms tracked at once; the least recently watched goes first. */
10
+ rooms?: number;
11
+ }
12
+ export declare class RoomReplay {
13
+ #private;
14
+ readonly vouches: boolean;
15
+ constructor({ vouches, depth, retainMs, rooms }: RoomReplayOptions);
16
+ /** A socket subscribed here: the room is numbered from now on, and for `retainMs` after its last subscriber left. */
17
+ watch(roomId: string, now?: number): void;
18
+ /** The frame to send for one publish; numbered, and kept, while the room is watched. */
19
+ frameOf(publishData: WebsocketPublishData, subscribed: boolean, now?: number): string;
20
+ /** Where the room's numbering stands here, for a subscribe's ack; `null` for a room nobody watches. */
21
+ cursor(roomId: string): WebsocketRoomCursor | null;
22
+ /** The frames numbered after the cursor, or `null` when this process cannot tell whether that is all of them. */
23
+ since(roomId: string, { epoch, seq }: WebsocketRoomCursor): string[] | null;
24
+ }
@@ -4,7 +4,7 @@ import type { AkanMetricsReport } from "akanjs/service";
4
4
  import type { PagePromptEntry, PagePromptRun, PagePromptRunInput } from "../signal/mcp/pagePrompt.d.ts";
5
5
  import type { ClientManifest } from "./artifact.d.ts";
6
6
  import type { RouteCacheInvalidation, RouteCacheRenderState } from "./cachePolicy.d.ts";
7
- import type { RscTraceMetadata, SsrLateRedirect } from "./ssrTypes.d.ts";
7
+ import type { RscTraceMetadata, SsrLateControl } from "./ssrTypes.d.ts";
8
8
  import type { BaseBuildArtifact, CssAsset } from "./types.d.ts";
9
9
  export interface RscPending {
10
10
  onChunk: (data: Uint8Array) => void;
@@ -19,6 +19,7 @@ export interface RscPending {
19
19
  onCacheState?: (state: RouteCacheRenderState) => void;
20
20
  onRedirect?: (location: string, method: RscRedirectMethod, status: RscRedirectStatus) => void;
21
21
  onLateRedirect?: (location: string, method: RscRedirectMethod, status: RscRedirectStatus) => void;
22
+ onLateNotFound?: () => void;
22
23
  onNotFound?: () => void;
23
24
  }
24
25
  export type RscRedirectMethod = "replace" | "push";
@@ -35,7 +36,7 @@ export type RscRenderResult = {
35
36
  theme?: AkanTheme;
36
37
  status?: number;
37
38
  trace?: RscTraceMetadata;
38
- lateControl: Promise<SsrLateRedirect | null>;
39
+ lateControl: Promise<SsrLateControl | null>;
39
40
  cacheState: Promise<RouteCacheRenderState>;
40
41
  cancel: (reason?: unknown) => void;
41
42
  } | {
@@ -93,6 +94,8 @@ export declare class RscWorker {
93
94
  }): Promise<RscRenderResult>;
94
95
  listPagePrompts(): Promise<PagePromptEntry[]>;
95
96
  runPagePrompt(input: PagePromptRunInput): Promise<PagePromptRun>;
97
+ /** The root layout's `.manifest()` for `basePath`, in the browser's keys; `null` when it declares none. */
98
+ webManifest(basePath: string | null): Promise<unknown>;
96
99
  invalidateRouteResultCache(invalidation?: string | RouteCacheInvalidation): void;
97
100
  kill(): void;
98
101
  setLogLevel(minSev: number | null): void;
@@ -10,4 +10,6 @@ export declare function createSitemapXml(urls: string[]): string;
10
10
  export declare function createDefaultSitemapXml({ origin, basePath, entries, i18n }: DefaultSitemapOptions): string;
11
11
  export declare function createDefaultSitemapUrls({ origin, basePath, entries, i18n }: DefaultSitemapOptions): string[];
12
12
  export declare function isSitemapPath(pathname: string, basePaths: readonly string[]): boolean;
13
+ /** The basePath a `/manifest.webmanifest` request asks for: by a visible prefix, else by the request's basePath. */
14
+ export declare function getWebManifestBasePath(pathname: string, basePaths: readonly string[], headerBasePath?: string | null): string | null | undefined;
13
15
  export declare function getSitemapBasePath(pathname: string, basePaths: readonly string[], headerBasePath?: string | null): string | null | undefined;
@@ -1,6 +1,6 @@
1
1
  import { type AkanRequestStore } from "akanjs/fetch";
2
2
  import type { ReactNode } from "react";
3
- import type { SsrChunkRegistryStats, SsrDocumentOptions, SsrFromRscInput, SsrLateRedirect } from "./ssrTypes.d.ts";
3
+ import type { SsrChunkRegistryStats, SsrDocumentOptions, SsrFromRscInput, SsrLateControl, SsrLateRedirect } from "./ssrTypes.d.ts";
4
4
  export declare class SsrChunkRegistry<T> {
5
5
  #private;
6
6
  readonly maxEntries: number;
@@ -19,12 +19,12 @@ export declare function sanitizeFlightForSsrStream(stream: ReadableStream<Uint8A
19
19
  export declare class ExpectedLateRedirectStderrSuppressor {
20
20
  #private;
21
21
  private constructor();
22
- static start(lateControl?: Promise<SsrLateRedirect | null>): ExpectedLateRedirectStderrSuppressor | null;
22
+ static start(lateControl?: Promise<SsrLateControl | null>): ExpectedLateRedirectStderrSuppressor | null;
23
23
  stop(): void;
24
24
  }
25
25
  export declare function interleaveRscScriptsWithHtml(htmlStream: ReadableStream<Uint8Array>, rscClientStream: ReadableStream<Uint8Array>, options?: {
26
26
  bootstrapModuleScripts?: string;
27
- lateControl?: Promise<SsrLateRedirect | null>;
27
+ lateControl?: Promise<SsrLateControl | null>;
28
28
  maxPendingRscScripts?: number;
29
29
  onPendingRscScriptsSize?: (size: number) => void;
30
30
  onComplete?: () => void;
@@ -24,6 +24,9 @@ export interface SsrLateRedirect {
24
24
  method: "replace" | "push";
25
25
  status: 303 | 307 | 308;
26
26
  }
27
+ export type SsrLateControl = SsrLateRedirect | {
28
+ type: "not-found";
29
+ };
27
30
  export interface RscTraceMetadata {
28
31
  navId?: string;
29
32
  pathname: string;
@@ -53,7 +56,7 @@ export interface SsrFromRscInput {
53
56
  importmap?: Record<string, string>;
54
57
  theme?: AkanTheme;
55
58
  injectThemeInitScript?: boolean;
56
- lateControl?: Promise<SsrLateRedirect | null>;
59
+ lateControl?: Promise<SsrLateControl | null>;
57
60
  onCancel?: (reason?: unknown) => void;
58
61
  /** Buffers until `stream.allReady` (`pageConfig.ssr: "block"`); `AKAN_SSR_WAIT_FOR_ALL_READY=1` forces it globally. */
59
62
  waitForAllReady?: boolean;
@@ -35,6 +35,8 @@ export declare const SYSTEM_PAGE_STATUS_COPY: {
35
35
  };
36
36
  };
37
37
  export declare const SYSTEM_PAGE_STYLE = "\n:root { color-scheme: dark; --akan-primary: #ff493b; --akan-secondary: #2b2e33; --akan-accent: #d1a23b; --akan-foreground: #ffffff; --akan-background: #1a1a1a; --akan-error: #f02020; }\nbody { margin: 0; min-height: 100vh; font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif; background: var(--akan-background); color: var(--akan-foreground); }\na { color: inherit; }\n.akan-system-page { min-height: 100vh; display: grid; place-items: center; padding: 32px 18px; box-sizing: border-box; background: radial-gradient(circle at top left, rgba(255, 73, 59, 0.16), transparent 34%), linear-gradient(135deg, var(--akan-background), #111); }\n.akan-system-card { width: min(720px, 100%); border: 1px solid rgba(255, 255, 255, 0.12); border-radius: 32px; background: linear-gradient(145deg, rgba(42, 42, 42, 0.96), rgba(43, 46, 51, 0.78)); box-shadow: 0 24px 80px rgba(0, 0, 0, 0.36); padding: clamp(28px, 6vw, 56px); }\n.akan-system-status { margin: 0 0 18px; font-weight: 800; font-size: clamp(4rem, 18vw, 8rem); line-height: 0.85; letter-spacing: -0.08em; color: var(--akan-primary); }\n.akan-system-eyebrow { margin: 0 0 10px; color: var(--akan-accent); font-size: 0.78rem; font-weight: 800; letter-spacing: 0.18em; text-transform: uppercase; }\n.akan-system-title { margin: 0; max-width: 12ch; font-size: clamp(2rem, 7vw, 4rem); line-height: 0.95; letter-spacing: -0.055em; color: var(--akan-foreground); }\n.akan-system-description { margin: 22px 0 0; max-width: 56ch; color: rgba(255, 255, 255, 0.76); font-size: 1.05rem; line-height: 1.75; }\n.akan-system-path { margin: 22px 0 0; overflow-wrap: anywhere; border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 16px; background: rgba(26, 26, 26, 0.72); padding: 12px 14px; color: rgba(255, 255, 255, 0.72); font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.88rem; }\n.akan-system-actions { margin-top: 30px; display: flex; flex-wrap: wrap; gap: 12px; }\n.akan-system-action { display: inline-flex; min-height: 44px; align-items: center; justify-content: center; border: 1px solid var(--akan-primary); border-radius: 999px; background: var(--akan-primary); box-shadow: 0 12px 34px rgba(255, 73, 59, 0.26); color: var(--akan-foreground); padding: 0 18px; font-weight: 800; text-decoration: none; }\n.akan-system-secondary { border: 1px solid rgba(255, 255, 255, 0.12); background: var(--akan-secondary); color: var(--akan-foreground); }\n.akan-system-details { margin-top: 28px; max-height: 260px; overflow: auto; border-radius: 18px; background: rgba(26, 26, 26, 0.82); border: 1px solid rgba(240, 32, 32, 0.22); padding: 16px; color: rgba(255, 255, 255, 0.78); font-size: 0.82rem; line-height: 1.55; white-space: pre-wrap; }\n";
38
+ /** The card alone, styled by the app's own tokens: what a not-found raised after the layouts streamed renders in place. */
39
+ export declare const SystemPageMain: (options: Omit<SystemPageOptions, "lang" | "stylesheetHref" | "script">) => import("react").JSX.Element;
38
40
  export declare function createSystemPageDocument(options: SystemPageOptions): ReactNode;
39
41
  export declare function getSystemPageErrorDetails(error: unknown): string;
40
42
  export declare function getPathnameLocale(pathname: string, i18n: AkanI18nConfig): string;
@@ -1,9 +1,12 @@
1
1
  import type { AkanWebConfig } from "akanjs";
2
2
  import type { PromiseOrObject } from "akanjs/base";
3
3
  import type { AkanI18nConfig } from "akanjs/common";
4
+ import type { WebsocketRoomCursor } from "akanjs/signal";
4
5
  import type { ClientManifest } from "./artifact.d.ts";
5
6
  import type { SsrManifest } from "./ssrTypes.d.ts";
6
- export type WebsocketRoute = (ws: Bun.ServerWebSocket<unknown>, data: unknown[], event?: "message" | "subscribe" | "unsubscribe") => PromiseOrObject<unknown>;
7
+ export type WebsocketRoute = (ws: Bun.ServerWebSocket<unknown>, data: unknown[], event?: "message" | "subscribe" | "unsubscribe", request?: {
8
+ since?: WebsocketRoomCursor;
9
+ }) => PromiseOrObject<unknown>;
7
10
  export type WebsocketRoutes = Record<string, WebsocketRoute>;
8
11
  export type HttpRoutes = Bun.Serve.Options<unknown>["routes"];
9
12
  export type LocalPublish = (roomId: string, data: object | object[] | Uint8Array) => void;
@@ -6,6 +6,7 @@ import type { PagePromptSource } from "../signal/mcp/pagePrompt.d.ts";
6
6
  import { type BuilderRpc, type RouteSeedIndex, type RoutesManifest } from "./artifact.d.ts";
7
7
  import { type RouteCacheInvalidation, type RouteCacheRenderState } from "./cachePolicy.d.ts";
8
8
  import type { HmrWsData, HmrWsHub } from "./hmr/wsHub.d.ts";
9
+ import type { McpAppShellSource } from "./mcp/McpApps.d.ts";
9
10
  import { type RscRedirectMethod, type RscRedirectStatus, type RscRenderResult, RscWorker } from "./rscWorkerHost.d.ts";
10
11
  import { type BaseBuildArtifact, type RenderState } from "./types.d.ts";
11
12
  export declare const DEFAULT_HTML_RESULT_CACHE_MAX_BODY_BYTES: number;
@@ -23,7 +24,7 @@ export declare function resolveHtmlRouteCacheStoreTtl(input: {
23
24
  workerCacheState: RouteCacheRenderState;
24
25
  hostRequestStore: AkanRequestStore;
25
26
  lateControl?: {
26
- type: "redirect";
27
+ type: "redirect" | "not-found";
27
28
  } | null;
28
29
  }): number | null;
29
30
  export declare function createRscNavigationStreamResponse(result: Extract<RscRenderResult, {
@@ -70,6 +71,7 @@ export declare class WebRouter {
70
71
  dispose(): void;
71
72
  setLogLevel(minSev: number | null): void;
72
73
  pagePrompts(): PagePromptSource;
74
+ mcpAppShell(): McpAppShellSource | undefined;
73
75
  onLogRecords(listener: (records: LogRecord[], dropped: number) => void): void;
74
76
  getMetrics(): AkanMetricsReport;
75
77
  invalidateRouteCaches(invalidation?: string | RouteCacheInvalidation): void;
@@ -15,9 +15,11 @@ export interface AkanJobOptions {
15
15
  attempts?: number;
16
16
  /** Smaller runs sooner, and a job with none runs before every prioritized one — bullmq's reading. */
17
17
  priority?: number;
18
+ /** `maxDelay` caps what an exponential backoff grows to between attempts. */
18
19
  backoff?: number | {
19
20
  type?: string;
20
21
  delay?: number;
22
+ maxDelay?: number;
21
23
  };
22
24
  removeOnComplete?: boolean | number;
23
25
  removeOnFail?: boolean | number;
@@ -3,14 +3,13 @@ import type { ConstantModel } from "akanjs/constant";
3
3
  import type { DatabaseModel, SchemaOf } from "akanjs/document";
4
4
  import { SearchIndex } from "./searchIndex.d.ts";
5
5
  import { BunSqliteClient } from "./sql/driver/bunSqlite.d.ts";
6
- import { LibsqlAkanClient } from "./sql/driver/libsql.d.ts";
7
6
  import { PostgresAkanClient } from "./sql/driver/postgres.d.ts";
8
7
  import { SqlDocumentStore } from "./sql/SqlDocumentStore.d.ts";
9
8
  import { type ConcurrentIndexBuild, type DatabaseAdaptor, type InsightSession, type SearchConfig, type SqliteEnv } from "./sql/types.d.ts";
10
9
  export { PostgresDialect } from "./sql/dialect/postgres.d.ts";
11
10
  export { SqliteDialect } from "./sql/dialect/sqlite.d.ts";
12
11
  export { SqlDocumentStore } from "./sql/SqlDocumentStore.d.ts";
13
- export type { AkanSqlClient, AkanSqlStatement, DatabaseAdaptor, DatabaseConfig, DocumentDatabaseOwner, DocumentStore, InsightSession, LibsqlDatabaseConfig, PostgresDatabaseConfig, SearchConfig, SqlDialect, SqliteDatabaseConfig, SqlResultRows, } from "./sql/types.d.ts";
12
+ export type { AkanSqlClient, AkanSqlStatement, DatabaseAdaptor, DatabaseConfig, DocumentDatabaseOwner, DocumentStore, InsightSession, PostgresDatabaseConfig, SearchConfig, SqlDialect, SqliteDatabaseConfig, SqlResultRows, UpsertByIdOptions, } from "./sql/types.d.ts";
14
13
  declare const SqliteDatabase_base: import("..").AdaptorCls<{}, {
15
14
  scheduler: import("..").InjectInfo<"plug", import("./schedule.adaptor").ScheduleAdaptor, never, never>;
16
15
  config: import("..").InjectInfo<"env", {
@@ -40,28 +39,6 @@ export declare class SqliteDatabase extends SqliteDatabase_base implements Datab
40
39
  checkpoint(mode?: "PASSIVE" | "FULL" | "RESTART" | "TRUNCATE"): void;
41
40
  vacuum(): void;
42
41
  }
43
- declare const LibsqlDatabase_base: import("..").AdaptorCls<{}, {
44
- scheduler: import("..").InjectInfo<"plug", import("./schedule.adaptor").ScheduleAdaptor, never, never>;
45
- config: import("..").InjectInfo<"env", {
46
- url: string;
47
- authToken: string | undefined;
48
- search: Required<SearchConfig>;
49
- }, SqliteEnv, never>;
50
- }>;
51
- export declare class LibsqlDatabase extends LibsqlDatabase_base implements DatabaseAdaptor {
52
- #private;
53
- onInit(): Promise<void>;
54
- onDestroy(): Promise<void>;
55
- getConnection(): LibsqlAkanClient;
56
- getSearchIndex(): SearchIndex;
57
- openInsight(): Promise<InsightSession>;
58
- stores(): SqlDocumentStore[];
59
- getStore(constant: ConstantModel, database: DatabaseModel, schema: SchemaOf): SqlDocumentStore;
60
- getMeta(key: string): Promise<string | undefined>;
61
- setMeta(key: string, value: string): Promise<void>;
62
- transaction<T>(fn: () => PromiseOrObject<T>): Promise<T>;
63
- afterCommit(fn: () => PromiseOrObject<void>): Promise<void>;
64
- }
65
42
  declare const PostgresDatabase_base: import("..").AdaptorCls<{}, {
66
43
  scheduler: import("..").InjectInfo<"plug", import("./schedule.adaptor").ScheduleAdaptor, never, never>;
67
44
  config: import("..").InjectInfo<"env", {
@@ -8,9 +8,15 @@ interface BullEmitter {
8
8
  interface QueueLike extends BullEmitter {
9
9
  add(name: string, args: unknown[], options?: AkanJobOptions): Promise<unknown>;
10
10
  }
11
- type WorkerLike = AkanWorker & BullEmitter;
11
+ type WorkerLike = AkanWorker & BullEmitter & {
12
+ on(event: "failed", listener: (job: AkanJob | undefined, error: Error) => void): unknown;
13
+ };
14
+ export interface ProcessWorkerOptions {
15
+ /** After the job's last attempt failed. */
16
+ onFailed?: (job: AkanJob, error: unknown) => Promise<void> | void;
17
+ }
12
18
  export interface QueueAdaptor {
13
- registerProcessWorker(key: string, handler: (job: AkanJob) => Promise<unknown>): AkanWorker;
19
+ registerProcessWorker(key: string, handler: (job: AkanJob) => Promise<unknown>, options?: ProcessWorkerOptions): AkanWorker;
14
20
  registerProcessQueue(key: string, args: unknown[], jobOptions?: AkanJobOptions): Promise<AkanJob>;
15
21
  }
16
22
  declare const BullQueue_base: import("..").AdaptorCls<{}, {
@@ -22,7 +28,8 @@ export declare class BullQueue extends BullQueue_base implements QueueAdaptor {
22
28
  onInit(): Promise<void>;
23
29
  onDestroy(): Promise<void>;
24
30
  getQueue(key: string): QueueLike;
25
- registerProcessWorker(key: string, handler: (job: AkanJob) => Promise<unknown>): WorkerLike;
31
+ registerProcessWorker(key: string, handler: (job: AkanJob) => Promise<unknown>, { onFailed }?: ProcessWorkerOptions): WorkerLike;
26
32
  registerProcessQueue(key: string, args: unknown[], jobOptions?: AkanJobOptions): Promise<AkanJob>;
33
+ static cappedBackoff(attemptsMade: number, type?: string): number;
27
34
  }
28
35
  export {};
@@ -0,0 +1,4 @@
1
+ import type { AkanJobOptions } from "../ipcTypes.d.ts";
2
+ export declare class QueueBackoff {
3
+ static delayOf(backoff: AkanJobOptions["backoff"], attemptsMade: number): number;
4
+ }
@@ -1,5 +1,5 @@
1
1
  import { type AkanJob, type AkanJobOptions, type AkanWorker } from "../ipcTypes.d.ts";
2
- import type { QueueAdaptor } from "./queue.adaptor";
2
+ import type { ProcessWorkerOptions, QueueAdaptor } from "./queue.adaptor";
3
3
  import { type SolidConfig, type SolidEnv } from "./solidSqlite.d.ts";
4
4
  declare const SolidQueue_base: import("..").AdaptorCls<{}, {
5
5
  config: import("..").InjectInfo<"env", Required<SolidConfig>, SolidEnv, never>;
@@ -14,10 +14,10 @@ export declare class SolidQueue extends SolidQueue_base implements QueueAdaptor
14
14
  #private;
15
15
  onInit(): Promise<void>;
16
16
  onDestroy(): Promise<void>;
17
- registerProcessWorker(key: string, handler: (job: AkanJob) => Promise<unknown>): AkanWorker;
17
+ registerProcessWorker(key: string, handler: (job: AkanJob) => Promise<unknown>, options?: ProcessWorkerOptions): AkanWorker;
18
18
  registerProcessQueue(key: string, args: unknown[], jobOptions?: AkanJobOptions): Promise<AkanJob>;
19
19
  wake(name?: string): void;
20
20
  claimJob(name: string): AkanJob | null;
21
- runJob(job: AkanJob, handler: (job: AkanJob) => Promise<unknown>): Promise<void>;
21
+ runJob(job: AkanJob, handler: (job: AkanJob) => Promise<unknown>, { onFailed }?: ProcessWorkerOptions): Promise<void>;
22
22
  }
23
23
  export {};
@@ -1,7 +1,7 @@
1
1
  import { type ConstantModel } from "akanjs/constant";
2
2
  import { type DatabaseModel, type DocumentQuery, type DocumentSchema, type DocumentScopeOptions, type DocumentUpdateInput, type DocumentUpdateOptions } from "akanjs/document";
3
3
  import { QueryCompiler } from "./QueryCompiler.d.ts";
4
- import { type DocumentDatabaseOwner, type DocumentRecord, type FindIdOptions, type FindManyOptions, type FindOneOptions, type SqlDialect, type TransferRow, type WriteHookOptions } from "./types.d.ts";
4
+ import { type DocumentDatabaseOwner, type DocumentRecord, type FindIdOptions, type FindManyOptions, type FindOneOptions, type SqlDialect, type TransferRow, type UpsertByIdOptions, type WriteHookOptions } from "./types.d.ts";
5
5
  import { UpdateCompiler } from "./UpdateCompiler.d.ts";
6
6
  export declare class SqlDocumentStore {
7
7
  #private;
@@ -19,6 +19,9 @@ export declare class SqlDocumentStore {
19
19
  clone(data: DocumentRecord & {
20
20
  id: string;
21
21
  }): Promise<any>;
22
+ upsertById(data: DocumentRecord & {
23
+ id: string;
24
+ }, { preserveTimestamps }?: UpsertByIdOptions): Promise<any>;
22
25
  update(id: string, patch: DocumentRecord, options?: WriteHookOptions): Promise<any>;
23
26
  remove(id: string): Promise<any>;
24
27
  /** Up to `limit` stored rows after the id `after`, in id order and removed ones included. */
@@ -69,6 +72,8 @@ export declare class SqlDocumentStore {
69
72
  pickById(id: string): Promise<any>;
70
73
  exists(query?: DocumentQuery, options?: DocumentScopeOptions): Promise<string | null>;
71
74
  count(query?: DocumentQuery, options?: DocumentScopeOptions): Promise<number>;
75
+ /** The stored numbers at `path` added up over the live rows the query matches; 0 when none. */
76
+ sum(path: string, query?: DocumentQuery): Promise<number>;
72
77
  insight(query?: DocumentQuery): Promise<DocumentRecord>;
73
78
  private safeQuery;
74
79
  private writeQuery;
@@ -13,6 +13,7 @@ export declare class PostgresDialect implements SqlDialect {
13
13
  docColumn(): string;
14
14
  docValuePlaceholder(): string;
15
15
  extract(path: string, kind?: PathKind): string;
16
+ sumOf(path: string): string;
16
17
  projectExpr(path: string): string;
17
18
  decodeProjected(value: unknown): any;
18
19
  eq(path: string, value: unknown, kind?: PathKind): SqlFrag;
@@ -8,6 +8,7 @@ export declare class SqliteDialect implements SqlDialect {
8
8
  docColumn(): string;
9
9
  docValuePlaceholder(): string;
10
10
  extract(path: string): string;
11
+ sumOf(path: string): string;
11
12
  projectExpr(path: string): string;
12
13
  decodeProjected(value: unknown): any;
13
14
  eq(path: string, value: unknown): SqlFrag;
@@ -2,7 +2,7 @@ import { type ConstantModel } from "akanjs/constant";
2
2
  import { type DatabaseModel, type SearchColumn } from "akanjs/document";
3
3
  import type { SqlFrag } from "../types.d.ts";
4
4
  import { type ModelTriggers, type SearchColumns, type SearchEngine, type SearchIndexOwner, type SearchQuery } from "./types.d.ts";
5
- /** The SQLite/libsql index: an fts5 table with `search_doc` as its external content. */
5
+ /** The SQLite index: an fts5 table with `search_doc` as its external content. */
6
6
  export declare class Fts5SearchEngine implements SearchEngine {
7
7
  #private;
8
8
  readonly backfillLock = "";
@@ -12,10 +12,6 @@ export interface SqliteDatabaseConfig {
12
12
  cacheSize?: number;
13
13
  tempStore?: "DEFAULT" | "FILE" | "MEMORY";
14
14
  }
15
- export interface LibsqlDatabaseConfig {
16
- url?: string;
17
- authToken?: string;
18
- }
19
15
  export interface PostgresDatabaseConfig {
20
16
  url?: string;
21
17
  host?: string;
@@ -32,16 +28,22 @@ export interface SearchConfig {
32
28
  }
33
29
  export interface DatabaseConfig {
34
30
  sqlite?: SqliteDatabaseConfig;
35
- libsql?: LibsqlDatabaseConfig;
36
31
  postgres?: PostgresDatabaseConfig;
37
32
  search?: SearchConfig;
38
33
  }
34
+ export interface UpsertByIdOptions {
35
+ /** Keep the record's own `createdAt` and `updatedAt`, as a backfill from another system must. */
36
+ preserveTimestamps?: boolean;
37
+ }
39
38
  export interface DocumentStore {
40
39
  ensure(): Promise<void>;
41
40
  create(data: DocumentRecord): Promise<any>;
42
41
  clone(data: DocumentRecord & {
43
42
  id: string;
44
43
  }): Promise<any>;
44
+ upsertById(data: DocumentRecord & {
45
+ id: string;
46
+ }, options?: UpsertByIdOptions): Promise<any>;
45
47
  update(id: string, patch: DocumentRecord): Promise<any>;
46
48
  remove(id: string): Promise<any>;
47
49
  updateOneByQuery(query: DocumentQuery, update: DocumentUpdateInput, options?: DocumentUpdateOptions): Promise<{
@@ -247,6 +249,8 @@ export interface SqlDialect {
247
249
  docColumn(): string;
248
250
  docValuePlaceholder(): string;
249
251
  extract(path: string, kind?: PathKind): string;
252
+ /** The aggregate summing a stored number at `path`; a value that is not a number counts as nothing. */
253
+ sumOf(path: string): string;
250
254
  projectExpr(path: string): string;
251
255
  decodeProjected(value: unknown): unknown;
252
256
  eq(path: string, value: unknown, kind?: PathKind): SqlFrag;
@@ -1,8 +1,5 @@
1
- import type { InArgs, InValue } from "@libsql/client";
2
1
  import type { QueryLeafOps } from "./types.d.ts";
3
2
  export declare const isPlainObject: (value: unknown) => value is Record<string, unknown>;
4
- export declare const toLibsqlValue: (value: unknown) => InValue;
5
- export declare const toLibsqlArgs: (params: unknown[]) => InArgs;
6
3
  export declare const toPostgresSql: (sql: string, params: unknown[]) => {
7
4
  sql: string;
8
5
  params: unknown[];
@@ -6,6 +6,8 @@ import type { DatabaseServiceForModel } from "./types.d.ts";
6
6
  interface ServiceOptions {
7
7
  enabled?: boolean | (() => boolean);
8
8
  serverMode?: "batch" | "federation";
9
+ /** The operation modes the module mounts in; `modules: ["@edge"]` selects every module that lists `edge`. */
10
+ operationMode?: ("cloud" | "edge" | "local" | (string & {}))[];
9
11
  }
10
12
  export type ServiceType = "database" | "plain";
11
13
  export interface Service {
@@ -22,6 +24,7 @@ export type ServiceCls<RefName extends string = string, Methods = {}, InjectMap
22
24
  readonly type: ServiceType;
23
25
  readonly [INJECT_META]: InjectMap;
24
26
  readonly enabled: boolean;
27
+ readonly operationMode: readonly string[] | undefined;
25
28
  }>;
26
29
  export declare function serve<RefName extends string, Injection extends InjectBuilder>(refName: RefName, injectBuilder: Injection, ...extendSrvs: Cls[]): ServiceCls<RefName, {}, ReturnType<Injection>>;
27
30
  export declare function serve<RefName extends string, Injection extends InjectBuilder>(refName: RefName, option: ServiceOptions, injectBuilder: Injection, ...extendSrvs: Cls[]): ServiceCls<RefName, {}, ReturnType<Injection>>;
@@ -0,0 +1,7 @@
1
+ import type { SignalContext } from "./signalContext.d.ts";
2
+ export declare class EndpointIdempotency {
3
+ #private;
4
+ static readonly header = "idempotency-key";
5
+ static readonly keepMs: number;
6
+ static through(context: SignalContext, run: () => Promise<unknown>): Promise<unknown>;
7
+ }
@@ -20,6 +20,16 @@ export declare class Res implements InternalArg {
20
20
  export declare class CallerAccount implements InternalArg<unknown> {
21
21
  getArg(context: SignalContext): unknown;
22
22
  }
23
+ /** A device or service a machine token names: `version` is what a guard compares to revoke it. */
24
+ export interface MachineIdentity {
25
+ kind: string;
26
+ id: string;
27
+ version: number;
28
+ }
29
+ /** The machine a verified machine token proved for this call; required unless declared `{ nullable: true }`. */
30
+ export declare class Machine implements InternalArg<MachineIdentity | null> {
31
+ getArg(context: SignalContext): MachineIdentity | null;
32
+ }
23
33
  /** The caller's IP as the nearest proxy recorded it (see `SignalContext.getClientIp`), `null` when unknown. */
24
34
  export declare class Ip implements InternalArg<string | null> {
25
35
  getArg(context: SignalContext): string | null;
@@ -11,6 +11,11 @@ export interface McpDocumentOptions {
11
11
  * no `outputSchema` (results still ship as `structuredContent`).
12
12
  */
13
13
  outputSchema?: McpOutputSchemaMode;
14
+ /**
15
+ * MCP Apps: an endpoint kept off the shelf only by `mcp: false` is published as an app-only tool, which a host lists
16
+ * to the views it renders and never to the model. Every other refusal still holds.
17
+ */
18
+ apps?: boolean;
14
19
  }
15
20
  export type McpOutputSchemaMode = "full" | "shallow" | "none";
16
21
  export interface McpExposedEndpoint {
@@ -34,6 +39,8 @@ export declare class McpDocument {
34
39
  /** The spec types `structuredContent` as an object, so a list result is wrapped under this key. */
35
40
  static readonly listKey = "items";
36
41
  readonly tools: McpTool[];
42
+ /** `visibility: ["app"]` — callable by a rendered view, absent from every model-facing list. */
43
+ readonly appTools: McpTool[];
37
44
  readonly resourceTemplates: McpResourceTemplate[];
38
45
  /** Every readable thing is addressed by a template, so there are no fixed resources to enumerate. */
39
46
  readonly resources: McpResource[];
@@ -49,4 +56,5 @@ export declare class McpDocument {
49
56
  args: Record<string, string | string[]>;
50
57
  } | null;
51
58
  static structuredContent(endpoint: SerializedEndpoint, value: unknown): {} | undefined;
59
+ isAppOnly(name: string): boolean;
52
60
  }
@@ -10,6 +10,10 @@ export declare const MCP_META_PROTOCOL_VERSION = "io.modelcontextprotocol/protoc
10
10
  export declare const MCP_META_CLIENT_CAPABILITIES = "io.modelcontextprotocol/clientCapabilities";
11
11
  export declare const MCP_META_CLIENT_INFO = "io.modelcontextprotocol/clientInfo";
12
12
  export declare const MCP_META_SERVER_INFO = "io.modelcontextprotocol/serverInfo";
13
+ /** MCP Apps (SEP-1865): a tool names a `ui://` resource, and a host that speaks the extension renders it in an iframe. */
14
+ export declare const MCP_UI_EXTENSION = "io.modelcontextprotocol/ui";
15
+ export declare const MCP_UI_MIME_TYPE = "text/html;profile=mcp-app";
16
+ export declare const MCP_UI_LEGACY_RESOURCE_URI = "ui/resourceUri";
13
17
  export declare const McpErrorCode: {
14
18
  readonly parse: -32700;
15
19
  readonly invalidRequest: -32600;
@@ -34,6 +38,12 @@ export interface McpToolAnnotations {
34
38
  idempotentHint?: boolean;
35
39
  openWorldHint?: boolean;
36
40
  }
41
+ /** `model` lists the tool to the model, `app` lets a rendered view call it; a host enforces both. */
42
+ export type McpUiVisibility = "model" | "app";
43
+ export interface McpToolUiMeta {
44
+ resourceUri?: string;
45
+ visibility?: McpUiVisibility[];
46
+ }
37
47
  export interface McpTool {
38
48
  name: string;
39
49
  title?: string;
@@ -41,6 +51,10 @@ export interface McpTool {
41
51
  inputSchema: Record<string, unknown>;
42
52
  outputSchema?: Record<string, unknown>;
43
53
  annotations?: McpToolAnnotations;
54
+ _meta?: {
55
+ ui?: McpToolUiMeta;
56
+ [MCP_UI_LEGACY_RESOURCE_URI]?: string;
57
+ };
44
58
  }
45
59
  export interface McpResourceTemplate {
46
60
  uriTemplate: string;
@@ -55,6 +69,7 @@ export interface McpResource {
55
69
  title?: string;
56
70
  description?: string;
57
71
  mimeType?: string;
72
+ _meta?: Record<string, unknown>;
58
73
  }
59
74
  export interface McpPromptArgument {
60
75
  name: string;
@@ -76,9 +91,11 @@ export interface McpToolResult {
76
91
  content: McpTextContent[];
77
92
  structuredContent?: unknown;
78
93
  isError?: boolean;
94
+ _meta?: Record<string, unknown>;
79
95
  }
80
96
  export interface McpResourceContents {
81
97
  uri: string;
82
98
  mimeType: string;
83
99
  text: string;
100
+ _meta?: Record<string, unknown>;
84
101
  }
@@ -73,17 +73,19 @@ export declare class SignalContext<Ctx extends HttpExecutionContext | WebSocketE
73
73
  static try(endpoint: Adaptor, endpointInfo: EndpointInfo, key: string, fn: () => Promise<Response | undefined>, options?: {
74
74
  trace?: boolean;
75
75
  }): Promise<Response | undefined>;
76
- static resolveReturn(value: unknown, { signalContext, returnRef, arrDepth, registry, live, cache, }: {
76
+ static resolveReturn(value: unknown, { signalContext, returnRef, arrDepth, registry, live, cache, path, }: {
77
77
  signalContext: SignalContext | null;
78
78
  returnRef: ConstantFieldTypeInput;
79
79
  arrDepth: number;
80
80
  registry: InjectRegistry;
81
81
  live: LiveRegistry;
82
82
  cache?: ResolveCache;
83
+ /** The field path from the endpoint's return to `value`, named by a relation that cannot load. */
84
+ path?: string;
83
85
  }): Promise<unknown>;
84
- static loadNested(value: unknown, service: DatabaseService, { arrDepth, nullable }: {
86
+ /** What `value` references: `null` for a document that is gone or soft-removed, which an array leaves out. */
87
+ static loadNested(value: unknown, service: DatabaseService, { arrDepth }: {
85
88
  arrDepth: number;
86
- nullable: boolean;
87
89
  }): Promise<unknown>;
88
90
  getHttpContext<Appended = unknown>(): HttpExecutionContext<Appended>;
89
91
  getWebSocketContext<Appended = unknown>(): WebSocketExecutionContext<Appended>;