akanjs 3.0.0-beta.2 → 3.0.0-beta.20

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 (1250) hide show
  1. package/base/base.ts +6 -11
  2. package/base/baseEnv.ts +17 -11
  3. package/base/databaseModes.ts +75 -0
  4. package/base/index.ts +1 -0
  5. package/base/primitiveRegistry.ts +38 -47
  6. package/base/symbols.ts +1 -1
  7. package/base/types.ts +1 -1
  8. package/base/utils.ts +3 -6
  9. package/capacitor.base.config.ts +2 -3
  10. package/client/capacitor.ts +18 -63
  11. package/client/cn.ts +3 -13
  12. package/client/cookie.ts +6 -15
  13. package/client/createFont.ts +0 -2
  14. package/client/csrTypes.ts +6 -59
  15. package/client/decorators.ts +1 -1
  16. package/client/device.ts +52 -44
  17. package/client/frameConfig.ts +15 -26
  18. package/client/index.ts +0 -1
  19. package/client/makePageProto.tsx +3 -4
  20. package/client/route/RootLayoutDefinition.ts +0 -6
  21. package/client/route/RouteDefinition.ts +5 -30
  22. package/client/route/resolveRouteModule.ts +1 -5
  23. package/client/router.ts +35 -39
  24. package/client/rscNavigation.ts +4 -5
  25. package/client/sharedContext.ts +2 -19
  26. package/client/storage.ts +29 -38
  27. package/client/translator.ts +5 -6
  28. package/client/types.ts +0 -3
  29. package/common/CodeAgentClient.ts +91 -0
  30. package/common/CodeTranscript.ts +325 -0
  31. package/common/Logger.ts +9 -34
  32. package/common/TrustedProxy.ts +6 -34
  33. package/common/applyMixins.ts +13 -2
  34. package/common/authToken.ts +0 -11
  35. package/common/capitalize.ts +3 -4
  36. package/common/clamp.ts +0 -1
  37. package/common/clientAddress.ts +1 -15
  38. package/common/codeAgentProfile.ts +181 -0
  39. package/common/codeAgentWire.ts +305 -0
  40. package/{server/routing → common}/eventStream.ts +1 -6
  41. package/common/fileUpload.ts +1 -12
  42. package/common/formatNumber.ts +3 -12
  43. package/common/index.ts +104 -19
  44. package/common/interpolateTranslation.ts +1 -6
  45. package/common/isEmail.ts +0 -1
  46. package/common/isRecord.ts +2 -0
  47. package/common/isThenable.ts +1 -8
  48. package/common/isValidDate.ts +3 -5
  49. package/common/logContext.ts +1 -1
  50. package/{ui/Agent → common}/markdownBlocks.ts +0 -3
  51. package/common/markdownSpans.ts +47 -0
  52. package/{ui/Agent → common}/markdownTable.ts +1 -5
  53. package/common/mcpExposure.ts +4 -27
  54. package/common/objectPath.ts +67 -0
  55. package/common/objectify.ts +52 -0
  56. package/common/{isPhoneNumber.ts → phone.ts} +7 -1
  57. package/common/randomPick.ts +13 -0
  58. package/common/requestOrigin.ts +0 -17
  59. package/common/restClient.ts +8 -13
  60. package/common/round.ts +4 -0
  61. package/common/routeConvention.ts +21 -14
  62. package/common/sleep.ts +1 -8
  63. package/common/subRoute.ts +4 -7
  64. package/common/toError.ts +1 -0
  65. package/common/tunnelWire.ts +263 -0
  66. package/common/types.ts +6 -7
  67. package/common/{splitVersion.ts → version.ts} +3 -6
  68. package/common/{websocketBinaryFrame.ts → websocketContract.ts} +43 -9
  69. package/constant/cascadePaths.ts +6 -9
  70. package/constant/constantRegistry.ts +21 -57
  71. package/constant/crystalize.ts +2 -12
  72. package/constant/dateSlot.ts +0 -15
  73. package/constant/fieldInfo.ts +30 -109
  74. package/constant/fieldQueryMeta.ts +2 -10
  75. package/constant/getDefault.ts +16 -8
  76. package/constant/hydrationPlan.ts +1 -9
  77. package/constant/index.ts +0 -1
  78. package/constant/labelOf.ts +1 -6
  79. package/constant/mask.ts +36 -38
  80. package/constant/purify.ts +6 -14
  81. package/constant/serialize.ts +82 -5
  82. package/constant/textFieldPaths.ts +2 -3
  83. package/constant/types.ts +2 -6
  84. package/constant/via.ts +20 -60
  85. package/dictionary/DictionaryLookup.ts +1 -7
  86. package/dictionary/agent.dictionary.ts +43 -11
  87. package/dictionary/base.dictionary.ts +11 -0
  88. package/dictionary/dictInfo.ts +145 -626
  89. package/dictionary/dictShape.ts +54 -0
  90. package/dictionary/dictionary.ts +1 -2
  91. package/dictionary/dictionaryRegistry.ts +7 -28
  92. package/dictionary/locale.ts +24 -116
  93. package/dictionary/trans.ts +18 -56
  94. package/document/dataLoader.ts +77 -78
  95. package/document/database.ts +52 -56
  96. package/document/documentQuery.ts +32 -32
  97. package/document/documentSchema.ts +21 -26
  98. package/document/filterMeta.ts +11 -31
  99. package/document/index.ts +0 -1
  100. package/document/into.ts +8 -18
  101. package/document/loaderInfo.ts +28 -7
  102. package/document/noDocumentError.ts +2 -7
  103. package/document/queryEvaluator.ts +21 -43
  104. package/document/types.ts +0 -1
  105. package/fetch/client/fetchClient.ts +66 -105
  106. package/fetch/client/fetchHandle.ts +4 -12
  107. package/fetch/client/httpClient.ts +35 -68
  108. package/fetch/client/remoteError.ts +2 -8
  109. package/fetch/client/sliceInitHandle.ts +3 -6
  110. package/fetch/client/sliceQueryArgs.ts +11 -0
  111. package/fetch/client/wsClient.ts +75 -64
  112. package/fetch/fetchType/appliedReturn.type.ts +5 -24
  113. package/fetch/fetchType/buildFetch.type.ts +28 -1
  114. package/fetch/fetchType/index.ts +0 -1
  115. package/fetch/requestStorage.ts +7 -28
  116. package/fetch/types.ts +0 -1
  117. package/index.ts +31 -64
  118. package/package.json +19 -5
  119. package/server/akanApp.ts +138 -289
  120. package/server/akanAppHeaders.ts +2 -3
  121. package/server/akanOption.ts +25 -27
  122. package/server/akanServer.ts +98 -219
  123. package/server/animatedImage.ts +2 -11
  124. package/server/artifact/builderRpc.ts +24 -64
  125. package/server/artifact/index.ts +0 -1
  126. package/server/artifact/ipcTypes.ts +27 -30
  127. package/server/artifact/routeClientCache.ts +18 -37
  128. package/server/artifact/routeSeedIndexStore.ts +2 -35
  129. package/server/artifact/routesManifestStore.ts +13 -38
  130. package/server/binaryPubsub.ts +0 -9
  131. package/server/cachePolicy.ts +10 -44
  132. package/server/console.ts +12 -16
  133. package/server/consoleSession.ts +55 -12
  134. package/server/contentEncoding.ts +42 -27
  135. package/server/decorators.ts +4 -70
  136. package/server/devtools/constantSerializer.ts +2 -14
  137. package/server/devtools/depsSerializer.ts +14 -46
  138. package/server/devtools/devtoolsJson.ts +6 -18
  139. package/server/devtools/devtoolsRouter.ts +2 -12
  140. package/server/devtools/signalSerializer.ts +5 -44
  141. package/server/devtools/types.ts +0 -12
  142. package/server/di/diLifecycle.ts +141 -221
  143. package/server/di/predefinedAdaptor.ts +11 -5
  144. package/server/di/resolveHierarchy.ts +114 -5
  145. package/server/di/utils.ts +13 -29
  146. package/server/head.tsx +53 -0
  147. package/server/hmr/clientScript.ts +2 -8
  148. package/server/hmr/devHmrController.ts +28 -32
  149. package/server/hmr/wsHub.ts +9 -7
  150. package/server/imageOptimizer.ts +5 -26
  151. package/server/index.ts +1 -1
  152. package/server/lifecycle/portInUse.ts +1 -4
  153. package/server/lifecycle/runtimeDir.ts +0 -4
  154. package/server/lifecycle/shutdownManager.ts +4 -29
  155. package/server/logging/childOutputReader.ts +0 -12
  156. package/server/logging/hubFileSink.ts +10 -6
  157. package/server/logging/logControlSocket.ts +13 -7
  158. package/server/logging/logForwarder.ts +19 -22
  159. package/server/logging/logHub.ts +0 -0
  160. package/server/logging/logQuery.ts +4 -7
  161. package/server/logging/logStdoutWriter.ts +1 -11
  162. package/server/logging/logStreamRoute.ts +4 -21
  163. package/server/logging/logTailClient.ts +1 -8
  164. package/server/logging/rotatingLogWriter.ts +4 -6
  165. package/server/mcp/McpAuth.ts +5 -79
  166. package/server/mcp/McpDispatcher.ts +13 -90
  167. package/server/mcp/McpEventStream.ts +2 -12
  168. package/server/mcp/McpExecutionContext.ts +1 -42
  169. package/server/mcp/McpRateLimiter.ts +61 -30
  170. package/server/mcp/McpRouter.ts +49 -208
  171. package/server/mcp/PagePromptComposer.ts +7 -29
  172. package/server/memoryLimit.ts +1 -13
  173. package/server/oauth/OAuthAuthorize.ts +3 -7
  174. package/server/oauth/OAuthClientIdMetadata.ts +2 -27
  175. package/server/oauth/OAuthErrors.ts +0 -13
  176. package/server/oauth/OAuthMetadata.ts +1 -7
  177. package/server/oauth/OAuthPkce.ts +0 -2
  178. package/server/oauth/OAuthRedirect.ts +0 -9
  179. package/server/oauth/OAuthRegistration.ts +0 -2
  180. package/server/oauth/OAuthRevocation.ts +1 -11
  181. package/server/oauth/OAuthToken.ts +3 -14
  182. package/server/oauth/oauthTypes.ts +1 -2
  183. package/server/ops/ageEncryption.ts +317 -0
  184. package/server/ops/appInfo.ts +92 -0
  185. package/server/ops/opsCommand.ts +116 -0
  186. package/server/ops/opsRoute.ts +151 -0
  187. package/server/ops/opsToken.ts +93 -0
  188. package/server/ops/snapshotJobs.ts +133 -0
  189. package/server/ops/snapshotRestore.ts +118 -0
  190. package/server/ops/snapshotTypes.ts +52 -0
  191. package/server/ops/sqliteFiles.ts +20 -0
  192. package/server/ops/sqliteSnapshot.ts +149 -0
  193. package/server/processMetricsCollector.ts +12 -14
  194. package/server/proxy/hostBasePathWebProxy.ts +20 -13
  195. package/server/proxy/index.ts +2 -3
  196. package/server/proxy/localeWebProxy.ts +3 -17
  197. package/server/proxy/types.ts +14 -0
  198. package/server/proxy/webProxyRunner.ts +13 -1
  199. package/server/resolver/CascadeRunner.ts +7 -23
  200. package/server/resolver/database.resolver.ts +57 -123
  201. package/server/resolver/service.resolver.ts +9 -161
  202. package/server/resolver/signal.resolver.ts +73 -98
  203. package/server/routeElementComposer.tsx +23 -52
  204. package/server/routeState.ts +15 -34
  205. package/server/routeTreeBuilder.ts +24 -83
  206. package/server/routing/apiRouter.ts +17 -49
  207. package/server/routing/appWsData.ts +4 -28
  208. package/server/routing/soloAppRoutes.ts +5 -5
  209. package/server/rscClient.tsx +31 -37
  210. package/server/rscClientFetch.ts +7 -3
  211. package/server/rscClientPatch.ts +4 -25
  212. package/server/rscHttp.ts +1 -1
  213. package/server/rscNavigationState.ts +10 -25
  214. package/server/rscPagePrompts.ts +4 -24
  215. package/server/rscSegmentOutlet.tsx +1 -5
  216. package/server/rscWorker.tsx +146 -285
  217. package/server/rscWorkerCache.ts +74 -8
  218. package/server/rscWorkerHost.ts +45 -192
  219. package/server/semaphore.ts +1 -1
  220. package/server/sitemap.ts +1 -3
  221. package/server/ssrFromRscRenderer.tsx +31 -124
  222. package/server/ssrTypes.ts +3 -29
  223. package/server/staticPath.ts +0 -16
  224. package/server/systemPageDocument.tsx +65 -2
  225. package/server/systemPages.tsx +4 -2
  226. package/server/tunnel/TunnelAgent.ts +237 -0
  227. package/server/tunnel/TunnelDataSocket.ts +146 -0
  228. package/server/tunnel/TunnelHttpStream.ts +86 -0
  229. package/server/tunnel/TunnelTcpStream.ts +96 -0
  230. package/server/tunnel/TunnelWebsocketStream.ts +110 -0
  231. package/server/tunnel/index.ts +6 -0
  232. package/server/tunnel/tunnelStream.ts +32 -0
  233. package/server/types.tsx +2 -9
  234. package/server/webRouter.ts +88 -306
  235. package/service/agent.service.ts +66 -35
  236. package/service/injectInfo.ts +106 -75
  237. package/service/ipcTypes.ts +4 -1
  238. package/service/liveSyncHub.ts +4 -34
  239. package/service/predefinedAdaptor/anthropicLlm.ts +65 -75
  240. package/service/predefinedAdaptor/cache.adaptor.ts +257 -75
  241. package/service/predefinedAdaptor/database.adaptor.ts +366 -108
  242. package/service/predefinedAdaptor/documentTransfer.ts +89 -0
  243. package/service/predefinedAdaptor/index.ts +2 -1
  244. package/service/predefinedAdaptor/insightQuery.ts +89 -79
  245. package/service/predefinedAdaptor/llm.adaptor.ts +64 -54
  246. package/service/predefinedAdaptor/llmOverflow.ts +63 -0
  247. package/service/predefinedAdaptor/openaiDialect.ts +56 -64
  248. package/service/predefinedAdaptor/openaiLlm.ts +24 -27
  249. package/service/predefinedAdaptor/queue.adaptor.ts +41 -22
  250. package/service/predefinedAdaptor/schedule.adaptor.ts +69 -9
  251. package/service/predefinedAdaptor/searchIndex.ts +76 -325
  252. package/service/predefinedAdaptor/solidCache.adaptor.ts +135 -12
  253. package/service/predefinedAdaptor/solidPubsub.adaptor.ts +28 -16
  254. package/service/predefinedAdaptor/solidQueue.adaptor.ts +61 -10
  255. package/service/predefinedAdaptor/solidSqlite.ts +10 -16
  256. package/service/predefinedAdaptor/sql/PendingStoreEnsures.ts +1 -0
  257. package/service/predefinedAdaptor/sql/PostgresInsightSession.ts +113 -0
  258. package/service/predefinedAdaptor/sql/QueryCompiler.ts +50 -30
  259. package/service/predefinedAdaptor/sql/SqlDocumentStore.ts +290 -138
  260. package/service/predefinedAdaptor/sql/SqliteInsightSession.ts +85 -0
  261. package/service/predefinedAdaptor/sql/UpdateCompiler.ts +1 -7
  262. package/service/predefinedAdaptor/sql/dialect/postgres.ts +138 -53
  263. package/service/predefinedAdaptor/sql/dialect/sqlite.ts +18 -15
  264. package/service/predefinedAdaptor/sql/driver/bunSqlite.ts +31 -4
  265. package/service/predefinedAdaptor/sql/driver/libsql.ts +20 -12
  266. package/service/predefinedAdaptor/sql/driver/postgres.ts +13 -7
  267. package/service/predefinedAdaptor/sql/search/fts5.ts +249 -0
  268. package/service/predefinedAdaptor/sql/search/mirror.ts +76 -0
  269. package/service/predefinedAdaptor/sql/search/postgres.ts +453 -0
  270. package/service/predefinedAdaptor/sql/search/types.ts +50 -0
  271. package/service/predefinedAdaptor/sql/types.ts +76 -17
  272. package/service/predefinedAdaptor/sql/values.ts +40 -2
  273. package/service/predefinedAdaptor/sqlitePath.ts +12 -0
  274. package/service/predefinedAdaptor/sseData.ts +23 -0
  275. package/service/predefinedAdaptor/storage.adaptor.ts +19 -7
  276. package/service/predefinedAdaptor/websocket.adaptor.ts +154 -184
  277. package/service/serve.ts +1 -2
  278. package/service/serviceModule.ts +52 -70
  279. package/service/toolNames.ts +5 -22
  280. package/service/types.ts +3 -9
  281. package/signal/CrossSiteGuard.ts +5 -40
  282. package/signal/SignalFailure.ts +2 -15
  283. package/signal/agent/AgentCatalogue.ts +9 -55
  284. package/signal/agent.signal.ts +9 -6
  285. package/signal/agentMeter.ts +45 -0
  286. package/signal/agentTurnStream.ts +48 -46
  287. package/signal/endpoint.ts +12 -2
  288. package/signal/endpointCache.ts +59 -0
  289. package/signal/endpointInfo.ts +13 -27
  290. package/signal/exception.ts +3 -34
  291. package/signal/guard.ts +4 -21
  292. package/signal/guards.ts +2 -10
  293. package/signal/index.ts +1 -0
  294. package/signal/internal.ts +3 -7
  295. package/signal/internalArg.ts +10 -13
  296. package/signal/internalInfo.ts +1 -1
  297. package/signal/mcp/McpDocument.ts +21 -90
  298. package/signal/mcp/McpProgress.ts +6 -19
  299. package/signal/mcp/McpUriTemplate.ts +1 -27
  300. package/signal/mcp/Msg.ts +13 -122
  301. package/signal/mcp/mcpProtocol.ts +3 -26
  302. package/signal/mcp/pagePrompt.ts +3 -9
  303. package/signal/middleware.ts +15 -65
  304. package/signal/openapi/openapi.ts +0 -4
  305. package/signal/schema/JsonSchemaBuilder.ts +32 -46
  306. package/signal/serializer/fetch.serializer.ts +37 -43
  307. package/signal/serverSignal.ts +6 -8
  308. package/signal/signalContext.ts +70 -161
  309. package/signal/signalRegistry.ts +11 -17
  310. package/signal/slice.ts +6 -12
  311. package/signal/sliceInfo.ts +5 -30
  312. package/signal/trace.ts +11 -84
  313. package/signal/types.ts +27 -57
  314. package/store/SliceRequest.ts +1 -11
  315. package/store/action.ts +153 -395
  316. package/store/actionTag.ts +1 -10
  317. package/store/agent/AgentBridge.ts +3 -25
  318. package/store/agent/AgentContext.ts +2 -9
  319. package/store/agent/AgentCursor.ts +160 -0
  320. package/store/agent/AgentPrompts.ts +0 -15
  321. package/store/agent/AgentVisual.ts +152 -0
  322. package/store/agent/ScreenFlash.ts +67 -0
  323. package/store/agent/ScreenReader.ts +3 -52
  324. package/store/agent/ScreenSettle.ts +1 -13
  325. package/store/agent/ScreenTarget.ts +15 -32
  326. package/store/agent/StoreCatalogue.ts +12 -24
  327. package/store/agent/StoreSurfaceSource.ts +35 -65
  328. package/store/agent/index.ts +4 -4
  329. package/store/agentic/AgentValue.ts +9 -26
  330. package/store/agentic/StExposeBuilder.ts +3 -12
  331. package/store/agentic/StExposeDraft.ts +0 -6
  332. package/store/agentic/StStateBuilder.ts +3 -11
  333. package/store/agentic/StStateDraft.ts +0 -5
  334. package/store/agentic/StToolBuilder.ts +48 -41
  335. package/store/agentic/StToolDraft.ts +0 -7
  336. package/store/agentic/attachAgentic.ts +2 -10
  337. package/store/agentic/formFields.ts +8 -42
  338. package/store/agentic/index.ts +1 -1
  339. package/store/agentic/useAgentReference.ts +31 -0
  340. package/store/agentic/useFieldTool.ts +176 -58
  341. package/store/agentic/useFormTools.ts +4 -21
  342. package/store/agentic/useRelationFieldTool.ts +2 -15
  343. package/store/databaseStateNames.ts +0 -9
  344. package/store/draftStore.ts +4 -54
  345. package/store/formSetterNames.ts +2 -19
  346. package/store/hooks.ts +1 -1
  347. package/store/liveInsert.ts +1 -30
  348. package/store/sliceKeys.ts +37 -0
  349. package/store/sliceRole.ts +1 -10
  350. package/store/state.ts +4 -50
  351. package/store/stateBuilder.ts +1 -23
  352. package/store/storeInstance.ts +21 -114
  353. package/store/storeRegistry.ts +1 -8
  354. package/store/types.ts +1 -1
  355. package/test/conformance.ts +299 -0
  356. package/test/index.ts +2 -2
  357. package/test/sampleOf.ts +52 -28
  358. package/test/signalTestRuntime.ts +6 -10
  359. package/test/testServer.ts +66 -31
  360. package/types/base/base.d.ts +2 -3
  361. package/types/base/baseEnv.d.ts +7 -10
  362. package/types/base/databaseModes.d.ts +28 -0
  363. package/types/base/index.d.ts +1 -0
  364. package/types/base/primitiveRegistry.d.ts +23 -10
  365. package/types/base/symbols.d.ts +1 -1
  366. package/types/capacitor.base.config.d.ts +1 -1
  367. package/types/client/cn.d.ts +3 -13
  368. package/types/client/cookie.d.ts +3 -12
  369. package/types/client/csrTypes.d.ts +6 -57
  370. package/types/client/decorators.d.ts +1 -1
  371. package/types/client/device.d.ts +2 -1
  372. package/types/client/index.d.ts +0 -1
  373. package/types/client/route/RootLayoutDefinition.d.ts +0 -1
  374. package/types/client/route/RouteDefinition.d.ts +4 -16
  375. package/types/client/route/resolveRouteModule.d.ts +1 -5
  376. package/types/client/router.d.ts +8 -4
  377. package/types/client/rscNavigation.d.ts +4 -5
  378. package/types/client/sharedContext.d.ts +2 -19
  379. package/types/client/storage.d.ts +1 -1
  380. package/types/client/types.d.ts +0 -3
  381. package/types/common/CodeAgentClient.d.ts +20 -0
  382. package/types/common/CodeTranscript.d.ts +72 -0
  383. package/types/common/Logger.d.ts +4 -20
  384. package/types/common/TrustedProxy.d.ts +2 -28
  385. package/types/common/applyMixins.d.ts +3 -0
  386. package/types/common/authToken.d.ts +0 -11
  387. package/types/common/capitalize.d.ts +1 -1
  388. package/types/common/clamp.d.ts +0 -1
  389. package/types/common/clientAddress.d.ts +1 -15
  390. package/types/common/codeAgentProfile.d.ts +115 -0
  391. package/types/common/codeAgentWire.d.ts +279 -0
  392. package/types/{server/routing → common}/eventStream.d.ts +0 -5
  393. package/types/common/fileUpload.d.ts +6 -11
  394. package/types/common/index.d.ts +20 -19
  395. package/types/common/interpolateTranslation.d.ts +1 -6
  396. package/types/common/isEmail.d.ts +0 -1
  397. package/types/common/isRecord.d.ts +1 -0
  398. package/types/common/isThenable.d.ts +0 -8
  399. package/types/common/logContext.d.ts +1 -1
  400. package/types/{ui/Agent → common}/markdownBlocks.d.ts +0 -3
  401. package/types/common/markdownSpans.d.ts +30 -0
  402. package/types/{ui/Agent → common}/markdownTable.d.ts +0 -2
  403. package/types/common/mcpExposure.d.ts +3 -23
  404. package/types/common/objectPath.d.ts +10 -0
  405. package/types/common/objectify.d.ts +7 -0
  406. package/types/common/phone.d.ts +2 -0
  407. package/types/common/randomPick.d.ts +1 -0
  408. package/types/common/requestOrigin.d.ts +0 -17
  409. package/types/common/restClient.d.ts +0 -7
  410. package/types/common/round.d.ts +1 -0
  411. package/types/common/routeConvention.d.ts +2 -5
  412. package/types/common/sleep.d.ts +0 -1
  413. package/types/common/subRoute.d.ts +4 -6
  414. package/types/common/toError.d.ts +1 -0
  415. package/types/common/tunnelWire.d.ts +161 -0
  416. package/types/common/types.d.ts +7 -7
  417. package/types/common/version.d.ts +6 -0
  418. package/types/common/websocketContract.d.ts +41 -0
  419. package/types/constant/cascadePaths.d.ts +2 -5
  420. package/types/constant/constantRegistry.d.ts +4 -4
  421. package/types/constant/dateSlot.d.ts +0 -5
  422. package/types/constant/fieldInfo.d.ts +2 -21
  423. package/types/constant/fieldQueryMeta.d.ts +2 -10
  424. package/types/constant/getDefault.d.ts +5 -7
  425. package/types/constant/hydrationPlan.d.ts +0 -8
  426. package/types/constant/index.d.ts +0 -1
  427. package/types/constant/labelOf.d.ts +1 -6
  428. package/types/constant/mask.d.ts +11 -36
  429. package/types/constant/serialize.d.ts +10 -2
  430. package/types/constant/types.d.ts +2 -6
  431. package/types/constant/via.d.ts +0 -1
  432. package/types/dictionary/DictionaryLookup.d.ts +1 -7
  433. package/types/dictionary/agent.dictionary.d.ts +2 -1
  434. package/types/dictionary/base.dictionary.d.ts +1 -1
  435. package/types/dictionary/dictInfo.d.ts +25 -92
  436. package/types/dictionary/dictShape.d.ts +26 -0
  437. package/types/dictionary/dictionary.d.ts +9 -9
  438. package/types/dictionary/dictionaryRegistry.d.ts +1 -15
  439. package/types/dictionary/locale.d.ts +9 -28
  440. package/types/dictionary/trans.d.ts +5 -14
  441. package/types/document/dataLoader.d.ts +2 -2
  442. package/types/document/database.d.ts +21 -14
  443. package/types/document/documentQuery.d.ts +6 -1
  444. package/types/document/documentSchema.d.ts +3 -7
  445. package/types/document/filterMeta.d.ts +3 -8
  446. package/types/document/index.d.ts +0 -1
  447. package/types/document/into.d.ts +3 -2
  448. package/types/document/loaderInfo.d.ts +9 -4
  449. package/types/document/noDocumentError.d.ts +2 -7
  450. package/types/document/queryEvaluator.d.ts +7 -24
  451. package/types/document/types.d.ts +0 -1
  452. package/types/fetch/client/fetchClient.d.ts +6 -9
  453. package/types/fetch/client/fetchHandle.d.ts +3 -11
  454. package/types/fetch/client/httpClient.d.ts +5 -1
  455. package/types/fetch/client/remoteError.d.ts +2 -8
  456. package/types/fetch/client/sliceInitHandle.d.ts +2 -5
  457. package/types/fetch/client/sliceQueryArgs.d.ts +3 -0
  458. package/types/fetch/client/wsClient.d.ts +10 -15
  459. package/types/fetch/fetchType/appliedReturn.type.d.ts +5 -23
  460. package/types/fetch/fetchType/buildFetch.type.d.ts +15 -1
  461. package/types/fetch/fetchType/index.d.ts +0 -1
  462. package/types/fetch/requestStorage.d.ts +3 -16
  463. package/types/fetch/types.d.ts +0 -1
  464. package/types/index.d.ts +30 -64
  465. package/types/server/akanApp.d.ts +5 -28
  466. package/types/server/akanAppHeaders.d.ts +0 -1
  467. package/types/server/akanOption.d.ts +12 -24
  468. package/types/server/akanServer.d.ts +16 -56
  469. package/types/server/animatedImage.d.ts +0 -6
  470. package/types/server/artifact/builderRpc.d.ts +7 -30
  471. package/types/server/artifact/index.d.ts +0 -1
  472. package/types/server/artifact/ipcTypes.d.ts +22 -29
  473. package/types/server/artifact/routeClientCache.d.ts +3 -11
  474. package/types/server/artifact/routeSeedIndexStore.d.ts +0 -16
  475. package/types/server/artifact/routesManifestStore.d.ts +1 -1
  476. package/types/server/binaryPubsub.d.ts +0 -8
  477. package/types/server/cachePolicy.d.ts +2 -21
  478. package/types/server/console.d.ts +3 -6
  479. package/types/server/consoleSession.d.ts +2 -2
  480. package/types/server/contentEncoding.d.ts +6 -14
  481. package/types/server/decorators.d.ts +0 -12
  482. package/types/server/devtools/constantSerializer.d.ts +1 -6
  483. package/types/server/devtools/depsSerializer.d.ts +1 -7
  484. package/types/server/devtools/devtoolsJson.d.ts +1 -7
  485. package/types/server/devtools/devtoolsRouter.d.ts +2 -11
  486. package/types/server/devtools/signalSerializer.d.ts +1 -9
  487. package/types/server/devtools/types.d.ts +0 -11
  488. package/types/server/di/diLifecycle.d.ts +0 -36
  489. package/types/server/di/predefinedAdaptor.d.ts +3 -2
  490. package/types/server/di/resolveHierarchy.d.ts +22 -5
  491. package/types/server/di/utils.d.ts +4 -17
  492. package/types/server/head.d.ts +9 -0
  493. package/types/server/hmr/devHmrController.d.ts +0 -2
  494. package/types/server/hmr/wsHub.d.ts +6 -1
  495. package/types/server/index.d.ts +1 -1
  496. package/types/server/lifecycle/portInUse.d.ts +1 -4
  497. package/types/server/lifecycle/runtimeDir.d.ts +0 -4
  498. package/types/server/lifecycle/shutdownManager.d.ts +0 -9
  499. package/types/server/logging/childOutputReader.d.ts +0 -12
  500. package/types/server/logging/hubFileSink.d.ts +1 -5
  501. package/types/server/logging/logControlSocket.d.ts +2 -7
  502. package/types/server/logging/logForwarder.d.ts +3 -15
  503. package/types/server/logging/logHub.d.ts +1 -15
  504. package/types/server/logging/logQuery.d.ts +3 -6
  505. package/types/server/logging/logStdoutWriter.d.ts +0 -6
  506. package/types/server/logging/logStreamRoute.d.ts +0 -9
  507. package/types/server/logging/logTailClient.d.ts +0 -5
  508. package/types/server/mcp/McpAuth.d.ts +3 -71
  509. package/types/server/mcp/McpDispatcher.d.ts +0 -23
  510. package/types/server/mcp/McpEventStream.d.ts +1 -12
  511. package/types/server/mcp/McpExecutionContext.d.ts +0 -33
  512. package/types/server/mcp/McpRateLimiter.d.ts +10 -13
  513. package/types/server/mcp/McpRouter.d.ts +1 -47
  514. package/types/server/mcp/PagePromptComposer.d.ts +1 -13
  515. package/types/server/memoryLimit.d.ts +1 -13
  516. package/types/server/oauth/OAuthAuthorize.d.ts +1 -6
  517. package/types/server/oauth/OAuthClientIdMetadata.d.ts +2 -26
  518. package/types/server/oauth/OAuthErrors.d.ts +0 -13
  519. package/types/server/oauth/OAuthMetadata.d.ts +1 -7
  520. package/types/server/oauth/OAuthPkce.d.ts +0 -1
  521. package/types/server/oauth/OAuthRedirect.d.ts +0 -9
  522. package/types/server/oauth/OAuthRegistration.d.ts +0 -1
  523. package/types/server/oauth/OAuthRevocation.d.ts +1 -11
  524. package/types/server/oauth/OAuthToken.d.ts +1 -13
  525. package/types/server/oauth/oauthTypes.d.ts +1 -2
  526. package/types/server/ops/ageEncryption.d.ts +19 -0
  527. package/types/server/ops/appInfo.d.ts +36 -0
  528. package/types/server/ops/opsCommand.d.ts +5 -0
  529. package/types/server/ops/opsRoute.d.ts +24 -0
  530. package/types/server/ops/opsToken.d.ts +26 -0
  531. package/types/server/ops/snapshotJobs.d.ts +24 -0
  532. package/types/server/ops/snapshotRestore.d.ts +24 -0
  533. package/types/server/ops/snapshotTypes.d.ts +45 -0
  534. package/types/server/ops/sqliteFiles.d.ts +5 -0
  535. package/types/server/ops/sqliteSnapshot.d.ts +32 -0
  536. package/types/server/processMetricsCollector.d.ts +3 -1
  537. package/types/server/proxy/hostBasePathWebProxy.d.ts +7 -1
  538. package/types/server/proxy/index.d.ts +2 -3
  539. package/types/server/proxy/localeWebProxy.d.ts +1 -1
  540. package/types/server/proxy/types.d.ts +5 -0
  541. package/types/server/proxy/webProxyRunner.d.ts +1 -0
  542. package/types/server/resolver/CascadeRunner.d.ts +0 -4
  543. package/types/server/resolver/database.resolver.d.ts +1 -1
  544. package/types/server/resolver/service.resolver.d.ts +2 -2
  545. package/types/server/resolver/signal.resolver.d.ts +1 -15
  546. package/types/server/routeElementComposer.d.ts +2 -8
  547. package/types/server/routeState.d.ts +1 -1
  548. package/types/server/routing/apiRouter.d.ts +2 -20
  549. package/types/server/routing/appWsData.d.ts +0 -26
  550. package/types/server/routing/soloAppRoutes.d.ts +2 -6
  551. package/types/server/rscClient.d.ts +0 -9
  552. package/types/server/rscClientFetch.d.ts +6 -6
  553. package/types/server/rscClientPatch.d.ts +1 -1
  554. package/types/server/rscHttp.d.ts +1 -0
  555. package/types/server/rscNavigationState.d.ts +3 -2
  556. package/types/server/rscPagePrompts.d.ts +0 -9
  557. package/types/server/rscWorkerCache.d.ts +41 -3
  558. package/types/server/rscWorkerHost.d.ts +5 -61
  559. package/types/server/ssrFromRscRenderer.d.ts +0 -12
  560. package/types/server/ssrTypes.d.ts +2 -29
  561. package/types/server/staticPath.d.ts +0 -16
  562. package/types/server/systemPageDocument.d.ts +8 -0
  563. package/types/server/systemPages.d.ts +2 -3
  564. package/types/server/tunnel/TunnelAgent.d.ts +29 -0
  565. package/types/server/tunnel/TunnelDataSocket.d.ts +22 -0
  566. package/types/server/tunnel/TunnelHttpStream.d.ts +10 -0
  567. package/types/server/tunnel/TunnelTcpStream.d.ts +11 -0
  568. package/types/server/tunnel/TunnelWebsocketStream.d.ts +10 -0
  569. package/types/server/tunnel/index.d.ts +6 -0
  570. package/types/server/tunnel/tunnelStream.d.ts +19 -0
  571. package/types/server/tunnel.d.ts +1 -0
  572. package/types/server/types.d.ts +2 -9
  573. package/types/server/webRouter.d.ts +2 -19
  574. package/types/service/agent.service.d.ts +16 -29
  575. package/types/service/injectInfo.d.ts +26 -15
  576. package/types/service/ipcTypes.d.ts +6 -0
  577. package/types/service/liveSyncHub.d.ts +4 -22
  578. package/types/service/predefinedAdaptor/anthropicLlm.d.ts +20 -29
  579. package/types/service/predefinedAdaptor/cache.adaptor.d.ts +42 -12
  580. package/types/service/predefinedAdaptor/database.adaptor.d.ts +20 -16
  581. package/types/service/predefinedAdaptor/documentTransfer.d.ts +15 -0
  582. package/types/service/predefinedAdaptor/index.d.ts +2 -1
  583. package/types/service/predefinedAdaptor/insightQuery.d.ts +7 -30
  584. package/types/service/predefinedAdaptor/llm.adaptor.d.ts +54 -54
  585. package/types/service/predefinedAdaptor/llmOverflow.d.ts +16 -0
  586. package/types/service/predefinedAdaptor/openaiDialect.d.ts +19 -29
  587. package/types/service/predefinedAdaptor/openaiLlm.d.ts +9 -14
  588. package/types/service/predefinedAdaptor/queue.adaptor.d.ts +12 -7
  589. package/types/service/predefinedAdaptor/schedule.adaptor.d.ts +7 -2
  590. package/types/service/predefinedAdaptor/searchIndex.d.ts +17 -47
  591. package/types/service/predefinedAdaptor/solidCache.adaptor.d.ts +15 -6
  592. package/types/service/predefinedAdaptor/solidPubsub.adaptor.d.ts +6 -4
  593. package/types/service/predefinedAdaptor/solidSqlite.d.ts +2 -1
  594. package/types/service/predefinedAdaptor/sql/PostgresInsightSession.d.ts +20 -0
  595. package/types/service/predefinedAdaptor/sql/QueryCompiler.d.ts +9 -11
  596. package/types/service/predefinedAdaptor/sql/SqlDocumentStore.d.ts +11 -25
  597. package/types/service/predefinedAdaptor/sql/SqliteInsightSession.d.ts +15 -0
  598. package/types/service/predefinedAdaptor/sql/UpdateCompiler.d.ts +0 -4
  599. package/types/service/predefinedAdaptor/sql/dialect/postgres.d.ts +18 -10
  600. package/types/service/predefinedAdaptor/sql/dialect/sqlite.d.ts +5 -2
  601. package/types/service/predefinedAdaptor/sql/driver/bunSqlite.d.ts +9 -3
  602. package/types/service/predefinedAdaptor/sql/driver/libsql.d.ts +8 -5
  603. package/types/service/predefinedAdaptor/sql/driver/postgres.d.ts +4 -4
  604. package/types/service/predefinedAdaptor/sql/search/fts5.d.ts +28 -0
  605. package/types/service/predefinedAdaptor/sql/search/mirror.d.ts +20 -0
  606. package/types/service/predefinedAdaptor/sql/search/postgres.d.ts +53 -0
  607. package/types/service/predefinedAdaptor/sql/search/types.d.ts +45 -0
  608. package/types/service/predefinedAdaptor/sql/types.d.ts +69 -15
  609. package/types/service/predefinedAdaptor/sql/values.d.ts +8 -0
  610. package/types/service/predefinedAdaptor/sqlitePath.d.ts +1 -0
  611. package/types/service/predefinedAdaptor/sseData.d.ts +1 -0
  612. package/types/service/predefinedAdaptor/storage.adaptor.d.ts +3 -2
  613. package/types/service/predefinedAdaptor/websocket.adaptor.d.ts +26 -26
  614. package/types/service/serviceModule.d.ts +7 -7
  615. package/types/service/toolNames.d.ts +4 -21
  616. package/types/service/types.d.ts +3 -3
  617. package/types/signal/CrossSiteGuard.d.ts +3 -28
  618. package/types/signal/SignalFailure.d.ts +1 -15
  619. package/types/signal/agent/AgentCatalogue.d.ts +8 -54
  620. package/types/signal/agent.signal.d.ts +4 -1
  621. package/types/signal/agentMeter.d.ts +24 -0
  622. package/types/signal/agentTurnStream.d.ts +10 -11
  623. package/types/signal/endpoint.d.ts +0 -1
  624. package/types/signal/endpointCache.d.ts +5 -0
  625. package/types/signal/endpointInfo.d.ts +1 -9
  626. package/types/signal/exception.d.ts +1 -34
  627. package/types/signal/guard.d.ts +4 -15
  628. package/types/signal/guards.d.ts +2 -10
  629. package/types/signal/index.d.ts +1 -0
  630. package/types/signal/internal.d.ts +1 -5
  631. package/types/signal/internalArg.d.ts +7 -13
  632. package/types/signal/mcp/McpDocument.d.ts +5 -45
  633. package/types/signal/mcp/McpProgress.d.ts +6 -19
  634. package/types/signal/mcp/McpUriTemplate.d.ts +1 -19
  635. package/types/signal/mcp/Msg.d.ts +13 -70
  636. package/types/signal/mcp/mcpProtocol.d.ts +1 -26
  637. package/types/signal/mcp/pagePrompt.d.ts +3 -9
  638. package/types/signal/middleware.d.ts +0 -18
  639. package/types/signal/schema/JsonSchemaBuilder.d.ts +15 -43
  640. package/types/signal/serializer/fetch.serializer.d.ts +1 -6
  641. package/types/signal/serverSignal.d.ts +0 -1
  642. package/types/signal/signalContext.d.ts +14 -61
  643. package/types/signal/signalRegistry.d.ts +0 -1
  644. package/types/signal/slice.d.ts +3 -9
  645. package/types/signal/sliceInfo.d.ts +5 -30
  646. package/types/signal/trace.d.ts +2 -30
  647. package/types/signal/types.d.ts +27 -57
  648. package/types/store/SliceRequest.d.ts +1 -11
  649. package/types/store/action.d.ts +2 -6
  650. package/types/store/actionTag.d.ts +1 -10
  651. package/types/store/agent/AgentBridge.d.ts +3 -22
  652. package/types/store/agent/AgentContext.d.ts +1 -7
  653. package/types/store/agent/AgentCursor.d.ts +24 -0
  654. package/types/store/agent/AgentPrompts.d.ts +0 -5
  655. package/types/store/agent/AgentVisual.d.ts +25 -0
  656. package/types/store/agent/ScreenFlash.d.ts +23 -0
  657. package/types/store/agent/ScreenReader.d.ts +3 -26
  658. package/types/store/agent/ScreenSettle.d.ts +1 -12
  659. package/types/store/agent/ScreenTarget.d.ts +3 -23
  660. package/types/store/agent/StoreCatalogue.d.ts +12 -16
  661. package/types/store/agent/StoreSurfaceSource.d.ts +11 -23
  662. package/types/store/agent/index.d.ts +4 -3
  663. package/types/store/agentic/AgentValue.d.ts +3 -23
  664. package/types/store/agentic/StExposeBuilder.d.ts +2 -11
  665. package/types/store/agentic/StExposeDraft.d.ts +0 -6
  666. package/types/store/agentic/StStateBuilder.d.ts +1 -7
  667. package/types/store/agentic/StStateDraft.d.ts +0 -5
  668. package/types/store/agentic/StToolBuilder.d.ts +14 -37
  669. package/types/store/agentic/StToolDraft.d.ts +0 -7
  670. package/types/store/agentic/attachAgentic.d.ts +2 -10
  671. package/types/store/agentic/formFields.d.ts +5 -41
  672. package/types/store/agentic/index.d.ts +1 -1
  673. package/types/store/agentic/useAgentReference.d.ts +14 -0
  674. package/types/store/agentic/useFieldTool.d.ts +19 -16
  675. package/types/store/agentic/useFormTools.d.ts +1 -18
  676. package/types/store/agentic/useRelationFieldTool.d.ts +1 -14
  677. package/types/store/baseSt.d.ts +2 -2
  678. package/types/store/databaseStateNames.d.ts +0 -9
  679. package/types/store/draftStore.d.ts +4 -30
  680. package/types/store/formSetterNames.d.ts +0 -19
  681. package/types/store/hooks.d.ts +1 -1
  682. package/types/store/liveInsert.d.ts +0 -23
  683. package/types/store/sliceKeys.d.ts +31 -0
  684. package/types/store/sliceRole.d.ts +1 -10
  685. package/types/store/state.d.ts +2 -9
  686. package/types/store/stateBuilder.d.ts +0 -14
  687. package/types/store/storeInstance.d.ts +6 -20
  688. package/types/store/storeRegistry.d.ts +0 -2
  689. package/types/test/conformance.d.ts +73 -0
  690. package/types/test/index.d.ts +2 -2
  691. package/types/test/sampleOf.d.ts +17 -2
  692. package/types/test/signalTestRuntime.d.ts +1 -1
  693. package/types/test/testServer.d.ts +4 -3
  694. package/types/ui/Agent/Attach.d.ts +2 -2
  695. package/types/ui/Agent/Bubble.d.ts +3 -14
  696. package/types/ui/Agent/Chat.d.ts +31 -64
  697. package/types/ui/Agent/ChatCommands.d.ts +4 -14
  698. package/types/ui/Agent/Composer.d.ts +18 -5
  699. package/types/ui/Agent/Dock.d.ts +38 -10
  700. package/types/ui/Agent/Guide.d.ts +1 -5
  701. package/types/ui/Agent/History.d.ts +1 -18
  702. package/types/ui/Agent/Launcher.d.ts +2 -2
  703. package/types/ui/Agent/Markdown.d.ts +2 -6
  704. package/types/ui/Agent/MentionNode.d.ts +18 -0
  705. package/types/ui/Agent/Menu.d.ts +4 -4
  706. package/types/ui/Agent/Question.d.ts +1 -6
  707. package/types/ui/Agent/Queued.d.ts +1 -6
  708. package/types/ui/Agent/Refer.d.ts +9 -0
  709. package/types/ui/Agent/RichInput.d.ts +14 -0
  710. package/types/ui/Agent/Skip.d.ts +3 -15
  711. package/types/ui/Agent/Steps.d.ts +17 -0
  712. package/types/ui/Agent/ToolCard.d.ts +9 -0
  713. package/types/ui/Agent/Zone.d.ts +13 -30
  714. package/types/ui/Agent/agentSessionOf.d.ts +20 -16
  715. package/types/ui/Agent/attachment.d.ts +4 -38
  716. package/types/ui/Agent/fetchRunner.d.ts +1 -8
  717. package/types/ui/Agent/index.d.ts +2 -6
  718. package/types/ui/Agent/mentionDraft.d.ts +9 -0
  719. package/types/ui/Agent/tokenCount.d.ts +1 -5
  720. package/types/ui/Agent/useChatAttachments.d.ts +0 -5
  721. package/types/ui/Agent/useChatQueue.d.ts +3 -14
  722. package/types/ui/Agent/useChatReferences.d.ts +15 -0
  723. package/types/ui/Agent/useChatVoice.d.ts +0 -12
  724. package/types/ui/Agent/useDraftRecall.d.ts +0 -8
  725. package/types/ui/Agent/useKeyboardInset.d.ts +0 -7
  726. package/types/ui/Agent/useReferenceMenu.d.ts +35 -0
  727. package/types/ui/Agent/useSlashMenu.d.ts +0 -2
  728. package/types/ui/Agent/voice.d.ts +8 -42
  729. package/types/ui/Badge.d.ts +0 -1
  730. package/types/ui/BottomSheet.d.ts +2 -5
  731. package/types/ui/Button.d.ts +6 -23
  732. package/types/ui/ClientSide.d.ts +0 -2
  733. package/types/ui/Constant/schemaGraph.d.ts +0 -4
  734. package/types/ui/Copy.d.ts +2 -3
  735. package/types/ui/CsrImage.d.ts +2 -1
  736. package/types/ui/Data/Dashboard.d.ts +1 -4
  737. package/types/ui/Data/Item.d.ts +1 -1
  738. package/types/ui/Data/ListContainer.d.ts +1 -10
  739. package/types/ui/Data/Pagination.d.ts +0 -2
  740. package/types/ui/Data/QueryMaker.d.ts +0 -7
  741. package/types/ui/Data/RefPicker.d.ts +0 -7
  742. package/types/ui/DatePicker.d.ts +0 -11
  743. package/types/ui/Dialog/LegacyModal.d.ts +1 -4
  744. package/types/ui/Dialog/Provider.d.ts +37 -4
  745. package/types/ui/Dialog/index.d.ts +4 -4
  746. package/types/ui/Dropdown.d.ts +1 -9
  747. package/types/ui/Empty.d.ts +3 -10
  748. package/types/ui/Field/Collection.d.ts +1 -16
  749. package/types/ui/Field/Relation.d.ts +10 -37
  750. package/types/ui/Field/Text.d.ts +9 -66
  751. package/types/ui/Field/index.d.ts +0 -9
  752. package/types/ui/Field/lightRefCache.d.ts +11 -0
  753. package/types/ui/Field/useRelationOptions.d.ts +28 -0
  754. package/types/ui/Image.d.ts +8 -12
  755. package/types/ui/InfiniteScroll.d.ts +2 -6
  756. package/types/ui/Input.d.ts +8 -15
  757. package/types/ui/Layout/Role.d.ts +23 -0
  758. package/types/ui/Layout/Sider.d.ts +21 -0
  759. package/types/ui/Layout/TopInset.d.ts +5 -0
  760. package/types/ui/Layout/index.d.ts +7 -7
  761. package/types/ui/LegacyModal.d.ts +1 -12
  762. package/types/ui/Link/Action.d.ts +11 -0
  763. package/types/ui/Link/Anchor.d.ts +20 -0
  764. package/types/ui/Link/index.d.ts +4 -7
  765. package/types/ui/Load/Edit_Client.d.ts +1 -1
  766. package/types/ui/Load/Page.d.ts +3 -5
  767. package/types/ui/Load/Stream.d.ts +0 -12
  768. package/types/ui/Load/Units.d.ts +1 -1
  769. package/types/ui/Load/View.d.ts +2 -7
  770. package/types/ui/Loading/ProgressBar.d.ts +0 -4
  771. package/types/ui/Loading/Skeleton.d.ts +2 -0
  772. package/types/ui/Loading/Spin.d.ts +12 -2
  773. package/types/ui/Loading/index.d.ts +3 -8
  774. package/types/ui/Loading/index_.d.ts +3 -10
  775. package/types/ui/Menu.d.ts +0 -5
  776. package/types/ui/Modal.d.ts +0 -17
  777. package/types/ui/Model/AdminPanel.d.ts +1 -4
  778. package/types/ui/Model/DraftBar.d.ts +2 -7
  779. package/types/ui/Model/EditModal.d.ts +7 -22
  780. package/types/ui/Model/LoadStore.d.ts +18 -0
  781. package/types/ui/Model/Remove.d.ts +0 -2
  782. package/types/ui/Model/SureToRemove.d.ts +0 -3
  783. package/types/ui/Model/ViewEditModal.d.ts +0 -2
  784. package/types/ui/Model/draftScope.d.ts +0 -7
  785. package/types/ui/Model/index.d.ts +2 -2
  786. package/types/ui/Model/index_.d.ts +2 -2
  787. package/types/ui/Pagination.d.ts +4 -12
  788. package/types/ui/Popconfirm.d.ts +3 -17
  789. package/types/ui/Radio.d.ts +0 -4
  790. package/types/ui/RecentTime.d.ts +5 -9
  791. package/types/ui/Reference/Panel.d.ts +44 -6
  792. package/types/ui/Reference/Segmented.d.ts +0 -3
  793. package/types/ui/Reference/{style.d.ts → docUi.d.ts} +6 -2
  794. package/types/ui/Reference/index.d.ts +3 -7
  795. package/types/ui/Refresh.d.ts +1 -1
  796. package/types/ui/ScreenNavigator.d.ts +2 -2
  797. package/types/ui/Select.d.ts +4 -19
  798. package/types/ui/Signal/Endpoint.d.ts +43 -0
  799. package/types/ui/Signal/WebSocket.d.ts +23 -0
  800. package/types/ui/Signal/endpointEntries.d.ts +2 -4
  801. package/types/ui/Signal/index.d.ts +1 -3
  802. package/types/ui/Signal/style.d.ts +1 -2
  803. package/types/ui/Switch.d.ts +1 -5
  804. package/types/ui/System/CSR.d.ts +2 -2
  805. package/types/ui/System/Client.d.ts +2 -6
  806. package/types/ui/System/Common.d.ts +11 -22
  807. package/types/ui/System/Root.d.ts +1 -4
  808. package/types/ui/System/SSR.d.ts +2 -2
  809. package/types/ui/System/ThemeToggle.d.ts +1 -0
  810. package/types/ui/System/index.d.ts +1 -0
  811. package/types/ui/Tab/Provider.d.ts +24 -4
  812. package/types/ui/Tab/index.d.ts +3 -3
  813. package/types/ui/Table.d.ts +7 -23
  814. package/types/ui/Toast.d.ts +9 -16
  815. package/types/ui/ToggleSelect.d.ts +0 -5
  816. package/types/ui/Tooltip.d.ts +1 -2
  817. package/types/ui/UiOverride/{context.d.ts → UiOverride.d.ts} +24 -40
  818. package/types/ui/UiOverride/index.d.ts +2 -5
  819. package/types/ui/UiOverride/override.d.ts +2 -18
  820. package/types/ui/Unauthorized.d.ts +0 -6
  821. package/types/ui/agentAttrs.d.ts +4 -11
  822. package/types/ui/index.d.ts +9 -5
  823. package/types/ui/overlayLayer.d.ts +4 -24
  824. package/types/ui/overlayPosition.d.ts +0 -12
  825. package/types/ui/recipe/badgeRecipe.d.ts +2 -2
  826. package/types/ui/recipe/buttonRecipe.d.ts +2 -2
  827. package/types/ui/recipe/factory.d.ts +1 -21
  828. package/types/ui/recipe/index.d.ts +0 -14
  829. package/types/ui/recipe/inputRecipe.d.ts +3 -3
  830. package/types/ui/sliceNamesOf.d.ts +78 -0
  831. package/types/ui/triggerSlot.d.ts +2 -12
  832. package/types/vendor/use-agentic/AgentProgress.d.ts +12 -0
  833. package/types/vendor/use-agentic/AgentSession.d.ts +94 -2
  834. package/types/vendor/use-agentic/Compaction.d.ts +42 -5
  835. package/types/vendor/use-agentic/Reference.d.ts +56 -0
  836. package/types/vendor/use-agentic/ToolRunner.d.ts +31 -1
  837. package/types/vendor/use-agentic/Transcript.d.ts +4 -1
  838. package/types/vendor/use-agentic/index.d.ts +1 -0
  839. package/types/vendor/use-agentic/types.d.ts +109 -7
  840. package/types/webkit/RenderLayer.d.ts +11 -0
  841. package/types/webkit/index.d.ts +1 -2
  842. package/types/webkit/lazy.d.ts +3 -12
  843. package/types/webkit/{createRobotPage.d.ts → seoPages.d.ts} +4 -0
  844. package/types/webkit/useBodyScrollLock.d.ts +0 -1
  845. package/types/webkit/useCamera.d.ts +1 -1
  846. package/types/webkit/useContact.d.ts +1 -1
  847. package/types/webkit/useDebounce.d.ts +0 -1
  848. package/types/webkit/useEscapeKey.d.ts +1 -4
  849. package/types/webkit/useFetch.d.ts +1 -6
  850. package/types/webkit/useFrameRuntime.d.ts +1 -1
  851. package/types/webkit/useGeoLocation.d.ts +1 -1
  852. package/types/webkit/usePageTool.d.ts +2 -9
  853. package/types/webkit/usePurchase.d.ts +1 -4
  854. package/types/webkit/useScreenScope.d.ts +2 -13
  855. package/ui/Agent/Attach.tsx +5 -4
  856. package/ui/Agent/Bubble.tsx +51 -31
  857. package/ui/Agent/Chat.tsx +114 -102
  858. package/ui/Agent/ChatCommands.ts +5 -21
  859. package/ui/Agent/Composer.tsx +110 -28
  860. package/ui/Agent/Dock.tsx +176 -16
  861. package/ui/Agent/Guide.tsx +1 -5
  862. package/ui/Agent/History.tsx +1 -18
  863. package/ui/Agent/Launcher.tsx +2 -2
  864. package/ui/Agent/Markdown.tsx +40 -14
  865. package/ui/Agent/MentionNode.ts +54 -0
  866. package/ui/Agent/Menu.tsx +8 -5
  867. package/ui/Agent/Question.tsx +1 -6
  868. package/ui/Agent/Queued.tsx +3 -6
  869. package/ui/Agent/Refer.tsx +40 -0
  870. package/ui/Agent/RichInput.tsx +146 -0
  871. package/ui/Agent/Skip.tsx +3 -15
  872. package/ui/Agent/Steps.tsx +33 -0
  873. package/ui/Agent/ToolCard.tsx +32 -0
  874. package/ui/Agent/Zone.tsx +15 -31
  875. package/ui/Agent/agentSessionOf.ts +115 -15
  876. package/ui/Agent/attachment.ts +5 -42
  877. package/ui/Agent/fetchRunner.ts +3 -15
  878. package/ui/Agent/index.ts +1 -6
  879. package/ui/Agent/mentionDraft.ts +91 -0
  880. package/ui/Agent/tokenCount.ts +1 -5
  881. package/ui/Agent/useChatAttachments.ts +2 -9
  882. package/ui/Agent/useChatQueue.ts +12 -14
  883. package/ui/Agent/useChatReferences.ts +51 -0
  884. package/ui/Agent/useChatVoice.ts +2 -23
  885. package/ui/Agent/useDraftRecall.ts +0 -9
  886. package/ui/Agent/useKeyboardInset.ts +0 -7
  887. package/ui/Agent/useReferenceMenu.ts +93 -0
  888. package/ui/Agent/useSlashMenu.ts +0 -3
  889. package/ui/Agent/voice.ts +8 -43
  890. package/ui/Badge.tsx +0 -2
  891. package/ui/BottomSheet.tsx +2 -5
  892. package/ui/Button.tsx +9 -45
  893. package/ui/ClientSide.tsx +0 -2
  894. package/ui/Clipboard.tsx +0 -1
  895. package/ui/Constant/Doc.tsx +274 -265
  896. package/ui/Constant/Graph.tsx +11 -3
  897. package/ui/Constant/schemaGraph.ts +0 -9
  898. package/ui/Copy.tsx +2 -3
  899. package/ui/CsrImage.tsx +9 -9
  900. package/ui/Data/CardList.tsx +2 -17
  901. package/ui/Data/Dashboard.tsx +2 -5
  902. package/ui/Data/Item.tsx +2 -3
  903. package/ui/Data/ListContainer.tsx +15 -61
  904. package/ui/Data/Pagination.tsx +3 -22
  905. package/ui/Data/QueryMaker.tsx +1 -8
  906. package/ui/Data/RefPicker.tsx +1 -8
  907. package/ui/Data/TableList.tsx +2 -15
  908. package/ui/DatePicker.tsx +1 -12
  909. package/ui/Dialog/LegacyModal.tsx +3 -7
  910. package/ui/Dialog/Modal.tsx +3 -4
  911. package/ui/Dialog/Provider.tsx +85 -7
  912. package/ui/Dialog/index.tsx +1 -5
  913. package/ui/DraggableList.tsx +1 -4
  914. package/ui/Dropdown.tsx +4 -17
  915. package/ui/Empty.tsx +4 -12
  916. package/ui/Field/Choice.tsx +1 -1
  917. package/ui/Field/Collection.tsx +7 -29
  918. package/ui/Field/DateField.tsx +2 -7
  919. package/ui/Field/Label.tsx +0 -1
  920. package/ui/Field/NumberField.tsx +0 -1
  921. package/ui/Field/Relation.tsx +79 -199
  922. package/ui/Field/Text.tsx +25 -86
  923. package/ui/Field/index.tsx +0 -9
  924. package/ui/Field/lightRefCache.ts +61 -0
  925. package/ui/Field/useRelationOptions.ts +97 -0
  926. package/ui/Image.tsx +35 -65
  927. package/ui/InfiniteScroll.tsx +3 -21
  928. package/ui/Input.tsx +82 -174
  929. package/ui/Layout/Role.tsx +42 -0
  930. package/ui/Layout/Sider.tsx +82 -1
  931. package/ui/Layout/TopInset.tsx +23 -1
  932. package/ui/Layout/index.ts +3 -9
  933. package/ui/LegacyModal.tsx +1 -12
  934. package/ui/Link/Action.tsx +29 -0
  935. package/ui/Link/Anchor.tsx +118 -0
  936. package/ui/Link/index.tsx +7 -8
  937. package/ui/Load/Edit_Client.tsx +2 -37
  938. package/ui/Load/Page.tsx +3 -6
  939. package/ui/Load/Pagination.tsx +4 -19
  940. package/ui/Load/Stream.tsx +0 -12
  941. package/ui/Load/Units.tsx +13 -86
  942. package/ui/Load/View.tsx +4 -21
  943. package/ui/Loading/ProgressBar.tsx +0 -4
  944. package/ui/Loading/Skeleton.tsx +14 -0
  945. package/ui/Loading/Spin.tsx +34 -5
  946. package/ui/Loading/index.ts +0 -5
  947. package/ui/Loading/index_.tsx +2 -12
  948. package/ui/Menu.tsx +3 -21
  949. package/ui/Modal.tsx +0 -17
  950. package/ui/Model/AdminPanel.tsx +2 -5
  951. package/ui/Model/DraftBar.tsx +3 -14
  952. package/ui/Model/EditModal.tsx +11 -48
  953. package/ui/Model/EditWrapper.tsx +2 -3
  954. package/ui/Model/LoadStore.tsx +18 -0
  955. package/ui/Model/NewWrapper_Client.tsx +1 -1
  956. package/ui/Model/Remove.tsx +4 -12
  957. package/ui/Model/RemoveWrapper.tsx +2 -3
  958. package/ui/Model/SureToRemove.tsx +4 -13
  959. package/ui/Model/ViewEditModal.tsx +0 -6
  960. package/ui/Model/ViewModal.tsx +1 -5
  961. package/ui/Model/ViewWrapper.tsx +1 -2
  962. package/ui/Model/draftScope.ts +0 -7
  963. package/ui/Model/index_.tsx +2 -22
  964. package/ui/Pagination.tsx +4 -12
  965. package/ui/Popconfirm.tsx +3 -18
  966. package/ui/Portal.tsx +2 -3
  967. package/ui/Radio.tsx +1 -5
  968. package/ui/RecentTime.tsx +19 -31
  969. package/ui/Reference/Panel.tsx +102 -6
  970. package/ui/Reference/Segmented.tsx +5 -11
  971. package/ui/Reference/{style.ts → docUi.ts} +10 -2
  972. package/ui/Reference/index.ts +3 -7
  973. package/ui/Refresh.tsx +79 -13
  974. package/ui/ScreenNavigator.tsx +8 -13
  975. package/ui/Select.tsx +29 -37
  976. package/ui/Signal/Endpoint.tsx +154 -0
  977. package/ui/Signal/Listener.tsx +1 -4
  978. package/ui/Signal/Object.tsx +67 -73
  979. package/ui/Signal/RestApi.tsx +30 -76
  980. package/ui/Signal/WebSocket.tsx +253 -2
  981. package/ui/Signal/endpointEntries.ts +3 -5
  982. package/ui/Signal/index.ts +1 -3
  983. package/ui/Signal/style.ts +1 -2
  984. package/ui/Switch.tsx +1 -5
  985. package/ui/System/CSR.tsx +29 -109
  986. package/ui/System/Client.tsx +15 -19
  987. package/ui/System/Common.tsx +31 -22
  988. package/ui/System/Messages.tsx +2 -2
  989. package/ui/System/Reconnect.tsx +1 -6
  990. package/ui/System/Root.tsx +1 -4
  991. package/ui/System/SSR.tsx +10 -16
  992. package/ui/System/ThemeToggle.tsx +15 -0
  993. package/ui/System/index.tsx +2 -2
  994. package/ui/Tab/Provider.tsx +115 -7
  995. package/ui/Tab/index.tsx +1 -4
  996. package/ui/Table.tsx +7 -23
  997. package/ui/Toast.tsx +9 -16
  998. package/ui/ToggleSelect.tsx +10 -24
  999. package/ui/Tooltip.tsx +2 -8
  1000. package/ui/UiOverride/{context.ts → UiOverride.tsx} +54 -42
  1001. package/ui/UiOverride/index.ts +9 -6
  1002. package/ui/UiOverride/override.ts +2 -18
  1003. package/ui/Unauthorized.tsx +1 -8
  1004. package/ui/agentAttrs.ts +9 -12
  1005. package/ui/index.ts +20 -5
  1006. package/ui/overlayLayer.ts +4 -25
  1007. package/ui/overlayPosition.ts +2 -14
  1008. package/ui/recipe/badgeRecipe.ts +1 -1
  1009. package/ui/recipe/buttonRecipe.ts +4 -4
  1010. package/ui/recipe/factory.ts +1 -22
  1011. package/ui/recipe/index.ts +1 -14
  1012. package/ui/recipe/inputRecipe.ts +2 -2
  1013. package/ui/sliceNamesOf.ts +26 -0
  1014. package/ui/styles.css +195 -1
  1015. package/ui/triggerSlot.tsx +2 -12
  1016. package/vendor/use-agentic/AgentProgress.ts +13 -1
  1017. package/vendor/use-agentic/AgentSession.ts +313 -29
  1018. package/vendor/use-agentic/AgenticSurface.ts +2 -0
  1019. package/vendor/use-agentic/Compaction.ts +91 -9
  1020. package/vendor/use-agentic/Reference.ts +99 -0
  1021. package/vendor/use-agentic/ToolRunner.ts +77 -2
  1022. package/vendor/use-agentic/Transcript.ts +15 -4
  1023. package/vendor/use-agentic/WIRE.md +16 -2
  1024. package/vendor/use-agentic/httpRunner.ts +19 -4
  1025. package/vendor/use-agentic/index.ts +1 -1
  1026. package/vendor/use-agentic/types.ts +121 -10
  1027. package/webkit/RenderLayer.tsx +45 -0
  1028. package/webkit/bootCsr.tsx +4 -57
  1029. package/webkit/index.ts +1 -2
  1030. package/webkit/lazy.tsx +3 -13
  1031. package/webkit/{createRobotPage.ts → seoPages.ts} +5 -0
  1032. package/webkit/useBodyScrollLock.tsx +0 -6
  1033. package/webkit/useCamera.tsx +10 -28
  1034. package/webkit/useCodepush.tsx +8 -31
  1035. package/webkit/useContact.tsx +1 -8
  1036. package/webkit/useCsrValues.ts +203 -428
  1037. package/webkit/useDebounce.ts +0 -3
  1038. package/webkit/useEscapeKey.tsx +1 -12
  1039. package/webkit/useFetch.ts +7 -13
  1040. package/webkit/useFrameRuntime.ts +5 -43
  1041. package/webkit/useGeoLocation.tsx +1 -1
  1042. package/webkit/useLocation.ts +5 -8
  1043. package/webkit/usePageTool.tsx +2 -9
  1044. package/webkit/usePurchase.tsx +17 -33
  1045. package/webkit/useScreenScope.tsx +2 -13
  1046. package/client/fetch.ts +0 -1
  1047. package/client/frameDebug.ts +0 -29
  1048. package/common/deepObjectify.ts +0 -42
  1049. package/common/dynamicRecord.ts +0 -12
  1050. package/common/formatPhone.ts +0 -7
  1051. package/common/getAllPropertyDescriptors.ts +0 -13
  1052. package/common/lowerlize.ts +0 -4
  1053. package/common/mergeVersion.ts +0 -10
  1054. package/common/pathGet.ts +0 -13
  1055. package/common/pathGetLoose.ts +0 -31
  1056. package/common/pathSet.ts +0 -28
  1057. package/common/plainFieldsOf.ts +0 -13
  1058. package/common/randomPicks.ts +0 -12
  1059. package/common/websocketAuth.ts +0 -24
  1060. package/constant/deserialize.ts +0 -98
  1061. package/dictionary/agentTurn.dictionary.ts +0 -33
  1062. package/document/schema.ts +0 -24
  1063. package/fetch/fetchType/clientSignal.type.ts +0 -22
  1064. package/local/apps/akan/akan-local.db +0 -0
  1065. package/local/apps/akan/akan-local.db-shm +0 -0
  1066. package/local/apps/akan/akan-local.db-wal +0 -0
  1067. package/local/apps/akan/akan-local_solid.db +0 -0
  1068. package/local/apps/akan/akan-local_solid.db-shm +0 -0
  1069. package/local/apps/akan/akan-local_solid.db-wal +0 -0
  1070. package/local/apps/serverLifecycle/serverLifecycle-local.db +0 -0
  1071. package/local/apps/serverLifecycle/serverLifecycle-local.db-shm +0 -0
  1072. package/local/apps/serverLifecycle/serverLifecycle-local.db-wal +0 -0
  1073. package/local/apps/serverLifecycle/serverLifecycle-local_solid.db +0 -0
  1074. package/local/apps/serverLifecycle/serverLifecycle-local_solid.db-shm +0 -0
  1075. package/local/apps/serverLifecycle/serverLifecycle-local_solid.db-wal +0 -0
  1076. package/server/artifact/manifestTypes.ts +0 -19
  1077. package/server/assetEncoding.ts +0 -27
  1078. package/server/consoleEvaluator.ts +0 -51
  1079. package/server/di/index.ts +0 -4
  1080. package/server/di/resolveAdaptorHierarchy.ts +0 -91
  1081. package/server/di/resolveServiceHierarchy.ts +0 -47
  1082. package/server/hmr/changeBatch.ts +0 -14
  1083. package/server/hmr/index.ts +0 -4
  1084. package/server/metadata.tsx +0 -198
  1085. package/server/proxy/akanResponse.ts +0 -16
  1086. package/server/proxy/bunRequestFields.ts +0 -12
  1087. package/server/rscPartialCommit.ts +0 -3
  1088. package/server/rscPatchSafety.ts +0 -57
  1089. package/server/rscWorkerReplay.ts +0 -49
  1090. package/server/subRouteIndexDocument.tsx +0 -61
  1091. package/service/predefinedAdaptor/deepseekLlm.ts +0 -82
  1092. package/service/predefinedAdaptor/sqlDescriptor.ts +0 -25
  1093. package/store/agent/storeSurface.ts +0 -28
  1094. package/store/agent/types.ts +0 -16
  1095. package/store/agentic/useFileFieldTool.ts +0 -221
  1096. package/store/stateInfo.ts +0 -66
  1097. package/test/playwright.config.base.ts +0 -48
  1098. package/test/playwright.pageAgent.ts +0 -41
  1099. package/test/sample.ts +0 -19
  1100. package/types/client/fetch.d.ts +0 -1
  1101. package/types/client/frameDebug.d.ts +0 -3
  1102. package/types/common/deepObjectify.d.ts +0 -6
  1103. package/types/common/dynamicRecord.d.ts +0 -14
  1104. package/types/common/formatPhone.d.ts +0 -2
  1105. package/types/common/getAllPropertyDescriptors.d.ts +0 -5
  1106. package/types/common/isPhoneNumber.d.ts +0 -2
  1107. package/types/common/lowerlize.d.ts +0 -2
  1108. package/types/common/mergeVersion.d.ts +0 -10
  1109. package/types/common/pathGet.d.ts +0 -1
  1110. package/types/common/pathGetLoose.d.ts +0 -8
  1111. package/types/common/pathSet.d.ts +0 -3
  1112. package/types/common/plainFieldsOf.d.ts +0 -6
  1113. package/types/common/randomPicks.d.ts +0 -1
  1114. package/types/common/splitVersion.d.ts +0 -11
  1115. package/types/common/websocketAuth.d.ts +0 -19
  1116. package/types/common/websocketBinaryFrame.d.ts +0 -17
  1117. package/types/constant/deserialize.d.ts +0 -10
  1118. package/types/dictionary/agentTurn.dictionary.d.ts +0 -1
  1119. package/types/document/schema.d.ts +0 -5
  1120. package/types/fetch/fetchType/clientSignal.type.d.ts +0 -16
  1121. package/types/server/artifact/manifestTypes.d.ts +0 -16
  1122. package/types/server/assetEncoding.d.ts +0 -7
  1123. package/types/server/consoleEvaluator.d.ts +0 -2
  1124. package/types/server/di/index.d.ts +0 -4
  1125. package/types/server/di/resolveAdaptorHierarchy.d.ts +0 -21
  1126. package/types/server/di/resolveServiceHierarchy.d.ts +0 -13
  1127. package/types/server/di.d.ts +0 -1
  1128. package/types/server/hmr/changeBatch.d.ts +0 -13
  1129. package/types/server/hmr/index.d.ts +0 -4
  1130. package/types/server/hmr.d.ts +0 -1
  1131. package/types/server/metadata.d.ts +0 -22
  1132. package/types/server/proxy/akanResponse.d.ts +0 -7
  1133. package/types/server/proxy/bunRequestFields.d.ts +0 -1
  1134. package/types/server/rscPartialCommit.d.ts +0 -1
  1135. package/types/server/rscPatchSafety.d.ts +0 -8
  1136. package/types/server/rscWorkerReplay.d.ts +0 -32
  1137. package/types/server/subRouteIndexDocument.d.ts +0 -8
  1138. package/types/service/predefinedAdaptor/deepseekLlm.d.ts +0 -19
  1139. package/types/service/predefinedAdaptor/sqlDescriptor.d.ts +0 -5
  1140. package/types/store/agent/storeSurface.d.ts +0 -14
  1141. package/types/store/agent/types.d.ts +0 -15
  1142. package/types/store/agentic/useFileFieldTool.d.ts +0 -41
  1143. package/types/store/stateInfo.d.ts +0 -23
  1144. package/types/test/playwright.config.base.d.ts +0 -9
  1145. package/types/test/playwright.pageAgent.d.ts +0 -12
  1146. package/types/test/sample.d.ts +0 -15
  1147. package/types/ui/Agent/Context.d.ts +0 -13
  1148. package/types/ui/Agent/Mic.d.ts +0 -8
  1149. package/types/ui/Agent/Section.d.ts +0 -10
  1150. package/types/ui/Agent/StateKey.d.ts +0 -16
  1151. package/types/ui/Agent/Tool.d.ts +0 -15
  1152. package/types/ui/Agent/Transcript.d.ts +0 -13
  1153. package/types/ui/Agent/markdownSpans.d.ts +0 -2
  1154. package/types/ui/Agent/sessionHistory.d.ts +0 -14
  1155. package/types/ui/Agent/sessionView.d.ts +0 -15
  1156. package/types/ui/Dialog/Action.d.ts +0 -5
  1157. package/types/ui/Dialog/Close.d.ts +0 -6
  1158. package/types/ui/Dialog/Content.d.ts +0 -6
  1159. package/types/ui/Dialog/Title.d.ts +0 -5
  1160. package/types/ui/Dialog/Trigger.d.ts +0 -6
  1161. package/types/ui/Dialog/context.d.ts +0 -18
  1162. package/types/ui/Layout/LeftSider.d.ts +0 -11
  1163. package/types/ui/Layout/RightSider.d.ts +0 -12
  1164. package/types/ui/Layout/Template.d.ts +0 -7
  1165. package/types/ui/Layout/TopLeftAction.d.ts +0 -6
  1166. package/types/ui/Layout/Unit.d.ts +0 -9
  1167. package/types/ui/Layout/View.d.ts +0 -8
  1168. package/types/ui/Layout/Zone.d.ts +0 -6
  1169. package/types/ui/Link/Back.d.ts +0 -7
  1170. package/types/ui/Link/Close.d.ts +0 -7
  1171. package/types/ui/Link/CsrLink.d.ts +0 -2
  1172. package/types/ui/Link/Lang.d.ts +0 -8
  1173. package/types/ui/Link/SsrLink.d.ts +0 -2
  1174. package/types/ui/Link/types.d.ts +0 -50
  1175. package/types/ui/Loading/Area.d.ts +0 -9
  1176. package/types/ui/Loading/Button.d.ts +0 -7
  1177. package/types/ui/Loading/Input.d.ts +0 -7
  1178. package/types/ui/Model/LoadInit.d.ts +0 -10
  1179. package/types/ui/Model/LoadView.d.ts +0 -10
  1180. package/types/ui/Reference/Collapse.d.ts +0 -11
  1181. package/types/ui/Reference/Summary.d.ts +0 -13
  1182. package/types/ui/Reference/Toolbar.d.ts +0 -21
  1183. package/types/ui/Reference/dictText.d.ts +0 -6
  1184. package/types/ui/Signal/Message.d.ts +0 -23
  1185. package/types/ui/Signal/PubSub.d.ts +0 -24
  1186. package/types/ui/Signal/Request.d.ts +0 -8
  1187. package/types/ui/System/DevModeToggle.d.ts +0 -1
  1188. package/types/ui/System/Gtag.d.ts +0 -4
  1189. package/types/ui/System/frameCssVars.d.ts +0 -5
  1190. package/types/ui/Tab/Menu.d.ts +0 -12
  1191. package/types/ui/Tab/Menus.d.ts +0 -6
  1192. package/types/ui/Tab/Panel.d.ts +0 -8
  1193. package/types/ui/Tab/context.d.ts +0 -11
  1194. package/types/ui/UiOverride/Provider.d.ts +0 -15
  1195. package/types/ui/UiOverride/createOverridable.d.ts +0 -9
  1196. package/types/ui/UiOverride/useUiOverride.d.ts +0 -7
  1197. package/types/ui/UiOverride/useUiRecipe.d.ts +0 -8
  1198. package/types/webkit/createSitemapPage.d.ts +0 -4
  1199. package/ui/Agent/Context.tsx +0 -49
  1200. package/ui/Agent/Mic.tsx +0 -27
  1201. package/ui/Agent/Section.tsx +0 -24
  1202. package/ui/Agent/StateKey.tsx +0 -46
  1203. package/ui/Agent/Tool.tsx +0 -59
  1204. package/ui/Agent/Transcript.tsx +0 -33
  1205. package/ui/Agent/markdownSpans.tsx +0 -49
  1206. package/ui/Agent/sessionHistory.ts +0 -62
  1207. package/ui/Agent/sessionView.ts +0 -38
  1208. package/ui/Dialog/Action.tsx +0 -15
  1209. package/ui/Dialog/Close.tsx +0 -18
  1210. package/ui/Dialog/Content.tsx +0 -11
  1211. package/ui/Dialog/Title.tsx +0 -15
  1212. package/ui/Dialog/Trigger.tsx +0 -18
  1213. package/ui/Dialog/context.ts +0 -32
  1214. package/ui/Layout/LeftSider.tsx +0 -43
  1215. package/ui/Layout/RightSider.tsx +0 -47
  1216. package/ui/Layout/Template.tsx +0 -11
  1217. package/ui/Layout/TopLeftAction.tsx +0 -28
  1218. package/ui/Layout/Unit.tsx +0 -19
  1219. package/ui/Layout/View.tsx +0 -12
  1220. package/ui/Layout/Zone.tsx +0 -10
  1221. package/ui/Link/Back.tsx +0 -15
  1222. package/ui/Link/Close.tsx +0 -20
  1223. package/ui/Link/CsrLink.tsx +0 -46
  1224. package/ui/Link/Lang.tsx +0 -16
  1225. package/ui/Link/SsrLink.tsx +0 -72
  1226. package/ui/Link/types.ts +0 -55
  1227. package/ui/Loading/Area.tsx +0 -27
  1228. package/ui/Loading/Button.tsx +0 -15
  1229. package/ui/Loading/Input.tsx +0 -15
  1230. package/ui/Model/LoadInit.tsx +0 -11
  1231. package/ui/Model/LoadView.tsx +0 -11
  1232. package/ui/Reference/Collapse.tsx +0 -26
  1233. package/ui/Reference/Summary.tsx +0 -25
  1234. package/ui/Reference/Toolbar.tsx +0 -44
  1235. package/ui/Reference/dictText.ts +0 -9
  1236. package/ui/Signal/Message.tsx +0 -215
  1237. package/ui/Signal/PubSub.tsx +0 -201
  1238. package/ui/Signal/Request.tsx +0 -11
  1239. package/ui/System/DevModeToggle.tsx +0 -19
  1240. package/ui/System/Gtag.tsx +0 -69
  1241. package/ui/System/frameCssVars.ts +0 -25
  1242. package/ui/Tab/Menu.tsx +0 -70
  1243. package/ui/Tab/Menus.tsx +0 -13
  1244. package/ui/Tab/Panel.tsx +0 -25
  1245. package/ui/Tab/context.ts +0 -20
  1246. package/ui/UiOverride/Provider.tsx +0 -26
  1247. package/ui/UiOverride/createOverridable.tsx +0 -25
  1248. package/ui/UiOverride/useUiOverride.ts +0 -15
  1249. package/ui/UiOverride/useUiRecipe.ts +0 -15
  1250. package/webkit/createSitemapPage.ts +0 -4
