@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,218 @@
|
|
|
1
|
+
const require_utils = require('./utils.cjs');
|
|
2
|
+
let _aigne_afs_utils_env = require("@aigne/afs/utils/env");
|
|
3
|
+
let zod = require("zod");
|
|
4
|
+
|
|
5
|
+
//#region src/mcp/tools.ts
|
|
6
|
+
/**
|
|
7
|
+
* Batch-read cap for the MCP tool layer. Deliberately a notch BELOW the CF
|
|
8
|
+
* wire cap (BATCH_LIMITS_CF.maxReadEntries = 20) so a full tool-layer batch
|
|
9
|
+
* never collides with the remote wire budget when the AFS backend is itself
|
|
10
|
+
* remote, and so 16 files' content stays inside a sane tool-result size.
|
|
11
|
+
*/
|
|
12
|
+
const BATCH_READ_MAX_ENTRIES = 16;
|
|
13
|
+
function registerAfsTools(server, afs, context) {
|
|
14
|
+
server.tool("afs_read", `Read content at an AFS path. To read SEVERAL files, pass \`entries\` (max ${BATCH_READ_MAX_ENTRIES} per call) instead of calling this tool once per file — ONE batched call is always preferred. Batch results are per-entry: check each results[i].success, partial success is normal (a missing file fails alone).`, {
|
|
15
|
+
path: zod.z.string().optional(),
|
|
16
|
+
entries: zod.z.array(zod.z.object({ path: zod.z.string() })).max(BATCH_READ_MAX_ENTRIES).optional().describe(`Batch mode: array of {path} entries, up to ${BATCH_READ_MAX_ENTRIES} per call. When provided, \`path\`/\`startLine\`/\`endLine\` are ignored. Chunk larger sets into multiple calls.`),
|
|
17
|
+
startLine: zod.z.number().int().optional(),
|
|
18
|
+
endLine: zod.z.number().int().optional()
|
|
19
|
+
}, async ({ path, entries, startLine, endLine }) => {
|
|
20
|
+
try {
|
|
21
|
+
if (entries && entries.length > 0) {
|
|
22
|
+
if (entries.length > BATCH_READ_MAX_ENTRIES) return require_utils.errorResult(/* @__PURE__ */ new Error(`Too many entries (${entries.length} > ${BATCH_READ_MAX_ENTRIES}) — split into chunks of ${BATCH_READ_MAX_ENTRIES}`));
|
|
23
|
+
return require_utils.jsonResult(await require_utils.withTimeout(() => afs.batchRead(entries.map((e) => ({ path: require_utils.extractQueryParams(e.path).cleanPath })), { context }), require_utils.TOOL_TIMEOUT_MS * Math.min(entries.length, 10)));
|
|
24
|
+
}
|
|
25
|
+
if (!path) return require_utils.errorResult(/* @__PURE__ */ new Error("path is required (or pass `entries` for batch)"));
|
|
26
|
+
const { cleanPath, query } = require_utils.extractQueryParams(path);
|
|
27
|
+
const opts = {
|
|
28
|
+
startLine,
|
|
29
|
+
endLine
|
|
30
|
+
};
|
|
31
|
+
if (Object.keys(query).length > 0) Object.assign(opts, query);
|
|
32
|
+
const r = await require_utils.withTimeout(() => afs.read(cleanPath, {
|
|
33
|
+
...opts,
|
|
34
|
+
context
|
|
35
|
+
}));
|
|
36
|
+
if (!r.data && r.data !== "") return require_utils.errorResult(new Error(r.message || "Not found"));
|
|
37
|
+
return require_utils.jsonResult(r);
|
|
38
|
+
} catch (e) {
|
|
39
|
+
return require_utils.errorResult(e);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
server.tool("afs_list", "List directory contents at an AFS path", {
|
|
43
|
+
path: zod.z.string().describe("AFS path to list, e.g. / or /modules/memory"),
|
|
44
|
+
depth: zod.z.number().optional().describe("Recursion depth, default 1"),
|
|
45
|
+
pattern: zod.z.string().optional().describe("Filter pattern, e.g. *.md"),
|
|
46
|
+
limit: zod.z.number().optional().describe("Max entries to return")
|
|
47
|
+
}, async ({ path, depth, pattern, limit }) => {
|
|
48
|
+
try {
|
|
49
|
+
const { cleanPath, query } = require_utils.extractQueryParams(path);
|
|
50
|
+
const opts = {
|
|
51
|
+
maxDepth: depth ?? 1,
|
|
52
|
+
pattern,
|
|
53
|
+
limit
|
|
54
|
+
};
|
|
55
|
+
if (Object.keys(query).length > 0) Object.assign(opts, query);
|
|
56
|
+
return require_utils.jsonResult(await require_utils.withTimeout(() => afs.list(cleanPath, {
|
|
57
|
+
...opts,
|
|
58
|
+
context
|
|
59
|
+
})));
|
|
60
|
+
} catch (e) {
|
|
61
|
+
return require_utils.errorResult(e);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
server.tool("afs_write", "Write content to an AFS path. To write SEVERAL files, pass `entries` in ONE call (preferred whenever writing more than one file) — never loop single writes. Batch is NOT a transaction: results are per-entry, check each results[i], partial success is normal.", {
|
|
65
|
+
path: zod.z.string().optional(),
|
|
66
|
+
content: zod.z.union([zod.z.string(), zod.z.record(zod.z.string(), zod.z.unknown())]).optional(),
|
|
67
|
+
mode: zod.z.enum([
|
|
68
|
+
"replace",
|
|
69
|
+
"append",
|
|
70
|
+
"prepend",
|
|
71
|
+
"patch",
|
|
72
|
+
"create",
|
|
73
|
+
"update"
|
|
74
|
+
]).optional().describe("Write mode (default: replace). Can also ride the path as ?mode=... (explicit param wins)."),
|
|
75
|
+
patches: zod.z.array(zod.z.object({
|
|
76
|
+
op: zod.z.enum([
|
|
77
|
+
"str_replace",
|
|
78
|
+
"insert_before",
|
|
79
|
+
"insert_after",
|
|
80
|
+
"delete"
|
|
81
|
+
]),
|
|
82
|
+
target: zod.z.string(),
|
|
83
|
+
content: zod.z.string().optional().default("")
|
|
84
|
+
})).optional(),
|
|
85
|
+
ifMatch: zod.z.string().optional().describe("Optimistic-concurrency token from a previous stat/read meta.version. Mismatch fails with AFS_CONFLICT. Can also ride the path as ?ifMatch=... (explicit param wins)."),
|
|
86
|
+
entries: zod.z.array(zod.z.object({
|
|
87
|
+
path: zod.z.string(),
|
|
88
|
+
content: zod.z.union([zod.z.string(), zod.z.record(zod.z.string(), zod.z.unknown())]).optional(),
|
|
89
|
+
mode: zod.z.enum([
|
|
90
|
+
"replace",
|
|
91
|
+
"append",
|
|
92
|
+
"prepend",
|
|
93
|
+
"patch",
|
|
94
|
+
"create",
|
|
95
|
+
"update"
|
|
96
|
+
]).optional(),
|
|
97
|
+
patches: zod.z.array(zod.z.object({
|
|
98
|
+
op: zod.z.enum([
|
|
99
|
+
"str_replace",
|
|
100
|
+
"insert_before",
|
|
101
|
+
"insert_after",
|
|
102
|
+
"delete"
|
|
103
|
+
]),
|
|
104
|
+
target: zod.z.string(),
|
|
105
|
+
content: zod.z.string().optional().default("")
|
|
106
|
+
})).optional()
|
|
107
|
+
})).optional()
|
|
108
|
+
}, async ({ path, content, mode, patches, ifMatch, entries }) => {
|
|
109
|
+
try {
|
|
110
|
+
if (entries && entries.length > 0) {
|
|
111
|
+
const batch = entries.map((e) => ({
|
|
112
|
+
path: e.path,
|
|
113
|
+
content: e.content !== void 0 ? { content: e.content } : void 0,
|
|
114
|
+
mode: e.mode,
|
|
115
|
+
patches: e.patches
|
|
116
|
+
}));
|
|
117
|
+
return require_utils.jsonResult(await require_utils.withTimeout(() => afs.batchWrite(batch, { context }), require_utils.TOOL_TIMEOUT_MS * Math.min(entries.length, 10)));
|
|
118
|
+
}
|
|
119
|
+
if (!path) return require_utils.errorResult(/* @__PURE__ */ new Error("path is required"));
|
|
120
|
+
const { cleanPath, query } = require_utils.extractQueryParams(path);
|
|
121
|
+
const payload = {};
|
|
122
|
+
if (content !== void 0) payload.content = content;
|
|
123
|
+
if (patches) payload.patches = patches;
|
|
124
|
+
const { mode: queryMode, ...restQuery } = query;
|
|
125
|
+
const writeOptions = {};
|
|
126
|
+
if (Object.keys(restQuery).length > 0) Object.assign(writeOptions, restQuery);
|
|
127
|
+
const effectiveMode = mode ?? queryMode;
|
|
128
|
+
if (effectiveMode !== void 0) writeOptions.mode = effectiveMode;
|
|
129
|
+
if (ifMatch !== void 0) writeOptions.ifMatch = ifMatch;
|
|
130
|
+
return require_utils.jsonResult(await require_utils.withTimeout(() => afs.write(cleanPath, payload, {
|
|
131
|
+
...writeOptions,
|
|
132
|
+
context
|
|
133
|
+
})));
|
|
134
|
+
} catch (e) {
|
|
135
|
+
return require_utils.errorResult(e);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
server.tool("afs_delete", "Delete files at AFS paths. To delete SEVERAL paths, pass `entries` in ONE call (preferred whenever deleting more than one) — never loop single deletes. Batch is NOT a transaction: results are per-entry, check each results[i], partial success is normal.", {
|
|
139
|
+
path: zod.z.string().optional(),
|
|
140
|
+
recursive: zod.z.boolean().optional(),
|
|
141
|
+
ifMatch: zod.z.string().optional().describe("Optimistic-concurrency token from a previous stat/read meta.version. Mismatch fails with AFS_CONFLICT. Can also ride the path as ?ifMatch=... (explicit param wins)."),
|
|
142
|
+
entries: zod.z.array(zod.z.object({
|
|
143
|
+
path: zod.z.string(),
|
|
144
|
+
recursive: zod.z.boolean().optional()
|
|
145
|
+
})).optional()
|
|
146
|
+
}, async ({ path, recursive, ifMatch, entries }) => {
|
|
147
|
+
try {
|
|
148
|
+
if (entries && entries.length > 0) return require_utils.jsonResult(await require_utils.withTimeout(() => afs.batchDelete(entries.map((e) => ({
|
|
149
|
+
path: e.path,
|
|
150
|
+
recursive: e.recursive
|
|
151
|
+
})), { context }), require_utils.TOOL_TIMEOUT_MS * Math.min(entries.length, 10)));
|
|
152
|
+
if (!path) return require_utils.errorResult(/* @__PURE__ */ new Error("path is required"));
|
|
153
|
+
const { cleanPath, query } = require_utils.extractQueryParams(path);
|
|
154
|
+
const { ifMatch: queryIfMatch, recursive: queryRecursive, ...restQuery } = query;
|
|
155
|
+
const deleteOptions = {};
|
|
156
|
+
if (Object.keys(restQuery).length > 0) Object.assign(deleteOptions, restQuery);
|
|
157
|
+
const effectiveRecursive = recursive ?? (queryRecursive !== void 0 ? (0, _aigne_afs_utils_env.parseBool)(queryRecursive, false) : void 0);
|
|
158
|
+
if (effectiveRecursive !== void 0) deleteOptions.recursive = effectiveRecursive;
|
|
159
|
+
const effectiveIfMatch = ifMatch ?? queryIfMatch;
|
|
160
|
+
if (effectiveIfMatch !== void 0) deleteOptions.meta = {
|
|
161
|
+
...deleteOptions.meta,
|
|
162
|
+
ifMatch: effectiveIfMatch
|
|
163
|
+
};
|
|
164
|
+
return require_utils.jsonResult(await require_utils.withTimeout(() => afs.delete(cleanPath, {
|
|
165
|
+
...deleteOptions,
|
|
166
|
+
context
|
|
167
|
+
})));
|
|
168
|
+
} catch (e) {
|
|
169
|
+
return require_utils.errorResult(e);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
server.tool("afs_search", "Search for content within an AFS path", {
|
|
173
|
+
path: zod.z.string(),
|
|
174
|
+
query: zod.z.string(),
|
|
175
|
+
pattern: zod.z.string().optional(),
|
|
176
|
+
limit: zod.z.number().optional(),
|
|
177
|
+
explain: zod.z.boolean().optional()
|
|
178
|
+
}, async ({ path, query, limit, explain }) => {
|
|
179
|
+
try {
|
|
180
|
+
return require_utils.jsonResult(await require_utils.withTimeout(() => afs.search(path, query, {
|
|
181
|
+
limit,
|
|
182
|
+
explain,
|
|
183
|
+
context
|
|
184
|
+
})));
|
|
185
|
+
} catch (e) {
|
|
186
|
+
return require_utils.errorResult(e);
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
server.tool("afs_exec", "Execute an action. Use afs_list on {path}/.actions to discover available actions and their inputSchema.", {
|
|
190
|
+
path: zod.z.string().describe("Action path, e.g. /.actions/mount or /sites/my-site/.actions/build"),
|
|
191
|
+
args: zod.z.record(zod.z.string(), zod.z.unknown()).optional().describe("Action arguments matching the action's inputSchema")
|
|
192
|
+
}, async ({ path, args }) => {
|
|
193
|
+
try {
|
|
194
|
+
return require_utils.jsonResult(await require_utils.withTimeout(() => afs.exec(path, args ?? {}, { context }), require_utils.EXEC_TIMEOUT_MS));
|
|
195
|
+
} catch (e) {
|
|
196
|
+
return require_utils.errorResult(e);
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
server.tool("afs_stat", "Get metadata for an AFS path", { path: zod.z.string() }, async ({ path }) => {
|
|
200
|
+
try {
|
|
201
|
+
const r = await require_utils.withTimeout(() => afs.stat(path, { context }));
|
|
202
|
+
if (!r.data) return require_utils.errorResult(new Error(r.message || "Not found"));
|
|
203
|
+
return require_utils.jsonResult(r);
|
|
204
|
+
} catch (e) {
|
|
205
|
+
return require_utils.errorResult(e);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
server.tool("afs_explain", "Get explanation for an AFS path", { path: zod.z.string() }, async ({ path }) => {
|
|
209
|
+
try {
|
|
210
|
+
return require_utils.textResult((await require_utils.withTimeout(() => afs.explain(path, { context }))).content);
|
|
211
|
+
} catch (e) {
|
|
212
|
+
return require_utils.errorResult(e);
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
//#endregion
|
|
218
|
+
exports.registerAfsTools = registerAfsTools;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AFS, AFSContext } from "@aigne/afs";
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
|
|
4
|
+
//#region src/mcp/tools.d.ts
|
|
5
|
+
declare function registerAfsTools(server: McpServer, afs: AFS, context?: AFSContext): void;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { registerAfsTools };
|
|
8
|
+
//# sourceMappingURL=tools.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.cts","names":[],"sources":["../../src/mcp/tools.ts"],"mappings":";;;;iBAsBgB,gBAAA,CAAiB,MAAA,EAAQ,SAAA,EAAW,GAAA,EAAK,GAAA,EAAK,OAAA,GAAU,UAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AFS, AFSContext } from "@aigne/afs";
|
|
2
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
|
|
4
|
+
//#region src/mcp/tools.d.ts
|
|
5
|
+
declare function registerAfsTools(server: McpServer, afs: AFS, context?: AFSContext): void;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { registerAfsTools };
|
|
8
|
+
//# sourceMappingURL=tools.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.mts","names":[],"sources":["../../src/mcp/tools.ts"],"mappings":";;;;iBAsBgB,gBAAA,CAAiB,MAAA,EAAQ,SAAA,EAAW,GAAA,EAAK,GAAA,EAAK,OAAA,GAAU,UAAA"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { EXEC_TIMEOUT_MS, TOOL_TIMEOUT_MS, errorResult, extractQueryParams, jsonResult, textResult, withTimeout } from "./utils.mjs";
|
|
2
|
+
import { parseBool } from "@aigne/afs/utils/env";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
|
|
5
|
+
//#region src/mcp/tools.ts
|
|
6
|
+
/**
|
|
7
|
+
* Batch-read cap for the MCP tool layer. Deliberately a notch BELOW the CF
|
|
8
|
+
* wire cap (BATCH_LIMITS_CF.maxReadEntries = 20) so a full tool-layer batch
|
|
9
|
+
* never collides with the remote wire budget when the AFS backend is itself
|
|
10
|
+
* remote, and so 16 files' content stays inside a sane tool-result size.
|
|
11
|
+
*/
|
|
12
|
+
const BATCH_READ_MAX_ENTRIES = 16;
|
|
13
|
+
function registerAfsTools(server, afs, context) {
|
|
14
|
+
server.tool("afs_read", `Read content at an AFS path. To read SEVERAL files, pass \`entries\` (max ${BATCH_READ_MAX_ENTRIES} per call) instead of calling this tool once per file — ONE batched call is always preferred. Batch results are per-entry: check each results[i].success, partial success is normal (a missing file fails alone).`, {
|
|
15
|
+
path: z.string().optional(),
|
|
16
|
+
entries: z.array(z.object({ path: z.string() })).max(BATCH_READ_MAX_ENTRIES).optional().describe(`Batch mode: array of {path} entries, up to ${BATCH_READ_MAX_ENTRIES} per call. When provided, \`path\`/\`startLine\`/\`endLine\` are ignored. Chunk larger sets into multiple calls.`),
|
|
17
|
+
startLine: z.number().int().optional(),
|
|
18
|
+
endLine: z.number().int().optional()
|
|
19
|
+
}, async ({ path, entries, startLine, endLine }) => {
|
|
20
|
+
try {
|
|
21
|
+
if (entries && entries.length > 0) {
|
|
22
|
+
if (entries.length > BATCH_READ_MAX_ENTRIES) return errorResult(/* @__PURE__ */ new Error(`Too many entries (${entries.length} > ${BATCH_READ_MAX_ENTRIES}) — split into chunks of ${BATCH_READ_MAX_ENTRIES}`));
|
|
23
|
+
return jsonResult(await withTimeout(() => afs.batchRead(entries.map((e) => ({ path: extractQueryParams(e.path).cleanPath })), { context }), TOOL_TIMEOUT_MS * Math.min(entries.length, 10)));
|
|
24
|
+
}
|
|
25
|
+
if (!path) return errorResult(/* @__PURE__ */ new Error("path is required (or pass `entries` for batch)"));
|
|
26
|
+
const { cleanPath, query } = extractQueryParams(path);
|
|
27
|
+
const opts = {
|
|
28
|
+
startLine,
|
|
29
|
+
endLine
|
|
30
|
+
};
|
|
31
|
+
if (Object.keys(query).length > 0) Object.assign(opts, query);
|
|
32
|
+
const r = await withTimeout(() => afs.read(cleanPath, {
|
|
33
|
+
...opts,
|
|
34
|
+
context
|
|
35
|
+
}));
|
|
36
|
+
if (!r.data && r.data !== "") return errorResult(new Error(r.message || "Not found"));
|
|
37
|
+
return jsonResult(r);
|
|
38
|
+
} catch (e) {
|
|
39
|
+
return errorResult(e);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
server.tool("afs_list", "List directory contents at an AFS path", {
|
|
43
|
+
path: z.string().describe("AFS path to list, e.g. / or /modules/memory"),
|
|
44
|
+
depth: z.number().optional().describe("Recursion depth, default 1"),
|
|
45
|
+
pattern: z.string().optional().describe("Filter pattern, e.g. *.md"),
|
|
46
|
+
limit: z.number().optional().describe("Max entries to return")
|
|
47
|
+
}, async ({ path, depth, pattern, limit }) => {
|
|
48
|
+
try {
|
|
49
|
+
const { cleanPath, query } = extractQueryParams(path);
|
|
50
|
+
const opts = {
|
|
51
|
+
maxDepth: depth ?? 1,
|
|
52
|
+
pattern,
|
|
53
|
+
limit
|
|
54
|
+
};
|
|
55
|
+
if (Object.keys(query).length > 0) Object.assign(opts, query);
|
|
56
|
+
return jsonResult(await withTimeout(() => afs.list(cleanPath, {
|
|
57
|
+
...opts,
|
|
58
|
+
context
|
|
59
|
+
})));
|
|
60
|
+
} catch (e) {
|
|
61
|
+
return errorResult(e);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
server.tool("afs_write", "Write content to an AFS path. To write SEVERAL files, pass `entries` in ONE call (preferred whenever writing more than one file) — never loop single writes. Batch is NOT a transaction: results are per-entry, check each results[i], partial success is normal.", {
|
|
65
|
+
path: z.string().optional(),
|
|
66
|
+
content: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),
|
|
67
|
+
mode: z.enum([
|
|
68
|
+
"replace",
|
|
69
|
+
"append",
|
|
70
|
+
"prepend",
|
|
71
|
+
"patch",
|
|
72
|
+
"create",
|
|
73
|
+
"update"
|
|
74
|
+
]).optional().describe("Write mode (default: replace). Can also ride the path as ?mode=... (explicit param wins)."),
|
|
75
|
+
patches: z.array(z.object({
|
|
76
|
+
op: z.enum([
|
|
77
|
+
"str_replace",
|
|
78
|
+
"insert_before",
|
|
79
|
+
"insert_after",
|
|
80
|
+
"delete"
|
|
81
|
+
]),
|
|
82
|
+
target: z.string(),
|
|
83
|
+
content: z.string().optional().default("")
|
|
84
|
+
})).optional(),
|
|
85
|
+
ifMatch: z.string().optional().describe("Optimistic-concurrency token from a previous stat/read meta.version. Mismatch fails with AFS_CONFLICT. Can also ride the path as ?ifMatch=... (explicit param wins)."),
|
|
86
|
+
entries: z.array(z.object({
|
|
87
|
+
path: z.string(),
|
|
88
|
+
content: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),
|
|
89
|
+
mode: z.enum([
|
|
90
|
+
"replace",
|
|
91
|
+
"append",
|
|
92
|
+
"prepend",
|
|
93
|
+
"patch",
|
|
94
|
+
"create",
|
|
95
|
+
"update"
|
|
96
|
+
]).optional(),
|
|
97
|
+
patches: z.array(z.object({
|
|
98
|
+
op: z.enum([
|
|
99
|
+
"str_replace",
|
|
100
|
+
"insert_before",
|
|
101
|
+
"insert_after",
|
|
102
|
+
"delete"
|
|
103
|
+
]),
|
|
104
|
+
target: z.string(),
|
|
105
|
+
content: z.string().optional().default("")
|
|
106
|
+
})).optional()
|
|
107
|
+
})).optional()
|
|
108
|
+
}, async ({ path, content, mode, patches, ifMatch, entries }) => {
|
|
109
|
+
try {
|
|
110
|
+
if (entries && entries.length > 0) {
|
|
111
|
+
const batch = entries.map((e) => ({
|
|
112
|
+
path: e.path,
|
|
113
|
+
content: e.content !== void 0 ? { content: e.content } : void 0,
|
|
114
|
+
mode: e.mode,
|
|
115
|
+
patches: e.patches
|
|
116
|
+
}));
|
|
117
|
+
return jsonResult(await withTimeout(() => afs.batchWrite(batch, { context }), TOOL_TIMEOUT_MS * Math.min(entries.length, 10)));
|
|
118
|
+
}
|
|
119
|
+
if (!path) return errorResult(/* @__PURE__ */ new Error("path is required"));
|
|
120
|
+
const { cleanPath, query } = extractQueryParams(path);
|
|
121
|
+
const payload = {};
|
|
122
|
+
if (content !== void 0) payload.content = content;
|
|
123
|
+
if (patches) payload.patches = patches;
|
|
124
|
+
const { mode: queryMode, ...restQuery } = query;
|
|
125
|
+
const writeOptions = {};
|
|
126
|
+
if (Object.keys(restQuery).length > 0) Object.assign(writeOptions, restQuery);
|
|
127
|
+
const effectiveMode = mode ?? queryMode;
|
|
128
|
+
if (effectiveMode !== void 0) writeOptions.mode = effectiveMode;
|
|
129
|
+
if (ifMatch !== void 0) writeOptions.ifMatch = ifMatch;
|
|
130
|
+
return jsonResult(await withTimeout(() => afs.write(cleanPath, payload, {
|
|
131
|
+
...writeOptions,
|
|
132
|
+
context
|
|
133
|
+
})));
|
|
134
|
+
} catch (e) {
|
|
135
|
+
return errorResult(e);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
server.tool("afs_delete", "Delete files at AFS paths. To delete SEVERAL paths, pass `entries` in ONE call (preferred whenever deleting more than one) — never loop single deletes. Batch is NOT a transaction: results are per-entry, check each results[i], partial success is normal.", {
|
|
139
|
+
path: z.string().optional(),
|
|
140
|
+
recursive: z.boolean().optional(),
|
|
141
|
+
ifMatch: z.string().optional().describe("Optimistic-concurrency token from a previous stat/read meta.version. Mismatch fails with AFS_CONFLICT. Can also ride the path as ?ifMatch=... (explicit param wins)."),
|
|
142
|
+
entries: z.array(z.object({
|
|
143
|
+
path: z.string(),
|
|
144
|
+
recursive: z.boolean().optional()
|
|
145
|
+
})).optional()
|
|
146
|
+
}, async ({ path, recursive, ifMatch, entries }) => {
|
|
147
|
+
try {
|
|
148
|
+
if (entries && entries.length > 0) return jsonResult(await withTimeout(() => afs.batchDelete(entries.map((e) => ({
|
|
149
|
+
path: e.path,
|
|
150
|
+
recursive: e.recursive
|
|
151
|
+
})), { context }), TOOL_TIMEOUT_MS * Math.min(entries.length, 10)));
|
|
152
|
+
if (!path) return errorResult(/* @__PURE__ */ new Error("path is required"));
|
|
153
|
+
const { cleanPath, query } = extractQueryParams(path);
|
|
154
|
+
const { ifMatch: queryIfMatch, recursive: queryRecursive, ...restQuery } = query;
|
|
155
|
+
const deleteOptions = {};
|
|
156
|
+
if (Object.keys(restQuery).length > 0) Object.assign(deleteOptions, restQuery);
|
|
157
|
+
const effectiveRecursive = recursive ?? (queryRecursive !== void 0 ? parseBool(queryRecursive, false) : void 0);
|
|
158
|
+
if (effectiveRecursive !== void 0) deleteOptions.recursive = effectiveRecursive;
|
|
159
|
+
const effectiveIfMatch = ifMatch ?? queryIfMatch;
|
|
160
|
+
if (effectiveIfMatch !== void 0) deleteOptions.meta = {
|
|
161
|
+
...deleteOptions.meta,
|
|
162
|
+
ifMatch: effectiveIfMatch
|
|
163
|
+
};
|
|
164
|
+
return jsonResult(await withTimeout(() => afs.delete(cleanPath, {
|
|
165
|
+
...deleteOptions,
|
|
166
|
+
context
|
|
167
|
+
})));
|
|
168
|
+
} catch (e) {
|
|
169
|
+
return errorResult(e);
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
server.tool("afs_search", "Search for content within an AFS path", {
|
|
173
|
+
path: z.string(),
|
|
174
|
+
query: z.string(),
|
|
175
|
+
pattern: z.string().optional(),
|
|
176
|
+
limit: z.number().optional(),
|
|
177
|
+
explain: z.boolean().optional()
|
|
178
|
+
}, async ({ path, query, limit, explain }) => {
|
|
179
|
+
try {
|
|
180
|
+
return jsonResult(await withTimeout(() => afs.search(path, query, {
|
|
181
|
+
limit,
|
|
182
|
+
explain,
|
|
183
|
+
context
|
|
184
|
+
})));
|
|
185
|
+
} catch (e) {
|
|
186
|
+
return errorResult(e);
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
server.tool("afs_exec", "Execute an action. Use afs_list on {path}/.actions to discover available actions and their inputSchema.", {
|
|
190
|
+
path: z.string().describe("Action path, e.g. /.actions/mount or /sites/my-site/.actions/build"),
|
|
191
|
+
args: z.record(z.string(), z.unknown()).optional().describe("Action arguments matching the action's inputSchema")
|
|
192
|
+
}, async ({ path, args }) => {
|
|
193
|
+
try {
|
|
194
|
+
return jsonResult(await withTimeout(() => afs.exec(path, args ?? {}, { context }), EXEC_TIMEOUT_MS));
|
|
195
|
+
} catch (e) {
|
|
196
|
+
return errorResult(e);
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
server.tool("afs_stat", "Get metadata for an AFS path", { path: z.string() }, async ({ path }) => {
|
|
200
|
+
try {
|
|
201
|
+
const r = await withTimeout(() => afs.stat(path, { context }));
|
|
202
|
+
if (!r.data) return errorResult(new Error(r.message || "Not found"));
|
|
203
|
+
return jsonResult(r);
|
|
204
|
+
} catch (e) {
|
|
205
|
+
return errorResult(e);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
server.tool("afs_explain", "Get explanation for an AFS path", { path: z.string() }, async ({ path }) => {
|
|
209
|
+
try {
|
|
210
|
+
return textResult((await withTimeout(() => afs.explain(path, { context }))).content);
|
|
211
|
+
} catch (e) {
|
|
212
|
+
return errorResult(e);
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
//#endregion
|
|
218
|
+
export { registerAfsTools };
|
|
219
|
+
//# sourceMappingURL=tools.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.mjs","names":[],"sources":["../../src/mcp/tools.ts"],"sourcesContent":["import type { AFS, AFSContext } from \"@aigne/afs\";\nimport { parseBool } from \"@aigne/afs/utils/env\";\nimport type { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { z } from \"zod\";\nimport {\n EXEC_TIMEOUT_MS,\n errorResult,\n extractQueryParams,\n jsonResult,\n TOOL_TIMEOUT_MS,\n textResult,\n withTimeout,\n} from \"./utils.js\";\n\n/**\n * Batch-read cap for the MCP tool layer. Deliberately a notch BELOW the CF\n * wire cap (BATCH_LIMITS_CF.maxReadEntries = 20) so a full tool-layer batch\n * never collides with the remote wire budget when the AFS backend is itself\n * remote, and so 16 files' content stays inside a sane tool-result size.\n */\nconst BATCH_READ_MAX_ENTRIES = 16;\n\nexport function registerAfsTools(server: McpServer, afs: AFS, context?: AFSContext): void {\n server.tool(\n \"afs_read\",\n \"Read content at an AFS path. To read SEVERAL files, pass `entries` (max \" +\n `${BATCH_READ_MAX_ENTRIES} per call) instead of calling this tool once per file — ` +\n \"ONE batched call is always preferred. Batch results are per-entry: check each \" +\n \"results[i].success, partial success is normal (a missing file fails alone).\",\n {\n path: z.string().optional(),\n entries: z\n .array(z.object({ path: z.string() }))\n .max(BATCH_READ_MAX_ENTRIES)\n .optional()\n .describe(\n `Batch mode: array of {path} entries, up to ${BATCH_READ_MAX_ENTRIES} per call. ` +\n \"When provided, `path`/`startLine`/`endLine` are ignored. \" +\n \"Chunk larger sets into multiple calls.\",\n ),\n startLine: z.number().int().optional(),\n endLine: z.number().int().optional(),\n },\n async ({ path, entries, startLine, endLine }) => {\n try {\n if (entries && entries.length > 0) {\n if (entries.length > BATCH_READ_MAX_ENTRIES) {\n return errorResult(\n new Error(\n `Too many entries (${entries.length} > ${BATCH_READ_MAX_ENTRIES}) — split into chunks of ${BATCH_READ_MAX_ENTRIES}`,\n ),\n );\n }\n const r = await withTimeout(\n () =>\n afs.batchRead(\n entries.map((e) => ({ path: extractQueryParams(e.path).cleanPath })),\n { context },\n ),\n TOOL_TIMEOUT_MS * Math.min(entries.length, 10),\n );\n return jsonResult(r);\n }\n if (!path) return errorResult(new Error(\"path is required (or pass `entries` for batch)\"));\n const { cleanPath, query } = extractQueryParams(path);\n const opts: Record<string, unknown> = { startLine, endLine };\n if (Object.keys(query).length > 0) Object.assign(opts, query);\n const r = await withTimeout(() => afs.read(cleanPath, { ...opts, context }));\n if (!r.data && r.data !== \"\") return errorResult(new Error(r.message || \"Not found\"));\n return jsonResult(r);\n } catch (e) {\n return errorResult(e);\n }\n },\n );\n server.tool(\n \"afs_list\",\n \"List directory contents at an AFS path\",\n {\n path: z.string().describe(\"AFS path to list, e.g. / or /modules/memory\"),\n depth: z.number().optional().describe(\"Recursion depth, default 1\"),\n pattern: z.string().optional().describe(\"Filter pattern, e.g. *.md\"),\n limit: z.number().optional().describe(\"Max entries to return\"),\n },\n async ({ path, depth, pattern, limit }) => {\n try {\n const { cleanPath, query } = extractQueryParams(path);\n const opts: Record<string, unknown> = { maxDepth: depth ?? 1, pattern, limit };\n if (Object.keys(query).length > 0) Object.assign(opts, query);\n return jsonResult(await withTimeout(() => afs.list(cleanPath, { ...opts, context })));\n } catch (e) {\n return errorResult(e);\n }\n },\n );\n server.tool(\n \"afs_write\",\n \"Write content to an AFS path. To write SEVERAL files, pass `entries` in ONE call \" +\n \"(preferred whenever writing more than one file) — never loop single writes. \" +\n \"Batch is NOT a transaction: results are per-entry, check each results[i], \" +\n \"partial success is normal.\",\n {\n path: z.string().optional(),\n content: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),\n mode: z\n .enum([\"replace\", \"append\", \"prepend\", \"patch\", \"create\", \"update\"])\n .optional()\n .describe(\n \"Write mode (default: replace). Can also ride the path as ?mode=... (explicit param wins).\",\n ),\n patches: z\n .array(\n z.object({\n op: z.enum([\"str_replace\", \"insert_before\", \"insert_after\", \"delete\"]),\n target: z.string(),\n content: z.string().optional().default(\"\"),\n }),\n )\n .optional(),\n ifMatch: z\n .string()\n .optional()\n .describe(\n \"Optimistic-concurrency token from a previous stat/read meta.version. Mismatch fails with AFS_CONFLICT. Can also ride the path as ?ifMatch=... (explicit param wins).\",\n ),\n entries: z\n .array(\n z.object({\n path: z.string(),\n content: z.union([z.string(), z.record(z.string(), z.unknown())]).optional(),\n mode: z.enum([\"replace\", \"append\", \"prepend\", \"patch\", \"create\", \"update\"]).optional(),\n patches: z\n .array(\n z.object({\n op: z.enum([\"str_replace\", \"insert_before\", \"insert_after\", \"delete\"]),\n target: z.string(),\n content: z.string().optional().default(\"\"),\n }),\n )\n .optional(),\n }),\n )\n .optional(),\n },\n async ({ path, content, mode, patches, ifMatch, entries }) => {\n try {\n if (entries && entries.length > 0) {\n const batch = entries.map((e) => ({\n path: e.path,\n content: e.content !== undefined ? { content: e.content } : undefined,\n mode: e.mode as any,\n patches: e.patches,\n }));\n return jsonResult(\n await withTimeout(\n () => afs.batchWrite(batch, { context }),\n TOOL_TIMEOUT_MS * Math.min(entries.length, 10),\n ),\n );\n }\n if (!path) return errorResult(new Error(\"path is required\"));\n // Query-param channel (same shape as afs_read/afs_list): ?session=…,\n // ?ifMatch=…, ?mode=… ride the path and merge into write options. The\n // explicit tool params win over their query counterparts. Mirrors\n // runtimes/node/src/mcp/tools.ts — the daemon serves THIS registration\n // on /mcp, so the optimistic-concurrency channel must exist here too.\n const { cleanPath, query } = extractQueryParams(path);\n const payload: Record<string, unknown> = {};\n if (content !== undefined) payload.content = content;\n if (patches) payload.patches = patches;\n const { mode: queryMode, ...restQuery } = query;\n const writeOptions: Record<string, unknown> = {};\n if (Object.keys(restQuery).length > 0) Object.assign(writeOptions, restQuery);\n const effectiveMode = mode ?? queryMode;\n if (effectiveMode !== undefined) writeOptions.mode = effectiveMode;\n if (ifMatch !== undefined) writeOptions.ifMatch = ifMatch;\n return jsonResult(\n await withTimeout(() => afs.write(cleanPath, payload, { ...writeOptions, context })),\n );\n } catch (e) {\n return errorResult(e);\n }\n },\n );\n server.tool(\n \"afs_delete\",\n \"Delete files at AFS paths. To delete SEVERAL paths, pass `entries` in ONE call \" +\n \"(preferred whenever deleting more than one) — never loop single deletes. \" +\n \"Batch is NOT a transaction: results are per-entry, check each results[i], \" +\n \"partial success is normal.\",\n {\n path: z.string().optional(),\n recursive: z.boolean().optional(),\n ifMatch: z\n .string()\n .optional()\n .describe(\n \"Optimistic-concurrency token from a previous stat/read meta.version. Mismatch fails with AFS_CONFLICT. Can also ride the path as ?ifMatch=... (explicit param wins).\",\n ),\n entries: z\n .array(z.object({ path: z.string(), recursive: z.boolean().optional() }))\n .optional(),\n },\n async ({ path, recursive, ifMatch, entries }) => {\n try {\n if (entries && entries.length > 0) {\n return jsonResult(\n await withTimeout(\n () =>\n afs.batchDelete(\n entries.map((e) => ({ path: e.path, recursive: e.recursive })),\n { context },\n ),\n TOOL_TIMEOUT_MS * Math.min(entries.length, 10),\n ),\n );\n }\n if (!path) return errorResult(new Error(\"path is required\"));\n // Query-param channel (same shape as afs_read/afs_list). Delete-side\n // ifMatch travels in options.meta.ifMatch (AFSDeleteOptions contract);\n // explicit tool params (ifMatch, recursive) win over query values.\n const { cleanPath, query } = extractQueryParams(path);\n const { ifMatch: queryIfMatch, recursive: queryRecursive, ...restQuery } = query;\n const deleteOptions: Record<string, unknown> = {};\n if (Object.keys(restQuery).length > 0) Object.assign(deleteOptions, restQuery);\n // Query-string \"?recursive=…\" coerces with parseBool semantics; an\n // unrecognized token falls back to FALSE — delete is destructive, a\n // typo must never turn into a recursive delete.\n const effectiveRecursive =\n recursive ??\n (queryRecursive !== undefined ? parseBool(queryRecursive, false) : undefined);\n if (effectiveRecursive !== undefined) deleteOptions.recursive = effectiveRecursive;\n const effectiveIfMatch = ifMatch ?? queryIfMatch;\n if (effectiveIfMatch !== undefined) {\n deleteOptions.meta = {\n ...(deleteOptions.meta as Record<string, unknown> | undefined),\n ifMatch: effectiveIfMatch,\n };\n }\n return jsonResult(\n await withTimeout(() => afs.delete(cleanPath, { ...deleteOptions, context })),\n );\n } catch (e) {\n return errorResult(e);\n }\n },\n );\n server.tool(\n \"afs_search\",\n \"Search for content within an AFS path\",\n {\n path: z.string(),\n query: z.string(),\n pattern: z.string().optional(),\n limit: z.number().optional(),\n // Per-result \"why did this match\" debug info (issue #1069). When true, a\n // semantic-index-backed search (`/user/**`) attaches `explanation` (+\n // matched `anchors` for anchor hits) on each result's `meta`.\n explain: z.boolean().optional(),\n },\n async ({ path, query, limit, explain }) => {\n try {\n return jsonResult(\n await withTimeout(() => afs.search(path, query, { limit, explain, context })),\n );\n } catch (e) {\n return errorResult(e);\n }\n },\n );\n server.tool(\n \"afs_exec\",\n \"Execute an action. Use afs_list on {path}/.actions to discover available actions and their inputSchema.\",\n {\n path: z\n .string()\n .describe(\"Action path, e.g. /.actions/mount or /sites/my-site/.actions/build\"),\n args: z\n .record(z.string(), z.unknown())\n .optional()\n .describe(\"Action arguments matching the action's inputSchema\"),\n },\n async ({ path, args }) => {\n try {\n return jsonResult(\n await withTimeout(() => afs.exec(path, args ?? {}, { context }), EXEC_TIMEOUT_MS),\n );\n } catch (e) {\n return errorResult(e);\n }\n },\n );\n server.tool(\n \"afs_stat\",\n \"Get metadata for an AFS path\",\n { path: z.string() },\n async ({ path }) => {\n try {\n const r = await withTimeout(() => afs.stat(path, { context }));\n if (!r.data) return errorResult(new Error(r.message || \"Not found\"));\n return jsonResult(r);\n } catch (e) {\n return errorResult(e);\n }\n },\n );\n server.tool(\n \"afs_explain\",\n \"Get explanation for an AFS path\",\n { path: z.string() },\n async ({ path }) => {\n try {\n return textResult((await withTimeout(() => afs.explain(path, { context }))).content);\n } catch (e) {\n return errorResult(e);\n }\n },\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/mcp/utils.ts
|
|
3
|
+
const TOOL_TIMEOUT_MS = 3e4;
|
|
4
|
+
const EXEC_TIMEOUT_MS = 3e5;
|
|
5
|
+
function withTimeout(fn, timeoutMs = TOOL_TIMEOUT_MS) {
|
|
6
|
+
return new Promise((resolve, reject) => {
|
|
7
|
+
const timer = setTimeout(() => reject(/* @__PURE__ */ new Error(`Operation timed out after ${timeoutMs / 1e3}s`)), timeoutMs);
|
|
8
|
+
fn().then((r) => {
|
|
9
|
+
clearTimeout(timer);
|
|
10
|
+
resolve(r);
|
|
11
|
+
}, (e) => {
|
|
12
|
+
clearTimeout(timer);
|
|
13
|
+
reject(e);
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
function errorResult(error) {
|
|
18
|
+
return {
|
|
19
|
+
isError: true,
|
|
20
|
+
content: [{
|
|
21
|
+
type: "text",
|
|
22
|
+
text: (error instanceof Error ? error.message : String(error)).split("\n")[0] || "Operation failed"
|
|
23
|
+
}]
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function jsonResult(data) {
|
|
27
|
+
return { content: [{
|
|
28
|
+
type: "text",
|
|
29
|
+
text: JSON.stringify(data, null, 2)
|
|
30
|
+
}] };
|
|
31
|
+
}
|
|
32
|
+
function textResult(text) {
|
|
33
|
+
return { content: [{
|
|
34
|
+
type: "text",
|
|
35
|
+
text
|
|
36
|
+
}] };
|
|
37
|
+
}
|
|
38
|
+
const QUERY_PARAM_CACHE_MAX = 256;
|
|
39
|
+
const queryParamCache = /* @__PURE__ */ new Map();
|
|
40
|
+
function extractQueryParams(path) {
|
|
41
|
+
const cached = queryParamCache.get(path);
|
|
42
|
+
if (cached) return {
|
|
43
|
+
cleanPath: cached.cleanPath,
|
|
44
|
+
query: { ...cached.query }
|
|
45
|
+
};
|
|
46
|
+
const q = path.indexOf("?");
|
|
47
|
+
if (q < 0) return {
|
|
48
|
+
cleanPath: path,
|
|
49
|
+
query: {}
|
|
50
|
+
};
|
|
51
|
+
const cleanPath = path.slice(0, q);
|
|
52
|
+
const query = {};
|
|
53
|
+
for (const [k, v] of new URLSearchParams(path.slice(q + 1))) query[k] = v;
|
|
54
|
+
queryParamCache.set(path, {
|
|
55
|
+
cleanPath,
|
|
56
|
+
query
|
|
57
|
+
});
|
|
58
|
+
if (queryParamCache.size > QUERY_PARAM_CACHE_MAX) {
|
|
59
|
+
const firstKey = queryParamCache.keys().next().value;
|
|
60
|
+
if (firstKey !== void 0) queryParamCache.delete(firstKey);
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
cleanPath,
|
|
64
|
+
query: { ...query }
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
//#endregion
|
|
69
|
+
exports.EXEC_TIMEOUT_MS = EXEC_TIMEOUT_MS;
|
|
70
|
+
exports.TOOL_TIMEOUT_MS = TOOL_TIMEOUT_MS;
|
|
71
|
+
exports.errorResult = errorResult;
|
|
72
|
+
exports.extractQueryParams = extractQueryParams;
|
|
73
|
+
exports.jsonResult = jsonResult;
|
|
74
|
+
exports.textResult = textResult;
|
|
75
|
+
exports.withTimeout = withTimeout;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
//#region src/mcp/utils.ts
|
|
2
|
+
const TOOL_TIMEOUT_MS = 3e4;
|
|
3
|
+
const EXEC_TIMEOUT_MS = 3e5;
|
|
4
|
+
function withTimeout(fn, timeoutMs = TOOL_TIMEOUT_MS) {
|
|
5
|
+
return new Promise((resolve, reject) => {
|
|
6
|
+
const timer = setTimeout(() => reject(/* @__PURE__ */ new Error(`Operation timed out after ${timeoutMs / 1e3}s`)), timeoutMs);
|
|
7
|
+
fn().then((r) => {
|
|
8
|
+
clearTimeout(timer);
|
|
9
|
+
resolve(r);
|
|
10
|
+
}, (e) => {
|
|
11
|
+
clearTimeout(timer);
|
|
12
|
+
reject(e);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
function errorResult(error) {
|
|
17
|
+
return {
|
|
18
|
+
isError: true,
|
|
19
|
+
content: [{
|
|
20
|
+
type: "text",
|
|
21
|
+
text: (error instanceof Error ? error.message : String(error)).split("\n")[0] || "Operation failed"
|
|
22
|
+
}]
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
function jsonResult(data) {
|
|
26
|
+
return { content: [{
|
|
27
|
+
type: "text",
|
|
28
|
+
text: JSON.stringify(data, null, 2)
|
|
29
|
+
}] };
|
|
30
|
+
}
|
|
31
|
+
function textResult(text) {
|
|
32
|
+
return { content: [{
|
|
33
|
+
type: "text",
|
|
34
|
+
text
|
|
35
|
+
}] };
|
|
36
|
+
}
|
|
37
|
+
const QUERY_PARAM_CACHE_MAX = 256;
|
|
38
|
+
const queryParamCache = /* @__PURE__ */ new Map();
|
|
39
|
+
function extractQueryParams(path) {
|
|
40
|
+
const cached = queryParamCache.get(path);
|
|
41
|
+
if (cached) return {
|
|
42
|
+
cleanPath: cached.cleanPath,
|
|
43
|
+
query: { ...cached.query }
|
|
44
|
+
};
|
|
45
|
+
const q = path.indexOf("?");
|
|
46
|
+
if (q < 0) return {
|
|
47
|
+
cleanPath: path,
|
|
48
|
+
query: {}
|
|
49
|
+
};
|
|
50
|
+
const cleanPath = path.slice(0, q);
|
|
51
|
+
const query = {};
|
|
52
|
+
for (const [k, v] of new URLSearchParams(path.slice(q + 1))) query[k] = v;
|
|
53
|
+
queryParamCache.set(path, {
|
|
54
|
+
cleanPath,
|
|
55
|
+
query
|
|
56
|
+
});
|
|
57
|
+
if (queryParamCache.size > QUERY_PARAM_CACHE_MAX) {
|
|
58
|
+
const firstKey = queryParamCache.keys().next().value;
|
|
59
|
+
if (firstKey !== void 0) queryParamCache.delete(firstKey);
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
cleanPath,
|
|
63
|
+
query: { ...query }
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
//#endregion
|
|
68
|
+
export { EXEC_TIMEOUT_MS, TOOL_TIMEOUT_MS, errorResult, extractQueryParams, jsonResult, textResult, withTimeout };
|
|
69
|
+
//# sourceMappingURL=utils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.mjs","names":[],"sources":["../../src/mcp/utils.ts"],"sourcesContent":["export const TOOL_TIMEOUT_MS = 30_000;\nexport const EXEC_TIMEOUT_MS = 300_000;\nexport function withTimeout<T>(fn: () => Promise<T>, timeoutMs = TOOL_TIMEOUT_MS): Promise<T> {\n return new Promise<T>((resolve, reject) => {\n const timer = setTimeout(\n () => reject(new Error(`Operation timed out after ${timeoutMs / 1000}s`)),\n timeoutMs,\n );\n fn().then(\n (r) => {\n clearTimeout(timer);\n resolve(r);\n },\n (e) => {\n clearTimeout(timer);\n reject(e);\n },\n );\n });\n}\nexport function errorResult(error: unknown) {\n const m = error instanceof Error ? error.message : String(error);\n return {\n isError: true as const,\n content: [{ type: \"text\" as const, text: m.split(\"\\n\")[0] || \"Operation failed\" }],\n };\n}\nexport function jsonResult(data: unknown) {\n return { content: [{ type: \"text\" as const, text: JSON.stringify(data, null, 2) }] };\n}\nexport function textResult(text: string) {\n return { content: [{ type: \"text\" as const, text }] };\n}\n\nconst QUERY_PARAM_CACHE_MAX = 256;\nconst queryParamCache = new Map<string, { cleanPath: string; query: Record<string, string> }>();\n\nexport function extractQueryParams(path: string): {\n cleanPath: string;\n query: Record<string, string>;\n} {\n const cached = queryParamCache.get(path);\n if (cached) return { cleanPath: cached.cleanPath, query: { ...cached.query } };\n\n const q = path.indexOf(\"?\");\n if (q < 0) return { cleanPath: path, query: {} };\n\n const cleanPath = path.slice(0, q);\n const query: Record<string, string> = {};\n for (const [k, v] of new URLSearchParams(path.slice(q + 1))) query[k] = v;\n\n queryParamCache.set(path, { cleanPath, query });\n if (queryParamCache.size > QUERY_PARAM_CACHE_MAX) {\n const firstKey = queryParamCache.keys().next().value;\n if (firstKey !== undefined) queryParamCache.delete(firstKey);\n }\n\n return { cleanPath, query: { ...query } };\n}\n"],"mappings":";AAAA,MAAa,kBAAkB;AAC/B,MAAa,kBAAkB;AAC/B,SAAgB,YAAe,IAAsB,YAAY,iBAA6B;AAC5F,QAAO,IAAI,SAAY,SAAS,WAAW;EACzC,MAAM,QAAQ,iBACN,uBAAO,IAAI,MAAM,6BAA6B,YAAY,IAAK,GAAG,CAAC,EACzE,UACD;AACD,MAAI,CAAC,MACF,MAAM;AACL,gBAAa,MAAM;AACnB,WAAQ,EAAE;MAEX,MAAM;AACL,gBAAa,MAAM;AACnB,UAAO,EAAE;IAEZ;GACD;;AAEJ,SAAgB,YAAY,OAAgB;AAE1C,QAAO;EACL,SAAS;EACT,SAAS,CAAC;GAAE,MAAM;GAAiB,OAH3B,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,EAGnB,MAAM,KAAK,CAAC,MAAM;GAAoB,CAAC;EACnF;;AAEH,SAAgB,WAAW,MAAe;AACxC,QAAO,EAAE,SAAS,CAAC;EAAE,MAAM;EAAiB,MAAM,KAAK,UAAU,MAAM,MAAM,EAAE;EAAE,CAAC,EAAE;;AAEtF,SAAgB,WAAW,MAAc;AACvC,QAAO,EAAE,SAAS,CAAC;EAAE,MAAM;EAAiB;EAAM,CAAC,EAAE;;AAGvD,MAAM,wBAAwB;AAC9B,MAAM,kCAAkB,IAAI,KAAmE;AAE/F,SAAgB,mBAAmB,MAGjC;CACA,MAAM,SAAS,gBAAgB,IAAI,KAAK;AACxC,KAAI,OAAQ,QAAO;EAAE,WAAW,OAAO;EAAW,OAAO,EAAE,GAAG,OAAO,OAAO;EAAE;CAE9E,MAAM,IAAI,KAAK,QAAQ,IAAI;AAC3B,KAAI,IAAI,EAAG,QAAO;EAAE,WAAW;EAAM,OAAO,EAAE;EAAE;CAEhD,MAAM,YAAY,KAAK,MAAM,GAAG,EAAE;CAClC,MAAM,QAAgC,EAAE;AACxC,MAAK,MAAM,CAAC,GAAG,MAAM,IAAI,gBAAgB,KAAK,MAAM,IAAI,EAAE,CAAC,CAAE,OAAM,KAAK;AAExE,iBAAgB,IAAI,MAAM;EAAE;EAAW;EAAO,CAAC;AAC/C,KAAI,gBAAgB,OAAO,uBAAuB;EAChD,MAAM,WAAW,gBAAgB,MAAM,CAAC,MAAM,CAAC;AAC/C,MAAI,aAAa,OAAW,iBAAgB,OAAO,SAAS;;AAG9D,QAAO;EAAE;EAAW,OAAO,EAAE,GAAG,OAAO;EAAE"}
|