cc-agentic-framework 1.14.1

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 (1097) hide show
  1. package/README.md +686 -0
  2. package/bin/agentic-framework +2 -0
  3. package/bin/mcp-server +14 -0
  4. package/dist/__mocks__/chalk.d.ts +11 -0
  5. package/dist/__mocks__/chalk.d.ts.map +1 -0
  6. package/dist/__mocks__/chalk.js +20 -0
  7. package/dist/__mocks__/chalk.js.map +1 -0
  8. package/dist/__mocks__/ora.d.ts +20 -0
  9. package/dist/__mocks__/ora.d.ts.map +1 -0
  10. package/dist/__mocks__/ora.js +52 -0
  11. package/dist/__mocks__/ora.js.map +1 -0
  12. package/dist/commands/add.d.ts +6 -0
  13. package/dist/commands/add.d.ts.map +1 -0
  14. package/dist/commands/add.js +105 -0
  15. package/dist/commands/add.js.map +1 -0
  16. package/dist/commands/agent/index.d.ts +11 -0
  17. package/dist/commands/agent/index.d.ts.map +1 -0
  18. package/dist/commands/agent/index.js +22 -0
  19. package/dist/commands/agent/index.js.map +1 -0
  20. package/dist/commands/agent/list.d.ts +8 -0
  21. package/dist/commands/agent/list.d.ts.map +1 -0
  22. package/dist/commands/agent/list.js +53 -0
  23. package/dist/commands/agent/list.js.map +1 -0
  24. package/dist/commands/agent/run.d.ts +9 -0
  25. package/dist/commands/agent/run.d.ts.map +1 -0
  26. package/dist/commands/agent/run.js +180 -0
  27. package/dist/commands/agent/run.js.map +1 -0
  28. package/dist/commands/agent/show.d.ts +8 -0
  29. package/dist/commands/agent/show.d.ts.map +1 -0
  30. package/dist/commands/agent/show.js +109 -0
  31. package/dist/commands/agent/show.js.map +1 -0
  32. package/dist/commands/backlog/create-ticket.d.ts +19 -0
  33. package/dist/commands/backlog/create-ticket.d.ts.map +1 -0
  34. package/dist/commands/backlog/create-ticket.js +168 -0
  35. package/dist/commands/backlog/create-ticket.js.map +1 -0
  36. package/dist/commands/backlog/import-jira.d.ts +32 -0
  37. package/dist/commands/backlog/import-jira.d.ts.map +1 -0
  38. package/dist/commands/backlog/import-jira.js +126 -0
  39. package/dist/commands/backlog/import-jira.js.map +1 -0
  40. package/dist/commands/backlog/migrate-milestones.d.ts +21 -0
  41. package/dist/commands/backlog/migrate-milestones.d.ts.map +1 -0
  42. package/dist/commands/backlog/migrate-milestones.js +155 -0
  43. package/dist/commands/backlog/migrate-milestones.js.map +1 -0
  44. package/dist/commands/backlog/update-fields.d.ts +36 -0
  45. package/dist/commands/backlog/update-fields.d.ts.map +1 -0
  46. package/dist/commands/backlog/update-fields.js +251 -0
  47. package/dist/commands/backlog/update-fields.js.map +1 -0
  48. package/dist/commands/backlog/validate-enhanced.d.ts +19 -0
  49. package/dist/commands/backlog/validate-enhanced.d.ts.map +1 -0
  50. package/dist/commands/backlog/validate-enhanced.js +282 -0
  51. package/dist/commands/backlog/validate-enhanced.js.map +1 -0
  52. package/dist/commands/backlog/validate.d.ts +19 -0
  53. package/dist/commands/backlog/validate.d.ts.map +1 -0
  54. package/dist/commands/backlog/validate.js +283 -0
  55. package/dist/commands/backlog/validate.js.map +1 -0
  56. package/dist/commands/build.d.ts +20 -0
  57. package/dist/commands/build.d.ts.map +1 -0
  58. package/dist/commands/build.js +116 -0
  59. package/dist/commands/build.js.map +1 -0
  60. package/dist/commands/bump-version.d.ts +61 -0
  61. package/dist/commands/bump-version.d.ts.map +1 -0
  62. package/dist/commands/bump-version.js +618 -0
  63. package/dist/commands/bump-version.js.map +1 -0
  64. package/dist/commands/confluence/create-page.d.ts +11 -0
  65. package/dist/commands/confluence/create-page.d.ts.map +1 -0
  66. package/dist/commands/confluence/create-page.js +72 -0
  67. package/dist/commands/confluence/create-page.js.map +1 -0
  68. package/dist/commands/confluence/fetch-page.d.ts +11 -0
  69. package/dist/commands/confluence/fetch-page.d.ts.map +1 -0
  70. package/dist/commands/confluence/fetch-page.js +64 -0
  71. package/dist/commands/confluence/fetch-page.js.map +1 -0
  72. package/dist/commands/confluence/import-reports.d.ts +12 -0
  73. package/dist/commands/confluence/import-reports.d.ts.map +1 -0
  74. package/dist/commands/confluence/import-reports.js +68 -0
  75. package/dist/commands/confluence/import-reports.js.map +1 -0
  76. package/dist/commands/confluence/validate.d.ts +23 -0
  77. package/dist/commands/confluence/validate.d.ts.map +1 -0
  78. package/dist/commands/confluence/validate.js +272 -0
  79. package/dist/commands/confluence/validate.js.map +1 -0
  80. package/dist/commands/create-agent.d.ts +8 -0
  81. package/dist/commands/create-agent.d.ts.map +1 -0
  82. package/dist/commands/create-agent.js +104 -0
  83. package/dist/commands/create-agent.js.map +1 -0
  84. package/dist/commands/create-module.d.ts +8 -0
  85. package/dist/commands/create-module.d.ts.map +1 -0
  86. package/dist/commands/create-module.js +123 -0
  87. package/dist/commands/create-module.js.map +1 -0
  88. package/dist/commands/create-skill.d.ts +8 -0
  89. package/dist/commands/create-skill.d.ts.map +1 -0
  90. package/dist/commands/create-skill.js +108 -0
  91. package/dist/commands/create-skill.js.map +1 -0
  92. package/dist/commands/dev.d.ts +21 -0
  93. package/dist/commands/dev.d.ts.map +1 -0
  94. package/dist/commands/dev.js +304 -0
  95. package/dist/commands/dev.js.map +1 -0
  96. package/dist/commands/generate-agents.d.ts +19 -0
  97. package/dist/commands/generate-agents.d.ts.map +1 -0
  98. package/dist/commands/generate-agents.js +146 -0
  99. package/dist/commands/generate-agents.js.map +1 -0
  100. package/dist/commands/generate-commands.d.ts +13 -0
  101. package/dist/commands/generate-commands.d.ts.map +1 -0
  102. package/dist/commands/generate-commands.js +229 -0
  103. package/dist/commands/generate-commands.js.map +1 -0
  104. package/dist/commands/info.d.ts +2 -0
  105. package/dist/commands/info.d.ts.map +1 -0
  106. package/dist/commands/info.js +83 -0
  107. package/dist/commands/info.js.map +1 -0
  108. package/dist/commands/init.d.ts +27 -0
  109. package/dist/commands/init.d.ts.map +1 -0
  110. package/dist/commands/init.js +740 -0
  111. package/dist/commands/init.js.map +1 -0
  112. package/dist/commands/jira/export.d.ts +19 -0
  113. package/dist/commands/jira/export.d.ts.map +1 -0
  114. package/dist/commands/jira/export.js +212 -0
  115. package/dist/commands/jira/export.js.map +1 -0
  116. package/dist/commands/jira/sync.d.ts +20 -0
  117. package/dist/commands/jira/sync.d.ts.map +1 -0
  118. package/dist/commands/jira/sync.js +242 -0
  119. package/dist/commands/jira/sync.js.map +1 -0
  120. package/dist/commands/list.d.ts +6 -0
  121. package/dist/commands/list.d.ts.map +1 -0
  122. package/dist/commands/list.js +51 -0
  123. package/dist/commands/list.js.map +1 -0
  124. package/dist/commands/mcp/check.d.ts +11 -0
  125. package/dist/commands/mcp/check.d.ts.map +1 -0
  126. package/dist/commands/mcp/check.js +71 -0
  127. package/dist/commands/mcp/check.js.map +1 -0
  128. package/dist/commands/mcp/index.d.ts +15 -0
  129. package/dist/commands/mcp/index.d.ts.map +1 -0
  130. package/dist/commands/mcp/index.js +28 -0
  131. package/dist/commands/mcp/index.js.map +1 -0
  132. package/dist/commands/mcp/seed.d.ts +11 -0
  133. package/dist/commands/mcp/seed.d.ts.map +1 -0
  134. package/dist/commands/mcp/seed.js +222 -0
  135. package/dist/commands/mcp/seed.js.map +1 -0
  136. package/dist/commands/mcp/setup.d.ts +13 -0
  137. package/dist/commands/mcp/setup.d.ts.map +1 -0
  138. package/dist/commands/mcp/setup.js +387 -0
  139. package/dist/commands/mcp/setup.js.map +1 -0
  140. package/dist/commands/mcp/status.d.ts +11 -0
  141. package/dist/commands/mcp/status.d.ts.map +1 -0
  142. package/dist/commands/mcp/status.js +126 -0
  143. package/dist/commands/mcp/status.js.map +1 -0
  144. package/dist/commands/openclaw/export.d.ts +9 -0
  145. package/dist/commands/openclaw/export.d.ts.map +1 -0
  146. package/dist/commands/openclaw/export.js +72 -0
  147. package/dist/commands/openclaw/export.js.map +1 -0
  148. package/dist/commands/openclaw/index.d.ts +6 -0
  149. package/dist/commands/openclaw/index.d.ts.map +1 -0
  150. package/dist/commands/openclaw/index.js +11 -0
  151. package/dist/commands/openclaw/index.js.map +1 -0
  152. package/dist/commands/planning/create-plan.d.ts +21 -0
  153. package/dist/commands/planning/create-plan.d.ts.map +1 -0
  154. package/dist/commands/planning/create-plan.js +74 -0
  155. package/dist/commands/planning/create-plan.js.map +1 -0
  156. package/dist/commands/planning/validate-plan.d.ts +19 -0
  157. package/dist/commands/planning/validate-plan.d.ts.map +1 -0
  158. package/dist/commands/planning/validate-plan.js +276 -0
  159. package/dist/commands/planning/validate-plan.js.map +1 -0
  160. package/dist/commands/remove.d.ts +8 -0
  161. package/dist/commands/remove.d.ts.map +1 -0
  162. package/dist/commands/remove.js +157 -0
  163. package/dist/commands/remove.js.map +1 -0
  164. package/dist/commands/routes.d.ts +16 -0
  165. package/dist/commands/routes.d.ts.map +1 -0
  166. package/dist/commands/routes.js +153 -0
  167. package/dist/commands/routes.js.map +1 -0
  168. package/dist/commands/skill/deploy.d.ts +12 -0
  169. package/dist/commands/skill/deploy.d.ts.map +1 -0
  170. package/dist/commands/skill/deploy.js +327 -0
  171. package/dist/commands/skill/deploy.js.map +1 -0
  172. package/dist/commands/skill/index.d.ts +6 -0
  173. package/dist/commands/skill/index.d.ts.map +1 -0
  174. package/dist/commands/skill/index.js +20 -0
  175. package/dist/commands/skill/index.js.map +1 -0
  176. package/dist/commands/skill/info.d.ts +11 -0
  177. package/dist/commands/skill/info.d.ts.map +1 -0
  178. package/dist/commands/skill/info.js +260 -0
  179. package/dist/commands/skill/info.js.map +1 -0
  180. package/dist/commands/skill/list.d.ts +11 -0
  181. package/dist/commands/skill/list.d.ts.map +1 -0
  182. package/dist/commands/skill/list.js +242 -0
  183. package/dist/commands/skill/list.js.map +1 -0
  184. package/dist/commands/skill/pull.d.ts +12 -0
  185. package/dist/commands/skill/pull.d.ts.map +1 -0
  186. package/dist/commands/skill/pull.js +133 -0
  187. package/dist/commands/skill/pull.js.map +1 -0
  188. package/dist/commands/skill/remove.d.ts +12 -0
  189. package/dist/commands/skill/remove.d.ts.map +1 -0
  190. package/dist/commands/skill/remove.js +99 -0
  191. package/dist/commands/skill/remove.js.map +1 -0
  192. package/dist/commands/status.d.ts +11 -0
  193. package/dist/commands/status.d.ts.map +1 -0
  194. package/dist/commands/status.js +195 -0
  195. package/dist/commands/status.js.map +1 -0
  196. package/dist/commands/sync.d.ts +20 -0
  197. package/dist/commands/sync.d.ts.map +1 -0
  198. package/dist/commands/sync.js +517 -0
  199. package/dist/commands/sync.js.map +1 -0
  200. package/dist/commands/template/index.d.ts +12 -0
  201. package/dist/commands/template/index.d.ts.map +1 -0
  202. package/dist/commands/template/index.js +24 -0
  203. package/dist/commands/template/index.js.map +1 -0
  204. package/dist/commands/template/info.d.ts +8 -0
  205. package/dist/commands/template/info.d.ts.map +1 -0
  206. package/dist/commands/template/info.js +125 -0
  207. package/dist/commands/template/info.js.map +1 -0
  208. package/dist/commands/template/list.d.ts +8 -0
  209. package/dist/commands/template/list.d.ts.map +1 -0
  210. package/dist/commands/template/list.js +77 -0
  211. package/dist/commands/template/list.js.map +1 -0
  212. package/dist/commands/template/render.d.ts +8 -0
  213. package/dist/commands/template/render.d.ts.map +1 -0
  214. package/dist/commands/template/render.js +115 -0
  215. package/dist/commands/template/render.js.map +1 -0
  216. package/dist/commands/template/validate.d.ts +8 -0
  217. package/dist/commands/template/validate.d.ts.map +1 -0
  218. package/dist/commands/template/validate.js +137 -0
  219. package/dist/commands/template/validate.js.map +1 -0
  220. package/dist/commands/test.d.ts +40 -0
  221. package/dist/commands/test.d.ts.map +1 -0
  222. package/dist/commands/test.js +240 -0
  223. package/dist/commands/test.js.map +1 -0
  224. package/dist/commands/update.d.ts +12 -0
  225. package/dist/commands/update.d.ts.map +1 -0
  226. package/dist/commands/update.js +248 -0
  227. package/dist/commands/update.js.map +1 -0
  228. package/dist/commands/validate.d.ts +12 -0
  229. package/dist/commands/validate.d.ts.map +1 -0
  230. package/dist/commands/validate.js +355 -0
  231. package/dist/commands/validate.js.map +1 -0
  232. package/dist/commands/writer/analyze.d.ts +19 -0
  233. package/dist/commands/writer/analyze.d.ts.map +1 -0
  234. package/dist/commands/writer/analyze.js +210 -0
  235. package/dist/commands/writer/analyze.js.map +1 -0
  236. package/dist/commands/writer/build.d.ts +21 -0
  237. package/dist/commands/writer/build.d.ts.map +1 -0
  238. package/dist/commands/writer/build.js +241 -0
  239. package/dist/commands/writer/build.js.map +1 -0
  240. package/dist/commands/writer/create-chapter.d.ts +19 -0
  241. package/dist/commands/writer/create-chapter.d.ts.map +1 -0
  242. package/dist/commands/writer/create-chapter.js +260 -0
  243. package/dist/commands/writer/create-chapter.js.map +1 -0
  244. package/dist/commands/writer/create-character.d.ts +19 -0
  245. package/dist/commands/writer/create-character.d.ts.map +1 -0
  246. package/dist/commands/writer/create-character.js +263 -0
  247. package/dist/commands/writer/create-character.js.map +1 -0
  248. package/dist/commands/writer/create-part.d.ts +19 -0
  249. package/dist/commands/writer/create-part.d.ts.map +1 -0
  250. package/dist/commands/writer/create-part.js +239 -0
  251. package/dist/commands/writer/create-part.js.map +1 -0
  252. package/dist/commands/writer/create-scene.d.ts +19 -0
  253. package/dist/commands/writer/create-scene.d.ts.map +1 -0
  254. package/dist/commands/writer/create-scene.js +286 -0
  255. package/dist/commands/writer/create-scene.js.map +1 -0
  256. package/dist/commands/writer/export.d.ts +21 -0
  257. package/dist/commands/writer/export.d.ts.map +1 -0
  258. package/dist/commands/writer/export.js +230 -0
  259. package/dist/commands/writer/export.js.map +1 -0
  260. package/dist/commands/writer/init.d.ts +19 -0
  261. package/dist/commands/writer/init.d.ts.map +1 -0
  262. package/dist/commands/writer/init.js +227 -0
  263. package/dist/commands/writer/init.js.map +1 -0
  264. package/dist/commands/writer/lib/immutability-utils.d.ts +82 -0
  265. package/dist/commands/writer/lib/immutability-utils.d.ts.map +1 -0
  266. package/dist/commands/writer/lib/immutability-utils.js +253 -0
  267. package/dist/commands/writer/lib/immutability-utils.js.map +1 -0
  268. package/dist/commands/writer/lib/lock-utils.d.ts +48 -0
  269. package/dist/commands/writer/lib/lock-utils.d.ts.map +1 -0
  270. package/dist/commands/writer/lib/lock-utils.js +122 -0
  271. package/dist/commands/writer/lib/lock-utils.js.map +1 -0
  272. package/dist/commands/writer/lock-fact.d.ts +20 -0
  273. package/dist/commands/writer/lock-fact.d.ts.map +1 -0
  274. package/dist/commands/writer/lock-fact.js +174 -0
  275. package/dist/commands/writer/lock-fact.js.map +1 -0
  276. package/dist/commands/writer/unlock-fact.d.ts +20 -0
  277. package/dist/commands/writer/unlock-fact.d.ts.map +1 -0
  278. package/dist/commands/writer/unlock-fact.js +160 -0
  279. package/dist/commands/writer/unlock-fact.js.map +1 -0
  280. package/dist/commands/writer/validate-immutability.d.ts +19 -0
  281. package/dist/commands/writer/validate-immutability.d.ts.map +1 -0
  282. package/dist/commands/writer/validate-immutability.js +148 -0
  283. package/dist/commands/writer/validate-immutability.js.map +1 -0
  284. package/dist/commands/writer/validate.d.ts +20 -0
  285. package/dist/commands/writer/validate.d.ts.map +1 -0
  286. package/dist/commands/writer/validate.js +370 -0
  287. package/dist/commands/writer/validate.js.map +1 -0
  288. package/dist/hooks/claude-folder-protection.d.ts +23 -0
  289. package/dist/hooks/claude-folder-protection.d.ts.map +1 -0
  290. package/dist/hooks/claude-folder-protection.js +98 -0
  291. package/dist/hooks/claude-folder-protection.js.map +1 -0
  292. package/dist/hooks/index.d.ts +24 -0
  293. package/dist/hooks/index.d.ts.map +1 -0
  294. package/dist/hooks/index.js +24 -0
  295. package/dist/hooks/index.js.map +1 -0
  296. package/dist/hooks/post-write-validate.d.ts +14 -0
  297. package/dist/hooks/post-write-validate.d.ts.map +1 -0
  298. package/dist/hooks/post-write-validate.js +142 -0
  299. package/dist/hooks/post-write-validate.js.map +1 -0
  300. package/dist/hooks/pre-commit-skill-reminder.d.ts +21 -0
  301. package/dist/hooks/pre-commit-skill-reminder.d.ts.map +1 -0
  302. package/dist/hooks/pre-commit-skill-reminder.js +142 -0
  303. package/dist/hooks/pre-commit-skill-reminder.js.map +1 -0
  304. package/dist/hooks/pre-write-quality.d.ts +14 -0
  305. package/dist/hooks/pre-write-quality.d.ts.map +1 -0
  306. package/dist/hooks/pre-write-quality.js +114 -0
  307. package/dist/hooks/pre-write-quality.js.map +1 -0
  308. package/dist/hooks/skill-reminder.d.ts +22 -0
  309. package/dist/hooks/skill-reminder.d.ts.map +1 -0
  310. package/dist/hooks/skill-reminder.js +285 -0
  311. package/dist/hooks/skill-reminder.js.map +1 -0
  312. package/dist/hooks/stop-quality-check.d.ts +14 -0
  313. package/dist/hooks/stop-quality-check.d.ts.map +1 -0
  314. package/dist/hooks/stop-quality-check.js +122 -0
  315. package/dist/hooks/stop-quality-check.js.map +1 -0
  316. package/dist/hooks/subagent-context-loader.d.ts +12 -0
  317. package/dist/hooks/subagent-context-loader.d.ts.map +1 -0
  318. package/dist/hooks/subagent-context-loader.js +124 -0
  319. package/dist/hooks/subagent-context-loader.js.map +1 -0
  320. package/dist/hooks/types.d.ts +89 -0
  321. package/dist/hooks/types.d.ts.map +1 -0
  322. package/dist/hooks/types.js +57 -0
  323. package/dist/hooks/types.js.map +1 -0
  324. package/dist/index.d.ts +3 -0
  325. package/dist/index.d.ts.map +1 -0
  326. package/dist/index.js +256 -0
  327. package/dist/index.js.map +1 -0
  328. package/dist/lib/affected-modules.d.ts +104 -0
  329. package/dist/lib/affected-modules.d.ts.map +1 -0
  330. package/dist/lib/affected-modules.js +283 -0
  331. package/dist/lib/affected-modules.js.map +1 -0
  332. package/dist/lib/agent-generator.d.ts +137 -0
  333. package/dist/lib/agent-generator.d.ts.map +1 -0
  334. package/dist/lib/agent-generator.js +274 -0
  335. package/dist/lib/agent-generator.js.map +1 -0
  336. package/dist/lib/backlog/__mocks__/prompt-utils.d.ts +5 -0
  337. package/dist/lib/backlog/__mocks__/prompt-utils.d.ts.map +1 -0
  338. package/dist/lib/backlog/__mocks__/prompt-utils.js +5 -0
  339. package/dist/lib/backlog/__mocks__/prompt-utils.js.map +1 -0
  340. package/dist/lib/backlog/content-parser.d.ts +83 -0
  341. package/dist/lib/backlog/content-parser.d.ts.map +1 -0
  342. package/dist/lib/backlog/content-parser.js +284 -0
  343. package/dist/lib/backlog/content-parser.js.map +1 -0
  344. package/dist/lib/backlog/csv-extractor.d.ts +87 -0
  345. package/dist/lib/backlog/csv-extractor.d.ts.map +1 -0
  346. package/dist/lib/backlog/csv-extractor.js +338 -0
  347. package/dist/lib/backlog/csv-extractor.js.map +1 -0
  348. package/dist/lib/backlog/epic-handler.d.ts +55 -0
  349. package/dist/lib/backlog/epic-handler.d.ts.map +1 -0
  350. package/dist/lib/backlog/epic-handler.js +222 -0
  351. package/dist/lib/backlog/epic-handler.js.map +1 -0
  352. package/dist/lib/backlog/field-updater.d.ts +195 -0
  353. package/dist/lib/backlog/field-updater.d.ts.map +1 -0
  354. package/dist/lib/backlog/field-updater.js +287 -0
  355. package/dist/lib/backlog/field-updater.js.map +1 -0
  356. package/dist/lib/backlog/import-engine.d.ts +110 -0
  357. package/dist/lib/backlog/import-engine.d.ts.map +1 -0
  358. package/dist/lib/backlog/import-engine.js +241 -0
  359. package/dist/lib/backlog/import-engine.js.map +1 -0
  360. package/dist/lib/backlog/import-strategies.d.ts +110 -0
  361. package/dist/lib/backlog/import-strategies.d.ts.map +1 -0
  362. package/dist/lib/backlog/import-strategies.js +398 -0
  363. package/dist/lib/backlog/import-strategies.js.map +1 -0
  364. package/dist/lib/backlog/jira-file-generators.d.ts +154 -0
  365. package/dist/lib/backlog/jira-file-generators.d.ts.map +1 -0
  366. package/dist/lib/backlog/jira-file-generators.js +265 -0
  367. package/dist/lib/backlog/jira-file-generators.js.map +1 -0
  368. package/dist/lib/backlog/jira-import-workflows.d.ts +112 -0
  369. package/dist/lib/backlog/jira-import-workflows.d.ts.map +1 -0
  370. package/dist/lib/backlog/jira-import-workflows.js +339 -0
  371. package/dist/lib/backlog/jira-import-workflows.js.map +1 -0
  372. package/dist/lib/backlog/jira-lookup.d.ts +121 -0
  373. package/dist/lib/backlog/jira-lookup.d.ts.map +1 -0
  374. package/dist/lib/backlog/jira-lookup.js +232 -0
  375. package/dist/lib/backlog/jira-lookup.js.map +1 -0
  376. package/dist/lib/backlog/jira-prompts.d.ts +66 -0
  377. package/dist/lib/backlog/jira-prompts.d.ts.map +1 -0
  378. package/dist/lib/backlog/jira-prompts.js +232 -0
  379. package/dist/lib/backlog/jira-prompts.js.map +1 -0
  380. package/dist/lib/backlog/jira-validators.d.ts +123 -0
  381. package/dist/lib/backlog/jira-validators.d.ts.map +1 -0
  382. package/dist/lib/backlog/jira-validators.js +394 -0
  383. package/dist/lib/backlog/jira-validators.js.map +1 -0
  384. package/dist/lib/backlog/milestone-generator.d.ts +172 -0
  385. package/dist/lib/backlog/milestone-generator.d.ts.map +1 -0
  386. package/dist/lib/backlog/milestone-generator.js +378 -0
  387. package/dist/lib/backlog/milestone-generator.js.map +1 -0
  388. package/dist/lib/backlog/milestone-migrator.d.ts +174 -0
  389. package/dist/lib/backlog/milestone-migrator.d.ts.map +1 -0
  390. package/dist/lib/backlog/milestone-migrator.js +401 -0
  391. package/dist/lib/backlog/milestone-migrator.js.map +1 -0
  392. package/dist/lib/backlog/milestone-sanitizer.d.ts +72 -0
  393. package/dist/lib/backlog/milestone-sanitizer.d.ts.map +1 -0
  394. package/dist/lib/backlog/milestone-sanitizer.js +139 -0
  395. package/dist/lib/backlog/milestone-sanitizer.js.map +1 -0
  396. package/dist/lib/backlog/prompt-utils.d.ts +9 -0
  397. package/dist/lib/backlog/prompt-utils.d.ts.map +1 -0
  398. package/dist/lib/backlog/prompt-utils.js +11 -0
  399. package/dist/lib/backlog/prompt-utils.js.map +1 -0
  400. package/dist/lib/backlog/sprint-creator.d.ts +145 -0
  401. package/dist/lib/backlog/sprint-creator.d.ts.map +1 -0
  402. package/dist/lib/backlog/sprint-creator.js +295 -0
  403. package/dist/lib/backlog/sprint-creator.js.map +1 -0
  404. package/dist/lib/backlog/ticket-generator.d.ts +79 -0
  405. package/dist/lib/backlog/ticket-generator.d.ts.map +1 -0
  406. package/dist/lib/backlog/ticket-generator.js +281 -0
  407. package/dist/lib/backlog/ticket-generator.js.map +1 -0
  408. package/dist/lib/backlog/ticket-processor.d.ts +205 -0
  409. package/dist/lib/backlog/ticket-processor.d.ts.map +1 -0
  410. package/dist/lib/backlog/ticket-processor.js +422 -0
  411. package/dist/lib/backlog/ticket-processor.js.map +1 -0
  412. package/dist/lib/backlog/types.d.ts +37 -0
  413. package/dist/lib/backlog/types.d.ts.map +1 -0
  414. package/dist/lib/backlog/types.js +7 -0
  415. package/dist/lib/backlog/types.js.map +1 -0
  416. package/dist/lib/backlog/validator.d.ts +61 -0
  417. package/dist/lib/backlog/validator.d.ts.map +1 -0
  418. package/dist/lib/backlog/validator.js +285 -0
  419. package/dist/lib/backlog/validator.js.map +1 -0
  420. package/dist/lib/boundary-validator.d.ts +88 -0
  421. package/dist/lib/boundary-validator.d.ts.map +1 -0
  422. package/dist/lib/boundary-validator.js +494 -0
  423. package/dist/lib/boundary-validator.js.map +1 -0
  424. package/dist/lib/build/build-engine.d.ts +142 -0
  425. package/dist/lib/build/build-engine.d.ts.map +1 -0
  426. package/dist/lib/build/build-engine.js +487 -0
  427. package/dist/lib/build/build-engine.js.map +1 -0
  428. package/dist/lib/build/index.d.ts +7 -0
  429. package/dist/lib/build/index.d.ts.map +1 -0
  430. package/dist/lib/build/index.js +7 -0
  431. package/dist/lib/build/index.js.map +1 -0
  432. package/dist/lib/cleanup-engine.d.ts +121 -0
  433. package/dist/lib/cleanup-engine.d.ts.map +1 -0
  434. package/dist/lib/cleanup-engine.js +252 -0
  435. package/dist/lib/cleanup-engine.js.map +1 -0
  436. package/dist/lib/cli-context.d.ts +283 -0
  437. package/dist/lib/cli-context.d.ts.map +1 -0
  438. package/dist/lib/cli-context.js +403 -0
  439. package/dist/lib/cli-context.js.map +1 -0
  440. package/dist/lib/cli-version.d.ts +7 -0
  441. package/dist/lib/cli-version.d.ts.map +1 -0
  442. package/dist/lib/cli-version.js +30 -0
  443. package/dist/lib/cli-version.js.map +1 -0
  444. package/dist/lib/command-factory.d.ts +76 -0
  445. package/dist/lib/command-factory.d.ts.map +1 -0
  446. package/dist/lib/command-factory.js +166 -0
  447. package/dist/lib/command-factory.js.map +1 -0
  448. package/dist/lib/common/api-client.d.ts +92 -0
  449. package/dist/lib/common/api-client.d.ts.map +1 -0
  450. package/dist/lib/common/api-client.js +206 -0
  451. package/dist/lib/common/api-client.js.map +1 -0
  452. package/dist/lib/common/file-utils.d.ts +92 -0
  453. package/dist/lib/common/file-utils.d.ts.map +1 -0
  454. package/dist/lib/common/file-utils.js +143 -0
  455. package/dist/lib/common/file-utils.js.map +1 -0
  456. package/dist/lib/common/validation.d.ts +91 -0
  457. package/dist/lib/common/validation.d.ts.map +1 -0
  458. package/dist/lib/common/validation.js +213 -0
  459. package/dist/lib/common/validation.js.map +1 -0
  460. package/dist/lib/common/yaml-frontmatter.d.ts +76 -0
  461. package/dist/lib/common/yaml-frontmatter.d.ts.map +1 -0
  462. package/dist/lib/common/yaml-frontmatter.js +89 -0
  463. package/dist/lib/common/yaml-frontmatter.js.map +1 -0
  464. package/dist/lib/confluence/adf-converter.d.ts +30 -0
  465. package/dist/lib/confluence/adf-converter.d.ts.map +1 -0
  466. package/dist/lib/confluence/adf-converter.js +649 -0
  467. package/dist/lib/confluence/adf-converter.js.map +1 -0
  468. package/dist/lib/confluence/confluence-client.d.ts +121 -0
  469. package/dist/lib/confluence/confluence-client.d.ts.map +1 -0
  470. package/dist/lib/confluence/confluence-client.js +249 -0
  471. package/dist/lib/confluence/confluence-client.js.map +1 -0
  472. package/dist/lib/confluence/confluence-commands.d.ts +58 -0
  473. package/dist/lib/confluence/confluence-commands.d.ts.map +1 -0
  474. package/dist/lib/confluence/confluence-commands.js +231 -0
  475. package/dist/lib/confluence/confluence-commands.js.map +1 -0
  476. package/dist/lib/discovery-engine.d.ts +159 -0
  477. package/dist/lib/discovery-engine.d.ts.map +1 -0
  478. package/dist/lib/discovery-engine.js +538 -0
  479. package/dist/lib/discovery-engine.js.map +1 -0
  480. package/dist/lib/framework-validator.d.ts +81 -0
  481. package/dist/lib/framework-validator.d.ts.map +1 -0
  482. package/dist/lib/framework-validator.js +546 -0
  483. package/dist/lib/framework-validator.js.map +1 -0
  484. package/dist/lib/global-skills-manager.d.ts +90 -0
  485. package/dist/lib/global-skills-manager.d.ts.map +1 -0
  486. package/dist/lib/global-skills-manager.js +180 -0
  487. package/dist/lib/global-skills-manager.js.map +1 -0
  488. package/dist/lib/jira/acceptance-criteria.d.ts +76 -0
  489. package/dist/lib/jira/acceptance-criteria.d.ts.map +1 -0
  490. package/dist/lib/jira/acceptance-criteria.js +163 -0
  491. package/dist/lib/jira/acceptance-criteria.js.map +1 -0
  492. package/dist/lib/jira/export-engine.d.ts +132 -0
  493. package/dist/lib/jira/export-engine.d.ts.map +1 -0
  494. package/dist/lib/jira/export-engine.js +332 -0
  495. package/dist/lib/jira/export-engine.js.map +1 -0
  496. package/dist/lib/jira/field-mapper.d.ts +101 -0
  497. package/dist/lib/jira/field-mapper.d.ts.map +1 -0
  498. package/dist/lib/jira/field-mapper.js +346 -0
  499. package/dist/lib/jira/field-mapper.js.map +1 -0
  500. package/dist/lib/jira/jira-client.d.ts +117 -0
  501. package/dist/lib/jira/jira-client.d.ts.map +1 -0
  502. package/dist/lib/jira/jira-client.js +255 -0
  503. package/dist/lib/jira/jira-client.js.map +1 -0
  504. package/dist/lib/jira/sync-engine.d.ts +154 -0
  505. package/dist/lib/jira/sync-engine.d.ts.map +1 -0
  506. package/dist/lib/jira/sync-engine.js +420 -0
  507. package/dist/lib/jira/sync-engine.js.map +1 -0
  508. package/dist/lib/jira/wiki-converter.d.ts +133 -0
  509. package/dist/lib/jira/wiki-converter.d.ts.map +1 -0
  510. package/dist/lib/jira/wiki-converter.js +245 -0
  511. package/dist/lib/jira/wiki-converter.js.map +1 -0
  512. package/dist/lib/link-transformer.d.ts +176 -0
  513. package/dist/lib/link-transformer.d.ts.map +1 -0
  514. package/dist/lib/link-transformer.js +349 -0
  515. package/dist/lib/link-transformer.js.map +1 -0
  516. package/dist/lib/link-validator.d.ts +232 -0
  517. package/dist/lib/link-validator.d.ts.map +1 -0
  518. package/dist/lib/link-validator.js +504 -0
  519. package/dist/lib/link-validator.js.map +1 -0
  520. package/dist/lib/manifest-manager.d.ts +112 -0
  521. package/dist/lib/manifest-manager.d.ts.map +1 -0
  522. package/dist/lib/manifest-manager.js +153 -0
  523. package/dist/lib/manifest-manager.js.map +1 -0
  524. package/dist/lib/mcp/extractors/framework-project.d.ts +29 -0
  525. package/dist/lib/mcp/extractors/framework-project.d.ts.map +1 -0
  526. package/dist/lib/mcp/extractors/framework-project.js +402 -0
  527. package/dist/lib/mcp/extractors/framework-project.js.map +1 -0
  528. package/dist/lib/mcp/extractors/generic-project.d.ts +25 -0
  529. package/dist/lib/mcp/extractors/generic-project.d.ts.map +1 -0
  530. package/dist/lib/mcp/extractors/generic-project.js +344 -0
  531. package/dist/lib/mcp/extractors/generic-project.js.map +1 -0
  532. package/dist/lib/mcp/extractors/index.d.ts +48 -0
  533. package/dist/lib/mcp/extractors/index.d.ts.map +1 -0
  534. package/dist/lib/mcp/extractors/index.js +28 -0
  535. package/dist/lib/mcp/extractors/index.js.map +1 -0
  536. package/dist/lib/mcp/index.d.ts +11 -0
  537. package/dist/lib/mcp/index.d.ts.map +1 -0
  538. package/dist/lib/mcp/index.js +11 -0
  539. package/dist/lib/mcp/index.js.map +1 -0
  540. package/dist/lib/mcp/install-instructions.d.ts +39 -0
  541. package/dist/lib/mcp/install-instructions.d.ts.map +1 -0
  542. package/dist/lib/mcp/install-instructions.js +317 -0
  543. package/dist/lib/mcp/install-instructions.js.map +1 -0
  544. package/dist/lib/mcp/prerequisite-checker.d.ts +79 -0
  545. package/dist/lib/mcp/prerequisite-checker.d.ts.map +1 -0
  546. package/dist/lib/mcp/prerequisite-checker.js +213 -0
  547. package/dist/lib/mcp/prerequisite-checker.js.map +1 -0
  548. package/dist/lib/module-loader.d.ts +77 -0
  549. package/dist/lib/module-loader.d.ts.map +1 -0
  550. package/dist/lib/module-loader.js +135 -0
  551. package/dist/lib/module-loader.js.map +1 -0
  552. package/dist/lib/path-resolver.d.ts +160 -0
  553. package/dist/lib/path-resolver.d.ts.map +1 -0
  554. package/dist/lib/path-resolver.js +205 -0
  555. package/dist/lib/path-resolver.js.map +1 -0
  556. package/dist/lib/planning/plan-creator.d.ts +132 -0
  557. package/dist/lib/planning/plan-creator.d.ts.map +1 -0
  558. package/dist/lib/planning/plan-creator.js +361 -0
  559. package/dist/lib/planning/plan-creator.js.map +1 -0
  560. package/dist/lib/project-resolver.d.ts +124 -0
  561. package/dist/lib/project-resolver.d.ts.map +1 -0
  562. package/dist/lib/project-resolver.js +362 -0
  563. package/dist/lib/project-resolver.js.map +1 -0
  564. package/dist/lib/registry-generator.d.ts +11 -0
  565. package/dist/lib/registry-generator.d.ts.map +1 -0
  566. package/dist/lib/registry-generator.js +288 -0
  567. package/dist/lib/registry-generator.js.map +1 -0
  568. package/dist/lib/routes-validator.d.ts +50 -0
  569. package/dist/lib/routes-validator.d.ts.map +1 -0
  570. package/dist/lib/routes-validator.js +260 -0
  571. package/dist/lib/routes-validator.js.map +1 -0
  572. package/dist/lib/schemas/agent.schema.d.ts +175 -0
  573. package/dist/lib/schemas/agent.schema.d.ts.map +1 -0
  574. package/dist/lib/schemas/agent.schema.js +86 -0
  575. package/dist/lib/schemas/agent.schema.js.map +1 -0
  576. package/dist/lib/schemas/index.d.ts +13 -0
  577. package/dist/lib/schemas/index.d.ts.map +1 -0
  578. package/dist/lib/schemas/index.js +13 -0
  579. package/dist/lib/schemas/index.js.map +1 -0
  580. package/dist/lib/schemas/skill.schema.d.ts +92 -0
  581. package/dist/lib/schemas/skill.schema.d.ts.map +1 -0
  582. package/dist/lib/schemas/skill.schema.js +98 -0
  583. package/dist/lib/schemas/skill.schema.js.map +1 -0
  584. package/dist/lib/sdk/executor.d.ts +37 -0
  585. package/dist/lib/sdk/executor.d.ts.map +1 -0
  586. package/dist/lib/sdk/executor.js +137 -0
  587. package/dist/lib/sdk/executor.js.map +1 -0
  588. package/dist/lib/sdk/generator.d.ts +79 -0
  589. package/dist/lib/sdk/generator.d.ts.map +1 -0
  590. package/dist/lib/sdk/generator.js +316 -0
  591. package/dist/lib/sdk/generator.js.map +1 -0
  592. package/dist/lib/sdk/index.d.ts +12 -0
  593. package/dist/lib/sdk/index.d.ts.map +1 -0
  594. package/dist/lib/sdk/index.js +15 -0
  595. package/dist/lib/sdk/index.js.map +1 -0
  596. package/dist/lib/sdk/message-handler.d.ts +40 -0
  597. package/dist/lib/sdk/message-handler.d.ts.map +1 -0
  598. package/dist/lib/sdk/message-handler.js +215 -0
  599. package/dist/lib/sdk/message-handler.js.map +1 -0
  600. package/dist/lib/sdk/sub-agents.d.ts +51 -0
  601. package/dist/lib/sdk/sub-agents.d.ts.map +1 -0
  602. package/dist/lib/sdk/sub-agents.js +234 -0
  603. package/dist/lib/sdk/sub-agents.js.map +1 -0
  604. package/dist/lib/sdk/types.d.ts +169 -0
  605. package/dist/lib/sdk/types.d.ts.map +1 -0
  606. package/dist/lib/sdk/types.js +7 -0
  607. package/dist/lib/sdk/types.js.map +1 -0
  608. package/dist/lib/skill-cli-parser.d.ts +79 -0
  609. package/dist/lib/skill-cli-parser.d.ts.map +1 -0
  610. package/dist/lib/skill-cli-parser.js +172 -0
  611. package/dist/lib/skill-cli-parser.js.map +1 -0
  612. package/dist/lib/skill-template-engine.d.ts +116 -0
  613. package/dist/lib/skill-template-engine.d.ts.map +1 -0
  614. package/dist/lib/skill-template-engine.js +220 -0
  615. package/dist/lib/skill-template-engine.js.map +1 -0
  616. package/dist/lib/sync-engine.d.ts +344 -0
  617. package/dist/lib/sync-engine.d.ts.map +1 -0
  618. package/dist/lib/sync-engine.js +1255 -0
  619. package/dist/lib/sync-engine.js.map +1 -0
  620. package/dist/lib/telemetry/config.d.ts +22 -0
  621. package/dist/lib/telemetry/config.d.ts.map +1 -0
  622. package/dist/lib/telemetry/config.js +210 -0
  623. package/dist/lib/telemetry/config.js.map +1 -0
  624. package/dist/lib/telemetry/exporters/console-exporter.d.ts +72 -0
  625. package/dist/lib/telemetry/exporters/console-exporter.d.ts.map +1 -0
  626. package/dist/lib/telemetry/exporters/console-exporter.js +228 -0
  627. package/dist/lib/telemetry/exporters/console-exporter.js.map +1 -0
  628. package/dist/lib/telemetry/exporters/json-file-exporter.d.ts +48 -0
  629. package/dist/lib/telemetry/exporters/json-file-exporter.d.ts.map +1 -0
  630. package/dist/lib/telemetry/exporters/json-file-exporter.js +202 -0
  631. package/dist/lib/telemetry/exporters/json-file-exporter.js.map +1 -0
  632. package/dist/lib/telemetry/exporters/otel-exporter.d.ts +48 -0
  633. package/dist/lib/telemetry/exporters/otel-exporter.d.ts.map +1 -0
  634. package/dist/lib/telemetry/exporters/otel-exporter.js +299 -0
  635. package/dist/lib/telemetry/exporters/otel-exporter.js.map +1 -0
  636. package/dist/lib/telemetry/exporters/session-file-exporter.d.ts +66 -0
  637. package/dist/lib/telemetry/exporters/session-file-exporter.d.ts.map +1 -0
  638. package/dist/lib/telemetry/exporters/session-file-exporter.js +223 -0
  639. package/dist/lib/telemetry/exporters/session-file-exporter.js.map +1 -0
  640. package/dist/lib/telemetry/index.d.ts +44 -0
  641. package/dist/lib/telemetry/index.d.ts.map +1 -0
  642. package/dist/lib/telemetry/index.js +69 -0
  643. package/dist/lib/telemetry/index.js.map +1 -0
  644. package/dist/lib/telemetry/instrumentation/cli-instrumentation.d.ts +25 -0
  645. package/dist/lib/telemetry/instrumentation/cli-instrumentation.d.ts.map +1 -0
  646. package/dist/lib/telemetry/instrumentation/cli-instrumentation.js +83 -0
  647. package/dist/lib/telemetry/instrumentation/cli-instrumentation.js.map +1 -0
  648. package/dist/lib/telemetry/instrumentation/discovery-instrumentation.d.ts +21 -0
  649. package/dist/lib/telemetry/instrumentation/discovery-instrumentation.d.ts.map +1 -0
  650. package/dist/lib/telemetry/instrumentation/discovery-instrumentation.js +78 -0
  651. package/dist/lib/telemetry/instrumentation/discovery-instrumentation.js.map +1 -0
  652. package/dist/lib/telemetry/instrumentation/mcp-instrumentation.d.ts +76 -0
  653. package/dist/lib/telemetry/instrumentation/mcp-instrumentation.d.ts.map +1 -0
  654. package/dist/lib/telemetry/instrumentation/mcp-instrumentation.js +168 -0
  655. package/dist/lib/telemetry/instrumentation/mcp-instrumentation.js.map +1 -0
  656. package/dist/lib/telemetry/instrumentation/sync-instrumentation.d.ts +25 -0
  657. package/dist/lib/telemetry/instrumentation/sync-instrumentation.d.ts.map +1 -0
  658. package/dist/lib/telemetry/instrumentation/sync-instrumentation.js +51 -0
  659. package/dist/lib/telemetry/instrumentation/sync-instrumentation.js.map +1 -0
  660. package/dist/lib/telemetry/session-context.d.ts +109 -0
  661. package/dist/lib/telemetry/session-context.d.ts.map +1 -0
  662. package/dist/lib/telemetry/session-context.js +170 -0
  663. package/dist/lib/telemetry/session-context.js.map +1 -0
  664. package/dist/lib/telemetry/telemetry-manager.d.ts +88 -0
  665. package/dist/lib/telemetry/telemetry-manager.d.ts.map +1 -0
  666. package/dist/lib/telemetry/telemetry-manager.js +347 -0
  667. package/dist/lib/telemetry/telemetry-manager.js.map +1 -0
  668. package/dist/lib/telemetry/types.d.ts +302 -0
  669. package/dist/lib/telemetry/types.d.ts.map +1 -0
  670. package/dist/lib/telemetry/types.js +6 -0
  671. package/dist/lib/telemetry/types.js.map +1 -0
  672. package/dist/lib/template-engine.d.ts +5 -0
  673. package/dist/lib/template-engine.d.ts.map +1 -0
  674. package/dist/lib/template-engine.js +294 -0
  675. package/dist/lib/template-engine.js.map +1 -0
  676. package/dist/lib/unified-template-engine/computed-variables.d.ts +38 -0
  677. package/dist/lib/unified-template-engine/computed-variables.d.ts.map +1 -0
  678. package/dist/lib/unified-template-engine/computed-variables.js +85 -0
  679. package/dist/lib/unified-template-engine/computed-variables.js.map +1 -0
  680. package/dist/lib/unified-template-engine/index.d.ts +67 -0
  681. package/dist/lib/unified-template-engine/index.d.ts.map +1 -0
  682. package/dist/lib/unified-template-engine/index.js +200 -0
  683. package/dist/lib/unified-template-engine/index.js.map +1 -0
  684. package/dist/lib/unified-template-engine/resolver.d.ts +63 -0
  685. package/dist/lib/unified-template-engine/resolver.d.ts.map +1 -0
  686. package/dist/lib/unified-template-engine/resolver.js +312 -0
  687. package/dist/lib/unified-template-engine/resolver.js.map +1 -0
  688. package/dist/lib/unified-template-engine/types.d.ts +177 -0
  689. package/dist/lib/unified-template-engine/types.d.ts.map +1 -0
  690. package/dist/lib/unified-template-engine/types.js +7 -0
  691. package/dist/lib/unified-template-engine/types.js.map +1 -0
  692. package/dist/lib/unified-template-engine/validator.d.ts +23 -0
  693. package/dist/lib/unified-template-engine/validator.d.ts.map +1 -0
  694. package/dist/lib/unified-template-engine/validator.js +217 -0
  695. package/dist/lib/unified-template-engine/validator.js.map +1 -0
  696. package/dist/lib/validation/rules/plan-rules.d.ts +48 -0
  697. package/dist/lib/validation/rules/plan-rules.d.ts.map +1 -0
  698. package/dist/lib/validation/rules/plan-rules.js +152 -0
  699. package/dist/lib/validation/rules/plan-rules.js.map +1 -0
  700. package/dist/lib/validation/rules/ticket-rules.d.ts +54 -0
  701. package/dist/lib/validation/rules/ticket-rules.d.ts.map +1 -0
  702. package/dist/lib/validation/rules/ticket-rules.js +136 -0
  703. package/dist/lib/validation/rules/ticket-rules.js.map +1 -0
  704. package/dist/lib/validation/schema-validator.d.ts +26 -0
  705. package/dist/lib/validation/schema-validator.d.ts.map +1 -0
  706. package/dist/lib/validation/schema-validator.js +183 -0
  707. package/dist/lib/validation/schema-validator.js.map +1 -0
  708. package/dist/lib/validation/validation-report.d.ts +68 -0
  709. package/dist/lib/validation/validation-report.d.ts.map +1 -0
  710. package/dist/lib/validation/validation-report.js +141 -0
  711. package/dist/lib/validation/validation-report.js.map +1 -0
  712. package/dist/lib/version-validator.d.ts +89 -0
  713. package/dist/lib/version-validator.d.ts.map +1 -0
  714. package/dist/lib/version-validator.js +178 -0
  715. package/dist/lib/version-validator.js.map +1 -0
  716. package/dist/lib/wizard/detection.d.ts +48 -0
  717. package/dist/lib/wizard/detection.d.ts.map +1 -0
  718. package/dist/lib/wizard/detection.js +116 -0
  719. package/dist/lib/wizard/detection.js.map +1 -0
  720. package/dist/lib/wizard/file-handlers.d.ts +40 -0
  721. package/dist/lib/wizard/file-handlers.d.ts.map +1 -0
  722. package/dist/lib/wizard/file-handlers.js +204 -0
  723. package/dist/lib/wizard/file-handlers.js.map +1 -0
  724. package/dist/lib/wizard/index.d.ts +9 -0
  725. package/dist/lib/wizard/index.d.ts.map +1 -0
  726. package/dist/lib/wizard/index.js +9 -0
  727. package/dist/lib/wizard/index.js.map +1 -0
  728. package/dist/lib/wizard/init-wizard.d.ts +35 -0
  729. package/dist/lib/wizard/init-wizard.d.ts.map +1 -0
  730. package/dist/lib/wizard/init-wizard.js +86 -0
  731. package/dist/lib/wizard/init-wizard.js.map +1 -0
  732. package/dist/lib/wizard/module-groups.d.ts +55 -0
  733. package/dist/lib/wizard/module-groups.d.ts.map +1 -0
  734. package/dist/lib/wizard/module-groups.js +128 -0
  735. package/dist/lib/wizard/module-groups.js.map +1 -0
  736. package/dist/lib/wizard/prompts.d.ts +36 -0
  737. package/dist/lib/wizard/prompts.d.ts.map +1 -0
  738. package/dist/lib/wizard/prompts.js +253 -0
  739. package/dist/lib/wizard/prompts.js.map +1 -0
  740. package/dist/lib/wizard/summary.d.ts +45 -0
  741. package/dist/lib/wizard/summary.d.ts.map +1 -0
  742. package/dist/lib/wizard/summary.js +162 -0
  743. package/dist/lib/wizard/summary.js.map +1 -0
  744. package/dist/mcp/index.d.ts +15 -0
  745. package/dist/mcp/index.d.ts.map +1 -0
  746. package/dist/mcp/index.js +75 -0
  747. package/dist/mcp/index.js.map +1 -0
  748. package/dist/mcp/result-formatter.d.ts +68 -0
  749. package/dist/mcp/result-formatter.d.ts.map +1 -0
  750. package/dist/mcp/result-formatter.js +191 -0
  751. package/dist/mcp/result-formatter.js.map +1 -0
  752. package/dist/mcp/tool-registry.d.ts +70 -0
  753. package/dist/mcp/tool-registry.d.ts.map +1 -0
  754. package/dist/mcp/tool-registry.js +183 -0
  755. package/dist/mcp/tool-registry.js.map +1 -0
  756. package/dist/mcp/tools/agent.d.ts +22 -0
  757. package/dist/mcp/tools/agent.d.ts.map +1 -0
  758. package/dist/mcp/tools/agent.js +267 -0
  759. package/dist/mcp/tools/agent.js.map +1 -0
  760. package/dist/mcp/tools/backlog.d.ts +15 -0
  761. package/dist/mcp/tools/backlog.d.ts.map +1 -0
  762. package/dist/mcp/tools/backlog.js +355 -0
  763. package/dist/mcp/tools/backlog.js.map +1 -0
  764. package/dist/mcp/tools/confluence.d.ts +32 -0
  765. package/dist/mcp/tools/confluence.d.ts.map +1 -0
  766. package/dist/mcp/tools/confluence.js +367 -0
  767. package/dist/mcp/tools/confluence.js.map +1 -0
  768. package/dist/mcp/tools/create.d.ts +22 -0
  769. package/dist/mcp/tools/create.d.ts.map +1 -0
  770. package/dist/mcp/tools/create.js +311 -0
  771. package/dist/mcp/tools/create.js.map +1 -0
  772. package/dist/mcp/tools/framework.d.ts +24 -0
  773. package/dist/mcp/tools/framework.d.ts.map +1 -0
  774. package/dist/mcp/tools/framework.js +430 -0
  775. package/dist/mcp/tools/framework.js.map +1 -0
  776. package/dist/mcp/tools/index.d.ts +32 -0
  777. package/dist/mcp/tools/index.d.ts.map +1 -0
  778. package/dist/mcp/tools/index.js +58 -0
  779. package/dist/mcp/tools/index.js.map +1 -0
  780. package/dist/mcp/tools/jira.d.ts +12 -0
  781. package/dist/mcp/tools/jira.d.ts.map +1 -0
  782. package/dist/mcp/tools/jira.js +206 -0
  783. package/dist/mcp/tools/jira.js.map +1 -0
  784. package/dist/mcp/tools/planning.d.ts +22 -0
  785. package/dist/mcp/tools/planning.d.ts.map +1 -0
  786. package/dist/mcp/tools/planning.js +264 -0
  787. package/dist/mcp/tools/planning.js.map +1 -0
  788. package/dist/mcp/tools/skill.d.ts +42 -0
  789. package/dist/mcp/tools/skill.d.ts.map +1 -0
  790. package/dist/mcp/tools/skill.js +561 -0
  791. package/dist/mcp/tools/skill.js.map +1 -0
  792. package/dist/mcp/tools/template.d.ts +36 -0
  793. package/dist/mcp/tools/template.d.ts.map +1 -0
  794. package/dist/mcp/tools/template.js +354 -0
  795. package/dist/mcp/tools/template.js.map +1 -0
  796. package/dist/mcp/tools/writer.d.ts +23 -0
  797. package/dist/mcp/tools/writer.d.ts.map +1 -0
  798. package/dist/mcp/tools/writer.js +394 -0
  799. package/dist/mcp/tools/writer.js.map +1 -0
  800. package/dist/mcp/types.d.ts +102 -0
  801. package/dist/mcp/types.d.ts.map +1 -0
  802. package/dist/mcp/types.js +37 -0
  803. package/dist/mcp/types.js.map +1 -0
  804. package/dist/templates/index.d.ts +11 -0
  805. package/dist/templates/index.d.ts.map +1 -0
  806. package/dist/templates/index.js +11 -0
  807. package/dist/templates/index.js.map +1 -0
  808. package/dist/templates/mcp-hooks.d.ts +37 -0
  809. package/dist/templates/mcp-hooks.d.ts.map +1 -0
  810. package/dist/templates/mcp-hooks.js +224 -0
  811. package/dist/templates/mcp-hooks.js.map +1 -0
  812. package/dist/templates/serena-project.d.ts +14 -0
  813. package/dist/templates/serena-project.d.ts.map +1 -0
  814. package/dist/templates/serena-project.js +105 -0
  815. package/dist/templates/serena-project.js.map +1 -0
  816. package/dist/templates/settings-json.d.ts +28 -0
  817. package/dist/templates/settings-json.d.ts.map +1 -0
  818. package/dist/templates/settings-json.js +190 -0
  819. package/dist/templates/settings-json.js.map +1 -0
  820. package/dist/templates/settings-local.d.ts +69 -0
  821. package/dist/templates/settings-local.d.ts.map +1 -0
  822. package/dist/templates/settings-local.js +56 -0
  823. package/dist/templates/settings-local.js.map +1 -0
  824. package/dist/templates/statusline.d.ts +7 -0
  825. package/dist/templates/statusline.d.ts.map +1 -0
  826. package/dist/templates/statusline.js +260 -0
  827. package/dist/templates/statusline.js.map +1 -0
  828. package/dist/types/command-options.d.ts +392 -0
  829. package/dist/types/command-options.d.ts.map +1 -0
  830. package/dist/types/command-options.js +15 -0
  831. package/dist/types/command-options.js.map +1 -0
  832. package/framework/modules/backlog/agents/ai-backlog-manager.md +430 -0
  833. package/framework/modules/backlog/commands/cmd-backlog-create-ticket.md +42 -0
  834. package/framework/modules/backlog/commands/cmd-backlog-import.md +42 -0
  835. package/framework/modules/backlog/commands/cmd-backlog-migrate-milestones.md +42 -0
  836. package/framework/modules/backlog/commands/cmd-backlog-update-fields.md +42 -0
  837. package/framework/modules/backlog/commands/cmd-backlog-validate.md +42 -0
  838. package/framework/modules/backlog/module.json +82 -0
  839. package/framework/modules/backlog/schemas/ticket.schema.json +143 -0
  840. package/framework/modules/backlog/skills/backlog/building-tickets/BODY-STRUCTURE.md +470 -0
  841. package/framework/modules/backlog/skills/backlog/building-tickets/EXAMPLES.md +561 -0
  842. package/framework/modules/backlog/skills/backlog/building-tickets/SKILL.md +293 -0
  843. package/framework/modules/backlog/skills/backlog/building-tickets/VALIDATION-RULES.md +748 -0
  844. package/framework/modules/backlog/skills/backlog/building-tickets/YAML-STRUCTURE.md +439 -0
  845. package/framework/modules/backlog/skills/backlog/building-tickets/templates/bug.template.md +83 -0
  846. package/framework/modules/backlog/skills/backlog/building-tickets/templates/epic.template.md +96 -0
  847. package/framework/modules/backlog/skills/backlog/building-tickets/templates/story.template.md +68 -0
  848. package/framework/modules/backlog/skills/backlog/building-tickets/templates/task.template.md +66 -0
  849. package/framework/modules/backlog/skills/backlog/building-tickets/templates/template.config.json +50 -0
  850. package/framework/modules/backlog/skills/backlog/organizing-backlog/DIRECTORY-STRUCTURE.md +195 -0
  851. package/framework/modules/backlog/skills/backlog/organizing-backlog/EXAMPLES.md +374 -0
  852. package/framework/modules/backlog/skills/backlog/organizing-backlog/JIRA-SOURCE-OF-TRUTH.md +384 -0
  853. package/framework/modules/backlog/skills/backlog/organizing-backlog/NAMING-CONVENTIONS.md +230 -0
  854. package/framework/modules/backlog/skills/backlog/organizing-backlog/SKILL.md +332 -0
  855. package/framework/modules/backlog/skills/backlog/organizing-backlog/WORKFLOW-PIPELINE.md +298 -0
  856. package/framework/modules/backlog/templates/ticket.md.template +111 -0
  857. package/framework/modules/coding/agents/ai-app-developer.md +275 -0
  858. package/framework/modules/coding/agents/ai-architect.md +454 -0
  859. package/framework/modules/coding/agents/ai-hig-reviewer.md +69 -0
  860. package/framework/modules/coding/agents/ai-ios-developer.md +303 -0
  861. package/framework/modules/coding/module.json +56 -0
  862. package/framework/modules/coding/skills/coding/designing-architecture/SKILL.md +475 -0
  863. package/framework/modules/coding/skills/coding/designing-ios-ui/SKILL.md +405 -0
  864. package/framework/modules/coding/skills/coding/implementing-code/EXAMPLES.md +565 -0
  865. package/framework/modules/coding/skills/coding/implementing-code/SKILL.md +490 -0
  866. package/framework/modules/coding/skills/coding/implementing-ios/ANTI-PATTERNS.md +564 -0
  867. package/framework/modules/coding/skills/coding/implementing-ios/ARCHITECTURE-PATTERNS.md +539 -0
  868. package/framework/modules/coding/skills/coding/implementing-ios/HIG-COMPLIANCE.md +492 -0
  869. package/framework/modules/coding/skills/coding/implementing-ios/SKILL.md +506 -0
  870. package/framework/modules/coding/skills/coding/implementing-ios/SWIFTUI-PATTERNS.md +625 -0
  871. package/framework/modules/coding/skills/coding/implementing-ios/TESTING-PATTERNS.md +625 -0
  872. package/framework/modules/coding/skills/coding/implementing-ios/UIKIT-PATTERNS.md +470 -0
  873. package/framework/modules/coding/skills/coding/structuring-code/CHECKLISTS.md +151 -0
  874. package/framework/modules/coding/skills/coding/structuring-code/DRY-PRINCIPLES.md +285 -0
  875. package/framework/modules/coding/skills/coding/structuring-code/FILE-ORGANIZATION.md +278 -0
  876. package/framework/modules/coding/skills/coding/structuring-code/READABILITY.md +291 -0
  877. package/framework/modules/coding/skills/coding/structuring-code/SKILL.md +289 -0
  878. package/framework/modules/confluence/agents/ai-confluence-manager.md +369 -0
  879. package/framework/modules/confluence/commands/cmd-confluence-create-page.md +42 -0
  880. package/framework/modules/confluence/commands/cmd-confluence-fetch-page.md +42 -0
  881. package/framework/modules/confluence/commands/cmd-confluence-import-reports.md +42 -0
  882. package/framework/modules/confluence/commands/cmd-confluence-validate.md +42 -0
  883. package/framework/modules/confluence/module.json +69 -0
  884. package/framework/modules/confluence/schemas/adf.schema.json +128 -0
  885. package/framework/modules/confluence/skills/confluence/converting-adf/SKILL.md +455 -0
  886. package/framework/modules/confluence/skills/confluence/publishing-confluence/ADF-EXAMPLES.md +433 -0
  887. package/framework/modules/confluence/skills/confluence/publishing-confluence/EXAMPLES.md +513 -0
  888. package/framework/modules/confluence/skills/confluence/publishing-confluence/SKILL.md +651 -0
  889. package/framework/modules/core/agents/ai-framework-developer.md +184 -0
  890. package/framework/modules/core/agents/ai-framework-manager.md +222 -0
  891. package/framework/modules/core/agents/ai-scout-backlog.md +65 -0
  892. package/framework/modules/core/agents/ai-scout-codebase.md +66 -0
  893. package/framework/modules/core/agents/ai-scout-knowledge.md +63 -0
  894. package/framework/modules/core/commands/cmd-agent-list.md +37 -0
  895. package/framework/modules/core/commands/cmd-agent-run.md +37 -0
  896. package/framework/modules/core/commands/cmd-agent-show.md +37 -0
  897. package/framework/modules/core/commands/cmd-bump-version.md +42 -0
  898. package/framework/modules/core/commands/cmd-mcp-check.md +59 -0
  899. package/framework/modules/core/commands/cmd-mcp-seed.md +69 -0
  900. package/framework/modules/core/commands/cmd-mcp-setup.md +61 -0
  901. package/framework/modules/core/commands/cmd-mcp-status.md +70 -0
  902. package/framework/modules/core/commands/cmd-validate-links.md +42 -0
  903. package/framework/modules/core/commands/cmd-validate-versions.md +42 -0
  904. package/framework/modules/core/hooks/_lib/notify-helper.sh +27 -0
  905. package/framework/modules/core/hooks/block-main-commit.sh +35 -0
  906. package/framework/modules/core/hooks/notify.sh +43 -0
  907. package/framework/modules/core/hooks/post-write-format.sh +52 -0
  908. package/framework/modules/core/hooks/post-write-validate.sh +24 -0
  909. package/framework/modules/core/hooks/pre-bash-safety.sh +44 -0
  910. package/framework/modules/core/hooks/pre-commit-skill-reminder.sh +24 -0
  911. package/framework/modules/core/hooks/pre-write-quality.sh +24 -0
  912. package/framework/modules/core/hooks/session-compact-context.sh +37 -0
  913. package/framework/modules/core/hooks/session-end-reminder.sh +36 -0
  914. package/framework/modules/core/hooks/session-start-context.sh +33 -0
  915. package/framework/modules/core/hooks/session-start-worktree.sh +30 -0
  916. package/framework/modules/core/hooks/skill-reminder.sh +24 -0
  917. package/framework/modules/core/hooks/stop-commit-check.sh +24 -0
  918. package/framework/modules/core/hooks/stop-pr-suggest.sh +42 -0
  919. package/framework/modules/core/hooks/stop-quality-check.sh +24 -0
  920. package/framework/modules/core/hooks/subagent-context-loader.sh +24 -0
  921. package/framework/modules/core/module.json +205 -0
  922. package/framework/modules/core/registries/schemas/agents.schema.json +209 -0
  923. package/framework/modules/core/registries/schemas/command.schema.json +98 -0
  924. package/framework/modules/core/registries/schemas/custom-agent.schema.json +108 -0
  925. package/framework/modules/core/registries/schemas/module.schema.json +233 -0
  926. package/framework/modules/core/registries/schemas/template.schema.json +164 -0
  927. package/framework/modules/core/registries/skill-triggers.json +196 -0
  928. package/framework/modules/core/skills/building-agents/AGENT-TEMPLATE.md +289 -0
  929. package/framework/modules/core/skills/building-agents/CONTENT-ROUTING.md +302 -0
  930. package/framework/modules/core/skills/building-agents/EXAMPLES.md +448 -0
  931. package/framework/modules/core/skills/building-agents/SKILL.md +289 -0
  932. package/framework/modules/core/skills/building-agents/VALIDATION-CHECKLIST.md +304 -0
  933. package/framework/modules/core/skills/building-context/CONTENT-GUIDELINES.md +471 -0
  934. package/framework/modules/core/skills/building-context/EXAMPLES.md +1606 -0
  935. package/framework/modules/core/skills/building-context/LEVEL-DECISION-TREE.md +262 -0
  936. package/framework/modules/core/skills/building-context/SKILL.md +479 -0
  937. package/framework/modules/core/skills/building-context/VALIDATION-CHECKLIST.md +358 -0
  938. package/framework/modules/core/skills/building-framework/AGENT-CREATION-WORKFLOW.md +268 -0
  939. package/framework/modules/core/skills/building-framework/DECISION-TREES.md +183 -0
  940. package/framework/modules/core/skills/building-framework/EXAMPLES.md +387 -0
  941. package/framework/modules/core/skills/building-framework/GOVERNANCE-RULES.md +446 -0
  942. package/framework/modules/core/skills/building-framework/GOVERNANCE-UPDATE-WORKFLOW.md +172 -0
  943. package/framework/modules/core/skills/building-framework/REGISTRY-GUIDE.md +551 -0
  944. package/framework/modules/core/skills/building-framework/SCOPE-DECISION-TREE.md +284 -0
  945. package/framework/modules/core/skills/building-framework/SKILL.md +210 -0
  946. package/framework/modules/core/skills/building-skills/ANTI-PATTERNS-CONTENT.md +219 -0
  947. package/framework/modules/core/skills/building-skills/ANTI-PATTERNS-MCP.md +119 -0
  948. package/framework/modules/core/skills/building-skills/ANTI-PATTERNS-NAMING.md +129 -0
  949. package/framework/modules/core/skills/building-skills/ANTI-PATTERNS-STRUCTURE.md +139 -0
  950. package/framework/modules/core/skills/building-skills/EXAMPLES.md +330 -0
  951. package/framework/modules/core/skills/building-skills/PATTERNS.md +523 -0
  952. package/framework/modules/core/skills/building-skills/SKILL-CREATION-WORKFLOW-FRAMEWORK.md +253 -0
  953. package/framework/modules/core/skills/building-skills/SKILL.md +543 -0
  954. package/framework/modules/core/skills/committing-code/EXAMPLES.md +567 -0
  955. package/framework/modules/core/skills/committing-code/SKILL.md +285 -0
  956. package/framework/modules/core/skills/committing-code/STANDARDS-BRANCHES.md +95 -0
  957. package/framework/modules/core/skills/committing-code/STANDARDS-COMMITS.md +140 -0
  958. package/framework/modules/core/skills/committing-code/STANDARDS-FRAMEWORK.md +234 -0
  959. package/framework/modules/core/skills/committing-code/STANDARDS-TICKETS.md +102 -0
  960. package/framework/modules/core/skills/gathering-intelligence/SKILL.md +136 -0
  961. package/framework/modules/core/skills/managing-versions/EXAMPLES.md +277 -0
  962. package/framework/modules/core/skills/managing-versions/SCRIPTS-REFERENCE.md +295 -0
  963. package/framework/modules/core/skills/managing-versions/SKILL.md +260 -0
  964. package/framework/modules/core/skills/managing-versions/STANDARDS.md +231 -0
  965. package/framework/modules/core/skills/using-context/EXAMPLES.md +257 -0
  966. package/framework/modules/core/skills/using-context/SKILL.md +238 -0
  967. package/framework/modules/core/skills/using-context/STANDARDS.md +241 -0
  968. package/framework/modules/core/skills/using-framework/BEST-PRACTICES.md +421 -0
  969. package/framework/modules/core/skills/using-framework/DISCOVERY-ENGINE-ARCHITECTURE.md +331 -0
  970. package/framework/modules/core/skills/using-framework/EXAMPLES.md +535 -0
  971. package/framework/modules/core/skills/using-framework/ROUTES-REGISTRY-DESIGN.md +455 -0
  972. package/framework/modules/core/skills/using-framework/SKILL.md +176 -0
  973. package/framework/modules/core/skills/using-mcp/ANTI-PATTERNS.md +566 -0
  974. package/framework/modules/core/skills/using-mcp/DECISION-MATRICES.md +385 -0
  975. package/framework/modules/core/skills/using-mcp/EXAMPLES.md +466 -0
  976. package/framework/modules/core/skills/using-mcp/FRAMEWORK-MCP-PATTERNS.md +395 -0
  977. package/framework/modules/core/skills/using-mcp/QUICK-REFERENCE.md +98 -0
  978. package/framework/modules/core/skills/using-mcp/SKILL.md +624 -0
  979. package/framework/modules/core/skills/using-mcp/TOOLS-REFERENCE.md +532 -0
  980. package/framework/modules/core/skills/validating-links/EXAMPLES.md +326 -0
  981. package/framework/modules/core/skills/validating-links/SKILL.md +307 -0
  982. package/framework/modules/core/skills/validating-links/STANDARDS.md +353 -0
  983. package/framework/modules/core/skills/validating-markdown/EXAMPLES.md +516 -0
  984. package/framework/modules/core/skills/validating-markdown/SKILL.md +503 -0
  985. package/framework/modules/core/skills/validating-markdown/VALIDATION-RULES.md +360 -0
  986. package/framework/modules/core/skills/validating-markdown/YAML-SCHEMA.md +424 -0
  987. package/framework/modules/core/skills/verifying-quality/ANTI-PATTERNS.md +302 -0
  988. package/framework/modules/core/skills/verifying-quality/CLI-TESTING.md +389 -0
  989. package/framework/modules/core/skills/verifying-quality/DEFENSIVE-CODING.md +433 -0
  990. package/framework/modules/core/skills/verifying-quality/EVALUATION-PROTOCOL.md +106 -0
  991. package/framework/modules/core/skills/verifying-quality/EXAMPLES.md +588 -0
  992. package/framework/modules/core/skills/verifying-quality/QUALITY-CHECKLIST.md +181 -0
  993. package/framework/modules/core/skills/verifying-quality/SKILL.md +275 -0
  994. package/framework/modules/core/templates/agent/agent.template.md +97 -0
  995. package/framework/modules/core/templates/agent/template.config.json +47 -0
  996. package/framework/modules/core/templates/config/agentic-framework.json.template +17 -0
  997. package/framework/modules/core/templates/config/hooks/pre-commit-sync.sh.template +190 -0
  998. package/framework/modules/core/templates/config/hooks/pre-push.sh.template +330 -0
  999. package/framework/modules/core/templates/config/settings.local.json.template +39 -0
  1000. package/framework/modules/core/templates/config/statusline.sh.template +253 -0
  1001. package/framework/modules/core/templates/context/business-advanced.template.md +71 -0
  1002. package/framework/modules/core/templates/context/business-basic.template.md +39 -0
  1003. package/framework/modules/core/templates/context/business-expert.template.md +95 -0
  1004. package/framework/modules/core/templates/context/process-advanced.template.md +141 -0
  1005. package/framework/modules/core/templates/context/process-basic.template.md +87 -0
  1006. package/framework/modules/core/templates/context/process-expert.template.md +213 -0
  1007. package/framework/modules/core/templates/context/technical-advanced.template.md +111 -0
  1008. package/framework/modules/core/templates/context/technical-basic.template.md +66 -0
  1009. package/framework/modules/core/templates/context/technical-expert.template.md +157 -0
  1010. package/framework/modules/core/templates/module/module.json.template +20 -0
  1011. package/framework/modules/core/templates/module/template.config.json +41 -0
  1012. package/framework/modules/core/templates/skill/SKILL.md.template +96 -0
  1013. package/framework/modules/core/templates/skill/template.config.json +39 -0
  1014. package/framework/modules/jira/agents/ai-jira-manager.md +320 -0
  1015. package/framework/modules/jira/commands/cmd-jira-export.md +42 -0
  1016. package/framework/modules/jira/commands/cmd-jira-sync.md +42 -0
  1017. package/framework/modules/jira/module.json +55 -0
  1018. package/framework/modules/jira/schemas/jira-sync.config.json +75 -0
  1019. package/framework/modules/jira/skills/jira/integrating-jira/CONFLUENCE-PATTERNS.md +284 -0
  1020. package/framework/modules/jira/skills/jira/integrating-jira/CONVERSION-RULES.md +188 -0
  1021. package/framework/modules/jira/skills/jira/integrating-jira/EXAMPLES.md +406 -0
  1022. package/framework/modules/jira/skills/jira/integrating-jira/JIRA-PATTERNS.md +284 -0
  1023. package/framework/modules/jira/skills/jira/integrating-jira/SKILL.md +412 -0
  1024. package/framework/modules/reporting/agents/ai-report-manager.md +410 -0
  1025. package/framework/modules/reporting/module.json +35 -0
  1026. package/framework/modules/reporting/skills/reporting/building-reports/EXAMPLES.md +613 -0
  1027. package/framework/modules/reporting/skills/reporting/building-reports/SKILL.md +509 -0
  1028. package/framework/modules/writer/BUILD_SYSTEM.md +325 -0
  1029. package/framework/modules/writer/MIGRATION.md +326 -0
  1030. package/framework/modules/writer/agents/ai-book-writer.md +196 -0
  1031. package/framework/modules/writer/agents/ai-prose-writer.md +58 -0
  1032. package/framework/modules/writer/agents/ai-world-builder.md +46 -0
  1033. package/framework/modules/writer/commands/cmd-writer-add-fact.md +42 -0
  1034. package/framework/modules/writer/commands/cmd-writer-analyze.md +42 -0
  1035. package/framework/modules/writer/commands/cmd-writer-build.md +42 -0
  1036. package/framework/modules/writer/commands/cmd-writer-create-chapter.md +42 -0
  1037. package/framework/modules/writer/commands/cmd-writer-create-character.md +42 -0
  1038. package/framework/modules/writer/commands/cmd-writer-create-history-event.md +42 -0
  1039. package/framework/modules/writer/commands/cmd-writer-create-magic-system.md +42 -0
  1040. package/framework/modules/writer/commands/cmd-writer-create-nation.md +42 -0
  1041. package/framework/modules/writer/commands/cmd-writer-create-part.md +42 -0
  1042. package/framework/modules/writer/commands/cmd-writer-create-region.md +42 -0
  1043. package/framework/modules/writer/commands/cmd-writer-create-scene.md +42 -0
  1044. package/framework/modules/writer/commands/cmd-writer-create-world-rule.md +42 -0
  1045. package/framework/modules/writer/commands/cmd-writer-export.md +42 -0
  1046. package/framework/modules/writer/commands/cmd-writer-generate-context.md +42 -0
  1047. package/framework/modules/writer/commands/cmd-writer-init-baseline.md +42 -0
  1048. package/framework/modules/writer/commands/cmd-writer-init.md +42 -0
  1049. package/framework/modules/writer/commands/cmd-writer-lock-fact.md +42 -0
  1050. package/framework/modules/writer/commands/cmd-writer-validate-immutability.md +42 -0
  1051. package/framework/modules/writer/commands/cmd-writer-validate.md +42 -0
  1052. package/framework/modules/writer/module.json +181 -0
  1053. package/framework/modules/writer/schemas/baseline.schema.json +60 -0
  1054. package/framework/modules/writer/schemas/manifest.schema.json +155 -0
  1055. package/framework/modules/writer/schemas/prerequisites.schema.json +171 -0
  1056. package/framework/modules/writer/schemas/token-budgets.json +129 -0
  1057. package/framework/modules/writer/schemas/token-budgets.schema.json +92 -0
  1058. package/framework/modules/writer/schemas/world-fact.schema.json +172 -0
  1059. package/framework/modules/writer/schemas/world-lock.schema.json +244 -0
  1060. package/framework/modules/writer/skills/writer/building-worlds/CONSISTENCY-PILLARS.md +412 -0
  1061. package/framework/modules/writer/skills/writer/building-worlds/CULTURE-BUILDING.md +354 -0
  1062. package/framework/modules/writer/skills/writer/building-worlds/GEOGRAPHY-HISTORY.md +293 -0
  1063. package/framework/modules/writer/skills/writer/building-worlds/MAGIC-SYSTEMS.md +311 -0
  1064. package/framework/modules/writer/skills/writer/building-worlds/REVELATION-CHECKLIST.md +282 -0
  1065. package/framework/modules/writer/skills/writer/building-worlds/SKILL.md +313 -0
  1066. package/framework/modules/writer/skills/writer/organizing-books/DOMAINS.md +212 -0
  1067. package/framework/modules/writer/skills/writer/organizing-books/FOLDER-STRUCTURE.md +593 -0
  1068. package/framework/modules/writer/skills/writer/organizing-books/IMMUTABILITY-GUIDE.md +350 -0
  1069. package/framework/modules/writer/skills/writer/organizing-books/METADATA-GUIDE.md +780 -0
  1070. package/framework/modules/writer/skills/writer/organizing-books/SKILL.md +257 -0
  1071. package/framework/modules/writer/skills/writer/organizing-books/SSOT-RULES.md +214 -0
  1072. package/framework/modules/writer/skills/writer/organizing-books/WORLD-STRUCTURE.md +222 -0
  1073. package/framework/modules/writer/skills/writer/organizing-books/templates/chapter.template.md +57 -0
  1074. package/framework/modules/writer/skills/writer/organizing-books/templates/character.template.md +121 -0
  1075. package/framework/modules/writer/skills/writer/organizing-books/templates/part.template.md +67 -0
  1076. package/framework/modules/writer/skills/writer/organizing-books/templates/scene.template.md +62 -0
  1077. package/framework/modules/writer/skills/writer/organizing-books/templates/template.config.json +114 -0
  1078. package/framework/modules/writer/skills/writer/writing-prose/CHARACTER-VOICE.md +654 -0
  1079. package/framework/modules/writer/skills/writer/writing-prose/DESCRIPTION-TECHNIQUES.md +688 -0
  1080. package/framework/modules/writer/skills/writer/writing-prose/DIALOGUE-GUIDE.md +663 -0
  1081. package/framework/modules/writer/skills/writer/writing-prose/PACING-STRUCTURE.md +613 -0
  1082. package/framework/modules/writer/skills/writer/writing-prose/PROSE-PATTERNS.md +569 -0
  1083. package/framework/modules/writer/skills/writer/writing-prose/SKILL.md +583 -0
  1084. package/framework/modules/writer/skills/writer/writing-prose/WORLD-BUILDING-RULES.md +692 -0
  1085. package/framework/modules/writer/skills/writer/writing-prose/examples/blended-accessible.md +651 -0
  1086. package/framework/modules/writer/skills/writer/writing-prose/examples/tolkien-style.md +534 -0
  1087. package/framework/modules/writer/skills/writer/writing-prose/examples/zelazny-style.md +415 -0
  1088. package/framework/modules/writer/src/package.json +3 -0
  1089. package/framework/modules/writer/templates/package.json +28 -0
  1090. package/framework/modules/writer/templates/world/baseline.template.md +183 -0
  1091. package/framework/modules/writer/templates/world/history-event.template.md +89 -0
  1092. package/framework/modules/writer/templates/world/magic-system.template.md +138 -0
  1093. package/framework/modules/writer/templates/world/manifest.template.json +9 -0
  1094. package/framework/modules/writer/templates/world/nation.template.md +123 -0
  1095. package/framework/modules/writer/templates/world/region.template.md +65 -0
  1096. package/framework/modules/writer/templates/world/world-rule.template.md +50 -0
  1097. package/package.json +110 -0