package/server/akanApp.ts CHANGED
@@ -1,15 +1,13 @@
1
1
 
2
-
3
2
  import { mkdir, readdir, rm } from "node:fs/promises";
4
3
  import path from "node:path";
5
- import { Logger, logSeverity } from "akanjs/common";
4
+ import { Logger } from "akanjs/common";
6
5
  import type { AkanChildRole, AkanChildStatus, AkanIpcMessage, AkanMetricsReport, AkanUpstream } from "akanjs/service";
7
6
  import { getApiPrefix, getWsPrefix, normalizeRoutePrefix, resetEnvCache } from "../base/baseEnv";
8
7
  import { isTraceEnabled } from "../signal/trace";
9
8
  import { makeAkanChildProxyHeaders } from "./akanAppHeaders";
10
9
  import type { BuilderCsrReq, BuilderCsrRes, BuilderMessage, BuilderReq, BuilderRes } from "./artifact";
11
- import { resolveEncodedSidecar } from "./assetEncoding";
12
- import { compressResponse } from "./contentEncoding";
10
+ import { compressResponse, encodedFileResponse } from "./contentEncoding";
13
11
  import { isPortInUseError } from "./lifecycle/portInUse";
14
12
  import { resolveRuntimeDir } from "./lifecycle/runtimeDir";
