specweave 0.29.2 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/README.md +65 -16
  2. package/bin/specweave.js +16 -0
  3. package/dist/plugins/specweave-ado/lib/ado-spec-commit-sync.d.ts +1 -1
  4. package/dist/plugins/specweave-ado/lib/ado-spec-commit-sync.d.ts.map +1 -1
  5. package/dist/plugins/specweave-ado/lib/ado-spec-commit-sync.js +1 -1
  6. package/dist/plugins/specweave-ado/lib/ado-spec-commit-sync.js.map +1 -1
  7. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.d.ts +1 -1
  8. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.d.ts.map +1 -1
  9. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js +1 -1
  10. package/dist/plugins/specweave-ado/lib/ado-spec-content-sync.js.map +1 -1
  11. package/dist/plugins/specweave-ado/lib/conflict-resolver.d.ts +134 -0
  12. package/dist/plugins/specweave-ado/lib/conflict-resolver.d.ts.map +1 -0
  13. package/dist/plugins/specweave-ado/lib/conflict-resolver.js +423 -0
  14. package/dist/plugins/specweave-ado/lib/conflict-resolver.js.map +1 -0
  15. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts +23 -1
  16. package/dist/plugins/specweave-github/lib/github-client-v2.d.ts.map +1 -1
  17. package/dist/plugins/specweave-github/lib/github-client-v2.js +95 -0
  18. package/dist/plugins/specweave-github/lib/github-client-v2.js.map +1 -1
  19. package/dist/plugins/specweave-github/lib/github-spec-commit-sync.d.ts +1 -1
  20. package/dist/plugins/specweave-github/lib/github-spec-commit-sync.d.ts.map +1 -1
  21. package/dist/plugins/specweave-github/lib/github-spec-commit-sync.js +1 -1
  22. package/dist/plugins/specweave-github/lib/github-spec-commit-sync.js.map +1 -1
  23. package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts +1 -1
  24. package/dist/plugins/specweave-github/lib/github-spec-content-sync.d.ts.map +1 -1
  25. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js +1 -1
  26. package/dist/plugins/specweave-github/lib/github-spec-content-sync.js.map +1 -1
  27. package/dist/plugins/specweave-github/lib/types.d.ts +20 -0
  28. package/dist/plugins/specweave-github/lib/types.d.ts.map +1 -1
  29. package/dist/plugins/specweave-jira/lib/jira-spec-commit-sync.d.ts +1 -1
  30. package/dist/plugins/specweave-jira/lib/jira-spec-commit-sync.d.ts.map +1 -1
  31. package/dist/plugins/specweave-jira/lib/jira-spec-commit-sync.js +1 -1
  32. package/dist/plugins/specweave-jira/lib/jira-spec-commit-sync.js.map +1 -1
  33. package/dist/plugins/specweave-jira/lib/jira-spec-content-sync.d.ts +1 -1
  34. package/dist/plugins/specweave-jira/lib/jira-spec-content-sync.d.ts.map +1 -1
  35. package/dist/plugins/specweave-jira/lib/jira-spec-content-sync.js +1 -1
  36. package/dist/plugins/specweave-jira/lib/jira-spec-content-sync.js.map +1 -1
  37. package/dist/plugins/specweave-jira/lib/setup-wizard.d.ts +2 -2
  38. package/dist/plugins/specweave-jira/lib/setup-wizard.d.ts.map +1 -1
  39. package/dist/plugins/specweave-jira/lib/setup-wizard.js +1 -1
  40. package/dist/plugins/specweave-jira/lib/setup-wizard.js.map +1 -1
  41. package/dist/src/adapters/claude/adapter.js +1 -1
  42. package/dist/src/adapters/claude/adapter.js.map +1 -1
  43. package/dist/src/cli/commands/detect-project.js +1 -1
  44. package/dist/src/cli/commands/detect-project.js.map +1 -1
  45. package/dist/src/cli/commands/detect-specs.js +1 -1
  46. package/dist/src/cli/commands/detect-specs.js.map +1 -1
  47. package/dist/src/cli/commands/import-docs.js +1 -1
  48. package/dist/src/cli/commands/import-docs.js.map +1 -1
  49. package/dist/src/cli/commands/init-multiproject.js +1 -1
  50. package/dist/src/cli/commands/init-multiproject.js.map +1 -1
  51. package/dist/src/cli/commands/init.d.ts.map +1 -1
  52. package/dist/src/cli/commands/init.js +31 -1
  53. package/dist/src/cli/commands/init.js.map +1 -1
  54. package/dist/src/cli/commands/jobs.js +15 -1
  55. package/dist/src/cli/commands/jobs.js.map +1 -1
  56. package/dist/src/cli/commands/migrate-to-multiproject.js +1 -1
  57. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  58. package/dist/src/cli/commands/switch-project.js +1 -1
  59. package/dist/src/cli/commands/switch-project.js.map +1 -1
  60. package/dist/src/cli/commands/sync-scheduled.d.ts +38 -0
  61. package/dist/src/cli/commands/sync-scheduled.d.ts.map +1 -0
  62. package/dist/src/cli/commands/sync-scheduled.js +170 -0
  63. package/dist/src/cli/commands/sync-scheduled.js.map +1 -0
  64. package/dist/src/cli/helpers/init/external-import-grouping.d.ts +53 -0
  65. package/dist/src/cli/helpers/init/external-import-grouping.d.ts.map +1 -0
  66. package/dist/src/cli/helpers/init/external-import-grouping.js +287 -0
  67. package/dist/src/cli/helpers/init/external-import-grouping.js.map +1 -0
  68. package/dist/src/cli/helpers/init/external-import.d.ts +1 -34
  69. package/dist/src/cli/helpers/init/external-import.d.ts.map +1 -1
  70. package/dist/src/cli/helpers/init/external-import.js +15 -486
  71. package/dist/src/cli/helpers/init/external-import.js.map +1 -1
  72. package/dist/src/cli/helpers/init/living-docs-preflight.d.ts +58 -0
  73. package/dist/src/cli/helpers/init/living-docs-preflight.d.ts.map +1 -0
  74. package/dist/src/cli/helpers/init/living-docs-preflight.js +290 -0
  75. package/dist/src/cli/helpers/init/living-docs-preflight.js.map +1 -0
  76. package/dist/src/cli/helpers/init/sync-profile-helpers.d.ts +48 -0
  77. package/dist/src/cli/helpers/init/sync-profile-helpers.d.ts.map +1 -0
  78. package/dist/src/cli/helpers/init/sync-profile-helpers.js +238 -0
  79. package/dist/src/cli/helpers/init/sync-profile-helpers.js.map +1 -0
  80. package/dist/src/cli/helpers/init/types.d.ts +1 -0
  81. package/dist/src/cli/helpers/init/types.d.ts.map +1 -1
  82. package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -1
  83. package/dist/src/cli/helpers/issue-tracker/ado.js +113 -3
  84. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
  85. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  86. package/dist/src/cli/helpers/issue-tracker/index.js +2 -287
  87. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  88. package/dist/src/cli/helpers/issue-tracker/sync-config-writer.d.ts +25 -0
  89. package/dist/src/cli/helpers/issue-tracker/sync-config-writer.d.ts.map +1 -0
  90. package/dist/src/cli/helpers/issue-tracker/sync-config-writer.js +306 -0
  91. package/dist/src/cli/helpers/issue-tracker/sync-config-writer.js.map +1 -0
  92. package/dist/src/cli/helpers/issue-tracker/types.d.ts +27 -0
  93. package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -1
  94. package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -1
  95. package/dist/src/cli/workers/living-docs-worker.d.ts +16 -0
  96. package/dist/src/cli/workers/living-docs-worker.d.ts.map +1 -0
  97. package/dist/src/cli/workers/living-docs-worker.js +395 -0
  98. package/dist/src/cli/workers/living-docs-worker.js.map +1 -0
  99. package/dist/src/core/background/job-dependency.d.ts +45 -0
  100. package/dist/src/core/background/job-dependency.d.ts.map +1 -0
  101. package/dist/src/core/background/job-dependency.js +144 -0
  102. package/dist/src/core/background/job-dependency.js.map +1 -0
  103. package/dist/src/core/background/job-launcher.d.ts +21 -1
  104. package/dist/src/core/background/job-launcher.d.ts.map +1 -1
  105. package/dist/src/core/background/job-launcher.js +93 -0
  106. package/dist/src/core/background/job-launcher.js.map +1 -1
  107. package/dist/src/core/background/types.d.ts +73 -2
  108. package/dist/src/core/background/types.d.ts.map +1 -1
  109. package/dist/src/core/brownfield/importer.js +1 -1
  110. package/dist/src/core/brownfield/importer.js.map +1 -1
  111. package/dist/src/core/comment-builder.d.ts +1 -1
  112. package/dist/src/core/comment-builder.d.ts.map +1 -1
  113. package/dist/src/core/{cost-tracker.d.ts → cost/cost-tracker.d.ts} +2 -2
  114. package/dist/src/core/cost/cost-tracker.d.ts.map +1 -0
  115. package/dist/src/core/{cost-tracker.js → cost/cost-tracker.js} +2 -2
  116. package/dist/src/core/cost/cost-tracker.js.map +1 -0
  117. package/dist/src/core/credentials/credentials-manager.d.ts.map +1 -0
  118. package/dist/src/core/credentials/credentials-manager.js.map +1 -0
  119. package/dist/src/core/increment/discipline-checker.js +1 -1
  120. package/dist/src/core/increment/discipline-checker.js.map +1 -1
  121. package/dist/src/core/increment/increment-archiver.d.ts +9 -8
  122. package/dist/src/core/increment/increment-archiver.d.ts.map +1 -1
  123. package/dist/src/core/increment/increment-archiver.js +40 -42
  124. package/dist/src/core/increment/increment-archiver.js.map +1 -1
  125. package/dist/src/core/increment/increment-status.d.ts.map +1 -0
  126. package/dist/src/core/{increment-status.js → increment/increment-status.js} +1 -1
  127. package/dist/src/core/increment/increment-status.js.map +1 -0
  128. package/dist/src/core/increment/increment-utils.d.ts.map +1 -0
  129. package/dist/src/core/increment/increment-utils.js.map +1 -0
  130. package/dist/src/core/increment/metadata-validator.js +1 -1
  131. package/dist/src/core/increment/metadata-validator.js.map +1 -1
  132. package/dist/src/core/living-docs/checkpoint-manager.d.ts +120 -0
  133. package/dist/src/core/living-docs/checkpoint-manager.d.ts.map +1 -0
  134. package/dist/src/core/living-docs/checkpoint-manager.js +231 -0
  135. package/dist/src/core/living-docs/checkpoint-manager.js.map +1 -0
  136. package/dist/src/core/living-docs/discovery.d.ts +91 -0
  137. package/dist/src/core/living-docs/discovery.d.ts.map +1 -0
  138. package/dist/src/core/living-docs/discovery.js +656 -0
  139. package/dist/src/core/living-docs/discovery.js.map +1 -0
  140. package/dist/src/core/living-docs/feature-archiver.d.ts +23 -4
  141. package/dist/src/core/living-docs/feature-archiver.d.ts.map +1 -1
  142. package/dist/src/core/living-docs/feature-archiver.js +133 -30
  143. package/dist/src/core/living-docs/feature-archiver.js.map +1 -1
  144. package/dist/src/core/living-docs/foundation-builder.d.ts +37 -0
  145. package/dist/src/core/living-docs/foundation-builder.d.ts.map +1 -0
  146. package/dist/src/core/living-docs/foundation-builder.js +357 -0
  147. package/dist/src/core/living-docs/foundation-builder.js.map +1 -0
  148. package/dist/src/core/living-docs/living-docs-sync.d.ts +58 -0
  149. package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
  150. package/dist/src/core/living-docs/living-docs-sync.js +204 -7
  151. package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
  152. package/dist/src/core/living-docs/module-analyzer.d.ts +97 -0
  153. package/dist/src/core/living-docs/module-analyzer.d.ts.map +1 -0
  154. package/dist/src/core/living-docs/module-analyzer.js +427 -0
  155. package/dist/src/core/living-docs/module-analyzer.js.map +1 -0
  156. package/dist/src/core/living-docs/suggestions-generator.d.ts +112 -0
  157. package/dist/src/core/living-docs/suggestions-generator.d.ts.map +1 -0
  158. package/dist/src/core/living-docs/suggestions-generator.js +362 -0
  159. package/dist/src/core/living-docs/suggestions-generator.js.map +1 -0
  160. package/dist/src/core/living-docs/workitem-matcher.d.ts +116 -0
  161. package/dist/src/core/living-docs/workitem-matcher.d.ts.map +1 -0
  162. package/dist/src/core/living-docs/workitem-matcher.js +356 -0
  163. package/dist/src/core/living-docs/workitem-matcher.js.map +1 -0
  164. package/dist/src/core/{plugin-loader.d.ts → plugins/plugin-loader.d.ts} +1 -1
  165. package/dist/src/core/plugins/plugin-loader.d.ts.map +1 -0
  166. package/dist/src/core/{plugin-loader.js → plugins/plugin-loader.js} +2 -2
  167. package/dist/src/core/plugins/plugin-loader.js.map +1 -0
  168. package/dist/src/core/{project-manager.d.ts → project/project-manager.d.ts} +1 -1
  169. package/dist/src/core/project/project-manager.d.ts.map +1 -0
  170. package/dist/src/core/{project-manager.js → project/project-manager.js} +3 -3
  171. package/dist/src/core/project/project-manager.js.map +1 -0
  172. package/dist/src/core/project/project-structure-detector.d.ts.map +1 -0
  173. package/dist/src/core/project/project-structure-detector.js.map +1 -0
  174. package/dist/src/core/{rfc-generator-v2.d.ts → rfc/rfc-generator-v2.d.ts} +1 -1
  175. package/dist/src/core/rfc/rfc-generator-v2.d.ts.map +1 -0
  176. package/dist/src/core/{rfc-generator-v2.js → rfc/rfc-generator-v2.js} +1 -1
  177. package/dist/src/core/rfc/rfc-generator-v2.js.map +1 -0
  178. package/dist/src/core/scheduler/index.d.ts +1 -0
  179. package/dist/src/core/scheduler/index.d.ts.map +1 -1
  180. package/dist/src/core/scheduler/index.js +1 -0
  181. package/dist/src/core/scheduler/index.js.map +1 -1
  182. package/dist/src/core/scheduler/scheduled-job.d.ts +1 -1
  183. package/dist/src/core/scheduler/scheduled-job.d.ts.map +1 -1
  184. package/dist/src/core/scheduler/scheduled-job.js.map +1 -1
  185. package/dist/src/core/scheduler/session-sync-executor.d.ts +138 -0
  186. package/dist/src/core/scheduler/session-sync-executor.d.ts.map +1 -0
  187. package/dist/src/core/scheduler/session-sync-executor.js +333 -0
  188. package/dist/src/core/scheduler/session-sync-executor.js.map +1 -0
  189. package/dist/src/core/{spec-content-sync.d.ts → specs/spec-content-sync.d.ts} +2 -2
  190. package/dist/src/core/specs/spec-content-sync.d.ts.map +1 -0
  191. package/dist/src/core/{spec-content-sync.js → specs/spec-content-sync.js} +1 -1
  192. package/dist/src/core/specs/spec-content-sync.js.map +1 -0
  193. package/dist/src/core/{spec-detector.d.ts → specs/spec-detector.d.ts} +1 -1
  194. package/dist/src/core/specs/spec-detector.d.ts.map +1 -0
  195. package/dist/src/core/{spec-detector.js → specs/spec-detector.js} +1 -1
  196. package/dist/src/core/specs/spec-detector.js.map +1 -0
  197. package/dist/src/core/{spec-identifier-detector.d.ts → specs/spec-identifier-detector.d.ts} +2 -2
  198. package/dist/src/core/specs/spec-identifier-detector.d.ts.map +1 -0
  199. package/dist/src/core/{spec-identifier-detector.js → specs/spec-identifier-detector.js} +1 -1
  200. package/dist/src/core/specs/spec-identifier-detector.js.map +1 -0
  201. package/dist/src/core/specs/spec-metadata-manager.js +1 -1
  202. package/dist/src/core/specs/spec-metadata-manager.js.map +1 -1
  203. package/dist/src/core/specs/spec-task-mapper.d.ts.map +1 -0
  204. package/dist/src/core/specs/spec-task-mapper.js.map +1 -0
  205. package/dist/src/core/sync/sync-audit-logger.d.ts +62 -0
  206. package/dist/src/core/sync/sync-audit-logger.d.ts.map +1 -1
  207. package/dist/src/core/sync/sync-audit-logger.js +59 -0
  208. package/dist/src/core/sync/sync-audit-logger.js.map +1 -1
  209. package/dist/src/importers/item-converter.d.ts +51 -27
  210. package/dist/src/importers/item-converter.d.ts.map +1 -1
  211. package/dist/src/importers/item-converter.js +219 -179
  212. package/dist/src/importers/item-converter.js.map +1 -1
  213. package/dist/src/importers/markdown-generator.d.ts +75 -0
  214. package/dist/src/importers/markdown-generator.d.ts.map +1 -0
  215. package/dist/src/importers/markdown-generator.js +250 -0
  216. package/dist/src/importers/markdown-generator.js.map +1 -0
  217. package/dist/src/integrations/ado/ado-client.d.ts +93 -0
  218. package/dist/src/integrations/ado/ado-client.d.ts.map +1 -1
  219. package/dist/src/integrations/ado/ado-client.js +172 -1
  220. package/dist/src/integrations/ado/ado-client.js.map +1 -1
  221. package/dist/src/integrations/jira/jira-client.d.ts +44 -0
  222. package/dist/src/integrations/jira/jira-client.d.ts.map +1 -1
  223. package/dist/src/integrations/jira/jira-client.js +119 -1
  224. package/dist/src/integrations/jira/jira-client.js.map +1 -1
  225. package/dist/src/integrations/jira/jira-incremental-mapper.js +2 -2
  226. package/dist/src/integrations/jira/jira-incremental-mapper.js.map +1 -1
  227. package/dist/src/integrations/jira/jira-mapper.js +1 -1
  228. package/dist/src/integrations/jira/jira-mapper.js.map +1 -1
  229. package/dist/src/living-docs/epic-id-allocator.d.ts +177 -0
  230. package/dist/src/living-docs/epic-id-allocator.d.ts.map +1 -0
  231. package/dist/src/living-docs/epic-id-allocator.js +363 -0
  232. package/dist/src/living-docs/epic-id-allocator.js.map +1 -0
  233. package/dist/src/sync/external-change-puller.d.ts +94 -0
  234. package/dist/src/sync/external-change-puller.d.ts.map +1 -0
  235. package/dist/src/sync/external-change-puller.js +181 -0
  236. package/dist/src/sync/external-change-puller.js.map +1 -0
  237. package/dist/src/sync/index.d.ts +4 -0
  238. package/dist/src/sync/index.d.ts.map +1 -1
  239. package/dist/src/sync/index.js +2 -0
  240. package/dist/src/sync/index.js.map +1 -1
  241. package/dist/src/sync/living-docs-updater.d.ts +93 -0
  242. package/dist/src/sync/living-docs-updater.d.ts.map +1 -0
  243. package/dist/src/sync/living-docs-updater.js +218 -0
  244. package/dist/src/sync/living-docs-updater.js.map +1 -0
  245. package/dist/src/testing/test-generator.js +1 -1
  246. package/dist/src/testing/test-generator.js.map +1 -1
  247. package/dist/src/utils/cost-reporter.d.ts +1 -1
  248. package/dist/src/utils/cost-reporter.d.ts.map +1 -1
  249. package/dist/src/utils/model-selection.js +4 -4
  250. package/dist/src/utils/model-selection.js.map +1 -1
  251. package/dist/src/utils/pricing-constants.d.ts +2 -2
  252. package/dist/src/utils/pricing-constants.js +2 -2
  253. package/package.json +1 -1
  254. package/plugins/specweave/.claude-plugin/plugin.json +1 -28
  255. package/plugins/specweave/agents/code-standards-detective/AGENT.md +3 -3
  256. package/plugins/specweave/agents/infrastructure/AGENT.md +4 -0
  257. package/plugins/specweave/agents/performance/AGENT.md +2 -2
  258. package/plugins/specweave/agents/reflective-reviewer/AGENT.md +3 -3
  259. package/plugins/specweave/agents/translator/AGENT.md +2 -2
  260. package/plugins/specweave/commands/specweave-costs.md +2 -2
  261. package/plugins/specweave/commands/specweave-do.md +2 -2
  262. package/plugins/specweave/hooks/lib/scheduler-startup.sh +59 -8
  263. package/plugins/specweave/skills/code-reviewer/SKILL.md +1 -1
  264. package/plugins/specweave/skills/role-orchestrator/README.md +1 -1
  265. package/plugins/specweave-ado/agents/ado-manager/AGENT.md +8 -2
  266. package/plugins/specweave-ado/agents/ado-multi-project-mapper/AGENT.md +2 -2
  267. package/plugins/specweave-ado/agents/ado-sync-judge/AGENT.md +2 -2
  268. package/plugins/specweave-ado/lib/ado-spec-commit-sync.d.ts +1 -1
  269. package/plugins/specweave-ado/lib/ado-spec-commit-sync.js +1 -1
  270. package/plugins/specweave-ado/lib/ado-spec-commit-sync.ts +1 -1
  271. package/plugins/specweave-ado/lib/ado-spec-content-sync.js +1 -1
  272. package/plugins/specweave-ado/lib/ado-spec-content-sync.ts +1 -1
  273. package/plugins/specweave-ado/lib/conflict-resolver.js +87 -0
  274. package/plugins/specweave-ado/lib/conflict-resolver.ts +124 -0
  275. package/plugins/specweave-ado/skills/specweave-ado-mapper/SKILL.md +1 -1
  276. package/plugins/specweave-backend/agents/database-optimizer/AGENT.md +3 -3
  277. package/plugins/specweave-backend/skills/dotnet-backend/SKILL.md +1 -1
  278. package/plugins/specweave-backend/skills/nodejs-backend/SKILL.md +1 -1
  279. package/plugins/specweave-backend/skills/python-backend/SKILL.md +1 -1
  280. package/plugins/specweave-confluent/agents/confluent-architect/AGENT.md +6 -1
  281. package/plugins/specweave-diagrams/agents/diagrams-architect/AGENT.md +2 -2
  282. package/plugins/specweave-diagrams/skills/diagrams-architect/SKILL.md +1 -1
  283. package/plugins/specweave-frontend/agents/frontend-architect/AGENT.md +4 -0
  284. package/plugins/specweave-github/agents/github-manager/AGENT.md +1 -1
  285. package/plugins/specweave-github/agents/github-task-splitter/AGENT.md +11 -1
  286. package/plugins/specweave-github/agents/user-story-updater/AGENT.md +6 -1
  287. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +90 -0
  288. package/plugins/specweave-github/lib/github-client-v2.js +97 -0
  289. package/plugins/specweave-github/lib/github-client-v2.ts +115 -1
  290. package/plugins/specweave-github/lib/github-spec-commit-sync.d.ts +1 -1
  291. package/plugins/specweave-github/lib/github-spec-commit-sync.js +1 -1
  292. package/plugins/specweave-github/lib/github-spec-commit-sync.ts +1 -1
  293. package/plugins/specweave-github/lib/github-spec-content-sync.js +1 -1
  294. package/plugins/specweave-github/lib/github-spec-content-sync.ts +1 -1
  295. package/plugins/specweave-github/lib/types.ts +21 -0
  296. package/plugins/specweave-infrastructure/agents/devops/AGENT.md +1 -1
  297. package/plugins/specweave-infrastructure/agents/network-engineer/AGENT.md +3 -3
  298. package/plugins/specweave-infrastructure/agents/observability-engineer/AGENT.md +2 -2
  299. package/plugins/specweave-infrastructure/agents/performance-engineer/AGENT.md +3 -3
  300. package/plugins/specweave-infrastructure/agents/sre/AGENT.md +2 -2
  301. package/plugins/specweave-jira/agents/jira-manager/AGENT.md +11 -1
  302. package/plugins/specweave-jira/commands/import-projects.js +1 -1
  303. package/plugins/specweave-jira/commands/import-projects.ts +1 -1
  304. package/plugins/specweave-jira/lib/jira-spec-commit-sync.d.ts +1 -1
  305. package/plugins/specweave-jira/lib/jira-spec-commit-sync.js +1 -1
  306. package/plugins/specweave-jira/lib/jira-spec-commit-sync.ts +1 -1
  307. package/plugins/specweave-jira/lib/jira-spec-content-sync.js +1 -1
  308. package/plugins/specweave-jira/lib/jira-spec-content-sync.ts +1 -1
  309. package/plugins/specweave-jira/lib/setup-wizard.js +2 -2
  310. package/plugins/specweave-jira/lib/setup-wizard.ts +2 -2
  311. package/plugins/specweave-jira/skills/specweave-jira-mapper/SKILL.md +1 -1
  312. package/plugins/specweave-kafka/agents/kafka-architect/AGENT.md +5 -1
  313. package/plugins/specweave-kafka/agents/kafka-devops/AGENT.md +6 -1
  314. package/plugins/specweave-kafka/agents/kafka-observability/AGENT.md +6 -1
  315. package/plugins/specweave-kubernetes/agents/kubernetes-architect/AGENT.md +3 -3
  316. package/plugins/specweave-ml/agents/data-scientist/AGENT.md +2 -1
  317. package/plugins/specweave-ml/agents/ml-engineer/AGENT.md +2 -1
  318. package/plugins/specweave-ml/agents/mlops-engineer/AGENT.md +3 -3
  319. package/plugins/specweave-mobile/agents/mobile-architect/AGENT.md +6 -1
  320. package/plugins/specweave-payments/agents/payment-integration/AGENT.md +3 -3
  321. package/plugins/specweave-release/agents/release-manager/AGENT.md +6 -1
  322. package/plugins/specweave-release/commands/specweave-release-npm.md +8 -0
  323. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +135 -0
  324. package/plugins/specweave-testing/agents/qa-engineer/AGENT.md +5 -0
  325. package/src/templates/AGENTS.md.template +97 -0
  326. package/dist/src/core/cost-tracker.d.ts.map +0 -1
  327. package/dist/src/core/cost-tracker.js.map +0 -1
  328. package/dist/src/core/credentials-manager.d.ts.map +0 -1
  329. package/dist/src/core/credentials-manager.js.map +0 -1
  330. package/dist/src/core/increment-status.d.ts.map +0 -1
  331. package/dist/src/core/increment-status.js.map +0 -1
  332. package/dist/src/core/increment-utils.d.ts.map +0 -1
  333. package/dist/src/core/increment-utils.js.map +0 -1
  334. package/dist/src/core/plugin-loader.d.ts.map +0 -1
  335. package/dist/src/core/plugin-loader.js.map +0 -1
  336. package/dist/src/core/project-manager.d.ts.map +0 -1
  337. package/dist/src/core/project-manager.js.map +0 -1
  338. package/dist/src/core/project-structure-detector.d.ts.map +0 -1
  339. package/dist/src/core/project-structure-detector.js.map +0 -1
  340. package/dist/src/core/rfc-generator-v2.d.ts.map +0 -1
  341. package/dist/src/core/rfc-generator-v2.js.map +0 -1
  342. package/dist/src/core/spec-content-sync.d.ts.map +0 -1
  343. package/dist/src/core/spec-content-sync.js.map +0 -1
  344. package/dist/src/core/spec-detector.d.ts.map +0 -1
  345. package/dist/src/core/spec-detector.js.map +0 -1
  346. package/dist/src/core/spec-identifier-detector.d.ts.map +0 -1
  347. package/dist/src/core/spec-identifier-detector.js.map +0 -1
  348. package/dist/src/core/spec-task-mapper.d.ts.map +0 -1
  349. package/dist/src/core/spec-task-mapper.js.map +0 -1
  350. package/dist/src/utils/spec-parser.d.ts +0 -145
  351. package/dist/src/utils/spec-parser.d.ts.map +0 -1
  352. package/dist/src/utils/spec-parser.js +0 -640
  353. package/dist/src/utils/spec-parser.js.map +0 -1
  354. package/plugins/specweave/agents/pm/AGENT.md.bak2 +0 -1754
  355. package/plugins/specweave/hooks/hooks.json.bak +0 -72
  356. package/plugins/specweave/hooks/hooks.json.v1-backup +0 -16
  357. package/plugins/specweave/hooks/v2/hooks.json +0 -16
  358. /package/dist/src/core/{credentials-manager.d.ts → credentials/credentials-manager.d.ts} +0 -0
  359. /package/dist/src/core/{credentials-manager.js → credentials/credentials-manager.js} +0 -0
  360. /package/dist/src/core/{increment-status.d.ts → increment/increment-status.d.ts} +0 -0
  361. /package/dist/src/core/{increment-utils.d.ts → increment/increment-utils.d.ts} +0 -0
  362. /package/dist/src/core/{increment-utils.js → increment/increment-utils.js} +0 -0
  363. /package/dist/src/core/{project-structure-detector.d.ts → project/project-structure-detector.d.ts} +0 -0
  364. /package/dist/src/core/{project-structure-detector.js → project/project-structure-detector.js} +0 -0
  365. /package/dist/src/core/{spec-task-mapper.d.ts → specs/spec-task-mapper.d.ts} +0 -0
  366. /package/dist/src/core/{spec-task-mapper.js → specs/spec-task-mapper.js} +0 -0
