@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,324 @@
|
|
|
1
|
+
# Create New KAIROS Protocol Chain
|
|
2
|
+
|
|
3
|
+
Guide an AI agent through creating a new executable protocol chain in KAIROS.
|
|
4
|
+
This protocol is offered when kairos_search finds no match. **Use a challenge
|
|
5
|
+
on every step that can be verified** — it makes protocols runnable, auditable,
|
|
6
|
+
and self-healing. When in doubt, add a challenge.
|
|
7
|
+
|
|
8
|
+
A challenge is defined as a **JSON object in a fenced ` ```json ` block** at the
|
|
9
|
+
end of each step: use an object with a `challenge` key whose value has the same
|
|
10
|
+
shape as the `challenge` returned by kairos_begin and kairos_next; round-trips
|
|
11
|
+
cleanly with kairos_dump and kairos_mint.
|
|
12
|
+
|
|
13
|
+
## How to write a Natural Language Triggers section
|
|
14
|
+
|
|
15
|
+
Every protocol **must** include a `## Natural Language Triggers` section as the
|
|
16
|
+
**first H2** after the H1 title and introductory paragraph. This section tells
|
|
17
|
+
agents when to activate the protocol from human speech.
|
|
18
|
+
|
|
19
|
+
**Required structure (exact order):**
|
|
20
|
+
|
|
21
|
+
1. **Trigger phrases** — 3–6 quoted phrases a user would say to invoke this protocol.
|
|
22
|
+
2. **Trigger pattern** — verb + noun formula: `**verb** + (noun1 / noun2 / noun3)`.
|
|
23
|
+
3. **Must Never** — 1–3 cases where this protocol must NOT be triggered.
|
|
24
|
+
4. **Must Always** — 1–3 mandatory behaviours when the protocol IS triggered.
|
|
25
|
+
5. **Good trigger examples** — 2–3 phrases that correctly activate, with `→ run this protocol`.
|
|
26
|
+
6. **Bad trigger examples** — 2–3 phrases that should NOT activate, with `→ use X instead`.
|
|
27
|
+
|
|
28
|
+
**Must Never:**
|
|
29
|
+
- Use vague descriptions: ❌ "Run when the user wants to do something with UI"
|
|
30
|
+
- Overlap with another protocol's triggers without disambiguation
|
|
31
|
+
- Omit the section — every protocol needs one
|
|
32
|
+
|
|
33
|
+
**Must Always:**
|
|
34
|
+
- Use imperative language in Must Never / Must Always (no "should", "consider", "might")
|
|
35
|
+
- Include at least one Good and one Bad example
|
|
36
|
+
- Match trigger verbs to the protocol's actual purpose
|
|
37
|
+
|
|
38
|
+
**Good example** (for a deployment protocol):
|
|
39
|
+
|
|
40
|
+
```markdown
|
|
41
|
+
## Natural Language Triggers
|
|
42
|
+
|
|
43
|
+
**Run this protocol when the user says ANY of:**
|
|
44
|
+
|
|
45
|
+
- "deploy to staging" / "push to production"
|
|
46
|
+
- "release this version" / "ship it"
|
|
47
|
+
|
|
48
|
+
**Trigger verbs** + (staging / production / environment / release):
|
|
49
|
+
- **deploy** / **push** / **release** / **ship** / **promote**
|
|
50
|
+
|
|
51
|
+
**Must Never:**
|
|
52
|
+
- Trigger on "deploy" when the user means a local dev server
|
|
53
|
+
- Run without confirming the target environment
|
|
54
|
+
|
|
55
|
+
**Must Always:**
|
|
56
|
+
- Confirm target environment before Step 1
|
|
57
|
+
- Check that CI pipeline passed before deploying
|
|
58
|
+
|
|
59
|
+
**Good trigger examples:**
|
|
60
|
+
- "Deploy the API to staging" → run this protocol
|
|
61
|
+
- "Ship v2.3.0 to production" → run this protocol
|
|
62
|
+
|
|
63
|
+
**Bad trigger examples:**
|
|
64
|
+
- "Start the dev server" → not a deployment, do not trigger
|
|
65
|
+
- "Show me the last deployment" → use search, not this protocol
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Bad example** (vague, no verbs, no Good/Bad):
|
|
69
|
+
|
|
70
|
+
```markdown
|
|
71
|
+
## When to Use
|
|
72
|
+
This protocol can be used for deployments and releases.
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Why use a challenge on every step
|
|
76
|
+
|
|
77
|
+
- **Runnable:** Agents and users can execute the protocol step-by-step and
|
|
78
|
+
prove completion.
|
|
79
|
+
- **Deterministic:** Each step has a clear success criterion (command exit
|
|
80
|
+
code, comment length, user confirmation, or MCP result).
|
|
81
|
+
- **Recoverable:** If a step fails, kairos_next returns a fresh challenge
|
|
82
|
+
and the agent can retry or fix the step via kairos_update.
|
|
83
|
+
|
|
84
|
+
Prefer a challenge on every step; omit only for purely informational steps
|
|
85
|
+
where no verification is possible.
|
|
86
|
+
|
|
87
|
+
Example: ```json
|
|
88
|
+
{
|
|
89
|
+
"challenge": {
|
|
90
|
+
"type": "comment",
|
|
91
|
+
"comment": { "min_length": 10 },
|
|
92
|
+
"required": true
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Challenge types and JSON examples
|
|
98
|
+
|
|
99
|
+
Place a fenced ` ```json ` block at the end of the step with an object with a
|
|
100
|
+
`challenge` key. Use the type that fits the step; mix types in one protocol.
|
|
101
|
+
|
|
102
|
+
**shell** — Step requires running a command (build, test, deploy script).
|
|
103
|
+
|
|
104
|
+
Example: ```json
|
|
105
|
+
{
|
|
106
|
+
"challenge": {
|
|
107
|
+
"type": "shell",
|
|
108
|
+
"shell": {
|
|
109
|
+
"cmd": "npm test",
|
|
110
|
+
"timeout_seconds": 60
|
|
111
|
+
},
|
|
112
|
+
"required": true
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**comment** — Step requires a short verification (review, summary, checklist).
|
|
118
|
+
|
|
119
|
+
Example: ```json
|
|
120
|
+
{
|
|
121
|
+
"challenge": {
|
|
122
|
+
"type": "comment",
|
|
123
|
+
"comment": { "min_length": 50 },
|
|
124
|
+
"required": true
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**user_input** — Step requires human confirmation (approvals, go/no-go).
|
|
130
|
+
|
|
131
|
+
Example: ```json
|
|
132
|
+
{
|
|
133
|
+
"challenge": {
|
|
134
|
+
"type": "user_input",
|
|
135
|
+
"user_input": { "prompt": "Approve deployment?" },
|
|
136
|
+
"required": true
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**mcp** — Step requires calling an MCP tool (e.g. kairos_mint, kairos_update).
|
|
142
|
+
|
|
143
|
+
Example: ```json
|
|
144
|
+
{
|
|
145
|
+
"challenge": {
|
|
146
|
+
"type": "mcp",
|
|
147
|
+
"mcp": { "tool_name": "kairos_mint" },
|
|
148
|
+
"required": true
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Example protocol (for inspiration)
|
|
154
|
+
|
|
155
|
+
Use H1 for the protocol title, H2 for each step, then step body, then a
|
|
156
|
+
` ```json ` block with the challenge for that step.
|
|
157
|
+
|
|
158
|
+
**Step 1 — shell:** Run the test suite and linter.
|
|
159
|
+
|
|
160
|
+
Example: ```json
|
|
161
|
+
{
|
|
162
|
+
"challenge": {
|
|
163
|
+
"type": "shell",
|
|
164
|
+
"shell": {
|
|
165
|
+
"cmd": "npm test && npm run lint",
|
|
166
|
+
"timeout_seconds": 60
|
|
167
|
+
},
|
|
168
|
+
"required": true
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Step 2 — comment:** Summarize what changed and why (min 50 chars).
|
|
174
|
+
|
|
175
|
+
Example: ```json
|
|
176
|
+
{
|
|
177
|
+
"challenge": {
|
|
178
|
+
"type": "comment",
|
|
179
|
+
"comment": { "min_length": 50 },
|
|
180
|
+
"required": true
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Step 3 — user_input:** Get user approval for merge.
|
|
186
|
+
|
|
187
|
+
Example: ```json
|
|
188
|
+
{
|
|
189
|
+
"challenge": {
|
|
190
|
+
"type": "user_input",
|
|
191
|
+
"user_input": { "prompt": "Approve these changes for merge?" },
|
|
192
|
+
"required": true
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**Step 4 — mcp:** Call the merge tool.
|
|
198
|
+
|
|
199
|
+
Example: ```json
|
|
200
|
+
{
|
|
201
|
+
"challenge": {
|
|
202
|
+
"type": "mcp",
|
|
203
|
+
"mcp": { "tool_name": "merge_tool" },
|
|
204
|
+
"required": true
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
Example step format: H2, body, then a trailing ` ```json ` block with `challenge`.
|
|
212
|
+
|
|
213
|
+
Format: ```json
|
|
214
|
+
{
|
|
215
|
+
"challenge": {
|
|
216
|
+
"type": "comment",
|
|
217
|
+
"comment": { "min_length": 10 },
|
|
218
|
+
"required": true
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Step 1: Confirm Intent
|
|
224
|
+
|
|
225
|
+
Before creating a new protocol, confirm the user actually wants this.
|
|
226
|
+
They may have misspelled a search query, or the protocol may exist under
|
|
227
|
+
a different name.
|
|
228
|
+
|
|
229
|
+
Ask the user: "No existing protocol matched your query. Would you like
|
|
230
|
+
to create a new one, or refine your search?"
|
|
231
|
+
|
|
232
|
+
```json
|
|
233
|
+
{
|
|
234
|
+
"challenge": {
|
|
235
|
+
"type": "user_input",
|
|
236
|
+
"user_input": { "prompt": "Confirm you want to create a new protocol chain" },
|
|
237
|
+
"required": true
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
## Step 2: Gather Requirements
|
|
243
|
+
|
|
244
|
+
Collect the key details for the new protocol:
|
|
245
|
+
|
|
246
|
+
- **Title**: A clear, descriptive name for the protocol chain (H1 heading)
|
|
247
|
+
- **Steps**: What steps should the protocol have? (each becomes an H2 heading)
|
|
248
|
+
- **Challenges**: For each step, add a ` ```json ` block with a `challenge` key (one of):
|
|
249
|
+
- **shell** — `{"challenge":{"type":"shell","shell":{"cmd":"...","timeout_seconds":30},"required":true}}`
|
|
250
|
+
- **comment** — `{"challenge":{"type":"comment","comment":{"min_length":50},"required":true}}`
|
|
251
|
+
- **user_input** — `{"challenge":{"type":"user_input","user_input":{"prompt":"..."},"required":true}}`
|
|
252
|
+
- **mcp** — `{"challenge":{"type":"mcp","mcp":{"tool_name":"kairos_mint"},"required":true}}`
|
|
253
|
+
|
|
254
|
+
Summarize the gathered requirements as a structured list.
|
|
255
|
+
|
|
256
|
+
```json
|
|
257
|
+
{
|
|
258
|
+
"challenge": {
|
|
259
|
+
"type": "comment",
|
|
260
|
+
"comment": { "min_length": 50 },
|
|
261
|
+
"required": true
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## Step 3: Draft Markdown
|
|
267
|
+
|
|
268
|
+
Using the requirements from step 2, draft the full markdown document
|
|
269
|
+
that will be passed to `kairos_mint`. Use H1 for title, H2 per step,
|
|
270
|
+
step body, then a ` ```json ` block with the challenge for that step.
|
|
271
|
+
**Add a challenge (```json block) to every step** that can be verified (see
|
|
272
|
+
examples above). Post the full drafted markdown in your verification comment.
|
|
273
|
+
|
|
274
|
+
**Must Always include in the draft:**
|
|
275
|
+
- **Natural Language Triggers** section as the first H2 — follow the structure
|
|
276
|
+
and Good/Bad examples defined in "How to write a Natural Language Triggers
|
|
277
|
+
section" above.
|
|
278
|
+
- **Completion Rule** section as the last H2.
|
|
279
|
+
|
|
280
|
+
```json
|
|
281
|
+
{
|
|
282
|
+
"challenge": {
|
|
283
|
+
"type": "comment",
|
|
284
|
+
"comment": { "min_length": 100 },
|
|
285
|
+
"required": true
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
## Step 4: User Review
|
|
291
|
+
|
|
292
|
+
Present the drafted protocol markdown to the user for review.
|
|
293
|
+
Ask them to approve, request changes, or cancel.
|
|
294
|
+
|
|
295
|
+
If they request changes, update the draft before proceeding.
|
|
296
|
+
|
|
297
|
+
```json
|
|
298
|
+
{
|
|
299
|
+
"challenge": {
|
|
300
|
+
"type": "user_input",
|
|
301
|
+
"user_input": { "prompt": "Approve the protocol draft for minting" },
|
|
302
|
+
"required": true
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
## Step 5: Mint Protocol
|
|
308
|
+
|
|
309
|
+
Call `kairos_mint` with the approved markdown document. Use
|
|
310
|
+
`force_update: false` (default) unless the user explicitly asks to
|
|
311
|
+
overwrite an existing protocol.
|
|
312
|
+
|
|
313
|
+
Confirm the mint was successful and report the chain head URI back
|
|
314
|
+
to the user.
|
|
315
|
+
|
|
316
|
+
```json
|
|
317
|
+
{
|
|
318
|
+
"challenge": {
|
|
319
|
+
"type": "mcp",
|
|
320
|
+
"mcp": { "tool_name": "kairos_mint" },
|
|
321
|
+
"required": true
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
```
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Get help refining your search
|
|
2
|
+
|
|
3
|
+
**You are an AI agent.** You ran `kairos_search` and got no solid match (or only weak/ambiguous ones). This protocol helps you turn the user's vague request into a better query so the next `kairos_search` can find the right protocol.
|
|
4
|
+
|
|
5
|
+
## Step 1: Extract what the user actually wants
|
|
6
|
+
|
|
7
|
+
From the user's original message, identify:
|
|
8
|
+
- **Goal:** What outcome do they want? (e.g. "run tests", "write docs", "create a Jira ticket")
|
|
9
|
+
- **Context:** Any project, tool, domain, or proper noun they mentioned?
|
|
10
|
+
- **Gaps:** What is missing or ambiguous? (e.g. "which repo?", "which doc type?", "which project key?")
|
|
11
|
+
|
|
12
|
+
If the request was a slash-command or shorthand (e.g. "/ai-docs", "do the thing"), expand it: what would a concrete version of that command look like?
|
|
13
|
+
|
|
14
|
+
Write your analysis as your solution (goal + context + gaps, minimum 30 characters).
|
|
15
|
+
|
|
16
|
+
```json
|
|
17
|
+
{
|
|
18
|
+
"challenge": {
|
|
19
|
+
"type": "comment",
|
|
20
|
+
"comment": { "min_length": 30 },
|
|
21
|
+
"required": true
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## Step 2: Build and run a refined kairos_search query
|
|
27
|
+
|
|
28
|
+
Using your Step 1 analysis, construct a single search query:
|
|
29
|
+
- Use 3–8 specific words (nouns and verbs, no filler). Examples: "write ai instructions zero-drift template", "jira create story BIB", "npm test lint deploy".
|
|
30
|
+
- Include domain or tool names if known (e.g. "jira", "gitlab", "coding standards").
|
|
31
|
+
- Do not reuse the user's exact vague phrase — that already failed.
|
|
32
|
+
|
|
33
|
+
Write your refined query as your solution, then call `kairos_search` with it.
|
|
34
|
+
|
|
35
|
+
- **Strong match (score >= 0.7):** Pick that choice and call `kairos_begin` with its URI.
|
|
36
|
+
- **Weak matches only (all scores < 0.7):** Ask the user to clarify, or pick the create choice to build a new protocol.
|
|
37
|
+
|
|
38
|
+
Do not loop this refining protocol more than once — if two searches fail, the protocol likely does not exist yet.
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
{
|
|
42
|
+
"challenge": {
|
|
43
|
+
"type": "mcp",
|
|
44
|
+
"mcp": { "tool_name": "kairos_search" },
|
|
45
|
+
"required": true
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface AuthPayload {
|
|
2
|
+
sub: string;
|
|
3
|
+
groups: string[];
|
|
4
|
+
/** Realm from token issuer (e.g. kairos-dev) for space isolation. */
|
|
5
|
+
realm: string;
|
|
6
|
+
/** Optional group UUIDs from token; when present used for space ID so renames are stable. */
|
|
7
|
+
group_ids?: string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Validate Bearer JWT: iss in trusted list, aud in allowed list, exp not expired, signature valid.
|
|
11
|
+
* Returns { sub, groups } or null if invalid.
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateBearerToken(token: string, trustedIssuers: string[], allowedAudiences: string[]): Promise<AuthPayload | null>;
|
|
14
|
+
//# sourceMappingURL=bearer-validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bearer-validate.d.ts","sourceRoot":"","sources":["../../src/http/bearer-validate.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,qEAAqE;IACrE,KAAK,EAAE,MAAM,CAAC;IACd,6FAA6F;IAC7F,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAoDD;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,EAAE,EACxB,gBAAgB,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAsD7B"}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bearer JWT validation for OIDC (Keycloak). Verifies iss, aud, exp and signature via JWKS.
|
|
3
|
+
* When KEYCLOAK_INTERNAL_URL is set, JWKS is fetched from that host so the app in Docker can reach Keycloak.
|
|
4
|
+
*/
|
|
5
|
+
import { createRemoteJWKSet, jwtVerify } from 'jose';
|
|
6
|
+
import { decodeJwt } from 'jose/jwt/decode';
|
|
7
|
+
import { KEYCLOAK_URL, KEYCLOAK_INTERNAL_URL } from '../config.js';
|
|
8
|
+
import { structuredLogger } from '../utils/structured-logger.js';
|
|
9
|
+
const JWKS_CACHE = new Map();
|
|
10
|
+
/** Resolve JWKS fetch URL: use KEYCLOAK_INTERNAL_URL when token issuer is user-facing (localhost) so Docker app can reach Keycloak. */
|
|
11
|
+
function getJwksFetchUrl(issuer) {
|
|
12
|
+
const base = issuer.replace(/\/$/, '');
|
|
13
|
+
if (KEYCLOAK_INTERNAL_URL && KEYCLOAK_URL && base.startsWith(KEYCLOAK_URL.replace(/\/$/, ''))) {
|
|
14
|
+
const internalBase = KEYCLOAK_INTERNAL_URL.replace(/\/$/, '');
|
|
15
|
+
return `${internalBase}${new URL(base).pathname}/protocol/openid-connect/certs`;
|
|
16
|
+
}
|
|
17
|
+
return `${base}/protocol/openid-connect/certs`;
|
|
18
|
+
}
|
|
19
|
+
function getJwksForIssuer(issuer) {
|
|
20
|
+
const cached = JWKS_CACHE.get(issuer);
|
|
21
|
+
if (cached)
|
|
22
|
+
return cached;
|
|
23
|
+
const url = getJwksFetchUrl(issuer);
|
|
24
|
+
const jwks = createRemoteJWKSet(new URL(url));
|
|
25
|
+
JWKS_CACHE.set(issuer, jwks);
|
|
26
|
+
return jwks;
|
|
27
|
+
}
|
|
28
|
+
/** Decode JWT payload without verification (issuer check only). */
|
|
29
|
+
function decodePayload(jwt) {
|
|
30
|
+
return decodeJwt(jwt);
|
|
31
|
+
}
|
|
32
|
+
function extractGroups(payload) {
|
|
33
|
+
const g = payload['groups'];
|
|
34
|
+
if (Array.isArray(g))
|
|
35
|
+
return g.filter((x) => typeof x === 'string');
|
|
36
|
+
const realm = payload['realm_access'];
|
|
37
|
+
if (realm && Array.isArray(realm.roles))
|
|
38
|
+
return realm.roles.filter((x) => typeof x === 'string');
|
|
39
|
+
return [];
|
|
40
|
+
}
|
|
41
|
+
/** Extract realm from issuer URL (e.g. http://keycloak:8080/realms/kairos-dev -> kairos-dev). */
|
|
42
|
+
function realmFromIssuer(iss) {
|
|
43
|
+
const match = /\/realms\/([^/]+)/.exec(iss);
|
|
44
|
+
const segment = match?.[1] ?? iss.split('/').filter(Boolean).pop();
|
|
45
|
+
return typeof segment === 'string' ? segment : 'default';
|
|
46
|
+
}
|
|
47
|
+
function extractGroupIds(payload) {
|
|
48
|
+
const g = payload['group_ids'];
|
|
49
|
+
if (Array.isArray(g)) {
|
|
50
|
+
const ids = g.filter((x) => typeof x === 'string' && x.length > 0);
|
|
51
|
+
return ids.length > 0 ? ids : undefined;
|
|
52
|
+
}
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Validate Bearer JWT: iss in trusted list, aud in allowed list, exp not expired, signature valid.
|
|
57
|
+
* Returns { sub, groups } or null if invalid.
|
|
58
|
+
*/
|
|
59
|
+
export async function validateBearerToken(token, trustedIssuers, allowedAudiences) {
|
|
60
|
+
if (!token || trustedIssuers.length === 0 || allowedAudiences.length === 0)
|
|
61
|
+
return null;
|
|
62
|
+
let payload;
|
|
63
|
+
try {
|
|
64
|
+
const unverified = decodePayload(token);
|
|
65
|
+
if (process.env['AUTH_TRACE'] === 'true' || process.env['LOG_LEVEL'] === 'trace') {
|
|
66
|
+
structuredLogger.info(`[auth] TRACE Bearer unverified payload raw=${JSON.stringify(unverified)}`);
|
|
67
|
+
}
|
|
68
|
+
const iss = typeof unverified['iss'] === 'string' ? unverified['iss'] : undefined;
|
|
69
|
+
if (!iss || !trustedIssuers.includes(iss)) {
|
|
70
|
+
structuredLogger.info(`[auth] Bearer rejected: issuer not trusted token_iss=${iss ?? 'missing'} trusted=${JSON.stringify(trustedIssuers)}`);
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
const jwks = getJwksForIssuer(iss);
|
|
74
|
+
const getKey = (protectedHeader) => jwks(protectedHeader);
|
|
75
|
+
const { payload: p } = await jwtVerify(token, getKey, { issuer: iss });
|
|
76
|
+
payload = p;
|
|
77
|
+
if (process.env['AUTH_TRACE'] === 'true' || process.env['LOG_LEVEL'] === 'trace') {
|
|
78
|
+
structuredLogger.info(`[auth] TRACE Bearer payload raw=${JSON.stringify(payload)}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
83
|
+
structuredLogger.info(`[auth] Bearer rejected: JWT verify failed err=${msg}`);
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
const aud = payload['aud'];
|
|
87
|
+
const audList = Array.isArray(aud) ? aud : typeof aud === 'string' ? [aud] : [];
|
|
88
|
+
const issForAud = typeof payload['iss'] === 'string' ? payload['iss'] : '';
|
|
89
|
+
// Keycloak: accept aud "account", or empty aud when issuer is a Keycloak realm (some tokens omit aud).
|
|
90
|
+
const keycloakAccountAud = audList.includes('account') && issForAud.includes('/realms/');
|
|
91
|
+
const keycloakEmptyAud = audList.length === 0 && issForAud.includes('/realms/');
|
|
92
|
+
const hasAudience = allowedAudiences.some((a) => audList.includes(a)) ||
|
|
93
|
+
keycloakAccountAud ||
|
|
94
|
+
keycloakEmptyAud;
|
|
95
|
+
if (!hasAudience) {
|
|
96
|
+
structuredLogger.info(`[auth] Bearer rejected: audience not allowed token_aud=${JSON.stringify(audList)} allowed=${JSON.stringify(allowedAudiences)}`);
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
const sub = typeof payload['sub'] === 'string' ? payload['sub'] : '';
|
|
100
|
+
if (!sub)
|
|
101
|
+
return null;
|
|
102
|
+
const iss = typeof payload['iss'] === 'string' ? payload['iss'] : '';
|
|
103
|
+
const realm = realmFromIssuer(iss);
|
|
104
|
+
const groups = extractGroups(payload);
|
|
105
|
+
const group_ids = extractGroupIds(payload);
|
|
106
|
+
const result = { sub, groups, realm };
|
|
107
|
+
if (group_ids && group_ids.length > 0)
|
|
108
|
+
result.group_ids = group_ids;
|
|
109
|
+
return result;
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=bearer-validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bearer-validate.js","sourceRoot":"","sources":["../../src/http/bearer-validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import type { QdrantService } from '../services/qdrant/service.js';
|
|
3
|
+
/**
|
|
4
|
+
* Set up API route for kairos_attest (V2: no final_solution required)
|
|
5
|
+
*/
|
|
6
|
+
export declare function setupAttestRoute(app: express.Express, qdrantService: QdrantService): void;
|
|
7
|
+
//# sourceMappingURL=http-api-attest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-api-attest.d.ts","sourceRoot":"","sources":["../../src/http/http-api-attest.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAInE;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,aAAa,QAmIlF"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { structuredLogger } from '../utils/structured-logger.js';
|
|
2
|
+
import { IDGenerator } from '../services/id-generator.js';
|
|
3
|
+
import { modelStats } from '../services/stats/model-stats.js';
|
|
4
|
+
/**
|
|
5
|
+
* Set up API route for kairos_attest (V2: no final_solution required)
|
|
6
|
+
*/
|
|
7
|
+
export function setupAttestRoute(app, qdrantService) {
|
|
8
|
+
app.post('/api/kairos_attest', async (req, res) => {
|
|
9
|
+
const startTime = Date.now();
|
|
10
|
+
try {
|
|
11
|
+
const { uri, outcome, quality_bonus = 0, message, llm_model_id } = req.body;
|
|
12
|
+
if (!uri || typeof uri !== 'string') {
|
|
13
|
+
res.status(400).json({
|
|
14
|
+
error: 'INVALID_INPUT',
|
|
15
|
+
message: 'uri is required and must be a string'
|
|
16
|
+
});
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (!outcome || !['success', 'failure'].includes(outcome)) {
|
|
20
|
+
res.status(400).json({
|
|
21
|
+
error: 'INVALID_INPUT',
|
|
22
|
+
message: 'outcome is required and must be "success" or "failure"'
|
|
23
|
+
});
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (!message || typeof message !== 'string') {
|
|
27
|
+
res.status(400).json({
|
|
28
|
+
error: 'INVALID_INPUT',
|
|
29
|
+
message: 'message is required and must be a string'
|
|
30
|
+
});
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
structuredLogger.info(`-> POST /api/kairos_attest (uri: ${uri}, outcome: ${outcome})`);
|
|
34
|
+
const modelIdentity = {
|
|
35
|
+
modelId: llm_model_id || 'http-api-attest',
|
|
36
|
+
provider: 'unknown',
|
|
37
|
+
family: 'unknown'
|
|
38
|
+
};
|
|
39
|
+
const qdrantUuid = IDGenerator.qdrantIdFromUri(uri);
|
|
40
|
+
const basicQualityBonus = outcome === 'success' ? 1 : -0.2;
|
|
41
|
+
const currentPoint = await qdrantService.retrieveById(qdrantUuid);
|
|
42
|
+
if (!currentPoint) {
|
|
43
|
+
res.status(404).json({
|
|
44
|
+
error: 'NOT_FOUND',
|
|
45
|
+
message: `Memory not found: ${uri}`
|
|
46
|
+
});
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const currentMetrics = currentPoint.payload?.quality_metrics || {};
|
|
50
|
+
const implementationBonus = await modelStats.calculateImplementationBonus(currentMetrics, modelIdentity.modelId, outcome);
|
|
51
|
+
const totalQualityBonus = basicQualityBonus + implementationBonus + quality_bonus;
|
|
52
|
+
const metricsUpdate = {
|
|
53
|
+
retrievalCount: 1,
|
|
54
|
+
successCount: outcome === 'success' ? 1 : 0,
|
|
55
|
+
failureCount: outcome === 'failure' ? 1 : 0,
|
|
56
|
+
lastRated: new Date().toISOString(),
|
|
57
|
+
lastRater: modelIdentity.modelId,
|
|
58
|
+
qualityBonus: totalQualityBonus
|
|
59
|
+
};
|
|
60
|
+
if (message) {
|
|
61
|
+
metricsUpdate.usageContext = message;
|
|
62
|
+
}
|
|
63
|
+
await qdrantService.updateQualityMetrics(qdrantUuid, metricsUpdate);
|
|
64
|
+
if (currentPoint.payload) {
|
|
65
|
+
const { description_short, domain, task, type, tags } = currentPoint.payload;
|
|
66
|
+
const updatedQualityMetadata = modelStats.calculateStepQualityMetadata(description_short || 'Knowledge step', domain || 'general', task || 'general', type || 'context', tags || [], outcome);
|
|
67
|
+
await qdrantService.updateQualityMetadata(qdrantUuid, {
|
|
68
|
+
step_quality_score: updatedQualityMetadata.step_quality_score,
|
|
69
|
+
step_quality: updatedQualityMetadata.step_quality
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
await modelStats.processQualityFeedback(modelIdentity.modelId, uri, outcome, totalQualityBonus);
|
|
73
|
+
if (implementationBonus > 0) {
|
|
74
|
+
await modelStats.updateImplementationBonus(modelIdentity.modelId, implementationBonus);
|
|
75
|
+
}
|
|
76
|
+
const result = {
|
|
77
|
+
uri: uri,
|
|
78
|
+
outcome: outcome,
|
|
79
|
+
quality_bonus: totalQualityBonus,
|
|
80
|
+
message,
|
|
81
|
+
rated_at: new Date().toISOString()
|
|
82
|
+
};
|
|
83
|
+
const duration = Date.now() - startTime;
|
|
84
|
+
structuredLogger.info(`kairos_attest completed in ${duration}ms`);
|
|
85
|
+
res.status(200).json({
|
|
86
|
+
results: [result],
|
|
87
|
+
total_rated: 1,
|
|
88
|
+
total_failed: 0,
|
|
89
|
+
metadata: { duration_ms: duration }
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
const duration = Date.now() - startTime;
|
|
94
|
+
structuredLogger.error(`kairos_attest failed in ${duration}ms`, error);
|
|
95
|
+
res.status(500).json({
|
|
96
|
+
error: 'ATTEST_FAILED',
|
|
97
|
+
message: error instanceof Error ? error.message : 'Failed to attest step completion',
|
|
98
|
+
duration_ms: duration
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=http-api-attest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-api-attest.js","sourceRoot":"","sources":["../../src/http/http-api-attest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import express from 'express';
|
|
2
|
+
import { MemoryQdrantStore } from '../services/memory/store.js';
|
|
3
|
+
import type { QdrantService } from '../services/qdrant/service.js';
|
|
4
|
+
/**
|
|
5
|
+
* Set up API route for kairos_begin (V2: auto-redirect, no next_step/protocol_status/attest_required)
|
|
6
|
+
*/
|
|
7
|
+
export declare function setupBeginStepRoute(app: express.Express, memoryStore: MemoryQdrantStore, qdrantService: QdrantService): void;
|
|
8
|
+
//# sourceMappingURL=http-api-begin-step.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-api-begin-step.d.ts","sourceRoot":"","sources":["../../src/http/http-api-begin-step.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAOnE;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,EAAE,aAAa,GAAG,IAAI,CAgH5H"}
|