@kynetic-ai/spec 0.10.0 → 0.12.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 (487) hide show
  1. package/README.md +55 -455
  2. package/dist/agent-runtime/bootstrap.d.ts +31 -0
  3. package/dist/agent-runtime/bootstrap.d.ts.map +1 -0
  4. package/dist/agent-runtime/bootstrap.js +302 -0
  5. package/dist/agent-runtime/bootstrap.js.map +1 -0
  6. package/dist/agent-runtime/dispatch.d.ts +150 -10
  7. package/dist/agent-runtime/dispatch.d.ts.map +1 -1
  8. package/dist/agent-runtime/dispatch.js +1248 -244
  9. package/dist/agent-runtime/dispatch.js.map +1 -1
  10. package/dist/agent-runtime/invocation.d.ts +28 -1
  11. package/dist/agent-runtime/invocation.d.ts.map +1 -1
  12. package/dist/agent-runtime/invocation.js +172 -60
  13. package/dist/agent-runtime/invocation.js.map +1 -1
  14. package/dist/agent-runtime/prompts.d.ts +9 -0
  15. package/dist/agent-runtime/prompts.d.ts.map +1 -1
  16. package/dist/agent-runtime/prompts.js +42 -7
  17. package/dist/agent-runtime/prompts.js.map +1 -1
  18. package/dist/agent-runtime/session-event-accumulator.d.ts +83 -0
  19. package/dist/agent-runtime/session-event-accumulator.d.ts.map +1 -0
  20. package/dist/agent-runtime/session-event-accumulator.js +203 -0
  21. package/dist/agent-runtime/session-event-accumulator.js.map +1 -0
  22. package/dist/agent-runtime/session-event-types.d.ts +67 -0
  23. package/dist/agent-runtime/session-event-types.d.ts.map +1 -0
  24. package/dist/agent-runtime/session-event-types.js +13 -0
  25. package/dist/agent-runtime/session-event-types.js.map +1 -0
  26. package/dist/agent-runtime/workspace.d.ts +244 -0
  27. package/dist/agent-runtime/workspace.d.ts.map +1 -0
  28. package/dist/agent-runtime/workspace.js +2025 -0
  29. package/dist/agent-runtime/workspace.js.map +1 -0
  30. package/dist/agents/adapters.d.ts.map +1 -1
  31. package/dist/agents/adapters.js +58 -13
  32. package/dist/agents/adapters.js.map +1 -1
  33. package/dist/agents/spawner.d.ts +8 -0
  34. package/dist/agents/spawner.d.ts.map +1 -1
  35. package/dist/agents/spawner.js +25 -3
  36. package/dist/agents/spawner.js.map +1 -1
  37. package/dist/cli/batch-exec.js +1 -1
  38. package/dist/cli/batch-exec.js.map +1 -1
  39. package/dist/cli/command-annotations.d.ts +15 -3
  40. package/dist/cli/command-annotations.d.ts.map +1 -1
  41. package/dist/cli/command-annotations.js +23 -3
  42. package/dist/cli/command-annotations.js.map +1 -1
  43. package/dist/cli/commands/agent.d.ts +2 -0
  44. package/dist/cli/commands/agent.d.ts.map +1 -1
  45. package/dist/cli/commands/agent.js +144 -27
  46. package/dist/cli/commands/agent.js.map +1 -1
  47. package/dist/cli/commands/agents.d.ts.map +1 -1
  48. package/dist/cli/commands/agents.js +5 -5
  49. package/dist/cli/commands/agents.js.map +1 -1
  50. package/dist/cli/commands/derive.d.ts.map +1 -1
  51. package/dist/cli/commands/derive.js +118 -3
  52. package/dist/cli/commands/derive.js.map +1 -1
  53. package/dist/cli/commands/guard.d.ts.map +1 -1
  54. package/dist/cli/commands/guard.js +8 -6
  55. package/dist/cli/commands/guard.js.map +1 -1
  56. package/dist/cli/commands/index.d.ts +1 -0
  57. package/dist/cli/commands/index.d.ts.map +1 -1
  58. package/dist/cli/commands/index.js +1 -0
  59. package/dist/cli/commands/index.js.map +1 -1
  60. package/dist/cli/commands/init.d.ts.map +1 -1
  61. package/dist/cli/commands/init.js +20 -0
  62. package/dist/cli/commands/init.js.map +1 -1
  63. package/dist/cli/commands/item.d.ts.map +1 -1
  64. package/dist/cli/commands/item.js +205 -47
  65. package/dist/cli/commands/item.js.map +1 -1
  66. package/dist/cli/commands/log.d.ts.map +1 -1
  67. package/dist/cli/commands/log.js +24 -10
  68. package/dist/cli/commands/log.js.map +1 -1
  69. package/dist/cli/commands/meta.d.ts.map +1 -1
  70. package/dist/cli/commands/meta.js +10 -1
  71. package/dist/cli/commands/meta.js.map +1 -1
  72. package/dist/cli/commands/plan-import.d.ts +3 -3
  73. package/dist/cli/commands/plan-import.d.ts.map +1 -1
  74. package/dist/cli/commands/plan-import.js +213 -528
  75. package/dist/cli/commands/plan-import.js.map +1 -1
  76. package/dist/cli/commands/plan.d.ts.map +1 -1
  77. package/dist/cli/commands/plan.js +533 -83
  78. package/dist/cli/commands/plan.js.map +1 -1
  79. package/dist/cli/commands/review.d.ts +14 -0
  80. package/dist/cli/commands/review.d.ts.map +1 -0
  81. package/dist/cli/commands/review.js +1142 -0
  82. package/dist/cli/commands/review.js.map +1 -0
  83. package/dist/cli/commands/serve.d.ts +1 -0
  84. package/dist/cli/commands/serve.d.ts.map +1 -1
  85. package/dist/cli/commands/serve.js +33 -10
  86. package/dist/cli/commands/serve.js.map +1 -1
  87. package/dist/cli/commands/session/checkpoint.d.ts +2 -4
  88. package/dist/cli/commands/session/checkpoint.d.ts.map +1 -1
  89. package/dist/cli/commands/session/checkpoint.js +6 -107
  90. package/dist/cli/commands/session/checkpoint.js.map +1 -1
  91. package/dist/cli/commands/session/commands.d.ts.map +1 -1
  92. package/dist/cli/commands/session/commands.js +33 -23
  93. package/dist/cli/commands/session/commands.js.map +1 -1
  94. package/dist/cli/commands/session/compact.js +4 -4
  95. package/dist/cli/commands/session/compact.js.map +1 -1
  96. package/dist/cli/commands/session/create.js +2 -2
  97. package/dist/cli/commands/session/create.js.map +1 -1
  98. package/dist/cli/commands/session/format.d.ts.map +1 -1
  99. package/dist/cli/commands/session/format.js +1 -6
  100. package/dist/cli/commands/session/format.js.map +1 -1
  101. package/dist/cli/commands/session/log.d.ts +32 -7
  102. package/dist/cli/commands/session/log.d.ts.map +1 -1
  103. package/dist/cli/commands/session/log.js +166 -60
  104. package/dist/cli/commands/session/log.js.map +1 -1
  105. package/dist/cli/commands/session/migrate.d.ts +9 -0
  106. package/dist/cli/commands/session/migrate.d.ts.map +1 -0
  107. package/dist/cli/commands/session/migrate.js +46 -0
  108. package/dist/cli/commands/session/migrate.js.map +1 -0
  109. package/dist/cli/commands/session/stale-close.d.ts.map +1 -1
  110. package/dist/cli/commands/session/stale-close.js +5 -8
  111. package/dist/cli/commands/session/stale-close.js.map +1 -1
  112. package/dist/cli/commands/session/types.d.ts +1 -1
  113. package/dist/cli/commands/session/types.d.ts.map +1 -1
  114. package/dist/cli/commands/setup.d.ts +2 -2
  115. package/dist/cli/commands/setup.d.ts.map +1 -1
  116. package/dist/cli/commands/setup.js +287 -257
  117. package/dist/cli/commands/setup.js.map +1 -1
  118. package/dist/cli/commands/shadow.d.ts.map +1 -1
  119. package/dist/cli/commands/shadow.js +147 -31
  120. package/dist/cli/commands/shadow.js.map +1 -1
  121. package/dist/cli/commands/skill-crud.d.ts +7 -0
  122. package/dist/cli/commands/skill-crud.d.ts.map +1 -1
  123. package/dist/cli/commands/skill-crud.js +41 -18
  124. package/dist/cli/commands/skill-crud.js.map +1 -1
  125. package/dist/cli/commands/skill-diff.d.ts.map +1 -1
  126. package/dist/cli/commands/skill-diff.js +29 -3
  127. package/dist/cli/commands/skill-diff.js.map +1 -1
  128. package/dist/cli/commands/skill-install.d.ts.map +1 -1
  129. package/dist/cli/commands/skill-install.js +5 -4
  130. package/dist/cli/commands/skill-install.js.map +1 -1
  131. package/dist/cli/commands/task.d.ts.map +1 -1
  132. package/dist/cli/commands/task.js +359 -49
  133. package/dist/cli/commands/task.js.map +1 -1
  134. package/dist/cli/commands/trait.d.ts.map +1 -1
  135. package/dist/cli/commands/trait.js +5 -27
  136. package/dist/cli/commands/trait.js.map +1 -1
  137. package/dist/cli/commands/validate.d.ts.map +1 -1
  138. package/dist/cli/commands/validate.js +113 -52
  139. package/dist/cli/commands/validate.js.map +1 -1
  140. package/dist/cli/index.d.ts.map +1 -1
  141. package/dist/cli/index.js +69 -2
  142. package/dist/cli/index.js.map +1 -1
  143. package/dist/cli/output.d.ts +26 -0
  144. package/dist/cli/output.d.ts.map +1 -1
  145. package/dist/cli/output.js +108 -1
  146. package/dist/cli/output.js.map +1 -1
  147. package/dist/cli/sync-mode.d.ts +44 -0
  148. package/dist/cli/sync-mode.d.ts.map +1 -0
  149. package/dist/cli/sync-mode.js +64 -0
  150. package/dist/cli/sync-mode.js.map +1 -0
  151. package/dist/daemon/middleware/project-context.ts +25 -7
  152. package/dist/daemon/project-context.ts +18 -0
  153. package/dist/daemon/routes/agent-dispatch.ts +107 -23
  154. package/dist/daemon/routes/aggregation.ts +184 -0
  155. package/dist/daemon/routes/inbox.ts +5 -0
  156. package/dist/daemon/routes/items.ts +167 -0
  157. package/dist/daemon/routes/meta.ts +141 -1
  158. package/dist/daemon/routes/plans.ts +147 -0
  159. package/dist/daemon/routes/projects.ts +28 -6
  160. package/dist/daemon/routes/ref-resolution.ts +119 -0
  161. package/dist/daemon/routes/refs.ts +42 -0
  162. package/dist/daemon/routes/session-related.ts +140 -0
  163. package/dist/daemon/routes/sessions.ts +581 -0
  164. package/dist/daemon/routes/tasks.ts +257 -2
  165. package/dist/daemon/routes/triage.ts +40 -1
  166. package/dist/daemon/routes/validation.ts +1 -1
  167. package/dist/daemon/server.ts +165 -50
  168. package/dist/daemon/session-sync.ts +11 -0
  169. package/dist/daemon/shadow-sync.ts +11 -0
  170. package/dist/daemon/watcher.ts +56 -5
  171. package/dist/daemon/websocket/project-resolution.ts +77 -0
  172. package/dist/export/json.d.ts.map +1 -1
  173. package/dist/export/json.js +104 -1
  174. package/dist/export/json.js.map +1 -1
  175. package/dist/export/types.d.ts +52 -1
  176. package/dist/export/types.d.ts.map +1 -1
  177. package/dist/index.d.ts +1 -0
  178. package/dist/index.d.ts.map +1 -1
  179. package/dist/index.js +1 -0
  180. package/dist/index.js.map +1 -1
  181. package/dist/parser/agent-detection.d.ts +1 -1
  182. package/dist/parser/agent-detection.d.ts.map +1 -1
  183. package/dist/parser/agent-detection.js +10 -0
  184. package/dist/parser/agent-detection.js.map +1 -1
  185. package/dist/parser/alignment.d.ts.map +1 -1
  186. package/dist/parser/alignment.js +4 -2
  187. package/dist/parser/alignment.js.map +1 -1
  188. package/dist/parser/config.d.ts +397 -2
  189. package/dist/parser/config.d.ts.map +1 -1
  190. package/dist/parser/config.js +125 -3
  191. package/dist/parser/config.js.map +1 -1
  192. package/dist/parser/dispatch-workspaces.d.ts +18 -0
  193. package/dist/parser/dispatch-workspaces.d.ts.map +1 -0
  194. package/dist/parser/dispatch-workspaces.js +209 -0
  195. package/dist/parser/dispatch-workspaces.js.map +1 -0
  196. package/dist/parser/doctor.d.ts.map +1 -1
  197. package/dist/parser/doctor.js +27 -8
  198. package/dist/parser/doctor.js.map +1 -1
  199. package/dist/parser/file-lock.d.ts.map +1 -1
  200. package/dist/parser/file-lock.js +9 -2
  201. package/dist/parser/file-lock.js.map +1 -1
  202. package/dist/parser/index.d.ts +6 -0
  203. package/dist/parser/index.d.ts.map +1 -1
  204. package/dist/parser/index.js +6 -0
  205. package/dist/parser/index.js.map +1 -1
  206. package/dist/parser/plans.d.ts.map +1 -1
  207. package/dist/parser/plans.js +1 -0
  208. package/dist/parser/plans.js.map +1 -1
  209. package/dist/parser/refs.d.ts +8 -1
  210. package/dist/parser/refs.d.ts.map +1 -1
  211. package/dist/parser/refs.js +27 -1
  212. package/dist/parser/refs.js.map +1 -1
  213. package/dist/parser/review-operations.d.ts +72 -0
  214. package/dist/parser/review-operations.d.ts.map +1 -0
  215. package/dist/parser/review-operations.js +185 -0
  216. package/dist/parser/review-operations.js.map +1 -0
  217. package/dist/parser/review-task-integration.d.ts +78 -0
  218. package/dist/parser/review-task-integration.d.ts.map +1 -0
  219. package/dist/parser/review-task-integration.js +173 -0
  220. package/dist/parser/review-task-integration.js.map +1 -0
  221. package/dist/parser/review-threads.d.ts +101 -0
  222. package/dist/parser/review-threads.d.ts.map +1 -0
  223. package/dist/parser/review-threads.js +222 -0
  224. package/dist/parser/review-threads.js.map +1 -0
  225. package/dist/parser/review-validation.d.ts +69 -0
  226. package/dist/parser/review-validation.d.ts.map +1 -0
  227. package/dist/parser/review-validation.js +207 -0
  228. package/dist/parser/review-validation.js.map +1 -0
  229. package/dist/parser/reviews.d.ts +58 -0
  230. package/dist/parser/reviews.d.ts.map +1 -0
  231. package/dist/parser/reviews.js +230 -0
  232. package/dist/parser/reviews.js.map +1 -0
  233. package/dist/parser/session-branch.d.ts +91 -0
  234. package/dist/parser/session-branch.d.ts.map +1 -0
  235. package/dist/parser/session-branch.js +565 -0
  236. package/dist/parser/session-branch.js.map +1 -0
  237. package/dist/parser/session-sync-scheduler.d.ts +53 -0
  238. package/dist/parser/session-sync-scheduler.d.ts.map +1 -0
  239. package/dist/parser/session-sync-scheduler.js +100 -0
  240. package/dist/parser/session-sync-scheduler.js.map +1 -0
  241. package/dist/parser/setup-status.d.ts +7 -1
  242. package/dist/parser/setup-status.d.ts.map +1 -1
  243. package/dist/parser/setup-status.js +104 -39
  244. package/dist/parser/setup-status.js.map +1 -1
  245. package/dist/parser/shadow-sync-scheduler.d.ts +71 -0
  246. package/dist/parser/shadow-sync-scheduler.d.ts.map +1 -0
  247. package/dist/parser/shadow-sync-scheduler.js +139 -0
  248. package/dist/parser/shadow-sync-scheduler.js.map +1 -0
  249. package/dist/parser/shadow.d.ts +121 -14
  250. package/dist/parser/shadow.d.ts.map +1 -1
  251. package/dist/parser/shadow.js +752 -27
  252. package/dist/parser/shadow.js.map +1 -1
  253. package/dist/parser/skill-render.d.ts +24 -0
  254. package/dist/parser/skill-render.d.ts.map +1 -1
  255. package/dist/parser/skill-render.js +98 -26
  256. package/dist/parser/skill-render.js.map +1 -1
  257. package/dist/parser/validate.d.ts +43 -3
  258. package/dist/parser/validate.d.ts.map +1 -1
  259. package/dist/parser/validate.js +204 -30
  260. package/dist/parser/validate.js.map +1 -1
  261. package/dist/parser/yaml.d.ts +47 -11
  262. package/dist/parser/yaml.d.ts.map +1 -1
  263. package/dist/parser/yaml.js +329 -149
  264. package/dist/parser/yaml.js.map +1 -1
  265. package/dist/review/checks.d.ts +97 -0
  266. package/dist/review/checks.d.ts.map +1 -0
  267. package/dist/review/checks.js +175 -0
  268. package/dist/review/checks.js.map +1 -0
  269. package/dist/review/index.d.ts +3 -0
  270. package/dist/review/index.d.ts.map +1 -0
  271. package/dist/review/index.js +3 -0
  272. package/dist/review/index.js.map +1 -0
  273. package/dist/review/subject-bindings.d.ts +83 -0
  274. package/dist/review/subject-bindings.d.ts.map +1 -0
  275. package/dist/review/subject-bindings.js +175 -0
  276. package/dist/review/subject-bindings.js.map +1 -0
  277. package/dist/schema/common.d.ts +26 -0
  278. package/dist/schema/common.d.ts.map +1 -1
  279. package/dist/schema/common.js +13 -0
  280. package/dist/schema/common.js.map +1 -1
  281. package/dist/schema/dispatch-workspace.d.ts +2643 -0
  282. package/dist/schema/dispatch-workspace.d.ts.map +1 -0
  283. package/dist/schema/dispatch-workspace.js +187 -0
  284. package/dist/schema/dispatch-workspace.js.map +1 -0
  285. package/dist/schema/inbox.d.ts +8 -8
  286. package/dist/schema/index.d.ts +2 -0
  287. package/dist/schema/index.d.ts.map +1 -1
  288. package/dist/schema/index.js +2 -0
  289. package/dist/schema/index.js.map +1 -1
  290. package/dist/schema/meta.d.ts +663 -116
  291. package/dist/schema/meta.d.ts.map +1 -1
  292. package/dist/schema/meta.js +28 -0
  293. package/dist/schema/meta.js.map +1 -1
  294. package/dist/schema/plan.d.ts +30 -19
  295. package/dist/schema/plan.d.ts.map +1 -1
  296. package/dist/schema/plan.js +3 -1
  297. package/dist/schema/plan.js.map +1 -1
  298. package/dist/schema/review-records.d.ts +2676 -0
  299. package/dist/schema/review-records.d.ts.map +1 -0
  300. package/dist/schema/review-records.js +232 -0
  301. package/dist/schema/review-records.js.map +1 -0
  302. package/dist/schema/spec.d.ts +32 -14
  303. package/dist/schema/spec.d.ts.map +1 -1
  304. package/dist/schema/spec.js +5 -0
  305. package/dist/schema/spec.js.map +1 -1
  306. package/dist/schema/task.d.ts +187 -29
  307. package/dist/schema/task.d.ts.map +1 -1
  308. package/dist/schema/task.js +12 -2
  309. package/dist/schema/task.js.map +1 -1
  310. package/dist/schema/triage.d.ts +22 -22
  311. package/dist/sessions/cache.d.ts +119 -0
  312. package/dist/sessions/cache.d.ts.map +1 -0
  313. package/dist/sessions/cache.js +284 -0
  314. package/dist/sessions/cache.js.map +1 -0
  315. package/dist/sessions/index.d.ts +1 -0
  316. package/dist/sessions/index.d.ts.map +1 -1
  317. package/dist/sessions/index.js +2 -0
  318. package/dist/sessions/index.js.map +1 -1
  319. package/dist/sessions/legacy.d.ts +77 -0
  320. package/dist/sessions/legacy.d.ts.map +1 -0
  321. package/dist/sessions/legacy.js +146 -0
  322. package/dist/sessions/legacy.js.map +1 -0
  323. package/dist/sessions/store.d.ts +115 -71
  324. package/dist/sessions/store.d.ts.map +1 -1
  325. package/dist/sessions/store.js +357 -182
  326. package/dist/sessions/store.js.map +1 -1
  327. package/dist/sessions/types.d.ts +44 -16
  328. package/dist/sessions/types.d.ts.map +1 -1
  329. package/dist/sessions/types.js +11 -2
  330. package/dist/sessions/types.js.map +1 -1
  331. package/dist/strings/errors.d.ts +32 -0
  332. package/dist/strings/errors.d.ts.map +1 -1
  333. package/dist/strings/errors.js +17 -0
  334. package/dist/strings/errors.js.map +1 -1
  335. package/dist/strings/labels.d.ts +1 -0
  336. package/dist/strings/labels.d.ts.map +1 -1
  337. package/dist/strings/labels.js +1 -0
  338. package/dist/strings/labels.js.map +1 -1
  339. package/dist/utils/activity.d.ts +101 -0
  340. package/dist/utils/activity.d.ts.map +1 -0
  341. package/dist/utils/activity.js +408 -0
  342. package/dist/utils/activity.js.map +1 -0
  343. package/dist/utils/git.d.ts +31 -0
  344. package/dist/utils/git.d.ts.map +1 -1
  345. package/dist/utils/git.js +87 -0
  346. package/dist/utils/git.js.map +1 -1
  347. package/dist/utils/index.d.ts +2 -0
  348. package/dist/utils/index.d.ts.map +1 -1
  349. package/dist/utils/index.js +1 -0
  350. package/dist/utils/index.js.map +1 -1
  351. package/dist/web-ui/_app/immutable/assets/0.tmlwn-Ih.css +1 -0
  352. package/dist/web-ui/_app/immutable/assets/9.BwwJybWx.css +1 -0
  353. package/dist/web-ui/_app/immutable/chunks/2KqE8gtn.js +1 -0
  354. package/dist/web-ui/_app/immutable/chunks/70-t_QvE.js +1 -0
  355. package/dist/web-ui/_app/immutable/chunks/AiWQj974.js +1 -0
  356. package/dist/web-ui/_app/immutable/chunks/B25nWFyA.js +5 -0
  357. package/dist/web-ui/_app/immutable/chunks/B2bcA_Q_.js +1 -0
  358. package/dist/web-ui/_app/immutable/chunks/B5e5HYyB.js +1 -0
  359. package/dist/web-ui/_app/immutable/chunks/B7-5z6eA.js +1 -0
  360. package/dist/web-ui/_app/immutable/chunks/B7bGmhK0.js +1 -0
  361. package/dist/web-ui/_app/immutable/chunks/B8tYZKAE.js +1 -0
  362. package/dist/web-ui/_app/immutable/chunks/BFGAyJjD.js +1 -0
  363. package/dist/web-ui/_app/immutable/chunks/BG0850zf.js +1 -0
  364. package/dist/web-ui/_app/immutable/chunks/BG8eSzAd.js +1 -0
  365. package/dist/web-ui/_app/immutable/chunks/BIMxXS8I.js +1 -0
  366. package/dist/web-ui/_app/immutable/chunks/BSzL1fpU.js +1 -0
  367. package/dist/web-ui/_app/immutable/chunks/BYtjHfeq.js +1 -0
  368. package/dist/web-ui/_app/immutable/chunks/{D1ArdqNb.js → Bp5pFYXL.js} +1 -1
  369. package/dist/web-ui/_app/immutable/chunks/BsJFsuAT.js +1 -0
  370. package/dist/web-ui/_app/immutable/chunks/BvpNHcD6.js +1 -0
  371. package/dist/web-ui/_app/immutable/chunks/BypqA25-.js +1 -0
  372. package/dist/web-ui/_app/immutable/chunks/C0w6WDm5.js +1 -0
  373. package/dist/web-ui/_app/immutable/chunks/C5_PAZ0y.js +1 -0
  374. package/dist/web-ui/_app/immutable/chunks/CDRO15Iv.js +1 -0
  375. package/dist/web-ui/_app/immutable/chunks/CF1CoqD5.js +1 -0
  376. package/dist/web-ui/_app/immutable/chunks/CS2sa4_m.js +1 -0
  377. package/dist/web-ui/_app/immutable/chunks/CWUQwB9H.js +1 -0
  378. package/dist/web-ui/_app/immutable/chunks/CY5FDdSU.js +1 -0
  379. package/dist/web-ui/_app/immutable/chunks/C_7MTDoj.js +1 -0
  380. package/dist/web-ui/_app/immutable/chunks/CaAJD3dl.js +1 -0
  381. package/dist/web-ui/_app/immutable/chunks/{i-XnOIX0.js → ChB5iyEL.js} +1 -1
  382. package/dist/web-ui/_app/immutable/chunks/ChQD-6N8.js +1 -0
  383. package/dist/web-ui/_app/immutable/chunks/{BCkp8Hs8.js → CqbsoCwA.js} +1 -1
  384. package/dist/web-ui/_app/immutable/chunks/DCeJW50p.js +1 -0
  385. package/dist/web-ui/_app/immutable/chunks/DJtZNgcs.js +1 -0
  386. package/dist/web-ui/_app/immutable/chunks/DKIeaprD.js +1 -0
  387. package/dist/web-ui/_app/immutable/chunks/DLd2uVIA.js +1 -0
  388. package/dist/web-ui/_app/immutable/chunks/DW_subyT.js +2 -0
  389. package/dist/web-ui/_app/immutable/chunks/DbU6lVn0.js +1 -0
  390. package/dist/web-ui/_app/immutable/chunks/Dc7ZCC5m.js +1 -0
  391. package/dist/web-ui/_app/immutable/chunks/Dd5umPsk.js +2 -0
  392. package/dist/web-ui/_app/immutable/chunks/Dg_zDpDS.js +1 -0
  393. package/dist/web-ui/_app/immutable/chunks/Dgqu8Yuc.js +1 -0
  394. package/dist/web-ui/_app/immutable/chunks/DmxsPZTB.js +1 -0
  395. package/dist/web-ui/_app/immutable/chunks/DphTaFUB.js +1 -0
  396. package/dist/web-ui/_app/immutable/chunks/DqK4iHp0.js +1 -0
  397. package/dist/web-ui/_app/immutable/chunks/DqT6OH_u.js +2 -0
  398. package/dist/web-ui/_app/immutable/chunks/Ds9I9wQb.js +1 -0
  399. package/dist/web-ui/_app/immutable/chunks/Du5ng3u4.js +1 -0
  400. package/dist/web-ui/_app/immutable/chunks/DxJw79Wi.js +1 -0
  401. package/dist/web-ui/_app/immutable/chunks/GFTX8GgV.js +1 -0
  402. package/dist/web-ui/_app/immutable/chunks/HNjs76Zz.js +1 -0
  403. package/dist/web-ui/_app/immutable/chunks/HVMjDi4_.js +1 -0
  404. package/dist/web-ui/_app/immutable/chunks/P0A_fJvS.js +1 -0
  405. package/dist/web-ui/_app/immutable/chunks/T3vGWjIL.js +1 -0
  406. package/dist/web-ui/_app/immutable/chunks/VTmrX9Qu.js +1 -0
  407. package/dist/web-ui/_app/immutable/chunks/Xvwhx_F1.js +1 -0
  408. package/dist/web-ui/_app/immutable/chunks/Yyz1XMQA.js +1 -0
  409. package/dist/web-ui/_app/immutable/chunks/dh5HeqUr.js +1 -0
  410. package/dist/web-ui/_app/immutable/chunks/fZMteyca.js +62 -0
  411. package/dist/web-ui/_app/immutable/chunks/{D28BF5MJ.js → gPrj-hqC.js} +1 -1
  412. package/dist/web-ui/_app/immutable/chunks/htcWMiYN.js +1 -0
  413. package/dist/web-ui/_app/immutable/chunks/oTsvd9y4.js +1 -0
  414. package/dist/web-ui/_app/immutable/chunks/qJfLUwU4.js +1 -0
  415. package/dist/web-ui/_app/immutable/chunks/xCtiO_JE.js +1 -0
  416. package/dist/web-ui/_app/immutable/chunks/y4GeEH6k.js +1 -0
  417. package/dist/web-ui/_app/immutable/entry/app.C4h_eOn6.js +2 -0
  418. package/dist/web-ui/_app/immutable/entry/start.CQFTf9ep.js +1 -0
  419. package/dist/web-ui/_app/immutable/nodes/0.Dh1xO970.js +1 -0
  420. package/dist/web-ui/_app/immutable/nodes/1.l75D3Opx.js +1 -0
  421. package/dist/web-ui/_app/immutable/nodes/10.DBidBPc-.js +1 -0
  422. package/dist/web-ui/_app/immutable/nodes/11.Ab0gUKWe.js +1 -0
  423. package/dist/web-ui/_app/immutable/nodes/12.CMsnoxfs.js +1 -0
  424. package/dist/web-ui/_app/immutable/nodes/13.D8YKuknB.js +1 -0
  425. package/dist/web-ui/_app/immutable/nodes/14.DZ0aan7y.js +1 -0
  426. package/dist/web-ui/_app/immutable/nodes/15.CUIKreDL.js +2 -0
  427. package/dist/web-ui/_app/immutable/nodes/16.BWc8--BO.js +1 -0
  428. package/dist/web-ui/_app/immutable/nodes/2.CDUonbuh.js +1 -0
  429. package/dist/web-ui/_app/immutable/nodes/3.Ctg3M00i.js +1 -0
  430. package/dist/web-ui/_app/immutable/nodes/4.Ci-JDwbA.js +2 -0
  431. package/dist/web-ui/_app/immutable/nodes/5.CTyEDAq0.js +1 -0
  432. package/dist/web-ui/_app/immutable/nodes/6.BTZZqsAb.js +1 -0
  433. package/dist/web-ui/_app/immutable/nodes/7.BI52g_Jo.js +137 -0
  434. package/dist/web-ui/_app/immutable/nodes/8.3hZPaB9x.js +1 -0
  435. package/dist/web-ui/_app/immutable/nodes/9.DS49kvwl.js +29 -0
  436. package/dist/web-ui/_app/version.json +1 -1
  437. package/dist/web-ui/favicon-192.png +0 -0
  438. package/dist/web-ui/favicon-32.png +0 -0
  439. package/dist/web-ui/favicon.ico +0 -0
  440. package/dist/web-ui/index.html +14 -11
  441. package/package.json +14 -7
  442. package/plugin/.claude-plugin/marketplace.json +1 -1
  443. package/plugin/.claude-plugin/plugin.json +1 -1
  444. package/plugin/plugins/kspec/skills/merge/SKILL.md +127 -0
  445. package/plugin/plugins/kspec/skills/plan/SKILL.md +55 -26
  446. package/plugin/plugins/kspec/skills/review/SKILL.md +350 -133
  447. package/plugin/plugins/kspec/skills/task-work/SKILL.md +96 -106
  448. package/templates/agents-sections/04-pr-workflow.md +15 -12
  449. package/templates/agents-sections/06-ralph-loop.md +15 -10
  450. package/templates/skills/manifest.yaml +25 -7
  451. package/templates/skills/merge/SKILL.md +120 -0
  452. package/templates/skills/plan/SKILL.md +55 -26
  453. package/templates/skills/review/SKILL.md +346 -130
  454. package/templates/skills/task-work/SKILL.md +93 -103
  455. package/dist/web-ui/_app/immutable/assets/0.BxCxvrZR.css +0 -1
  456. package/dist/web-ui/_app/immutable/chunks/B-CZR0q8.js +0 -1
  457. package/dist/web-ui/_app/immutable/chunks/B1IR5Su5.js +0 -1
  458. package/dist/web-ui/_app/immutable/chunks/B_Cvvtc4.js +0 -1
  459. package/dist/web-ui/_app/immutable/chunks/BtFaGGII.js +0 -1
  460. package/dist/web-ui/_app/immutable/chunks/Bu8JVsCH.js +0 -1
  461. package/dist/web-ui/_app/immutable/chunks/C87u-CNA.js +0 -1
  462. package/dist/web-ui/_app/immutable/chunks/CrFkBTYp.js +0 -1
  463. package/dist/web-ui/_app/immutable/chunks/D6RtLpzL.js +0 -1
  464. package/dist/web-ui/_app/immutable/chunks/D7FHSgx2.js +0 -1
  465. package/dist/web-ui/_app/immutable/chunks/DBXrsxZQ.js +0 -2
  466. package/dist/web-ui/_app/immutable/chunks/Da_hHMuA.js +0 -1
  467. package/dist/web-ui/_app/immutable/chunks/Do6LchSF.js +0 -1
  468. package/dist/web-ui/_app/immutable/chunks/DoNPtcAw.js +0 -1
  469. package/dist/web-ui/_app/immutable/chunks/DtUbXRZz.js +0 -1
  470. package/dist/web-ui/_app/immutable/chunks/DyFPRlLl.js +0 -1
  471. package/dist/web-ui/_app/immutable/chunks/DzAP8lRM.js +0 -1
  472. package/dist/web-ui/_app/immutable/chunks/DzVXElzN.js +0 -2
  473. package/dist/web-ui/_app/immutable/chunks/aoPBFken.js +0 -1
  474. package/dist/web-ui/_app/immutable/chunks/laxtrUO3.js +0 -1
  475. package/dist/web-ui/_app/immutable/chunks/q1nIWgqB.js +0 -1
  476. package/dist/web-ui/_app/immutable/chunks/sTLbk5Nm.js +0 -1
  477. package/dist/web-ui/_app/immutable/chunks/vwKgQu5P.js +0 -5
  478. package/dist/web-ui/_app/immutable/entry/app.BCwMcqnT.js +0 -2
  479. package/dist/web-ui/_app/immutable/entry/start.wKCQH-tt.js +0 -1
  480. package/dist/web-ui/_app/immutable/nodes/0.CjGVMG74.js +0 -1
  481. package/dist/web-ui/_app/immutable/nodes/1.B6_AIPan.js +0 -1
  482. package/dist/web-ui/_app/immutable/nodes/2.q4oCS7Ws.js +0 -1
  483. package/dist/web-ui/_app/immutable/nodes/3.rTKZf9o2.js +0 -1
  484. package/dist/web-ui/_app/immutable/nodes/4.DVIDRu1d.js +0 -1
  485. package/dist/web-ui/_app/immutable/nodes/5.8PtPXIOd.js +0 -1
  486. package/dist/web-ui/_app/immutable/nodes/6.ZZrTemy_.js +0 -1
  487. package/dist/web-ui/_app/immutable/nodes/7.IP-gxCxi.js +0 -1
