mindforge-cc 9.0.0 → 10.0.1

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 (717) hide show
  1. package/.mindforge/config.json +1 -1
  2. package/.mindforge/personas/a11y-architect.md +190 -0
  3. package/.mindforge/personas/accessibility-tester.md +108 -0
  4. package/.mindforge/personas/api-designer.md +190 -0
  5. package/.mindforge/personas/api-gateway-architect.md +168 -0
  6. package/.mindforge/personas/api-load-tester.md +144 -0
  7. package/.mindforge/personas/authentication-architect.md +163 -0
  8. package/.mindforge/personas/backup-recovery-specialist.md +181 -0
  9. package/.mindforge/personas/browser-extension-architect.md +96 -0
  10. package/.mindforge/personas/build-optimizer.md +160 -0
  11. package/.mindforge/personas/caching-strategist.md +180 -0
  12. package/.mindforge/personas/chaos-engineer.md +207 -0
  13. package/.mindforge/personas/cli-designer.md +151 -0
  14. package/.mindforge/personas/cloud-architect.md +229 -0
  15. package/.mindforge/personas/code-archeologist.md +176 -0
  16. package/.mindforge/personas/code-explorer.md +144 -0
  17. package/.mindforge/personas/compliance-auditor.md +190 -0
  18. package/.mindforge/personas/concurrency-expert.md +310 -0
  19. package/.mindforge/personas/config-management-expert.md +277 -0
  20. package/.mindforge/personas/contract-tester.md +224 -0
  21. package/.mindforge/personas/cost-analyst.md +209 -0
  22. package/.mindforge/personas/data-engineer.md +235 -0
  23. package/.mindforge/personas/data-privacy-engineer.md +187 -0
  24. package/.mindforge/personas/database-expert.md +223 -0
  25. package/.mindforge/personas/dependency-auditor.md +181 -0
  26. package/.mindforge/personas/design-system-engineer.md +115 -0
  27. package/.mindforge/personas/devops-engineer.md +561 -0
  28. package/.mindforge/personas/domain-modeler.md +127 -0
  29. package/.mindforge/personas/email-systems-engineer.md +119 -0
  30. package/.mindforge/personas/error-handling-architect.md +246 -0
  31. package/.mindforge/personas/event-driven-architect.md +134 -0
  32. package/.mindforge/personas/frontend-architect.md +107 -0
  33. package/.mindforge/personas/git-forensics.md +146 -0
  34. package/.mindforge/personas/git-workflow-expert.md +161 -0
  35. package/.mindforge/personas/go-specialist.md +249 -0
  36. package/.mindforge/personas/graphql-specialist.md +195 -0
  37. package/.mindforge/personas/incident-commander.md +214 -0
  38. package/.mindforge/personas/internationalization-expert.md +164 -0
  39. package/.mindforge/personas/java-specialist.md +271 -0
  40. package/.mindforge/personas/kubernetes-debugger.md +175 -0
  41. package/.mindforge/personas/logging-architect.md +200 -0
  42. package/.mindforge/personas/migration-specialist.md +237 -0
  43. package/.mindforge/personas/ml-engineer.md +312 -0
  44. package/.mindforge/personas/mobile-engineer.md +183 -0
  45. package/.mindforge/personas/monorepo-architect.md +323 -0
  46. package/.mindforge/personas/observability-engineer.md +217 -0
  47. package/.mindforge/personas/onboarding-guide.md +265 -0
  48. package/.mindforge/personas/performance-optimizer.md +293 -0
  49. package/.mindforge/personas/product-manager.md +105 -0
  50. package/.mindforge/personas/prompt-engineer.md +200 -0
  51. package/.mindforge/personas/python-specialist.md +277 -0
  52. package/.mindforge/personas/queue-architect.md +136 -0
  53. package/.mindforge/personas/react-specialist.md +97 -0
  54. package/.mindforge/personas/real-time-engineer.md +121 -0
  55. package/.mindforge/personas/refactoring-expert.md +117 -0
  56. package/.mindforge/personas/regex-craftsman.md +130 -0
  57. package/.mindforge/personas/rust-specialist.md +262 -0
  58. package/.mindforge/personas/sdk-designer.md +185 -0
  59. package/.mindforge/personas/search-engineer.md +290 -0
  60. package/.mindforge/personas/senior-reviewer.md +372 -0
  61. package/.mindforge/personas/seo-specialist.md +99 -0
  62. package/.mindforge/personas/spec-reviewer.md +172 -0
  63. package/.mindforge/personas/state-machine-designer.md +172 -0
  64. package/.mindforge/personas/swarm-templates.json +72 -18
  65. package/.mindforge/personas/tailwind-specialist.md +95 -0
  66. package/.mindforge/personas/tech-debt-analyst.md +200 -0
  67. package/.mindforge/personas/tech-stack-selector.md +118 -0
  68. package/.mindforge/personas/technical-interviewer.md +158 -0
  69. package/.mindforge/personas/test-data-engineer.md +169 -0
  70. package/.mindforge/personas/typescript-wizard.md +247 -0
  71. package/.mindforge/personas/ux-auditor.md +251 -0
  72. package/.mindforge/personas/webhook-designer.md +161 -0
  73. package/CHANGELOG.md +82 -0
  74. package/LICENSE +1 -1
  75. package/MINDFORGE.md +18 -5
  76. package/README.md +7 -1
  77. package/RELEASENOTES.md +121 -193
  78. package/SECURITY.md +108 -2
  79. package/bin/autonomous/audit-writer.js +90 -0
  80. package/bin/autonomous/auto-runner.js +209 -431
  81. package/bin/autonomous/state-manager.js +116 -0
  82. package/bin/autonomous/task-dispatcher.js +114 -0
  83. package/bin/autonomous/wave-executor.js +169 -0
  84. package/bin/browser/browser-daemon.js +31 -1
  85. package/bin/change-classifier.js +3 -3
  86. package/bin/dashboard/api-router.js +21 -22
  87. package/bin/dashboard/metrics-aggregator.js +44 -3
  88. package/bin/dashboard/server.js +54 -10
  89. package/bin/dashboard/sse-bridge.js +51 -5
  90. package/bin/engine/learning-manager.js +1 -1
  91. package/bin/engine/mesh-syncer.js +26 -22
  92. package/bin/engine/nexus-tracer.js +6 -5
  93. package/bin/engine/orbital-guardian.js +13 -10
  94. package/bin/engine/skill-evolver.js +12 -14
  95. package/bin/engine/temporal-hub.js +25 -1
  96. package/bin/governance/policy-engine.js +5 -5
  97. package/bin/governance/policy-gate-hardened.js +2 -2
  98. package/bin/governance/quantum-crypto.js +10 -2
  99. package/bin/memory/identity-synthesizer.js +9 -11
  100. package/bin/memory/knowledge-store.js +62 -6
  101. package/bin/memory/semantic-hub.js +26 -30
  102. package/bin/memory/vector-hub.js +377 -193
  103. package/bin/migrations/v8-sqlite-migration.js +22 -21
  104. package/bin/migrations/v9-unified-memory.js +1 -1
  105. package/bin/mindforge-cli.js +47 -11
  106. package/bin/models/model-broker.js +2 -0
  107. package/bin/revops/remediation-queue.js +16 -55
  108. package/bin/utils/errors.js +40 -0
  109. package/bin/utils/file-io.js +102 -0
  110. package/bin/utils/index.js +6 -0
  111. package/bin/utils/paths.js +33 -0
  112. package/docs/commands-reference.md +38 -2
  113. package/docs/getting-started.md +16 -6
  114. package/docs/sdk-reference.md +374 -24
  115. package/docs/troubleshooting.md +4 -4
  116. package/docs/user-guide.md +31 -11
  117. package/examples/sdk-integration/README.md +24 -0
  118. package/examples/sdk-integration/index.js +24 -0
  119. package/examples/starter-project/MINDFORGE.md +8 -8
  120. package/package.json +30 -15
  121. package/.agent/bin/lib/commands.cjs +0 -959
  122. package/.agent/bin/lib/config.cjs +0 -421
  123. package/.agent/bin/lib/core.cjs +0 -1166
  124. package/.agent/bin/lib/frontmatter.cjs +0 -307
  125. package/.agent/bin/lib/init.cjs +0 -1336
  126. package/.agent/bin/lib/milestone.cjs +0 -252
  127. package/.agent/bin/lib/model-profiles.cjs +0 -68
  128. package/.agent/bin/lib/phase.cjs +0 -888
  129. package/.agent/bin/lib/profile-output.cjs +0 -952
  130. package/.agent/bin/lib/profile-pipeline.cjs +0 -539
  131. package/.agent/bin/lib/roadmap.cjs +0 -329
  132. package/.agent/bin/lib/security.cjs +0 -356
  133. package/.agent/bin/lib/state.cjs +0 -969
  134. package/.agent/bin/lib/template.cjs +0 -222
  135. package/.agent/bin/lib/uat.cjs +0 -189
  136. package/.agent/bin/lib/verify.cjs +0 -851
  137. package/.agent/bin/lib/workstream.cjs +0 -491
  138. package/.agent/bin/mindforge-tools.cjs +0 -897
  139. package/.agent/file-manifest.json +0 -219
  140. package/.agent/forge/help.md +0 -11
  141. package/.agent/forge/init-project.md +0 -36
  142. package/.agent/forge/plan-phase.md +0 -34
  143. package/.agent/mindforge/add-backlog.md +0 -32
  144. package/.agent/mindforge/agent.md +0 -31
  145. package/.agent/mindforge/approve.md +0 -22
  146. package/.agent/mindforge/audit.md +0 -34
  147. package/.agent/mindforge/auto.md +0 -26
  148. package/.agent/mindforge/benchmark.md +0 -37
  149. package/.agent/mindforge/browse.md +0 -30
  150. package/.agent/mindforge/complete-milestone.md +0 -22
  151. package/.agent/mindforge/costs.md +0 -15
  152. package/.agent/mindforge/cross-review.md +0 -21
  153. package/.agent/mindforge/dashboard.md +0 -102
  154. package/.agent/mindforge/debug.md +0 -133
  155. package/.agent/mindforge/discuss-phase.md +0 -142
  156. package/.agent/mindforge/do.md +0 -31
  157. package/.agent/mindforge/execute-phase.md +0 -200
  158. package/.agent/mindforge/health.md +0 -31
  159. package/.agent/mindforge/help.md +0 -33
  160. package/.agent/mindforge/init-org.md +0 -135
  161. package/.agent/mindforge/init-project.md +0 -170
  162. package/.agent/mindforge/install-skill.md +0 -28
  163. package/.agent/mindforge/learn.md +0 -147
  164. package/.agent/mindforge/learning.md +0 -20
  165. package/.agent/mindforge/map-codebase.md +0 -302
  166. package/.agent/mindforge/marketplace.md +0 -124
  167. package/.agent/mindforge/metrics.md +0 -26
  168. package/.agent/mindforge/migrate.md +0 -44
  169. package/.agent/mindforge/milestone.md +0 -16
  170. package/.agent/mindforge/new-runtime.md +0 -23
  171. package/.agent/mindforge/next.md +0 -109
  172. package/.agent/mindforge/note.md +0 -35
  173. package/.agent/mindforge/plan-phase.md +0 -131
  174. package/.agent/mindforge/plant-seed.md +0 -31
  175. package/.agent/mindforge/plugins.md +0 -44
  176. package/.agent/mindforge/pr-review.md +0 -45
  177. package/.agent/mindforge/profile-team.md +0 -27
  178. package/.agent/mindforge/publish-skill.md +0 -23
  179. package/.agent/mindforge/qa.md +0 -20
  180. package/.agent/mindforge/quick.md +0 -139
  181. package/.agent/mindforge/record-learning.md +0 -22
  182. package/.agent/mindforge/release.md +0 -14
  183. package/.agent/mindforge/remember.md +0 -30
  184. package/.agent/mindforge/research.md +0 -16
  185. package/.agent/mindforge/retrospective.md +0 -31
  186. package/.agent/mindforge/review-backlog.md +0 -34
  187. package/.agent/mindforge/review.md +0 -161
  188. package/.agent/mindforge/security-scan.md +0 -242
  189. package/.agent/mindforge/session-report.md +0 -39
  190. package/.agent/mindforge/ship.md +0 -111
  191. package/.agent/mindforge/skills.md +0 -145
  192. package/.agent/mindforge/status.md +0 -113
  193. package/.agent/mindforge/steer.md +0 -17
  194. package/.agent/mindforge/sync-confluence.md +0 -15
  195. package/.agent/mindforge/sync-jira.md +0 -16
  196. package/.agent/mindforge/tokens.md +0 -12
  197. package/.agent/mindforge/ui-phase.md +0 -34
  198. package/.agent/mindforge/ui-review.md +0 -36
  199. package/.agent/mindforge/update.md +0 -46
  200. package/.agent/mindforge/validate-phase.md +0 -31
  201. package/.agent/mindforge/verify-phase.md +0 -66
  202. package/.agent/mindforge/workspace.md +0 -33
  203. package/.agent/mindforge/workstreams.md +0 -35
  204. package/.agent/settings.json +0 -42
  205. package/.agent/skills/mindforge-add-backlog/SKILL.md +0 -72
  206. package/.agent/skills/mindforge-add-phase/SKILL.md +0 -39
  207. package/.agent/skills/mindforge-add-tests/SKILL.md +0 -28
  208. package/.agent/skills/mindforge-add-todo/SKILL.md +0 -42
  209. package/.agent/skills/mindforge-audit-milestone/SKILL.md +0 -29
  210. package/.agent/skills/mindforge-audit-uat/SKILL.md +0 -20
  211. package/.agent/skills/mindforge-autonomous/SKILL.md +0 -33
  212. package/.agent/skills/mindforge-brainstorming/SKILL.md +0 -164
  213. package/.agent/skills/mindforge-brainstorming/scripts/frame-template.html +0 -214
  214. package/.agent/skills/mindforge-brainstorming/scripts/helper.js +0 -88
  215. package/.agent/skills/mindforge-brainstorming/scripts/server.cjs +0 -354
  216. package/.agent/skills/mindforge-brainstorming/scripts/start-server.sh +0 -148
  217. package/.agent/skills/mindforge-brainstorming/scripts/stop-server.sh +0 -56
  218. package/.agent/skills/mindforge-brainstorming/spec-document-reviewer-prompt.md +0 -49
  219. package/.agent/skills/mindforge-brainstorming/visual-companion.md +0 -287
  220. package/.agent/skills/mindforge-check-todos/SKILL.md +0 -40
  221. package/.agent/skills/mindforge-cleanup/SKILL.md +0 -19
  222. package/.agent/skills/mindforge-complete-milestone/SKILL.md +0 -131
  223. package/.agent/skills/mindforge-debug/SKILL.md +0 -163
  224. package/.agent/skills/mindforge-debug_extended/CREATION-LOG.md +0 -119
  225. package/.agent/skills/mindforge-debug_extended/SKILL.md +0 -296
  226. package/.agent/skills/mindforge-debug_extended/condition-based-waiting-example.ts +0 -158
  227. package/.agent/skills/mindforge-debug_extended/condition-based-waiting.md +0 -115
  228. package/.agent/skills/mindforge-debug_extended/defense-in-depth.md +0 -122
  229. package/.agent/skills/mindforge-debug_extended/find-polluter.sh +0 -63
  230. package/.agent/skills/mindforge-debug_extended/root-cause-tracing.md +0 -169
  231. package/.agent/skills/mindforge-debug_extended/test-academic.md +0 -14
  232. package/.agent/skills/mindforge-debug_extended/test-pressure-1.md +0 -58
  233. package/.agent/skills/mindforge-debug_extended/test-pressure-2.md +0 -68
  234. package/.agent/skills/mindforge-debug_extended/test-pressure-3.md +0 -69
  235. package/.agent/skills/mindforge-discuss-phase/SKILL.md +0 -54
  236. package/.agent/skills/mindforge-do/SKILL.md +0 -26
  237. package/.agent/skills/mindforge-execute-phase/SKILL.md +0 -49
  238. package/.agent/skills/mindforge-execute-phase_extended/SKILL.md +0 -70
  239. package/.agent/skills/mindforge-fast/SKILL.md +0 -23
  240. package/.agent/skills/mindforge-forensics/SKILL.md +0 -49
  241. package/.agent/skills/mindforge-health/SKILL.md +0 -17
  242. package/.agent/skills/mindforge-help/SKILL.md +0 -23
  243. package/.agent/skills/mindforge-insert-phase/SKILL.md +0 -28
  244. package/.agent/skills/mindforge-join-discord/SKILL.md +0 -19
  245. package/.agent/skills/mindforge-list-phase-assumptions/SKILL.md +0 -41
  246. package/.agent/skills/mindforge-list-workspaces/SKILL.md +0 -17
  247. package/.agent/skills/mindforge-manager/SKILL.md +0 -32
  248. package/.agent/skills/mindforge-map-codebase/SKILL.md +0 -64
  249. package/.agent/skills/mindforge-milestone-summary/SKILL.md +0 -44
  250. package/.agent/skills/mindforge-neural-orchestrator/SKILL.md +0 -115
  251. package/.agent/skills/mindforge-neural-orchestrator/references/codex-tools.md +0 -100
  252. package/.agent/skills/mindforge-neural-orchestrator/references/gemini-tools.md +0 -33
  253. package/.agent/skills/mindforge-new-milestone/SKILL.md +0 -38
  254. package/.agent/skills/mindforge-new-project/SKILL.md +0 -36
  255. package/.agent/skills/mindforge-new-workspace/SKILL.md +0 -39
  256. package/.agent/skills/mindforge-next/SKILL.md +0 -19
  257. package/.agent/skills/mindforge-note/SKILL.md +0 -29
  258. package/.agent/skills/mindforge-parallel-mesh_extended/SKILL.md +0 -182
  259. package/.agent/skills/mindforge-pause-work/SKILL.md +0 -35
  260. package/.agent/skills/mindforge-plan-milestone-gaps/SKILL.md +0 -28
  261. package/.agent/skills/mindforge-plan-phase/SKILL.md +0 -38
  262. package/.agent/skills/mindforge-plan-phase_extended/SKILL.md +0 -152
  263. package/.agent/skills/mindforge-plan-phase_extended/plan-document-reviewer-prompt.md +0 -49
  264. package/.agent/skills/mindforge-plant-seed/SKILL.md +0 -22
  265. package/.agent/skills/mindforge-pr-branch/SKILL.md +0 -21
  266. package/.agent/skills/mindforge-profile-user/SKILL.md +0 -38
  267. package/.agent/skills/mindforge-progress/SKILL.md +0 -19
  268. package/.agent/skills/mindforge-quick/SKILL.md +0 -38
  269. package/.agent/skills/mindforge-reapply-patches/SKILL.md +0 -124
  270. package/.agent/skills/mindforge-remove-phase/SKILL.md +0 -26
  271. package/.agent/skills/mindforge-remove-workspace/SKILL.md +0 -22
  272. package/.agent/skills/mindforge-research-phase/SKILL.md +0 -186
  273. package/.agent/skills/mindforge-resume-work/SKILL.md +0 -35
  274. package/.agent/skills/mindforge-review/SKILL.md +0 -31
  275. package/.agent/skills/mindforge-review-backlog/SKILL.md +0 -58
  276. package/.agent/skills/mindforge-review-inbound/SKILL.md +0 -213
  277. package/.agent/skills/mindforge-review-request/SKILL.md +0 -105
  278. package/.agent/skills/mindforge-review-request/code-reviewer.md +0 -146
  279. package/.agent/skills/mindforge-session-report/SKILL.md +0 -16
  280. package/.agent/skills/mindforge-set-profile/SKILL.md +0 -9
  281. package/.agent/skills/mindforge-settings/SKILL.md +0 -32
  282. package/.agent/skills/mindforge-ship/SKILL.md +0 -16
  283. package/.agent/skills/mindforge-ship_extended/SKILL.md +0 -200
  284. package/.agent/skills/mindforge-skill-creation/SKILL.md +0 -655
  285. package/.agent/skills/mindforge-skill-creation/anthropic-best-practices.md +0 -1150
  286. package/.agent/skills/mindforge-skill-creation/examples/CLAUDE_MD_TESTING.md +0 -189
  287. package/.agent/skills/mindforge-skill-creation/graphviz-conventions.dot +0 -172
  288. package/.agent/skills/mindforge-skill-creation/persuasion-principles.md +0 -187
  289. package/.agent/skills/mindforge-skill-creation/render-graphs.js +0 -168
  290. package/.agent/skills/mindforge-skill-creation/testing-skills-with-subagents.md +0 -384
  291. package/.agent/skills/mindforge-stats/SKILL.md +0 -16
  292. package/.agent/skills/mindforge-swarm-execution/SKILL.md +0 -277
  293. package/.agent/skills/mindforge-swarm-execution/code-quality-reviewer-prompt.md +0 -26
  294. package/.agent/skills/mindforge-swarm-execution/implementer-prompt.md +0 -113
  295. package/.agent/skills/mindforge-swarm-execution/spec-reviewer-prompt.md +0 -61
  296. package/.agent/skills/mindforge-system-architecture/SKILL.md +0 -136
  297. package/.agent/skills/mindforge-system-architecture/examples.md +0 -120
  298. package/.agent/skills/mindforge-system-architecture/scaling-checklist.md +0 -76
  299. package/.agent/skills/mindforge-tdd/SKILL.md +0 -112
  300. package/.agent/skills/mindforge-tdd/deep-modules.md +0 -21
  301. package/.agent/skills/mindforge-tdd/interface-design.md +0 -22
  302. package/.agent/skills/mindforge-tdd/mocking.md +0 -24
  303. package/.agent/skills/mindforge-tdd/refactoring.md +0 -21
  304. package/.agent/skills/mindforge-tdd/tests.md +0 -28
  305. package/.agent/skills/mindforge-tdd_extended/SKILL.md +0 -371
  306. package/.agent/skills/mindforge-tdd_extended/testing-anti-patterns.md +0 -299
  307. package/.agent/skills/mindforge-thread/SKILL.md +0 -123
  308. package/.agent/skills/mindforge-ui-phase/SKILL.md +0 -24
  309. package/.agent/skills/mindforge-ui-review/SKILL.md +0 -24
  310. package/.agent/skills/mindforge-update/SKILL.md +0 -35
  311. package/.agent/skills/mindforge-validate-phase/SKILL.md +0 -26
  312. package/.agent/skills/mindforge-verify-work/SKILL.md +0 -30
  313. package/.agent/skills/mindforge-verify-work_extended/SKILL.md +0 -139
  314. package/.agent/skills/mindforge-workspace-isolated/SKILL.md +0 -218
  315. package/.agent/skills/mindforge-workstreams/SKILL.md +0 -65
  316. package/.agent/workflows/forge:help.md +0 -10
  317. package/.agent/workflows/forge:init-project.md +0 -35
  318. package/.agent/workflows/forge:plan-phase.md +0 -33
  319. package/.agent/workflows/mindforge-add-phase.md +0 -112
  320. package/.agent/workflows/mindforge-add-tests.md +0 -351
  321. package/.agent/workflows/mindforge-add-todo.md +0 -158
  322. package/.agent/workflows/mindforge-audit-milestone.md +0 -332
  323. package/.agent/workflows/mindforge-audit-uat.md +0 -109
  324. package/.agent/workflows/mindforge-autonomous.md +0 -815
  325. package/.agent/workflows/mindforge-check-todos.md +0 -177
  326. package/.agent/workflows/mindforge-cleanup.md +0 -152
  327. package/.agent/workflows/mindforge-complete-milestone.md +0 -766
  328. package/.agent/workflows/mindforge-diagnose-issues.md +0 -220
  329. package/.agent/workflows/mindforge-discovery-phase.md +0 -289
  330. package/.agent/workflows/mindforge-discuss-phase-assumptions.md +0 -645
  331. package/.agent/workflows/mindforge-discuss-phase.md +0 -1047
  332. package/.agent/workflows/mindforge-do.md +0 -104
  333. package/.agent/workflows/mindforge-execute-phase.md +0 -838
  334. package/.agent/workflows/mindforge-execute-plan.md +0 -509
  335. package/.agent/workflows/mindforge-fast.md +0 -105
  336. package/.agent/workflows/mindforge-forensics.md +0 -265
  337. package/.agent/workflows/mindforge-health.md +0 -181
  338. package/.agent/workflows/mindforge-help.md +0 -606
  339. package/.agent/workflows/mindforge-insert-phase.md +0 -130
  340. package/.agent/workflows/mindforge-list-phase-assumptions.md +0 -178
  341. package/.agent/workflows/mindforge-list-workspaces.md +0 -56
  342. package/.agent/workflows/mindforge-manager.md +0 -360
  343. package/.agent/workflows/mindforge-map-codebase.md +0 -370
  344. package/.agent/workflows/mindforge-milestone-summary.md +0 -223
  345. package/.agent/workflows/mindforge-new-milestone.md +0 -469
  346. package/.agent/workflows/mindforge-new-project.md +0 -1226
  347. package/.agent/workflows/mindforge-new-workspace.md +0 -237
  348. package/.agent/workflows/mindforge-next.md +0 -97
  349. package/.agent/workflows/mindforge-node-repair.md +0 -92
  350. package/.agent/workflows/mindforge-note.md +0 -156
  351. package/.agent/workflows/mindforge-pause-work.md +0 -176
  352. package/.agent/workflows/mindforge-plan-milestone-gaps.md +0 -273
  353. package/.agent/workflows/mindforge-plan-phase.md +0 -877
  354. package/.agent/workflows/mindforge-plant-seed.md +0 -169
  355. package/.agent/workflows/mindforge-pr-branch.md +0 -129
  356. package/.agent/workflows/mindforge-profile-user.md +0 -450
  357. package/.agent/workflows/mindforge-progress.md +0 -507
  358. package/.agent/workflows/mindforge-quick.md +0 -732
  359. package/.agent/workflows/mindforge-remove-phase.md +0 -155
  360. package/.agent/workflows/mindforge-remove-workspace.md +0 -90
  361. package/.agent/workflows/mindforge-research-phase.md +0 -74
  362. package/.agent/workflows/mindforge-resume-project.md +0 -325
  363. package/.agent/workflows/mindforge-review.md +0 -228
  364. package/.agent/workflows/mindforge-session-report.md +0 -146
  365. package/.agent/workflows/mindforge-settings.md +0 -283
  366. package/.agent/workflows/mindforge-ship.md +0 -228
  367. package/.agent/workflows/mindforge-stats.md +0 -60
  368. package/.agent/workflows/mindforge-transition.md +0 -671
  369. package/.agent/workflows/mindforge-ui-phase.md +0 -290
  370. package/.agent/workflows/mindforge-ui-review.md +0 -157
  371. package/.agent/workflows/mindforge-update.md +0 -323
  372. package/.agent/workflows/mindforge-validate-phase.md +0 -167
  373. package/.agent/workflows/mindforge-verify-phase.md +0 -254
  374. package/.agent/workflows/mindforge-verify-work.md +0 -628
  375. package/.agent/workflows/mindforge:add-backlog.md +0 -24
  376. package/.agent/workflows/mindforge:agent.md +0 -25
  377. package/.agent/workflows/mindforge:approve.md +0 -21
  378. package/.agent/workflows/mindforge:architecture.md +0 -40
  379. package/.agent/workflows/mindforge:audit.md +0 -33
  380. package/.agent/workflows/mindforge:auto.md +0 -25
  381. package/.agent/workflows/mindforge:benchmark.md +0 -36
  382. package/.agent/workflows/mindforge:brainstorming.md +0 -16
  383. package/.agent/workflows/mindforge:browse.md +0 -29
  384. package/.agent/workflows/mindforge:complete-milestone.md +0 -21
  385. package/.agent/workflows/mindforge:costs.md +0 -14
  386. package/.agent/workflows/mindforge:cross-review.md +0 -20
  387. package/.agent/workflows/mindforge:dashboard.md +0 -101
  388. package/.agent/workflows/mindforge:debug.md +0 -131
  389. package/.agent/workflows/mindforge:discuss-phase.md +0 -141
  390. package/.agent/workflows/mindforge:do.md +0 -25
  391. package/.agent/workflows/mindforge:execute-phase.md +0 -205
  392. package/.agent/workflows/mindforge:executor.md +0 -18
  393. package/.agent/workflows/mindforge:health.md +0 -24
  394. package/.agent/workflows/mindforge:help.md +0 -26
  395. package/.agent/workflows/mindforge:identity.md +0 -18
  396. package/.agent/workflows/mindforge:init-org.md +0 -134
  397. package/.agent/workflows/mindforge:init-project.md +0 -185
  398. package/.agent/workflows/mindforge:install-skill.md +0 -27
  399. package/.agent/workflows/mindforge:learn.md +0 -146
  400. package/.agent/workflows/mindforge:map-codebase.md +0 -301
  401. package/.agent/workflows/mindforge:marketplace.md +0 -123
  402. package/.agent/workflows/mindforge:memory.md +0 -18
  403. package/.agent/workflows/mindforge:metrics.md +0 -25
  404. package/.agent/workflows/mindforge:migrate.md +0 -43
  405. package/.agent/workflows/mindforge:milestone.md +0 -15
  406. package/.agent/workflows/mindforge:new-runtime.md +0 -22
  407. package/.agent/workflows/mindforge:next.md +0 -108
  408. package/.agent/workflows/mindforge:note.md +0 -27
  409. package/.agent/workflows/mindforge:plan-phase.md +0 -139
  410. package/.agent/workflows/mindforge:planner.md +0 -18
  411. package/.agent/workflows/mindforge:plant-seed.md +0 -24
  412. package/.agent/workflows/mindforge:plugins.md +0 -43
  413. package/.agent/workflows/mindforge:pr-review.md +0 -44
  414. package/.agent/workflows/mindforge:profile-team.md +0 -26
  415. package/.agent/workflows/mindforge:publish-skill.md +0 -22
  416. package/.agent/workflows/mindforge:qa.md +0 -19
  417. package/.agent/workflows/mindforge:quick.md +0 -138
  418. package/.agent/workflows/mindforge:release.md +0 -13
  419. package/.agent/workflows/mindforge:remember.md +0 -29
  420. package/.agent/workflows/mindforge:research.md +0 -15
  421. package/.agent/workflows/mindforge:researcher.md +0 -18
  422. package/.agent/workflows/mindforge:retrospective.md +0 -29
  423. package/.agent/workflows/mindforge:review-backlog.md +0 -26
  424. package/.agent/workflows/mindforge:review.md +0 -160
  425. package/.agent/workflows/mindforge:reviewer.md +0 -18
  426. package/.agent/workflows/mindforge:security-scan.md +0 -236
  427. package/.agent/workflows/mindforge:session-report.md +0 -31
  428. package/.agent/workflows/mindforge:ship.md +0 -108
  429. package/.agent/workflows/mindforge:skills.md +0 -144
  430. package/.agent/workflows/mindforge:soul.md +0 -54
  431. package/.agent/workflows/mindforge:status.md +0 -107
  432. package/.agent/workflows/mindforge:steer.md +0 -16
  433. package/.agent/workflows/mindforge:sync-confluence.md +0 -14
  434. package/.agent/workflows/mindforge:sync-jira.md +0 -15
  435. package/.agent/workflows/mindforge:tdd.md +0 -46
  436. package/.agent/workflows/mindforge:tokens.md +0 -11
  437. package/.agent/workflows/mindforge:tool.md +0 -18
  438. package/.agent/workflows/mindforge:ui-phase.md +0 -27
  439. package/.agent/workflows/mindforge:ui-review.md +0 -28
  440. package/.agent/workflows/mindforge:update.md +0 -45
  441. package/.agent/workflows/mindforge:validate-phase.md +0 -25
  442. package/.agent/workflows/mindforge:verify-phase.md +0 -65
  443. package/.agent/workflows/mindforge:workspace.md +0 -32
  444. package/.agent/workflows/mindforge:workstreams.md +0 -27
  445. package/.agent/workflows/publish-release.md +0 -36
  446. package/.claude/CLAUDE.md +0 -102
  447. package/.claude/commands/forge/help.md +0 -7
  448. package/.claude/commands/forge/init-project.md +0 -32
  449. package/.claude/commands/forge/plan-phase.md +0 -30
  450. package/.claude/commands/mindforge/add-backlog.md +0 -32
  451. package/.claude/commands/mindforge/agent.md +0 -31
  452. package/.claude/commands/mindforge/approve.md +0 -22
  453. package/.claude/commands/mindforge/audit.md +0 -34
  454. package/.claude/commands/mindforge/auto.md +0 -26
  455. package/.claude/commands/mindforge/benchmark.md +0 -37
  456. package/.claude/commands/mindforge/browse.md +0 -30
  457. package/.claude/commands/mindforge/complete-milestone.md +0 -22
  458. package/.claude/commands/mindforge/costs.md +0 -15
  459. package/.claude/commands/mindforge/cross-review.md +0 -21
  460. package/.claude/commands/mindforge/dashboard.md +0 -102
  461. package/.claude/commands/mindforge/debug.md +0 -133
  462. package/.claude/commands/mindforge/discuss-phase.md +0 -142
  463. package/.claude/commands/mindforge/do.md +0 -31
  464. package/.claude/commands/mindforge/execute-phase.md +0 -200
  465. package/.claude/commands/mindforge/health.md +0 -31
  466. package/.claude/commands/mindforge/help.md +0 -33
  467. package/.claude/commands/mindforge/init-org.md +0 -135
  468. package/.claude/commands/mindforge/init-project.md +0 -170
  469. package/.claude/commands/mindforge/install-skill.md +0 -28
  470. package/.claude/commands/mindforge/learn.md +0 -147
  471. package/.claude/commands/mindforge/learning.md +0 -20
  472. package/.claude/commands/mindforge/map-codebase.md +0 -302
  473. package/.claude/commands/mindforge/marketplace.md +0 -124
  474. package/.claude/commands/mindforge/metrics.md +0 -26
  475. package/.claude/commands/mindforge/migrate.md +0 -44
  476. package/.claude/commands/mindforge/milestone.md +0 -16
  477. package/.claude/commands/mindforge/new-runtime.md +0 -23
  478. package/.claude/commands/mindforge/next.md +0 -109
  479. package/.claude/commands/mindforge/note.md +0 -35
  480. package/.claude/commands/mindforge/plan-phase.md +0 -131
  481. package/.claude/commands/mindforge/plant-seed.md +0 -31
  482. package/.claude/commands/mindforge/plugins.md +0 -44
  483. package/.claude/commands/mindforge/pr-review.md +0 -45
  484. package/.claude/commands/mindforge/profile-team.md +0 -27
  485. package/.claude/commands/mindforge/publish-skill.md +0 -23
  486. package/.claude/commands/mindforge/qa.md +0 -20
  487. package/.claude/commands/mindforge/quick.md +0 -139
  488. package/.claude/commands/mindforge/record-learning.md +0 -22
  489. package/.claude/commands/mindforge/release.md +0 -14
  490. package/.claude/commands/mindforge/remember.md +0 -30
  491. package/.claude/commands/mindforge/research.md +0 -16
  492. package/.claude/commands/mindforge/retrospective.md +0 -31
  493. package/.claude/commands/mindforge/review-backlog.md +0 -34
  494. package/.claude/commands/mindforge/review.md +0 -161
  495. package/.claude/commands/mindforge/security-scan.md +0 -242
  496. package/.claude/commands/mindforge/session-report.md +0 -39
  497. package/.claude/commands/mindforge/ship.md +0 -111
  498. package/.claude/commands/mindforge/skills.md +0 -145
  499. package/.claude/commands/mindforge/status.md +0 -113
  500. package/.claude/commands/mindforge/steer.md +0 -17
  501. package/.claude/commands/mindforge/sync-confluence.md +0 -15
  502. package/.claude/commands/mindforge/sync-jira.md +0 -16
  503. package/.claude/commands/mindforge/tokens.md +0 -12
  504. package/.claude/commands/mindforge/ui-phase.md +0 -34
  505. package/.claude/commands/mindforge/ui-review.md +0 -36
  506. package/.claude/commands/mindforge/update.md +0 -46
  507. package/.claude/commands/mindforge/validate-phase.md +0 -31
  508. package/.claude/commands/mindforge/verify-phase.md +0 -66
  509. package/.claude/commands/mindforge/workspace.md +0 -33
  510. package/.claude/commands/mindforge/workstreams.md +0 -35
  511. package/.claude/settings.local.json +0 -16
  512. package/.mindforge/audit/AUDIT-SCHEMA.md +0 -470
  513. package/.mindforge/browser/daemon-protocol.md +0 -24
  514. package/.mindforge/browser/qa-engine.md +0 -16
  515. package/.mindforge/browser/session-manager.md +0 -18
  516. package/.mindforge/browser/visual-verify-spec.md +0 -31
  517. package/.mindforge/celestial.db +0 -0
  518. package/.mindforge/ci/ci-config-schema.md +0 -21
  519. package/.mindforge/ci/ci-mode.md +0 -179
  520. package/.mindforge/ci/github-actions-adapter.md +0 -224
  521. package/.mindforge/ci/gitlab-ci-adapter.md +0 -31
  522. package/.mindforge/ci/jenkins-adapter.md +0 -44
  523. package/.mindforge/dashboard/api-reference.md +0 -122
  524. package/.mindforge/dashboard/dashboard-spec.md +0 -96
  525. package/.mindforge/distribution/marketplace.md +0 -53
  526. package/.mindforge/distribution/registry-client.md +0 -166
  527. package/.mindforge/distribution/registry-schema.md +0 -96
  528. package/.mindforge/distribution/skill-publisher.md +0 -44
  529. package/.mindforge/distribution/skill-validator.md +0 -74
  530. package/.mindforge/governance/GOVERNANCE-CONFIG.md +0 -17
  531. package/.mindforge/governance/approval-workflow.md +0 -37
  532. package/.mindforge/governance/change-classifier.md +0 -63
  533. package/.mindforge/governance/compliance-gates.md +0 -31
  534. package/.mindforge/governance/policies/sovereign-default.json +0 -16
  535. package/.mindforge/integrations/confluence.md +0 -27
  536. package/.mindforge/integrations/connection-manager.md +0 -163
  537. package/.mindforge/integrations/github.md +0 -25
  538. package/.mindforge/integrations/gitlab.md +0 -13
  539. package/.mindforge/integrations/jira.md +0 -102
  540. package/.mindforge/integrations/slack.md +0 -41
  541. package/.mindforge/intelligence/antipattern-detector.md +0 -75
  542. package/.mindforge/intelligence/difficulty-scorer.md +0 -55
  543. package/.mindforge/intelligence/health-engine.md +0 -208
  544. package/.mindforge/intelligence/skill-gap-analyser.md +0 -40
  545. package/.mindforge/intelligence/smart-compaction.md +0 -71
  546. package/.mindforge/memory/MEMORY-SCHEMA.md +0 -155
  547. package/.mindforge/memory/engine/capture-protocol.md +0 -36
  548. package/.mindforge/memory/engine/global-sync-spec.md +0 -42
  549. package/.mindforge/memory/engine/retrieval-spec.md +0 -44
  550. package/.mindforge/memory/sync-manifest.json +0 -6
  551. package/.mindforge/metrics/METRICS-SCHEMA.md +0 -42
  552. package/.mindforge/metrics/quality-tracker.md +0 -32
  553. package/.mindforge/models/model-registry.md +0 -48
  554. package/.mindforge/models/model-router.md +0 -30
  555. package/.mindforge/monorepo/cross-package-planner.md +0 -114
  556. package/.mindforge/monorepo/dependency-graph-builder.md +0 -32
  557. package/.mindforge/monorepo/workspace-detector.md +0 -129
  558. package/.mindforge/org/CONVENTIONS.md +0 -62
  559. package/.mindforge/org/ORG.md +0 -51
  560. package/.mindforge/org/SECURITY.md +0 -50
  561. package/.mindforge/org/TOOLS.md +0 -53
  562. package/.mindforge/org/integrations/INTEGRATIONS-CONFIG.md +0 -58
  563. package/.mindforge/org/skills/MANIFEST.md +0 -15
  564. package/.mindforge/plugins/PLUGINS-MANIFEST.md +0 -23
  565. package/.mindforge/plugins/plugin-loader.md +0 -93
  566. package/.mindforge/plugins/plugin-registry.md +0 -44
  567. package/.mindforge/plugins/plugin-schema.md +0 -68
  568. package/.mindforge/pr-review/ai-reviewer.md +0 -266
  569. package/.mindforge/pr-review/finding-formatter.md +0 -46
  570. package/.mindforge/pr-review/review-prompt-templates.md +0 -44
  571. package/.mindforge/production/compatibility-layer.md +0 -39
  572. package/.mindforge/production/migration-engine.md +0 -52
  573. package/.mindforge/production/production-checklist.md +0 -76
  574. package/.mindforge/production/token-optimiser.md +0 -68
  575. package/.mindforge/skills-builder/auto-capture-protocol.md +0 -88
  576. package/.mindforge/skills-builder/learn-protocol.md +0 -161
  577. package/.mindforge/skills-builder/quality-scoring.md +0 -120
  578. package/.mindforge/team/TEAM-PROFILE.md +0 -42
  579. package/.mindforge/team/multi-handoff.md +0 -23
  580. package/.mindforge/team/profiles/README.md +0 -13
  581. package/.mindforge/team/session-merger.md +0 -18
  582. package/.planning/ARCHITECTURE.md +0 -0
  583. package/.planning/HANDOFF.json +0 -8
  584. package/.planning/PROJECT.md +0 -33
  585. package/.planning/RELEASE-CHECKLIST.md +0 -68
  586. package/.planning/REQUIREMENTS.md +0 -35
  587. package/.planning/ROADMAP.md +0 -12
  588. package/.planning/STATE.md +0 -36
  589. package/.planning/approvals/.gitkeep +0 -1
  590. package/.planning/archive/.gitkeep +0 -1
  591. package/.planning/audit-archive/.gitkeep +0 -1
  592. package/.planning/decisions/.gitkeep +0 -0
  593. package/.planning/jira-sync.json +0 -1
  594. package/.planning/milestones/.gitkeep +0 -1
  595. package/.planning/phases/.gitkeep +0 -0
  596. package/.planning/research/.gitkeep +0 -0
  597. package/.planning/screenshots/.gitkeep +0 -0
  598. package/.planning/slack-threads.json +0 -1
  599. package/docs/CAPABILITIES-MANIFEST.md +0 -64
  600. package/docs/Context/Master-Context.md +0 -731
  601. package/docs/INTELLIGENCE-MESH.md +0 -37
  602. package/docs/MIND-FORGE-REFERENCE-V6.md +0 -96
  603. package/docs/PERSONAS.md +0 -960
  604. package/docs/References/audit-events.md +0 -59
  605. package/docs/References/checkpoints.md +0 -778
  606. package/docs/References/commands.md +0 -107
  607. package/docs/References/config-reference.md +0 -81
  608. package/docs/References/continuation-format.md +0 -249
  609. package/docs/References/decimal-phase-calculation.md +0 -64
  610. package/docs/References/git-integration.md +0 -295
  611. package/docs/References/git-planning-commit.md +0 -38
  612. package/docs/References/model-profile-resolution.md +0 -36
  613. package/docs/References/model-profiles.md +0 -139
  614. package/docs/References/phase-argument-parsing.md +0 -61
  615. package/docs/References/planning-config.md +0 -202
  616. package/docs/References/questioning.md +0 -162
  617. package/docs/References/sdk-api.md +0 -53
  618. package/docs/References/skills-api.md +0 -57
  619. package/docs/References/tdd.md +0 -263
  620. package/docs/References/ui-brand.md +0 -160
  621. package/docs/References/user-profiling.md +0 -681
  622. package/docs/References/verification-patterns.md +0 -612
  623. package/docs/References/workstream-flag.md +0 -58
  624. package/docs/Templates/Agents/CLAUDE-MD.md +0 -122
  625. package/docs/Templates/Agents/COPILOT-INSTRUCTIONS.md +0 -7
  626. package/docs/Templates/Agents/DEBUGGER-PROMPT.md +0 -91
  627. package/docs/Templates/Agents/PLANNER-PROMPT.md +0 -117
  628. package/docs/Templates/Codebase/architecture.md +0 -255
  629. package/docs/Templates/Codebase/concerns.md +0 -310
  630. package/docs/Templates/Codebase/conventions.md +0 -307
  631. package/docs/Templates/Codebase/integrations.md +0 -280
  632. package/docs/Templates/Codebase/stack.md +0 -186
  633. package/docs/Templates/Codebase/structure.md +0 -285
  634. package/docs/Templates/Codebase/testing.md +0 -480
  635. package/docs/Templates/Execution/CONTINUE-HERE.md +0 -78
  636. package/docs/Templates/Execution/DISCUSSION-LOG.md +0 -63
  637. package/docs/Templates/Execution/PHASE-PROMPT.md +0 -610
  638. package/docs/Templates/Execution/STATE.md +0 -176
  639. package/docs/Templates/Execution/SUMMARY-COMPLEX.md +0 -59
  640. package/docs/Templates/Execution/SUMMARY-MINIMAL.md +0 -41
  641. package/docs/Templates/Execution/SUMMARY-STANDARD.md +0 -48
  642. package/docs/Templates/Execution/SUMMARY.md +0 -248
  643. package/docs/Templates/Profile/DEV-PREFERENCES.md +0 -21
  644. package/docs/Templates/Profile/USER-PROFILE.md +0 -146
  645. package/docs/Templates/Profile/USER-SETUP.md +0 -311
  646. package/docs/Templates/Project/AGENTS_LEARNING.md +0 -88
  647. package/docs/Templates/Project/DISCOVERY.md +0 -146
  648. package/docs/Templates/Project/MILESTONE-ARCHIVE.md +0 -123
  649. package/docs/Templates/Project/MILESTONE.md +0 -115
  650. package/docs/Templates/Project/PROJECT.md +0 -206
  651. package/docs/Templates/Project/REQUIREMENTS.md +0 -231
  652. package/docs/Templates/Project/RETROSPECTIVE.md +0 -54
  653. package/docs/Templates/Project/ROADMAP.md +0 -202
  654. package/docs/Templates/Quality/DEBUG.md +0 -164
  655. package/docs/Templates/Quality/UAT.md +0 -280
  656. package/docs/Templates/Quality/UI-SPEC.md +0 -100
  657. package/docs/Templates/Quality/VALIDATION.md +0 -76
  658. package/docs/Templates/Quality/VERIFICATION-REPORT.md +0 -322
  659. package/docs/Templates/Research/ARCHITECTURE.md +0 -204
  660. package/docs/Templates/Research/FEATURES.md +0 -147
  661. package/docs/Templates/Research/PITFALLS.md +0 -200
  662. package/docs/Templates/Research/STACK.md +0 -120
  663. package/docs/Templates/Research/SUMMARY.md +0 -170
  664. package/docs/Templates/System/CONFIG.json +0 -43
  665. package/docs/Templates/System/CONTEXT.md +0 -352
  666. package/docs/adr/ADR-024-browser-localhost-only.md +0 -17
  667. package/docs/adr/ADR-025-visual-verify-failure-treatment.md +0 -19
  668. package/docs/adr/ADR-026-session-persistence-security.md +0 -20
  669. package/docs/adr/ADR-042-ads-protocol.md +0 -30
  670. package/docs/architecture/NEXUS-DASHBOARD.md +0 -35
  671. package/docs/architecture/PAR-ZTS-SURVEY.md +0 -43
  672. package/docs/architecture/README.md +0 -78
  673. package/docs/architecture/V3-CORE.md +0 -52
  674. package/docs/architecture/V4-SWARM-MESH.md +0 -77
  675. package/docs/architecture/V5-ENTERPRISE.md +0 -131
  676. package/docs/architecture/V6-SOVEREIGN.md +0 -43
  677. package/docs/architecture/V8-SRE.md +0 -88
  678. package/docs/architecture/V9-BEDROCK.md +0 -162
  679. package/docs/architecture/adr-039-multi-runtime-support.md +0 -20
  680. package/docs/architecture/adr-040-additive-schema-migration.md +0 -21
  681. package/docs/architecture/adr-041-stable-runtime-interface-contract.md +0 -20
  682. package/docs/architecture/decision-records-index.md +0 -29
  683. package/docs/ci-cd-integration.md +0 -30
  684. package/docs/ci-cd.md +0 -92
  685. package/docs/ci-quickstart.md +0 -78
  686. package/docs/commands-skills/DISCOVERED_SKILLS.md +0 -21
  687. package/docs/contributing/CONTRIBUTING.md +0 -38
  688. package/docs/contributing/plugin-authoring.md +0 -50
  689. package/docs/contributing/skill-authoring.md +0 -41
  690. package/docs/enterprise-setup.md +0 -25
  691. package/docs/feature-dashboard.md +0 -63
  692. package/docs/governance-guide.md +0 -134
  693. package/docs/monorepo-guide.md +0 -26
  694. package/docs/persona-customisation.md +0 -56
  695. package/docs/publishing-guide.md +0 -43
  696. package/docs/quick-verify.md +0 -33
  697. package/docs/registry/AGENTS.md +0 -37
  698. package/docs/registry/COMMANDS.md +0 -87
  699. package/docs/registry/HOOKS.md +0 -38
  700. package/docs/registry/PERSONAS.md +0 -64
  701. package/docs/registry/README.md +0 -27
  702. package/docs/registry/SKILLS.md +0 -142
  703. package/docs/registry/WORKFLOWS.md +0 -72
  704. package/docs/release-checklist-guide.md +0 -37
  705. package/docs/requirements.md +0 -29
  706. package/docs/security/SECURITY.md +0 -55
  707. package/docs/security/ZTAI-OVERVIEW.md +0 -37
  708. package/docs/security/penetration-test-results.md +0 -31
  709. package/docs/security/threat-model.md +0 -142
  710. package/docs/skills-authoring-guide.md +0 -176
  711. package/docs/skills-publishing-guide.md +0 -22
  712. package/docs/team-setup-guide.md +0 -21
  713. package/docs/testing-current-version.md +0 -130
  714. package/docs/tutorial.md +0 -162
  715. package/docs/upgrade.md +0 -58
  716. package/docs/usp-features.md +0 -102
  717. package/docs/workflow-atlas.md +0 -57