@@ -0,0 +1,423 @@
1
+ /**
2
+ * Conflict Resolver for Living Docs Synchronization
3
+ *
4
+ * CRITICAL PRINCIPLE: External tool status ALWAYS wins in conflicts!
5
+ * This ensures that QA and stakeholder decisions in external tools
6
+ * take precedence over local development status.
7
+ */
8
+ import * as fs from '../../../src/utils/fs-native.js';
9
+ import * as path from 'path';
10
+ import * as yaml from 'yaml';
11
+ // ============================================================================
12
+ // Status Mapping
13
+ // ============================================================================
14
+ const STATUS_MAPPING = {
15
+ ado: {
16
+ 'New': 'draft',
17
+ 'Active': 'in-progress',
18
+ 'Resolved': 'implemented',
19
+ 'Closed': 'complete',
20
+ 'In Review': 'in-qa',
21
+ 'In QA': 'in-qa',
22
+ 'Blocked': 'blocked',
23
+ 'Removed': 'cancelled'
24
+ },
25
+ jira: {
26
+ 'To Do': 'draft',
27
+ 'In Progress': 'in-progress',
28
+ 'Code Review': 'implemented',
29
+ 'In Review': 'implemented',
30
+ 'QA': 'in-qa',
31
+ 'Testing': 'in-qa',
32
+ 'Done': 'complete',
33
+ 'Closed': 'complete',
34
+ 'Blocked': 'blocked',
35
+ 'Cancelled': 'cancelled'
36
+ },
37
+ github: {
38
+ 'open': 'in-progress',
39
+ 'closed': 'complete'
40
+ }
41
+ };
42
+ const REVERSE_STATUS_MAPPING = {
43
+ ado: {
44
+ 'draft': 'New',
45
+ 'in-progress': 'Active',
46
+ 'implemented': 'Resolved',
47
+ 'in-qa': 'In QA',
48
+ 'complete': 'Closed',
49
+ 'blocked': 'Blocked',
50
+ 'cancelled': 'Removed'
51
+ },
52
+ jira: {
53
+ 'draft': 'To Do',
54
+ 'in-progress': 'In Progress',
55
+ 'implemented': 'Code Review',
56
+ 'in-qa': 'QA',
57
+ 'complete': 'Done',
58
+ 'blocked': 'Blocked',
59
+ 'cancelled': 'Cancelled'
60
+ },
61
+ github: {
62
+ 'draft': 'open',
63
+ 'in-progress': 'open',
64
+ 'implemented': 'open',
65
+ 'in-qa': 'open',
66
+ 'complete': 'closed',
67
+ 'blocked': 'open',
68
+ 'cancelled': 'closed'
69
+ }
70
+ };
71
+ // ============================================================================
72
+ // Conflict Resolver Class
73
+ // ============================================================================
74
+ export class ConflictResolver {
75
+ constructor() {
76
+ this.resolutionLog = [];
77
+ }
78
+ /**
79
+ * Map external status to local SpecWeave status
80
+ */
81
+ mapExternalStatus(tool, externalStatus) {
82
+ const mapping = STATUS_MAPPING[tool];
83
+ return mapping[externalStatus] || 'unknown';
84
+ }
85
+ /**
86
+ * Map local status to external tool status
87
+ */
88
+ mapLocalStatus(tool, localStatus) {
89
+ const mapping = REVERSE_STATUS_MAPPING[tool];
90
+ return mapping[localStatus] || 'Active';
91
+ }
92
+ /**
93
+ * CRITICAL: Resolve status conflict - EXTERNAL ALWAYS WINS
94
+ */
95
+ resolveStatusConflict(localStatus, externalStatus) {
96
+ const resolution = {
97
+ field: 'status',
98
+ localValue: localStatus,
99
+ externalValue: externalStatus.status,
100
+ resolution: 'external', // ALWAYS external for status
101
+ resolvedValue: externalStatus.mappedStatus,
102
+ reason: 'External tool reflects QA and stakeholder decisions',
103
+ timestamp: new Date().toISOString()
104
+ };
105
+ // Log the resolution
106
+ console.log(`📊 Status Conflict Detected:`);
107
+ console.log(` Local: ${localStatus}`);
108
+ console.log(` External: ${externalStatus.status} (${externalStatus.tool})`);
109
+ console.log(` ✅ Resolution: EXTERNAL WINS - ${externalStatus.mappedStatus}`);
110
+ this.resolutionLog.push(resolution);
111
+ return resolution;
112
+ }
113
+ /**
114
+ * Compare timestamps to determine winner (Increment 0089)
115
+ *
116
+ * For pull sync, we compare local lastModified vs external ChangedDate.
117
+ * The more recent timestamp wins.
118
+ *
119
+ * @param localTimestamp - Local file lastModified timestamp (ISO string or null)
120
+ * @param externalTimestamp - External tool ChangedDate (ISO string)
121
+ * @returns Comparison result with winner and reasoning
122
+ */
123
+ compareTimestamps(localTimestamp, externalTimestamp) {
124
+ const externalDate = new Date(externalTimestamp);
125
+ // If no local timestamp, external wins by default
126
+ if (!localTimestamp) {
127
+ return {
128
+ winner: 'external',
129
+ localTimestamp: null,
130
+ externalTimestamp,
131
+ timeDiffMs: 0,
132
+ reason: 'No local timestamp available, external wins by default',
133
+ };
134
+ }
135
+ const localDate = new Date(localTimestamp);
136
+ const timeDiffMs = externalDate.getTime() - localDate.getTime();
137
+ // External is more recent → external wins
138
+ if (timeDiffMs > 0) {
139
+ console.log(`📊 Timestamp Comparison:`);
140
+ console.log(` Local: ${localTimestamp}`);
141
+ console.log(` External: ${externalTimestamp}`);
142
+ console.log(` ✅ Winner: EXTERNAL (${Math.round(timeDiffMs / 60000)}min newer)`);
143
+ return {
144
+ winner: 'external',
145
+ localTimestamp,
146
+ externalTimestamp,
147
+ timeDiffMs,
148
+ reason: `External is ${Math.round(timeDiffMs / 60000)} minutes newer`,
149
+ };
150
+ }
151
+ // Local is more recent → local wins (don't overwrite local changes)
152
+ if (timeDiffMs < 0) {
153
+ console.log(`📊 Timestamp Comparison:`);
154
+ console.log(` Local: ${localTimestamp}`);
155
+ console.log(` External: ${externalTimestamp}`);
156
+ console.log(` ✅ Winner: LOCAL (${Math.round(Math.abs(timeDiffMs) / 60000)}min newer)`);
157
+ return {
158
+ winner: 'local',
159
+ localTimestamp,
160
+ externalTimestamp,
161
+ timeDiffMs,
162
+ reason: `Local is ${Math.round(Math.abs(timeDiffMs) / 60000)} minutes newer`,
163
+ };
164
+ }
165
+ // Same timestamp → no conflict
166
+ return {
167
+ winner: 'none',
168
+ localTimestamp,
169
+ externalTimestamp,
170
+ timeDiffMs: 0,
171
+ reason: 'Timestamps are identical, no conflict',
172
+ };
173
+ }
174
+ /**
175
+ * Resolve conflict using timestamp comparison (Increment 0089)
176
+ *
177
+ * Combines timestamp comparison with status conflict resolution.
178
+ * Used by ExternalChangePuller for pull sync.
179
+ *
180
+ * @param field - The field being compared (e.g., 'status')
181
+ * @param localValue - Current local value
182
+ * @param externalValue - Value from external tool
183
+ * @param localTimestamp - Local lastModified timestamp
184
+ * @param externalTimestamp - External ChangedDate
185
+ * @returns Conflict resolution result
186
+ */
187
+ resolveWithTimestamp(field, localValue, externalValue, localTimestamp, externalTimestamp) {
188
+ const comparison = this.compareTimestamps(localTimestamp, externalTimestamp);
189
+ const resolution = {
190
+ field,
191
+ localValue,
192
+ externalValue,
193
+ resolution: comparison.winner === 'local' ? 'local' : 'external',
194
+ resolvedValue: comparison.winner === 'local' ? localValue : externalValue,
195
+ reason: comparison.reason,
196
+ timestamp: new Date().toISOString(),
197
+ };
198
+ // Log the resolution
199
+ console.log(`📊 Conflict Resolved (${field}):`);
200
+ console.log(` Winner: ${comparison.winner.toUpperCase()}`);
201
+ console.log(` Reason: ${comparison.reason}`);
202
+ this.resolutionLog.push(resolution);
203
+ return resolution;
204
+ }
205
+ /**
206
+ * Resolve priority conflict - EXTERNAL WINS
207
+ */
208
+ resolvePriorityConflict(localPriority, externalPriority) {
209
+ const resolution = {
210
+ field: 'priority',
211
+ localValue: localPriority,
212
+ externalValue: externalPriority,
213
+ resolution: 'external',
214
+ resolvedValue: externalPriority || localPriority,
215
+ reason: 'External tool reflects stakeholder prioritization',
216
+ timestamp: new Date().toISOString()
217
+ };
218
+ if (localPriority !== externalPriority && externalPriority) {
219
+ console.log(`📊 Priority Conflict Detected:`);
220
+ console.log(` Local: ${localPriority}`);
221
+ console.log(` External: ${externalPriority}`);
222
+ console.log(` ✅ Resolution: EXTERNAL WINS - ${externalPriority}`);
223
+ this.resolutionLog.push(resolution);
224
+ }
225
+ return resolution;
226
+ }
227
+ /**
228
+ * Apply conflict resolutions to spec
229
+ */
230
+ async applyResolutions(specPath, resolutions) {
231
+ const content = await fs.readFile(specPath, 'utf-8');
232
+ const lines = content.split('\n');
233
+ let inFrontmatter = false;
234
+ let frontmatterEnd = -1;
235
+ // Find frontmatter boundaries
236
+ for (let i = 0; i < lines.length; i++) {
237
+ if (lines[i] === '---') {
238
+ if (!inFrontmatter) {
239
+ inFrontmatter = true;
240
+ }
241
+ else {
242
+ frontmatterEnd = i;
243
+ break;
244
+ }
245
+ }
246
+ }
247
+ // Apply resolutions
248
+ for (const resolution of resolutions) {
249
+ if (resolution.field === 'status') {
250
+ // Update status in frontmatter
251
+ for (let i = 1; i < frontmatterEnd; i++) {
252
+ if (lines[i].startsWith('status:')) {
253
+ lines[i] = `status: ${resolution.resolvedValue}`;
254
+ console.log(`✅ Applied status resolution: ${resolution.resolvedValue}`);
255
+ break;
256
+ }
257
+ }
258
+ // Add sync metadata
259
+ const syncTimestamp = new Date().toISOString();
260
+ let syncedAtFound = false;
261
+ for (let i = 1; i < frontmatterEnd; i++) {
262
+ if (lines[i].includes('syncedAt:')) {
263
+ lines[i] = ` syncedAt: "${syncTimestamp}"`;
264
+ syncedAtFound = true;
265
+ break;
266
+ }
267
+ }
268
+ if (!syncedAtFound) {
269
+ // Add syncedAt after externalLinks
270
+ for (let i = 1; i < frontmatterEnd; i++) {
271
+ if (lines[i].includes('externalLinks:')) {
272
+ // Find the external tool section
273
+ for (let j = i + 1; j < frontmatterEnd; j++) {
274
+ if (lines[j].includes('ado:') || lines[j].includes('jira:') || lines[j].includes('github:')) {
275
+ // Insert after the URL line
276
+ for (let k = j + 1; k < frontmatterEnd; k++) {
277
+ if (lines[k].includes('Url:')) {
278
+ lines.splice(k + 1, 0, ` syncedAt: "${syncTimestamp}"`);
279
+ frontmatterEnd++; // Adjust for inserted line
280
+ syncedAtFound = true;
281
+ break;
282
+ }
283
+ }
284
+ if (syncedAtFound)
285
+ break;
286
+ }
287
+ }
288
+ if (syncedAtFound)
289
+ break;
290
+ }
291
+ }
292
+ }
293
+ }
294
+ else if (resolution.field === 'priority' && resolution.resolvedValue) {
295
+ // Update priority in frontmatter
296
+ for (let i = 1; i < frontmatterEnd; i++) {
297
+ if (lines[i].startsWith('priority:')) {
298
+ lines[i] = `priority: ${resolution.resolvedValue}`;
299
+ console.log(`✅ Applied priority resolution: ${resolution.resolvedValue}`);
300
+ break;
301
+ }
302
+ }
303
+ }
304
+ }
305
+ // Write updated content
306
+ await fs.writeFile(specPath, lines.join('\n'));
307
+ console.log(`✅ Resolutions applied to ${path.basename(specPath)}`);
308
+ }
309
+ /**
310
+ * Validate that external status wins in implementation
311
+ */
312
+ validateImplementation(implementationCode) {
313
+ const violations = [];
314
+ // Check for incorrect patterns
315
+ const incorrectPatterns = [
316
+ {
317
+ pattern: /if.*conflict.*\{[^}]*spec\.status\s*=\s*localStatus/,
318
+ message: 'Local status should never win in conflicts'
319
+ },
320
+ {
321
+ pattern: /resolution\s*:\s*['"]local['"]/,
322
+ message: 'Resolution should be "external" for status conflicts'
323
+ },
324
+ {
325
+ pattern: /prefer.*local.*status/i,
326
+ message: 'Should prefer external status'
327
+ }
328
+ ];
329
+ for (const { pattern, message } of incorrectPatterns) {
330
+ if (pattern.test(implementationCode)) {
331
+ violations.push(message);
332
+ }
333
+ }
334
+ // Check for correct patterns
335
+ const requiredPatterns = [
336
+ {
337
+ pattern: /external.*wins|EXTERNAL.*WINS|externalStatus.*applied/i,
338
+ message: 'Missing confirmation that external wins'
339
+ }
340
+ ];
341
+ for (const { pattern, message } of requiredPatterns) {
342
+ if (!pattern.test(implementationCode)) {
343
+ violations.push(message);
344
+ }
345
+ }
346
+ return {
347
+ valid: violations.length === 0,
348
+ violations
349
+ };
350
+ }
351
+ /**
352
+ * Get resolution history
353
+ */
354
+ getResolutionLog() {
355
+ return this.resolutionLog;
356
+ }
357
+ /**
358
+ * Generate resolution report
359
+ */
360
+ generateReport() {
361
+ const report = [];
362
+ report.push('# Conflict Resolution Report');
363
+ report.push(`\n**Generated**: ${new Date().toISOString()}`);
364
+ report.push(`**Total Resolutions**: ${this.resolutionLog.length}`);
365
+ report.push('\n## Resolutions\n');
366
+ for (const resolution of this.resolutionLog) {
367
+ report.push(`### ${resolution.field}`);
368
+ report.push(`- **Local Value**: ${resolution.localValue}`);
369
+ report.push(`- **External Value**: ${resolution.externalValue}`);
370
+ report.push(`- **Resolution**: ${resolution.resolution.toUpperCase()} WINS`);
371
+ report.push(`- **Resolved To**: ${resolution.resolvedValue}`);
372
+ report.push(`- **Reason**: ${resolution.reason}`);
373
+ report.push(`- **Time**: ${resolution.timestamp}\n`);
374
+ }
375
+ report.push('## Validation');
376
+ report.push('✅ All conflicts resolved with external tool priority');
377
+ return report.join('\n');
378
+ }
379
+ }
380
+ // ============================================================================
381
+ // Helper Functions
382
+ // ============================================================================
383
+ /**
384
+ * Load spec metadata from file
385
+ */
386
+ export async function loadSpecMetadata(specPath) {
387
+ const content = await fs.readFile(specPath, 'utf-8');
388
+ const frontmatterMatch = content.match(/^---\n([\s\S]*?)\n---/);
389
+ if (!frontmatterMatch) {
390
+ throw new Error(`No frontmatter found in ${specPath}`);
391
+ }
392
+ return yaml.parse(frontmatterMatch[1]);
393
+ }
394
+ /**
395
+ * Perform three-permission sync with conflict resolution
396
+ */
397
+ export async function performBidirectionalSync(specPath, externalStatus) {
398
+ const resolver = new ConflictResolver();
399
+ const spec = await loadSpecMetadata(specPath);
400
+ const resolutions = [];
401
+ // Check for status conflict
402
+ if (spec.status !== externalStatus.mappedStatus) {
403
+ const statusResolution = resolver.resolveStatusConflict(spec.status, externalStatus);
404
+ resolutions.push(statusResolution);
405
+ }
406
+ // Apply resolutions if any conflicts found
407
+ if (resolutions.length > 0) {
408
+ await resolver.applyResolutions(specPath, resolutions);
409
+ // Generate and save report
410
+ const report = resolver.generateReport();
411
+ const reportPath = specPath.replace('.md', '-sync-report.md');
412
+ await fs.writeFile(reportPath, report);
413
+ console.log(`📄 Sync report saved to ${path.basename(reportPath)}`);
414
+ }
415
+ else {
416
+ console.log('✅ No conflicts detected - spec in sync with external tool');
417
+ }
418
+ }
419
+ // ============================================================================
420
+ // Export for testing
421
+ // ============================================================================
422
+ export default ConflictResolver;
423
+ //# sourceMappingURL=conflict-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict-resolver.js","sourceRoot":"","sources":["../../../../plugins/specweave-ado/lib/conflict-resolver.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  * - Rate limiting protection
8
8
  * - Secure command execution (no shell injection)
9
9
  */
10
- import { GitHubIssue, GitHubMilestone } from './types';
10
+ import { GitHubIssue, GitHubMilestone, GitHubExternalChange } from './types';
11
11
  import { SyncProfile, TimeRangePreset } from '../../../src/core/types/sync-profile';
12
12
  export declare class GitHubClientV2 {
13
13
  private owner;
@@ -170,5 +170,27 @@ export declare class GitHubClientV2 {
170
170
  delayMs?: number;
171
171
  }): Promise<GitHubIssue[]>;
172
172
  private sleep;
173
+ /**
174
+ * Fetch recently changed issues for pull sync
175
+ *
176
+ * Uses GitHub Issues API with `since` parameter to find issues
177
+ * that have been updated since a given timestamp.
178
+ *
179
+ * @param since - Timestamp to query changes from
180
+ * @param linkedIssueNumbers - Optional list of issue numbers to filter (linked items only)
181
+ * @returns Array of external changes with changedAt, changedBy, and current values
182
+ */
183
+ fetchRecentChanges(since: Date, linkedIssueNumbers?: number[]): Promise<GitHubExternalChange[]>;
184
+ /**
185
+ * Get issue events for detailed change tracking
186
+ *
187
+ * Use this for detailed changelog when needed.
188
+ * GET /repos/{owner}/{repo}/issues/{issue_number}/events
189
+ *
190
+ * @param issueNumber - Issue number
191
+ * @param perPage - Limit number of events
192
+ * @returns Array of events with action details
193
+ */
194
+ getIssueEvents(issueNumber: number, perPage?: number): Promise<any[]>;
173
195
  }
