@kynetic-ai/spec 0.11.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 (501) 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 +119 -10
  7. package/dist/agent-runtime/dispatch.d.ts.map +1 -1
  8. package/dist/agent-runtime/dispatch.js +1154 -219
  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 +171 -59
  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/plan-import.d.ts +3 -3
  70. package/dist/cli/commands/plan-import.d.ts.map +1 -1
  71. package/dist/cli/commands/plan-import.js +213 -528
  72. package/dist/cli/commands/plan-import.js.map +1 -1
  73. package/dist/cli/commands/plan.d.ts.map +1 -1
  74. package/dist/cli/commands/plan.js +533 -83
  75. package/dist/cli/commands/plan.js.map +1 -1
  76. package/dist/cli/commands/review.d.ts +14 -0
  77. package/dist/cli/commands/review.d.ts.map +1 -0
  78. package/dist/cli/commands/review.js +1142 -0
  79. package/dist/cli/commands/review.js.map +1 -0
  80. package/dist/cli/commands/serve.d.ts +1 -0
  81. package/dist/cli/commands/serve.d.ts.map +1 -1
  82. package/dist/cli/commands/serve.js +33 -10
  83. package/dist/cli/commands/serve.js.map +1 -1
  84. package/dist/cli/commands/session/checkpoint.d.ts +2 -4
  85. package/dist/cli/commands/session/checkpoint.d.ts.map +1 -1
  86. package/dist/cli/commands/session/checkpoint.js +6 -107
  87. package/dist/cli/commands/session/checkpoint.js.map +1 -1
  88. package/dist/cli/commands/session/commands.d.ts.map +1 -1
  89. package/dist/cli/commands/session/commands.js +33 -23
  90. package/dist/cli/commands/session/commands.js.map +1 -1
  91. package/dist/cli/commands/session/compact.js +4 -4
  92. package/dist/cli/commands/session/compact.js.map +1 -1
  93. package/dist/cli/commands/session/create.js +2 -2
  94. package/dist/cli/commands/session/create.js.map +1 -1
  95. package/dist/cli/commands/session/format.d.ts.map +1 -1
  96. package/dist/cli/commands/session/format.js +1 -6
  97. package/dist/cli/commands/session/format.js.map +1 -1
  98. package/dist/cli/commands/session/log.d.ts +32 -7
  99. package/dist/cli/commands/session/log.d.ts.map +1 -1
  100. package/dist/cli/commands/session/log.js +166 -60
  101. package/dist/cli/commands/session/log.js.map +1 -1
  102. package/dist/cli/commands/session/migrate.d.ts +9 -0
  103. package/dist/cli/commands/session/migrate.d.ts.map +1 -0
  104. package/dist/cli/commands/session/migrate.js +46 -0
  105. package/dist/cli/commands/session/migrate.js.map +1 -0
  106. package/dist/cli/commands/session/stale-close.d.ts.map +1 -1
  107. package/dist/cli/commands/session/stale-close.js +5 -8
  108. package/dist/cli/commands/session/stale-close.js.map +1 -1
  109. package/dist/cli/commands/session/types.d.ts +1 -1
  110. package/dist/cli/commands/session/types.d.ts.map +1 -1
  111. package/dist/cli/commands/setup.d.ts +2 -2
  112. package/dist/cli/commands/setup.d.ts.map +1 -1
  113. package/dist/cli/commands/setup.js +287 -257
  114. package/dist/cli/commands/setup.js.map +1 -1
  115. package/dist/cli/commands/shadow.d.ts.map +1 -1
  116. package/dist/cli/commands/shadow.js +147 -31
  117. package/dist/cli/commands/shadow.js.map +1 -1
  118. package/dist/cli/commands/skill-crud.d.ts +7 -0
  119. package/dist/cli/commands/skill-crud.d.ts.map +1 -1
  120. package/dist/cli/commands/skill-crud.js +41 -18
  121. package/dist/cli/commands/skill-crud.js.map +1 -1
  122. package/dist/cli/commands/skill-diff.d.ts.map +1 -1
  123. package/dist/cli/commands/skill-diff.js +29 -3
  124. package/dist/cli/commands/skill-diff.js.map +1 -1
  125. package/dist/cli/commands/skill-install.d.ts.map +1 -1
  126. package/dist/cli/commands/skill-install.js +5 -4
  127. package/dist/cli/commands/skill-install.js.map +1 -1
  128. package/dist/cli/commands/task.d.ts.map +1 -1
  129. package/dist/cli/commands/task.js +359 -49
  130. package/dist/cli/commands/task.js.map +1 -1
  131. package/dist/cli/commands/trait.d.ts.map +1 -1
  132. package/dist/cli/commands/trait.js +5 -27
  133. package/dist/cli/commands/trait.js.map +1 -1
  134. package/dist/cli/commands/validate.d.ts.map +1 -1
  135. package/dist/cli/commands/validate.js +113 -52
  136. package/dist/cli/commands/validate.js.map +1 -1
  137. package/dist/cli/index.d.ts.map +1 -1
  138. package/dist/cli/index.js +69 -2
  139. package/dist/cli/index.js.map +1 -1
  140. package/dist/cli/output.d.ts +26 -0
  141. package/dist/cli/output.d.ts.map +1 -1
  142. package/dist/cli/output.js +108 -1
  143. package/dist/cli/output.js.map +1 -1
  144. package/dist/cli/sync-mode.d.ts +44 -0
  145. package/dist/cli/sync-mode.d.ts.map +1 -0
  146. package/dist/cli/sync-mode.js +64 -0
  147. package/dist/cli/sync-mode.js.map +1 -0
  148. package/dist/daemon/middleware/project-context.ts +25 -7
  149. package/dist/daemon/project-context.ts +18 -0
  150. package/dist/daemon/routes/agent-dispatch.ts +99 -22
  151. package/dist/daemon/routes/aggregation.ts +184 -0
  152. package/dist/daemon/routes/inbox.ts +5 -0
  153. package/dist/daemon/routes/items.ts +145 -0
  154. package/dist/daemon/routes/meta.ts +1 -1
  155. package/dist/daemon/routes/projects.ts +28 -6
  156. package/dist/daemon/routes/ref-resolution.ts +119 -0
  157. package/dist/daemon/routes/refs.ts +42 -0
  158. package/dist/daemon/routes/session-related.ts +140 -0
  159. package/dist/daemon/routes/sessions.ts +420 -19
  160. package/dist/daemon/routes/tasks.ts +62 -5
  161. package/dist/daemon/routes/triage.ts +40 -1
  162. package/dist/daemon/server.ts +143 -49
  163. package/dist/daemon/session-sync.ts +11 -0
  164. package/dist/daemon/shadow-sync.ts +11 -0
  165. package/dist/daemon/watcher.ts +56 -5
  166. package/dist/daemon/websocket/project-resolution.ts +77 -0
  167. package/dist/export/json.d.ts.map +1 -1
  168. package/dist/export/json.js +104 -1
  169. package/dist/export/json.js.map +1 -1
  170. package/dist/export/types.d.ts +52 -1
  171. package/dist/export/types.d.ts.map +1 -1
  172. package/dist/index.d.ts +1 -0
  173. package/dist/index.d.ts.map +1 -1
  174. package/dist/index.js +1 -0
  175. package/dist/index.js.map +1 -1
  176. package/dist/parser/agent-detection.d.ts +1 -1
  177. package/dist/parser/agent-detection.d.ts.map +1 -1
  178. package/dist/parser/agent-detection.js +10 -0
  179. package/dist/parser/agent-detection.js.map +1 -1
  180. package/dist/parser/config.d.ts +397 -2
  181. package/dist/parser/config.d.ts.map +1 -1
  182. package/dist/parser/config.js +125 -3
  183. package/dist/parser/config.js.map +1 -1
  184. package/dist/parser/dispatch-workspaces.d.ts +18 -0
  185. package/dist/parser/dispatch-workspaces.d.ts.map +1 -0
  186. package/dist/parser/dispatch-workspaces.js +209 -0
  187. package/dist/parser/dispatch-workspaces.js.map +1 -0
  188. package/dist/parser/doctor.d.ts.map +1 -1
  189. package/dist/parser/doctor.js +27 -8
  190. package/dist/parser/doctor.js.map +1 -1
  191. package/dist/parser/file-lock.d.ts.map +1 -1
  192. package/dist/parser/file-lock.js +9 -2
  193. package/dist/parser/file-lock.js.map +1 -1
  194. package/dist/parser/index.d.ts +6 -0
  195. package/dist/parser/index.d.ts.map +1 -1
  196. package/dist/parser/index.js +6 -0
  197. package/dist/parser/index.js.map +1 -1
  198. package/dist/parser/plans.d.ts.map +1 -1
  199. package/dist/parser/plans.js +1 -0
  200. package/dist/parser/plans.js.map +1 -1
  201. package/dist/parser/refs.d.ts +8 -1
  202. package/dist/parser/refs.d.ts.map +1 -1
  203. package/dist/parser/refs.js +27 -1
  204. package/dist/parser/refs.js.map +1 -1
  205. package/dist/parser/review-operations.d.ts +72 -0
  206. package/dist/parser/review-operations.d.ts.map +1 -0
  207. package/dist/parser/review-operations.js +185 -0
  208. package/dist/parser/review-operations.js.map +1 -0
  209. package/dist/parser/review-task-integration.d.ts +78 -0
  210. package/dist/parser/review-task-integration.d.ts.map +1 -0
  211. package/dist/parser/review-task-integration.js +173 -0
  212. package/dist/parser/review-task-integration.js.map +1 -0
  213. package/dist/parser/review-threads.d.ts +101 -0
  214. package/dist/parser/review-threads.d.ts.map +1 -0
  215. package/dist/parser/review-threads.js +222 -0
  216. package/dist/parser/review-threads.js.map +1 -0
  217. package/dist/parser/review-validation.d.ts +69 -0
  218. package/dist/parser/review-validation.d.ts.map +1 -0
  219. package/dist/parser/review-validation.js +207 -0
  220. package/dist/parser/review-validation.js.map +1 -0
  221. package/dist/parser/reviews.d.ts +58 -0
  222. package/dist/parser/reviews.d.ts.map +1 -0
  223. package/dist/parser/reviews.js +230 -0
  224. package/dist/parser/reviews.js.map +1 -0
  225. package/dist/parser/session-branch.d.ts +91 -0
  226. package/dist/parser/session-branch.d.ts.map +1 -0
  227. package/dist/parser/session-branch.js +565 -0
  228. package/dist/parser/session-branch.js.map +1 -0
  229. package/dist/parser/session-sync-scheduler.d.ts +53 -0
  230. package/dist/parser/session-sync-scheduler.d.ts.map +1 -0
  231. package/dist/parser/session-sync-scheduler.js +100 -0
  232. package/dist/parser/session-sync-scheduler.js.map +1 -0
  233. package/dist/parser/setup-status.d.ts +7 -1
  234. package/dist/parser/setup-status.d.ts.map +1 -1
  235. package/dist/parser/setup-status.js +104 -39
  236. package/dist/parser/setup-status.js.map +1 -1
  237. package/dist/parser/shadow-sync-scheduler.d.ts +71 -0
  238. package/dist/parser/shadow-sync-scheduler.d.ts.map +1 -0
  239. package/dist/parser/shadow-sync-scheduler.js +139 -0
  240. package/dist/parser/shadow-sync-scheduler.js.map +1 -0
  241. package/dist/parser/shadow.d.ts +121 -14
  242. package/dist/parser/shadow.d.ts.map +1 -1
  243. package/dist/parser/shadow.js +752 -27
  244. package/dist/parser/shadow.js.map +1 -1
  245. package/dist/parser/skill-render.d.ts +24 -0
  246. package/dist/parser/skill-render.d.ts.map +1 -1
  247. package/dist/parser/skill-render.js +98 -26
  248. package/dist/parser/skill-render.js.map +1 -1
  249. package/dist/parser/validate.d.ts +43 -3
  250. package/dist/parser/validate.d.ts.map +1 -1
  251. package/dist/parser/validate.js +204 -30
  252. package/dist/parser/validate.js.map +1 -1
  253. package/dist/parser/yaml.d.ts +47 -11
  254. package/dist/parser/yaml.d.ts.map +1 -1
  255. package/dist/parser/yaml.js +329 -149
  256. package/dist/parser/yaml.js.map +1 -1
  257. package/dist/review/checks.d.ts +97 -0
  258. package/dist/review/checks.d.ts.map +1 -0
  259. package/dist/review/checks.js +175 -0
  260. package/dist/review/checks.js.map +1 -0
  261. package/dist/review/index.d.ts +3 -0
  262. package/dist/review/index.d.ts.map +1 -0
  263. package/dist/review/index.js +3 -0
  264. package/dist/review/index.js.map +1 -0
  265. package/dist/review/subject-bindings.d.ts +83 -0
  266. package/dist/review/subject-bindings.d.ts.map +1 -0
  267. package/dist/review/subject-bindings.js +175 -0
  268. package/dist/review/subject-bindings.js.map +1 -0
  269. package/dist/schema/common.d.ts +26 -0
  270. package/dist/schema/common.d.ts.map +1 -1
  271. package/dist/schema/common.js +13 -0
  272. package/dist/schema/common.js.map +1 -1
  273. package/dist/schema/dispatch-workspace.d.ts +2643 -0
  274. package/dist/schema/dispatch-workspace.d.ts.map +1 -0
  275. package/dist/schema/dispatch-workspace.js +187 -0
  276. package/dist/schema/dispatch-workspace.js.map +1 -0
  277. package/dist/schema/inbox.d.ts +8 -8
  278. package/dist/schema/index.d.ts +2 -0
  279. package/dist/schema/index.d.ts.map +1 -1
  280. package/dist/schema/index.js +2 -0
  281. package/dist/schema/index.js.map +1 -1
  282. package/dist/schema/meta.d.ts +648 -116
  283. package/dist/schema/meta.d.ts.map +1 -1
  284. package/dist/schema/meta.js +27 -0
  285. package/dist/schema/meta.js.map +1 -1
  286. package/dist/schema/plan.d.ts +30 -19
  287. package/dist/schema/plan.d.ts.map +1 -1
  288. package/dist/schema/plan.js +3 -1
  289. package/dist/schema/plan.js.map +1 -1
  290. package/dist/schema/review-records.d.ts +2676 -0
  291. package/dist/schema/review-records.d.ts.map +1 -0
  292. package/dist/schema/review-records.js +232 -0
  293. package/dist/schema/review-records.js.map +1 -0
  294. package/dist/schema/spec.d.ts +32 -14
  295. package/dist/schema/spec.d.ts.map +1 -1
  296. package/dist/schema/spec.js +5 -0
  297. package/dist/schema/spec.js.map +1 -1
  298. package/dist/schema/task.d.ts +187 -29
  299. package/dist/schema/task.d.ts.map +1 -1
  300. package/dist/schema/task.js +12 -2
  301. package/dist/schema/task.js.map +1 -1
  302. package/dist/schema/triage.d.ts +22 -22
  303. package/dist/sessions/cache.d.ts +119 -0
  304. package/dist/sessions/cache.d.ts.map +1 -0
  305. package/dist/sessions/cache.js +284 -0
  306. package/dist/sessions/cache.js.map +1 -0
  307. package/dist/sessions/index.d.ts +1 -0
  308. package/dist/sessions/index.d.ts.map +1 -1
  309. package/dist/sessions/index.js +2 -0
  310. package/dist/sessions/index.js.map +1 -1
  311. package/dist/sessions/legacy.d.ts +77 -0
  312. package/dist/sessions/legacy.d.ts.map +1 -0
  313. package/dist/sessions/legacy.js +146 -0
  314. package/dist/sessions/legacy.js.map +1 -0
  315. package/dist/sessions/store.d.ts +103 -73
  316. package/dist/sessions/store.d.ts.map +1 -1
  317. package/dist/sessions/store.js +335 -186
  318. package/dist/sessions/store.js.map +1 -1
  319. package/dist/sessions/types.d.ts +44 -16
  320. package/dist/sessions/types.d.ts.map +1 -1
  321. package/dist/sessions/types.js +11 -2
  322. package/dist/sessions/types.js.map +1 -1
  323. package/dist/strings/errors.d.ts +32 -0
  324. package/dist/strings/errors.d.ts.map +1 -1
  325. package/dist/strings/errors.js +17 -0
  326. package/dist/strings/errors.js.map +1 -1
  327. package/dist/strings/labels.d.ts +1 -0
  328. package/dist/strings/labels.d.ts.map +1 -1
  329. package/dist/strings/labels.js +1 -0
  330. package/dist/strings/labels.js.map +1 -1
  331. package/dist/utils/activity.d.ts +101 -0
  332. package/dist/utils/activity.d.ts.map +1 -0
  333. package/dist/utils/activity.js +408 -0
  334. package/dist/utils/activity.js.map +1 -0
  335. package/dist/utils/git.d.ts +31 -0
  336. package/dist/utils/git.d.ts.map +1 -1
  337. package/dist/utils/git.js +87 -0
  338. package/dist/utils/git.js.map +1 -1
  339. package/dist/utils/index.d.ts +2 -0
  340. package/dist/utils/index.d.ts.map +1 -1
  341. package/dist/utils/index.js +1 -0
  342. package/dist/utils/index.js.map +1 -1
  343. package/dist/web-ui/_app/immutable/assets/0.tmlwn-Ih.css +1 -0
  344. package/dist/web-ui/_app/immutable/assets/9.BwwJybWx.css +1 -0
  345. package/dist/web-ui/_app/immutable/chunks/2KqE8gtn.js +1 -0
  346. package/dist/web-ui/_app/immutable/chunks/70-t_QvE.js +1 -0
  347. package/dist/web-ui/_app/immutable/chunks/AiWQj974.js +1 -0
  348. package/dist/web-ui/_app/immutable/chunks/{CPPfDSei.js → B25nWFyA.js} +4 -4
  349. package/dist/web-ui/_app/immutable/chunks/{DBYE9jOd.js → B2bcA_Q_.js} +1 -1
  350. package/dist/web-ui/_app/immutable/chunks/B5e5HYyB.js +1 -0
  351. package/dist/web-ui/_app/immutable/chunks/B7-5z6eA.js +1 -0
  352. package/dist/web-ui/_app/immutable/chunks/B7bGmhK0.js +1 -0
  353. package/dist/web-ui/_app/immutable/chunks/{DzO4hlg9.js → B8tYZKAE.js} +1 -1
  354. package/dist/web-ui/_app/immutable/chunks/{B5LJFxqa.js → BFGAyJjD.js} +1 -1
  355. package/dist/web-ui/_app/immutable/chunks/BG0850zf.js +1 -0
  356. package/dist/web-ui/_app/immutable/chunks/{DAMmvwn4.js → BG8eSzAd.js} +1 -1
  357. package/dist/web-ui/_app/immutable/chunks/BIMxXS8I.js +1 -0
  358. package/dist/web-ui/_app/immutable/chunks/BSzL1fpU.js +1 -0
  359. package/dist/web-ui/_app/immutable/chunks/BYtjHfeq.js +1 -0
  360. package/dist/web-ui/_app/immutable/chunks/{DxCk-KHc.js → Bp5pFYXL.js} +1 -1
  361. package/dist/web-ui/_app/immutable/chunks/{B8a0xDxR.js → BsJFsuAT.js} +1 -1
  362. package/dist/web-ui/_app/immutable/chunks/BvpNHcD6.js +1 -0
  363. package/dist/web-ui/_app/immutable/chunks/BypqA25-.js +1 -0
  364. package/dist/web-ui/_app/immutable/chunks/{BVA9Exy-.js → C0w6WDm5.js} +1 -1
  365. package/dist/web-ui/_app/immutable/chunks/C5_PAZ0y.js +1 -0
  366. package/dist/web-ui/_app/immutable/chunks/CDRO15Iv.js +1 -0
  367. package/dist/web-ui/_app/immutable/chunks/CF1CoqD5.js +1 -0
  368. package/dist/web-ui/_app/immutable/chunks/CS2sa4_m.js +1 -0
  369. package/dist/web-ui/_app/immutable/chunks/{BJ0JX3ea.js → CWUQwB9H.js} +1 -1
  370. package/dist/web-ui/_app/immutable/chunks/CY5FDdSU.js +1 -0
  371. package/dist/web-ui/_app/immutable/chunks/C_7MTDoj.js +1 -0
  372. package/dist/web-ui/_app/immutable/chunks/{D3vxvonu.js → CaAJD3dl.js} +1 -1
  373. package/dist/web-ui/_app/immutable/chunks/{BP352uRn.js → ChB5iyEL.js} +1 -1
  374. package/dist/web-ui/_app/immutable/chunks/{pE6cYWlS.js → ChQD-6N8.js} +1 -1
  375. package/dist/web-ui/_app/immutable/chunks/{Eo4gF7ih.js → CqbsoCwA.js} +1 -1
  376. package/dist/web-ui/_app/immutable/chunks/DCeJW50p.js +1 -0
  377. package/dist/web-ui/_app/immutable/chunks/{Cncwi6fQ.js → DJtZNgcs.js} +1 -1
  378. package/dist/web-ui/_app/immutable/chunks/DKIeaprD.js +1 -0
  379. package/dist/web-ui/_app/immutable/chunks/DLd2uVIA.js +1 -0
  380. package/dist/web-ui/_app/immutable/chunks/{DjcCz-PU.js → DW_subyT.js} +2 -2
  381. package/dist/web-ui/_app/immutable/chunks/DbU6lVn0.js +1 -0
  382. package/dist/web-ui/_app/immutable/chunks/Dc7ZCC5m.js +1 -0
  383. package/dist/web-ui/_app/immutable/chunks/Dd5umPsk.js +2 -0
  384. package/dist/web-ui/_app/immutable/chunks/{BysXJlZb.js → Dg_zDpDS.js} +1 -1
  385. package/dist/web-ui/_app/immutable/chunks/Dgqu8Yuc.js +1 -0
  386. package/dist/web-ui/_app/immutable/chunks/DmxsPZTB.js +1 -0
  387. package/dist/web-ui/_app/immutable/chunks/DphTaFUB.js +1 -0
  388. package/dist/web-ui/_app/immutable/chunks/DqK4iHp0.js +1 -0
  389. package/dist/web-ui/_app/immutable/chunks/{D9QNBZM2.js → DqT6OH_u.js} +2 -2
  390. package/dist/web-ui/_app/immutable/chunks/Ds9I9wQb.js +1 -0
  391. package/dist/web-ui/_app/immutable/chunks/Du5ng3u4.js +1 -0
  392. package/dist/web-ui/_app/immutable/chunks/DxJw79Wi.js +1 -0
  393. package/dist/web-ui/_app/immutable/chunks/GFTX8GgV.js +1 -0
  394. package/dist/web-ui/_app/immutable/chunks/{C076q4JN.js → HNjs76Zz.js} +1 -1
  395. package/dist/web-ui/_app/immutable/chunks/HVMjDi4_.js +1 -0
  396. package/dist/web-ui/_app/immutable/chunks/{BkOJ8DkV.js → P0A_fJvS.js} +1 -1
  397. package/dist/web-ui/_app/immutable/chunks/T3vGWjIL.js +1 -0
  398. package/dist/web-ui/_app/immutable/chunks/VTmrX9Qu.js +1 -0
  399. package/dist/web-ui/_app/immutable/chunks/{k_Qegko0.js → Xvwhx_F1.js} +1 -1
  400. package/dist/web-ui/_app/immutable/chunks/Yyz1XMQA.js +1 -0
  401. package/dist/web-ui/_app/immutable/chunks/{62JVKtnb.js → dh5HeqUr.js} +1 -1
  402. package/dist/web-ui/_app/immutable/chunks/fZMteyca.js +62 -0
  403. package/dist/web-ui/_app/immutable/chunks/{D82RulSH.js → gPrj-hqC.js} +1 -1
  404. package/dist/web-ui/_app/immutable/chunks/htcWMiYN.js +1 -0
  405. package/dist/web-ui/_app/immutable/chunks/{CwELQvbx.js → oTsvd9y4.js} +1 -1
  406. package/dist/web-ui/_app/immutable/chunks/qJfLUwU4.js +1 -0
  407. package/dist/web-ui/_app/immutable/chunks/xCtiO_JE.js +1 -0
  408. package/dist/web-ui/_app/immutable/chunks/{DvA-KON-.js → y4GeEH6k.js} +1 -1
  409. package/dist/web-ui/_app/immutable/entry/app.C4h_eOn6.js +2 -0
  410. package/dist/web-ui/_app/immutable/entry/start.CQFTf9ep.js +1 -0
  411. package/dist/web-ui/_app/immutable/nodes/0.Dh1xO970.js +1 -0
  412. package/dist/web-ui/_app/immutable/nodes/1.l75D3Opx.js +1 -0
  413. package/dist/web-ui/_app/immutable/nodes/10.DBidBPc-.js +1 -0
  414. package/dist/web-ui/_app/immutable/nodes/11.Ab0gUKWe.js +1 -0
  415. package/dist/web-ui/_app/immutable/nodes/12.CMsnoxfs.js +1 -0
  416. package/dist/web-ui/_app/immutable/nodes/13.D8YKuknB.js +1 -0
  417. package/dist/web-ui/_app/immutable/nodes/14.DZ0aan7y.js +1 -0
  418. package/dist/web-ui/_app/immutable/nodes/15.CUIKreDL.js +2 -0
  419. package/dist/web-ui/_app/immutable/nodes/16.BWc8--BO.js +1 -0
  420. package/dist/web-ui/_app/immutable/nodes/2.CDUonbuh.js +1 -0
  421. package/dist/web-ui/_app/immutable/nodes/3.Ctg3M00i.js +1 -0
  422. package/dist/web-ui/_app/immutable/nodes/4.Ci-JDwbA.js +2 -0
  423. package/dist/web-ui/_app/immutable/nodes/5.CTyEDAq0.js +1 -0
  424. package/dist/web-ui/_app/immutable/nodes/6.BTZZqsAb.js +1 -0
  425. package/dist/web-ui/_app/immutable/nodes/7.BI52g_Jo.js +137 -0
  426. package/dist/web-ui/_app/immutable/nodes/8.3hZPaB9x.js +1 -0
  427. package/dist/web-ui/_app/immutable/nodes/9.DS49kvwl.js +29 -0
  428. package/dist/web-ui/_app/version.json +1 -1
  429. package/dist/web-ui/favicon-192.png +0 -0
  430. package/dist/web-ui/favicon-32.png +0 -0
  431. package/dist/web-ui/favicon.ico +0 -0
  432. package/dist/web-ui/index.html +14 -14
  433. package/package.json +12 -6
  434. package/plugin/.claude-plugin/marketplace.json +1 -1
  435. package/plugin/.claude-plugin/plugin.json +1 -1
  436. package/plugin/plugins/kspec/skills/merge/SKILL.md +127 -0
  437. package/plugin/plugins/kspec/skills/plan/SKILL.md +55 -26
  438. package/plugin/plugins/kspec/skills/review/SKILL.md +350 -133
  439. package/plugin/plugins/kspec/skills/task-work/SKILL.md +96 -106
  440. package/templates/agents-sections/04-pr-workflow.md +15 -12
  441. package/templates/agents-sections/06-ralph-loop.md +15 -10
  442. package/templates/skills/manifest.yaml +25 -7
  443. package/templates/skills/merge/SKILL.md +120 -0
  444. package/templates/skills/plan/SKILL.md +55 -26
  445. package/templates/skills/review/SKILL.md +346 -130
  446. package/templates/skills/task-work/SKILL.md +93 -103
  447. package/dist/web-ui/_app/immutable/assets/0.BJaYkGW2.css +0 -1
  448. package/dist/web-ui/_app/immutable/assets/9.SzGLxi4x.css +0 -1
  449. package/dist/web-ui/_app/immutable/chunks/-lc0BifF.js +0 -1
  450. package/dist/web-ui/_app/immutable/chunks/8RBjHMN1.js +0 -1
  451. package/dist/web-ui/_app/immutable/chunks/B5wTVqxm.js +0 -1
  452. package/dist/web-ui/_app/immutable/chunks/B6VSmczZ.js +0 -1
  453. package/dist/web-ui/_app/immutable/chunks/BEOQc37C.js +0 -1
  454. package/dist/web-ui/_app/immutable/chunks/BHtYorjv.js +0 -1
  455. package/dist/web-ui/_app/immutable/chunks/BMuCqDX8.js +0 -1
  456. package/dist/web-ui/_app/immutable/chunks/BUZujXJ2.js +0 -1
  457. package/dist/web-ui/_app/immutable/chunks/BWET-efb.js +0 -1
  458. package/dist/web-ui/_app/immutable/chunks/BXkNecpt.js +0 -1
  459. package/dist/web-ui/_app/immutable/chunks/BYzrIfX8.js +0 -1
  460. package/dist/web-ui/_app/immutable/chunks/BpuwufMc.js +0 -1
  461. package/dist/web-ui/_app/immutable/chunks/BwMO4RrG.js +0 -1
  462. package/dist/web-ui/_app/immutable/chunks/C33JaVbg.js +0 -1
  463. package/dist/web-ui/_app/immutable/chunks/CGtqifKp.js +0 -1
  464. package/dist/web-ui/_app/immutable/chunks/CHDZZ7OG.js +0 -1
  465. package/dist/web-ui/_app/immutable/chunks/CUir3f4J.js +0 -60
  466. package/dist/web-ui/_app/immutable/chunks/CrCIbn0C.js +0 -1
  467. package/dist/web-ui/_app/immutable/chunks/D6TVmR9T.js +0 -1
  468. package/dist/web-ui/_app/immutable/chunks/D7LTux4W.js +0 -1
  469. package/dist/web-ui/_app/immutable/chunks/DAh4Wfku.js +0 -1
  470. package/dist/web-ui/_app/immutable/chunks/DAx07bEQ.js +0 -1
  471. package/dist/web-ui/_app/immutable/chunks/DOno4cA2.js +0 -1
  472. package/dist/web-ui/_app/immutable/chunks/DQA8NZIH.js +0 -2
  473. package/dist/web-ui/_app/immutable/chunks/DRfPm2bo.js +0 -1
  474. package/dist/web-ui/_app/immutable/chunks/DhQhksaB.js +0 -1
  475. package/dist/web-ui/_app/immutable/chunks/DjG7s6hm.js +0 -1
  476. package/dist/web-ui/_app/immutable/chunks/DkltRNvh.js +0 -1
  477. package/dist/web-ui/_app/immutable/chunks/DlaTnPKL.js +0 -1
  478. package/dist/web-ui/_app/immutable/chunks/ExCq5swK.js +0 -1
  479. package/dist/web-ui/_app/immutable/chunks/T3zZGv51.js +0 -1
  480. package/dist/web-ui/_app/immutable/chunks/XZumBYeP.js +0 -1
  481. package/dist/web-ui/_app/immutable/chunks/_ySfNjkF.js +0 -1
  482. package/dist/web-ui/_app/immutable/chunks/iEtR5cV6.js +0 -1
  483. package/dist/web-ui/_app/immutable/entry/app.Cgu6uKeS.js +0 -2
  484. package/dist/web-ui/_app/immutable/entry/start.9XifnLoB.js +0 -1
  485. package/dist/web-ui/_app/immutable/nodes/0.DISwcKSK.js +0 -1
  486. package/dist/web-ui/_app/immutable/nodes/1.Cx2Ufqp1.js +0 -1
  487. package/dist/web-ui/_app/immutable/nodes/10.C3z8ijXL.js +0 -1
  488. package/dist/web-ui/_app/immutable/nodes/11.DZdIjZmM.js +0 -1
  489. package/dist/web-ui/_app/immutable/nodes/12.FsIGfAOa.js +0 -1
  490. package/dist/web-ui/_app/immutable/nodes/13.DZoFwagf.js +0 -1
  491. package/dist/web-ui/_app/immutable/nodes/14.DaIzDKbQ.js +0 -1
  492. package/dist/web-ui/_app/immutable/nodes/15.BYyt4XWF.js +0 -2
  493. package/dist/web-ui/_app/immutable/nodes/16.CQkSqpOe.js +0 -1
  494. package/dist/web-ui/_app/immutable/nodes/2.Bkf_j2UJ.js +0 -1
  495. package/dist/web-ui/_app/immutable/nodes/3.kaMCurJG.js +0 -1
  496. package/dist/web-ui/_app/immutable/nodes/4.BSsFPTHG.js +0 -2
  497. package/dist/web-ui/_app/immutable/nodes/5.CpPlcCEZ.js +0 -1
  498. package/dist/web-ui/_app/immutable/nodes/6.BN4FqQmY.js +0 -1
  499. package/dist/web-ui/_app/immutable/nodes/7.9kBYIZik.js +0 -1
  500. package/dist/web-ui/_app/immutable/nodes/8.BuijtZ6B.js +0 -1
  501. package/dist/web-ui/_app/immutable/nodes/9.C-Weba8R.js +0 -1