15
13
  import { ChildOutputReader } from "./logging/childOutputReader";
@@ -18,6 +16,8 @@ import { LogControlSocket } from "./logging/logControlSocket";
18
16
  import { LogHub } from "./logging/logHub";
19
17
  import { LogStreamRoute } from "./logging/logStreamRoute";
20
18
  import { RotatingLogWriter } from "./logging/rotatingLogWriter";
19
+ import { AppInfo } from "./ops/appInfo";
20
+ import type { OpsRoute } from "./ops/opsRoute";
21
21
  import { ProcessMetricsCollector } from "./processMetricsCollector";
22
22
  import { resolveStaticPath } from "./staticPath";
23
23
  import { getWebConfigFromEnv } from "./types";
@@ -45,7 +45,6 @@ interface ChildState {
45
45
  lastErrorMessage?: string;
46
46
  }
47
47
 
48
- /** The shape `#startSolo` needs off `server.ts`; the module itself is loaded by path, so it has no type here. */
49
48
  interface SoloServer {
50
49
  start: (options: { listen: boolean }) => Promise<unknown>;
51
50
  }
@@ -60,20 +59,12 @@ type GatewayUpstream = {
60
59
  ws?: Extract<AkanUpstream, { type: "tcp" }>;
61
60
  };
62
61
 
