@accelerationguy/accel 1.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 (376) hide show
  1. package/CLAUDE.md +19 -0
  2. package/LICENSE +33 -0
  3. package/README.md +275 -0
  4. package/bin/install.js +661 -0
  5. package/docs/getting-started.md +164 -0
  6. package/docs/module-guide.md +139 -0
  7. package/modules/drive/LICENSE +21 -0
  8. package/modules/drive/PAUL-VS-GSD.md +171 -0
  9. package/modules/drive/README.md +555 -0
  10. package/modules/drive/assets/terminal.svg +67 -0
  11. package/modules/drive/bin/install.js +210 -0
  12. package/modules/drive/integration.js +76 -0
  13. package/modules/drive/package.json +38 -0
  14. package/modules/drive/src/commands/add-phase.md +36 -0
  15. package/modules/drive/src/commands/apply.md +83 -0
  16. package/modules/drive/src/commands/assumptions.md +37 -0
  17. package/modules/drive/src/commands/audit.md +57 -0
  18. package/modules/drive/src/commands/complete-milestone.md +36 -0
  19. package/modules/drive/src/commands/config.md +175 -0
  20. package/modules/drive/src/commands/consider-issues.md +41 -0
  21. package/modules/drive/src/commands/discover.md +48 -0
  22. package/modules/drive/src/commands/discuss-milestone.md +33 -0
  23. package/modules/drive/src/commands/discuss.md +34 -0
  24. package/modules/drive/src/commands/flows.md +73 -0
  25. package/modules/drive/src/commands/handoff.md +201 -0
  26. package/modules/drive/src/commands/help.md +525 -0
  27. package/modules/drive/src/commands/init.md +54 -0
  28. package/modules/drive/src/commands/map-codebase.md +34 -0
  29. package/modules/drive/src/commands/milestone.md +34 -0
  30. package/modules/drive/src/commands/pause.md +44 -0
  31. package/modules/drive/src/commands/plan-fix.md +216 -0
  32. package/modules/drive/src/commands/plan.md +36 -0
  33. package/modules/drive/src/commands/progress.md +138 -0
  34. package/modules/drive/src/commands/register.md +29 -0
  35. package/modules/drive/src/commands/remove-phase.md +37 -0
  36. package/modules/drive/src/commands/research-phase.md +209 -0
  37. package/modules/drive/src/commands/research.md +47 -0
  38. package/modules/drive/src/commands/resume.md +49 -0
  39. package/modules/drive/src/commands/status.md +78 -0
  40. package/modules/drive/src/commands/unify.md +87 -0
  41. package/modules/drive/src/commands/verify.md +60 -0
  42. package/modules/drive/src/references/checkpoints.md +234 -0
  43. package/modules/drive/src/references/context-management.md +219 -0
  44. package/modules/drive/src/references/git-strategy.md +206 -0
  45. package/modules/drive/src/references/loop-phases.md +254 -0
  46. package/modules/drive/src/references/plan-format.md +263 -0
  47. package/modules/drive/src/references/quality-principles.md +152 -0
  48. package/modules/drive/src/references/research-quality-control.md +247 -0
  49. package/modules/drive/src/references/sonarqube-integration.md +244 -0
  50. package/modules/drive/src/references/specialized-workflow-integration.md +186 -0
  51. package/modules/drive/src/references/subagent-criteria.md +179 -0
  52. package/modules/drive/src/references/tdd.md +219 -0
  53. package/modules/drive/src/references/work-units.md +161 -0
  54. package/modules/drive/src/rules/commands.md +108 -0
  55. package/modules/drive/src/rules/references.md +107 -0
  56. package/modules/drive/src/rules/style.md +123 -0
  57. package/modules/drive/src/rules/templates.md +51 -0
  58. package/modules/drive/src/rules/workflows.md +133 -0
  59. package/modules/drive/src/templates/CONTEXT.md +88 -0
  60. package/modules/drive/src/templates/DEBUG.md +164 -0
  61. package/modules/drive/src/templates/DISCOVERY.md +148 -0
  62. package/modules/drive/src/templates/HANDOFF.md +77 -0
  63. package/modules/drive/src/templates/ISSUES.md +93 -0
  64. package/modules/drive/src/templates/MILESTONES.md +167 -0
  65. package/modules/drive/src/templates/PLAN.md +328 -0
  66. package/modules/drive/src/templates/PROJECT.md +219 -0
  67. package/modules/drive/src/templates/RESEARCH.md +130 -0
  68. package/modules/drive/src/templates/ROADMAP.md +328 -0
  69. package/modules/drive/src/templates/SPECIAL-FLOWS.md +70 -0
  70. package/modules/drive/src/templates/STATE.md +210 -0
  71. package/modules/drive/src/templates/SUMMARY.md +221 -0
  72. package/modules/drive/src/templates/UAT-ISSUES.md +139 -0
  73. package/modules/drive/src/templates/codebase/architecture.md +259 -0
  74. package/modules/drive/src/templates/codebase/concerns.md +329 -0
  75. package/modules/drive/src/templates/codebase/conventions.md +311 -0
  76. package/modules/drive/src/templates/codebase/integrations.md +284 -0
  77. package/modules/drive/src/templates/codebase/stack.md +190 -0
  78. package/modules/drive/src/templates/codebase/structure.md +287 -0
  79. package/modules/drive/src/templates/codebase/testing.md +484 -0
  80. package/modules/drive/src/templates/config.md +181 -0
  81. package/modules/drive/src/templates/milestone-archive.md +236 -0
  82. package/modules/drive/src/templates/milestone-context.md +190 -0
  83. package/modules/drive/src/templates/paul-json.md +147 -0
  84. package/modules/drive/src/vector-config/PAUL +26 -0
  85. package/modules/drive/src/vector-config/PAUL.manifest +11 -0
  86. package/modules/drive/src/workflows/apply-phase.md +393 -0
  87. package/modules/drive/src/workflows/audit-plan.md +344 -0
  88. package/modules/drive/src/workflows/complete-milestone.md +479 -0
  89. package/modules/drive/src/workflows/configure-special-flows.md +283 -0
  90. package/modules/drive/src/workflows/consider-issues.md +172 -0
  91. package/modules/drive/src/workflows/create-milestone.md +268 -0
  92. package/modules/drive/src/workflows/debug.md +292 -0
  93. package/modules/drive/src/workflows/discovery.md +187 -0
  94. package/modules/drive/src/workflows/discuss-milestone.md +245 -0
  95. package/modules/drive/src/workflows/discuss-phase.md +231 -0
  96. package/modules/drive/src/workflows/init-project.md +698 -0
  97. package/modules/drive/src/workflows/map-codebase.md +459 -0
  98. package/modules/drive/src/workflows/pause-work.md +259 -0
  99. package/modules/drive/src/workflows/phase-assumptions.md +181 -0
  100. package/modules/drive/src/workflows/plan-phase.md +385 -0
  101. package/modules/drive/src/workflows/quality-gate.md +263 -0
  102. package/modules/drive/src/workflows/register-manifest.md +107 -0
  103. package/modules/drive/src/workflows/research.md +241 -0
  104. package/modules/drive/src/workflows/resume-project.md +200 -0
  105. package/modules/drive/src/workflows/roadmap-management.md +334 -0
  106. package/modules/drive/src/workflows/transition-phase.md +368 -0
  107. package/modules/drive/src/workflows/unify-phase.md +290 -0
  108. package/modules/drive/src/workflows/verify-work.md +241 -0
  109. package/modules/forge/README.md +281 -0
  110. package/modules/forge/bin/install.js +200 -0
  111. package/modules/forge/package.json +32 -0
  112. package/modules/forge/skillsmith/rules/checklists-rules.md +42 -0
  113. package/modules/forge/skillsmith/rules/context-rules.md +43 -0
  114. package/modules/forge/skillsmith/rules/entry-point-rules.md +44 -0
  115. package/modules/forge/skillsmith/rules/frameworks-rules.md +43 -0
  116. package/modules/forge/skillsmith/rules/tasks-rules.md +52 -0
  117. package/modules/forge/skillsmith/rules/templates-rules.md +43 -0
  118. package/modules/forge/skillsmith/skillsmith.md +82 -0
  119. package/modules/forge/skillsmith/tasks/audit.md +277 -0
  120. package/modules/forge/skillsmith/tasks/discover.md +145 -0
  121. package/modules/forge/skillsmith/tasks/distill.md +276 -0
  122. package/modules/forge/skillsmith/tasks/scaffold.md +349 -0
  123. package/modules/forge/specs/checklists.md +193 -0
  124. package/modules/forge/specs/context.md +223 -0
  125. package/modules/forge/specs/entry-point.md +320 -0
  126. package/modules/forge/specs/frameworks.md +228 -0
  127. package/modules/forge/specs/rules.md +245 -0
  128. package/modules/forge/specs/tasks.md +344 -0
  129. package/modules/forge/specs/templates.md +335 -0
  130. package/modules/forge/terminal.svg +70 -0
  131. package/modules/ignition/README.md +245 -0
  132. package/modules/ignition/bin/install.js +184 -0
  133. package/modules/ignition/checklists/planning-quality.md +55 -0
  134. package/modules/ignition/data/application/config.md +21 -0
  135. package/modules/ignition/data/application/guide.md +51 -0
  136. package/modules/ignition/data/application/skill-loadout.md +11 -0
  137. package/modules/ignition/data/campaign/config.md +18 -0
  138. package/modules/ignition/data/campaign/guide.md +36 -0
  139. package/modules/ignition/data/campaign/skill-loadout.md +10 -0
  140. package/modules/ignition/data/client/config.md +18 -0
  141. package/modules/ignition/data/client/guide.md +36 -0
  142. package/modules/ignition/data/client/skill-loadout.md +11 -0
  143. package/modules/ignition/data/utility/config.md +18 -0
  144. package/modules/ignition/data/utility/guide.md +31 -0
  145. package/modules/ignition/data/utility/skill-loadout.md +8 -0
  146. package/modules/ignition/data/workflow/config.md +19 -0
  147. package/modules/ignition/data/workflow/guide.md +41 -0
  148. package/modules/ignition/data/workflow/skill-loadout.md +10 -0
  149. package/modules/ignition/integration.js +54 -0
  150. package/modules/ignition/package.json +35 -0
  151. package/modules/ignition/seed.md +81 -0
  152. package/modules/ignition/tasks/add-type.md +164 -0
  153. package/modules/ignition/tasks/graduate.md +182 -0
  154. package/modules/ignition/tasks/ideate.md +221 -0
  155. package/modules/ignition/tasks/launch.md +137 -0
  156. package/modules/ignition/tasks/status.md +71 -0
  157. package/modules/ignition/templates/planning-application.md +193 -0
  158. package/modules/ignition/templates/planning-campaign.md +138 -0
  159. package/modules/ignition/templates/planning-client.md +149 -0
  160. package/modules/ignition/templates/planning-utility.md +112 -0
  161. package/modules/ignition/templates/planning-workflow.md +125 -0
  162. package/modules/ignition/terminal.svg +74 -0
  163. package/modules/mission-control/CONTEXT-CONTINUITY-SPEC.md +293 -0
  164. package/modules/mission-control/CONTEXT-ENGINEERING-GUIDE.md +282 -0
  165. package/modules/mission-control/README.md +91 -0
  166. package/modules/mission-control/assets/terminal.svg +80 -0
  167. package/modules/mission-control/examples/entities.example.json +133 -0
  168. package/modules/mission-control/examples/projects.example.json +318 -0
  169. package/modules/mission-control/examples/state.example.json +183 -0
  170. package/modules/mission-control/examples/vector.example.json +245 -0
  171. package/modules/mission-control/mission-control/checklists/install-verification.md +46 -0
  172. package/modules/mission-control/mission-control/frameworks/framework-registry.md +83 -0
  173. package/modules/mission-control/mission-control/mission-control.md +83 -0
  174. package/modules/mission-control/mission-control/tasks/insights.md +73 -0
  175. package/modules/mission-control/mission-control/tasks/install.md +194 -0
  176. package/modules/mission-control/mission-control/tasks/status.md +125 -0
  177. package/modules/mission-control/schemas/entities.schema.json +89 -0
  178. package/modules/mission-control/schemas/projects.schema.json +221 -0
  179. package/modules/mission-control/schemas/state.schema.json +108 -0
  180. package/modules/mission-control/schemas/vector.schema.json +200 -0
  181. package/modules/momentum/README.md +678 -0
  182. package/modules/momentum/bin/install.js +563 -0
  183. package/modules/momentum/integration.js +131 -0
  184. package/modules/momentum/package.json +42 -0
  185. package/modules/momentum/schemas/entities.schema.json +89 -0
  186. package/modules/momentum/schemas/projects.schema.json +221 -0
  187. package/modules/momentum/schemas/state.schema.json +108 -0
  188. package/modules/momentum/src/commands/audit-claude-md.md +31 -0
  189. package/modules/momentum/src/commands/audit.md +33 -0
  190. package/modules/momentum/src/commands/groom.md +35 -0
  191. package/modules/momentum/src/commands/history.md +27 -0
  192. package/modules/momentum/src/commands/pulse.md +33 -0
  193. package/modules/momentum/src/commands/scaffold.md +33 -0
  194. package/modules/momentum/src/commands/status.md +28 -0
  195. package/modules/momentum/src/commands/surface-convert.md +35 -0
  196. package/modules/momentum/src/commands/surface-create.md +34 -0
  197. package/modules/momentum/src/commands/surface-list.md +27 -0
  198. package/modules/momentum/src/commands/vector-hygiene.md +33 -0
  199. package/modules/momentum/src/framework/context/momentum-principles.md +71 -0
  200. package/modules/momentum/src/framework/frameworks/audit-strategies.md +53 -0
  201. package/modules/momentum/src/framework/frameworks/satellite-registration.md +44 -0
  202. package/modules/momentum/src/framework/tasks/audit-claude-md.md +68 -0
  203. package/modules/momentum/src/framework/tasks/audit.md +64 -0
  204. package/modules/momentum/src/framework/tasks/groom.md +164 -0
  205. package/modules/momentum/src/framework/tasks/history.md +34 -0
  206. package/modules/momentum/src/framework/tasks/pulse.md +83 -0
  207. package/modules/momentum/src/framework/tasks/scaffold.md +202 -0
  208. package/modules/momentum/src/framework/tasks/status.md +35 -0
  209. package/modules/momentum/src/framework/tasks/surface-convert.md +143 -0
  210. package/modules/momentum/src/framework/tasks/surface-create.md +184 -0
  211. package/modules/momentum/src/framework/tasks/surface-list.md +42 -0
  212. package/modules/momentum/src/framework/tasks/vector-hygiene.md +160 -0
  213. package/modules/momentum/src/framework/templates/workspace-json.md +96 -0
  214. package/modules/momentum/src/hooks/_template.py +129 -0
  215. package/modules/momentum/src/hooks/active-hook.py +178 -0
  216. package/modules/momentum/src/hooks/backlog-hook.py +115 -0
  217. package/modules/momentum/src/hooks/mission-control-insights.py +169 -0
  218. package/modules/momentum/src/hooks/momentum-pulse-check.py +351 -0
  219. package/modules/momentum/src/hooks/operator.py +53 -0
  220. package/modules/momentum/src/hooks/psmm-injector.py +67 -0
  221. package/modules/momentum/src/hooks/satellite-detection.py +248 -0
  222. package/modules/momentum/src/packages/momentum-mcp/index.js +119 -0
  223. package/modules/momentum/src/packages/momentum-mcp/package.json +10 -0
  224. package/modules/momentum/src/packages/momentum-mcp/tools/entities.js +226 -0
  225. package/modules/momentum/src/packages/momentum-mcp/tools/operator.js +106 -0
  226. package/modules/momentum/src/packages/momentum-mcp/tools/projects.js +322 -0
  227. package/modules/momentum/src/packages/momentum-mcp/tools/psmm.js +206 -0
  228. package/modules/momentum/src/packages/momentum-mcp/tools/state.js +199 -0
  229. package/modules/momentum/src/packages/momentum-mcp/tools/surfaces.js +404 -0
  230. package/modules/momentum/src/skill/momentum.md +111 -0
  231. package/modules/momentum/src/tasks/groom.md +164 -0
  232. package/modules/momentum/src/templates/operator.json +66 -0
  233. package/modules/momentum/src/templates/workspace.json +111 -0
  234. package/modules/momentum/terminal.svg +77 -0
  235. package/modules/radar/README.md +1552 -0
  236. package/modules/radar/commands/audit.md +233 -0
  237. package/modules/radar/commands/guardrails.md +194 -0
  238. package/modules/radar/commands/init.md +207 -0
  239. package/modules/radar/commands/playbook.md +176 -0
  240. package/modules/radar/commands/remediate.md +156 -0
  241. package/modules/radar/commands/report.md +172 -0
  242. package/modules/radar/commands/resume.md +176 -0
  243. package/modules/radar/commands/status.md +148 -0
  244. package/modules/radar/commands/transform.md +205 -0
  245. package/modules/radar/commands/validate.md +177 -0
  246. package/modules/radar/docs/ARCHITECTURE.md +336 -0
  247. package/modules/radar/docs/GETTING-STARTED.md +287 -0
  248. package/modules/radar/docs/standards/agents.md +197 -0
  249. package/modules/radar/docs/standards/commands.md +250 -0
  250. package/modules/radar/docs/standards/domains.md +191 -0
  251. package/modules/radar/docs/standards/personas.md +211 -0
  252. package/modules/radar/docs/standards/rules.md +218 -0
  253. package/modules/radar/docs/standards/runtime.md +445 -0
  254. package/modules/radar/docs/standards/schemas.md +269 -0
  255. package/modules/radar/docs/standards/tools.md +273 -0
  256. package/modules/radar/docs/standards/workflows.md +254 -0
  257. package/modules/radar/docs/terminal.svg +72 -0
  258. package/modules/radar/docs/validation/convention-compliance-report.md +183 -0
  259. package/modules/radar/docs/validation/cross-reference-report.md +195 -0
  260. package/modules/radar/docs/validation/validation-summary.md +118 -0
  261. package/modules/radar/docs/validation/version-manifest.yaml +363 -0
  262. package/modules/radar/install.sh +711 -0
  263. package/modules/radar/integration.js +53 -0
  264. package/modules/radar/src/core/agents/architect.md +25 -0
  265. package/modules/radar/src/core/agents/compliance-officer.md +25 -0
  266. package/modules/radar/src/core/agents/data-engineer.md +25 -0
  267. package/modules/radar/src/core/agents/devils-advocate.md +22 -0
  268. package/modules/radar/src/core/agents/performance-engineer.md +25 -0
  269. package/modules/radar/src/core/agents/principal-engineer.md +23 -0
  270. package/modules/radar/src/core/agents/reality-gap-analyst.md +22 -0
  271. package/modules/radar/src/core/agents/security-engineer.md +25 -0
  272. package/modules/radar/src/core/agents/senior-app-engineer.md +25 -0
  273. package/modules/radar/src/core/agents/sre.md +25 -0
  274. package/modules/radar/src/core/agents/staff-engineer.md +23 -0
  275. package/modules/radar/src/core/agents/test-engineer.md +25 -0
  276. package/modules/radar/src/core/personas/architect.md +111 -0
  277. package/modules/radar/src/core/personas/compliance-officer.md +104 -0
  278. package/modules/radar/src/core/personas/data-engineer.md +113 -0
  279. package/modules/radar/src/core/personas/devils-advocate.md +105 -0
  280. package/modules/radar/src/core/personas/performance-engineer.md +119 -0
  281. package/modules/radar/src/core/personas/principal-engineer.md +119 -0
  282. package/modules/radar/src/core/personas/reality-gap-analyst.md +111 -0
  283. package/modules/radar/src/core/personas/security-engineer.md +108 -0
  284. package/modules/radar/src/core/personas/senior-app-engineer.md +111 -0
  285. package/modules/radar/src/core/personas/sre.md +117 -0
  286. package/modules/radar/src/core/personas/staff-engineer.md +109 -0
  287. package/modules/radar/src/core/personas/test-engineer.md +109 -0
  288. package/modules/radar/src/core/workflows/disagreement-resolution.md +183 -0
  289. package/modules/radar/src/core/workflows/phase-0-context.md +148 -0
  290. package/modules/radar/src/core/workflows/phase-1-reconnaissance.md +169 -0
  291. package/modules/radar/src/core/workflows/phase-2-domain-audits.md +190 -0
  292. package/modules/radar/src/core/workflows/phase-3-cross-domain.md +177 -0
  293. package/modules/radar/src/core/workflows/phase-4-adversarial-review.md +165 -0
  294. package/modules/radar/src/core/workflows/phase-5-report.md +189 -0
  295. package/modules/radar/src/core/workflows/phase-checkpoint.md +222 -0
  296. package/modules/radar/src/core/workflows/session-handoff.md +152 -0
  297. package/modules/radar/src/domains/00-context.md +201 -0
  298. package/modules/radar/src/domains/01-architecture.md +248 -0
  299. package/modules/radar/src/domains/02-data.md +224 -0
  300. package/modules/radar/src/domains/03-correctness.md +230 -0
  301. package/modules/radar/src/domains/04-security.md +274 -0
  302. package/modules/radar/src/domains/05-compliance.md +228 -0
  303. package/modules/radar/src/domains/06-testing.md +228 -0
  304. package/modules/radar/src/domains/07-reliability.md +246 -0
  305. package/modules/radar/src/domains/08-performance.md +247 -0
  306. package/modules/radar/src/domains/09-maintainability.md +271 -0
  307. package/modules/radar/src/domains/10-operability.md +250 -0
  308. package/modules/radar/src/domains/11-change-risk.md +246 -0
  309. package/modules/radar/src/domains/12-team-risk.md +221 -0
  310. package/modules/radar/src/domains/13-risk-synthesis.md +202 -0
  311. package/modules/radar/src/rules/agent-boundaries.md +78 -0
  312. package/modules/radar/src/rules/disagreement-protocol.md +76 -0
  313. package/modules/radar/src/rules/epistemic-hygiene.md +78 -0
  314. package/modules/radar/src/schemas/confidence.md +185 -0
  315. package/modules/radar/src/schemas/disagreement.md +238 -0
  316. package/modules/radar/src/schemas/finding.md +287 -0
  317. package/modules/radar/src/schemas/report-section.md +150 -0
  318. package/modules/radar/src/schemas/signal.md +108 -0
  319. package/modules/radar/src/tools/checkov.md +463 -0
  320. package/modules/radar/src/tools/git-history.md +581 -0
  321. package/modules/radar/src/tools/gitleaks.md +447 -0
  322. package/modules/radar/src/tools/grype.md +611 -0
  323. package/modules/radar/src/tools/semgrep.md +378 -0
  324. package/modules/radar/src/tools/sonarqube.md +550 -0
  325. package/modules/radar/src/tools/syft.md +539 -0
  326. package/modules/radar/src/tools/trivy.md +439 -0
  327. package/modules/radar/src/transform/agents/change-risk-modeler.md +24 -0
  328. package/modules/radar/src/transform/agents/execution-validator.md +24 -0
  329. package/modules/radar/src/transform/agents/guardrail-generator.md +24 -0
  330. package/modules/radar/src/transform/agents/pedagogy-agent.md +24 -0
  331. package/modules/radar/src/transform/agents/remediation-architect.md +24 -0
  332. package/modules/radar/src/transform/personas/change-risk-modeler.md +95 -0
  333. package/modules/radar/src/transform/personas/execution-validator.md +95 -0
  334. package/modules/radar/src/transform/personas/guardrail-generator.md +103 -0
  335. package/modules/radar/src/transform/personas/pedagogy-agent.md +105 -0
  336. package/modules/radar/src/transform/personas/remediation-architect.md +95 -0
  337. package/modules/radar/src/transform/rules/change-risk-rules.md +87 -0
  338. package/modules/radar/src/transform/rules/safety-governance.md +87 -0
  339. package/modules/radar/src/transform/schemas/change-risk.md +139 -0
  340. package/modules/radar/src/transform/schemas/intervention-level.md +207 -0
  341. package/modules/radar/src/transform/schemas/playbook.md +205 -0
  342. package/modules/radar/src/transform/schemas/verification-plan.md +134 -0
  343. package/modules/radar/src/transform/workflows/phase-6-remediation.md +148 -0
  344. package/modules/radar/src/transform/workflows/phase-7-risk-validation.md +161 -0
  345. package/modules/radar/src/transform/workflows/phase-8-execution-planning.md +159 -0
  346. package/modules/radar/src/transform/workflows/transform-safety.md +158 -0
  347. package/modules/vector/.vector-template/sessions/.gitkeep +0 -0
  348. package/modules/vector/.vector-template/vector.json +72 -0
  349. package/modules/vector/AUDIT-CLAUDEMD.md +154 -0
  350. package/modules/vector/INSTALL.md +185 -0
  351. package/modules/vector/LICENSE +21 -0
  352. package/modules/vector/README.md +409 -0
  353. package/modules/vector/VECTOR-BLOCK.md +57 -0
  354. package/modules/vector/assets/terminal.svg +68 -0
  355. package/modules/vector/bin/install.js +455 -0
  356. package/modules/vector/bin/migrate-v1-to-v2.sh +492 -0
  357. package/modules/vector/commands/help.md +46 -0
  358. package/modules/vector/hooks/vector-hook.py +775 -0
  359. package/modules/vector/mcp/index.js +118 -0
  360. package/modules/vector/mcp/package.json +10 -0
  361. package/modules/vector/mcp/tools/decisions.js +269 -0
  362. package/modules/vector/mcp/tools/domains.js +361 -0
  363. package/modules/vector/mcp/tools/staging.js +252 -0
  364. package/modules/vector/mcp/tools/vector-json.js +647 -0
  365. package/modules/vector/package.json +38 -0
  366. package/modules/vector/schemas/vector.schema.json +237 -0
  367. package/package.json +39 -0
  368. package/shared/branding/branding.js +70 -0
  369. package/shared/config/defaults.json +59 -0
  370. package/shared/events/README.md +175 -0
  371. package/shared/events/event-bus.js +134 -0
  372. package/shared/events/event_bus.py +255 -0
  373. package/shared/events/integrations.js +161 -0
  374. package/shared/events/schemas/audit-complete.schema.json +21 -0
  375. package/shared/events/schemas/phase-progress.schema.json +23 -0
  376. package/shared/events/schemas/plan-created.schema.json +21 -0
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Accelerate Event Bus — File-based cross-module communication
3
+ *
4
+ * Modules write JSON event files to ~/.accel/events/
5
+ * Consuming modules read events on their next invocation
6
+ * Processed events move to ~/.accel/events/archive/
7
+ */
8
+
9
+ const fs = require('fs');
10
+ const path = require('path');
11
+ const os = require('os');
12
+
13
+ const EVENTS_DIR = path.join(os.homedir(), '.accel', 'events');
14
+ const ARCHIVE_DIR = path.join(EVENTS_DIR, 'archive');
15
+ const ERRORS_DIR = path.join(EVENTS_DIR, 'errors');
16
+ const SCHEMAS_DIR = path.join(EVENTS_DIR, 'schemas');
17
+ const MANIFEST_PATH = path.join(os.homedir(), '.accel', 'manifest.json');
18
+
19
+ let sequenceCounter = 0;
20
+
21
+ function ensureDirs() {
22
+ for (const dir of [EVENTS_DIR, ARCHIVE_DIR, ERRORS_DIR, SCHEMAS_DIR]) {
23
+ fs.mkdirSync(dir, { recursive: true });
24
+ }
25
+ }
26
+
27
+ function getRegisteredModules() {
28
+ try {
29
+ const manifest = JSON.parse(fs.readFileSync(MANIFEST_PATH, 'utf8'));
30
+ return Object.keys(manifest.modules || {});
31
+ } catch {
32
+ return [];
33
+ }
34
+ }
35
+
36
+ function validateProducer(event) {
37
+ const registered = getRegisteredModules();
38
+ if (!event._producer || !registered.includes(event._producer)) {
39
+ return `Unknown producer: ${event._producer}. Registered: ${registered.join(', ')}`;
40
+ }
41
+ return null;
42
+ }
43
+
44
+ function emit(source, type, payload) {
45
+ ensureDirs();
46
+
47
+ const event = {
48
+ _producer: source,
49
+ source,
50
+ type,
51
+ payload,
52
+ timestamp: new Date().toISOString(),
53
+ };
54
+
55
+ const producerError = validateProducer(event);
56
+ if (producerError) {
57
+ const errorFile = path.join(ERRORS_DIR, `${Date.now()}-invalid-producer.json`);
58
+ fs.writeFileSync(errorFile, JSON.stringify({ error: producerError, event }, null, 2));
59
+ throw new Error(producerError);
60
+ }
61
+
62
+ const seq = String(sequenceCounter++).padStart(4, '0');
63
+ const ts = new Date().toISOString().replace(/[:.]/g, '-');
64
+ const filename = `${ts}-${seq}-${source}-${type}.json`;
65
+
66
+ fs.writeFileSync(path.join(EVENTS_DIR, filename), JSON.stringify(event, null, 2));
67
+ return filename;
68
+ }
69
+
70
+ function consume(consumerModule, eventTypes) {
71
+ ensureDirs();
72
+
73
+ const events = [];
74
+ const files = fs.readdirSync(EVENTS_DIR).filter((f) => f.endsWith('.json'));
75
+
76
+ for (const file of files) {
77
+ try {
78
+ const filePath = path.join(EVENTS_DIR, file);
79
+ const event = JSON.parse(fs.readFileSync(filePath, 'utf8'));
80
+
81
+ if (eventTypes && !eventTypes.includes(event.type)) continue;
82
+
83
+ const producerError = validateProducer(event);
84
+ if (producerError) {
85
+ fs.renameSync(filePath, path.join(ERRORS_DIR, file));
86
+ continue;
87
+ }
88
+
89
+ events.push({ file, event });
90
+
91
+ // Move to archive
92
+ fs.renameSync(filePath, path.join(ARCHIVE_DIR, file));
93
+ } catch (e) {
94
+ // Malformed event — move to errors
95
+ const filePath = path.join(EVENTS_DIR, file);
96
+ const errorData = JSON.stringify({ error: e.message, file }, null, 2);
97
+ fs.writeFileSync(path.join(ERRORS_DIR, `${file}.error.json`), errorData);
98
+ try { fs.renameSync(filePath, path.join(ERRORS_DIR, file)); } catch {}
99
+ }
100
+ }
101
+
102
+ return events;
103
+ }
104
+
105
+ function cleanup(maxAgeDays = 7) {
106
+ ensureDirs();
107
+
108
+ const now = Date.now();
109
+ const maxAge = maxAgeDays * 24 * 60 * 60 * 1000;
110
+ const registered = getRegisteredModules();
111
+ const maxArchive = registered.length * 100;
112
+
113
+ // Clean old events from main dir
114
+ for (const file of fs.readdirSync(EVENTS_DIR).filter((f) => f.endsWith('.json'))) {
115
+ const filePath = path.join(EVENTS_DIR, file);
116
+ const stat = fs.statSync(filePath);
117
+ if (now - stat.mtimeMs > maxAge) {
118
+ fs.unlinkSync(filePath);
119
+ }
120
+ }
121
+
122
+ // Cap archive
123
+ const archiveFiles = fs.readdirSync(ARCHIVE_DIR)
124
+ .filter((f) => f.endsWith('.json'))
125
+ .map((f) => ({ name: f, time: fs.statSync(path.join(ARCHIVE_DIR, f)).mtimeMs }))
126
+ .sort((a, b) => a.time - b.time);
127
+
128
+ while (archiveFiles.length > maxArchive) {
129
+ const oldest = archiveFiles.shift();
130
+ fs.unlinkSync(path.join(ARCHIVE_DIR, oldest.name));
131
+ }
132
+ }
133
+
134
+ module.exports = { emit, consume, cleanup, EVENTS_DIR, ARCHIVE_DIR };
@@ -0,0 +1,255 @@
1
+ #!/usr/bin/env python3
2
+ """
3
+ Accelerate Event Bus — Python implementation
4
+
5
+ File-based cross-module communication matching the Node.js event-bus.js format.
6
+ Modules write JSON event files to ~/.accel/events/
7
+ Consuming modules read events on their next invocation.
8
+ Processed events move to ~/.accel/events/archive/
9
+
10
+ Event file format (identical to Node.js version):
11
+ {
12
+ "_producer": "ignition",
13
+ "source": "ignition",
14
+ "type": "plan-created",
15
+ "payload": { ... },
16
+ "timestamp": "2026-03-26T12:00:00.000Z"
17
+ }
18
+ """
19
+
20
+ import json
21
+ import os
22
+ import time
23
+ from datetime import datetime, timedelta
24
+ from pathlib import Path
25
+
26
+ ACCEL_HOME = Path.home() / ".accel"
27
+ EVENTS_DIR = ACCEL_HOME / "events"
28
+ ARCHIVE_DIR = EVENTS_DIR / "archive"
29
+ ERRORS_DIR = EVENTS_DIR / "errors"
30
+ SCHEMAS_DIR = EVENTS_DIR / "schemas"
31
+ MANIFEST_PATH = ACCEL_HOME / "manifest.json"
32
+
33
+ _sequence_counter = 0
34
+
35
+
36
+ def _ensure_dirs():
37
+ """Create event directories if they don't exist."""
38
+ for d in [EVENTS_DIR, ARCHIVE_DIR, ERRORS_DIR, SCHEMAS_DIR]:
39
+ d.mkdir(parents=True, exist_ok=True)
40
+
41
+
42
+ def _get_registered_modules():
43
+ """Read registered module IDs from the Accelerate manifest."""
44
+ try:
45
+ manifest = json.loads(MANIFEST_PATH.read_text())
46
+ return list(manifest.get("modules", {}).keys())
47
+ except (json.JSONDecodeError, OSError, FileNotFoundError):
48
+ return []
49
+
50
+
51
+ def validate_producer(event):
52
+ """
53
+ Check that event._producer is a registered module.
54
+
55
+ Returns None if valid, or an error string if invalid.
56
+ """
57
+ registered = _get_registered_modules()
58
+ producer = event.get("_producer")
59
+ if not producer or producer not in registered:
60
+ return f"Unknown producer: {producer}. Registered: {', '.join(registered)}"
61
+ return None
62
+
63
+
64
+ def emit(source, event_type, payload):
65
+ """
66
+ Write an event JSON file to ~/.accel/events/.
67
+
68
+ Args:
69
+ source: Module ID emitting the event (e.g. 'ignition', 'radar')
70
+ event_type: Event type string (e.g. 'plan-created', 'audit-complete')
71
+ payload: Dict of event-specific data
72
+
73
+ Returns:
74
+ The filename of the written event file.
75
+
76
+ Raises:
77
+ ValueError: If the source module is not registered in the manifest.
78
+ """
79
+ global _sequence_counter
80
+ _ensure_dirs()
81
+
82
+ event = {
83
+ "_producer": source,
84
+ "source": source,
85
+ "type": event_type,
86
+ "payload": payload,
87
+ "timestamp": datetime.utcnow().isoformat(timespec="milliseconds") + "Z",
88
+ }
89
+
90
+ # Validate producer
91
+ error = validate_producer(event)
92
+ if error:
93
+ error_file = ERRORS_DIR / f"{int(time.time() * 1000)}-invalid-producer.json"
94
+ error_file.write_text(json.dumps({"error": error, "event": event}, indent=2))
95
+ raise ValueError(error)
96
+
97
+ # Build filename matching Node.js format: timestamp-seq-source-type.json
98
+ seq = str(_sequence_counter).zfill(4)
99
+ _sequence_counter += 1
100
+ ts = datetime.utcnow().isoformat(timespec="milliseconds").replace(":", "-").replace(".", "-")
101
+ filename = f"{ts}Z-{seq}-{source}-{event_type}.json"
102
+
103
+ event_path = EVENTS_DIR / filename
104
+ event_path.write_text(json.dumps(event, indent=2))
105
+ return filename
106
+
107
+
108
+ def consume(event_types=None):
109
+ """
110
+ Read and archive matching event files from ~/.accel/events/.
111
+
112
+ Args:
113
+ event_types: Optional list of event type strings to filter by.
114
+ If None, consumes all events.
115
+
116
+ Returns:
117
+ List of dicts: [{"file": filename, "event": event_dict}, ...]
118
+ """
119
+ _ensure_dirs()
120
+
121
+ events = []
122
+ files = sorted(f for f in EVENTS_DIR.iterdir() if f.is_file() and f.suffix == ".json")
123
+
124
+ for filepath in files:
125
+ try:
126
+ event = json.loads(filepath.read_text())
127
+
128
+ # Filter by event type if specified
129
+ if event_types and event.get("type") not in event_types:
130
+ continue
131
+
132
+ # Validate producer
133
+ error = validate_producer(event)
134
+ if error:
135
+ filepath.rename(ERRORS_DIR / filepath.name)
136
+ continue
137
+
138
+ events.append({"file": filepath.name, "event": event})
139
+
140
+ # Move to archive
141
+ filepath.rename(ARCHIVE_DIR / filepath.name)
142
+
143
+ except (json.JSONDecodeError, OSError) as e:
144
+ # Malformed event — move to errors
145
+ error_data = json.dumps({"error": str(e), "file": filepath.name}, indent=2)
146
+ (ERRORS_DIR / f"{filepath.name}.error.json").write_text(error_data)
147
+ try:
148
+ filepath.rename(ERRORS_DIR / filepath.name)
149
+ except OSError:
150
+ pass
151
+
152
+ return events
153
+
154
+
155
+ def cleanup(max_age_days=7):
156
+ """
157
+ Remove old events from the events directory and cap the archive.
158
+
159
+ Args:
160
+ max_age_days: Events older than this are removed from the main dir.
161
+ """
162
+ _ensure_dirs()
163
+
164
+ now = time.time()
165
+ max_age_seconds = max_age_days * 24 * 60 * 60
166
+ registered = _get_registered_modules()
167
+ max_archive = max(len(registered) * 100, 100)
168
+
169
+ # Clean old events from main dir
170
+ for filepath in EVENTS_DIR.iterdir():
171
+ if filepath.is_file() and filepath.suffix == ".json":
172
+ try:
173
+ age = now - filepath.stat().st_mtime
174
+ if age > max_age_seconds:
175
+ filepath.unlink()
176
+ except OSError:
177
+ pass
178
+
179
+ # Cap archive size
180
+ archive_files = []
181
+ for filepath in ARCHIVE_DIR.iterdir():
182
+ if filepath.is_file() and filepath.suffix == ".json":
183
+ try:
184
+ archive_files.append((filepath, filepath.stat().st_mtime))
185
+ except OSError:
186
+ pass
187
+
188
+ archive_files.sort(key=lambda x: x[1])
189
+
190
+ while len(archive_files) > max_archive:
191
+ oldest_path, _ = archive_files.pop(0)
192
+ try:
193
+ oldest_path.unlink()
194
+ except OSError:
195
+ pass
196
+
197
+
198
+ def peek(event_types=None):
199
+ """
200
+ Read matching events WITHOUT archiving them (non-destructive).
201
+
202
+ Useful for checking what's pending without consuming.
203
+
204
+ Args:
205
+ event_types: Optional list of event type strings to filter by.
206
+
207
+ Returns:
208
+ List of dicts: [{"file": filename, "event": event_dict}, ...]
209
+ """
210
+ _ensure_dirs()
211
+
212
+ events = []
213
+ files = sorted(f for f in EVENTS_DIR.iterdir() if f.is_file() and f.suffix == ".json")
214
+
215
+ for filepath in files:
216
+ try:
217
+ event = json.loads(filepath.read_text())
218
+ if event_types and event.get("type") not in event_types:
219
+ continue
220
+ events.append({"file": filepath.name, "event": event})
221
+ except (json.JSONDecodeError, OSError):
222
+ pass
223
+
224
+ return events
225
+
226
+
227
+ # ─── Convenience emitters matching integrations.js ─────────────
228
+
229
+ def emit_plan_created(plan_path, project_type, title):
230
+ """Emit a plan-created event (Ignition -> Drive/Momentum)."""
231
+ return emit("ignition", "plan-created", {
232
+ "path": str(plan_path),
233
+ "projectType": project_type,
234
+ "title": title,
235
+ })
236
+
237
+
238
+ def emit_phase_progress(phase, status, plan_path="", completed_tasks=0, total_tasks=0):
239
+ """Emit a phase-progress event (Drive -> Momentum)."""
240
+ return emit("drive", "phase-progress", {
241
+ "phase": phase,
242
+ "status": status,
243
+ "planPath": str(plan_path),
244
+ "completedTasks": completed_tasks,
245
+ "totalTasks": total_tasks,
246
+ })
247
+
248
+
249
+ def emit_audit_complete(findings, critical, report_path):
250
+ """Emit an audit-complete event (Radar -> Momentum)."""
251
+ return emit("radar", "audit-complete", {
252
+ "findings": findings,
253
+ "critical": critical,
254
+ "report": str(report_path),
255
+ })
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Accelerate Cross-Module Integration Points
3
+ *
4
+ * These functions are called by module hooks to emit/consume events
5
+ * that wire modules together.
6
+ *
7
+ * Integration map:
8
+ * Ignition -> Drive: plan-created -> Drive picks up as next plan
9
+ * Drive -> Momentum: phase-progress -> Momentum tracks in workspace state
10
+ * Radar -> Momentum: audit-complete -> Momentum adds findings to backlog
11
+ * Vector -> All: Rules are injected via hook, no event bus needed
12
+ */
13
+
14
+ const fs = require('fs');
15
+ const path = require('path');
16
+ const os = require('os');
17
+ const eventBus = require('./event-bus');
18
+
19
+ const ACCEL_HOME = path.join(os.homedir(), '.accel');
20
+
21
+ function moduleInstalled(moduleId) {
22
+ const manifestPath = path.join(ACCEL_HOME, 'manifest.json');
23
+ try {
24
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf8'));
25
+ return !!manifest.modules[moduleId];
26
+ } catch {
27
+ return false;
28
+ }
29
+ }
30
+
31
+ // ─── Ignition -> Drive ──────────────────────────────────────
32
+ // Called when Ignition produces a PLANNING.md
33
+ function onPlanCreated(planPath, projectType, title) {
34
+ if (!moduleInstalled('ignition')) return;
35
+
36
+ eventBus.emit('ignition', 'plan-created', {
37
+ path: planPath,
38
+ projectType,
39
+ title,
40
+ });
41
+
42
+ // If Drive is installed, also write a breadcrumb so Drive
43
+ // can find the latest plan on next invocation
44
+ if (moduleInstalled('drive')) {
45
+ const driveState = path.join(ACCEL_HOME, 'modules', 'drive', '.latest-plan');
46
+ fs.mkdirSync(path.dirname(driveState), { recursive: true });
47
+ fs.writeFileSync(driveState, JSON.stringify({
48
+ path: planPath,
49
+ projectType,
50
+ title,
51
+ createdAt: new Date().toISOString(),
52
+ }, null, 2));
53
+ }
54
+ }
55
+
56
+ // ─── Drive -> Momentum ──────────────────────────────────────
57
+ // Called when Drive completes a phase or updates progress
58
+ function onPhaseProgress(phase, status, planPath, completedTasks, totalTasks) {
59
+ if (!moduleInstalled('drive')) return;
60
+
61
+ eventBus.emit('drive', 'phase-progress', {
62
+ phase,
63
+ status,
64
+ planPath: planPath || '',
65
+ completedTasks: completedTasks || 0,
66
+ totalTasks: totalTasks || 0,
67
+ });
68
+
69
+ // If Momentum is installed, update the workspace state directly
70
+ if (moduleInstalled('momentum')) {
71
+ const stateFile = path.join(ACCEL_HOME, 'modules', 'momentum', 'data', 'state.json');
72
+ try {
73
+ const state = fs.existsSync(stateFile)
74
+ ? JSON.parse(fs.readFileSync(stateFile, 'utf8'))
75
+ : { currentPhase: null, phases: [] };
76
+
77
+ state.currentPhase = phase;
78
+ state.lastUpdated = new Date().toISOString();
79
+ if (status === 'completed') {
80
+ if (!state.phases) state.phases = [];
81
+ state.phases.push({ phase, completedAt: new Date().toISOString() });
82
+ }
83
+
84
+ fs.mkdirSync(path.dirname(stateFile), { recursive: true });
85
+ fs.writeFileSync(stateFile, JSON.stringify(state, null, 2));
86
+ } catch {
87
+ // Non-fatal — event bus is the primary channel
88
+ }
89
+ }
90
+ }
91
+
92
+ // ─── Radar -> Momentum ──────────────────────────────────────
93
+ // Called when Radar completes a security audit
94
+ function onAuditComplete(findings, critical, reportPath) {
95
+ if (!moduleInstalled('radar')) return;
96
+
97
+ eventBus.emit('radar', 'audit-complete', {
98
+ findings,
99
+ critical,
100
+ report: reportPath,
101
+ });
102
+
103
+ // If Momentum is installed, create a backlog item
104
+ if (moduleInstalled('momentum')) {
105
+ const backlogDir = path.join(ACCEL_HOME, 'modules', 'momentum', 'data', 'backlog');
106
+ fs.mkdirSync(backlogDir, { recursive: true });
107
+
108
+ const item = {
109
+ id: `radar-${Date.now()}`,
110
+ type: 'audit-finding',
111
+ source: 'radar',
112
+ title: `Radar found ${findings} issue${findings !== 1 ? 's' : ''} (${critical} critical)`,
113
+ priority: critical > 0 ? 'high' : 'medium',
114
+ report: reportPath,
115
+ createdAt: new Date().toISOString(),
116
+ status: 'open',
117
+ };
118
+
119
+ const itemPath = path.join(backlogDir, `${item.id}.json`);
120
+ fs.writeFileSync(itemPath, JSON.stringify(item, null, 2));
121
+ }
122
+ }
123
+
124
+ // ─── Event Consumer ─────────────────────────────────────────
125
+ // Called by Momentum's hook to process pending events
126
+ function processPendingEvents() {
127
+ if (!moduleInstalled('momentum')) return [];
128
+
129
+ const processed = [];
130
+
131
+ // Consume audit-complete events
132
+ const auditEvents = eventBus.consume('momentum', ['audit-complete']);
133
+ for (const { event } of auditEvents) {
134
+ processed.push(`Radar audit: ${event.payload.findings} findings, ${event.payload.critical} critical`);
135
+ }
136
+
137
+ // Consume phase-progress events
138
+ const phaseEvents = eventBus.consume('momentum', ['phase-progress']);
139
+ for (const { event } of phaseEvents) {
140
+ processed.push(`Drive phase "${event.payload.phase}": ${event.payload.status}`);
141
+ }
142
+
143
+ // Consume plan-created events
144
+ const planEvents = eventBus.consume('momentum', ['plan-created']);
145
+ for (const { event } of planEvents) {
146
+ processed.push(`Ignition plan created: "${event.payload.title}" (${event.payload.projectType})`);
147
+ }
148
+
149
+ // Run cleanup
150
+ eventBus.cleanup();
151
+
152
+ return processed;
153
+ }
154
+
155
+ module.exports = {
156
+ onPlanCreated,
157
+ onPhaseProgress,
158
+ onAuditComplete,
159
+ processPendingEvents,
160
+ moduleInstalled,
161
+ };
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Radar Audit Complete Event",
4
+ "type": "object",
5
+ "required": ["_producer", "source", "type", "payload", "timestamp"],
6
+ "properties": {
7
+ "_producer": { "const": "radar" },
8
+ "source": { "const": "radar" },
9
+ "type": { "const": "audit-complete" },
10
+ "timestamp": { "type": "string", "format": "date-time" },
11
+ "payload": {
12
+ "type": "object",
13
+ "required": ["findings", "critical", "report"],
14
+ "properties": {
15
+ "findings": { "type": "integer", "minimum": 0 },
16
+ "critical": { "type": "integer", "minimum": 0 },
17
+ "report": { "type": "string" }
18
+ }
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Drive Phase Progress Event",
4
+ "type": "object",
5
+ "required": ["_producer", "source", "type", "payload", "timestamp"],
6
+ "properties": {
7
+ "_producer": { "const": "drive" },
8
+ "source": { "const": "drive" },
9
+ "type": { "const": "phase-progress" },
10
+ "timestamp": { "type": "string", "format": "date-time" },
11
+ "payload": {
12
+ "type": "object",
13
+ "required": ["phase", "status"],
14
+ "properties": {
15
+ "phase": { "type": "string" },
16
+ "status": { "enum": ["started", "in-progress", "completed", "blocked"] },
17
+ "planPath": { "type": "string" },
18
+ "completedTasks": { "type": "integer", "minimum": 0 },
19
+ "totalTasks": { "type": "integer", "minimum": 0 }
20
+ }
21
+ }
22
+ }
23
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "Ignition Plan Created Event",
4
+ "type": "object",
5
+ "required": ["_producer", "source", "type", "payload", "timestamp"],
6
+ "properties": {
7
+ "_producer": { "const": "ignition" },
8
+ "source": { "const": "ignition" },
9
+ "type": { "const": "plan-created" },
10
+ "timestamp": { "type": "string", "format": "date-time" },
11
+ "payload": {
12
+ "type": "object",
13
+ "required": ["path", "projectType", "title"],
14
+ "properties": {
15
+ "path": { "type": "string" },
16
+ "projectType": { "enum": ["application", "campaign", "client", "utility", "workflow"] },
17
+ "title": { "type": "string" }
18
+ }
19
+ }
20
+ }
21
+ }