create-hq 5.1.0 → 5.2.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 (299) hide show
  1. package/dist/deps.d.ts +2 -2
  2. package/dist/deps.d.ts.map +1 -1
  3. package/dist/deps.js +138 -29
  4. package/dist/deps.js.map +1 -1
  5. package/dist/index.js +1 -1
  6. package/dist/scaffold.d.ts.map +1 -1
  7. package/dist/scaffold.js +16 -26
  8. package/dist/scaffold.js.map +1 -1
  9. package/dist/ui.js +1 -1
  10. package/package.json +3 -6
  11. package/template/.claude/CLAUDE.md +0 -202
  12. package/template/.claude/commands/checkpoint.md +0 -127
  13. package/template/.claude/commands/cleanup.md +0 -307
  14. package/template/.claude/commands/execute-task.md +0 -440
  15. package/template/.claude/commands/exit-plan.md +0 -41
  16. package/template/.claude/commands/handoff.md +0 -97
  17. package/template/.claude/commands/learn.md +0 -218
  18. package/template/.claude/commands/metrics.md +0 -118
  19. package/template/.claude/commands/newworker.md +0 -162
  20. package/template/.claude/commands/nexttask.md +0 -67
  21. package/template/.claude/commands/prd.md +0 -238
  22. package/template/.claude/commands/reanchor.md +0 -51
  23. package/template/.claude/commands/remember.md +0 -126
  24. package/template/.claude/commands/run-project.md +0 -348
  25. package/template/.claude/commands/run.md +0 -110
  26. package/template/.claude/commands/search-reindex.md +0 -62
  27. package/template/.claude/commands/search.md +0 -100
  28. package/template/.claude/commands/setup.md +0 -381
  29. package/template/.claude/scripts/pure-ralph-loop.ps1 +0 -312
  30. package/template/.claude/scripts/pure-ralph-loop.sh +0 -859
  31. package/template/CHANGELOG.md +0 -220
  32. package/template/LICENSE +0 -21
  33. package/template/MIGRATION.md +0 -259
  34. package/template/README.md +0 -368
  35. package/template/data/journal/.gitkeep +0 -0
  36. package/template/docs/images/ascii-banner-options.md +0 -122
  37. package/template/docs/images/hq-banner.svg +0 -105
  38. package/template/knowledge/Ralph/01-overview.md +0 -71
  39. package/template/knowledge/Ralph/02-core-concepts.md +0 -114
  40. package/template/knowledge/Ralph/03-how-ralph-works.md +0 -184
  41. package/template/knowledge/Ralph/04-back-pressure.md +0 -222
  42. package/template/knowledge/Ralph/05-specifications.md +0 -210
  43. package/template/knowledge/Ralph/06-agents-md.md +0 -222
  44. package/template/knowledge/Ralph/07-implementation.md +0 -316
  45. package/template/knowledge/Ralph/08-economics.md +0 -182
  46. package/template/knowledge/Ralph/09-resources.md +0 -145
  47. package/template/knowledge/Ralph/10-claude-code-workflow.md +0 -212
  48. package/template/knowledge/Ralph/11-team-training-guide.md +0 -383
  49. package/template/knowledge/Ralph/README.md +0 -40
  50. package/template/knowledge/ai-security-framework/CONTRIBUTING.md +0 -139
  51. package/template/knowledge/ai-security-framework/GLOSSARY.md +0 -176
  52. package/template/knowledge/ai-security-framework/LICENSE +0 -21
  53. package/template/knowledge/ai-security-framework/QUICK-START.md +0 -172
  54. package/template/knowledge/ai-security-framework/README.md +0 -232
  55. package/template/knowledge/ai-security-framework/checklists/browser-security.md +0 -301
  56. package/template/knowledge/ai-security-framework/checklists/credential-isolation.md +0 -322
  57. package/template/knowledge/ai-security-framework/checklists/incident-response.md +0 -288
  58. package/template/knowledge/ai-security-framework/checklists/pre-flight.md +0 -249
  59. package/template/knowledge/ai-security-framework/checklists/weekly-audit.md +0 -159
  60. package/template/knowledge/ai-security-framework/configs/audit-logging.md +0 -372
  61. package/template/knowledge/ai-security-framework/configs/kill-switches.md +0 -354
  62. package/template/knowledge/ai-security-framework/docs/01-core-principles.md +0 -256
  63. package/template/knowledge/ai-security-framework/docs/02-threat-landscape.md +0 -326
  64. package/template/knowledge/ai-security-framework/docs/03-security-posture.md +0 -250
  65. package/template/knowledge/ai-security-framework/templates/agents-security.md +0 -233
  66. package/template/knowledge/design-styles/README.md +0 -42
  67. package/template/knowledge/design-styles/american-industrial.md +0 -136
  68. package/template/knowledge/design-styles/ethereal-abstract.md +0 -133
  69. package/template/knowledge/design-styles/liminal-portal.md +0 -111
  70. package/template/knowledge/design-styles/swipes/american-industrial/G-3m4YPW0AADdu2.jpeg +0 -0
  71. package/template/knowledge/design-styles/swipes/american-industrial/G-JJlt5WwAABK3K.png +0 -0
  72. package/template/knowledge/design-styles/swipes/american-industrial/G-JJmj5W0AEbJ-7.png +0 -0
  73. package/template/knowledge/design-styles/swipes/american-industrial/G59fgNuXkAAKLJQ (1).jpeg +0 -0
  74. package/template/knowledge/design-styles/swipes/american-industrial/G59fgNuXkAAKLJQ.jpeg +0 -0
  75. package/template/knowledge/design-styles/swipes/american-industrial/G7fVkn3WEAAM-ST.jpeg +0 -0
  76. package/template/knowledge/design-styles/swipes/american-industrial/G8ECO5JWEAIksyn.png +0 -0
  77. package/template/knowledge/design-styles/swipes/american-industrial/G9-3GQSWoAA8eqZ.png +0 -0
  78. package/template/knowledge/design-styles/swipes/american-industrial/G9xEOqrXkAEZRcs.png +0 -0
  79. package/template/knowledge/design-styles/swipes/american-industrial/G_MVeJrXQAA8sx4.jpeg +0 -0
  80. package/template/knowledge/design-styles/swipes/american-industrial/G_RSkmGXkAAgAVZ.png +0 -0
  81. package/template/knowledge/design-styles/swipes/american-industrial/README.md +0 -31
  82. package/template/knowledge/design-styles/swipes/american-industrial/qyqtg7Dq.png +0 -0
  83. package/template/knowledge/dev-team/README.md +0 -35
  84. package/template/knowledge/dev-team/patterns/README.md +0 -34
  85. package/template/knowledge/dev-team/patterns/frontend/react-best-practices.md +0 -178
  86. package/template/knowledge/dev-team/troubleshooting/README.md +0 -31
  87. package/template/knowledge/dev-team/workflows/README.md +0 -49
  88. package/template/knowledge/hq/checkpoint-schema.json +0 -51
  89. package/template/knowledge/hq/index-md-spec.md +0 -74
  90. package/template/knowledge/hq/thread-schema.md +0 -153
  91. package/template/knowledge/hq-core/checkpoint-schema.json +0 -51
  92. package/template/knowledge/hq-core/index-md-spec.md +0 -74
  93. package/template/knowledge/hq-core/thread-schema.md +0 -153
  94. package/template/knowledge/loom/README.md +0 -51
  95. package/template/knowledge/loom/architecture.md +0 -125
  96. package/template/knowledge/loom/code-style.md +0 -169
  97. package/template/knowledge/loom/llm-proxy.md +0 -132
  98. package/template/knowledge/loom/state-machine.md +0 -131
  99. package/template/knowledge/loom/thread-system.md +0 -117
  100. package/template/knowledge/loom/tools.md +0 -94
  101. package/template/knowledge/loom/weaver.md +0 -96
  102. package/template/knowledge/loom/web-frontend.md +0 -131
  103. package/template/knowledge/projects/README.md +0 -72
  104. package/template/knowledge/projects/templates/README.template.md +0 -28
  105. package/template/knowledge/workers/README.md +0 -195
  106. package/template/knowledge/workers/ralph-loop-pattern.md +0 -157
  107. package/template/knowledge/workers/skill-schema.md +0 -182
  108. package/template/knowledge/workers/state-machine.md +0 -102
  109. package/template/knowledge/workers/templates/base-worker.yaml +0 -73
  110. package/template/knowledge/workers/templates/code-worker.yaml +0 -85
  111. package/template/knowledge/workers/templates/skill.yaml +0 -49
  112. package/template/knowledge/workers/templates/social-worker.yaml +0 -70
  113. package/template/modules/examples/full-manifest.yaml +0 -92
  114. package/template/modules/examples/minimal.yaml +0 -14
  115. package/template/modules/modules.yaml +0 -59
  116. package/template/projects/.gitkeep +0 -0
  117. package/template/projects/incorporate-workers-into-pure-ralph/prd.json +0 -88
  118. package/template/projects/pure-ralph-branch-isolation/README.md +0 -114
  119. package/template/projects/pure-ralph-branch-isolation/prd.json +0 -123
  120. package/template/projects/purist-ralph-loop/README.md +0 -148
  121. package/template/projects/purist-ralph-loop/prd.json +0 -135
  122. package/template/projects/ralph-test/prd.json +0 -50
  123. package/template/prompts/pure-ralph-base.md +0 -551
  124. package/template/settings/.gitkeep +0 -0
  125. package/template/settings/pure-ralph.json +0 -42
  126. package/template/social-content/drafts/INDEX.md +0 -21
  127. package/template/social-content/drafts/linkedin/.gitkeep +0 -1
  128. package/template/social-content/drafts/x/.gitkeep +0 -1
  129. package/template/social-content/images/.gitkeep +0 -1
  130. package/template/starter-projects/code-worker/README.md +0 -97
  131. package/template/starter-projects/code-worker/prd.json +0 -45
  132. package/template/starter-projects/personal-assistant/README.md +0 -42
  133. package/template/starter-projects/personal-assistant/prd.json +0 -43
  134. package/template/starter-projects/social-media/README.md +0 -60
  135. package/template/starter-projects/social-media/prd.json +0 -43
  136. package/template/workers/content-brand/README.md +0 -59
  137. package/template/workers/content-brand/skills/messaging-alignment.md +0 -91
  138. package/template/workers/content-brand/skills/tone-check.md +0 -76
  139. package/template/workers/content-brand/skills/voice-analysis.md +0 -68
  140. package/template/workers/content-brand/worker.yaml +0 -81
  141. package/template/workers/content-legal/README.md +0 -80
  142. package/template/workers/content-legal/skills/claim-substantiation.md +0 -150
  143. package/template/workers/content-legal/skills/compliance-scan.md +0 -123
  144. package/template/workers/content-legal/skills/disclaimer-check.md +0 -146
  145. package/template/workers/content-legal/worker.yaml +0 -118
  146. package/template/workers/content-product/README.md +0 -77
  147. package/template/workers/content-product/skills/claim-verification.md +0 -96
  148. package/template/workers/content-product/skills/feature-accuracy.md +0 -117
  149. package/template/workers/content-product/skills/stats-check.md +0 -128
  150. package/template/workers/content-product/worker.yaml +0 -97
  151. package/template/workers/content-sales/README.md +0 -70
  152. package/template/workers/content-sales/skills/conversion-analysis.md +0 -96
  153. package/template/workers/content-sales/skills/cta-audit.md +0 -107
  154. package/template/workers/content-sales/skills/value-prop-check.md +0 -114
  155. package/template/workers/content-sales/worker.yaml +0 -93
  156. package/template/workers/content-shared/cli.ts +0 -242
  157. package/template/workers/content-shared/index.ts +0 -234
  158. package/template/workers/content-shared/lib/accuracy-analyzer.ts +0 -661
  159. package/template/workers/content-shared/lib/analyze.ts +0 -370
  160. package/template/workers/content-shared/lib/brand-analyzer.ts +0 -526
  161. package/template/workers/content-shared/lib/cms-integration.ts +0 -446
  162. package/template/workers/content-shared/lib/compliance-analyzer.ts +0 -655
  163. package/template/workers/content-shared/lib/conversion-analyzer.ts +0 -555
  164. package/template/workers/content-shared/lib/github-integration.ts +0 -582
  165. package/template/workers/content-shared/lib/output.ts +0 -373
  166. package/template/workers/content-shared/lib/parser.ts +0 -771
  167. package/template/workers/content-shared/lib/priority.ts +0 -439
  168. package/template/workers/content-shared/lib/recommendations.ts +0 -512
  169. package/template/workers/content-shared/lib/reporter.ts +0 -749
  170. package/template/workers/content-shared/lib/restructure.ts +0 -664
  171. package/template/workers/content-shared/lib/scorer.ts +0 -140
  172. package/template/workers/content-shared/lib/types.ts +0 -227
  173. package/template/workers/content-shared/lib/variants.ts +0 -595
  174. package/template/workers/content-shared/package.json +0 -51
  175. package/template/workers/content-shared/pnpm-lock.yaml +0 -39
  176. package/template/workers/content-shared/test/sample-page.json +0 -115
  177. package/template/workers/content-shared/tsconfig.json +0 -20
  178. package/template/workers/dev-team/README.md +0 -166
  179. package/template/workers/dev-team/_template.yaml +0 -70
  180. package/template/workers/dev-team/architect/package.json +0 -27
  181. package/template/workers/dev-team/architect/skills/api-design.md +0 -89
  182. package/template/workers/dev-team/architect/skills/refactor-plan.md +0 -96
  183. package/template/workers/dev-team/architect/skills/system-design.md +0 -100
  184. package/template/workers/dev-team/architect/src/index.ts +0 -49
  185. package/template/workers/dev-team/architect/src/mcp-server.ts +0 -122
  186. package/template/workers/dev-team/architect/src/skills/api-design.ts +0 -316
  187. package/template/workers/dev-team/architect/src/skills/refactor-plan.ts +0 -264
  188. package/template/workers/dev-team/architect/src/skills/system-design.ts +0 -212
  189. package/template/workers/dev-team/architect/tsconfig.json +0 -19
  190. package/template/workers/dev-team/architect/worker.yaml +0 -128
  191. package/template/workers/dev-team/backend-dev/package-lock.json +0 -1252
  192. package/template/workers/dev-team/backend-dev/package.json +0 -27
  193. package/template/workers/dev-team/backend-dev/skills/implement-endpoint.md +0 -70
  194. package/template/workers/dev-team/backend-dev/skills/implement-service.md +0 -62
  195. package/template/workers/dev-team/backend-dev/src/index.ts +0 -51
  196. package/template/workers/dev-team/backend-dev/src/mcp-server.ts +0 -109
  197. package/template/workers/dev-team/backend-dev/src/skills/implement-endpoint.ts +0 -122
  198. package/template/workers/dev-team/backend-dev/src/skills/implement-service.ts +0 -126
  199. package/template/workers/dev-team/backend-dev/tsconfig.json +0 -19
  200. package/template/workers/dev-team/backend-dev/worker.yaml +0 -128
  201. package/template/workers/dev-team/code-reviewer/package-lock.json +0 -1080
  202. package/template/workers/dev-team/code-reviewer/package.json +0 -24
  203. package/template/workers/dev-team/code-reviewer/skills/merge-to-production.md +0 -61
  204. package/template/workers/dev-team/code-reviewer/skills/merge-to-staging.md +0 -54
  205. package/template/workers/dev-team/code-reviewer/skills/request-changes.md +0 -63
  206. package/template/workers/dev-team/code-reviewer/skills/review-pr.md +0 -77
  207. package/template/workers/dev-team/code-reviewer/src/index.ts +0 -56
  208. package/template/workers/dev-team/code-reviewer/src/mcp-server.ts +0 -101
  209. package/template/workers/dev-team/code-reviewer/tsconfig.json +0 -19
  210. package/template/workers/dev-team/code-reviewer/worker.yaml +0 -90
  211. package/template/workers/dev-team/database-dev/package.json +0 -22
  212. package/template/workers/dev-team/database-dev/skills/create-schema.md +0 -48
  213. package/template/workers/dev-team/database-dev/src/index.ts +0 -50
  214. package/template/workers/dev-team/database-dev/src/mcp-server.ts +0 -76
  215. package/template/workers/dev-team/database-dev/tsconfig.json +0 -18
  216. package/template/workers/dev-team/database-dev/worker.yaml +0 -90
  217. package/template/workers/dev-team/frontend-dev/package.json +0 -22
  218. package/template/workers/dev-team/frontend-dev/skills/create-component.md +0 -26
  219. package/template/workers/dev-team/frontend-dev/src/index.ts +0 -50
  220. package/template/workers/dev-team/frontend-dev/src/mcp-server.ts +0 -77
  221. package/template/workers/dev-team/frontend-dev/tsconfig.json +0 -18
  222. package/template/workers/dev-team/frontend-dev/worker.yaml +0 -132
  223. package/template/workers/dev-team/infra-dev/package.json +0 -24
  224. package/template/workers/dev-team/infra-dev/skills/add-monitoring.md +0 -73
  225. package/template/workers/dev-team/infra-dev/skills/configure-deployment.md +0 -80
  226. package/template/workers/dev-team/infra-dev/skills/create-dockerfile.md +0 -62
  227. package/template/workers/dev-team/infra-dev/skills/setup-cicd.md +0 -63
  228. package/template/workers/dev-team/infra-dev/src/index.ts +0 -55
  229. package/template/workers/dev-team/infra-dev/src/mcp-server.ts +0 -82
  230. package/template/workers/dev-team/infra-dev/tsconfig.json +0 -19
  231. package/template/workers/dev-team/infra-dev/worker.yaml +0 -92
  232. package/template/workers/dev-team/knowledge-curator/package.json +0 -24
  233. package/template/workers/dev-team/knowledge-curator/skills/curate-troubleshooting.md +0 -63
  234. package/template/workers/dev-team/knowledge-curator/skills/process-learnings.md +0 -61
  235. package/template/workers/dev-team/knowledge-curator/skills/sync-documentation.md +0 -76
  236. package/template/workers/dev-team/knowledge-curator/skills/update-patterns.md +0 -63
  237. package/template/workers/dev-team/knowledge-curator/src/index.ts +0 -53
  238. package/template/workers/dev-team/knowledge-curator/src/mcp-server.ts +0 -92
  239. package/template/workers/dev-team/knowledge-curator/tsconfig.json +0 -19
  240. package/template/workers/dev-team/knowledge-curator/worker.yaml +0 -80
  241. package/template/workers/dev-team/motion-designer/package.json +0 -22
  242. package/template/workers/dev-team/motion-designer/skills/add-animation.md +0 -25
  243. package/template/workers/dev-team/motion-designer/skills/generate-image.md +0 -36
  244. package/template/workers/dev-team/motion-designer/src/index.ts +0 -63
  245. package/template/workers/dev-team/motion-designer/src/mcp-server.ts +0 -79
  246. package/template/workers/dev-team/motion-designer/tsconfig.json +0 -18
  247. package/template/workers/dev-team/motion-designer/worker.yaml +0 -84
  248. package/template/workers/dev-team/product-planner/queue.json +0 -4
  249. package/template/workers/dev-team/product-planner/worker.yaml +0 -220
  250. package/template/workers/dev-team/project-manager/package-lock.json +0 -1252
  251. package/template/workers/dev-team/project-manager/package.json +0 -27
  252. package/template/workers/dev-team/project-manager/skills/create-prd.md +0 -66
  253. package/template/workers/dev-team/project-manager/skills/next-issue.md +0 -51
  254. package/template/workers/dev-team/project-manager/skills/project-status.md +0 -59
  255. package/template/workers/dev-team/project-manager/skills/update-learnings.md +0 -65
  256. package/template/workers/dev-team/project-manager/src/index.ts +0 -54
  257. package/template/workers/dev-team/project-manager/src/mcp-server.ts +0 -207
  258. package/template/workers/dev-team/project-manager/src/skills/create-prd.ts +0 -86
  259. package/template/workers/dev-team/project-manager/src/skills/next-issue.ts +0 -137
  260. package/template/workers/dev-team/project-manager/src/skills/project-status.ts +0 -131
  261. package/template/workers/dev-team/project-manager/src/skills/update-learnings.ts +0 -94
  262. package/template/workers/dev-team/project-manager/tsconfig.json +0 -19
  263. package/template/workers/dev-team/project-manager/worker.yaml +0 -96
  264. package/template/workers/dev-team/qa-tester/package.json +0 -24
  265. package/template/workers/dev-team/qa-tester/skills/create-demo-account.md +0 -36
  266. package/template/workers/dev-team/qa-tester/skills/run-tests.md +0 -36
  267. package/template/workers/dev-team/qa-tester/skills/write-test.md +0 -27
  268. package/template/workers/dev-team/qa-tester/src/index.ts +0 -61
  269. package/template/workers/dev-team/qa-tester/src/mcp-server.ts +0 -88
  270. package/template/workers/dev-team/qa-tester/tsconfig.json +0 -18
  271. package/template/workers/dev-team/qa-tester/worker.yaml +0 -116
  272. package/template/workers/dev-team/task-executor/package-lock.json +0 -1252
  273. package/template/workers/dev-team/task-executor/package.json +0 -27
  274. package/template/workers/dev-team/task-executor/skills/analyze-issue.md +0 -101
  275. package/template/workers/dev-team/task-executor/skills/execute.md +0 -133
  276. package/template/workers/dev-team/task-executor/skills/report-learnings.md +0 -106
  277. package/template/workers/dev-team/task-executor/skills/validate-completion.md +0 -121
  278. package/template/workers/dev-team/task-executor/src/index.ts +0 -54
  279. package/template/workers/dev-team/task-executor/src/mcp-server.ts +0 -139
  280. package/template/workers/dev-team/task-executor/src/skills/analyze-issue.ts +0 -219
  281. package/template/workers/dev-team/task-executor/src/skills/execute.ts +0 -132
  282. package/template/workers/dev-team/task-executor/src/skills/report-learnings.ts +0 -119
  283. package/template/workers/dev-team/task-executor/src/skills/validate-completion.ts +0 -142
  284. package/template/workers/dev-team/task-executor/tsconfig.json +0 -19
  285. package/template/workers/dev-team/task-executor/worker.yaml +0 -110
  286. package/template/workers/registry.yaml +0 -171
  287. package/template/workers/security-scanner/README.md +0 -73
  288. package/template/workers/security-scanner/skills/pre-deploy-check.md +0 -205
  289. package/template/workers/security-scanner/worker.yaml +0 -26
  290. package/template/workspace/checkpoints/.gitkeep +0 -0
  291. package/template/workspace/content-ideas/inbox.jsonl +0 -0
  292. package/template/workspace/drafts/.gitkeep +0 -0
  293. package/template/workspace/learnings/.gitkeep +0 -3
  294. package/template/workspace/orchestrator/.gitkeep +0 -0
  295. package/template/workspace/ralph-test/COMPLETE.md +0 -18
  296. package/template/workspace/ralph-test/hello.txt +0 -2
  297. package/template/workspace/reports/.gitkeep +0 -0
  298. package/template/workspace/scratch/.gitkeep +0 -0
  299. package/template/workspace/threads/.gitkeep +0 -3
