@planu/cli 0.91.0 → 0.93.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 (801) hide show
  1. package/dist/config/domain-best-practices.json +413 -0
  2. package/dist/config/ide-registry.json +25 -0
  3. package/dist/config/license-plans.json +59 -2
  4. package/dist/engine/ai-integration/agent-frameworks/autogen-exporter.d.ts +11 -0
  5. package/dist/engine/ai-integration/agent-frameworks/autogen-exporter.d.ts.map +1 -0
  6. package/dist/engine/ai-integration/agent-frameworks/autogen-exporter.js +52 -0
  7. package/dist/engine/ai-integration/agent-frameworks/autogen-exporter.js.map +1 -0
  8. package/dist/engine/ai-integration/agent-frameworks/crewai-exporter.d.ts +11 -0
  9. package/dist/engine/ai-integration/agent-frameworks/crewai-exporter.d.ts.map +1 -0
  10. package/dist/engine/ai-integration/agent-frameworks/crewai-exporter.js +89 -0
  11. package/dist/engine/ai-integration/agent-frameworks/crewai-exporter.js.map +1 -0
  12. package/dist/engine/ai-integration/agent-frameworks/index.d.ts +4 -0
  13. package/dist/engine/ai-integration/agent-frameworks/index.d.ts.map +1 -0
  14. package/dist/engine/ai-integration/agent-frameworks/index.js +5 -0
  15. package/dist/engine/ai-integration/agent-frameworks/index.js.map +1 -0
  16. package/dist/engine/ai-integration/agent-frameworks/langgraph-exporter.d.ts +11 -0
  17. package/dist/engine/ai-integration/agent-frameworks/langgraph-exporter.d.ts.map +1 -0
  18. package/dist/engine/ai-integration/agent-frameworks/langgraph-exporter.js +71 -0
  19. package/dist/engine/ai-integration/agent-frameworks/langgraph-exporter.js.map +1 -0
  20. package/dist/engine/ai-integration/agents-md/generator.d.ts +11 -0
  21. package/dist/engine/ai-integration/agents-md/generator.d.ts.map +1 -0
  22. package/dist/engine/ai-integration/agents-md/generator.js +139 -0
  23. package/dist/engine/ai-integration/agents-md/generator.js.map +1 -0
  24. package/dist/engine/ai-integration/agents-md/index.d.ts +3 -0
  25. package/dist/engine/ai-integration/agents-md/index.d.ts.map +1 -0
  26. package/dist/engine/ai-integration/agents-md/index.js +4 -0
  27. package/dist/engine/ai-integration/agents-md/index.js.map +1 -0
  28. package/dist/engine/ai-integration/agents-md/updater.d.ts +10 -0
  29. package/dist/engine/ai-integration/agents-md/updater.d.ts.map +1 -0
  30. package/dist/engine/ai-integration/agents-md/updater.js +33 -0
  31. package/dist/engine/ai-integration/agents-md/updater.js.map +1 -0
  32. package/dist/engine/ai-integration/aider/aider-config-generator.d.ts +5 -0
  33. package/dist/engine/ai-integration/aider/aider-config-generator.d.ts.map +1 -0
  34. package/dist/engine/ai-integration/aider/aider-config-generator.js +34 -0
  35. package/dist/engine/ai-integration/aider/aider-config-generator.js.map +1 -0
  36. package/dist/engine/ai-integration/cline/clinerules-generator.d.ts +5 -0
  37. package/dist/engine/ai-integration/cline/clinerules-generator.d.ts.map +1 -0
  38. package/dist/engine/ai-integration/cline/clinerules-generator.js +86 -0
  39. package/dist/engine/ai-integration/cline/clinerules-generator.js.map +1 -0
  40. package/dist/engine/ai-integration/cline/index.d.ts +3 -0
  41. package/dist/engine/ai-integration/cline/index.d.ts.map +1 -0
  42. package/dist/engine/ai-integration/cline/index.js +3 -0
  43. package/dist/engine/ai-integration/cline/index.js.map +1 -0
  44. package/dist/engine/ai-integration/codex/agent-roles-generator.d.ts +12 -0
  45. package/dist/engine/ai-integration/codex/agent-roles-generator.d.ts.map +1 -0
  46. package/dist/engine/ai-integration/codex/agent-roles-generator.js +62 -0
  47. package/dist/engine/ai-integration/codex/agent-roles-generator.js.map +1 -0
  48. package/dist/engine/ai-integration/codex/agents-md-generator.d.ts +10 -0
  49. package/dist/engine/ai-integration/codex/agents-md-generator.d.ts.map +1 -0
  50. package/dist/engine/ai-integration/codex/agents-md-generator.js +114 -0
  51. package/dist/engine/ai-integration/codex/agents-md-generator.js.map +1 -0
  52. package/dist/engine/ai-integration/codex/config-generator.d.ts +9 -0
  53. package/dist/engine/ai-integration/codex/config-generator.d.ts.map +1 -0
  54. package/dist/engine/ai-integration/codex/config-generator.js +66 -0
  55. package/dist/engine/ai-integration/codex/config-generator.js.map +1 -0
  56. package/dist/engine/ai-integration/codex/hooks-generator.d.ts +6 -0
  57. package/dist/engine/ai-integration/codex/hooks-generator.d.ts.map +1 -0
  58. package/dist/engine/ai-integration/codex/hooks-generator.js +55 -0
  59. package/dist/engine/ai-integration/codex/hooks-generator.js.map +1 -0
  60. package/dist/engine/ai-integration/codex/index.d.ts +5 -0
  61. package/dist/engine/ai-integration/codex/index.d.ts.map +1 -0
  62. package/dist/engine/ai-integration/codex/index.js +6 -0
  63. package/dist/engine/ai-integration/codex/index.js.map +1 -0
  64. package/dist/engine/ai-integration/continue/ai-checks-generator.d.ts +12 -0
  65. package/dist/engine/ai-integration/continue/ai-checks-generator.d.ts.map +1 -0
  66. package/dist/engine/ai-integration/continue/ai-checks-generator.js +63 -0
  67. package/dist/engine/ai-integration/continue/ai-checks-generator.js.map +1 -0
  68. package/dist/engine/ai-integration/continue/config-generator.d.ts +5 -0
  69. package/dist/engine/ai-integration/continue/config-generator.d.ts.map +1 -0
  70. package/dist/engine/ai-integration/continue/config-generator.js +56 -0
  71. package/dist/engine/ai-integration/continue/config-generator.js.map +1 -0
  72. package/dist/engine/ai-integration/continue/index.d.ts +5 -0
  73. package/dist/engine/ai-integration/continue/index.d.ts.map +1 -0
  74. package/dist/engine/ai-integration/continue/index.js +4 -0
  75. package/dist/engine/ai-integration/continue/index.js.map +1 -0
  76. package/dist/engine/ai-integration/cursor/cursorrules-generator.d.ts +5 -0
  77. package/dist/engine/ai-integration/cursor/cursorrules-generator.d.ts.map +1 -0
  78. package/dist/engine/ai-integration/cursor/cursorrules-generator.js +75 -0
  79. package/dist/engine/ai-integration/cursor/cursorrules-generator.js.map +1 -0
  80. package/dist/engine/ai-integration/detector.d.ts +5 -0
  81. package/dist/engine/ai-integration/detector.d.ts.map +1 -0
  82. package/dist/engine/ai-integration/detector.js +127 -0
  83. package/dist/engine/ai-integration/detector.js.map +1 -0
  84. package/dist/engine/ai-integration/gemini/extensions-advisor.d.ts +4 -0
  85. package/dist/engine/ai-integration/gemini/extensions-advisor.d.ts.map +1 -0
  86. package/dist/engine/ai-integration/gemini/extensions-advisor.js +64 -0
  87. package/dist/engine/ai-integration/gemini/extensions-advisor.js.map +1 -0
  88. package/dist/engine/ai-integration/gemini/gemini-md-generator.d.ts +4 -0
  89. package/dist/engine/ai-integration/gemini/gemini-md-generator.d.ts.map +1 -0
  90. package/dist/engine/ai-integration/gemini/gemini-md-generator.js +94 -0
  91. package/dist/engine/ai-integration/gemini/gemini-md-generator.js.map +1 -0
  92. package/dist/engine/ai-integration/gemini/index.d.ts +5 -0
  93. package/dist/engine/ai-integration/gemini/index.d.ts.map +1 -0
  94. package/dist/engine/ai-integration/gemini/index.js +6 -0
  95. package/dist/engine/ai-integration/gemini/index.js.map +1 -0
  96. package/dist/engine/ai-integration/gemini/policy-generator.d.ts +6 -0
  97. package/dist/engine/ai-integration/gemini/policy-generator.d.ts.map +1 -0
  98. package/dist/engine/ai-integration/gemini/policy-generator.js +63 -0
  99. package/dist/engine/ai-integration/gemini/policy-generator.js.map +1 -0
  100. package/dist/engine/ai-integration/gemini/settings-generator.d.ts +4 -0
  101. package/dist/engine/ai-integration/gemini/settings-generator.d.ts.map +1 -0
  102. package/dist/engine/ai-integration/gemini/settings-generator.js +191 -0
  103. package/dist/engine/ai-integration/gemini/settings-generator.js.map +1 -0
  104. package/dist/engine/ai-integration/github-copilot/index.d.ts +4 -0
  105. package/dist/engine/ai-integration/github-copilot/index.d.ts.map +1 -0
  106. package/dist/engine/ai-integration/github-copilot/index.js +5 -0
  107. package/dist/engine/ai-integration/github-copilot/index.js.map +1 -0
  108. package/dist/engine/ai-integration/github-copilot/instructions-generator.d.ts +5 -0
  109. package/dist/engine/ai-integration/github-copilot/instructions-generator.d.ts.map +1 -0
  110. package/dist/engine/ai-integration/github-copilot/instructions-generator.js +102 -0
  111. package/dist/engine/ai-integration/github-copilot/instructions-generator.js.map +1 -0
  112. package/dist/engine/ai-integration/github-copilot/prompt-files-generator.d.ts +11 -0
  113. package/dist/engine/ai-integration/github-copilot/prompt-files-generator.d.ts.map +1 -0
  114. package/dist/engine/ai-integration/github-copilot/prompt-files-generator.js +86 -0
  115. package/dist/engine/ai-integration/github-copilot/prompt-files-generator.js.map +1 -0
  116. package/dist/engine/ai-integration/github-copilot/workspace-bridge.d.ts +3 -0
  117. package/dist/engine/ai-integration/github-copilot/workspace-bridge.d.ts.map +1 -0
  118. package/dist/engine/ai-integration/github-copilot/workspace-bridge.js +39 -0
  119. package/dist/engine/ai-integration/github-copilot/workspace-bridge.js.map +1 -0
  120. package/dist/engine/ai-integration/kiro/hooks-generator.d.ts +6 -0
  121. package/dist/engine/ai-integration/kiro/hooks-generator.d.ts.map +1 -0
  122. package/dist/engine/ai-integration/kiro/hooks-generator.js +74 -0
  123. package/dist/engine/ai-integration/kiro/hooks-generator.js.map +1 -0
  124. package/dist/engine/ai-integration/kiro/index.d.ts +4 -0
  125. package/dist/engine/ai-integration/kiro/index.d.ts.map +1 -0
  126. package/dist/engine/ai-integration/kiro/index.js +5 -0
  127. package/dist/engine/ai-integration/kiro/index.js.map +1 -0
  128. package/dist/engine/ai-integration/kiro/spec-exporter.d.ts +6 -0
  129. package/dist/engine/ai-integration/kiro/spec-exporter.d.ts.map +1 -0
  130. package/dist/engine/ai-integration/kiro/spec-exporter.js +57 -0
  131. package/dist/engine/ai-integration/kiro/spec-exporter.js.map +1 -0
  132. package/dist/engine/ai-integration/kiro/steering-generator.d.ts +6 -0
  133. package/dist/engine/ai-integration/kiro/steering-generator.d.ts.map +1 -0
  134. package/dist/engine/ai-integration/kiro/steering-generator.js +112 -0
  135. package/dist/engine/ai-integration/kiro/steering-generator.js.map +1 -0
  136. package/dist/engine/ai-integration/mastra/agent-scaffold.d.ts +16 -0
  137. package/dist/engine/ai-integration/mastra/agent-scaffold.d.ts.map +1 -0
  138. package/dist/engine/ai-integration/mastra/agent-scaffold.js +111 -0
  139. package/dist/engine/ai-integration/mastra/agent-scaffold.js.map +1 -0
  140. package/dist/engine/ai-integration/mastra/config-generator.d.ts +12 -0
  141. package/dist/engine/ai-integration/mastra/config-generator.d.ts.map +1 -0
  142. package/dist/engine/ai-integration/mastra/config-generator.js +64 -0
  143. package/dist/engine/ai-integration/mastra/config-generator.js.map +1 -0
  144. package/dist/engine/ai-integration/mastra/index.d.ts +3 -0
  145. package/dist/engine/ai-integration/mastra/index.d.ts.map +1 -0
  146. package/dist/engine/ai-integration/mastra/index.js +4 -0
  147. package/dist/engine/ai-integration/mastra/index.js.map +1 -0
  148. package/dist/engine/ai-integration/universal-config-generator.d.ts +4 -0
  149. package/dist/engine/ai-integration/universal-config-generator.d.ts.map +1 -0
  150. package/dist/engine/ai-integration/universal-config-generator.js +87 -0
  151. package/dist/engine/ai-integration/universal-config-generator.js.map +1 -0
  152. package/dist/engine/ai-integration/windsurf/windsurfrules-generator.d.ts +5 -0
  153. package/dist/engine/ai-integration/windsurf/windsurfrules-generator.d.ts.map +1 -0
  154. package/dist/engine/ai-integration/windsurf/windsurfrules-generator.js +75 -0
  155. package/dist/engine/ai-integration/windsurf/windsurfrules-generator.js.map +1 -0
  156. package/dist/engine/api-spec-generator/ac-builder.d.ts +5 -0
  157. package/dist/engine/api-spec-generator/ac-builder.d.ts.map +1 -0
  158. package/dist/engine/api-spec-generator/ac-builder.js +114 -0
  159. package/dist/engine/api-spec-generator/ac-builder.js.map +1 -0
  160. package/dist/engine/api-spec-generator/graphql-parser.d.ts +3 -0
  161. package/dist/engine/api-spec-generator/graphql-parser.d.ts.map +1 -0
  162. package/dist/engine/api-spec-generator/graphql-parser.js +166 -0
  163. package/dist/engine/api-spec-generator/graphql-parser.js.map +1 -0
  164. package/dist/engine/api-spec-generator/openapi-parser.d.ts +3 -0
  165. package/dist/engine/api-spec-generator/openapi-parser.d.ts.map +1 -0
  166. package/dist/engine/api-spec-generator/openapi-parser.js +161 -0
  167. package/dist/engine/api-spec-generator/openapi-parser.js.map +1 -0
  168. package/dist/engine/approval-workflow.d.ts +21 -0
  169. package/dist/engine/approval-workflow.d.ts.map +1 -0
  170. package/dist/engine/approval-workflow.js +82 -0
  171. package/dist/engine/approval-workflow.js.map +1 -0
  172. package/dist/engine/best-practices-library.d.ts +31 -0
  173. package/dist/engine/best-practices-library.d.ts.map +1 -0
  174. package/dist/engine/best-practices-library.js +111 -0
  175. package/dist/engine/best-practices-library.js.map +1 -0
  176. package/dist/engine/confluence-exporter.d.ts +27 -0
  177. package/dist/engine/confluence-exporter.d.ts.map +1 -0
  178. package/dist/engine/confluence-exporter.js +238 -0
  179. package/dist/engine/confluence-exporter.js.map +1 -0
  180. package/dist/engine/cross-repo-searcher.d.ts +13 -0
  181. package/dist/engine/cross-repo-searcher.d.ts.map +1 -0
  182. package/dist/engine/cross-repo-searcher.js +51 -0
  183. package/dist/engine/cross-repo-searcher.js.map +1 -0
  184. package/dist/engine/desktop-notifier.d.ts +16 -0
  185. package/dist/engine/desktop-notifier.d.ts.map +1 -0
  186. package/dist/engine/desktop-notifier.js +64 -0
  187. package/dist/engine/desktop-notifier.js.map +1 -0
  188. package/dist/engine/domain-detector.d.ts +12 -0
  189. package/dist/engine/domain-detector.d.ts.map +1 -0
  190. package/dist/engine/domain-detector.js +286 -0
  191. package/dist/engine/domain-detector.js.map +1 -0
  192. package/dist/engine/email-digest-generator.d.ts +8 -0
  193. package/dist/engine/email-digest-generator.d.ts.map +1 -0
  194. package/dist/engine/email-digest-generator.js +192 -0
  195. package/dist/engine/email-digest-generator.js.map +1 -0
  196. package/dist/engine/email-sender.d.ts +22 -0
  197. package/dist/engine/email-sender.d.ts.map +1 -0
  198. package/dist/engine/email-sender.js +78 -0
  199. package/dist/engine/email-sender.js.map +1 -0
  200. package/dist/engine/estimation-calibrator.d.ts +19 -0
  201. package/dist/engine/estimation-calibrator.d.ts.map +1 -0
  202. package/dist/engine/estimation-calibrator.js +176 -0
  203. package/dist/engine/estimation-calibrator.js.map +1 -0
  204. package/dist/engine/hooks/custom-commands-generator.d.ts +11 -0
  205. package/dist/engine/hooks/custom-commands-generator.d.ts.map +1 -0
  206. package/dist/engine/hooks/custom-commands-generator.js +88 -0
  207. package/dist/engine/hooks/custom-commands-generator.js.map +1 -0
  208. package/dist/engine/hooks/effort-configurator.d.ts +13 -0
  209. package/dist/engine/hooks/effort-configurator.d.ts.map +1 -0
  210. package/dist/engine/hooks/effort-configurator.js +54 -0
  211. package/dist/engine/hooks/effort-configurator.js.map +1 -0
  212. package/dist/engine/hooks/full-spectrum-generator.d.ts +31 -0
  213. package/dist/engine/hooks/full-spectrum-generator.d.ts.map +1 -0
  214. package/dist/engine/hooks/full-spectrum-generator.js +115 -0
  215. package/dist/engine/hooks/full-spectrum-generator.js.map +1 -0
  216. package/dist/engine/hooks/profile-generator.d.ts +21 -0
  217. package/dist/engine/hooks/profile-generator.d.ts.map +1 -0
  218. package/dist/engine/hooks/profile-generator.js +90 -0
  219. package/dist/engine/hooks/profile-generator.js.map +1 -0
  220. package/dist/engine/ide-config/generators.d.ts.map +1 -1
  221. package/dist/engine/ide-config/generators.js +28 -1
  222. package/dist/engine/ide-config/generators.js.map +1 -1
  223. package/dist/engine/importers/csv-importer.d.ts +9 -0
  224. package/dist/engine/importers/csv-importer.d.ts.map +1 -0
  225. package/dist/engine/importers/csv-importer.js +116 -0
  226. package/dist/engine/importers/csv-importer.js.map +1 -0
  227. package/dist/engine/importers/jira-importer.d.ts +7 -0
  228. package/dist/engine/importers/jira-importer.d.ts.map +1 -0
  229. package/dist/engine/importers/jira-importer.js +57 -0
  230. package/dist/engine/importers/jira-importer.js.map +1 -0
  231. package/dist/engine/importers/linear-importer.d.ts +6 -0
  232. package/dist/engine/importers/linear-importer.d.ts.map +1 -0
  233. package/dist/engine/importers/linear-importer.js +59 -0
  234. package/dist/engine/importers/linear-importer.js.map +1 -0
  235. package/dist/engine/importers/markdown-importer.d.ts +7 -0
  236. package/dist/engine/importers/markdown-importer.d.ts.map +1 -0
  237. package/dist/engine/importers/markdown-importer.js +74 -0
  238. package/dist/engine/importers/markdown-importer.js.map +1 -0
  239. package/dist/engine/outbound-webhook-dispatcher.d.ts +4 -0
  240. package/dist/engine/outbound-webhook-dispatcher.d.ts.map +1 -0
  241. package/dist/engine/outbound-webhook-dispatcher.js +94 -0
  242. package/dist/engine/outbound-webhook-dispatcher.js.map +1 -0
  243. package/dist/engine/performance-analyzer.d.ts +18 -0
  244. package/dist/engine/performance-analyzer.d.ts.map +1 -0
  245. package/dist/engine/performance-analyzer.js +152 -0
  246. package/dist/engine/performance-analyzer.js.map +1 -0
  247. package/dist/engine/registry/composio-publisher.d.ts +17 -0
  248. package/dist/engine/registry/composio-publisher.d.ts.map +1 -0
  249. package/dist/engine/registry/composio-publisher.js +51 -0
  250. package/dist/engine/registry/composio-publisher.js.map +1 -0
  251. package/dist/engine/registry/glama-publisher.d.ts +17 -0
  252. package/dist/engine/registry/glama-publisher.d.ts.map +1 -0
  253. package/dist/engine/registry/glama-publisher.js +43 -0
  254. package/dist/engine/registry/glama-publisher.js.map +1 -0
  255. package/dist/engine/registry/index.d.ts +4 -0
  256. package/dist/engine/registry/index.d.ts.map +1 -1
  257. package/dist/engine/registry/index.js +5 -0
  258. package/dist/engine/registry/index.js.map +1 -1
  259. package/dist/engine/registry/mcp-official-publisher.d.ts +16 -0
  260. package/dist/engine/registry/mcp-official-publisher.d.ts.map +1 -0
  261. package/dist/engine/registry/mcp-official-publisher.js +44 -0
  262. package/dist/engine/registry/mcp-official-publisher.js.map +1 -0
  263. package/dist/engine/registry/smithery-generator.d.ts +16 -0
  264. package/dist/engine/registry/smithery-generator.d.ts.map +1 -0
  265. package/dist/engine/registry/smithery-generator.js +71 -0
  266. package/dist/engine/registry/smithery-generator.js.map +1 -0
  267. package/dist/engine/reverse-engineer/test-file-parser.d.ts +26 -0
  268. package/dist/engine/reverse-engineer/test-file-parser.d.ts.map +1 -0
  269. package/dist/engine/reverse-engineer/test-file-parser.js +165 -0
  270. package/dist/engine/reverse-engineer/test-file-parser.js.map +1 -0
  271. package/dist/engine/slack-dispatcher.d.ts +15 -0
  272. package/dist/engine/slack-dispatcher.d.ts.map +1 -0
  273. package/dist/engine/slack-dispatcher.js +73 -0
  274. package/dist/engine/slack-dispatcher.js.map +1 -0
  275. package/dist/engine/spec-differ.d.ts +15 -0
  276. package/dist/engine/spec-differ.d.ts.map +1 -0
  277. package/dist/engine/spec-differ.js +115 -0
  278. package/dist/engine/spec-differ.js.map +1 -0
  279. package/dist/engine/spec-exporter.d.ts +27 -0
  280. package/dist/engine/spec-exporter.d.ts.map +1 -0
  281. package/dist/engine/spec-exporter.js +122 -0
  282. package/dist/engine/spec-exporter.js.map +1 -0
  283. package/dist/engine/spec-searcher.d.ts +31 -0
  284. package/dist/engine/spec-searcher.d.ts.map +1 -0
  285. package/dist/engine/spec-searcher.js +240 -0
  286. package/dist/engine/spec-searcher.js.map +1 -0
  287. package/dist/engine/spec-splitter.d.ts +11 -1
  288. package/dist/engine/spec-splitter.d.ts.map +1 -1
  289. package/dist/engine/spec-splitter.js +178 -0
  290. package/dist/engine/spec-splitter.js.map +1 -1
  291. package/dist/engine/team-analytics-calculator.d.ts +14 -0
  292. package/dist/engine/team-analytics-calculator.d.ts.map +1 -0
  293. package/dist/engine/team-analytics-calculator.js +114 -0
  294. package/dist/engine/team-analytics-calculator.js.map +1 -0
  295. package/dist/engine/telemetry/error-reporter.d.ts +22 -0
  296. package/dist/engine/telemetry/error-reporter.d.ts.map +1 -0
  297. package/dist/engine/telemetry/error-reporter.js +68 -0
  298. package/dist/engine/telemetry/error-reporter.js.map +1 -0
  299. package/dist/engine/velocity-calculator.d.ts +44 -0
  300. package/dist/engine/velocity-calculator.d.ts.map +1 -0
  301. package/dist/engine/velocity-calculator.js +425 -0
  302. package/dist/engine/velocity-calculator.js.map +1 -0
  303. package/dist/index.js +44 -2
  304. package/dist/index.js.map +1 -1
  305. package/dist/storage/actuals-store.d.ts +8 -0
  306. package/dist/storage/actuals-store.d.ts.map +1 -0
  307. package/dist/storage/actuals-store.js +57 -0
  308. package/dist/storage/actuals-store.js.map +1 -0
  309. package/dist/storage/approval-store.d.ts +12 -0
  310. package/dist/storage/approval-store.d.ts.map +1 -0
  311. package/dist/storage/approval-store.js +46 -0
  312. package/dist/storage/approval-store.js.map +1 -0
  313. package/dist/storage/comments-store.d.ts +38 -0
  314. package/dist/storage/comments-store.d.ts.map +1 -0
  315. package/dist/storage/comments-store.js +167 -0
  316. package/dist/storage/comments-store.js.map +1 -0
  317. package/dist/storage/confluence-store.d.ts +35 -0
  318. package/dist/storage/confluence-store.d.ts.map +1 -0
  319. package/dist/storage/confluence-store.js +85 -0
  320. package/dist/storage/confluence-store.js.map +1 -0
  321. package/dist/storage/desktop-notification-store.d.ts +19 -0
  322. package/dist/storage/desktop-notification-store.d.ts.map +1 -0
  323. package/dist/storage/desktop-notification-store.js +44 -0
  324. package/dist/storage/desktop-notification-store.js.map +1 -0
  325. package/dist/storage/email-digest-store.d.ts +19 -0
  326. package/dist/storage/email-digest-store.d.ts.map +1 -0
  327. package/dist/storage/email-digest-store.js +51 -0
  328. package/dist/storage/email-digest-store.js.map +1 -0
  329. package/dist/storage/global-projects-store.d.ts +27 -0
  330. package/dist/storage/global-projects-store.d.ts.map +1 -0
  331. package/dist/storage/global-projects-store.js +78 -0
  332. package/dist/storage/global-projects-store.js.map +1 -0
  333. package/dist/storage/index.d.ts +2 -0
  334. package/dist/storage/index.d.ts.map +1 -1
  335. package/dist/storage/index.js +2 -0
  336. package/dist/storage/index.js.map +1 -1
  337. package/dist/storage/outbound-webhook-store.d.ts +9 -0
  338. package/dist/storage/outbound-webhook-store.d.ts.map +1 -0
  339. package/dist/storage/outbound-webhook-store.js +105 -0
  340. package/dist/storage/outbound-webhook-store.js.map +1 -0
  341. package/dist/storage/slack-store.d.ts +22 -0
  342. package/dist/storage/slack-store.d.ts.map +1 -0
  343. package/dist/storage/slack-store.js +55 -0
  344. package/dist/storage/slack-store.js.map +1 -0
  345. package/dist/storage/spec-lock-store.d.ts +22 -0
  346. package/dist/storage/spec-lock-store.d.ts.map +1 -0
  347. package/dist/storage/spec-lock-store.js +99 -0
  348. package/dist/storage/spec-lock-store.js.map +1 -0
  349. package/dist/tools/ai-ecosystem-status.d.ts +13 -0
  350. package/dist/tools/ai-ecosystem-status.d.ts.map +1 -0
  351. package/dist/tools/ai-ecosystem-status.js +219 -0
  352. package/dist/tools/ai-ecosystem-status.js.map +1 -0
  353. package/dist/tools/api-spec-generator-handler.d.ts +3 -0
  354. package/dist/tools/api-spec-generator-handler.d.ts.map +1 -0
  355. package/dist/tools/api-spec-generator-handler.js +193 -0
  356. package/dist/tools/api-spec-generator-handler.js.map +1 -0
  357. package/dist/tools/approval-handler.d.ts +6 -0
  358. package/dist/tools/approval-handler.d.ts.map +1 -0
  359. package/dist/tools/approval-handler.js +193 -0
  360. package/dist/tools/approval-handler.js.map +1 -0
  361. package/dist/tools/audit-trail-handler.d.ts +6 -2
  362. package/dist/tools/audit-trail-handler.d.ts.map +1 -1
  363. package/dist/tools/audit-trail-handler.js +12 -9
  364. package/dist/tools/audit-trail-handler.js.map +1 -1
  365. package/dist/tools/check-readiness.d.ts +3 -1
  366. package/dist/tools/check-readiness.d.ts.map +1 -1
  367. package/dist/tools/check-readiness.js +9 -1
  368. package/dist/tools/check-readiness.js.map +1 -1
  369. package/dist/tools/checkpoint-handler.d.ts.map +1 -1
  370. package/dist/tools/checkpoint-handler.js +20 -0
  371. package/dist/tools/checkpoint-handler.js.map +1 -1
  372. package/dist/tools/comments-handler.d.ts +6 -0
  373. package/dist/tools/comments-handler.d.ts.map +1 -0
  374. package/dist/tools/comments-handler.js +137 -0
  375. package/dist/tools/comments-handler.js.map +1 -0
  376. package/dist/tools/confluence-handler.d.ts +6 -0
  377. package/dist/tools/confluence-handler.d.ts.map +1 -0
  378. package/dist/tools/confluence-handler.js +220 -0
  379. package/dist/tools/confluence-handler.js.map +1 -0
  380. package/dist/tools/cross-repo-search-handler.d.ts +19 -0
  381. package/dist/tools/cross-repo-search-handler.d.ts.map +1 -0
  382. package/dist/tools/cross-repo-search-handler.js +151 -0
  383. package/dist/tools/cross-repo-search-handler.js.map +1 -0
  384. package/dist/tools/data-governance.d.ts +3 -1
  385. package/dist/tools/data-governance.d.ts.map +1 -1
  386. package/dist/tools/data-governance.js +9 -1
  387. package/dist/tools/data-governance.js.map +1 -1
  388. package/dist/tools/desktop-notification-handler.d.ts +17 -0
  389. package/dist/tools/desktop-notification-handler.d.ts.map +1 -0
  390. package/dist/tools/desktop-notification-handler.js +90 -0
  391. package/dist/tools/desktop-notification-handler.js.map +1 -0
  392. package/dist/tools/domain-criteria-handler.d.ts +16 -0
  393. package/dist/tools/domain-criteria-handler.d.ts.map +1 -0
  394. package/dist/tools/domain-criteria-handler.js +216 -0
  395. package/dist/tools/domain-criteria-handler.js.map +1 -0
  396. package/dist/tools/email-digest-handler.d.ts +6 -0
  397. package/dist/tools/email-digest-handler.d.ts.map +1 -0
  398. package/dist/tools/email-digest-handler.js +198 -0
  399. package/dist/tools/email-digest-handler.js.map +1 -0
  400. package/dist/tools/estimate.d.ts.map +1 -1
  401. package/dist/tools/estimate.js +22 -0
  402. package/dist/tools/estimate.js.map +1 -1
  403. package/dist/tools/estimation-accuracy-handler.d.ts +5 -0
  404. package/dist/tools/estimation-accuracy-handler.d.ts.map +1 -0
  405. package/dist/tools/estimation-accuracy-handler.js +171 -0
  406. package/dist/tools/estimation-accuracy-handler.js.map +1 -0
  407. package/dist/tools/generate-automation-guide.d.ts.map +1 -1
  408. package/dist/tools/generate-automation-guide.js +44 -0
  409. package/dist/tools/generate-automation-guide.js.map +1 -1
  410. package/dist/tools/import-spec-handler.d.ts +10 -0
  411. package/dist/tools/import-spec-handler.d.ts.map +1 -0
  412. package/dist/tools/import-spec-handler.js +242 -0
  413. package/dist/tools/import-spec-handler.js.map +1 -0
  414. package/dist/tools/init-project/claude-md-generator.d.ts +1 -0
  415. package/dist/tools/init-project/claude-md-generator.d.ts.map +1 -1
  416. package/dist/tools/init-project/claude-md-generator.js +35 -0
  417. package/dist/tools/init-project/claude-md-generator.js.map +1 -1
  418. package/dist/tools/init-project/planu-workflow-generator.d.ts.map +1 -1
  419. package/dist/tools/init-project/planu-workflow-generator.js +11 -0
  420. package/dist/tools/init-project/planu-workflow-generator.js.map +1 -1
  421. package/dist/tools/init-project/rules-generator.d.ts +11 -0
  422. package/dist/tools/init-project/rules-generator.d.ts.map +1 -1
  423. package/dist/tools/init-project/rules-generator.js +79 -0
  424. package/dist/tools/init-project/rules-generator.js.map +1 -1
  425. package/dist/tools/init-project/scaffold-writer.d.ts +1 -0
  426. package/dist/tools/init-project/scaffold-writer.d.ts.map +1 -1
  427. package/dist/tools/init-project/scaffold-writer.js +10 -1
  428. package/dist/tools/init-project/scaffold-writer.js.map +1 -1
  429. package/dist/tools/list-specs.d.ts.map +1 -1
  430. package/dist/tools/list-specs.js +11 -1
  431. package/dist/tools/list-specs.js.map +1 -1
  432. package/dist/tools/outbound-webhook-handler.d.ts +13 -0
  433. package/dist/tools/outbound-webhook-handler.d.ts.map +1 -0
  434. package/dist/tools/outbound-webhook-handler.js +161 -0
  435. package/dist/tools/outbound-webhook-handler.js.map +1 -0
  436. package/dist/tools/performance-analysis-handler.d.ts +3 -0
  437. package/dist/tools/performance-analysis-handler.d.ts.map +1 -0
  438. package/dist/tools/performance-analysis-handler.js +95 -0
  439. package/dist/tools/performance-analysis-handler.js.map +1 -0
  440. package/dist/tools/register-api-spec-generator.d.ts +3 -0
  441. package/dist/tools/register-api-spec-generator.d.ts.map +1 -0
  442. package/dist/tools/register-api-spec-generator.js +49 -0
  443. package/dist/tools/register-api-spec-generator.js.map +1 -0
  444. package/dist/tools/register-approval-tools.d.ts +3 -0
  445. package/dist/tools/register-approval-tools.d.ts.map +1 -0
  446. package/dist/tools/register-approval-tools.js +87 -0
  447. package/dist/tools/register-approval-tools.js.map +1 -0
  448. package/dist/tools/register-audit-trail-tools.d.ts.map +1 -1
  449. package/dist/tools/register-audit-trail-tools.js +27 -4
  450. package/dist/tools/register-audit-trail-tools.js.map +1 -1
  451. package/dist/tools/register-backlog-tools.d.ts.map +1 -1
  452. package/dist/tools/register-backlog-tools.js +24 -8
  453. package/dist/tools/register-backlog-tools.js.map +1 -1
  454. package/dist/tools/register-ci-tools.d.ts.map +1 -1
  455. package/dist/tools/register-ci-tools.js +27 -5
  456. package/dist/tools/register-ci-tools.js.map +1 -1
  457. package/dist/tools/register-comments-tools.d.ts +3 -0
  458. package/dist/tools/register-comments-tools.d.ts.map +1 -0
  459. package/dist/tools/register-comments-tools.js +79 -0
  460. package/dist/tools/register-comments-tools.js.map +1 -0
  461. package/dist/tools/register-confluence-tools.d.ts +3 -0
  462. package/dist/tools/register-confluence-tools.d.ts.map +1 -0
  463. package/dist/tools/register-confluence-tools.js +62 -0
  464. package/dist/tools/register-confluence-tools.js.map +1 -0
  465. package/dist/tools/register-coverage-tools.d.ts.map +1 -1
  466. package/dist/tools/register-coverage-tools.js +14 -2
  467. package/dist/tools/register-coverage-tools.js.map +1 -1
  468. package/dist/tools/register-cross-repo-search-tools.d.ts +10 -0
  469. package/dist/tools/register-cross-repo-search-tools.d.ts.map +1 -0
  470. package/dist/tools/register-cross-repo-search-tools.js +82 -0
  471. package/dist/tools/register-cross-repo-search-tools.js.map +1 -0
  472. package/dist/tools/register-desktop-notification-tools.d.ts +3 -0
  473. package/dist/tools/register-desktop-notification-tools.d.ts.map +1 -0
  474. package/dist/tools/register-desktop-notification-tools.js +56 -0
  475. package/dist/tools/register-desktop-notification-tools.js.map +1 -0
  476. package/dist/tools/register-domain-criteria-tools.d.ts +3 -0
  477. package/dist/tools/register-domain-criteria-tools.d.ts.map +1 -0
  478. package/dist/tools/register-domain-criteria-tools.js +69 -0
  479. package/dist/tools/register-domain-criteria-tools.js.map +1 -0
  480. package/dist/tools/register-elicitation-tools.d.ts.map +1 -1
  481. package/dist/tools/register-elicitation-tools.js +14 -2
  482. package/dist/tools/register-elicitation-tools.js.map +1 -1
  483. package/dist/tools/register-email-digest-tools.d.ts +3 -0
  484. package/dist/tools/register-email-digest-tools.d.ts.map +1 -0
  485. package/dist/tools/register-email-digest-tools.js +109 -0
  486. package/dist/tools/register-email-digest-tools.js.map +1 -0
  487. package/dist/tools/register-estimation-accuracy-tools.d.ts +3 -0
  488. package/dist/tools/register-estimation-accuracy-tools.d.ts.map +1 -0
  489. package/dist/tools/register-estimation-accuracy-tools.js +71 -0
  490. package/dist/tools/register-estimation-accuracy-tools.js.map +1 -0
  491. package/dist/tools/register-event-tools.d.ts.map +1 -1
  492. package/dist/tools/register-event-tools.js +14 -2
  493. package/dist/tools/register-event-tools.js.map +1 -1
  494. package/dist/tools/register-federation-tools.d.ts.map +1 -1
  495. package/dist/tools/register-federation-tools.js +27 -4
  496. package/dist/tools/register-federation-tools.js.map +1 -1
  497. package/dist/tools/register-governance-tools.d.ts.map +1 -1
  498. package/dist/tools/register-governance-tools.js +27 -4
  499. package/dist/tools/register-governance-tools.js.map +1 -1
  500. package/dist/tools/register-hooks-tools.d.ts.map +1 -1
  501. package/dist/tools/register-hooks-tools.js +14 -2
  502. package/dist/tools/register-hooks-tools.js.map +1 -1
  503. package/dist/tools/register-import-tools.d.ts +3 -0
  504. package/dist/tools/register-import-tools.d.ts.map +1 -0
  505. package/dist/tools/register-import-tools.js +63 -0
  506. package/dist/tools/register-import-tools.js.map +1 -0
  507. package/dist/tools/register-infrastructure-tools.d.ts.map +1 -1
  508. package/dist/tools/register-infrastructure-tools.js +17 -2
  509. package/dist/tools/register-infrastructure-tools.js.map +1 -1
  510. package/dist/tools/register-lessons-tools.d.ts.map +1 -1
  511. package/dist/tools/register-lessons-tools.js +12 -4
  512. package/dist/tools/register-lessons-tools.js.map +1 -1
  513. package/dist/tools/register-living-spec-advanced-tools.d.ts.map +1 -1
  514. package/dist/tools/register-living-spec-advanced-tools.js +92 -16
  515. package/dist/tools/register-living-spec-advanced-tools.js.map +1 -1
  516. package/dist/tools/register-living-spec-tools.d.ts.map +1 -1
  517. package/dist/tools/register-living-spec-tools.js +53 -10
  518. package/dist/tools/register-living-spec-tools.js.map +1 -1
  519. package/dist/tools/register-migration-tools.d.ts.map +1 -1
  520. package/dist/tools/register-migration-tools.js +10 -3
  521. package/dist/tools/register-migration-tools.js.map +1 -1
  522. package/dist/tools/register-outbound-webhook-tools.d.ts +3 -0
  523. package/dist/tools/register-outbound-webhook-tools.d.ts.map +1 -0
  524. package/dist/tools/register-outbound-webhook-tools.js +79 -0
  525. package/dist/tools/register-outbound-webhook-tools.js.map +1 -0
  526. package/dist/tools/register-performance-analysis-tools.d.ts +3 -0
  527. package/dist/tools/register-performance-analysis-tools.d.ts.map +1 -0
  528. package/dist/tools/register-performance-analysis-tools.js +24 -0
  529. package/dist/tools/register-performance-analysis-tools.js.map +1 -0
  530. package/dist/tools/register-readiness-tools.d.ts.map +1 -1
  531. package/dist/tools/register-readiness-tools.js +27 -4
  532. package/dist/tools/register-readiness-tools.js.map +1 -1
  533. package/dist/tools/register-scan-tools.js +1 -1
  534. package/dist/tools/register-scan-tools.js.map +1 -1
  535. package/dist/tools/register-scope-tools.d.ts.map +1 -1
  536. package/dist/tools/register-scope-tools.js +27 -4
  537. package/dist/tools/register-scope-tools.js.map +1 -1
  538. package/dist/tools/register-search-tools.d.ts.map +1 -1
  539. package/dist/tools/register-search-tools.js +14 -2
  540. package/dist/tools/register-search-tools.js.map +1 -1
  541. package/dist/tools/register-security-tools.d.ts.map +1 -1
  542. package/dist/tools/register-security-tools.js +14 -2
  543. package/dist/tools/register-security-tools.js.map +1 -1
  544. package/dist/tools/register-slack-tools.d.ts +3 -0
  545. package/dist/tools/register-slack-tools.d.ts.map +1 -0
  546. package/dist/tools/register-slack-tools.js +55 -0
  547. package/dist/tools/register-slack-tools.js.map +1 -0
  548. package/dist/tools/register-spec-export-tools.d.ts +3 -0
  549. package/dist/tools/register-spec-export-tools.d.ts.map +1 -0
  550. package/dist/tools/register-spec-export-tools.js +67 -0
  551. package/dist/tools/register-spec-export-tools.js.map +1 -0
  552. package/dist/tools/register-spec-lock-tools.d.ts +3 -0
  553. package/dist/tools/register-spec-lock-tools.d.ts.map +1 -0
  554. package/dist/tools/register-spec-lock-tools.js +72 -0
  555. package/dist/tools/register-spec-lock-tools.js.map +1 -0
  556. package/dist/tools/register-spec-observability-tools.d.ts.map +1 -1
  557. package/dist/tools/register-spec-observability-tools.js +14 -2
  558. package/dist/tools/register-spec-observability-tools.js.map +1 -1
  559. package/dist/tools/register-spec-search-tools.d.ts +3 -0
  560. package/dist/tools/register-spec-search-tools.d.ts.map +1 -0
  561. package/dist/tools/register-spec-search-tools.js +122 -0
  562. package/dist/tools/register-spec-search-tools.js.map +1 -0
  563. package/dist/tools/register-spec-split-tools.d.ts +3 -0
  564. package/dist/tools/register-spec-split-tools.d.ts.map +1 -0
  565. package/dist/tools/register-spec-split-tools.js +71 -0
  566. package/dist/tools/register-spec-split-tools.js.map +1 -0
  567. package/dist/tools/register-spec-tools/core-spec-tools.d.ts.map +1 -1
  568. package/dist/tools/register-spec-tools/core-spec-tools.js +20 -2
  569. package/dist/tools/register-spec-tools/core-spec-tools.js.map +1 -1
  570. package/dist/tools/register-stack-tools.d.ts.map +1 -1
  571. package/dist/tools/register-stack-tools.js +40 -9
  572. package/dist/tools/register-stack-tools.js.map +1 -1
  573. package/dist/tools/register-team-analytics-tools.d.ts +3 -0
  574. package/dist/tools/register-team-analytics-tools.d.ts.map +1 -0
  575. package/dist/tools/register-team-analytics-tools.js +37 -0
  576. package/dist/tools/register-team-analytics-tools.js.map +1 -0
  577. package/dist/tools/register-team-tools.d.ts.map +1 -1
  578. package/dist/tools/register-team-tools.js +38 -6
  579. package/dist/tools/register-team-tools.js.map +1 -1
  580. package/dist/tools/register-telemetry-tools.d.ts.map +1 -1
  581. package/dist/tools/register-telemetry-tools.js +6 -1
  582. package/dist/tools/register-telemetry-tools.js.map +1 -1
  583. package/dist/tools/register-test-reverse-engineer-tools.d.ts +3 -0
  584. package/dist/tools/register-test-reverse-engineer-tools.d.ts.map +1 -0
  585. package/dist/tools/register-test-reverse-engineer-tools.js +10 -0
  586. package/dist/tools/register-test-reverse-engineer-tools.js.map +1 -0
  587. package/dist/tools/register-velocity-tools.d.ts +3 -0
  588. package/dist/tools/register-velocity-tools.d.ts.map +1 -0
  589. package/dist/tools/register-velocity-tools.js +72 -0
  590. package/dist/tools/register-velocity-tools.js.map +1 -0
  591. package/dist/tools/register-versioning-tools.d.ts.map +1 -1
  592. package/dist/tools/register-versioning-tools.js +114 -6
  593. package/dist/tools/register-versioning-tools.js.map +1 -1
  594. package/dist/tools/resolve-project-id.d.ts +13 -0
  595. package/dist/tools/resolve-project-id.d.ts.map +1 -0
  596. package/dist/tools/resolve-project-id.js +22 -0
  597. package/dist/tools/resolve-project-id.js.map +1 -0
  598. package/dist/tools/safe-handler.d.ts.map +1 -1
  599. package/dist/tools/safe-handler.js +11 -1
  600. package/dist/tools/safe-handler.js.map +1 -1
  601. package/dist/tools/schemas/ide-config.d.ts +2 -0
  602. package/dist/tools/schemas/ide-config.d.ts.map +1 -1
  603. package/dist/tools/schemas/ide-config.js +2 -1
  604. package/dist/tools/schemas/ide-config.js.map +1 -1
  605. package/dist/tools/schemas/output-schemas.d.ts +24 -0
  606. package/dist/tools/schemas/output-schemas.d.ts.map +1 -1
  607. package/dist/tools/schemas/output-schemas.js +30 -0
  608. package/dist/tools/schemas/output-schemas.js.map +1 -1
  609. package/dist/tools/search-handler.d.ts +4 -0
  610. package/dist/tools/search-handler.d.ts.map +1 -0
  611. package/dist/tools/search-handler.js +62 -0
  612. package/dist/tools/search-handler.js.map +1 -0
  613. package/dist/tools/slack-handler.d.ts +6 -0
  614. package/dist/tools/slack-handler.d.ts.map +1 -0
  615. package/dist/tools/slack-handler.js +162 -0
  616. package/dist/tools/slack-handler.js.map +1 -0
  617. package/dist/tools/spec-diff-handler.d.ts +6 -0
  618. package/dist/tools/spec-diff-handler.d.ts.map +1 -0
  619. package/dist/tools/spec-diff-handler.js +94 -0
  620. package/dist/tools/spec-diff-handler.js.map +1 -0
  621. package/dist/tools/spec-export-handler.d.ts +5 -0
  622. package/dist/tools/spec-export-handler.d.ts.map +1 -0
  623. package/dist/tools/spec-export-handler.js +64 -0
  624. package/dist/tools/spec-export-handler.js.map +1 -0
  625. package/dist/tools/spec-lock-handler.d.ts +10 -0
  626. package/dist/tools/spec-lock-handler.d.ts.map +1 -0
  627. package/dist/tools/spec-lock-handler.js +163 -0
  628. package/dist/tools/spec-lock-handler.js.map +1 -0
  629. package/dist/tools/spec-split-handler.d.ts +4 -0
  630. package/dist/tools/spec-split-handler.d.ts.map +1 -0
  631. package/dist/tools/spec-split-handler.js +250 -0
  632. package/dist/tools/spec-split-handler.js.map +1 -0
  633. package/dist/tools/status-handler.d.ts.map +1 -1
  634. package/dist/tools/status-handler.js +40 -3
  635. package/dist/tools/status-handler.js.map +1 -1
  636. package/dist/tools/sync-ai-configs.d.ts +15 -0
  637. package/dist/tools/sync-ai-configs.d.ts.map +1 -0
  638. package/dist/tools/sync-ai-configs.js +86 -0
  639. package/dist/tools/sync-ai-configs.js.map +1 -0
  640. package/dist/tools/team-analytics-handler.d.ts +5 -0
  641. package/dist/tools/team-analytics-handler.d.ts.map +1 -0
  642. package/dist/tools/team-analytics-handler.js +67 -0
  643. package/dist/tools/team-analytics-handler.js.map +1 -0
  644. package/dist/tools/test-reverse-engineer-handler.d.ts +15 -0
  645. package/dist/tools/test-reverse-engineer-handler.d.ts.map +1 -0
  646. package/dist/tools/test-reverse-engineer-handler.js +94 -0
  647. package/dist/tools/test-reverse-engineer-handler.js.map +1 -0
  648. package/dist/tools/update-status/index.d.ts.map +1 -1
  649. package/dist/tools/update-status/index.js +135 -20
  650. package/dist/tools/update-status/index.js.map +1 -1
  651. package/dist/tools/update-status/response-builder.d.ts +1 -1
  652. package/dist/tools/update-status/response-builder.d.ts.map +1 -1
  653. package/dist/tools/update-status/response-builder.js +4 -1
  654. package/dist/tools/update-status/response-builder.js.map +1 -1
  655. package/dist/tools/update-status/side-effects.d.ts.map +1 -1
  656. package/dist/tools/update-status/side-effects.js +71 -0
  657. package/dist/tools/update-status/side-effects.js.map +1 -1
  658. package/dist/tools/update-status/transition-guard.d.ts +8 -0
  659. package/dist/tools/update-status/transition-guard.d.ts.map +1 -1
  660. package/dist/tools/update-status/transition-guard.js +23 -0
  661. package/dist/tools/update-status/transition-guard.js.map +1 -1
  662. package/dist/tools/update-status-actions.d.ts +1 -0
  663. package/dist/tools/update-status-actions.d.ts.map +1 -1
  664. package/dist/tools/update-status-actions.js +15 -1
  665. package/dist/tools/update-status-actions.js.map +1 -1
  666. package/dist/tools/velocity-handler.d.ts +4 -0
  667. package/dist/tools/velocity-handler.d.ts.map +1 -0
  668. package/dist/tools/velocity-handler.js +103 -0
  669. package/dist/tools/velocity-handler.js.map +1 -0
  670. package/dist/types/actuals.d.ts +100 -0
  671. package/dist/types/actuals.d.ts.map +1 -0
  672. package/dist/types/actuals.js +2 -0
  673. package/dist/types/actuals.js.map +1 -0
  674. package/dist/types/agent-frameworks.d.ts +62 -0
  675. package/dist/types/agent-frameworks.d.ts.map +1 -0
  676. package/dist/types/agent-frameworks.js +3 -0
  677. package/dist/types/agent-frameworks.js.map +1 -0
  678. package/dist/types/agents-md.d.ts +20 -0
  679. package/dist/types/agents-md.d.ts.map +1 -0
  680. package/dist/types/agents-md.js +3 -0
  681. package/dist/types/agents-md.js.map +1 -0
  682. package/dist/types/ai-integration.d.ts +65 -0
  683. package/dist/types/ai-integration.d.ts.map +1 -0
  684. package/dist/types/ai-integration.js +3 -0
  685. package/dist/types/ai-integration.js.map +1 -0
  686. package/dist/types/api-contract.d.ts +154 -0
  687. package/dist/types/api-contract.d.ts.map +1 -0
  688. package/dist/types/api-contract.js +3 -0
  689. package/dist/types/api-contract.js.map +1 -0
  690. package/dist/types/approval.d.ts +82 -0
  691. package/dist/types/approval.d.ts.map +1 -0
  692. package/dist/types/approval.js +3 -0
  693. package/dist/types/approval.js.map +1 -0
  694. package/dist/types/cline-integration.d.ts +30 -0
  695. package/dist/types/cline-integration.d.ts.map +1 -0
  696. package/dist/types/cline-integration.js +3 -0
  697. package/dist/types/cline-integration.js.map +1 -0
  698. package/dist/types/codex-integration.d.ts +55 -0
  699. package/dist/types/codex-integration.d.ts.map +1 -0
  700. package/dist/types/codex-integration.js +3 -0
  701. package/dist/types/codex-integration.js.map +1 -0
  702. package/dist/types/comments.d.ts +68 -0
  703. package/dist/types/comments.d.ts.map +1 -0
  704. package/dist/types/comments.js +3 -0
  705. package/dist/types/comments.js.map +1 -0
  706. package/dist/types/confluence.d.ts +102 -0
  707. package/dist/types/confluence.d.ts.map +1 -0
  708. package/dist/types/confluence.js +3 -0
  709. package/dist/types/confluence.js.map +1 -0
  710. package/dist/types/cross-repo-search.d.ts +104 -0
  711. package/dist/types/cross-repo-search.d.ts.map +1 -0
  712. package/dist/types/cross-repo-search.js +2 -0
  713. package/dist/types/cross-repo-search.js.map +1 -0
  714. package/dist/types/desktop-notification.d.ts +38 -0
  715. package/dist/types/desktop-notification.d.ts.map +1 -0
  716. package/dist/types/desktop-notification.js +3 -0
  717. package/dist/types/desktop-notification.js.map +1 -0
  718. package/dist/types/domain-criteria.d.ts +62 -0
  719. package/dist/types/domain-criteria.d.ts.map +1 -0
  720. package/dist/types/domain-criteria.js +3 -0
  721. package/dist/types/domain-criteria.js.map +1 -0
  722. package/dist/types/email-digest.d.ts +119 -0
  723. package/dist/types/email-digest.d.ts.map +1 -0
  724. package/dist/types/email-digest.js +3 -0
  725. package/dist/types/email-digest.js.map +1 -0
  726. package/dist/types/gemini-integration.d.ts +40 -0
  727. package/dist/types/gemini-integration.d.ts.map +1 -0
  728. package/dist/types/gemini-integration.js +3 -0
  729. package/dist/types/gemini-integration.js.map +1 -0
  730. package/dist/types/github-copilot-integration.d.ts +30 -0
  731. package/dist/types/github-copilot-integration.d.ts.map +1 -0
  732. package/dist/types/github-copilot-integration.js +3 -0
  733. package/dist/types/github-copilot-integration.js.map +1 -0
  734. package/dist/types/hooks-advanced.d.ts +34 -0
  735. package/dist/types/hooks-advanced.d.ts.map +1 -0
  736. package/dist/types/hooks-advanced.js +3 -0
  737. package/dist/types/hooks-advanced.js.map +1 -0
  738. package/dist/types/ide.d.ts +1 -1
  739. package/dist/types/ide.d.ts.map +1 -1
  740. package/dist/types/import-spec.d.ts +123 -0
  741. package/dist/types/import-spec.d.ts.map +1 -0
  742. package/dist/types/import-spec.js +3 -0
  743. package/dist/types/import-spec.js.map +1 -0
  744. package/dist/types/index.d.ts +29 -0
  745. package/dist/types/index.d.ts.map +1 -1
  746. package/dist/types/index.js +29 -0
  747. package/dist/types/index.js.map +1 -1
  748. package/dist/types/kiro-integration.d.ts +44 -0
  749. package/dist/types/kiro-integration.d.ts.map +1 -0
  750. package/dist/types/kiro-integration.js +3 -0
  751. package/dist/types/kiro-integration.js.map +1 -0
  752. package/dist/types/outbound-webhook.d.ts +51 -0
  753. package/dist/types/outbound-webhook.d.ts.map +1 -0
  754. package/dist/types/outbound-webhook.js +3 -0
  755. package/dist/types/outbound-webhook.js.map +1 -0
  756. package/dist/types/performance-analysis.d.ts +33 -0
  757. package/dist/types/performance-analysis.d.ts.map +1 -0
  758. package/dist/types/performance-analysis.js +3 -0
  759. package/dist/types/performance-analysis.js.map +1 -0
  760. package/dist/types/registry-publishers.d.ts +63 -0
  761. package/dist/types/registry-publishers.d.ts.map +1 -0
  762. package/dist/types/registry-publishers.js +4 -0
  763. package/dist/types/registry-publishers.js.map +1 -0
  764. package/dist/types/search.d.ts +49 -0
  765. package/dist/types/search.d.ts.map +1 -0
  766. package/dist/types/search.js +3 -0
  767. package/dist/types/search.js.map +1 -0
  768. package/dist/types/slack.d.ts +41 -0
  769. package/dist/types/slack.d.ts.map +1 -0
  770. package/dist/types/slack.js +3 -0
  771. package/dist/types/slack.js.map +1 -0
  772. package/dist/types/spec/inputs.d.ts +46 -2
  773. package/dist/types/spec/inputs.d.ts.map +1 -1
  774. package/dist/types/spec-export.d.ts +18 -0
  775. package/dist/types/spec-export.d.ts.map +1 -0
  776. package/dist/types/spec-export.js +3 -0
  777. package/dist/types/spec-export.js.map +1 -0
  778. package/dist/types/spec-lock.d.ts +42 -0
  779. package/dist/types/spec-lock.d.ts.map +1 -0
  780. package/dist/types/spec-lock.js +3 -0
  781. package/dist/types/spec-lock.js.map +1 -0
  782. package/dist/types/spec-versioning.d.ts +35 -0
  783. package/dist/types/spec-versioning.d.ts.map +1 -1
  784. package/dist/types/team-analytics.d.ts +52 -0
  785. package/dist/types/team-analytics.d.ts.map +1 -0
  786. package/dist/types/team-analytics.js +3 -0
  787. package/dist/types/team-analytics.js.map +1 -0
  788. package/dist/types/telemetry.d.ts +1 -1
  789. package/dist/types/telemetry.d.ts.map +1 -1
  790. package/dist/types/test-reverse-engineer.d.ts +32 -0
  791. package/dist/types/test-reverse-engineer.d.ts.map +1 -0
  792. package/dist/types/test-reverse-engineer.js +3 -0
  793. package/dist/types/test-reverse-engineer.js.map +1 -0
  794. package/dist/types/velocity.d.ts +147 -0
  795. package/dist/types/velocity.d.ts.map +1 -0
  796. package/dist/types/velocity.js +4 -0
  797. package/dist/types/velocity.js.map +1 -0
  798. package/package.json +1 -1
  799. package/src/config/domain-best-practices.json +413 -0
  800. package/src/config/ide-registry.json +25 -0
  801. package/src/config/license-plans.json +59 -2