174
196
  //# sourceMappingURL=github-client-v2.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"github-client-v2.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-client-v2.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAAE,WAAW,EAAgB,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAElG,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,QAAQ,CAAS;IAEzB;;OAEG;gBACS,OAAO,EAAE,WAAW;IAWhC;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,cAAc;IAU5D;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,OAAO,IAAI,MAAM;IAQjB;;OAEG;WACU,QAAQ,IAAI,OAAO,CAAC;QAC/B,SAAS,EAAE,OAAO,CAAC;QACnB,aAAa,EAAE,OAAO,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAwBF;;OAEG;WACU,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC;IA4BpF;;OAEG;IACG,oBAAoB,CACxB,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,GAAE,MAAU,GACtB,OAAO,CAAC,eAAe,CAAC;IAqC3B;;OAEG;YACW,mBAAmB;IAqBjC;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,kBAAkB;IAqC1B;;;;;;;;;;OAUG;IACG,oBAAoB,CAAC,MAAM,EAAE;QACjC,SAAS,EAAE,MAAM,CAAC;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC3B,GAAG,OAAO,CAAC,WAAW,CAAC;IAgBxB;;OAEG;IACG,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAC3B,MAAM,GAAE,MAAM,EAAO,GACpB,OAAO,CAAC,WAAW,CAAC;IA4DvB;;OAEG;IACG,eAAe,CACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAC3B,MAAM,GAAE,MAAM,EAAO,GACpB,OAAO,CAAC,WAAW,CAAC;IAOvB;;OAEG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAyBzD;;;;OAIG;IACG,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAwCpE;;OAEG;IACG,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB1E;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBtE;;;;;OAKG;IACG,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBvE;;OAEG;IACG,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBrE;;;;OAIG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAC,GAAG,IAAI,CAAC;IA0BzF;;OAEG;IACG,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBrE;;;;;OAKG;IACG,qBAAqB,CACzB,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,EAAE,CAAC;IAqCzB;;OAEG;IACG,qBAAqB,CACzB,SAAS,EAAE,eAAe,EAC1B,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,WAAW,EAAE,CAAC;IA8BzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsD1B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC;QAC9B,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,IAAI,CAAC;KACb,CAAC;IAyBF;;OAEG;IACG,iBAAiB,CACrB,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,EACjE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAC3B,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GACrD,OAAO,CAAC,WAAW,EAAE,CAAC;IA+CzB,OAAO,CAAC,KAAK;CAGd"}
