@aigne/aos 0.2.0-beta

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 (533) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/LICENSE.md +26 -0
  3. package/dist/agent-dsl.cjs +116 -0
  4. package/dist/agent-dsl.d.cts +31 -0
  5. package/dist/agent-dsl.d.cts.map +1 -0
  6. package/dist/agent-dsl.d.mts +31 -0
  7. package/dist/agent-dsl.d.mts.map +1 -0
  8. package/dist/agent-dsl.mjs +115 -0
  9. package/dist/agent-dsl.mjs.map +1 -0
  10. package/dist/arc-compat.cjs +125 -0
  11. package/dist/arc-compat.d.cts +17 -0
  12. package/dist/arc-compat.d.cts.map +1 -0
  13. package/dist/arc-compat.d.mts +17 -0
  14. package/dist/arc-compat.d.mts.map +1 -0
  15. package/dist/arc-compat.mjs +123 -0
  16. package/dist/arc-compat.mjs.map +1 -0
  17. package/dist/auto-surface/compiler.cjs +36 -0
  18. package/dist/auto-surface/compiler.d.cts +7 -0
  19. package/dist/auto-surface/compiler.d.cts.map +1 -0
  20. package/dist/auto-surface/compiler.d.mts +7 -0
  21. package/dist/auto-surface/compiler.d.mts.map +1 -0
  22. package/dist/auto-surface/compiler.mjs +37 -0
  23. package/dist/auto-surface/compiler.mjs.map +1 -0
  24. package/dist/auto-surface/definition-dsl.cjs +333 -0
  25. package/dist/auto-surface/definition-dsl.d.cts +41 -0
  26. package/dist/auto-surface/definition-dsl.d.cts.map +1 -0
  27. package/dist/auto-surface/definition-dsl.d.mts +41 -0
  28. package/dist/auto-surface/definition-dsl.d.mts.map +1 -0
  29. package/dist/auto-surface/definition-dsl.mjs +332 -0
  30. package/dist/auto-surface/definition-dsl.mjs.map +1 -0
  31. package/dist/auto-surface/fragments.cjs +177 -0
  32. package/dist/auto-surface/fragments.d.cts +23 -0
  33. package/dist/auto-surface/fragments.d.cts.map +1 -0
  34. package/dist/auto-surface/fragments.d.mts +23 -0
  35. package/dist/auto-surface/fragments.d.mts.map +1 -0
  36. package/dist/auto-surface/fragments.mjs +175 -0
  37. package/dist/auto-surface/fragments.mjs.map +1 -0
  38. package/dist/auto-surface/index.d.mts +9 -0
  39. package/dist/auto-surface/layering.cjs +43 -0
  40. package/dist/auto-surface/layering.d.cts +7 -0
  41. package/dist/auto-surface/layering.d.cts.map +1 -0
  42. package/dist/auto-surface/layering.d.mts +7 -0
  43. package/dist/auto-surface/layering.d.mts.map +1 -0
  44. package/dist/auto-surface/layering.mjs +43 -0
  45. package/dist/auto-surface/layering.mjs.map +1 -0
  46. package/dist/auto-surface/projection.cjs +11 -0
  47. package/dist/auto-surface/projection.d.cts +11 -0
  48. package/dist/auto-surface/projection.d.cts.map +1 -0
  49. package/dist/auto-surface/projection.d.mts +11 -0
  50. package/dist/auto-surface/projection.d.mts.map +1 -0
  51. package/dist/auto-surface/projection.mjs +12 -0
  52. package/dist/auto-surface/projection.mjs.map +1 -0
  53. package/dist/auto-surface/projectors/settings-shell.cjs +114 -0
  54. package/dist/auto-surface/projectors/settings-shell.d.cts +10 -0
  55. package/dist/auto-surface/projectors/settings-shell.d.cts.map +1 -0
  56. package/dist/auto-surface/projectors/settings-shell.d.mts +10 -0
  57. package/dist/auto-surface/projectors/settings-shell.d.mts.map +1 -0
  58. package/dist/auto-surface/projectors/settings-shell.mjs +114 -0
  59. package/dist/auto-surface/projectors/settings-shell.mjs.map +1 -0
  60. package/dist/auto-surface/scenario.cjs +38 -0
  61. package/dist/auto-surface/scenario.d.cts +31 -0
  62. package/dist/auto-surface/scenario.d.cts.map +1 -0
  63. package/dist/auto-surface/scenario.d.mts +31 -0
  64. package/dist/auto-surface/scenario.d.mts.map +1 -0
  65. package/dist/auto-surface/scenario.mjs +37 -0
  66. package/dist/auto-surface/scenario.mjs.map +1 -0
  67. package/dist/auto-surface/types.cjs +9 -0
  68. package/dist/auto-surface/types.d.cts +153 -0
  69. package/dist/auto-surface/types.d.cts.map +1 -0
  70. package/dist/auto-surface/types.d.mts +153 -0
  71. package/dist/auto-surface/types.d.mts.map +1 -0
  72. package/dist/auto-surface/types.mjs +9 -0
  73. package/dist/auto-surface/types.mjs.map +1 -0
  74. package/dist/auto-surface/value-dsl.cjs +80 -0
  75. package/dist/auto-surface/value-dsl.d.cts +24 -0
  76. package/dist/auto-surface/value-dsl.d.cts.map +1 -0
  77. package/dist/auto-surface/value-dsl.d.mts +24 -0
  78. package/dist/auto-surface/value-dsl.d.mts.map +1 -0
  79. package/dist/auto-surface/value-dsl.mjs +79 -0
  80. package/dist/auto-surface/value-dsl.mjs.map +1 -0
  81. package/dist/blocklet/activation.cjs +94 -0
  82. package/dist/blocklet/activation.d.cts +30 -0
  83. package/dist/blocklet/activation.d.cts.map +1 -0
  84. package/dist/blocklet/activation.d.mts +30 -0
  85. package/dist/blocklet/activation.d.mts.map +1 -0
  86. package/dist/blocklet/activation.mjs +94 -0
  87. package/dist/blocklet/activation.mjs.map +1 -0
  88. package/dist/blocklet/did-space-registry.cjs +282 -0
  89. package/dist/blocklet/did-space-registry.d.cts +82 -0
  90. package/dist/blocklet/did-space-registry.d.cts.map +1 -0
  91. package/dist/blocklet/did-space-registry.d.mts +82 -0
  92. package/dist/blocklet/did-space-registry.d.mts.map +1 -0
  93. package/dist/blocklet/did-space-registry.mjs +281 -0
  94. package/dist/blocklet/did-space-registry.mjs.map +1 -0
  95. package/dist/blocklet/handlers.cjs +66 -0
  96. package/dist/blocklet/handlers.d.cts +16 -0
  97. package/dist/blocklet/handlers.d.cts.map +1 -0
  98. package/dist/blocklet/handlers.d.mts +16 -0
  99. package/dist/blocklet/handlers.d.mts.map +1 -0
  100. package/dist/blocklet/handlers.mjs +65 -0
  101. package/dist/blocklet/handlers.mjs.map +1 -0
  102. package/dist/blocklet/index.d.mts +7 -0
  103. package/dist/blocklet/manifest.d.cts +2 -0
  104. package/dist/blocklet/manifest.d.mts +2 -0
  105. package/dist/blocklet/manifest.mjs +3 -0
  106. package/dist/blocklet/registry.cjs +447 -0
  107. package/dist/blocklet/registry.d.cts +197 -0
  108. package/dist/blocklet/registry.d.cts.map +1 -0
  109. package/dist/blocklet/registry.d.mts +197 -0
  110. package/dist/blocklet/registry.d.mts.map +1 -0
  111. package/dist/blocklet/registry.mjs +441 -0
  112. package/dist/blocklet/registry.mjs.map +1 -0
  113. package/dist/blocklet/static-render.cjs +183 -0
  114. package/dist/blocklet/static-render.d.cts +55 -0
  115. package/dist/blocklet/static-render.d.cts.map +1 -0
  116. package/dist/blocklet/static-render.d.mts +55 -0
  117. package/dist/blocklet/static-render.d.mts.map +1 -0
  118. package/dist/blocklet/static-render.mjs +181 -0
  119. package/dist/blocklet/static-render.mjs.map +1 -0
  120. package/dist/blocklet/types.d.cts +70 -0
  121. package/dist/blocklet/types.d.cts.map +1 -0
  122. package/dist/blocklet/types.d.mts +70 -0
  123. package/dist/blocklet/types.d.mts.map +1 -0
  124. package/dist/devices/chain.cjs +127 -0
  125. package/dist/devices/chain.d.cts +48 -0
  126. package/dist/devices/chain.d.cts.map +1 -0
  127. package/dist/devices/chain.d.mts +48 -0
  128. package/dist/devices/chain.d.mts.map +1 -0
  129. package/dist/devices/chain.mjs +125 -0
  130. package/dist/devices/chain.mjs.map +1 -0
  131. package/dist/dsl-shared.cjs +290 -0
  132. package/dist/dsl-shared.d.cts +54 -0
  133. package/dist/dsl-shared.d.cts.map +1 -0
  134. package/dist/dsl-shared.d.mts +54 -0
  135. package/dist/dsl-shared.d.mts.map +1 -0
  136. package/dist/dsl-shared.mjs +287 -0
  137. package/dist/dsl-shared.mjs.map +1 -0
  138. package/dist/http/afs-mcp.cjs +85 -0
  139. package/dist/http/afs-mcp.d.cts +14 -0
  140. package/dist/http/afs-mcp.d.cts.map +1 -0
  141. package/dist/http/afs-mcp.d.mts +14 -0
  142. package/dist/http/afs-mcp.d.mts.map +1 -0
  143. package/dist/http/afs-mcp.mjs +86 -0
  144. package/dist/http/afs-mcp.mjs.map +1 -0
  145. package/dist/http/afs-raw.cjs +264 -0
  146. package/dist/http/afs-raw.d.cts +31 -0
  147. package/dist/http/afs-raw.d.cts.map +1 -0
  148. package/dist/http/afs-raw.d.mts +31 -0
  149. package/dist/http/afs-raw.d.mts.map +1 -0
  150. package/dist/http/afs-raw.mjs +264 -0
  151. package/dist/http/afs-raw.mjs.map +1 -0
  152. package/dist/http/afs-rest.cjs +30 -0
  153. package/dist/http/afs-rest.d.cts +21 -0
  154. package/dist/http/afs-rest.d.cts.map +1 -0
  155. package/dist/http/afs-rest.d.mts +21 -0
  156. package/dist/http/afs-rest.d.mts.map +1 -0
  157. package/dist/http/afs-rest.mjs +31 -0
  158. package/dist/http/afs-rest.mjs.map +1 -0
  159. package/dist/http/afs-rpc-wire.cjs +271 -0
  160. package/dist/http/afs-rpc-wire.d.cts +195 -0
  161. package/dist/http/afs-rpc-wire.d.cts.map +1 -0
  162. package/dist/http/afs-rpc-wire.d.mts +195 -0
  163. package/dist/http/afs-rpc-wire.d.mts.map +1 -0
  164. package/dist/http/afs-rpc-wire.mjs +262 -0
  165. package/dist/http/afs-rpc-wire.mjs.map +1 -0
  166. package/dist/http/afs-rpc.cjs +729 -0
  167. package/dist/http/afs-rpc.d.cts +103 -0
  168. package/dist/http/afs-rpc.d.cts.map +1 -0
  169. package/dist/http/afs-rpc.d.mts +103 -0
  170. package/dist/http/afs-rpc.d.mts.map +1 -0
  171. package/dist/http/afs-rpc.mjs +729 -0
  172. package/dist/http/afs-rpc.mjs.map +1 -0
  173. package/dist/http/afs-upload.cjs +116 -0
  174. package/dist/http/afs-upload.d.cts +40 -0
  175. package/dist/http/afs-upload.d.cts.map +1 -0
  176. package/dist/http/afs-upload.d.mts +40 -0
  177. package/dist/http/afs-upload.d.mts.map +1 -0
  178. package/dist/http/afs-upload.mjs +116 -0
  179. package/dist/http/afs-upload.mjs.map +1 -0
  180. package/dist/http/aup-client.cjs +60 -0
  181. package/dist/http/aup-client.d.cts +22 -0
  182. package/dist/http/aup-client.d.cts.map +1 -0
  183. package/dist/http/aup-client.d.mts +22 -0
  184. package/dist/http/aup-client.d.mts.map +1 -0
  185. package/dist/http/aup-client.mjs +59 -0
  186. package/dist/http/aup-client.mjs.map +1 -0
  187. package/dist/http/aup-event.cjs +100 -0
  188. package/dist/http/aup-event.d.cts +38 -0
  189. package/dist/http/aup-event.d.cts.map +1 -0
  190. package/dist/http/aup-event.d.mts +38 -0
  191. package/dist/http/aup-event.d.mts.map +1 -0
  192. package/dist/http/aup-event.mjs +101 -0
  193. package/dist/http/aup-event.mjs.map +1 -0
  194. package/dist/http/auth-context.cjs +66 -0
  195. package/dist/http/auth-context.d.cts +64 -0
  196. package/dist/http/auth-context.d.cts.map +1 -0
  197. package/dist/http/auth-context.d.mts +64 -0
  198. package/dist/http/auth-context.d.mts.map +1 -0
  199. package/dist/http/auth-context.mjs +66 -0
  200. package/dist/http/auth-context.mjs.map +1 -0
  201. package/dist/http/csrf.cjs +50 -0
  202. package/dist/http/csrf.d.cts +8 -0
  203. package/dist/http/csrf.d.cts.map +1 -0
  204. package/dist/http/csrf.d.mts +8 -0
  205. package/dist/http/csrf.d.mts.map +1 -0
  206. package/dist/http/csrf.mjs +49 -0
  207. package/dist/http/csrf.mjs.map +1 -0
  208. package/dist/http/handlers.cjs +106 -0
  209. package/dist/http/handlers.d.cts +39 -0
  210. package/dist/http/handlers.d.cts.map +1 -0
  211. package/dist/http/handlers.d.mts +39 -0
  212. package/dist/http/handlers.d.mts.map +1 -0
  213. package/dist/http/handlers.mjs +104 -0
  214. package/dist/http/handlers.mjs.map +1 -0
  215. package/dist/http/index.d.mts +1 -0
  216. package/dist/http/ingest-facade.cjs +315 -0
  217. package/dist/http/ingest-facade.mjs +314 -0
  218. package/dist/http/ingest-facade.mjs.map +1 -0
  219. package/dist/http/raw-url.cjs +136 -0
  220. package/dist/http/raw-url.d.cts +54 -0
  221. package/dist/http/raw-url.d.cts.map +1 -0
  222. package/dist/http/raw-url.d.mts +54 -0
  223. package/dist/http/raw-url.d.mts.map +1 -0
  224. package/dist/http/raw-url.mjs +136 -0
  225. package/dist/http/raw-url.mjs.map +1 -0
  226. package/dist/http/request-context.cjs +178 -0
  227. package/dist/http/request-context.d.cts +76 -0
  228. package/dist/http/request-context.d.cts.map +1 -0
  229. package/dist/http/request-context.d.mts +76 -0
  230. package/dist/http/request-context.d.mts.map +1 -0
  231. package/dist/http/request-context.mjs +179 -0
  232. package/dist/http/request-context.mjs.map +1 -0
  233. package/dist/index.cjs +197 -0
  234. package/dist/index.d.cts +63 -0
  235. package/dist/index.d.mts +68 -0
  236. package/dist/index.mjs +61 -0
  237. package/dist/mcp/index.cjs +9 -0
  238. package/dist/mcp/index.d.cts +5 -0
  239. package/dist/mcp/index.d.mts +5 -0
  240. package/dist/mcp/index.mjs +6 -0
  241. package/dist/mcp/prompts.cjs +17 -0
  242. package/dist/mcp/prompts.d.cts +8 -0
  243. package/dist/mcp/prompts.d.cts.map +1 -0
  244. package/dist/mcp/prompts.d.mts +8 -0
  245. package/dist/mcp/prompts.d.mts.map +1 -0
  246. package/dist/mcp/prompts.mjs +17 -0
  247. package/dist/mcp/prompts.mjs.map +1 -0
  248. package/dist/mcp/resources.cjs +22 -0
  249. package/dist/mcp/resources.d.cts +8 -0
  250. package/dist/mcp/resources.d.cts.map +1 -0
  251. package/dist/mcp/resources.d.mts +8 -0
  252. package/dist/mcp/resources.d.mts.map +1 -0
  253. package/dist/mcp/resources.mjs +22 -0
  254. package/dist/mcp/resources.mjs.map +1 -0
  255. package/dist/mcp/server.cjs +51 -0
  256. package/dist/mcp/server.d.cts +20 -0
  257. package/dist/mcp/server.d.cts.map +1 -0
  258. package/dist/mcp/server.d.mts +20 -0
  259. package/dist/mcp/server.d.mts.map +1 -0
  260. package/dist/mcp/server.mjs +52 -0
  261. package/dist/mcp/server.mjs.map +1 -0
  262. package/dist/mcp/tools.cjs +218 -0
  263. package/dist/mcp/tools.d.cts +8 -0
  264. package/dist/mcp/tools.d.cts.map +1 -0
  265. package/dist/mcp/tools.d.mts +8 -0
  266. package/dist/mcp/tools.d.mts.map +1 -0
  267. package/dist/mcp/tools.mjs +219 -0
  268. package/dist/mcp/tools.mjs.map +1 -0
  269. package/dist/mcp/utils.cjs +75 -0
  270. package/dist/mcp/utils.mjs +69 -0
  271. package/dist/mcp/utils.mjs.map +1 -0
  272. package/dist/mount/index.cjs +4 -0
  273. package/dist/mount/index.d.cts +3 -0
  274. package/dist/mount/index.d.mts +3 -0
  275. package/dist/mount/index.mjs +3 -0
  276. package/dist/mount/materializer.cjs +167 -0
  277. package/dist/mount/materializer.d.cts +97 -0
  278. package/dist/mount/materializer.d.cts.map +1 -0
  279. package/dist/mount/materializer.d.mts +97 -0
  280. package/dist/mount/materializer.d.mts.map +1 -0
  281. package/dist/mount/materializer.mjs +167 -0
  282. package/dist/mount/materializer.mjs.map +1 -0
  283. package/dist/mount/types.d.cts +90 -0
  284. package/dist/mount/types.d.cts.map +1 -0
  285. package/dist/mount/types.d.mts +90 -0
  286. package/dist/mount/types.d.mts.map +1 -0
  287. package/dist/mount-config.cjs +61 -0
  288. package/dist/mount-config.d.cts +19 -0
  289. package/dist/mount-config.d.cts.map +1 -0
  290. package/dist/mount-config.d.mts +19 -0
  291. package/dist/mount-config.d.mts.map +1 -0
  292. package/dist/mount-config.mjs +61 -0
  293. package/dist/mount-config.mjs.map +1 -0
  294. package/dist/projectors/aup-projector.cjs +190 -0
  295. package/dist/projectors/aup-projector.d.cts +59 -0
  296. package/dist/projectors/aup-projector.d.cts.map +1 -0
  297. package/dist/projectors/aup-projector.d.mts +59 -0
  298. package/dist/projectors/aup-projector.d.mts.map +1 -0
  299. package/dist/projectors/aup-projector.mjs +188 -0
  300. package/dist/projectors/aup-projector.mjs.map +1 -0
  301. package/dist/projectors/index.cjs +6 -0
  302. package/dist/projectors/index.d.cts +2 -0
  303. package/dist/projectors/index.d.mts +2 -0
  304. package/dist/projectors/index.mjs +3 -0
  305. package/dist/scaffold/afs.cjs +195 -0
  306. package/dist/scaffold/afs.d.cts +16 -0
  307. package/dist/scaffold/afs.d.cts.map +1 -0
  308. package/dist/scaffold/afs.d.mts +16 -0
  309. package/dist/scaffold/afs.d.mts.map +1 -0
  310. package/dist/scaffold/afs.mjs +195 -0
  311. package/dist/scaffold/afs.mjs.map +1 -0
  312. package/dist/scaffold/composition.cjs +92 -0
  313. package/dist/scaffold/composition.d.cts +10 -0
  314. package/dist/scaffold/composition.d.cts.map +1 -0
  315. package/dist/scaffold/composition.d.mts +10 -0
  316. package/dist/scaffold/composition.d.mts.map +1 -0
  317. package/dist/scaffold/composition.mjs +92 -0
  318. package/dist/scaffold/composition.mjs.map +1 -0
  319. package/dist/scaffold/dsl-error.cjs +21 -0
  320. package/dist/scaffold/dsl-error.d.cts +11 -0
  321. package/dist/scaffold/dsl-error.d.cts.map +1 -0
  322. package/dist/scaffold/dsl-error.d.mts +11 -0
  323. package/dist/scaffold/dsl-error.d.mts.map +1 -0
  324. package/dist/scaffold/dsl-error.mjs +20 -0
  325. package/dist/scaffold/dsl-error.mjs.map +1 -0
  326. package/dist/scaffold/index.d.mts +12 -0
  327. package/dist/scaffold/manifest-dsl.cjs +188 -0
  328. package/dist/scaffold/manifest-dsl.d.cts +8 -0
  329. package/dist/scaffold/manifest-dsl.d.cts.map +1 -0
  330. package/dist/scaffold/manifest-dsl.d.mts +8 -0
  331. package/dist/scaffold/manifest-dsl.d.mts.map +1 -0
  332. package/dist/scaffold/manifest-dsl.mjs +188 -0
  333. package/dist/scaffold/manifest-dsl.mjs.map +1 -0
  334. package/dist/scaffold/module-dsl.cjs +284 -0
  335. package/dist/scaffold/module-dsl.d.cts +8 -0
  336. package/dist/scaffold/module-dsl.d.cts.map +1 -0
  337. package/dist/scaffold/module-dsl.d.mts +8 -0
  338. package/dist/scaffold/module-dsl.d.mts.map +1 -0
  339. package/dist/scaffold/module-dsl.mjs +284 -0
  340. package/dist/scaffold/module-dsl.mjs.map +1 -0
  341. package/dist/scaffold/resolver.cjs +156 -0
  342. package/dist/scaffold/resolver.d.cts +7 -0
  343. package/dist/scaffold/resolver.d.cts.map +1 -0
  344. package/dist/scaffold/resolver.d.mts +7 -0
  345. package/dist/scaffold/resolver.d.mts.map +1 -0
  346. package/dist/scaffold/resolver.mjs +156 -0
  347. package/dist/scaffold/resolver.mjs.map +1 -0
  348. package/dist/scaffold/runtime.cjs +24 -0
  349. package/dist/scaffold/runtime.d.cts +19 -0
  350. package/dist/scaffold/runtime.d.cts.map +1 -0
  351. package/dist/scaffold/runtime.d.mts +19 -0
  352. package/dist/scaffold/runtime.d.mts.map +1 -0
  353. package/dist/scaffold/runtime.mjs +25 -0
  354. package/dist/scaffold/runtime.mjs.map +1 -0
  355. package/dist/scaffold/shell-dsl.cjs +279 -0
  356. package/dist/scaffold/shell-dsl.d.cts +8 -0
  357. package/dist/scaffold/shell-dsl.d.cts.map +1 -0
  358. package/dist/scaffold/shell-dsl.d.mts +8 -0
  359. package/dist/scaffold/shell-dsl.d.mts.map +1 -0
  360. package/dist/scaffold/shell-dsl.mjs +279 -0
  361. package/dist/scaffold/shell-dsl.mjs.map +1 -0
  362. package/dist/scaffold/surface-dsl.cjs +182 -0
  363. package/dist/scaffold/surface-dsl.d.cts +8 -0
  364. package/dist/scaffold/surface-dsl.d.cts.map +1 -0
  365. package/dist/scaffold/surface-dsl.d.mts +8 -0
  366. package/dist/scaffold/surface-dsl.d.mts.map +1 -0
  367. package/dist/scaffold/surface-dsl.mjs +182 -0
  368. package/dist/scaffold/surface-dsl.mjs.map +1 -0
  369. package/dist/scaffold/surfaces.cjs +84 -0
  370. package/dist/scaffold/surfaces.d.cts +23 -0
  371. package/dist/scaffold/surfaces.d.cts.map +1 -0
  372. package/dist/scaffold/surfaces.d.mts +24 -0
  373. package/dist/scaffold/surfaces.d.mts.map +1 -0
  374. package/dist/scaffold/surfaces.mjs +84 -0
  375. package/dist/scaffold/surfaces.mjs.map +1 -0
  376. package/dist/scaffold/types.d.cts +264 -0
  377. package/dist/scaffold/types.d.cts.map +1 -0
  378. package/dist/scaffold/types.d.mts +265 -0
  379. package/dist/scaffold/types.d.mts.map +1 -0
  380. package/dist/scaffold/workspace-dsl.cjs +339 -0
  381. package/dist/scaffold/workspace-dsl.d.cts +49 -0
  382. package/dist/scaffold/workspace-dsl.d.cts.map +1 -0
  383. package/dist/scaffold/workspace-dsl.d.mts +49 -0
  384. package/dist/scaffold/workspace-dsl.d.mts.map +1 -0
  385. package/dist/scaffold/workspace-dsl.mjs +337 -0
  386. package/dist/scaffold/workspace-dsl.mjs.map +1 -0
  387. package/dist/scope/index.d.mts +3 -0
  388. package/dist/scope/read-blocklet-scope.cjs +29 -0
  389. package/dist/scope/read-blocklet-scope.d.cts +8 -0
  390. package/dist/scope/read-blocklet-scope.d.cts.map +1 -0
  391. package/dist/scope/read-blocklet-scope.d.mts +8 -0
  392. package/dist/scope/read-blocklet-scope.d.mts.map +1 -0
  393. package/dist/scope/read-blocklet-scope.mjs +30 -0
  394. package/dist/scope/read-blocklet-scope.mjs.map +1 -0
  395. package/dist/scope/resolve-scoped-afs.cjs +87 -0
  396. package/dist/scope/resolve-scoped-afs.d.cts +7 -0
  397. package/dist/scope/resolve-scoped-afs.d.cts.map +1 -0
  398. package/dist/scope/resolve-scoped-afs.d.mts +7 -0
  399. package/dist/scope/resolve-scoped-afs.d.mts.map +1 -0
  400. package/dist/scope/resolve-scoped-afs.mjs +88 -0
  401. package/dist/scope/resolve-scoped-afs.mjs.map +1 -0
  402. package/dist/scope/types.d.cts +25 -0
  403. package/dist/scope/types.d.cts.map +1 -0
  404. package/dist/scope/types.d.mts +25 -0
  405. package/dist/scope/types.d.mts.map +1 -0
  406. package/dist/session/backends.cjs +90 -0
  407. package/dist/session/backends.d.cts +35 -0
  408. package/dist/session/backends.d.cts.map +1 -0
  409. package/dist/session/backends.d.mts +35 -0
  410. package/dist/session/backends.d.mts.map +1 -0
  411. package/dist/session/backends.mjs +89 -0
  412. package/dist/session/backends.mjs.map +1 -0
  413. package/dist/session/replication-resolver.cjs +323 -0
  414. package/dist/session/replication-resolver.d.cts +71 -0
  415. package/dist/session/replication-resolver.d.cts.map +1 -0
  416. package/dist/session/replication-resolver.d.mts +71 -0
  417. package/dist/session/replication-resolver.d.mts.map +1 -0
  418. package/dist/session/replication-resolver.mjs +323 -0
  419. package/dist/session/replication-resolver.mjs.map +1 -0
  420. package/dist/session/role-level.cjs +36 -0
  421. package/dist/session/role-level.d.cts +24 -0
  422. package/dist/session/role-level.d.cts.map +1 -0
  423. package/dist/session/role-level.d.mts +24 -0
  424. package/dist/session/role-level.d.mts.map +1 -0
  425. package/dist/session/role-level.mjs +35 -0
  426. package/dist/session/role-level.mjs.map +1 -0
  427. package/dist/session/session-dir-providers.cjs +254 -0
  428. package/dist/session/session-dir-providers.d.cts +32 -0
  429. package/dist/session/session-dir-providers.d.cts.map +1 -0
  430. package/dist/session/session-dir-providers.d.mts +32 -0
  431. package/dist/session/session-dir-providers.d.mts.map +1 -0
  432. package/dist/session/session-dir-providers.mjs +252 -0
  433. package/dist/session/session-dir-providers.mjs.map +1 -0
  434. package/dist/session/session-id.cjs +20 -0
  435. package/dist/session/session-id.d.cts +15 -0
  436. package/dist/session/session-id.d.cts.map +1 -0
  437. package/dist/session/session-id.d.mts +15 -0
  438. package/dist/session/session-id.d.mts.map +1 -0
  439. package/dist/session/session-id.mjs +20 -0
  440. package/dist/session/session-id.mjs.map +1 -0
  441. package/dist/session/session-user-afs.cjs +899 -0
  442. package/dist/session/session-user-afs.d.cts +296 -0
  443. package/dist/session/session-user-afs.d.cts.map +1 -0
  444. package/dist/session/session-user-afs.d.mts +296 -0
  445. package/dist/session/session-user-afs.d.mts.map +1 -0
  446. package/dist/session/session-user-afs.mjs +896 -0
  447. package/dist/session/session-user-afs.mjs.map +1 -0
  448. package/dist/session/settings-cascade.cjs +69 -0
  449. package/dist/session/settings-cascade.d.cts +81 -0
  450. package/dist/session/settings-cascade.d.cts.map +1 -0
  451. package/dist/session/settings-cascade.d.mts +81 -0
  452. package/dist/session/settings-cascade.d.mts.map +1 -0
  453. package/dist/session/settings-cascade.mjs +69 -0
  454. package/dist/session/settings-cascade.mjs.map +1 -0
  455. package/dist/session/settings-resolver.cjs +770 -0
  456. package/dist/session/settings-resolver.d.cts +177 -0
  457. package/dist/session/settings-resolver.d.cts.map +1 -0
  458. package/dist/session/settings-resolver.d.mts +177 -0
  459. package/dist/session/settings-resolver.d.mts.map +1 -0
  460. package/dist/session/settings-resolver.mjs +771 -0
  461. package/dist/session/settings-resolver.mjs.map +1 -0
  462. package/dist/session/settings-schema-store.cjs +0 -0
  463. package/dist/session/settings-schema-store.d.cts +72 -0
  464. package/dist/session/settings-schema-store.d.cts.map +1 -0
  465. package/dist/session/settings-schema-store.d.mts +72 -0
  466. package/dist/session/settings-schema-store.d.mts.map +1 -0
  467. package/dist/session/settings-schema-store.mjs +0 -0
  468. package/dist/session/settings-schema-store.mjs.map +1 -0
  469. package/dist/system-mounts/index.cjs +14 -0
  470. package/dist/system-mounts/index.d.cts +6 -0
  471. package/dist/system-mounts/index.d.mts +6 -0
  472. package/dist/system-mounts/index.mjs +6 -0
  473. package/dist/system-mounts/install.cjs +101 -0
  474. package/dist/system-mounts/install.d.cts +36 -0
  475. package/dist/system-mounts/install.d.cts.map +1 -0
  476. package/dist/system-mounts/install.d.mts +37 -0
  477. package/dist/system-mounts/install.d.mts.map +1 -0
  478. package/dist/system-mounts/install.mjs +102 -0
  479. package/dist/system-mounts/install.mjs.map +1 -0
  480. package/dist/system-mounts/installers.cjs +247 -0
  481. package/dist/system-mounts/installers.d.cts +13 -0
  482. package/dist/system-mounts/installers.d.cts.map +1 -0
  483. package/dist/system-mounts/installers.d.mts +14 -0
  484. package/dist/system-mounts/installers.d.mts.map +1 -0
  485. package/dist/system-mounts/installers.mjs +244 -0
  486. package/dist/system-mounts/installers.mjs.map +1 -0
  487. package/dist/system-mounts/lists.cjs +122 -0
  488. package/dist/system-mounts/lists.d.cts +34 -0
  489. package/dist/system-mounts/lists.d.cts.map +1 -0
  490. package/dist/system-mounts/lists.d.mts +34 -0
  491. package/dist/system-mounts/lists.d.mts.map +1 -0
  492. package/dist/system-mounts/lists.mjs +122 -0
  493. package/dist/system-mounts/lists.mjs.map +1 -0
  494. package/dist/system-mounts/types.d.cts +124 -0
  495. package/dist/system-mounts/types.d.cts.map +1 -0
  496. package/dist/system-mounts/types.d.mts +125 -0
  497. package/dist/system-mounts/types.d.mts.map +1 -0
  498. package/dist/system-mounts/validate.cjs +56 -0
  499. package/dist/system-mounts/validate.d.cts +34 -0
  500. package/dist/system-mounts/validate.d.cts.map +1 -0
  501. package/dist/system-mounts/validate.d.mts +34 -0
  502. package/dist/system-mounts/validate.d.mts.map +1 -0
  503. package/dist/system-mounts/validate.mjs +56 -0
  504. package/dist/system-mounts/validate.mjs.map +1 -0
  505. package/dist/terminal-llm.cjs +90 -0
  506. package/dist/terminal-llm.d.cts +50 -0
  507. package/dist/terminal-llm.d.cts.map +1 -0
  508. package/dist/terminal-llm.d.mts +50 -0
  509. package/dist/terminal-llm.d.mts.map +1 -0
  510. package/dist/terminal-llm.mjs +90 -0
  511. package/dist/terminal-llm.mjs.map +1 -0
  512. package/dist/terminal-repl.cjs +371 -0
  513. package/dist/terminal-repl.d.cts +69 -0
  514. package/dist/terminal-repl.d.cts.map +1 -0
  515. package/dist/terminal-repl.d.mts +69 -0
  516. package/dist/terminal-repl.d.mts.map +1 -0
  517. package/dist/terminal-repl.mjs +370 -0
  518. package/dist/terminal-repl.mjs.map +1 -0
  519. package/dist/transport/idle-timer.cjs +136 -0
  520. package/dist/transport/idle-timer.d.cts +92 -0
  521. package/dist/transport/idle-timer.d.cts.map +1 -0
  522. package/dist/transport/idle-timer.d.mts +92 -0
  523. package/dist/transport/idle-timer.d.mts.map +1 -0
  524. package/dist/transport/idle-timer.mjs +132 -0
  525. package/dist/transport/idle-timer.mjs.map +1 -0
  526. package/dist/web-component-dsl.cjs +153 -0
  527. package/dist/web-component-dsl.d.cts +27 -0
  528. package/dist/web-component-dsl.d.cts.map +1 -0
  529. package/dist/web-component-dsl.d.mts +27 -0
  530. package/dist/web-component-dsl.d.mts.map +1 -0
  531. package/dist/web-component-dsl.mjs +152 -0
  532. package/dist/web-component-dsl.mjs.map +1 -0
  533. package/package.json +81 -0