@@ -35,13 +35,13 @@ export declare const TriageRecordSchema: z.ZodEffects<z.ZodObject<{
35
35
  updated_at: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodString]>>;
36
36
  }, "strip", z.ZodTypeAny, {
37
37
  status: "pending" | "triaged" | "acted_on";
38
- _ulid: string;
39
38
  created_at: string;
39
+ _ulid: string;
40
40
  inbox_ref: string;
41
41
  item_snapshot: string;
42
42
  evidence_refs: string[];
43
- action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
44
43
  updated_at?: string | undefined;
44
+ action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
45
45
  reasoning?: string | undefined;
46
46
  decided_by?: string | undefined;
47
47
  override_reasoning?: string | undefined;
@@ -51,12 +51,12 @@ export declare const TriageRecordSchema: z.ZodEffects<z.ZodObject<{
51
51
  result_ref?: string | undefined;
52
52
  }, {
53
53
  status: "pending" | "triaged" | "acted_on";
54
- _ulid: string;
55
54
  created_at: string;
55
+ _ulid: string;
56
56
  inbox_ref: string;
57
57
  item_snapshot: string;
58
- action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
59
58
  updated_at?: string | undefined;
59
+ action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
60
60
  reasoning?: string | undefined;
61
61
  decided_by?: string | undefined;
62
62
  evidence_refs?: string[] | undefined;
@@ -67,13 +67,13 @@ export declare const TriageRecordSchema: z.ZodEffects<z.ZodObject<{
67
67
  result_ref?: string | undefined;
68
68
  }>, {
69
69
  status: "pending" | "triaged" | "acted_on";
70
- _ulid: string;
71
70
  created_at: string;
71
+ _ulid: string;
72
72
  inbox_ref: string;
73
73
  item_snapshot: string;
74
74
  evidence_refs: string[];
75
- action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
76
75
  updated_at?: string | undefined;
76
+ action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
77
77
  reasoning?: string | undefined;
78
78
  decided_by?: string | undefined;
79
79
  override_reasoning?: string | undefined;
@@ -83,12 +83,12 @@ export declare const TriageRecordSchema: z.ZodEffects<z.ZodObject<{
83
83
  result_ref?: string | undefined;
84
84
  }, {
85
85
  status: "pending" | "triaged" | "acted_on";
86
- _ulid: string;
87
86
  created_at: string;
87
+ _ulid: string;
88
88
  inbox_ref: string;
89
89
  item_snapshot: string;
90
- action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
91
90
  updated_at?: string | undefined;
91
+ action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
92
92
  reasoning?: string | undefined;
93
93
  decided_by?: string | undefined;
94
94
  evidence_refs?: string[] | undefined;
@@ -115,8 +115,8 @@ export declare const TriageRecordInputSchema: z.ZodObject<{
115
115
  inbox_ref: string;
116
116
  item_snapshot: string;
117
117
  status?: "pending" | "triaged" | "acted_on" | undefined;
118
- _ulid?: string | undefined;
119
118
  created_at?: string | undefined;
119
+ _ulid?: string | undefined;
120
120
  action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
121
121
  reasoning?: string | undefined;
122
122
  decided_by?: string | undefined;
@@ -125,8 +125,8 @@ export declare const TriageRecordInputSchema: z.ZodObject<{
125
125
  inbox_ref: string;
126
126
  item_snapshot: string;
127
127
  status?: "pending" | "triaged" | "acted_on" | undefined;
128
- _ulid?: string | undefined;
129
128
  created_at?: string | undefined;
129
+ _ulid?: string | undefined;
130
130
  action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
131
131
  reasoning?: string | undefined;
132
132
  decided_by?: string | undefined;
@@ -156,13 +156,13 @@ export declare const TriageFileSchema: z.ZodObject<{
156
156
  updated_at: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodString]>>;
157
157
  }, "strip", z.ZodTypeAny, {
158
158
  status: "pending" | "triaged" | "acted_on";
159
- _ulid: string;
160
159
  created_at: string;
160
+ _ulid: string;
161
161
  inbox_ref: string;
162
162
  item_snapshot: string;
163
163
  evidence_refs: string[];
164
- action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
165
164
  updated_at?: string | undefined;
165
+ action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
166
166
  reasoning?: string | undefined;
167
167
  decided_by?: string | undefined;
168
168
  override_reasoning?: string | undefined;
@@ -172,12 +172,12 @@ export declare const TriageFileSchema: z.ZodObject<{
172
172
  result_ref?: string | undefined;
173
173
  }, {
174
174
  status: "pending" | "triaged" | "acted_on";
175
- _ulid: string;
176
175
  created_at: string;
176
+ _ulid: string;
177
177
  inbox_ref: string;
178
178
  item_snapshot: string;
179
- action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
180
179
  updated_at?: string | undefined;
180
+ action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
181
181
  reasoning?: string | undefined;
182
182
  decided_by?: string | undefined;
183
183
  evidence_refs?: string[] | undefined;
@@ -188,13 +188,13 @@ export declare const TriageFileSchema: z.ZodObject<{
188
188
  result_ref?: string | undefined;
189
189
  }>, {
190
190
  status: "pending" | "triaged" | "acted_on";
191
- _ulid: string;
192
191
  created_at: string;
192
+ _ulid: string;
193
193
  inbox_ref: string;
194
194
  item_snapshot: string;
195
195
  evidence_refs: string[];
196
- action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
197
196
  updated_at?: string | undefined;
197
+ action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
198
198
  reasoning?: string | undefined;
199
199
  decided_by?: string | undefined;
200
200
  override_reasoning?: string | undefined;
@@ -204,12 +204,12 @@ export declare const TriageFileSchema: z.ZodObject<{
204
204
  result_ref?: string | undefined;
205
205
  }, {
206
206
  status: "pending" | "triaged" | "acted_on";
207
- _ulid: string;
208
207
  created_at: string;
208
+ _ulid: string;
209
209
  inbox_ref: string;
210
210
  item_snapshot: string;
211
- action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
212
211
  updated_at?: string | undefined;
212
+ action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
213
213
  reasoning?: string | undefined;
214
214
  decided_by?: string | undefined;
215
215
  evidence_refs?: string[] | undefined;
@@ -223,13 +223,13 @@ export declare const TriageFileSchema: z.ZodObject<{
223
223
  kynetic_triage: string;
224
224
  triage: {
225
225
  status: "pending" | "triaged" | "acted_on";
226
- _ulid: string;
227
226
  created_at: string;
227
+ _ulid: string;
228
228
  inbox_ref: string;
229
229
  item_snapshot: string;
230
230
  evidence_refs: string[];
231
- action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
232
231
  updated_at?: string | undefined;
232
+ action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
233
233
  reasoning?: string | undefined;
234
234
  decided_by?: string | undefined;
235
235
  override_reasoning?: string | undefined;
@@ -241,12 +241,12 @@ export declare const TriageFileSchema: z.ZodObject<{
241
241
  }, {
242
242
  triage: {
243
243
  status: "pending" | "triaged" | "acted_on";
244
- _ulid: string;
245
244
  created_at: string;
245
+ _ulid: string;
246
246
  inbox_ref: string;
247
247
  item_snapshot: string;
248
- action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
249
248
  updated_at?: string | undefined;
249
+ action?: "promote" | "delete" | "defer" | "spec-gap" | "duplicate" | undefined;
250
250
  reasoning?: string | undefined;
251
251
  decided_by?: string | undefined;
252
252
  evidence_refs?: string[] | undefined;
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Session summary cache.
3
+ *
4
+ * In-memory cache for session metadata. Reads only session.yaml files —
5
+ * never reads events.jsonl. Summary stats for closed sessions come from
6
+ * persisted metadata fields. Active sessions get live event counts from
7
+ * an in-memory counter incremented on each event append.
8
+ *
9
+ * AC Coverage:
10
+ * - @session-summary-cache ac-cache-build: Build cache on first request
11
+ * - @session-summary-cache ac-cache-invalidate: Detect changes via directory listing diff
12
+ * - @session-summary-cache ac-cache-graceful: Skip corrupt/missing entries with warning
13
+ * - @session-list-pagination-api ac-metadata-only: List path reads only session.yaml
14
+ * - @session-summary-cache ac-active-refresh: Re-read metadata for active sessions on each request
15
+ * - @session-summary-cache ac-persist-on-close: Closed sessions read persisted stats from metadata
16
+ * - @session-summary-cache ac-live-counter: Active sessions serve event_count from in-memory counter
17
+ */
18
+ import { type SessionLogSummary } from "./store.js";
19
+ /**
20
+ * In-memory cache for session summaries.
21
+ *
22
+ * Usage:
23
+ * const cache = new SessionSummaryCache();
24
+ * const summaries = await cache.getAll(sessionsDir);
25
+ */
26
+ export declare class SessionSummaryCache {
27
+ /** Cached summaries keyed by session ID */
28
+ private entries;
29
+ /** Set of session IDs from last directory listing, used for invalidation */
30
+ private knownSessionIds;
31
+ /** Whether the cache has been populated at least once */
32
+ private initialized;
33
+ /** In-flight promise for cache build to prevent concurrent builds */
34
+ private buildPromise;
35
+ /**
36
+ * Live event counters for active sessions.
37
+ * Incremented on each event append, served as event_count for active sessions.
38
+ * Discarded when a session closes (persisted value takes over).
39
+ * AC: @session-summary-cache ac-live-counter
40
+ */
41
+ private liveEventCounts;
42
+ /**
43
+ * Get all session summaries, using cache when possible.
44
+ *
45
+ * AC: @session-summary-cache ac-cache-build — First call builds cache from disk.
46
+ * AC: @session-summary-cache ac-cache-invalidate — Subsequent calls diff directory listing.
47
+ * AC: @session-summary-cache ac-active-refresh — Active sessions get stats recomputed.
48
+ */
49
+ getAll(sessionsDir: string): Promise<SessionLogSummary[]>;
50
+ /**
51
+ * Get a single session's full summary, including stats from events.jsonl.
52
+ * Always computes fresh stats (not metadata-only) for detail views.
53
+ */
54
+ get(sessionsDir: string, sessionId: string): Promise<SessionLogSummary | null>;
55
+ /**
56
+ * Invalidate a specific session's cache entry.
57
+ * Next access will re-read from disk.
58
+ */
59
+ invalidate(sessionId: string): void;
60
+ /**
61
+ * Clear the entire cache. Next getAll() will rebuild from disk.
62
+ */
63
+ clear(): void;
64
+ /**
65
+ * Increment the live event counter for an active session.
66
+ * Called when an event is appended to events.jsonl during a running invocation.
67
+ * AC: @session-summary-cache ac-live-counter
68
+ */
69
+ incrementEventCount(sessionId: string): void;
70
+ /**
71
+ * Discard the live event counter for a session.
72
+ * Called when a session closes — the persisted stats in session.yaml take over.
73
+ * AC: @session-summary-cache ac-live-counter
74
+ */
75
+ discardLiveCounter(sessionId: string): void;
76
+ /**
77
+ * Get the current live event count for a session (for testing/inspection).
78
+ */
79
+ getLiveEventCount(sessionId: string): number;
80
+ /**
81
+ * Build the cache from scratch by reading all session directories.
82
+ *
83
+ * AC: @session-summary-cache ac-cache-build — Reads all session.yaml files.
84
+ * AC: @session-summary-cache ac-cache-graceful — Skips corrupt/missing entries.
85
+ *
86
+ * Uses in-flight promise dedup to prevent concurrent builds.
87
+ */
88
+ private build;
89
+ private doBuild;
90
+ /**
91
+ * Refresh the cache by detecting changes since last build.
92
+ *
93
+ * AC: @session-summary-cache ac-cache-invalidate — Detects new/removed sessions
94
+ * via directory listing diff and updates only affected entries.
95
+ * AC: @session-summary-cache ac-active-refresh — Recomputes stats for active sessions.
96
+ */
97
+ private refresh;
98
+ /**
99
+ * Get mtime of session.yaml for change detection.
100
+ * Returns 0 if the file doesn't exist.
101
+ */
102
+ private getMetadataMtime;
103
+ /**
104
+ * List session directories (same logic as listSessions in store.ts).
105
+ */
106
+ private listSessionDirs;
107
+ /**
108
+ * Return all cached summaries as an array.
109
+ * AC: @session-summary-cache ac-live-counter — Active sessions get event_count
110
+ * from the in-memory live counter instead of the (stale) metadata value.
111
+ */
112
+ private summaries;
113
+ }
114
+ /**
115
+ * Get (or create) a SessionSummaryCache scoped to a specific sessionsDir.
116
+ * Ensures multi-project daemon requests don't share cached session data.
117
+ */
118
+ export declare function getSessionCache(sessionsDir: string): SessionSummaryCache;
119
+ //# sourceMappingURL=cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/sessions/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,EACL,KAAK,iBAAiB,EAGvB,MAAM,YAAY,CAAC;AAWpB;;;;;;GAMG;AACH,qBAAa,mBAAmB;IAC9B,2CAA2C;IAC3C,OAAO,CAAC,OAAO,CAAiC;IAEhD,4EAA4E;IAC5E,OAAO,CAAC,eAAe,CAAqB;IAE5C,yDAAyD;IACzD,OAAO,CAAC,WAAW,CAAS;IAE5B,qEAAqE;IACrE,OAAO,CAAC,YAAY,CAA8B;IAElD;;;;;OAKG;IACH,OAAO,CAAC,eAAe,CAA6B;IAEpD;;;;;;OAMG;IACG,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAU/D;;;OAGG;IACG,GAAG,CACP,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;IAKpC;;;OAGG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAInC;;OAEG;IACH,KAAK,IAAI,IAAI;IAQb;;;;OAIG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAK5C;;;;OAIG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI3C;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAI5C;;;;;;;OAOG;YACW,KAAK;YAaL,OAAO;IA+BrB;;;;;;OAMG;YACW,OAAO;IA+ErB;;;OAGG;YACW,gBAAgB;IAa9B;;OAEG;YACW,eAAe;IAW7B;;;;OAIG;IACH,OAAO,CAAC,SAAS;CASlB;AAWD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,mBAAmB,CAOxE"}
@@ -0,0 +1,284 @@
1
+ /**
2
+ * Session summary cache.
3
+ *
4
+ * In-memory cache for session metadata. Reads only session.yaml files —
5
+ * never reads events.jsonl. Summary stats for closed sessions come from
6
+ * persisted metadata fields. Active sessions get live event counts from
7
+ * an in-memory counter incremented on each event append.
8
+ *
9
+ * AC Coverage:
10
+ * - @session-summary-cache ac-cache-build: Build cache on first request
11
+ * - @session-summary-cache ac-cache-invalidate: Detect changes via directory listing diff
12
+ * - @session-summary-cache ac-cache-graceful: Skip corrupt/missing entries with warning
13
+ * - @session-list-pagination-api ac-metadata-only: List path reads only session.yaml
14
+ * - @session-summary-cache ac-active-refresh: Re-read metadata for active sessions on each request
15
+ * - @session-summary-cache ac-persist-on-close: Closed sessions read persisted stats from metadata
16
+ * - @session-summary-cache ac-live-counter: Active sessions serve event_count from in-memory counter
17
+ */
18
+ import * as path from "node:path";
19
+ import * as fsPromises from "node:fs/promises";
20
+ import { getSessionLogSummary, getSessionMetadataOnly, } from "./store.js";
21
+ /**
22
+ * In-memory cache for session summaries.
23
+ *
24
+ * Usage:
25
+ * const cache = new SessionSummaryCache();
26
+ * const summaries = await cache.getAll(sessionsDir);
27
+ */
28
+ export class SessionSummaryCache {
29
+ /** Cached summaries keyed by session ID */
30
+ entries = new Map();
31
+ /** Set of session IDs from last directory listing, used for invalidation */
32
+ knownSessionIds = new Set();
33
+ /** Whether the cache has been populated at least once */
34
+ initialized = false;
35
+ /** In-flight promise for cache build to prevent concurrent builds */
36
+ buildPromise = null;
37
+ /**
38
+ * Live event counters for active sessions.
39
+ * Incremented on each event append, served as event_count for active sessions.
40
+ * Discarded when a session closes (persisted value takes over).
41
+ * AC: @session-summary-cache ac-live-counter
42
+ */
43
+ liveEventCounts = new Map();
44
+ /**
45
+ * Get all session summaries, using cache when possible.
46
+ *
47
+ * AC: @session-summary-cache ac-cache-build — First call builds cache from disk.
48
+ * AC: @session-summary-cache ac-cache-invalidate — Subsequent calls diff directory listing.
49
+ * AC: @session-summary-cache ac-active-refresh — Active sessions get stats recomputed.
50
+ */
51
+ async getAll(sessionsDir) {
52
+ if (!this.initialized) {
53
+ await this.build(sessionsDir);
54
+ return this.summaries();
55
+ }
56
+ await this.refresh(sessionsDir);
57
+ return this.summaries();
58
+ }
59
+ /**
60
+ * Get a single session's full summary, including stats from events.jsonl.
61
+ * Always computes fresh stats (not metadata-only) for detail views.
62
+ */
63
+ async get(sessionsDir, sessionId) {
64
+ const summary = await getSessionLogSummary(sessionsDir, sessionId);
65
+ return summary;
66
+ }
67
+ /**
68
+ * Invalidate a specific session's cache entry.
69
+ * Next access will re-read from disk.
70
+ */
71
+ invalidate(sessionId) {
72
+ this.entries.delete(sessionId);
73
+ }
74
+ /**
75
+ * Clear the entire cache. Next getAll() will rebuild from disk.
76
+ */
77
+ clear() {
78
+ this.entries.clear();
79
+ this.knownSessionIds.clear();
80
+ this.initialized = false;
81
+ this.buildPromise = null;
82
+ this.liveEventCounts.clear();
83
+ }
84
+ /**
85
+ * Increment the live event counter for an active session.
86
+ * Called when an event is appended to events.jsonl during a running invocation.
87
+ * AC: @session-summary-cache ac-live-counter
88
+ */
89
+ incrementEventCount(sessionId) {
90
+ const current = this.liveEventCounts.get(sessionId) ?? 0;
91
+ this.liveEventCounts.set(sessionId, current + 1);
92
+ }
93
+ /**
94
+ * Discard the live event counter for a session.
95
+ * Called when a session closes — the persisted stats in session.yaml take over.
96
+ * AC: @session-summary-cache ac-live-counter
97
+ */
98
+ discardLiveCounter(sessionId) {
99
+ this.liveEventCounts.delete(sessionId);
100
+ }
101
+ /**
102
+ * Get the current live event count for a session (for testing/inspection).
103
+ */
104
+ getLiveEventCount(sessionId) {
105
+ return this.liveEventCounts.get(sessionId) ?? 0;
106
+ }
107
+ /**
108
+ * Build the cache from scratch by reading all session directories.
109
+ *
110
+ * AC: @session-summary-cache ac-cache-build — Reads all session.yaml files.
111
+ * AC: @session-summary-cache ac-cache-graceful — Skips corrupt/missing entries.
112
+ *
113
+ * Uses in-flight promise dedup to prevent concurrent builds.
114
+ */
115
+ async build(sessionsDir) {
116
+ if (this.buildPromise) {
117
+ return this.buildPromise;
118
+ }
119
+ this.buildPromise = this.doBuild(sessionsDir);
120
+ try {
121
+ await this.buildPromise;
122
+ }
123
+ finally {
124
+ this.buildPromise = null;
125
+ }
126
+ }
127
+ async doBuild(sessionsDir) {
128
+ const sessionIds = await this.listSessionDirs(sessionsDir);
129
+ this.knownSessionIds = new Set(sessionIds);
130
+ // AC: @session-list-pagination-api ac-metadata-only — Read only session.yaml, not events.jsonl
131
+ const results = await Promise.all(sessionIds.map(async (id) => {
132
+ // AC: @session-summary-cache ac-cache-graceful
133
+ try {
134
+ const summary = await getSessionMetadataOnly(sessionsDir, id);
135
+ const mtimeMs = await this.getMetadataMtime(sessionsDir, id);
136
+ return { id, summary, mtimeMs };
137
+ }
138
+ catch (err) {
139
+ console.warn(`[session-cache] Skipping session ${id}: ${err instanceof Error ? err.message : String(err)}`);
140
+ return { id, summary: null, mtimeMs: 0 };
141
+ }
142
+ }));
143
+ this.entries.clear();
144
+ for (const { id, summary, mtimeMs } of results) {
145
+ if (summary) {
146
+ this.entries.set(id, { summary, mtimeMs });
147
+ }
148
+ }
149
+ this.initialized = true;
150
+ }
151
+ /**
152
+ * Refresh the cache by detecting changes since last build.
153
+ *
154
+ * AC: @session-summary-cache ac-cache-invalidate — Detects new/removed sessions
155
+ * via directory listing diff and updates only affected entries.
156
+ * AC: @session-summary-cache ac-active-refresh — Recomputes stats for active sessions.
157
+ */
158
+ async refresh(sessionsDir) {
159
+ const currentIds = await this.listSessionDirs(sessionsDir);
160
+ const currentSet = new Set(currentIds);
161
+ // Find new sessions (in current listing but not in cache)
162
+ const newIds = currentIds.filter((id) => !this.knownSessionIds.has(id));
163
+ // Find removed sessions (in cache but not in current listing)
164
+ const removedIds = [...this.knownSessionIds].filter((id) => !currentSet.has(id));
165
+ // Find active sessions that need stats refresh
166
+ // AC: @session-summary-cache ac-active-refresh
167
+ const activeIds = [...this.entries.values()]
168
+ .filter((entry) => entry.summary.status === "active")
169
+ .map((entry) => entry.summary.id);
170
+ // AC: @session-summary-cache ac-cache-invalidate — Detect in-place session.yaml changes
171
+ // Check mtime of session.yaml for all existing non-active cached sessions
172
+ const mtimeChangedIds = [];
173
+ const existingNonActiveIds = [...this.entries.entries()]
174
+ .filter(([, entry]) => entry.summary.status !== "active")
175
+ .map(([id]) => id)
176
+ .filter((id) => currentSet.has(id)); // still exists on disk
177
+ if (existingNonActiveIds.length > 0) {
178
+ const mtimeChecks = await Promise.all(existingNonActiveIds.map(async (id) => {
179
+ const currentMtime = await this.getMetadataMtime(sessionsDir, id);
180
+ const cached = this.entries.get(id);
181
+ return { id, changed: cached != null && currentMtime !== cached.mtimeMs };
182
+ }));
183
+ for (const { id, changed } of mtimeChecks) {
184
+ if (changed) {
185
+ mtimeChangedIds.push(id);
186
+ }
187
+ }
188
+ }
189
+ // Remove deleted sessions from cache
190
+ for (const id of removedIds) {
191
+ this.entries.delete(id);
192
+ }
193
+ // AC: @session-list-pagination-api ac-metadata-only — Read only session.yaml, not events.jsonl
194
+ const idsToRefresh = [...new Set([...newIds, ...activeIds, ...mtimeChangedIds])];
195
+ if (idsToRefresh.length > 0) {
196
+ const results = await Promise.all(idsToRefresh.map(async (id) => {
197
+ // AC: @session-summary-cache ac-cache-graceful
198
+ try {
199
+ const summary = await getSessionMetadataOnly(sessionsDir, id);
200
+ const mtimeMs = await this.getMetadataMtime(sessionsDir, id);
201
+ return { id, summary, mtimeMs };
202
+ }
203
+ catch (err) {
204
+ console.warn(`[session-cache] Skipping session ${id}: ${err instanceof Error ? err.message : String(err)}`);
205
+ return { id, summary: null, mtimeMs: 0 };
206
+ }
207
+ }));
208
+ for (const { id, summary, mtimeMs } of results) {
209
+ if (summary) {
210
+ this.entries.set(id, { summary, mtimeMs });
211
+ }
212
+ else {
213
+ // Remove from cache if it was there (e.g., active session that became unreadable)
214
+ this.entries.delete(id);
215
+ }
216
+ }
217
+ }
218
+ // Update known session IDs
219
+ this.knownSessionIds = currentSet;
220
+ }
221
+ /**
222
+ * Get mtime of session.yaml for change detection.
223
+ * Returns 0 if the file doesn't exist.
224
+ */
225
+ async getMetadataMtime(sessionsDir, sessionId) {
226
+ try {
227
+ const metadataPath = path.join(sessionsDir, sessionId, "session.yaml");
228
+ const stat = await fsPromises.stat(metadataPath);
229
+ return stat.mtimeMs;
230
+ }
231
+ catch {
232
+ return 0;
233
+ }
234
+ }
235
+ /**
236
+ * List session directories (same logic as listSessions in store.ts).
237
+ */
238
+ async listSessionDirs(sessionsDir) {
239
+ try {
240
+ const entries = await fsPromises.readdir(sessionsDir, {
241
+ withFileTypes: true,
242
+ });
243
+ return entries.filter((e) => e.isDirectory()).map((e) => e.name);
244
+ }
245
+ catch {
246
+ return [];
247
+ }
248
+ }
249
+ /**
250
+ * Return all cached summaries as an array.
251
+ * AC: @session-summary-cache ac-live-counter — Active sessions get event_count
252
+ * from the in-memory live counter instead of the (stale) metadata value.
253
+ */
254
+ summaries() {
255
+ return [...this.entries.values()].map((e) => {
256
+ const liveCount = this.liveEventCounts.get(e.summary.id);
257
+ if (e.summary.status === "active" && liveCount !== undefined) {
258
+ return { ...e.summary, event_count: liveCount };
259
+ }
260
+ return e.summary;
261
+ });
262
+ }
263
+ }
264
+ /**
265
+ * Per-sessionsDir cache registry.
266
+ *
267
+ * The daemon is multi-project: each request can target a different project root,
268
+ * each with its own sessionsDir. This registry ensures cache instances are scoped
269
+ * per sessionsDir to prevent cross-project session bleed.
270
+ */
271
+ const cacheRegistry = new Map();
272
+ /**
273
+ * Get (or create) a SessionSummaryCache scoped to a specific sessionsDir.
274
+ * Ensures multi-project daemon requests don't share cached session data.
275
+ */
276
+ export function getSessionCache(sessionsDir) {
277
+ let cache = cacheRegistry.get(sessionsDir);
278
+ if (!cache) {
279
+ cache = new SessionSummaryCache();
280
+ cacheRegistry.set(sessionsDir, cache);
281
+ }
282
+ return cache;
283
+ }
284
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/sessions/cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAEL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAWpB;;;;;;GAMG;AACH,MAAM,OAAO,mBAAmB;IAC9B,2CAA2C;IACnC,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IAEhD,4EAA4E;IACpE,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAE5C,yDAAyD;IACjD,WAAW,GAAG,KAAK,CAAC;IAE5B,qEAAqE;IAC7D,YAAY,GAAyB,IAAI,CAAC;IAElD;;;;;OAKG;IACK,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;IAEpD;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,WAAmB;QAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC9B,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAChC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,GAAG,CACP,WAAmB,EACnB,SAAiB;QAEjB,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACnE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;OAGG;IACH,UAAU,CAAC,SAAiB;QAC1B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,mBAAmB,CAAC,SAAiB;QACnC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;IACnD,CAAC;IAED;;;;OAIG;IACH,kBAAkB,CAAC,SAAiB;QAClC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,SAAiB;QACjC,OAAO,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,KAAK,CAAC,WAAmB;QACrC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,OAAO,IAAI,CAAC,YAAY,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,WAAmB;QACvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QAE3C,+FAA+F;QAC/F,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAC1B,+CAA+C;YAC/C,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC9D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAC7D,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;YAClC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CACV,oCAAoC,EAAE,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC9F,CAAC;gBACF,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;YAC3C,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,KAAK,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;YAC/C,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,OAAO,CAAC,WAAmB;QACvC,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QAEvC,0DAA0D;QAC1D,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAExE,8DAA8D;QAC9D,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,CACjD,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAC5B,CAAC;QAEF,+CAA+C;QAC/C,+CAA+C;QAC/C,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;aACzC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC;aACpD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEpC,wFAAwF;QACxF,0EAA0E;QAC1E,MAAM,eAAe,GAAa,EAAE,CAAC;QACrC,MAAM,oBAAoB,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;aACrD,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,CAAC;aACxD,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;aACjB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,uBAAuB;QAE9D,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CACnC,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;gBACpC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;gBAClE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACpC,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,IAAI,IAAI,IAAI,YAAY,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;YAC5E,CAAC,CAAC,CACH,CAAC;YACF,KAAK,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,WAAW,EAAE,CAAC;gBAC1C,IAAI,OAAO,EAAE,CAAC;oBACZ,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;QAED,qCAAqC;QACrC,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;QAED,+FAA+F;QAC/F,MAAM,YAAY,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,SAAS,EAAE,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;QACjF,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;gBAC5B,+CAA+C;gBAC/C,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,sBAAsB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;oBAC9D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;oBAC7D,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;gBAClC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,IAAI,CACV,oCAAoC,EAAE,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC9F,CAAC;oBACF,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBAC3C,CAAC;YACH,CAAC,CAAC,CACH,CAAC;YAEF,KAAK,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,OAAO,EAAE,CAAC;gBAC/C,IAAI,OAAO,EAAE,CAAC;oBACZ,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC7C,CAAC;qBAAM,CAAC;oBACN,kFAAkF;oBAClF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;IACpC,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,gBAAgB,CAC5B,WAAmB,EACnB,SAAiB;QAEjB,IAAI,CAAC;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;YACvE,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,WAAmB;QAC/C,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE;gBACpD,aAAa,EAAE,IAAI;aACpB,CAAC,CAAC;YACH,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACnE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED;;;;OAIG;IACK,SAAS;QACf,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC7D,OAAO,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;YAClD,CAAC;YACD,OAAO,CAAC,CAAC,OAAO,CAAC;QACnB,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,aAAa,GAAG,IAAI,GAAG,EAA+B,CAAC;AAE7D;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB;IACjD,IAAI,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAClC,aAAa,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -8,4 +8,5 @@
8
8
  */
9
9
  export * from "./store.js";
10
10
  export * from "./types.js";
11
+ export * from "./cache.js";
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sessions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,cAAc,YAAY,CAAC;AAE3B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sessions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,cAAc,YAAY,CAAC;AAE3B,cAAc,YAAY,CAAC;AAE3B,cAAc,YAAY,CAAC"}
@@ -10,4 +10,6 @@
10
10
  export * from "./store.js";
11
11
  // Re-export types
12
12
  export * from "./types.js";
13
+ // Re-export cache
14
+ export * from "./cache.js";
13
15
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sessions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8BAA8B;AAC9B,cAAc,YAAY,CAAC;AAC3B,kBAAkB;AAClB,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sessions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,8BAA8B;AAC9B,cAAc,YAAY,CAAC;AAC3B,kBAAkB;AAClB,cAAc,YAAY,CAAC;AAC3B,kBAAkB;AAClB,cAAc,YAAY,CAAC"}