@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.
- package/CHANGELOG.md +49 -0
- package/LICENSE.md +26 -0
- package/dist/agent-dsl.cjs +116 -0
- package/dist/agent-dsl.d.cts +31 -0
- package/dist/agent-dsl.d.cts.map +1 -0
- package/dist/agent-dsl.d.mts +31 -0
- package/dist/agent-dsl.d.mts.map +1 -0
- package/dist/agent-dsl.mjs +115 -0
- package/dist/agent-dsl.mjs.map +1 -0
- package/dist/arc-compat.cjs +125 -0
- package/dist/arc-compat.d.cts +17 -0
- package/dist/arc-compat.d.cts.map +1 -0
- package/dist/arc-compat.d.mts +17 -0
- package/dist/arc-compat.d.mts.map +1 -0
- package/dist/arc-compat.mjs +123 -0
- package/dist/arc-compat.mjs.map +1 -0
- package/dist/auto-surface/compiler.cjs +36 -0
- package/dist/auto-surface/compiler.d.cts +7 -0
- package/dist/auto-surface/compiler.d.cts.map +1 -0
- package/dist/auto-surface/compiler.d.mts +7 -0
- package/dist/auto-surface/compiler.d.mts.map +1 -0
- package/dist/auto-surface/compiler.mjs +37 -0
- package/dist/auto-surface/compiler.mjs.map +1 -0
- package/dist/auto-surface/definition-dsl.cjs +333 -0
- package/dist/auto-surface/definition-dsl.d.cts +41 -0
- package/dist/auto-surface/definition-dsl.d.cts.map +1 -0
- package/dist/auto-surface/definition-dsl.d.mts +41 -0
- package/dist/auto-surface/definition-dsl.d.mts.map +1 -0
- package/dist/auto-surface/definition-dsl.mjs +332 -0
- package/dist/auto-surface/definition-dsl.mjs.map +1 -0
- package/dist/auto-surface/fragments.cjs +177 -0
- package/dist/auto-surface/fragments.d.cts +23 -0
- package/dist/auto-surface/fragments.d.cts.map +1 -0
- package/dist/auto-surface/fragments.d.mts +23 -0
- package/dist/auto-surface/fragments.d.mts.map +1 -0
- package/dist/auto-surface/fragments.mjs +175 -0
- package/dist/auto-surface/fragments.mjs.map +1 -0
- package/dist/auto-surface/index.d.mts +9 -0
- package/dist/auto-surface/layering.cjs +43 -0
- package/dist/auto-surface/layering.d.cts +7 -0
- package/dist/auto-surface/layering.d.cts.map +1 -0
- package/dist/auto-surface/layering.d.mts +7 -0
- package/dist/auto-surface/layering.d.mts.map +1 -0
- package/dist/auto-surface/layering.mjs +43 -0
- package/dist/auto-surface/layering.mjs.map +1 -0
- package/dist/auto-surface/projection.cjs +11 -0
- package/dist/auto-surface/projection.d.cts +11 -0
- package/dist/auto-surface/projection.d.cts.map +1 -0
- package/dist/auto-surface/projection.d.mts +11 -0
- package/dist/auto-surface/projection.d.mts.map +1 -0
- package/dist/auto-surface/projection.mjs +12 -0
- package/dist/auto-surface/projection.mjs.map +1 -0
- package/dist/auto-surface/projectors/settings-shell.cjs +114 -0
- package/dist/auto-surface/projectors/settings-shell.d.cts +10 -0
- package/dist/auto-surface/projectors/settings-shell.d.cts.map +1 -0
- package/dist/auto-surface/projectors/settings-shell.d.mts +10 -0
- package/dist/auto-surface/projectors/settings-shell.d.mts.map +1 -0
- package/dist/auto-surface/projectors/settings-shell.mjs +114 -0
- package/dist/auto-surface/projectors/settings-shell.mjs.map +1 -0
- package/dist/auto-surface/scenario.cjs +38 -0
- package/dist/auto-surface/scenario.d.cts +31 -0
- package/dist/auto-surface/scenario.d.cts.map +1 -0
- package/dist/auto-surface/scenario.d.mts +31 -0
- package/dist/auto-surface/scenario.d.mts.map +1 -0
- package/dist/auto-surface/scenario.mjs +37 -0
- package/dist/auto-surface/scenario.mjs.map +1 -0
- package/dist/auto-surface/types.cjs +9 -0
- package/dist/auto-surface/types.d.cts +153 -0
- package/dist/auto-surface/types.d.cts.map +1 -0
- package/dist/auto-surface/types.d.mts +153 -0
- package/dist/auto-surface/types.d.mts.map +1 -0
- package/dist/auto-surface/types.mjs +9 -0
- package/dist/auto-surface/types.mjs.map +1 -0
- package/dist/auto-surface/value-dsl.cjs +80 -0
- package/dist/auto-surface/value-dsl.d.cts +24 -0
- package/dist/auto-surface/value-dsl.d.cts.map +1 -0
- package/dist/auto-surface/value-dsl.d.mts +24 -0
- package/dist/auto-surface/value-dsl.d.mts.map +1 -0
- package/dist/auto-surface/value-dsl.mjs +79 -0
- package/dist/auto-surface/value-dsl.mjs.map +1 -0
- package/dist/blocklet/activation.cjs +94 -0
- package/dist/blocklet/activation.d.cts +30 -0
- package/dist/blocklet/activation.d.cts.map +1 -0
- package/dist/blocklet/activation.d.mts +30 -0
- package/dist/blocklet/activation.d.mts.map +1 -0
- package/dist/blocklet/activation.mjs +94 -0
- package/dist/blocklet/activation.mjs.map +1 -0
- package/dist/blocklet/did-space-registry.cjs +282 -0
- package/dist/blocklet/did-space-registry.d.cts +82 -0
- package/dist/blocklet/did-space-registry.d.cts.map +1 -0
- package/dist/blocklet/did-space-registry.d.mts +82 -0
- package/dist/blocklet/did-space-registry.d.mts.map +1 -0
- package/dist/blocklet/did-space-registry.mjs +281 -0
- package/dist/blocklet/did-space-registry.mjs.map +1 -0
- package/dist/blocklet/handlers.cjs +66 -0
- package/dist/blocklet/handlers.d.cts +16 -0
- package/dist/blocklet/handlers.d.cts.map +1 -0
- package/dist/blocklet/handlers.d.mts +16 -0
- package/dist/blocklet/handlers.d.mts.map +1 -0
- package/dist/blocklet/handlers.mjs +65 -0
- package/dist/blocklet/handlers.mjs.map +1 -0
- package/dist/blocklet/index.d.mts +7 -0
- package/dist/blocklet/manifest.d.cts +2 -0
- package/dist/blocklet/manifest.d.mts +2 -0
- package/dist/blocklet/manifest.mjs +3 -0
- package/dist/blocklet/registry.cjs +447 -0
- package/dist/blocklet/registry.d.cts +197 -0
- package/dist/blocklet/registry.d.cts.map +1 -0
- package/dist/blocklet/registry.d.mts +197 -0
- package/dist/blocklet/registry.d.mts.map +1 -0
- package/dist/blocklet/registry.mjs +441 -0
- package/dist/blocklet/registry.mjs.map +1 -0
- package/dist/blocklet/static-render.cjs +183 -0
- package/dist/blocklet/static-render.d.cts +55 -0
- package/dist/blocklet/static-render.d.cts.map +1 -0
- package/dist/blocklet/static-render.d.mts +55 -0
- package/dist/blocklet/static-render.d.mts.map +1 -0
- package/dist/blocklet/static-render.mjs +181 -0
- package/dist/blocklet/static-render.mjs.map +1 -0
- package/dist/blocklet/types.d.cts +70 -0
- package/dist/blocklet/types.d.cts.map +1 -0
- package/dist/blocklet/types.d.mts +70 -0
- package/dist/blocklet/types.d.mts.map +1 -0
- package/dist/devices/chain.cjs +127 -0
- package/dist/devices/chain.d.cts +48 -0
- package/dist/devices/chain.d.cts.map +1 -0
- package/dist/devices/chain.d.mts +48 -0
- package/dist/devices/chain.d.mts.map +1 -0
- package/dist/devices/chain.mjs +125 -0
- package/dist/devices/chain.mjs.map +1 -0
- package/dist/dsl-shared.cjs +290 -0
- package/dist/dsl-shared.d.cts +54 -0
- package/dist/dsl-shared.d.cts.map +1 -0
- package/dist/dsl-shared.d.mts +54 -0
- package/dist/dsl-shared.d.mts.map +1 -0
- package/dist/dsl-shared.mjs +287 -0
- package/dist/dsl-shared.mjs.map +1 -0
- package/dist/http/afs-mcp.cjs +85 -0
- package/dist/http/afs-mcp.d.cts +14 -0
- package/dist/http/afs-mcp.d.cts.map +1 -0
- package/dist/http/afs-mcp.d.mts +14 -0
- package/dist/http/afs-mcp.d.mts.map +1 -0
- package/dist/http/afs-mcp.mjs +86 -0
- package/dist/http/afs-mcp.mjs.map +1 -0
- package/dist/http/afs-raw.cjs +264 -0
- package/dist/http/afs-raw.d.cts +31 -0
- package/dist/http/afs-raw.d.cts.map +1 -0
- package/dist/http/afs-raw.d.mts +31 -0
- package/dist/http/afs-raw.d.mts.map +1 -0
- package/dist/http/afs-raw.mjs +264 -0
- package/dist/http/afs-raw.mjs.map +1 -0
- package/dist/http/afs-rest.cjs +30 -0
- package/dist/http/afs-rest.d.cts +21 -0
- package/dist/http/afs-rest.d.cts.map +1 -0
- package/dist/http/afs-rest.d.mts +21 -0
- package/dist/http/afs-rest.d.mts.map +1 -0
- package/dist/http/afs-rest.mjs +31 -0
- package/dist/http/afs-rest.mjs.map +1 -0
- package/dist/http/afs-rpc-wire.cjs +271 -0
- package/dist/http/afs-rpc-wire.d.cts +195 -0
- package/dist/http/afs-rpc-wire.d.cts.map +1 -0
- package/dist/http/afs-rpc-wire.d.mts +195 -0
- package/dist/http/afs-rpc-wire.d.mts.map +1 -0
- package/dist/http/afs-rpc-wire.mjs +262 -0
- package/dist/http/afs-rpc-wire.mjs.map +1 -0
- package/dist/http/afs-rpc.cjs +729 -0
- package/dist/http/afs-rpc.d.cts +103 -0
- package/dist/http/afs-rpc.d.cts.map +1 -0
- package/dist/http/afs-rpc.d.mts +103 -0
- package/dist/http/afs-rpc.d.mts.map +1 -0
- package/dist/http/afs-rpc.mjs +729 -0
- package/dist/http/afs-rpc.mjs.map +1 -0
- package/dist/http/afs-upload.cjs +116 -0
- package/dist/http/afs-upload.d.cts +40 -0
- package/dist/http/afs-upload.d.cts.map +1 -0
- package/dist/http/afs-upload.d.mts +40 -0
- package/dist/http/afs-upload.d.mts.map +1 -0
- package/dist/http/afs-upload.mjs +116 -0
- package/dist/http/afs-upload.mjs.map +1 -0
- package/dist/http/aup-client.cjs +60 -0
- package/dist/http/aup-client.d.cts +22 -0
- package/dist/http/aup-client.d.cts.map +1 -0
- package/dist/http/aup-client.d.mts +22 -0
- package/dist/http/aup-client.d.mts.map +1 -0
- package/dist/http/aup-client.mjs +59 -0
- package/dist/http/aup-client.mjs.map +1 -0
- package/dist/http/aup-event.cjs +100 -0
- package/dist/http/aup-event.d.cts +38 -0
- package/dist/http/aup-event.d.cts.map +1 -0
- package/dist/http/aup-event.d.mts +38 -0
- package/dist/http/aup-event.d.mts.map +1 -0
- package/dist/http/aup-event.mjs +101 -0
- package/dist/http/aup-event.mjs.map +1 -0
- package/dist/http/auth-context.cjs +66 -0
- package/dist/http/auth-context.d.cts +64 -0
- package/dist/http/auth-context.d.cts.map +1 -0
- package/dist/http/auth-context.d.mts +64 -0
- package/dist/http/auth-context.d.mts.map +1 -0
- package/dist/http/auth-context.mjs +66 -0
- package/dist/http/auth-context.mjs.map +1 -0
- package/dist/http/csrf.cjs +50 -0
- package/dist/http/csrf.d.cts +8 -0
- package/dist/http/csrf.d.cts.map +1 -0
- package/dist/http/csrf.d.mts +8 -0
- package/dist/http/csrf.d.mts.map +1 -0
- package/dist/http/csrf.mjs +49 -0
- package/dist/http/csrf.mjs.map +1 -0
- package/dist/http/handlers.cjs +106 -0
- package/dist/http/handlers.d.cts +39 -0
- package/dist/http/handlers.d.cts.map +1 -0
- package/dist/http/handlers.d.mts +39 -0
- package/dist/http/handlers.d.mts.map +1 -0
- package/dist/http/handlers.mjs +104 -0
- package/dist/http/handlers.mjs.map +1 -0
- package/dist/http/index.d.mts +1 -0
- package/dist/http/ingest-facade.cjs +315 -0
- package/dist/http/ingest-facade.mjs +314 -0
- package/dist/http/ingest-facade.mjs.map +1 -0
- package/dist/http/raw-url.cjs +136 -0
- package/dist/http/raw-url.d.cts +54 -0
- package/dist/http/raw-url.d.cts.map +1 -0
- package/dist/http/raw-url.d.mts +54 -0
- package/dist/http/raw-url.d.mts.map +1 -0
- package/dist/http/raw-url.mjs +136 -0
- package/dist/http/raw-url.mjs.map +1 -0
- package/dist/http/request-context.cjs +178 -0
- package/dist/http/request-context.d.cts +76 -0
- package/dist/http/request-context.d.cts.map +1 -0
- package/dist/http/request-context.d.mts +76 -0
- package/dist/http/request-context.d.mts.map +1 -0
- package/dist/http/request-context.mjs +179 -0
- package/dist/http/request-context.mjs.map +1 -0
- package/dist/index.cjs +197 -0
- package/dist/index.d.cts +63 -0
- package/dist/index.d.mts +68 -0
- package/dist/index.mjs +61 -0
- package/dist/mcp/index.cjs +9 -0
- package/dist/mcp/index.d.cts +5 -0
- package/dist/mcp/index.d.mts +5 -0
- package/dist/mcp/index.mjs +6 -0
- package/dist/mcp/prompts.cjs +17 -0
- package/dist/mcp/prompts.d.cts +8 -0
- package/dist/mcp/prompts.d.cts.map +1 -0
- package/dist/mcp/prompts.d.mts +8 -0
- package/dist/mcp/prompts.d.mts.map +1 -0
- package/dist/mcp/prompts.mjs +17 -0
- package/dist/mcp/prompts.mjs.map +1 -0
- package/dist/mcp/resources.cjs +22 -0
- package/dist/mcp/resources.d.cts +8 -0
- package/dist/mcp/resources.d.cts.map +1 -0
- package/dist/mcp/resources.d.mts +8 -0
- package/dist/mcp/resources.d.mts.map +1 -0
- package/dist/mcp/resources.mjs +22 -0
- package/dist/mcp/resources.mjs.map +1 -0
- package/dist/mcp/server.cjs +51 -0
- package/dist/mcp/server.d.cts +20 -0
- package/dist/mcp/server.d.cts.map +1 -0
- package/dist/mcp/server.d.mts +20 -0
- package/dist/mcp/server.d.mts.map +1 -0
- package/dist/mcp/server.mjs +52 -0
- package/dist/mcp/server.mjs.map +1 -0
- package/dist/mcp/tools.cjs +218 -0
- package/dist/mcp/tools.d.cts +8 -0
- package/dist/mcp/tools.d.cts.map +1 -0
- package/dist/mcp/tools.d.mts +8 -0
- package/dist/mcp/tools.d.mts.map +1 -0
- package/dist/mcp/tools.mjs +219 -0
- package/dist/mcp/tools.mjs.map +1 -0
- package/dist/mcp/utils.cjs +75 -0
- package/dist/mcp/utils.mjs +69 -0
- package/dist/mcp/utils.mjs.map +1 -0
- package/dist/mount/index.cjs +4 -0
- package/dist/mount/index.d.cts +3 -0
- package/dist/mount/index.d.mts +3 -0
- package/dist/mount/index.mjs +3 -0
- package/dist/mount/materializer.cjs +167 -0
- package/dist/mount/materializer.d.cts +97 -0
- package/dist/mount/materializer.d.cts.map +1 -0
- package/dist/mount/materializer.d.mts +97 -0
- package/dist/mount/materializer.d.mts.map +1 -0
- package/dist/mount/materializer.mjs +167 -0
- package/dist/mount/materializer.mjs.map +1 -0
- package/dist/mount/types.d.cts +90 -0
- package/dist/mount/types.d.cts.map +1 -0
- package/dist/mount/types.d.mts +90 -0
- package/dist/mount/types.d.mts.map +1 -0
- package/dist/mount-config.cjs +61 -0
- package/dist/mount-config.d.cts +19 -0
- package/dist/mount-config.d.cts.map +1 -0
- package/dist/mount-config.d.mts +19 -0
- package/dist/mount-config.d.mts.map +1 -0
- package/dist/mount-config.mjs +61 -0
- package/dist/mount-config.mjs.map +1 -0
- package/dist/projectors/aup-projector.cjs +190 -0
- package/dist/projectors/aup-projector.d.cts +59 -0
- package/dist/projectors/aup-projector.d.cts.map +1 -0
- package/dist/projectors/aup-projector.d.mts +59 -0
- package/dist/projectors/aup-projector.d.mts.map +1 -0
- package/dist/projectors/aup-projector.mjs +188 -0
- package/dist/projectors/aup-projector.mjs.map +1 -0
- package/dist/projectors/index.cjs +6 -0
- package/dist/projectors/index.d.cts +2 -0
- package/dist/projectors/index.d.mts +2 -0
- package/dist/projectors/index.mjs +3 -0
- package/dist/scaffold/afs.cjs +195 -0
- package/dist/scaffold/afs.d.cts +16 -0
- package/dist/scaffold/afs.d.cts.map +1 -0
- package/dist/scaffold/afs.d.mts +16 -0
- package/dist/scaffold/afs.d.mts.map +1 -0
- package/dist/scaffold/afs.mjs +195 -0
- package/dist/scaffold/afs.mjs.map +1 -0
- package/dist/scaffold/composition.cjs +92 -0
- package/dist/scaffold/composition.d.cts +10 -0
- package/dist/scaffold/composition.d.cts.map +1 -0
- package/dist/scaffold/composition.d.mts +10 -0
- package/dist/scaffold/composition.d.mts.map +1 -0
- package/dist/scaffold/composition.mjs +92 -0
- package/dist/scaffold/composition.mjs.map +1 -0
- package/dist/scaffold/dsl-error.cjs +21 -0
- package/dist/scaffold/dsl-error.d.cts +11 -0
- package/dist/scaffold/dsl-error.d.cts.map +1 -0
- package/dist/scaffold/dsl-error.d.mts +11 -0
- package/dist/scaffold/dsl-error.d.mts.map +1 -0
- package/dist/scaffold/dsl-error.mjs +20 -0
- package/dist/scaffold/dsl-error.mjs.map +1 -0
- package/dist/scaffold/index.d.mts +12 -0
- package/dist/scaffold/manifest-dsl.cjs +188 -0
- package/dist/scaffold/manifest-dsl.d.cts +8 -0
- package/dist/scaffold/manifest-dsl.d.cts.map +1 -0
- package/dist/scaffold/manifest-dsl.d.mts +8 -0
- package/dist/scaffold/manifest-dsl.d.mts.map +1 -0
- package/dist/scaffold/manifest-dsl.mjs +188 -0
- package/dist/scaffold/manifest-dsl.mjs.map +1 -0
- package/dist/scaffold/module-dsl.cjs +284 -0
- package/dist/scaffold/module-dsl.d.cts +8 -0
- package/dist/scaffold/module-dsl.d.cts.map +1 -0
- package/dist/scaffold/module-dsl.d.mts +8 -0
- package/dist/scaffold/module-dsl.d.mts.map +1 -0
- package/dist/scaffold/module-dsl.mjs +284 -0
- package/dist/scaffold/module-dsl.mjs.map +1 -0
- package/dist/scaffold/resolver.cjs +156 -0
- package/dist/scaffold/resolver.d.cts +7 -0
- package/dist/scaffold/resolver.d.cts.map +1 -0
- package/dist/scaffold/resolver.d.mts +7 -0
- package/dist/scaffold/resolver.d.mts.map +1 -0
- package/dist/scaffold/resolver.mjs +156 -0
- package/dist/scaffold/resolver.mjs.map +1 -0
- package/dist/scaffold/runtime.cjs +24 -0
- package/dist/scaffold/runtime.d.cts +19 -0
- package/dist/scaffold/runtime.d.cts.map +1 -0
- package/dist/scaffold/runtime.d.mts +19 -0
- package/dist/scaffold/runtime.d.mts.map +1 -0
- package/dist/scaffold/runtime.mjs +25 -0
- package/dist/scaffold/runtime.mjs.map +1 -0
- package/dist/scaffold/shell-dsl.cjs +279 -0
- package/dist/scaffold/shell-dsl.d.cts +8 -0
- package/dist/scaffold/shell-dsl.d.cts.map +1 -0
- package/dist/scaffold/shell-dsl.d.mts +8 -0
- package/dist/scaffold/shell-dsl.d.mts.map +1 -0
- package/dist/scaffold/shell-dsl.mjs +279 -0
- package/dist/scaffold/shell-dsl.mjs.map +1 -0
- package/dist/scaffold/surface-dsl.cjs +182 -0
- package/dist/scaffold/surface-dsl.d.cts +8 -0
- package/dist/scaffold/surface-dsl.d.cts.map +1 -0
- package/dist/scaffold/surface-dsl.d.mts +8 -0
- package/dist/scaffold/surface-dsl.d.mts.map +1 -0
- package/dist/scaffold/surface-dsl.mjs +182 -0
- package/dist/scaffold/surface-dsl.mjs.map +1 -0
- package/dist/scaffold/surfaces.cjs +84 -0
- package/dist/scaffold/surfaces.d.cts +23 -0
- package/dist/scaffold/surfaces.d.cts.map +1 -0
- package/dist/scaffold/surfaces.d.mts +24 -0
- package/dist/scaffold/surfaces.d.mts.map +1 -0
- package/dist/scaffold/surfaces.mjs +84 -0
- package/dist/scaffold/surfaces.mjs.map +1 -0
- package/dist/scaffold/types.d.cts +264 -0
- package/dist/scaffold/types.d.cts.map +1 -0
- package/dist/scaffold/types.d.mts +265 -0
- package/dist/scaffold/types.d.mts.map +1 -0
- package/dist/scaffold/workspace-dsl.cjs +339 -0
- package/dist/scaffold/workspace-dsl.d.cts +49 -0
- package/dist/scaffold/workspace-dsl.d.cts.map +1 -0
- package/dist/scaffold/workspace-dsl.d.mts +49 -0
- package/dist/scaffold/workspace-dsl.d.mts.map +1 -0
- package/dist/scaffold/workspace-dsl.mjs +337 -0
- package/dist/scaffold/workspace-dsl.mjs.map +1 -0
- package/dist/scope/index.d.mts +3 -0
- package/dist/scope/read-blocklet-scope.cjs +29 -0
- package/dist/scope/read-blocklet-scope.d.cts +8 -0
- package/dist/scope/read-blocklet-scope.d.cts.map +1 -0
- package/dist/scope/read-blocklet-scope.d.mts +8 -0
- package/dist/scope/read-blocklet-scope.d.mts.map +1 -0
- package/dist/scope/read-blocklet-scope.mjs +30 -0
- package/dist/scope/read-blocklet-scope.mjs.map +1 -0
- package/dist/scope/resolve-scoped-afs.cjs +87 -0
- package/dist/scope/resolve-scoped-afs.d.cts +7 -0
- package/dist/scope/resolve-scoped-afs.d.cts.map +1 -0
- package/dist/scope/resolve-scoped-afs.d.mts +7 -0
- package/dist/scope/resolve-scoped-afs.d.mts.map +1 -0
- package/dist/scope/resolve-scoped-afs.mjs +88 -0
- package/dist/scope/resolve-scoped-afs.mjs.map +1 -0
- package/dist/scope/types.d.cts +25 -0
- package/dist/scope/types.d.cts.map +1 -0
- package/dist/scope/types.d.mts +25 -0
- package/dist/scope/types.d.mts.map +1 -0
- package/dist/session/backends.cjs +90 -0
- package/dist/session/backends.d.cts +35 -0
- package/dist/session/backends.d.cts.map +1 -0
- package/dist/session/backends.d.mts +35 -0
- package/dist/session/backends.d.mts.map +1 -0
- package/dist/session/backends.mjs +89 -0
- package/dist/session/backends.mjs.map +1 -0
- package/dist/session/replication-resolver.cjs +323 -0
- package/dist/session/replication-resolver.d.cts +71 -0
- package/dist/session/replication-resolver.d.cts.map +1 -0
- package/dist/session/replication-resolver.d.mts +71 -0
- package/dist/session/replication-resolver.d.mts.map +1 -0
- package/dist/session/replication-resolver.mjs +323 -0
- package/dist/session/replication-resolver.mjs.map +1 -0
- package/dist/session/role-level.cjs +36 -0
- package/dist/session/role-level.d.cts +24 -0
- package/dist/session/role-level.d.cts.map +1 -0
- package/dist/session/role-level.d.mts +24 -0
- package/dist/session/role-level.d.mts.map +1 -0
- package/dist/session/role-level.mjs +35 -0
- package/dist/session/role-level.mjs.map +1 -0
- package/dist/session/session-dir-providers.cjs +254 -0
- package/dist/session/session-dir-providers.d.cts +32 -0
- package/dist/session/session-dir-providers.d.cts.map +1 -0
- package/dist/session/session-dir-providers.d.mts +32 -0
- package/dist/session/session-dir-providers.d.mts.map +1 -0
- package/dist/session/session-dir-providers.mjs +252 -0
- package/dist/session/session-dir-providers.mjs.map +1 -0
- package/dist/session/session-id.cjs +20 -0
- package/dist/session/session-id.d.cts +15 -0
- package/dist/session/session-id.d.cts.map +1 -0
- package/dist/session/session-id.d.mts +15 -0
- package/dist/session/session-id.d.mts.map +1 -0
- package/dist/session/session-id.mjs +20 -0
- package/dist/session/session-id.mjs.map +1 -0
- package/dist/session/session-user-afs.cjs +899 -0
- package/dist/session/session-user-afs.d.cts +296 -0
- package/dist/session/session-user-afs.d.cts.map +1 -0
- package/dist/session/session-user-afs.d.mts +296 -0
- package/dist/session/session-user-afs.d.mts.map +1 -0
- package/dist/session/session-user-afs.mjs +896 -0
- package/dist/session/session-user-afs.mjs.map +1 -0
- package/dist/session/settings-cascade.cjs +69 -0
- package/dist/session/settings-cascade.d.cts +81 -0
- package/dist/session/settings-cascade.d.cts.map +1 -0
- package/dist/session/settings-cascade.d.mts +81 -0
- package/dist/session/settings-cascade.d.mts.map +1 -0
- package/dist/session/settings-cascade.mjs +69 -0
- package/dist/session/settings-cascade.mjs.map +1 -0
- package/dist/session/settings-resolver.cjs +770 -0
- package/dist/session/settings-resolver.d.cts +177 -0
- package/dist/session/settings-resolver.d.cts.map +1 -0
- package/dist/session/settings-resolver.d.mts +177 -0
- package/dist/session/settings-resolver.d.mts.map +1 -0
- package/dist/session/settings-resolver.mjs +771 -0
- package/dist/session/settings-resolver.mjs.map +1 -0
- package/dist/session/settings-schema-store.cjs +0 -0
- package/dist/session/settings-schema-store.d.cts +72 -0
- package/dist/session/settings-schema-store.d.cts.map +1 -0
- package/dist/session/settings-schema-store.d.mts +72 -0
- package/dist/session/settings-schema-store.d.mts.map +1 -0
- package/dist/session/settings-schema-store.mjs +0 -0
- package/dist/session/settings-schema-store.mjs.map +1 -0
- package/dist/system-mounts/index.cjs +14 -0
- package/dist/system-mounts/index.d.cts +6 -0
- package/dist/system-mounts/index.d.mts +6 -0
- package/dist/system-mounts/index.mjs +6 -0
- package/dist/system-mounts/install.cjs +101 -0
- package/dist/system-mounts/install.d.cts +36 -0
- package/dist/system-mounts/install.d.cts.map +1 -0
- package/dist/system-mounts/install.d.mts +37 -0
- package/dist/system-mounts/install.d.mts.map +1 -0
- package/dist/system-mounts/install.mjs +102 -0
- package/dist/system-mounts/install.mjs.map +1 -0
- package/dist/system-mounts/installers.cjs +247 -0
- package/dist/system-mounts/installers.d.cts +13 -0
- package/dist/system-mounts/installers.d.cts.map +1 -0
- package/dist/system-mounts/installers.d.mts +14 -0
- package/dist/system-mounts/installers.d.mts.map +1 -0
- package/dist/system-mounts/installers.mjs +244 -0
- package/dist/system-mounts/installers.mjs.map +1 -0
- package/dist/system-mounts/lists.cjs +122 -0
- package/dist/system-mounts/lists.d.cts +34 -0
- package/dist/system-mounts/lists.d.cts.map +1 -0
- package/dist/system-mounts/lists.d.mts +34 -0
- package/dist/system-mounts/lists.d.mts.map +1 -0
- package/dist/system-mounts/lists.mjs +122 -0
- package/dist/system-mounts/lists.mjs.map +1 -0
- package/dist/system-mounts/types.d.cts +124 -0
- package/dist/system-mounts/types.d.cts.map +1 -0
- package/dist/system-mounts/types.d.mts +125 -0
- package/dist/system-mounts/types.d.mts.map +1 -0
- package/dist/system-mounts/validate.cjs +56 -0
- package/dist/system-mounts/validate.d.cts +34 -0
- package/dist/system-mounts/validate.d.cts.map +1 -0
- package/dist/system-mounts/validate.d.mts +34 -0
- package/dist/system-mounts/validate.d.mts.map +1 -0
- package/dist/system-mounts/validate.mjs +56 -0
- package/dist/system-mounts/validate.mjs.map +1 -0
- package/dist/terminal-llm.cjs +90 -0
- package/dist/terminal-llm.d.cts +50 -0
- package/dist/terminal-llm.d.cts.map +1 -0
- package/dist/terminal-llm.d.mts +50 -0
- package/dist/terminal-llm.d.mts.map +1 -0
- package/dist/terminal-llm.mjs +90 -0
- package/dist/terminal-llm.mjs.map +1 -0
- package/dist/terminal-repl.cjs +371 -0
- package/dist/terminal-repl.d.cts +69 -0
- package/dist/terminal-repl.d.cts.map +1 -0
- package/dist/terminal-repl.d.mts +69 -0
- package/dist/terminal-repl.d.mts.map +1 -0
- package/dist/terminal-repl.mjs +370 -0
- package/dist/terminal-repl.mjs.map +1 -0
- package/dist/transport/idle-timer.cjs +136 -0
- package/dist/transport/idle-timer.d.cts +92 -0
- package/dist/transport/idle-timer.d.cts.map +1 -0
- package/dist/transport/idle-timer.d.mts +92 -0
- package/dist/transport/idle-timer.d.mts.map +1 -0
- package/dist/transport/idle-timer.mjs +132 -0
- package/dist/transport/idle-timer.mjs.map +1 -0
- package/dist/web-component-dsl.cjs +153 -0
- package/dist/web-component-dsl.d.cts +27 -0
- package/dist/web-component-dsl.d.cts.map +1 -0
- package/dist/web-component-dsl.d.mts +27 -0
- package/dist/web-component-dsl.d.mts.map +1 -0
- package/dist/web-component-dsl.mjs +152 -0
- package/dist/web-component-dsl.mjs.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { readBlockletScope } from "./read-blocklet-scope.mjs";
|
|
2
|
+
import { AFSValidationError, makeNsLog } from "@aigne/afs";
|
|
3
|
+
|
|
4
|
+
//#region src/scope/resolve-scoped-afs.ts
|
|
5
|
+
/**
|
|
6
|
+
* Single source of truth for "given a blocklet, which AFS serves its requests?".
|
|
7
|
+
*
|
|
8
|
+
* Routing rules:
|
|
9
|
+
* scope: root → globalAFS pass-through, no activation, no wrapping
|
|
10
|
+
* scope: app → activator.ensureActivated() → runtime AFS
|
|
11
|
+
* scope: user → same as app; caller data is overlaid per session by SessionUserAFS
|
|
12
|
+
* scope: agent → same as app
|
|
13
|
+
*
|
|
14
|
+
* Failure modes (graceful, never throw on activation failure):
|
|
15
|
+
* - Activator missing for non-root scope → log warn, fall back to globalAFS
|
|
16
|
+
* - Activator returns null → log warn, fall back to globalAFS
|
|
17
|
+
*
|
|
18
|
+
* Adversarial: invalid blocklet names (path traversal, separators, null bytes,
|
|
19
|
+
* empty strings) reject synchronously before any I/O.
|
|
20
|
+
*
|
|
21
|
+
* Concurrency: parallel calls for the same (activator, blocklet) share a single
|
|
22
|
+
* activation promise so the activator is invoked at most once under contention.
|
|
23
|
+
*/
|
|
24
|
+
const log = makeNsLog("aos");
|
|
25
|
+
const BLOCKLET_NAME_RE = /^[A-Za-z0-9._-]+$/;
|
|
26
|
+
function validateBlockletName(name) {
|
|
27
|
+
if (typeof name !== "string" || name.length === 0) throw new AFSValidationError("Invalid blocklet name: empty or non-string");
|
|
28
|
+
if (name.includes("/") || name.includes("\\") || name.includes("\0")) throw new AFSValidationError(`Invalid blocklet name: contains path separator or null byte (${JSON.stringify(name)})`);
|
|
29
|
+
if (name === "." || name === "..") throw new AFSValidationError(`Invalid blocklet name: reserved (${JSON.stringify(name)})`);
|
|
30
|
+
if (!BLOCKLET_NAME_RE.test(name)) throw new AFSValidationError(`Invalid blocklet name: must match ${BLOCKLET_NAME_RE} (${JSON.stringify(name)})`);
|
|
31
|
+
}
|
|
32
|
+
const activationLocks = /* @__PURE__ */ new WeakMap();
|
|
33
|
+
function activateOnce(activator, blockletName) {
|
|
34
|
+
let perActivator = activationLocks.get(activator);
|
|
35
|
+
if (!perActivator) {
|
|
36
|
+
perActivator = /* @__PURE__ */ new Map();
|
|
37
|
+
activationLocks.set(activator, perActivator);
|
|
38
|
+
}
|
|
39
|
+
const inflight = perActivator.get(blockletName);
|
|
40
|
+
if (inflight) return inflight;
|
|
41
|
+
const promise = (async () => {
|
|
42
|
+
try {
|
|
43
|
+
return await activator.ensureActivated(blockletName);
|
|
44
|
+
} finally {
|
|
45
|
+
Promise.resolve().then(() => {
|
|
46
|
+
perActivator.delete(blockletName);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
})();
|
|
50
|
+
perActivator.set(blockletName, promise);
|
|
51
|
+
return promise;
|
|
52
|
+
}
|
|
53
|
+
async function resolveScopedAFS(input) {
|
|
54
|
+
const { globalAFS, blockletName, activator } = input;
|
|
55
|
+
validateBlockletName(blockletName);
|
|
56
|
+
const scope = input.scope ?? await readBlockletScope(globalAFS, blockletName);
|
|
57
|
+
if (scope === "root") return {
|
|
58
|
+
afs: globalAFS,
|
|
59
|
+
scope: "root",
|
|
60
|
+
isGlobal: true
|
|
61
|
+
};
|
|
62
|
+
if (!activator) {
|
|
63
|
+
log.warn(`[resolveScopedAFS] no activator provided for blocklet=${blockletName} scope=${scope}; falling back to globalAFS`);
|
|
64
|
+
return {
|
|
65
|
+
afs: globalAFS,
|
|
66
|
+
scope,
|
|
67
|
+
isGlobal: true
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const runtimeAFS = await activateOnce(activator, blockletName);
|
|
71
|
+
if (!runtimeAFS) {
|
|
72
|
+
log.warn(`[resolveScopedAFS] activator returned null for blocklet=${blockletName} scope=${scope}; falling back to globalAFS`);
|
|
73
|
+
return {
|
|
74
|
+
afs: globalAFS,
|
|
75
|
+
scope,
|
|
76
|
+
isGlobal: true
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
afs: runtimeAFS,
|
|
81
|
+
scope,
|
|
82
|
+
isGlobal: false
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
//#endregion
|
|
87
|
+
export { resolveScopedAFS };
|
|
88
|
+
//# sourceMappingURL=resolve-scoped-afs.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-scoped-afs.mjs","names":[],"sources":["../../src/scope/resolve-scoped-afs.ts"],"sourcesContent":["/**\n * Single source of truth for \"given a blocklet, which AFS serves its requests?\".\n *\n * Routing rules:\n * scope: root → globalAFS pass-through, no activation, no wrapping\n * scope: app → activator.ensureActivated() → runtime AFS\n * scope: user → same as app; caller data is overlaid per session by SessionUserAFS\n * scope: agent → same as app\n *\n * Failure modes (graceful, never throw on activation failure):\n * - Activator missing for non-root scope → log warn, fall back to globalAFS\n * - Activator returns null → log warn, fall back to globalAFS\n *\n * Adversarial: invalid blocklet names (path traversal, separators, null bytes,\n * empty strings) reject synchronously before any I/O.\n *\n * Concurrency: parallel calls for the same (activator, blocklet) share a single\n * activation promise so the activator is invoked at most once under contention.\n */\n\nimport { type AFSRoot, AFSValidationError, makeNsLog } from \"@aigne/afs\";\nimport { readBlockletScope } from \"./read-blocklet-scope.js\";\nimport type {\n BlockletScope,\n ResolveScopedAFSInput,\n ResolveScopedAFSResult,\n ScopeActivator,\n} from \"./types.js\";\n\nconst log = makeNsLog(\"aos\");\n\nconst BLOCKLET_NAME_RE = /^[A-Za-z0-9._-]+$/;\n\nfunction validateBlockletName(name: unknown): asserts name is string {\n if (typeof name !== \"string\" || name.length === 0) {\n throw new AFSValidationError(\"Invalid blocklet name: empty or non-string\");\n }\n if (name.includes(\"/\") || name.includes(\"\\\\\") || name.includes(\"\\0\")) {\n throw new AFSValidationError(\n `Invalid blocklet name: contains path separator or null byte (${JSON.stringify(name)})`,\n );\n }\n if (name === \".\" || name === \"..\") {\n throw new AFSValidationError(`Invalid blocklet name: reserved (${JSON.stringify(name)})`);\n }\n if (!BLOCKLET_NAME_RE.test(name)) {\n throw new AFSValidationError(\n `Invalid blocklet name: must match ${BLOCKLET_NAME_RE} (${JSON.stringify(name)})`,\n );\n }\n}\n\nconst activationLocks = new WeakMap<ScopeActivator, Map<string, Promise<AFSRoot | null>>>();\n\nfunction activateOnce(activator: ScopeActivator, blockletName: string): Promise<AFSRoot | null> {\n let perActivator = activationLocks.get(activator);\n if (!perActivator) {\n perActivator = new Map();\n activationLocks.set(activator, perActivator);\n }\n const inflight = perActivator.get(blockletName);\n if (inflight) return inflight;\n\n const promise = (async () => {\n try {\n return await activator.ensureActivated(blockletName);\n } finally {\n Promise.resolve().then(() => {\n perActivator.delete(blockletName);\n });\n }\n })();\n perActivator.set(blockletName, promise);\n return promise;\n}\n\nexport async function resolveScopedAFS(\n input: ResolveScopedAFSInput,\n): Promise<ResolveScopedAFSResult> {\n const { globalAFS, blockletName, activator } = input;\n validateBlockletName(blockletName);\n\n const scope: BlockletScope = input.scope ?? (await readBlockletScope(globalAFS, blockletName));\n\n if (scope === \"root\") {\n return { afs: globalAFS, scope: \"root\", isGlobal: true };\n }\n\n if (!activator) {\n log.warn(\n `[resolveScopedAFS] no activator provided for blocklet=${blockletName} scope=${scope}; falling back to globalAFS`,\n );\n return { afs: globalAFS, scope, isGlobal: true };\n }\n\n const runtimeAFS = await activateOnce(activator, blockletName);\n if (!runtimeAFS) {\n log.warn(\n `[resolveScopedAFS] activator returned null for blocklet=${blockletName} scope=${scope}; falling back to globalAFS`,\n );\n return { afs: globalAFS, scope, isGlobal: true };\n }\n\n return { afs: runtimeAFS, scope, isGlobal: false };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA6BA,MAAM,MAAM,UAAU,MAAM;AAE5B,MAAM,mBAAmB;AAEzB,SAAS,qBAAqB,MAAuC;AACnE,KAAI,OAAO,SAAS,YAAY,KAAK,WAAW,EAC9C,OAAM,IAAI,mBAAmB,6CAA6C;AAE5E,KAAI,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,CAClE,OAAM,IAAI,mBACR,gEAAgE,KAAK,UAAU,KAAK,CAAC,GACtF;AAEH,KAAI,SAAS,OAAO,SAAS,KAC3B,OAAM,IAAI,mBAAmB,oCAAoC,KAAK,UAAU,KAAK,CAAC,GAAG;AAE3F,KAAI,CAAC,iBAAiB,KAAK,KAAK,CAC9B,OAAM,IAAI,mBACR,qCAAqC,iBAAiB,IAAI,KAAK,UAAU,KAAK,CAAC,GAChF;;AAIL,MAAM,kCAAkB,IAAI,SAA+D;AAE3F,SAAS,aAAa,WAA2B,cAA+C;CAC9F,IAAI,eAAe,gBAAgB,IAAI,UAAU;AACjD,KAAI,CAAC,cAAc;AACjB,iCAAe,IAAI,KAAK;AACxB,kBAAgB,IAAI,WAAW,aAAa;;CAE9C,MAAM,WAAW,aAAa,IAAI,aAAa;AAC/C,KAAI,SAAU,QAAO;CAErB,MAAM,WAAW,YAAY;AAC3B,MAAI;AACF,UAAO,MAAM,UAAU,gBAAgB,aAAa;YAC5C;AACR,WAAQ,SAAS,CAAC,WAAW;AAC3B,iBAAa,OAAO,aAAa;KACjC;;KAEF;AACJ,cAAa,IAAI,cAAc,QAAQ;AACvC,QAAO;;AAGT,eAAsB,iBACpB,OACiC;CACjC,MAAM,EAAE,WAAW,cAAc,cAAc;AAC/C,sBAAqB,aAAa;CAElC,MAAM,QAAuB,MAAM,SAAU,MAAM,kBAAkB,WAAW,aAAa;AAE7F,KAAI,UAAU,OACZ,QAAO;EAAE,KAAK;EAAW,OAAO;EAAQ,UAAU;EAAM;AAG1D,KAAI,CAAC,WAAW;AACd,MAAI,KACF,yDAAyD,aAAa,SAAS,MAAM,6BACtF;AACD,SAAO;GAAE,KAAK;GAAW;GAAO,UAAU;GAAM;;CAGlD,MAAM,aAAa,MAAM,aAAa,WAAW,aAAa;AAC9D,KAAI,CAAC,YAAY;AACf,MAAI,KACF,2DAA2D,aAAa,SAAS,MAAM,6BACxF;AACD,SAAO;GAAE,KAAK;GAAW;GAAO,UAAU;GAAM;;AAGlD,QAAO;EAAE,KAAK;EAAY;EAAO,UAAU;EAAO"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AFSRoot } from "@aigne/afs";
|
|
2
|
+
|
|
3
|
+
//#region src/scope/types.d.ts
|
|
4
|
+
type BlockletScope = "root" | "app" | "user" | "agent";
|
|
5
|
+
interface ScopeActivator {
|
|
6
|
+
/** Return the activated runtime AFS for blocklet, activating if necessary. Returns null on failure. */
|
|
7
|
+
ensureActivated(blockletName: string): Promise<AFSRoot | null>;
|
|
8
|
+
}
|
|
9
|
+
interface ResolveScopedAFSInput {
|
|
10
|
+
globalAFS: AFSRoot;
|
|
11
|
+
blockletName: string;
|
|
12
|
+
/** Pre-parsed scope. If absent, resolver reads /registry/blocklets/<name>/blocklet.yaml via globalAFS. */
|
|
13
|
+
scope?: BlockletScope;
|
|
14
|
+
/** Required for app/user/agent. Optional only when scope is known to be "root". */
|
|
15
|
+
activator?: ScopeActivator;
|
|
16
|
+
}
|
|
17
|
+
interface ResolveScopedAFSResult {
|
|
18
|
+
afs: AFSRoot;
|
|
19
|
+
scope: BlockletScope;
|
|
20
|
+
/** True iff afs === globalAFS (i.e. scope: root pass-through). */
|
|
21
|
+
isGlobal: boolean;
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { BlockletScope, ResolveScopedAFSInput, ResolveScopedAFSResult, ScopeActivator };
|
|
25
|
+
//# sourceMappingURL=types.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.cts","names":[],"sources":["../../src/scope/types.ts"],"mappings":";;;KAQY,aAAA;AAAA,UAEK,cAAA;EAAA;EAEf,eAAA,CAAgB,YAAA,WAAuB,OAAA,CAAQ,OAAA;AAAA;AAAA,UAGhC,qBAAA;EACf,SAAA,EAAW,OAAA;EACX,YAAA;EALuC;EAOvC,KAAA,GAAQ,aAAA;EAP8C;EAStD,SAAA,GAAY,cAAA;AAAA;AAAA,UAGG,sBAAA;EACf,GAAA,EAAK,OAAA;EACL,KAAA,EAAO,aAAA;EAPC;EASR,QAAA;AAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { AFSRoot } from "@aigne/afs";
|
|
2
|
+
|
|
3
|
+
//#region src/scope/types.d.ts
|
|
4
|
+
type BlockletScope = "root" | "app" | "user" | "agent";
|
|
5
|
+
interface ScopeActivator {
|
|
6
|
+
/** Return the activated runtime AFS for blocklet, activating if necessary. Returns null on failure. */
|
|
7
|
+
ensureActivated(blockletName: string): Promise<AFSRoot | null>;
|
|
8
|
+
}
|
|
9
|
+
interface ResolveScopedAFSInput {
|
|
10
|
+
globalAFS: AFSRoot;
|
|
11
|
+
blockletName: string;
|
|
12
|
+
/** Pre-parsed scope. If absent, resolver reads /registry/blocklets/<name>/blocklet.yaml via globalAFS. */
|
|
13
|
+
scope?: BlockletScope;
|
|
14
|
+
/** Required for app/user/agent. Optional only when scope is known to be "root". */
|
|
15
|
+
activator?: ScopeActivator;
|
|
16
|
+
}
|
|
17
|
+
interface ResolveScopedAFSResult {
|
|
18
|
+
afs: AFSRoot;
|
|
19
|
+
scope: BlockletScope;
|
|
20
|
+
/** True iff afs === globalAFS (i.e. scope: root pass-through). */
|
|
21
|
+
isGlobal: boolean;
|
|
22
|
+
}
|
|
23
|
+
//#endregion
|
|
24
|
+
export { BlockletScope, ResolveScopedAFSInput, ResolveScopedAFSResult, ScopeActivator };
|
|
25
|
+
//# sourceMappingURL=types.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.mts","names":[],"sources":["../../src/scope/types.ts"],"mappings":";;;KAQY,aAAA;AAAA,UAEK,cAAA;EAAA;EAEf,eAAA,CAAgB,YAAA,WAAuB,OAAA,CAAQ,OAAA;AAAA;AAAA,UAGhC,qBAAA;EACf,SAAA,EAAW,OAAA;EACX,YAAA;EALuC;EAOvC,KAAA,GAAQ,aAAA;EAP8C;EAStD,SAAA,GAAY,cAAA;AAAA;AAAA,UAGG,sBAAA;EACf,GAAA,EAAK,OAAA;EACL,KAAA,EAAO,aAAA;EAPC;EASR,QAAA;AAAA"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
const require_session_id = require('./session-id.cjs');
|
|
2
|
+
let ufo = require("ufo");
|
|
3
|
+
let _aigne_afs = require("@aigne/afs");
|
|
4
|
+
|
|
5
|
+
//#region src/session/backends.ts
|
|
6
|
+
/**
|
|
7
|
+
* Per-user / per-session / whole-user-space AFS backend factory builders.
|
|
8
|
+
*
|
|
9
|
+
* Both are thin: given a `DIDSpaceLike` (local `DIDSpace` or `CloudflareDIDSpace`)
|
|
10
|
+
* they return a factory that projects the right slice of a role-scoped instance
|
|
11
|
+
* space. Runtime-agnostic — the Node daemon (afs-loader) and the CF Worker
|
|
12
|
+
* (Phase 7) build them from their own DID Space implementation, so neither
|
|
13
|
+
* reimplements the projection shape (blocklet-structure.md §4.4 / §6.2).
|
|
14
|
+
*/
|
|
15
|
+
const READ_ONLY_SPACE_OPS = new Set([
|
|
16
|
+
"list",
|
|
17
|
+
"read",
|
|
18
|
+
"query",
|
|
19
|
+
"stat",
|
|
20
|
+
"search",
|
|
21
|
+
"explain"
|
|
22
|
+
]);
|
|
23
|
+
/**
|
|
24
|
+
* Build the per-user data backend: projects a single user's content root inside
|
|
25
|
+
* the instance via `getInstanceSpace({ role: "user", userDid })`. Mounted by the
|
|
26
|
+
* runtime at `/blocklets/<name>/users/<did>/` and surfaced in-session as `/user`.
|
|
27
|
+
*
|
|
28
|
+
* Takes a `SpaceResolver` (not a single space) so WHICH space backs the user is
|
|
29
|
+
* decided per-call: `resolveUserSpace(userDid)` returns the caller's OWN space.
|
|
30
|
+
* The user fragment inside it is the single `blocklets/<i>/user` subtree —
|
|
31
|
+
* `userDid` is NOT passed to `getInstanceSpace` (the space already IS the
|
|
32
|
+
* user's; addressing by userDid would be redundant, and it's @deprecated there).
|
|
33
|
+
*/
|
|
34
|
+
function createUserDataBackend(resolver) {
|
|
35
|
+
return async (instanceDid, userDid) => {
|
|
36
|
+
return new _aigne_afs.ProjectionProvider({
|
|
37
|
+
name: "user-data",
|
|
38
|
+
globalAFS: await (await resolver.resolveUserSpace(userDid)).getInstanceSpace({
|
|
39
|
+
instanceDid,
|
|
40
|
+
role: "user"
|
|
41
|
+
}),
|
|
42
|
+
sourcePath: "/"
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Build the per-session scratch backend: pins to the system instance space's
|
|
48
|
+
* `/sessions/<sid>/tmp` sub-corner. Rejects unsafe session ids (defense-in-depth
|
|
49
|
+
* so the sub-path can never escape that corner). Session scratch is always
|
|
50
|
+
* installer-side data, so it resolves via `resolveInstallerSpace()`.
|
|
51
|
+
*/
|
|
52
|
+
function createSessionTmpBackend(resolver) {
|
|
53
|
+
return async (instanceDid, sessionId) => {
|
|
54
|
+
if (!require_session_id.isValidSessionId(sessionId)) throw new Error(`sessionTmpBackend: invalid sessionId ${JSON.stringify(sessionId)}`);
|
|
55
|
+
return new _aigne_afs.ProjectionProvider({
|
|
56
|
+
name: "session-tmp",
|
|
57
|
+
globalAFS: await (await resolver.resolveInstallerSpace()).getInstanceSpace({
|
|
58
|
+
instanceDid,
|
|
59
|
+
role: "system"
|
|
60
|
+
}),
|
|
61
|
+
sourcePath: (0, ufo.joinURL)("/sessions", sessionId, "tmp")
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Build the caller's whole DID Space root backend, surfaced in-session as
|
|
67
|
+
* `/space` for `scope:user` blocklets.
|
|
68
|
+
*
|
|
69
|
+
* This is intentionally separate from `/user`: `/user` is the current blocklet's
|
|
70
|
+
* per-user fragment (`blocklets/<i>/user`), while `/space` is the caller's whole
|
|
71
|
+
* DID Space root. Default readonly keeps `scope:user` from becoming a blanket
|
|
72
|
+
* write capability.
|
|
73
|
+
*/
|
|
74
|
+
function createUserSpaceRootBackend(resolver) {
|
|
75
|
+
return async (userDid, accessMode = "readonly") => {
|
|
76
|
+
const space = await resolver.resolveUserSpace(userDid);
|
|
77
|
+
if (typeof space.getSpaceRoot !== "function") throw new Error("user DID Space backend does not expose getSpaceRoot()");
|
|
78
|
+
return new _aigne_afs.ProjectionProvider({
|
|
79
|
+
name: "user-space-root",
|
|
80
|
+
globalAFS: await space.getSpaceRoot({ accessMode }),
|
|
81
|
+
sourcePath: "/",
|
|
82
|
+
allowedOps: accessMode === "readonly" ? READ_ONLY_SPACE_OPS : void 0
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
//#endregion
|
|
88
|
+
exports.createSessionTmpBackend = createSessionTmpBackend;
|
|
89
|
+
exports.createUserDataBackend = createUserDataBackend;
|
|
90
|
+
exports.createUserSpaceRootBackend = createUserSpaceRootBackend;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { AFSAccessMode, AFSModule, SpaceResolver } from "@aigne/afs";
|
|
2
|
+
|
|
3
|
+
//#region src/session/backends.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Build the per-user data backend: projects a single user's content root inside
|
|
6
|
+
* the instance via `getInstanceSpace({ role: "user", userDid })`. Mounted by the
|
|
7
|
+
* runtime at `/blocklets/<name>/users/<did>/` and surfaced in-session as `/user`.
|
|
8
|
+
*
|
|
9
|
+
* Takes a `SpaceResolver` (not a single space) so WHICH space backs the user is
|
|
10
|
+
* decided per-call: `resolveUserSpace(userDid)` returns the caller's OWN space.
|
|
11
|
+
* The user fragment inside it is the single `blocklets/<i>/user` subtree —
|
|
12
|
+
* `userDid` is NOT passed to `getInstanceSpace` (the space already IS the
|
|
13
|
+
* user's; addressing by userDid would be redundant, and it's @deprecated there).
|
|
14
|
+
*/
|
|
15
|
+
declare function createUserDataBackend(resolver: SpaceResolver): (instanceDid: string, userDid: string) => Promise<AFSModule>;
|
|
16
|
+
/**
|
|
17
|
+
* Build the per-session scratch backend: pins to the system instance space's
|
|
18
|
+
* `/sessions/<sid>/tmp` sub-corner. Rejects unsafe session ids (defense-in-depth
|
|
19
|
+
* so the sub-path can never escape that corner). Session scratch is always
|
|
20
|
+
* installer-side data, so it resolves via `resolveInstallerSpace()`.
|
|
21
|
+
*/
|
|
22
|
+
declare function createSessionTmpBackend(resolver: SpaceResolver): (instanceDid: string, sessionId: string) => Promise<AFSModule>;
|
|
23
|
+
/**
|
|
24
|
+
* Build the caller's whole DID Space root backend, surfaced in-session as
|
|
25
|
+
* `/space` for `scope:user` blocklets.
|
|
26
|
+
*
|
|
27
|
+
* This is intentionally separate from `/user`: `/user` is the current blocklet's
|
|
28
|
+
* per-user fragment (`blocklets/<i>/user`), while `/space` is the caller's whole
|
|
29
|
+
* DID Space root. Default readonly keeps `scope:user` from becoming a blanket
|
|
30
|
+
* write capability.
|
|
31
|
+
*/
|
|
32
|
+
declare function createUserSpaceRootBackend(resolver: SpaceResolver): (userDid: string, accessMode?: AFSAccessMode) => Promise<AFSModule>;
|
|
33
|
+
//#endregion
|
|
34
|
+
export { createSessionTmpBackend, createUserDataBackend, createUserSpaceRootBackend };
|
|
35
|
+
//# sourceMappingURL=backends.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backends.d.cts","names":[],"sources":["../../src/session/backends.ts"],"mappings":";;;;;;;;;;;;AAkDA;;iBAjBgB,qBAAA,CACd,QAAA,EAAU,aAAA,IACR,WAAA,UAAqB,OAAA,aAAoB,OAAA,CAAQ,SAAA;;;;;;;iBAerC,uBAAA,CACd,QAAA,EAAU,aAAA,IACR,WAAA,UAAqB,SAAA,aAAsB,OAAA,CAAQ,SAAA;;;;;;;AA0BvD;;;iBAAgB,0BAAA,CACd,QAAA,EAAU,aAAA,IACR,OAAA,UAAiB,UAAA,GAAa,aAAA,KAAkB,OAAA,CAAQ,SAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { AFSAccessMode, AFSModule, SpaceResolver } from "@aigne/afs";
|
|
2
|
+
|
|
3
|
+
//#region src/session/backends.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Build the per-user data backend: projects a single user's content root inside
|
|
6
|
+
* the instance via `getInstanceSpace({ role: "user", userDid })`. Mounted by the
|
|
7
|
+
* runtime at `/blocklets/<name>/users/<did>/` and surfaced in-session as `/user`.
|
|
8
|
+
*
|
|
9
|
+
* Takes a `SpaceResolver` (not a single space) so WHICH space backs the user is
|
|
10
|
+
* decided per-call: `resolveUserSpace(userDid)` returns the caller's OWN space.
|
|
11
|
+
* The user fragment inside it is the single `blocklets/<i>/user` subtree —
|
|
12
|
+
* `userDid` is NOT passed to `getInstanceSpace` (the space already IS the
|
|
13
|
+
* user's; addressing by userDid would be redundant, and it's @deprecated there).
|
|
14
|
+
*/
|
|
15
|
+
declare function createUserDataBackend(resolver: SpaceResolver): (instanceDid: string, userDid: string) => Promise<AFSModule>;
|
|
16
|
+
/**
|
|
17
|
+
* Build the per-session scratch backend: pins to the system instance space's
|
|
18
|
+
* `/sessions/<sid>/tmp` sub-corner. Rejects unsafe session ids (defense-in-depth
|
|
19
|
+
* so the sub-path can never escape that corner). Session scratch is always
|
|
20
|
+
* installer-side data, so it resolves via `resolveInstallerSpace()`.
|
|
21
|
+
*/
|
|
22
|
+
declare function createSessionTmpBackend(resolver: SpaceResolver): (instanceDid: string, sessionId: string) => Promise<AFSModule>;
|
|
23
|
+
/**
|
|
24
|
+
* Build the caller's whole DID Space root backend, surfaced in-session as
|
|
25
|
+
* `/space` for `scope:user` blocklets.
|
|
26
|
+
*
|
|
27
|
+
* This is intentionally separate from `/user`: `/user` is the current blocklet's
|
|
28
|
+
* per-user fragment (`blocklets/<i>/user`), while `/space` is the caller's whole
|
|
29
|
+
* DID Space root. Default readonly keeps `scope:user` from becoming a blanket
|
|
30
|
+
* write capability.
|
|
31
|
+
*/
|
|
32
|
+
declare function createUserSpaceRootBackend(resolver: SpaceResolver): (userDid: string, accessMode?: AFSAccessMode) => Promise<AFSModule>;
|
|
33
|
+
//#endregion
|
|
34
|
+
export { createSessionTmpBackend, createUserDataBackend, createUserSpaceRootBackend };
|
|
35
|
+
//# sourceMappingURL=backends.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backends.d.mts","names":[],"sources":["../../src/session/backends.ts"],"mappings":";;;;;;;;;;;;AAkDA;;iBAjBgB,qBAAA,CACd,QAAA,EAAU,aAAA,IACR,WAAA,UAAqB,OAAA,aAAoB,OAAA,CAAQ,SAAA;;;;;;;iBAerC,uBAAA,CACd,QAAA,EAAU,aAAA,IACR,WAAA,UAAqB,SAAA,aAAsB,OAAA,CAAQ,SAAA;;;;;;;AA0BvD;;;iBAAgB,0BAAA,CACd,QAAA,EAAU,aAAA,IACR,OAAA,UAAiB,UAAA,GAAa,aAAA,KAAkB,OAAA,CAAQ,SAAA"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { isValidSessionId } from "./session-id.mjs";
|
|
2
|
+
import { joinURL } from "ufo";
|
|
3
|
+
import { ProjectionProvider } from "@aigne/afs";
|
|
4
|
+
|
|
5
|
+
//#region src/session/backends.ts
|
|
6
|
+
/**
|
|
7
|
+
* Per-user / per-session / whole-user-space AFS backend factory builders.
|
|
8
|
+
*
|
|
9
|
+
* Both are thin: given a `DIDSpaceLike` (local `DIDSpace` or `CloudflareDIDSpace`)
|
|
10
|
+
* they return a factory that projects the right slice of a role-scoped instance
|
|
11
|
+
* space. Runtime-agnostic — the Node daemon (afs-loader) and the CF Worker
|
|
12
|
+
* (Phase 7) build them from their own DID Space implementation, so neither
|
|
13
|
+
* reimplements the projection shape (blocklet-structure.md §4.4 / §6.2).
|
|
14
|
+
*/
|
|
15
|
+
const READ_ONLY_SPACE_OPS = new Set([
|
|
16
|
+
"list",
|
|
17
|
+
"read",
|
|
18
|
+
"query",
|
|
19
|
+
"stat",
|
|
20
|
+
"search",
|
|
21
|
+
"explain"
|
|
22
|
+
]);
|
|
23
|
+
/**
|
|
24
|
+
* Build the per-user data backend: projects a single user's content root inside
|
|
25
|
+
* the instance via `getInstanceSpace({ role: "user", userDid })`. Mounted by the
|
|
26
|
+
* runtime at `/blocklets/<name>/users/<did>/` and surfaced in-session as `/user`.
|
|
27
|
+
*
|
|
28
|
+
* Takes a `SpaceResolver` (not a single space) so WHICH space backs the user is
|
|
29
|
+
* decided per-call: `resolveUserSpace(userDid)` returns the caller's OWN space.
|
|
30
|
+
* The user fragment inside it is the single `blocklets/<i>/user` subtree —
|
|
31
|
+
* `userDid` is NOT passed to `getInstanceSpace` (the space already IS the
|
|
32
|
+
* user's; addressing by userDid would be redundant, and it's @deprecated there).
|
|
33
|
+
*/
|
|
34
|
+
function createUserDataBackend(resolver) {
|
|
35
|
+
return async (instanceDid, userDid) => {
|
|
36
|
+
return new ProjectionProvider({
|
|
37
|
+
name: "user-data",
|
|
38
|
+
globalAFS: await (await resolver.resolveUserSpace(userDid)).getInstanceSpace({
|
|
39
|
+
instanceDid,
|
|
40
|
+
role: "user"
|
|
41
|
+
}),
|
|
42
|
+
sourcePath: "/"
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Build the per-session scratch backend: pins to the system instance space's
|
|
48
|
+
* `/sessions/<sid>/tmp` sub-corner. Rejects unsafe session ids (defense-in-depth
|
|
49
|
+
* so the sub-path can never escape that corner). Session scratch is always
|
|
50
|
+
* installer-side data, so it resolves via `resolveInstallerSpace()`.
|
|
51
|
+
*/
|
|
52
|
+
function createSessionTmpBackend(resolver) {
|
|
53
|
+
return async (instanceDid, sessionId) => {
|
|
54
|
+
if (!isValidSessionId(sessionId)) throw new Error(`sessionTmpBackend: invalid sessionId ${JSON.stringify(sessionId)}`);
|
|
55
|
+
return new ProjectionProvider({
|
|
56
|
+
name: "session-tmp",
|
|
57
|
+
globalAFS: await (await resolver.resolveInstallerSpace()).getInstanceSpace({
|
|
58
|
+
instanceDid,
|
|
59
|
+
role: "system"
|
|
60
|
+
}),
|
|
61
|
+
sourcePath: joinURL("/sessions", sessionId, "tmp")
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Build the caller's whole DID Space root backend, surfaced in-session as
|
|
67
|
+
* `/space` for `scope:user` blocklets.
|
|
68
|
+
*
|
|
69
|
+
* This is intentionally separate from `/user`: `/user` is the current blocklet's
|
|
70
|
+
* per-user fragment (`blocklets/<i>/user`), while `/space` is the caller's whole
|
|
71
|
+
* DID Space root. Default readonly keeps `scope:user` from becoming a blanket
|
|
72
|
+
* write capability.
|
|
73
|
+
*/
|
|
74
|
+
function createUserSpaceRootBackend(resolver) {
|
|
75
|
+
return async (userDid, accessMode = "readonly") => {
|
|
76
|
+
const space = await resolver.resolveUserSpace(userDid);
|
|
77
|
+
if (typeof space.getSpaceRoot !== "function") throw new Error("user DID Space backend does not expose getSpaceRoot()");
|
|
78
|
+
return new ProjectionProvider({
|
|
79
|
+
name: "user-space-root",
|
|
80
|
+
globalAFS: await space.getSpaceRoot({ accessMode }),
|
|
81
|
+
sourcePath: "/",
|
|
82
|
+
allowedOps: accessMode === "readonly" ? READ_ONLY_SPACE_OPS : void 0
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
//#endregion
|
|
88
|
+
export { createSessionTmpBackend, createUserDataBackend, createUserSpaceRootBackend };
|
|
89
|
+
//# sourceMappingURL=backends.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backends.mjs","names":[],"sources":["../../src/session/backends.ts"],"sourcesContent":["/**\n * Per-user / per-session / whole-user-space AFS backend factory builders.\n *\n * Both are thin: given a `DIDSpaceLike` (local `DIDSpace` or `CloudflareDIDSpace`)\n * they return a factory that projects the right slice of a role-scoped instance\n * space. Runtime-agnostic — the Node daemon (afs-loader) and the CF Worker\n * (Phase 7) build them from their own DID Space implementation, so neither\n * reimplements the projection shape (blocklet-structure.md §4.4 / §6.2).\n */\n\nimport {\n type AFSAccessMode,\n type AFSModule,\n ProjectionProvider,\n type SpaceResolver,\n} from \"@aigne/afs\";\nimport { joinURL } from \"ufo\";\nimport { isValidSessionId } from \"./session-id.js\";\n\n// `query` is read-class (collection view) — readonly spaces stay queryable.\nconst READ_ONLY_SPACE_OPS = new Set([\"list\", \"read\", \"query\", \"stat\", \"search\", \"explain\"]);\n\n/**\n * Build the per-user data backend: projects a single user's content root inside\n * the instance via `getInstanceSpace({ role: \"user\", userDid })`. Mounted by the\n * runtime at `/blocklets/<name>/users/<did>/` and surfaced in-session as `/user`.\n *\n * Takes a `SpaceResolver` (not a single space) so WHICH space backs the user is\n * decided per-call: `resolveUserSpace(userDid)` returns the caller's OWN space.\n * The user fragment inside it is the single `blocklets/<i>/user` subtree —\n * `userDid` is NOT passed to `getInstanceSpace` (the space already IS the\n * user's; addressing by userDid would be redundant, and it's @deprecated there).\n */\nexport function createUserDataBackend(\n resolver: SpaceResolver,\n): (instanceDid: string, userDid: string) => Promise<AFSModule> {\n return async (instanceDid, userDid) => {\n const space = await resolver.resolveUserSpace(userDid);\n const userAFS = await space.getInstanceSpace({ instanceDid, role: \"user\" });\n // /files-prefix-removal: getInstanceSpace content tree is the role root now.\n return new ProjectionProvider({ name: \"user-data\", globalAFS: userAFS, sourcePath: \"/\" });\n };\n}\n\n/**\n * Build the per-session scratch backend: pins to the system instance space's\n * `/sessions/<sid>/tmp` sub-corner. Rejects unsafe session ids (defense-in-depth\n * so the sub-path can never escape that corner). Session scratch is always\n * installer-side data, so it resolves via `resolveInstallerSpace()`.\n */\nexport function createSessionTmpBackend(\n resolver: SpaceResolver,\n): (instanceDid: string, sessionId: string) => Promise<AFSModule> {\n return async (instanceDid, sessionId) => {\n if (!isValidSessionId(sessionId)) {\n throw new Error(`sessionTmpBackend: invalid sessionId ${JSON.stringify(sessionId)}`);\n }\n const space = await resolver.resolveInstallerSpace();\n const systemAFS = await space.getInstanceSpace({ instanceDid, role: \"system\" });\n // /files-prefix-removal: content tree is the role root → sessions live at\n // `/sessions/<sid>/tmp` (was `/files/sessions/...`).\n return new ProjectionProvider({\n name: \"session-tmp\",\n globalAFS: systemAFS,\n sourcePath: joinURL(\"/sessions\", sessionId, \"tmp\"),\n });\n };\n}\n\n/**\n * Build the caller's whole DID Space root backend, surfaced in-session as\n * `/space` for `scope:user` blocklets.\n *\n * This is intentionally separate from `/user`: `/user` is the current blocklet's\n * per-user fragment (`blocklets/<i>/user`), while `/space` is the caller's whole\n * DID Space root. Default readonly keeps `scope:user` from becoming a blanket\n * write capability.\n */\nexport function createUserSpaceRootBackend(\n resolver: SpaceResolver,\n): (userDid: string, accessMode?: AFSAccessMode) => Promise<AFSModule> {\n return async (userDid, accessMode = \"readonly\") => {\n const space = await resolver.resolveUserSpace(userDid);\n if (typeof space.getSpaceRoot !== \"function\") {\n throw new Error(\"user DID Space backend does not expose getSpaceRoot()\");\n }\n const root = await space.getSpaceRoot({ accessMode });\n return new ProjectionProvider({\n name: \"user-space-root\",\n globalAFS: root,\n sourcePath: \"/\",\n allowedOps: accessMode === \"readonly\" ? READ_ONLY_SPACE_OPS : undefined,\n });\n };\n}\n"],"mappings":";;;;;;;;;;;;;;AAoBA,MAAM,sBAAsB,IAAI,IAAI;CAAC;CAAQ;CAAQ;CAAS;CAAQ;CAAU;CAAU,CAAC;;;;;;;;;;;;AAa3F,SAAgB,sBACd,UAC8D;AAC9D,QAAO,OAAO,aAAa,YAAY;AAIrC,SAAO,IAAI,mBAAmB;GAAE,MAAM;GAAa,WAFnC,OADF,MAAM,SAAS,iBAAiB,QAAQ,EAC1B,iBAAiB;IAAE;IAAa,MAAM;IAAQ,CAAC;GAEJ,YAAY;GAAK,CAAC;;;;;;;;;AAU7F,SAAgB,wBACd,UACgE;AAChE,QAAO,OAAO,aAAa,cAAc;AACvC,MAAI,CAAC,iBAAiB,UAAU,CAC9B,OAAM,IAAI,MAAM,wCAAwC,KAAK,UAAU,UAAU,GAAG;AAMtF,SAAO,IAAI,mBAAmB;GAC5B,MAAM;GACN,WALgB,OADJ,MAAM,SAAS,uBAAuB,EACtB,iBAAiB;IAAE;IAAa,MAAM;IAAU,CAAC;GAM7E,YAAY,QAAQ,aAAa,WAAW,MAAM;GACnD,CAAC;;;;;;;;;;;;AAaN,SAAgB,2BACd,UACqE;AACrE,QAAO,OAAO,SAAS,aAAa,eAAe;EACjD,MAAM,QAAQ,MAAM,SAAS,iBAAiB,QAAQ;AACtD,MAAI,OAAO,MAAM,iBAAiB,WAChC,OAAM,IAAI,MAAM,wDAAwD;AAG1E,SAAO,IAAI,mBAAmB;GAC5B,MAAM;GACN,WAHW,MAAM,MAAM,aAAa,EAAE,YAAY,CAAC;GAInD,YAAY;GACZ,YAAY,eAAe,aAAa,sBAAsB;GAC/D,CAAC"}
|