@@ -0,0 +1,197 @@
1
+ //#region src/blocklet/registry.d.ts
2
+ /**
3
+ * Blocklet Registry — portable, runtime-agnostic discovery and reading.
4
+ *
5
+ * The registry unifies how Node and Cloudflare Worker runtimes discover and
6
+ * read blocklets. Same detector logic runs against both filesystem-backed
7
+ * readers (Node) and static-map-backed readers (CF bundle).
8
+ *
9
+ * Zero platform imports: everything here works unchanged in Node, Bun, Deno,
10
+ * browsers, and Cloudflare Workers.
11
+ */
12
+ /**
13
+ * Read-only view of a single blocklet's files.
14
+ *
15
+ * Paths are relative to the blocklet root (e.g. "index.html", ".aup/app.json").
16
+ * Implementations should normalize leading slashes and `./` prefixes.
17
+ */
18
+ interface BlockletReader {
19
+ /** Return true if a file exists at the given relative path. */
20
+ exists(relPath: string): Promise<boolean>;
21
+ /** Read file contents as UTF-8 text, or undefined if missing. */
22
+ readText(relPath: string): Promise<string | undefined>;
23
+ /**
24
+ * Read file contents as raw bytes, or undefined if missing. Required for
25
+ * binary assets (png / ico / jpg) — using `readText` for those bytes
26
+ * round-trips through UTF-8 and corrupts the file.
27
+ */
28
+ readBytes(relPath: string): Promise<Uint8Array | undefined>;
29
+ /** Return true if any file exists under the given directory path. */
30
+ hasDir(relDir: string): Promise<boolean>;
31
+ /** List relative paths of files directly under `relDir` (non-recursive). */
32
+ listDir(relDir: string): Promise<string[]>;
33
+ /**
34
+ * List entries directly under `relDir` with each one's name + dir/file kind,
35
+ * in ONE backend round-trip. Optional: when present, `detectBlockletPattern`
36
+ * probes blocklet.yaml / .aup / index.* from a single `list` instead of 3-4
37
+ * sequential `exists`/`hasDir` stats — the dominant cold-start cost on CF
38
+ * DID-Space (issue #808: `resolve.pattern` ~665ms → ~150ms). Readers whose
39
+ * per-entry stat is already cheap (fs, in-memory map) may omit it;
40
+ * `detectBlockletPattern` falls back to the sequential probes.
41
+ */
42
+ listEntries?(relDir: string): Promise<Array<{
43
+ name: string;
44
+ isDir: boolean;
45
+ }>>;
46
+ }
47
+ /** Normalize a relative path: strip leading `/` and `./`, collapse `//`. */
48
+ declare function normalizeRel(p: string): string;
49
+ /**
50
+ * Create a reader backed by an in-memory map of relative paths → file content.
51
+ */
52
+ declare function createMapBlockletReader(files: Record<string, string>): BlockletReader;
53
+ type BlockletPatternKind = /** Directory has an explicit blocklet.yaml — use it as the source of truth. */"manifest" /** Zero-config Pattern A — directory has a .aup/ subdirectory. */ | "zero-aup" /** Zero-config Pattern S — directory has index.html at root. */ | "zero-web" /** Zero-config Pattern B — directory has index.txt / index.md / index.ans at root. */ | "zero-terminal";
54
+ interface BlockletPattern {
55
+ kind: BlockletPatternKind;
56
+ /** For Pattern B — which index file was found. */
57
+ terminalIndexFile?: string;
58
+ /** For Pattern B — MIME type of the index file. */
59
+ terminalIndexContentType?: string;
60
+ }
61
+ /** Terminal entry filename + MIME type recognised by Pattern B zero-config. */
62
+ declare const TERMINAL_INDEX_FILES: ReadonlyArray<{
63
+ file: string;
64
+ contentType: string;
65
+ }>;
66
+ /**
67
+ * Inspect a blocklet reader and return its pattern.
68
+ *
69
+ * Precedence (same as the fs-based version):
70
+ * 1. blocklet.yaml → "manifest"
71
+ * 2. .aup/ → "zero-aup"
72
+ * 3. index.html → "zero-web"
73
+ * 4. index.{txt,md,ans} → "zero-terminal"
74
+ * 5. otherwise → null
75
+ */
76
+ declare function detectBlockletPattern(reader: BlockletReader): Promise<BlockletPattern | null>;
77
+ /**
78
+ * Registry of available blocklets. Runtime-specific implementations:
79
+ * - Node: scans a filesystem directory (see runtimes/node/.../fs-blocklet-registry.ts)
80
+ * - CF Worker: reads from a bundled static map (createStaticBlockletRegistry)
81
+ * - Future: resolves via DID document
82
+ */
83
+ interface BlockletRegistry {
84
+ /** Source label for logging ("local", "embedded", "remote"). */
85
+ readonly source: "local" | "embedded" | "remote";
86
+ /** List all known blocklet names. */
87
+ list(): Promise<string[]>;
88
+ /** Return the canonical blocklet name for a lookup key or alias, if found. */
89
+ resolveName?(name: string): Promise<string | null>;
90
+ /** Return a reader for the named blocklet, or null if not found. */
91
+ reader(name: string): Promise<BlockletReader | null>;
92
+ /**
93
+ * Resolve the raw `(afs, rootPath)` pair backing this blocklet, for
94
+ * consumers that need list/read/stat against a stable AFS path rather than
95
+ * the narrower `BlockletReader` surface (e.g. the Web Device SiteServer,
96
+ * which walks its own sub-paths directly). Optional — registries backed by
97
+ * a non-path-addressable store (e.g. an embedded static map) omit it.
98
+ * Returns null when the blocklet is unknown or has no raw AFS root.
99
+ */
100
+ afsRoot?(name: string): Promise<{
101
+ afs: BlockletAfsReader;
102
+ rootPath: string;
103
+ } | null>;
104
+ }
105
+ /**
106
+ * Create a registry backed by a static `{ name → { relPath → content } }` map.
107
+ * Used by CF Worker to serve blocklets embedded at build time.
108
+ */
109
+ declare function createStaticBlockletRegistry(blocklets: Record<string, Record<string, string>>): BlockletRegistry;
110
+ /**
111
+ * Minimal AFS surface this module needs. Typed loosely to avoid dragging the
112
+ * full `@aigne/afs` AFS type into aos's public surface — only `read`, `list`,
113
+ * and `stat` are consumed, and only their happy-path shape.
114
+ */
115
+ /**
116
+ * Read options forwarded to the underlying AFS. Only the fields the blocklet
117
+ * serve path needs are surfaced here — chiefly `includeActions:"none"`, which
118
+ * skips the per-read semantic-action probe (`list <path>/.actions`) that pure
119
+ * byte-serving reads never use (issue #808). Simple readers that don't wrap a
120
+ * real AFS ignore it (they have no actions anyway).
121
+ */
122
+ interface BlockletAfsReadOptions {
123
+ includeActions?: "none" | "refs" | "schemas";
124
+ /**
125
+ * For `stat` only: skip the `read()` fallback when the provider's stat handler
126
+ * reports the path absent (issue #808). The bundle-cid probe sets it — a stat
127
+ * miss means "no bundle", so the read fallback would only miss again. Mirrors
128
+ * {@link AFSStatOptions.noReadFallback}; a real AFS forwards it, simple readers
129
+ * ignore it.
130
+ */
131
+ noReadFallback?: boolean;
132
+ }
133
+ interface BlockletAfsReader {
134
+ read(path: string, options?: BlockletAfsReadOptions): Promise<{
135
+ data?: {
136
+ content?: unknown;
137
+ } | null | undefined;
138
+ } | null | undefined>;
139
+ list(path: string): Promise<{
140
+ data?: ReadonlyArray<{
141
+ path: string;
142
+ meta?: {
143
+ kind?: string;
144
+ childrenCount?: number;
145
+ } | null | undefined;
146
+ }> | null | undefined;
147
+ }>;
148
+ stat(path: string, options?: BlockletAfsReadOptions): Promise<{
149
+ data?: {
150
+ meta?: {
151
+ kind?: string;
152
+ childrenCount?: number;
153
+ } | null | undefined;
154
+ } | null | undefined;
155
+ } | null>;
156
+ /**
157
+ * Optional batch read — fetch many file paths in one shot (issue #808
158
+ * follow-up). A real AFS pushes this to the DID-Space provider's `getMany`
159
+ * (one `IN(…)` D1 query, inline content → zero R2). `ReadonlyMap` (not `Map`)
160
+ * so a concrete `Map<string, AFSEntry | null>` stays assignable here despite
161
+ * `Map`'s invariance. Absent → callers fall back to per-path `read`.
162
+ */
163
+ readMany?(paths: string[]): Promise<ReadonlyMap<string, {
164
+ content?: unknown;
165
+ } | null>>;
166
+ }
167
+ /** Create a BlockletReader that serves one blocklet rooted at `blockletRoot` in AFS. */
168
+ declare function createAfsBlockletReader(afs: BlockletAfsReader, blockletRoot: string): BlockletReader;
169
+ /** Options for `createAfsBlockletRegistry`. */
170
+ interface AfsBlockletRegistryOptions {
171
+ afs: BlockletAfsReader;
172
+ /** AFS paths to search for blocklet directories, e.g. `["/blocklets"]`. */
173
+ searchPaths: string[];
174
+ /** Source label (default `"local"`). */
175
+ source?: BlockletRegistry["source"];
176
+ }
177
+ /**
178
+ * Create a registry that discovers blocklets under one or more AFS paths.
179
+ *
180
+ * Each search path is listed; every immediate child directory is treated as a
181
+ * candidate blocklet and probed via `detectBlockletPattern`. First match wins
182
+ * when the same blocklet name appears in multiple search paths.
183
+ */
184
+ declare function createAfsBlockletRegistry(opts: AfsBlockletRegistryOptions): BlockletRegistry;
185
+ interface BlockletPatternCache {
186
+ resolve(name: string): Promise<BlockletPattern | null>;
187
+ resolveName(name: string): Promise<string | null>;
188
+ readerFor(name: string): Promise<BlockletReader | null>;
189
+ }
190
+ /**
191
+ * `null` as a tombstone for "name is known but has no valid pattern" keeps
192
+ * repeated negative lookups cheap.
193
+ */
194
+ declare function createPatternCache(registry: BlockletRegistry): BlockletPatternCache;
195
+ //#endregion
196
+ export { AfsBlockletRegistryOptions, BlockletAfsReader, BlockletPattern, BlockletPatternCache, BlockletPatternKind, BlockletReader, BlockletRegistry, TERMINAL_INDEX_FILES, createAfsBlockletReader, createAfsBlockletRegistry, createMapBlockletReader, createPatternCache, createStaticBlockletRegistry, detectBlockletPattern, normalizeRel };
197
+ //# sourceMappingURL=registry.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.mts","names":[],"sources":["../../src/blocklet/registry.ts"],"mappings":";;AA+BA;;;;;;;;;;;;;;;UAAiB,cAAA;EAIf;EAFA,MAAA,CAAO,OAAA,WAAkB,OAAA;EAEE;EAA3B,QAAA,CAAS,OAAA,WAAkB,OAAA;EAMjB;;;;;EAAV,SAAA,CAAU,OAAA,WAAkB,OAAA,CAAQ,UAAA;EAIpC;EAFA,MAAA,CAAO,MAAA,WAAiB,OAAA;EAEC;EAAzB,OAAA,CAAQ,MAAA,WAAiB,OAAA;EAUZ;;;;;;;AAIf;;EAJE,WAAA,EAAa,MAAA,WAAiB,OAAA,CAAQ,KAAA;IAAQ,IAAA;IAAc,KAAA;EAAA;AAAA;;iBAI9C,YAAA,CAAa,CAAA;;;;iBASb,uBAAA,CAAwB,KAAA,EAAO,MAAA,mBAAyB,cAAA;AAAA,KAyD5D,mBAAA,GAAZ;UAUiB,eAAA;EACf,IAAA,EAAM,mBAAA;EAAA;EAEN,iBAAA;EAEA;EAAA,wBAAA;AAAA;AAIF;AAAA,cAAa,oBAAA,EAAsB,aAAA;EAAgB,IAAA;EAAc,WAAA;AAAA;;;;;AAgBjE;;;;;;iBAAsB,qBAAA,CACpB,MAAA,EAAQ,cAAA,GACP,OAAA,CAAQ,eAAA;;;;;;;UAuDM,gBAAA;EAAA;EAAA,SAEN,MAAA;;EAET,IAAA,IAAQ,OAAA;EAEoB;EAA5B,WAAA,EAAa,IAAA,WAAe,OAAA;EAEN;EAAtB,MAAA,CAAO,IAAA,WAAe,OAAA,CAAQ,cAAA;EASN;;;;;;;;EAAxB,OAAA,EAAS,IAAA,WAAe,OAAA;IAAU,GAAA,EAAK,iBAAA;IAAmB,QAAA;EAAA;AAAA;;;;;iBAO5C,4BAAA,CACd,SAAA,EAAW,MAAA,SAAe,MAAA,oBACzB,gBAAA;;;;AAFH;;;;;;;;;UAuCiB,sBAAA;EACf,cAAA;EAtCC;;;AAqCH;;;;EASE,cAAA;AAAA;AAAA,UAGe,iBAAA;EACf,IAAA,CACE,IAAA,UACA,OAAA,GAAU,sBAAA,GACT,OAAA;IAAU,IAAA;MAAS,OAAA;IAAA;EAAA;EAKtB,IAAA,CAAK,IAAA,WAAe,OAAA;IAClB,IAAA,GACI,aAAA;MACE,IAAA;MACA,IAAA;QAAS,IAAA;QAAe,aAAA;MAAA;IAAA;EAAA;EAKhC,IAAA,CACE,IAAA,UACA,OAAA,GAAU,sBAAA,GACT,OAAA;IACD,IAAA;MACM,IAAA;QAAS,IAAA;QAAe,aAAA;MAAA;IAAA;EAAA;EAZ1B;;;;;;;EAuBN,QAAA,EAAU,KAAA,aAAkB,OAAA,CAAQ,WAAA;IAAsB,OAAA;EAAA;AAAA;;iBAmB5C,uBAAA,CACd,GAAA,EAAK,iBAAA,EACL,YAAA,WACC,cAAA;;UAsFc,0BAAA;EACf,GAAA,EAAK,iBAAA;EA7GuB;EA+G5B,WAAA;EA/G0D;EAiH1D,MAAA,GAAS,gBAAA;AAAA;AA9FX;;;;;;;AAAA,iBAwGgB,yBAAA,CAA0B,IAAA,EAAM,0BAAA,GAA6B,gBAAA;AAAA,UAwN5D,oBAAA;EACf,OAAA,CAAQ,IAAA,WAAe,OAAA,CAAQ,eAAA;EAC/B,WAAA,CAAY,IAAA,WAAe,OAAA;EAC3B,SAAA,CAAU,IAAA,WAAe,OAAA,CAAQ,cAAA;AAAA;;;;;iBAOnB,kBAAA,CAAmB,QAAA,EAAU,gBAAA,GAAmB,oBAAA"}
@@ -0,0 +1,441 @@
1
+ import { joinURL } from "ufo";
2
+ import { makeNsLog } from "@aigne/afs";
3
+ import { time } from "@aigne/afs-timing";
4
+
5
+ //#region src/blocklet/registry.ts
6
+ /**
7
+ * Blocklet Registry — portable, runtime-agnostic discovery and reading.
8
+ *
9
+ * The registry unifies how Node and Cloudflare Worker runtimes discover and
10
+ * read blocklets. Same detector logic runs against both filesystem-backed
11
+ * readers (Node) and static-map-backed readers (CF bundle).
12
+ *
13
+ * Zero platform imports: everything here works unchanged in Node, Bun, Deno,
14
+ * browsers, and Cloudflare Workers.
15
+ */
16
+ const log = makeNsLog("aos");
17
+ const UTF8_DECODER = new TextDecoder("utf-8");
18
+ const UTF8_ENCODER = new TextEncoder();
19
+ const ALIASES_PATH = ".afs/aliases.json";
20
+ /** Normalize a relative path: strip leading `/` and `./`, collapse `//`. */
21
+ function normalizeRel(p) {
22
+ let s = p.replace(/^\.\//, "").replace(/^\/+/, "").replace(/\/+/g, "/");
23
+ if (s.endsWith("/")) s = s.slice(0, -1);
24
+ return s;
25
+ }
26
+ /**
27
+ * Create a reader backed by an in-memory map of relative paths → file content.
28
+ */
29
+ function createMapBlockletReader(files) {
30
+ const normalized = {};
31
+ for (const [k, v] of Object.entries(files)) normalized[normalizeRel(k)] = v;
32
+ const keys = Object.keys(normalized);
33
+ return {
34
+ async exists(relPath) {
35
+ return Object.hasOwn(normalized, normalizeRel(relPath));
36
+ },
37
+ async readText(relPath) {
38
+ return normalized[normalizeRel(relPath)];
39
+ },
40
+ async readBytes(relPath) {
41
+ const text = normalized[normalizeRel(relPath)];
42
+ return text === void 0 ? void 0 : UTF8_ENCODER.encode(text);
43
+ },
44
+ async hasDir(relDir) {
45
+ const prefix = `${normalizeRel(relDir)}/`;
46
+ return keys.some((k) => k.startsWith(prefix));
47
+ },
48
+ async listDir(relDir) {
49
+ const prefix = normalizeRel(relDir) === "" ? "" : `${normalizeRel(relDir)}/`;
50
+ const seen = /* @__PURE__ */ new Set();
51
+ for (const k of keys) {
52
+ if (!k.startsWith(prefix)) continue;
53
+ const rest = k.slice(prefix.length);
54
+ const firstSlash = rest.indexOf("/");
55
+ seen.add(firstSlash < 0 ? rest : rest.slice(0, firstSlash));
56
+ }
57
+ return [...seen];
58
+ },
59
+ async listEntries(relDir) {
60
+ const prefix = normalizeRel(relDir) === "" ? "" : `${normalizeRel(relDir)}/`;
61
+ const seen = /* @__PURE__ */ new Map();
62
+ for (const k of keys) {
63
+ if (!k.startsWith(prefix)) continue;
64
+ const rest = k.slice(prefix.length);
65
+ const firstSlash = rest.indexOf("/");
66
+ const name = firstSlash < 0 ? rest : rest.slice(0, firstSlash);
67
+ if (name === "") continue;
68
+ const isDir = firstSlash >= 0;
69
+ if (isDir || !seen.has(name)) seen.set(name, isDir);
70
+ }
71
+ return [...seen].map(([name, isDir]) => ({
72
+ name,
73
+ isDir
74
+ }));
75
+ }
76
+ };
77
+ }
78
+ /** Terminal entry filename + MIME type recognised by Pattern B zero-config. */
79
+ const TERMINAL_INDEX_FILES = [
80
+ {
81
+ file: "index.txt",
82
+ contentType: "text/plain; charset=utf-8"
83
+ },
84
+ {
85
+ file: "index.md",
86
+ contentType: "text/markdown; charset=utf-8"
87
+ },
88
+ {
89
+ file: "index.ans",
90
+ contentType: "text/plain; charset=utf-8"
91
+ }
92
+ ];
93
+ /**
94
+ * Inspect a blocklet reader and return its pattern.
95
+ *
96
+ * Precedence (same as the fs-based version):
97
+ * 1. blocklet.yaml → "manifest"
98
+ * 2. .aup/ → "zero-aup"
99
+ * 3. index.html → "zero-web"
100
+ * 4. index.{txt,md,ans} → "zero-terminal"
101
+ * 5. otherwise → null
102
+ */
103
+ async function detectBlockletPattern(reader) {
104
+ if (reader.listEntries) {
105
+ const entries = await time("resolve.pattern.list", () => reader.listEntries(""));
106
+ const isFile = (name) => entries.some((e) => e.name === name && !e.isDir);
107
+ if (isFile("blocklet.yaml")) return { kind: "manifest" };
108
+ if (entries.some((e) => e.name === ".aup" && e.isDir)) return { kind: "zero-aup" };
109
+ if (isFile("index.html")) return { kind: "zero-web" };
110
+ for (const { file, contentType } of TERMINAL_INDEX_FILES) if (isFile(file)) return {
111
+ kind: "zero-terminal",
112
+ terminalIndexFile: file,
113
+ terminalIndexContentType: contentType
114
+ };
115
+ return null;
116
+ }
117
+ if (await reader.exists("blocklet.yaml")) return { kind: "manifest" };
118
+ if (await reader.hasDir(".aup")) return { kind: "zero-aup" };
119
+ if (await reader.exists("index.html")) return { kind: "zero-web" };
120
+ for (const { file, contentType } of TERMINAL_INDEX_FILES) if (await reader.exists(file)) return {
121
+ kind: "zero-terminal",
122
+ terminalIndexFile: file,
123
+ terminalIndexContentType: contentType
124
+ };
125
+ return null;
126
+ }
127
+ /**
128
+ * Create a registry backed by a static `{ name → { relPath → content } }` map.
129
+ * Used by CF Worker to serve blocklets embedded at build time.
130
+ */
131
+ function createStaticBlockletRegistry(blocklets) {
132
+ const readers = /* @__PURE__ */ new Map();
133
+ for (const [name, files] of Object.entries(blocklets)) readers.set(name, createMapBlockletReader(files));
134
+ return {
135
+ source: "embedded",
136
+ async list() {
137
+ return [...readers.keys()];
138
+ },
139
+ async resolveName(name) {
140
+ return readers.has(name) ? name : null;
141
+ },
142
+ async reader(name) {
143
+ return readers.get(name) ?? null;
144
+ }
145
+ };
146
+ }
147
+ /**
148
+ * Directories in AFS always carry `childrenCount` in their meta. Leaves (files,
149
+ * actions) do not. This matches the predicate used by `convention-scanner` in
150
+ * @aigne/afs. Avoids stringly-typed kind matching that would drift as providers
151
+ * add new kinds.
152
+ */
153
+ function isDirEntry(meta) {
154
+ return meta?.childrenCount !== void 0 && meta.childrenCount !== null;
155
+ }
156
+ function lastSegment(p) {
157
+ const i = p.lastIndexOf("/");
158
+ return i < 0 ? p : p.slice(i + 1);
159
+ }
160
+ /** Create a BlockletReader that serves one blocklet rooted at `blockletRoot` in AFS. */
161
+ function createAfsBlockletReader(afs, blockletRoot) {
162
+ const NO_ACTIONS = { includeActions: "none" };
163
+ return {
164
+ async exists(relPath) {
165
+ const p = joinURL(blockletRoot, normalizeRel(relPath));
166
+ try {
167
+ const meta = (await afs.stat(p, NO_ACTIONS))?.data?.meta;
168
+ if (!meta) return false;
169
+ return !isDirEntry(meta);
170
+ } catch {
171
+ return false;
172
+ }
173
+ },
174
+ async readText(relPath) {
175
+ const p = joinURL(blockletRoot, normalizeRel(relPath));
176
+ try {
177
+ const content = (await afs.read(p, NO_ACTIONS))?.data?.content;
178
+ if (typeof content === "string") return content;
179
+ if (content instanceof Uint8Array) return UTF8_DECODER.decode(content);
180
+ if (content instanceof ArrayBuffer) return UTF8_DECODER.decode(new Uint8Array(content));
181
+ return;
182
+ } catch {
183
+ return;
184
+ }
185
+ },
186
+ async readBytes(relPath) {
187
+ const p = joinURL(blockletRoot, normalizeRel(relPath));
188
+ try {
189
+ const content = (await afs.read(p, NO_ACTIONS))?.data?.content;
190
+ if (content instanceof Uint8Array) return content;
191
+ if (content instanceof ArrayBuffer) return new Uint8Array(content);
192
+ if (typeof content === "string") return UTF8_ENCODER.encode(content);
193
+ return;
194
+ } catch {
195
+ return;
196
+ }
197
+ },
198
+ async hasDir(relDir) {
199
+ const p = joinURL(blockletRoot, normalizeRel(relDir));
200
+ try {
201
+ return isDirEntry((await afs.stat(p, NO_ACTIONS))?.data?.meta);
202
+ } catch {
203
+ return false;
204
+ }
205
+ },
206
+ async listDir(relDir) {
207
+ const p = joinURL(blockletRoot, normalizeRel(relDir));
208
+ try {
209
+ return ((await afs.list(p))?.data ?? []).map((e) => lastSegment(e.path));
210
+ } catch {
211
+ return [];
212
+ }
213
+ },
214
+ async listEntries(relDir) {
215
+ const p = joinURL(blockletRoot, normalizeRel(relDir));
216
+ try {
217
+ return ((await afs.list(p))?.data ?? []).map((e) => ({
218
+ name: lastSegment(e.path),
219
+ isDir: isDirEntry(e.meta)
220
+ }));
221
+ } catch {
222
+ return [];
223
+ }
224
+ }
225
+ };
226
+ }
227
+ /**
228
+ * Create a registry that discovers blocklets under one or more AFS paths.
229
+ *
230
+ * Each search path is listed; every immediate child directory is treated as a
231
+ * candidate blocklet and probed via `detectBlockletPattern`. First match wins
232
+ * when the same blocklet name appears in multiple search paths.
233
+ */
234
+ function createAfsBlockletRegistry(opts) {
235
+ const { afs, searchPaths, source = "local" } = opts;
236
+ const readerCache = /* @__PURE__ */ new Map();
237
+ const dirCache = /* @__PURE__ */ new Map();
238
+ const canonicalNameCache = /* @__PURE__ */ new Map();
239
+ const aliasCache = /* @__PURE__ */ new Map();
240
+ const aliasesLoaded = /* @__PURE__ */ new Set();
241
+ const aliasLoadPromises = /* @__PURE__ */ new Map();
242
+ let listPromise;
243
+ function isSafeRegistryName(value) {
244
+ return value.length > 0 && value.length <= 253 && !value.includes("/") && !value.includes("\\") && !value.includes("..") && !value.includes("@");
245
+ }
246
+ function isNotFoundError(err) {
247
+ if (!err || typeof err !== "object") return false;
248
+ const maybe = err;
249
+ if (maybe.name === "AFSNotFoundError" || maybe.code === "AFS_NOT_FOUND") return true;
250
+ return typeof maybe.message === "string" && /not found/i.test(maybe.message);
251
+ }
252
+ async function loadAliases(base) {
253
+ if (aliasesLoaded.has(base)) return;
254
+ const existing = aliasLoadPromises.get(base);
255
+ if (existing) return existing;
256
+ let cacheableResult = false;
257
+ const promise = (async () => {
258
+ try {
259
+ const res = await afs.read(joinURL(base, ALIASES_PATH));
260
+ cacheableResult = true;
261
+ const raw = decodeAfsContent(res?.data);
262
+ if (!raw) return;
263
+ const parsed = JSON.parse(raw);
264
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return;
265
+ for (const [alias, target] of Object.entries(parsed)) {
266
+ if (typeof target !== "string") continue;
267
+ const key = alias.trim().toLowerCase();
268
+ const value = target.trim();
269
+ if (!isSafeRegistryName(key) || !isSafeRegistryName(value)) continue;
270
+ aliasCache.set(key, value);
271
+ }
272
+ } catch (err) {
273
+ cacheableResult = cacheableResult || isNotFoundError(err);
274
+ } finally {
275
+ if (cacheableResult) aliasesLoaded.add(base);
276
+ aliasLoadPromises.delete(base);
277
+ }
278
+ })();
279
+ aliasLoadPromises.set(base, promise);
280
+ return promise;
281
+ }
282
+ async function resolveAlias(name) {
283
+ const key = name.trim().toLowerCase();
284
+ const cached = aliasCache.get(key);
285
+ if (cached !== void 0) return cached;
286
+ for (const base of searchPaths) {
287
+ await loadAliases(base);
288
+ const target = aliasCache.get(key);
289
+ if (target !== void 0) return target;
290
+ }
291
+ return null;
292
+ }
293
+ async function resolveLocation(name) {
294
+ const cached = dirCache.get(name);
295
+ const cachedName = canonicalNameCache.get(name);
296
+ if (cached !== void 0 && cachedName !== void 0) return {
297
+ canonicalName: cachedName,
298
+ dir: cached
299
+ };
300
+ const directProbe = resolveDirectDir(name);
301
+ const aliasTarget = await resolveAlias(name);
302
+ if (aliasTarget && aliasTarget !== name) {
303
+ const aliasDir = await resolveDirectDir(aliasTarget);
304
+ if (aliasDir) {
305
+ dirCache.set(name, aliasDir);
306
+ canonicalNameCache.set(name, aliasTarget);
307
+ dirCache.set(aliasTarget, aliasDir);
308
+ canonicalNameCache.set(aliasTarget, aliasTarget);
309
+ return {
310
+ canonicalName: aliasTarget,
311
+ dir: aliasDir
312
+ };
313
+ }
314
+ }
315
+ const directDir = await directProbe;
316
+ if (directDir) {
317
+ dirCache.set(name, directDir);
318
+ canonicalNameCache.set(name, name);
319
+ return {
320
+ canonicalName: name,
321
+ dir: directDir
322
+ };
323
+ }
324
+ return null;
325
+ }
326
+ async function resolveDir(name) {
327
+ return (await resolveLocation(name))?.dir ?? null;
328
+ }
329
+ function decodeAfsContent(raw) {
330
+ const content = raw?.content;
331
+ if (typeof content === "string") return content;
332
+ if (content instanceof Uint8Array) return UTF8_DECODER.decode(content);
333
+ if (content instanceof ArrayBuffer) return UTF8_DECODER.decode(new Uint8Array(content));
334
+ return "";
335
+ }
336
+ async function resolveDirectDir(name) {
337
+ for (const base of searchPaths) {
338
+ const full = joinURL(base, name);
339
+ try {
340
+ if (isDirEntry((await afs.stat(full))?.data?.meta)) return full;
341
+ } catch {}
342
+ }
343
+ return null;
344
+ }
345
+ async function computeList() {
346
+ const found = /* @__PURE__ */ new Set();
347
+ for (const base of searchPaths) {
348
+ let entries = [];
349
+ try {
350
+ entries = (await afs.list(base))?.data ?? [];
351
+ } catch (err) {
352
+ log.warn(`[aos] blocklet-registry: list("${base}") failed:`, err);
353
+ continue;
354
+ }
355
+ const checks = await Promise.all(entries.map(async (e) => {
356
+ if (!isDirEntry(e.meta)) return null;
357
+ const name = lastSegment(e.path);
358
+ if (found.has(name)) return null;
359
+ return await detectBlockletPattern(createAfsBlockletReader(afs, joinURL(base, name))) ? name : null;
360
+ }));
361
+ for (const n of checks) if (n) found.add(n);
362
+ await loadAliases(base);
363
+ for (const [alias, target] of aliasCache) {
364
+ if (found.has(alias)) continue;
365
+ const targetDir = await resolveDirectDir(target);
366
+ if (!targetDir) continue;
367
+ if (await detectBlockletPattern(createAfsBlockletReader(afs, targetDir))) found.add(alias);
368
+ }
369
+ }
370
+ return [...found];
371
+ }
372
+ return {
373
+ source,
374
+ async list() {
375
+ if (!listPromise) {
376
+ listPromise = computeList();
377
+ listPromise.catch(() => {
378
+ listPromise = void 0;
379
+ });
380
+ }
381
+ return listPromise;
382
+ },
383
+ async resolveName(name) {
384
+ return (await resolveLocation(name))?.canonicalName ?? null;
385
+ },
386
+ async reader(name) {
387
+ if (readerCache.has(name)) return readerCache.get(name) ?? null;
388
+ const dir = await resolveDir(name);
389
+ if (!dir) return null;
390
+ const reader = createAfsBlockletReader(afs, dir);
391
+ readerCache.set(name, reader);
392
+ return reader;
393
+ },
394
+ async afsRoot(name) {
395
+ const dir = await resolveDir(name);
396
+ if (!dir) return null;
397
+ return {
398
+ afs,
399
+ rootPath: dir
400
+ };
401
+ }
402
+ };
403
+ }
404
+ /**
405
+ * `null` as a tombstone for "name is known but has no valid pattern" keeps
406
+ * repeated negative lookups cheap.
407
+ */
408
+ function createPatternCache(registry) {
409
+ const patterns = /* @__PURE__ */ new Map();
410
+ const readers = /* @__PURE__ */ new Map();
411
+ async function readerFor(name) {
412
+ const cached = readers.get(name);
413
+ if (cached !== void 0) return cached;
414
+ const r = await registry.reader(name);
415
+ if (r) readers.set(name, r);
416
+ return r;
417
+ }
418
+ async function resolve(name) {
419
+ const cached = patterns.get(name);
420
+ if (cached !== void 0) return cached;
421
+ const reader = await readerFor(name);
422
+ if (!reader) return null;
423
+ const pattern = await time("resolve.pattern", () => detectBlockletPattern(reader));
424
+ if (pattern) patterns.set(name, pattern);
425
+ return pattern;
426
+ }
427
+ async function resolveName(name) {
428
+ const lookupName = (registry.resolveName ? await registry.resolveName(name) : null) ?? name;
429
+ if (!await resolve(lookupName)) return null;
430
+ return lookupName;
431
+ }
432
+ return {
433
+ resolve,
434
+ resolveName,
435
+ readerFor
436
+ };
437
+ }
438
+
439
+ //#endregion
440
+ export { TERMINAL_INDEX_FILES, createAfsBlockletReader, createAfsBlockletRegistry, createMapBlockletReader, createPatternCache, createStaticBlockletRegistry, detectBlockletPattern, normalizeRel };
441
+ //# sourceMappingURL=registry.mjs.map