kairo-mcp 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1122 -0
- package/LICENSE +21 -0
- package/README.md +662 -0
- package/dist/cli/cli.d.ts +3 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +226 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/commands.d.ts +10 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +938 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/flags.d.ts +30 -0
- package/dist/cli/flags.d.ts.map +1 -0
- package/dist/cli/flags.js +90 -0
- package/dist/cli/flags.js.map +1 -0
- package/dist/cli/output.d.ts +69 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +166 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/types.d.ts +34 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/contracts/migrations.d.ts +31 -0
- package/dist/contracts/migrations.d.ts.map +1 -0
- package/dist/contracts/migrations.js +71 -0
- package/dist/contracts/migrations.js.map +1 -0
- package/dist/contracts/schemas.d.ts +53 -0
- package/dist/contracts/schemas.d.ts.map +1 -0
- package/dist/contracts/schemas.js +27 -0
- package/dist/contracts/schemas.js.map +1 -0
- package/dist/contracts/stability.d.ts +32 -0
- package/dist/contracts/stability.d.ts.map +1 -0
- package/dist/contracts/stability.js +140 -0
- package/dist/contracts/stability.js.map +1 -0
- package/dist/contracts/zodSchemas.d.ts +811 -0
- package/dist/contracts/zodSchemas.d.ts.map +1 -0
- package/dist/contracts/zodSchemas.js +139 -0
- package/dist/contracts/zodSchemas.js.map +1 -0
- package/dist/core/brief/budget.d.ts +21 -0
- package/dist/core/brief/budget.d.ts.map +1 -0
- package/dist/core/brief/budget.js +42 -0
- package/dist/core/brief/budget.js.map +1 -0
- package/dist/core/checkpoint/checkpointManager.d.ts +29 -0
- package/dist/core/checkpoint/checkpointManager.d.ts.map +1 -0
- package/dist/core/checkpoint/checkpointManager.js +49 -0
- package/dist/core/checkpoint/checkpointManager.js.map +1 -0
- package/dist/core/compaction/compactor.d.ts +40 -0
- package/dist/core/compaction/compactor.d.ts.map +1 -0
- package/dist/core/compaction/compactor.js +168 -0
- package/dist/core/compaction/compactor.js.map +1 -0
- package/dist/core/continuation/continuationBuilder.d.ts +19 -0
- package/dist/core/continuation/continuationBuilder.d.ts.map +1 -0
- package/dist/core/continuation/continuationBuilder.js +184 -0
- package/dist/core/continuation/continuationBuilder.js.map +1 -0
- package/dist/core/coordination/coordinationManager.d.ts +34 -0
- package/dist/core/coordination/coordinationManager.d.ts.map +1 -0
- package/dist/core/coordination/coordinationManager.js +253 -0
- package/dist/core/coordination/coordinationManager.js.map +1 -0
- package/dist/core/coordination/types.d.ts +52 -0
- package/dist/core/coordination/types.d.ts.map +1 -0
- package/dist/core/coordination/types.js +6 -0
- package/dist/core/coordination/types.js.map +1 -0
- package/dist/core/github/changelog.d.ts +9 -0
- package/dist/core/github/changelog.d.ts.map +1 -0
- package/dist/core/github/changelog.js +41 -0
- package/dist/core/github/changelog.js.map +1 -0
- package/dist/core/github/commitMessage.d.ts +4 -0
- package/dist/core/github/commitMessage.d.ts.map +1 -0
- package/dist/core/github/commitMessage.js +125 -0
- package/dist/core/github/commitMessage.js.map +1 -0
- package/dist/core/github/gitContext.d.ts +3 -0
- package/dist/core/github/gitContext.d.ts.map +1 -0
- package/dist/core/github/gitContext.js +67 -0
- package/dist/core/github/gitContext.js.map +1 -0
- package/dist/core/github/releasePlan.d.ts +8 -0
- package/dist/core/github/releasePlan.d.ts.map +1 -0
- package/dist/core/github/releasePlan.js +56 -0
- package/dist/core/github/releasePlan.js.map +1 -0
- package/dist/core/github/semver.d.ts +11 -0
- package/dist/core/github/semver.d.ts.map +1 -0
- package/dist/core/github/semver.js +23 -0
- package/dist/core/github/semver.js.map +1 -0
- package/dist/core/github/types.d.ts +36 -0
- package/dist/core/github/types.d.ts.map +1 -0
- package/dist/core/github/types.js +2 -0
- package/dist/core/github/types.js.map +1 -0
- package/dist/core/graph/derived.d.ts +6 -0
- package/dist/core/graph/derived.d.ts.map +1 -0
- package/dist/core/graph/derived.js +133 -0
- package/dist/core/graph/derived.js.map +1 -0
- package/dist/core/graph/graphEngine.d.ts +11 -0
- package/dist/core/graph/graphEngine.d.ts.map +1 -0
- package/dist/core/graph/graphEngine.js +28 -0
- package/dist/core/graph/graphEngine.js.map +1 -0
- package/dist/core/graph/imports.d.ts +19 -0
- package/dist/core/graph/imports.d.ts.map +1 -0
- package/dist/core/graph/imports.js +0 -0
- package/dist/core/graph/imports.js.map +1 -0
- package/dist/core/graph/mermaid.d.ts +6 -0
- package/dist/core/graph/mermaid.d.ts.map +1 -0
- package/dist/core/graph/mermaid.js +40 -0
- package/dist/core/graph/mermaid.js.map +1 -0
- package/dist/core/graph/moduleGraph.d.ts +27 -0
- package/dist/core/graph/moduleGraph.d.ts.map +1 -0
- package/dist/core/graph/moduleGraph.js +186 -0
- package/dist/core/graph/moduleGraph.js.map +1 -0
- package/dist/core/graph/types.d.ts +32 -0
- package/dist/core/graph/types.d.ts.map +1 -0
- package/dist/core/graph/types.js +2 -0
- package/dist/core/graph/types.js.map +1 -0
- package/dist/core/query/queryEngine.d.ts +26 -0
- package/dist/core/query/queryEngine.d.ts.map +1 -0
- package/dist/core/query/queryEngine.js +258 -0
- package/dist/core/query/queryEngine.js.map +1 -0
- package/dist/core/query/types.d.ts +70 -0
- package/dist/core/query/types.d.ts.map +1 -0
- package/dist/core/query/types.js +6 -0
- package/dist/core/query/types.js.map +1 -0
- package/dist/core/repo/fingerprint.d.ts +0 -0
- package/dist/core/repo/fingerprint.d.ts.map +1 -0
- package/dist/core/repo/fingerprint.js +17 -0
- package/dist/core/repo/fingerprint.js.map +1 -0
- package/dist/core/repo/frameworkDetectors.d.ts +14 -0
- package/dist/core/repo/frameworkDetectors.d.ts.map +1 -0
- package/dist/core/repo/frameworkDetectors.js +151 -0
- package/dist/core/repo/frameworkDetectors.js.map +1 -0
- package/dist/core/repo/repoScanner.d.ts +20 -0
- package/dist/core/repo/repoScanner.d.ts.map +1 -0
- package/dist/core/repo/repoScanner.js +290 -0
- package/dist/core/repo/repoScanner.js.map +1 -0
- package/dist/core/repo/summary.d.ts +7 -0
- package/dist/core/repo/summary.d.ts.map +1 -0
- package/dist/core/repo/summary.js +34 -0
- package/dist/core/repo/summary.js.map +1 -0
- package/dist/core/repo/types.d.ts +62 -0
- package/dist/core/repo/types.d.ts.map +1 -0
- package/dist/core/repo/types.js +10 -0
- package/dist/core/repo/types.js.map +1 -0
- package/dist/core/risk/guardrail.d.ts +3 -0
- package/dist/core/risk/guardrail.d.ts.map +1 -0
- package/dist/core/risk/guardrail.js +47 -0
- package/dist/core/risk/guardrail.js.map +1 -0
- package/dist/core/risk/riskEngine.d.ts +8 -0
- package/dist/core/risk/riskEngine.d.ts.map +1 -0
- package/dist/core/risk/riskEngine.js +112 -0
- package/dist/core/risk/riskEngine.js.map +1 -0
- package/dist/core/risk/riskHeuristics.d.ts +4 -0
- package/dist/core/risk/riskHeuristics.d.ts.map +1 -0
- package/dist/core/risk/riskHeuristics.js +36 -0
- package/dist/core/risk/riskHeuristics.js.map +1 -0
- package/dist/core/salience/config.d.ts +14 -0
- package/dist/core/salience/config.d.ts.map +1 -0
- package/dist/core/salience/config.js +87 -0
- package/dist/core/salience/config.js.map +1 -0
- package/dist/core/salience/salienceEngine.d.ts +16 -0
- package/dist/core/salience/salienceEngine.d.ts.map +1 -0
- package/dist/core/salience/salienceEngine.js +64 -0
- package/dist/core/salience/salienceEngine.js.map +1 -0
- package/dist/core/salience/signals.d.ts +4 -0
- package/dist/core/salience/signals.d.ts.map +1 -0
- package/dist/core/salience/signals.js +143 -0
- package/dist/core/salience/signals.js.map +1 -0
- package/dist/core/salience/types.d.ts +69 -0
- package/dist/core/salience/types.d.ts.map +1 -0
- package/dist/core/salience/types.js +7 -0
- package/dist/core/salience/types.js.map +1 -0
- package/dist/core/session/eventPayloads.d.ts +92 -0
- package/dist/core/session/eventPayloads.d.ts.map +1 -0
- package/dist/core/session/eventPayloads.js +2 -0
- package/dist/core/session/eventPayloads.js.map +1 -0
- package/dist/core/session/reducer.d.ts +14 -0
- package/dist/core/session/reducer.d.ts.map +1 -0
- package/dist/core/session/reducer.js +181 -0
- package/dist/core/session/reducer.js.map +1 -0
- package/dist/core/session/sessionManager.d.ts +252 -0
- package/dist/core/session/sessionManager.d.ts.map +1 -0
- package/dist/core/session/sessionManager.js +655 -0
- package/dist/core/session/sessionManager.js.map +1 -0
- package/dist/core/telemetry/analytics.d.ts +24 -0
- package/dist/core/telemetry/analytics.d.ts.map +1 -0
- package/dist/core/telemetry/analytics.js +167 -0
- package/dist/core/telemetry/analytics.js.map +1 -0
- package/dist/core/telemetry/exporter.d.ts +17 -0
- package/dist/core/telemetry/exporter.d.ts.map +1 -0
- package/dist/core/telemetry/exporter.js +31 -0
- package/dist/core/telemetry/exporter.js.map +1 -0
- package/dist/core/telemetry/recorder.d.ts +19 -0
- package/dist/core/telemetry/recorder.d.ts.map +1 -0
- package/dist/core/telemetry/recorder.js +43 -0
- package/dist/core/telemetry/recorder.js.map +1 -0
- package/dist/core/telemetry/reports.d.ts +6 -0
- package/dist/core/telemetry/reports.d.ts.map +1 -0
- package/dist/core/telemetry/reports.js +84 -0
- package/dist/core/telemetry/reports.js.map +1 -0
- package/dist/core/telemetry/types.d.ts +82 -0
- package/dist/core/telemetry/types.d.ts.map +1 -0
- package/dist/core/telemetry/types.js +9 -0
- package/dist/core/telemetry/types.js.map +1 -0
- package/dist/core/vector/chunking/memoryChunker.d.ts +10 -0
- package/dist/core/vector/chunking/memoryChunker.d.ts.map +1 -0
- package/dist/core/vector/chunking/memoryChunker.js +202 -0
- package/dist/core/vector/chunking/memoryChunker.js.map +1 -0
- package/dist/core/vector/compression/architectureDigest.d.ts +12 -0
- package/dist/core/vector/compression/architectureDigest.d.ts.map +1 -0
- package/dist/core/vector/compression/architectureDigest.js +37 -0
- package/dist/core/vector/compression/architectureDigest.js.map +1 -0
- package/dist/core/vector/embedding/deterministicEmbedder.d.ts +10 -0
- package/dist/core/vector/embedding/deterministicEmbedder.d.ts.map +1 -0
- package/dist/core/vector/embedding/deterministicEmbedder.js +84 -0
- package/dist/core/vector/embedding/deterministicEmbedder.js.map +1 -0
- package/dist/core/vector/memory/memoryEngine.d.ts +56 -0
- package/dist/core/vector/memory/memoryEngine.d.ts.map +1 -0
- package/dist/core/vector/memory/memoryEngine.js +204 -0
- package/dist/core/vector/memory/memoryEngine.js.map +1 -0
- package/dist/core/vector/memory/memoryFingerprint.d.ts +12 -0
- package/dist/core/vector/memory/memoryFingerprint.d.ts.map +1 -0
- package/dist/core/vector/memory/memoryFingerprint.js +33 -0
- package/dist/core/vector/memory/memoryFingerprint.js.map +1 -0
- package/dist/core/vector/providers/deterministicProvider.d.ts +14 -0
- package/dist/core/vector/providers/deterministicProvider.d.ts.map +1 -0
- package/dist/core/vector/providers/deterministicProvider.js +22 -0
- package/dist/core/vector/providers/deterministicProvider.js.map +1 -0
- package/dist/core/vector/providers/httpEmbeddingProvider.d.ts +32 -0
- package/dist/core/vector/providers/httpEmbeddingProvider.d.ts.map +1 -0
- package/dist/core/vector/providers/httpEmbeddingProvider.js +93 -0
- package/dist/core/vector/providers/httpEmbeddingProvider.js.map +1 -0
- package/dist/core/vector/providers/registry.d.ts +9 -0
- package/dist/core/vector/providers/registry.d.ts.map +1 -0
- package/dist/core/vector/providers/registry.js +79 -0
- package/dist/core/vector/providers/registry.js.map +1 -0
- package/dist/core/vector/providers/types.d.ts +23 -0
- package/dist/core/vector/providers/types.d.ts.map +1 -0
- package/dist/core/vector/providers/types.js +2 -0
- package/dist/core/vector/providers/types.js.map +1 -0
- package/dist/core/vector/retrieval/hybridRetriever.d.ts +37 -0
- package/dist/core/vector/retrieval/hybridRetriever.d.ts.map +1 -0
- package/dist/core/vector/retrieval/hybridRetriever.js +131 -0
- package/dist/core/vector/retrieval/hybridRetriever.js.map +1 -0
- package/dist/core/vector/types.d.ts +87 -0
- package/dist/core/vector/types.d.ts.map +1 -0
- package/dist/core/vector/types.js +6 -0
- package/dist/core/vector/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/inspect/cli.d.ts +3 -0
- package/dist/inspect/cli.d.ts.map +1 -0
- package/dist/inspect/cli.js +40 -0
- package/dist/inspect/cli.js.map +1 -0
- package/dist/inspect/projections.d.ts +141 -0
- package/dist/inspect/projections.d.ts.map +1 -0
- package/dist/inspect/projections.js +311 -0
- package/dist/inspect/projections.js.map +1 -0
- package/dist/inspect/render.d.ts +27 -0
- package/dist/inspect/render.d.ts.map +1 -0
- package/dist/inspect/render.js +325 -0
- package/dist/inspect/render.js.map +1 -0
- package/dist/inspect/server.d.ts +18 -0
- package/dist/inspect/server.d.ts.map +1 -0
- package/dist/inspect/server.js +112 -0
- package/dist/inspect/server.js.map +1 -0
- package/dist/perf/index.d.ts +24 -0
- package/dist/perf/index.d.ts.map +1 -0
- package/dist/perf/index.js +38 -0
- package/dist/perf/index.js.map +1 -0
- package/dist/perf/report.d.ts +8 -0
- package/dist/perf/report.d.ts.map +1 -0
- package/dist/perf/report.js +52 -0
- package/dist/perf/report.js.map +1 -0
- package/dist/perf/runner.d.ts +29 -0
- package/dist/perf/runner.d.ts.map +1 -0
- package/dist/perf/runner.js +74 -0
- package/dist/perf/runner.js.map +1 -0
- package/dist/perf/scenarios.d.ts +8 -0
- package/dist/perf/scenarios.d.ts.map +1 -0
- package/dist/perf/scenarios.js +119 -0
- package/dist/perf/scenarios.js.map +1 -0
- package/dist/perf/types.d.ts +32 -0
- package/dist/perf/types.d.ts.map +1 -0
- package/dist/perf/types.js +6 -0
- package/dist/perf/types.js.map +1 -0
- package/dist/plugins/loader.d.ts +78 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +193 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/types.d.ts +38 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +10 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/pressure/pressureModel.d.ts +6 -0
- package/dist/pressure/pressureModel.d.ts.map +1 -0
- package/dist/pressure/pressureModel.js +102 -0
- package/dist/pressure/pressureModel.js.map +1 -0
- package/dist/prompts/continuityPrompt.d.ts +7 -0
- package/dist/prompts/continuityPrompt.d.ts.map +1 -0
- package/dist/prompts/continuityPrompt.js +43 -0
- package/dist/prompts/continuityPrompt.js.map +1 -0
- package/dist/sdk/index.d.ts +53 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +130 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/security/patterns.d.ts +16 -0
- package/dist/security/patterns.d.ts.map +1 -0
- package/dist/security/patterns.js +61 -0
- package/dist/security/patterns.js.map +1 -0
- package/dist/security/redactor.d.ts +20 -0
- package/dist/security/redactor.d.ts.map +1 -0
- package/dist/security/redactor.js +58 -0
- package/dist/security/redactor.js.map +1 -0
- package/dist/server/createServer.d.ts +10 -0
- package/dist/server/createServer.d.ts.map +1 -0
- package/dist/server/createServer.js +60 -0
- package/dist/server/createServer.js.map +1 -0
- package/dist/server/registerTools.d.ts +4 -0
- package/dist/server/registerTools.d.ts.map +1 -0
- package/dist/server/registerTools.js +1086 -0
- package/dist/server/registerTools.js.map +1 -0
- package/dist/server/responses.d.ts +17 -0
- package/dist/server/responses.d.ts.map +1 -0
- package/dist/server/responses.js +21 -0
- package/dist/server/responses.js.map +1 -0
- package/dist/snapshot/export.d.ts +26 -0
- package/dist/snapshot/export.d.ts.map +1 -0
- package/dist/snapshot/export.js +164 -0
- package/dist/snapshot/export.js.map +1 -0
- package/dist/snapshot/import.d.ts +34 -0
- package/dist/snapshot/import.d.ts.map +1 -0
- package/dist/snapshot/import.js +114 -0
- package/dist/snapshot/import.js.map +1 -0
- package/dist/snapshot/types.d.ts +63 -0
- package/dist/snapshot/types.d.ts.map +1 -0
- package/dist/snapshot/types.js +2 -0
- package/dist/snapshot/types.js.map +1 -0
- package/dist/storage/faultAdapter.d.ts +64 -0
- package/dist/storage/faultAdapter.d.ts.map +1 -0
- package/dist/storage/faultAdapter.js +134 -0
- package/dist/storage/faultAdapter.js.map +1 -0
- package/dist/storage/fileStorageAdapter.d.ts +55 -0
- package/dist/storage/fileStorageAdapter.d.ts.map +1 -0
- package/dist/storage/fileStorageAdapter.js +219 -0
- package/dist/storage/fileStorageAdapter.js.map +1 -0
- package/dist/storage/paths.d.ts +30 -0
- package/dist/storage/paths.d.ts.map +1 -0
- package/dist/storage/paths.js +32 -0
- package/dist/storage/paths.js.map +1 -0
- package/dist/storage/quarantine.d.ts +36 -0
- package/dist/storage/quarantine.d.ts.map +1 -0
- package/dist/storage/quarantine.js +26 -0
- package/dist/storage/quarantine.js.map +1 -0
- package/dist/storage/redactingAdapter.d.ts +13 -0
- package/dist/storage/redactingAdapter.d.ts.map +1 -0
- package/dist/storage/redactingAdapter.js +91 -0
- package/dist/storage/redactingAdapter.js.map +1 -0
- package/dist/storage/storageAdapter.d.ts +46 -0
- package/dist/storage/storageAdapter.d.ts.map +1 -0
- package/dist/storage/storageAdapter.js +2 -0
- package/dist/storage/storageAdapter.js.map +1 -0
- package/dist/types/domain.d.ts +139 -0
- package/dist/types/domain.d.ts.map +1 -0
- package/dist/types/domain.js +9 -0
- package/dist/types/domain.js.map +1 -0
- package/dist/types/events.d.ts +28 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +7 -0
- package/dist/types/events.js.map +1 -0
- package/dist/utils/errors.d.ts +6 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +10 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/ids.d.ts +7 -0
- package/dist/utils/ids.d.ts.map +1 -0
- package/dist/utils/ids.js +22 -0
- package/dist/utils/ids.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +26 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/time.d.ts +8 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +11 -0
- package/dist/utils/time.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin manifest contract (v0.9.4, ADR-0015).
|
|
3
|
+
*
|
|
4
|
+
* **Manifest-only.** Kairo does NOT load or execute plugin code in-process.
|
|
5
|
+
* A plugin declares itself, its capabilities, and (optionally) an external
|
|
6
|
+
* MCP server config that the host (Claude Desktop, Cursor, the IDE) can
|
|
7
|
+
* wire up. The host runs it, not Kairo.
|
|
8
|
+
*/
|
|
9
|
+
export type PluginCapability = 'read-events' | 'read-checkpoints' | 'read-telemetry' | 'render-reports' | 'extend-inspect' | 'embedder-provider';
|
|
10
|
+
export interface PluginMcpServerSpec {
|
|
11
|
+
command: string;
|
|
12
|
+
args?: string[];
|
|
13
|
+
env?: Record<string, string>;
|
|
14
|
+
}
|
|
15
|
+
export interface KairoPluginManifest {
|
|
16
|
+
apiVersion: 'kairo.plugin/1';
|
|
17
|
+
name: string;
|
|
18
|
+
version: string;
|
|
19
|
+
description: string;
|
|
20
|
+
/** Coarse-grained UI/discovery hints — declarations, not enforcement. */
|
|
21
|
+
capabilities: PluginCapability[];
|
|
22
|
+
/** Semver range of Kairo this plugin targets, e.g. "^0.9 || ^1". */
|
|
23
|
+
kairoCompatibility: string;
|
|
24
|
+
/** Optional external MCP server config; the HOST loads it, not Kairo. */
|
|
25
|
+
mcpServer?: PluginMcpServerSpec;
|
|
26
|
+
homepage?: string;
|
|
27
|
+
author?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface LoadedPlugin {
|
|
30
|
+
manifest: KairoPluginManifest;
|
|
31
|
+
/** Absolute path to the manifest file on disk. */
|
|
32
|
+
manifestPath: string;
|
|
33
|
+
/** True if `kairoCompatibility` matches the running build. */
|
|
34
|
+
compatible: boolean;
|
|
35
|
+
/** Reason a plugin was rejected, if any. */
|
|
36
|
+
warning?: string;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,kBAAkB,GAClB,gBAAgB,GAChB,gBAAgB,GAChB,gBAAgB,GAChB,mBAAmB,CAAC;AAExB,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,gBAAgB,CAAC;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,oEAAoE;IACpE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,yEAAyE;IACzE,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,kDAAkD;IAClD,YAAY,EAAE,MAAM,CAAC;IACrB,8DAA8D;IAC9D,UAAU,EAAE,OAAO,CAAC;IACpB,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin manifest contract (v0.9.4, ADR-0015).
|
|
3
|
+
*
|
|
4
|
+
* **Manifest-only.** Kairo does NOT load or execute plugin code in-process.
|
|
5
|
+
* A plugin declares itself, its capabilities, and (optionally) an external
|
|
6
|
+
* MCP server config that the host (Claude Desktop, Cursor, the IDE) can
|
|
7
|
+
* wire up. The host runs it, not Kairo.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PressureSignals, PressureSnapshot, DirectiveLevel } from '../types/domain.js';
|
|
2
|
+
export declare function directiveFor(score: number): DirectiveLevel;
|
|
3
|
+
export declare function computePressure(signals: PressureSignals): PressureSnapshot;
|
|
4
|
+
/** One-line directive the tool layer appends to every response. */
|
|
5
|
+
export declare function directiveBanner(p: PressureSnapshot): string;
|
|
6
|
+
//# sourceMappingURL=pressureModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pressureModel.d.ts","sourceRoot":"","sources":["../../src/pressure/pressureModel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAqF5F,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,CAI1D;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,gBAAgB,CAqB1E;AAED,mEAAmE;AACnE,wBAAgB,eAAe,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAS3D"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
const SPECS = [
|
|
2
|
+
{
|
|
3
|
+
key: 'toolCalls',
|
|
4
|
+
weight: 0.18,
|
|
5
|
+
full: 120,
|
|
6
|
+
reason: (v) => `high tool-call volume (${v})`,
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
key: 'compactions',
|
|
10
|
+
weight: 0.18,
|
|
11
|
+
full: 3,
|
|
12
|
+
reason: (v) => `${v} context compaction(s) reported (strong loss signal)`,
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
key: 'repeatedRereads',
|
|
16
|
+
weight: 0.16,
|
|
17
|
+
full: 14,
|
|
18
|
+
reason: (v) => `${v} re-reads of already-seen files (context-loss proxy)`,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
key: 'changedFiles',
|
|
22
|
+
weight: 0.12,
|
|
23
|
+
full: 40,
|
|
24
|
+
reason: (v) => `${v} files changed in one session`,
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
key: 'clarificationLoops',
|
|
28
|
+
weight: 0.1,
|
|
29
|
+
full: 5,
|
|
30
|
+
reason: (v) => `${v} clarification loop(s) — agent re-asking for context`,
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
key: 'retries',
|
|
34
|
+
weight: 0.1,
|
|
35
|
+
full: 12,
|
|
36
|
+
reason: (v) => `${v} retry loops`,
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
key: 'unresolvedErrors',
|
|
40
|
+
weight: 0.08,
|
|
41
|
+
full: 8,
|
|
42
|
+
reason: (v) => `${v} unresolved errors accumulating`,
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
key: 'cumulativeDiffBytes',
|
|
46
|
+
weight: 0.05,
|
|
47
|
+
full: 400_000,
|
|
48
|
+
reason: (v) => `${Math.round(v / 1000)}KB of cumulative tracked diff`,
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
key: 'elapsedMs',
|
|
52
|
+
weight: 0.03,
|
|
53
|
+
full: 90 * 60_000,
|
|
54
|
+
reason: (v) => `${Math.round(v / 60_000)}min elapsed`,
|
|
55
|
+
},
|
|
56
|
+
];
|
|
57
|
+
const SOON_THRESHOLD = 0.6;
|
|
58
|
+
const NOW_THRESHOLD = 0.8;
|
|
59
|
+
/** A signal contributes a "reason" once it is this saturated on its own. */
|
|
60
|
+
const REASON_SATURATION = 0.7;
|
|
61
|
+
function saturate(value, full) {
|
|
62
|
+
if (value <= 0)
|
|
63
|
+
return 0;
|
|
64
|
+
return Math.min(1, value / full);
|
|
65
|
+
}
|
|
66
|
+
export function directiveFor(score) {
|
|
67
|
+
if (score >= NOW_THRESHOLD)
|
|
68
|
+
return 'CHECKPOINT_NOW';
|
|
69
|
+
if (score >= SOON_THRESHOLD)
|
|
70
|
+
return 'CHECKPOINT_SOON';
|
|
71
|
+
return 'CONTINUE';
|
|
72
|
+
}
|
|
73
|
+
export function computePressure(signals) {
|
|
74
|
+
let score = 0;
|
|
75
|
+
const reasons = [];
|
|
76
|
+
for (const spec of SPECS) {
|
|
77
|
+
const raw = signals[spec.key];
|
|
78
|
+
const norm = saturate(raw, spec.full);
|
|
79
|
+
score += norm * spec.weight;
|
|
80
|
+
if (norm >= REASON_SATURATION) {
|
|
81
|
+
reasons.push(spec.reason(raw));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
score = Math.min(1, Math.max(0, Number(score.toFixed(4))));
|
|
85
|
+
const directive = directiveFor(score);
|
|
86
|
+
if (reasons.length === 0 && directive !== 'CONTINUE') {
|
|
87
|
+
reasons.push('cumulative pressure across several signals');
|
|
88
|
+
}
|
|
89
|
+
return { score, directive, signals, reasons };
|
|
90
|
+
}
|
|
91
|
+
/** One-line directive the tool layer appends to every response. */
|
|
92
|
+
export function directiveBanner(p) {
|
|
93
|
+
switch (p.directive) {
|
|
94
|
+
case 'CHECKPOINT_NOW':
|
|
95
|
+
return `⛔ KAIRO DIRECTIVE: CHECKPOINT_NOW (pressure ${p.score}). Call kairo_checkpoint before any further risky work.`;
|
|
96
|
+
case 'CHECKPOINT_SOON':
|
|
97
|
+
return `⚠️ KAIRO DIRECTIVE: CHECKPOINT_SOON (pressure ${p.score}). Finish the current step, then kairo_checkpoint.`;
|
|
98
|
+
case 'CONTINUE':
|
|
99
|
+
return `✅ KAIRO: CONTINUE (pressure ${p.score}).`;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=pressureModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pressureModel.js","sourceRoot":"","sources":["../../src/pressure/pressureModel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The cooperation contract, shipped as a first-class MCP prompt. Kairo cannot observe
|
|
3
|
+
* the agent's context budget, so its value depends on the agent following this. We make
|
|
4
|
+
* the contract explicit and the incentive obvious (skip rescanning).
|
|
5
|
+
*/
|
|
6
|
+
export declare const CONTINUITY_PROMPT_TEXT = "You are working through Kairo, a persistent engineering memory layer. Follow this contract:\n\n1. START: Call `kairo_session_start` with the agent name and the task. Kairo returns a\n continuation brief from prior work \u2014 READ IT and resume from it. Do NOT rescan the\n whole repository; inspect only the files the brief lists unless they prove\n insufficient. For structure, call `kairo_graph` (module/service/architecture/\n pipeline) instead of walking the tree yourself.\n\n2. WORK: As you make changes, call `kairo_record`:\n - kind:\"file\" for each file you change (Kairo infers risk if you omit it)\n - kind:\"decision\" for architectural choices (include the rationale)\n - kind:\"error\" / \"error-resolved\" as failures appear and are fixed\n - kind:\"retry\" when you re-attempt something that failed\n - kind:\"pending\" / \"completed\" / \"blocker\" to track work items\n - kind:\"compaction\" if your context was summarized/compacted, and\n kind:\"clarification\" if you had to re-ask the user \u2014 these are the strongest\n context-loss signals you can give Kairo; always report them.\n\n3. PULSE: Every few steps call `kairo_heartbeat`. If you re-read a file you had\n already read, pass its path as `reread` \u2014 repeated re-reads are a strong signal\n that context is being lost.\n\n4. ASSESS: Before a risky change (auth, payments, infra, deletions, schema), call\n `kairo_assess` with the files/intent. It returns ALLOW / CAUTION / HOLD and gets\n stricter as pressure rises. On HOLD, checkpoint instead of making the change.\n\n5. DIRECTIVE: Every Kairo response carries a directive. On `CHECKPOINT_SOON` finish\n the current step then checkpoint. On `CHECKPOINT_NOW` call `kairo_checkpoint`\n immediately, before any further risky change.\n\n6. SHIP: When ready to commit, call `kairo_commit_message` (and\n `kairo_changelog` / `kairo_release_plan` at release time). Kairo proposes the\n text from its memory; YOU run git \u2014 Kairo never commits, tags, or pushes.\n\n7. END: Call `kairo_session_end` so the next agent gets a clean, exact handoff.\n\nTreat Kairo as a senior engineer supervising you: it remembers so you don't have to.";
|
|
7
|
+
//# sourceMappingURL=continuityPrompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuityPrompt.d.ts","sourceRoot":"","sources":["../../src/prompts/continuityPrompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,yqEAoCkD,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The cooperation contract, shipped as a first-class MCP prompt. Kairo cannot observe
|
|
3
|
+
* the agent's context budget, so its value depends on the agent following this. We make
|
|
4
|
+
* the contract explicit and the incentive obvious (skip rescanning).
|
|
5
|
+
*/
|
|
6
|
+
export const CONTINUITY_PROMPT_TEXT = `You are working through Kairo, a persistent engineering memory layer. Follow this contract:
|
|
7
|
+
|
|
8
|
+
1. START: Call \`kairo_session_start\` with the agent name and the task. Kairo returns a
|
|
9
|
+
continuation brief from prior work — READ IT and resume from it. Do NOT rescan the
|
|
10
|
+
whole repository; inspect only the files the brief lists unless they prove
|
|
11
|
+
insufficient. For structure, call \`kairo_graph\` (module/service/architecture/
|
|
12
|
+
pipeline) instead of walking the tree yourself.
|
|
13
|
+
|
|
14
|
+
2. WORK: As you make changes, call \`kairo_record\`:
|
|
15
|
+
- kind:"file" for each file you change (Kairo infers risk if you omit it)
|
|
16
|
+
- kind:"decision" for architectural choices (include the rationale)
|
|
17
|
+
- kind:"error" / "error-resolved" as failures appear and are fixed
|
|
18
|
+
- kind:"retry" when you re-attempt something that failed
|
|
19
|
+
- kind:"pending" / "completed" / "blocker" to track work items
|
|
20
|
+
- kind:"compaction" if your context was summarized/compacted, and
|
|
21
|
+
kind:"clarification" if you had to re-ask the user — these are the strongest
|
|
22
|
+
context-loss signals you can give Kairo; always report them.
|
|
23
|
+
|
|
24
|
+
3. PULSE: Every few steps call \`kairo_heartbeat\`. If you re-read a file you had
|
|
25
|
+
already read, pass its path as \`reread\` — repeated re-reads are a strong signal
|
|
26
|
+
that context is being lost.
|
|
27
|
+
|
|
28
|
+
4. ASSESS: Before a risky change (auth, payments, infra, deletions, schema), call
|
|
29
|
+
\`kairo_assess\` with the files/intent. It returns ALLOW / CAUTION / HOLD and gets
|
|
30
|
+
stricter as pressure rises. On HOLD, checkpoint instead of making the change.
|
|
31
|
+
|
|
32
|
+
5. DIRECTIVE: Every Kairo response carries a directive. On \`CHECKPOINT_SOON\` finish
|
|
33
|
+
the current step then checkpoint. On \`CHECKPOINT_NOW\` call \`kairo_checkpoint\`
|
|
34
|
+
immediately, before any further risky change.
|
|
35
|
+
|
|
36
|
+
6. SHIP: When ready to commit, call \`kairo_commit_message\` (and
|
|
37
|
+
\`kairo_changelog\` / \`kairo_release_plan\` at release time). Kairo proposes the
|
|
38
|
+
text from its memory; YOU run git — Kairo never commits, tags, or pushes.
|
|
39
|
+
|
|
40
|
+
7. END: Call \`kairo_session_end\` so the next agent gets a clean, exact handoff.
|
|
41
|
+
|
|
42
|
+
Treat Kairo as a senior engineer supervising you: it remembers so you don't have to.`;
|
|
43
|
+
//# sourceMappingURL=continuityPrompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"continuityPrompt.js","sourceRoot":"","sources":["../../src/prompts/continuityPrompt.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qFAoC+C,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { StabilityEntry, StabilityTier } from '../contracts/stability.js';
|
|
2
|
+
import type { KairoSnapshot } from '../snapshot/types.js';
|
|
3
|
+
import type { LoadedPlugin } from '../plugins/types.js';
|
|
4
|
+
import type { CheckpointListEntry, CoordinationSnapshot, GraphSummary, InspectOverview, MemoryIndexSnapshot, RiskSnapshot, SessionListEntry } from '../inspect/projections.js';
|
|
5
|
+
import type { Checkpoint, SessionState } from '../types/domain.js';
|
|
6
|
+
export interface KairoClientOptions {
|
|
7
|
+
/** Defaults to `KAIRO_PROJECT_ROOT` env or cwd. */
|
|
8
|
+
projectRoot?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class KairoClient {
|
|
11
|
+
private readonly projection;
|
|
12
|
+
private readonly paths;
|
|
13
|
+
constructor(opts?: KairoClientOptions);
|
|
14
|
+
/** Build version of the Kairo library this SDK was bundled with. */
|
|
15
|
+
static version(): string;
|
|
16
|
+
/** True if the target project has a `.kairo/` directory at all. */
|
|
17
|
+
hasKairo(): boolean;
|
|
18
|
+
overview(): Promise<InspectOverview>;
|
|
19
|
+
sessions(): Promise<SessionListEntry[]>;
|
|
20
|
+
session(id: string): Promise<SessionState | undefined>;
|
|
21
|
+
checkpoints(): Promise<CheckpointListEntry[]>;
|
|
22
|
+
checkpoint(id: string): Promise<Checkpoint | undefined>;
|
|
23
|
+
latestCheckpoint(): Promise<Checkpoint | undefined>;
|
|
24
|
+
graphs(): Promise<string[]>;
|
|
25
|
+
graph(kind: string): Promise<GraphSummary | undefined>;
|
|
26
|
+
memoryIndex(): Promise<MemoryIndexSnapshot | undefined>;
|
|
27
|
+
coordination(): Promise<CoordinationSnapshot>;
|
|
28
|
+
risk(): Promise<RiskSnapshot>;
|
|
29
|
+
/** Read a continuation brief by filename. */
|
|
30
|
+
brief(name: string): Promise<string | undefined>;
|
|
31
|
+
/** Read the latest continuation brief, if any. */
|
|
32
|
+
latestBrief(): Promise<string | undefined>;
|
|
33
|
+
/** Read a report from `.kairo/reports/{name}`. Returns undefined if absent. */
|
|
34
|
+
readReport(name: string): Promise<string | undefined>;
|
|
35
|
+
/**
|
|
36
|
+
* Validate a snapshot file without importing it. Returns the manifest
|
|
37
|
+
* + a list of warnings; throws on unparseable JSON.
|
|
38
|
+
*/
|
|
39
|
+
validateSnapshot(path: string): Promise<{
|
|
40
|
+
manifest: KairoSnapshot['manifest'];
|
|
41
|
+
warnings: string[];
|
|
42
|
+
}>;
|
|
43
|
+
/** Lookup a single surface entry (tool/route/schema/snapshot). */
|
|
44
|
+
stabilityOf(id: string): StabilityEntry | undefined;
|
|
45
|
+
/** All entries at the given tier. */
|
|
46
|
+
byTier(tier: StabilityTier): StabilityEntry[];
|
|
47
|
+
/** Full registry (sorted by surface, then id, for deterministic output). */
|
|
48
|
+
stabilityRegistry(): readonly StabilityEntry[];
|
|
49
|
+
plugins(): Promise<LoadedPlugin[]>;
|
|
50
|
+
}
|
|
51
|
+
export type { StabilityEntry, StabilityTier } from '../contracts/stability.js';
|
|
52
|
+
export type { LoadedPlugin, KairoPluginManifest, PluginCapability } from '../plugins/types.js';
|
|
53
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,gBAAgB,EACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGnE,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;gBAEvB,IAAI,GAAE,kBAAuB;IAKzC,oEAAoE;IACpE,MAAM,CAAC,OAAO,IAAI,MAAM;IAIxB,mEAAmE;IACnE,QAAQ,IAAI,OAAO;IAMnB,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC;IAIpC,QAAQ,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIvC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAItD,WAAW,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAI7C,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAIvD,gBAAgB,IAAI,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAInD,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI3B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC;IAItD,WAAW,IAAI,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC;IAIvD,YAAY,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAI7C,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAI7B,6CAA6C;IAC7C,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAIhD,kDAAkD;IAC5C,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAQhD,+EAA+E;IACzE,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAQ3D;;;OAGG;IACG,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAC5C,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;QACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;IAqBF,kEAAkE;IAClE,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAInD,qCAAqC;IACrC,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,cAAc,EAAE;IAI7C,4EAA4E;IAC5E,iBAAiB,IAAI,SAAS,cAAc,EAAE;IAQ9C,OAAO,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;CAGnC;AAED,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC/E,YAAY,EAAE,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kairo SDK (v0.9.4, ADR-0015). Small, dependency-light, **local** client
|
|
3
|
+
* for reading `.kairo/` state, reports, and stability metadata.
|
|
4
|
+
*
|
|
5
|
+
* Suitable for build scripts, CI checks, and editor extensions that want
|
|
6
|
+
* the same data the web inspector renders — without spawning the MCP
|
|
7
|
+
* server or speaking the wire protocol. Read-only by design.
|
|
8
|
+
*
|
|
9
|
+
* SDK and MCP are parallel ways to read Kairo, not alternatives. MCP is
|
|
10
|
+
* for agents over stdio; SDK is for local code in the same process.
|
|
11
|
+
*/
|
|
12
|
+
import { readFile } from 'node:fs/promises';
|
|
13
|
+
import { existsSync } from 'node:fs';
|
|
14
|
+
import { join } from 'node:path';
|
|
15
|
+
import { kairoPaths } from '../storage/paths.js';
|
|
16
|
+
import { InspectProjection } from '../inspect/projections.js';
|
|
17
|
+
import { stabilityOf, byTier, STABILITY } from '../contracts/stability.js';
|
|
18
|
+
import { loadPlugins } from '../plugins/loader.js';
|
|
19
|
+
import { SNAPSHOT_SCHEMA } from '../snapshot/types.js';
|
|
20
|
+
import { SERVER_VERSION } from '../server/createServer.js';
|
|
21
|
+
export class KairoClient {
|
|
22
|
+
projection;
|
|
23
|
+
paths;
|
|
24
|
+
constructor(opts = {}) {
|
|
25
|
+
this.projection = new InspectProjection(opts.projectRoot);
|
|
26
|
+
this.paths = kairoPaths(opts.projectRoot);
|
|
27
|
+
}
|
|
28
|
+
/** Build version of the Kairo library this SDK was bundled with. */
|
|
29
|
+
static version() {
|
|
30
|
+
return SERVER_VERSION;
|
|
31
|
+
}
|
|
32
|
+
/** True if the target project has a `.kairo/` directory at all. */
|
|
33
|
+
hasKairo() {
|
|
34
|
+
return this.projection.hasKairo();
|
|
35
|
+
}
|
|
36
|
+
// ── Read-only inspect projections ──────────────────────────────────────
|
|
37
|
+
overview() {
|
|
38
|
+
return this.projection.overview();
|
|
39
|
+
}
|
|
40
|
+
sessions() {
|
|
41
|
+
return this.projection.listSessions();
|
|
42
|
+
}
|
|
43
|
+
session(id) {
|
|
44
|
+
return this.projection.getSession(id);
|
|
45
|
+
}
|
|
46
|
+
checkpoints() {
|
|
47
|
+
return this.projection.listCheckpoints();
|
|
48
|
+
}
|
|
49
|
+
checkpoint(id) {
|
|
50
|
+
return this.projection.getCheckpoint(id);
|
|
51
|
+
}
|
|
52
|
+
latestCheckpoint() {
|
|
53
|
+
return this.projection.latestCheckpoint();
|
|
54
|
+
}
|
|
55
|
+
graphs() {
|
|
56
|
+
return this.projection.listGraphs();
|
|
57
|
+
}
|
|
58
|
+
graph(kind) {
|
|
59
|
+
return this.projection.readGraph(kind);
|
|
60
|
+
}
|
|
61
|
+
memoryIndex() {
|
|
62
|
+
return this.projection.memoryIndex();
|
|
63
|
+
}
|
|
64
|
+
coordination() {
|
|
65
|
+
return this.projection.coordination();
|
|
66
|
+
}
|
|
67
|
+
risk() {
|
|
68
|
+
return this.projection.risk();
|
|
69
|
+
}
|
|
70
|
+
/** Read a continuation brief by filename. */
|
|
71
|
+
brief(name) {
|
|
72
|
+
return this.projection.readContinuation(name);
|
|
73
|
+
}
|
|
74
|
+
/** Read the latest continuation brief, if any. */
|
|
75
|
+
async latestBrief() {
|
|
76
|
+
const list = await this.projection.listContinuations();
|
|
77
|
+
const last = list[list.length - 1];
|
|
78
|
+
return last ? this.projection.readContinuation(last) : undefined;
|
|
79
|
+
}
|
|
80
|
+
// ── Reports under `.kairo/reports/` ────────────────────────────────────
|
|
81
|
+
/** Read a report from `.kairo/reports/{name}`. Returns undefined if absent. */
|
|
82
|
+
async readReport(name) {
|
|
83
|
+
const p = join(this.paths.reportsDir, name);
|
|
84
|
+
if (!existsSync(p))
|
|
85
|
+
return undefined;
|
|
86
|
+
return readFile(p, 'utf8');
|
|
87
|
+
}
|
|
88
|
+
// ── Snapshot validation ───────────────────────────────────────────────
|
|
89
|
+
/**
|
|
90
|
+
* Validate a snapshot file without importing it. Returns the manifest
|
|
91
|
+
* + a list of warnings; throws on unparseable JSON.
|
|
92
|
+
*/
|
|
93
|
+
async validateSnapshot(path) {
|
|
94
|
+
const raw = await readFile(path, 'utf8');
|
|
95
|
+
const snap = JSON.parse(raw);
|
|
96
|
+
const warnings = [];
|
|
97
|
+
if (!snap.manifest) {
|
|
98
|
+
throw new Error('Snapshot has no manifest');
|
|
99
|
+
}
|
|
100
|
+
const onDiskSchema = snap.manifest.snapshotSchema;
|
|
101
|
+
if (onDiskSchema !== SNAPSHOT_SCHEMA) {
|
|
102
|
+
warnings.push(`snapshotSchema=${String(onDiskSchema)}; this build understands ${String(SNAPSHOT_SCHEMA)}`);
|
|
103
|
+
}
|
|
104
|
+
if (!Array.isArray(snap.events))
|
|
105
|
+
warnings.push('events: not an array');
|
|
106
|
+
if (!Array.isArray(snap.telemetry))
|
|
107
|
+
warnings.push('telemetry: not an array');
|
|
108
|
+
if (!Array.isArray(snap.audit))
|
|
109
|
+
warnings.push('audit: not an array');
|
|
110
|
+
return { manifest: snap.manifest, warnings };
|
|
111
|
+
}
|
|
112
|
+
// ── Stability registry ────────────────────────────────────────────────
|
|
113
|
+
/** Lookup a single surface entry (tool/route/schema/snapshot). */
|
|
114
|
+
stabilityOf(id) {
|
|
115
|
+
return stabilityOf(id);
|
|
116
|
+
}
|
|
117
|
+
/** All entries at the given tier. */
|
|
118
|
+
byTier(tier) {
|
|
119
|
+
return byTier(tier);
|
|
120
|
+
}
|
|
121
|
+
/** Full registry (sorted by surface, then id, for deterministic output). */
|
|
122
|
+
stabilityRegistry() {
|
|
123
|
+
return [...STABILITY].sort((a, b) => a.surface === b.surface ? a.id.localeCompare(b.id) : a.surface.localeCompare(b.surface));
|
|
124
|
+
}
|
|
125
|
+
// ── Plugin manifests (metadata only — no execution) ───────────────────
|
|
126
|
+
plugins() {
|
|
127
|
+
return loadPlugins(this.paths.root);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret detectors. Pattern-based and intentionally conservative-but-broad: a false
|
|
3
|
+
* positive only redacts a harmless string; a false negative leaks a credential to
|
|
4
|
+
* disk. We bias toward over-redaction.
|
|
5
|
+
*
|
|
6
|
+
* `replace` receives the full match and must return the replacement, allowing
|
|
7
|
+
* patterns (e.g. KEY=VALUE) to preserve a non-sensitive prefix for readability.
|
|
8
|
+
*/
|
|
9
|
+
export interface SecretPattern {
|
|
10
|
+
/** Stable type tag used in audit details and the redaction placeholder. */
|
|
11
|
+
readonly type: string;
|
|
12
|
+
readonly regex: RegExp;
|
|
13
|
+
readonly replace: (match: string, ...groups: string[]) => string;
|
|
14
|
+
}
|
|
15
|
+
export declare const SECRET_PATTERNS: readonly SecretPattern[];
|
|
16
|
+
//# sourceMappingURL=patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/security/patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC;CAClE;AAID,eAAO,MAAM,eAAe,EAAE,SAAS,aAAa,EA6DnD,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
const tag = (type) => `«REDACTED:${type}»`;
|
|
2
|
+
export const SECRET_PATTERNS = [
|
|
3
|
+
{
|
|
4
|
+
type: 'PEM_PRIVATE_KEY',
|
|
5
|
+
regex: /-----BEGIN (?:RSA |EC |DSA |OPENSSH |PGP )?PRIVATE KEY-----[\s\S]*?-----END (?:RSA |EC |DSA |OPENSSH |PGP )?PRIVATE KEY-----/g,
|
|
6
|
+
replace: () => tag('PEM_PRIVATE_KEY'),
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
type: 'AWS_ACCESS_KEY_ID',
|
|
10
|
+
regex: /\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/g,
|
|
11
|
+
replace: () => tag('AWS_ACCESS_KEY_ID'),
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
type: 'GITHUB_TOKEN',
|
|
15
|
+
regex: /\bgh[pousr]_[A-Za-z0-9]{36,255}\b/g,
|
|
16
|
+
replace: () => tag('GITHUB_TOKEN'),
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
type: 'GITHUB_PAT',
|
|
20
|
+
regex: /\bgithub_pat_[A-Za-z0-9_]{22,255}\b/g,
|
|
21
|
+
replace: () => tag('GITHUB_PAT'),
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
type: 'GOOGLE_API_KEY',
|
|
25
|
+
regex: /\bAIza[0-9A-Za-z\-_]{35}\b/g,
|
|
26
|
+
replace: () => tag('GOOGLE_API_KEY'),
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
type: 'SLACK_TOKEN',
|
|
30
|
+
regex: /\bxox[baprs]-[0-9A-Za-z-]{10,72}\b/g,
|
|
31
|
+
replace: () => tag('SLACK_TOKEN'),
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
type: 'STRIPE_KEY',
|
|
35
|
+
regex: /\b(?:sk|rk)_(?:live|test)_[0-9A-Za-z]{16,99}\b/g,
|
|
36
|
+
replace: () => tag('STRIPE_KEY'),
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
type: 'RAZORPAY_KEY',
|
|
40
|
+
regex: /\brzp_(?:live|test)_[0-9A-Za-z]{10,40}\b/g,
|
|
41
|
+
replace: () => tag('RAZORPAY_KEY'),
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
type: 'JWT',
|
|
45
|
+
regex: /\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g,
|
|
46
|
+
replace: () => tag('JWT'),
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
type: 'CONNECTION_STRING_CREDENTIALS',
|
|
50
|
+
// scheme://user:password@host → redact only the credentials portion
|
|
51
|
+
regex: /\b((?:postgres(?:ql)?|mysql|mongodb(?:\+srv)?|redis|amqps?|rediss):\/\/)[^\s:@/]+:[^\s:@/]+@/gi,
|
|
52
|
+
replace: (_m, scheme) => `${scheme}${tag('CONNECTION_CREDENTIALS')}@`,
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
type: 'GENERIC_SECRET_ASSIGNMENT',
|
|
56
|
+
// KEY = VALUE where KEY looks secret-shaped. Preserve the key for readability.
|
|
57
|
+
regex: /\b([A-Za-z0-9_]*(?:PASSWORD|PASSWD|SECRET|TOKEN|API[_-]?KEY|ACCESS[_-]?KEY|PRIVATE[_-]?KEY|CLIENT[_-]?SECRET|AUTH)[A-Za-z0-9_]*)\s*[:=]\s*["']?([^\s"',]{6,})["']?/gi,
|
|
58
|
+
replace: (_m, key) => `${key}=${tag('GENERIC_SECRET')}`,
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
//# sourceMappingURL=patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/security/patterns.ts"],"names":[],"mappings":"AAeA,MAAM,GAAG,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,aAAa,IAAI,GAAG,CAAC;AAE3D,MAAM,CAAC,MAAM,eAAe,GAA6B;IACvD;QACE,IAAI,EAAE,iBAAiB;QACvB,KAAK,EACH,+HAA+H;QACjI,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,iBAAiB,CAAC;KACtC;IACD;QACE,IAAI,EAAE,mBAAmB;QACzB,KAAK,EAAE,gCAAgC;QACvC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC;KACxC;IACD;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,oCAAoC;QAC3C,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC;KACnC;IACD;QACE,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,sCAAsC;QAC7C,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC;KACjC;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,KAAK,EAAE,6BAA6B;QACpC,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,gBAAgB,CAAC;KACrC;IACD;QACE,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,qCAAqC;QAC5C,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC;KAClC;IACD;QACE,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,iDAAiD;QACxD,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC;KACjC;IACD;QACE,IAAI,EAAE,cAAc;QACpB,KAAK,EAAE,2CAA2C;QAClD,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC;KACnC;IACD;QACE,IAAI,EAAE,KAAK;QACX,KAAK,EAAE,iEAAiE;QACxE,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;KAC1B;IACD;QACE,IAAI,EAAE,+BAA+B;QACrC,sEAAsE;QACtE,KAAK,EACH,gGAAgG;QAClG,OAAO,EAAE,CAAC,EAAE,EAAE,MAAc,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,wBAAwB,CAAC,GAAG;KAC9E;IACD;QACE,IAAI,EAAE,2BAA2B;QACjC,+EAA+E;QAC/E,KAAK,EACH,sKAAsK;QACxK,OAAO,EAAE,CAAC,EAAE,EAAE,GAAW,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,EAAE;KAChE;CACF,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface RedactionResult<T> {
|
|
2
|
+
value: T;
|
|
3
|
+
/** secret type → number of occurrences removed. Never contains values. */
|
|
4
|
+
findings: Record<string, number>;
|
|
5
|
+
get redacted(): boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* The redaction boundary. Recursively walks any JSON-serializable value and replaces
|
|
9
|
+
* detected secrets in every string. Object *keys* are preserved (they carry structure,
|
|
10
|
+
* not secrets); only string *values* and array elements are scanned.
|
|
11
|
+
*
|
|
12
|
+
* This module is pure. It is wired in at the storage-adapter seam
|
|
13
|
+
* (see storage/redactingAdapter.ts) so no engine can write un-sanitized data.
|
|
14
|
+
*/
|
|
15
|
+
export declare function redactString(input: string): {
|
|
16
|
+
value: string;
|
|
17
|
+
findings: Record<string, number>;
|
|
18
|
+
};
|
|
19
|
+
export declare function sanitize<T>(input: T): RedactionResult<T>;
|
|
20
|
+
//# sourceMappingURL=redactor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redactor.d.ts","sourceRoot":"","sources":["../../src/security/redactor.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,KAAK,EAAE,CAAC,CAAC;IACT,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,QAAQ,IAAI,OAAO,CAAC;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAa/F;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CA8BxD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { SECRET_PATTERNS } from './patterns.js';
|
|
2
|
+
/**
|
|
3
|
+
* The redaction boundary. Recursively walks any JSON-serializable value and replaces
|
|
4
|
+
* detected secrets in every string. Object *keys* are preserved (they carry structure,
|
|
5
|
+
* not secrets); only string *values* and array elements are scanned.
|
|
6
|
+
*
|
|
7
|
+
* This module is pure. It is wired in at the storage-adapter seam
|
|
8
|
+
* (see storage/redactingAdapter.ts) so no engine can write un-sanitized data.
|
|
9
|
+
*/
|
|
10
|
+
export function redactString(input) {
|
|
11
|
+
let value = input;
|
|
12
|
+
const findings = {};
|
|
13
|
+
for (const pattern of SECRET_PATTERNS) {
|
|
14
|
+
// Fresh lastIndex each pass; patterns are global.
|
|
15
|
+
pattern.regex.lastIndex = 0;
|
|
16
|
+
value = value.replace(pattern.regex, (...args) => {
|
|
17
|
+
findings[pattern.type] = (findings[pattern.type] ?? 0) + 1;
|
|
18
|
+
const groups = args.slice(1, -2);
|
|
19
|
+
return pattern.replace(args[0], ...groups);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return { value, findings };
|
|
23
|
+
}
|
|
24
|
+
export function sanitize(input) {
|
|
25
|
+
const findings = {};
|
|
26
|
+
const walk = (node) => {
|
|
27
|
+
if (typeof node === 'string') {
|
|
28
|
+
const r = redactString(node);
|
|
29
|
+
mergeInto(findings, r.findings);
|
|
30
|
+
return r.value;
|
|
31
|
+
}
|
|
32
|
+
if (Array.isArray(node)) {
|
|
33
|
+
return node.map(walk);
|
|
34
|
+
}
|
|
35
|
+
if (node !== null && typeof node === 'object') {
|
|
36
|
+
const out = {};
|
|
37
|
+
for (const [k, v] of Object.entries(node)) {
|
|
38
|
+
out[k] = walk(v);
|
|
39
|
+
}
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
return node;
|
|
43
|
+
};
|
|
44
|
+
const value = walk(input);
|
|
45
|
+
return {
|
|
46
|
+
value,
|
|
47
|
+
findings,
|
|
48
|
+
get redacted() {
|
|
49
|
+
return Object.keys(findings).length > 0;
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function mergeInto(target, source) {
|
|
54
|
+
for (const [k, v] of Object.entries(source)) {
|
|
55
|
+
target[k] = (target[k] ?? 0) + v;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=redactor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redactor.js","sourceRoot":"","sources":["../../src/security/redactor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAShD;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE,CAAC;QACtC,kDAAkD;QAClD,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC;QAC5B,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,IAAc,EAAE,EAAE;YACzD,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAW,EAAE,GAAG,MAAM,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAI,KAAQ;IAClC,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAE5C,MAAM,IAAI,GAAG,CAAC,IAAa,EAAW,EAAE;QACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAC7B,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC;YAChC,OAAO,CAAC,CAAC,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9C,MAAM,GAAG,GAA4B,EAAE,CAAC;YACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAM,CAAC;IAC/B,OAAO;QACL,KAAK;QACL,QAAQ;QACR,IAAI,QAAQ;YACV,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,MAA8B,EAAE,MAA8B;IAC/E,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
|