@@ -0,0 +1,565 @@
1
+ /**
2
+ * Session branch worktree management.
3
+ *
4
+ * When sessions.storage is "branch", sessions are stored in a git worktree
5
+ * on a named orphan branch (default: "kspec-sessions") at .kspec-sessions/.
6
+ * This provides git-tracked session persistence independent of kspec-meta.
7
+ *
8
+ * AC: @session-branch-worktree — all ACs
9
+ */
10
+ import { execFile, spawnSync } from "node:child_process";
11
+ import * as fs from "node:fs/promises";
12
+ import * as path from "node:path";
13
+ import { promisify } from "node:util";
14
+ import { branchExists, gitSupportsOrphanWorktree, createOrphanBranchFallback, isGitRepo, isValidWorktree, hasRemoteTracking, SESSIONS_WORKTREE_DIR, } from "./shadow.js";
15
+ import { isBatchMode } from "../cli/batch-context.js";
16
+ const execFileAsync = promisify(execFile);
17
+ // ─── Constants ──────────────────────────────────────────────────────────────
18
+ /** Default session branch name */
19
+ export const SESSION_BRANCH_NAME = "kspec-sessions";
20
+ // ─── Git Helpers ────────────────────────────────────────────────────────────
21
+ async function runGitAsync(cwd, args, env) {
22
+ const { stdout = "", stderr = "" } = await execFileAsync("git", args, {
23
+ cwd,
24
+ env,
25
+ encoding: "utf-8",
26
+ });
27
+ return { stdout: stdout.toString(), stderr: stderr.toString() };
28
+ }
29
+ function isDebugMode() {
30
+ return process.env.KSPEC_DEBUG === "1" || process.env.KSPEC_DEBUG === "true";
31
+ }
32
+ /**
33
+ * Resolve the remote name for a branch from git config.
34
+ * Falls back to "origin" if no tracking is configured.
35
+ *
36
+ * AC: @session-branch-worktree ac-sync — resolve configured remote instead of hardcoding "origin"
37
+ */
38
+ async function resolveRemoteName(cwd, branchName) {
39
+ try {
40
+ const { stdout } = await runGitAsync(cwd, [
41
+ "config",
42
+ `branch.${branchName}.remote`,
43
+ ]);
44
+ const configured = stdout.trim();
45
+ if (configured) {
46
+ return configured;
47
+ }
48
+ }
49
+ catch {
50
+ // No tracking configured
51
+ }
52
+ return "origin";
53
+ }
54
+ // ─── Session Branch Status ──────────────────────────────────────────────────
55
+ /**
56
+ * Get the status of the session branch worktree.
57
+ *
58
+ * AC: @session-branch-worktree ac-status
59
+ */
60
+ export async function getSessionBranchStatus(projectRoot, branchName = SESSION_BRANCH_NAME) {
61
+ const worktreeDir = path.join(projectRoot, SESSIONS_WORKTREE_DIR);
62
+ const status = {
63
+ exists: false,
64
+ healthy: false,
65
+ branchExists: false,
66
+ worktreeExists: false,
67
+ worktreeLinked: false,
68
+ };
69
+ if (!(await isGitRepo(projectRoot))) {
70
+ status.error = "Not a git repository";
71
+ return status;
72
+ }
73
+ // Check if branch exists
74
+ status.branchExists = await branchExists(projectRoot, branchName);
75
+ // Check if worktree directory exists
76
+ try {
77
+ await fs.access(worktreeDir);
78
+ status.worktreeExists = true;
79
+ }
80
+ catch {
81
+ status.worktreeExists = false;
82
+ }
83
+ // Check if worktree is properly linked
84
+ if (status.worktreeExists) {
85
+ status.worktreeLinked = await isValidWorktree(worktreeDir);
86
+ }
87
+ // Determine overall status
88
+ status.exists = status.branchExists || status.worktreeExists;
89
+ status.healthy =
90
+ status.branchExists && status.worktreeExists && status.worktreeLinked;
91
+ if (!status.healthy && status.exists) {
92
+ if (!status.branchExists) {
93
+ status.error = "Session branch missing but worktree exists";
94
+ }
95
+ else if (!status.worktreeExists) {
96
+ status.error = "Session branch exists but worktree missing";
97
+ }
98
+ else if (!status.worktreeLinked) {
99
+ status.error = "Session worktree exists but not properly linked";
100
+ }
101
+ }
102
+ return status;
103
+ }
104
+ // ─── Session Branch Init ────────────────────────────────────────────────────
105
+ /**
106
+ * Initialize session branch worktree.
107
+ * Creates an orphan branch and worktree at .kspec-sessions/.
108
+ *
109
+ * AC: @session-branch-worktree ac-init
110
+ */
111
+ export async function initializeSessionBranch(projectRoot, branchName = SESSION_BRANCH_NAME) {
112
+ const result = {
113
+ success: false,
114
+ branchCreated: false,
115
+ worktreeCreated: false,
116
+ alreadyExists: false,
117
+ };
118
+ if (!(await isGitRepo(projectRoot))) {
119
+ result.error = "Not a git repository";
120
+ return result;
121
+ }
122
+ const directoryName = SESSIONS_WORKTREE_DIR;
123
+ const worktreeDir = path.join(projectRoot, directoryName);
124
+ // Check current status
125
+ const status = await getSessionBranchStatus(projectRoot, branchName);
126
+ if (status.healthy) {
127
+ result.alreadyExists = true;
128
+ result.success = true;
129
+ return result;
130
+ }
131
+ try {
132
+ // Resolve remote name from git config instead of hardcoding "origin"
133
+ // AC: @session-branch-worktree ac-sync
134
+ const remoteName = await resolveRemoteName(projectRoot, branchName);
135
+ let remoteHasBranch = false;
136
+ try {
137
+ const { stdout } = await runGitAsync(projectRoot, [
138
+ "remote",
139
+ "get-url",
140
+ remoteName,
141
+ ]);
142
+ if (stdout.trim().length > 0) {
143
+ const { stdout: lsOut } = await runGitAsync(projectRoot, [
144
+ "ls-remote",
145
+ "--heads",
146
+ remoteName,
147
+ branchName,
148
+ ]);
149
+ remoteHasBranch = lsOut.trim().length > 0;
150
+ }
151
+ }
152
+ catch {
153
+ // No remote configured
154
+ }
155
+ // Remove existing worktree/directory if broken
156
+ if (status.worktreeExists && !status.worktreeLinked) {
157
+ await fs.rm(worktreeDir, { recursive: true, force: true });
158
+ }
159
+ // Remove stale worktree reference
160
+ try {
161
+ await runGitAsync(projectRoot, [
162
+ "worktree",
163
+ "remove",
164
+ directoryName,
165
+ "--force",
166
+ ]);
167
+ }
168
+ catch {
169
+ // Ignore
170
+ }
171
+ // Prune stale worktree references
172
+ try {
173
+ await runGitAsync(projectRoot, ["worktree", "prune"]);
174
+ }
175
+ catch {
176
+ // Ignore
177
+ }
178
+ if (remoteHasBranch) {
179
+ // Fetch from remote and create worktree
180
+ await runGitAsync(projectRoot, [
181
+ "fetch",
182
+ remoteName,
183
+ `${branchName}:${branchName}`,
184
+ ]);
185
+ await runGitAsync(projectRoot, [
186
+ "worktree",
187
+ "add",
188
+ directoryName,
189
+ branchName,
190
+ ]);
191
+ // Set up tracking
192
+ await runGitAsync(projectRoot, [
193
+ "config",
194
+ `branch.${branchName}.remote`,
195
+ remoteName,
196
+ ]);
197
+ await runGitAsync(projectRoot, [
198
+ "config",
199
+ `branch.${branchName}.merge`,
200
+ `refs/heads/${branchName}`,
201
+ ]);
202
+ }
203
+ else if (!status.branchExists) {
204
+ // Create orphan branch
205
+ if (gitSupportsOrphanWorktree(projectRoot)) {
206
+ await runGitAsync(projectRoot, [
207
+ "worktree",
208
+ "add",
209
+ "--orphan",
210
+ "-b",
211
+ branchName,
212
+ directoryName,
213
+ ]);
214
+ }
215
+ else {
216
+ await createOrphanBranchFallback(projectRoot, branchName, directoryName);
217
+ }
218
+ result.branchCreated = true;
219
+ // Create initial empty commit so the branch is valid
220
+ await runGitAsync(worktreeDir, ["add", "-A"], {
221
+ ...process.env,
222
+ KSPEC_SHADOW_COMMIT: "1",
223
+ });
224
+ // Create a .gitkeep so the first commit has content
225
+ await fs.writeFile(path.join(worktreeDir, ".gitkeep"), "# Session storage - managed by kspec\n", "utf-8");
226
+ await runGitAsync(worktreeDir, ["add", "-A"], {
227
+ ...process.env,
228
+ KSPEC_SHADOW_COMMIT: "1",
229
+ });
230
+ await runGitAsync(worktreeDir, ["commit", "-m", "Initialize session storage"], { ...process.env, KSPEC_SHADOW_COMMIT: "1" });
231
+ // Push to remote if available
232
+ try {
233
+ const { stdout } = await runGitAsync(projectRoot, [
234
+ "remote",
235
+ "get-url",
236
+ remoteName,
237
+ ]);
238
+ if (stdout.trim().length > 0) {
239
+ await runGitAsync(worktreeDir, [
240
+ "push",
241
+ "-u",
242
+ remoteName,
243
+ branchName,
244
+ ]);
245
+ }
246
+ }
247
+ catch {
248
+ // No remote, fine
249
+ }
250
+ }
251
+ else {
252
+ // Attach to existing local branch
253
+ await runGitAsync(projectRoot, [
254
+ "worktree",
255
+ "add",
256
+ directoryName,
257
+ branchName,
258
+ ]);
259
+ }
260
+ result.worktreeCreated = true;
261
+ result.success = true;
262
+ return result;
263
+ }
264
+ catch (error) {
265
+ result.error = error instanceof Error ? error.message : String(error);
266
+ return result;
267
+ }
268
+ }
269
+ // ─── Session Branch Repair ──────────────────────────────────────────────────
270
+ /**
271
+ * Repair a broken session branch worktree.
272
+ *
273
+ * AC: @session-branch-worktree ac-repair
274
+ */
275
+ export async function repairSessionBranch(projectRoot, branchName = SESSION_BRANCH_NAME) {
276
+ const status = await getSessionBranchStatus(projectRoot, branchName);
277
+ if (status.healthy) {
278
+ return {
279
+ success: true,
280
+ branchCreated: false,
281
+ worktreeCreated: false,
282
+ alreadyExists: true,
283
+ };
284
+ }
285
+ if (!status.branchExists) {
286
+ return {
287
+ success: false,
288
+ branchCreated: false,
289
+ worktreeCreated: false,
290
+ alreadyExists: false,
291
+ error: "Session branch does not exist. Run `kspec init` or `kspec setup` with sessions.storage=branch to initialize.",
292
+ };
293
+ }
294
+ const directoryName = SESSIONS_WORKTREE_DIR;
295
+ const worktreeDir = path.join(projectRoot, directoryName);
296
+ try {
297
+ // Remove stale worktree reference
298
+ try {
299
+ await runGitAsync(projectRoot, [
300
+ "worktree",
301
+ "remove",
302
+ directoryName,
303
+ "--force",
304
+ ]);
305
+ }
306
+ catch {
307
+ // Ignore
308
+ }
309
+ // Remove directory if exists
310
+ await fs.rm(worktreeDir, { recursive: true, force: true });
311
+ // Prune stale worktree references
312
+ try {
313
+ await runGitAsync(projectRoot, ["worktree", "prune"]);
314
+ }
315
+ catch {
316
+ // Ignore
317
+ }
318
+ // Recreate worktree
319
+ await runGitAsync(projectRoot, [
320
+ "worktree",
321
+ "add",
322
+ directoryName,
323
+ branchName,
324
+ ]);
325
+ return {
326
+ success: true,
327
+ branchCreated: false,
328
+ worktreeCreated: true,
329
+ alreadyExists: false,
330
+ };
331
+ }
332
+ catch (error) {
333
+ return {
334
+ success: false,
335
+ branchCreated: false,
336
+ worktreeCreated: false,
337
+ alreadyExists: false,
338
+ error: error instanceof Error ? error.message : String(error),
339
+ };
340
+ }
341
+ }
342
+ // ─── Session Branch Auto-Commit ─────────────────────────────────────────────
343
+ /**
344
+ * Auto-commit changes to the session branch.
345
+ * Called at session lifecycle boundaries (create, close, stale cleanup, compact).
346
+ *
347
+ * AC: @session-branch-worktree ac-commit-boundaries
348
+ */
349
+ export async function sessionBranchAutoCommit(worktreeDir, message) {
350
+ const debug = isDebugMode();
351
+ try {
352
+ if (debug) {
353
+ console.error(`[DEBUG] Session branch auto-commit: git add -A (cwd: ${worktreeDir})`);
354
+ }
355
+ // Stage all changes
356
+ const addResult = spawnSync("git", ["add", "-A"], {
357
+ cwd: worktreeDir,
358
+ stdio: ["ignore", "pipe", "pipe"],
359
+ encoding: "utf-8",
360
+ });
361
+ if (addResult.error || addResult.status !== 0) {
362
+ throw new Error(addResult.stderr || "git add failed");
363
+ }
364
+ // Check if there are staged changes
365
+ const diffResult = spawnSync("git", ["diff", "--cached", "--quiet"], {
366
+ cwd: worktreeDir,
367
+ stdio: ["ignore", "pipe", "pipe"],
368
+ encoding: "utf-8",
369
+ });
370
+ if (!diffResult.error && diffResult.status === 0) {
371
+ // No changes
372
+ if (debug) {
373
+ console.error(`[DEBUG] Session branch auto-commit: No changes to commit`);
374
+ }
375
+ return false;
376
+ }
377
+ if (debug) {
378
+ console.error(`[DEBUG] Session branch auto-commit: git commit -m "${message}"`);
379
+ }
380
+ // Commit with KSPEC_SHADOW_COMMIT=1 to authorize past git hooks
381
+ const commitResult = spawnSync("git", ["commit", "-m", message], {
382
+ cwd: worktreeDir,
383
+ env: { ...process.env, KSPEC_SHADOW_COMMIT: "1" },
384
+ stdio: ["ignore", "pipe", "pipe"],
385
+ encoding: "utf-8",
386
+ });
387
+ if (commitResult.error || commitResult.status !== 0) {
388
+ throw new Error(commitResult.stderr || "git commit failed");
389
+ }
390
+ if (debug) {
391
+ console.error(`[DEBUG] Session branch auto-commit: Success`);
392
+ }
393
+ return true;
394
+ }
395
+ catch (error) {
396
+ if (debug) {
397
+ console.error("Session branch auto-commit failed:", error);
398
+ }
399
+ return false;
400
+ }
401
+ }
402
+ /**
403
+ * Commit session changes if session branch mode is enabled.
404
+ * Respects batch mode (suppresses commits during atomic batch execution).
405
+ *
406
+ * AC: @session-branch-worktree ac-commit-boundaries
407
+ */
408
+ export async function commitIfSessionBranch(config, operation, sessionId) {
409
+ // Suppress auto-commits during atomic batch execution
410
+ if (isBatchMode()) {
411
+ return false;
412
+ }
413
+ if (!config?.enabled) {
414
+ return false;
415
+ }
416
+ const message = sessionId
417
+ ? `session: ${operation} (${sessionId})`
418
+ : `session: ${operation}`;
419
+ return sessionBranchAutoCommit(config.worktreeDir, message);
420
+ }
421
+ // ─── Session Branch Sync ────────────────────────────────────────────────────
422
+ /**
423
+ * In-flight dedup for session branch pulls.
424
+ *
425
+ * AC: @session-branch-worktree ac-sync
426
+ */
427
+ const sessionPullInflight = new Map();
428
+ /**
429
+ * Pull remote changes for the session branch.
430
+ * Uses in-flight dedup to prevent concurrent pulls.
431
+ *
432
+ * AC: @session-branch-worktree ac-sync
433
+ */
434
+ export function sessionBranchPull(worktreeDir, branchName = SESSION_BRANCH_NAME) {
435
+ const key = path.resolve(worktreeDir);
436
+ const existing = sessionPullInflight.get(key);
437
+ if (existing) {
438
+ return existing;
439
+ }
440
+ const promise = sessionBranchPullImpl(worktreeDir, branchName).finally(() => {
441
+ sessionPullInflight.delete(key);
442
+ });
443
+ sessionPullInflight.set(key, promise);
444
+ return promise;
445
+ }
446
+ async function sessionBranchPullImpl(worktreeDir, branchName) {
447
+ const result = {
448
+ success: false,
449
+ pulled: false,
450
+ pushed: false,
451
+ hadConflict: false,
452
+ };
453
+ // Check if remote tracking is configured
454
+ const options = { branchName };
455
+ if (!(await hasRemoteTracking(worktreeDir, options))) {
456
+ result.success = true;
457
+ return result;
458
+ }
459
+ // Resolve configured remote instead of hardcoding "origin"
460
+ // AC: @session-branch-worktree ac-sync
461
+ const projectRoot = path.dirname(worktreeDir);
462
+ const remoteName = await resolveRemoteName(projectRoot, branchName);
463
+ // Fetch
464
+ try {
465
+ await runGitAsync(projectRoot, ["fetch", remoteName]);
466
+ }
467
+ catch {
468
+ result.success = true;
469
+ return result;
470
+ }
471
+ // Check if remote branch exists
472
+ try {
473
+ const { stdout } = await runGitAsync(projectRoot, [
474
+ "ls-remote",
475
+ "--heads",
476
+ remoteName,
477
+ branchName,
478
+ ]);
479
+ if (stdout.trim().length === 0) {
480
+ result.success = true;
481
+ return result;
482
+ }
483
+ }
484
+ catch {
485
+ result.success = true;
486
+ return result;
487
+ }
488
+ // Stash uncommitted changes
489
+ let stashed = false;
490
+ try {
491
+ const { stdout } = await runGitAsync(worktreeDir, [
492
+ "stash",
493
+ "push",
494
+ "-m",
495
+ "session-sync-auto",
496
+ ]);
497
+ stashed = !stdout.includes("No local changes");
498
+ }
499
+ catch {
500
+ result.success = true;
501
+ return result;
502
+ }
503
+ const unstash = async () => {
504
+ if (stashed) {
505
+ try {
506
+ await runGitAsync(worktreeDir, ["stash", "pop"]);
507
+ }
508
+ catch {
509
+ // Leave stash intact if pop fails
510
+ }
511
+ }
512
+ };
513
+ try {
514
+ // Try fast-forward
515
+ await runGitAsync(worktreeDir, ["pull", "--ff-only"]);
516
+ await unstash();
517
+ result.success = true;
518
+ result.pulled = true;
519
+ return result;
520
+ }
521
+ catch {
522
+ // Fast-forward failed
523
+ }
524
+ try {
525
+ // Fall back to rebase
526
+ await runGitAsync(worktreeDir, ["pull", "--rebase"]);
527
+ await unstash();
528
+ result.success = true;
529
+ result.pulled = true;
530
+ return result;
531
+ }
532
+ catch {
533
+ // Rebase failed
534
+ }
535
+ // Abort rebase if in progress
536
+ try {
537
+ await runGitAsync(worktreeDir, ["rebase", "--abort"]);
538
+ }
539
+ catch {
540
+ // May not be in rebase state
541
+ }
542
+ await unstash();
543
+ result.hadConflict = true;
544
+ result.error =
545
+ "Session branch sync conflict detected. Run `kspec shadow resolve` to fix.";
546
+ return result;
547
+ }
548
+ /**
549
+ * Resolve session branch config from manifest.
550
+ * Returns null if sessions.storage is not "branch".
551
+ */
552
+ export function resolveSessionBranchConfig(projectRoot, manifest) {
553
+ const storage = manifest?.sessions?.storage ?? "local";
554
+ if (storage !== "branch") {
555
+ return null;
556
+ }
557
+ const branchName = manifest?.sessions?.branch ?? SESSION_BRANCH_NAME;
558
+ return {
559
+ enabled: true,
560
+ worktreeDir: path.join(projectRoot, SESSIONS_WORKTREE_DIR),
561
+ branchName,
562
+ projectRoot,
563
+ };
564
+ }
565
+ //# sourceMappingURL=session-branch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-branch.js","sourceRoot":"","sources":["../../src/parser/session-branch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Periodic session branch sync for daemon mode.
3
+ *
4
+ * Mirrors ShadowSyncScheduler but operates independently on the session branch.
5
+ * Sync failures on one branch do not affect the other.
6
+ *
7
+ * AC: @session-branch-worktree ac-sync
8
+ */
9
+ export interface SessionSyncSchedulerOptions {
10
+ /** Path to session worktree (e.g., /project/.kspec-sessions) */
11
+ worktreeDir: string;
12
+ /** Sync interval in seconds (0 = disabled) */
13
+ intervalSeconds: number;
14
+ /** Session branch name */
15
+ branchName: string;
16
+ /** Optional pubsub manager for broadcasting sync events */
17
+ pubsub?: SessionSyncPubSub;
18
+ }
19
+ /**
20
+ * Minimal pubsub interface for broadcasting sync events.
21
+ */
22
+ export interface SessionSyncPubSub {
23
+ broadcast(channel: string, type: string, data: Record<string, unknown>): void;
24
+ }
25
+ /**
26
+ * Manages periodic background session branch pull for the daemon.
27
+ *
28
+ * AC: @session-branch-worktree ac-sync
29
+ */
30
+ export declare class SessionSyncScheduler {
31
+ private timer;
32
+ private running;
33
+ private readonly worktreeDir;
34
+ private readonly intervalMs;
35
+ private readonly branchName;
36
+ private readonly pubsub?;
37
+ constructor(options: SessionSyncSchedulerOptions);
38
+ /**
39
+ * Start the periodic sync scheduler.
40
+ * Does nothing if interval is 0 or already started.
41
+ */
42
+ start(): void;
43
+ /**
44
+ * Stop the periodic sync scheduler.
45
+ */
46
+ stop(): void;
47
+ /**
48
+ * Perform a single sync (pull from remote).
49
+ * Skips if another sync is already in progress or no tracking configured.
50
+ */
51
+ syncOnce(): Promise<void>;
52
+ }
53
+ //# sourceMappingURL=session-sync-scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-sync-scheduler.d.ts","sourceRoot":"","sources":["../../src/parser/session-sync-scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,MAAM,WAAW,2BAA2B;IAC1C,gEAAgE;IAChE,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,0BAA0B;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,CACP,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,IAAI,CAAC;CACT;AAED;;;;GAIG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAoB;gBAEhC,OAAO,EAAE,2BAA2B;IAOhD;;;OAGG;IACH,KAAK,IAAI,IAAI;IAyBb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;;OAGG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CA6ChC"}