63
- /**
64
- * Received-only close codes cannot be sent in a close frame. The gateway deliberately normalizes
65
- * every unsendable code, including semantically distinct 1005 and 1006 events, to 1001 in both
66
- * relay directions. In particular, Bun's global client `WebSocket.close()` throws an
67
- * InvalidAccessError for these codes at the client-to-upstream relay; normalization at the
68
- * upstream-to-client `Bun.ServerWebSocket.close()` relay is defensive and keeps behavior symmetric.
69
- */
70
62
  const relayableCloseCode = (code: number): number => {
71
63
  if (code >= 3000 && code <= 4999) return code;
72
64
  if (code >= 1000 && code <= 1014 && code !== 1004 && code !== 1005 && code !== 1006) return code;
73
65
  return 1001;
74
66
  };
75
67
 
76
- /** Options for the Akan gateway that launches child server replicas and listens for traffic. */
77
68
  export interface AkanAppOptions {
78
69
  replica?: number | string;
79
70
  serverPath?: string;
@@ -81,38 +72,17 @@ export interface AkanAppOptions {
81
72
  port?: number;
82
73
  wsBasePort?: number;
83
74
  openapi?: boolean;
84
- /**
85
- * Where the signal endpoints are mounted, `/api` by default. Handed down as `AKAN_API_PREFIX`, which every
86
- * server process reads — the replicas that build the route table, and the RSC worker, whose page-side
87
- * `fetch.*` calls travel over HTTP like any other client's. A server-rendered page also carries it to the
88
- * browser, so the tab's `fetchClient` follows the process that rendered it. A prebuilt CSR or mobile bundle
89
- * cannot be reached that way and follows `akan.config.ts` instead.
90
- */
75
+ /** Signal endpoint mount, `/api` by default; handed down as `AKAN_API_PREFIX` (CSR/mobile follow akan.config.ts). */
91
76
  prefix?: string;
92
77
  /** Where the websocket upgrade sits under `prefix`, `/ws` by default. Handed down as `AKAN_WS_PREFIX`. */
93
78
  websocketPrefix?: string;
94
- /**
95
- * Boot only these modules and the ones they reach, in every child. Omitted or empty mounts every enabled
96
- * module. Handed down as `AKAN_MODULES`, since each replica builds its own container.
97
- */
79
+ /** Boot only these modules and what they reach; omitted or empty mounts every enabled one. `AKAN_MODULES`. */
98
80
  modules?: string[];
99
- /**
100
- * The inverse of `modules`: mount everything except these and whatever reaches them, in every child. Written
101
- * for a lib the app depends on but does not serve — `server.ts` is generated from the dependency graph, so a
102
- * lib cannot be dropped by editing it. Handed down as `AKAN_DISABLE_MODULES`, and applied after `modules`.
103
- */
81
+ /** Mount all but these and whatever reaches them, applied after `modules`. `AKAN_DISABLE_MODULES`. */
104
82
  disableModules?: string[];
105
- /**
106
- * The same, by owning lib: every module the named libs registered stays out of every child, along with
107
- * everything that reaches one. Handed down as `AKAN_DISABLE_LIBS`.
108
- */
83
+ /** Like `disableModules`, by owning lib. `AKAN_DISABLE_LIBS`. */
109
84
  disableLibs?: string[];
110
- /**
111
- * Run the one replica in this process instead of spawning it — see `#startSolo`. Defaults on for a single
112
- * traffic replica the environment configured, and off whenever `replica` is passed here, because code that
113
- * states a topology is asking for the gateway that serves it. `AKAN_SOLO=false` turns it off; like
114
- * `AKAN_SSR`, the env can only narrow, so it cannot force a gateway's replicas into one process.
115
- */
85
+ /** In-process replica; default on for one env-set traffic replica, off if `replica` is passed or AKAN_SOLO=false. */
116
86
  solo?: boolean;
117
87
  }
118
88
 
@@ -124,16 +94,13 @@ interface AkanReplicaConfig {
124
94
  value: string;
125
95
  }
126
96
 
127
- /** Gateway/orchestrator that starts Akan child servers and proxies HTTP/WebSocket traffic. */
128
97
  export class AkanApp {
129
98
  static readonly #childRestartBaseDelayMs = 1_000;
130
99
  static readonly #childRestartMaxDelayMs = 30_000;
131
100
  static readonly #childRestartGraceMs = 5_000;
132
- /** In dev, stop restarting a replica that never boots after this many consecutive failures. */
133
101
  static readonly #devMaxChildBootFailures = 3;
134
102
 
135
103
  readonly logger = new Logger("AkanApp");
136
- /** Hosted by `akan start`: crash loops should yield to the dev host, which restarts on file edits. */
137
104
  readonly #devHosted = process.env.AKAN_COMMAND_TYPE === "start";
138
105
  readonly #healthTimeoutMs = AkanApp.#parseHealthTimeoutMs();
139
106
  readonly #upstreamWaitMs = AkanApp.#parseUpstreamWaitMs();
@@ -149,7 +116,6 @@ export class AkanApp {
149
116
  readonly #openapi?: boolean;
150
117
  readonly #prefix: string;
151
118
  readonly #websocketPrefix: string;
152
- /** The gateway hands `/_akan/client|styles|fonts` straight off disk, so it needs the same answer its children do. */
153
119
  readonly #web = getWebConfigFromEnv();
154
120
  readonly #modules: string[];
155
121
  readonly #disableModules: string[];
@@ -157,7 +123,7 @@ export class AkanApp {
157
123
  readonly #solo: boolean;
158
124
  readonly #children = new Map<number, ChildState>();
159
125
  readonly #roomChildren = new Map<string, Set<number>>();
160
- readonly #childRooms = new Map<number, Set<string>>();
126
+ readonly #childRooms = new Map<number, Map<string, Set<string>>>();
161
127
  readonly #socketRooms = new Map<string, { childIdx: number; rooms: Set<string> }>();
162
128
  #nextBuilderReqId = 1;
163
129
  readonly #builderReqMap = new Map<number, { childIdx: number; childLocalId: number }>();
@@ -168,11 +134,11 @@ export class AkanApp {
168
134
  #healthTimer: Timer | null = null;
169
135
  #metricsTimer: Timer | null = null;
170
136
  #logWriter: RotatingLogWriter | null = null;
171
- #removeLogSink: (() => void) | null = null;
137
+ #detachFileLog: (() => void) | null = null;
172
138
  #logHub: LogHub | null = null;
173
139
  #logControl: LogControlSocket | null = null;
174
- #hubFileSink: HubFileSink | null = null;
175
140
  #logStream: LogStreamRoute | null = null;
141
+ #ops: OpsRoute | null = null;
176
142
  static readonly #ansiPattern = new RegExp(`${String.fromCharCode(27)}\\[[0-?]*[ -/]*[@-~]`, "g");
177
143
  #gatewayMetrics: AkanMetricsReport = {};
178
144
  #proxyHopCount = 0;
@@ -201,15 +167,6 @@ export class AkanApp {
201
167
  this.#logHub = LogHub.attach();
202
168
  }
203
169
 
204
- /**
205
- * One replica that serves traffic means there is nothing to balance and nothing to fan pubsub out to, so the
206
- * gateway is a second Bun runtime and a proxy hop in front of the only server there is. Measured on
207
- * `apps/akan`: 28MB of RSS and half the requests per second.
208
- *
209
- * A batch-only replica is excluded because it never listens — keeping the gateway is what leaves something
210
- * bound to answer `/_akan/app/health`. `akan start` is excluded because the gateway is also the dev host's
211
- * builder relay, its crash page, and what holds the port across a child restart.
212
- */
213
170
  static #resolveSolo(options: AkanAppOptions, replica: AkanReplicaConfig) {
214
171
  if (options.solo !== undefined) return options.solo;
215
172
  if (process.env.AKAN_SOLO === "false" || process.env.AKAN_SOLO === "0") return false;
@@ -229,9 +186,9 @@ export class AkanApp {
229
186
  const configured = value ?? process.env.AKAN_REPLICA;
230
187
  const raw = String(configured ?? "0,0,1").trim();
231
188
  const [federationRaw, batchRaw, allRaw] = raw.split(",");
232
- const federation = AkanApp.#parseReplicaCount(federationRaw, configured == null ? 0 : 0, 0);
233
- const batch = AkanApp.#parseReplicaCount(batchRaw, configured == null ? 0 : 0, 0);
234
- const all = AkanApp.#parseReplicaCount(allRaw, configured == null ? 1 : 0, 0);
189
+ const federation = AkanApp.#parseReplicaCount(federationRaw, 0);
190
+ const batch = AkanApp.#parseReplicaCount(batchRaw, 0);
191
+ const all = AkanApp.#parseReplicaCount(allRaw, configured == null ? 1 : 0);
235
192
  const normalizedAll = federation + batch + all > 0 ? all : 1;
236
193
  return {
237
194
  federation,
@@ -242,18 +199,11 @@ export class AkanApp {
242
199
  };
243
200
  }
244
201
 
245
- static #parseReplicaCount(value: string | undefined, fallback: number, min: number) {
202
+ static #parseReplicaCount(value: string | undefined, fallback: number) {
246
203
  const parsed = Number.parseInt(value ?? "", 10);
247
- if (!Number.isFinite(parsed)) return fallback;
248
- return Math.max(min, parsed);
204
+ return Number.isFinite(parsed) ? Math.max(0, parsed) : fallback;
249
205
  }
250
206
 
251
- /**
252
- * The command that started this gateway outranks an inherited `NODE_ENV`: the command is a statement about
253
- * this run, while the env var can arrive from a shell export, a CI image, or the workspace `.env` Bun loads
254
- * on its own. Handing a dev child `NODE_ENV=production` makes it serve from the production route cache and
255
- * throw on every route, since only `akan build` writes the routes manifest that cache expects.
256
- */
257
207
  static #defaultChildNodeEnv() {
258
208
  if (process.env.AKAN_COMMAND_TYPE === "start") return "development";
259
209
  if (process.env.AKAN_COMMAND_TYPE === "build") return "production";
@@ -261,31 +211,18 @@ export class AkanApp {
261
211
  return Bun.main.endsWith(".js") ? "production" : "development";
262
212
  }
263
213
 
264
- /**
265
- * Dev builds and first-touch transpiles can stall a child's event loop well past the production
266
- * pong budget, so `akan start` runs with a wider timeout to avoid restarting healthy replicas.
267
- */
268
214
  static #parseHealthTimeoutMs() {
269
215
  const configured = Number(process.env.AKAN_HEALTH_TIMEOUT_MS);
270
216
  if (Number.isFinite(configured) && configured > 0) return configured;
271
217
  return process.env.AKAN_COMMAND_TYPE === "start" ? 15_000 : 5_000;
272
218
  }
273
219
 
274
- /**
275
- * How long a request waits for a replica that is booting or restarting before the gateway answers
276
- * 503. Dev pays first-touch transpiles on the boot path, so it gets the wider budget; `0` restores
277
- * the old fail-immediately behavior.
278
- */
279
220
  static #parseUpstreamWaitMs() {
280
221
  const configured = Number(process.env.AKAN_UPSTREAM_WAIT_MS);
281
222
  if (Number.isFinite(configured) && configured >= 0) return configured;
282
223
  return process.env.AKAN_COMMAND_TYPE === "start" ? 15_000 : 5_000;
283
224
  }
284
225
 
285
- /**
286
- * Must exceed the child's own shutdown timeout (see `AkanServer.#defaultShutdownTimeoutMs`) so
287
- * children always get to exit on their own before this gateway stops waiting.
288
- */
289
226
  static #childShutdownWaitMs() {
290
227
  const configured = Number(process.env.AKAN_CHILD_SHUTDOWN_WAIT_MS);
291
228
  if (Number.isFinite(configured) && configured > 0) return configured;
@@ -293,11 +230,16 @@ export class AkanApp {
293
230
  }
294
231
 
295
232
  async start() {
233
+ if (process.argv[2] === "ops") {
234
+ const { OpsCommand } = await import("./ops/opsCommand");
235
+ process.exit(await OpsCommand.run(process.argv.slice(3)));
236
+ }
296
237
  if (this.#solo) return await this.#startSolo();
297
238
  Logger.role = "gateway";
298
239
  await this.#prepareRuntimeDir();
299
240
  await this.#startLogHub();
300
241
  this.#startFileLogging();
242
+ await this.#startOps();
301
243
  for (let idx = 0; idx < this.#replica.total; idx++) this.#spawn(idx);
302
244
  try {
303
245
  this.#listen();
@@ -312,37 +254,22 @@ export class AkanApp {
312
254
  }
313
255
  this.#snapshotTimer = setInterval(() => this.#requestRoomSnapshots(), 30_000);
314
256
  this.#healthTimer = setInterval(() => this.#checkHealth(), 2_000);
315
- this.#startMetricsReporting();
257
+ this.#metricsTimer ??= ProcessMetricsCollector.startReporting(() => this.#reportMetrics());
316
258
  process.on("message", (message) => this.#handleHostMessage(message as BuilderMessage));
317
259
  process.on("disconnect", () => this.#handleHostDisconnect());
318
260
  process.on("SIGINT", () => this.#handleShutdownSignal("SIGINT"));
319
261
  process.on("SIGTERM", () => this.#handleShutdownSignal("SIGTERM"));
320
262
  await new Promise<void>((resolve) => {
321
-
322
263
  this.#resolveStopped = resolve;
323
264
  });
324
265
  }
325
266
 
326
267
  async #startSolo() {
327
268
  const role = this.#getRole(0);
328
-
329
- Object.assign(process.env, {
330
- PORT: String(this.#port),
331
- NODE_ENV: AkanApp.#defaultChildNodeEnv(),
332
- AKAN_REPLICA: this.#replica.value,
333
- AKAN_REPLICA_IDX: "0",
334
- AKAN_APP_DIR: path.dirname(this.#serverPath),
335
- SERVER_MODE: role,
336
- AKAN_API_PREFIX: this.#prefix,
337
- AKAN_WS_PREFIX: this.#websocketPrefix,
338
- ...(this.#openapi === undefined ? {} : { AKAN_OPENAPI: this.#openapi ? "true" : "false" }),
339
- ...(this.#modules.length ? { AKAN_MODULES: this.#modules.join(",") } : {}),
340
- ...(this.#disableModules.length ? { AKAN_DISABLE_MODULES: this.#disableModules.join(",") } : {}),
341
- ...(this.#disableLibs.length ? { AKAN_DISABLE_LIBS: this.#disableLibs.join(",") } : {}),
342
- });
343
-
344
- resetEnvCache();
345
269
 
270
+ Object.assign(process.env, this.#childEnv(0, role));
271
+
272
+ resetEnvCache();
346
273
  this.logger.info(`Starting ${role} replica in this process (solo); set AKAN_SOLO=false for the gateway`);
347
274
  const mod = (await import(this.#serverPath)) as { server?: SoloServer; app?: SoloServer };
348
275
  const server = mod.server ?? mod.app;
@@ -353,32 +280,22 @@ export class AkanApp {
353
280
  async stop(signal = "SIGTERM") {
354
281
  if (this.#stopping) return;
355
282
  this.#stopping = true;
356
- if (this.#snapshotTimer) {
357
- clearInterval(this.#snapshotTimer);
358
- this.#snapshotTimer = null;
359
- }
360
- if (this.#healthTimer) {
361
- clearInterval(this.#healthTimer);
362
- this.#healthTimer = null;
363
- }
364
- if (this.#metricsTimer) {
365
- clearInterval(this.#metricsTimer);
366
- this.#metricsTimer = null;
367
- }
283
+ for (const timer of [this.#snapshotTimer, this.#healthTimer, this.#metricsTimer]) if (timer) clearInterval(timer);
284
+ this.#snapshotTimer = null;
285
+ this.#healthTimer = null;
286
+ this.#metricsTimer = null;
368
287
  this.#server?.stop(true);
369
288
  this.#server = null;
370
289
  for (const child of this.#children.values()) {
371
- if (child.restartTimer) {
372
- clearTimeout(child.restartTimer);
373
- child.restartTimer = null;
374
- }
290
+ if (child.restartTimer) clearTimeout(child.restartTimer);
291
+ child.restartTimer = null;
375
292
  this.#sendToChild(child, { type: "shutdown", signal } satisfies AkanIpcMessage);
376
293
  }
377
294
  await Promise.race([
378
295
  Promise.all([...this.#children.values()].map((child) => child.proc.exited.catch(() => undefined))),
379
296
  new Promise((resolve) => setTimeout(resolve, AkanApp.#childShutdownWaitMs())),
380
297
  ]);
381
-
298
+
382
299
  const stragglers = [...this.#children.values()].filter((child) => !child.proc.killed);
383
300
  for (const child of stragglers) child.proc.kill("SIGKILL");
384
301
  await Promise.all(stragglers.map((child) => child.proc.exited.catch(() => undefined)));
@@ -399,10 +316,6 @@ export class AkanApp {
399
316
  });
400
317
  }
401
318
 
402
- /**
403
- * The IPC channel closes when the dev host dies (including SIGKILL). Exiting takes the children
404
- * down too, so a dead host never strands a gateway tree that would block the next `akan start`.
405
- */
406
319
  #handleHostDisconnect() {
407
320
  if (this.#stopping) return;
408
321
  this.logger.warn("Host IPC channel closed; shutting down gateway and children");
@@ -414,27 +327,16 @@ export class AkanApp {
414
327
  #spawn(idx: number) {
415
328
  const role = this.#getRole(idx);
416
329
  const upstream = this.#getChildUpstream(idx, role);
417
- const childCode = `import(${JSON.stringify(path.resolve(this.#serverPath))}).then((mod)=>{ const server = mod.server ?? mod.app; if (!server?.start) throw new Error("server.ts must export server or app with start()"); return server.start({ listen: process.env.SERVER_MODE !== "batch" }); }).catch((error)=>{ process.send?.({ type: "error", message: error instanceof Error ? error.message : String(error), stack: error instanceof Error ? error.stack : undefined, pid: process.pid }); process.exit(1); });`;
418
- let proc!: Bun.Subprocess<"ignore", "pipe", "pipe">;
419
- proc = Bun.spawn(["bun", "-e", childCode], {
330
+
331
+ const childCode = `import(${JSON.stringify(path.resolve(this.#serverPath))}).then((mod)=>{ const server = mod.server ?? mod.app; if (!server?.start) throw new Error("server.ts must export server or app with start()"); return server.start({ listen: process.env.SERVER_MODE !== "batch" }); }).catch((error)=>{ const exit = () => process.exit(1); setTimeout(exit, 2000); if (!process.send) return exit(); process.send({ type: "error", message: error instanceof Error ? error.message : String(error), stack: error instanceof Error ? error.stack : undefined, pid: process.pid }, undefined, undefined, exit); });`;
332
+ const proc: Bun.Subprocess<"ignore", "pipe", "pipe"> = Bun.spawn(["bun", "-e", childCode], {
420
333
  cwd: process.cwd(),
421
334
  env: {
422
335
  ...process.env,
423
-
424
- PORT: String(this.#port),
425
- NODE_ENV: AkanApp.#defaultChildNodeEnv(),
426
- AKAN_REPLICA: this.#replica.value,
427
- AKAN_REPLICA_IDX: String(idx),
428
- AKAN_APP_DIR: path.dirname(this.#serverPath),
429
- SERVER_MODE: role,
336
+
337
+ ...this.#childEnv(idx, role),
430
338
  AKAN_CHILD_SOCKET: upstream.http.socketPath,
431
339
  AKAN_CHILD_WS_PORT: upstream.ws ? String(upstream.ws.port) : "",
432
- AKAN_API_PREFIX: this.#prefix,
433
- AKAN_WS_PREFIX: this.#websocketPrefix,
434
- ...(this.#openapi === undefined ? {} : { AKAN_OPENAPI: this.#openapi ? "true" : "false" }),
435
- ...(this.#modules.length ? { AKAN_MODULES: this.#modules.join(",") } : {}),
436
- ...(this.#disableModules.length ? { AKAN_DISABLE_MODULES: this.#disableModules.join(",") } : {}),
437
- ...(this.#disableLibs.length ? { AKAN_DISABLE_LIBS: this.#disableLibs.join(",") } : {}),
438
340
  },
439
341
  ipc: (message) => this.#handleMessage(idx, message as AkanIpcMessage, proc),
440
342
  stdout: "pipe",
@@ -457,7 +359,7 @@ export class AkanApp {
457
359
  lastRestartAt: previous?.lastRestartAt,
458
360
  lastRestartReason: previous?.lastRestartReason,
459
361
  });
460
- this.#invalidateFederationChildCache();
362
+ this.#federationChildCache = null;
461
363
  const output = new ChildOutputReader({
462
364
  onLine: (line) => this.#writeChildLine(idx, role, proc.pid, "stdout", line),
463
365
  onBlock: (lines) => this.#writeChildStderrBlock(idx, role, proc.pid, lines),
@@ -467,13 +369,30 @@ export class AkanApp {
467
369
  proc.exited.then((code) => this.#handleChildExit(idx, proc, code));
468
370
  }
469
371
 
372
+ #childEnv(idx: number, role: AkanChildRole) {
373
+ return {
374
+ PORT: String(this.#port),
375
+ NODE_ENV: AkanApp.#defaultChildNodeEnv(),
376
+ AKAN_REPLICA: this.#replica.value,
377
+ AKAN_REPLICA_IDX: String(idx),
378
+ AKAN_APP_DIR: path.dirname(this.#serverPath),
379
+ SERVER_MODE: role,
380
+ AKAN_API_PREFIX: this.#prefix,
381
+ AKAN_WS_PREFIX: this.#websocketPrefix,
382
+ ...(this.#openapi === undefined ? {} : { AKAN_OPENAPI: this.#openapi ? "true" : "false" }),
383
+ ...(this.#modules.length ? { AKAN_MODULES: this.#modules.join(",") } : {}),
384
+ ...(this.#disableModules.length ? { AKAN_DISABLE_MODULES: this.#disableModules.join(",") } : {}),
385
+ ...(this.#disableLibs.length ? { AKAN_DISABLE_LIBS: this.#disableLibs.join(",") } : {}),
386
+ };
387
+ }
388
+
470
389
  #handleChildExit(idx: number, proc: Bun.Subprocess<"ignore", "pipe", "pipe">, code: number | null) {
471
390
  const child = this.#children.get(idx);
472
391
  if (!child || child.proc !== proc) return;
473
392
  if (child.status === "crashed") return;
474
393
  child.status = "exited";
475
394
  child.lastExitCode = code;
476
- this.#invalidateFederationChildCache();
395
+ this.#federationChildCache = null;
477
396
  this.#removeChildRooms(idx);
478
397
  if (this.#stopping) return;
479
398
  void this.#scheduleChildRestart(child, proc, `exit:${code ?? "unknown"}`);
@@ -497,7 +416,7 @@ export class AkanApp {
497
416
  child.upstream = undefined;
498
417
  child.wsUpstream = undefined;
499
418
  child.healthPath = undefined;
500
- this.#invalidateFederationChildCache();
419
+ this.#federationChildCache = null;
501
420
  child.lastRestartReason = reason;
502
421
  child.lastRestartAt = Date.now();
503
422
  this.#removeChildRooms(child.idx);
@@ -556,10 +475,6 @@ export class AkanApp {
556
475
  this.#spawn(idx);
557
476
  }
558
477
 
559
- /**
560
- * Dev-only terminal state: the same broken code fails every boot, so retrying is pure churn.
561
- * The dev host replaces this whole gateway on the next server-side edit, which clears the state.
562
- */
563
478
  #markChildCrashed(child: ChildState, reason: string) {
564
479
 
565
480
  if (child.status === "crashed") return;
@@ -570,7 +485,7 @@ export class AkanApp {
570
485
  child.wsUpstream = undefined;
571
486
  child.healthPath = undefined;
572
487
  child.lastRestartReason = reason;
573
- this.#invalidateFederationChildCache();
488
+ this.#federationChildCache = null;
574
489
  this.#removeChildRooms(child.idx);
575
490
  const attempts = child.restartAttempts + 1;
576
491
  const detail = child.lastErrorMessage ?? reason;
@@ -579,7 +494,6 @@ export class AkanApp {
579
494
  this.#reportBackendBuildStatus({ ok: false, message });
580
495
  }
581
496
 
582
- /** Forwards a backend-phase build status to the dev host so failures reach the HMR overlay. */
583
497
  #reportBackendBuildStatus({ ok, message }: { ok: boolean; message: string }) {
584
498
  process.send?.({
585
499
  type: "build-status",
@@ -593,9 +507,7 @@ export class AkanApp {
593
507
 
594
508
  async #stopChildForRestart(child: ChildState, proc: Bun.Subprocess<"ignore", "pipe", "pipe">, reason: string) {
595
509
  if (reason.startsWith("exit:") || proc.killed) return;
596
- if (!proc.killed) {
597
- this.#sendToChild(child, { type: "shutdown", signal: reason } satisfies AkanIpcMessage);
598
- }
510
+ this.#sendToChild(child, { type: "shutdown", signal: reason } satisfies AkanIpcMessage);
599
511
  const result = await Promise.race([
600
512
  proc.exited.then(() => "exited" as const).catch(() => "exited" as const),
601
513
  new Promise<"timeout">((resolve) => setTimeout(() => resolve("timeout"), AkanApp.#childRestartGraceMs)),
@@ -609,7 +521,7 @@ export class AkanApp {
609
521
 
610
522
  async #prepareRuntimeDir() {
611
523
  await mkdir(this.#runtimeDir, { recursive: true });
612
-
524
+
613
525
  const entries = await readdir(this.#runtimeDir).catch(() => []);
614
526
  await Promise.all(
615
527
  entries
@@ -628,44 +540,31 @@ export class AkanApp {
628
540
 
629
541
  #startFileLogging() {
630
542
  this.#logWriter = RotatingLogWriter.fromRuntimeDir(this.#runtimeDir);
631
- if (!this.#logWriter) return;
632
- if (this.#logHub && Logger.isNdjson) {
633
- this.#hubFileSink = new HubFileSink(this.#logHub, this.#logWriter, {
634
- minSev: logSeverity[Logger.fileLevel],
635
- json: Logger.format === "ndjson-only",
636
- });
637
- return;
638
- }
639
- this.#removeLogSink = Logger.addSink((entry) => {
640
- this.#logWriter?.write("gateway", entry.plainMessage);
641
- });
543
+ if (this.#logWriter) this.#detachFileLog = HubFileSink.attach(this.#logWriter, this.#logHub, "gateway");
642
544
  }
643
545
 
644
546
  async #stopFileLogging() {
645
- this.#removeLogSink?.();
646
- this.#removeLogSink = null;
647
- this.#hubFileSink?.close();
648
- this.#hubFileSink = null;
547
+ this.#detachFileLog?.();
548
+ this.#detachFileLog = null;
649
549
  const writer = this.#logWriter;
650
550
  this.#logWriter = null;
651
551
  await writer?.close();
652
552
  }
653
553
 
654
- /** The journal every child forwards into, and the socket `akan logs` reads it from. Additive to the text file. */
655
554
  async #startLogHub() {
656
555
  const hub = LogHub.attach();
657
556
  this.#logHub = hub;
658
557
  hub.onFloorChange((minSev) => this.#fanoutToAll({ type: "log.level", minSev }));
659
558
  this.#logStream = LogStreamRoute.fromEnv(() => this.#logHub);
660
- const control = new LogControlSocket(hub, this.#runtimeDir);
661
- try {
662
- await control.start();
663
- this.#logControl = control;
664
- } catch (error) {
665
- this.logger.warn(
666
- `Log control socket unavailable at ${control.path}: ${error instanceof Error ? error.message : String(error)}`,
667
- );
668
- }
559
+ this.#logControl = await LogControlSocket.open(hub, this.#runtimeDir, this.logger);
560
+ }
561
+
562
+ async #startOps() {
563
+ if (!process.env.AKAN_OPS_PUBLIC_KEY?.trim()) return;
564
+ const { OpsRoute } = await import("./ops/opsRoute");
565
+ this.#ops = OpsRoute.fromEnv({
566
+ detail: () => AppInfo.detail({ serverMode: "gateway", solo: false, replicaIdx: null }),
567
+ });
669
568
  }
670
569
 
671
570
  async #stopLogHub() {
@@ -701,6 +600,8 @@ export class AkanApp {
701
600
  if (url.pathname === "/_akan/app/metrics") return Response.json(this.#getMetricsStatus());
702
601
  if (url.pathname === LogStreamRoute.path && this.#logStream) return this.#logStream.handle(req);
703
602
  if (url.pathname === "/_akan/bench/ping") return new Response("ok");
603
+ if (url.pathname === AppInfo.publicPath) return AppInfo.handlePublic();
604
+ if (this.#ops?.matches(url.pathname)) return await this.#ops.handle(req);
704
605
  if (this.#isWebSocketPath(url.pathname)) return this.#upgradeWebSocket(req, server);
705
606
  const assetResponse = await this.#serveImmutableArtifact(req, url);
706
607
  if (assetResponse) return assetResponse;
@@ -711,48 +612,36 @@ export class AkanApp {
711
612
  return pathname === `${this.#prefix}${this.#websocketPrefix}` || pathname === "/_akan/hmr";
712
613
  }
713
614
 
615
+ static readonly #immutableArtifacts = [
616
+ { prefix: "/_akan/client/", root: "client", strip: "/_akan/client/".length, type: "application/javascript" },
617
+ { prefix: "/_akan/styles/", root: "", strip: "/_akan/".length, type: "text/css; charset=utf-8" },
618
+ { prefix: "/_akan/fonts/", root: "", strip: "/_akan/".length, type: "font/woff2" },
619
+ ] as const;
620
+
714
621
  async #serveImmutableArtifact(req: Request, url: URL): Promise<Response | null> {
715
622
  if (!this.#web.ssr) return null;
716
- const clientPrefix = "/_akan/client/";
717
- if (url.pathname.startsWith(clientPrefix)) {
718
- const filePath = resolveStaticPath(
719
- path.join(this.#artifactDir, "client"),
720
- url.pathname.slice(clientPrefix.length),
721
- );
722
- if (!filePath) return new Response("Not Found", { status: 404 });
723
- const file = Bun.file(filePath);
724
- if (!(await file.exists())) return new Response("Not Found", { status: 404 });
725
- return this.#fileResponse(req, filePath, {
726
- contentType: file.type || "application/javascript",
727
- cacheControl: "public, max-age=31536000, immutable",
728
- });
729
- }
730
-
731
- for (const prefix of ["/_akan/styles/", "/_akan/fonts/"]) {
732
- if (!url.pathname.startsWith(prefix)) continue;
733
- const filePath = resolveStaticPath(this.#artifactDir, url.pathname.slice("/_akan/".length));
734
- if (!filePath) return new Response("Not Found", { status: 404 });
735
- const file = Bun.file(filePath);
736
- if (!(await file.exists())) return new Response("Not Found", { status: 404 });
737
- return this.#fileResponse(req, filePath, {
738
- contentType: file.type || (prefix === "/_akan/styles/" ? "text/css; charset=utf-8" : "font/woff2"),
739
- cacheControl: "public, max-age=31536000, immutable",
740
- });
741
- }
742
-
743
- return null;
623
+ const artifact = AkanApp.#immutableArtifacts.find(({ prefix }) => url.pathname.startsWith(prefix));
624
+ if (!artifact) return null;
625
+ const filePath = resolveStaticPath(path.join(this.#artifactDir, artifact.root), url.pathname.slice(artifact.strip));
626
+ if (!filePath) return new Response("Not Found", { status: 404 });
627
+ const file = Bun.file(filePath);
628
+ if (!(await file.exists())) return new Response("Not Found", { status: 404 });
629
+ return this.#fileResponse(req, filePath, {
630
+ contentType: file.type || artifact.type,
631
+ cacheControl: "public, max-age=31536000, immutable",
632
+ });
744
633
  }
745
634
 
746
635
  #upgradeWebSocket(req: Request, server: Bun.Server<GatewayWsData>): Response | undefined {
747
636
  const child = this.#pickFederationChild();
748
-
637
+
749
638
  const upstream = child?.upstream ? (child.wsUpstream ?? this.#getChildUpstream(child.idx, child.role).ws) : null;
750
639
  if (!child || !upstream) return new Response("No websocket upstream is ready", { status: 503 });
751
640
  const url = new URL(req.url);
752
641
  const upstreamWs = new WebSocket(`ws://${upstream.host}:${upstream.port}${url.pathname}${url.search}`, {
753
- headers: this.#makeProxyHeaders(req, child.idx, server),
642
+ headers: makeAkanChildProxyHeaders(req, child.idx, server.requestIP(req)),
754
643
  } as unknown as string[]);
755
-
644
+
756
645
  const upgraded = server.upgrade(req, { data: { childIdx: child.idx, upstream: upstreamWs } });
757
646
  if (!upgraded) {
758
647
  upstreamWs.close();
@@ -854,7 +743,7 @@ export class AkanApp {
854
743
  if (!child?.upstream || child.upstream.type !== "unix") return this.#respondWithUnavailable(req);
855
744
  const url = new URL(req.url);
856
745
  const upstreamUrl = `http://akan-child${url.pathname}${url.search}`;
857
- const headers = this.#makeProxyHeaders(req, child.idx, server);
746
+ const headers = makeAkanChildProxyHeaders(req, child.idx, server.requestIP(req));
858
747
  child.metrics.activeRequests = (child.metrics.activeRequests ?? 0) + 1;
859
748
  child.metrics.totalRequests = (child.metrics.totalRequests ?? 0) + 1;
860
749
  const traced = isTraceEnabled();
@@ -897,14 +786,6 @@ export class AkanApp {
897
786
  return candidate.code === "FailedToOpenSocket" || String(candidate.message ?? "").includes("FailedToOpenSocket");
898
787
  }
899
788
 
900
- /**
901
- * The socket opened and then died under us: the child crashed, or was recycled, while its response was still
902
- * in flight. Distinct from `FailedToOpenSocket` — that one means the child was already gone when we dialled,
903
- * and only that one implies the socket needs a restart, which the child's own exit handler schedules anyway.
904
- * Rethrowing this instead reaches Bun as an unhandled route error, which answers 500 and prints the raw
905
- * `TypeError` against whatever URL happened to be in flight — usually a browser background probe, which is
906
- * how a dead child gets misread as a bug in the probed route.
907
- */
908
789
  static #isUpstreamMidFlightClose(error: unknown): boolean {
909
790
  if (!error || typeof error !== "object") return false;
910
791
  const candidate = error as { code?: unknown; message?: unknown };
@@ -934,11 +815,6 @@ export class AkanApp {
934
815
  });
935
816
  }
936
817
 
937
- /**
938
- * A replica that is booting or restarting is normally back within a second or two, and a browser
939
- * handed a 503 stays on that dead page until somebody reloads by hand — so a request waits for the
940
- * upstream instead of failing at it. A dev crash loop is terminal, so it is answered immediately.
941
- */
942
818
  async #pickReadyFederationChild(req: Request): Promise<ChildState | null> {
943
819
  const ready = this.#pickFederationChild();
944
820
  if (ready?.upstream) return ready;
@@ -952,7 +828,6 @@ export class AkanApp {
952
828
  return null;
953
829
  }
954
830
 
955
- /** Dev-only terminal state: every traffic replica gave up booting. The detail is the boot error. */
956
831
  #getCrashLoopDetail(): string | null {
957
832
  if (!this.#devHosted) return null;
958
833
  const trafficChildren = [...this.#children.values()].filter((child) => child.role !== "batch");
@@ -964,10 +839,6 @@ export class AkanApp {
964
839
  );
965
840
  }
966
841
 
967
- /**
968
- * Both states answer 503, so an ingress or CDN reads them exactly as before; the HTML body is what
969
- * a browser navigation needs, since nothing on a bare-text 503 can bring the page back on its own.
970
- */
971
842
  #respondWithUnavailable(req: Request): Response {
972
843
  const crashDetail = this.#getCrashLoopDetail();
973
844
  const page = crashDetail
@@ -992,10 +863,6 @@ export class AkanApp {
992
863
  return AkanApp.#unavailableResponse(req, page.text);
993
864
  }
994
865
 
995
- /**
996
- * An API caller asks for JSON, so it is answered with the payload `HttpClient` restores into an `Err` —
997
- * a bare-text 503 reaches the browser as a JSON parse error naming the page body instead of the outage.
998
- */
999
866
  static #unavailableResponse(req: Request, detail: string): Response {
1000
867
  const headers = { "cache-control": "no-store" };
1001
868
  if (!req.headers.get("accept")?.includes("application/json")) return new Response(detail, { status: 503, headers });
@@ -1050,10 +917,6 @@ export class AkanApp {
1050
917
  return text.replace(/[&<>"']/g, (ch) => replacements[ch] ?? ch);
1051
918
  }
1052
919
 
1053
- /**
1054
- * Gateway-observed upstream round-trip time. The pure proxy overhead is this value
1055
- * minus the child handler time captured in the per-request trace.
1056
- */
1057
920
  #recordProxyHop(durationMs: number) {
1058
921
  this.#proxyHopCount += 1;
1059
922
  this.#proxyHopSumMs += durationMs;
@@ -1062,7 +925,7 @@ export class AkanApp {
1062
925
 
1063
926
  async #proxyResponse(req: Request, upstreamRes: Response): Promise<Response> {
1064
927
  const headers = new Headers(upstreamRes.headers);
1065
-
928
+
1066
929
  headers.delete("content-encoding");
1067
930
  headers.delete("content-length");
1068
931
  this.#rewriteInternalLocation(headers);
@@ -1071,7 +934,7 @@ export class AkanApp {
1071
934
  statusText: upstreamRes.statusText,
1072
935
  headers,
1073
936
  });
1074
-
937
+
1075
938
  return AkanApp.#isProxiedJson(headers) ? await compressResponse(req, proxied) : proxied;
1076
939
  }
1077
940
 
@@ -1096,24 +959,9 @@ export class AkanApp {
1096
959
  ): Promise<Response> {
1097
960
  const headers = new Headers({ "Content-Type": options.contentType });
1098
961
  if (options.cacheControl) headers.set("Cache-Control", options.cacheControl);
1099
-
1100
- const sidecar = await resolveEncodedSidecar(req, filePath, options.contentType);
1101
- if (sidecar) {
1102
- headers.set("Content-Encoding", sidecar.encoding);
1103
- headers.set("Content-Length", String(sidecar.bytes.byteLength));
1104
- headers.set("Vary", "Accept-Encoding");
1105
- return new Response(sidecar.bytes, { headers });
1106
- }
1107
-
1108
- return new Response(Bun.file(filePath).stream(), { headers });
1109
- }
1110
-
1111
- #makeProxyHeaders(req: Request, childIdx: number, server?: Bun.Server<GatewayWsData>) {
1112
- return makeAkanChildProxyHeaders(req, childIdx, server?.requestIP(req));
1113
- }
1114
-
1115
- #invalidateFederationChildCache() {
1116
- this.#federationChildCache = null;
962
+ headers.set("X-Content-Type-Options", "nosniff");
963
+ headers.set("Referrer-Policy", "strict-origin-when-cross-origin");
964
+ return await encodedFileResponse(req, filePath, options.contentType, headers);
1117
965
  }
1118
966
 
1119
967
  #pickFederationChild() {
@@ -1170,6 +1018,9 @@ export class AkanApp {
1170
1018
  case "pubsub.snapshot":
1171
1019
  this.#replaceRoomSnapshot(idx, message.rooms);
1172
1020
  return;
1021
+ case "live.change":
1022
+ this.#fanoutLiveChange(idx, message);
1023
+ return;
1173
1024
  case "metrics.report":
1174
1025
  this.#updateMetrics(idx, message.metrics);
1175
1026
  return;
@@ -1228,7 +1079,7 @@ export class AkanApp {
1228
1079
  this.#sendToChild(child, { type: "log.level", minSev: this.#logHub.floor });
1229
1080
  child.restartPending = false;
1230
1081
  child.lastErrorMessage = undefined;
1231
- this.#invalidateFederationChildCache();
1082
+ this.#federationChildCache = null;
1232
1083
 
1233
1084
  const trafficChildren = [...this.#children.values()].filter((item) => item.role !== "batch");
1234
1085
  if (child.role !== "batch" && trafficChildren.every((item) => item.ready)) {
@@ -1244,7 +1095,7 @@ export class AkanApp {
1244
1095
  if (!child) return;
1245
1096
  child.status = "healthy";
1246
1097
  child.lastPongAtMono = performance.now();
1247
- this.#invalidateFederationChildCache();
1098
+ this.#federationChildCache = null;
1248
1099
  }
1249
1100
 
1250
1101
  #deliverPubsub(originIdx: number, message: Extract<AkanIpcMessage, { type: "pubsub.publish" }>) {
@@ -1277,49 +1128,55 @@ export class AkanApp {
1277
1128
  roomChildren.add(childIdx);
1278
1129
  this.#roomChildren.set(roomId, roomChildren);
1279
1130
 
1280
- const childRooms = this.#childRooms.get(childIdx) ?? new Set<string>();
1281
- childRooms.add(roomId);
1131
+ const childRooms = this.#childRooms.get(childIdx) ?? new Map<string, Set<string>>();
1132
+ const roomSockets = childRooms.get(roomId) ?? new Set<string>();
1133
+ childRooms.set(roomId, roomSockets);
1282
1134
  this.#childRooms.set(childIdx, childRooms);
1283
1135
 
1284
1136
  if (socketId) {
1137
+ roomSockets.add(socketId);
1285
1138
  const socketRooms = this.#socketRooms.get(socketId) ?? { childIdx, rooms: new Set<string>() };
1286
1139
  socketRooms.rooms.add(roomId);
1287
1140
  this.#socketRooms.set(socketId, socketRooms);
1288
1141
  }
1289
1142
  }
1290
1143
 
1291
- #removeRoomMembership(childIdx: number, roomId: string, socketId?: string) {
1144
+ #leaveRoom(childIdx: number, roomId: string) {
1292
1145
  const roomChildren = this.#roomChildren.get(roomId);
1293
1146
  roomChildren?.delete(childIdx);
1294
1147
  if (roomChildren?.size === 0) this.#roomChildren.delete(roomId);
1148
+ }
1295
1149
 
1150
+ #removeRoomMembership(childIdx: number, roomId: string, socketId?: string) {
1296
1151
  const childRooms = this.#childRooms.get(childIdx);
1152
+ const roomSockets = childRooms?.get(roomId);
1153
+ if (socketId) {
1154
+ this.#forgetSocketRoom(socketId, roomId);
1155
+ roomSockets?.delete(socketId);
1156
+ if (roomSockets?.size) return;
1157
+ }
1158
+
1159
+ for (const staleSocketId of roomSockets ?? []) this.#forgetSocketRoom(staleSocketId, roomId);
1160
+ this.#leaveRoom(childIdx, roomId);
1297
1161
  childRooms?.delete(roomId);
1298
1162
  if (childRooms?.size === 0) this.#childRooms.delete(childIdx);
1163
+ }
1299
1164
 
1300
- if (socketId) {
1301
- const socketRooms = this.#socketRooms.get(socketId);
1302
- socketRooms?.rooms.delete(roomId);
1303
- if (!socketRooms || socketRooms.rooms.size === 0) this.#socketRooms.delete(socketId);
1304
- }
1165
+ #forgetSocketRoom(socketId: string, roomId: string) {
1166
+ const socketRooms = this.#socketRooms.get(socketId);
1167
+ socketRooms?.rooms.delete(roomId);
1168
+ if (!socketRooms || socketRooms.rooms.size === 0) this.#socketRooms.delete(socketId);
1305
1169
  }
1306
1170
 
1307
1171
  #replaceRoomSnapshot(childIdx: number, rooms: string[]) {
1308
- for (const roomId of this.#childRooms.get(childIdx) ?? []) {
1309
- const roomChildren = this.#roomChildren.get(roomId);
1310
- roomChildren?.delete(childIdx);
1311
- if (roomChildren?.size === 0) this.#roomChildren.delete(roomId);
1312
- }
1313
- this.#childRooms.set(childIdx, new Set());
1314
- for (const roomId of rooms) this.#addRoomMembership(childIdx, roomId);
1172
+ const held = new Set(rooms);
1173
+ for (const roomId of [...(this.#childRooms.get(childIdx)?.keys() ?? [])])
1174
+ if (!held.has(roomId)) this.#removeRoomMembership(childIdx, roomId);
1175
+ for (const roomId of held) this.#addRoomMembership(childIdx, roomId);
1315
1176
  }
1316
1177
 
1317
1178
  #removeChildRooms(childIdx: number) {
1318
- for (const roomId of this.#childRooms.get(childIdx) ?? []) {
1319
- const roomChildren = this.#roomChildren.get(roomId);
1320
- roomChildren?.delete(childIdx);
1321
- if (roomChildren?.size === 0) this.#roomChildren.delete(roomId);
1322
- }
1179
+ for (const roomId of this.#childRooms.get(childIdx)?.keys() ?? []) this.#leaveRoom(childIdx, roomId);
1323
1180
  this.#childRooms.delete(childIdx);
1324
1181
  for (const [socketId, socket] of this.#socketRooms.entries()) {
1325
1182
  if (socket.childIdx === childIdx) this.#socketRooms.delete(socketId);
@@ -1332,15 +1189,6 @@ export class AkanApp {
1332
1189
  child.metrics = { ...child.metrics, pid: metrics.pid ?? child.pid, ...metrics };
1333
1190
  }
1334
1191
 
1335
- #startMetricsReporting() {
1336
- if (this.#metricsTimer) return;
1337
- const report = () => {
1338
- void this.#reportMetrics();
1339
- };
1340
- report();
1341
- this.#metricsTimer = setInterval(report, ProcessMetricsCollector.parseMemoryLogIntervalMs());
1342
- }
1343
-
1344
1192
  async #reportMetrics() {
1345
1193
  this.#gatewayMetrics = await ProcessMetricsCollector.collect({ role: "gateway" });
1346
1194
  if (process.env.AKAN_MEMORY_LOG !== "1") return;
@@ -1376,7 +1224,7 @@ export class AkanApp {
1376
1224
  if (this.#isChildUnavailable(child)) continue;
1377
1225
  if (child.lastPongAtMono && nowMono - child.lastPongAtMono > this.#healthTimeoutMs) {
1378
1226
  child.status = "unhealthy";
1379
- this.#invalidateFederationChildCache();
1227
+ this.#federationChildCache = null;
1380
1228
  void this.#scheduleChildRestart(child, child.proc, "health-timeout");
1381
1229
  continue;
1382
1230
  }
@@ -1387,7 +1235,7 @@ export class AkanApp {
1387
1235
  } satisfies AkanIpcMessage);
1388
1236
  if (!sent) {
1389
1237
  child.status = "unhealthy";
1390
- this.#invalidateFederationChildCache();
1238
+ this.#federationChildCache = null;
1391
1239
  void this.#scheduleChildRestart(child, child.proc, "health-send-failed");
1392
1240
  }
1393
1241
  }
@@ -1422,6 +1270,11 @@ export class AkanApp {
1422
1270
  for (const child of this.#children.values()) this.#sendToChild(child, message);
1423
1271
  }
1424
1272
 
1273
+ #fanoutLiveChange(originIdx: number, message: Extract<AkanIpcMessage, { type: "live.change" }>) {
1274
+ for (const child of this.#children.values())
1275
+ if (child.idx !== originIdx && child.role !== "batch") this.#sendToChild(child, message);
1276
+ }
1277
+
1425
1278
  #fanoutToBatch(message: AkanIpcMessage) {
1426
1279
  for (const child of this.#children.values()) {
1427
1280
  if (child.role === "batch" || child.role === "all") {
@@ -1457,10 +1310,6 @@ export class AkanApp {
1457
1310
  this.#logWriter?.write(`${idx}-${role}`, AkanApp.#stripAnsi(prefixedLine));
1458
1311
  }
1459
1312
 
1460
- /**
1461
- * In ndjson mode a stack trace is one record, and `AKAN_CHILD_STDERR` does not apply: the line that killed a
1462
- * child is the one the collector must not miss.
1463
- */
1464
1313
  #writeChildStderrBlock(idx: number, role: AkanChildRole, pid: number | null, lines: string[]) {
1465
1314
  const text = lines.join("");
1466
1315
  if (AkanApp.#isBenignRsdwConnectionClosedBlock(text)) return;