specweave 0.21.2 → 0.21.3

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 (553) hide show
  1. package/CLAUDE.md +232 -5
  2. package/dist/plugins/specweave-github/lib/IssueStateManager.d.ts +98 -0
  3. package/dist/plugins/specweave-github/lib/IssueStateManager.d.ts.map +1 -0
  4. package/dist/plugins/specweave-github/lib/IssueStateManager.js +146 -0
  5. package/dist/plugins/specweave-github/lib/IssueStateManager.js.map +1 -0
  6. package/dist/plugins/specweave-github/lib/user-story-issue-builder.d.ts.map +1 -1
  7. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js +6 -0
  8. package/dist/plugins/specweave-github/lib/user-story-issue-builder.js.map +1 -1
  9. package/dist/src/cli/commands/check-hooks.d.ts +11 -0
  10. package/dist/src/cli/commands/check-hooks.d.ts.map +1 -0
  11. package/dist/src/cli/commands/check-hooks.js +144 -0
  12. package/dist/src/cli/commands/check-hooks.js.map +1 -0
  13. package/dist/src/cli/commands/cicd-monitor.js +3 -3
  14. package/dist/src/cli/commands/cicd-monitor.js.map +1 -1
  15. package/dist/src/cli/commands/import-docs.js +2 -2
  16. package/dist/src/cli/commands/import-docs.js.map +1 -1
  17. package/dist/src/cli/commands/init-multiproject.js +4 -4
  18. package/dist/src/cli/commands/init-multiproject.js.map +1 -1
  19. package/dist/src/cli/commands/migrate-to-multiproject.js +3 -3
  20. package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
  21. package/dist/src/cli/commands/plan/agent-invoker.d.ts +79 -0
  22. package/dist/src/cli/commands/plan/agent-invoker.d.ts.map +1 -0
  23. package/dist/src/cli/commands/plan/agent-invoker.js +383 -0
  24. package/dist/src/cli/commands/plan/agent-invoker.js.map +1 -0
  25. package/dist/src/cli/commands/plan/increment-detector.d.ts +27 -0
  26. package/dist/src/cli/commands/plan/increment-detector.d.ts.map +1 -0
  27. package/dist/src/cli/commands/plan/increment-detector.js +159 -0
  28. package/dist/src/cli/commands/plan/increment-detector.js.map +1 -0
  29. package/dist/src/cli/commands/plan/plan-orchestrator.d.ts +45 -0
  30. package/dist/src/cli/commands/plan/plan-orchestrator.d.ts.map +1 -0
  31. package/dist/src/cli/commands/plan/plan-orchestrator.js +229 -0
  32. package/dist/src/cli/commands/plan/plan-orchestrator.js.map +1 -0
  33. package/dist/src/cli/commands/plan/plan-validator.d.ts +36 -0
  34. package/dist/src/cli/commands/plan/plan-validator.d.ts.map +1 -0
  35. package/dist/src/cli/commands/plan/plan-validator.js +174 -0
  36. package/dist/src/cli/commands/plan/plan-validator.js.map +1 -0
  37. package/dist/src/cli/commands/plan/types.d.ts +170 -0
  38. package/dist/src/cli/commands/plan/types.d.ts.map +1 -0
  39. package/dist/src/cli/commands/plan/types.js +42 -0
  40. package/dist/src/cli/commands/plan/types.js.map +1 -0
  41. package/dist/src/cli/commands/plan-command.d.ts +16 -0
  42. package/dist/src/cli/commands/plan-command.d.ts.map +1 -0
  43. package/dist/src/cli/commands/plan-command.js +127 -0
  44. package/dist/src/cli/commands/plan-command.js.map +1 -0
  45. package/dist/src/cli/commands/switch-project.js +3 -3
  46. package/dist/src/cli/commands/switch-project.js.map +1 -1
  47. package/dist/src/cli/commands/validate-parent-repo.js +1 -1
  48. package/dist/src/cli/commands/validate-parent-repo.js.map +1 -1
  49. package/dist/src/config/ConfigManager.d.ts +69 -0
  50. package/dist/src/config/ConfigManager.d.ts.map +1 -0
  51. package/dist/src/config/ConfigManager.js +130 -0
  52. package/dist/src/config/ConfigManager.js.map +1 -0
  53. package/dist/src/config/types.d.ts +1357 -0
  54. package/dist/src/config/types.d.ts.map +1 -0
  55. package/dist/src/config/types.js +67 -0
  56. package/dist/src/config/types.js.map +1 -0
  57. package/dist/src/core/brownfield/importer.d.ts +1 -1
  58. package/dist/src/core/brownfield/importer.d.ts.map +1 -1
  59. package/dist/src/core/brownfield/importer.js +3 -3
  60. package/dist/src/core/brownfield/importer.js.map +1 -1
  61. package/dist/src/core/cicd/config-loader.d.ts +1 -1
  62. package/dist/src/core/cicd/config-loader.d.ts.map +1 -1
  63. package/dist/src/core/cicd/index.d.ts +6 -6
  64. package/dist/src/core/cicd/index.d.ts.map +1 -1
  65. package/dist/src/core/cicd/index.js +6 -6
  66. package/dist/src/core/cicd/index.js.map +1 -1
  67. package/dist/src/core/cicd/monitor-service.d.ts +3 -3
  68. package/dist/src/core/cicd/monitor-service.d.ts.map +1 -1
  69. package/dist/src/core/cicd/monitor-service.js +3 -3
  70. package/dist/src/core/cicd/monitor-service.js.map +1 -1
  71. package/dist/src/core/cicd/notifier.d.ts +1 -1
  72. package/dist/src/core/cicd/notifier.d.ts.map +1 -1
  73. package/dist/src/core/cicd/state-manager.d.ts +1 -1
  74. package/dist/src/core/cicd/state-manager.d.ts.map +1 -1
  75. package/dist/src/core/cicd/state-manager.js +1 -1
  76. package/dist/src/core/cicd/state-manager.js.map +1 -1
  77. package/dist/src/core/cicd/workflow-monitor.d.ts +1 -1
  78. package/dist/src/core/cicd/workflow-monitor.d.ts.map +1 -1
  79. package/dist/src/core/cicd/workflow-monitor.js +1 -1
  80. package/dist/src/core/cicd/workflow-monitor.js.map +1 -1
  81. package/dist/src/core/cost-tracker.d.ts +2 -2
  82. package/dist/src/core/cost-tracker.d.ts.map +1 -1
  83. package/dist/src/core/cost-tracker.js +1 -1
  84. package/dist/src/core/cost-tracker.js.map +1 -1
  85. package/dist/src/core/hooks/HealthReporter.d.ts +55 -0
  86. package/dist/src/core/hooks/HealthReporter.d.ts.map +1 -0
  87. package/dist/src/core/hooks/HealthReporter.js +268 -0
  88. package/dist/src/core/hooks/HealthReporter.js.map +1 -0
  89. package/dist/src/core/hooks/HookAutoFixer.d.ts +41 -0
  90. package/dist/src/core/hooks/HookAutoFixer.d.ts.map +1 -0
  91. package/dist/src/core/hooks/HookAutoFixer.js +222 -0
  92. package/dist/src/core/hooks/HookAutoFixer.js.map +1 -0
  93. package/dist/src/core/hooks/HookExecutor.d.ts +57 -0
  94. package/dist/src/core/hooks/HookExecutor.d.ts.map +1 -0
  95. package/dist/src/core/hooks/HookExecutor.js +287 -0
  96. package/dist/src/core/hooks/HookExecutor.js.map +1 -0
  97. package/dist/src/core/hooks/HookHealthChecker.d.ts +51 -0
  98. package/dist/src/core/hooks/HookHealthChecker.d.ts.map +1 -0
  99. package/dist/src/core/hooks/HookHealthChecker.js +212 -0
  100. package/dist/src/core/hooks/HookHealthChecker.js.map +1 -0
  101. package/dist/src/core/hooks/HookScanner.d.ts +65 -0
  102. package/dist/src/core/hooks/HookScanner.d.ts.map +1 -0
  103. package/dist/src/core/hooks/HookScanner.js +214 -0
  104. package/dist/src/core/hooks/HookScanner.js.map +1 -0
  105. package/dist/src/core/hooks/types.d.ts +281 -0
  106. package/dist/src/core/hooks/types.d.ts.map +1 -0
  107. package/dist/src/core/hooks/types.js +10 -0
  108. package/dist/src/core/hooks/types.js.map +1 -0
  109. package/dist/src/core/iac/index.d.ts +10 -0
  110. package/dist/src/core/iac/index.d.ts.map +1 -0
  111. package/dist/src/core/iac/index.js +11 -0
  112. package/dist/src/core/iac/index.js.map +1 -0
  113. package/dist/src/core/iac/template-engine.d.ts +77 -0
  114. package/dist/src/core/iac/template-engine.d.ts.map +1 -0
  115. package/dist/src/core/iac/template-engine.js +182 -0
  116. package/dist/src/core/iac/template-engine.js.map +1 -0
  117. package/dist/src/core/increment/ac-status-manager.d.ts +115 -0
  118. package/dist/src/core/increment/ac-status-manager.d.ts.map +1 -0
  119. package/dist/src/core/increment/ac-status-manager.js +343 -0
  120. package/dist/src/core/increment/ac-status-manager.js.map +1 -0
  121. package/dist/src/core/increment/auto-transition-manager.d.ts +60 -0
  122. package/dist/src/core/increment/auto-transition-manager.d.ts.map +1 -0
  123. package/dist/src/core/increment/auto-transition-manager.js +192 -0
  124. package/dist/src/core/increment/auto-transition-manager.js.map +1 -0
  125. package/dist/src/core/increment/limits.d.ts +1 -1
  126. package/dist/src/core/increment/limits.d.ts.map +1 -1
  127. package/dist/src/core/increment/limits.js +2 -2
  128. package/dist/src/core/increment/limits.js.map +1 -1
  129. package/dist/src/core/increment/spec-sync-manager.d.ts +177 -0
  130. package/dist/src/core/increment/spec-sync-manager.d.ts.map +1 -0
  131. package/dist/src/core/increment/spec-sync-manager.js +496 -0
  132. package/dist/src/core/increment/spec-sync-manager.js.map +1 -0
  133. package/dist/src/core/increment/status-auto-transition.d.ts +46 -0
  134. package/dist/src/core/increment/status-auto-transition.d.ts.map +1 -0
  135. package/dist/src/core/increment/status-auto-transition.js +178 -0
  136. package/dist/src/core/increment/status-auto-transition.js.map +1 -0
  137. package/dist/src/core/increment/task-state-manager.d.ts +75 -0
  138. package/dist/src/core/increment/task-state-manager.d.ts.map +1 -0
  139. package/dist/src/core/increment/task-state-manager.js +117 -0
  140. package/dist/src/core/increment/task-state-manager.js.map +1 -0
  141. package/dist/src/core/living-docs/CodeValidator.d.ts +68 -0
  142. package/dist/src/core/living-docs/CodeValidator.d.ts.map +1 -0
  143. package/dist/src/core/living-docs/CodeValidator.js +160 -0
  144. package/dist/src/core/living-docs/CodeValidator.js.map +1 -0
  145. package/dist/src/core/living-docs/CompletionPropagator.d.ts +84 -0
  146. package/dist/src/core/living-docs/CompletionPropagator.d.ts.map +1 -0
  147. package/dist/src/core/living-docs/CompletionPropagator.js +205 -0
  148. package/dist/src/core/living-docs/CompletionPropagator.js.map +1 -0
  149. package/dist/src/core/living-docs/ProjectDetector.d.ts +29 -0
  150. package/dist/src/core/living-docs/ProjectDetector.d.ts.map +1 -0
  151. package/dist/src/core/living-docs/ProjectDetector.js +94 -0
  152. package/dist/src/core/living-docs/ProjectDetector.js.map +1 -0
  153. package/dist/src/core/living-docs/SpecDistributor.d.ts +55 -0
  154. package/dist/src/core/living-docs/SpecDistributor.d.ts.map +1 -0
  155. package/dist/src/core/living-docs/SpecDistributor.js +216 -0
  156. package/dist/src/core/living-docs/SpecDistributor.js.map +1 -0
  157. package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts +116 -0
  158. package/dist/src/core/living-docs/ThreeLayerSyncManager.d.ts.map +1 -0
  159. package/dist/src/core/living-docs/ThreeLayerSyncManager.js +356 -0
  160. package/dist/src/core/living-docs/ThreeLayerSyncManager.js.map +1 -0
  161. package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -1
  162. package/dist/src/core/living-docs/hierarchy-mapper.js +2 -1
  163. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -1
  164. package/dist/src/core/living-docs/index.d.ts +1 -1
  165. package/dist/src/core/living-docs/index.d.ts.map +1 -1
  166. package/dist/src/core/living-docs/index.js +5 -1
  167. package/dist/src/core/living-docs/index.js.map +1 -1
  168. package/dist/src/core/living-docs/types.d.ts +70 -300
  169. package/dist/src/core/living-docs/types.d.ts.map +1 -1
  170. package/dist/src/core/living-docs/types.js +2 -10
  171. package/dist/src/core/living-docs/types.js.map +1 -1
  172. package/dist/src/core/project-manager.d.ts +1 -1
  173. package/dist/src/core/project-manager.d.ts.map +1 -1
  174. package/dist/src/core/project-manager.js +2 -2
  175. package/dist/src/core/project-manager.js.map +1 -1
  176. package/dist/src/core/qa/quality-gate-decider.d.ts +1 -1
  177. package/dist/src/core/qa/quality-gate-decider.d.ts.map +1 -1
  178. package/dist/src/core/qa/risk-calculator.d.ts +1 -1
  179. package/dist/src/core/qa/risk-calculator.d.ts.map +1 -1
  180. package/dist/src/core/repo-structure/setup-summary.d.ts +1 -1
  181. package/dist/src/core/repo-structure/setup-summary.d.ts.map +1 -1
  182. package/dist/src/core/rfc-generator-v2.d.ts +1 -1
  183. package/dist/src/core/rfc-generator-v2.d.ts.map +1 -1
  184. package/dist/src/core/rfc-generator-v2.js +1 -1
  185. package/dist/src/core/rfc-generator-v2.js.map +1 -1
  186. package/dist/src/core/serverless/context-detector.d.ts +12 -0
  187. package/dist/src/core/serverless/context-detector.d.ts.map +1 -0
  188. package/dist/src/core/serverless/context-detector.js +213 -0
  189. package/dist/src/core/serverless/context-detector.js.map +1 -0
  190. package/dist/src/core/serverless/cost-comparison.d.ts +73 -0
  191. package/dist/src/core/serverless/cost-comparison.d.ts.map +1 -0
  192. package/dist/src/core/serverless/cost-comparison.js +198 -0
  193. package/dist/src/core/serverless/cost-comparison.js.map +1 -0
  194. package/dist/src/core/serverless/cost-estimator.d.ts +69 -0
  195. package/dist/src/core/serverless/cost-estimator.d.ts.map +1 -0
  196. package/dist/src/core/serverless/cost-estimator.js +127 -0
  197. package/dist/src/core/serverless/cost-estimator.js.map +1 -0
  198. package/dist/src/core/serverless/cost-optimizer.d.ts +57 -0
  199. package/dist/src/core/serverless/cost-optimizer.d.ts.map +1 -0
  200. package/dist/src/core/serverless/cost-optimizer.js +221 -0
  201. package/dist/src/core/serverless/cost-optimizer.js.map +1 -0
  202. package/dist/src/core/serverless/index.d.ts +20 -0
  203. package/dist/src/core/serverless/index.d.ts.map +1 -0
  204. package/dist/src/core/serverless/index.js +26 -0
  205. package/dist/src/core/serverless/index.js.map +1 -0
  206. package/dist/src/core/serverless/learning-path-recommender.d.ts +152 -0
  207. package/dist/src/core/serverless/learning-path-recommender.d.ts.map +1 -0
  208. package/dist/src/core/serverless/learning-path-recommender.js +389 -0
  209. package/dist/src/core/serverless/learning-path-recommender.js.map +1 -0
  210. package/dist/src/core/serverless/platform-data-loader.d.ts +22 -0
  211. package/dist/src/core/serverless/platform-data-loader.d.ts.map +1 -0
  212. package/dist/src/core/serverless/platform-data-loader.js +49 -0
  213. package/dist/src/core/serverless/platform-data-loader.js.map +1 -0
  214. package/dist/src/core/serverless/platform-selector.d.ts +20 -0
  215. package/dist/src/core/serverless/platform-selector.d.ts.map +1 -0
  216. package/dist/src/core/serverless/platform-selector.js +279 -0
  217. package/dist/src/core/serverless/platform-selector.js.map +1 -0
  218. package/dist/src/core/serverless/recommendation-formatter.d.ts +24 -0
  219. package/dist/src/core/serverless/recommendation-formatter.d.ts.map +1 -0
  220. package/dist/src/core/serverless/recommendation-formatter.js +70 -0
  221. package/dist/src/core/serverless/recommendation-formatter.js.map +1 -0
  222. package/dist/src/core/serverless/suitability-analyzer.d.ts +22 -0
  223. package/dist/src/core/serverless/suitability-analyzer.d.ts.map +1 -0
  224. package/dist/src/core/serverless/suitability-analyzer.js +262 -0
  225. package/dist/src/core/serverless/suitability-analyzer.js.map +1 -0
  226. package/dist/src/core/serverless/types.d.ts +96 -0
  227. package/dist/src/core/serverless/types.d.ts.map +1 -0
  228. package/dist/src/core/serverless/types.js +5 -0
  229. package/dist/src/core/serverless/types.js.map +1 -0
  230. package/dist/src/core/sync/bidirectional-engine.d.ts +1 -1
  231. package/dist/src/core/sync/bidirectional-engine.d.ts.map +1 -1
  232. package/dist/src/core/sync/enhanced-content-builder.d.ts +1 -1
  233. package/dist/src/core/sync/enhanced-content-builder.d.ts.map +1 -1
  234. package/dist/src/core/sync/profile-manager.d.ts +1 -1
  235. package/dist/src/core/sync/profile-manager.d.ts.map +1 -1
  236. package/dist/src/core/sync/profile-selector.d.ts +1 -1
  237. package/dist/src/core/sync/profile-selector.d.ts.map +1 -1
  238. package/dist/src/core/sync/profile-selector.js +1 -1
  239. package/dist/src/core/sync/profile-selector.js.map +1 -1
  240. package/dist/src/core/sync/project-context.d.ts +1 -1
  241. package/dist/src/core/sync/project-context.d.ts.map +1 -1
  242. package/dist/src/core/sync/rate-limiter.d.ts +1 -1
  243. package/dist/src/core/sync/rate-limiter.d.ts.map +1 -1
  244. package/dist/src/core/sync/status-sync-engine.d.ts +2 -2
  245. package/dist/src/core/sync/status-sync-engine.d.ts.map +1 -1
  246. package/dist/src/core/sync/status-sync-engine.js +2 -2
  247. package/dist/src/core/sync/status-sync-engine.js.map +1 -1
  248. package/dist/src/core/sync/time-range-selector.d.ts +1 -1
  249. package/dist/src/core/sync/time-range-selector.d.ts.map +1 -1
  250. package/dist/src/core/sync/time-range-selector.js +1 -1
  251. package/dist/src/core/sync/time-range-selector.js.map +1 -1
  252. package/dist/src/core/types/increment-metadata.d.ts +27 -0
  253. package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
  254. package/dist/src/core/types/increment-metadata.js +45 -1
  255. package/dist/src/core/types/increment-metadata.js.map +1 -1
  256. package/dist/src/core/types/sync-profile.d.ts +2 -0
  257. package/dist/src/core/types/sync-profile.d.ts.map +1 -1
  258. package/dist/src/core/types/sync-profile.js.map +1 -1
  259. package/dist/src/core/validation/increment-structure-validator.d.ts +47 -0
  260. package/dist/src/core/validation/increment-structure-validator.d.ts.map +1 -0
  261. package/dist/src/core/validation/increment-structure-validator.js +187 -0
  262. package/dist/src/core/validation/increment-structure-validator.js.map +1 -0
  263. package/dist/src/core/validation/three-file-validator.d.ts +82 -0
  264. package/dist/src/core/validation/three-file-validator.d.ts.map +1 -0
  265. package/dist/src/core/validation/three-file-validator.js +320 -0
  266. package/dist/src/core/validation/three-file-validator.js.map +1 -0
  267. package/dist/src/core/workflow/phase-detector.d.ts +103 -0
  268. package/dist/src/core/workflow/phase-detector.d.ts.map +1 -0
  269. package/dist/src/core/workflow/phase-detector.js +704 -0
  270. package/dist/src/core/workflow/phase-detector.js.map +1 -0
  271. package/dist/src/core/workflow/types.d.ts +153 -0
  272. package/dist/src/core/workflow/types.d.ts.map +1 -0
  273. package/dist/src/core/workflow/types.js +47 -0
  274. package/dist/src/core/workflow/types.js.map +1 -0
  275. package/dist/src/init/InitFlow.d.ts +37 -0
  276. package/dist/src/init/InitFlow.d.ts.map +1 -0
  277. package/dist/src/init/InitFlow.js +209 -0
  278. package/dist/src/init/InitFlow.js.map +1 -0
  279. package/dist/src/init/architecture/ArchitectureDecisionEngine.d.ts +107 -0
  280. package/dist/src/init/architecture/ArchitectureDecisionEngine.d.ts.map +1 -0
  281. package/dist/src/init/architecture/ArchitectureDecisionEngine.js +405 -0
  282. package/dist/src/init/architecture/ArchitectureDecisionEngine.js.map +1 -0
  283. package/dist/src/init/architecture/CloudCreditsDatabase.d.ts +11 -0
  284. package/dist/src/init/architecture/CloudCreditsDatabase.d.ts.map +1 -0
  285. package/dist/src/init/architecture/CloudCreditsDatabase.js +92 -0
  286. package/dist/src/init/architecture/CloudCreditsDatabase.js.map +1 -0
  287. package/dist/src/init/architecture/types.d.ts +251 -0
  288. package/dist/src/init/architecture/types.d.ts.map +1 -0
  289. package/dist/src/init/architecture/types.js +54 -0
  290. package/dist/src/init/architecture/types.js.map +1 -0
  291. package/dist/src/init/compliance/ComplianceDetector.d.ts +17 -0
  292. package/dist/src/init/compliance/ComplianceDetector.d.ts.map +1 -0
  293. package/dist/src/init/compliance/ComplianceDetector.js +64 -0
  294. package/dist/src/init/compliance/ComplianceDetector.js.map +1 -0
  295. package/dist/src/init/compliance/standards-database.d.ts +48 -0
  296. package/dist/src/init/compliance/standards-database.d.ts.map +1 -0
  297. package/dist/src/init/compliance/standards-database.js +506 -0
  298. package/dist/src/init/compliance/standards-database.js.map +1 -0
  299. package/dist/src/init/compliance/types.d.ts +91 -0
  300. package/dist/src/init/compliance/types.d.ts.map +1 -0
  301. package/dist/src/init/compliance/types.js +43 -0
  302. package/dist/src/init/compliance/types.js.map +1 -0
  303. package/dist/src/init/repo/GitHubAPIClient.d.ts +51 -0
  304. package/dist/src/init/repo/GitHubAPIClient.d.ts.map +1 -0
  305. package/dist/src/init/repo/GitHubAPIClient.js +144 -0
  306. package/dist/src/init/repo/GitHubAPIClient.js.map +1 -0
  307. package/dist/src/init/repo/RepositorySelector.d.ts +45 -0
  308. package/dist/src/init/repo/RepositorySelector.d.ts.map +1 -0
  309. package/dist/src/init/repo/RepositorySelector.js +106 -0
  310. package/dist/src/init/repo/RepositorySelector.js.map +1 -0
  311. package/dist/src/init/repo/types.d.ts +95 -0
  312. package/dist/src/init/repo/types.d.ts.map +1 -0
  313. package/dist/src/init/repo/types.js +25 -0
  314. package/dist/src/init/repo/types.js.map +1 -0
  315. package/dist/src/init/research/CompetitorAnalyzer.d.ts +79 -0
  316. package/dist/src/init/research/CompetitorAnalyzer.d.ts.map +1 -0
  317. package/dist/src/init/research/CompetitorAnalyzer.js +265 -0
  318. package/dist/src/init/research/CompetitorAnalyzer.js.map +1 -0
  319. package/dist/src/init/research/MarketDetector.d.ts +62 -0
  320. package/dist/src/init/research/MarketDetector.d.ts.map +1 -0
  321. package/dist/src/init/research/MarketDetector.js +247 -0
  322. package/dist/src/init/research/MarketDetector.js.map +1 -0
  323. package/dist/src/init/research/OpportunityScorer.d.ts +58 -0
  324. package/dist/src/init/research/OpportunityScorer.d.ts.map +1 -0
  325. package/dist/src/init/research/OpportunityScorer.js +194 -0
  326. package/dist/src/init/research/OpportunityScorer.js.map +1 -0
  327. package/dist/src/init/research/QuestionGenerator.d.ts +68 -0
  328. package/dist/src/init/research/QuestionGenerator.d.ts.map +1 -0
  329. package/dist/src/init/research/QuestionGenerator.js +244 -0
  330. package/dist/src/init/research/QuestionGenerator.js.map +1 -0
  331. package/dist/src/init/research/ReportGenerator.d.ts +36 -0
  332. package/dist/src/init/research/ReportGenerator.d.ts.map +1 -0
  333. package/dist/src/init/research/ReportGenerator.js +125 -0
  334. package/dist/src/init/research/ReportGenerator.js.map +1 -0
  335. package/dist/src/init/research/VisionAnalyzer.d.ts +129 -0
  336. package/dist/src/init/research/VisionAnalyzer.d.ts.map +1 -0
  337. package/dist/src/init/research/VisionAnalyzer.js +212 -0
  338. package/dist/src/init/research/VisionAnalyzer.js.map +1 -0
  339. package/dist/src/init/research/keyword-extractor.d.ts +78 -0
  340. package/dist/src/init/research/keyword-extractor.d.ts.map +1 -0
  341. package/dist/src/init/research/keyword-extractor.js +230 -0
  342. package/dist/src/init/research/keyword-extractor.js.map +1 -0
  343. package/dist/src/init/research/src/config/ConfigManager.d.ts +14 -0
  344. package/dist/src/init/research/src/config/ConfigManager.d.ts.map +1 -0
  345. package/dist/src/init/research/src/config/ConfigManager.js +45 -0
  346. package/dist/src/init/research/src/config/ConfigManager.js.map +1 -0
  347. package/dist/src/init/research/src/config/types.d.ts +102 -0
  348. package/dist/src/init/research/src/config/types.d.ts.map +1 -0
  349. package/dist/src/init/research/src/config/types.js +24 -0
  350. package/dist/src/init/research/src/config/types.js.map +1 -0
  351. package/dist/src/init/research/types.d.ts +183 -0
  352. package/dist/src/init/research/types.d.ts.map +1 -0
  353. package/dist/src/init/research/types.js +65 -0
  354. package/dist/src/init/research/types.js.map +1 -0
  355. package/dist/src/init/team/ServerlessSavingsCalculator.d.ts +136 -0
  356. package/dist/src/init/team/ServerlessSavingsCalculator.d.ts.map +1 -0
  357. package/dist/src/init/team/ServerlessSavingsCalculator.js +360 -0
  358. package/dist/src/init/team/ServerlessSavingsCalculator.js.map +1 -0
  359. package/dist/src/init/team/TeamRecommender.d.ts +122 -0
  360. package/dist/src/init/team/TeamRecommender.d.ts.map +1 -0
  361. package/dist/src/init/team/TeamRecommender.js +405 -0
  362. package/dist/src/init/team/TeamRecommender.js.map +1 -0
  363. package/dist/src/init/team/types.d.ts +95 -0
  364. package/dist/src/init/team/types.d.ts.map +1 -0
  365. package/dist/src/init/team/types.js +23 -0
  366. package/dist/src/init/team/types.js.map +1 -0
  367. package/dist/src/integrations/jira/jira-mapper.d.ts +1 -1
  368. package/dist/src/integrations/jira/jira-mapper.d.ts.map +1 -1
  369. package/dist/src/types/cost-tracking.d.ts +1 -1
  370. package/dist/src/types/cost-tracking.d.ts.map +1 -1
  371. package/dist/src/utils/cost-reporter.d.ts +2 -2
  372. package/dist/src/utils/cost-reporter.d.ts.map +1 -1
  373. package/dist/src/utils/docs-preview/config-generator.d.ts +1 -1
  374. package/dist/src/utils/docs-preview/config-generator.d.ts.map +1 -1
  375. package/dist/src/utils/docs-preview/config-generator.js +1 -1
  376. package/dist/src/utils/docs-preview/docusaurus-setup.d.ts +1 -1
  377. package/dist/src/utils/docs-preview/docusaurus-setup.d.ts.map +1 -1
  378. package/dist/src/utils/docs-preview/docusaurus-setup.js +4 -4
  379. package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
  380. package/dist/src/utils/docs-preview/index.d.ts +6 -6
  381. package/dist/src/utils/docs-preview/index.d.ts.map +1 -1
  382. package/dist/src/utils/docs-preview/index.js +6 -6
  383. package/dist/src/utils/docs-preview/index.js.map +1 -1
  384. package/dist/src/utils/docs-preview/package-installer.d.ts +1 -1
  385. package/dist/src/utils/docs-preview/package-installer.d.ts.map +1 -1
  386. package/dist/src/utils/docs-preview/package-installer.js +1 -1
  387. package/dist/src/utils/docs-preview/package-installer.js.map +1 -1
  388. package/dist/src/utils/docs-preview/server-manager.d.ts +1 -1
  389. package/dist/src/utils/docs-preview/server-manager.d.ts.map +1 -1
  390. package/dist/src/utils/docs-preview/server-manager.js +1 -1
  391. package/dist/src/utils/docs-preview/server-manager.js.map +1 -1
  392. package/dist/src/utils/docs-preview/sidebar-builder.d.ts +1 -1
  393. package/dist/src/utils/docs-preview/sidebar-builder.d.ts.map +1 -1
  394. package/dist/src/utils/generate-skills-index.d.ts +1 -1
  395. package/dist/src/utils/generate-skills-index.js +1 -1
  396. package/dist/src/utils/project-detection.js +1 -1
  397. package/dist/src/utils/project-detection.js.map +1 -1
  398. package/package.json +9 -3
  399. package/plugins/specweave/agents/architect/AGENT.md +605 -0
  400. package/plugins/specweave/agents/infrastructure/AGENT.md +760 -0
  401. package/plugins/specweave/agents/pm/AGENT.md +14 -13
  402. package/plugins/specweave/commands/specweave-check-hooks.md +186 -0
  403. package/plugins/specweave/commands/specweave-plan.md +151 -0
  404. package/plugins/specweave/commands/specweave-sync-acs.md +342 -0
  405. package/plugins/specweave/commands/specweave-validate.md +60 -11
  406. package/plugins/specweave/hooks/lib/update-status-line.sh +8 -4
  407. package/plugins/specweave/hooks/post-increment-change.sh +4 -0
  408. package/plugins/specweave/hooks/post-increment-completion.sh +7 -1
  409. package/plugins/specweave/hooks/post-increment-planning.sh +4 -0
  410. package/plugins/specweave/hooks/post-increment-status-change.sh +4 -0
  411. package/plugins/specweave/hooks/user-prompt-submit.sh +78 -0
  412. package/plugins/specweave/iac-templates/aws-lambda/README.md.hbs +280 -0
  413. package/plugins/specweave/iac-templates/aws-lambda/defaults.json +118 -0
  414. package/plugins/specweave/iac-templates/aws-lambda/environments/dev.defaults.json +46 -0
  415. package/plugins/specweave/iac-templates/aws-lambda/environments/prod.defaults.json +67 -0
  416. package/plugins/specweave/iac-templates/aws-lambda/environments/staging.defaults.json +47 -0
  417. package/plugins/specweave/iac-templates/aws-lambda/main.tf.hbs +241 -0
  418. package/plugins/specweave/iac-templates/aws-lambda/outputs.tf.hbs +61 -0
  419. package/plugins/specweave/iac-templates/aws-lambda/provider.tf.hbs +15 -0
  420. package/plugins/specweave/iac-templates/aws-lambda/variables.tf.hbs +88 -0
  421. package/plugins/specweave/iac-templates/azure-functions/README.md.hbs +315 -0
  422. package/plugins/specweave/iac-templates/azure-functions/defaults.json +65 -0
  423. package/plugins/specweave/iac-templates/azure-functions/environments/dev.defaults.json +30 -0
  424. package/plugins/specweave/iac-templates/azure-functions/environments/prod.defaults.json +34 -0
  425. package/plugins/specweave/iac-templates/azure-functions/environments/staging.defaults.json +31 -0
  426. package/plugins/specweave/iac-templates/azure-functions/iam.tf.hbs +34 -0
  427. package/plugins/specweave/iac-templates/azure-functions/main.tf.hbs +247 -0
  428. package/plugins/specweave/iac-templates/azure-functions/outputs.tf.hbs +72 -0
  429. package/plugins/specweave/iac-templates/azure-functions/provider.tf.hbs +14 -0
  430. package/plugins/specweave/iac-templates/azure-functions/variables.tf.hbs +64 -0
  431. package/plugins/specweave/iac-templates/firebase/README.md.hbs +487 -0
  432. package/plugins/specweave/iac-templates/firebase/defaults.json +55 -0
  433. package/plugins/specweave/iac-templates/firebase/environments/dev.defaults.json +44 -0
  434. package/plugins/specweave/iac-templates/firebase/environments/prod.defaults.json +52 -0
  435. package/plugins/specweave/iac-templates/firebase/environments/staging.defaults.json +43 -0
  436. package/plugins/specweave/iac-templates/firebase/iam.tf.hbs +75 -0
  437. package/plugins/specweave/iac-templates/firebase/main.tf.hbs +297 -0
  438. package/plugins/specweave/iac-templates/firebase/outputs.tf.hbs +67 -0
  439. package/plugins/specweave/iac-templates/firebase/provider.tf.hbs +26 -0
  440. package/plugins/specweave/iac-templates/firebase/variables.tf.hbs +68 -0
  441. package/plugins/specweave/iac-templates/gcp-cloud-functions/README.md.hbs +330 -0
  442. package/plugins/specweave/iac-templates/gcp-cloud-functions/defaults.json +69 -0
  443. package/plugins/specweave/iac-templates/gcp-cloud-functions/environments/dev.defaults.json +33 -0
  444. package/plugins/specweave/iac-templates/gcp-cloud-functions/environments/prod.defaults.json +40 -0
  445. package/plugins/specweave/iac-templates/gcp-cloud-functions/environments/staging.defaults.json +33 -0
  446. package/plugins/specweave/iac-templates/gcp-cloud-functions/iam.tf.hbs +54 -0
  447. package/plugins/specweave/iac-templates/gcp-cloud-functions/main.tf.hbs +211 -0
  448. package/plugins/specweave/iac-templates/gcp-cloud-functions/outputs.tf.hbs +44 -0
  449. package/plugins/specweave/iac-templates/gcp-cloud-functions/provider.tf.hbs +14 -0
  450. package/plugins/specweave/iac-templates/gcp-cloud-functions/variables.tf.hbs +82 -0
  451. package/plugins/specweave/iac-templates/supabase/README.md.hbs +534 -0
  452. package/plugins/specweave/iac-templates/supabase/defaults.json +69 -0
  453. package/plugins/specweave/iac-templates/supabase/environments/dev.defaults.json +55 -0
  454. package/plugins/specweave/iac-templates/supabase/environments/prod.defaults.json +75 -0
  455. package/plugins/specweave/iac-templates/supabase/environments/staging.defaults.json +54 -0
  456. package/plugins/specweave/iac-templates/supabase/iam.tf.hbs +146 -0
  457. package/plugins/specweave/iac-templates/supabase/main.tf.hbs +310 -0
  458. package/plugins/specweave/iac-templates/supabase/outputs.tf.hbs +74 -0
  459. package/plugins/specweave/iac-templates/supabase/provider.tf.hbs +19 -0
  460. package/plugins/specweave/iac-templates/supabase/variables.tf.hbs +78 -0
  461. package/plugins/specweave/knowledge-base/serverless/FRESHNESS.md +69 -0
  462. package/plugins/specweave/knowledge-base/serverless/learning-paths.json +865 -0
  463. package/plugins/specweave/knowledge-base/serverless/platforms/aws-lambda.json +41 -0
  464. package/plugins/specweave/knowledge-base/serverless/platforms/azure-functions.json +41 -0
  465. package/plugins/specweave/knowledge-base/serverless/platforms/firebase.json +46 -0
  466. package/plugins/specweave/knowledge-base/serverless/platforms/gcp-cloud-functions.json +41 -0
  467. package/plugins/specweave/knowledge-base/serverless/platforms/supabase.json +41 -0
  468. package/plugins/specweave/knowledge-base/serverless/schema.json +155 -0
  469. package/plugins/specweave/lib/hooks/auto-transition.js +50 -0
  470. package/plugins/specweave/lib/hooks/auto-transition.ts +84 -0
  471. package/plugins/specweave/lib/hooks/invoke-translator-skill.js +1 -1
  472. package/plugins/specweave/lib/hooks/invoke-translator-skill.ts +1 -1
  473. package/plugins/specweave/lib/hooks/sync-living-docs.js +4 -31
  474. package/plugins/specweave/lib/hooks/{sync-living-docs.ts → sync-living-docs.ts.DISABLED} +9 -48
  475. package/plugins/specweave/lib/hooks/translate-file.js +1 -1
  476. package/plugins/specweave/lib/hooks/translate-file.ts +1 -1
  477. package/plugins/specweave/lib/hooks/update-ac-status.js +24 -75
  478. package/plugins/specweave/lib/hooks/update-ac-status.ts +46 -135
  479. package/plugins/specweave/lib/hooks/update-tasks-md.js +115 -3
  480. package/plugins/specweave/lib/hooks/update-tasks-md.ts +182 -10
  481. package/plugins/specweave/lib/utils/validate-dev-setup.sh +133 -0
  482. package/plugins/specweave/skills/increment-planner/SKILL.md +25 -15
  483. package/plugins/specweave/skills/serverless-recommender/SKILL.md +368 -0
  484. package/plugins/specweave/templates/iac/aws-lambda/templates/iam.tf.hbs +137 -0
  485. package/plugins/specweave/templates/iac/aws-lambda/templates/main.tf.hbs +216 -0
  486. package/plugins/specweave-github/lib/IssueStateManager.js +117 -0
  487. package/plugins/specweave-github/lib/IssueStateManager.ts +231 -0
  488. package/plugins/specweave-github/lib/user-story-issue-builder.js +7 -0
  489. package/plugins/specweave-github/lib/user-story-issue-builder.ts +11 -0
  490. package/plugins/specweave-ui/.mcp.json +0 -10
  491. package/plugins/specweave-ui/README.md +26 -26
  492. package/plugins/specweave-ui/skills/browser-automation/SKILL.md +31 -18
  493. package/src/templates/tasks.md.template +51 -33
  494. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts +0 -89
  495. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts.map +0 -1
  496. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.js +0 -226
  497. package/dist/plugins/specweave/lib/hooks/git-diff-analyzer.js.map +0 -1
  498. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts +0 -60
  499. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts.map +0 -1
  500. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.js +0 -201
  501. package/dist/plugins/specweave/lib/hooks/invoke-translator-skill.js.map +0 -1
  502. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts +0 -42
  503. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts.map +0 -1
  504. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js +0 -123
  505. package/dist/plugins/specweave/lib/hooks/prepare-reflection-context.js.map +0 -1
  506. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.d.ts +0 -45
  507. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.d.ts.map +0 -1
  508. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.js +0 -132
  509. package/dist/plugins/specweave/lib/hooks/reflection-config-loader.js.map +0 -1
  510. package/dist/plugins/specweave/lib/hooks/reflection-parser.d.ts +0 -33
  511. package/dist/plugins/specweave/lib/hooks/reflection-parser.d.ts.map +0 -1
  512. package/dist/plugins/specweave/lib/hooks/reflection-parser.js +0 -419
  513. package/dist/plugins/specweave/lib/hooks/reflection-parser.js.map +0 -1
  514. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts +0 -56
  515. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts.map +0 -1
  516. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.js +0 -239
  517. package/dist/plugins/specweave/lib/hooks/reflection-prompt-builder.js.map +0 -1
  518. package/dist/plugins/specweave/lib/hooks/reflection-storage.d.ts +0 -64
  519. package/dist/plugins/specweave/lib/hooks/reflection-storage.d.ts.map +0 -1
  520. package/dist/plugins/specweave/lib/hooks/reflection-storage.js +0 -305
  521. package/dist/plugins/specweave/lib/hooks/reflection-storage.js.map +0 -1
  522. package/dist/plugins/specweave/lib/hooks/run-self-reflection.d.ts +0 -43
  523. package/dist/plugins/specweave/lib/hooks/run-self-reflection.d.ts.map +0 -1
  524. package/dist/plugins/specweave/lib/hooks/run-self-reflection.js +0 -203
  525. package/dist/plugins/specweave/lib/hooks/run-self-reflection.js.map +0 -1
  526. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts +0 -32
  527. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +0 -1
  528. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +0 -405
  529. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +0 -1
  530. package/dist/plugins/specweave/lib/hooks/translate-file.d.ts +0 -59
  531. package/dist/plugins/specweave/lib/hooks/translate-file.d.ts.map +0 -1
  532. package/dist/plugins/specweave/lib/hooks/translate-file.js +0 -350
  533. package/dist/plugins/specweave/lib/hooks/translate-file.js.map +0 -1
  534. package/dist/plugins/specweave/lib/hooks/translate-living-docs.d.ts +0 -13
  535. package/dist/plugins/specweave/lib/hooks/translate-living-docs.d.ts.map +0 -1
  536. package/dist/plugins/specweave/lib/hooks/translate-living-docs.js +0 -175
  537. package/dist/plugins/specweave/lib/hooks/translate-living-docs.js.map +0 -1
  538. package/dist/plugins/specweave/lib/hooks/types/reflection-types.d.ts +0 -164
  539. package/dist/plugins/specweave/lib/hooks/types/reflection-types.d.ts.map +0 -1
  540. package/dist/plugins/specweave/lib/hooks/types/reflection-types.js +0 -73
  541. package/dist/plugins/specweave/lib/hooks/types/reflection-types.js.map +0 -1
  542. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts +0 -21
  543. package/dist/plugins/specweave/lib/hooks/update-ac-status.d.ts.map +0 -1
  544. package/dist/plugins/specweave/lib/hooks/update-ac-status.js +0 -162
  545. package/dist/plugins/specweave/lib/hooks/update-ac-status.js.map +0 -1
  546. package/dist/plugins/specweave/lib/hooks/update-tasks-md.d.ts +0 -29
  547. package/dist/plugins/specweave/lib/hooks/update-tasks-md.d.ts.map +0 -1
  548. package/dist/plugins/specweave/lib/hooks/update-tasks-md.js +0 -203
  549. package/dist/plugins/specweave/lib/hooks/update-tasks-md.js.map +0 -1
  550. package/dist/src/core/living-docs/spec-distributor.d.ts +0 -180
  551. package/dist/src/core/living-docs/spec-distributor.d.ts.map +0 -1
  552. package/dist/src/core/living-docs/spec-distributor.js +0 -1840
  553. package/dist/src/core/living-docs/spec-distributor.js.map +0 -1
