@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,332 @@
1
+ import { parseDeclaration, parseDslStringToken } from "../dsl-shared.mjs";
2
+
3
+ //#region src/auto-surface/definition-dsl.ts
4
+ var AutoSurfaceDefinitionDslCompileError = class extends Error {
5
+ constructor(message, line, column = 1) {
6
+ super(`${line}:${column} ${message}`);
7
+ this.line = line;
8
+ this.column = column;
9
+ this.name = "AutoSurfaceDefinitionDslCompileError";
10
+ }
11
+ };
12
+ const VALUE_TYPES = new Set([
13
+ "string",
14
+ "number",
15
+ "boolean",
16
+ "select",
17
+ "textarea",
18
+ "json"
19
+ ]);
20
+ const LAYERS = new Set([
21
+ "system",
22
+ "package",
23
+ "instance",
24
+ "user"
25
+ ]);
26
+ const LAYER_ORDER = [
27
+ "system",
28
+ "package",
29
+ "instance",
30
+ "user"
31
+ ];
32
+ function compileAutoSurfaceDefinitionDsl(source) {
33
+ const declaration = parseDeclaration(source, {
34
+ kind: "surface-definitions",
35
+ allowQuotedTitle: true,
36
+ expected: "Expected surface-definitions <id> \"Title\" {",
37
+ fieldKeywords: [
38
+ "order",
39
+ "description",
40
+ "page",
41
+ "section",
42
+ "field",
43
+ "default",
44
+ "scopes",
45
+ "binding",
46
+ "resource-id",
47
+ "options",
48
+ "validation",
49
+ "policy",
50
+ "presentations",
51
+ "metadata"
52
+ ],
53
+ nestedFieldKeywords: [
54
+ "page",
55
+ "section",
56
+ "field"
57
+ ],
58
+ error: parseSharedError
59
+ });
60
+ if (!declaration.title) throw new AutoSurfaceDefinitionDslCompileError("Expected surface-definitions <id> \"Title\" {", declaration.idToken.line, declaration.idToken.column);
61
+ const group = {
62
+ id: declaration.id,
63
+ title: declaration.title,
64
+ pages: []
65
+ };
66
+ for (const field of declaration.fields) {
67
+ if (parseSharedMetaField(group, field)) continue;
68
+ if (field.name.value !== "page") throw unsupportedField("surface-definitions", field);
69
+ group.pages.push(parsePageField(field));
70
+ }
71
+ return {
72
+ group,
73
+ files: buildDefinitionFiles(group)
74
+ };
75
+ }
76
+ function formatAutoSurfaceDefinitionDsl(source) {
77
+ const compiled = compileAutoSurfaceDefinitionDsl(source);
78
+ const lines = [];
79
+ emitGroup(lines, compiled.group, 0);
80
+ return `${lines.join("\n")}\n`;
81
+ }
82
+ function parsePageField(field) {
83
+ const head = parseIdTitleField(field, "Expected page <id> \"Title\" {");
84
+ const page = {
85
+ id: head.id,
86
+ title: head.title,
87
+ sections: [],
88
+ fields: []
89
+ };
90
+ for (const child of field.children ?? []) {
91
+ if (parseSharedMetaField(page, child)) continue;
92
+ if (child.name.value === "section") {
93
+ page.sections.push(parseSectionField(child));
94
+ continue;
95
+ }
96
+ if (child.name.value === "field") {
97
+ page.fields.push(parseResourceField(child));
98
+ continue;
99
+ }
100
+ throw unsupportedField("page", child);
101
+ }
102
+ return page;
103
+ }
104
+ function parseSectionField(field) {
105
+ const head = parseIdTitleField(field, "Expected section <id> \"Title\" {");
106
+ const section = {
107
+ id: head.id,
108
+ title: head.title,
109
+ fields: []
110
+ };
111
+ for (const child of field.children ?? []) {
112
+ if (parseSharedMetaField(section, child)) continue;
113
+ if (child.name.value === "field") {
114
+ section.fields.push(parseResourceField(child));
115
+ continue;
116
+ }
117
+ throw unsupportedField("section", child);
118
+ }
119
+ return section;
120
+ }
121
+ function parseResourceField(field) {
122
+ const id = field.values[0];
123
+ const typeToken = field.values[1];
124
+ const title = field.values[2];
125
+ if (field.values.length !== 3 || id?.type !== "word" || typeToken?.type !== "word" || title?.type !== "string") throw new AutoSurfaceDefinitionDslCompileError("Expected field <id> <type> \"Title\" {", field.name.line, field.name.column);
126
+ const type = typeToken.value;
127
+ if (!VALUE_TYPES.has(type)) throw new AutoSurfaceDefinitionDslCompileError(`Unsupported field type: ${type}`, typeToken.line, typeToken.column);
128
+ const resource = {
129
+ id: id.value,
130
+ type,
131
+ title: parseDslStringToken(title, parseSharedError)
132
+ };
133
+ for (const child of field.children ?? []) {
134
+ if (parseSharedMetaField(resource, child)) continue;
135
+ parseFieldAttributeField(resource, child);
136
+ }
137
+ return resource;
138
+ }
139
+ function parseSharedMetaField(node, field) {
140
+ if (field.name.value === "order") {
141
+ if ("type" in node) return false;
142
+ node.order = parseNumberField(field, "order");
143
+ return true;
144
+ }
145
+ if (field.name.value === "description") {
146
+ const value = parseJsonValueFromTokens(field.values, field.name.line, field.name.column);
147
+ if (typeof value !== "string") throw new AutoSurfaceDefinitionDslCompileError("description must be a string", field.name.line, field.name.column);
148
+ node.description = value;
149
+ return true;
150
+ }
151
+ return false;
152
+ }
153
+ function parseFieldAttributeField(field, attribute) {
154
+ if (attribute.name.value === "default") {
155
+ field.defaultValue = parseJsonValueFromTokens(attribute.values, attribute.name.line, attribute.name.column);
156
+ return;
157
+ }
158
+ if (attribute.name.value === "scopes") {
159
+ const scopes = parseJsonValueFromTokens(attribute.values, attribute.name.line, attribute.name.column);
160
+ if (!Array.isArray(scopes) || !scopes.every((scope) => typeof scope === "string" && LAYERS.has(scope))) throw new AutoSurfaceDefinitionDslCompileError("scopes must be an array of \"system\", \"package\", \"instance\", or \"user\"", attribute.name.line, attribute.name.column);
161
+ field.scopes = scopes;
162
+ return;
163
+ }
164
+ if (attribute.name.value === "binding") {
165
+ const layerToken = attribute.values[0];
166
+ if (layerToken?.type !== "word" || attribute.values.length < 2) throw new AutoSurfaceDefinitionDslCompileError("Expected binding <layer> \"<path>\"", attribute.name.line, attribute.name.column);
167
+ const layer = layerToken.value;
168
+ if (!LAYERS.has(layer)) throw new AutoSurfaceDefinitionDslCompileError(`Unsupported binding layer: ${layer}`, layerToken.line, layerToken.column);
169
+ const value = parseJsonValueFromTokens(attribute.values.slice(1), attribute.name.line, layerToken.column);
170
+ if (typeof value !== "string") throw new AutoSurfaceDefinitionDslCompileError("binding value must be a string", attribute.name.line, attribute.name.column);
171
+ field.bindings = {
172
+ ...field.bindings ?? {},
173
+ [layer]: value
174
+ };
175
+ return;
176
+ }
177
+ if (attribute.name.value === "resource-id") {
178
+ const value = parseJsonValueFromTokens(attribute.values, attribute.name.line, attribute.name.column);
179
+ if (typeof value !== "string") throw new AutoSurfaceDefinitionDslCompileError("resource-id must be a string", attribute.name.line, attribute.name.column);
180
+ field.explicitId = value;
181
+ return;
182
+ }
183
+ if ([
184
+ "options",
185
+ "validation",
186
+ "policy",
187
+ "presentations",
188
+ "metadata"
189
+ ].includes(attribute.name.value)) {
190
+ const key = attribute.name.value;
191
+ const value = parseJsonValueFromTokens(attribute.values, attribute.name.line, attribute.name.column);
192
+ if (key === "options") {
193
+ if (!Array.isArray(value)) throw new AutoSurfaceDefinitionDslCompileError("options must be an array", attribute.name.line, attribute.name.column);
194
+ field.options = value;
195
+ } else if (key === "validation") field.validation = assertRecordValue(value, key, attribute.name.line, attribute.name.column);
196
+ else if (key === "policy") field.policy = assertRecordValue(value, key, attribute.name.line, attribute.name.column);
197
+ else if (key === "presentations") field.presentations = assertRecordValue(value, key, attribute.name.line, attribute.name.column);
198
+ else if (key === "metadata") field.metadata = assertRecordValue(value, key, attribute.name.line, attribute.name.column);
199
+ return;
200
+ }
201
+ throw new AutoSurfaceDefinitionDslCompileError(`Unsupported field attribute line: ${attribute.name.value}`, attribute.name.line, attribute.name.column);
202
+ }
203
+ function parseIdTitleField(field, message) {
204
+ const id = field.values[0];
205
+ const title = field.values[1];
206
+ if (field.values.length !== 2 || id?.type !== "word" || title?.type !== "string") throw new AutoSurfaceDefinitionDslCompileError(message, field.name.line, field.name.column);
207
+ return {
208
+ id: id.value,
209
+ title: parseDslStringToken(title, parseSharedError)
210
+ };
211
+ }
212
+ function parseNumberField(field, name) {
213
+ const value = field.values[0];
214
+ if (field.values.length !== 1 || value?.type !== "word" || !/^-?\d+(?:\.\d+)?$/.test(value.value)) throw new AutoSurfaceDefinitionDslCompileError(`Expected ${name} <number>`, value?.line ?? field.name.line, value?.column ?? field.name.column);
215
+ return Number(value.value);
216
+ }
217
+ function parseJsonValueFromTokens(tokens, line, column) {
218
+ return parseJsonValue(joinDslValues(tokens), line, tokens[0]?.column ?? column);
219
+ }
220
+ function joinDslValues(tokens) {
221
+ return tokens.map((token) => token.value).join(" ");
222
+ }
223
+ function unsupportedField(context, field) {
224
+ return new AutoSurfaceDefinitionDslCompileError(`Unsupported ${context} DSL statement: ${field.name.value}`, field.name.line, field.name.column);
225
+ }
226
+ function parseSharedError(message, line, column = 1) {
227
+ return new AutoSurfaceDefinitionDslCompileError(message, line, column);
228
+ }
229
+ function buildDefinitionFiles(group) {
230
+ const files = {};
231
+ const addFile = (path, content) => {
232
+ if (Object.hasOwn(files, path)) throw new AutoSurfaceDefinitionDslCompileError(`Duplicate generated path: ${path}`, 1);
233
+ files[path] = content;
234
+ };
235
+ addFile(`${group.id}/group.json`, directoryMetaToJson(group));
236
+ for (const page of group.pages) {
237
+ addFile(`${group.id}/${page.id}/page.json`, directoryMetaToJson(page));
238
+ for (const field of page.fields) addFile(`${group.id}/${page.id}/${field.id}.field.json`, fieldToJson(field));
239
+ for (const section of page.sections) {
240
+ addFile(`${group.id}/${page.id}/${section.id}/section.json`, directoryMetaToJson(section));
241
+ for (const field of section.fields) addFile(`${group.id}/${page.id}/${section.id}/${field.id}.field.json`, fieldToJson(field));
242
+ }
243
+ }
244
+ return files;
245
+ }
246
+ function directoryMetaToJson(meta) {
247
+ return {
248
+ title: meta.title,
249
+ ...meta.description !== void 0 ? { description: meta.description } : {},
250
+ ...meta.order !== void 0 ? { order: meta.order } : {}
251
+ };
252
+ }
253
+ function fieldToJson(field) {
254
+ return {
255
+ ...field.explicitId !== void 0 ? { id: field.explicitId } : {},
256
+ type: field.type,
257
+ title: field.title,
258
+ ...field.description !== void 0 ? { description: field.description } : {},
259
+ ...field.defaultValue !== void 0 ? { defaultValue: field.defaultValue } : {},
260
+ ...field.options !== void 0 ? { options: field.options } : {},
261
+ ...field.validation !== void 0 ? { validation: field.validation } : {},
262
+ ...field.scopes !== void 0 ? { scopes: field.scopes } : {},
263
+ ...field.bindings !== void 0 ? { bindings: field.bindings } : {},
264
+ ...field.policy !== void 0 ? { policy: field.policy } : {},
265
+ ...field.presentations !== void 0 ? { presentations: field.presentations } : {},
266
+ ...field.metadata !== void 0 ? { metadata: field.metadata } : {}
267
+ };
268
+ }
269
+ function emitGroup(lines, group, indent) {
270
+ lines.push(`${space(indent)}surface-definitions ${group.id} ${quote(group.title)} {`);
271
+ emitMetaLines(lines, group, indent + 2);
272
+ for (const page of group.pages) emitPage(lines, page, indent + 2);
273
+ lines.push(`${space(indent)}}`);
274
+ }
275
+ function emitPage(lines, page, indent) {
276
+ lines.push(`${space(indent)}page ${page.id} ${quote(page.title)} {`);
277
+ emitMetaLines(lines, page, indent + 2);
278
+ for (const field of page.fields) emitField(lines, field, indent + 2);
279
+ for (const section of page.sections) emitSection(lines, section, indent + 2);
280
+ lines.push(`${space(indent)}}`);
281
+ }
282
+ function emitSection(lines, section, indent) {
283
+ lines.push(`${space(indent)}section ${section.id} ${quote(section.title)} {`);
284
+ emitMetaLines(lines, section, indent + 2);
285
+ for (const field of section.fields) emitField(lines, field, indent + 2);
286
+ lines.push(`${space(indent)}}`);
287
+ }
288
+ function emitField(lines, field, indent) {
289
+ lines.push(`${space(indent)}field ${field.id} ${field.type} ${quote(field.title)} {`);
290
+ emitMetaLines(lines, field, indent + 2);
291
+ if (field.defaultValue !== void 0) lines.push(`${space(indent + 2)}default ${formatJson(field.defaultValue)}`);
292
+ if (field.scopes !== void 0) lines.push(`${space(indent + 2)}scopes ${formatJson(field.scopes)}`);
293
+ for (const layer of LAYER_ORDER) {
294
+ const value = field.bindings?.[layer];
295
+ if (value !== void 0) lines.push(`${space(indent + 2)}binding ${layer} ${quote(value)}`);
296
+ }
297
+ if (field.options !== void 0) lines.push(`${space(indent + 2)}options ${formatJson(field.options)}`);
298
+ if (field.validation !== void 0) lines.push(`${space(indent + 2)}validation ${formatJson(field.validation)}`);
299
+ if (field.policy !== void 0) lines.push(`${space(indent + 2)}policy ${formatJson(field.policy)}`);
300
+ if (field.presentations !== void 0) lines.push(`${space(indent + 2)}presentations ${formatJson(field.presentations)}`);
301
+ if (field.metadata !== void 0) lines.push(`${space(indent + 2)}metadata ${formatJson(field.metadata)}`);
302
+ if (field.explicitId !== void 0) lines.push(`${space(indent + 2)}resource-id ${quote(field.explicitId)}`);
303
+ lines.push(`${space(indent)}}`);
304
+ }
305
+ function emitMetaLines(lines, node, indent) {
306
+ if (node.description !== void 0) lines.push(`${space(indent)}description ${quote(node.description)}`);
307
+ if (!("type" in node) && node.order !== void 0) lines.push(`${space(indent)}order ${node.order}`);
308
+ }
309
+ function parseJsonValue(source, line, column) {
310
+ try {
311
+ return JSON.parse(source);
312
+ } catch (error) {
313
+ throw new AutoSurfaceDefinitionDslCompileError(`Invalid JSON value: ${error instanceof Error ? error.message : String(error)}`, line, column);
314
+ }
315
+ }
316
+ function assertRecordValue(value, name, line, column) {
317
+ if (!value || typeof value !== "object" || Array.isArray(value)) throw new AutoSurfaceDefinitionDslCompileError(`${name} must be an object`, line, column);
318
+ return value;
319
+ }
320
+ function quote(value) {
321
+ return JSON.stringify(value);
322
+ }
323
+ function formatJson(value) {
324
+ return JSON.stringify(value);
325
+ }
326
+ function space(count) {
327
+ return " ".repeat(count);
328
+ }
329
+
330
+ //#endregion
331
+ export { AutoSurfaceDefinitionDslCompileError, compileAutoSurfaceDefinitionDsl, formatAutoSurfaceDefinitionDsl };
332
+ //# sourceMappingURL=definition-dsl.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition-dsl.mjs","names":[],"sources":["../../src/auto-surface/definition-dsl.ts"],"sourcesContent":["import {\n type DslField,\n type DslToken,\n parseDeclaration,\n parseDslStringToken,\n} from \"../dsl-shared.js\";\nimport type {\n AutoSurfaceLayer,\n AutoSurfacePolicy,\n AutoSurfacePresentations,\n AutoSurfaceResourceDefinition,\n AutoSurfaceValidationRule,\n AutoSurfaceValueType,\n} from \"./types.js\";\n\nexport interface AutoSurfaceDefinitionDslCompileResult {\n group: AutoSurfaceDefinitionDslGroup;\n files: Record<string, unknown>;\n}\n\nexport interface AutoSurfaceDefinitionDslGroup extends AutoSurfaceDirectoryMeta {\n id: string;\n pages: AutoSurfaceDefinitionDslPage[];\n}\n\nexport interface AutoSurfaceDefinitionDslPage extends AutoSurfaceDirectoryMeta {\n id: string;\n sections: AutoSurfaceDefinitionDslSection[];\n fields: AutoSurfaceDefinitionDslField[];\n}\n\nexport interface AutoSurfaceDefinitionDslSection extends AutoSurfaceDirectoryMeta {\n id: string;\n fields: AutoSurfaceDefinitionDslField[];\n}\n\nexport interface AutoSurfaceDefinitionDslField\n extends Omit<AutoSurfaceResourceDefinition, \"id\" | \"title\" | \"type\"> {\n id: string;\n type: AutoSurfaceValueType;\n title: string;\n explicitId?: string;\n}\n\nexport class AutoSurfaceDefinitionDslCompileError extends Error {\n constructor(\n message: string,\n readonly line: number,\n readonly column = 1,\n ) {\n super(`${line}:${column} ${message}`);\n this.name = \"AutoSurfaceDefinitionDslCompileError\";\n }\n}\n\ninterface AutoSurfaceDirectoryMeta {\n title: string;\n description?: string;\n order?: number;\n}\n\nconst VALUE_TYPES = new Set<AutoSurfaceValueType>([\n \"string\",\n \"number\",\n \"boolean\",\n \"select\",\n \"textarea\",\n \"json\",\n]);\n\nconst LAYERS = new Set<AutoSurfaceLayer>([\"system\", \"package\", \"instance\", \"user\"]);\nconst LAYER_ORDER: AutoSurfaceLayer[] = [\"system\", \"package\", \"instance\", \"user\"];\n\nexport function compileAutoSurfaceDefinitionDsl(\n source: string,\n): AutoSurfaceDefinitionDslCompileResult {\n const declaration = parseDeclaration(source, {\n kind: \"surface-definitions\",\n allowQuotedTitle: true,\n expected: 'Expected surface-definitions <id> \"Title\" {',\n fieldKeywords: [\n \"order\",\n \"description\",\n \"page\",\n \"section\",\n \"field\",\n \"default\",\n \"scopes\",\n \"binding\",\n \"resource-id\",\n \"options\",\n \"validation\",\n \"policy\",\n \"presentations\",\n \"metadata\",\n ],\n nestedFieldKeywords: [\"page\", \"section\", \"field\"],\n error: parseSharedError,\n });\n\n if (!declaration.title) {\n throw new AutoSurfaceDefinitionDslCompileError(\n 'Expected surface-definitions <id> \"Title\" {',\n declaration.idToken.line,\n declaration.idToken.column,\n );\n }\n\n const group: AutoSurfaceDefinitionDslGroup = {\n id: declaration.id,\n title: declaration.title,\n pages: [],\n };\n\n for (const field of declaration.fields) {\n if (parseSharedMetaField(group, field)) continue;\n if (field.name.value !== \"page\") throw unsupportedField(\"surface-definitions\", field);\n group.pages.push(parsePageField(field));\n }\n\n return { group, files: buildDefinitionFiles(group) };\n}\n\nexport function formatAutoSurfaceDefinitionDsl(source: string): string {\n const compiled = compileAutoSurfaceDefinitionDsl(source);\n const lines: string[] = [];\n emitGroup(lines, compiled.group, 0);\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction parsePageField(field: DslField): AutoSurfaceDefinitionDslPage {\n const head = parseIdTitleField(field, 'Expected page <id> \"Title\" {');\n const page: AutoSurfaceDefinitionDslPage = {\n id: head.id,\n title: head.title,\n sections: [],\n fields: [],\n };\n for (const child of field.children ?? []) {\n if (parseSharedMetaField(page, child)) continue;\n if (child.name.value === \"section\") {\n page.sections.push(parseSectionField(child));\n continue;\n }\n if (child.name.value === \"field\") {\n page.fields.push(parseResourceField(child));\n continue;\n }\n throw unsupportedField(\"page\", child);\n }\n return page;\n}\n\nfunction parseSectionField(field: DslField): AutoSurfaceDefinitionDslSection {\n const head = parseIdTitleField(field, 'Expected section <id> \"Title\" {');\n const section: AutoSurfaceDefinitionDslSection = {\n id: head.id,\n title: head.title,\n fields: [],\n };\n for (const child of field.children ?? []) {\n if (parseSharedMetaField(section, child)) continue;\n if (child.name.value === \"field\") {\n section.fields.push(parseResourceField(child));\n continue;\n }\n throw unsupportedField(\"section\", child);\n }\n return section;\n}\n\nfunction parseResourceField(field: DslField): AutoSurfaceDefinitionDslField {\n const id = field.values[0];\n const typeToken = field.values[1];\n const title = field.values[2];\n if (\n field.values.length !== 3 ||\n id?.type !== \"word\" ||\n typeToken?.type !== \"word\" ||\n title?.type !== \"string\"\n ) {\n throw new AutoSurfaceDefinitionDslCompileError(\n 'Expected field <id> <type> \"Title\" {',\n field.name.line,\n field.name.column,\n );\n }\n const type = typeToken.value as AutoSurfaceValueType;\n if (!VALUE_TYPES.has(type)) {\n throw new AutoSurfaceDefinitionDslCompileError(\n `Unsupported field type: ${type}`,\n typeToken.line,\n typeToken.column,\n );\n }\n const resource: AutoSurfaceDefinitionDslField = {\n id: id.value,\n type,\n title: parseDslStringToken(title, parseSharedError),\n };\n for (const child of field.children ?? []) {\n if (parseSharedMetaField(resource, child)) continue;\n parseFieldAttributeField(resource, child);\n }\n return resource;\n}\n\nfunction parseSharedMetaField(\n node: AutoSurfaceDirectoryMeta | AutoSurfaceDefinitionDslField,\n field: DslField,\n): boolean {\n if (field.name.value === \"order\") {\n if (\"type\" in node) return false;\n const order = parseNumberField(field, \"order\");\n node.order = order;\n return true;\n }\n\n if (field.name.value === \"description\") {\n const value = parseJsonValueFromTokens(field.values, field.name.line, field.name.column);\n if (typeof value !== \"string\") {\n throw new AutoSurfaceDefinitionDslCompileError(\n \"description must be a string\",\n field.name.line,\n field.name.column,\n );\n }\n node.description = value;\n return true;\n }\n\n return false;\n}\n\nfunction parseFieldAttributeField(field: AutoSurfaceDefinitionDslField, attribute: DslField): void {\n if (attribute.name.value === \"default\") {\n field.defaultValue = parseJsonValueFromTokens(\n attribute.values,\n attribute.name.line,\n attribute.name.column,\n );\n return;\n }\n\n if (attribute.name.value === \"scopes\") {\n const scopes = parseJsonValueFromTokens(\n attribute.values,\n attribute.name.line,\n attribute.name.column,\n );\n if (\n !Array.isArray(scopes) ||\n !scopes.every((scope) => typeof scope === \"string\" && LAYERS.has(scope as AutoSurfaceLayer))\n ) {\n throw new AutoSurfaceDefinitionDslCompileError(\n 'scopes must be an array of \"system\", \"package\", \"instance\", or \"user\"',\n attribute.name.line,\n attribute.name.column,\n );\n }\n field.scopes = scopes as AutoSurfaceLayer[];\n return;\n }\n\n if (attribute.name.value === \"binding\") {\n const layerToken = attribute.values[0];\n if (layerToken?.type !== \"word\" || attribute.values.length < 2) {\n throw new AutoSurfaceDefinitionDslCompileError(\n 'Expected binding <layer> \"<path>\"',\n attribute.name.line,\n attribute.name.column,\n );\n }\n const layer = layerToken.value as AutoSurfaceLayer;\n if (!LAYERS.has(layer)) {\n throw new AutoSurfaceDefinitionDslCompileError(\n `Unsupported binding layer: ${layer}`,\n layerToken.line,\n layerToken.column,\n );\n }\n const value = parseJsonValueFromTokens(\n attribute.values.slice(1),\n attribute.name.line,\n layerToken.column,\n );\n if (typeof value !== \"string\") {\n throw new AutoSurfaceDefinitionDslCompileError(\n \"binding value must be a string\",\n attribute.name.line,\n attribute.name.column,\n );\n }\n field.bindings = { ...(field.bindings ?? {}), [layer]: value };\n return;\n }\n\n if (attribute.name.value === \"resource-id\") {\n const value = parseJsonValueFromTokens(\n attribute.values,\n attribute.name.line,\n attribute.name.column,\n );\n if (typeof value !== \"string\") {\n throw new AutoSurfaceDefinitionDslCompileError(\n \"resource-id must be a string\",\n attribute.name.line,\n attribute.name.column,\n );\n }\n field.explicitId = value;\n return;\n }\n\n if (\n [\"options\", \"validation\", \"policy\", \"presentations\", \"metadata\"].includes(attribute.name.value)\n ) {\n const key = attribute.name.value;\n const value = parseJsonValueFromTokens(\n attribute.values,\n attribute.name.line,\n attribute.name.column,\n );\n if (key === \"options\") {\n if (!Array.isArray(value)) {\n throw new AutoSurfaceDefinitionDslCompileError(\n \"options must be an array\",\n attribute.name.line,\n attribute.name.column,\n );\n }\n field.options = value as AutoSurfaceDefinitionDslField[\"options\"];\n } else if (key === \"validation\") {\n field.validation = assertRecordValue(\n value,\n key,\n attribute.name.line,\n attribute.name.column,\n ) as AutoSurfaceValidationRule;\n } else if (key === \"policy\") {\n field.policy = assertRecordValue(\n value,\n key,\n attribute.name.line,\n attribute.name.column,\n ) as AutoSurfacePolicy;\n } else if (key === \"presentations\") {\n field.presentations = assertRecordValue(\n value,\n key,\n attribute.name.line,\n attribute.name.column,\n ) as AutoSurfacePresentations;\n } else if (key === \"metadata\") {\n field.metadata = assertRecordValue(value, key, attribute.name.line, attribute.name.column);\n }\n return;\n }\n\n throw new AutoSurfaceDefinitionDslCompileError(\n `Unsupported field attribute line: ${attribute.name.value}`,\n attribute.name.line,\n attribute.name.column,\n );\n}\n\nfunction parseIdTitleField(field: DslField, message: string): { id: string; title: string } {\n const id = field.values[0];\n const title = field.values[1];\n if (field.values.length !== 2 || id?.type !== \"word\" || title?.type !== \"string\") {\n throw new AutoSurfaceDefinitionDslCompileError(message, field.name.line, field.name.column);\n }\n return {\n id: id.value,\n title: parseDslStringToken(title, parseSharedError),\n };\n}\n\nfunction parseNumberField(field: DslField, name: string): number {\n const value = field.values[0];\n if (\n field.values.length !== 1 ||\n value?.type !== \"word\" ||\n !/^-?\\d+(?:\\.\\d+)?$/.test(value.value)\n ) {\n throw new AutoSurfaceDefinitionDslCompileError(\n `Expected ${name} <number>`,\n value?.line ?? field.name.line,\n value?.column ?? field.name.column,\n );\n }\n return Number(value.value);\n}\n\nfunction parseJsonValueFromTokens(tokens: DslToken[], line: number, column: number): unknown {\n return parseJsonValue(joinDslValues(tokens), line, tokens[0]?.column ?? column);\n}\n\nfunction joinDslValues(tokens: DslToken[]): string {\n return tokens.map((token) => token.value).join(\" \");\n}\n\nfunction unsupportedField(context: string, field: DslField): AutoSurfaceDefinitionDslCompileError {\n return new AutoSurfaceDefinitionDslCompileError(\n `Unsupported ${context} DSL statement: ${field.name.value}`,\n field.name.line,\n field.name.column,\n );\n}\n\nfunction parseSharedError(\n message: string,\n line: number,\n column = 1,\n): AutoSurfaceDefinitionDslCompileError {\n return new AutoSurfaceDefinitionDslCompileError(message, line, column);\n}\n\nfunction buildDefinitionFiles(group: AutoSurfaceDefinitionDslGroup): Record<string, unknown> {\n const files: Record<string, unknown> = {};\n const addFile = (path: string, content: unknown): void => {\n if (Object.hasOwn(files, path)) {\n throw new AutoSurfaceDefinitionDslCompileError(`Duplicate generated path: ${path}`, 1);\n }\n files[path] = content;\n };\n\n addFile(`${group.id}/group.json`, directoryMetaToJson(group));\n for (const page of group.pages) {\n addFile(`${group.id}/${page.id}/page.json`, directoryMetaToJson(page));\n for (const field of page.fields) {\n addFile(`${group.id}/${page.id}/${field.id}.field.json`, fieldToJson(field));\n }\n for (const section of page.sections) {\n addFile(`${group.id}/${page.id}/${section.id}/section.json`, directoryMetaToJson(section));\n for (const field of section.fields) {\n addFile(`${group.id}/${page.id}/${section.id}/${field.id}.field.json`, fieldToJson(field));\n }\n }\n }\n return files;\n}\n\nfunction directoryMetaToJson(meta: AutoSurfaceDirectoryMeta): Record<string, unknown> {\n return {\n title: meta.title,\n ...(meta.description !== undefined ? { description: meta.description } : {}),\n ...(meta.order !== undefined ? { order: meta.order } : {}),\n };\n}\n\nfunction fieldToJson(field: AutoSurfaceDefinitionDslField): Record<string, unknown> {\n return {\n ...(field.explicitId !== undefined ? { id: field.explicitId } : {}),\n type: field.type,\n title: field.title,\n ...(field.description !== undefined ? { description: field.description } : {}),\n ...(field.defaultValue !== undefined ? { defaultValue: field.defaultValue } : {}),\n ...(field.options !== undefined ? { options: field.options } : {}),\n ...(field.validation !== undefined ? { validation: field.validation } : {}),\n ...(field.scopes !== undefined ? { scopes: field.scopes } : {}),\n ...(field.bindings !== undefined ? { bindings: field.bindings } : {}),\n ...(field.policy !== undefined ? { policy: field.policy } : {}),\n ...(field.presentations !== undefined ? { presentations: field.presentations } : {}),\n ...(field.metadata !== undefined ? { metadata: field.metadata } : {}),\n };\n}\n\nfunction emitGroup(lines: string[], group: AutoSurfaceDefinitionDslGroup, indent: number): void {\n lines.push(`${space(indent)}surface-definitions ${group.id} ${quote(group.title)} {`);\n emitMetaLines(lines, group, indent + 2);\n for (const page of group.pages) emitPage(lines, page, indent + 2);\n lines.push(`${space(indent)}}`);\n}\n\nfunction emitPage(lines: string[], page: AutoSurfaceDefinitionDslPage, indent: number): void {\n lines.push(`${space(indent)}page ${page.id} ${quote(page.title)} {`);\n emitMetaLines(lines, page, indent + 2);\n for (const field of page.fields) emitField(lines, field, indent + 2);\n for (const section of page.sections) emitSection(lines, section, indent + 2);\n lines.push(`${space(indent)}}`);\n}\n\nfunction emitSection(\n lines: string[],\n section: AutoSurfaceDefinitionDslSection,\n indent: number,\n): void {\n lines.push(`${space(indent)}section ${section.id} ${quote(section.title)} {`);\n emitMetaLines(lines, section, indent + 2);\n for (const field of section.fields) emitField(lines, field, indent + 2);\n lines.push(`${space(indent)}}`);\n}\n\nfunction emitField(lines: string[], field: AutoSurfaceDefinitionDslField, indent: number): void {\n lines.push(`${space(indent)}field ${field.id} ${field.type} ${quote(field.title)} {`);\n emitMetaLines(lines, field, indent + 2);\n if (field.defaultValue !== undefined) {\n lines.push(`${space(indent + 2)}default ${formatJson(field.defaultValue)}`);\n }\n if (field.scopes !== undefined)\n lines.push(`${space(indent + 2)}scopes ${formatJson(field.scopes)}`);\n for (const layer of LAYER_ORDER) {\n const value = field.bindings?.[layer];\n if (value !== undefined) lines.push(`${space(indent + 2)}binding ${layer} ${quote(value)}`);\n }\n if (field.options !== undefined)\n lines.push(`${space(indent + 2)}options ${formatJson(field.options)}`);\n if (field.validation !== undefined) {\n lines.push(`${space(indent + 2)}validation ${formatJson(field.validation)}`);\n }\n if (field.policy !== undefined)\n lines.push(`${space(indent + 2)}policy ${formatJson(field.policy)}`);\n if (field.presentations !== undefined) {\n lines.push(`${space(indent + 2)}presentations ${formatJson(field.presentations)}`);\n }\n if (field.metadata !== undefined)\n lines.push(`${space(indent + 2)}metadata ${formatJson(field.metadata)}`);\n if (field.explicitId !== undefined) {\n lines.push(`${space(indent + 2)}resource-id ${quote(field.explicitId)}`);\n }\n lines.push(`${space(indent)}}`);\n}\n\nfunction emitMetaLines(\n lines: string[],\n node: AutoSurfaceDirectoryMeta | AutoSurfaceDefinitionDslField,\n indent: number,\n): void {\n if (node.description !== undefined)\n lines.push(`${space(indent)}description ${quote(node.description)}`);\n if (!(\"type\" in node) && node.order !== undefined)\n lines.push(`${space(indent)}order ${node.order}`);\n}\n\nfunction parseJsonValue(source: string, line: number, column: number): unknown {\n try {\n return JSON.parse(source);\n } catch (error) {\n throw new AutoSurfaceDefinitionDslCompileError(\n `Invalid JSON value: ${error instanceof Error ? error.message : String(error)}`,\n line,\n column,\n );\n }\n}\n\nfunction assertRecordValue(\n value: unknown,\n name: string,\n line: number,\n column: number,\n): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new AutoSurfaceDefinitionDslCompileError(`${name} must be an object`, line, column);\n }\n return value as Record<string, unknown>;\n}\n\nfunction quote(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction formatJson(value: unknown): string {\n return JSON.stringify(value);\n}\n\nfunction space(count: number): string {\n return \" \".repeat(count);\n}\n"],"mappings":"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"}
@@ -0,0 +1,177 @@
1
+ let ufo = require("ufo");
2
+
3
+ //#region src/auto-surface/fragments.ts
4
+ const DEFAULT_AUTO_SURFACE_DEFINITIONS_ROOT = "/.surface/definitions";
5
+ const DEFAULT_AUTO_SURFACE_VALUES_ROOT = "/.surface/overrides";
6
+ async function loadAutoSurfaceFragment(reader, options) {
7
+ const root = options.root ?? DEFAULT_AUTO_SURFACE_DEFINITIONS_ROOT;
8
+ const resources = [];
9
+ if (!await hasDirectory(reader, root)) return {
10
+ source: options.source,
11
+ owner: options.owner,
12
+ resources
13
+ };
14
+ await walkDefinitionDirectory(reader, root, [], {}, resources);
15
+ return {
16
+ source: options.source,
17
+ owner: options.owner,
18
+ resources
19
+ };
20
+ }
21
+ async function loadAutoSurfaceValueLayer(reader, options = {}) {
22
+ const root = options.root ?? DEFAULT_AUTO_SURFACE_VALUES_ROOT;
23
+ const values = {};
24
+ if (!await hasDirectory(reader, root)) return values;
25
+ await walkValueDirectory(reader, root, [], values);
26
+ return values;
27
+ }
28
+ async function walkDefinitionDirectory(reader, currentPath, relativeSegments, inheritedContext, resources) {
29
+ const entries = await listVisible(reader, currentPath);
30
+ const dirs = entries.filter(isDirectoryEntry);
31
+ const files = entries.filter((entry) => !isDirectoryEntry(entry));
32
+ const context = deriveDefinitionContext(relativeSegments, inheritedContext, await readDirectoryMeta(reader, files, currentPath));
33
+ for (const file of files) {
34
+ if (!file.id.endsWith(".field.json")) continue;
35
+ const field = await readJSON(reader, entryPath(currentPath, file));
36
+ const resourceId = typeof field.id === "string" && field.id.trim().length > 0 ? field.id : buildResourceId(relativeSegments, stripSuffix(file.id, ".field.json"));
37
+ resources.push({
38
+ ...field,
39
+ id: resourceId,
40
+ presentations: mergePresentations(field.presentations, inferSettingsShellPresentation(relativeSegments, context))
41
+ });
42
+ }
43
+ for (const dir of dirs) await walkDefinitionDirectory(reader, entryPath(currentPath, dir), [...relativeSegments, dir.id], context, resources);
44
+ }
45
+ async function walkValueDirectory(reader, currentPath, relativeSegments, values) {
46
+ const entries = await listVisible(reader, currentPath);
47
+ const dirs = entries.filter(isDirectoryEntry);
48
+ const files = entries.filter((entry) => !isDirectoryEntry(entry));
49
+ for (const file of files) {
50
+ if (!file.id.endsWith(".value.json")) continue;
51
+ const parsed = await readJSON(reader, entryPath(currentPath, file), { allowScalar: true });
52
+ const valueId = resolveValueId(parsed, relativeSegments, file.id);
53
+ values[valueId] = resolveValue(parsed);
54
+ }
55
+ for (const dir of dirs) await walkValueDirectory(reader, entryPath(currentPath, dir), [...relativeSegments, dir.id], values);
56
+ }
57
+ async function readDirectoryMeta(reader, files, currentPath) {
58
+ const result = {};
59
+ for (const file of files) {
60
+ if (![
61
+ "group.json",
62
+ "page.json",
63
+ "section.json"
64
+ ].includes(file.id)) continue;
65
+ const path = entryPath(currentPath, file);
66
+ result[file.id] = await readJSON(reader, path);
67
+ }
68
+ return result;
69
+ }
70
+ function deriveDefinitionContext(relativeSegments, inheritedContext, localMeta) {
71
+ const context = { ...inheritedContext };
72
+ if (relativeSegments.length >= 1) {
73
+ const groupId = relativeSegments[0];
74
+ context.group = {
75
+ title: localMeta["group.json"]?.title ?? inheritedContext.group?.title ?? labelize(groupId),
76
+ description: localMeta["group.json"]?.description ?? inheritedContext.group?.description,
77
+ order: localMeta["group.json"]?.order ?? inheritedContext.group?.order
78
+ };
79
+ }
80
+ if (relativeSegments.length >= 2) {
81
+ const pageId = relativeSegments[1];
82
+ context.page = {
83
+ title: localMeta["page.json"]?.title ?? inheritedContext.page?.title ?? labelize(pageId),
84
+ description: localMeta["page.json"]?.description ?? inheritedContext.page?.description,
85
+ order: localMeta["page.json"]?.order ?? inheritedContext.page?.order
86
+ };
87
+ }
88
+ if (relativeSegments.length >= 3) {
89
+ const sectionId = relativeSegments.slice(2).join("/");
90
+ context.section = {
91
+ title: localMeta["section.json"]?.title ?? inheritedContext.section?.title ?? labelize(relativeSegments[relativeSegments.length - 1]),
92
+ description: localMeta["section.json"]?.description ?? inheritedContext.section?.description,
93
+ order: localMeta["section.json"]?.order ?? inheritedContext.section?.order
94
+ };
95
+ if (!context.section.title) context.section.title = labelize(sectionId);
96
+ }
97
+ return context;
98
+ }
99
+ function inferSettingsShellPresentation(relativeSegments, context) {
100
+ return {
101
+ group: context.group?.title ?? labelize(relativeSegments[0] ?? "general"),
102
+ page: context.page?.title ?? "General",
103
+ section: context.section?.title ?? "General",
104
+ ...context.group?.order !== void 0 ? { groupOrder: context.group.order } : {},
105
+ ...context.page?.order !== void 0 ? { pageOrder: context.page.order } : {},
106
+ ...context.section?.order !== void 0 ? { sectionOrder: context.section.order } : {}
107
+ };
108
+ }
109
+ function mergePresentations(existing, inferred) {
110
+ return {
111
+ ...existing ?? {},
112
+ "settings-shell": {
113
+ ...inferred,
114
+ ...existing?.["settings-shell"] ?? {}
115
+ }
116
+ };
117
+ }
118
+ function buildResourceId(relativeSegments, basename) {
119
+ return [...relativeSegments, basename].filter(Boolean).join(".");
120
+ }
121
+ function resolveValueId(parsed, relativeSegments, fileName) {
122
+ if (isPlainObject(parsed) && typeof parsed.id === "string" && parsed.id.trim().length > 0) return parsed.id;
123
+ return buildResourceId(relativeSegments, stripSuffix(fileName, ".value.json"));
124
+ }
125
+ function resolveValue(parsed) {
126
+ if (isPlainObject(parsed) && Object.hasOwn(parsed, "value")) return parsed.value;
127
+ return parsed;
128
+ }
129
+ async function hasDirectory(reader, path) {
130
+ try {
131
+ const entries = await reader.list(path);
132
+ return Array.isArray(entries.data);
133
+ } catch {
134
+ return false;
135
+ }
136
+ }
137
+ async function listVisible(reader, path) {
138
+ return ((await reader.list(path)).data ?? []).filter((entry) => entry?.id && !entry.id.startsWith("."));
139
+ }
140
+ async function readJSON(reader, path, options = {}) {
141
+ const content = extractContent(await reader.read(path));
142
+ if (typeof content === "string") try {
143
+ return JSON.parse(content);
144
+ } catch (error) {
145
+ throw new Error(`Invalid JSON in "${path}": ${error instanceof Error ? error.message : String(error)}`);
146
+ }
147
+ if (content && typeof content === "object") return content;
148
+ if (options.allowScalar) return content;
149
+ throw new Error(`Expected JSON object in "${path}"`);
150
+ }
151
+ function extractContent(result) {
152
+ const data = result.data;
153
+ if (data && typeof data === "object" && "content" in data) return data.content;
154
+ return data;
155
+ }
156
+ function isDirectoryEntry(entry) {
157
+ const meta = entry.meta ?? {};
158
+ return meta.kind === "fs:directory" || meta.kind === "directory" || Array.isArray(meta.kinds) && meta.kinds.includes("fs:directory") || typeof meta.childrenCount === "number";
159
+ }
160
+ function entryPath(parentPath, entry) {
161
+ return entry.path || (0, ufo.joinURL)(parentPath, entry.id);
162
+ }
163
+ function stripSuffix(value, suffix) {
164
+ return value.endsWith(suffix) ? value.slice(0, -suffix.length) : value;
165
+ }
166
+ function labelize(value) {
167
+ return value.replace(/[_-]+/g, " ").replace(/([a-z])([A-Z])/g, "$1 $2").replace(/\b\w/g, (char) => char.toUpperCase());
168
+ }
169
+ function isPlainObject(value) {
170
+ return Object.prototype.toString.call(value) === "[object Object]";
171
+ }
172
+
173
+ //#endregion
174
+ exports.DEFAULT_AUTO_SURFACE_DEFINITIONS_ROOT = DEFAULT_AUTO_SURFACE_DEFINITIONS_ROOT;
175
+ exports.DEFAULT_AUTO_SURFACE_VALUES_ROOT = DEFAULT_AUTO_SURFACE_VALUES_ROOT;
176
+ exports.loadAutoSurfaceFragment = loadAutoSurfaceFragment;
177
+ exports.loadAutoSurfaceValueLayer = loadAutoSurfaceValueLayer;
@@ -0,0 +1,23 @@
1
+ import { AutoSurfaceDefinitionOwner, AutoSurfaceFragment } from "./types.cjs";
2
+ import { AFSListResult, AFSReadResult } from "@aigne/afs";
3
+
4
+ //#region src/auto-surface/fragments.d.ts
5
+ declare const DEFAULT_AUTO_SURFACE_DEFINITIONS_ROOT = "/.surface/definitions";
6
+ declare const DEFAULT_AUTO_SURFACE_VALUES_ROOT = "/.surface/overrides";
7
+ interface AutoSurfaceFragmentReader {
8
+ list(path: string): Promise<AFSListResult>;
9
+ read(path: string): Promise<AFSReadResult>;
10
+ }
11
+ interface LoadAutoSurfaceFragmentOptions {
12
+ source: string;
13
+ owner: AutoSurfaceDefinitionOwner;
14
+ root?: string;
15
+ }
16
+ interface LoadAutoSurfaceValueLayerOptions {
17
+ root?: string;
18
+ }
19
+ declare function loadAutoSurfaceFragment(reader: AutoSurfaceFragmentReader, options: LoadAutoSurfaceFragmentOptions): Promise<AutoSurfaceFragment>;
20
+ declare function loadAutoSurfaceValueLayer(reader: AutoSurfaceFragmentReader, options?: LoadAutoSurfaceValueLayerOptions): Promise<Record<string, unknown>>;
21
+ //#endregion
22
+ export { AutoSurfaceFragmentReader, DEFAULT_AUTO_SURFACE_DEFINITIONS_ROOT, DEFAULT_AUTO_SURFACE_VALUES_ROOT, LoadAutoSurfaceFragmentOptions, LoadAutoSurfaceValueLayerOptions, loadAutoSurfaceFragment, loadAutoSurfaceValueLayer };
23
+ //# sourceMappingURL=fragments.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fragments.d.cts","names":[],"sources":["../../src/auto-surface/fragments.ts"],"mappings":";;;;cAUa,qCAAA;AAAA,cACA,gCAAA;AAAA,UAEI,yBAAA;EACf,IAAA,CAAK,IAAA,WAAe,OAAA,CAAQ,aAAA;EAC5B,IAAA,CAAK,IAAA,WAAe,OAAA,CAAQ,aAAA;AAAA;AAAA,UAGb,8BAAA;EACf,MAAA;EACA,KAAA,EAAO,0BAAA;EACP,IAAA;AAAA;AAAA,UAGe,gCAAA;EACf,IAAA;AAAA;AAAA,iBAmBoB,uBAAA,CACpB,MAAA,EAAQ,yBAAA,EACR,OAAA,EAAS,8BAAA,GACR,OAAA,CAAQ,mBAAA;AAAA,iBAgBW,yBAAA,CACpB,MAAA,EAAQ,yBAAA,EACR,OAAA,GAAS,gCAAA,GACR,OAAA,CAAQ,MAAA"}
@@ -0,0 +1,23 @@
1
+ import { AutoSurfaceDefinitionOwner, AutoSurfaceFragment } from "./types.mjs";
2
+ import { AFSListResult, AFSReadResult } from "@aigne/afs";
3
+
4
+ //#region src/auto-surface/fragments.d.ts
5
+ declare const DEFAULT_AUTO_SURFACE_DEFINITIONS_ROOT = "/.surface/definitions";
6
+ declare const DEFAULT_AUTO_SURFACE_VALUES_ROOT = "/.surface/overrides";
7
+ interface AutoSurfaceFragmentReader {
8
+ list(path: string): Promise<AFSListResult>;
9
+ read(path: string): Promise<AFSReadResult>;
10
+ }
11
+ interface LoadAutoSurfaceFragmentOptions {
12
+ source: string;
13
+ owner: AutoSurfaceDefinitionOwner;
14
+ root?: string;
15
+ }
16
+ interface LoadAutoSurfaceValueLayerOptions {
17
+ root?: string;
18
+ }
19
+ declare function loadAutoSurfaceFragment(reader: AutoSurfaceFragmentReader, options: LoadAutoSurfaceFragmentOptions): Promise<AutoSurfaceFragment>;
20
+ declare function loadAutoSurfaceValueLayer(reader: AutoSurfaceFragmentReader, options?: LoadAutoSurfaceValueLayerOptions): Promise<Record<string, unknown>>;
21
+ //#endregion
22
+ export { AutoSurfaceFragmentReader, DEFAULT_AUTO_SURFACE_DEFINITIONS_ROOT, DEFAULT_AUTO_SURFACE_VALUES_ROOT, LoadAutoSurfaceFragmentOptions, LoadAutoSurfaceValueLayerOptions, loadAutoSurfaceFragment, loadAutoSurfaceValueLayer };
23
+ //# sourceMappingURL=fragments.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fragments.d.mts","names":[],"sources":["../../src/auto-surface/fragments.ts"],"mappings":";;;;cAUa,qCAAA;AAAA,cACA,gCAAA;AAAA,UAEI,yBAAA;EACf,IAAA,CAAK,IAAA,WAAe,OAAA,CAAQ,aAAA;EAC5B,IAAA,CAAK,IAAA,WAAe,OAAA,CAAQ,aAAA;AAAA;AAAA,UAGb,8BAAA;EACf,MAAA;EACA,KAAA,EAAO,0BAAA;EACP,IAAA;AAAA;AAAA,UAGe,gCAAA;EACf,IAAA;AAAA;AAAA,iBAmBoB,uBAAA,CACpB,MAAA,EAAQ,yBAAA,EACR,OAAA,EAAS,8BAAA,GACR,OAAA,CAAQ,mBAAA;AAAA,iBAgBW,yBAAA,CACpB,MAAA,EAAQ,yBAAA,EACR,OAAA,GAAS,gCAAA,GACR,OAAA,CAAQ,MAAA"}