@@ -0,0 +1,116 @@
1
+ /**
2
+ * MindForge — State Manager
3
+ * Extracted from auto-runner.js — handles state transitions, HANDOFF.json and
4
+ * auto-state.json read/write, and phase management.
5
+ */
6
+ 'use strict';
7
+
8
+ const fs = require('fs');
9
+ const path = require('path');
10
+
11
+ const VALID_PHASES = ['idle', 'planning', 'executing', 'verifying', 'complete', 'running', 'paused', 'completed'];
12
+
13
+ /**
14
+ * Creates a state manager for the given planning directory.
15
+ * @param {string} planningDir — Absolute path to the .planning directory
16
+ * @returns {{ getState, updateState, transition, readHandoff, writeHandoff }}
17
+ */
18
+ function createStateManager(planningDir) {
19
+ const statePath = path.join(planningDir, 'auto-state.json');
20
+ const handoffPath = path.join(planningDir, 'HANDOFF.json');
21
+
22
+ /**
23
+ * Reads the current state from auto-state.json.
24
+ * Returns a fresh object (never a shared reference).
25
+ */
26
+ function getState() {
27
+ if (!fs.existsSync(statePath)) {
28
+ return Object.create(null);
29
+ }
30
+
31
+ try {
32
+ const raw = fs.readFileSync(statePath, 'utf8');
33
+ const parsed = JSON.parse(raw);
34
+ return sanitizeState(parsed);
35
+ } catch (e) {
36
+ // Corrupt state file — return empty
37
+ return Object.create(null);
38
+ }
39
+ }
40
+
41
+ /**
42
+ * Merges a patch into the current state (immutable — writes new object to disk).
43
+ * @param {object} patch — Key/value pairs to merge
44
+ */
45
+ function updateState(patch) {
46
+ const current = getState();
47
+ const merged = Object.assign(Object.create(null), current, patch);
48
+ fs.writeFileSync(statePath, JSON.stringify(merged, null, 2));
49
+ return merged;
50
+ }
51
+
52
+ /**
53
+ * Transitions the state to a new status phase.
54
+ * @param {string} newPhase — One of: idle, planning, executing, verifying, complete, running, paused, completed
55
+ */
56
+ function transition(newPhase) {
57
+ if (!VALID_PHASES.includes(newPhase)) {
58
+ throw new Error(`Invalid state transition target: "${newPhase}". Valid: ${VALID_PHASES.join(', ')}`);
59
+ }
60
+ return updateState({
61
+ status: newPhase,
62
+ lastTransition: new Date().toISOString(),
63
+ });
64
+ }
65
+
66
+ /**
67
+ * Reads and parses HANDOFF.json. Throws if missing or malformed.
68
+ * @returns {object} Parsed handoff data (fresh object)
69
+ */
70
+ function readHandoff() {
71
+ if (!fs.existsSync(handoffPath)) {
72
+ throw new Error('HANDOFF.json not found — run /mindforge:plan-phase first');
73
+ }
74
+
75
+ let handoff;
76
+ try {
77
+ handoff = JSON.parse(fs.readFileSync(handoffPath, 'utf8'));
78
+ } catch (e) {
79
+ throw new Error(`HANDOFF.json is malformed: ${e.message}`);
80
+ }
81
+
82
+ if (!handoff.handoffs || !Array.isArray(handoff.handoffs)) {
83
+ throw new Error('HANDOFF.json has no handoffs array');
84
+ }
85
+
86
+ return handoff;
87
+ }
88
+
89
+ /**
90
+ * Writes data to HANDOFF.json (immutable — creates new file contents).
91
+ * @param {object} data — The handoff object to persist
92
+ */
93
+ function writeHandoff(data) {
94
+ const timestamped = Object.assign(Object.create(null), data, {
95
+ last_updated: new Date().toISOString(),
96
+ });
97
+ fs.writeFileSync(handoffPath, JSON.stringify(timestamped, null, 2) + '\n');
98
+ return timestamped;
99
+ }
100
+
101
+ return Object.freeze({ getState, updateState, transition, readHandoff, writeHandoff });
102
+ }
103
+
104
+ /**
105
+ * Sanitizes parsed JSON to prevent prototype pollution.
106
+ */
107
+ function sanitizeState(parsed) {
108
+ const clean = Object.create(null);
109
+ for (const key of Object.keys(parsed)) {
110
+ if (key === '__proto__' || key === 'constructor' || key === 'prototype') continue;
111
+ clean[key] = parsed[key];
112
+ }
113
+ return clean;
114
+ }
115
+
116
+ module.exports = { createStateManager };
@@ -0,0 +1,114 @@
1
+ /**
2
+ * MindForge — Task Dispatcher
3
+ * Extracted from auto-runner.js — handles task parsing from HANDOFF.json,
4
+ * task queue management, task prioritization, and dispatch logic.
5
+ */
6
+ 'use strict';
7
+
8
+ const crypto = require('crypto');
9
+
10
+ /**
11
+ * Parses a HANDOFF.json file content into a normalized task list.
12
+ * @param {object} handoffData — Parsed HANDOFF.json object (must have .handoffs array)
13
+ * @returns {Array<{ id: string, name: string, plan: string|null, depends_on: string[], wave: number }>}
14
+ */
15
+ function parseHandoff(handoffData) {
16
+ if (!handoffData || !Array.isArray(handoffData.handoffs)) {
17
+ throw new Error('Invalid handoff data — missing handoffs array');
18
+ }
19
+
20
+ return handoffData.handoffs.map(h => Object.freeze({
21
+ id: h.id || h.task_id || `task_${crypto.randomBytes(4).toString('hex')}`,
22
+ name: h.name || h.task || h.description || h.id || 'unnamed-task',
23
+ plan: h.plan || null,
24
+ depends_on: Array.isArray(h.depends_on) ? [...h.depends_on] : [],
25
+ wave: typeof h.wave === 'number' ? h.wave : null,
26
+ }));
27
+ }
28
+
29
+ /**
30
+ * Prioritizes tasks based on dependency depth and wave ordering.
31
+ * Tasks with fewer dependencies come first; within same depth, preserves original order.
32
+ * @param {Array} tasks — Normalized task list from parseHandoff
33
+ * @returns {Array} — New sorted array (input is not mutated)
34
+ */
35
+ function prioritizeTasks(tasks) {
36
+ // Build a dependency depth map
37
+ const depthMap = new Map();
38
+
39
+ function getDepth(task, visited = new Set()) {
40
+ if (depthMap.has(task.id)) return depthMap.get(task.id);
41
+ if (visited.has(task.id)) return 0; // circular — break cycle
42
+ visited.add(task.id);
43
+
44
+ if (task.depends_on.length === 0) {
45
+ depthMap.set(task.id, 0);
46
+ return 0;
47
+ }
48
+
49
+ const maxParentDepth = task.depends_on.reduce((max, depId) => {
50
+ const parent = tasks.find(t => t.id === depId);
51
+ if (!parent) return max;
52
+ return Math.max(max, getDepth(parent, new Set(visited)));
53
+ }, 0);
54
+
55
+ const depth = maxParentDepth + 1;
56
+ depthMap.set(task.id, depth);
57
+ return depth;
58
+ }
59
+
60
+ // Compute depth for all tasks
61
+ for (const task of tasks) {
62
+ getDepth(task);
63
+ }
64
+
65
+ // Sort by wave first (if present), then by depth, then by original order
66
+ const indexed = tasks.map((task, i) => ({ task, originalIndex: i }));
67
+
68
+ const sorted = [...indexed].sort((a, b) => {
69
+ // Wave ordering first
70
+ const waveA = a.task.wave ?? Infinity;
71
+ const waveB = b.task.wave ?? Infinity;
72
+ if (waveA !== waveB) return waveA - waveB;
73
+
74
+ // Then by dependency depth
75
+ const depthA = depthMap.get(a.task.id) || 0;
76
+ const depthB = depthMap.get(b.task.id) || 0;
77
+ if (depthA !== depthB) return depthA - depthB;
78
+
79
+ // Preserve original order as tiebreaker
80
+ return a.originalIndex - b.originalIndex;
81
+ });
82
+
83
+ return sorted.map(item => item.task);
84
+ }
85
+
86
+ /**
87
+ * Dispatches a single task to an executor function.
88
+ * Returns the result wrapped in a status envelope.
89
+ * @param {object} task — A normalized task object
90
+ * @param {function} executor — async function(task) => result
91
+ * @returns {Promise<{ task_id: string, status: string, result?: any, error?: string, duration_ms: number }>}
92
+ */
93
+ async function dispatchTask(task, executor) {
94
+ const start = Date.now();
95
+
96
+ try {
97
+ const result = await executor(task);
98
+ return Object.freeze({
99
+ task_id: task.id,
100
+ status: 'completed',
101
+ result,
102
+ duration_ms: Date.now() - start,
103
+ });
104
+ } catch (err) {
105
+ return Object.freeze({
106
+ task_id: task.id,
107
+ status: 'failed',
108
+ error: err.message,
109
+ duration_ms: Date.now() - start,
110
+ });
111
+ }
112
+ }
113
+
114
+ module.exports = { parseHandoff, prioritizeTasks, dispatchTask };
@@ -0,0 +1,169 @@
1
+ /**
2
+ * MindForge — Wave Executor
3
+ * Extracted from auto-runner.js — handles wave orchestration: grouping tasks
4
+ * into waves, executing waves in sequence, and managing wave dependencies.
5
+ */
6
+ 'use strict';
7
+
8
+ const crypto = require('crypto');
9
+
10
+ /**
11
+ * Creates a wave executor with the given configuration.
12
+ * @param {object} config
13
+ * @param {function} [config.onTaskStart] — Called when a task begins
14
+ * @param {function} [config.onTaskComplete] — Called when a task finishes
15
+ * @param {function} [config.onTaskFail] — Called when a task fails
16
+ * @param {function} [config.onWaveStart] — Called when a wave begins
17
+ * @param {function} [config.onWaveComplete] — Called when a wave finishes
18
+ * @returns {{ planWaves, executeWave, getWaveStatus }}
19
+ */
20
+ function createWaveExecutor(config = {}) {
21
+ const {
22
+ onTaskStart = () => {},
23
+ onTaskComplete = () => {},
24
+ onTaskFail = () => {},
25
+ onWaveStart = () => {},
26
+ onWaveComplete = () => {},
27
+ } = config;
28
+
29
+ // Internal state — immutable snapshots exposed via getWaveStatus
30
+ let waves = [];
31
+ let currentWaveIndex = 0;
32
+ let completedTasks = new Set();
33
+ let status = 'idle'; // idle | running | paused | completed
34
+
35
+ /**
36
+ * Groups handoff tasks into sequential waves based on wave field or dependency topology.
37
+ * Returns a new array of wave objects — does not mutate input.
38
+ * @param {Array} handoffs — Raw handoffs array from HANDOFF.json
39
+ * @returns {Array<{ wave: number, tasks: Array }>}
40
+ */
41
+ function planWaves(handoffs) {
42
+ if (!Array.isArray(handoffs) || handoffs.length === 0) {
43
+ waves = [];
44
+ return [];
45
+ }
46
+
47
+ const hasWaveField = handoffs.some(h => typeof h.wave === 'number');
48
+
49
+ if (hasWaveField) {
50
+ const byWave = new Map();
51
+ for (const h of handoffs) {
52
+ const w = h.wave ?? 0;
53
+ if (!byWave.has(w)) byWave.set(w, []);
54
+ byWave.get(w).push(normalizeTask(h));
55
+ }
56
+
57
+ waves = Array.from(byWave.entries())
58
+ .sort((a, b) => a[0] - b[0])
59
+ .map(([waveNum, tasks]) => Object.freeze({ wave: waveNum, tasks: Object.freeze(tasks) }));
60
+ } else {
61
+ // Single wave with all tasks
62
+ waves = [Object.freeze({
63
+ wave: 0,
64
+ tasks: Object.freeze(handoffs.map(normalizeTask)),
65
+ })];
66
+ }
67
+
68
+ currentWaveIndex = 0;
69
+ completedTasks = new Set();
70
+ status = 'idle';
71
+
72
+ return waves;
73
+ }
74
+
75
+ /**
76
+ * Executes a single wave — runs tasks sequentially, skipping already-completed ones.
77
+ * @param {object} wave — A wave object from planWaves
78
+ * @param {object} context — Execution context passed to callbacks
79
+ * @param {object} context.executor — async function(task) => result (performs actual work)
80
+ * @returns {Promise<{ completed: string[], failed: string[], skipped: string[] }>}
81
+ */
82
+ async function executeWave(wave, context = {}) {
83
+ const { executor = async () => {} } = context;
84
+ status = 'running';
85
+
86
+ const pending = wave.tasks.filter(t => !completedTasks.has(t.id));
87
+ const result = { completed: [], failed: [], skipped: [] };
88
+
89
+ onWaveStart({ wave: wave.wave, taskCount: pending.length });
90
+
91
+ for (const task of pending) {
92
+ const taskStart = Date.now();
93
+ onTaskStart({ task, wave: wave.wave });
94
+
95
+ try {
96
+ await executor(task);
97
+
98
+ const duration = Date.now() - taskStart;
99
+ completedTasks = new Set([...completedTasks, task.id]);
100
+ result.completed.push(task.id);
101
+
102
+ onTaskComplete({ task, wave: wave.wave, duration_ms: duration });
103
+ } catch (err) {
104
+ const duration = Date.now() - taskStart;
105
+ result.failed.push(task.id);
106
+
107
+ onTaskFail({ task, wave: wave.wave, error: err, duration_ms: duration });
108
+
109
+ // Re-throw to let caller decide on retry/escalation strategy
110
+ throw err;
111
+ }
112
+ }
113
+
114
+ currentWaveIndex++;
115
+ onWaveComplete({ wave: wave.wave, result });
116
+
117
+ if (currentWaveIndex >= waves.length) {
118
+ status = 'completed';
119
+ }
120
+
121
+ return Object.freeze(result);
122
+ }
123
+
124
+ /**
125
+ * Returns a snapshot of the current wave execution status.
126
+ */
127
+ function getWaveStatus() {
128
+ return Object.freeze({
129
+ status,
130
+ currentWaveIndex,
131
+ totalWaves: waves.length,
132
+ completedTasks: Array.from(completedTasks),
133
+ waves: waves.map(w => Object.freeze({
134
+ wave: w.wave,
135
+ taskCount: w.tasks.length,
136
+ completedCount: w.tasks.filter(t => completedTasks.has(t.id)).length,
137
+ })),
138
+ });
139
+ }
140
+
141
+ /**
142
+ * Restores progress from a previously saved state.
143
+ * @param {{ currentWaveIndex: number, completedTasks: string[] }} savedState
144
+ */
145
+ function restore(savedState) {
146
+ if (savedState && typeof savedState.currentWaveIndex === 'number') {
147
+ currentWaveIndex = savedState.currentWaveIndex;
148
+ }
149
+ if (savedState && Array.isArray(savedState.completedTasks)) {
150
+ completedTasks = new Set(savedState.completedTasks);
151
+ }
152
+ }
153
+
154
+ return Object.freeze({ planWaves, executeWave, getWaveStatus, restore });
155
+ }
156
+
157
+ /**
158
+ * Normalizes a raw handoff entry into a clean task object.
159
+ */
160
+ function normalizeTask(h) {
161
+ return Object.freeze({
162
+ id: h.id || h.task_id || `task_${crypto.randomBytes(4).toString('hex')}`,
163
+ name: h.name || h.task || h.description || h.id || 'unnamed-task',
164
+ plan: h.plan || null,
165
+ depends_on: Array.isArray(h.depends_on) ? [...h.depends_on] : [],
166
+ });
167
+ }
168
+
169
+ module.exports = { createWaveExecutor };
@@ -6,6 +6,7 @@
6
6
  'use strict';