@@ -1,350 +0,0 @@
1
- /**
2
- * File Translation CLI Utility
3
- *
4
- * Translates a single file from detected source language to target language
5
- * using the translation utilities and LLM invocation.
6
- *
7
- * This script is called from:
8
- * - Post-increment-planning hook (auto-translate spec.md, plan.md, tasks.md)
9
- * - Post-task-completion hook (auto-translate living docs)
10
- * - Manual /specweave:translate command
11
- *
12
- * Usage:
13
- * node translate-file.js <file-path> [--target-lang en] [--preview]
14
- *
15
- * @see src/utils/translation.ts
16
- * @see .specweave/increments/0006-llm-native-i18n/reports/DESIGN-POST-GENERATION-TRANSLATION.md
17
- */
18
- import fs from 'fs-extra';
19
- import { detectLanguage, prepareTranslation, postProcessTranslation, validateTranslation, getLanguageName, formatCost, } from '../../../../src/utils/translation.js';
20
- /**
21
- * Main translation function
22
- *
23
- * @param options - CLI options
24
- * @returns Translation result
25
- */
26
- export async function translateFile(options) {
27
- const { filePath, targetLang, preview, verbose } = options;
28
- // 1. Validate file exists
29
- if (!await fs.pathExists(filePath)) {
30
- throw new Error(`File not found: ${filePath}`);
31
- }
32
- if (verbose) {
33
- console.log(`📄 Reading file: ${filePath}`);
34
- }
35
- // 2. Read original content
36
- const originalContent = await fs.readFile(filePath, 'utf-8');
37
- // 3. Detect source language
38
- const detectionResult = detectLanguage(originalContent);
39
- const sourceLanguage = detectionResult.language;
40
- if (verbose) {
41
- console.log(`🔍 Detected language: ${getLanguageName(sourceLanguage)} (confidence: ${(detectionResult.confidence * 100).toFixed(0)}%)`);
42
- }
43
- // 4. Check if already in target language
44
- if (sourceLanguage === targetLang) {
45
- if (verbose) {
46
- console.log(`✅ File already in ${getLanguageName(targetLang)}, skipping translation`);
47
- }
48
- return {
49
- success: true,
50
- filePath,
51
- sourceLanguage,
52
- targetLanguage: targetLang,
53
- warnings: [`Already in ${getLanguageName(targetLang)}`],
54
- cost: 0,
55
- tokensUsed: 0,
56
- };
57
- }
58
- // 5. Check if source language is unknown
59
- if (sourceLanguage === 'unknown') {
60
- if (verbose) {
61
- console.warn(`⚠️ Could not detect language, assuming English`);
62
- }
63
- // Assume English if detection fails
64
- return {
65
- success: false,
66
- filePath,
67
- sourceLanguage: 'unknown',
68
- targetLanguage: targetLang,
69
- warnings: ['Language detection failed - file may already be in English or mixed language'],
70
- cost: 0,
71
- tokensUsed: 0,
72
- };
73
- }
74
- // 6. Prepare translation
75
- if (verbose) {
76
- console.log(`🌐 Translating from ${getLanguageName(sourceLanguage)} to ${getLanguageName(targetLang)}...`);
77
- console.log(`💰 Estimated cost: ${formatCost(0.003)} (using Haiku)`);
78
- }
79
- const prepared = prepareTranslation(originalContent, sourceLanguage, targetLang);
80
- // 7. Invoke LLM for translation
81
- // NOTE: This is where we call the actual LLM
82
- // For now, we'll create a simple prompt that can be used with Claude Code's Task tool
83
- const translatedContent = await invokeLLMTranslation(prepared.prompt, verbose);
84
- // 8. Post-process translation
85
- const finalContent = postProcessTranslation(translatedContent, prepared.preserved);
86
- // 9. Validate translation
87
- const warnings = validateTranslation(originalContent, finalContent);
88
- if (warnings.length > 0 && verbose) {
89
- console.warn(`⚠️ Translation warnings:`);
90
- warnings.forEach(w => console.warn(` - ${w}`));
91
- }
92
- // 10. Preview or write
93
- if (preview) {
94
- if (verbose) {
95
- console.log(`\n📋 PREVIEW (first 500 chars):\n`);
96
- console.log(finalContent.substring(0, 500));
97
- console.log(`\n... (${finalContent.length} total characters)\n`);
98
- }
99
- return {
100
- success: true,
101
- filePath,
102
- sourceLanguage,
103
- targetLanguage: targetLang,
104
- warnings,
105
- cost: prepared.estimatedCost,
106
- tokensUsed: prepared.estimatedTokens,
107
- preview: finalContent,
108
- };
109
- }
110
- else {
111
- // Write translated content back to file
112
- await fs.writeFile(filePath, finalContent, 'utf-8');
113
- if (verbose) {
114
- console.log(`✅ Translation complete: ${filePath}`);
115
- console.log(` Tokens used: ${prepared.estimatedTokens.toLocaleString()}`);
116
- console.log(` Cost: ${formatCost(prepared.estimatedCost)}`);
117
- }
118
- return {
119
- success: true,
120
- filePath,
121
- sourceLanguage,
122
- targetLanguage: targetLang,
123
- warnings,
124
- cost: prepared.estimatedCost,
125
- tokensUsed: prepared.estimatedTokens,
126
- };
127
- }
128
- }
129
- /**
130
- * Invokes LLM for translation using Anthropic API
131
- *
132
- * PRODUCTION IMPLEMENTATION:
133
- * 1. Checks for ANTHROPIC_API_KEY in environment
134
- * 2. If available: Uses Anthropic API directly (fully automatic)
135
- * 3. If not available: Provides clear instructions for manual translation
136
- *
137
- * @param prompt - Translation prompt
138
- * @param verbose - Show detailed output
139
- * @returns Translated content
140
- */
141
- async function invokeLLMTranslation(prompt, verbose) {
142
- // Extract the content to translate (between --- markers)
143
- const contentMatch = prompt.match(/SOURCE DOCUMENT[^\n]*:\n---\n([\s\S]*?)\n---/);
144
- const contentToTranslate = contentMatch ? contentMatch[1] : '';
145
- // Check if ANTHROPIC_API_KEY is available
146
- const apiKey = process.env.ANTHROPIC_API_KEY;
147
- if (apiKey) {
148
- // Fully automatic translation using Anthropic API
149
- if (verbose) {
150
- console.log(`\n🤖 Translating via Anthropic API (Haiku model)...`);
151
- }
152
- try {
153
- // Dynamic import of Anthropic SDK (allows graceful fallback if not installed)
154
- const Anthropic = await import('@anthropic-ai/sdk').then(m => m.default);
155
- const anthropic = new Anthropic({
156
- apiKey,
157
- });
158
- const message = await anthropic.messages.create({
159
- model: 'claude-3-haiku-20240307',
160
- max_tokens: 8000,
161
- messages: [
162
- {
163
- role: 'user',
164
- content: prompt,
165
- },
166
- ],
167
- });
168
- // Extract translated content from response
169
- const translatedContent = message.content[0].type === 'text'
170
- ? message.content[0].text
171
- : contentToTranslate;
172
- if (verbose) {
173
- console.log(`✅ Translation complete via API`);
174
- console.log(` Model: claude-3-haiku-20240307`);
175
- console.log(` Input tokens: ${message.usage.input_tokens}`);
176
- console.log(` Output tokens: ${message.usage.output_tokens}`);
177
- console.log(` Cost: ~$${((message.usage.input_tokens * 0.25 + message.usage.output_tokens * 1.25) / 1000000).toFixed(4)}`);
178
- }
179
- return translatedContent;
180
- }
181
- catch (error) {
182
- console.error(`\n❌ API translation failed: ${error.message}`);
183
- console.error(` Falling back to manual translation instructions\n`);
184
- // Fall through to manual instructions
185
- }
186
- }
187
- // Fallback: Manual translation instructions
188
- const isInteractive = process.stdout.isTTY && process.env.CLAUDE_CODE_SESSION;
189
- if (isInteractive) {
190
- // Interactive mode: Output prompt for Claude to process
191
- if (verbose) {
192
- console.log(`\n🤖 Invoking Claude Code translator skill...`);
193
- console.log(` (Tip: Set ANTHROPIC_API_KEY for fully automatic translation)\n`);
194
- }
195
- // Output the translation prompt
196
- // The translator skill should auto-activate on this prompt
197
- console.log('\n' + '='.repeat(80));
198
- console.log('TRANSLATION REQUEST (translator skill will auto-activate):');
199
- console.log('='.repeat(80));
200
- console.log(prompt);
201
- console.log('='.repeat(80) + '\n');
202
- // In interactive mode, we expect the user/Claude to provide translation
203
- // For now, return a marker indicating manual intervention needed
204
- return `<!-- ⚠️ TRANSLATION IN PROGRESS - Manual translation required via translator skill -->\n\n${contentToTranslate}`;
205
- }
206
- else {
207
- // Non-interactive/automated mode: Provide clear instructions
208
- if (verbose) {
209
- console.log(`\n🤖 Generating translation (automated mode)...`);
210
- }
211
- console.error('\n⚠️ AUTO-TRANSLATION REQUIRES MANUAL STEP:');
212
- console.error(' Option A (Recommended): Set ANTHROPIC_API_KEY environment variable');
213
- console.error(' Option B: Run /specweave:translate <file-path>');
214
- console.error(' Option C: Manually translate the content\n');
215
- // Return original content with clear marker
216
- return `<!-- ⚠️ AUTO-TRANSLATION PENDING -->\n<!-- Set ANTHROPIC_API_KEY for automatic translation -->\n<!-- Or run: /specweave:translate to complete -->\n<!-- Original content below -->\n\n${contentToTranslate}`;
217
- }
218
- }
219
- /**
220
- * Batch translate multiple files
221
- *
222
- * @param filePaths - Array of file paths to translate
223
- * @param targetLang - Target language
224
- * @param preview - Preview mode
225
- * @param verbose - Verbose output
226
- * @returns Array of translation results
227
- */
228
- export async function batchTranslateFiles(filePaths, targetLang = 'en', preview = false, verbose = false) {
229
- const results = [];
230
- if (verbose) {
231
- console.log(`\n🔄 Batch translating ${filePaths.length} file(s) to ${getLanguageName(targetLang)}...\n`);
232
- }
233
- for (const filePath of filePaths) {
234
- try {
235
- const result = await translateFile({
236
- filePath,
237
- targetLang,
238
- preview,
239
- verbose,
240
- });
241
- results.push(result);
242
- }
243
- catch (error) {
244
- if (verbose) {
245
- console.error(`❌ Error translating ${filePath}: ${error.message}`);
246
- }
247
- results.push({
248
- success: false,
249
- filePath,
250
- sourceLanguage: 'unknown',
251
- targetLanguage: targetLang,
252
- warnings: [error.message],
253
- cost: 0,
254
- tokensUsed: 0,
255
- });
256
- }
257
- }
258
- // Summary
259
- if (verbose) {
260
- const successful = results.filter(r => r.success).length;
261
- const totalCost = results.reduce((sum, r) => sum + r.cost, 0);
262
- const totalTokens = results.reduce((sum, r) => sum + r.tokensUsed, 0);
263
- console.log(`\n📊 Batch Translation Summary:`);
264
- console.log(` Successful: ${successful}/${filePaths.length}`);
265
- console.log(` Total tokens: ${totalTokens.toLocaleString()}`);
266
- console.log(` Total cost: ${formatCost(totalCost)}`);
267
- }
268
- return results;
269
- }
270
- /**
271
- * Parse CLI arguments
272
- */
273
- function parseArgs() {
274
- const args = process.argv.slice(2);
275
- if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
276
- console.log(`
277
- Translation CLI Utility
278
-
279
- Usage:
280
- node translate-file.js <file-path> [options]
281
-
282
- Options:
283
- --target-lang <code> Target language (default: en)
284
- --preview Preview translation without writing to file
285
- --verbose, -v Show detailed output
286
- --help, -h Show this help message
287
-
288
- Supported Languages:
289
- en (English), ru (Russian), es (Spanish), zh (Chinese),
290
- de (German), fr (French), ja (Japanese), ko (Korean),
291
- pt (Portuguese), ar (Arabic), he (Hebrew)
292
-
293
- Examples:
294
- # Translate Russian file to English
295
- node translate-file.js .specweave/increments/0001/spec.md
296
-
297
- # Preview translation
298
- node translate-file.js spec.md --preview --verbose
299
-
300
- # Translate to Spanish
301
- node translate-file.js plan.md --target-lang es
302
- `.trim());
303
- process.exit(0);
304
- }
305
- const filePath = args[0];
306
- let targetLang = 'en';
307
- let preview = false;
308
- let verbose = false;
309
- // Parse options
310
- for (let i = 1; i < args.length; i++) {
311
- const arg = args[i];
312
- if (arg === '--target-lang' && args[i + 1]) {
313
- targetLang = args[i + 1];
314
- i++;
315
- }
316
- else if (arg === '--preview') {
317
- preview = true;
318
- }
319
- else if (arg === '--verbose' || arg === '-v') {
320
- verbose = true;
321
- }
322
- }
323
- return {
324
- filePath,
325
- targetLang,
326
- preview,
327
- verbose,
328
- };
329
- }
330
- /**
331
- * CLI entry point
332
- */
333
- async function main() {
334
- try {
335
- const options = parseArgs();
336
- const result = await translateFile(options);
337
- // Exit with appropriate code
338
- process.exit(result.success ? 0 : 1);
339
- }
340
- catch (error) {
341
- console.error(`❌ Translation failed: ${error.message}`);
342
- process.exit(1);
343
- }
344
- }
345
- // Check if running as main module (ESM)
346
- const isMainModule = import.meta.url === `file://${process.argv[1]}`;
347
- if (isMainModule) {
348
- main();
349
- }
350
- //# sourceMappingURL=translate-file.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"translate-file.js","sourceRoot":"","sources":["../../../../../plugins/specweave/lib/hooks/translate-file.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * Living Docs Auto-Translation
3
- *
4
- * Automatically translates changed documentation files when language != 'en'
5
- * and auto-translation is enabled in config.
6
- *
7
- * This runs as part of the post-task-completion hook.
8
- */
9
- /**
10
- * Main function: Translate changed living docs
11
- */
12
- export declare function translateLivingDocs(incrementId: string): Promise<void>;
13
- //# sourceMappingURL=translate-living-docs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"translate-living-docs.d.ts","sourceRoot":"","sources":["../../../../../plugins/specweave/lib/hooks/translate-living-docs.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAeH;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsD5E"}
@@ -1,175 +0,0 @@
1
- /**
2
- * Living Docs Auto-Translation
3
- *
4
- * Automatically translates changed documentation files when language != 'en'
5
- * and auto-translation is enabled in config.
6
- *
7
- * This runs as part of the post-task-completion hook.
8
- */
9
- import { execSync } from 'child_process';
10
- import fs from 'fs-extra';
11
- /**
12
- * Main function: Translate changed living docs
13
- */
14
- export async function translateLivingDocs(incrementId) {
15
- try {
16
- // 1. Load config
17
- const configPath = '.specweave/config.json';
18
- if (!fs.existsSync(configPath)) {
19
- console.log('[translate-living-docs] No config found, skipping translation');
20
- return;
21
- }
22
- const config = await fs.readJson(configPath);
23
- // 2. Check if translation is enabled
24
- if (!config.language || config.language === 'en') {
25
- // Already English or no language set - skip translation
26
- console.log('[translate-living-docs] Project language is English, skipping translation');
27
- return;
28
- }
29
- if (!config.translation?.autoTranslateLivingDocs) {
30
- // Auto-translation disabled
31
- console.log('[translate-living-docs] Auto-translation disabled in config');
32
- return;
33
- }
34
- // Always translate TO English for maintainability (not to user's language!)
35
- console.log(`[translate-living-docs] Auto-translating docs from ${config.language} to English...`);
36
- // 3. Detect changed documentation files
37
- const changedFiles = await detectChangedDocs();
38
- if (changedFiles.length === 0) {
39
- console.log('[translate-living-docs] No documentation changes detected');
40
- return;
41
- }
42
- console.log(`[translate-living-docs] Found ${changedFiles.length} changed file(s)`);
43
- // 4. Translate each file TO English (always 'en', not config.language!)
44
- for (const file of changedFiles) {
45
- try {
46
- // Always translate TO English for maintainability
47
- await translateFile(file, 'en', config.translation);
48
- console.log(`[translate-living-docs] ✓ Translated: ${file} (${config.language} → en)`);
49
- }
50
- catch (error) {
51
- console.warn(`[translate-living-docs] ⚠️ Failed to translate ${file}: ${error.message}`);
52
- // Continue with other files
53
- }
54
- }
55
- console.log(`[translate-living-docs] ✅ Translation complete (${changedFiles.length} files)`);
56
- }
57
- catch (error) {
58
- console.error(`[translate-living-docs] Error: ${error.message}`);
59
- // Don't throw - translation errors shouldn't break the workflow
60
- }
61
- }
62
- /**
63
- * Detect changed documentation files using git diff
64
- */
65
- async function detectChangedDocs() {
66
- try {
67
- // Get list of changed files in .specweave/docs/
68
- const output = execSync('git diff --name-only .specweave/docs/', { encoding: 'utf-8', stdio: ['pipe', 'pipe', 'ignore'] });
69
- // Filter for markdown files only
70
- const files = output
71
- .split('\n')
72
- .filter(f => f.trim() && f.endsWith('.md'))
73
- .map(f => f.trim());
74
- return files;
75
- }
76
- catch (error) {
77
- // git diff might fail if not a git repo or no changes
78
- return [];
79
- }
80
- }
81
- /**
82
- * Translate a single file FROM user's language TO English
83
- *
84
- * NOTE: This is a simplified implementation that creates a translation prompt.
85
- * In a real implementation with Claude Code, the translator skill would auto-activate
86
- * and handle the translation. For now, we'll add a marker comment to indicate
87
- * the file needs translation.
88
- *
89
- * @param filePath - File to translate
90
- * @param targetLanguage - Target language (should always be 'en' for living docs)
91
- * @param translationConfig - Translation settings
92
- */
93
- async function translateFile(filePath, targetLanguage, // Should always be 'en' for living docs
94
- translationConfig) {
95
- // Read original content
96
- const originalContent = await fs.readFile(filePath, 'utf-8');
97
- // Check if file already has translation marker (avoid re-translating)
98
- if (originalContent.includes(`<!-- Translated to ${targetLanguage} -->`)) {
99
- console.log(`[translate-living-docs] File already translated, skipping: ${filePath}`);
100
- return;
101
- }
102
- // For now, we'll create a translation request that the LLM can act on
103
- // In a production system with Claude Code integration, this would invoke
104
- // the translator skill directly
105
- const translationPrompt = generateTranslationPrompt(originalContent, targetLanguage, translationConfig);
106
- // TODO: In full implementation, this would:
107
- // 1. Invoke translator skill via Claude Code API
108
- // 2. Get translated content back
109
- // 3. Write to file
110
- // For MVP, we'll add a comment indicating translation is needed
111
- const markedContent = `<!-- Translation needed to ${targetLanguage} -->\n<!-- Original content below -->\n\n${originalContent}`;
112
- // Write back (commented out to avoid breaking existing docs)
113
- // await fs.writeFile(filePath, markedContent, 'utf-8');
114
- console.log(`[translate-living-docs] Translation prompt generated for: ${filePath}`);
115
- }
116
- /**
117
- * Generate translation prompt for LLM
118
- */
119
- function generateTranslationPrompt(content, targetLanguage, translationConfig) {
120
- const keepFrameworkTerms = translationConfig?.keepFrameworkTerms !== false;
121
- const keepTechnicalTerms = translationConfig?.keepTechnicalTerms !== false;
122
- return `
123
- Translate the following markdown documentation to ${getLanguageName(targetLanguage)}.
124
-
125
- CRITICAL RULES:
126
- ${keepFrameworkTerms ? '- Keep framework terms in English: increment, spec.md, plan.md, tasks.md, COMPLETION-SUMMARY.md, living docs, PM gate, RFC, ADR, PRD, HLD, LLD' : ''}
127
- ${keepTechnicalTerms ? '- Keep technical terms in English: TypeScript, npm, git, Docker, Kubernetes, API, CLI, REST, JSON, HTTP' : ''}
128
- - Preserve ALL markdown formatting (headers, lists, code blocks, links)
129
- - Do NOT translate code blocks
130
- - Do NOT translate YAML frontmatter keys (only values if applicable)
131
- - Preserve all emojis
132
- - Preserve all file paths and URLs
133
-
134
- Content to translate:
135
- ---
136
- ${content}
137
- ---
138
-
139
- Translated version:
140
- `.trim();
141
- }
142
- /**
143
- * Get human-readable language name
144
- */
145
- function getLanguageName(code) {
146
- const names = {
147
- en: 'English',
148
- ru: 'Russian (Русский)',
149
- es: 'Spanish (Español)',
150
- zh: 'Chinese (中文)',
151
- de: 'German (Deutsch)',
152
- fr: 'French (Français)',
153
- ja: 'Japanese (日本語)',
154
- ko: 'Korean (한국어)',
155
- pt: 'Portuguese (Português)',
156
- };
157
- return names[code] || code;
158
- }
159
- /**
160
- * CLI entry point (for standalone execution)
161
- */
162
- async function main() {
163
- const args = process.argv.slice(2);
164
- const incrementId = args[0] || 'current';
165
- await translateLivingDocs(incrementId);
166
- }
167
- // Check if running as main module
168
- const isMainModule = import.meta.url === `file://${process.argv[1]}`;
169
- if (isMainModule) {
170
- main().catch(error => {
171
- console.error('[translate-living-docs] Fatal error:', error);
172
- process.exit(1);
173
- });
174
- }
175
- //# sourceMappingURL=translate-living-docs.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"translate-living-docs.js","sourceRoot":"","sources":["../../../../../plugins/specweave/lib/hooks/translate-living-docs.ts"],"names":[],"mappings":"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"}