@@ -1,137 +0,0 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
- import { execSync } from 'child_process';
4
-
5
- interface Story {
6
- id: string;
7
- title: string;
8
- description?: string;
9
- acceptance_criteria: string[];
10
- priority: number;
11
- passes: boolean;
12
- dependsOn?: string[];
13
- worker_hints?: string[];
14
- }
15
-
16
- interface Epic {
17
- id: string;
18
- title: string;
19
- stories: Story[];
20
- }
21
-
22
- interface PRD {
23
- project: string;
24
- epics: Epic[];
25
- }
26
-
27
- interface NextIssueOptions {
28
- project: string;
29
- filter?: string;
30
- priority?: string;
31
- }
32
-
33
- export async function nextIssue(options: NextIssueOptions): Promise<void> {
34
- const { project, filter, priority } = options;
35
-
36
- // Find PRD file
37
- const prdPath = path.join(process.cwd(), '..', '..', '..', 'projects', project, 'prd.json');
38
-
39
- if (!fs.existsSync(prdPath)) {
40
- console.error(`PRD not found at ${prdPath}`);
41
- console.log('\nTo create a new PRD, run:');
42
- console.log(` project-manager create-prd --name ${project} --input requirements.md`);
43
- process.exit(1);
44
- }
45
-
46
- const prd: PRD = JSON.parse(fs.readFileSync(prdPath, 'utf-8'));
47
-
48
- // Collect all stories with their pass status
49
- const allStories: (Story & { epicId: string; epicTitle: string })[] = [];
50
- for (const epic of prd.epics) {
51
- for (const story of epic.stories) {
52
- allStories.push({ ...story, epicId: epic.id, epicTitle: epic.title });
53
- }
54
- }
55
-
56
- // Build pass map for dependency checking
57
- const passMap = new Map<string, boolean>();
58
- for (const story of allStories) {
59
- passMap.set(story.id, story.passes);
60
- }
61
-
62
- // Filter to incomplete stories with met dependencies
63
- let candidates = allStories.filter(story => {
64
- if (story.passes) return false;
65
-
66
- // Check dependencies
67
- if (story.dependsOn && story.dependsOn.length > 0) {
68
- for (const dep of story.dependsOn) {
69
- if (!passMap.get(dep)) return false;
70
- }
71
- }
72
-
73
- return true;
74
- });
75
-
76
- // Apply optional filters
77
- if (priority) {
78
- const priorityMap: Record<string, number> = { high: 1, medium: 2, low: 3 };
79
- const priorityValue = priorityMap[priority.toLowerCase()];
80
- if (priorityValue) {
81
- candidates = candidates.filter(s => s.priority <= priorityValue);
82
- }
83
- }
84
-
85
- if (candidates.length === 0) {
86
- console.log('No eligible issues found.');
87
- console.log('\nPossible reasons:');
88
- console.log(' - All stories are complete (passes: true)');
89
- console.log(' - Remaining stories have unmet dependencies');
90
- process.exit(0);
91
- }
92
-
93
- // Score and sort candidates
94
- candidates.sort((a, b) => {
95
- // Priority first (lower number = higher priority)
96
- if (a.priority !== b.priority) return a.priority - b.priority;
97
-
98
- // Then by number of stories blocked by this one
99
- const aBlocks = allStories.filter(s => s.dependsOn?.includes(a.id)).length;
100
- const bBlocks = allStories.filter(s => s.dependsOn?.includes(b.id)).length;
101
- return bBlocks - aBlocks;
102
- });
103
-
104
- // Present top candidates
105
- const top = candidates.slice(0, 3);
106
- const recommended = top[0];
107
-
108
- console.log(`\n=== Next Issue Selection for ${project} ===\n`);
109
- console.log(`Recommended: ${recommended.id} "${recommended.title}"`);
110
- console.log(` Epic: ${recommended.epicTitle}`);
111
- console.log(` Priority: ${recommended.priority}`);
112
-
113
- const blocksCount = allStories.filter(s => s.dependsOn?.includes(recommended.id)).length;
114
- if (blocksCount > 0) {
115
- console.log(` Blocks: ${blocksCount} other stories`);
116
- }
117
-
118
- if (recommended.worker_hints && recommended.worker_hints.length > 0) {
119
- console.log(` Workers: ${recommended.worker_hints.join(' → ')}`);
120
- }
121
-
122
- console.log('\n Acceptance Criteria:');
123
- for (const criterion of recommended.acceptance_criteria) {
124
- console.log(` - ${criterion}`);
125
- }
126
-
127
- if (top.length > 1) {
128
- console.log('\nAlternatives:');
129
- for (let i = 1; i < top.length; i++) {
130
- const alt = top[i];
131
- console.log(` - ${alt.id}: "${alt.title}" (Priority: ${alt.priority})`);
132
- }
133
- }
134
-
135
- console.log('\n[Human approval required to proceed]');
136
- console.log('To execute, run task-executor with the selected issue.');
137
- }
@@ -1,131 +0,0 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
-
4
- interface Story {
5
- id: string;
6
- title: string;
7
- passes: boolean;
8
- dependsOn?: string[];
9
- }
10
-
11
- interface Epic {
12
- id: string;
13
- title: string;
14
- stories: Story[];
15
- }
16
-
17
- interface PRD {
18
- project: string;
19
- epics: Epic[];
20
- }
21
-
22
- interface ProjectStatusOptions {
23
- project: string;
24
- verbose?: boolean;
25
- format?: string;
26
- }
27
-
28
- export async function projectStatus(options: ProjectStatusOptions): Promise<void> {
29
- const { project, verbose, format = 'table' } = options;
30
-
31
- const prdPath = path.join(process.cwd(), '..', '..', '..', 'projects', project, 'prd.json');
32
-
33
- if (!fs.existsSync(prdPath)) {
34
- console.error(`PRD not found at ${prdPath}`);
35
- process.exit(1);
36
- }
37
-
38
- const prd: PRD = JSON.parse(fs.readFileSync(prdPath, 'utf-8'));
39
-
40
- // Collect all stories
41
- const allStories: (Story & { epicTitle: string })[] = [];
42
- for (const epic of prd.epics) {
43
- for (const story of epic.stories) {
44
- allStories.push({ ...story, epicTitle: epic.title });
45
- }
46
- }
47
-
48
- // Calculate stats
49
- const total = allStories.length;
50
- const completed = allStories.filter(s => s.passes).length;
51
- const pending = allStories.filter(s => !s.passes).length;
52
- const percentage = Math.round((completed / total) * 100);
53
-
54
- // Build pass map for dependency checking
55
- const passMap = new Map<string, boolean>();
56
- for (const story of allStories) {
57
- passMap.set(story.id, story.passes);
58
- }
59
-
60
- // Find blocked stories
61
- const blocked = allStories.filter(story => {
62
- if (story.passes) return false;
63
- if (!story.dependsOn || story.dependsOn.length === 0) return false;
64
- return story.dependsOn.some(dep => !passMap.get(dep));
65
- });
66
-
67
- // Find ready stories (not passed, dependencies met)
68
- const ready = allStories.filter(story => {
69
- if (story.passes) return false;
70
- if (!story.dependsOn || story.dependsOn.length === 0) return true;
71
- return story.dependsOn.every(dep => passMap.get(dep));
72
- });
73
-
74
- // Output
75
- if (format === 'json') {
76
- console.log(JSON.stringify({
77
- project,
78
- total,
79
- completed,
80
- pending,
81
- percentage,
82
- blocked: blocked.map(s => s.id),
83
- ready: ready.map(s => s.id)
84
- }, null, 2));
85
- return;
86
- }
87
-
88
- // Progress bar
89
- const barLength = 20;
90
- const filledLength = Math.round((percentage / 100) * barLength);
91
- const bar = '█'.repeat(filledLength) + '░'.repeat(barLength - filledLength);
92
-
93
- console.log(`\n=== ${project} ===`);
94
- console.log(`Progress: ${bar} ${percentage}% (${completed}/${total} stories)\n`);
95
-
96
- if (completed > 0) {
97
- console.log(`✅ Completed (${completed}):`);
98
- for (const story of allStories.filter(s => s.passes)) {
99
- console.log(` - ${story.id}: ${story.title}`);
100
- }
101
- console.log();
102
- }
103
-
104
- if (ready.length > 0) {
105
- console.log(`⏳ Ready (${ready.length}):`);
106
- for (const story of ready) {
107
- console.log(` - ${story.id}: ${story.title}`);
108
- }
109
- console.log();
110
- }
111
-
112
- if (blocked.length > 0) {
113
- console.log(`🚫 Blocked (${blocked.length}):`);
114
- for (const story of blocked) {
115
- const blockedBy = story.dependsOn?.filter(dep => !passMap.get(dep)) || [];
116
- console.log(` - ${story.id}: ${story.title}`);
117
- console.log(` blocked by: ${blockedBy.join(', ')}`);
118
- }
119
- console.log();
120
- }
121
-
122
- // Next recommendation
123
- if (ready.length > 0) {
124
- console.log(`Next: Run task-executor on ${ready[0].id}`);
125
- console.log(` task-executor execute --issue ${ready[0].id} --project ${project}`);
126
- } else if (pending > 0) {
127
- console.log('⚠️ All pending stories are blocked. Resolve dependencies first.');
128
- } else {
129
- console.log('🎉 All stories complete!');
130
- }
131
- }
@@ -1,94 +0,0 @@
1
- import * as fs from 'fs';
2
- import * as path from 'path';
3
-
4
- interface Learning {
5
- type: 'project' | 'pattern' | 'troubleshoot' | 'workflow';
6
- category?: string;
7
- content: string;
8
- task?: string;
9
- }
10
-
11
- interface UpdateLearningsOptions {
12
- project?: string;
13
- dryRun?: boolean;
14
- }
15
-
16
- const KNOWLEDGE_BASE = path.join(process.cwd(), '..', '..', '..', 'knowledge', 'dev-team');
17
-
18
- export async function updateLearnings(options: UpdateLearningsOptions): Promise<void> {
19
- const { project, dryRun } = options;
20
-
21
- // Read learnings from stdin or prompt
22
- console.log('=== Update Learnings ===\n');
23
- console.log('Paste learning report (JSON format), then press Ctrl+D:\n');
24
-
25
- // In practice, this would read from stdin or a file
26
- // For now, show the expected format
27
- console.log('Expected format:');
28
- console.log(JSON.stringify({
29
- task: 'US-001',
30
- learnings: [
31
- { type: 'pattern', category: 'backend', content: 'Use retry wrapper for external APIs' },
32
- { type: 'troubleshoot', content: 'Redis must connect before auth middleware' }
33
- ]
34
- }, null, 2));
35
-
36
- console.log('\n[This skill processes learnings from task-executor]');
37
- console.log('\nRouting destinations:');
38
- console.log(' - project → projects/{name}/learnings/');
39
- console.log(' - pattern → knowledge/dev-team/patterns/{category}/');
40
- console.log(' - troubleshoot → knowledge/dev-team/troubleshooting/');
41
- console.log(' - workflow → knowledge/dev-team/workflows/');
42
-
43
- if (dryRun) {
44
- console.log('\n[Dry run mode - no files will be written]');
45
- }
46
- }
47
-
48
- export function routeLearning(learning: Learning, project?: string): string {
49
- const date = new Date().toISOString().split('T')[0];
50
- const slug = learning.content
51
- .toLowerCase()
52
- .replace(/[^a-z0-9]+/g, '-')
53
- .substring(0, 40);
54
-
55
- switch (learning.type) {
56
- case 'project':
57
- if (!project) throw new Error('Project required for project-specific learnings');
58
- return path.join('projects', project, 'learnings', `${date}-${slug}.md`);
59
-
60
- case 'pattern':
61
- const category = learning.category || 'general';
62
- return path.join(KNOWLEDGE_BASE, 'patterns', category, `${slug}.md`);
63
-
64
- case 'troubleshoot':
65
- return path.join(KNOWLEDGE_BASE, 'troubleshooting', `${slug}.md`);
66
-
67
- case 'workflow':
68
- return path.join(KNOWLEDGE_BASE, 'workflows', `${slug}.md`);
69
-
70
- default:
71
- throw new Error(`Unknown learning type: ${learning.type}`);
72
- }
73
- }
74
-
75
- export function formatLearning(learning: Learning, task?: string): string {
76
- const lines = [
77
- `# ${learning.content.split('.')[0]}`,
78
- '',
79
- `## Content`,
80
- learning.content,
81
- ''
82
- ];
83
-
84
- if (task) {
85
- lines.push(`## Source`);
86
- lines.push(`Learned from task: ${task}`);
87
- lines.push('');
88
- }
89
-
90
- lines.push(`## Date`);
91
- lines.push(new Date().toISOString().split('T')[0]);
92
-
93
- return lines.join('\n');
94
- }
@@ -1,19 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "target": "ES2022",
4
- "module": "commonjs",
5
- "lib": ["ES2022"],
6
- "outDir": "./dist",
7
- "rootDir": "./src",
8
- "strict": true,
9
- "esModuleInterop": true,
10
- "skipLibCheck": true,
11
- "forceConsistentCasingInFileNames": true,
12
- "resolveJsonModule": true,
13
- "declaration": true,
14
- "declarationMap": true,
15
- "sourceMap": true
16
- },
17
- "include": ["src/**/*"],
18
- "exclude": ["node_modules", "dist"]
19
- }
@@ -1,96 +0,0 @@
1
- worker:
2
- id: project-manager
3
- name: "Project Manager"
4
- type: OpsWorker
5
- version: "1.0"
6
-
7
- execution:
8
- mode: on_demand
9
- max_runtime: 10m
10
- retry_attempts: 1
11
-
12
- context:
13
- base:
14
- - workers/public/dev-team/project-manager/
15
- - workers/public/dev-team/project-manager/skills/
16
- - knowledge/public/dev-team/workflows/
17
- dynamic:
18
- - pattern: "projects/{project}/"
19
- when: always
20
- exclude:
21
- - node_modules/
22
- - dist/
23
- - "*.log"
24
-
25
- verification:
26
- post_execute:
27
- - check: typescript
28
- command: npm run typecheck
29
- approval_required: true
30
-
31
- output:
32
- destination: workspace/reports/dev-team/
33
- format: both
34
- naming: "{date}-project-manager-{skill}.{ext}"
35
-
36
- mcp:
37
- server:
38
- command: node
39
- args:
40
- - dist/mcp-server.js
41
- cwd: workers/public/dev-team/project-manager
42
- tools:
43
- - next_issue
44
- - create_prd
45
- - update_learnings
46
- - project_status
47
-
48
- # State Machine (Loom pattern)
49
- state_machine:
50
- enabled: true
51
- max_retries: 1
52
- hooks:
53
- post_execute:
54
- - auto_checkpoint
55
- - log_metrics
56
- on_error:
57
- - log_error
58
- - checkpoint_error_state
59
-
60
- instructions: |
61
- # Project Manager
62
-
63
- Orchestrates project execution: PRD lifecycle, issue selection, learning aggregation.
64
-
65
- ## Skills
66
-
67
- | Skill | Description |
68
- |-------|-------------|
69
- | next-issue | Select next issue from PRD/beads to work on |
70
- | create-prd | Create new PRD from requirements |
71
- | update-learnings | Route learnings to appropriate knowledge locations |
72
- | project-status | Show project progress and blockers |
73
-
74
- ## CLI Usage
75
-
76
- ```bash
77
- cd workers/public/dev-team/project-manager
78
- node dist/index.js next-issue --project my-feature
79
- node dist/index.js create-prd --name "New Feature" --input requirements.md
80
- node dist/index.js project-status --project my-feature
81
- ```
82
-
83
- ## Workflow
84
-
85
- 1. Read PRD/beads for project
86
- 2. Select next issue (passes=false, dependencies met)
87
- 3. Spawn task-executor with selected issue
88
- 4. Receive learnings from task-executor
89
- 5. Route learnings via update-learnings skill
90
- 6. Repeat until all issues pass
91
-
92
- ## Human-in-the-loop
93
-
94
- - Before issue selection: Show candidates, get approval
95
- - After task completion: Show learnings, confirm routing
96
- - On project completion: Summarize outcomes
@@ -1,24 +0,0 @@
1
- {
2
- "name": "@hq/qa-tester",
3
- "version": "1.0.0",
4
- "description": "Testing, browser automation, and accessibility verification",
5
- "main": "dist/index.js",
6
- "bin": { "qa-tester": "dist/index.js" },
7
- "scripts": {
8
- "build": "tsc",
9
- "typecheck": "tsc --noEmit",
10
- "dev": "ts-node src/index.ts",
11
- "mcp": "node dist/mcp-server.js"
12
- },
13
- "dependencies": {
14
- "@modelcontextprotocol/sdk": "^1.0.0",
15
- "@playwright/test": "^1.57.0",
16
- "@axe-core/playwright": "^4.10.0",
17
- "commander": "^12.1.0"
18
- },
19
- "devDependencies": {
20
- "@types/node": "^22.10.0",
21
- "typescript": "^5.7.2",
22
- "ts-node": "^10.9.2"
23
- }
24
- }
@@ -1,36 +0,0 @@
1
- # create-demo-account
2
-
3
- Create a demo account for testing purposes.
4
-
5
- ## Arguments
6
-
7
- `$ARGUMENTS` = `--platform <shopify|stripe|etc>` (required)
8
-
9
- Optional:
10
- - `--name <string>` - Account name
11
- - `--project <name>` - Project context
12
-
13
- ## Process
14
-
15
- 1. Identify platform requirements
16
- 2. Generate demo credentials
17
- 3. Create account via API/UI
18
- 4. Store credentials safely
19
- 5. Verify account works
20
-
21
- ## Output
22
-
23
- Demo account details stored in:
24
- `projects/{project}/test-env/demo-accounts.json`
25
-
26
- ## Platforms Supported
27
-
28
- - Shopify (development store)
29
- - Stripe (test mode)
30
- - Custom platforms (via config)
31
-
32
- ## Human-in-the-loop
33
-
34
- - Approve account creation
35
- - Confirm platform selection
36
- - Review stored credentials
@@ -1,36 +0,0 @@
1
- # run-tests
2
-
3
- Run test suite and report results.
4
-
5
- ## Arguments
6
-
7
- `$ARGUMENTS` = `--suite <name>` or `--file <path>` (optional)
8
-
9
- Optional:
10
- - `--repo <path>` - Target repository
11
- - `--type <unit|e2e|all>` - Test type
12
- - `--watch` - Watch mode
13
-
14
- ## Process
15
-
16
- 1. Detect test framework (Jest, Vitest, Playwright)
17
- 2. Run specified tests
18
- 3. Capture results
19
- 4. Format report
20
- 5. Surface failures with context
21
-
22
- ## Output
23
-
24
- Test report:
25
- ```
26
- ✅ 42 passed
27
- ❌ 2 failed
28
- ⏭️ 3 skipped
29
-
30
- Failed tests:
31
- 1. src/api/auth.test.ts:42 - login should return token
32
- Error: Expected 200, got 401
33
-
34
- 2. src/components/Button.test.tsx:18 - renders correctly
35
- Error: Snapshot mismatch
36
- ```
@@ -1,27 +0,0 @@
1
- # write-test
2
-
3
- Write a new test for a feature or function.
4
-
5
- ## Arguments
6
-
7
- `$ARGUMENTS` = `--target <file|function>` (required)
8
-
9
- Optional:
10
- - `--repo <path>` - Target repository
11
- - `--type <unit|integration|e2e>` - Test type
12
-
13
- ## Process
14
-
15
- 1. Analyze target code
16
- 2. Identify test cases
17
- 3. Generate test file
18
- 4. Add to test suite
19
- 5. Verify tests pass
20
-
21
- ## Output
22
-
23
- New test file with:
24
- - Setup/teardown
25
- - Happy path tests
26
- - Edge cases
27
- - Error handling tests
@@ -1,61 +0,0 @@
1
- #!/usr/bin/env node
2
- import { Command } from 'commander';
3
-
4
- const program = new Command();
5
-
6
- program
7
- .name('qa-tester')
8
- .description('Testing, browser automation, and accessibility verification')
9
- .version('1.0.0');
10
-
11
- program
12
- .command('run-tests')
13
- .description('Run test suite')
14
- .option('--suite <name>', 'Test suite name')
15
- .option('--file <path>', 'Specific test file')
16
- .option('--repo <path>', 'Target repository')
17
- .option('--type <type>', 'Test type: unit|e2e|all')
18
- .option('--watch', 'Watch mode')
19
- .action(async (options) => {
20
- console.log('run-tests:', options);
21
- });
22
-
23
- program
24
- .command('write-test')
25
- .description('Write new test for feature')
26
- .requiredOption('--target <path>', 'Target file or function')
27
- .option('--repo <path>', 'Target repository')
28
- .option('--type <type>', 'Test type: unit|integration|e2e')
29
- .action(async (options) => {
30
- console.log('write-test:', options);
31
- });
32
-
33
- program
34
- .command('visual-regression')
35
- .description('Run visual regression tests')
36
- .option('--url <url>', 'Target URL')
37
- .option('--repo <path>', 'Target repository')
38
- .action(async (options) => {
39
- console.log('visual-regression:', options);
40
- });
41
-
42
- program
43
- .command('accessibility-scan')
44
- .description('Run accessibility audit')
45
- .requiredOption('--url <url>', 'Target URL')
46
- .option('--standard <wcag>', 'WCAG standard: 2.0|2.1|2.2')
47
- .action(async (options) => {
48
- console.log('accessibility-scan:', options);
49
- });
50
-
51
- program
52
- .command('create-demo-account')
53
- .description('Create demo account for testing')
54
- .requiredOption('--platform <name>', 'Platform: shopify|stripe|etc')
55
- .option('--name <string>', 'Account name')
56
- .option('--project <name>', 'Project context')
57
- .action(async (options) => {
58
- console.log('create-demo-account:', options);
59
- });
60
-
61
- program.parse();