7
7
 
8
8
  const http = require('http');
9
+ const crypto = require('crypto');
9
10
  const playwright = require('playwright-core');
10
11
  const fs = require('fs');
11
12
  const path = require('path');
@@ -14,6 +15,26 @@ const PORT = process.env.BROWSER_PORT || 7338;
14
15
  const HEADLESS = process.env.BROWSER_HEADLESS !== 'false';
15
16
  const TIMEOUT = (parseInt(process.env.BROWSER_IDLE_TIMEOUT_MINUTES) || 30) * 60 * 1000;
16
17
 
18
+ // ── Bearer token authentication ──────────────────────────────────────────────
19
+ const DAEMON_TOKEN = crypto.randomBytes(32).toString('hex');
20
+ const DAEMON_TOKEN_FILE = path.join(process.cwd(), '.mindforge', '.browser-daemon-token');
21
+
22
+ // Write token to file with restrictive permissions (owner-only read/write)
23
+ fs.mkdirSync(path.dirname(DAEMON_TOKEN_FILE), { recursive: true });
24
+ fs.writeFileSync(DAEMON_TOKEN_FILE, DAEMON_TOKEN, { mode: 0o600 });
25
+
26
+ /**
27
+ * Validate bearer token from Authorization header.
28
+ * Returns true if valid, false otherwise.
29
+ */
30
+ function isAuthValid(req) {
31
+ const authHeader = req.headers.authorization;
32
+ if (!authHeader || !authHeader.startsWith('Bearer ')) return false;
33
+ const provided = authHeader.slice(7);
34
+ if (provided.length !== DAEMON_TOKEN.length) return false;
35
+ return crypto.timingSafeEqual(Buffer.from(provided), Buffer.from(DAEMON_TOKEN));
36
+ }
37
+
17
38
  let browser, lastActionAt = Date.now(), isLaunching = false;
