create-hq 5.0.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 (310) hide show
  1. package/dist/deps.d.ts +4 -0
  2. package/dist/deps.d.ts.map +1 -0
  3. package/dist/deps.js +65 -0
  4. package/dist/deps.js.map +1 -0
  5. package/dist/git.d.ts +3 -0
  6. package/dist/git.d.ts.map +1 -0
  7. package/dist/git.js +19 -0
  8. package/dist/git.js.map +1 -0
  9. package/dist/index.d.ts +3 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +23 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/scaffold.d.ts +8 -0
  14. package/dist/scaffold.d.ts.map +1 -0
  15. package/dist/scaffold.js +130 -0
  16. package/dist/scaffold.js.map +1 -0
  17. package/dist/ui.d.ts +7 -0
  18. package/dist/ui.d.ts.map +1 -0
  19. package/dist/ui.js +36 -0
  20. package/dist/ui.js.map +1 -0
  21. package/package.json +41 -0
  22. package/template/.claude/CLAUDE.md +202 -0
  23. package/template/.claude/commands/checkpoint.md +127 -0
  24. package/template/.claude/commands/cleanup.md +307 -0
  25. package/template/.claude/commands/execute-task.md +440 -0
  26. package/template/.claude/commands/exit-plan.md +41 -0
  27. package/template/.claude/commands/handoff.md +97 -0
  28. package/template/.claude/commands/learn.md +218 -0
  29. package/template/.claude/commands/metrics.md +118 -0
  30. package/template/.claude/commands/newworker.md +162 -0
  31. package/template/.claude/commands/nexttask.md +67 -0
  32. package/template/.claude/commands/prd.md +238 -0
  33. package/template/.claude/commands/reanchor.md +51 -0
  34. package/template/.claude/commands/remember.md +126 -0
  35. package/template/.claude/commands/run-project.md +348 -0
  36. package/template/.claude/commands/run.md +110 -0
  37. package/template/.claude/commands/search-reindex.md +62 -0
  38. package/template/.claude/commands/search.md +100 -0
  39. package/template/.claude/commands/setup.md +381 -0
  40. package/template/.claude/scripts/pure-ralph-loop.ps1 +312 -0
  41. package/template/.claude/scripts/pure-ralph-loop.sh +859 -0
  42. package/template/CHANGELOG.md +220 -0
  43. package/template/LICENSE +21 -0
  44. package/template/MIGRATION.md +259 -0
  45. package/template/README.md +368 -0
  46. package/template/data/journal/.gitkeep +0 -0
  47. package/template/docs/images/ascii-banner-options.md +122 -0
  48. package/template/docs/images/hq-banner.svg +105 -0
  49. package/template/knowledge/Ralph/01-overview.md +71 -0
  50. package/template/knowledge/Ralph/02-core-concepts.md +114 -0
  51. package/template/knowledge/Ralph/03-how-ralph-works.md +184 -0
  52. package/template/knowledge/Ralph/04-back-pressure.md +222 -0
  53. package/template/knowledge/Ralph/05-specifications.md +210 -0
  54. package/template/knowledge/Ralph/06-agents-md.md +222 -0
  55. package/template/knowledge/Ralph/07-implementation.md +316 -0
  56. package/template/knowledge/Ralph/08-economics.md +182 -0
  57. package/template/knowledge/Ralph/09-resources.md +145 -0
  58. package/template/knowledge/Ralph/10-claude-code-workflow.md +212 -0
  59. package/template/knowledge/Ralph/11-team-training-guide.md +383 -0
  60. package/template/knowledge/Ralph/README.md +40 -0
  61. package/template/knowledge/ai-security-framework/CONTRIBUTING.md +139 -0
  62. package/template/knowledge/ai-security-framework/GLOSSARY.md +176 -0
  63. package/template/knowledge/ai-security-framework/LICENSE +21 -0
  64. package/template/knowledge/ai-security-framework/QUICK-START.md +172 -0
  65. package/template/knowledge/ai-security-framework/README.md +232 -0
  66. package/template/knowledge/ai-security-framework/checklists/browser-security.md +301 -0
  67. package/template/knowledge/ai-security-framework/checklists/credential-isolation.md +322 -0
  68. package/template/knowledge/ai-security-framework/checklists/incident-response.md +288 -0
  69. package/template/knowledge/ai-security-framework/checklists/pre-flight.md +249 -0
  70. package/template/knowledge/ai-security-framework/checklists/weekly-audit.md +159 -0
  71. package/template/knowledge/ai-security-framework/configs/audit-logging.md +372 -0
  72. package/template/knowledge/ai-security-framework/configs/kill-switches.md +354 -0
  73. package/template/knowledge/ai-security-framework/docs/01-core-principles.md +256 -0
  74. package/template/knowledge/ai-security-framework/docs/02-threat-landscape.md +326 -0
  75. package/template/knowledge/ai-security-framework/docs/03-security-posture.md +250 -0
  76. package/template/knowledge/ai-security-framework/templates/agents-security.md +233 -0
  77. package/template/knowledge/design-styles/README.md +42 -0
  78. package/template/knowledge/design-styles/american-industrial.md +136 -0
  79. package/template/knowledge/design-styles/ethereal-abstract.md +133 -0
  80. package/template/knowledge/design-styles/liminal-portal.md +111 -0
  81. package/template/knowledge/design-styles/swipes/american-industrial/G-3m4YPW0AADdu2.jpeg +0 -0
  82. package/template/knowledge/design-styles/swipes/american-industrial/G-JJlt5WwAABK3K.png +0 -0
  83. package/template/knowledge/design-styles/swipes/american-industrial/G-JJmj5W0AEbJ-7.png +0 -0
  84. package/template/knowledge/design-styles/swipes/american-industrial/G59fgNuXkAAKLJQ (1).jpeg +0 -0
  85. package/template/knowledge/design-styles/swipes/american-industrial/G59fgNuXkAAKLJQ.jpeg +0 -0
  86. package/template/knowledge/design-styles/swipes/american-industrial/G7fVkn3WEAAM-ST.jpeg +0 -0
  87. package/template/knowledge/design-styles/swipes/american-industrial/G8ECO5JWEAIksyn.png +0 -0
  88. package/template/knowledge/design-styles/swipes/american-industrial/G9-3GQSWoAA8eqZ.png +0 -0
  89. package/template/knowledge/design-styles/swipes/american-industrial/G9xEOqrXkAEZRcs.png +0 -0
  90. package/template/knowledge/design-styles/swipes/american-industrial/G_MVeJrXQAA8sx4.jpeg +0 -0
  91. package/template/knowledge/design-styles/swipes/american-industrial/G_RSkmGXkAAgAVZ.png +0 -0
  92. package/template/knowledge/design-styles/swipes/american-industrial/README.md +31 -0
  93. package/template/knowledge/design-styles/swipes/american-industrial/qyqtg7Dq.png +0 -0
  94. package/template/knowledge/dev-team/README.md +35 -0
  95. package/template/knowledge/dev-team/patterns/README.md +34 -0
  96. package/template/knowledge/dev-team/patterns/frontend/react-best-practices.md +178 -0
  97. package/template/knowledge/dev-team/troubleshooting/README.md +31 -0
  98. package/template/knowledge/dev-team/workflows/README.md +49 -0
  99. package/template/knowledge/hq/checkpoint-schema.json +51 -0
  100. package/template/knowledge/hq/index-md-spec.md +74 -0
  101. package/template/knowledge/hq/thread-schema.md +153 -0
  102. package/template/knowledge/hq-core/checkpoint-schema.json +51 -0
  103. package/template/knowledge/hq-core/index-md-spec.md +74 -0
  104. package/template/knowledge/hq-core/thread-schema.md +153 -0
  105. package/template/knowledge/loom/README.md +51 -0
  106. package/template/knowledge/loom/architecture.md +125 -0
  107. package/template/knowledge/loom/code-style.md +169 -0
  108. package/template/knowledge/loom/llm-proxy.md +132 -0
  109. package/template/knowledge/loom/state-machine.md +131 -0
  110. package/template/knowledge/loom/thread-system.md +117 -0
  111. package/template/knowledge/loom/tools.md +94 -0
  112. package/template/knowledge/loom/weaver.md +96 -0
  113. package/template/knowledge/loom/web-frontend.md +131 -0
  114. package/template/knowledge/projects/README.md +72 -0
  115. package/template/knowledge/projects/templates/README.template.md +28 -0
  116. package/template/knowledge/workers/README.md +195 -0
  117. package/template/knowledge/workers/ralph-loop-pattern.md +157 -0
  118. package/template/knowledge/workers/skill-schema.md +182 -0
  119. package/template/knowledge/workers/state-machine.md +102 -0
  120. package/template/knowledge/workers/templates/base-worker.yaml +73 -0
  121. package/template/knowledge/workers/templates/code-worker.yaml +85 -0
  122. package/template/knowledge/workers/templates/skill.yaml +49 -0
  123. package/template/knowledge/workers/templates/social-worker.yaml +70 -0
  124. package/template/modules/examples/full-manifest.yaml +92 -0
  125. package/template/modules/examples/minimal.yaml +14 -0
  126. package/template/modules/modules.yaml +59 -0
  127. package/template/projects/.gitkeep +0 -0
  128. package/template/projects/incorporate-workers-into-pure-ralph/prd.json +88 -0
  129. package/template/projects/pure-ralph-branch-isolation/README.md +114 -0
  130. package/template/projects/pure-ralph-branch-isolation/prd.json +123 -0
  131. package/template/projects/purist-ralph-loop/README.md +148 -0
  132. package/template/projects/purist-ralph-loop/prd.json +135 -0
  133. package/template/projects/ralph-test/prd.json +50 -0
  134. package/template/prompts/pure-ralph-base.md +551 -0
  135. package/template/settings/.gitkeep +0 -0
  136. package/template/settings/pure-ralph.json +42 -0
  137. package/template/social-content/drafts/INDEX.md +21 -0
  138. package/template/social-content/drafts/linkedin/.gitkeep +1 -0
  139. package/template/social-content/drafts/x/.gitkeep +1 -0
  140. package/template/social-content/images/.gitkeep +1 -0
  141. package/template/starter-projects/code-worker/README.md +97 -0
  142. package/template/starter-projects/code-worker/prd.json +45 -0
  143. package/template/starter-projects/personal-assistant/README.md +42 -0
  144. package/template/starter-projects/personal-assistant/prd.json +43 -0
  145. package/template/starter-projects/social-media/README.md +60 -0
  146. package/template/starter-projects/social-media/prd.json +43 -0
  147. package/template/workers/content-brand/README.md +59 -0
  148. package/template/workers/content-brand/skills/messaging-alignment.md +91 -0
  149. package/template/workers/content-brand/skills/tone-check.md +76 -0
  150. package/template/workers/content-brand/skills/voice-analysis.md +68 -0
  151. package/template/workers/content-brand/worker.yaml +81 -0
  152. package/template/workers/content-legal/README.md +80 -0
  153. package/template/workers/content-legal/skills/claim-substantiation.md +150 -0
  154. package/template/workers/content-legal/skills/compliance-scan.md +123 -0
  155. package/template/workers/content-legal/skills/disclaimer-check.md +146 -0
  156. package/template/workers/content-legal/worker.yaml +118 -0
  157. package/template/workers/content-product/README.md +77 -0
  158. package/template/workers/content-product/skills/claim-verification.md +96 -0
  159. package/template/workers/content-product/skills/feature-accuracy.md +117 -0
  160. package/template/workers/content-product/skills/stats-check.md +128 -0
  161. package/template/workers/content-product/worker.yaml +97 -0
  162. package/template/workers/content-sales/README.md +70 -0
  163. package/template/workers/content-sales/skills/conversion-analysis.md +96 -0
  164. package/template/workers/content-sales/skills/cta-audit.md +107 -0
  165. package/template/workers/content-sales/skills/value-prop-check.md +114 -0
  166. package/template/workers/content-sales/worker.yaml +93 -0
  167. package/template/workers/content-shared/cli.ts +242 -0
  168. package/template/workers/content-shared/index.ts +234 -0
  169. package/template/workers/content-shared/lib/accuracy-analyzer.ts +661 -0
  170. package/template/workers/content-shared/lib/analyze.ts +370 -0
  171. package/template/workers/content-shared/lib/brand-analyzer.ts +526 -0
  172. package/template/workers/content-shared/lib/cms-integration.ts +446 -0
  173. package/template/workers/content-shared/lib/compliance-analyzer.ts +655 -0
  174. package/template/workers/content-shared/lib/conversion-analyzer.ts +555 -0
  175. package/template/workers/content-shared/lib/github-integration.ts +582 -0
  176. package/template/workers/content-shared/lib/output.ts +373 -0
  177. package/template/workers/content-shared/lib/parser.ts +771 -0
  178. package/template/workers/content-shared/lib/priority.ts +439 -0
  179. package/template/workers/content-shared/lib/recommendations.ts +512 -0
  180. package/template/workers/content-shared/lib/reporter.ts +749 -0
  181. package/template/workers/content-shared/lib/restructure.ts +664 -0
  182. package/template/workers/content-shared/lib/scorer.ts +140 -0
  183. package/template/workers/content-shared/lib/types.ts +227 -0
  184. package/template/workers/content-shared/lib/variants.ts +595 -0
  185. package/template/workers/content-shared/package.json +51 -0
  186. package/template/workers/content-shared/pnpm-lock.yaml +39 -0
  187. package/template/workers/content-shared/test/sample-page.json +115 -0
  188. package/template/workers/content-shared/tsconfig.json +20 -0
  189. package/template/workers/dev-team/README.md +166 -0
  190. package/template/workers/dev-team/_template.yaml +70 -0
  191. package/template/workers/dev-team/architect/package.json +27 -0
  192. package/template/workers/dev-team/architect/skills/api-design.md +89 -0
  193. package/template/workers/dev-team/architect/skills/refactor-plan.md +96 -0
  194. package/template/workers/dev-team/architect/skills/system-design.md +100 -0
  195. package/template/workers/dev-team/architect/src/index.ts +49 -0
  196. package/template/workers/dev-team/architect/src/mcp-server.ts +122 -0
  197. package/template/workers/dev-team/architect/src/skills/api-design.ts +316 -0
  198. package/template/workers/dev-team/architect/src/skills/refactor-plan.ts +264 -0
  199. package/template/workers/dev-team/architect/src/skills/system-design.ts +212 -0
  200. package/template/workers/dev-team/architect/tsconfig.json +19 -0
  201. package/template/workers/dev-team/architect/worker.yaml +128 -0
  202. package/template/workers/dev-team/backend-dev/package-lock.json +1252 -0
  203. package/template/workers/dev-team/backend-dev/package.json +27 -0
  204. package/template/workers/dev-team/backend-dev/skills/implement-endpoint.md +70 -0
  205. package/template/workers/dev-team/backend-dev/skills/implement-service.md +62 -0
  206. package/template/workers/dev-team/backend-dev/src/index.ts +51 -0
  207. package/template/workers/dev-team/backend-dev/src/mcp-server.ts +109 -0
  208. package/template/workers/dev-team/backend-dev/src/skills/implement-endpoint.ts +122 -0
  209. package/template/workers/dev-team/backend-dev/src/skills/implement-service.ts +126 -0
  210. package/template/workers/dev-team/backend-dev/tsconfig.json +19 -0
  211. package/template/workers/dev-team/backend-dev/worker.yaml +128 -0
  212. package/template/workers/dev-team/code-reviewer/package-lock.json +1080 -0
  213. package/template/workers/dev-team/code-reviewer/package.json +24 -0
  214. package/template/workers/dev-team/code-reviewer/skills/merge-to-production.md +61 -0
  215. package/template/workers/dev-team/code-reviewer/skills/merge-to-staging.md +54 -0
  216. package/template/workers/dev-team/code-reviewer/skills/request-changes.md +63 -0
  217. package/template/workers/dev-team/code-reviewer/skills/review-pr.md +77 -0
  218. package/template/workers/dev-team/code-reviewer/src/index.ts +56 -0
  219. package/template/workers/dev-team/code-reviewer/src/mcp-server.ts +101 -0
  220. package/template/workers/dev-team/code-reviewer/tsconfig.json +19 -0
  221. package/template/workers/dev-team/code-reviewer/worker.yaml +90 -0
  222. package/template/workers/dev-team/database-dev/package.json +22 -0
  223. package/template/workers/dev-team/database-dev/skills/create-schema.md +48 -0
  224. package/template/workers/dev-team/database-dev/src/index.ts +50 -0
  225. package/template/workers/dev-team/database-dev/src/mcp-server.ts +76 -0
  226. package/template/workers/dev-team/database-dev/tsconfig.json +18 -0
  227. package/template/workers/dev-team/database-dev/worker.yaml +90 -0
  228. package/template/workers/dev-team/frontend-dev/package.json +22 -0
  229. package/template/workers/dev-team/frontend-dev/skills/create-component.md +26 -0
  230. package/template/workers/dev-team/frontend-dev/src/index.ts +50 -0
  231. package/template/workers/dev-team/frontend-dev/src/mcp-server.ts +77 -0
  232. package/template/workers/dev-team/frontend-dev/tsconfig.json +18 -0
  233. package/template/workers/dev-team/frontend-dev/worker.yaml +132 -0
  234. package/template/workers/dev-team/infra-dev/package.json +24 -0
  235. package/template/workers/dev-team/infra-dev/skills/add-monitoring.md +73 -0
  236. package/template/workers/dev-team/infra-dev/skills/configure-deployment.md +80 -0
  237. package/template/workers/dev-team/infra-dev/skills/create-dockerfile.md +62 -0
  238. package/template/workers/dev-team/infra-dev/skills/setup-cicd.md +63 -0
  239. package/template/workers/dev-team/infra-dev/src/index.ts +55 -0
  240. package/template/workers/dev-team/infra-dev/src/mcp-server.ts +82 -0
  241. package/template/workers/dev-team/infra-dev/tsconfig.json +19 -0
  242. package/template/workers/dev-team/infra-dev/worker.yaml +92 -0
  243. package/template/workers/dev-team/knowledge-curator/package.json +24 -0
  244. package/template/workers/dev-team/knowledge-curator/skills/curate-troubleshooting.md +63 -0
  245. package/template/workers/dev-team/knowledge-curator/skills/process-learnings.md +61 -0
  246. package/template/workers/dev-team/knowledge-curator/skills/sync-documentation.md +76 -0
  247. package/template/workers/dev-team/knowledge-curator/skills/update-patterns.md +63 -0
  248. package/template/workers/dev-team/knowledge-curator/src/index.ts +53 -0
  249. package/template/workers/dev-team/knowledge-curator/src/mcp-server.ts +92 -0
  250. package/template/workers/dev-team/knowledge-curator/tsconfig.json +19 -0
  251. package/template/workers/dev-team/knowledge-curator/worker.yaml +80 -0
  252. package/template/workers/dev-team/motion-designer/package.json +22 -0
  253. package/template/workers/dev-team/motion-designer/skills/add-animation.md +25 -0
  254. package/template/workers/dev-team/motion-designer/skills/generate-image.md +36 -0
  255. package/template/workers/dev-team/motion-designer/src/index.ts +63 -0
  256. package/template/workers/dev-team/motion-designer/src/mcp-server.ts +79 -0
  257. package/template/workers/dev-team/motion-designer/tsconfig.json +18 -0
  258. package/template/workers/dev-team/motion-designer/worker.yaml +84 -0
  259. package/template/workers/dev-team/product-planner/queue.json +4 -0
  260. package/template/workers/dev-team/product-planner/worker.yaml +220 -0
  261. package/template/workers/dev-team/project-manager/package-lock.json +1252 -0
  262. package/template/workers/dev-team/project-manager/package.json +27 -0
  263. package/template/workers/dev-team/project-manager/skills/create-prd.md +66 -0
  264. package/template/workers/dev-team/project-manager/skills/next-issue.md +51 -0
  265. package/template/workers/dev-team/project-manager/skills/project-status.md +59 -0
  266. package/template/workers/dev-team/project-manager/skills/update-learnings.md +65 -0
  267. package/template/workers/dev-team/project-manager/src/index.ts +54 -0
  268. package/template/workers/dev-team/project-manager/src/mcp-server.ts +207 -0
  269. package/template/workers/dev-team/project-manager/src/skills/create-prd.ts +86 -0
  270. package/template/workers/dev-team/project-manager/src/skills/next-issue.ts +137 -0
  271. package/template/workers/dev-team/project-manager/src/skills/project-status.ts +131 -0
  272. package/template/workers/dev-team/project-manager/src/skills/update-learnings.ts +94 -0
  273. package/template/workers/dev-team/project-manager/tsconfig.json +19 -0
  274. package/template/workers/dev-team/project-manager/worker.yaml +96 -0
  275. package/template/workers/dev-team/qa-tester/package.json +24 -0
  276. package/template/workers/dev-team/qa-tester/skills/create-demo-account.md +36 -0
  277. package/template/workers/dev-team/qa-tester/skills/run-tests.md +36 -0
  278. package/template/workers/dev-team/qa-tester/skills/write-test.md +27 -0
  279. package/template/workers/dev-team/qa-tester/src/index.ts +61 -0
  280. package/template/workers/dev-team/qa-tester/src/mcp-server.ts +88 -0
  281. package/template/workers/dev-team/qa-tester/tsconfig.json +18 -0
  282. package/template/workers/dev-team/qa-tester/worker.yaml +116 -0
  283. package/template/workers/dev-team/task-executor/package-lock.json +1252 -0
  284. package/template/workers/dev-team/task-executor/package.json +27 -0
  285. package/template/workers/dev-team/task-executor/skills/analyze-issue.md +101 -0
  286. package/template/workers/dev-team/task-executor/skills/execute.md +133 -0
  287. package/template/workers/dev-team/task-executor/skills/report-learnings.md +106 -0
  288. package/template/workers/dev-team/task-executor/skills/validate-completion.md +121 -0
  289. package/template/workers/dev-team/task-executor/src/index.ts +54 -0
  290. package/template/workers/dev-team/task-executor/src/mcp-server.ts +139 -0
  291. package/template/workers/dev-team/task-executor/src/skills/analyze-issue.ts +219 -0
  292. package/template/workers/dev-team/task-executor/src/skills/execute.ts +132 -0
  293. package/template/workers/dev-team/task-executor/src/skills/report-learnings.ts +119 -0
  294. package/template/workers/dev-team/task-executor/src/skills/validate-completion.ts +142 -0
  295. package/template/workers/dev-team/task-executor/tsconfig.json +19 -0
  296. package/template/workers/dev-team/task-executor/worker.yaml +110 -0
  297. package/template/workers/registry.yaml +171 -0
  298. package/template/workers/security-scanner/README.md +73 -0
  299. package/template/workers/security-scanner/skills/pre-deploy-check.md +205 -0
  300. package/template/workers/security-scanner/worker.yaml +26 -0
  301. package/template/workspace/checkpoints/.gitkeep +0 -0
  302. package/template/workspace/content-ideas/inbox.jsonl +0 -0
  303. package/template/workspace/drafts/.gitkeep +0 -0
  304. package/template/workspace/learnings/.gitkeep +3 -0
  305. package/template/workspace/orchestrator/.gitkeep +0 -0
  306. package/template/workspace/ralph-test/COMPLETE.md +18 -0
  307. package/template/workspace/ralph-test/hello.txt +2 -0
  308. package/template/workspace/reports/.gitkeep +0 -0
  309. package/template/workspace/scratch/.gitkeep +0 -0
  310. package/template/workspace/threads/.gitkeep +3 -0
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Scoring utilities for content analysis workers
3
+ */
4
+
5
+ import type { ScoreCategory, Finding, AnalysisResult } from './types.js';
6
+
7
+ /**
8
+ * Calculate weighted overall score from categories
9
+ */
10
+ export function calculateOverallScore(categories: ScoreCategory[]): number {
11
+ const totalWeight = categories.reduce((sum, cat) => sum + cat.weight, 0);
12
+ if (totalWeight === 0) return 0;
13
+
14
+ const weightedSum = categories.reduce((sum, cat) => {
15
+ const normalizedScore = (cat.score / cat.maxScore) * 100;
16
+ return sum + (normalizedScore * cat.weight);
17
+ }, 0);
18
+
19
+ return Math.round(weightedSum / totalWeight);
20
+ }
21
+
22
+ /**
23
+ * Create a score category
24
+ */
25
+ export function createCategory(
26
+ name: string,
27
+ score: number,
28
+ maxScore: number,
29
+ weight: number,
30
+ details?: string
31
+ ): ScoreCategory {
32
+ return {
33
+ name,
34
+ score: Math.max(0, Math.min(score, maxScore)),
35
+ maxScore,
36
+ weight,
37
+ details
38
+ };
39
+ }
40
+
41
+ /**
42
+ * Calculate category score from findings
43
+ */
44
+ export function scoreFromFindings(
45
+ findings: Finding[],
46
+ categoryName: string,
47
+ maxScore: number
48
+ ): number {
49
+ const categoryFindings = findings.filter(f => f.category === categoryName);
50
+
51
+ let deductions = 0;
52
+ for (const finding of categoryFindings) {
53
+ switch (finding.severity) {
54
+ case 'critical':
55
+ deductions += 25;
56
+ break;
57
+ case 'warning':
58
+ deductions += 10;
59
+ break;
60
+ case 'info':
61
+ deductions += 2;
62
+ break;
63
+ case 'pass':
64
+ // No deduction
65
+ break;
66
+ }
67
+ }
68
+
69
+ return Math.max(0, maxScore - deductions);
70
+ }
71
+
72
+ /**
73
+ * Get score grade from percentage
74
+ */
75
+ export function getGrade(score: number): string {
76
+ if (score >= 90) return 'A';
77
+ if (score >= 80) return 'B';
78
+ if (score >= 70) return 'C';
79
+ if (score >= 60) return 'D';
80
+ return 'F';
81
+ }
82
+
83
+ /**
84
+ * Get score label from percentage
85
+ */
86
+ export function getScoreLabel(score: number): string {
87
+ if (score >= 90) return 'Excellent';
88
+ if (score >= 80) return 'Good';
89
+ if (score >= 70) return 'Acceptable';
90
+ if (score >= 60) return 'Needs Improvement';
91
+ return 'Critical Issues';
92
+ }
93
+
94
+ /**
95
+ * Count findings by severity
96
+ */
97
+ export function countBySeverity(findings: Finding[]): Record<Finding['severity'], number> {
98
+ return {
99
+ critical: findings.filter(f => f.severity === 'critical').length,
100
+ warning: findings.filter(f => f.severity === 'warning').length,
101
+ info: findings.filter(f => f.severity === 'info').length,
102
+ pass: findings.filter(f => f.severity === 'pass').length
103
+ };
104
+ }
105
+
106
+ /**
107
+ * Sort findings by severity (critical first)
108
+ */
109
+ export function sortBySeverity(findings: Finding[]): Finding[] {
110
+ const severityOrder: Record<Finding['severity'], number> = {
111
+ critical: 0,
112
+ warning: 1,
113
+ info: 2,
114
+ pass: 3
115
+ };
116
+
117
+ return [...findings].sort((a, b) =>
118
+ severityOrder[a.severity] - severityOrder[b.severity]
119
+ );
120
+ }
121
+
122
+ /**
123
+ * Calculate percentage match
124
+ */
125
+ export function calculateMatchPercentage(
126
+ matches: number,
127
+ total: number
128
+ ): number {
129
+ if (total === 0) return 100;
130
+ return Math.round((matches / total) * 100);
131
+ }
132
+
133
+ /**
134
+ * Normalize score to 0-100 range
135
+ */
136
+ export function normalizeScore(score: number, min: number, max: number): number {
137
+ if (max === min) return 100;
138
+ const normalized = ((score - min) / (max - min)) * 100;
139
+ return Math.round(Math.max(0, Math.min(100, normalized)));
140
+ }
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Shared types for content analysis workers
3
+ */
4
+
5
+ // Page content structure from JSON extraction
6
+ export interface PageContent {
7
+ url: string;
8
+ title: string;
9
+ meta: PageMeta;
10
+ sections: ContentSection[];
11
+ ctas: CTA[];
12
+ images: ImageAsset[];
13
+ extractedAt: string;
14
+ }
15
+
16
+ export interface PageMeta {
17
+ description?: string;
18
+ keywords?: string[];
19
+ ogTitle?: string;
20
+ ogDescription?: string;
21
+ ogImage?: string;
22
+ }
23
+
24
+ export interface ContentSection {
25
+ id: string;
26
+ type: 'hero' | 'features' | 'testimonials' | 'pricing' | 'cta' | 'content' | 'footer' | 'header' | 'other';
27
+ heading?: string;
28
+ subheading?: string;
29
+ paragraphs: string[];
30
+ bulletPoints?: string[];
31
+ }
32
+
33
+ export interface CTA {
34
+ text: string;
35
+ href?: string;
36
+ type: 'primary' | 'secondary' | 'link';
37
+ location: string; // section id or description
38
+ }
39
+
40
+ export interface ImageAsset {
41
+ src: string;
42
+ alt?: string;
43
+ context: string; // surrounding text or section
44
+ }
45
+
46
+ // Analysis result types
47
+ export interface AnalysisResult {
48
+ workerId: string;
49
+ pageUrl: string;
50
+ analyzedAt: string;
51
+ overallScore: number;
52
+ categories: ScoreCategory[];
53
+ findings: Finding[];
54
+ recommendations: Recommendation[];
55
+ }
56
+
57
+ export interface ScoreCategory {
58
+ name: string;
59
+ score: number;
60
+ maxScore: number;
61
+ weight: number;
62
+ details?: string;
63
+ }
64
+
65
+ export interface Finding {
66
+ severity: 'critical' | 'warning' | 'info' | 'pass';
67
+ category: string;
68
+ message: string;
69
+ location?: string;
70
+ evidence?: string;
71
+ }
72
+
73
+ export interface Recommendation {
74
+ priority: 'high' | 'medium' | 'low';
75
+ category: string;
76
+ current: string;
77
+ suggested: string;
78
+ rationale: string;
79
+ }
80
+
81
+ // Worker configuration
82
+ export interface WorkerConfig {
83
+ id: string;
84
+ name: string;
85
+ type: 'ContentWorker';
86
+ version: string;
87
+ knowledgePaths: string[];
88
+ outputDestination: string;
89
+ }
90
+
91
+ // Report metadata
92
+ export interface ReportMeta {
93
+ generatedAt: string;
94
+ workerId: string;
95
+ pageAnalyzed: string;
96
+ version: string;
97
+ }
98
+
99
+ // ============================================
100
+ // Analysis Input Types (US-006)
101
+ // ============================================
102
+
103
+ /**
104
+ * Structured input for analysis modules
105
+ */
106
+ export interface AnalysisInput {
107
+ pageSlug: string;
108
+ title: string;
109
+ headings: string[];
110
+ paragraphs: string[];
111
+ ctas: { text: string; link: string }[];
112
+ stats: { value: string; label: string }[];
113
+ claims: string[];
114
+ sections: SectionAnalysis[];
115
+ }
116
+
117
+ export interface SectionAnalysis {
118
+ id: string;
119
+ type: ContentSection['type'];
120
+ heading: string;
121
+ content: string[];
122
+ wordCount: number;
123
+ }
124
+
125
+ // ============================================
126
+ // Brand Analysis Types (US-007)
127
+ // ============================================
128
+
129
+ export interface BrandGuidelines {
130
+ voiceAttributes: string[];
131
+ toneDescriptors: string[];
132
+ approvedTerms: string[];
133
+ avoidTerms: string[];
134
+ messagingPillars: string[];
135
+ }
136
+
137
+ export interface BrandAnalysis {
138
+ overallScore: number;
139
+ toneScore: number;
140
+ messagingScore: number;
141
+ clarityScore: number;
142
+ findings: Finding[];
143
+ recommendations: Recommendation[];
144
+ }
145
+
146
+ // ============================================
147
+ // Conversion Analysis Types (US-008)
148
+ // ============================================
149
+
150
+ export interface ConversionAnalysis {
151
+ overallScore: number;
152
+ ctaScore: number;
153
+ valuePropScore: number;
154
+ urgencyScore: number;
155
+ socialProofScore: number;
156
+ findings: Finding[];
157
+ recommendations: Recommendation[];
158
+ }
159
+
160
+ // ============================================
161
+ // Accuracy Analysis Types (US-009)
162
+ // ============================================
163
+
164
+ export interface ProductData {
165
+ productName: string;
166
+ features: string[];
167
+ stats: Record<string, string>;
168
+ certifications: string[];
169
+ integrations: string[];
170
+ lastUpdated: string;
171
+ }
172
+
173
+ export interface AccuracyAnalysis {
174
+ overallScore: number;
175
+ claimsVerified: number;
176
+ claimsUnverified: number;
177
+ statsFound: number;
178
+ statsOutdated: number;
179
+ findings: Finding[];
180
+ recommendations: Recommendation[];
181
+ }
182
+
183
+ // ============================================
184
+ // Compliance Analysis Types (US-010)
185
+ // ============================================
186
+
187
+ export interface RegulatedTerm {
188
+ term: string;
189
+ location: string;
190
+ requiresProof: boolean;
191
+ hasProof: boolean;
192
+ disclaimer?: string;
193
+ risk: 'high' | 'medium' | 'low';
194
+ }
195
+
196
+ export interface ComplianceAnalysis {
197
+ overallScore: number;
198
+ regulatedTermsFound: RegulatedTerm[];
199
+ missingDisclaimers: string[];
200
+ unsubstantiatedClaims: string[];
201
+ findings: Finding[];
202
+ recommendations: Recommendation[];
203
+ }
204
+
205
+ // ============================================
206
+ // Full Analysis Types
207
+ // ============================================
208
+
209
+ export interface AnalysisConfig {
210
+ brandGuidelines?: BrandGuidelines;
211
+ productData?: ProductData;
212
+ enableBrand?: boolean;
213
+ enableConversion?: boolean;
214
+ enableAccuracy?: boolean;
215
+ enableCompliance?: boolean;
216
+ }
217
+
218
+ export interface FullAnalysis {
219
+ page: string;
220
+ timestamp: string;
221
+ brand?: BrandAnalysis;
222
+ conversion?: ConversionAnalysis;
223
+ accuracy?: AccuracyAnalysis;
224
+ compliance?: ComplianceAnalysis;
225
+ overallHealth: number;
226
+ topPriorities: Recommendation[];
227
+ }