@@ -0,0 +1,1255 @@
1
+ /**
2
+ * Sync Engine Module
3
+ *
4
+ * Synchronizes skills and agents from module source directories to deployment
5
+ * directories (.claude/skills/ and .claude/commands/). Uses LinkTransformer to
6
+ * transform markdown links during sync.
7
+ *
8
+ * Usage:
9
+ * const engine = new SyncEngine('/path/to/framework', '/path/to/project');
10
+ * const modules = await loadAllModules();
11
+ * const report = await engine.syncAll(modules);
12
+ *
13
+ * Project structure managed:
14
+ * project/
15
+ * ├── .claude/skills/project/ # Project-owned skills (synced TO .claude/skills/)
16
+ * ├── .claude/skills/ # Target for framework + project skills
17
+ * ├── .claude/commands/ # Target for agents (slash commands)
18
+ * └── .claude/agents/ # Target for agents (Task tool invocation)
19
+ *
20
+ * Module structure synced FROM:
21
+ * core/
22
+ * ├── agents/ai-*.md # Agents to sync
23
+ * └── skills/shared/* # Skills to sync (taxonomy structure)
24
+ */
25
+ import fs from "fs-extra";
26
+ import path from "path";
27
+ import yaml from "yaml";
28
+ import { LinkTransformer } from "./link-transformer.js";
29
+ import { getFrameworkRoot } from "./module-loader.js";
30
+ import { recordSyncAll } from "./telemetry/instrumentation/sync-instrumentation.js";
31
+ import { statuslineTemplate } from "../templates/statusline.js";
32
+ import { processSettingsJsonTemplate } from "../templates/settings-json.js";
33
+ /**
34
+ * Synchronizes skills and agents from modules to deployment directories.
35
+ *
36
+ * The SyncEngine handles:
37
+ * - Copying skills from module taxonomy structures to flat .claude/skills/
38
+ * - Copying agents to .claude/commands/
39
+ * - Copying project skills from .claude/skills/project/ to .claude/skills/
40
+ * - Transforming markdown links in all .md files using LinkTransformer
41
+ * - Reporting all sync actions and errors
42
+ */
43
+ export class SyncEngine {
44
+ /** Files to skip during sync operations */
45
+ static SKIP_FILES = new Set([
46
+ ".DS_Store",
47
+ ".gitkeep",
48
+ ".gitignore",
49
+ "Thumbs.db",
50
+ ]);
51
+ /**
52
+ * Folders in .claude/ that are protected from deletion during sync operations.
53
+ * These folders contain user-owned data that must never be removed.
54
+ */
55
+ static PROTECTED_FOLDERS = new Set(["context"]);
56
+ /**
57
+ * Check if a path is a protected folder that should never be deleted.
58
+ *
59
+ * @param folderPath - Path relative to .claude/ directory
60
+ * @returns True if the folder is protected
61
+ */
62
+ static isProtectedFolder(folderPath) {
63
+ const normalizedPath = folderPath
64
+ .replace(/^\.claude\//, "")
65
+ .replace(/\/$/, "");
66
+ return SyncEngine.PROTECTED_FOLDERS.has(normalizedPath);
67
+ }
68
+ frameworkRoot;
69
+ projectPath;
70
+ linkTransformer;
71
+ /**
72
+ * Initialize the SyncEngine.
73
+ *
74
+ * @param frameworkRoot - Absolute path to the framework root directory
75
+ * @param projectPath - Absolute path to the project directory
76
+ */
77
+ constructor(frameworkRoot, projectPath) {
78
+ this.frameworkRoot = path.resolve(frameworkRoot);
79
+ this.projectPath = path.resolve(projectPath);
80
+ // Pass projectPath as second arg for {project}/ placeholder resolution
81
+ this.linkTransformer = new LinkTransformer(this.frameworkRoot, this.projectPath);
82
+ }
83
+ /**
84
+ * Sync all skills from installed modules to .claude/skills/.
85
+ *
86
+ * Processes each module's skills/ directory, recursively copies skill
87
+ * directories to a flat structure in .claude/skills/, and transforms all
88
+ * markdown links.
89
+ *
90
+ * @param modules - List of installed module manifests
91
+ * @returns List of sync actions performed
92
+ */
93
+ async syncSkills(modules) {
94
+ const items = [];
95
+ const targetDir = path.join(this.projectPath, ".claude/skills");
96
+ // Ensure target directory exists
97
+ await fs.ensureDir(targetDir);
98
+ for (const module of modules) {
99
+ if (!module._sourcePath) {
100
+ continue;
101
+ }
102
+ const skillsSourceDir = path.join(module._sourcePath, "skills");
103
+ if (!(await fs.pathExists(skillsSourceDir))) {
104
+ continue;
105
+ }
106
+ // Find all skill directories (may be nested in taxonomy structure)
107
+ const skillDirs = await this.findSkillDirectories(skillsSourceDir);
108
+ for (const skillDir of skillDirs) {
109
+ const skillName = path.basename(skillDir);
110
+ const targetPath = path.join(targetDir, skillName);
111
+ try {
112
+ await this.copySkillDirectory(skillDir, targetPath);
113
+ items.push({
114
+ name: skillName,
115
+ source: skillDir,
116
+ target: targetPath,
117
+ action: "updated",
118
+ });
119
+ }
120
+ catch (_error) {
121
+ items.push({
122
+ name: skillName,
123
+ source: skillDir,
124
+ target: targetPath,
125
+ action: "skipped",
126
+ });
127
+ }
128
+ }
129
+ }
130
+ return items;
131
+ }
132
+ /**
133
+ * Sync all agents from installed modules to .claude/commands/ and .claude/agents/.
134
+ *
135
+ * Copies all ai-*.md agent files from each module's agents/ directory
136
+ * to both .claude/commands/ (for slash commands) and .claude/agents/
137
+ * (for programmatic Task tool invocation), transforming markdown links
138
+ * in the process.
139
+ *
140
+ * @param modules - List of installed module manifests
141
+ * @returns List of sync actions performed
142
+ */
143
+ async syncAgents(modules) {
144
+ const items = [];
145
+ const commandsDir = path.join(this.projectPath, ".claude/commands");
146
+ const agentsDir = path.join(this.projectPath, ".claude/agents");
147
+ // Ensure primary target directory exists
148
+ await fs.ensureDir(commandsDir);
149
+ // Best-effort creation of agents dir — if this fails, it will be
150
+ // retried per-file in the inner try-catch without blocking commands/
151
+ try {
152
+ await fs.ensureDir(agentsDir);
153
+ }
154
+ catch {
155
+ // Will be retried per-file
156
+ }
157
+ for (const module of modules) {
158
+ if (!module._sourcePath) {
159
+ continue;
160
+ }
161
+ const agentsSourceDir = path.join(module._sourcePath, "agents");
162
+ if (!(await fs.pathExists(agentsSourceDir))) {
163
+ continue;
164
+ }
165
+ // Find all agent files (ai-*.md pattern)
166
+ const agentFiles = await this.findAgentFiles(agentsSourceDir);
167
+ for (const agentFile of agentFiles) {
168
+ const agentName = path.basename(agentFile, ".md");
169
+ const fileName = path.basename(agentFile);
170
+ const commandsTarget = path.join(commandsDir, fileName);
171
+ const agentsTarget = path.join(agentsDir, fileName);
172
+ try {
173
+ const deployTo = await this.getAgentDeployTarget(agentFile);
174
+ // Deploy to .claude/commands/ (slash commands) if not agent-only
175
+ if (deployTo !== "agent") {
176
+ await this.copyAgentFile(agentFile, commandsTarget);
177
+ }
178
+ // Deploy to .claude/agents/ (Task tool / Agent tool invocation) if not command-only
179
+ if (deployTo !== "command") {
180
+ try {
181
+ await fs.ensureDir(agentsDir);
182
+ await this.copyAgentFile(agentFile, agentsTarget);
183
+ }
184
+ catch (agentsError) {
185
+ console.warn(`Warning: Failed to deploy ${agentName} to .claude/agents/: ${agentsError instanceof Error ? agentsError.message : String(agentsError)}`);
186
+ }
187
+ }
188
+ items.push({
189
+ name: agentName,
190
+ source: agentFile,
191
+ target: deployTo === "agent" ? agentsTarget : commandsTarget,
192
+ action: "updated",
193
+ });
194
+ }
195
+ catch (_error) {
196
+ items.push({
197
+ name: agentName,
198
+ source: agentFile,
199
+ target: commandsTarget,
200
+ action: "skipped",
201
+ });
202
+ }
203
+ }
204
+ }
205
+ return items;
206
+ }
207
+ /**
208
+ * Sync all CLI command wrappers from installed modules to .claude/commands/.
209
+ *
210
+ * Copies all cmd-*.md command files from each module's commands/ directory
211
+ * to .claude/commands/, transforming markdown links in the process.
212
+ *
213
+ * @param modules - List of installed module manifests
214
+ * @returns List of sync actions performed
215
+ */
216
+ async syncCommands(modules) {
217
+ const items = [];
218
+ const targetDir = path.join(this.projectPath, ".claude/commands");
219
+ // Ensure target directory exists
220
+ await fs.ensureDir(targetDir);
221
+ for (const module of modules) {
222
+ if (!module._sourcePath) {
223
+ continue;
224
+ }
225
+ const commandsSourceDir = path.join(module._sourcePath, "commands");
226
+ if (!(await fs.pathExists(commandsSourceDir))) {
227
+ continue;
228
+ }
229
+ // Find all command files (cmd-*.md pattern)
230
+ const commandFiles = await this.findCommandFiles(commandsSourceDir);
231
+ for (const commandFile of commandFiles) {
232
+ const commandName = path.basename(commandFile, ".md");
233
+ const targetPath = path.join(targetDir, path.basename(commandFile));
234
+ try {
235
+ // Reuse agent copy logic (transforms markdown links)
236
+ await this.copyAgentFile(commandFile, targetPath);
237
+ items.push({
238
+ name: commandName,
239
+ source: commandFile,
240
+ target: targetPath,
241
+ action: "updated",
242
+ });
243
+ }
244
+ catch (_error) {
245
+ items.push({
246
+ name: commandName,
247
+ source: commandFile,
248
+ target: targetPath,
249
+ action: "skipped",
250
+ });
251
+ }
252
+ }
253
+ }
254
+ return items;
255
+ }
256
+ /**
257
+ * Sync project skills from .claude/skills/project/ to .claude/skills/.
258
+ *
259
+ * Project skills are skills owned by the project (not from framework modules).
260
+ * They are synced alongside framework skills to .claude/skills/.
261
+ *
262
+ * @returns List of sync actions performed
263
+ */
264
+ async syncProjectSkills() {
265
+ const items = [];
266
+ const projectSkillsDir = path.join(this.projectPath, ".claude/skills/project");
267
+ const targetDir = path.join(this.projectPath, ".claude/skills");
268
+ if (!(await fs.pathExists(projectSkillsDir))) {
269
+ return items;
270
+ }
271
+ // Ensure target directory exists
272
+ await fs.ensureDir(targetDir);
273
+ // Find all skill directories in project skills
274
+ const skillDirs = await this.findSkillDirectories(projectSkillsDir);
275
+ for (const skillDir of skillDirs) {
276
+ const skillName = path.basename(skillDir);
277
+ const targetPath = path.join(targetDir, skillName);
278
+ try {
279
+ await this.copySkillDirectory(skillDir, targetPath);
280
+ items.push({
281
+ name: skillName,
282
+ source: skillDir,
283
+ target: targetPath,
284
+ action: "updated",
285
+ });
286
+ }
287
+ catch (_error) {
288
+ items.push({
289
+ name: skillName,
290
+ source: skillDir,
291
+ target: targetPath,
292
+ action: "skipped",
293
+ });
294
+ }
295
+ }
296
+ return items;
297
+ }
298
+ /**
299
+ * Sync module templates to .claude/templates/{module}/.
300
+ *
301
+ * Each module may have a templates/ directory at its root containing
302
+ * template files (e.g., world templates for writer module). These are
303
+ * deployed to .claude/templates/{module-id}/ for use by CLI commands.
304
+ *
305
+ * @param modules - List of installed module manifests
306
+ * @returns List of sync actions performed
307
+ */
308
+ async syncTemplates(modules) {
309
+ const items = [];
310
+ for (const module of modules) {
311
+ if (!module._sourcePath) {
312
+ continue;
313
+ }
314
+ const templatesSourceDir = path.join(module._sourcePath, "templates");
315
+ if (!(await fs.pathExists(templatesSourceDir))) {
316
+ continue;
317
+ }
318
+ const targetDir = path.join(this.projectPath, ".claude/templates", module.id);
319
+ try {
320
+ // Recursively copy all template files
321
+ await this.copyTemplateDirectory(templatesSourceDir, targetDir);
322
+ items.push({
323
+ name: `${module.id}-templates`,
324
+ source: templatesSourceDir,
325
+ target: targetDir,
326
+ action: "updated",
327
+ });
328
+ }
329
+ catch (_error) {
330
+ items.push({
331
+ name: `${module.id}-templates`,
332
+ source: templatesSourceDir,
333
+ target: targetDir,
334
+ action: "skipped",
335
+ });
336
+ }
337
+ }
338
+ return items;
339
+ }
340
+ /**
341
+ * Sync module schemas to .claude/registries/schemas/{module}/.
342
+ *
343
+ * Schemas are JSON schema files used by modules for validation.
344
+ * Each module's schemas are copied to a module-specific subdirectory
345
+ * in .claude/registries/schemas/.
346
+ *
347
+ * @param modules - List of installed module manifests
348
+ * @returns List of sync actions performed
349
+ */
350
+ async syncSchemas(modules) {
351
+ const items = [];
352
+ const schemasTargetDir = path.join(this.projectPath, ".claude/registries/schemas");
353
+ // Ensure target directory exists
354
+ await fs.ensureDir(schemasTargetDir);
355
+ for (const module of modules) {
356
+ if (!module._sourcePath) {
357
+ continue;
358
+ }
359
+ const schemasSourceDir = path.join(module._sourcePath, "schemas");
360
+ if (!(await fs.pathExists(schemasSourceDir))) {
361
+ continue;
362
+ }
363
+ // Create module-specific target directory
364
+ const moduleSchemaDir = path.join(schemasTargetDir, module.id);
365
+ await fs.ensureDir(moduleSchemaDir);
366
+ // Read all schema files in the source directory
367
+ const entries = await fs.readdir(schemasSourceDir, {
368
+ withFileTypes: true,
369
+ });
370
+ for (const entry of entries) {
371
+ // Skip directories and special files
372
+ if (entry.isDirectory() || SyncEngine.SKIP_FILES.has(entry.name)) {
373
+ continue;
374
+ }
375
+ const sourcePath = path.join(schemasSourceDir, entry.name);
376
+ const targetPath = path.join(moduleSchemaDir, entry.name);
377
+ try {
378
+ // Copy schema files directly (no transformation needed for JSON)
379
+ await fs.copy(sourcePath, targetPath, { overwrite: true });
380
+ items.push({
381
+ name: `${module.id}/${entry.name}`,
382
+ source: sourcePath,
383
+ target: targetPath,
384
+ action: "updated",
385
+ });
386
+ }
387
+ catch (_error) {
388
+ items.push({
389
+ name: `${module.id}/${entry.name}`,
390
+ source: sourcePath,
391
+ target: targetPath,
392
+ action: "skipped",
393
+ });
394
+ }
395
+ }
396
+ }
397
+ return items;
398
+ }
399
+ /**
400
+ * Sync hooks to .claude/hooks/.
401
+ *
402
+ * Core hooks are ALWAYS deployed from the framework (regardless of installed modules).
403
+ * Additional module-specific hooks can be provided by installed modules.
404
+ * These hooks integrate with Claude Code's hook system.
405
+ *
406
+ * @param modules - List of installed module manifests (for module-specific hooks)
407
+ * @returns List of sync actions performed
408
+ */
409
+ async syncHooks(modules) {
410
+ const items = [];
411
+ const targetDir = path.join(this.projectPath, ".claude/hooks");
412
+ // Ensure target directory exists
413
+ await fs.ensureDir(targetDir);
414
+ // Helper to sync hooks from a directory
415
+ const syncHooksFromDir = async (hooksSourceDir, hooksTargetDir = targetDir) => {
416
+ if (!(await fs.pathExists(hooksSourceDir))) {
417
+ return;
418
+ }
419
+ // Find all hook scripts (*.sh or *.js files)
420
+ const entries = await fs.readdir(hooksSourceDir, { withFileTypes: true });
421
+ for (const entry of entries) {
422
+ // Skip special files
423
+ if (SyncEngine.SKIP_FILES.has(entry.name)) {
424
+ continue;
425
+ }
426
+ // Recurse into subdirectories (e.g., _lib/)
427
+ if (entry.isDirectory()) {
428
+ const subSourceDir = path.join(hooksSourceDir, entry.name);
429
+ const subTargetDir = path.join(hooksTargetDir, entry.name);
430
+ await fs.ensureDir(subTargetDir);
431
+ await syncHooksFromDir(subSourceDir, subTargetDir);
432
+ continue;
433
+ }
434
+ // Only sync shell scripts and JavaScript files
435
+ if (!entry.name.endsWith(".sh") && !entry.name.endsWith(".js")) {
436
+ continue;
437
+ }
438
+ const sourcePath = path.join(hooksSourceDir, entry.name);
439
+ const targetPath = path.join(hooksTargetDir, entry.name);
440
+ try {
441
+ // Copy the hook file
442
+ await fs.copy(sourcePath, targetPath, { overwrite: true });
443
+ // Make shell scripts executable
444
+ if (entry.name.endsWith(".sh")) {
445
+ await fs.chmod(targetPath, 0o755);
446
+ }
447
+ items.push({
448
+ name: entry.name,
449
+ source: sourcePath,
450
+ target: targetPath,
451
+ action: "updated",
452
+ });
453
+ }
454
+ catch (_error) {
455
+ items.push({
456
+ name: entry.name,
457
+ source: sourcePath,
458
+ target: targetPath,
459
+ action: "skipped",
460
+ });
461
+ }
462
+ }
463
+ };
464
+ // 1. ALWAYS sync core hooks from framework (infrastructure)
465
+ const frameworkRoot = getFrameworkRoot();
466
+ const coreHooksDir = path.join(frameworkRoot, "modules", "core", "hooks");
467
+ await syncHooksFromDir(coreHooksDir);
468
+ // 2. Sync module-specific hooks (if any module provides additional hooks)
469
+ for (const module of modules) {
470
+ if (!module._sourcePath) {
471
+ continue;
472
+ }
473
+ // Skip core module (already synced above)
474
+ if (module.id === "core") {
475
+ continue;
476
+ }
477
+ const moduleHooksDir = path.join(module._sourcePath, "hooks");
478
+ await syncHooksFromDir(moduleHooksDir);
479
+ }
480
+ return items;
481
+ }
482
+ /**
483
+ * Sync statusline script to .claude/statusline.sh.
484
+ *
485
+ * The statusline provides real-time feedback in the Claude Code status bar.
486
+ * This is framework infrastructure that should always be updated during sync.
487
+ *
488
+ * @returns Sync item indicating action taken
489
+ */
490
+ async syncStatusline() {
491
+ const targetPath = path.join(this.projectPath, ".claude/statusline.sh");
492
+ try {
493
+ await fs.ensureDir(path.dirname(targetPath));
494
+ await fs.writeFile(targetPath, statuslineTemplate, "utf-8");
495
+ await fs.chmod(targetPath, 0o755);
496
+ return {
497
+ name: "statusline.sh",
498
+ source: "inline-template",
499
+ target: targetPath,
500
+ action: "updated",
501
+ };
502
+ }
503
+ catch (_error) {
504
+ return {
505
+ name: "statusline.sh",
506
+ source: "inline-template",
507
+ target: targetPath,
508
+ action: "skipped",
509
+ };
510
+ }
511
+ }
512
+ /**
513
+ * Sync configuration files.
514
+ *
515
+ * Updates .agentic-framework.json with lastSyncAt timestamp and creates
516
+ * .claude/settings.local.json if it doesn't exist (preserves user customizations).
517
+ *
518
+ * @returns Config sync result indicating actions taken
519
+ */
520
+ async syncConfig() {
521
+ const result = {
522
+ agenticFramework: "skipped",
523
+ settingsLocal: "skipped",
524
+ settingsJson: "skipped",
525
+ };
526
+ // Update .agentic-framework.json
527
+ const agenticFrameworkPath = path.join(this.projectPath, ".agentic-framework.json");
528
+ try {
529
+ if (await fs.pathExists(agenticFrameworkPath)) {
530
+ const config = await fs.readJson(agenticFrameworkPath);
531
+ config.framework = config.framework || {};
532
+ config.framework.lastSyncAt = new Date().toISOString();
533
+ await fs.writeJson(agenticFrameworkPath, config, { spaces: 2 });
534
+ result.agenticFramework = "updated";
535
+ }
536
+ }
537
+ catch (_error) {
538
+ // If we can't update, skip silently
539
+ }
540
+ // Create .claude/settings.local.json if missing
541
+ const settingsLocalPath = path.join(this.projectPath, ".claude/settings.local.json");
542
+ try {
543
+ if (!(await fs.pathExists(settingsLocalPath))) {
544
+ // Load template from core module
545
+ const templatePath = path.join(this.frameworkRoot, "framework/modules/core/templates/config/settings.local.json.template");
546
+ if (await fs.pathExists(templatePath)) {
547
+ const templateContent = await fs.readFile(templatePath, "utf-8");
548
+ await fs.ensureDir(path.dirname(settingsLocalPath));
549
+ await fs.writeFile(settingsLocalPath, templateContent, "utf-8");
550
+ result.settingsLocal = "created";
551
+ }
552
+ }
553
+ }
554
+ catch (_error) {
555
+ // If we can't create, skip silently
556
+ }
557
+ // Migration: remove hooks from settings.local.json if they exist
558
+ // (hooks now live in settings.json, framework-owned)
559
+ try {
560
+ if (await fs.pathExists(settingsLocalPath)) {
561
+ const settingsLocal = await fs.readJson(settingsLocalPath);
562
+ if (settingsLocal.hooks) {
563
+ delete settingsLocal.hooks;
564
+ await fs.writeJson(settingsLocalPath, settingsLocal, { spaces: 2 });
565
+ }
566
+ }
567
+ }
568
+ catch (_migrationError) {
569
+ // Skip migration silently
570
+ }
571
+ // Sync settings.json (framework-owned, always overwritten)
572
+ result.settingsJson = await this.syncSettingsJson();
573
+ return result;
574
+ }
575
+ /**
576
+ * Sync framework-owned settings.json with hook configurations.
577
+ * Always overwrites hooks but preserves non-hook keys from existing file.
578
+ */
579
+ async syncSettingsJson() {
580
+ const settingsJsonPath = path.join(this.projectPath, ".claude/settings.json");
581
+ const existed = await fs.pathExists(settingsJsonPath);
582
+ // Read disabled hooks from manifest
583
+ let disabledHooks = [];
584
+ try {
585
+ const manifestPath = path.join(this.projectPath, ".agentic-framework.json");
586
+ if (await fs.pathExists(manifestPath)) {
587
+ const manifest = await fs.readJson(manifestPath);
588
+ disabledHooks = manifest.hooks?.disabled || [];
589
+ }
590
+ }
591
+ catch (_e) {
592
+ // ignore
593
+ }
594
+ const settings = processSettingsJsonTemplate(this.projectPath, disabledHooks);
595
+ // Preserve non-hook keys from existing settings.json
596
+ if (existed) {
597
+ try {
598
+ const existing = await fs.readJson(settingsJsonPath);
599
+ for (const [key, value] of Object.entries(existing)) {
600
+ if (key !== "hooks") {
601
+ settings[key] = value;
602
+ }
603
+ }
604
+ }
605
+ catch (_e) {
606
+ // ignore parse errors
607
+ }
608
+ }
609
+ await fs.ensureDir(path.dirname(settingsJsonPath));
610
+ await fs.writeJson(settingsJsonPath, settings, { spaces: 2 });
611
+ return existed ? "updated" : "created";
612
+ }
613
+ /**
614
+ * Check if sync is needed without making changes.
615
+ *
616
+ * Compares source files with deployed files to determine if synchronization
617
+ * is required. Used by pre-commit hooks to validate that deployment files
618
+ * are up to date.
619
+ *
620
+ * @param modules - List of installed module manifests
621
+ * @returns Check result indicating if sync is needed
622
+ */
623
+ async checkSync(modules) {
624
+ const skillsNeedSync = [];
625
+ const agentsNeedSync = [];
626
+ const commandsNeedSync = [];
627
+ const projectSkillsNeedSync = [];
628
+ // Check framework skills
629
+ for (const module of modules) {
630
+ if (!module._sourcePath) {
631
+ continue;
632
+ }
633
+ const skillsSourceDir = path.join(module._sourcePath, "skills");
634
+ if (await fs.pathExists(skillsSourceDir)) {
635
+ const skillDirs = await this.findSkillDirectories(skillsSourceDir);
636
+ for (const skillDir of skillDirs) {
637
+ const skillName = path.basename(skillDir);
638
+ const targetPath = path.join(this.projectPath, ".claude/skills", skillName);
639
+ if (!(await this.isDirectoryInSync(skillDir, targetPath))) {
640
+ skillsNeedSync.push(skillName);
641
+ }
642
+ }
643
+ }
644
+ // Check agents (deployed based on deploy-to frontmatter field)
645
+ const agentsSourceDir = path.join(module._sourcePath, "agents");
646
+ if (await fs.pathExists(agentsSourceDir)) {
647
+ const agentFiles = await this.findAgentFiles(agentsSourceDir);
648
+ for (const agentFile of agentFiles) {
649
+ const agentName = path.basename(agentFile, ".md");
650
+ const deployTo = await this.getAgentDeployTarget(agentFile);
651
+ const commandsTarget = path.join(this.projectPath, ".claude/commands", path.basename(agentFile));
652
+ const agentsTarget = path.join(this.projectPath, ".claude/agents", path.basename(agentFile));
653
+ let needsSync = false;
654
+ if (deployTo !== "agent") {
655
+ needsSync =
656
+ needsSync ||
657
+ !(await this.isFileInSync(agentFile, commandsTarget));
658
+ }
659
+ if (deployTo !== "command") {
660
+ needsSync =
661
+ needsSync || !(await this.isFileInSync(agentFile, agentsTarget));
662
+ }
663
+ if (needsSync) {
664
+ agentsNeedSync.push(agentName);
665
+ }
666
+ }
667
+ }
668
+ // Check commands
669
+ const commandsSourceDir = path.join(module._sourcePath, "commands");
670
+ if (await fs.pathExists(commandsSourceDir)) {
671
+ const commandFiles = await this.findCommandFiles(commandsSourceDir);
672
+ for (const commandFile of commandFiles) {
673
+ const commandName = path.basename(commandFile, ".md");
674
+ const targetPath = path.join(this.projectPath, ".claude/commands", path.basename(commandFile));
675
+ if (!(await this.isFileInSync(commandFile, targetPath))) {
676
+ commandsNeedSync.push(commandName);
677
+ }
678
+ }
679
+ }
680
+ }
681
+ // Check project skills
682
+ const projectSkillsDir = path.join(this.projectPath, ".claude/skills/project");
683
+ if (await fs.pathExists(projectSkillsDir)) {
684
+ const skillDirs = await this.findSkillDirectories(projectSkillsDir);
685
+ for (const skillDir of skillDirs) {
686
+ const skillName = path.basename(skillDir);
687
+ const targetPath = path.join(this.projectPath, ".claude/skills", skillName);
688
+ if (!(await this.isDirectoryInSync(skillDir, targetPath))) {
689
+ projectSkillsNeedSync.push(skillName);
690
+ }
691
+ }
692
+ }
693
+ // Check for missing files (deleted but still registered)
694
+ const missingFiles = await this.checkMissingFiles(modules);
695
+ // Merge missing files into needs-sync lists
696
+ const allSkillsNeedSync = [
697
+ ...new Set([...skillsNeedSync, ...missingFiles.missingSkills]),
698
+ ];
699
+ const allAgentsNeedSync = [
700
+ ...new Set([...agentsNeedSync, ...missingFiles.missingAgents]),
701
+ ];
702
+ const allCommandsNeedSync = [
703
+ ...new Set([...commandsNeedSync, ...missingFiles.missingCommands]),
704
+ ];
705
+ return {
706
+ inSync: allSkillsNeedSync.length === 0 &&
707
+ allAgentsNeedSync.length === 0 &&
708
+ allCommandsNeedSync.length === 0 &&
709
+ projectSkillsNeedSync.length === 0,
710
+ skillsNeedSync: allSkillsNeedSync,
711
+ agentsNeedSync: allAgentsNeedSync,
712
+ commandsNeedSync: allCommandsNeedSync,
713
+ projectSkillsNeedSync,
714
+ };
715
+ }
716
+ /**
717
+ * Check if deployed files are missing (regardless of content).
718
+ *
719
+ * Detects when files have been deleted from .claude/ but modules
720
+ * are still registered in the manifest.
721
+ *
722
+ * @param modules - List of installed module manifests
723
+ * @returns Lists of missing skills, agents, and commands
724
+ */
725
+ async checkMissingFiles(modules) {
726
+ const missingSkills = [];
727
+ const missingAgents = [];
728
+ const missingCommands = [];
729
+ for (const module of modules) {
730
+ if (!module._sourcePath)
731
+ continue;
732
+ // Check skills
733
+ const skillsSourceDir = path.join(module._sourcePath, "skills");
734
+ if (await fs.pathExists(skillsSourceDir)) {
735
+ const skillDirs = await this.findSkillDirectories(skillsSourceDir);
736
+ for (const skillDir of skillDirs) {
737
+ const skillName = path.basename(skillDir);
738
+ const targetPath = path.join(this.projectPath, ".claude/skills", skillName);
739
+ if (!(await fs.pathExists(targetPath))) {
740
+ missingSkills.push(skillName);
741
+ }
742
+ }
743
+ }
744
+ // Check agents (ai-*.md files) — deployed based on deploy-to frontmatter
745
+ const agentsSourceDir = path.join(module._sourcePath, "agents");
746
+ if (await fs.pathExists(agentsSourceDir)) {
747
+ const agentFiles = await this.findAgentFiles(agentsSourceDir);
748
+ for (const agentFile of agentFiles) {
749
+ const fileName = path.basename(agentFile);
750
+ const deployTo = await this.getAgentDeployTarget(agentFile);
751
+ const commandsTarget = path.join(this.projectPath, ".claude/commands", fileName);
752
+ const agentsTarget = path.join(this.projectPath, ".claude/agents", fileName);
753
+ let missing = false;
754
+ if (deployTo !== "agent") {
755
+ missing = missing || !(await fs.pathExists(commandsTarget));
756
+ }
757
+ if (deployTo !== "command") {
758
+ missing = missing || !(await fs.pathExists(agentsTarget));
759
+ }
760
+ if (missing) {
761
+ missingAgents.push(path.basename(agentFile, ".md"));
762
+ }
763
+ }
764
+ }
765
+ // Check commands (cmd-*.md files)
766
+ const commandsSourceDir = path.join(module._sourcePath, "commands");
767
+ if (await fs.pathExists(commandsSourceDir)) {
768
+ const commandFiles = (await fs.readdir(commandsSourceDir)).filter((f) => f.startsWith("cmd-") && f.endsWith(".md"));
769
+ for (const commandFile of commandFiles) {
770
+ const targetPath = path.join(this.projectPath, ".claude/commands", commandFile);
771
+ if (!(await fs.pathExists(targetPath))) {
772
+ missingCommands.push(path.basename(commandFile, ".md"));
773
+ }
774
+ }
775
+ }
776
+ }
777
+ return {
778
+ missingSkills,
779
+ missingAgents,
780
+ missingCommands,
781
+ };
782
+ }
783
+ /**
784
+ * Run full sync (skills + agents + project skills).
785
+ *
786
+ * Performs a complete synchronization of all framework skills, agents, and
787
+ * project skills to their deployment directories.
788
+ *
789
+ * @param modules - List of installed module manifests
790
+ * @returns Complete sync report with all actions and errors
791
+ */
792
+ async syncAll(modules) {
793
+ const startTime = Date.now();
794
+ const errors = [];
795
+ // Sync framework skills
796
+ let skillItems = [];
797
+ try {
798
+ skillItems = await this.syncSkills(modules);
799
+ }
800
+ catch (error) {
801
+ errors.push({
802
+ item: "skills",
803
+ error: error instanceof Error ? error.message : String(error),
804
+ });
805
+ }
806
+ // Sync agents
807
+ let agentItems = [];
808
+ try {
809
+ agentItems = await this.syncAgents(modules);
810
+ }
811
+ catch (error) {
812
+ errors.push({
813
+ item: "agents",
814
+ error: error instanceof Error ? error.message : String(error),
815
+ });
816
+ }
817
+ // Sync commands (CLI command wrappers)
818
+ let commandItems = [];
819
+ try {
820
+ commandItems = await this.syncCommands(modules);
821
+ }
822
+ catch (error) {
823
+ errors.push({
824
+ item: "commands",
825
+ error: error instanceof Error ? error.message : String(error),
826
+ });
827
+ }
828
+ // Sync project skills
829
+ try {
830
+ const projectSkillItems = await this.syncProjectSkills();
831
+ skillItems = [...skillItems, ...projectSkillItems];
832
+ }
833
+ catch (error) {
834
+ errors.push({
835
+ item: "project-skills",
836
+ error: error instanceof Error ? error.message : String(error),
837
+ });
838
+ }
839
+ // Sync hooks
840
+ let hookItems = [];
841
+ try {
842
+ hookItems = await this.syncHooks(modules);
843
+ }
844
+ catch (error) {
845
+ errors.push({
846
+ item: "hooks",
847
+ error: error instanceof Error ? error.message : String(error),
848
+ });
849
+ }
850
+ // Sync statusline
851
+ let statuslineItem;
852
+ try {
853
+ statuslineItem = await this.syncStatusline();
854
+ }
855
+ catch (error) {
856
+ errors.push({
857
+ item: "statusline",
858
+ error: error instanceof Error ? error.message : String(error),
859
+ });
860
+ }
861
+ // Sync config files
862
+ let configResult;
863
+ try {
864
+ configResult = await this.syncConfig();
865
+ }
866
+ catch (error) {
867
+ errors.push({
868
+ item: "config",
869
+ error: error instanceof Error ? error.message : String(error),
870
+ });
871
+ }
872
+ // Validate synced output for hardcoded absolute paths
873
+ // This ensures source files use {project}/ placeholders correctly
874
+ const allSyncedItems = [...skillItems, ...agentItems, ...commandItems];
875
+ try {
876
+ await this.validateSyncOutput(allSyncedItems);
877
+ }
878
+ catch (validationError) {
879
+ errors.push({
880
+ item: "validation",
881
+ error: validationError instanceof Error
882
+ ? validationError.message
883
+ : String(validationError),
884
+ });
885
+ }
886
+ const result = {
887
+ skills: skillItems,
888
+ agents: agentItems,
889
+ commands: commandItems,
890
+ hooks: hookItems,
891
+ statusline: statuslineItem,
892
+ config: configResult,
893
+ errors,
894
+ stats: {
895
+ skillsSynced: skillItems.filter((i) => i.action !== "skipped").length,
896
+ agentsSynced: agentItems.filter((i) => i.action !== "skipped").length,
897
+ commandsSynced: commandItems.filter((i) => i.action !== "skipped")
898
+ .length,
899
+ hooksSynced: hookItems.filter((i) => i.action !== "skipped").length,
900
+ errors: errors.length,
901
+ },
902
+ };
903
+ // Record telemetry
904
+ const durationMs = Date.now() - startTime;
905
+ const totalFiles = skillItems.length +
906
+ agentItems.length +
907
+ commandItems.length +
908
+ hookItems.length;
909
+ const changesDetected = skillItems.filter((i) => i.action !== "skipped").length +
910
+ agentItems.filter((i) => i.action !== "skipped").length +
911
+ commandItems.filter((i) => i.action !== "skipped").length +
912
+ hookItems.filter((i) => i.action !== "skipped").length;
913
+ const filesWritten = changesDetected; // Files with changes are written
914
+ recordSyncAll(totalFiles, changesDetected, filesWritten, durationMs, errors.length).catch(() => {
915
+ // Ignore telemetry errors
916
+ });
917
+ return result;
918
+ }
919
+ /**
920
+ * Find all skill directories within a source directory.
921
+ *
922
+ * Skills may be nested in taxonomy structures (shared/, core/, etc.).
923
+ * This method recursively finds all directories that contain SKILL.md files.
924
+ *
925
+ * @param sourceDir - Root directory to search for skills
926
+ * @returns List of absolute paths to skill directories
927
+ */
928
+ async findSkillDirectories(sourceDir) {
929
+ const skillDirs = [];
930
+ const entries = await fs.readdir(sourceDir, { withFileTypes: true });
931
+ for (const entry of entries) {
932
+ if (!entry.isDirectory()) {
933
+ continue;
934
+ }
935
+ const fullPath = path.join(sourceDir, entry.name);
936
+ // Check if this directory is a skill (contains SKILL.md)
937
+ const skillMdPath = path.join(fullPath, "SKILL.md");
938
+ if (await fs.pathExists(skillMdPath)) {
939
+ skillDirs.push(fullPath);
940
+ }
941
+ else {
942
+ // Recurse into subdirectories (taxonomy structure)
943
+ const subSkills = await this.findSkillDirectories(fullPath);
944
+ skillDirs.push(...subSkills);
945
+ }
946
+ }
947
+ return skillDirs;
948
+ }
949
+ /**
950
+ * Find all agent files within a source directory.
951
+ *
952
+ * Agent files follow the ai-*.md naming pattern.
953
+ *
954
+ * @param sourceDir - Directory to search for agent files
955
+ * @returns List of absolute paths to agent files
956
+ */
957
+ async findAgentFiles(sourceDir) {
958
+ const agentFiles = [];
959
+ const entries = await fs.readdir(sourceDir);
960
+ for (const entry of entries) {
961
+ if (entry.startsWith("ai-") && entry.endsWith(".md")) {
962
+ const fullPath = path.join(sourceDir, entry);
963
+ const stats = await fs.stat(fullPath);
964
+ if (stats.isFile()) {
965
+ agentFiles.push(fullPath);
966
+ }
967
+ }
968
+ }
969
+ return agentFiles;
970
+ }
971
+ /**
972
+ * Read the deploy-to field from an agent markdown file's YAML frontmatter.
973
+ * Returns 'both' if field is absent (backward-compatible default).
974
+ */
975
+ async getAgentDeployTarget(filePath) {
976
+ try {
977
+ const content = await fs.readFile(filePath, "utf-8");
978
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
979
+ if (match) {
980
+ const frontmatter = yaml.parse(match[1]);
981
+ const deployTo = frontmatter["deploy-to"];
982
+ if (deployTo === "command" ||
983
+ deployTo === "agent" ||
984
+ deployTo === "both") {
985
+ return deployTo;
986
+ }
987
+ }
988
+ }
989
+ catch {
990
+ // If parsing fails, default to both
991
+ }
992
+ return "both";
993
+ }
994
+ /**
995
+ * Find all command files within a source directory.
996
+ *
997
+ * Command files follow the cmd-*.md naming pattern.
998
+ *
999
+ * @param sourceDir - Directory to search for command files
1000
+ * @returns List of absolute paths to command files
1001
+ */
1002
+ async findCommandFiles(sourceDir) {
1003
+ const commandFiles = [];
1004
+ const entries = await fs.readdir(sourceDir);
1005
+ for (const entry of entries) {
1006
+ if (entry.startsWith("cmd-") && entry.endsWith(".md")) {
1007
+ const fullPath = path.join(sourceDir, entry);
1008
+ const stats = await fs.stat(fullPath);
1009
+ if (stats.isFile()) {
1010
+ commandFiles.push(fullPath);
1011
+ }
1012
+ }
1013
+ }
1014
+ return commandFiles;
1015
+ }
1016
+ /**
1017
+ * Copy a skill directory to the target location.
1018
+ *
1019
+ * Recursively copies all files in the skill directory, skipping special files
1020
+ * (.DS_Store, etc.) and transforming markdown links in .md files.
1021
+ *
1022
+ * @param source - Source skill directory
1023
+ * @param target - Target deployment directory
1024
+ */
1025
+ async copySkillDirectory(source, target) {
1026
+ // Ensure target directory exists
1027
+ await fs.ensureDir(target);
1028
+ const entries = await fs.readdir(source, { withFileTypes: true });
1029
+ for (const entry of entries) {
1030
+ // Skip special files
1031
+ if (SyncEngine.SKIP_FILES.has(entry.name)) {
1032
+ continue;
1033
+ }
1034
+ const sourcePath = path.join(source, entry.name);
1035
+ const targetPath = path.join(target, entry.name);
1036
+ if (entry.isDirectory()) {
1037
+ // Recursively copy subdirectories
1038
+ await this.copySkillDirectory(sourcePath, targetPath);
1039
+ }
1040
+ else if (entry.isFile()) {
1041
+ if (entry.name.endsWith(".md")) {
1042
+ // Transform markdown files
1043
+ await this.transformMarkdownLinks(sourcePath, targetPath);
1044
+ }
1045
+ else {
1046
+ // Copy other files as-is
1047
+ await fs.copy(sourcePath, targetPath, { overwrite: true });
1048
+ }
1049
+ }
1050
+ }
1051
+ }
1052
+ /**
1053
+ * Copy a template directory to the target location.
1054
+ *
1055
+ * Recursively copies all files in the template directory, skipping special files
1056
+ * (.DS_Store, etc.). Template files are copied as-is without link transformation.
1057
+ *
1058
+ * @param source - Source template directory
1059
+ * @param target - Target deployment directory
1060
+ */
1061
+ async copyTemplateDirectory(source, target) {
1062
+ // Ensure target directory exists
1063
+ await fs.ensureDir(target);
1064
+ const entries = await fs.readdir(source, { withFileTypes: true });
1065
+ for (const entry of entries) {
1066
+ // Skip special files
1067
+ if (SyncEngine.SKIP_FILES.has(entry.name)) {
1068
+ continue;
1069
+ }
1070
+ const sourcePath = path.join(source, entry.name);
1071
+ const targetPath = path.join(target, entry.name);
1072
+ if (entry.isDirectory()) {
1073
+ // Recursively copy subdirectories
1074
+ await this.copyTemplateDirectory(sourcePath, targetPath);
1075
+ }
1076
+ else if (entry.isFile()) {
1077
+ // Copy files as-is (templates don't need link transformation)
1078
+ await fs.copy(sourcePath, targetPath, { overwrite: true });
1079
+ }
1080
+ }
1081
+ }
1082
+ /**
1083
+ * Copy an agent file to the target location.
1084
+ *
1085
+ * Copies the agent file and transforms markdown links.
1086
+ *
1087
+ * @param source - Source agent file path
1088
+ * @param target - Target deployment file path
1089
+ */
1090
+ async copyAgentFile(source, target) {
1091
+ // Agents are always markdown files, so transform links
1092
+ await this.transformMarkdownLinks(source, target);
1093
+ }
1094
+ /**
1095
+ * Transform markdown links in a file and write to target.
1096
+ *
1097
+ * Uses LinkTransformer to transform relative links to absolute paths,
1098
+ * ensuring links remain valid in the deployment location.
1099
+ *
1100
+ * @param sourcePath - Source file path
1101
+ * @param targetPath - Target file path
1102
+ */
1103
+ async transformMarkdownLinks(sourcePath, targetPath) {
1104
+ const transformedContent = await this.linkTransformer.transformFile(sourcePath, targetPath);
1105
+ await fs.writeFile(targetPath, transformedContent, "utf-8");
1106
+ }
1107
+ /**
1108
+ * Check if a file is in sync between source and target.
1109
+ *
1110
+ * Compares the transformed content of the source file with the target file.
1111
+ * For markdown files, applies link transformation before comparison.
1112
+ *
1113
+ * @param sourcePath - Source file path
1114
+ * @param targetPath - Target file path
1115
+ * @returns True if files are in sync, false otherwise
1116
+ */
1117
+ async isFileInSync(sourcePath, targetPath) {
1118
+ // Check if target exists
1119
+ if (!(await fs.pathExists(targetPath))) {
1120
+ return false;
1121
+ }
1122
+ try {
1123
+ // Read target content
1124
+ const targetContent = await fs.readFile(targetPath, "utf-8");
1125
+ // For markdown files, transform source and compare
1126
+ if (sourcePath.endsWith(".md")) {
1127
+ const transformedContent = await this.linkTransformer.transformFile(sourcePath, targetPath);
1128
+ return transformedContent === targetContent;
1129
+ }
1130
+ // For non-markdown files, direct comparison
1131
+ const sourceContent = await fs.readFile(sourcePath, "utf-8");
1132
+ return sourceContent === targetContent;
1133
+ }
1134
+ catch (_error) {
1135
+ // If we can't read/compare, assume out of sync
1136
+ return false;
1137
+ }
1138
+ }
1139
+ /**
1140
+ * Check if a directory is in sync between source and target.
1141
+ *
1142
+ * Recursively compares all files in the directory, accounting for
1143
+ * transformed markdown links.
1144
+ *
1145
+ * @param sourceDir - Source directory path
1146
+ * @param targetDir - Target directory path
1147
+ * @returns True if directories are in sync, false otherwise
1148
+ */
1149
+ async isDirectoryInSync(sourceDir, targetDir) {
1150
+ // Check if target directory exists
1151
+ if (!(await fs.pathExists(targetDir))) {
1152
+ return false;
1153
+ }
1154
+ try {
1155
+ const sourceEntries = await fs.readdir(sourceDir, {
1156
+ withFileTypes: true,
1157
+ });
1158
+ for (const entry of sourceEntries) {
1159
+ // Skip special files
1160
+ if (SyncEngine.SKIP_FILES.has(entry.name)) {
1161
+ continue;
1162
+ }
1163
+ const sourcePath = path.join(sourceDir, entry.name);
1164
+ const targetPath = path.join(targetDir, entry.name);
1165
+ if (entry.isDirectory()) {
1166
+ // Recursively check subdirectories
1167
+ if (!(await this.isDirectoryInSync(sourcePath, targetPath))) {
1168
+ return false;
1169
+ }
1170
+ }
1171
+ else if (entry.isFile()) {
1172
+ // Check individual file
1173
+ if (!(await this.isFileInSync(sourcePath, targetPath))) {
1174
+ return false;
1175
+ }
1176
+ }
1177
+ }
1178
+ return true;
1179
+ }
1180
+ catch (_error) {
1181
+ // If we can't read/compare, assume out of sync
1182
+ return false;
1183
+ }
1184
+ }
1185
+ /**
1186
+ * Validate synced output files for hardcoded absolute paths.
1187
+ *
1188
+ * This method ensures that no hardcoded user-specific absolute paths
1189
+ * (like /Users/username/...) remain in synced files. These paths indicate
1190
+ * that source files were not properly updated to use {project} placeholders.
1191
+ *
1192
+ * @param syncedItems - List of items that were synced
1193
+ * @throws Error if any violations are detected
1194
+ */
1195
+ async validateSyncOutput(syncedItems) {
1196
+ const violations = [];
1197
+ // Pattern to detect hardcoded absolute paths (Unix and Windows)
1198
+ // Matches: /Users/, /home/, /var/, C:\, D:\, etc.
1199
+ // But NOT {project}/ placeholders (those are valid)
1200
+ const absolutePathPattern = /(?<!{project})\/(?:Users|home|var)\/[^\s)>\]]+|[A-Z]:\\/g;
1201
+ for (const item of syncedItems) {
1202
+ // Skip items that weren't actually synced
1203
+ if (item.action === "skipped") {
1204
+ continue;
1205
+ }
1206
+ // Only check markdown files
1207
+ if (!item.target.endsWith(".md")) {
1208
+ continue;
1209
+ }
1210
+ try {
1211
+ const content = await fs.readFile(item.target, "utf-8");
1212
+ const lines = content.split("\n");
1213
+ lines.forEach((line, idx) => {
1214
+ // Skip lines that are inside code blocks (backticks)
1215
+ // Simple heuristic: skip lines that are examples or documentation
1216
+ const isCodeExample = line.includes("```") ||
1217
+ line.trim().startsWith("`") ||
1218
+ /^\s*#/.test(line) || // Shell comments in examples
1219
+ /read_file\(|write_file\(|edit_file\(/.test(line); // MCP tool examples
1220
+ if (isCodeExample) {
1221
+ return;
1222
+ }
1223
+ const matches = line.match(absolutePathPattern);
1224
+ if (matches) {
1225
+ for (const match of matches) {
1226
+ violations.push({
1227
+ file: item.target,
1228
+ line: idx + 1,
1229
+ match,
1230
+ context: line.trim().substring(0, 100),
1231
+ });
1232
+ }
1233
+ }
1234
+ });
1235
+ }
1236
+ catch (_error) {
1237
+ // If we can't read the file, skip validation for it
1238
+ continue;
1239
+ }
1240
+ }
1241
+ if (violations.length > 0) {
1242
+ const violationReport = violations
1243
+ .slice(0, 10) // Limit to first 10 for readability
1244
+ .map((v) => ` ${v.file}:${v.line} - "${v.match}"\n Context: ${v.context}`)
1245
+ .join("\n");
1246
+ const moreMsg = violations.length > 10
1247
+ ? `\n ... and ${violations.length - 10} more violations`
1248
+ : "";
1249
+ throw new Error(`Sync validation failed - hardcoded absolute paths detected in output:\n` +
1250
+ `${violationReport}${moreMsg}\n\n` +
1251
+ `Fix: Update source files to use {project}/ placeholders instead of absolute paths.`);
1252
+ }
1253
+ }
1254
+ }
1255
+ //# sourceMappingURL=sync-engine.js.map