18
39
  const sessions = new Map(); // name -> { context, page }
19
40
 
@@ -98,6 +119,9 @@ const server = http.createServer(async (req, res) => {
98
119
  }
99
120
 
100
121
  if (req.url === '/evaluate' && req.method === 'POST') {
122
+ if (!isAuthValid(req)) {
123
+ return send({ error: 'Authentication required. Use the token printed at daemon startup.' }, 401);
124
+ }
101
125
  const result = await page.evaluate(script);
102
126
  return send({ success: true, result });
103
127
  }
@@ -123,7 +147,11 @@ const server = http.createServer(async (req, res) => {
123
147
  });
124
148
 
125
149
  init().then(() => {
126
- server.listen(PORT, '127.0.0.1', () => console.log(`[daemon] Browser daemon listening on port ${PORT}`));
150
+ server.listen(PORT, '127.0.0.1', () => {
151
+ console.log(`[BrowserDaemon] Listening on port ${PORT}`);
152
+ console.log(`[BrowserDaemon] Auth token: ${DAEMON_TOKEN}`);
153
+ console.log(`[BrowserDaemon] Token file: ${DAEMON_TOKEN_FILE}`);
154
+ });
127
155
  }).catch(err => {
128
156
  console.error('[daemon] Initialization failed:', err);
129
157
  process.exit(1);
@@ -131,6 +159,8 @@ init().then(() => {
131
159
 
132
160
  async function shutdown() {
133
161
  console.log('[daemon] Shutting down gracefully...');
162
+ // Remove sensitive token file on shutdown
163
+ if (fs.existsSync(DAEMON_TOKEN_FILE)) fs.unlinkSync(DAEMON_TOKEN_FILE);
134
164
  if (browser) await browser.close();
135
165
  process.exit(0);
136
166
  }
@@ -6,7 +6,7 @@
6
6
 
7
7
  'use strict';
8
8
 
9
- const { execSync } = require('child_process');
9
+ const { execSync, execFileSync } = require('child_process');
10
10
  const fs = require('fs');
11
11
 
12
12
  const SENSITIVE_PATHS = [
@@ -33,7 +33,7 @@ function classify() {
33
33
  try {
34
34
  // Get list of changed files compared to origin/main or HEAD~1
35
35
  const base = process.env.GITHUB_BASE_REF ? `origin/${process.env.GITHUB_BASE_REF}` : 'HEAD~1';
36
- const diffFiles = execSync(`git diff --name-only ${base}..HEAD`, { encoding: 'utf8' }).split('\n').filter(Boolean);
36
+ const diffFiles = execFileSync('git', ['diff', '--name-only', `${base}..HEAD`], { encoding: 'utf8' }).split('\n').filter(Boolean);
37
37
 
38
38
  let tier = 1;
39
39
  let reasons = [];
@@ -47,7 +47,7 @@ function classify() {
47
47
 
48
48
  // 2. Pattern-based detection in diff (Tier 3)
49
49
  if (tier < 3) {
50
- const diffContent = execSync(`git diff ${base}..HEAD`, { encoding: 'utf8' });
50
+ const diffContent = execFileSync('git', ['diff', `${base}..HEAD`], { encoding: 'utf8' });
51
51
  for (const pattern of SENSITIVE_PATTERNS) {
52
52
  if (pattern.test(diffContent)) {
53
53
  tier = 3;
@@ -130,18 +130,29 @@ function register(app) {
130
130
  });
131
131
 
132
132
  // ── Steering (requires auto mode running) ───────────────────────────────────
133
+ const VALID_STEER_ACTIONS = ['pause', 'resume', 'switch_phase', 'priority_bump', 'skip_task', 'abort'];
134
+
133
135
  app.post('/api/steer', (req, res) => {
134
136
  try {
135
- const { instruction, priority = 'normal' } = req.body || {};
137
+ const { action, params = {} } = req.body || {};
136
138
 
137
- if (!instruction || typeof instruction !== 'string') {
138
- return res.status(400).json({ error: 'Missing "instruction" field' });
139
+ // Validate action is present and in allowlist
140
+ if (!action || typeof action !== 'string') {
141
+ return res.status(400).json({
142
+ error: `Invalid action. Valid actions: ${VALID_STEER_ACTIONS.join(', ')}`
143
+ });
139
144
  }
140
- if (instruction.length > 500) {
141
- return res.status(400).json({ error: 'Instruction too long (max 500 chars)' });
145
+ if (!VALID_STEER_ACTIONS.includes(action)) {
146
+ return res.status(400).json({
147
+ error: `Invalid action. Valid actions: ${VALID_STEER_ACTIONS.join(', ')}`
148
+ });
142
149
  }
143
- if (!['normal', 'urgent', 'stop'].includes(priority)) {
144
- return res.status(400).json({ error: 'Invalid priority. Use: normal|urgent|stop' });
150
+
151
+ // If params contains freeText, cap at 200 characters
152
+ if (params.freeText && typeof params.freeText === 'string') {
153
+ if (params.freeText.length > 200) {
154
+ return res.status(400).json({ error: 'params.freeText exceeds 200 character limit' });
155
+ }
145
156
  }
146
157
 
147
158
  // Check auto mode is running
@@ -153,24 +164,12 @@ function register(app) {
153
164
  return res.status(409).json({ error: 'Auto mode is not running. Steering has no effect.' });
154
165
  }
155
166
 
156
- // Run injection guard
157
- const INJECTION_PATTERNS = [
158
- /IGNORE ALL PREVIOUS INSTRUCTIONS/i,
159
- /DISREGARD YOUR INSTRUCTIONS/i,
160
- /FORGET YOUR TRAINING/i,
161
- /YOUR NEW INSTRUCTIONS ARE/i,
162
- /OVERRIDE:/i,
163
- ];
164
- if (INJECTION_PATTERNS.some(p => p.test(instruction))) {
165
- return res.status(400).json({ error: 'Instruction rejected: contains prohibited patterns' });
166
- }
167
-
168
167
  // Write to steering queue
169
168
  const entry = {
170
169
  id: require('crypto').randomBytes(8).toString('hex'),
171
170
  timestamp: new Date().toISOString(),
172
- instruction: instruction.trim(),
173
- priority,
171
+ action,
172
+ params,
174
173
  authored_by: 'dashboard',
175
174
  applies_to: 'all',
176
175
  status: 'queued',
@@ -183,7 +182,7 @@ function register(app) {
183
182
  }
184
183
  fs.appendFileSync(STEERING_QUEUE, JSON.stringify(entry) + '\n');
185
184
 
186
- res.json({ success: true, queued: true, id: entry.id, priority });
185
+ res.json({ success: true, queued: true, id: entry.id, action });
187
186
  } catch (err) {
188
187
  res.status(500).json({ error: err.message });
189
188
  }
@@ -8,6 +8,24 @@
8
8
  const fs = require('fs');
9
9
  const path = require('path');
10
10
 
11
+ // ── TTL Cache (5-second window) ──────────────────────────────────────────────
12
+ const _cache = new Map();
13
+ const CACHE_TTL_MS = 5000;
14
+
15
+ function cacheGet(key) {
16
+ const entry = _cache.get(key);
17
+ if (!entry) return undefined;
18
+ if (Date.now() - entry.timestamp >= CACHE_TTL_MS) {
19
+ _cache.delete(key);
20
+ return undefined;
21
+ }
22
+ return entry.data;
23
+ }
24
+
25
+ function cacheSet(key, data) {
26
+ _cache.set(key, { data, timestamp: Date.now() });
27
+ }
28
+
11
29
  // Paths are resolved lazily to support testing in temp directories
12
30
  const getPaths = () => ({
13
31
  quality: path.join(process.cwd(), '.mindforge', 'metrics', 'session-quality.jsonl'),
@@ -70,6 +88,10 @@ function getStatus() {
70
88
 
71
89
  // ── Audit ─────────────────────────────────────────────────────────────────────
72
90
  function getAuditEntries(limit = 50, offset = 0, eventFilter = null) {
91
+ const cacheKey = `audit:${limit}:${offset}:${eventFilter || ''}`;
92
+ const cached = cacheGet(cacheKey);
93
+ if (cached !== undefined) return cached;
94
+
73
95
  const paths = getPaths();
74
96
  const all = readJSONL(paths.audit, 1000);
75
97
  const reversed = all.reverse(); // Newest first
@@ -78,16 +100,22 @@ function getAuditEntries(limit = 50, offset = 0, eventFilter = null) {
78
100
  ? reversed.filter(e => e.event === eventFilter)
79
101
  : reversed;
80
102
 
81
- return {
103
+ const result = {
82
104
  entries: filtered.slice(offset, offset + limit),
83
105
  total: filtered.length,
84
106
  limit,
85
107
  offset,
86
108
  };
109
+
110
+ cacheSet(cacheKey, result);
111
+ return result;
87
112
  }
88
113
 
89
114
  // ── Metrics ───────────────────────────────────────────────────────────────────
90
115
  function getMetrics() {
116
+ const cached = cacheGet('metrics');
117
+ if (cached !== undefined) return cached;
118
+
91
119
  const paths = getPaths();
92
120
  const qualityEntries = readJSONL(paths.quality, 20);
93
121
  const usageEntries = readJSONL(paths.usage, 200);
@@ -123,7 +151,7 @@ function getMetrics() {
123
151
  const node_repair_rate = taskEvents.length
124
152
  ? repairEvents.length / taskEvents.length : 0;
125
153
 
126
- return {
154
+ const result = {
127
155
  sessions,
128
156
  avg_quality: Math.round(avg_quality * 100) / 100,
129
157
  avg_cost_usd: Math.round(avg_cost_usd * 10000) / 10000,
@@ -131,6 +159,9 @@ function getMetrics() {
131
159
  node_repair_rate: Math.round(node_repair_rate * 100) / 100,
132
160
  total_tasks: taskEvents.filter(e => e.event === 'task_completed').length,
133
161
  };
162
+
163
+ cacheSet('metrics', result);
164
+ return result;
134
165
  }
135
166
 
136
167
  // ── Approvals ─────────────────────────────────────────────────────────────────
@@ -168,6 +199,9 @@ function getApprovals() {
168
199
 
169
200
  // ── Team activity ─────────────────────────────────────────────────────────────
170
201
  function getTeamActivity() {
202
+ const cached = cacheGet('teamActivity');
203
+ if (cached !== undefined) return cached;
204
+
171
205
  const paths = getPaths();
172
206
  const auditEntries = readJSONL(paths.audit, 200);
173
207
 
@@ -197,7 +231,9 @@ function getTeamActivity() {
197
231
  // Conflict detection — two authors recently touching same file
198
232
  const conflicts = detectFileConflicts(auditEntries);
199
233
 
200
- return { active, conflicts };
234
+ const result = { active, conflicts };
235
+ cacheSet('teamActivity', result);
236
+ return result;
201
237
  }
202
238
 
203
239
  function detectFileConflicts(auditEntries) {
@@ -249,6 +285,10 @@ function getMemory(query = '', limit = 20) {
249
285
 
250
286
  // ── Costs ─────────────────────────────────────────────────────────────────────
251
287
  function getCosts(windowDays = 7) {
288
+ const cacheKey = `costs:${windowDays}`;
289
+ const cached = cacheGet(cacheKey);
290
+ if (cached !== undefined) return cached;
291
+
252
292
  const paths = getPaths();
253
293
  const entries = readJSONL(paths.usage, 1000);
254
294
  const cutoff = new Date(Date.now() - windowDays * 86_400_000).toISOString().slice(0, 10);
@@ -282,6 +322,7 @@ function getCosts(windowDays = 7) {
282
322
  stats.by_model[m] = Math.round(stats.by_model[m] * 100) / 100;
283
323
  }
284
324
 
325
+ cacheSet(cacheKey, stats);
285
326
  return stats;
286
327
  }
287
328