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.
Files changed (384) hide show
  1. package/CHANGELOG.md +1122 -0
  2. package/LICENSE +21 -0
  3. package/README.md +662 -0
  4. package/dist/cli/cli.d.ts +3 -0
  5. package/dist/cli/cli.d.ts.map +1 -0
  6. package/dist/cli/cli.js +226 -0
  7. package/dist/cli/cli.js.map +1 -0
  8. package/dist/cli/commands.d.ts +10 -0
  9. package/dist/cli/commands.d.ts.map +1 -0
  10. package/dist/cli/commands.js +938 -0
  11. package/dist/cli/commands.js.map +1 -0
  12. package/dist/cli/flags.d.ts +30 -0
  13. package/dist/cli/flags.d.ts.map +1 -0
  14. package/dist/cli/flags.js +90 -0
  15. package/dist/cli/flags.js.map +1 -0
  16. package/dist/cli/output.d.ts +69 -0
  17. package/dist/cli/output.d.ts.map +1 -0
  18. package/dist/cli/output.js +166 -0
  19. package/dist/cli/output.js.map +1 -0
  20. package/dist/cli/types.d.ts +34 -0
  21. package/dist/cli/types.d.ts.map +1 -0
  22. package/dist/cli/types.js +2 -0
  23. package/dist/cli/types.js.map +1 -0
  24. package/dist/contracts/migrations.d.ts +31 -0
  25. package/dist/contracts/migrations.d.ts.map +1 -0
  26. package/dist/contracts/migrations.js +71 -0
  27. package/dist/contracts/migrations.js.map +1 -0
  28. package/dist/contracts/schemas.d.ts +53 -0
  29. package/dist/contracts/schemas.d.ts.map +1 -0
  30. package/dist/contracts/schemas.js +27 -0
  31. package/dist/contracts/schemas.js.map +1 -0
  32. package/dist/contracts/stability.d.ts +32 -0
  33. package/dist/contracts/stability.d.ts.map +1 -0
  34. package/dist/contracts/stability.js +140 -0
  35. package/dist/contracts/stability.js.map +1 -0
  36. package/dist/contracts/zodSchemas.d.ts +811 -0
  37. package/dist/contracts/zodSchemas.d.ts.map +1 -0
  38. package/dist/contracts/zodSchemas.js +139 -0
  39. package/dist/contracts/zodSchemas.js.map +1 -0
  40. package/dist/core/brief/budget.d.ts +21 -0
  41. package/dist/core/brief/budget.d.ts.map +1 -0
  42. package/dist/core/brief/budget.js +42 -0
  43. package/dist/core/brief/budget.js.map +1 -0
  44. package/dist/core/checkpoint/checkpointManager.d.ts +29 -0
  45. package/dist/core/checkpoint/checkpointManager.d.ts.map +1 -0
  46. package/dist/core/checkpoint/checkpointManager.js +49 -0
  47. package/dist/core/checkpoint/checkpointManager.js.map +1 -0
  48. package/dist/core/compaction/compactor.d.ts +40 -0
  49. package/dist/core/compaction/compactor.d.ts.map +1 -0
  50. package/dist/core/compaction/compactor.js +168 -0
  51. package/dist/core/compaction/compactor.js.map +1 -0
  52. package/dist/core/continuation/continuationBuilder.d.ts +19 -0
  53. package/dist/core/continuation/continuationBuilder.d.ts.map +1 -0
  54. package/dist/core/continuation/continuationBuilder.js +184 -0
  55. package/dist/core/continuation/continuationBuilder.js.map +1 -0
  56. package/dist/core/coordination/coordinationManager.d.ts +34 -0
  57. package/dist/core/coordination/coordinationManager.d.ts.map +1 -0
  58. package/dist/core/coordination/coordinationManager.js +253 -0
  59. package/dist/core/coordination/coordinationManager.js.map +1 -0
  60. package/dist/core/coordination/types.d.ts +52 -0
  61. package/dist/core/coordination/types.d.ts.map +1 -0
  62. package/dist/core/coordination/types.js +6 -0
  63. package/dist/core/coordination/types.js.map +1 -0
  64. package/dist/core/github/changelog.d.ts +9 -0
  65. package/dist/core/github/changelog.d.ts.map +1 -0
  66. package/dist/core/github/changelog.js +41 -0
  67. package/dist/core/github/changelog.js.map +1 -0
  68. package/dist/core/github/commitMessage.d.ts +4 -0
  69. package/dist/core/github/commitMessage.d.ts.map +1 -0
  70. package/dist/core/github/commitMessage.js +125 -0
  71. package/dist/core/github/commitMessage.js.map +1 -0
  72. package/dist/core/github/gitContext.d.ts +3 -0
  73. package/dist/core/github/gitContext.d.ts.map +1 -0
  74. package/dist/core/github/gitContext.js +67 -0
  75. package/dist/core/github/gitContext.js.map +1 -0
  76. package/dist/core/github/releasePlan.d.ts +8 -0
  77. package/dist/core/github/releasePlan.d.ts.map +1 -0
  78. package/dist/core/github/releasePlan.js +56 -0
  79. package/dist/core/github/releasePlan.js.map +1 -0
  80. package/dist/core/github/semver.d.ts +11 -0
  81. package/dist/core/github/semver.d.ts.map +1 -0
  82. package/dist/core/github/semver.js +23 -0
  83. package/dist/core/github/semver.js.map +1 -0
  84. package/dist/core/github/types.d.ts +36 -0
  85. package/dist/core/github/types.d.ts.map +1 -0
  86. package/dist/core/github/types.js +2 -0
  87. package/dist/core/github/types.js.map +1 -0
  88. package/dist/core/graph/derived.d.ts +6 -0
  89. package/dist/core/graph/derived.d.ts.map +1 -0
  90. package/dist/core/graph/derived.js +133 -0
  91. package/dist/core/graph/derived.js.map +1 -0
  92. package/dist/core/graph/graphEngine.d.ts +11 -0
  93. package/dist/core/graph/graphEngine.d.ts.map +1 -0
  94. package/dist/core/graph/graphEngine.js +28 -0
  95. package/dist/core/graph/graphEngine.js.map +1 -0
  96. package/dist/core/graph/imports.d.ts +19 -0
  97. package/dist/core/graph/imports.d.ts.map +1 -0
  98. package/dist/core/graph/imports.js +0 -0
  99. package/dist/core/graph/imports.js.map +1 -0
  100. package/dist/core/graph/mermaid.d.ts +6 -0
  101. package/dist/core/graph/mermaid.d.ts.map +1 -0
  102. package/dist/core/graph/mermaid.js +40 -0
  103. package/dist/core/graph/mermaid.js.map +1 -0
  104. package/dist/core/graph/moduleGraph.d.ts +27 -0
  105. package/dist/core/graph/moduleGraph.d.ts.map +1 -0
  106. package/dist/core/graph/moduleGraph.js +186 -0
  107. package/dist/core/graph/moduleGraph.js.map +1 -0
  108. package/dist/core/graph/types.d.ts +32 -0
  109. package/dist/core/graph/types.d.ts.map +1 -0
  110. package/dist/core/graph/types.js +2 -0
  111. package/dist/core/graph/types.js.map +1 -0
  112. package/dist/core/query/queryEngine.d.ts +26 -0
  113. package/dist/core/query/queryEngine.d.ts.map +1 -0
  114. package/dist/core/query/queryEngine.js +258 -0
  115. package/dist/core/query/queryEngine.js.map +1 -0
  116. package/dist/core/query/types.d.ts +70 -0
  117. package/dist/core/query/types.d.ts.map +1 -0
  118. package/dist/core/query/types.js +6 -0
  119. package/dist/core/query/types.js.map +1 -0
  120. package/dist/core/repo/fingerprint.d.ts +0 -0
  121. package/dist/core/repo/fingerprint.d.ts.map +1 -0
  122. package/dist/core/repo/fingerprint.js +17 -0
  123. package/dist/core/repo/fingerprint.js.map +1 -0
  124. package/dist/core/repo/frameworkDetectors.d.ts +14 -0
  125. package/dist/core/repo/frameworkDetectors.d.ts.map +1 -0
  126. package/dist/core/repo/frameworkDetectors.js +151 -0
  127. package/dist/core/repo/frameworkDetectors.js.map +1 -0
  128. package/dist/core/repo/repoScanner.d.ts +20 -0
  129. package/dist/core/repo/repoScanner.d.ts.map +1 -0
  130. package/dist/core/repo/repoScanner.js +290 -0
  131. package/dist/core/repo/repoScanner.js.map +1 -0
  132. package/dist/core/repo/summary.d.ts +7 -0
  133. package/dist/core/repo/summary.d.ts.map +1 -0
  134. package/dist/core/repo/summary.js +34 -0
  135. package/dist/core/repo/summary.js.map +1 -0
  136. package/dist/core/repo/types.d.ts +62 -0
  137. package/dist/core/repo/types.d.ts.map +1 -0
  138. package/dist/core/repo/types.js +10 -0
  139. package/dist/core/repo/types.js.map +1 -0
  140. package/dist/core/risk/guardrail.d.ts +3 -0
  141. package/dist/core/risk/guardrail.d.ts.map +1 -0
  142. package/dist/core/risk/guardrail.js +47 -0
  143. package/dist/core/risk/guardrail.js.map +1 -0
  144. package/dist/core/risk/riskEngine.d.ts +8 -0
  145. package/dist/core/risk/riskEngine.d.ts.map +1 -0
  146. package/dist/core/risk/riskEngine.js +112 -0
  147. package/dist/core/risk/riskEngine.js.map +1 -0
  148. package/dist/core/risk/riskHeuristics.d.ts +4 -0
  149. package/dist/core/risk/riskHeuristics.d.ts.map +1 -0
  150. package/dist/core/risk/riskHeuristics.js +36 -0
  151. package/dist/core/risk/riskHeuristics.js.map +1 -0
  152. package/dist/core/salience/config.d.ts +14 -0
  153. package/dist/core/salience/config.d.ts.map +1 -0
  154. package/dist/core/salience/config.js +87 -0
  155. package/dist/core/salience/config.js.map +1 -0
  156. package/dist/core/salience/salienceEngine.d.ts +16 -0
  157. package/dist/core/salience/salienceEngine.d.ts.map +1 -0
  158. package/dist/core/salience/salienceEngine.js +64 -0
  159. package/dist/core/salience/salienceEngine.js.map +1 -0
  160. package/dist/core/salience/signals.d.ts +4 -0
  161. package/dist/core/salience/signals.d.ts.map +1 -0
  162. package/dist/core/salience/signals.js +143 -0
  163. package/dist/core/salience/signals.js.map +1 -0
  164. package/dist/core/salience/types.d.ts +69 -0
  165. package/dist/core/salience/types.d.ts.map +1 -0
  166. package/dist/core/salience/types.js +7 -0
  167. package/dist/core/salience/types.js.map +1 -0
  168. package/dist/core/session/eventPayloads.d.ts +92 -0
  169. package/dist/core/session/eventPayloads.d.ts.map +1 -0
  170. package/dist/core/session/eventPayloads.js +2 -0
  171. package/dist/core/session/eventPayloads.js.map +1 -0
  172. package/dist/core/session/reducer.d.ts +14 -0
  173. package/dist/core/session/reducer.d.ts.map +1 -0
  174. package/dist/core/session/reducer.js +181 -0
  175. package/dist/core/session/reducer.js.map +1 -0
  176. package/dist/core/session/sessionManager.d.ts +252 -0
  177. package/dist/core/session/sessionManager.d.ts.map +1 -0
  178. package/dist/core/session/sessionManager.js +655 -0
  179. package/dist/core/session/sessionManager.js.map +1 -0
  180. package/dist/core/telemetry/analytics.d.ts +24 -0
  181. package/dist/core/telemetry/analytics.d.ts.map +1 -0
  182. package/dist/core/telemetry/analytics.js +167 -0
  183. package/dist/core/telemetry/analytics.js.map +1 -0
  184. package/dist/core/telemetry/exporter.d.ts +17 -0
  185. package/dist/core/telemetry/exporter.d.ts.map +1 -0
  186. package/dist/core/telemetry/exporter.js +31 -0
  187. package/dist/core/telemetry/exporter.js.map +1 -0
  188. package/dist/core/telemetry/recorder.d.ts +19 -0
  189. package/dist/core/telemetry/recorder.d.ts.map +1 -0
  190. package/dist/core/telemetry/recorder.js +43 -0
  191. package/dist/core/telemetry/recorder.js.map +1 -0
  192. package/dist/core/telemetry/reports.d.ts +6 -0
  193. package/dist/core/telemetry/reports.d.ts.map +1 -0
  194. package/dist/core/telemetry/reports.js +84 -0
  195. package/dist/core/telemetry/reports.js.map +1 -0
  196. package/dist/core/telemetry/types.d.ts +82 -0
  197. package/dist/core/telemetry/types.d.ts.map +1 -0
  198. package/dist/core/telemetry/types.js +9 -0
  199. package/dist/core/telemetry/types.js.map +1 -0
  200. package/dist/core/vector/chunking/memoryChunker.d.ts +10 -0
  201. package/dist/core/vector/chunking/memoryChunker.d.ts.map +1 -0
  202. package/dist/core/vector/chunking/memoryChunker.js +202 -0
  203. package/dist/core/vector/chunking/memoryChunker.js.map +1 -0
  204. package/dist/core/vector/compression/architectureDigest.d.ts +12 -0
  205. package/dist/core/vector/compression/architectureDigest.d.ts.map +1 -0
  206. package/dist/core/vector/compression/architectureDigest.js +37 -0
  207. package/dist/core/vector/compression/architectureDigest.js.map +1 -0
  208. package/dist/core/vector/embedding/deterministicEmbedder.d.ts +10 -0
  209. package/dist/core/vector/embedding/deterministicEmbedder.d.ts.map +1 -0
  210. package/dist/core/vector/embedding/deterministicEmbedder.js +84 -0
  211. package/dist/core/vector/embedding/deterministicEmbedder.js.map +1 -0
  212. package/dist/core/vector/memory/memoryEngine.d.ts +56 -0
  213. package/dist/core/vector/memory/memoryEngine.d.ts.map +1 -0
  214. package/dist/core/vector/memory/memoryEngine.js +204 -0
  215. package/dist/core/vector/memory/memoryEngine.js.map +1 -0
  216. package/dist/core/vector/memory/memoryFingerprint.d.ts +12 -0
  217. package/dist/core/vector/memory/memoryFingerprint.d.ts.map +1 -0
  218. package/dist/core/vector/memory/memoryFingerprint.js +33 -0
  219. package/dist/core/vector/memory/memoryFingerprint.js.map +1 -0
  220. package/dist/core/vector/providers/deterministicProvider.d.ts +14 -0
  221. package/dist/core/vector/providers/deterministicProvider.d.ts.map +1 -0
  222. package/dist/core/vector/providers/deterministicProvider.js +22 -0
  223. package/dist/core/vector/providers/deterministicProvider.js.map +1 -0
  224. package/dist/core/vector/providers/httpEmbeddingProvider.d.ts +32 -0
  225. package/dist/core/vector/providers/httpEmbeddingProvider.d.ts.map +1 -0
  226. package/dist/core/vector/providers/httpEmbeddingProvider.js +93 -0
  227. package/dist/core/vector/providers/httpEmbeddingProvider.js.map +1 -0
  228. package/dist/core/vector/providers/registry.d.ts +9 -0
  229. package/dist/core/vector/providers/registry.d.ts.map +1 -0
  230. package/dist/core/vector/providers/registry.js +79 -0
  231. package/dist/core/vector/providers/registry.js.map +1 -0
  232. package/dist/core/vector/providers/types.d.ts +23 -0
  233. package/dist/core/vector/providers/types.d.ts.map +1 -0
  234. package/dist/core/vector/providers/types.js +2 -0
  235. package/dist/core/vector/providers/types.js.map +1 -0
  236. package/dist/core/vector/retrieval/hybridRetriever.d.ts +37 -0
  237. package/dist/core/vector/retrieval/hybridRetriever.d.ts.map +1 -0
  238. package/dist/core/vector/retrieval/hybridRetriever.js +131 -0
  239. package/dist/core/vector/retrieval/hybridRetriever.js.map +1 -0
  240. package/dist/core/vector/types.d.ts +87 -0
  241. package/dist/core/vector/types.d.ts.map +1 -0
  242. package/dist/core/vector/types.js +6 -0
  243. package/dist/core/vector/types.js.map +1 -0
  244. package/dist/index.d.ts +3 -0
  245. package/dist/index.d.ts.map +1 -0
  246. package/dist/index.js +30 -0
  247. package/dist/index.js.map +1 -0
  248. package/dist/inspect/cli.d.ts +3 -0
  249. package/dist/inspect/cli.d.ts.map +1 -0
  250. package/dist/inspect/cli.js +40 -0
  251. package/dist/inspect/cli.js.map +1 -0
  252. package/dist/inspect/projections.d.ts +141 -0
  253. package/dist/inspect/projections.d.ts.map +1 -0
  254. package/dist/inspect/projections.js +311 -0
  255. package/dist/inspect/projections.js.map +1 -0
  256. package/dist/inspect/render.d.ts +27 -0
  257. package/dist/inspect/render.d.ts.map +1 -0
  258. package/dist/inspect/render.js +325 -0
  259. package/dist/inspect/render.js.map +1 -0
  260. package/dist/inspect/server.d.ts +18 -0
  261. package/dist/inspect/server.d.ts.map +1 -0
  262. package/dist/inspect/server.js +112 -0
  263. package/dist/inspect/server.js.map +1 -0
  264. package/dist/perf/index.d.ts +24 -0
  265. package/dist/perf/index.d.ts.map +1 -0
  266. package/dist/perf/index.js +38 -0
  267. package/dist/perf/index.js.map +1 -0
  268. package/dist/perf/report.d.ts +8 -0
  269. package/dist/perf/report.d.ts.map +1 -0
  270. package/dist/perf/report.js +52 -0
  271. package/dist/perf/report.js.map +1 -0
  272. package/dist/perf/runner.d.ts +29 -0
  273. package/dist/perf/runner.d.ts.map +1 -0
  274. package/dist/perf/runner.js +74 -0
  275. package/dist/perf/runner.js.map +1 -0
  276. package/dist/perf/scenarios.d.ts +8 -0
  277. package/dist/perf/scenarios.d.ts.map +1 -0
  278. package/dist/perf/scenarios.js +119 -0
  279. package/dist/perf/scenarios.js.map +1 -0
  280. package/dist/perf/types.d.ts +32 -0
  281. package/dist/perf/types.d.ts.map +1 -0
  282. package/dist/perf/types.js +6 -0
  283. package/dist/perf/types.js.map +1 -0
  284. package/dist/plugins/loader.d.ts +78 -0
  285. package/dist/plugins/loader.d.ts.map +1 -0
  286. package/dist/plugins/loader.js +193 -0
  287. package/dist/plugins/loader.js.map +1 -0
  288. package/dist/plugins/types.d.ts +38 -0
  289. package/dist/plugins/types.d.ts.map +1 -0
  290. package/dist/plugins/types.js +10 -0
  291. package/dist/plugins/types.js.map +1 -0
  292. package/dist/pressure/pressureModel.d.ts +6 -0
  293. package/dist/pressure/pressureModel.d.ts.map +1 -0
  294. package/dist/pressure/pressureModel.js +102 -0
  295. package/dist/pressure/pressureModel.js.map +1 -0
  296. package/dist/prompts/continuityPrompt.d.ts +7 -0
  297. package/dist/prompts/continuityPrompt.d.ts.map +1 -0
  298. package/dist/prompts/continuityPrompt.js +43 -0
  299. package/dist/prompts/continuityPrompt.js.map +1 -0
  300. package/dist/sdk/index.d.ts +53 -0
  301. package/dist/sdk/index.d.ts.map +1 -0
  302. package/dist/sdk/index.js +130 -0
  303. package/dist/sdk/index.js.map +1 -0
  304. package/dist/security/patterns.d.ts +16 -0
  305. package/dist/security/patterns.d.ts.map +1 -0
  306. package/dist/security/patterns.js +61 -0
  307. package/dist/security/patterns.js.map +1 -0
  308. package/dist/security/redactor.d.ts +20 -0
  309. package/dist/security/redactor.d.ts.map +1 -0
  310. package/dist/security/redactor.js +58 -0
  311. package/dist/security/redactor.js.map +1 -0
  312. package/dist/server/createServer.d.ts +10 -0
  313. package/dist/server/createServer.d.ts.map +1 -0
  314. package/dist/server/createServer.js +60 -0
  315. package/dist/server/createServer.js.map +1 -0
  316. package/dist/server/registerTools.d.ts +4 -0
  317. package/dist/server/registerTools.d.ts.map +1 -0
  318. package/dist/server/registerTools.js +1086 -0
  319. package/dist/server/registerTools.js.map +1 -0
  320. package/dist/server/responses.d.ts +17 -0
  321. package/dist/server/responses.d.ts.map +1 -0
  322. package/dist/server/responses.js +21 -0
  323. package/dist/server/responses.js.map +1 -0
  324. package/dist/snapshot/export.d.ts +26 -0
  325. package/dist/snapshot/export.d.ts.map +1 -0
  326. package/dist/snapshot/export.js +164 -0
  327. package/dist/snapshot/export.js.map +1 -0
  328. package/dist/snapshot/import.d.ts +34 -0
  329. package/dist/snapshot/import.d.ts.map +1 -0
  330. package/dist/snapshot/import.js +114 -0
  331. package/dist/snapshot/import.js.map +1 -0
  332. package/dist/snapshot/types.d.ts +63 -0
  333. package/dist/snapshot/types.d.ts.map +1 -0
  334. package/dist/snapshot/types.js +2 -0
  335. package/dist/snapshot/types.js.map +1 -0
  336. package/dist/storage/faultAdapter.d.ts +64 -0
  337. package/dist/storage/faultAdapter.d.ts.map +1 -0
  338. package/dist/storage/faultAdapter.js +134 -0
  339. package/dist/storage/faultAdapter.js.map +1 -0
  340. package/dist/storage/fileStorageAdapter.d.ts +55 -0
  341. package/dist/storage/fileStorageAdapter.d.ts.map +1 -0
  342. package/dist/storage/fileStorageAdapter.js +219 -0
  343. package/dist/storage/fileStorageAdapter.js.map +1 -0
  344. package/dist/storage/paths.d.ts +30 -0
  345. package/dist/storage/paths.d.ts.map +1 -0
  346. package/dist/storage/paths.js +32 -0
  347. package/dist/storage/paths.js.map +1 -0
  348. package/dist/storage/quarantine.d.ts +36 -0
  349. package/dist/storage/quarantine.d.ts.map +1 -0
  350. package/dist/storage/quarantine.js +26 -0
  351. package/dist/storage/quarantine.js.map +1 -0
  352. package/dist/storage/redactingAdapter.d.ts +13 -0
  353. package/dist/storage/redactingAdapter.d.ts.map +1 -0
  354. package/dist/storage/redactingAdapter.js +91 -0
  355. package/dist/storage/redactingAdapter.js.map +1 -0
  356. package/dist/storage/storageAdapter.d.ts +46 -0
  357. package/dist/storage/storageAdapter.d.ts.map +1 -0
  358. package/dist/storage/storageAdapter.js +2 -0
  359. package/dist/storage/storageAdapter.js.map +1 -0
  360. package/dist/types/domain.d.ts +139 -0
  361. package/dist/types/domain.d.ts.map +1 -0
  362. package/dist/types/domain.js +9 -0
  363. package/dist/types/domain.js.map +1 -0
  364. package/dist/types/events.d.ts +28 -0
  365. package/dist/types/events.d.ts.map +1 -0
  366. package/dist/types/events.js +7 -0
  367. package/dist/types/events.js.map +1 -0
  368. package/dist/utils/errors.d.ts +6 -0
  369. package/dist/utils/errors.d.ts.map +1 -0
  370. package/dist/utils/errors.js +10 -0
  371. package/dist/utils/errors.js.map +1 -0
  372. package/dist/utils/ids.d.ts +7 -0
  373. package/dist/utils/ids.d.ts.map +1 -0
  374. package/dist/utils/ids.js +22 -0
  375. package/dist/utils/ids.js.map +1 -0
  376. package/dist/utils/logger.d.ts +7 -0
  377. package/dist/utils/logger.d.ts.map +1 -0
  378. package/dist/utils/logger.js +26 -0
  379. package/dist/utils/logger.js.map +1 -0
  380. package/dist/utils/time.d.ts +8 -0
  381. package/dist/utils/time.d.ts.map +1 -0
  382. package/dist/utils/time.js +11 -0
  383. package/dist/utils/time.js.map +1 -0
  384. package/package.json +79 -0
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Vector / semantic memory model (v0.6.0). See ADR-0005 and docs/VECTOR_MEMORY.md.
3
+ * This is architecture-aware hybrid recall, NOT naive RAG.
4
+ */
5
+ /** The five memory classes from the brief. */
6
+ export type MemoryKind = 'structural' | 'semantic' | 'session' | 'decision' | 'operational';
7
+ /**
8
+ * An architecture-aware semantic object — not a raw file slice. `text` is what gets
9
+ * embedded; the rest drives hybrid ranking and explanations.
10
+ */
11
+ export interface MemoryChunk {
12
+ id: string;
13
+ kind: MemoryKind;
14
+ /** Repo-relative path or logical locator (e.g. a module-graph group). */
15
+ locator: string;
16
+ /** Enriched embeddable text (summary + structural context, not raw dump). */
17
+ text: string;
18
+ /** Salience [0,1+] from the salience subsystem (ADR-0004). */
19
+ salience: number;
20
+ /** Graph degree of the owning module group, if any. */
21
+ graphDegree: number;
22
+ /** True if reachable from a runtime entry point. */
23
+ runtimeReachable: boolean;
24
+ /** Module-graph neighbours (group labels) for dependency-proximity ranking. */
25
+ neighbors: string[];
26
+ /** ISO timestamp for session/decision recency; omitted for static structure. */
27
+ ts?: string;
28
+ /**
29
+ * Coordination namespace (v0.7.0). `workspace` (or omitted) = shared knowledge
30
+ * visible to all workers; a worker id = private session memory, isolated unless
31
+ * the searching worker matches. Deterministic filter, not a ranking change.
32
+ */
33
+ namespace?: string;
34
+ }
35
+ export interface EmbeddedChunk extends MemoryChunk {
36
+ vector: number[];
37
+ }
38
+ /** Pluggable embedder. Default impl is deterministic + local (ADR-0005). */
39
+ export interface Embedder {
40
+ /** Stable id incl. version; stored with the index to detect provider changes. */
41
+ readonly id: string;
42
+ readonly dim: number;
43
+ /** Pure for the deterministic default: same input → same vector, always. */
44
+ embed(text: string): number[];
45
+ }
46
+ export interface VectorIndex {
47
+ schema: 3;
48
+ /** Repo fingerprint this index was built for (anti-recompute key). */
49
+ fingerprint: string;
50
+ /**
51
+ * Deterministic hash of the built chunk set (v0.7.1). Captures session/decision/
52
+ * checkpoint/namespace changes that the repo fingerprint does NOT, so cross-worker
53
+ * memory cannot go stale while still skipping the embed step on a true match.
54
+ */
55
+ memoryFingerprint: string;
56
+ embedderId: string;
57
+ dim: number;
58
+ builtAt: string;
59
+ chunks: EmbeddedChunk[];
60
+ }
61
+ export interface VectorStore {
62
+ save(index: VectorIndex): Promise<void>;
63
+ load(): Promise<VectorIndex | undefined>;
64
+ }
65
+ export interface RankFactor {
66
+ name: string;
67
+ /** Normalised [0,1] contribution before weighting. */
68
+ raw: number;
69
+ weight: number;
70
+ weighted: number;
71
+ note?: string;
72
+ }
73
+ export interface RetrievalResult {
74
+ chunk: MemoryChunk;
75
+ score: number;
76
+ similarity: number;
77
+ factors: RankFactor[];
78
+ /** Human-readable "why this ranked here". */
79
+ why: string;
80
+ }
81
+ export interface RetrievalQuery {
82
+ text: string;
83
+ limit?: number;
84
+ /** Optional bias toward a memory class. */
85
+ kind?: MemoryKind;
86
+ }
87
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/vector/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,8CAA8C;AAC9C,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,aAAa,CAAC;AAE5F;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;IACjB,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,+EAA+E;IAC/E,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gFAAgF;IAChF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAc,SAAQ,WAAW;IAChD,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,4EAA4E;AAC5E,MAAM,WAAW,QAAQ;IACvB,iFAAiF;IACjF,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,CAAC,CAAC;IACV,sEAAsE;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,IAAI,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,6CAA6C;IAC7C,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,IAAI,CAAC,EAAE,UAAU,CAAC;CACnB"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Vector / semantic memory model (v0.6.0). See ADR-0005 and docs/VECTOR_MEMORY.md.
3
+ * This is architecture-aware hybrid recall, NOT naive RAG.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/vector/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { FileStorageAdapter } from './storage/fileStorageAdapter.js';
4
+ import { withRedaction } from './storage/redactingAdapter.js';
5
+ import { SessionManager } from './core/session/sessionManager.js';
6
+ import { createServer, SERVER_VERSION } from './server/createServer.js';
7
+ import { resolveProjectRoot } from './storage/paths.js';
8
+ import { systemClock } from './utils/time.js';
9
+ import { logger } from './utils/logger.js';
10
+ async function main() {
11
+ const projectRoot = resolveProjectRoot();
12
+ const adapter = withRedaction(new FileStorageAdapter(projectRoot), systemClock);
13
+ const sessions = new SessionManager(adapter, systemClock);
14
+ await sessions.init();
15
+ const server = createServer(sessions);
16
+ const transport = new StdioServerTransport();
17
+ await server.connect(transport);
18
+ logger.info(`Kairo v${SERVER_VERSION} ready (stdio)`, { projectRoot });
19
+ const shutdown = (signal) => {
20
+ logger.info(`Received ${signal}, shutting down`);
21
+ void server.close().finally(() => process.exit(0));
22
+ };
23
+ process.on('SIGINT', () => shutdown('SIGINT'));
24
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
25
+ }
26
+ main().catch((err) => {
27
+ logger.error('Fatal startup error', err instanceof Error ? err.message : String(err));
28
+ process.exit(1);
29
+ });
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,KAAK,UAAU,IAAI;IACjB,MAAM,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC1D,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEtB,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAEhC,MAAM,CAAC,IAAI,CAAC,UAAU,cAAc,gBAAgB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;IAEvE,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAQ,EAAE;QACxC,MAAM,CAAC,IAAI,CAAC,YAAY,MAAM,iBAAiB,CAAC,CAAC;QACjD,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/inspect/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ #!/usr/bin/env node
2
+ import { startInspectServer } from './server.js';
3
+ import { resolveProjectRoot } from '../storage/paths.js';
4
+ function parseArgs(argv) {
5
+ let port = Number(process.env.KAIRO_INSPECT_PORT ?? 4173);
6
+ let host = process.env.KAIRO_INSPECT_HOST ?? '127.0.0.1';
7
+ let projectRoot = resolveProjectRoot();
8
+ for (let i = 0; i < argv.length; i++) {
9
+ const a = argv[i];
10
+ if (a === '--port' || a === '-p')
11
+ port = Number(argv[++i]);
12
+ else if (a === '--host')
13
+ host = String(argv[++i]);
14
+ else if (a === '--project' || a === '-C')
15
+ projectRoot = String(argv[++i]);
16
+ else if (a === '--help' || a === '-h') {
17
+ process.stdout.write(`kairo-inspect — local read-only inspector for .kairo/ (v0.9.0, ADR-0011)
18
+ Usage: kairo-inspect [--port 4173] [--host 127.0.0.1] [--project .]
19
+ Loopback only by default. No network egress, no remote assets.\n`);
20
+ process.exit(0);
21
+ }
22
+ }
23
+ return { port, host, projectRoot };
24
+ }
25
+ async function main() {
26
+ const { port, host, projectRoot } = parseArgs(process.argv.slice(2));
27
+ const h = await startInspectServer({ port, host, projectRoot });
28
+ process.stdout.write(`Kairo Inspect at ${h.url} (project: ${projectRoot})\n`);
29
+ process.stdout.write('Read-only · no network · Ctrl+C to stop\n');
30
+ const shutdown = () => {
31
+ void h.close().finally(() => process.exit(0));
32
+ };
33
+ process.on('SIGINT', shutdown);
34
+ process.on('SIGTERM', shutdown);
35
+ }
36
+ main().catch((err) => {
37
+ process.stderr.write(`Inspector failed: ${err instanceof Error ? err.message : String(err)}\n`);
38
+ process.exit(1);
39
+ });
40
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/inspect/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAQzD,SAAS,SAAS,CAAC,IAAc;IAC/B,IAAI,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,IAAI,CAAC,CAAC;IAC1D,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,WAAW,CAAC;IACzD,IAAI,WAAW,GAAG,kBAAkB,EAAE,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;YAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aACtD,IAAI,CAAC,KAAK,QAAQ;YAAE,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aAC7C,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,IAAI;YAAE,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;aACrE,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACtC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;;iEAEyD,CAC1D,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,CAAC,GAAG,MAAM,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,GAAG,eAAe,WAAW,KAAK,CAAC,CAAC;IAC/E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC;IACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qBAAqB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,141 @@
1
+ import { type KairoPaths } from '../storage/paths.js';
2
+ import type { EventFilter, TimelineEntry, TimelineKind, UnifiedEvent, ConflictEntry, LineageNode, RetrievalTrace } from '../core/query/types.js';
3
+ import type { Checkpoint, SessionState } from '../types/domain.js';
4
+ /**
5
+ * Pure deterministic projections shared by every developer surface (web
6
+ * inspector + VS Code extension). Read-only over `.kairo/`. No mutation, no
7
+ * new state — ADR-0011.
8
+ *
9
+ * Every method is idempotent and replay-safe: given the same `.kairo/`
10
+ * contents, the returned objects are byte-identical.
11
+ */
12
+ export declare class InspectProjection {
13
+ readonly paths: KairoPaths;
14
+ private readonly adapter;
15
+ constructor(projectRoot?: string);
16
+ /** Does this project have a `.kairo/` directory at all? */
17
+ hasKairo(): boolean;
18
+ overview(): Promise<InspectOverview>;
19
+ listSessions(): Promise<SessionListEntry[]>;
20
+ getSession(id: string): Promise<SessionState | undefined>;
21
+ listCheckpoints(): Promise<CheckpointListEntry[]>;
22
+ getCheckpoint(id: string): Promise<Checkpoint | undefined>;
23
+ latestCheckpoint(): Promise<Checkpoint | undefined>;
24
+ readContinuation(name: string): Promise<string | undefined>;
25
+ listContinuations(): Promise<string[]>;
26
+ readGraph(kind: string): Promise<GraphSummary | undefined>;
27
+ listGraphs(): Promise<string[]>;
28
+ events(filter?: EventFilter): Promise<UnifiedEvent[]>;
29
+ timeline(kind: TimelineKind): Promise<TimelineEntry[]>;
30
+ conflicts(): Promise<ConflictEntry[]>;
31
+ retrieval(eventId: string): Promise<RetrievalTrace | undefined>;
32
+ lineage(checkpointId: string): Promise<LineageNode[]>;
33
+ coordination(): Promise<CoordinationSnapshot>;
34
+ risk(): Promise<RiskSnapshot>;
35
+ /** Memory chunks summary read directly from the vector index. */
36
+ memoryIndex(): Promise<MemoryIndexSnapshot | undefined>;
37
+ private readIntelligence;
38
+ private queryInputs;
39
+ }
40
+ export interface InspectOverview {
41
+ projectRoot: string;
42
+ hasKairo: boolean;
43
+ eventCount: number;
44
+ telemetryCount: number;
45
+ sessionCount: number;
46
+ checkpointCount: number;
47
+ /** Number of quarantined corrupt/invalid records under `.kairo/quarantine/` (ADR-0012). */
48
+ quarantineCount: number;
49
+ latestCheckpointId: string | undefined;
50
+ latestSessionId: string | undefined;
51
+ intelligence: IntelligenceSummary | undefined;
52
+ }
53
+ export interface IntelligenceSummary {
54
+ schema: number;
55
+ frameworks: string[];
56
+ languages: string[];
57
+ files: number;
58
+ truncated: boolean;
59
+ }
60
+ export interface SessionListEntry {
61
+ id: string;
62
+ agent: string;
63
+ task: string;
64
+ status: SessionState['status'];
65
+ startedAt: string;
66
+ lastActivityAt: string;
67
+ changedFiles: number;
68
+ decisions: number;
69
+ errors: number;
70
+ }
71
+ export interface CheckpointListEntry {
72
+ id: string;
73
+ sessionId: string;
74
+ agent: string;
75
+ ownerWorkerId?: string;
76
+ reason: string;
77
+ riskLevel: 'low' | 'medium' | 'high';
78
+ riskScore: number;
79
+ createdAt: string;
80
+ task: string;
81
+ continuationRef: string;
82
+ parentCheckpointId?: string;
83
+ changedFiles: number;
84
+ }
85
+ export interface GraphSummary {
86
+ kind: string;
87
+ nodes: number;
88
+ edges: number;
89
+ mermaid: string;
90
+ mirrorPath: string;
91
+ }
92
+ export interface LeaseSnapshot {
93
+ leaseId: string;
94
+ scope: string;
95
+ scopeKind: string;
96
+ holder: string;
97
+ acquiredAt: string;
98
+ expiresAt: string;
99
+ status: 'active' | 'released' | 'expired' | 'superseded';
100
+ }
101
+ export interface WorkerSnapshot {
102
+ workerId: string;
103
+ namespace: string;
104
+ agent: string;
105
+ lastSeen: string;
106
+ }
107
+ export interface CoordinationSnapshot {
108
+ activeLeases: LeaseSnapshot[];
109
+ allLeases: LeaseSnapshot[];
110
+ knownWorkers: WorkerSnapshot[];
111
+ conflicts: ConflictEntry[];
112
+ }
113
+ export interface RiskEscalation {
114
+ checkpointId: string;
115
+ sessionId: string;
116
+ createdAt: string;
117
+ level: 'low' | 'medium' | 'high';
118
+ score: number;
119
+ task: string;
120
+ }
121
+ export interface RiskSnapshot {
122
+ escalations: RiskEscalation[];
123
+ byLevel: {
124
+ low: number;
125
+ medium: number;
126
+ high: number;
127
+ };
128
+ }
129
+ export interface MemoryIndexSnapshot {
130
+ embedder: string;
131
+ fingerprint: string;
132
+ chunkCount: number;
133
+ byKind: Record<string, number>;
134
+ topChunks: Array<{
135
+ id: string;
136
+ kind: string;
137
+ locator: string;
138
+ salience: number;
139
+ }>;
140
+ }
141
+ //# sourceMappingURL=projections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projections.d.ts","sourceRoot":"","sources":["../../src/inspect/projections.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,311 @@
1
+ import { readFile, readdir } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { kairoPaths } from '../storage/paths.js';
5
+ import { FileStorageAdapter } from '../storage/fileStorageAdapter.js';
6
+ import { CoordinationManager } from '../core/coordination/coordinationManager.js';
7
+ import { systemClock } from '../utils/time.js';
8
+ import { buildSessionToWorker, queryEvents, timeline, conflictHistory, retrievalTrace, checkpointLineage, } from '../core/query/queryEngine.js';
9
+ /**
10
+ * Pure deterministic projections shared by every developer surface (web
11
+ * inspector + VS Code extension). Read-only over `.kairo/`. No mutation, no
12
+ * new state — ADR-0011.
13
+ *
14
+ * Every method is idempotent and replay-safe: given the same `.kairo/`
15
+ * contents, the returned objects are byte-identical.
16
+ */
17
+ export class InspectProjection {
18
+ paths;
19
+ adapter;
20
+ constructor(projectRoot) {
21
+ this.paths = kairoPaths(projectRoot);
22
+ this.adapter = new FileStorageAdapter(this.paths.root);
23
+ }
24
+ /** Does this project have a `.kairo/` directory at all? */
25
+ hasKairo() {
26
+ return existsSync(this.paths.base);
27
+ }
28
+ async overview() {
29
+ if (!this.hasKairo()) {
30
+ return {
31
+ projectRoot: this.paths.root,
32
+ hasKairo: false,
33
+ eventCount: 0,
34
+ telemetryCount: 0,
35
+ sessionCount: 0,
36
+ checkpointCount: 0,
37
+ quarantineCount: 0,
38
+ latestCheckpointId: undefined,
39
+ latestSessionId: undefined,
40
+ intelligence: undefined,
41
+ };
42
+ }
43
+ const [events, telemetry] = await Promise.all([
44
+ this.adapter.readEvents(),
45
+ this.adapter.readTelemetry(),
46
+ ]);
47
+ const sessionFiles = await safeReaddir(this.paths.sessionsDir);
48
+ const checkpointFiles = await safeReaddir(this.paths.checkpointsDir);
49
+ const latestCheckpoint = await this.latestCheckpoint();
50
+ const latestSessionEv = [...events].reverse().find((e) => e.type === 'session.started');
51
+ const intelligence = await this.readIntelligence();
52
+ const quarantineFiles = await safeReaddir(this.paths.quarantineDir);
53
+ let quarantineCount = 0;
54
+ for (const f of quarantineFiles) {
55
+ if (!f.endsWith('.jsonl'))
56
+ continue;
57
+ try {
58
+ const raw = await readFile(join(this.paths.quarantineDir, f), 'utf8');
59
+ quarantineCount += raw.split('\n').filter((l) => l.trim().length > 0).length;
60
+ }
61
+ catch {
62
+ /* ignore */
63
+ }
64
+ }
65
+ return {
66
+ projectRoot: this.paths.root,
67
+ hasKairo: true,
68
+ eventCount: events.length,
69
+ telemetryCount: telemetry.length,
70
+ sessionCount: sessionFiles.filter((f) => f.endsWith('.json')).length,
71
+ checkpointCount: checkpointFiles.filter((f) => f.endsWith('.json')).length,
72
+ quarantineCount,
73
+ latestCheckpointId: latestCheckpoint?.id,
74
+ latestSessionId: latestSessionEv?.sessionId,
75
+ intelligence,
76
+ };
77
+ }
78
+ async listSessions() {
79
+ const files = await safeReaddir(this.paths.sessionsDir);
80
+ const out = [];
81
+ for (const f of files.filter((x) => x.endsWith('.json')).sort()) {
82
+ const s = await this.adapter.loadSessionSnapshot(f.replace(/\.json$/, ''));
83
+ if (!s)
84
+ continue;
85
+ out.push({
86
+ id: s.id,
87
+ agent: s.agent,
88
+ task: s.task,
89
+ status: s.status,
90
+ startedAt: s.startedAt,
91
+ lastActivityAt: s.lastActivityAt,
92
+ changedFiles: Object.keys(s.changedFiles).length,
93
+ decisions: s.decisions.length,
94
+ errors: s.errors.length,
95
+ });
96
+ }
97
+ return out.sort((a, b) => a.startedAt.localeCompare(b.startedAt));
98
+ }
99
+ async getSession(id) {
100
+ return this.adapter.loadSessionSnapshot(id);
101
+ }
102
+ async listCheckpoints() {
103
+ const files = await safeReaddir(this.paths.checkpointsDir);
104
+ const out = [];
105
+ for (const f of files.filter((x) => x.endsWith('.json')).sort()) {
106
+ const cp = await this.adapter.loadCheckpoint(f.replace(/\.json$/, ''));
107
+ if (!cp)
108
+ continue;
109
+ const entry = {
110
+ id: cp.id,
111
+ sessionId: cp.sessionId,
112
+ agent: cp.agent,
113
+ reason: cp.reason,
114
+ riskLevel: cp.risk.level,
115
+ riskScore: cp.risk.score,
116
+ createdAt: cp.createdAt,
117
+ task: cp.task,
118
+ continuationRef: cp.continuationRef,
119
+ changedFiles: cp.changedFiles.length,
120
+ };
121
+ if (cp.ownerWorkerId)
122
+ entry.ownerWorkerId = cp.ownerWorkerId;
123
+ if (cp.parentCheckpointId)
124
+ entry.parentCheckpointId = cp.parentCheckpointId;
125
+ out.push(entry);
126
+ }
127
+ return out.sort((a, b) => a.createdAt.localeCompare(b.createdAt));
128
+ }
129
+ async getCheckpoint(id) {
130
+ return this.adapter.loadCheckpoint(id);
131
+ }
132
+ async latestCheckpoint() {
133
+ const list = await this.listCheckpoints();
134
+ const last = list[list.length - 1];
135
+ return last ? this.adapter.loadCheckpoint(last.id) : undefined;
136
+ }
137
+ async readContinuation(name) {
138
+ try {
139
+ return await readFile(this.paths.continuationFile(name), 'utf8');
140
+ }
141
+ catch {
142
+ return undefined;
143
+ }
144
+ }
145
+ async listContinuations() {
146
+ const files = await safeReaddir(this.paths.continuationsDir);
147
+ return files.filter((f) => f.endsWith('.md')).sort();
148
+ }
149
+ async readGraph(kind) {
150
+ try {
151
+ const md = await readFile(this.paths.graphFile(kind), 'utf8');
152
+ const { nodes, edges } = countMermaid(md);
153
+ return { kind, nodes, edges, mermaid: md, mirrorPath: this.paths.graphFile(kind) };
154
+ }
155
+ catch {
156
+ return undefined;
157
+ }
158
+ }
159
+ async listGraphs() {
160
+ const files = await safeReaddir(this.paths.graphsDir);
161
+ return files.filter((f) => f.endsWith('.md')).map((f) => f.replace(/\.md$/, ''));
162
+ }
163
+ async events(filter = {}) {
164
+ return queryEvents(filter, await this.queryInputs());
165
+ }
166
+ async timeline(kind) {
167
+ return timeline(kind, await this.queryInputs());
168
+ }
169
+ async conflicts() {
170
+ return conflictHistory(await this.queryInputs());
171
+ }
172
+ async retrieval(eventId) {
173
+ return retrievalTrace(eventId, await this.queryInputs());
174
+ }
175
+ async lineage(checkpointId) {
176
+ return checkpointLineage(checkpointId, (id) => this.adapter.loadCheckpoint(id));
177
+ }
178
+ async coordination() {
179
+ const coord = new CoordinationManager(this.adapter, systemClock);
180
+ const state = await coord.state();
181
+ return {
182
+ activeLeases: state.activeLeases.map((l) => ({
183
+ leaseId: l.id,
184
+ scope: l.scope,
185
+ scopeKind: l.scopeKind,
186
+ holder: l.workerId,
187
+ acquiredAt: l.acquiredAt,
188
+ expiresAt: l.expiresAt,
189
+ status: l.status,
190
+ })),
191
+ allLeases: state.allLeases.map((l) => ({
192
+ leaseId: l.id,
193
+ scope: l.scope,
194
+ scopeKind: l.scopeKind,
195
+ holder: l.workerId,
196
+ acquiredAt: l.acquiredAt,
197
+ expiresAt: l.expiresAt,
198
+ status: l.status,
199
+ })),
200
+ knownWorkers: state.workers.map((w) => ({
201
+ workerId: w.workerId,
202
+ namespace: w.namespace,
203
+ agent: w.agent,
204
+ lastSeen: w.lastSeen,
205
+ })),
206
+ conflicts: await this.conflicts(),
207
+ };
208
+ }
209
+ async risk() {
210
+ const checkpoints = await this.listCheckpoints();
211
+ const escalations = [];
212
+ for (const cp of checkpoints) {
213
+ if (cp.riskLevel === 'medium' || cp.riskLevel === 'high') {
214
+ escalations.push({
215
+ checkpointId: cp.id,
216
+ sessionId: cp.sessionId,
217
+ createdAt: cp.createdAt,
218
+ level: cp.riskLevel,
219
+ score: cp.riskScore,
220
+ task: cp.task,
221
+ });
222
+ }
223
+ }
224
+ return {
225
+ escalations: escalations.sort((a, b) => b.createdAt.localeCompare(a.createdAt)),
226
+ byLevel: {
227
+ low: checkpoints.filter((c) => c.riskLevel === 'low').length,
228
+ medium: checkpoints.filter((c) => c.riskLevel === 'medium').length,
229
+ high: checkpoints.filter((c) => c.riskLevel === 'high').length,
230
+ },
231
+ };
232
+ }
233
+ /** Memory chunks summary read directly from the vector index. */
234
+ async memoryIndex() {
235
+ try {
236
+ const raw = await readFile(this.paths.vectorIndexFile, 'utf8');
237
+ const idx = JSON.parse(raw);
238
+ const chunks = idx.chunks ?? [];
239
+ const byKind = {};
240
+ for (const c of chunks) {
241
+ const k = c.kind ?? 'unknown';
242
+ byKind[k] = (byKind[k] ?? 0) + 1;
243
+ }
244
+ return {
245
+ embedder: idx.embedder ?? 'unknown',
246
+ fingerprint: idx.fingerprint ?? '',
247
+ chunkCount: chunks.length,
248
+ byKind,
249
+ topChunks: chunks
250
+ .slice()
251
+ .sort((a, b) => (b.salience ?? 0) - (a.salience ?? 0))
252
+ .slice(0, 20)
253
+ .map((c) => ({
254
+ id: c.id ?? '',
255
+ kind: c.kind ?? 'unknown',
256
+ locator: c.locator ?? '',
257
+ salience: c.salience ?? 0,
258
+ })),
259
+ };
260
+ }
261
+ catch {
262
+ return undefined;
263
+ }
264
+ }
265
+ async readIntelligence() {
266
+ try {
267
+ const raw = await readFile(this.paths.latestIntelligenceFile, 'utf8');
268
+ const intel = JSON.parse(raw);
269
+ return {
270
+ schema: intel.schema ?? 0,
271
+ frameworks: (intel.frameworks ?? []).map((f) => f.id),
272
+ languages: (intel.languages ?? []).map((l) => l.name),
273
+ files: intel.files ?? 0,
274
+ truncated: !!intel.truncated,
275
+ };
276
+ }
277
+ catch {
278
+ return undefined;
279
+ }
280
+ }
281
+ async queryInputs() {
282
+ const [events, telemetry, audit] = await Promise.all([
283
+ this.adapter.readEvents(),
284
+ this.adapter.readTelemetry(),
285
+ this.adapter.readAudit(),
286
+ ]);
287
+ return { events, telemetry, audit, sessionToWorker: buildSessionToWorker(events) };
288
+ }
289
+ }
290
+ async function safeReaddir(p) {
291
+ try {
292
+ return await readdir(p);
293
+ }
294
+ catch {
295
+ return [];
296
+ }
297
+ }
298
+ function countMermaid(md) {
299
+ // Heuristic deterministic count over the mermaid block.
300
+ const m = md.match(/```mermaid\n([\s\S]*?)```/);
301
+ const body = m && m[1] !== undefined ? m[1] : md;
302
+ const edges = (body.match(/-->|---|==>|-\.->|:::/g) ?? []).filter((s) => s !== ':::').length;
303
+ const nodeIds = new Set();
304
+ for (const line of body.split('\n')) {
305
+ const ids = line.match(/\b[A-Za-z_][A-Za-z0-9_]*(?=\[|\(|\{)/g) ?? [];
306
+ for (const id of ids)
307
+ nodeIds.add(id);
308
+ }
309
+ return { nodes: nodeIds.size, edges };
310
+ }
311
+ //# sourceMappingURL=projections.js.map