@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,100 @@
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
+ import { sessionBranchPull, } from "./session-branch.js";
10
+ import { hasRemoteTracking } from "./shadow.js";
11
+ /**
12
+ * Manages periodic background session branch pull for the daemon.
13
+ *
14
+ * AC: @session-branch-worktree ac-sync
15
+ */
16
+ export class SessionSyncScheduler {
17
+ timer = null;
18
+ running = false;
19
+ worktreeDir;
20
+ intervalMs;
21
+ branchName;
22
+ pubsub;
23
+ constructor(options) {
24
+ this.worktreeDir = options.worktreeDir;
25
+ this.intervalMs = options.intervalSeconds * 1000;
26
+ this.branchName = options.branchName;
27
+ this.pubsub = options.pubsub;
28
+ }
29
+ /**
30
+ * Start the periodic sync scheduler.
31
+ * Does nothing if interval is 0 or already started.
32
+ */
33
+ start() {
34
+ if (this.intervalMs <= 0 || this.timer !== null) {
35
+ return;
36
+ }
37
+ console.log(`[daemon] Session sync scheduler started (interval: ${this.intervalMs / 1000}s)`);
38
+ this.timer = setInterval(() => {
39
+ this.syncOnce().catch((err) => {
40
+ console.error("[daemon] Session sync error:", err);
41
+ });
42
+ }, this.intervalMs);
43
+ // Don't prevent process exit
44
+ if (this.timer &&
45
+ typeof this.timer === "object" &&
46
+ "unref" in this.timer) {
47
+ this.timer.unref();
48
+ }
49
+ }
50
+ /**
51
+ * Stop the periodic sync scheduler.
52
+ */
53
+ stop() {
54
+ if (this.timer !== null) {
55
+ clearInterval(this.timer);
56
+ this.timer = null;
57
+ console.log("[daemon] Session sync scheduler stopped");
58
+ }
59
+ }
60
+ /**
61
+ * Perform a single sync (pull from remote).
62
+ * Skips if another sync is already in progress or no tracking configured.
63
+ */
64
+ async syncOnce() {
65
+ if (this.running) {
66
+ return;
67
+ }
68
+ const options = { branchName: this.branchName };
69
+ const hasTracking = await hasRemoteTracking(this.worktreeDir, options);
70
+ if (!hasTracking) {
71
+ return;
72
+ }
73
+ this.running = true;
74
+ try {
75
+ const result = await sessionBranchPull(this.worktreeDir, this.branchName);
76
+ if (result.pulled) {
77
+ console.log("[daemon] Session sync: pulled remote changes");
78
+ if (this.pubsub) {
79
+ this.pubsub.broadcast("sessions", "session_sync", {
80
+ pulled: true,
81
+ hadConflict: false,
82
+ });
83
+ }
84
+ }
85
+ if (result.hadConflict) {
86
+ console.warn("[daemon] Session sync: conflict detected. Run `kspec shadow resolve` to fix.");
87
+ if (this.pubsub) {
88
+ this.pubsub.broadcast("sessions", "session_sync", {
89
+ pulled: false,
90
+ hadConflict: true,
91
+ });
92
+ }
93
+ }
94
+ }
95
+ finally {
96
+ this.running = false;
97
+ }
98
+ }
99
+ }
100
+ //# sourceMappingURL=session-sync-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-sync-scheduler.js","sourceRoot":"","sources":["../../src/parser/session-sync-scheduler.ts"],"names":[],"mappings":"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"}
@@ -19,8 +19,10 @@ export interface SetupStatus {
19
19
  agent: {
20
20
  detected: AgentType;
21
21
  confidence: AgentConfidence;
22
+ configPath?: string;
22
23
  };
23
24
  hooks: {
25
+ supported: boolean;
24
26
  promptCheck: boolean;
25
27
  stop: boolean;
26
28
  preToolUse: boolean;
@@ -51,12 +53,16 @@ export interface SetupStatus {
51
53
  /** Error message if status check failed */
52
54
  error?: string;
53
55
  }
56
+ export interface GetSetupStatusOptions {
57
+ agentOverride?: AgentType;
58
+ }
54
59
  /**
55
60
  * Detect the agent type in use.
56
61
  */
57
62
  export declare function detectAgent(): Promise<{
58
63
  type: AgentType;
59
64
  confidence: AgentConfidence;
65
+ configPath?: string;
60
66
  }>;
61
67
  /**
62
68
  * Get the current setup status for a project.
@@ -68,5 +74,5 @@ export declare function detectAgent(): Promise<{
68
74
  *
69
75
  * @param projectDir Project root directory
70
76
  */
71
- export declare function getSetupStatus(projectDir: string): Promise<SetupStatus>;
77
+ export declare function getSetupStatus(projectDir: string, options?: GetSetupStatusOptions): Promise<SetupStatus>;
72
78
  //# sourceMappingURL=setup-status.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup-status.d.ts","sourceRoot":"","sources":["../../src/parser/setup-status.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE;QACL,QAAQ,EAAE,SAAS,CAAC;QACpB,UAAU,EAAE,eAAe,CAAC;KAC7B,CAAC;IACF,KAAK,EAAE;QACL,WAAW,EAAE,OAAO,CAAC;QACrB,IAAI,EAAE,OAAO,CAAC;QACd,UAAU,EAAE,OAAO,CAAC;QACpB,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,EAAE;QACN,qBAAqB,EAAE,OAAO,CAAC;QAC/B,kBAAkB,EAAE,OAAO,CAAC;QAC5B,aAAa,EAAE,OAAO,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,QAAQ,EAAE;QACR,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;QACpD,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,EAAE;QACP,iBAAiB,EAAE,OAAO,CAAC;QAC3B,YAAY,EAAE,OAAO,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAWD;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAC3C,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,eAAe,CAAC;CAC7B,CAAC,CAsBD;AAWD;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAyO7E"}
1
+ {"version":3,"file":"setup-status.d.ts","sourceRoot":"","sources":["../../src/parser/setup-status.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAE9B;;GAEG;AACH,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE;QACL,QAAQ,EAAE,SAAS,CAAC;QACpB,UAAU,EAAE,eAAe,CAAC;QAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,KAAK,EAAE;QACL,SAAS,EAAE,OAAO,CAAC;QACnB,WAAW,EAAE,OAAO,CAAC;QACrB,IAAI,EAAE,OAAO,CAAC;QACd,UAAU,EAAE,OAAO,CAAC;QACpB,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,CAAC;IACF,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,EAAE;QACN,qBAAqB,EAAE,OAAO,CAAC;QAC/B,kBAAkB,EAAE,OAAO,CAAC;QAC5B,aAAa,EAAE,OAAO,CAAC;QACvB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,QAAQ,EAAE;QACR,MAAM,EAAE,OAAO,CAAC;QAChB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;QACpD,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,EAAE;QACP,iBAAiB,EAAE,OAAO,CAAC;QAC3B,YAAY,EAAE,OAAO,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAiBD;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC;IAC3C,IAAI,EAAE,SAAS,CAAC;IAChB,UAAU,EAAE,eAAe,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC,CAmDD;AAWD;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,WAAW,CAAC,CAkRtB"}
@@ -17,13 +17,28 @@ const GUARD_SCRIPTS = {
17
17
  "write-guard.mjs": true,
18
18
  "edit-guard.mjs": true,
19
19
  };
20
+ const NATIVE_GUARD_COMMAND = "kspec guard worktree";
21
+ const LEGACY_GUARD_SCRIPTS = [
22
+ "kspec-worktree-guard.sh",
23
+ "ralph-task-limit-guard.sh",
24
+ ];
20
25
  /**
21
26
  * Detect the agent type in use.
22
27
  */
23
28
  export async function detectAgent() {
24
29
  const detected = detectAgentFromEnv();
25
30
  if (detected.type !== "unknown") {
26
- return { type: detected.type, confidence: detected.confidence };
31
+ const configPath = detected.configPath ??
32
+ (detected.type === "claude-code"
33
+ ? path.join(process.env.HOME ?? "", ".claude", "settings.json")
34
+ : detected.type === "droid"
35
+ ? path.join(process.env.HOME ?? "", ".factory", "settings.json")
36
+ : undefined);
37
+ return {
38
+ type: detected.type,
39
+ confidence: detected.confidence,
40
+ configPath,
41
+ };
27
42
  }
28
43
  // Check for Claude Code by looking for .claude directory
29
44
  // This is a medium confidence indicator
@@ -33,7 +48,26 @@ export async function detectAgent() {
33
48
  try {
34
49
  const stats = await fs.stat(globalClaudeDir);
35
50
  if (stats.isDirectory()) {
36
- return { type: "claude-code", confidence: "medium" };
51
+ return {
52
+ type: "claude-code",
53
+ confidence: "medium",
54
+ configPath: path.join(process.env.HOME, ".claude", "settings.json"),
55
+ };
56
+ }
57
+ }
58
+ catch {
59
+ // Directory doesn't exist
60
+ }
61
+ // AC: @droid-setup-status ac-2 — ~/.factory as medium-confidence droid fallback (after ~/.claude)
62
+ const globalDroidDir = path.join(process.env.HOME, ".factory");
63
+ try {
64
+ const stats = await fs.stat(globalDroidDir);
65
+ if (stats.isDirectory()) {
66
+ return {
67
+ type: "droid",
68
+ confidence: "medium",
69
+ configPath: path.join(process.env.HOME, ".factory", "settings.json"),
70
+ };
37
71
  }
38
72
  }
39
73
  catch {
@@ -60,51 +94,80 @@ function debugLog(message, _error) {
60
94
  *
61
95
  * @param projectDir Project root directory
62
96
  */
63
- export async function getSetupStatus(projectDir) {
64
- const detected = await detectAgent();
65
- const configPath = path.join(projectDir, ".claude", "settings.json");
66
- const hooksDir = path.join(projectDir, ".claude", "hooks");
97
+ export async function getSetupStatus(projectDir, options = {}) {
98
+ const detected = options.agentOverride
99
+ ? {
100
+ type: options.agentOverride,
101
+ confidence: "high",
102
+ configPath: options.agentOverride === "claude-code"
103
+ ? path.join(process.env.HOME ?? "", ".claude", "settings.json")
104
+ : options.agentOverride === "droid"
105
+ ? path.join(process.env.HOME ?? "", ".factory", "settings.json")
106
+ : undefined,
107
+ }
108
+ : await detectAgent();
67
109
  const agentsMdPath = path.join(projectDir, "kspec-agents.md");
68
110
  const hashPath = path.join(projectDir, ".kspec", ".kspec-agents-hash");
69
- const skillsDir = path.join(projectDir, ".claude", "skills");
111
+ const claudeConfigPath = path.join(projectDir, ".claude", "settings.json");
112
+ const hooksDir = path.join(projectDir, ".claude", "hooks");
113
+ // AC: @droid-setup-status ac-1 — scan .factory/skills/ for droid-rendered skills
114
+ const skillDirs = new Set([path.join(projectDir, ".claude", "skills")]);
115
+ if (detected.type === "droid") {
116
+ skillDirs.add(path.join(projectDir, ".factory", "skills"));
117
+ }
70
118
  // Check hooks
71
119
  const hooks = {
120
+ supported: detected.type === "claude-code",
72
121
  promptCheck: false,
73
122
  stop: false,
74
123
  preToolUse: false,
75
124
  guardsPresent: [],
76
125
  };
77
- try {
78
- const configContent = await fs.readFile(configPath, "utf-8");
79
- const config = JSON.parse(configContent);
80
- const hooksConfig = config.hooks || {};
81
- // Check UserPromptSubmit
82
- const promptHooks = hooksConfig.UserPromptSubmit;
83
- hooks.promptCheck =
84
- promptHooks?.some((entry) => entry.hooks?.some((h) => h.command?.includes("prompt-check"))) ?? false;
85
- // Check Stop
86
- const stopHooks = hooksConfig.Stop;
87
- hooks.stop =
88
- stopHooks?.some((entry) => entry.hooks?.some((h) => h.command?.includes("checkpoint"))) ?? false;
89
- // Check PreToolUse
90
- const preToolUseHooks = hooksConfig.PreToolUse;
91
- hooks.preToolUse =
92
- preToolUseHooks?.some((entry) => entry.hooks?.some((h) => h.command?.includes(".claude/hooks/"))) ?? false;
93
- }
94
- catch (err) {
95
- debugLog("Failed to read hooks config for status", err);
96
- }
97
- // Check guard scripts
98
- try {
99
- const guardFiles = await fs.readdir(hooksDir);
100
- for (const name of Object.keys(GUARD_SCRIPTS)) {
101
- if (guardFiles.includes(name)) {
102
- hooks.guardsPresent.push(name);
126
+ if (hooks.supported) {
127
+ try {
128
+ const configContent = await fs.readFile(claudeConfigPath, "utf-8");
129
+ const config = JSON.parse(configContent);
130
+ const hooksConfig = config.hooks || {};
131
+ // Check UserPromptSubmit
132
+ const promptHooks = hooksConfig.UserPromptSubmit;
133
+ hooks.promptCheck =
134
+ promptHooks?.some((entry) => entry.hooks?.some((h) => h.command?.includes("prompt-check"))) ?? false;
135
+ // Check Stop
136
+ const stopHooks = hooksConfig.Stop;
137
+ hooks.stop =
138
+ stopHooks?.some((entry) => entry.hooks?.some((h) => h.command?.includes("checkpoint"))) ?? false;
139
+ // Check PreToolUse
140
+ const preToolUseHooks = hooksConfig.PreToolUse;
141
+ hooks.preToolUse =
142
+ preToolUseHooks?.some((entry) => entry.hooks?.some((h) => h.command === NATIVE_GUARD_COMMAND ||
143
+ h.command?.includes(".claude/hooks/"))) ?? false;
144
+ if (preToolUseHooks?.some((entry) => entry.hooks?.some((h) => h.command === NATIVE_GUARD_COMMAND))) {
145
+ hooks.guardsPresent.push(NATIVE_GUARD_COMMAND);
146
+ }
147
+ if (preToolUseHooks?.some((entry) => entry.hooks?.some((h) => LEGACY_GUARD_SCRIPTS.some((name) => h.command?.includes(name))))) {
148
+ hooks.guardsPresent.push("legacy:bash-scripts");
103
149
  }
104
150
  }
105
- }
106
- catch (err) {
107
- debugLog("Hooks dir doesn't exist", err);
151
+ catch (err) {
152
+ debugLog("Failed to read hooks config for status", err);
153
+ }
154
+ // Check guard scripts
155
+ try {
156
+ const guardFiles = await fs.readdir(hooksDir);
157
+ for (const name of Object.keys(GUARD_SCRIPTS)) {
158
+ if (guardFiles.includes(name)) {
159
+ hooks.guardsPresent.push(name);
160
+ }
161
+ }
162
+ for (const name of LEGACY_GUARD_SCRIPTS) {
163
+ if (guardFiles.includes(name)) {
164
+ hooks.guardsPresent.push(`legacy-file:${name}`);
165
+ }
166
+ }
167
+ }
168
+ catch (err) {
169
+ debugLog("Hooks dir doesn't exist", err);
170
+ }
108
171
  }
109
172
  // Check skills
110
173
  const skills = {
@@ -140,8 +203,9 @@ export async function getSetupStatus(projectDir) {
140
203
  debugLog(`${label} dir doesn't exist`, err);
141
204
  }
142
205
  }
143
- // Scan .claude/skills/ (project/local skills)
144
- await scanForSkills(skillsDir, "skills");
206
+ for (const skillsDir of skillDirs) {
207
+ await scanForSkills(skillsDir, path.relative(projectDir, skillsDir) || skillsDir);
208
+ }
145
209
  // Check plugin marketplace health
146
210
  // AC: @enhanced-setup ac-7, ac-8
147
211
  const plugin = {
@@ -165,7 +229,7 @@ export async function getSetupStatus(projectDir) {
165
229
  }
166
230
  // Check if plugin is enabled in project settings
167
231
  try {
168
- const configContent = await fs.readFile(configPath, "utf-8");
232
+ const configContent = await fs.readFile(claudeConfigPath, "utf-8");
169
233
  const config = JSON.parse(configContent);
170
234
  plugin.pluginEnabled = config.enabledPlugins?.["kspec@kspec-plugins"] === true;
171
235
  }
@@ -252,6 +316,7 @@ export async function getSetupStatus(projectDir) {
252
316
  agent: {
253
317
  detected: detected.type,
254
318
  confidence: detected.confidence,
319
+ configPath: detected.configPath,
255
320
  },
256
321
  hooks,
257
322
  skills,
@@ -1 +1 @@
1
- {"version":3,"file":"setup-status.js","sourceRoot":"","sources":["../../src/parser/setup-status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup-status.js","sourceRoot":"","sources":["../../src/parser/setup-status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Periodic shadow branch sync for daemon mode.
3
+ *
4
+ * AC: @config-shadow ac-12 — The daemon performs a background shadow pull
5
+ * at a configurable interval (default 60s) to pick up changes pushed by
6
+ * other clones, making remote shadow state available locally without
7
+ * requiring a manual `kspec shadow sync`.
8
+ *
9
+ * AC: @shadow-daemon-push-sync ac-periodic-push — After pulling, pushes
10
+ * local commits if ahead of upstream. Push failure is non-fatal.
11
+ *
12
+ * AC: @shadow-daemon-push-sync ac-daemon-freshens-fetch-head — Fetch runs
13
+ * from the worktree dir so FETCH_HEAD in the worktree git dir is fresh.
14
+ */
15
+ import { type ShadowOptions } from './shadow.js';
16
+ export interface ShadowSyncSchedulerOptions {
17
+ /** Path to shadow worktree (e.g., /project/.kspec) */
18
+ worktreeDir: string;
19
+ /** Sync interval in seconds (0 = disabled) */
20
+ intervalSeconds: number;
21
+ /** Optional shadow options for branch/remote config */
22
+ shadowOptions?: ShadowOptions;
23
+ /** Optional pubsub manager for broadcasting sync events */
24
+ pubsub?: ShadowSyncPubSub;
25
+ }
26
+ /**
27
+ * Minimal pubsub interface for broadcasting sync events.
28
+ * Matches PubSubManager.broadcast() without importing the full daemon type.
29
+ */
30
+ export interface ShadowSyncPubSub {
31
+ broadcast(channel: string, type: string, data: Record<string, unknown>): void;
32
+ }
33
+ /**
34
+ * Manages periodic background shadow sync (fetch + pull + push) for the daemon.
35
+ *
36
+ * AC: @config-shadow ac-12
37
+ * AC: @shadow-daemon-push-sync ac-periodic-push
38
+ * AC: @shadow-daemon-push-sync ac-daemon-freshens-fetch-head
39
+ */
40
+ export declare class ShadowSyncScheduler {
41
+ private timer;
42
+ private running;
43
+ private readonly worktreeDir;
44
+ private readonly intervalMs;
45
+ private readonly shadowOptions?;
46
+ private readonly pubsub?;
47
+ constructor(options: ShadowSyncSchedulerOptions);
48
+ /**
49
+ * Start the periodic sync scheduler.
50
+ * Does nothing if interval is 0 or already started.
51
+ */
52
+ start(): void;
53
+ /**
54
+ * Stop the periodic sync scheduler.
55
+ */
56
+ stop(): void;
57
+ /**
58
+ * Perform a single sync cycle: fetch, pull, then push if ahead.
59
+ * Skips if another sync is already in progress or no tracking configured.
60
+ *
61
+ * AC: @shadow-daemon-push-sync ac-daemon-freshens-fetch-head —
62
+ * Fetch runs from worktreeDir so FETCH_HEAD in the worktree git dir
63
+ * is fresh for CLI drift checks.
64
+ *
65
+ * AC: @shadow-daemon-push-sync ac-periodic-push —
66
+ * After pulling, pushes if local is ahead of remote.
67
+ * Push failure is non-fatal (logged, not thrown).
68
+ */
69
+ syncOnce(): Promise<void>;
70
+ }
71
+ //# sourceMappingURL=shadow-sync-scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow-sync-scheduler.d.ts","sourceRoot":"","sources":["../../src/parser/shadow-sync-scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAOL,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,0BAA0B;IACzC,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,uDAAuD;IACvD,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,2DAA2D;IAC3D,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC/E;AAED;;;;;;GAMG;AACH,qBAAa,mBAAmB;IAC9B,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,aAAa,CAAC,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAmB;gBAE/B,OAAO,EAAE,0BAA0B;IAO/C;;;OAGG;IACH,KAAK,IAAI,IAAI;IAqBb;;OAEG;IACH,IAAI,IAAI,IAAI;IAQZ;;;;;;;;;;;OAWG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAqEhC"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Periodic shadow branch sync for daemon mode.
3
+ *
4
+ * AC: @config-shadow ac-12 — The daemon performs a background shadow pull
5
+ * at a configurable interval (default 60s) to pick up changes pushed by
6
+ * other clones, making remote shadow state available locally without
7
+ * requiring a manual `kspec shadow sync`.
8
+ *
9
+ * AC: @shadow-daemon-push-sync ac-periodic-push — After pulling, pushes
10
+ * local commits if ahead of upstream. Push failure is non-fatal.
11
+ *
12
+ * AC: @shadow-daemon-push-sync ac-daemon-freshens-fetch-head — Fetch runs
13
+ * from the worktree dir so FETCH_HEAD in the worktree git dir is fresh.
14
+ */
15
+ import { shadowPull, hasRemoteTracking, fetchRemote, isAheadOfUpstream, pushShadowBranch, getRemoteName, } from './shadow.js';
16
+ /**
17
+ * Manages periodic background shadow sync (fetch + pull + push) for the daemon.
18
+ *
19
+ * AC: @config-shadow ac-12
20
+ * AC: @shadow-daemon-push-sync ac-periodic-push
21
+ * AC: @shadow-daemon-push-sync ac-daemon-freshens-fetch-head
22
+ */
23
+ export class ShadowSyncScheduler {
24
+ timer = null;
25
+ running = false;
26
+ worktreeDir;
27
+ intervalMs;
28
+ shadowOptions;
29
+ pubsub;
30
+ constructor(options) {
31
+ this.worktreeDir = options.worktreeDir;
32
+ this.intervalMs = options.intervalSeconds * 1000;
33
+ this.shadowOptions = options.shadowOptions;
34
+ this.pubsub = options.pubsub;
35
+ }
36
+ /**
37
+ * Start the periodic sync scheduler.
38
+ * Does nothing if interval is 0 or already started.
39
+ */
40
+ start() {
41
+ if (this.intervalMs <= 0 || this.timer !== null) {
42
+ return;
43
+ }
44
+ console.log(`[daemon] Shadow sync scheduler started (interval: ${this.intervalMs / 1000}s)`);
45
+ this.timer = setInterval(() => {
46
+ this.syncOnce().catch((err) => {
47
+ console.error('[daemon] Shadow sync error:', err);
48
+ });
49
+ }, this.intervalMs);
50
+ // Don't prevent process exit
51
+ if (this.timer && typeof this.timer === 'object' && 'unref' in this.timer) {
52
+ this.timer.unref();
53
+ }
54
+ }
55
+ /**
56
+ * Stop the periodic sync scheduler.
57
+ */
58
+ stop() {
59
+ if (this.timer !== null) {
60
+ clearInterval(this.timer);
61
+ this.timer = null;
62
+ console.log('[daemon] Shadow sync scheduler stopped');
63
+ }
64
+ }
65
+ /**
66
+ * Perform a single sync cycle: fetch, pull, then push if ahead.
67
+ * Skips if another sync is already in progress or no tracking configured.
68
+ *
69
+ * AC: @shadow-daemon-push-sync ac-daemon-freshens-fetch-head —
70
+ * Fetch runs from worktreeDir so FETCH_HEAD in the worktree git dir
71
+ * is fresh for CLI drift checks.
72
+ *
73
+ * AC: @shadow-daemon-push-sync ac-periodic-push —
74
+ * After pulling, pushes if local is ahead of remote.
75
+ * Push failure is non-fatal (logged, not thrown).
76
+ */
77
+ async syncOnce() {
78
+ if (this.running) {
79
+ return; // Skip if previous sync still running
80
+ }
81
+ // Check if remote tracking is configured before attempting sync
82
+ const hasTracking = await hasRemoteTracking(this.worktreeDir, this.shadowOptions);
83
+ if (!hasTracking) {
84
+ return; // No remote tracking — nothing to sync
85
+ }
86
+ this.running = true;
87
+ try {
88
+ // AC: @shadow-daemon-push-sync ac-daemon-freshens-fetch-head
89
+ // Fetch from worktreeDir to freshen FETCH_HEAD in the worktree git dir.
90
+ // CLI drift checks resolve FETCH_HEAD from the same worktree dir, so
91
+ // the daemon's fetch keeps it fresh and CLI skips redundant fetches.
92
+ await fetchRemote(this.worktreeDir, getRemoteName(this.shadowOptions));
93
+ const result = await shadowPull(this.worktreeDir, this.shadowOptions);
94
+ if (result.pulled) {
95
+ console.log('[daemon] Shadow sync: pulled remote changes');
96
+ // Broadcast so the UI refreshes
97
+ if (this.pubsub) {
98
+ this.pubsub.broadcast('shadow', 'shadow_sync', {
99
+ pulled: true,
100
+ hadConflict: false,
101
+ });
102
+ }
103
+ }
104
+ if (result.hadConflict) {
105
+ console.warn('[daemon] Shadow sync: conflict detected. Run `kspec shadow resolve` to fix.');
106
+ if (this.pubsub) {
107
+ this.pubsub.broadcast('shadow', 'shadow_sync', {
108
+ pulled: false,
109
+ hadConflict: true,
110
+ });
111
+ }
112
+ }
113
+ // AC: @shadow-daemon-push-sync ac-periodic-push
114
+ // After pulling, push if local has unpushed commits ahead of upstream.
115
+ // Push failure is non-fatal — logged but does not throw.
116
+ if (!result.hadConflict) {
117
+ const ahead = await isAheadOfUpstream(this.worktreeDir);
118
+ if (ahead) {
119
+ const pushed = await pushShadowBranch(this.worktreeDir, getRemoteName(this.shadowOptions), this.shadowOptions);
120
+ if (pushed) {
121
+ console.log('[daemon] Shadow sync: pushed local changes');
122
+ if (this.pubsub) {
123
+ this.pubsub.broadcast('shadow', 'shadow_sync', {
124
+ pushed: true,
125
+ });
126
+ }
127
+ }
128
+ else {
129
+ console.warn('[daemon] Shadow sync: push failed (non-fatal)');
130
+ }
131
+ }
132
+ }
133
+ }
134
+ finally {
135
+ this.running = false;
136
+ }
137
+ }
138
+ }
139
+ //# sourceMappingURL=shadow-sync-scheduler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow-sync-scheduler.js","sourceRoot":"","sources":["../../src/parser/shadow-sync-scheduler.ts"],"names":[],"mappings":"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"}