@@ -0,0 +1,286 @@
1
+ // engine/domain-detector.ts — Detects spec domains from title + description (SPEC-290)
2
+ //
3
+ // Analyzes spec text to identify which technical domains apply.
4
+ // Detection is keyword-based and returns evidence for each domain found.
5
+ const DOMAIN_KEYWORDS = [
6
+ {
7
+ domain: 'payments',
8
+ keywords: [
9
+ 'payment',
10
+ 'payments',
11
+ 'stripe',
12
+ 'paypal',
13
+ 'billing',
14
+ 'invoice',
15
+ 'checkout',
16
+ 'subscription',
17
+ 'transaction',
18
+ 'charge',
19
+ 'refund',
20
+ 'pci',
21
+ 'credit card',
22
+ 'debit card',
23
+ 'wallet',
24
+ 'purchase',
25
+ ],
26
+ },
27
+ {
28
+ domain: 'authentication',
29
+ keywords: [
30
+ 'authentication',
31
+ 'login',
32
+ 'logout',
33
+ 'sign in',
34
+ 'sign up',
35
+ 'register',
36
+ 'password',
37
+ 'credentials',
38
+ 'jwt',
39
+ 'oauth',
40
+ 'saml',
41
+ 'sso',
42
+ 'mfa',
43
+ '2fa',
44
+ 'two factor',
45
+ 'magic link',
46
+ ],
47
+ },
48
+ {
49
+ domain: 'authorization',
50
+ keywords: [
51
+ 'authorization',
52
+ 'permission',
53
+ 'role',
54
+ 'rbac',
55
+ 'abac',
56
+ 'access control',
57
+ 'acl',
58
+ 'privilege',
59
+ 'grant',
60
+ 'revoke',
61
+ 'policy',
62
+ 'can i',
63
+ ],
64
+ },
65
+ {
66
+ domain: 'file-upload',
67
+ keywords: [
68
+ 'file upload',
69
+ 'upload',
70
+ 'attachment',
71
+ 'file storage',
72
+ 'blob',
73
+ 's3',
74
+ 'gcs',
75
+ 'azure blob',
76
+ 'media upload',
77
+ 'image upload',
78
+ 'document upload',
79
+ 'multipart',
80
+ ],
81
+ },
82
+ {
83
+ domain: 'email',
84
+ keywords: [
85
+ 'email',
86
+ 'e-mail',
87
+ 'smtp',
88
+ 'sendgrid',
89
+ 'mailgun',
90
+ 'ses',
91
+ 'newsletter',
92
+ 'transactional email',
93
+ 'email template',
94
+ 'inbox',
95
+ 'mailer',
96
+ ],
97
+ },
98
+ {
99
+ domain: 'notifications',
100
+ keywords: [
101
+ 'notification',
102
+ 'push notification',
103
+ 'fcm',
104
+ 'apns',
105
+ 'alert',
106
+ 'in-app notification',
107
+ 'toast',
108
+ 'bell icon',
109
+ 'notify',
110
+ ],
111
+ },
112
+ {
113
+ domain: 'search',
114
+ keywords: [
115
+ 'search',
116
+ 'full-text search',
117
+ 'elasticsearch',
118
+ 'algolia',
119
+ 'meilisearch',
120
+ 'typesense',
121
+ 'solr',
122
+ 'query',
123
+ 'filter results',
124
+ 'autocomplete',
125
+ 'typeahead',
126
+ ],
127
+ },
128
+ {
129
+ domain: 'mobile-offline',
130
+ keywords: [
131
+ 'offline',
132
+ 'offline first',
133
+ 'offline mode',
134
+ 'sync',
135
+ 'synchronization',
136
+ 'local database',
137
+ 'sqlite',
138
+ 'realm',
139
+ 'pouchdb',
140
+ 'service worker',
141
+ 'cache first',
142
+ 'background sync',
143
+ ],
144
+ },
145
+ {
146
+ domain: 'realtime',
147
+ keywords: [
148
+ 'realtime',
149
+ 'real-time',
150
+ 'websocket',
151
+ 'socket.io',
152
+ 'sse',
153
+ 'server-sent events',
154
+ 'live update',
155
+ 'live feed',
156
+ 'pub/sub',
157
+ 'presence',
158
+ 'collaborative',
159
+ 'live collaboration',
160
+ ],
161
+ },
162
+ {
163
+ domain: 'background-jobs',
164
+ keywords: [
165
+ 'background job',
166
+ 'queue',
167
+ 'worker',
168
+ 'cron',
169
+ 'scheduled task',
170
+ 'bull',
171
+ 'celery',
172
+ 'sidekiq',
173
+ 'job processor',
174
+ 'async job',
175
+ 'job runner',
176
+ 'task queue',
177
+ 'message queue',
178
+ ],
179
+ },
180
+ {
181
+ domain: 'api-public',
182
+ keywords: [
183
+ 'public api',
184
+ 'rest api',
185
+ 'graphql api',
186
+ 'api key',
187
+ 'third-party integration',
188
+ 'webhook',
189
+ 'sdk',
190
+ 'developer portal',
191
+ 'external api',
192
+ 'openapi',
193
+ ],
194
+ },
195
+ {
196
+ domain: 'data-export',
197
+ keywords: [
198
+ 'export',
199
+ 'download',
200
+ 'report',
201
+ 'csv export',
202
+ 'excel export',
203
+ 'data export',
204
+ 'bulk export',
205
+ 'generate report',
206
+ 'export data',
207
+ ],
208
+ },
209
+ {
210
+ domain: 'multi-tenant',
211
+ keywords: [
212
+ 'multi-tenant',
213
+ 'multitenant',
214
+ 'tenant',
215
+ 'organization',
216
+ 'workspace',
217
+ 'team isolation',
218
+ 'account isolation',
219
+ 'saas',
220
+ ],
221
+ },
222
+ {
223
+ domain: 'gdpr',
224
+ keywords: [
225
+ 'gdpr',
226
+ 'privacy',
227
+ 'personal data',
228
+ 'pii',
229
+ 'data protection',
230
+ 'right to erasure',
231
+ 'right to be forgotten',
232
+ 'consent',
233
+ 'dpa',
234
+ 'data subject',
235
+ 'data processor',
236
+ 'ccpa',
237
+ 'lgpd',
238
+ ],
239
+ },
240
+ ];
241
+ // ---------------------------------------------------------------------------
242
+ // Public API
243
+ // ---------------------------------------------------------------------------
244
+ /**
245
+ * Detect domains from spec title + description text.
246
+ * Returns each detected domain with the matching keywords as evidence.
247
+ */
248
+ export function detectDomains(title, description) {
249
+ const combinedText = `${title} ${description}`;
250
+ const lower = combinedText.toLowerCase();
251
+ const domains = [];
252
+ const evidence = {};
253
+ for (const entry of DOMAIN_KEYWORDS) {
254
+ const matched = entry.keywords.filter((kw) => lower.includes(kw.toLowerCase()));
255
+ if (matched.length > 0) {
256
+ domains.push(entry.domain);
257
+ evidence[entry.domain] = matched;
258
+ }
259
+ }
260
+ return { domains, evidence, analyzedText: combinedText };
261
+ }
262
+ /**
263
+ * Detect a single dominant domain (highest keyword hit count).
264
+ * Returns null if no domain is detected.
265
+ */
266
+ export function detectPrimaryDomain(title, description) {
267
+ const result = detectDomains(title, description);
268
+ if (result.domains.length === 0) {
269
+ return null;
270
+ }
271
+ const firstDomain = result.domains[0];
272
+ if (!firstDomain) {
273
+ return null;
274
+ }
275
+ let best = firstDomain;
276
+ let bestCount = result.evidence[best]?.length ?? 0;
277
+ for (const domain of result.domains.slice(1)) {
278
+ const count = result.evidence[domain]?.length ?? 0;
279
+ if (count > bestCount) {
280
+ best = domain;
281
+ bestCount = count;
282
+ }
283
+ }
284
+ return best;
285
+ }
286
+ //# sourceMappingURL=domain-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-detector.js","sourceRoot":"","sources":["../../src/engine/domain-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { Spec, DigestContent } from '../types/index.js';
2
+ /**
3
+ * Build a DigestContent from the given list of specs and period (days).
4
+ * Only specs with updatedAt within the last `periodDays` days are considered
5
+ * "recent" for the completedInPeriod stat.
6
+ */
7
+ export declare function generateDigestContent(specs: Spec[], periodDays: number): DigestContent;
8
+ //# sourceMappingURL=email-digest-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-digest-generator.d.ts","sourceRoot":"","sources":["../../src/engine/email-digest-generator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAkC,MAAM,mBAAmB,CAAC;AAuK7F;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,aAAa,CA8CtF"}
@@ -0,0 +1,192 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Helpers
3
+ // ---------------------------------------------------------------------------
4
+ function toSummary(spec) {
5
+ return {
6
+ id: spec.id,
7
+ title: spec.title,
8
+ status: spec.status,
9
+ updatedAt: spec.updatedAt,
10
+ };
11
+ }
12
+ function isWithinPeriod(updatedAt, periodDays) {
13
+ if (!updatedAt) {
14
+ return false;
15
+ }
16
+ const cutoff = Date.now() - periodDays * 24 * 60 * 60 * 1000;
17
+ return new Date(updatedAt).getTime() >= cutoff;
18
+ }
19
+ // ---------------------------------------------------------------------------
20
+ // HTML template (inline CSS — no external dependencies)
21
+ // ---------------------------------------------------------------------------
22
+ function buildHtml(content) {
23
+ const { subject, stats, completedSpecs, wipSpecs, blockedSpecs, upcomingSpecs, periodDays } = content;
24
+ const specRows = (specs) => {
25
+ if (specs.length === 0) {
26
+ return '<p style="color:#888;font-size:14px;">None</p>';
27
+ }
28
+ return specs
29
+ .map((s) => `<tr>
30
+ <td style="padding:6px 10px;font-family:monospace;font-size:13px;">${s.id}</td>
31
+ <td style="padding:6px 10px;font-size:13px;">${s.title}</td>
32
+ <td style="padding:6px 10px;font-size:12px;color:#555;">${s.status}</td>
33
+ </tr>`)
34
+ .join('\n');
35
+ };
36
+ const section = (title, specs, color) => `
37
+ <h2 style="color:${color};font-size:16px;margin-top:24px;">${title} (${specs.length})</h2>
38
+ <table style="width:100%;border-collapse:collapse;background:#fff;">
39
+ <thead>
40
+ <tr style="background:#f5f5f5;">
41
+ <th style="padding:6px 10px;text-align:left;font-size:12px;color:#555;">ID</th>
42
+ <th style="padding:6px 10px;text-align:left;font-size:12px;color:#555;">Title</th>
43
+ <th style="padding:6px 10px;text-align:left;font-size:12px;color:#555;">Status</th>
44
+ </tr>
45
+ </thead>
46
+ <tbody>${specRows(specs)}</tbody>
47
+ </table>`;
48
+ return `<!DOCTYPE html>
49
+ <html lang="en">
50
+ <head><meta charset="UTF-8"><title>${subject}</title></head>
51
+ <body style="font-family:Arial,sans-serif;background:#f9f9f9;margin:0;padding:20px;">
52
+ <div style="max-width:700px;margin:0 auto;background:#fff;border-radius:8px;
53
+ padding:32px;box-shadow:0 2px 8px rgba(0,0,0,0.08);">
54
+
55
+ <h1 style="font-size:22px;color:#333;border-bottom:2px solid #e2e8f0;
56
+ padding-bottom:12px;">${subject}</h1>
57
+
58
+ <p style="color:#666;font-size:14px;">
59
+ Planu digest for the last <strong>${periodDays} day${periodDays === 1 ? '' : 's'}</strong>.
60
+ Generated on <strong>${content.generatedAt.slice(0, 10)}</strong>.
61
+ </p>
62
+
63
+ <h2 style="color:#333;font-size:16px;margin-top:24px;">Overview</h2>
64
+ <table style="border-collapse:collapse;">
65
+ <tr>
66
+ <td style="padding:4px 16px 4px 0;font-size:14px;color:#555;">Total specs</td>
67
+ <td style="padding:4px 0;font-size:14px;font-weight:bold;">${stats.total}</td>
68
+ </tr>
69
+ <tr>
70
+ <td style="padding:4px 16px 4px 0;font-size:14px;color:#555;">
71
+ Completed in period</td>
72
+ <td style="padding:4px 0;font-size:14px;font-weight:bold;color:#22c55e;">
73
+ ${stats.completedInPeriod}</td>
74
+ </tr>
75
+ <tr>
76
+ <td style="padding:4px 16px 4px 0;font-size:14px;color:#555;">In progress</td>
77
+ <td style="padding:4px 0;font-size:14px;font-weight:bold;color:#3b82f6;">
78
+ ${stats.wipCount}</td>
79
+ </tr>
80
+ <tr>
81
+ <td style="padding:4px 16px 4px 0;font-size:14px;color:#555;">Blocked</td>
82
+ <td style="padding:4px 0;font-size:14px;font-weight:bold;color:#ef4444;">
83
+ ${stats.blockedCount}</td>
84
+ </tr>
85
+ <tr>
86
+ <td style="padding:4px 16px 4px 0;font-size:14px;color:#555;">Upcoming (approved)</td>
87
+ <td style="padding:4px 0;font-size:14px;font-weight:bold;color:#f59e0b;">
88
+ ${stats.upcomingCount}</td>
89
+ </tr>
90
+ </table>
91
+
92
+ ${section('Completed', completedSpecs, '#22c55e')}
93
+ ${section('In Progress', wipSpecs, '#3b82f6')}
94
+ ${section('Blocked', blockedSpecs, '#ef4444')}
95
+ ${section('Upcoming', upcomingSpecs, '#f59e0b')}
96
+
97
+ <p style="margin-top:32px;font-size:11px;color:#aaa;border-top:1px solid #e2e8f0;
98
+ padding-top:12px;">
99
+ Generated by <a href="https://planu.dev" style="color:#aaa;">Planu</a>
100
+ </p>
101
+ </div>
102
+ </body>
103
+ </html>`;
104
+ }
105
+ // ---------------------------------------------------------------------------
106
+ // Plain text template
107
+ // ---------------------------------------------------------------------------
108
+ function buildText(content) {
109
+ const { subject, stats, completedSpecs, wipSpecs, blockedSpecs, upcomingSpecs, periodDays } = content;
110
+ const specLines = (specs) => {
111
+ if (specs.length === 0) {
112
+ return ' (none)';
113
+ }
114
+ return specs.map((s) => ` - ${s.id}: ${s.title} [${s.status}]`).join('\n');
115
+ };
116
+ return [
117
+ subject,
118
+ '='.repeat(subject.length),
119
+ '',
120
+ `Planu digest — last ${periodDays} day${periodDays === 1 ? '' : 's'}`,
121
+ `Generated: ${content.generatedAt.slice(0, 10)}`,
122
+ '',
123
+ 'OVERVIEW',
124
+ ` Total specs: ${stats.total}`,
125
+ ` Completed in period: ${stats.completedInPeriod}`,
126
+ ` In progress: ${stats.wipCount}`,
127
+ ` Blocked: ${stats.blockedCount}`,
128
+ ` Upcoming (approved): ${stats.upcomingCount}`,
129
+ '',
130
+ `COMPLETED (${completedSpecs.length})`,
131
+ specLines(completedSpecs),
132
+ '',
133
+ `IN PROGRESS (${wipSpecs.length})`,
134
+ specLines(wipSpecs),
135
+ '',
136
+ `BLOCKED (${blockedSpecs.length})`,
137
+ specLines(blockedSpecs),
138
+ '',
139
+ `UPCOMING (${upcomingSpecs.length})`,
140
+ specLines(upcomingSpecs),
141
+ '',
142
+ '-- Generated by Planu (https://planu.dev)',
143
+ ].join('\n');
144
+ }
145
+ // ---------------------------------------------------------------------------
146
+ // Public API
147
+ // ---------------------------------------------------------------------------
148
+ /**
149
+ * Build a DigestContent from the given list of specs and period (days).
150
+ * Only specs with updatedAt within the last `periodDays` days are considered
151
+ * "recent" for the completedInPeriod stat.
152
+ */
153
+ export function generateDigestContent(specs, periodDays) {
154
+ const days = Math.max(1, periodDays);
155
+ const completedSpecs = specs
156
+ .filter((s) => s.status === 'done' && isWithinPeriod(s.updatedAt, days))
157
+ .map(toSummary);
158
+ const wipSpecs = specs
159
+ .filter((s) => s.status === 'implementing' || s.status === 'review')
160
+ .map(toSummary);
161
+ // Specs considered "blocked" are those with implementing/review status
162
+ // that have non-empty blockedBy dependencies
163
+ const blockedSpecs = specs
164
+ .filter((s) => Array.isArray(s.blockedBy) && s.blockedBy.length > 0)
165
+ .map(toSummary);
166
+ const upcomingSpecs = specs.filter((s) => s.status === 'approved').map(toSummary);
167
+ const stats = {
168
+ total: specs.length,
169
+ completedInPeriod: completedSpecs.length,
170
+ wipCount: wipSpecs.length,
171
+ blockedCount: blockedSpecs.length,
172
+ upcomingCount: upcomingSpecs.length,
173
+ };
174
+ const generatedAt = new Date().toISOString();
175
+ const subject = `Planu Digest — ${days === 1 ? 'Last 24h' : `Last ${days} days`}`;
176
+ const partial = {
177
+ subject,
178
+ stats,
179
+ completedSpecs,
180
+ wipSpecs,
181
+ blockedSpecs,
182
+ upcomingSpecs,
183
+ periodDays: days,
184
+ generatedAt,
185
+ };
186
+ return {
187
+ ...partial,
188
+ html: buildHtml(partial),
189
+ text: buildText(partial),
190
+ };
191
+ }
192
+ //# sourceMappingURL=email-digest-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-digest-generator.js","sourceRoot":"","sources":["../../src/engine/email-digest-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { DigestContent, EmailDigestConfig } from '../types/index.js';
2
+ /**
3
+ * Save digest HTML to disk at data/projects/{hash}/digests/YYYY-MM-DD.html
4
+ * Returns the file path that was written.
5
+ */
6
+ export declare function sendViaFile(content: DigestContent, projectHash: string): Promise<string>;
7
+ /**
8
+ * Send digest via SendGrid transactional email API.
9
+ * Uses globalThis.fetch (Node 18+).
10
+ */
11
+ export declare function sendViaSendGrid(content: DigestContent, config: EmailDigestConfig): Promise<void>;
12
+ /**
13
+ * SMTP delivery is not implemented in this build.
14
+ * Node's built-in `net` module can open a raw TCP connection but does not
15
+ * handle TLS negotiation or SMTP AUTH without a third-party library, which
16
+ * is not permitted in this project.
17
+ *
18
+ * Use provider='file' to write digests locally, or provider='sendgrid' for
19
+ * transactional email.
20
+ */
21
+ export declare function sendViaSmtp(_content: DigestContent, _config: EmailDigestConfig): Promise<void>;
22
+ //# sourceMappingURL=email-sender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-sender.d.ts","sourceRoot":"","sources":["../../src/engine/email-sender.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAM1E;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ9F;AAMD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,iBAAiB,GACxB,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAMD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ9F"}
@@ -0,0 +1,78 @@
1
+ // engine/email-sender.ts — Email delivery adapters (SPEC-293)
2
+ import { mkdir, writeFile } from 'node:fs/promises';
3
+ import { join, dirname } from 'node:path';
4
+ // ---------------------------------------------------------------------------
5
+ // File provider
6
+ // ---------------------------------------------------------------------------
7
+ /**
8
+ * Save digest HTML to disk at data/projects/{hash}/digests/YYYY-MM-DD.html
9
+ * Returns the file path that was written.
10
+ */
11
+ export async function sendViaFile(content, projectHash) {
12
+ const dateSlug = content.generatedAt.slice(0, 10);
13
+ const filePath = join('data', 'projects', projectHash, 'digests', `${dateSlug}.html`);
14
+ await mkdir(dirname(filePath), { recursive: true });
15
+ await writeFile(filePath, content.html, 'utf-8');
16
+ return filePath;
17
+ }
18
+ // ---------------------------------------------------------------------------
19
+ // SendGrid provider
20
+ // ---------------------------------------------------------------------------
21
+ /**
22
+ * Send digest via SendGrid transactional email API.
23
+ * Uses globalThis.fetch (Node 18+).
24
+ */
25
+ export async function sendViaSendGrid(content, config) {
26
+ const { apiKey, fromEmail = 'digest@planu.dev', fromName = 'Planu Digest' } = config.credentials;
27
+ if (!apiKey) {
28
+ throw new Error('SendGrid API key is not configured. ' +
29
+ 'Run configure_email_digest with provider=sendgrid and credentials.apiKey.');
30
+ }
31
+ if (config.recipients.length === 0) {
32
+ throw new Error('No recipients configured. Add at least one recipient email address.');
33
+ }
34
+ const body = {
35
+ personalizations: [
36
+ {
37
+ to: config.recipients.map((email) => ({ email })),
38
+ subject: content.subject,
39
+ },
40
+ ],
41
+ from: { email: fromEmail, name: fromName },
42
+ content: [
43
+ { type: 'text/plain', value: content.text },
44
+ { type: 'text/html', value: content.html },
45
+ ],
46
+ };
47
+ const response = await globalThis.fetch('https://api.sendgrid.com/v3/mail/send', {
48
+ method: 'POST',
49
+ headers: {
50
+ Authorization: `Bearer ${apiKey}`,
51
+ 'Content-Type': 'application/json',
52
+ },
53
+ body: JSON.stringify(body),
54
+ });
55
+ if (!response.ok) {
56
+ const errorText = await response.text().catch(() => '(no body)');
57
+ throw new Error(`SendGrid API returned ${response.status}: ${errorText}. ` +
58
+ 'Check your API key and sender domain verification.');
59
+ }
60
+ }
61
+ // ---------------------------------------------------------------------------
62
+ // SMTP provider (not implemented — requires external library)
63
+ // ---------------------------------------------------------------------------
64
+ /**
65
+ * SMTP delivery is not implemented in this build.
66
+ * Node's built-in `net` module can open a raw TCP connection but does not
67
+ * handle TLS negotiation or SMTP AUTH without a third-party library, which
68
+ * is not permitted in this project.
69
+ *
70
+ * Use provider='file' to write digests locally, or provider='sendgrid' for
71
+ * transactional email.
72
+ */
73
+ export function sendViaSmtp(_content, _config) {
74
+ return Promise.reject(new Error('SMTP delivery is not supported without an external SMTP library. ' +
75
+ "Please use provider='sendgrid' for transactional email " +
76
+ "or provider='file' to save digests locally."));
77
+ }
78
+ //# sourceMappingURL=email-sender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-sender.js","sourceRoot":"","sources":["../../src/engine/email-sender.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { ActualRecord, EstimationAccuracyReport, CalibrationFactors, SpecScope, SpecType } from '../types/index.js';
2
+ /**
3
+ * Compute deviation percentage: positive = over estimate, negative = under estimate.
4
+ * Returns 0 when estimatedHours is 0 to avoid division by zero.
5
+ */
6
+ export declare function computeDeviationPct(estimatedHours: number, actualHours: number): number;
7
+ export declare function generateAccuracyReport(projectId: string, records: ActualRecord[]): EstimationAccuracyReport;
8
+ /**
9
+ * Compute calibration factors from historical actuals.
10
+ * Only creates a multiplier when sample size >= minSamples.
11
+ * A positive avg deviation means we historically underestimate → multiplier > 1.
12
+ */
13
+ export declare function computeCalibrationFactors(projectId: string, records: ActualRecord[], minSamples: number): CalibrationFactors;
14
+ /**
15
+ * Apply stored calibration factors to a base estimation hours value.
16
+ * Returns the adjusted hours (or the original if no factor found).
17
+ */
18
+ export declare function applyCalibration(baseHours: number, scope: SpecScope, type: SpecType, factors: CalibrationFactors | null): number;
19
+ //# sourceMappingURL=estimation-calibrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimation-calibrator.d.ts","sourceRoot":"","sources":["../../src/engine/estimation-calibrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,wBAAwB,EACxB,kBAAkB,EAIlB,SAAS,EACT,QAAQ,EACT,MAAM,mBAAmB,CAAC;AAM3B;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAKvF;AA6ED,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,EAAE,GACtB,wBAAwB,CAgC1B;AAMD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,EAAE,EACvB,UAAU,EAAE,MAAM,GACjB,kBAAkB,CA6CpB;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,kBAAkB,GAAG,IAAI,GACjC,MAAM,CAcR"}