@debian777/kairos-mcp 3.0.1-beta.14
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/LICENSE +22 -0
- package/README.md +108 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/cli/api-client.d.ts +31 -0
- package/dist/cli/api-client.d.ts.map +1 -0
- package/dist/cli/api-client.js +110 -0
- package/dist/cli/api-client.js.map +1 -0
- package/dist/cli/commands/attest.d.ts +6 -0
- package/dist/cli/commands/attest.d.ts.map +1 -0
- package/dist/cli/commands/attest.js +52 -0
- package/dist/cli/commands/attest.js.map +1 -0
- package/dist/cli/commands/begin.d.ts +6 -0
- package/dist/cli/commands/begin.d.ts.map +1 -0
- package/dist/cli/commands/begin.js +32 -0
- package/dist/cli/commands/begin.js.map +1 -0
- package/dist/cli/commands/delete.d.ts +6 -0
- package/dist/cli/commands/delete.d.ts.map +1 -0
- package/dist/cli/commands/delete.js +32 -0
- package/dist/cli/commands/delete.js.map +1 -0
- package/dist/cli/commands/mint.d.ts +6 -0
- package/dist/cli/commands/mint.d.ts.map +1 -0
- package/dist/cli/commands/mint.js +48 -0
- package/dist/cli/commands/mint.js.map +1 -0
- package/dist/cli/commands/next.d.ts +6 -0
- package/dist/cli/commands/next.d.ts.map +1 -0
- package/dist/cli/commands/next.js +89 -0
- package/dist/cli/commands/next.js.map +1 -0
- package/dist/cli/commands/search.d.ts +6 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +32 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/update.d.ts +6 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +72 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/config.d.ts +9 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +14 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/index.d.ts +6 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +40 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/output.d.ts +10 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +20 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/config.d.ts +58 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +165 -0
- package/dist/config.js.map +1 -0
- package/dist/embed-docs/mem/00000000-0000-0000-0000-000000002001.md +324 -0
- package/dist/embed-docs/mem/00000000-0000-0000-0000-000000002002.md +48 -0
- package/dist/http/bearer-validate.d.ts +14 -0
- package/dist/http/bearer-validate.d.ts.map +1 -0
- package/dist/http/bearer-validate.js +111 -0
- package/dist/http/bearer-validate.js.map +1 -0
- package/dist/http/http-api-attest.d.ts +7 -0
- package/dist/http/http-api-attest.d.ts.map +1 -0
- package/dist/http/http-api-attest.js +103 -0
- package/dist/http/http-api-attest.js.map +1 -0
- package/dist/http/http-api-begin-step.d.ts +8 -0
- package/dist/http/http-api-begin-step.d.ts.map +1 -0
- package/dist/http/http-api-begin-step.js +108 -0
- package/dist/http/http-api-begin-step.js.map +1 -0
- package/dist/http/http-api-begin.d.ts +8 -0
- package/dist/http/http-api-begin.d.ts.map +1 -0
- package/dist/http/http-api-begin.js +167 -0
- package/dist/http/http-api-begin.js.map +1 -0
- package/dist/http/http-api-delete.d.ts +9 -0
- package/dist/http/http-api-delete.d.ts.map +1 -0
- package/dist/http/http-api-delete.js +67 -0
- package/dist/http/http-api-delete.js.map +1 -0
- package/dist/http/http-api-dump.d.ts +8 -0
- package/dist/http/http-api-dump.d.ts.map +1 -0
- package/dist/http/http-api-dump.js +34 -0
- package/dist/http/http-api-dump.js.map +1 -0
- package/dist/http/http-api-mint.d.ts +9 -0
- package/dist/http/http-api-mint.d.ts.map +1 -0
- package/dist/http/http-api-mint.js +100 -0
- package/dist/http/http-api-mint.js.map +1 -0
- package/dist/http/http-api-next.d.ts +9 -0
- package/dist/http/http-api-next.d.ts.map +1 -0
- package/dist/http/http-api-next.js +237 -0
- package/dist/http/http-api-next.js.map +1 -0
- package/dist/http/http-api-routes.d.ts +13 -0
- package/dist/http/http-api-routes.d.ts.map +1 -0
- package/dist/http/http-api-routes.js +28 -0
- package/dist/http/http-api-routes.js.map +1 -0
- package/dist/http/http-api-snapshot.d.ts +4 -0
- package/dist/http/http-api-snapshot.d.ts.map +1 -0
- package/dist/http/http-api-snapshot.js +36 -0
- package/dist/http/http-api-snapshot.js.map +1 -0
- package/dist/http/http-api-update.d.ts +9 -0
- package/dist/http/http-api-update.d.ts.map +1 -0
- package/dist/http/http-api-update.js +105 -0
- package/dist/http/http-api-update.js.map +1 -0
- package/dist/http/http-auth-callback.d.ts +6 -0
- package/dist/http/http-auth-callback.d.ts.map +1 -0
- package/dist/http/http-auth-callback.js +183 -0
- package/dist/http/http-auth-callback.js.map +1 -0
- package/dist/http/http-auth-middleware.d.ts +30 -0
- package/dist/http/http-auth-middleware.d.ts.map +1 -0
- package/dist/http/http-auth-middleware.js +224 -0
- package/dist/http/http-auth-middleware.js.map +1 -0
- package/dist/http/http-error-handlers.d.ts +7 -0
- package/dist/http/http-error-handlers.d.ts.map +1 -0
- package/dist/http/http-error-handlers.js +35 -0
- package/dist/http/http-error-handlers.js.map +1 -0
- package/dist/http/http-health-routes.d.ts +9 -0
- package/dist/http/http-health-routes.d.ts.map +1 -0
- package/dist/http/http-health-routes.js +117 -0
- package/dist/http/http-health-routes.js.map +1 -0
- package/dist/http/http-mcp-handler.d.ts +8 -0
- package/dist/http/http-mcp-handler.d.ts.map +1 -0
- package/dist/http/http-mcp-handler.js +136 -0
- package/dist/http/http-mcp-handler.js.map +1 -0
- package/dist/http/http-metrics-middleware.d.ts +7 -0
- package/dist/http/http-metrics-middleware.d.ts.map +1 -0
- package/dist/http/http-metrics-middleware.js +56 -0
- package/dist/http/http-metrics-middleware.js.map +1 -0
- package/dist/http/http-server-config.d.ts +11 -0
- package/dist/http/http-server-config.d.ts.map +1 -0
- package/dist/http/http-server-config.js +15 -0
- package/dist/http/http-server-config.js.map +1 -0
- package/dist/http/http-server-startup.d.ts +9 -0
- package/dist/http/http-server-startup.d.ts.map +1 -0
- package/dist/http/http-server-startup.js +26 -0
- package/dist/http/http-server-startup.js.map +1 -0
- package/dist/http/http-server.d.ts +4 -0
- package/dist/http/http-server.d.ts.map +1 -0
- package/dist/http/http-server.js +39 -0
- package/dist/http/http-server.js.map +1 -0
- package/dist/http/http-well-known.d.ts +13 -0
- package/dist/http/http-well-known.d.ts.map +1 -0
- package/dist/http/http-well-known.js +32 -0
- package/dist/http/http-well-known.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +100 -0
- package/dist/index.js.map +1 -0
- package/dist/metrics-server.d.ts +14 -0
- package/dist/metrics-server.d.ts.map +1 -0
- package/dist/metrics-server.js +41 -0
- package/dist/metrics-server.js.map +1 -0
- package/dist/resources/docs-resources.d.ts +2 -0
- package/dist/resources/docs-resources.d.ts.map +1 -0
- package/dist/resources/docs-resources.js +47 -0
- package/dist/resources/docs-resources.js.map +1 -0
- package/dist/resources/embedded-mcp-resources.d.ts +73 -0
- package/dist/resources/embedded-mcp-resources.d.ts.map +1 -0
- package/dist/resources/embedded-mcp-resources.js +132 -0
- package/dist/resources/embedded-mcp-resources.js.map +1 -0
- package/dist/resources/mem-resources-boot.d.ts +10 -0
- package/dist/resources/mem-resources-boot.d.ts.map +1 -0
- package/dist/resources/mem-resources-boot.js +164 -0
- package/dist/resources/mem-resources-boot.js.map +1 -0
- package/dist/resources/prompt-resources.d.ts +5 -0
- package/dist/resources/prompt-resources.d.ts.map +1 -0
- package/dist/resources/prompt-resources.js +42 -0
- package/dist/resources/prompt-resources.js.map +1 -0
- package/dist/resources/resource-bootstrap.d.ts +7 -0
- package/dist/resources/resource-bootstrap.d.ts.map +1 -0
- package/dist/resources/resource-bootstrap.js +33 -0
- package/dist/resources/resource-bootstrap.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +79 -0
- package/dist/server.js.map +1 -0
- package/dist/services/chain-utils.d.ts +22 -0
- package/dist/services/chain-utils.d.ts.map +1 -0
- package/dist/services/chain-utils.js +95 -0
- package/dist/services/chain-utils.js.map +1 -0
- package/dist/services/code-block-processor.d.ts +40 -0
- package/dist/services/code-block-processor.d.ts.map +1 -0
- package/dist/services/code-block-processor.js +169 -0
- package/dist/services/code-block-processor.js.map +1 -0
- package/dist/services/embedding/config.d.ts +5 -0
- package/dist/services/embedding/config.d.ts.map +1 -0
- package/dist/services/embedding/config.js +13 -0
- package/dist/services/embedding/config.js.map +1 -0
- package/dist/services/embedding/providers.d.ts +5 -0
- package/dist/services/embedding/providers.d.ts.map +1 -0
- package/dist/services/embedding/providers.js +141 -0
- package/dist/services/embedding/providers.js.map +1 -0
- package/dist/services/embedding/service.d.ts +39 -0
- package/dist/services/embedding/service.d.ts.map +1 -0
- package/dist/services/embedding/service.js +302 -0
- package/dist/services/embedding/service.js.map +1 -0
- package/dist/services/embedding/types.d.ts +17 -0
- package/dist/services/embedding/types.d.ts.map +1 -0
- package/dist/services/embedding/types.js +2 -0
- package/dist/services/embedding/types.js.map +1 -0
- package/dist/services/id-generator.d.ts +63 -0
- package/dist/services/id-generator.d.ts.map +1 -0
- package/dist/services/id-generator.js +101 -0
- package/dist/services/id-generator.js.map +1 -0
- package/dist/services/key-value-store-factory.d.ts +7 -0
- package/dist/services/key-value-store-factory.d.ts.map +1 -0
- package/dist/services/key-value-store-factory.js +15 -0
- package/dist/services/key-value-store-factory.js.map +1 -0
- package/dist/services/key-value-store.d.ts +24 -0
- package/dist/services/key-value-store.d.ts.map +1 -0
- package/dist/services/key-value-store.js +6 -0
- package/dist/services/key-value-store.js.map +1 -0
- package/dist/services/memory/chain-builder-proof.d.ts +18 -0
- package/dist/services/memory/chain-builder-proof.d.ts.map +1 -0
- package/dist/services/memory/chain-builder-proof.js +78 -0
- package/dist/services/memory/chain-builder-proof.js.map +1 -0
- package/dist/services/memory/chain-builder.d.ts +4 -0
- package/dist/services/memory/chain-builder.d.ts.map +1 -0
- package/dist/services/memory/chain-builder.js +185 -0
- package/dist/services/memory/chain-builder.js.map +1 -0
- package/dist/services/memory/store-chain-default-handler.d.ts +9 -0
- package/dist/services/memory/store-chain-default-handler.d.ts.map +1 -0
- package/dist/services/memory/store-chain-default-handler.js +118 -0
- package/dist/services/memory/store-chain-default-handler.js.map +1 -0
- package/dist/services/memory/store-chain-header-handler.d.ts +8 -0
- package/dist/services/memory/store-chain-header-handler.d.ts.map +1 -0
- package/dist/services/memory/store-chain-header-handler.js +98 -0
- package/dist/services/memory/store-chain-header-handler.js.map +1 -0
- package/dist/services/memory/store-chain-helpers.d.ts +27 -0
- package/dist/services/memory/store-chain-helpers.d.ts.map +1 -0
- package/dist/services/memory/store-chain-helpers.js +102 -0
- package/dist/services/memory/store-chain-helpers.js.map +1 -0
- package/dist/services/memory/store-chain.d.ts +15 -0
- package/dist/services/memory/store-chain.d.ts.map +1 -0
- package/dist/services/memory/store-chain.js +56 -0
- package/dist/services/memory/store-chain.js.map +1 -0
- package/dist/services/memory/store-init.d.ts +3 -0
- package/dist/services/memory/store-init.d.ts.map +1 -0
- package/dist/services/memory/store-init.js +127 -0
- package/dist/services/memory/store-init.js.map +1 -0
- package/dist/services/memory/store-methods.d.ts +35 -0
- package/dist/services/memory/store-methods.d.ts.map +1 -0
- package/dist/services/memory/store-methods.js +308 -0
- package/dist/services/memory/store-methods.js.map +1 -0
- package/dist/services/memory/store.d.ts +36 -0
- package/dist/services/memory/store.d.ts.map +1 -0
- package/dist/services/memory/store.js +119 -0
- package/dist/services/memory/store.js.map +1 -0
- package/dist/services/memory-store.d.ts +33 -0
- package/dist/services/memory-store.d.ts.map +1 -0
- package/dist/services/memory-store.js +158 -0
- package/dist/services/memory-store.js.map +1 -0
- package/dist/services/metrics/agent-metrics.d.ts +12 -0
- package/dist/services/metrics/agent-metrics.d.ts.map +1 -0
- package/dist/services/metrics/agent-metrics.js +34 -0
- package/dist/services/metrics/agent-metrics.js.map +1 -0
- package/dist/services/metrics/embedding-metrics.d.ts +12 -0
- package/dist/services/metrics/embedding-metrics.d.ts.map +1 -0
- package/dist/services/metrics/embedding-metrics.js +41 -0
- package/dist/services/metrics/embedding-metrics.js.map +1 -0
- package/dist/services/metrics/http-metrics.d.ts +12 -0
- package/dist/services/metrics/http-metrics.d.ts.map +1 -0
- package/dist/services/metrics/http-metrics.js +41 -0
- package/dist/services/metrics/http-metrics.js.map +1 -0
- package/dist/services/metrics/mcp-metrics.d.ts +16 -0
- package/dist/services/metrics/mcp-metrics.d.ts.map +1 -0
- package/dist/services/metrics/mcp-metrics.js +55 -0
- package/dist/services/metrics/mcp-metrics.js.map +1 -0
- package/dist/services/metrics/memory-metrics.d.ts +10 -0
- package/dist/services/metrics/memory-metrics.d.ts.map +1 -0
- package/dist/services/metrics/memory-metrics.js +28 -0
- package/dist/services/metrics/memory-metrics.js.map +1 -0
- package/dist/services/metrics/qdrant-metrics.d.ts +11 -0
- package/dist/services/metrics/qdrant-metrics.d.ts.map +1 -0
- package/dist/services/metrics/qdrant-metrics.js +35 -0
- package/dist/services/metrics/qdrant-metrics.js.map +1 -0
- package/dist/services/metrics/registry.d.ts +9 -0
- package/dist/services/metrics/registry.d.ts.map +1 -0
- package/dist/services/metrics/registry.js +19 -0
- package/dist/services/metrics/registry.js.map +1 -0
- package/dist/services/metrics/system-metrics.d.ts +10 -0
- package/dist/services/metrics/system-metrics.d.ts.map +1 -0
- package/dist/services/metrics/system-metrics.js +35 -0
- package/dist/services/metrics/system-metrics.js.map +1 -0
- package/dist/services/proof-of-work-store.d.ts +66 -0
- package/dist/services/proof-of-work-store.d.ts.map +1 -0
- package/dist/services/proof-of-work-store.js +141 -0
- package/dist/services/proof-of-work-store.js.map +1 -0
- package/dist/services/qdrant/connection.d.ts +24 -0
- package/dist/services/qdrant/connection.d.ts.map +1 -0
- package/dist/services/qdrant/connection.js +126 -0
- package/dist/services/qdrant/connection.js.map +1 -0
- package/dist/services/qdrant/index.d.ts +3 -0
- package/dist/services/qdrant/index.d.ts.map +1 -0
- package/dist/services/qdrant/index.js +4 -0
- package/dist/services/qdrant/index.js.map +1 -0
- package/dist/services/qdrant/initialization.d.ts +25 -0
- package/dist/services/qdrant/initialization.d.ts.map +1 -0
- package/dist/services/qdrant/initialization.js +170 -0
- package/dist/services/qdrant/initialization.js.map +1 -0
- package/dist/services/qdrant/listing.d.ts +26 -0
- package/dist/services/qdrant/listing.d.ts.map +1 -0
- package/dist/services/qdrant/listing.js +88 -0
- package/dist/services/qdrant/listing.js.map +1 -0
- package/dist/services/qdrant/memory-retrieval.d.ts +14 -0
- package/dist/services/qdrant/memory-retrieval.d.ts.map +1 -0
- package/dist/services/qdrant/memory-retrieval.js +110 -0
- package/dist/services/qdrant/memory-retrieval.js.map +1 -0
- package/dist/services/qdrant/memory-store.d.ts +16 -0
- package/dist/services/qdrant/memory-store.d.ts.map +1 -0
- package/dist/services/qdrant/memory-store.js +108 -0
- package/dist/services/qdrant/memory-store.js.map +1 -0
- package/dist/services/qdrant/memory-updates.d.ts +8 -0
- package/dist/services/qdrant/memory-updates.d.ts.map +1 -0
- package/dist/services/qdrant/memory-updates.js +206 -0
- package/dist/services/qdrant/memory-updates.js.map +1 -0
- package/dist/services/qdrant/protocol.d.ts +16 -0
- package/dist/services/qdrant/protocol.d.ts.map +1 -0
- package/dist/services/qdrant/protocol.js +48 -0
- package/dist/services/qdrant/protocol.js.map +1 -0
- package/dist/services/qdrant/quality.d.ts +14 -0
- package/dist/services/qdrant/quality.d.ts.map +1 -0
- package/dist/services/qdrant/quality.js +101 -0
- package/dist/services/qdrant/quality.js.map +1 -0
- package/dist/services/qdrant/resources.d.ts +7 -0
- package/dist/services/qdrant/resources.d.ts.map +1 -0
- package/dist/services/qdrant/resources.js +108 -0
- package/dist/services/qdrant/resources.js.map +1 -0
- package/dist/services/qdrant/search.d.ts +22 -0
- package/dist/services/qdrant/search.d.ts.map +1 -0
- package/dist/services/qdrant/search.js +75 -0
- package/dist/services/qdrant/search.js.map +1 -0
- package/dist/services/qdrant/service.d.ts +90 -0
- package/dist/services/qdrant/service.d.ts.map +1 -0
- package/dist/services/qdrant/service.js +95 -0
- package/dist/services/qdrant/service.js.map +1 -0
- package/dist/services/qdrant/snapshots.d.ts +19 -0
- package/dist/services/qdrant/snapshots.d.ts.map +1 -0
- package/dist/services/qdrant/snapshots.js +130 -0
- package/dist/services/qdrant/snapshots.js.map +1 -0
- package/dist/services/qdrant/types.d.ts +39 -0
- package/dist/services/qdrant/types.d.ts.map +1 -0
- package/dist/services/qdrant/types.js +2 -0
- package/dist/services/qdrant/types.js.map +1 -0
- package/dist/services/qdrant/utils.d.ts +20 -0
- package/dist/services/qdrant/utils.d.ts.map +1 -0
- package/dist/services/qdrant/utils.js +121 -0
- package/dist/services/qdrant/utils.js.map +1 -0
- package/dist/services/redis-cache.d.ts +43 -0
- package/dist/services/redis-cache.d.ts.map +1 -0
- package/dist/services/redis-cache.js +214 -0
- package/dist/services/redis-cache.js.map +1 -0
- package/dist/services/redis.d.ts +43 -0
- package/dist/services/redis.d.ts.map +1 -0
- package/dist/services/redis.js +234 -0
- package/dist/services/redis.js.map +1 -0
- package/dist/services/stats/bonuses.d.ts +28 -0
- package/dist/services/stats/bonuses.d.ts.map +1 -0
- package/dist/services/stats/bonuses.js +96 -0
- package/dist/services/stats/bonuses.js.map +1 -0
- package/dist/services/stats/healer.d.ts +6 -0
- package/dist/services/stats/healer.d.ts.map +1 -0
- package/dist/services/stats/healer.js +24 -0
- package/dist/services/stats/healer.js.map +1 -0
- package/dist/services/stats/model-stats.d.ts +53 -0
- package/dist/services/stats/model-stats.d.ts.map +1 -0
- package/dist/services/stats/model-stats.js +238 -0
- package/dist/services/stats/model-stats.js.map +1 -0
- package/dist/services/stats/protocol.d.ts +11 -0
- package/dist/services/stats/protocol.d.ts.map +1 -0
- package/dist/services/stats/protocol.js +55 -0
- package/dist/services/stats/protocol.js.map +1 -0
- package/dist/services/stats/scoring.d.ts +19 -0
- package/dist/services/stats/scoring.d.ts.map +1 -0
- package/dist/services/stats/scoring.js +102 -0
- package/dist/services/stats/scoring.js.map +1 -0
- package/dist/services/stats/types.d.ts +39 -0
- package/dist/services/stats/types.d.ts.map +1 -0
- package/dist/services/stats/types.js +8 -0
- package/dist/services/stats/types.js.map +1 -0
- package/dist/tools/kairos_attest.d.ts +7 -0
- package/dist/tools/kairos_attest.d.ts.map +1 -0
- package/dist/tools/kairos_attest.js +179 -0
- package/dist/tools/kairos_attest.js.map +1 -0
- package/dist/tools/kairos_begin.d.ts +9 -0
- package/dist/tools/kairos_begin.d.ts.map +1 -0
- package/dist/tools/kairos_begin.js +149 -0
- package/dist/tools/kairos_begin.js.map +1 -0
- package/dist/tools/kairos_begin_schema.d.ts +48 -0
- package/dist/tools/kairos_begin_schema.d.ts.map +1 -0
- package/dist/tools/kairos_begin_schema.js +48 -0
- package/dist/tools/kairos_begin_schema.js.map +1 -0
- package/dist/tools/kairos_delete.d.ts +2 -0
- package/dist/tools/kairos_delete.d.ts.map +1 -0
- package/dist/tools/kairos_delete.js +113 -0
- package/dist/tools/kairos_delete.js.map +1 -0
- package/dist/tools/kairos_dump.d.ts +14 -0
- package/dist/tools/kairos_dump.d.ts.map +1 -0
- package/dist/tools/kairos_dump.js +148 -0
- package/dist/tools/kairos_dump.js.map +1 -0
- package/dist/tools/kairos_mint.d.ts +7 -0
- package/dist/tools/kairos_mint.d.ts.map +1 -0
- package/dist/tools/kairos_mint.js +233 -0
- package/dist/tools/kairos_mint.js.map +1 -0
- package/dist/tools/kairos_next-missing-proof-payload.d.ts +24 -0
- package/dist/tools/kairos_next-missing-proof-payload.d.ts.map +1 -0
- package/dist/tools/kairos_next-missing-proof-payload.js +32 -0
- package/dist/tools/kairos_next-missing-proof-payload.js.map +1 -0
- package/dist/tools/kairos_next-pow-helpers.d.ts +57 -0
- package/dist/tools/kairos_next-pow-helpers.d.ts.map +1 -0
- package/dist/tools/kairos_next-pow-helpers.js +271 -0
- package/dist/tools/kairos_next-pow-helpers.js.map +1 -0
- package/dist/tools/kairos_next-previous-step.d.ts +36 -0
- package/dist/tools/kairos_next-previous-step.d.ts.map +1 -0
- package/dist/tools/kairos_next-previous-step.js +121 -0
- package/dist/tools/kairos_next-previous-step.js.map +1 -0
- package/dist/tools/kairos_next.d.ts +12 -0
- package/dist/tools/kairos_next.d.ts.map +1 -0
- package/dist/tools/kairos_next.js +285 -0
- package/dist/tools/kairos_next.js.map +1 -0
- package/dist/tools/kairos_next_schema.d.ts +80 -0
- package/dist/tools/kairos_next_schema.d.ts.map +1 -0
- package/dist/tools/kairos_next_schema.js +82 -0
- package/dist/tools/kairos_next_schema.js.map +1 -0
- package/dist/tools/kairos_search.d.ts +15 -0
- package/dist/tools/kairos_search.d.ts.map +1 -0
- package/dist/tools/kairos_search.js +262 -0
- package/dist/tools/kairos_search.js.map +1 -0
- package/dist/tools/kairos_spaces.d.ts +10 -0
- package/dist/tools/kairos_spaces.d.ts.map +1 -0
- package/dist/tools/kairos_spaces.js +129 -0
- package/dist/tools/kairos_spaces.js.map +1 -0
- package/dist/tools/kairos_update.d.ts +2 -0
- package/dist/tools/kairos_update.d.ts.map +1 -0
- package/dist/tools/kairos_update.js +158 -0
- package/dist/tools/kairos_update.js.map +1 -0
- package/dist/types/index.d.ts +60 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +21 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/memory.d.ts +38 -0
- package/dist/types/memory.d.ts.map +1 -0
- package/dist/types/memory.js +2 -0
- package/dist/types/memory.js.map +1 -0
- package/dist/utils/build-version.d.ts +15 -0
- package/dist/utils/build-version.d.ts.map +1 -0
- package/dist/utils/build-version.js +46 -0
- package/dist/utils/build-version.js.map +1 -0
- package/dist/utils/global-error-handlers.d.ts +7 -0
- package/dist/utils/global-error-handlers.d.ts.map +1 -0
- package/dist/utils/global-error-handlers.js +61 -0
- package/dist/utils/global-error-handlers.js.map +1 -0
- package/dist/utils/log-core.d.ts +11 -0
- package/dist/utils/log-core.d.ts.map +1 -0
- package/dist/utils/log-core.js +78 -0
- package/dist/utils/log-core.js.map +1 -0
- package/dist/utils/logger.d.ts +22 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +63 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/memory-body.d.ts +6 -0
- package/dist/utils/memory-body.d.ts.map +1 -0
- package/dist/utils/memory-body.js +21 -0
- package/dist/utils/memory-body.js.map +1 -0
- package/dist/utils/memory-store-utils.d.ts +14 -0
- package/dist/utils/memory-store-utils.d.ts.map +1 -0
- package/dist/utils/memory-store-utils.js +83 -0
- package/dist/utils/memory-store-utils.js.map +1 -0
- package/dist/utils/qdrant-collection-utils.d.ts +11 -0
- package/dist/utils/qdrant-collection-utils.d.ts.map +1 -0
- package/dist/utils/qdrant-collection-utils.js +62 -0
- package/dist/utils/qdrant-collection-utils.js.map +1 -0
- package/dist/utils/qdrant-query-utils.d.ts +6 -0
- package/dist/utils/qdrant-query-utils.d.ts.map +1 -0
- package/dist/utils/qdrant-query-utils.js +23 -0
- package/dist/utils/qdrant-query-utils.js.map +1 -0
- package/dist/utils/qdrant-utils.d.ts +5 -0
- package/dist/utils/qdrant-utils.d.ts.map +1 -0
- package/dist/utils/qdrant-utils.js +5 -0
- package/dist/utils/qdrant-utils.js.map +1 -0
- package/dist/utils/qdrant-vector-management.d.ts +25 -0
- package/dist/utils/qdrant-vector-management.d.ts.map +1 -0
- package/dist/utils/qdrant-vector-management.js +284 -0
- package/dist/utils/qdrant-vector-management.js.map +1 -0
- package/dist/utils/qdrant-vector-types.d.ts +35 -0
- package/dist/utils/qdrant-vector-types.d.ts.map +1 -0
- package/dist/utils/qdrant-vector-types.js +42 -0
- package/dist/utils/qdrant-vector-types.js.map +1 -0
- package/dist/utils/space-display.d.ts +11 -0
- package/dist/utils/space-display.d.ts.map +1 -0
- package/dist/utils/space-display.js +25 -0
- package/dist/utils/space-display.js.map +1 -0
- package/dist/utils/space-filter.d.ts +15 -0
- package/dist/utils/space-filter.d.ts.map +1 -0
- package/dist/utils/space-filter.js +18 -0
- package/dist/utils/space-filter.js.map +1 -0
- package/dist/utils/structured-logger.d.ts +41 -0
- package/dist/utils/structured-logger.d.ts.map +1 -0
- package/dist/utils/structured-logger.js +133 -0
- package/dist/utils/structured-logger.js.map +1 -0
- package/dist/utils/tenant-context.d.ts +67 -0
- package/dist/utils/tenant-context.d.ts.map +1 -0
- package/dist/utils/tenant-context.js +154 -0
- package/dist/utils/tenant-context.js.map +1 -0
- package/dist/utils/uri-builder.d.ts +37 -0
- package/dist/utils/uri-builder.d.ts.map +1 -0
- package/dist/utils/uri-builder.js +60 -0
- package/dist/utils/uri-builder.js.map +1 -0
- package/package.json +121 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"space-filter.d.ts","sourceRoot":"","sources":["../../src/utils/space-filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,sDAAsD;AACtD,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,MAAM,EAAE,EACzB,cAAc,CAAC,EAAE,gBAAgB,GAChC;IAAE,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAAE,CAS1C"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build Qdrant filter for space isolation. Merges space_id constraint with optional existing filter.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Build a filter that restricts results to points whose space_id is in allowedSpaceIds.
|
|
6
|
+
* Merges with existingFilter.must so callers can add domain, chain.id, etc.
|
|
7
|
+
*/
|
|
8
|
+
export function buildSpaceFilter(allowedSpaceIds, existingFilter) {
|
|
9
|
+
const spaceCondition = {
|
|
10
|
+
key: 'space_id',
|
|
11
|
+
match: { any: allowedSpaceIds }
|
|
12
|
+
};
|
|
13
|
+
const existingMust = existingFilter?.must ?? [];
|
|
14
|
+
return {
|
|
15
|
+
must: [spaceCondition, ...existingMust]
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=space-filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"space-filter.js","sourceRoot":"","sources":["../../src/utils/space-filter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,eAAyB,EACzB,cAAiC;IAEjC,MAAM,cAAc,GAAG;QACrB,GAAG,EAAE,UAAU;QACf,KAAK,EAAE,EAAE,GAAG,EAAE,eAAe,EAAE;KAChC,CAAC;IACF,MAAM,YAAY,GAAG,cAAc,EAAE,IAAI,IAAI,EAAE,CAAC;IAChD,OAAO;QACL,IAAI,EAAE,CAAC,cAAc,EAAE,GAAG,YAAY,CAAC;KACxC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured HTTP Access Logging for KAIROS MCP
|
|
3
|
+
*
|
|
4
|
+
* Uses shared Pino backend (log-core) for consistent JSON shape.
|
|
5
|
+
* See docs/logging.md for levels, standard fields, and usage.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - request_id, client_ip, duration_ms, error_code
|
|
9
|
+
* - child(component, module) for context
|
|
10
|
+
* - Proxy-safe client IP when TRUSTED_PROXY_CIDRS is set
|
|
11
|
+
*/
|
|
12
|
+
import pino from 'pino';
|
|
13
|
+
import type { Request, Response } from 'express';
|
|
14
|
+
declare function getClientIp(req: Request): string;
|
|
15
|
+
declare const httpLogger: (req: Request, res: Response, next: Function) => void;
|
|
16
|
+
export type ToolOperation = 'search' | 'store' | 'update' | 'delete' | 'retrieve' | 'upsert' | 'rate';
|
|
17
|
+
export interface ErrorLogOptions {
|
|
18
|
+
error_code?: string;
|
|
19
|
+
request_id?: string;
|
|
20
|
+
[key: string]: unknown;
|
|
21
|
+
}
|
|
22
|
+
export interface StructuredLoggerApi {
|
|
23
|
+
debug(message: string): void;
|
|
24
|
+
info(message: string): void;
|
|
25
|
+
info(bindings: Record<string, unknown>, message: string): void;
|
|
26
|
+
warn(message: string): void;
|
|
27
|
+
error(message: string, error?: Error | unknown): void;
|
|
28
|
+
error(message: string, error: Error | unknown, options: ErrorLogOptions): void;
|
|
29
|
+
tool(toolName: string, operation: ToolOperation, details: string): void;
|
|
30
|
+
success(operation: string, details: string): void;
|
|
31
|
+
requestTimeout(operation: string, timeoutMs: number): void;
|
|
32
|
+
getTransportType(): 'stdio' | 'http';
|
|
33
|
+
getLogFormat(): 'text' | 'json';
|
|
34
|
+
getPinoLogger(): pino.Logger;
|
|
35
|
+
child(bindings: Record<string, unknown>): StructuredLoggerApi;
|
|
36
|
+
}
|
|
37
|
+
declare const structuredLogger: StructuredLoggerApi;
|
|
38
|
+
export { structuredLogger, httpLogger, getClientIp };
|
|
39
|
+
export type { Request, Response };
|
|
40
|
+
export type { Logger } from 'pino';
|
|
41
|
+
//# sourceMappingURL=structured-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured-logger.d.ts","sourceRoot":"","sources":["../../src/utils/structured-logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASjD,iBAAS,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAazC;AAKD,QAAA,MAAM,UAAU,GAAI,KAAK,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,QAAQ,KAAG,IA+BjE,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEtG,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/D,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,OAAO,GAAG,IAAI,CAAC;IACtD,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/E,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACxE,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAClD,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,gBAAgB,IAAI,OAAO,GAAG,MAAM,CAAC;IACrC,YAAY,IAAI,MAAM,GAAG,MAAM,CAAC;IAChC,aAAa,IAAI,IAAI,CAAC,MAAM,CAAC;IAC7B,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,mBAAmB,CAAC;CAC/D;AAmFD,QAAA,MAAM,gBAAgB,qBAAuB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AACrD,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAClC,YAAY,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured HTTP Access Logging for KAIROS MCP
|
|
3
|
+
*
|
|
4
|
+
* Uses shared Pino backend (log-core) for consistent JSON shape.
|
|
5
|
+
* See docs/logging.md for levels, standard fields, and usage.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - request_id, client_ip, duration_ms, error_code
|
|
9
|
+
* - child(component, module) for context
|
|
10
|
+
* - Proxy-safe client IP when TRUSTED_PROXY_CIDRS is set
|
|
11
|
+
*/
|
|
12
|
+
import { getBaseLogger } from './log-core.js';
|
|
13
|
+
import { LOG_LEVEL, LOG_FORMAT, TRANSPORT_TYPE } from '../config.js';
|
|
14
|
+
const TRUSTED_PROXY_CIDRS = (process.env['TRUSTED_PROXY_CIDRS'] || '')
|
|
15
|
+
.split(',')
|
|
16
|
+
.map(s => s.trim())
|
|
17
|
+
.filter(Boolean);
|
|
18
|
+
function getClientIp(req) {
|
|
19
|
+
const reqWithSocket = req;
|
|
20
|
+
const remote = reqWithSocket?.socket?.remoteAddress ?? reqWithSocket?.ip ?? 'unknown';
|
|
21
|
+
const xff = (req.headers && req.headers['x-forwarded-for'] ? String(req.headers['x-forwarded-for']) : '');
|
|
22
|
+
if (!xff)
|
|
23
|
+
return remote;
|
|
24
|
+
if (TRUSTED_PROXY_CIDRS.length > 0) {
|
|
25
|
+
const first = xff.split(',')[0];
|
|
26
|
+
return (first && first.trim()) || remote;
|
|
27
|
+
}
|
|
28
|
+
return remote;
|
|
29
|
+
}
|
|
30
|
+
const baseLogger = getBaseLogger();
|
|
31
|
+
// HTTP logging middleware
|
|
32
|
+
const httpLogger = (req, res, next) => {
|
|
33
|
+
const start = Date.now();
|
|
34
|
+
const startTime = new Date().toISOString();
|
|
35
|
+
const requestId = req.headers['x-request-id'] || `req-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;
|
|
36
|
+
req.requestId = requestId;
|
|
37
|
+
baseLogger.info({
|
|
38
|
+
time: startTime,
|
|
39
|
+
http: { method: req.method, path: req.url, protocol: `HTTP/${req.httpVersion}` },
|
|
40
|
+
client: { ip: getClientIp(req) },
|
|
41
|
+
user_agent: req.headers['user-agent'],
|
|
42
|
+
request_id: requestId
|
|
43
|
+
}, `${req.method} ${req.url}`);
|
|
44
|
+
res.on('finish', () => {
|
|
45
|
+
const duration = Date.now() - start;
|
|
46
|
+
const statusCode = res.statusCode ?? 500;
|
|
47
|
+
const methodName = statusCode >= 500 ? 'error' : statusCode >= 400 ? 'warn' : 'info';
|
|
48
|
+
const rid = req.requestId ?? req.headers['x-request-id'];
|
|
49
|
+
baseLogger[methodName]({
|
|
50
|
+
time: new Date().toISOString(),
|
|
51
|
+
http: { method: req.method, path: req.url, protocol: `HTTP/${req.httpVersion}` },
|
|
52
|
+
status: statusCode,
|
|
53
|
+
response_time_ms: duration,
|
|
54
|
+
client: { ip: getClientIp(req) },
|
|
55
|
+
user_agent: req.headers['user-agent'],
|
|
56
|
+
request_id: rid
|
|
57
|
+
}, `${req.method} ${req.url} -> ${statusCode}`);
|
|
58
|
+
});
|
|
59
|
+
next();
|
|
60
|
+
};
|
|
61
|
+
function wrapPino(pinoInstance) {
|
|
62
|
+
const includeStack = LOG_LEVEL === 'debug' || process.env['NODE_ENV'] === 'development';
|
|
63
|
+
return {
|
|
64
|
+
debug(message) {
|
|
65
|
+
pinoInstance.debug(message);
|
|
66
|
+
},
|
|
67
|
+
info(msgOrBindings, message) {
|
|
68
|
+
if (typeof msgOrBindings === 'string') {
|
|
69
|
+
pinoInstance.info({ category: 'info' }, msgOrBindings);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
pinoInstance.info({ ...msgOrBindings, category: 'info' }, (message ?? ''));
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
warn(message) {
|
|
76
|
+
pinoInstance.warn({ category: 'warning' }, message);
|
|
77
|
+
},
|
|
78
|
+
error(message, error, options) {
|
|
79
|
+
const bindings = { category: 'error' };
|
|
80
|
+
if (options && options['error_code'])
|
|
81
|
+
bindings['error_code'] = options['error_code'];
|
|
82
|
+
if (options && options['request_id'])
|
|
83
|
+
bindings['request_id'] = options['request_id'];
|
|
84
|
+
if (options) {
|
|
85
|
+
Object.keys(options).forEach(k => {
|
|
86
|
+
if (k !== 'error_code' && k !== 'request_id')
|
|
87
|
+
bindings[k] = options[k];
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (error) {
|
|
91
|
+
bindings['error'] = error instanceof Error
|
|
92
|
+
? { message: error.message, stack: includeStack ? error.stack : undefined }
|
|
93
|
+
: error;
|
|
94
|
+
}
|
|
95
|
+
pinoInstance.error(bindings, message);
|
|
96
|
+
},
|
|
97
|
+
tool(toolName, operation, details) {
|
|
98
|
+
const msg = `[${toolName}] ${operation.toUpperCase()} ${details}`;
|
|
99
|
+
pinoInstance.info({
|
|
100
|
+
tool: toolName,
|
|
101
|
+
operation: operation.toUpperCase(),
|
|
102
|
+
details,
|
|
103
|
+
category: 'tool_operation'
|
|
104
|
+
}, msg);
|
|
105
|
+
},
|
|
106
|
+
success(operation, details) {
|
|
107
|
+
pinoInstance.info({ operation, details, category: 'success' }, `[${operation}] ${details}`);
|
|
108
|
+
},
|
|
109
|
+
requestTimeout(operation, timeoutMs) {
|
|
110
|
+
pinoInstance.error({
|
|
111
|
+
operation,
|
|
112
|
+
timeoutMs,
|
|
113
|
+
category: 'timeout',
|
|
114
|
+
note: 'Client did not receive response'
|
|
115
|
+
}, 'Request timeout');
|
|
116
|
+
},
|
|
117
|
+
getTransportType() {
|
|
118
|
+
return TRANSPORT_TYPE;
|
|
119
|
+
},
|
|
120
|
+
getLogFormat() {
|
|
121
|
+
return LOG_FORMAT === 'json' ? 'json' : 'text';
|
|
122
|
+
},
|
|
123
|
+
getPinoLogger() {
|
|
124
|
+
return pinoInstance;
|
|
125
|
+
},
|
|
126
|
+
child(bindings) {
|
|
127
|
+
return wrapPino(pinoInstance.child(bindings));
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
const structuredLogger = wrapPino(baseLogger);
|
|
132
|
+
export { structuredLogger, httpLogger, getClientIp };
|
|
133
|
+
//# sourceMappingURL=structured-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured-logger.js","sourceRoot":"","sources":["../../src/utils/structured-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Space and tenant context for multitenancy.
|
|
3
|
+
* SpaceContext is derived from Keycloak (sub + groups); getTenantId() remains for metrics.
|
|
4
|
+
* AsyncLocalStorage allows Redis and other services to get current space without request reference.
|
|
5
|
+
* When AUTH_ENABLED, default space is disabled for strict isolation; unauthenticated/no-context
|
|
6
|
+
* uses a sentinel space so no tenant data is shared.
|
|
7
|
+
*/
|
|
8
|
+
/** Sentinel space when AUTH is on but no auth context (strict isolation; not shared with tenants). */
|
|
9
|
+
export declare const NO_AUTH_SPACE_ID = "space:no-auth";
|
|
10
|
+
export interface SpaceContext {
|
|
11
|
+
userId: string;
|
|
12
|
+
groupIds: string[];
|
|
13
|
+
allowedSpaceIds: string[];
|
|
14
|
+
defaultWriteSpaceId: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Run a function with the given space context stored in AsyncLocalStorage.
|
|
18
|
+
* Used by HTTP auth middleware so Redis and Qdrant helpers can read space without request.
|
|
19
|
+
* For sync callbacks the context is preserved. For async callbacks use runWithSpaceContextAsync
|
|
20
|
+
* so the context persists across await boundaries (run() loses context after the callback returns a Promise).
|
|
21
|
+
*/
|
|
22
|
+
export declare function runWithSpaceContext<T>(ctx: SpaceContext, fn: () => T): T;
|
|
23
|
+
/**
|
|
24
|
+
* Run an async function with the given space context. Uses enterWith so the context
|
|
25
|
+
* persists for the entire async execution (including all await continuations).
|
|
26
|
+
* Use this when the callback does async work (e.g. storeChain) and getSpaceContext()
|
|
27
|
+
* must see the context inside that work.
|
|
28
|
+
*/
|
|
29
|
+
export declare function runWithSpaceContextAsync<T>(ctx: SpaceContext, fn: () => Promise<T>): Promise<T>;
|
|
30
|
+
/**
|
|
31
|
+
* Get space context from AsyncLocalStorage (set by auth middleware via runWithSpaceContext).
|
|
32
|
+
* When not in a request: if AUTH_ENABLED, returns no-default context (strict isolation);
|
|
33
|
+
* otherwise returns default single-tenant context.
|
|
34
|
+
*/
|
|
35
|
+
export declare function getSpaceContextFromStorage(): SpaceContext;
|
|
36
|
+
/** Current space id for Redis key prefix and similar; uses storage or KAIROS_APP_SPACE_ID when auth off. */
|
|
37
|
+
export declare function getSpaceIdFromStorage(): string;
|
|
38
|
+
/**
|
|
39
|
+
* Space IDs to use for search only: allowedSpaceIds plus Kairos app space (deduped).
|
|
40
|
+
* Writes (mint, update, delete) continue to use allowedSpaceIds only.
|
|
41
|
+
*/
|
|
42
|
+
export declare function getSearchSpaceIds(): string[];
|
|
43
|
+
/**
|
|
44
|
+
* Async variant: run fn in narrowed space context so context persists across await.
|
|
45
|
+
* Use when the callback does async work (e.g. kairos_search) and getSpaceContext() must see the context.
|
|
46
|
+
*/
|
|
47
|
+
export declare function runWithOptionalSpaceAsync<T>(spaceParam: string | undefined, fn: () => Promise<T>): Promise<T>;
|
|
48
|
+
/**
|
|
49
|
+
* Get space context from request. Uses req.auth (set by auth middleware) when AUTH_ENABLED.
|
|
50
|
+
* When AUTH_ENABLED and no auth, returns no-default context (strict isolation).
|
|
51
|
+
* When AUTH_ENABLED=false, returns default single-tenant context.
|
|
52
|
+
* If no request is passed, falls back to AsyncLocalStorage (e.g. from runWithSpaceContext).
|
|
53
|
+
*/
|
|
54
|
+
export declare function getSpaceContext(request?: {
|
|
55
|
+
auth?: {
|
|
56
|
+
sub: string;
|
|
57
|
+
groups: string[];
|
|
58
|
+
realm?: string;
|
|
59
|
+
group_ids?: string[];
|
|
60
|
+
};
|
|
61
|
+
spaceContext?: SpaceContext;
|
|
62
|
+
}): SpaceContext;
|
|
63
|
+
/**
|
|
64
|
+
* Get tenant ID for metrics. Returns default write space id or first allowed space.
|
|
65
|
+
*/
|
|
66
|
+
export declare function getTenantId(request?: any): string;
|
|
67
|
+
//# sourceMappingURL=tenant-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-context.d.ts","sourceRoot":"","sources":["../../src/utils/tenant-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,sGAAsG;AACtG,eAAO,MAAM,gBAAgB,kBAAkB,CAAC;AAEhD,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAgCD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAExE;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAQrG;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,IAAI,YAAY,CAIzD;AAED,4GAA4G;AAC5G,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAK5C;AAED;;;GAGG;AACH,wBAAsB,yBAAyB,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,GAAG,SAAS,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAYnH;AAsBD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE;IACxC,IAAI,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC/E,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,GAAG,YAAY,CAoBf;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,MAAM,CAGjD"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Space and tenant context for multitenancy.
|
|
3
|
+
* SpaceContext is derived from Keycloak (sub + groups); getTenantId() remains for metrics.
|
|
4
|
+
* AsyncLocalStorage allows Redis and other services to get current space without request reference.
|
|
5
|
+
* When AUTH_ENABLED, default space is disabled for strict isolation; unauthenticated/no-context
|
|
6
|
+
* uses a sentinel space so no tenant data is shared.
|
|
7
|
+
*/
|
|
8
|
+
import { AsyncLocalStorage } from 'async_hooks';
|
|
9
|
+
import { AUTH_ENABLED, KAIROS_APP_SPACE_ID } from '../config.js';
|
|
10
|
+
/** Sentinel space when AUTH is on but no auth context (strict isolation; not shared with tenants). */
|
|
11
|
+
export const NO_AUTH_SPACE_ID = 'space:no-auth';
|
|
12
|
+
/** Sentinel for "no context" when restoring after runWithSpaceContextAsync (enterWith does not accept undefined). */
|
|
13
|
+
const NO_CONTEXT_SENTINEL = {
|
|
14
|
+
userId: '',
|
|
15
|
+
groupIds: [],
|
|
16
|
+
allowedSpaceIds: [],
|
|
17
|
+
defaultWriteSpaceId: ''
|
|
18
|
+
};
|
|
19
|
+
const spaceStorage = new AsyncLocalStorage();
|
|
20
|
+
function defaultSpaceContext() {
|
|
21
|
+
const spaceId = KAIROS_APP_SPACE_ID;
|
|
22
|
+
return {
|
|
23
|
+
userId: '',
|
|
24
|
+
groupIds: [],
|
|
25
|
+
allowedSpaceIds: [spaceId],
|
|
26
|
+
defaultWriteSpaceId: spaceId
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** Context when AUTH_ENABLED and no auth/storage — no access to shared default space. */
|
|
30
|
+
function noDefaultSpaceContext() {
|
|
31
|
+
return {
|
|
32
|
+
userId: '',
|
|
33
|
+
groupIds: [],
|
|
34
|
+
allowedSpaceIds: [],
|
|
35
|
+
defaultWriteSpaceId: NO_AUTH_SPACE_ID
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Run a function with the given space context stored in AsyncLocalStorage.
|
|
40
|
+
* Used by HTTP auth middleware so Redis and Qdrant helpers can read space without request.
|
|
41
|
+
* For sync callbacks the context is preserved. For async callbacks use runWithSpaceContextAsync
|
|
42
|
+
* so the context persists across await boundaries (run() loses context after the callback returns a Promise).
|
|
43
|
+
*/
|
|
44
|
+
export function runWithSpaceContext(ctx, fn) {
|
|
45
|
+
return spaceStorage.run(ctx, fn);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Run an async function with the given space context. Uses enterWith so the context
|
|
49
|
+
* persists for the entire async execution (including all await continuations).
|
|
50
|
+
* Use this when the callback does async work (e.g. storeChain) and getSpaceContext()
|
|
51
|
+
* must see the context inside that work.
|
|
52
|
+
*/
|
|
53
|
+
export async function runWithSpaceContextAsync(ctx, fn) {
|
|
54
|
+
const prev = spaceStorage.getStore();
|
|
55
|
+
spaceStorage.enterWith(ctx);
|
|
56
|
+
try {
|
|
57
|
+
return await fn();
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
spaceStorage.enterWith(prev ?? NO_CONTEXT_SENTINEL);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get space context from AsyncLocalStorage (set by auth middleware via runWithSpaceContext).
|
|
65
|
+
* When not in a request: if AUTH_ENABLED, returns no-default context (strict isolation);
|
|
66
|
+
* otherwise returns default single-tenant context.
|
|
67
|
+
*/
|
|
68
|
+
export function getSpaceContextFromStorage() {
|
|
69
|
+
const stored = spaceStorage.getStore();
|
|
70
|
+
if (stored && stored !== NO_CONTEXT_SENTINEL)
|
|
71
|
+
return stored;
|
|
72
|
+
return AUTH_ENABLED ? noDefaultSpaceContext() : defaultSpaceContext();
|
|
73
|
+
}
|
|
74
|
+
/** Current space id for Redis key prefix and similar; uses storage or KAIROS_APP_SPACE_ID when auth off. */
|
|
75
|
+
export function getSpaceIdFromStorage() {
|
|
76
|
+
return getSpaceContextFromStorage().defaultWriteSpaceId;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Space IDs to use for search only: allowedSpaceIds plus Kairos app space (deduped).
|
|
80
|
+
* Writes (mint, update, delete) continue to use allowedSpaceIds only.
|
|
81
|
+
*/
|
|
82
|
+
export function getSearchSpaceIds() {
|
|
83
|
+
const ctx = getSpaceContextFromStorage();
|
|
84
|
+
const allowed = ctx.allowedSpaceIds;
|
|
85
|
+
if (allowed.includes(KAIROS_APP_SPACE_ID))
|
|
86
|
+
return [...allowed];
|
|
87
|
+
return [...allowed, KAIROS_APP_SPACE_ID];
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Async variant: run fn in narrowed space context so context persists across await.
|
|
91
|
+
* Use when the callback does async work (e.g. kairos_search) and getSpaceContext() must see the context.
|
|
92
|
+
*/
|
|
93
|
+
export async function runWithOptionalSpaceAsync(spaceParam, fn) {
|
|
94
|
+
if (!spaceParam || typeof spaceParam !== 'string')
|
|
95
|
+
return fn();
|
|
96
|
+
const ctx = getSpaceContextFromStorage();
|
|
97
|
+
if (!ctx.allowedSpaceIds.includes(spaceParam)) {
|
|
98
|
+
throw new Error('Requested space is not in your allowed spaces');
|
|
99
|
+
}
|
|
100
|
+
const narrowed = {
|
|
101
|
+
...ctx,
|
|
102
|
+
allowedSpaceIds: [spaceParam],
|
|
103
|
+
defaultWriteSpaceId: spaceParam
|
|
104
|
+
};
|
|
105
|
+
return runWithSpaceContextAsync(narrowed, fn);
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Build allowed space ids and default write space from auth payload (sub + groups + realm + optional group_ids).
|
|
109
|
+
* Space IDs include realm for isolation across Keycloak realms; group ID is used when present so renames are stable.
|
|
110
|
+
*/
|
|
111
|
+
function fromAuthPayload(sub, groupNames, realm, groupIds) {
|
|
112
|
+
const personal = `user:${realm}:${sub}`;
|
|
113
|
+
const groupSpaces = groupNames.map((name, i) => {
|
|
114
|
+
const ref = groupIds?.[i] ?? name;
|
|
115
|
+
return `group:${realm}:${ref}`;
|
|
116
|
+
});
|
|
117
|
+
const allowedSpaceIds = [personal, ...groupSpaces];
|
|
118
|
+
const defaultWriteSpaceId = personal;
|
|
119
|
+
return { allowedSpaceIds, defaultWriteSpaceId };
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get space context from request. Uses req.auth (set by auth middleware) when AUTH_ENABLED.
|
|
123
|
+
* When AUTH_ENABLED and no auth, returns no-default context (strict isolation).
|
|
124
|
+
* When AUTH_ENABLED=false, returns default single-tenant context.
|
|
125
|
+
* If no request is passed, falls back to AsyncLocalStorage (e.g. from runWithSpaceContext).
|
|
126
|
+
*/
|
|
127
|
+
export function getSpaceContext(request) {
|
|
128
|
+
if (request?.spaceContext)
|
|
129
|
+
return request.spaceContext;
|
|
130
|
+
const stored = spaceStorage.getStore();
|
|
131
|
+
if (stored)
|
|
132
|
+
return stored;
|
|
133
|
+
if (!AUTH_ENABLED)
|
|
134
|
+
return defaultSpaceContext();
|
|
135
|
+
const auth = request?.auth;
|
|
136
|
+
if (!auth?.sub)
|
|
137
|
+
return noDefaultSpaceContext();
|
|
138
|
+
const realm = auth.realm ?? 'default';
|
|
139
|
+
const { allowedSpaceIds, defaultWriteSpaceId } = fromAuthPayload(auth.sub, auth.groups ?? [], realm, auth.group_ids);
|
|
140
|
+
return {
|
|
141
|
+
userId: auth.sub,
|
|
142
|
+
groupIds: auth.groups ?? [],
|
|
143
|
+
allowedSpaceIds,
|
|
144
|
+
defaultWriteSpaceId
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get tenant ID for metrics. Returns default write space id or first allowed space.
|
|
149
|
+
*/
|
|
150
|
+
export function getTenantId(request) {
|
|
151
|
+
const ctx = getSpaceContext(request);
|
|
152
|
+
return ctx.defaultWriteSpaceId || ctx.allowedSpaceIds[0] || 'default';
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=tenant-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-context.js","sourceRoot":"","sources":["../../src/utils/tenant-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URI Builder for KAIROS Resources
|
|
3
|
+
*
|
|
4
|
+
* Generates canonical kairos:// URIs for:
|
|
5
|
+
* - Domain/type/task resources: kairos://{domain}/{type}/{task}
|
|
6
|
+
* - Protocol steps: kairos://{domain}/{type}/{task}/step/{n}
|
|
7
|
+
* - Unified UUID resources: kairos://{uuid}
|
|
8
|
+
* - Templates: kairos://templates/{template_type}/{param}
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Build kairos://{domain}/{type}/{task} URI for domain/type/task format
|
|
12
|
+
*
|
|
13
|
+
* @param domain - Knowledge domain (e.g., 'typescript', 'docker')
|
|
14
|
+
* @param type - Knowledge type (e.g., 'rule', 'pattern', 'context')
|
|
15
|
+
* @param task - Task identifier (e.g., 'error-handling', 'networking')
|
|
16
|
+
* @returns kairos:// domain/type/task URI
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* buildDomainTypeTaskURI('docker', 'pattern', 'networking')
|
|
20
|
+
* // Returns: 'kairos://docker/pattern/networking'
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildDomainTypeTaskURI(domain: string, type: string, task: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Build kairos://{domain}/{type}/{task}/step/{step} URI for protocol steps
|
|
25
|
+
*
|
|
26
|
+
* @param domain - Knowledge domain
|
|
27
|
+
* @param type - Knowledge type
|
|
28
|
+
* @param task - Task identifier
|
|
29
|
+
* @param step - Step number (1-based)
|
|
30
|
+
* @returns kairos:// protocol step URI
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* buildProtocolStepURI('ai', 'rule', 'coding-rules', 3)
|
|
34
|
+
* // Returns: 'kairos://ai/rule/coding-rules/step/3'
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildProtocolStepURI(domain: string, type: string, task: string, step: number): string;
|
|
37
|
+
//# sourceMappingURL=uri-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uri-builder.d.ts","sourceRoot":"","sources":["../../src/utils/uri-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAYzF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBrG"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URI Builder for KAIROS Resources
|
|
3
|
+
*
|
|
4
|
+
* Generates canonical kairos:// URIs for:
|
|
5
|
+
* - Domain/type/task resources: kairos://{domain}/{type}/{task}
|
|
6
|
+
* - Protocol steps: kairos://{domain}/{type}/{task}/step/{n}
|
|
7
|
+
* - Unified UUID resources: kairos://{uuid}
|
|
8
|
+
* - Templates: kairos://templates/{template_type}/{param}
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Build kairos://{domain}/{type}/{task} URI for domain/type/task format
|
|
12
|
+
*
|
|
13
|
+
* @param domain - Knowledge domain (e.g., 'typescript', 'docker')
|
|
14
|
+
* @param type - Knowledge type (e.g., 'rule', 'pattern', 'context')
|
|
15
|
+
* @param task - Task identifier (e.g., 'error-handling', 'networking')
|
|
16
|
+
* @returns kairos:// domain/type/task URI
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* buildDomainTypeTaskURI('docker', 'pattern', 'networking')
|
|
20
|
+
* // Returns: 'kairos://docker/pattern/networking'
|
|
21
|
+
*/
|
|
22
|
+
export function buildDomainTypeTaskURI(domain, type, task) {
|
|
23
|
+
if (!domain || !type || !task) {
|
|
24
|
+
throw new Error('buildDomainTypeTaskURI requires domain, type, and task parameters');
|
|
25
|
+
}
|
|
26
|
+
// Validate domain/type/task format (lowercase, alphanumeric, hyphens)
|
|
27
|
+
const validFormat = /^[a-z0-9-]+$/;
|
|
28
|
+
if (!validFormat.test(domain) || !validFormat.test(type) || !validFormat.test(task)) {
|
|
29
|
+
throw new Error('Domain, type, and task must be lowercase alphanumeric with hyphens only');
|
|
30
|
+
}
|
|
31
|
+
return `kairos://${domain}/${type}/${task}`;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Build kairos://{domain}/{type}/{task}/step/{step} URI for protocol steps
|
|
35
|
+
*
|
|
36
|
+
* @param domain - Knowledge domain
|
|
37
|
+
* @param type - Knowledge type
|
|
38
|
+
* @param task - Task identifier
|
|
39
|
+
* @param step - Step number (1-based)
|
|
40
|
+
* @returns kairos:// protocol step URI
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* buildProtocolStepURI('ai', 'rule', 'coding-rules', 3)
|
|
44
|
+
* // Returns: 'kairos://ai/rule/coding-rules/step/3'
|
|
45
|
+
*/
|
|
46
|
+
export function buildProtocolStepURI(domain, type, task, step) {
|
|
47
|
+
if (!domain || !type || !task || step === undefined || step === null) {
|
|
48
|
+
throw new Error('buildProtocolStepURI requires domain, type, task, and step parameters');
|
|
49
|
+
}
|
|
50
|
+
if (!Number.isInteger(step) || step < 1) {
|
|
51
|
+
throw new Error('Step must be a positive integer');
|
|
52
|
+
}
|
|
53
|
+
// Validate domain/type/task format
|
|
54
|
+
const validFormat = /^[a-z0-9-]+$/;
|
|
55
|
+
if (!validFormat.test(domain) || !validFormat.test(type) || !validFormat.test(task)) {
|
|
56
|
+
throw new Error('Domain, type, and task must be lowercase alphanumeric with hyphens only');
|
|
57
|
+
}
|
|
58
|
+
return `kairos://${domain}/${type}/${task}/step/${step}`;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=uri-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uri-builder.js","sourceRoot":"","sources":["../../src/utils/uri-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,IAAY,EAAE,IAAY;IAC7E,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;IACzF,CAAC;IAED,sEAAsE;IACtE,MAAM,WAAW,GAAG,cAAc,CAAC;IACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClF,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO,YAAY,MAAM,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc,EAAE,IAAY,EAAE,IAAY,EAAE,IAAY;IACzF,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC7F,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACvD,CAAC;IAED,mCAAmC;IACnC,MAAM,WAAW,GAAG,cAAc,CAAC;IACnC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAClF,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO,YAAY,MAAM,IAAI,IAAI,IAAI,IAAI,SAAS,IAAI,EAAE,CAAC;AAC7D,CAAC"}
|