1
+ {"version":3,"file":"github-client-v2.d.ts","sourceRoot":"","sources":["../../../../plugins/specweave-github/lib/github-client-v2.ts"],"names":[],"mappings":"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"}
@@ -621,5 +621,100 @@ export class GitHubClientV2 {
621
621
  sleep(ms) {
622
622
  return new Promise((resolve) => setTimeout(resolve, ms));
623
623
  }
624
+ // ==========================================================================
625
+ // Pull Sync - External Change Detection (Increment 0089)
626
+ // ==========================================================================
627
+ /**
628
+ * Fetch recently changed issues for pull sync
629
+ *
630
+ * Uses GitHub Issues API with `since` parameter to find issues
631
+ * that have been updated since a given timestamp.
632
+ *
633
+ * @param since - Timestamp to query changes from
634
+ * @param linkedIssueNumbers - Optional list of issue numbers to filter (linked items only)
635
+ * @returns Array of external changes with changedAt, changedBy, and current values
636
+ */
637
+ async fetchRecentChanges(since, linkedIssueNumbers) {
638
+ // Build JQ filter for issues updated since timestamp
639
+ const sinceISO = since.toISOString();
640
+ // Query parameters - MUST use .[] to iterate array from GitHub API
641
+ const jqFilter = linkedIssueNumbers && linkedIssueNumbers.length > 0
642
+ ? `.[] | select(.number | IN(${linkedIssueNumbers.join(',')})) | {number, title, state, updated_at, user: .user.login, assignee: .assignee.login, labels: [.labels[].name]}`
643
+ : `.[] | {number, title, state, updated_at, user: .user.login, assignee: .assignee.login, labels: [.labels[].name]}`;
644
+ // Use GitHub API to fetch issues updated since timestamp
645
+ const result = await execFileNoThrow('gh', [
646
+ 'api',
647
+ `repos/${this.fullRepo}/issues`,
648
+ '--method', 'GET',
649
+ '-f', `since=${sinceISO}`,
650
+ '-f', 'state=all',
651
+ '-f', 'sort=updated',
652
+ '-f', 'direction=desc',
653
+ '-f', 'per_page=100',
654
+ '--jq', jqFilter,
655
+ ]);
656
+ if (result.exitCode !== 0) {
657
+ throw new Error(`Failed to fetch recent changes: ${result.stderr || result.stdout}`);
658
+ }
659
+ // Parse NDJSON output (one JSON object per line)
660
+ const lines = result.stdout.trim().split('\n').filter(l => l.trim());
661
+ const issues = [];
662
+ for (const line of lines) {
663
+ try {
664
+ issues.push(JSON.parse(line));
665
+ }
666
+ catch {
667
+ // Skip malformed lines
668
+ }
669
+ }
670
+ // Map to GitHubExternalChange format
671
+ const changes = issues.map(issue => ({
672
+ platform: 'github',
673
+ externalId: `GH-${issue.number}`,
674
+ issueNumber: issue.number,
675
+ changedAt: issue.updated_at || new Date().toISOString(),
676
+ changedBy: issue.user || 'unknown',
677
+ changedFields: [], // GitHub doesn't provide changelog in list API
678
+ currentState: {
679
+ status: issue.state,
680
+ labels: issue.labels || [],
681
+ assignee: issue.assignee || null,
682
+ },
683
+ }));
684
+ return changes;
685
+ }
686
+ /**
687
+ * Get issue events for detailed change tracking
688
+ *
689
+ * Use this for detailed changelog when needed.
690
+ * GET /repos/{owner}/{repo}/issues/{issue_number}/events
691
+ *
692
+ * @param issueNumber - Issue number
693
+ * @param perPage - Limit number of events
694
+ * @returns Array of events with action details
695
+ */
696
+ async getIssueEvents(issueNumber, perPage = 30) {
697
+ const result = await execFileNoThrow('gh', [
698
+ 'api',
699
+ `repos/${this.fullRepo}/issues/${issueNumber}/events`,
700
+ '-f', `per_page=${perPage}`,
701
+ '--jq', '.[].{event, created_at, actor: .actor.login}',
702
+ ]);
703
+ if (result.exitCode !== 0) {
704
+ throw new Error(`Failed to get issue events: ${result.stderr || result.stdout}`);
705
+ }
706
+ // Parse NDJSON output
707
+ const lines = result.stdout.trim().split('\n').filter(l => l.trim());
708
+ const events = [];
709
+ for (const line of lines) {
710
+ try {
711
+ events.push(JSON.parse(line));
712
+ }
713
+ catch {
714
+ // Skip malformed lines
715
+ }
716
+ }
717
+ return events;
718
+ }
624
719
  }
625
720
  //# sourceMappingURL=github-client-v2.js.map