monomind 2.7.12 → 2.7.13

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 (1159) hide show
  1. package/bin/cli.js +55 -4
  2. package/package.json +4 -47
  3. package/bin/npx-safe-launch.js +0 -9
  4. package/packages/@monomind/cli/.claude/agents/architecture/system-design/arch-system-design.md +0 -54
  5. package/packages/@monomind/cli/.claude/agents/consensus/crdt-synchronizer.md +0 -977
  6. package/packages/@monomind/cli/.claude/agents/consensus/quorum-manager.md +0 -106
  7. package/packages/@monomind/cli/.claude/agents/consensus/security-manager.md +0 -602
  8. package/packages/@monomind/cli/.claude/agents/core/coder.md +0 -271
  9. package/packages/@monomind/cli/.claude/agents/core/coordinator.md +0 -133
  10. package/packages/@monomind/cli/.claude/agents/core/planner.md +0 -179
  11. package/packages/@monomind/cli/.claude/agents/core/researcher.md +0 -197
  12. package/packages/@monomind/cli/.claude/agents/core/reviewer.md +0 -336
  13. package/packages/@monomind/cli/.claude/agents/core/tester.md +0 -326
  14. package/packages/@monomind/cli/.claude/agents/design/design-monodesign.md +0 -121
  15. package/packages/@monomind/cli/.claude/agents/engineering/engineering-ai-data-remediation-engineer.md +0 -212
  16. package/packages/@monomind/cli/.claude/agents/engineering/engineering-ai-engineer.md +0 -165
  17. package/packages/@monomind/cli/.claude/agents/engineering/engineering-autonomous-optimization-architect.md +0 -108
  18. package/packages/@monomind/cli/.claude/agents/engineering/engineering-backend-architect.md +0 -254
  19. package/packages/@monomind/cli/.claude/agents/engineering/engineering-code-reviewer.md +0 -95
  20. package/packages/@monomind/cli/.claude/agents/engineering/engineering-data-engineer.md +0 -307
  21. package/packages/@monomind/cli/.claude/agents/engineering/engineering-database-optimizer.md +0 -200
  22. package/packages/@monomind/cli/.claude/agents/engineering/engineering-devops-automator.md +0 -430
  23. package/packages/@monomind/cli/.claude/agents/engineering/engineering-embedded-firmware-engineer.md +0 -174
  24. package/packages/@monomind/cli/.claude/agents/engineering/engineering-feishu-integration-developer.md +0 -607
  25. package/packages/@monomind/cli/.claude/agents/engineering/engineering-frontend-developer.md +0 -249
  26. package/packages/@monomind/cli/.claude/agents/engineering/engineering-git-workflow-master.md +0 -108
  27. package/packages/@monomind/cli/.claude/agents/engineering/engineering-incident-response-commander.md +0 -482
  28. package/packages/@monomind/cli/.claude/agents/engineering/engineering-mobile-app-builder.md +0 -499
  29. package/packages/@monomind/cli/.claude/agents/engineering/engineering-rapid-prototyper.md +0 -463
  30. package/packages/@monomind/cli/.claude/agents/engineering/engineering-security-engineer.md +0 -303
  31. package/packages/@monomind/cli/.claude/agents/engineering/engineering-senior-developer.md +0 -195
  32. package/packages/@monomind/cli/.claude/agents/engineering/engineering-software-architect.md +0 -100
  33. package/packages/@monomind/cli/.claude/agents/engineering/engineering-solidity-smart-contract-engineer.md +0 -528
  34. package/packages/@monomind/cli/.claude/agents/engineering/engineering-sre.md +0 -114
  35. package/packages/@monomind/cli/.claude/agents/engineering/engineering-technical-writer.md +0 -412
  36. package/packages/@monomind/cli/.claude/agents/engineering/engineering-threat-detection-engineer.md +0 -540
  37. package/packages/@monomind/cli/.claude/agents/engineering/engineering-wechat-mini-program-developer.md +0 -351
  38. package/packages/@monomind/cli/.claude/agents/github/code-review-swarm.md +0 -557
  39. package/packages/@monomind/cli/.claude/agents/github/github-modes.md +0 -154
  40. package/packages/@monomind/cli/.claude/agents/github/issue-tracker.md +0 -297
  41. package/packages/@monomind/cli/.claude/agents/github/multi-repo-swarm.md +0 -525
  42. package/packages/@monomind/cli/.claude/agents/github/pr-manager.md +0 -161
  43. package/packages/@monomind/cli/.claude/agents/github/project-board-sync.md +0 -478
  44. package/packages/@monomind/cli/.claude/agents/github/release-manager.md +0 -296
  45. package/packages/@monomind/cli/.claude/agents/github/repo-architect.md +0 -351
  46. package/packages/@monomind/cli/.claude/agents/github/swarm-issue.md +0 -548
  47. package/packages/@monomind/cli/.claude/agents/github/swarm-pr.md +0 -427
  48. package/packages/@monomind/cli/.claude/agents/github/sync-coordinator.md +0 -355
  49. package/packages/@monomind/cli/.claude/agents/github/workflow-automation.md +0 -640
  50. package/packages/@monomind/cli/.claude/agents/goal/goal-planner.md +0 -167
  51. package/packages/@monomind/cli/.claude/agents/hive-mind/collective-intelligence-coordinator.md +0 -93
  52. package/packages/@monomind/cli/.claude/agents/hive-mind/scout-explorer.md +0 -241
  53. package/packages/@monomind/cli/.claude/agents/hive-mind/swarm-memory-manager.md +0 -192
  54. package/packages/@monomind/cli/.claude/agents/hive-mind/worker-specialist.md +0 -216
  55. package/packages/@monomind/cli/.claude/agents/marketing/marketing-competitive-content.md +0 -155
  56. package/packages/@monomind/cli/.claude/agents/marketing/marketing-cro-specialist.md +0 -147
  57. package/packages/@monomind/cli/.claude/agents/marketing/marketing-email-specialist.md +0 -90
  58. package/packages/@monomind/cli/.claude/agents/marketing/marketing-launch-strategist.md +0 -129
  59. package/packages/@monomind/cli/.claude/agents/marketing/marketing-pricing-strategist.md +0 -127
  60. package/packages/@monomind/cli/.claude/agents/optimization/benchmark-suite.md +0 -665
  61. package/packages/@monomind/cli/.claude/agents/optimization/load-balancer.md +0 -431
  62. package/packages/@monomind/cli/.claude/agents/optimization/performance-monitor.md +0 -672
  63. package/packages/@monomind/cli/.claude/agents/optimization/resource-allocator.md +0 -674
  64. package/packages/@monomind/cli/.claude/agents/optimization/topology-optimizer.md +0 -808
  65. package/packages/@monomind/cli/.claude/agents/schemas/architecture-output.json +0 -43
  66. package/packages/@monomind/cli/.claude/agents/schemas/code-review-output.json +0 -28
  67. package/packages/@monomind/cli/.claude/agents/schemas/generic-task-input.json +0 -12
  68. package/packages/@monomind/cli/.claude/agents/schemas/implementation-output.json +0 -18
  69. package/packages/@monomind/cli/.claude/agents/schemas/research-output.json +0 -31
  70. package/packages/@monomind/cli/.claude/agents/schemas/security-audit-output.json +0 -29
  71. package/packages/@monomind/cli/.claude/agents/schemas/test-report-output.json +0 -29
  72. package/packages/@monomind/cli/.claude/agents/specialists/integration-architect.md +0 -94
  73. package/packages/@monomind/cli/.claude/agents/specialized/agentic-identity-trust.md +0 -388
  74. package/packages/@monomind/cli/.claude/agents/specialized/agents-orchestrator.md +0 -368
  75. package/packages/@monomind/cli/.claude/agents/specialized/automation-governance-architect.md +0 -217
  76. package/packages/@monomind/cli/.claude/agents/specialized/blockchain-security-auditor.md +0 -497
  77. package/packages/@monomind/cli/.claude/agents/specialized/compliance-auditor.md +0 -159
  78. package/packages/@monomind/cli/.claude/agents/specialized/identity-graph-operator.md +0 -261
  79. package/packages/@monomind/cli/.claude/agents/specialized/lsp-index-engineer.md +0 -315
  80. package/packages/@monomind/cli/.claude/agents/specialized/mobile/spec-mobile-react-native.md +0 -89
  81. package/packages/@monomind/cli/.claude/agents/specialized/specialized-cultural-intelligence-strategist.md +0 -89
  82. package/packages/@monomind/cli/.claude/agents/specialized/specialized-developer-advocate.md +0 -318
  83. package/packages/@monomind/cli/.claude/agents/specialized/specialized-document-generator.md +0 -56
  84. package/packages/@monomind/cli/.claude/agents/specialized/specialized-mcp-builder.md +0 -64
  85. package/packages/@monomind/cli/.claude/agents/specialized/specialized-model-qa.md +0 -489
  86. package/packages/@monomind/cli/.claude/agents/specialized/specialized-workflow-architect.md +0 -595
  87. package/packages/@monomind/cli/.claude/agents/specialized/zk-steward.md +0 -212
  88. package/packages/@monomind/cli/.claude/agents/swarm/mesh-coordinator.md +0 -97
  89. package/packages/@monomind/cli/.claude/agents/templates/automation-smart-agent.md +0 -185
  90. package/packages/@monomind/cli/.claude/agents/templates/coordinator-swarm-init.md +0 -83
  91. package/packages/@monomind/cli/.claude/agents/testing/production-validator.md +0 -375
  92. package/packages/@monomind/cli/.claude/agents/testing/tdd-london-swarm.md +0 -241
  93. package/packages/@monomind/cli/.claude/agents/testing/testing-accessibility-auditor.md +0 -322
  94. package/packages/@monomind/cli/.claude/agents/testing/testing-api-tester.md +0 -307
  95. package/packages/@monomind/cli/.claude/agents/testing/testing-evidence-collector.md +0 -213
  96. package/packages/@monomind/cli/.claude/agents/testing/testing-performance-benchmarker.md +0 -269
  97. package/packages/@monomind/cli/.claude/agents/testing/testing-test-results-analyzer.md +0 -306
  98. package/packages/@monomind/cli/.claude/agents/testing/testing-tool-evaluator.md +0 -395
  99. package/packages/@monomind/cli/.claude/agents/testing/testing-workflow-optimizer.md +0 -451
  100. package/packages/@monomind/cli/.claude/commands/agents/README.md +0 -14
  101. package/packages/@monomind/cli/.claude/commands/agents/agent-capabilities.md +0 -25
  102. package/packages/@monomind/cli/.claude/commands/agents/agent-coordination.md +0 -32
  103. package/packages/@monomind/cli/.claude/commands/agents/agent-spawning.md +0 -32
  104. package/packages/@monomind/cli/.claude/commands/agents/agent-types.md +0 -30
  105. package/packages/@monomind/cli/.claude/commands/analysis/README.md +0 -18
  106. package/packages/@monomind/cli/.claude/commands/analysis/bottleneck-detect.md +0 -69
  107. package/packages/@monomind/cli/.claude/commands/analysis/performance-bottlenecks.md +0 -59
  108. package/packages/@monomind/cli/.claude/commands/analysis/performance-report.md +0 -52
  109. package/packages/@monomind/cli/.claude/commands/analysis/token-usage.md +0 -47
  110. package/packages/@monomind/cli/.claude/commands/automation/README.md +0 -19
  111. package/packages/@monomind/cli/.claude/commands/automation/auto-agent.md +0 -86
  112. package/packages/@monomind/cli/.claude/commands/automation/self-healing.md +0 -108
  113. package/packages/@monomind/cli/.claude/commands/automation/session-memory.md +0 -89
  114. package/packages/@monomind/cli/.claude/commands/automation/smart-agents.md +0 -81
  115. package/packages/@monomind/cli/.claude/commands/automation/smart-spawn.md +0 -66
  116. package/packages/@monomind/cli/.claude/commands/automation/workflow-select.md +0 -60
  117. package/packages/@monomind/cli/.claude/commands/coordination/README.md +0 -13
  118. package/packages/@monomind/cli/.claude/commands/coordination/agent-spawn.md +0 -69
  119. package/packages/@monomind/cli/.claude/commands/coordination/swarm-init.md +0 -82
  120. package/packages/@monomind/cli/.claude/commands/coordination/task-orchestrate.md +0 -79
  121. package/packages/@monomind/cli/.claude/commands/github/README.md +0 -24
  122. package/packages/@monomind/cli/.claude/commands/github/github-modes.md +0 -151
  123. package/packages/@monomind/cli/.claude/commands/github/issue-tracker.md +0 -291
  124. package/packages/@monomind/cli/.claude/commands/github/pr-manager.md +0 -171
  125. package/packages/@monomind/cli/.claude/commands/github/release-manager.md +0 -343
  126. package/packages/@monomind/cli/.claude/commands/github/repo-architect.md +0 -372
  127. package/packages/@monomind/cli/.claude/commands/github/sync-coordinator.md +0 -297
  128. package/packages/@monomind/cli/.claude/commands/hive-mind/README.md +0 -42
  129. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-consensus.md +0 -72
  130. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-init.md +0 -68
  131. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-memory.md +0 -73
  132. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-spawn.md +0 -82
  133. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-status.md +0 -56
  134. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-stop.md +0 -55
  135. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind.md +0 -87
  136. package/packages/@monomind/cli/.claude/commands/hooks/README.md +0 -66
  137. package/packages/@monomind/cli/.claude/commands/hooks/overview.md +0 -112
  138. package/packages/@monomind/cli/.claude/commands/hooks/post-edit.md +0 -78
  139. package/packages/@monomind/cli/.claude/commands/hooks/post-task.md +0 -62
  140. package/packages/@monomind/cli/.claude/commands/hooks/pre-edit.md +0 -81
  141. package/packages/@monomind/cli/.claude/commands/hooks/pre-task.md +0 -73
  142. package/packages/@monomind/cli/.claude/commands/hooks/session-end.md +0 -82
  143. package/packages/@monomind/cli/.claude/commands/hooks/setup.md +0 -132
  144. package/packages/@monomind/cli/.claude/commands/mastermind/_repeat.md +0 -492
  145. package/packages/@monomind/cli/.claude/commands/mastermind/_taskfile.md +0 -232
  146. package/packages/@monomind/cli/.claude/commands/mastermind/adr.md +0 -9
  147. package/packages/@monomind/cli/.claude/commands/mastermind/approvev1.md +0 -94
  148. package/packages/@monomind/cli/.claude/commands/mastermind/architect.md +0 -52
  149. package/packages/@monomind/cli/.claude/commands/mastermind/autodev.md +0 -28
  150. package/packages/@monomind/cli/.claude/commands/mastermind/brain.md +0 -99
  151. package/packages/@monomind/cli/.claude/commands/mastermind/budget.md +0 -5
  152. package/packages/@monomind/cli/.claude/commands/mastermind/build.md +0 -23
  153. package/packages/@monomind/cli/.claude/commands/mastermind/code-review.md +0 -314
  154. package/packages/@monomind/cli/.claude/commands/mastermind/content.md +0 -23
  155. package/packages/@monomind/cli/.claude/commands/mastermind/createorg.md +0 -143
  156. package/packages/@monomind/cli/.claude/commands/mastermind/createtask.md +0 -372
  157. package/packages/@monomind/cli/.claude/commands/mastermind/debug.md +0 -19
  158. package/packages/@monomind/cli/.claude/commands/mastermind/design.md +0 -17
  159. package/packages/@monomind/cli/.claude/commands/mastermind/do.md +0 -525
  160. package/packages/@monomind/cli/.claude/commands/mastermind/execute.md +0 -17
  161. package/packages/@monomind/cli/.claude/commands/mastermind/finance.md +0 -23
  162. package/packages/@monomind/cli/.claude/commands/mastermind/finish.md +0 -17
  163. package/packages/@monomind/cli/.claude/commands/mastermind/graph-status.md +0 -5
  164. package/packages/@monomind/cli/.claude/commands/mastermind/help.md +0 -133
  165. package/packages/@monomind/cli/.claude/commands/mastermind/idea.md +0 -23
  166. package/packages/@monomind/cli/.claude/commands/mastermind/ideate.md +0 -258
  167. package/packages/@monomind/cli/.claude/commands/mastermind/improve.md +0 -342
  168. package/packages/@monomind/cli/.claude/commands/mastermind/loops.md +0 -5
  169. package/packages/@monomind/cli/.claude/commands/mastermind/marketing.md +0 -23
  170. package/packages/@monomind/cli/.claude/commands/mastermind/master.md +0 -1140
  171. package/packages/@monomind/cli/.claude/commands/mastermind/memory.md +0 -227
  172. package/packages/@monomind/cli/.claude/commands/mastermind/okf-export.md +0 -14
  173. package/packages/@monomind/cli/.claude/commands/mastermind/okf-import.md +0 -15
  174. package/packages/@monomind/cli/.claude/commands/mastermind/ops.md +0 -23
  175. package/packages/@monomind/cli/.claude/commands/mastermind/orgs.md +0 -18
  176. package/packages/@monomind/cli/.claude/commands/mastermind/orgstatus.md +0 -56
  177. package/packages/@monomind/cli/.claude/commands/mastermind/plan.md +0 -23
  178. package/packages/@monomind/cli/.claude/commands/mastermind/receive-review.md +0 -17
  179. package/packages/@monomind/cli/.claude/commands/mastermind/references/antigravity-tools.md +0 -60
  180. package/packages/@monomind/cli/.claude/commands/mastermind/references/claude-code-tools.md +0 -50
  181. package/packages/@monomind/cli/.claude/commands/mastermind/references/codex-tools.md +0 -64
  182. package/packages/@monomind/cli/.claude/commands/mastermind/references/copilot-tools.md +0 -49
  183. package/packages/@monomind/cli/.claude/commands/mastermind/references/gemini-tools.md +0 -63
  184. package/packages/@monomind/cli/.claude/commands/mastermind/references/pi-tools.md +0 -28
  185. package/packages/@monomind/cli/.claude/commands/mastermind/release.md +0 -23
  186. package/packages/@monomind/cli/.claude/commands/mastermind/repeat.md +0 -254
  187. package/packages/@monomind/cli/.claude/commands/mastermind/research.md +0 -23
  188. package/packages/@monomind/cli/.claude/commands/mastermind/review.md +0 -34
  189. package/packages/@monomind/cli/.claude/commands/mastermind/runorg.md +0 -71
  190. package/packages/@monomind/cli/.claude/commands/mastermind/runorgv1.md +0 -159
  191. package/packages/@monomind/cli/.claude/commands/mastermind/sales.md +0 -23
  192. package/packages/@monomind/cli/.claude/commands/mastermind/skill-builder.md +0 -17
  193. package/packages/@monomind/cli/.claude/commands/mastermind/specialagents.md +0 -122
  194. package/packages/@monomind/cli/.claude/commands/mastermind/stoporg.md +0 -78
  195. package/packages/@monomind/cli/.claude/commands/mastermind/swarm.md +0 -158
  196. package/packages/@monomind/cli/.claude/commands/mastermind/taskdev.md +0 -23
  197. package/packages/@monomind/cli/.claude/commands/mastermind/tdd.md +0 -19
  198. package/packages/@monomind/cli/.claude/commands/mastermind/techport.md +0 -27
  199. package/packages/@monomind/cli/.claude/commands/mastermind/topology.md +0 -121
  200. package/packages/@monomind/cli/.claude/commands/mastermind/understand.md +0 -136
  201. package/packages/@monomind/cli/.claude/commands/mastermind/verify.md +0 -19
  202. package/packages/@monomind/cli/.claude/commands/mastermind/worktree.md +0 -17
  203. package/packages/@monomind/cli/.claude/commands/mastermind.md +0 -140
  204. package/packages/@monomind/cli/.claude/commands/memory/README.md +0 -79
  205. package/packages/@monomind/cli/.claude/commands/memory/memory-search.md +0 -77
  206. package/packages/@monomind/cli/.claude/commands/monitoring/README.md +0 -69
  207. package/packages/@monomind/cli/.claude/commands/monitoring/agent-metrics.md +0 -65
  208. package/packages/@monomind/cli/.claude/commands/monitoring/agents.md +0 -71
  209. package/packages/@monomind/cli/.claude/commands/monitoring/status.md +0 -108
  210. package/packages/@monomind/cli/.claude/commands/monobrowse.md +0 -21
  211. package/packages/@monomind/cli/.claude/commands/monoes/README.md +0 -30
  212. package/packages/@monomind/cli/.claude/commands/monoes/install.md +0 -163
  213. package/packages/@monomind/cli/.claude/commands/monoes/monoagent.md +0 -148
  214. package/packages/@monomind/cli/.claude/commands/monoes/monoclip.md +0 -64
  215. package/packages/@monomind/cli/.claude/commands/monoes/monotask.md +0 -137
  216. package/packages/@monomind/cli/.claude/commands/monograph/README.md +0 -102
  217. package/packages/@monomind/cli/.claude/commands/monograph/monograph-build.md +0 -79
  218. package/packages/@monomind/cli/.claude/commands/monograph/monograph-search.md +0 -96
  219. package/packages/@monomind/cli/.claude/commands/monograph/monograph-stats.md +0 -53
  220. package/packages/@monomind/cli/.claude/commands/monograph/monograph-watch.md +0 -63
  221. package/packages/@monomind/cli/.claude/commands/monograph/monograph-wiki.md +0 -91
  222. package/packages/@monomind/cli/.claude/commands/optimization/auto-topology.md +0 -85
  223. package/packages/@monomind/cli/.claude/commands/optimization/performance-optimize.md +0 -79
  224. package/packages/@monomind/cli/.claude/commands/pair/README.md +0 -79
  225. package/packages/@monomind/cli/.claude/commands/pair/examples.md +0 -156
  226. package/packages/@monomind/cli/.claude/commands/pair/modes.md +0 -122
  227. package/packages/@monomind/cli/.claude/commands/pair/session.md +0 -124
  228. package/packages/@monomind/cli/.claude/commands/stream-chain/pipeline.md +0 -116
  229. package/packages/@monomind/cli/.claude/commands/stream-chain/run.md +0 -156
  230. package/packages/@monomind/cli/.claude/commands/swarm/README.md +0 -40
  231. package/packages/@monomind/cli/.claude/commands/swarm/analysis.md +0 -73
  232. package/packages/@monomind/cli/.claude/commands/swarm/development.md +0 -72
  233. package/packages/@monomind/cli/.claude/commands/swarm/examples.md +0 -103
  234. package/packages/@monomind/cli/.claude/commands/swarm/maintenance.md +0 -75
  235. package/packages/@monomind/cli/.claude/commands/swarm/optimization.md +0 -84
  236. package/packages/@monomind/cli/.claude/commands/swarm/research.md +0 -76
  237. package/packages/@monomind/cli/.claude/commands/swarm/swarm.md +0 -79
  238. package/packages/@monomind/cli/.claude/commands/swarm/testing.md +0 -80
  239. package/packages/@monomind/cli/.claude/commands/tokens.md +0 -18
  240. package/packages/@monomind/cli/.claude/commands/truth/start.md +0 -121
  241. package/packages/@monomind/cli/.claude/commands/ts.md +0 -14
  242. package/packages/@monomind/cli/.claude/commands/workflows/README.md +0 -64
  243. package/packages/@monomind/cli/.claude/commands/workflows/development.md +0 -86
  244. package/packages/@monomind/cli/.claude/commands/workflows/research.md +0 -89
  245. package/packages/@monomind/cli/.claude/commands/workflows/workflow-create.md +0 -83
  246. package/packages/@monomind/cli/.claude/commands/workflows/workflow-execute.md +0 -101
  247. package/packages/@monomind/cli/.claude/commands/workflows/workflow-export.md +0 -88
  248. package/packages/@monomind/cli/.claude/helpers/build-skill-registry.cjs +0 -323
  249. package/packages/@monomind/cli/.claude/helpers/control-start.cjs +0 -327
  250. package/packages/@monomind/cli/.claude/helpers/control-stop.cjs +0 -95
  251. package/packages/@monomind/cli/.claude/helpers/event-logger.cjs +0 -266
  252. package/packages/@monomind/cli/.claude/helpers/graphify-freshen.cjs +0 -148
  253. package/packages/@monomind/cli/.claude/helpers/handlers/adr-draft-handler.cjs +0 -78
  254. package/packages/@monomind/cli/.claude/helpers/handlers/agent-start-handler.cjs +0 -132
  255. package/packages/@monomind/cli/.claude/helpers/handlers/budget-status-handler.cjs +0 -14
  256. package/packages/@monomind/cli/.claude/helpers/handlers/capture-handler.cjs +0 -736
  257. package/packages/@monomind/cli/.claude/helpers/handlers/compact-handler.cjs +0 -35
  258. package/packages/@monomind/cli/.claude/helpers/handlers/edit-handler.cjs +0 -178
  259. package/packages/@monomind/cli/.claude/helpers/handlers/gates-handler.cjs +0 -494
  260. package/packages/@monomind/cli/.claude/helpers/handlers/graph-status-handler.cjs +0 -45
  261. package/packages/@monomind/cli/.claude/helpers/handlers/loops-status-handler.cjs +0 -48
  262. package/packages/@monomind/cli/.claude/helpers/handlers/route-handler.cjs +0 -770
  263. package/packages/@monomind/cli/.claude/helpers/handlers/session-handler.cjs +0 -286
  264. package/packages/@monomind/cli/.claude/helpers/handlers/session-restore-handler.cjs +0 -573
  265. package/packages/@monomind/cli/.claude/helpers/handlers/stats-handler.cjs +0 -14
  266. package/packages/@monomind/cli/.claude/helpers/handlers/task-handler.cjs +0 -241
  267. package/packages/@monomind/cli/.claude/helpers/hook-handler.cjs +0 -951
  268. package/packages/@monomind/cli/.claude/helpers/intelligence.cjs +0 -510
  269. package/packages/@monomind/cli/.claude/helpers/learning-service.mjs +0 -61
  270. package/packages/@monomind/cli/.claude/helpers/loop-tracker.cjs +0 -119
  271. package/packages/@monomind/cli/.claude/helpers/mastermind-activate.cjs +0 -35
  272. package/packages/@monomind/cli/.claude/helpers/memory-palace.cjs +0 -461
  273. package/packages/@monomind/cli/.claude/helpers/memory.cjs +0 -193
  274. package/packages/@monomind/cli/.claude/helpers/metrics-db.mjs +0 -87
  275. package/packages/@monomind/cli/.claude/helpers/monolean-activate.cjs +0 -30
  276. package/packages/@monomind/cli/.claude/helpers/monolean-config.cjs +0 -76
  277. package/packages/@monomind/cli/.claude/helpers/monolean-instructions.cjs +0 -109
  278. package/packages/@monomind/cli/.claude/helpers/monolean-propagate.cjs +0 -13
  279. package/packages/@monomind/cli/.claude/helpers/monolean-tracker.cjs +0 -18
  280. package/packages/@monomind/cli/.claude/helpers/router.cjs +0 -571
  281. package/packages/@monomind/cli/.claude/helpers/session.cjs +0 -145
  282. package/packages/@monomind/cli/.claude/helpers/skill-registry.json +0 -4948
  283. package/packages/@monomind/cli/.claude/helpers/statusline.cjs +0 -1368
  284. package/packages/@monomind/cli/.claude/helpers/toggle-statusline.cjs +0 -73
  285. package/packages/@monomind/cli/.claude/helpers/token-tracker.cjs +0 -1034
  286. package/packages/@monomind/cli/.claude/helpers/utils/agent-registrations.cjs +0 -41
  287. package/packages/@monomind/cli/.claude/helpers/utils/fs-helpers.cjs +0 -183
  288. package/packages/@monomind/cli/.claude/helpers/utils/micro-agents.cjs +0 -358
  289. package/packages/@monomind/cli/.claude/helpers/utils/monograph.cjs +0 -707
  290. package/packages/@monomind/cli/.claude/helpers/utils/system-pressure.cjs +0 -46
  291. package/packages/@monomind/cli/.claude/helpers/utils/telemetry.cjs +0 -162
  292. package/packages/@monomind/cli/.claude/settings.json +0 -448
  293. package/packages/@monomind/cli/.claude/skills/agent-browser-testing/SKILL.md +0 -964
  294. package/packages/@monomind/cli/.claude/skills/agentic-jujutsu/SKILL.md +0 -645
  295. package/packages/@monomind/cli/.claude/skills/github-issue-triage/SKILL.md +0 -354
  296. package/packages/@monomind/cli/.claude/skills/github-repo-recap/SKILL.md +0 -207
  297. package/packages/@monomind/cli/.claude/skills/github-toolkit/SKILL.md +0 -60
  298. package/packages/@monomind/cli/.claude/skills/hive-mind-advanced/SKILL.md +0 -694
  299. package/packages/@monomind/cli/.claude/skills/hooks-automation/SKILL.md +0 -1192
  300. package/packages/@monomind/cli/.claude/skills/mastermind-access/SKILL.md +0 -236
  301. package/packages/@monomind/cli/.claude/skills/mastermind-activity/SKILL.md +0 -191
  302. package/packages/@monomind/cli/.claude/skills/mastermind-adapter-manager/SKILL.md +0 -259
  303. package/packages/@monomind/cli/.claude/skills/mastermind-adapters/SKILL.md +0 -204
  304. package/packages/@monomind/cli/.claude/skills/mastermind-agent-detail/SKILL.md +0 -242
  305. package/packages/@monomind/cli/.claude/skills/mastermind-agent-select/SKILL.md +0 -132
  306. package/packages/@monomind/cli/.claude/skills/mastermind-agents/SKILL.md +0 -182
  307. package/packages/@monomind/cli/.claude/skills/mastermind-approval-detail/SKILL.md +0 -259
  308. package/packages/@monomind/cli/.claude/skills/mastermind-approvev1/SKILL.md +0 -191
  309. package/packages/@monomind/cli/.claude/skills/mastermind-architect/SKILL.md +0 -862
  310. package/packages/@monomind/cli/.claude/skills/mastermind-autodev/SKILL.md +0 -360
  311. package/packages/@monomind/cli/.claude/skills/mastermind-backup/SKILL.md +0 -197
  312. package/packages/@monomind/cli/.claude/skills/mastermind-bootstrap/SKILL.md +0 -190
  313. package/packages/@monomind/cli/.claude/skills/mastermind-budgets/SKILL.md +0 -237
  314. package/packages/@monomind/cli/.claude/skills/mastermind-build/SKILL.md +0 -169
  315. package/packages/@monomind/cli/.claude/skills/mastermind-companies/SKILL.md +0 -256
  316. package/packages/@monomind/cli/.claude/skills/mastermind-content/SKILL.md +0 -197
  317. package/packages/@monomind/cli/.claude/skills/mastermind-costs/SKILL.md +0 -151
  318. package/packages/@monomind/cli/.claude/skills/mastermind-createorg/SKILL.md +0 -247
  319. package/packages/@monomind/cli/.claude/skills/mastermind-debug/SKILL.md +0 -277
  320. package/packages/@monomind/cli/.claude/skills/mastermind-delegation/SKILL.md +0 -83
  321. package/packages/@monomind/cli/.claude/skills/mastermind-design/SKILL.md +0 -190
  322. package/packages/@monomind/cli/.claude/skills/mastermind-diagnose/SKILL.md +0 -249
  323. package/packages/@monomind/cli/.claude/skills/mastermind-env/SKILL.md +0 -203
  324. package/packages/@monomind/cli/.claude/skills/mastermind-environments/SKILL.md +0 -250
  325. package/packages/@monomind/cli/.claude/skills/mastermind-execute/SKILL.md +0 -104
  326. package/packages/@monomind/cli/.claude/skills/mastermind-export/SKILL.md +0 -333
  327. package/packages/@monomind/cli/.claude/skills/mastermind-finance/SKILL.md +0 -166
  328. package/packages/@monomind/cli/.claude/skills/mastermind-finish/SKILL.md +0 -251
  329. package/packages/@monomind/cli/.claude/skills/mastermind-goal-detail/SKILL.md +0 -255
  330. package/packages/@monomind/cli/.claude/skills/mastermind-goals/SKILL.md +0 -149
  331. package/packages/@monomind/cli/.claude/skills/mastermind-heartbeatv1/SKILL.md +0 -167
  332. package/packages/@monomind/cli/.claude/skills/mastermind-idea/SKILL.md +0 -1142
  333. package/packages/@monomind/cli/.claude/skills/mastermind-import/SKILL.md +0 -281
  334. package/packages/@monomind/cli/.claude/skills/mastermind-inbox/SKILL.md +0 -226
  335. package/packages/@monomind/cli/.claude/skills/mastermind-instance/SKILL.md +0 -235
  336. package/packages/@monomind/cli/.claude/skills/mastermind-instance-settings/SKILL.md +0 -315
  337. package/packages/@monomind/cli/.claude/skills/mastermind-intake/SKILL.md +0 -83
  338. package/packages/@monomind/cli/.claude/skills/mastermind-invite-landing/SKILL.md +0 -227
  339. package/packages/@monomind/cli/.claude/skills/mastermind-invites/SKILL.md +0 -254
  340. package/packages/@monomind/cli/.claude/skills/mastermind-issue-detail/SKILL.md +0 -291
  341. package/packages/@monomind/cli/.claude/skills/mastermind-issues/SKILL.md +0 -235
  342. package/packages/@monomind/cli/.claude/skills/mastermind-join-queue/SKILL.md +0 -170
  343. package/packages/@monomind/cli/.claude/skills/mastermind-liveness/SKILL.md +0 -392
  344. package/packages/@monomind/cli/.claude/skills/mastermind-marketing/SKILL.md +0 -228
  345. package/packages/@monomind/cli/.claude/skills/mastermind-marketing/references/copywriting-frameworks.md +0 -181
  346. package/packages/@monomind/cli/.claude/skills/mastermind-marketing/references/persuasion-psychology.md +0 -158
  347. package/packages/@monomind/cli/.claude/skills/mastermind-memory/SKILL.md +0 -321
  348. package/packages/@monomind/cli/.claude/skills/mastermind-monitor/SKILL.md +0 -1284
  349. package/packages/@monomind/cli/.claude/skills/mastermind-monotask/SKILL.md +0 -350
  350. package/packages/@monomind/cli/.claude/skills/mastermind-my-issues/SKILL.md +0 -146
  351. package/packages/@monomind/cli/.claude/skills/mastermind-new-agent/SKILL.md +0 -241
  352. package/packages/@monomind/cli/.claude/skills/mastermind-ops/SKILL.md +0 -168
  353. package/packages/@monomind/cli/.claude/skills/mastermind-org-chart/SKILL.md +0 -209
  354. package/packages/@monomind/cli/.claude/skills/mastermind-org-settings/SKILL.md +0 -274
  355. package/packages/@monomind/cli/.claude/skills/mastermind-orgs/SKILL.md +0 -120
  356. package/packages/@monomind/cli/.claude/skills/mastermind-orgstatus/SKILL.md +0 -254
  357. package/packages/@monomind/cli/.claude/skills/mastermind-plan/SKILL.md +0 -217
  358. package/packages/@monomind/cli/.claude/skills/mastermind-plan-to-tasks/SKILL.md +0 -136
  359. package/packages/@monomind/cli/.claude/skills/mastermind-plugin-manager/SKILL.md +0 -241
  360. package/packages/@monomind/cli/.claude/skills/mastermind-plugin-settings/SKILL.md +0 -273
  361. package/packages/@monomind/cli/.claude/skills/mastermind-plugins/SKILL.md +0 -190
  362. package/packages/@monomind/cli/.claude/skills/mastermind-profile/SKILL.md +0 -187
  363. package/packages/@monomind/cli/.claude/skills/mastermind-project-detail/SKILL.md +0 -249
  364. package/packages/@monomind/cli/.claude/skills/mastermind-project-workspace/SKILL.md +0 -244
  365. package/packages/@monomind/cli/.claude/skills/mastermind-projects/SKILL.md +0 -167
  366. package/packages/@monomind/cli/.claude/skills/mastermind-protocol/SKILL.md +0 -404
  367. package/packages/@monomind/cli/.claude/skills/mastermind-receive-review/SKILL.md +0 -213
  368. package/packages/@monomind/cli/.claude/skills/mastermind-release/SKILL.md +0 -168
  369. package/packages/@monomind/cli/.claude/skills/mastermind-repeat/SKILL.md +0 -171
  370. package/packages/@monomind/cli/.claude/skills/mastermind-research/SKILL.md +0 -168
  371. package/packages/@monomind/cli/.claude/skills/mastermind-review/SKILL.md +0 -233
  372. package/packages/@monomind/cli/.claude/skills/mastermind-routine-detail/SKILL.md +0 -253
  373. package/packages/@monomind/cli/.claude/skills/mastermind-routines/SKILL.md +0 -203
  374. package/packages/@monomind/cli/.claude/skills/mastermind-runorg/SKILL.md +0 -43
  375. package/packages/@monomind/cli/.claude/skills/mastermind-runorgv1/SKILL.md +0 -731
  376. package/packages/@monomind/cli/.claude/skills/mastermind-sales/SKILL.md +0 -170
  377. package/packages/@monomind/cli/.claude/skills/mastermind-search/SKILL.md +0 -186
  378. package/packages/@monomind/cli/.claude/skills/mastermind-secrets/SKILL.md +0 -199
  379. package/packages/@monomind/cli/.claude/skills/mastermind-skill-builder/SKILL.md +0 -447
  380. package/packages/@monomind/cli/.claude/skills/mastermind-skills/SKILL.md +0 -156
  381. package/packages/@monomind/cli/.claude/skills/mastermind-stoporg/SKILL.md +0 -147
  382. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/SKILL.md +0 -377
  383. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/code-quality-reviewer-prompt.md +0 -60
  384. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/final-reviewer-prompt.md +0 -144
  385. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/implementer-prompt.md +0 -114
  386. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/spec-reviewer-prompt.md +0 -80
  387. package/packages/@monomind/cli/.claude/skills/mastermind-tasks/SKILL.md +0 -152
  388. package/packages/@monomind/cli/.claude/skills/mastermind-tdd/SKILL.md +0 -424
  389. package/packages/@monomind/cli/.claude/skills/mastermind-techport/SKILL.md +0 -777
  390. package/packages/@monomind/cli/.claude/skills/mastermind-threads/SKILL.md +0 -259
  391. package/packages/@monomind/cli/.claude/skills/mastermind-tree-control/SKILL.md +0 -250
  392. package/packages/@monomind/cli/.claude/skills/mastermind-verify/SKILL.md +0 -196
  393. package/packages/@monomind/cli/.claude/skills/mastermind-wiki/SKILL.md +0 -314
  394. package/packages/@monomind/cli/.claude/skills/mastermind-workspace-detail/SKILL.md +0 -317
  395. package/packages/@monomind/cli/.claude/skills/mastermind-workspaces/SKILL.md +0 -261
  396. package/packages/@monomind/cli/.claude/skills/mastermind-worktree/SKILL.md +0 -215
  397. package/packages/@monomind/cli/.claude/skills/memory-toolkit/SKILL.md +0 -75
  398. package/packages/@monomind/cli/.claude/skills/monodesign/SKILL.md +0 -257
  399. package/packages/@monomind/cli/.claude/skills/monodesign/adapt.md +0 -53
  400. package/packages/@monomind/cli/.claude/skills/monodesign/agents/monodesign-asset-producer.md +0 -100
  401. package/packages/@monomind/cli/.claude/skills/monodesign/agents/monodesign-manual-edit-applier.md +0 -103
  402. package/packages/@monomind/cli/.claude/skills/monodesign/animate.md +0 -65
  403. package/packages/@monomind/cli/.claude/skills/monodesign/audit.md +0 -89
  404. package/packages/@monomind/cli/.claude/skills/monodesign/bolder.md +0 -50
  405. package/packages/@monomind/cli/.claude/skills/monodesign/clarify.md +0 -64
  406. package/packages/@monomind/cli/.claude/skills/monodesign/colorize.md +0 -68
  407. package/packages/@monomind/cli/.claude/skills/monodesign/craft.md +0 -51
  408. package/packages/@monomind/cli/.claude/skills/monodesign/critique.md +0 -66
  409. package/packages/@monomind/cli/.claude/skills/monodesign/delight.md +0 -47
  410. package/packages/@monomind/cli/.claude/skills/monodesign/distill.md +0 -56
  411. package/packages/@monomind/cli/.claude/skills/monodesign/document.md +0 -83
  412. package/packages/@monomind/cli/.claude/skills/monodesign/extract.md +0 -74
  413. package/packages/@monomind/cli/.claude/skills/monodesign/harden.md +0 -65
  414. package/packages/@monomind/cli/.claude/skills/monodesign/init.md +0 -30
  415. package/packages/@monomind/cli/.claude/skills/monodesign/layout.md +0 -36
  416. package/packages/@monomind/cli/.claude/skills/monodesign/live.md +0 -34
  417. package/packages/@monomind/cli/.claude/skills/monodesign/onboard.md +0 -50
  418. package/packages/@monomind/cli/.claude/skills/monodesign/optimize.md +0 -64
  419. package/packages/@monomind/cli/.claude/skills/monodesign/overdrive.md +0 -56
  420. package/packages/@monomind/cli/.claude/skills/monodesign/polish.md +0 -68
  421. package/packages/@monomind/cli/.claude/skills/monodesign/quieter.md +0 -57
  422. package/packages/@monomind/cli/.claude/skills/monodesign/reference/adapt.md +0 -312
  423. package/packages/@monomind/cli/.claude/skills/monodesign/reference/adapt.native.md +0 -58
  424. package/packages/@monomind/cli/.claude/skills/monodesign/reference/android.md +0 -40
  425. package/packages/@monomind/cli/.claude/skills/monodesign/reference/animate.md +0 -203
  426. package/packages/@monomind/cli/.claude/skills/monodesign/reference/antipatterns-catalog.md +0 -410
  427. package/packages/@monomind/cli/.claude/skills/monodesign/reference/audit.md +0 -135
  428. package/packages/@monomind/cli/.claude/skills/monodesign/reference/audit.native.md +0 -139
  429. package/packages/@monomind/cli/.claude/skills/monodesign/reference/bolder.md +0 -120
  430. package/packages/@monomind/cli/.claude/skills/monodesign/reference/brand-workflow.md +0 -180
  431. package/packages/@monomind/cli/.claude/skills/monodesign/reference/brand.md +0 -108
  432. package/packages/@monomind/cli/.claude/skills/monodesign/reference/clarify.md +0 -288
  433. package/packages/@monomind/cli/.claude/skills/monodesign/reference/codex.md +0 -105
  434. package/packages/@monomind/cli/.claude/skills/monodesign/reference/cognitive-load.md +0 -106
  435. package/packages/@monomind/cli/.claude/skills/monodesign/reference/color-and-contrast.md +0 -105
  436. package/packages/@monomind/cli/.claude/skills/monodesign/reference/colorize.md +0 -257
  437. package/packages/@monomind/cli/.claude/skills/monodesign/reference/component-specs.md +0 -260
  438. package/packages/@monomind/cli/.claude/skills/monodesign/reference/component-states.md +0 -274
  439. package/packages/@monomind/cli/.claude/skills/monodesign/reference/component-system.md +0 -358
  440. package/packages/@monomind/cli/.claude/skills/monodesign/reference/copy-formulas.md +0 -160
  441. package/packages/@monomind/cli/.claude/skills/monodesign/reference/craft.md +0 -123
  442. package/packages/@monomind/cli/.claude/skills/monodesign/reference/critique.md +0 -780
  443. package/packages/@monomind/cli/.claude/skills/monodesign/reference/delight.md +0 -302
  444. package/packages/@monomind/cli/.claude/skills/monodesign/reference/design-principles.md +0 -246
  445. package/packages/@monomind/cli/.claude/skills/monodesign/reference/distill.md +0 -111
  446. package/packages/@monomind/cli/.claude/skills/monodesign/reference/document.md +0 -429
  447. package/packages/@monomind/cli/.claude/skills/monodesign/reference/extract.md +0 -69
  448. package/packages/@monomind/cli/.claude/skills/monodesign/reference/harden.md +0 -347
  449. package/packages/@monomind/cli/.claude/skills/monodesign/reference/heuristics-scoring.md +0 -234
  450. package/packages/@monomind/cli/.claude/skills/monodesign/reference/hooks.md +0 -92
  451. package/packages/@monomind/cli/.claude/skills/monodesign/reference/image-prompts.md +0 -130
  452. package/packages/@monomind/cli/.claude/skills/monodesign/reference/init.md +0 -221
  453. package/packages/@monomind/cli/.claude/skills/monodesign/reference/interaction-design.md +0 -189
  454. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ios.md +0 -45
  455. package/packages/@monomind/cli/.claude/skills/monodesign/reference/layout.md +0 -185
  456. package/packages/@monomind/cli/.claude/skills/monodesign/reference/live.md +0 -710
  457. package/packages/@monomind/cli/.claude/skills/monodesign/reference/motion-design.md +0 -109
  458. package/packages/@monomind/cli/.claude/skills/monodesign/reference/onboard.md +0 -234
  459. package/packages/@monomind/cli/.claude/skills/monodesign/reference/optimize.md +0 -258
  460. package/packages/@monomind/cli/.claude/skills/monodesign/reference/overdrive.md +0 -130
  461. package/packages/@monomind/cli/.claude/skills/monodesign/reference/personas.md +0 -179
  462. package/packages/@monomind/cli/.claude/skills/monodesign/reference/polish.md +0 -241
  463. package/packages/@monomind/cli/.claude/skills/monodesign/reference/pre-delivery-checklist.md +0 -108
  464. package/packages/@monomind/cli/.claude/skills/monodesign/reference/product.md +0 -60
  465. package/packages/@monomind/cli/.claude/skills/monodesign/reference/quieter.md +0 -99
  466. package/packages/@monomind/cli/.claude/skills/monodesign/reference/responsive-design.md +0 -114
  467. package/packages/@monomind/cli/.claude/skills/monodesign/reference/shape.md +0 -165
  468. package/packages/@monomind/cli/.claude/skills/monodesign/reference/spatial-design.md +0 -100
  469. package/packages/@monomind/cli/.claude/skills/monodesign/reference/teach.md +0 -10
  470. package/packages/@monomind/cli/.claude/skills/monodesign/reference/token-architecture.md +0 -222
  471. package/packages/@monomind/cli/.claude/skills/monodesign/reference/typeset.md +0 -301
  472. package/packages/@monomind/cli/.claude/skills/monodesign/reference/typography.md +0 -159
  473. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ux-research.md +0 -143
  474. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ux-rules.md +0 -211
  475. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ux-writing.md +0 -107
  476. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/command-metadata.json +0 -94
  477. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/context-signals.mjs +0 -260
  478. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/context.mjs +0 -1065
  479. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/critique-storage.mjs +0 -416
  480. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detect-csp.mjs +0 -198
  481. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detect.mjs +0 -33
  482. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/browser/injected/index.mjs +0 -1962
  483. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/cli/main.mjs +0 -321
  484. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/design-system.mjs +0 -814
  485. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/detect-antipatterns-browser.js +0 -5608
  486. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/detect-antipatterns.mjs +0 -50
  487. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/browser/detect-url.mjs +0 -259
  488. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/browser/drivers.mjs +0 -258
  489. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/regex/detect-text.mjs +0 -636
  490. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/static-html/css-cascade.mjs +0 -1015
  491. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/static-html/detect-html.mjs +0 -253
  492. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/visual/screenshot-contrast.mjs +0 -198
  493. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/findings.mjs +0 -12
  494. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/fix/css-regions.mjs +0 -181
  495. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/fix/fixers.mjs +0 -373
  496. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/fix/index.mjs +0 -426
  497. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/node/file-system.mjs +0 -198
  498. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/profile/profiler.mjs +0 -166
  499. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/registry/antipatterns.mjs +0 -563
  500. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/rules/checks.mjs +0 -3002
  501. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/color.mjs +0 -124
  502. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/constants.mjs +0 -101
  503. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/fonts.mjs +0 -30
  504. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/inline-ignores.mjs +0 -148
  505. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/page.mjs +0 -7
  506. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-admin.mjs +0 -661
  507. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-before-edit.mjs +0 -516
  508. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-lib.mjs +0 -1776
  509. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook.mjs +0 -61
  510. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/design-parser.mjs +0 -842
  511. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/is-generated.mjs +0 -69
  512. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/monodesign-config.mjs +0 -640
  513. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/monodesign-paths.mjs +0 -129
  514. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/provider.mjs +0 -4
  515. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/target-args.mjs +0 -42
  516. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/browser-script-parts.mjs +0 -50
  517. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/completion.mjs +0 -19
  518. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/event-validation.mjs +0 -137
  519. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/insert-ui.mjs +0 -458
  520. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-apply.mjs +0 -939
  521. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-edit-routes.mjs +0 -357
  522. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-edits-buffer.mjs +0 -152
  523. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/session-store.mjs +0 -293
  524. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/svelte-component.mjs +0 -826
  525. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/sveltekit-adapter.mjs +0 -274
  526. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/ui-core.mjs +0 -180
  527. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/vocabulary.mjs +0 -36
  528. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-accept.mjs +0 -812
  529. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser-dom.js +0 -146
  530. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser-session.js +0 -123
  531. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser.js +0 -11240
  532. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-commit-manual-edits.mjs +0 -1241
  533. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-complete.mjs +0 -75
  534. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-copy-edit-agent.mjs +0 -683
  535. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-discard-manual-edits.mjs +0 -51
  536. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-inject.mjs +0 -583
  537. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-insert.mjs +0 -272
  538. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-manual-edit-evidence.mjs +0 -363
  539. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-poll.mjs +0 -384
  540. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-resume.mjs +0 -94
  541. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-server.mjs +0 -1174
  542. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-status.mjs +0 -61
  543. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-target.mjs +0 -30
  544. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-wrap.mjs +0 -894
  545. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live.mjs +0 -297
  546. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/modern-screenshot.umd.js +0 -14
  547. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/palette.mjs +0 -633
  548. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/pin.mjs +0 -221
  549. package/packages/@monomind/cli/.claude/skills/monodesign/shape.md +0 -71
  550. package/packages/@monomind/cli/.claude/skills/monodesign/teach.md +0 -18
  551. package/packages/@monomind/cli/.claude/skills/monodesign/typeset.md +0 -59
  552. package/packages/@monomind/cli/.claude/skills/monolean/SKILL.md +0 -118
  553. package/packages/@monomind/cli/.claude/skills/monolean-audit/SKILL.md +0 -41
  554. package/packages/@monomind/cli/.claude/skills/monolean-debt/SKILL.md +0 -46
  555. package/packages/@monomind/cli/.claude/skills/monolean-help/SKILL.md +0 -60
  556. package/packages/@monomind/cli/.claude/skills/monolean-review/SKILL.md +0 -57
  557. package/packages/@monomind/cli/.claude/skills/monomind/browse-agentcore.md +0 -115
  558. package/packages/@monomind/cli/.claude/skills/monomind/browse-electron.md +0 -188
  559. package/packages/@monomind/cli/.claude/skills/monomind/browse-qa.md +0 -228
  560. package/packages/@monomind/cli/.claude/skills/monomind/browse-references/authentication.md +0 -161
  561. package/packages/@monomind/cli/.claude/skills/monomind/browse-references/trust-boundaries.md +0 -40
  562. package/packages/@monomind/cli/.claude/skills/monomind/browse-references/video-recording.md +0 -83
  563. package/packages/@monomind/cli/.claude/skills/monomind/browse-slack.md +0 -188
  564. package/packages/@monomind/cli/.claude/skills/monomind/browse-vercel.md +0 -239
  565. package/packages/@monomind/cli/.claude/skills/monomind/browse.md +0 -724
  566. package/packages/@monomind/cli/.claude/skills/monomotion/SKILL.md +0 -145
  567. package/packages/@monomind/cli/.claude/skills/monomotion/rules/api-control.md +0 -139
  568. package/packages/@monomind/cli/.claude/skills/monomotion/rules/effects.md +0 -109
  569. package/packages/@monomind/cli/.claude/skills/monomotion/rules/integration.md +0 -140
  570. package/packages/@monomind/cli/.claude/skills/monomotion/rules/scroll.md +0 -131
  571. package/packages/@monomind/cli/.claude/skills/monomotion/rules/sequencing.md +0 -105
  572. package/packages/@monomind/cli/.claude/skills/monomotion/rules/svg.md +0 -101
  573. package/packages/@monomind/cli/.claude/skills/monomotion/rules/text.md +0 -119
  574. package/packages/@monomind/cli/.claude/skills/pair-programming/SKILL.md +0 -1202
  575. package/packages/@monomind/cli/.claude/skills/performance-analysis/SKILL.md +0 -560
  576. package/packages/@monomind/cli/.claude/skills/skill-builder/SKILL.md +0 -910
  577. package/packages/@monomind/cli/.claude/skills/specialagent/SKILL.md +0 -206
  578. package/packages/@monomind/cli/.claude/skills/stop-slop/SKILL.md +0 -67
  579. package/packages/@monomind/cli/.claude/skills/stop-slop/references/examples.md +0 -61
  580. package/packages/@monomind/cli/.claude/skills/stop-slop/references/phrases.md +0 -130
  581. package/packages/@monomind/cli/.claude/skills/stop-slop/references/structures.md +0 -136
  582. package/packages/@monomind/cli/.claude/skills/swarm-advanced/SKILL.md +0 -936
  583. package/packages/@monomind/cli/.claude/skills/swarm-orchestration/SKILL.md +0 -179
  584. package/packages/@monomind/cli/.claude/skills/verification-quality/SKILL.md +0 -674
  585. package/packages/@monomind/cli/README.md +0 -414
  586. package/packages/@monomind/cli/bin/cli.js +0 -379
  587. package/packages/@monomind/cli/bin/mcp-server.js +0 -208
  588. package/packages/@monomind/cli/bin/preinstall.cjs +0 -2
  589. package/packages/@monomind/cli/dist/src/agents/registry-builder.d.ts +0 -64
  590. package/packages/@monomind/cli/dist/src/agents/registry-builder.js +0 -228
  591. package/packages/@monomind/cli/dist/src/autopilot-state.d.ts +0 -77
  592. package/packages/@monomind/cli/dist/src/autopilot-state.js +0 -336
  593. package/packages/@monomind/cli/dist/src/browser/action-builder/analyzer.d.ts +0 -11
  594. package/packages/@monomind/cli/dist/src/browser/action-builder/analyzer.js +0 -64
  595. package/packages/@monomind/cli/dist/src/browser/action-builder/types.d.ts +0 -47
  596. package/packages/@monomind/cli/dist/src/browser/action-builder/types.js +0 -2
  597. package/packages/@monomind/cli/dist/src/browser/adapters/gemini.d.ts +0 -3
  598. package/packages/@monomind/cli/dist/src/browser/adapters/gemini.js +0 -16
  599. package/packages/@monomind/cli/dist/src/browser/adapters/index.d.ts +0 -19
  600. package/packages/@monomind/cli/dist/src/browser/adapters/index.js +0 -23
  601. package/packages/@monomind/cli/dist/src/browser/adapters/instagram.d.ts +0 -3
  602. package/packages/@monomind/cli/dist/src/browser/adapters/instagram.js +0 -17
  603. package/packages/@monomind/cli/dist/src/browser/adapters/linkedin.d.ts +0 -3
  604. package/packages/@monomind/cli/dist/src/browser/adapters/linkedin.js +0 -19
  605. package/packages/@monomind/cli/dist/src/browser/adapters/x.d.ts +0 -3
  606. package/packages/@monomind/cli/dist/src/browser/adapters/x.js +0 -19
  607. package/packages/@monomind/cli/dist/src/browser/dashboard/server.d.ts +0 -9
  608. package/packages/@monomind/cli/dist/src/browser/dashboard/server.js +0 -215
  609. package/packages/@monomind/cli/dist/src/browser/dashboard/ui.html +0 -261
  610. package/packages/@monomind/cli/dist/src/browser/workflow/engine.d.ts +0 -15
  611. package/packages/@monomind/cli/dist/src/browser/workflow/engine.js +0 -127
  612. package/packages/@monomind/cli/dist/src/browser/workflow/expression.d.ts +0 -4
  613. package/packages/@monomind/cli/dist/src/browser/workflow/expression.js +0 -64
  614. package/packages/@monomind/cli/dist/src/browser/workflow/store.d.ts +0 -24
  615. package/packages/@monomind/cli/dist/src/browser/workflow/store.js +0 -145
  616. package/packages/@monomind/cli/dist/src/browser/workflow/types.d.ts +0 -48
  617. package/packages/@monomind/cli/dist/src/browser/workflow/types.js +0 -2
  618. package/packages/@monomind/cli/dist/src/capabilities/cap-code.d.ts +0 -3
  619. package/packages/@monomind/cli/dist/src/capabilities/cap-code.js +0 -20
  620. package/packages/@monomind/cli/dist/src/capabilities/cap-data.d.ts +0 -3
  621. package/packages/@monomind/cli/dist/src/capabilities/cap-data.js +0 -165
  622. package/packages/@monomind/cli/dist/src/capabilities/cap-documents.d.ts +0 -5
  623. package/packages/@monomind/cli/dist/src/capabilities/cap-documents.js +0 -139
  624. package/packages/@monomind/cli/dist/src/capabilities/cap-graph.d.ts +0 -3
  625. package/packages/@monomind/cli/dist/src/capabilities/cap-graph.js +0 -84
  626. package/packages/@monomind/cli/dist/src/capabilities/cap-media.d.ts +0 -3
  627. package/packages/@monomind/cli/dist/src/capabilities/cap-media.js +0 -147
  628. package/packages/@monomind/cli/dist/src/capabilities/cap-timeline.d.ts +0 -3
  629. package/packages/@monomind/cli/dist/src/capabilities/cap-timeline.js +0 -90
  630. package/packages/@monomind/cli/dist/src/capabilities/index.d.ts +0 -10
  631. package/packages/@monomind/cli/dist/src/capabilities/index.js +0 -18
  632. package/packages/@monomind/cli/dist/src/capabilities/manager.d.ts +0 -13
  633. package/packages/@monomind/cli/dist/src/capabilities/manager.js +0 -79
  634. package/packages/@monomind/cli/dist/src/capabilities/scanner.d.ts +0 -10
  635. package/packages/@monomind/cli/dist/src/capabilities/scanner.js +0 -125
  636. package/packages/@monomind/cli/dist/src/capabilities/types.d.ts +0 -64
  637. package/packages/@monomind/cli/dist/src/capabilities/types.js +0 -2
  638. package/packages/@monomind/cli/dist/src/commands/agent-lifecycle.d.ts +0 -17
  639. package/packages/@monomind/cli/dist/src/commands/agent-lifecycle.js +0 -346
  640. package/packages/@monomind/cli/dist/src/commands/agent-ops.d.ts +0 -8
  641. package/packages/@monomind/cli/dist/src/commands/agent-ops.js +0 -277
  642. package/packages/@monomind/cli/dist/src/commands/agent.d.ts +0 -8
  643. package/packages/@monomind/cli/dist/src/commands/agent.js +0 -40
  644. package/packages/@monomind/cli/dist/src/commands/analyze-ast.d.ts +0 -26
  645. package/packages/@monomind/cli/dist/src/commands/analyze-ast.js +0 -284
  646. package/packages/@monomind/cli/dist/src/commands/analyze-diff.d.ts +0 -8
  647. package/packages/@monomind/cli/dist/src/commands/analyze-diff.js +0 -395
  648. package/packages/@monomind/cli/dist/src/commands/analyze-imports.d.ts +0 -11
  649. package/packages/@monomind/cli/dist/src/commands/analyze-imports.js +0 -287
  650. package/packages/@monomind/cli/dist/src/commands/analyze-symbols.d.ts +0 -14
  651. package/packages/@monomind/cli/dist/src/commands/analyze-symbols.js +0 -302
  652. package/packages/@monomind/cli/dist/src/commands/analyze.d.ts +0 -53
  653. package/packages/@monomind/cli/dist/src/commands/analyze.js +0 -217
  654. package/packages/@monomind/cli/dist/src/commands/autopilot.d.ts +0 -15
  655. package/packages/@monomind/cli/dist/src/commands/autopilot.js +0 -370
  656. package/packages/@monomind/cli/dist/src/commands/browse-action.d.ts +0 -4
  657. package/packages/@monomind/cli/dist/src/commands/browse-action.js +0 -244
  658. package/packages/@monomind/cli/dist/src/commands/browse-platform.d.ts +0 -4
  659. package/packages/@monomind/cli/dist/src/commands/browse-platform.js +0 -117
  660. package/packages/@monomind/cli/dist/src/commands/browse-workflow.d.ts +0 -4
  661. package/packages/@monomind/cli/dist/src/commands/browse-workflow.js +0 -183
  662. package/packages/@monomind/cli/dist/src/commands/browse.d.ts +0 -12
  663. package/packages/@monomind/cli/dist/src/commands/browse.js +0 -17
  664. package/packages/@monomind/cli/dist/src/commands/cleanup.d.ts +0 -45
  665. package/packages/@monomind/cli/dist/src/commands/cleanup.js +0 -581
  666. package/packages/@monomind/cli/dist/src/commands/completions.d.ts +0 -10
  667. package/packages/@monomind/cli/dist/src/commands/completions.js +0 -261
  668. package/packages/@monomind/cli/dist/src/commands/config.d.ts +0 -8
  669. package/packages/@monomind/cli/dist/src/commands/config.js +0 -462
  670. package/packages/@monomind/cli/dist/src/commands/crash-reporting.d.ts +0 -8
  671. package/packages/@monomind/cli/dist/src/commands/crash-reporting.js +0 -50
  672. package/packages/@monomind/cli/dist/src/commands/design-detect.d.ts +0 -27
  673. package/packages/@monomind/cli/dist/src/commands/design-detect.js +0 -220
  674. package/packages/@monomind/cli/dist/src/commands/design-palette.d.ts +0 -21
  675. package/packages/@monomind/cli/dist/src/commands/design-palette.js +0 -538
  676. package/packages/@monomind/cli/dist/src/commands/doc.d.ts +0 -7
  677. package/packages/@monomind/cli/dist/src/commands/doc.js +0 -268
  678. package/packages/@monomind/cli/dist/src/commands/doctor-env-checks.d.ts +0 -26
  679. package/packages/@monomind/cli/dist/src/commands/doctor-env-checks.js +0 -194
  680. package/packages/@monomind/cli/dist/src/commands/doctor-monoes-checks.d.ts +0 -12
  681. package/packages/@monomind/cli/dist/src/commands/doctor-monoes-checks.js +0 -160
  682. package/packages/@monomind/cli/dist/src/commands/doctor-project-checks.d.ts +0 -46
  683. package/packages/@monomind/cli/dist/src/commands/doctor-project-checks.js +0 -764
  684. package/packages/@monomind/cli/dist/src/commands/doctor.d.ts +0 -10
  685. package/packages/@monomind/cli/dist/src/commands/doctor.js +0 -232
  686. package/packages/@monomind/cli/dist/src/commands/guidance.d.ts +0 -12
  687. package/packages/@monomind/cli/dist/src/commands/guidance.js +0 -163
  688. package/packages/@monomind/cli/dist/src/commands/hooks-core-commands.d.ts +0 -10
  689. package/packages/@monomind/cli/dist/src/commands/hooks-core-commands.js +0 -377
  690. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-commands.d.ts +0 -11
  691. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-commands.js +0 -417
  692. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-gaps.d.ts +0 -6
  693. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-gaps.js +0 -219
  694. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-routing.d.ts +0 -7
  695. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-routing.js +0 -399
  696. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-utils.d.ts +0 -42
  697. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-utils.js +0 -220
  698. package/packages/@monomind/cli/dist/src/commands/hooks-extended-commands.d.ts +0 -11
  699. package/packages/@monomind/cli/dist/src/commands/hooks-extended-commands.js +0 -243
  700. package/packages/@monomind/cli/dist/src/commands/hooks-formatting.d.ts +0 -9
  701. package/packages/@monomind/cli/dist/src/commands/hooks-formatting.js +0 -25
  702. package/packages/@monomind/cli/dist/src/commands/hooks-routing-commands.d.ts +0 -15
  703. package/packages/@monomind/cli/dist/src/commands/hooks-routing-commands.js +0 -725
  704. package/packages/@monomind/cli/dist/src/commands/hooks-workers.d.ts +0 -9
  705. package/packages/@monomind/cli/dist/src/commands/hooks-workers.js +0 -547
  706. package/packages/@monomind/cli/dist/src/commands/hooks.d.ts +0 -16
  707. package/packages/@monomind/cli/dist/src/commands/hooks.js +0 -497
  708. package/packages/@monomind/cli/dist/src/commands/index.d.ts +0 -65
  709. package/packages/@monomind/cli/dist/src/commands/index.js +0 -236
  710. package/packages/@monomind/cli/dist/src/commands/init-subcommands.d.ts +0 -8
  711. package/packages/@monomind/cli/dist/src/commands/init-subcommands.js +0 -156
  712. package/packages/@monomind/cli/dist/src/commands/init-upgrade.d.ts +0 -6
  713. package/packages/@monomind/cli/dist/src/commands/init-upgrade.js +0 -203
  714. package/packages/@monomind/cli/dist/src/commands/init-wizard.d.ts +0 -6
  715. package/packages/@monomind/cli/dist/src/commands/init-wizard.js +0 -244
  716. package/packages/@monomind/cli/dist/src/commands/init.d.ts +0 -8
  717. package/packages/@monomind/cli/dist/src/commands/init.js +0 -411
  718. package/packages/@monomind/cli/dist/src/commands/mcp.d.ts +0 -11
  719. package/packages/@monomind/cli/dist/src/commands/mcp.js +0 -747
  720. package/packages/@monomind/cli/dist/src/commands/memory-admin.d.ts +0 -9
  721. package/packages/@monomind/cli/dist/src/commands/memory-admin.js +0 -345
  722. package/packages/@monomind/cli/dist/src/commands/memory-crud.d.ts +0 -9
  723. package/packages/@monomind/cli/dist/src/commands/memory-crud.js +0 -389
  724. package/packages/@monomind/cli/dist/src/commands/memory-list.d.ts +0 -10
  725. package/packages/@monomind/cli/dist/src/commands/memory-list.js +0 -321
  726. package/packages/@monomind/cli/dist/src/commands/memory-transfer.d.ts +0 -8
  727. package/packages/@monomind/cli/dist/src/commands/memory-transfer.js +0 -199
  728. package/packages/@monomind/cli/dist/src/commands/memory.d.ts +0 -14
  729. package/packages/@monomind/cli/dist/src/commands/memory.js +0 -282
  730. package/packages/@monomind/cli/dist/src/commands/monograph.d.ts +0 -8
  731. package/packages/@monomind/cli/dist/src/commands/monograph.js +0 -548
  732. package/packages/@monomind/cli/dist/src/commands/neural-core.d.ts +0 -10
  733. package/packages/@monomind/cli/dist/src/commands/neural-core.js +0 -413
  734. package/packages/@monomind/cli/dist/src/commands/neural-optimize.d.ts +0 -7
  735. package/packages/@monomind/cli/dist/src/commands/neural-optimize.js +0 -330
  736. package/packages/@monomind/cli/dist/src/commands/neural-registry.d.ts +0 -7
  737. package/packages/@monomind/cli/dist/src/commands/neural-registry.js +0 -290
  738. package/packages/@monomind/cli/dist/src/commands/org-observe.d.ts +0 -18
  739. package/packages/@monomind/cli/dist/src/commands/org-observe.js +0 -353
  740. package/packages/@monomind/cli/dist/src/commands/org.d.ts +0 -25
  741. package/packages/@monomind/cli/dist/src/commands/org.js +0 -860
  742. package/packages/@monomind/cli/dist/src/commands/performance.d.ts +0 -10
  743. package/packages/@monomind/cli/dist/src/commands/performance.js +0 -656
  744. package/packages/@monomind/cli/dist/src/commands/platforms.d.ts +0 -11
  745. package/packages/@monomind/cli/dist/src/commands/platforms.js +0 -600
  746. package/packages/@monomind/cli/dist/src/commands/providers.d.ts +0 -10
  747. package/packages/@monomind/cli/dist/src/commands/providers.js +0 -351
  748. package/packages/@monomind/cli/dist/src/commands/report-crash.d.ts +0 -10
  749. package/packages/@monomind/cli/dist/src/commands/report-crash.js +0 -66
  750. package/packages/@monomind/cli/dist/src/commands/route.d.ts +0 -16
  751. package/packages/@monomind/cli/dist/src/commands/route.js +0 -944
  752. package/packages/@monomind/cli/dist/src/commands/search-universal.d.ts +0 -19
  753. package/packages/@monomind/cli/dist/src/commands/search-universal.js +0 -151
  754. package/packages/@monomind/cli/dist/src/commands/security-cve.d.ts +0 -6
  755. package/packages/@monomind/cli/dist/src/commands/security-cve.js +0 -308
  756. package/packages/@monomind/cli/dist/src/commands/security-misc.d.ts +0 -8
  757. package/packages/@monomind/cli/dist/src/commands/security-misc.js +0 -336
  758. package/packages/@monomind/cli/dist/src/commands/security-scan.d.ts +0 -47
  759. package/packages/@monomind/cli/dist/src/commands/security-scan.js +0 -447
  760. package/packages/@monomind/cli/dist/src/commands/security.d.ts +0 -10
  761. package/packages/@monomind/cli/dist/src/commands/security.js +0 -41
  762. package/packages/@monomind/cli/dist/src/commands/session.d.ts +0 -8
  763. package/packages/@monomind/cli/dist/src/commands/session.js +0 -660
  764. package/packages/@monomind/cli/dist/src/commands/start.d.ts +0 -8
  765. package/packages/@monomind/cli/dist/src/commands/start.js +0 -490
  766. package/packages/@monomind/cli/dist/src/commands/status.d.ts +0 -8
  767. package/packages/@monomind/cli/dist/src/commands/status.js +0 -642
  768. package/packages/@monomind/cli/dist/src/commands/swarm.d.ts +0 -8
  769. package/packages/@monomind/cli/dist/src/commands/swarm.js +0 -906
  770. package/packages/@monomind/cli/dist/src/commands/task.d.ts +0 -8
  771. package/packages/@monomind/cli/dist/src/commands/task.js +0 -639
  772. package/packages/@monomind/cli/dist/src/commands/tokens.d.ts +0 -8
  773. package/packages/@monomind/cli/dist/src/commands/tokens.js +0 -206
  774. package/packages/@monomind/cli/dist/src/commands/update.d.ts +0 -8
  775. package/packages/@monomind/cli/dist/src/commands/update.js +0 -288
  776. package/packages/@monomind/cli/dist/src/consensus/audit-writer.d.ts +0 -77
  777. package/packages/@monomind/cli/dist/src/consensus/audit-writer.js +0 -196
  778. package/packages/@monomind/cli/dist/src/consensus/tally.d.ts +0 -19
  779. package/packages/@monomind/cli/dist/src/consensus/tally.js +0 -34
  780. package/packages/@monomind/cli/dist/src/index.d.ts +0 -81
  781. package/packages/@monomind/cli/dist/src/index.js +0 -574
  782. package/packages/@monomind/cli/dist/src/init/claudemd-generator.d.ts +0 -25
  783. package/packages/@monomind/cli/dist/src/init/claudemd-generator.js +0 -624
  784. package/packages/@monomind/cli/dist/src/init/executor.d.ts +0 -47
  785. package/packages/@monomind/cli/dist/src/init/executor.js +0 -2387
  786. package/packages/@monomind/cli/dist/src/init/helpers-generator.d.ts +0 -73
  787. package/packages/@monomind/cli/dist/src/init/helpers-generator.js +0 -1335
  788. package/packages/@monomind/cli/dist/src/init/index.d.ts +0 -13
  789. package/packages/@monomind/cli/dist/src/init/index.js +0 -15
  790. package/packages/@monomind/cli/dist/src/init/mcp-generator.d.ts +0 -26
  791. package/packages/@monomind/cli/dist/src/init/mcp-generator.js +0 -107
  792. package/packages/@monomind/cli/dist/src/init/settings-generator.d.ts +0 -14
  793. package/packages/@monomind/cli/dist/src/init/settings-generator.js +0 -487
  794. package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.d.ts +0 -38
  795. package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.js +0 -602
  796. package/packages/@monomind/cli/dist/src/init/statusline-generator.d.ts +0 -25
  797. package/packages/@monomind/cli/dist/src/init/statusline-generator.js +0 -1358
  798. package/packages/@monomind/cli/dist/src/init/types.d.ts +0 -308
  799. package/packages/@monomind/cli/dist/src/init/types.js +0 -247
  800. package/packages/@monomind/cli/dist/src/knowledge/document-pipeline.d.ts +0 -75
  801. package/packages/@monomind/cli/dist/src/knowledge/document-pipeline.js +0 -556
  802. package/packages/@monomind/cli/dist/src/mcp-client.d.ts +0 -64
  803. package/packages/@monomind/cli/dist/src/mcp-client.js +0 -338
  804. package/packages/@monomind/cli/dist/src/mcp-server.d.ts +0 -170
  805. package/packages/@monomind/cli/dist/src/mcp-server.js +0 -964
  806. package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.d.ts +0 -30
  807. package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.js +0 -603
  808. package/packages/@monomind/cli/dist/src/mcp-tools/analyze-tools.d.ts +0 -38
  809. package/packages/@monomind/cli/dist/src/mcp-tools/analyze-tools.js +0 -389
  810. package/packages/@monomind/cli/dist/src/mcp-tools/auto-install.d.ts +0 -75
  811. package/packages/@monomind/cli/dist/src/mcp-tools/auto-install.js +0 -125
  812. package/packages/@monomind/cli/dist/src/mcp-tools/autopilot-tools.d.ts +0 -12
  813. package/packages/@monomind/cli/dist/src/mcp-tools/autopilot-tools.js +0 -237
  814. package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.d.ts +0 -11
  815. package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.js +0 -1111
  816. package/packages/@monomind/cli/dist/src/mcp-tools/claims-tools.d.ts +0 -12
  817. package/packages/@monomind/cli/dist/src/mcp-tools/claims-tools.js +0 -827
  818. package/packages/@monomind/cli/dist/src/mcp-tools/config-tools.d.ts +0 -8
  819. package/packages/@monomind/cli/dist/src/mcp-tools/config-tools.js +0 -447
  820. package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.d.ts +0 -11
  821. package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.js +0 -866
  822. package/packages/@monomind/cli/dist/src/mcp-tools/github-tools.d.ts +0 -9
  823. package/packages/@monomind/cli/dist/src/mcp-tools/github-tools.js +0 -582
  824. package/packages/@monomind/cli/dist/src/mcp-tools/graphify-tools.d.ts +0 -10
  825. package/packages/@monomind/cli/dist/src/mcp-tools/graphify-tools.js +0 -58
  826. package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.d.ts +0 -15
  827. package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.js +0 -634
  828. package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.d.ts +0 -17
  829. package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.js +0 -1237
  830. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-embedding.d.ts +0 -161
  831. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-embedding.js +0 -516
  832. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-intelligence.d.ts +0 -22
  833. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-intelligence.js +0 -888
  834. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-routing.d.ts +0 -26
  835. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-routing.js +0 -1582
  836. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.d.ts +0 -9
  837. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.js +0 -51
  838. package/packages/@monomind/cli/dist/src/mcp-tools/index.d.ts +0 -31
  839. package/packages/@monomind/cli/dist/src/mcp-tools/index.js +0 -31
  840. package/packages/@monomind/cli/dist/src/mcp-tools/knowledge-tools.d.ts +0 -6
  841. package/packages/@monomind/cli/dist/src/mcp-tools/knowledge-tools.js +0 -156
  842. package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.d.ts +0 -35
  843. package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +0 -776
  844. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-compat.d.ts +0 -26
  845. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-compat.js +0 -136
  846. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.d.ts +0 -27
  847. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +0 -2443
  848. package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.d.ts +0 -15
  849. package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.js +0 -506
  850. package/packages/@monomind/cli/dist/src/mcp-tools/performance-tools.d.ts +0 -16
  851. package/packages/@monomind/cli/dist/src/mcp-tools/performance-tools.js +0 -680
  852. package/packages/@monomind/cli/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.d.ts +0 -261
  853. package/packages/@monomind/cli/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.js +0 -423
  854. package/packages/@monomind/cli/dist/src/mcp-tools/quality/security-compliance/detect-secrets.d.ts +0 -137
  855. package/packages/@monomind/cli/dist/src/mcp-tools/quality/security-compliance/detect-secrets.js +0 -383
  856. package/packages/@monomind/cli/dist/src/mcp-tools/quality-tools.d.ts +0 -14
  857. package/packages/@monomind/cli/dist/src/mcp-tools/quality-tools.js +0 -58
  858. package/packages/@monomind/cli/dist/src/mcp-tools/request-tracker.d.ts +0 -17
  859. package/packages/@monomind/cli/dist/src/mcp-tools/request-tracker.js +0 -44
  860. package/packages/@monomind/cli/dist/src/mcp-tools/security-tools.d.ts +0 -18
  861. package/packages/@monomind/cli/dist/src/mcp-tools/security-tools.js +0 -576
  862. package/packages/@monomind/cli/dist/src/mcp-tools/session-tools.d.ts +0 -8
  863. package/packages/@monomind/cli/dist/src/mcp-tools/session-tools.js +0 -431
  864. package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.d.ts +0 -9
  865. package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.js +0 -411
  866. package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.d.ts +0 -13
  867. package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.js +0 -561
  868. package/packages/@monomind/cli/dist/src/mcp-tools/task-tools.d.ts +0 -28
  869. package/packages/@monomind/cli/dist/src/mcp-tools/task-tools.js +0 -514
  870. package/packages/@monomind/cli/dist/src/mcp-tools/terminal-tools.d.ts +0 -10
  871. package/packages/@monomind/cli/dist/src/mcp-tools/terminal-tools.js +0 -397
  872. package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.d.ts +0 -27
  873. package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.js +0 -76
  874. package/packages/@monomind/cli/dist/src/mcp-tools/types.d.ts +0 -58
  875. package/packages/@monomind/cli/dist/src/mcp-tools/types.js +0 -98
  876. package/packages/@monomind/cli/dist/src/memory/embedding-operations.d.ts +0 -58
  877. package/packages/@monomind/cli/dist/src/memory/embedding-operations.js +0 -262
  878. package/packages/@monomind/cli/dist/src/memory/ewc-consolidation.d.ts +0 -319
  879. package/packages/@monomind/cli/dist/src/memory/ewc-consolidation.js +0 -698
  880. package/packages/@monomind/cli/dist/src/memory/hnsw-operations.d.ts +0 -142
  881. package/packages/@monomind/cli/dist/src/memory/hnsw-operations.js +0 -465
  882. package/packages/@monomind/cli/dist/src/memory/intelligence.d.ts +0 -368
  883. package/packages/@monomind/cli/dist/src/memory/intelligence.js +0 -1456
  884. package/packages/@monomind/cli/dist/src/memory/memory-bridge.d.ts +0 -333
  885. package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +0 -1104
  886. package/packages/@monomind/cli/dist/src/memory/memory-crud.d.ts +0 -67
  887. package/packages/@monomind/cli/dist/src/memory/memory-crud.js +0 -454
  888. package/packages/@monomind/cli/dist/src/memory/memory-initializer.d.ts +0 -101
  889. package/packages/@monomind/cli/dist/src/memory/memory-initializer.js +0 -431
  890. package/packages/@monomind/cli/dist/src/memory/memory-kg.d.ts +0 -186
  891. package/packages/@monomind/cli/dist/src/memory/memory-kg.js +0 -450
  892. package/packages/@monomind/cli/dist/src/memory/memory-migrations.d.ts +0 -30
  893. package/packages/@monomind/cli/dist/src/memory/memory-migrations.js +0 -136
  894. package/packages/@monomind/cli/dist/src/memory/memory-read.d.ts +0 -87
  895. package/packages/@monomind/cli/dist/src/memory/memory-read.js +0 -333
  896. package/packages/@monomind/cli/dist/src/memory/memory-schema.d.ts +0 -13
  897. package/packages/@monomind/cli/dist/src/memory/memory-schema.js +0 -167
  898. package/packages/@monomind/cli/dist/src/memory/query-router.d.ts +0 -44
  899. package/packages/@monomind/cli/dist/src/memory/query-router.js +0 -113
  900. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.d.ts +0 -237
  901. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.js +0 -647
  902. package/packages/@monomind/cli/dist/src/monovector/command-outcomes.d.ts +0 -37
  903. package/packages/@monomind/cli/dist/src/monovector/command-outcomes.js +0 -126
  904. package/packages/@monomind/cli/dist/src/monovector/coverage-router.d.ts +0 -103
  905. package/packages/@monomind/cli/dist/src/monovector/coverage-router.js +0 -341
  906. package/packages/@monomind/cli/dist/src/monovector/coverage-tools.d.ts +0 -14
  907. package/packages/@monomind/cli/dist/src/monovector/coverage-tools.js +0 -115
  908. package/packages/@monomind/cli/dist/src/monovector/diff-classifier.d.ts +0 -174
  909. package/packages/@monomind/cli/dist/src/monovector/diff-classifier.js +0 -738
  910. package/packages/@monomind/cli/dist/src/monovector/index.d.ts +0 -54
  911. package/packages/@monomind/cli/dist/src/monovector/index.js +0 -55
  912. package/packages/@monomind/cli/dist/src/monovector/init-state.d.ts +0 -35
  913. package/packages/@monomind/cli/dist/src/monovector/init-state.js +0 -36
  914. package/packages/@monomind/cli/dist/src/monovector/route-outcomes.d.ts +0 -56
  915. package/packages/@monomind/cli/dist/src/monovector/route-outcomes.js +0 -189
  916. package/packages/@monomind/cli/dist/src/observability/replay-reader.d.ts +0 -40
  917. package/packages/@monomind/cli/dist/src/observability/replay-reader.js +0 -138
  918. package/packages/@monomind/cli/dist/src/orgrt/broker.d.ts +0 -26
  919. package/packages/@monomind/cli/dist/src/orgrt/broker.js +0 -73
  920. package/packages/@monomind/cli/dist/src/orgrt/bus.d.ts +0 -27
  921. package/packages/@monomind/cli/dist/src/orgrt/bus.js +0 -71
  922. package/packages/@monomind/cli/dist/src/orgrt/daemon.d.ts +0 -175
  923. package/packages/@monomind/cli/dist/src/orgrt/daemon.js +0 -965
  924. package/packages/@monomind/cli/dist/src/orgrt/forwarder.d.ts +0 -16
  925. package/packages/@monomind/cli/dist/src/orgrt/forwarder.js +0 -171
  926. package/packages/@monomind/cli/dist/src/orgrt/inbox.d.ts +0 -11
  927. package/packages/@monomind/cli/dist/src/orgrt/inbox.js +0 -91
  928. package/packages/@monomind/cli/dist/src/orgrt/mailbox.d.ts +0 -49
  929. package/packages/@monomind/cli/dist/src/orgrt/mailbox.js +0 -75
  930. package/packages/@monomind/cli/dist/src/orgrt/migrate.d.ts +0 -26
  931. package/packages/@monomind/cli/dist/src/orgrt/migrate.js +0 -118
  932. package/packages/@monomind/cli/dist/src/orgrt/policy.d.ts +0 -28
  933. package/packages/@monomind/cli/dist/src/orgrt/policy.js +0 -146
  934. package/packages/@monomind/cli/dist/src/orgrt/provider.d.ts +0 -9
  935. package/packages/@monomind/cli/dist/src/orgrt/provider.js +0 -55
  936. package/packages/@monomind/cli/dist/src/orgrt/reporting.d.ts +0 -40
  937. package/packages/@monomind/cli/dist/src/orgrt/reporting.js +0 -134
  938. package/packages/@monomind/cli/dist/src/orgrt/scheduler.d.ts +0 -13
  939. package/packages/@monomind/cli/dist/src/orgrt/scheduler.js +0 -48
  940. package/packages/@monomind/cli/dist/src/orgrt/server.d.ts +0 -9
  941. package/packages/@monomind/cli/dist/src/orgrt/server.js +0 -88
  942. package/packages/@monomind/cli/dist/src/orgrt/session.d.ts +0 -62
  943. package/packages/@monomind/cli/dist/src/orgrt/session.js +0 -157
  944. package/packages/@monomind/cli/dist/src/orgrt/templates.d.ts +0 -17
  945. package/packages/@monomind/cli/dist/src/orgrt/templates.js +0 -62
  946. package/packages/@monomind/cli/dist/src/orgrt/test-loop.d.ts +0 -12
  947. package/packages/@monomind/cli/dist/src/orgrt/test-loop.js +0 -108
  948. package/packages/@monomind/cli/dist/src/orgrt/types.d.ts +0 -910
  949. package/packages/@monomind/cli/dist/src/orgrt/types.js +0 -57
  950. package/packages/@monomind/cli/dist/src/output.d.ts +0 -133
  951. package/packages/@monomind/cli/dist/src/output.js +0 -529
  952. package/packages/@monomind/cli/dist/src/parser.d.ts +0 -93
  953. package/packages/@monomind/cli/dist/src/parser.js +0 -651
  954. package/packages/@monomind/cli/dist/src/pricing/model-pricing.d.ts +0 -41
  955. package/packages/@monomind/cli/dist/src/pricing/model-pricing.js +0 -61
  956. package/packages/@monomind/cli/dist/src/production/circuit-breaker.d.ts +0 -121
  957. package/packages/@monomind/cli/dist/src/production/circuit-breaker.js +0 -262
  958. package/packages/@monomind/cli/dist/src/production/error-handler.d.ts +0 -119
  959. package/packages/@monomind/cli/dist/src/production/error-handler.js +0 -324
  960. package/packages/@monomind/cli/dist/src/production/index.d.ts +0 -6
  961. package/packages/@monomind/cli/dist/src/production/index.js +0 -6
  962. package/packages/@monomind/cli/dist/src/production/monitoring.d.ts +0 -181
  963. package/packages/@monomind/cli/dist/src/production/monitoring.js +0 -375
  964. package/packages/@monomind/cli/dist/src/production/rate-limiter.d.ts +0 -125
  965. package/packages/@monomind/cli/dist/src/production/rate-limiter.js +0 -218
  966. package/packages/@monomind/cli/dist/src/production/retry.d.ts +0 -48
  967. package/packages/@monomind/cli/dist/src/production/retry.js +0 -189
  968. package/packages/@monomind/cli/dist/src/prompt.d.ts +0 -44
  969. package/packages/@monomind/cli/dist/src/prompt.js +0 -501
  970. package/packages/@monomind/cli/dist/src/routing/embed-worker.d.ts +0 -2
  971. package/packages/@monomind/cli/dist/src/routing/embed-worker.js +0 -79
  972. package/packages/@monomind/cli/dist/src/routing/embedder.d.ts +0 -31
  973. package/packages/@monomind/cli/dist/src/routing/embedder.js +0 -0
  974. package/packages/@monomind/cli/dist/src/routing/llm-caller.d.ts +0 -24
  975. package/packages/@monomind/cli/dist/src/routing/llm-caller.js +0 -134
  976. package/packages/@monomind/cli/dist/src/routing/route-layer-factory.d.ts +0 -24
  977. package/packages/@monomind/cli/dist/src/routing/route-layer-factory.js +0 -239
  978. package/packages/@monomind/cli/dist/src/services/config-file-manager.d.ts +0 -80
  979. package/packages/@monomind/cli/dist/src/services/config-file-manager.js +0 -401
  980. package/packages/@monomind/cli/dist/src/services/crash-reporter.d.ts +0 -42
  981. package/packages/@monomind/cli/dist/src/services/crash-reporter.js +0 -374
  982. package/packages/@monomind/cli/dist/src/suggest.d.ts +0 -53
  983. package/packages/@monomind/cli/dist/src/suggest.js +0 -197
  984. package/packages/@monomind/cli/dist/src/sync/checker.d.ts +0 -12
  985. package/packages/@monomind/cli/dist/src/sync/checker.js +0 -26
  986. package/packages/@monomind/cli/dist/src/transfer/anonymization/index.d.ts +0 -22
  987. package/packages/@monomind/cli/dist/src/transfer/anonymization/index.js +0 -192
  988. package/packages/@monomind/cli/dist/src/transfer/types.d.ts +0 -245
  989. package/packages/@monomind/cli/dist/src/transfer/types.js +0 -6
  990. package/packages/@monomind/cli/dist/src/types.d.ts +0 -190
  991. package/packages/@monomind/cli/dist/src/types.js +0 -20
  992. package/packages/@monomind/cli/dist/src/ui/collector.mjs +0 -879
  993. package/packages/@monomind/cli/dist/src/ui/dashboard.html +0 -13949
  994. package/packages/@monomind/cli/dist/src/ui/data/agent-avatars.html +0 -763
  995. package/packages/@monomind/cli/dist/src/ui/data/agent-avatars.json +0 -966
  996. package/packages/@monomind/cli/dist/src/ui/data/avatars/account-strategist.svg +0 -58
  997. package/packages/@monomind/cli/dist/src/ui/data/avatars/accounts-payable.svg +0 -54
  998. package/packages/@monomind/cli/dist/src/ui/data/avatars/adaptive-coordinator.svg +0 -55
  999. package/packages/@monomind/cli/dist/src/ui/data/avatars/adaptive-coordinator2.svg +0 -54
  1000. package/packages/@monomind/cli/dist/src/ui/data/avatars/ai-citation.svg +0 -57
  1001. package/packages/@monomind/cli/dist/src/ui/data/avatars/ai-engineer.svg +0 -61
  1002. package/packages/@monomind/cli/dist/src/ui/data/avatars/analytics-reporter.svg +0 -53
  1003. package/packages/@monomind/cli/dist/src/ui/data/avatars/api-tester.svg +0 -53
  1004. package/packages/@monomind/cli/dist/src/ui/data/avatars/architecture.svg +0 -54
  1005. package/packages/@monomind/cli/dist/src/ui/data/avatars/automation-governance.svg +0 -55
  1006. package/packages/@monomind/cli/dist/src/ui/data/avatars/backend-dev.svg +0 -53
  1007. package/packages/@monomind/cli/dist/src/ui/data/avatars/benchmarker.svg +0 -54
  1008. package/packages/@monomind/cli/dist/src/ui/data/avatars/blockchain-auditor.svg +0 -53
  1009. package/packages/@monomind/cli/dist/src/ui/data/avatars/byzantine-coord.svg +0 -57
  1010. package/packages/@monomind/cli/dist/src/ui/data/avatars/case-analyst.svg +0 -57
  1011. package/packages/@monomind/cli/dist/src/ui/data/avatars/cicd-engineer.svg +0 -55
  1012. package/packages/@monomind/cli/dist/src/ui/data/avatars/cloud-architect.svg +0 -54
  1013. package/packages/@monomind/cli/dist/src/ui/data/avatars/code-review-swarm.svg +0 -57
  1014. package/packages/@monomind/cli/dist/src/ui/data/avatars/coder-v119.svg +0 -57
  1015. package/packages/@monomind/cli/dist/src/ui/data/avatars/coder.svg +0 -58
  1016. package/packages/@monomind/cli/dist/src/ui/data/avatars/collective-coord.svg +0 -54
  1017. package/packages/@monomind/cli/dist/src/ui/data/avatars/compliance-auditor.svg +0 -58
  1018. package/packages/@monomind/cli/dist/src/ui/data/avatars/consensus-coordinator.svg +0 -54
  1019. package/packages/@monomind/cli/dist/src/ui/data/avatars/content-creator.svg +0 -54
  1020. package/packages/@monomind/cli/dist/src/ui/data/avatars/crdt-synchronizer.svg +0 -53
  1021. package/packages/@monomind/cli/dist/src/ui/data/avatars/cro-specialist.svg +0 -58
  1022. package/packages/@monomind/cli/dist/src/ui/data/avatars/data-consolidator.svg +0 -54
  1023. package/packages/@monomind/cli/dist/src/ui/data/avatars/data-engineer.svg +0 -53
  1024. package/packages/@monomind/cli/dist/src/ui/data/avatars/database-optimizer.svg +0 -61
  1025. package/packages/@monomind/cli/dist/src/ui/data/avatars/deal-strategist.svg +0 -54
  1026. package/packages/@monomind/cli/dist/src/ui/data/avatars/defender.svg +0 -53
  1027. package/packages/@monomind/cli/dist/src/ui/data/avatars/devops-automator.svg +0 -56
  1028. package/packages/@monomind/cli/dist/src/ui/data/avatars/discovery-coach.svg +0 -54
  1029. package/packages/@monomind/cli/dist/src/ui/data/avatars/email-marketing.svg +0 -57
  1030. package/packages/@monomind/cli/dist/src/ui/data/avatars/embedded-firmware.svg +0 -61
  1031. package/packages/@monomind/cli/dist/src/ui/data/avatars/evidence-collector.svg +0 -57
  1032. package/packages/@monomind/cli/dist/src/ui/data/avatars/experiment-tracker.svg +0 -53
  1033. package/packages/@monomind/cli/dist/src/ui/data/avatars/feedback-synthesizer.svg +0 -54
  1034. package/packages/@monomind/cli/dist/src/ui/data/avatars/finance-tracker.svg +0 -54
  1035. package/packages/@monomind/cli/dist/src/ui/data/avatars/frontend-developer.svg +0 -54
  1036. package/packages/@monomind/cli/dist/src/ui/data/avatars/game-audio-engineer.svg +0 -59
  1037. package/packages/@monomind/cli/dist/src/ui/data/avatars/game-designer.svg +0 -54
  1038. package/packages/@monomind/cli/dist/src/ui/data/avatars/gossip-coordinator.svg +0 -54
  1039. package/packages/@monomind/cli/dist/src/ui/data/avatars/hierarchical-coord.svg +0 -54
  1040. package/packages/@monomind/cli/dist/src/ui/data/avatars/incident-commander.svg +0 -57
  1041. package/packages/@monomind/cli/dist/src/ui/data/avatars/infrastructure.svg +0 -54
  1042. package/packages/@monomind/cli/dist/src/ui/data/avatars/input-validator.svg +0 -53
  1043. package/packages/@monomind/cli/dist/src/ui/data/avatars/ios-developer.svg +0 -54
  1044. package/packages/@monomind/cli/dist/src/ui/data/avatars/issue-tracker.svg +0 -53
  1045. package/packages/@monomind/cli/dist/src/ui/data/avatars/judge.svg +0 -55
  1046. package/packages/@monomind/cli/dist/src/ui/data/avatars/launch-strategist.svg +0 -54
  1047. package/packages/@monomind/cli/dist/src/ui/data/avatars/legal-compliance.svg +0 -53
  1048. package/packages/@monomind/cli/dist/src/ui/data/avatars/level-designer.svg +0 -53
  1049. package/packages/@monomind/cli/dist/src/ui/data/avatars/load-balancer.svg +0 -57
  1050. package/packages/@monomind/cli/dist/src/ui/data/avatars/mcp-builder.svg +0 -53
  1051. package/packages/@monomind/cli/dist/src/ui/data/avatars/memory-coordinator.svg +0 -55
  1052. package/packages/@monomind/cli/dist/src/ui/data/avatars/mesh-coordinator.svg +0 -55
  1053. package/packages/@monomind/cli/dist/src/ui/data/avatars/ml-developer.svg +0 -58
  1054. package/packages/@monomind/cli/dist/src/ui/data/avatars/mobile-app-builder.svg +0 -53
  1055. package/packages/@monomind/cli/dist/src/ui/data/avatars/mobile-dev.svg +0 -54
  1056. package/packages/@monomind/cli/dist/src/ui/data/avatars/model-qa.svg +0 -58
  1057. package/packages/@monomind/cli/dist/src/ui/data/avatars/narrative-designer.svg +0 -58
  1058. package/packages/@monomind/cli/dist/src/ui/data/avatars/outbound-strategist.svg +0 -55
  1059. package/packages/@monomind/cli/dist/src/ui/data/avatars/path-validator.svg +0 -54
  1060. package/packages/@monomind/cli/dist/src/ui/data/avatars/payment-agent.svg +0 -53
  1061. package/packages/@monomind/cli/dist/src/ui/data/avatars/perf-analyzer.svg +0 -58
  1062. package/packages/@monomind/cli/dist/src/ui/data/avatars/pipeline-analyst.svg +0 -54
  1063. package/packages/@monomind/cli/dist/src/ui/data/avatars/planner.svg +0 -55
  1064. package/packages/@monomind/cli/dist/src/ui/data/avatars/pr-manager.svg +0 -54
  1065. package/packages/@monomind/cli/dist/src/ui/data/avatars/pricing-strategist.svg +0 -54
  1066. package/packages/@monomind/cli/dist/src/ui/data/avatars/product-manager.svg +0 -54
  1067. package/packages/@monomind/cli/dist/src/ui/data/avatars/production-validator.svg +0 -54
  1068. package/packages/@monomind/cli/dist/src/ui/data/avatars/project-shepherd.svg +0 -54
  1069. package/packages/@monomind/cli/dist/src/ui/data/avatars/proposal-strategist.svg +0 -54
  1070. package/packages/@monomind/cli/dist/src/ui/data/avatars/prosecutor.svg +0 -57
  1071. package/packages/@monomind/cli/dist/src/ui/data/avatars/pseudocode.svg +0 -53
  1072. package/packages/@monomind/cli/dist/src/ui/data/avatars/queen-coordinator.svg +0 -55
  1073. package/packages/@monomind/cli/dist/src/ui/data/avatars/quorum-manager.svg +0 -53
  1074. package/packages/@monomind/cli/dist/src/ui/data/avatars/raft-manager.svg +0 -53
  1075. package/packages/@monomind/cli/dist/src/ui/data/avatars/reality-checker.svg +0 -58
  1076. package/packages/@monomind/cli/dist/src/ui/data/avatars/recruitment.svg +0 -58
  1077. package/packages/@monomind/cli/dist/src/ui/data/avatars/refinement.svg +0 -53
  1078. package/packages/@monomind/cli/dist/src/ui/data/avatars/release-manager.svg +0 -54
  1079. package/packages/@monomind/cli/dist/src/ui/data/avatars/repo-architect.svg +0 -54
  1080. package/packages/@monomind/cli/dist/src/ui/data/avatars/researcher.svg +0 -58
  1081. package/packages/@monomind/cli/dist/src/ui/data/avatars/resource-allocator.svg +0 -53
  1082. package/packages/@monomind/cli/dist/src/ui/data/avatars/reviewer.svg +0 -53
  1083. package/packages/@monomind/cli/dist/src/ui/data/avatars/safe-executor.svg +0 -53
  1084. package/packages/@monomind/cli/dist/src/ui/data/avatars/sales-coach.svg +0 -53
  1085. package/packages/@monomind/cli/dist/src/ui/data/avatars/sales-engineer.svg +0 -58
  1086. package/packages/@monomind/cli/dist/src/ui/data/avatars/scout-explorer.svg +0 -58
  1087. package/packages/@monomind/cli/dist/src/ui/data/avatars/security-architect.svg +0 -54
  1088. package/packages/@monomind/cli/dist/src/ui/data/avatars/security-auditor.svg +0 -55
  1089. package/packages/@monomind/cli/dist/src/ui/data/avatars/senior-developer.svg +0 -58
  1090. package/packages/@monomind/cli/dist/src/ui/data/avatars/senior-pm.svg +0 -58
  1091. package/packages/@monomind/cli/dist/src/ui/data/avatars/seo-specialist.svg +0 -57
  1092. package/packages/@monomind/cli/dist/src/ui/data/avatars/social-media.svg +0 -54
  1093. package/packages/@monomind/cli/dist/src/ui/data/avatars/solidity-engineer.svg +0 -58
  1094. package/packages/@monomind/cli/dist/src/ui/data/avatars/sparc-coder.svg +0 -58
  1095. package/packages/@monomind/cli/dist/src/ui/data/avatars/sparc-coord.svg +0 -56
  1096. package/packages/@monomind/cli/dist/src/ui/data/avatars/specification.svg +0 -57
  1097. package/packages/@monomind/cli/dist/src/ui/data/avatars/sprint-prioritizer.svg +0 -53
  1098. package/packages/@monomind/cli/dist/src/ui/data/avatars/sre.svg +0 -54
  1099. package/packages/@monomind/cli/dist/src/ui/data/avatars/studio-operations.svg +0 -53
  1100. package/packages/@monomind/cli/dist/src/ui/data/avatars/studio-producer.svg +0 -55
  1101. package/packages/@monomind/cli/dist/src/ui/data/avatars/support-responder.svg +0 -56
  1102. package/packages/@monomind/cli/dist/src/ui/data/avatars/system-architect.svg +0 -54
  1103. package/packages/@monomind/cli/dist/src/ui/data/avatars/task-orchestrator.svg +0 -56
  1104. package/packages/@monomind/cli/dist/src/ui/data/avatars/technical-artist.svg +0 -53
  1105. package/packages/@monomind/cli/dist/src/ui/data/avatars/technical-writer.svg +0 -59
  1106. package/packages/@monomind/cli/dist/src/ui/data/avatars/tester.svg +0 -53
  1107. package/packages/@monomind/cli/dist/src/ui/data/avatars/threat-detection.svg +0 -61
  1108. package/packages/@monomind/cli/dist/src/ui/data/avatars/trend-researcher.svg +0 -54
  1109. package/packages/@monomind/cli/dist/src/ui/data/avatars/trial-director.svg +0 -55
  1110. package/packages/@monomind/cli/dist/src/ui/data/avatars/unity-architect.svg +0 -54
  1111. package/packages/@monomind/cli/dist/src/ui/data/avatars/visionos-engineer.svg +0 -57
  1112. package/packages/@monomind/cli/dist/src/ui/data/avatars/worker-specialist.svg +0 -55
  1113. package/packages/@monomind/cli/dist/src/ui/data/avatars/workflow-architect.svg +0 -57
  1114. package/packages/@monomind/cli/dist/src/ui/data/avatars/workflow-automation.svg +0 -54
  1115. package/packages/@monomind/cli/dist/src/ui/data/avatars/zk-steward.svg +0 -54
  1116. package/packages/@monomind/cli/dist/src/ui/data/known-projects.json +0 -1
  1117. package/packages/@monomind/cli/dist/src/ui/data/mastermind-sessions.json +0 -1
  1118. package/packages/@monomind/cli/dist/src/ui/data/sessions/_index.json +0 -1
  1119. package/packages/@monomind/cli/dist/src/ui/mastermind-diagram-fallback.html +0 -1069
  1120. package/packages/@monomind/cli/dist/src/ui/orgs-files.js +0 -192
  1121. package/packages/@monomind/cli/dist/src/ui/orgs.html +0 -2513
  1122. package/packages/@monomind/cli/dist/src/ui/server.mjs +0 -7256
  1123. package/packages/@monomind/cli/dist/src/ui/sse-manager.mjs +0 -119
  1124. package/packages/@monomind/cli/dist/src/update/checker.d.ts +0 -34
  1125. package/packages/@monomind/cli/dist/src/update/checker.js +0 -278
  1126. package/packages/@monomind/cli/dist/src/update/executor.d.ts +0 -32
  1127. package/packages/@monomind/cli/dist/src/update/executor.js +0 -235
  1128. package/packages/@monomind/cli/dist/src/update/index.d.ts +0 -43
  1129. package/packages/@monomind/cli/dist/src/update/index.js +0 -108
  1130. package/packages/@monomind/cli/dist/src/update/rate-limiter.d.ts +0 -37
  1131. package/packages/@monomind/cli/dist/src/update/rate-limiter.js +0 -190
  1132. package/packages/@monomind/cli/dist/src/update/validator.d.ts +0 -17
  1133. package/packages/@monomind/cli/dist/src/update/validator.js +0 -166
  1134. package/packages/@monomind/cli/dist/src/utils/cosine-similarity.d.ts +0 -22
  1135. package/packages/@monomind/cli/dist/src/utils/cosine-similarity.js +0 -38
  1136. package/packages/@monomind/cli/dist/src/utils/input-guards.d.ts +0 -66
  1137. package/packages/@monomind/cli/dist/src/utils/input-guards.js +0 -263
  1138. package/packages/@monomind/cli/dist/src/utils/json-file.d.ts +0 -33
  1139. package/packages/@monomind/cli/dist/src/utils/json-file.js +0 -57
  1140. package/packages/@monomind/cli/dist/src/utils/parse-jsonl.d.ts +0 -6
  1141. package/packages/@monomind/cli/dist/src/utils/parse-jsonl.js +0 -22
  1142. package/packages/@monomind/cli/dist/src/utils/resource-governor.d.ts +0 -32
  1143. package/packages/@monomind/cli/dist/src/utils/resource-governor.js +0 -115
  1144. package/packages/@monomind/cli/package.json +0 -127
  1145. package/packages/@monomind/cli/scripts/deploy-ipfs-node.sh +0 -153
  1146. package/packages/@monomind/cli/scripts/publish.sh +0 -61
  1147. package/packages/@monomind/cli/scripts/sync-claude-assets.sh +0 -19
  1148. package/packages/@monomind/cli/scripts/understand-analyze.mjs +0 -1078
  1149. package/scripts/build-fs.mjs +0 -75
  1150. package/scripts/build-monovector.sh +0 -10
  1151. package/scripts/generate-agent-avatars.mjs +0 -492
  1152. package/scripts/generate-channel-profile-assets.sh +0 -67
  1153. package/scripts/growth-content-calendar.mjs +0 -260
  1154. package/scripts/growth-profile-kit.mjs +0 -156
  1155. package/scripts/install.sh +0 -392
  1156. package/scripts/publish-monovector.sh +0 -20
  1157. package/scripts/ua-enrich.mjs +0 -229
  1158. package/scripts/ua-import.mjs +0 -288
  1159. package/scripts/verify-appliance.sh +0 -571
@@ -1,1776 +0,0 @@
1
- /**
2
- * Shared library for the Monodesign design hook.
3
- *
4
- * Pure-ish helpers split out from `hook.mjs` so unit tests can exercise
5
- * config parsing, finding filtering, dedup, render, and cache logic without
6
- * spawning a subprocess. `hook.mjs` itself is the thin stdin/stdout shim.
7
- *
8
- * Public surface (everything exported is part of the contract):
9
- * ENVELOPE_PREFIX, ALLOWED_EXTS, ACK_EXTS, SENSITIVE_PATH, GENERATED_PATH, TRUTHY
10
- * truthy(value)
11
- * readConfig(cwd) / DEFAULT_CONFIG / getConfigPath(cwd) / getLocalConfigPath(cwd)
12
- * resolveProjectPlatform(cwd) / isNativePlatform(platform)
13
- * normalizeIgnoreValue(value)
14
- * readCache(cwd) / persistCache(cwd, cache) / resolveCacheCwd(primaryFile, sessionCwd)
15
- * bumpEditCount(cache, sessionId, filePath) -> number
16
- * suppressionNotice(filePath)
17
- * filterFindings(findings, content, ext, config)
18
- * matchConfiguredExtension(filePath, extensions)
19
- * dedupeAgainstCache(findings, cache, sessionId, filePath)
20
- * renderTemplate(findings, filePath, config, opts)
21
- * renderCleanAck(filePath, opts) / renderPendingAck(filePath, known, opts)
22
- * shouldEmitAckForFile(filePath, config?)
23
- * writeAuditLog(env, entry)
24
- * loadDetector() -> Promise<{ detectText, detectHtml }>
25
- * matchesAnyGlob(filePath, globs)
26
- * normalizeScanTargets(primaryTargets, projectCwd)
27
- * runHook(deps) -> { exitCode, stdout, audit, reason? }
28
- *
29
- * Design notes:
30
- * - All errors are swallowed at the runHook seam. The detector throwing must
31
- * never break a turn. See PRD §5 "Failure modes".
32
- * - Cache shape is JSON-friendly; we gc the oldest sessions when there are
33
- * more than 8 to keep file size predictable across long-lived projects.
34
- * - The detector loader looks for `detector/detect-antipatterns.mjs` next to
35
- * this file first (built skill layout) and falls back to the repo root's
36
- * `cli/engine/detect-antipatterns.mjs` (running from source).
37
- */
38
-
39
- import fs from 'node:fs';
40
- import os from 'node:os';
41
- import path from 'node:path';
42
- import { createRequire } from 'node:module';
43
- import { pathToFileURL, fileURLToPath } from 'node:url';
44
- import { extractPlatform, loadContext } from './context.mjs';
45
- import { MONODESIGN_COMMAND } from './lib/provider.mjs';
46
-
47
- const __filename = fileURLToPath(import.meta.url);
48
- const __dirname = path.dirname(__filename);
49
-
50
- export const ENVELOPE_PREFIX = '[monodesign@1]';
51
-
52
- export const ALLOWED_EXTS = new Set([
53
- '.tsx', '.jsx', '.html', '.htm', '.vue', '.svelte', '.astro',
54
- '.css', '.scss', '.sass', '.less', '.ts', '.js',
55
- ]);
56
-
57
- export const ACK_EXTS = new Set([
58
- '.tsx', '.jsx', '.html', '.htm', '.vue', '.svelte', '.astro',
59
- '.css', '.scss', '.sass', '.less',
60
- ]);
61
-
62
- // Hard-skip regex for sensitive files. Cannot be turned off via config.
63
- // Match tokenized secret/credential filenames, not UI names such as
64
- // CredentialForm.tsx, SecretPage.jsx, or secretary-dashboard.vue.
65
- export const SENSITIVE_PATH = new RegExp([
66
- String.raw`(?:^|[/\\])\.env(?:\.|$)`,
67
- String.raw`(?:^|[/\\])\.git(?:[/\\]|$)`,
68
- String.raw`(?:^|[/\\])id_rsa(?:$|[._-])[^/\\]*$`,
69
- String.raw`(?:^|[/\\])[^/\\]*\.pem$`,
70
- String.raw`(?:^|[/\\])(?:[^/\\]*[._-])?(?:secret|secrets|credential|credentials)(?=[._-])[^/\\]*\.(?:json|ya?ml|toml|ini|conf|config|env|txt|key|cert|crt|pem|js|ts)$`,
71
- ].join('|'), 'i');
72
-
73
- // Hard-skip regex for generated, lock, minified, and build-output paths.
74
- export const GENERATED_PATH = /(?:\.generated\.[a-z]+$|\.d\.ts$|\.min\.[a-z]+$|[/\\]node_modules[/\\]|[/\\](?:dist|build|out|\.next|\.cache|coverage)[/\\]|[/\\]?[^/\\]+\.lock(?:\.json)?$)/i;
75
-
76
- export const TRUTHY = /^(1|true|yes|on)$/i;
77
-
78
- export const DEFAULT_CONFIG = Object.freeze({
79
- enabled: true,
80
- quiet: false,
81
- auditLog: null,
82
- designSystem: { enabled: true },
83
- ignoreRules: [],
84
- ignoreFiles: [],
85
- ignoreValues: [],
86
- extensions: [],
87
- limits: { maxFindings: 5, maxChars: 8000 },
88
- });
89
-
90
- export const HOOK_LOCAL_IGNORE_PATTERNS = Object.freeze([
91
- '.monodesign/hook.cache.json',
92
- '.monodesign/hook.pending.json',
93
- '.monodesign/config.local.json',
94
- ]);
95
-
96
- const HOOK_IGNORE_MARKER_OPEN = '# monodesign-hook-ignore-start';
97
- const HOOK_IGNORE_MARKER_CLOSE = '# monodesign-hook-ignore-end';
98
- const CACHE_MAX_SESSIONS = 8;
99
- export const EDIT_COUNT_THRESHOLD = 6;
100
-
101
- export function truthy(value) {
102
- return typeof value === 'string' && TRUTHY.test(value);
103
- }
104
-
105
- function depthIsSet(value) {
106
- if (value === undefined || value === null) return false;
107
- const text = String(value).trim();
108
- if (!text) return false;
109
- if (TRUTHY.test(text)) return true;
110
- return /^\d+$/.test(text) && Number(text) > 0;
111
- }
112
-
113
- function safeReadJson(filePath) {
114
- try {
115
- return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
116
- } catch {
117
- return null;
118
- }
119
- }
120
-
121
- export function getConfigPath(cwd) {
122
- return path.join(cwd, '.monodesign', 'config.json');
123
- }
124
-
125
- export function getLocalConfigPath(cwd) {
126
- return path.join(cwd, '.monodesign', 'config.local.json');
127
- }
128
-
129
- export function getCachePath(cwd) {
130
- return path.join(cwd, '.monodesign', 'hook.cache.json');
131
- }
132
-
133
- export function getPendingPath(cwd) {
134
- return path.join(cwd, '.monodesign', 'hook.pending.json');
135
- }
136
-
137
- export function resolveProjectCwd(event, fallback = process.cwd()) {
138
- return event?.cwd
139
- || (Array.isArray(event?.workspace_roots) && event.workspace_roots[0])
140
- || envProjectDir(fallback)
141
- || fallback;
142
- }
143
-
144
- function looksLikeProjectRoot(dir) {
145
- return ['.git', 'package.json', '.monodesign'].some((marker) => {
146
- try { return fs.existsSync(path.join(dir, marker)); } catch { return false; }
147
- });
148
- }
149
-
150
- // Where `.monodesign/` (cache + config) lives for this event. Normally the
151
- // session cwd, untouched. But when the agent was launched from an umbrella
152
- // directory that is not itself a project (no .git, package.json, or
153
- // .monodesign), key to the edited file's nearest project root instead, so a
154
- // multi-project launch dir doesn't accumulate a shared cross-project cache
155
- // (issue #305). Climbing stops at the home dir, falling back to the session
156
- // cwd when no marker is found.
157
- export function resolveCacheCwd(primaryFile, sessionCwd) {
158
- const base = path.resolve(sessionCwd || process.cwd());
159
- if (!primaryFile || typeof primaryFile !== 'string' || hasPathTraversal(primaryFile)) return base;
160
- if (looksLikeProjectRoot(base)) return base;
161
- let dir;
162
- try {
163
- dir = path.dirname(path.resolve(primaryFile));
164
- } catch {
165
- return base;
166
- }
167
- const home = path.resolve(os.homedir());
168
- while (true) {
169
- if (dir === home) return base;
170
- if (looksLikeProjectRoot(dir)) return dir;
171
- const parent = path.dirname(dir);
172
- if (parent === dir) return base;
173
- dir = parent;
174
- }
175
- }
176
-
177
- // The detector's rules are web rules (HTML/CSS shapes), but a React Native or
178
- // Flutter project is made of the exact extensions the hook watches (.tsx, .ts,
179
- // .js), so without this gate every native screen edit would draw web-shaped
180
- // findings that contradict the native platform references. PRODUCT.md's
181
- // `## Platform` field decides: `ios` / `android` / `adaptive` projects skip
182
- // the scan entirely. Resolution goes through loadContext so the hook reads the
183
- // same PRODUCT.md the skill does (alternate context dirs, monorepo fallback).
184
- export function resolveProjectPlatform(cwd) {
185
- try {
186
- const ctx = loadContext(cwd);
187
- return extractPlatform(ctx && ctx.product);
188
- } catch {
189
- return null;
190
- }
191
- }
192
-
193
- export function isNativePlatform(platform) {
194
- return platform === 'ios' || platform === 'android' || platform === 'adaptive';
195
- }
196
-
197
- export function readConfig(cwd) {
198
- const config = cloneDefaultConfig();
199
- // Hook runtime settings live under `hook`; detector filters live under
200
- // `detector`. Back-compat: older configs stored detector filters in `hook`,
201
- // so read those first and let canonical `detector` settings win.
202
- for (const filePath of [getConfigPath(cwd), getLocalConfigPath(cwd)]) {
203
- const raw = safeReadJson(filePath);
204
- applyConfigSource(config, hookSection(raw));
205
- applyDetectorConfigSource(config, detectorSection(raw));
206
- }
207
- return config;
208
- }
209
-
210
- // The hook settings subtree of a unified config.json / config.local.json.
211
- function hookSection(raw) {
212
- if (!raw || typeof raw !== 'object') return null;
213
- return raw.hook && typeof raw.hook === 'object' && !Array.isArray(raw.hook) ? raw.hook : null;
214
- }
215
-
216
- function detectorSection(raw) {
217
- if (!raw || typeof raw !== 'object') return null;
218
- return raw.detector && typeof raw.detector === 'object' && !Array.isArray(raw.detector) ? raw.detector : null;
219
- }
220
-
221
- function numberOr(value, fallback) {
222
- return Number.isFinite(value) && value > 0 ? value : fallback;
223
- }
224
-
225
- function cloneDefaultConfig() {
226
- return {
227
- ...DEFAULT_CONFIG,
228
- ignoreRules: [],
229
- ignoreFiles: [],
230
- ignoreValues: [],
231
- extensions: [],
232
- designSystem: { ...DEFAULT_CONFIG.designSystem },
233
- limits: { ...DEFAULT_CONFIG.limits },
234
- };
235
- }
236
-
237
- function applyDetectorConfigSource(config, raw) {
238
- if (!raw || typeof raw !== 'object') return config;
239
- if (raw.designSystem && typeof raw.designSystem === 'object' && !Array.isArray(raw.designSystem)) {
240
- config.designSystem = {
241
- ...config.designSystem,
242
- enabled: raw.designSystem.enabled === false ? false : true,
243
- };
244
- }
245
- if (Array.isArray(raw.ignoreRules)) {
246
- config.ignoreRules = uniqueStrings([...config.ignoreRules, ...raw.ignoreRules]);
247
- }
248
- if (Array.isArray(raw.ignoreFiles)) {
249
- config.ignoreFiles = uniqueStrings([...config.ignoreFiles, ...raw.ignoreFiles]);
250
- }
251
- if (Array.isArray(raw.ignoreValues)) {
252
- config.ignoreValues = mergeIgnoreValues(config.ignoreValues, raw.ignoreValues);
253
- }
254
- if (Array.isArray(raw.extensions)) {
255
- config.extensions = mergeExtensions(config.extensions, raw.extensions);
256
- }
257
- return config;
258
- }
259
-
260
- // Extra scanned extensions from `detector.extensions` config. Entries are
261
- // `{ ext, engine }` (engine 'html' | 'text', default 'html' — the common case
262
- // for server-side templates) or bare strings as shorthand. Extensions are
263
- // matched against the end of the filename, not path.extname, so double
264
- // extensions like `.blade.php` and `.html.erb` work (issue #316).
265
- function normalizeExtensionEntries(entries) {
266
- if (!Array.isArray(entries)) return [];
267
- const out = [];
268
- for (const entry of entries) {
269
- const raw = typeof entry === 'string' ? entry : entry?.ext;
270
- if (typeof raw !== 'string') continue;
271
- let ext = raw.trim().toLowerCase();
272
- if (!ext) continue;
273
- if (!ext.startsWith('.')) ext = `.${ext}`;
274
- const engine = (!(typeof entry === 'string') && entry?.engine === 'text') ? 'text' : 'html';
275
- out.push({ ext, engine });
276
- }
277
- return out;
278
- }
279
-
280
- function mergeExtensions(existing, incoming) {
281
- const map = new Map();
282
- for (const entry of normalizeExtensionEntries(existing)) map.set(entry.ext, entry);
283
- for (const entry of normalizeExtensionEntries(incoming)) map.set(entry.ext, entry);
284
- return Array.from(map.values());
285
- }
286
-
287
- export function matchConfiguredExtension(filePath, extensions) {
288
- if (!Array.isArray(extensions) || extensions.length === 0) return null;
289
- const name = path.basename(String(filePath || '')).toLowerCase();
290
- if (!name) return null;
291
- // The longest matching suffix wins, so `.blade.php` beats a broader `.php`
292
- // entry regardless of config order.
293
- let best = null;
294
- for (const entry of normalizeExtensionEntries(extensions)) {
295
- if (name.length > entry.ext.length && name.endsWith(entry.ext)
296
- && (!best || entry.ext.length > best.ext.length)) {
297
- best = entry;
298
- }
299
- }
300
- return best;
301
- }
302
-
303
- function applyConfigSource(config, raw) {
304
- if (!raw || typeof raw !== 'object') return config;
305
- if (Object.prototype.hasOwnProperty.call(raw, 'enabled')) {
306
- config.enabled = raw.enabled === false ? false : true;
307
- }
308
- if (Object.prototype.hasOwnProperty.call(raw, 'quiet')) {
309
- config.quiet = raw.quiet === true;
310
- }
311
- if (typeof raw.auditLog === 'string' && raw.auditLog.trim()) {
312
- config.auditLog = raw.auditLog.trim();
313
- }
314
- applyDetectorConfigSource(config, raw);
315
- if (raw.limits && typeof raw.limits === 'object') {
316
- config.limits = {
317
- maxFindings: numberOr(raw.limits.maxFindings, config.limits.maxFindings),
318
- maxChars: numberOr(raw.limits.maxChars, config.limits.maxChars),
319
- };
320
- }
321
- return config;
322
- }
323
-
324
- function uniqueStrings(values) {
325
- return Array.from(new Set(values.map(String)));
326
- }
327
-
328
- export function normalizeIgnoreValue(value) {
329
- return String(value || '')
330
- .trim()
331
- .replace(/^["']|["']$/g, '')
332
- .replace(/\+/g, ' ')
333
- .replace(/\s+/g, ' ')
334
- .toLowerCase();
335
- }
336
-
337
- function normalizeIgnoreRule(rule) {
338
- return String(rule || '').trim().toLowerCase();
339
- }
340
-
341
- function colorIgnoreKey(value) {
342
- const color = parseIgnoreColor(value);
343
- if (!color) return '';
344
- return `${color.r},${color.g},${color.b},${Math.round(color.a * 255)}`;
345
- }
346
-
347
- function parseIgnoreColor(value) {
348
- const text = String(value || '').trim().toLowerCase();
349
- if (!text) return null;
350
-
351
- const hex = text.match(/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i);
352
- if (hex) return parseHexIgnoreColor(hex[1]);
353
-
354
- const rgb = text.match(/^rgba?\((.*)\)$/i);
355
- if (rgb) {
356
- const parts = splitColorArgs(rgb[1]);
357
- if (parts.length < 3 || parts.length > 4) return null;
358
- const r = parseRgbChannel(parts[0]);
359
- const g = parseRgbChannel(parts[1]);
360
- const b = parseRgbChannel(parts[2]);
361
- const a = parts[3] === undefined ? 1 : parseAlphaChannel(parts[3]);
362
- if ([r, g, b, a].some((v) => v === null)) return null;
363
- return { r, g, b, a };
364
- }
365
-
366
- const hsl = text.match(/^hsla?\((.*)\)$/i);
367
- if (hsl) {
368
- const parts = splitColorArgs(hsl[1]);
369
- if (parts.length < 3 || parts.length > 4) return null;
370
- const h = parseHueChannel(parts[0]);
371
- const s = parsePercentChannel(parts[1]);
372
- const l = parsePercentChannel(parts[2]);
373
- const a = parts[3] === undefined ? 1 : parseAlphaChannel(parts[3]);
374
- if ([h, s, l, a].some((v) => v === null)) return null;
375
- return hslToRgb(h, s, l, a);
376
- }
377
-
378
- return null;
379
- }
380
-
381
- function parseHexIgnoreColor(hex) {
382
- if (hex.length === 3 || hex.length === 4) {
383
- const r = parseInt(hex[0] + hex[0], 16);
384
- const g = parseInt(hex[1] + hex[1], 16);
385
- const b = parseInt(hex[2] + hex[2], 16);
386
- const a = hex.length === 4 ? parseInt(hex[3] + hex[3], 16) / 255 : 1;
387
- return { r, g, b, a };
388
- }
389
- const r = parseInt(hex.slice(0, 2), 16);
390
- const g = parseInt(hex.slice(2, 4), 16);
391
- const b = parseInt(hex.slice(4, 6), 16);
392
- const a = hex.length === 8 ? parseInt(hex.slice(6, 8), 16) / 255 : 1;
393
- return { r, g, b, a };
394
- }
395
-
396
- function splitColorArgs(body) {
397
- const text = String(body || '').trim();
398
- if (!text) return [];
399
- if (text.includes(',')) {
400
- const parts = text.split(',').map((part) => part.trim()).filter(Boolean);
401
- const last = parts[parts.length - 1];
402
- if (last && last.includes('/')) {
403
- const split = last.split('/').map((part) => part.trim()).filter(Boolean);
404
- return [...parts.slice(0, -1), ...split];
405
- }
406
- return parts;
407
- }
408
- return text.replace(/\s*\/\s*/g, ' / ').split(/\s+/).filter((part) => part && part !== '/');
409
- }
410
-
411
- function parseRgbChannel(raw) {
412
- const text = String(raw || '').trim();
413
- const match = text.match(/^(-?\d*\.?\d+)(%)?$/);
414
- if (!match) return null;
415
- const value = Number.parseFloat(match[1]);
416
- if (!Number.isFinite(value)) return null;
417
- const scaled = match[2] ? value * 2.55 : value;
418
- if (scaled < 0 || scaled > 255) return null;
419
- return Math.round(scaled);
420
- }
421
-
422
- function parseAlphaChannel(raw) {
423
- const text = String(raw || '').trim();
424
- const match = text.match(/^(-?\d*\.?\d+)(%)?$/);
425
- if (!match) return null;
426
- const value = Number.parseFloat(match[1]);
427
- if (!Number.isFinite(value)) return null;
428
- const alpha = match[2] ? value / 100 : value;
429
- return alpha >= 0 && alpha <= 1 ? alpha : null;
430
- }
431
-
432
- function parseHueChannel(raw) {
433
- const text = String(raw || '').trim();
434
- const match = text.match(/^(-?\d*\.?\d+)(deg|rad|turn|grad)?$/);
435
- if (!match) return null;
436
- const value = Number.parseFloat(match[1]);
437
- if (!Number.isFinite(value)) return null;
438
- const unit = match[2] || 'deg';
439
- if (unit === 'turn') return value * 360;
440
- if (unit === 'rad') return value * (180 / Math.PI);
441
- if (unit === 'grad') return value * 0.9;
442
- return value;
443
- }
444
-
445
- function parsePercentChannel(raw) {
446
- const text = String(raw || '').trim();
447
- const match = text.match(/^(-?\d*\.?\d+)%$/);
448
- if (!match) return null;
449
- const value = Number.parseFloat(match[1]);
450
- if (!Number.isFinite(value)) return null;
451
- return value >= 0 && value <= 100 ? value / 100 : null;
452
- }
453
-
454
- function hslToRgb(hue, saturation, lightness, alpha) {
455
- const h = (((hue % 360) + 360) % 360) / 360;
456
- if (saturation === 0) {
457
- const gray = clampByte(Math.round(lightness * 255));
458
- return { r: gray, g: gray, b: gray, a: alpha };
459
- }
460
- const q = lightness < 0.5
461
- ? lightness * (1 + saturation)
462
- : lightness + saturation - lightness * saturation;
463
- const p = 2 * lightness - q;
464
- const toRgb = (t) => {
465
- let channel = t;
466
- if (channel < 0) channel += 1;
467
- if (channel > 1) channel -= 1;
468
- if (channel < 1 / 6) return p + (q - p) * 6 * channel;
469
- if (channel < 1 / 2) return q;
470
- if (channel < 2 / 3) return p + (q - p) * (2 / 3 - channel) * 6;
471
- return p;
472
- };
473
- return {
474
- r: clampByte(Math.round(toRgb(h + 1 / 3) * 255)),
475
- g: clampByte(Math.round(toRgb(h) * 255)),
476
- b: clampByte(Math.round(toRgb(h - 1 / 3) * 255)),
477
- a: alpha,
478
- };
479
- }
480
-
481
- function clampByte(value) {
482
- return Math.min(255, Math.max(0, value));
483
- }
484
-
485
- function ignoreValueMatches(rule, entryValue, findingValue) {
486
- if (entryValue === findingValue) return true;
487
- if (rule !== 'design-system-color') return false;
488
- const entryColor = colorIgnoreKey(entryValue);
489
- return Boolean(entryColor && entryColor === colorIgnoreKey(findingValue));
490
- }
491
-
492
- export function normalizeIgnoreValueEntries(entries) {
493
- if (!Array.isArray(entries)) return [];
494
- const out = [];
495
- for (const entry of entries) {
496
- if (!entry || typeof entry !== 'object') continue;
497
- const rule = normalizeIgnoreRule(entry.rule);
498
- const value = normalizeIgnoreValue(entry.value);
499
- if (!rule || !value) continue;
500
- const normalized = { rule, value };
501
- const files = uniqueStrings([
502
- ...(typeof entry.file === 'string' && entry.file.trim() ? [entry.file.trim()] : []),
503
- ...(Array.isArray(entry.files) ? entry.files.filter(v => typeof v === 'string' && v.trim()).map(v => v.trim()) : []),
504
- ]);
505
- if (files.length > 0) normalized.files = files;
506
- if (typeof entry.reason === 'string' && entry.reason.trim()) {
507
- normalized.reason = entry.reason.trim();
508
- }
509
- if (typeof entry.createdAt === 'string' && entry.createdAt.trim()) {
510
- normalized.createdAt = entry.createdAt.trim();
511
- }
512
- out.push(normalized);
513
- }
514
- return out;
515
- }
516
-
517
- function mergeIgnoreValues(existing, incoming) {
518
- const map = new Map();
519
- for (const entry of normalizeIgnoreValueEntries(existing)) {
520
- map.set(`${entry.rule}\0${entry.value}\0${ignoreValueFilesKey(entry.files)}`, entry);
521
- }
522
- for (const entry of normalizeIgnoreValueEntries(incoming)) {
523
- map.set(`${entry.rule}\0${entry.value}\0${ignoreValueFilesKey(entry.files)}`, entry);
524
- }
525
- return Array.from(map.values());
526
- }
527
-
528
- function ignoreValueFilesKey(files) {
529
- return Array.isArray(files) && files.length > 0 ? files.join('\x1f') : '';
530
- }
531
-
532
- export function readCache(cwd) {
533
- const raw = safeReadJson(getCachePath(cwd));
534
- if (!raw || typeof raw !== 'object' || raw.version !== 1) {
535
- return { version: 1, sessions: {} };
536
- }
537
- return {
538
- version: 1,
539
- sessions: raw.sessions && typeof raw.sessions === 'object' ? raw.sessions : {},
540
- };
541
- }
542
-
543
- export function persistCache(cwd, cache) {
544
- const sessions = cache.sessions || {};
545
- const ids = Object.keys(sessions);
546
- if (ids.length > CACHE_MAX_SESSIONS) {
547
- // Garbage-collect oldest sessions by updatedAt.
548
- const ordered = ids
549
- .map((id) => [id, sessions[id]?.updatedAt || 0])
550
- .sort((a, b) => b[1] - a[1])
551
- .slice(0, CACHE_MAX_SESSIONS);
552
- const next = {};
553
- for (const [id] of ordered) next[id] = sessions[id];
554
- cache = { ...cache, sessions: next };
555
- }
556
- const target = getCachePath(cwd);
557
- try {
558
- ensureHookGitExcludes(cwd);
559
- fs.mkdirSync(path.dirname(target), { recursive: true });
560
- fs.writeFileSync(target, JSON.stringify(cache));
561
- return true;
562
- } catch {
563
- return false;
564
- }
565
- }
566
-
567
- export function ensureHookGitExcludes(cwd = process.cwd()) {
568
- try {
569
- const target = resolveHookGitExcludeTarget(cwd);
570
- if (!target) {
571
- return { mode: 'none', changed: false, patterns: [...HOOK_LOCAL_IGNORE_PATTERNS] };
572
- }
573
-
574
- const patterns = target.patternPrefix
575
- ? HOOK_LOCAL_IGNORE_PATTERNS.map((pattern) => `${target.patternPrefix}/${pattern}`)
576
- : [...HOOK_LOCAL_IGNORE_PATTERNS];
577
- const markerSuffix = target.patternPrefix || '.';
578
- const markerOpen = `${HOOK_IGNORE_MARKER_OPEN} ${markerSuffix}`;
579
- const markerClose = `${HOOK_IGNORE_MARKER_CLOSE} ${markerSuffix}`;
580
- const existing = fs.existsSync(target.path) ? fs.readFileSync(target.path, 'utf-8') : '';
581
- const block = [markerOpen, ...patterns, markerClose].join('\n');
582
- const markerRe = new RegExp(`${escapeRegExp(markerOpen)}[\\s\\S]*?${escapeRegExp(markerClose)}`);
583
-
584
- let updated;
585
- if (markerRe.test(existing)) {
586
- updated = existing.replace(markerRe, block);
587
- } else {
588
- const prefix = existing.length === 0 ? '' : existing.endsWith('\n') ? existing : `${existing}\n`;
589
- updated = `${prefix}${prefix.endsWith('\n\n') || prefix === '' ? '' : '\n'}${block}\n`;
590
- }
591
-
592
- if (updated !== existing) {
593
- fs.mkdirSync(path.dirname(target.path), { recursive: true });
594
- fs.writeFileSync(target.path, updated, 'utf-8');
595
- }
596
-
597
- return {
598
- mode: 'git-info-exclude',
599
- file: path.relative(path.resolve(cwd), target.path).split(path.sep).join('/'),
600
- changed: updated !== existing,
601
- patterns,
602
- };
603
- } catch {
604
- return { mode: 'error', changed: false, patterns: [...HOOK_LOCAL_IGNORE_PATTERNS] };
605
- }
606
- }
607
-
608
- function resolveHookGitExcludeTarget(cwd) {
609
- const start = path.resolve(cwd);
610
- let dir = start;
611
- while (true) {
612
- const dotGit = path.join(dir, '.git');
613
- if (fs.existsSync(dotGit)) {
614
- const gitDir = resolveGitDir(dotGit, dir);
615
- if (!gitDir) return null;
616
- const relPrefix = path.relative(dir, start).split(path.sep).join('/');
617
- return {
618
- path: path.join(gitDir, 'info', 'exclude'),
619
- patternPrefix: relPrefix && relPrefix !== '.' ? relPrefix : '',
620
- };
621
- }
622
- const parent = path.dirname(dir);
623
- if (parent === dir) return null;
624
- dir = parent;
625
- }
626
- }
627
-
628
- function resolveGitDir(dotGit, worktreeDir) {
629
- const stat = fs.statSync(dotGit);
630
- if (stat.isDirectory()) return dotGit;
631
- if (!stat.isFile()) return null;
632
-
633
- const body = fs.readFileSync(dotGit, 'utf-8').trim();
634
- const match = body.match(/^gitdir:\s*(.+)$/i);
635
- if (!match) return null;
636
- return path.isAbsolute(match[1]) ? match[1] : path.resolve(worktreeDir, match[1]);
637
- }
638
-
639
- function escapeRegExp(value) {
640
- return String(value).replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
641
- }
642
-
643
- function ensureSession(cache, sessionId) {
644
- if (!cache.sessions[sessionId]) {
645
- cache.sessions[sessionId] = { updatedAt: Date.now(), files: {} };
646
- }
647
- return cache.sessions[sessionId];
648
- }
649
-
650
- function ensureFile(cache, sessionId, filePath) {
651
- const session = ensureSession(cache, sessionId);
652
- if (!session.files[filePath]) {
653
- session.files[filePath] = { editCount: 0, findings: [] };
654
- }
655
- return session.files[filePath];
656
- }
657
-
658
- export function bumpEditCount(cache, sessionId, filePath) {
659
- const fileEntry = ensureFile(cache, sessionId, filePath);
660
- fileEntry.editCount = (fileEntry.editCount || 0) + 1;
661
- ensureSession(cache, sessionId).updatedAt = Date.now();
662
- return fileEntry.editCount;
663
- }
664
-
665
- export function suppressionNotice(filePath) {
666
- return `${ENVELOPE_PREFIX} Suppressing further design hints on ${filePath}. More than ${EDIT_COUNT_THRESHOLD} edits in this session reached. Run ${MONODESIGN_COMMAND} audit to revisit.`;
667
- }
668
-
669
- // Glob → RegExp. Supports `**`, `*`, `?`, and `{a,b}` alternation.
670
- function globToRegex(glob) {
671
- let re = '^';
672
- let i = 0;
673
- while (i < glob.length) {
674
- const c = glob[i];
675
- if (c === '*') {
676
- if (glob[i + 1] === '*') {
677
- re += '.*';
678
- i += 2;
679
- if (glob[i] === '/') i += 1;
680
- } else {
681
- re += '[^/]*';
682
- i += 1;
683
- }
684
- } else if (c === '?') {
685
- re += '[^/]';
686
- i += 1;
687
- } else if (c === '{') {
688
- const end = glob.indexOf('}', i);
689
- if (end === -1) { re += '\\{'; i += 1; continue; }
690
- const parts = glob.slice(i + 1, end).split(',').map((p) => p.replace(/[.+^$()|[\]\\]/g, '\\$&'));
691
- re += `(?:${parts.join('|')})`;
692
- i = end + 1;
693
- } else if (/[.+^$()|[\]\\]/.test(c)) {
694
- re += `\\${c}`;
695
- i += 1;
696
- } else {
697
- re += c;
698
- i += 1;
699
- }
700
- }
701
- re += '$';
702
- return new RegExp(re);
703
- }
704
-
705
- export function matchesAnyGlob(filePath, globs) {
706
- if (!Array.isArray(globs) || globs.length === 0) return false;
707
- const normalized = filePath.split(path.sep).join('/');
708
- for (const glob of globs) {
709
- try {
710
- const re = globToRegex(String(glob));
711
- if (re.test(normalized)) return true;
712
- // Match against basename too for convenience: `*.generated.tsx` should
713
- // catch `src/foo.generated.tsx` without requiring `**/`.
714
- const base = normalized.split('/').pop();
715
- if (re.test(base)) return true;
716
- } catch {
717
- /* malformed glob, skip */
718
- }
719
- }
720
- return false;
721
- }
722
-
723
- export function filterFindings(findings, _content, _ext, config) {
724
- if (!Array.isArray(findings) || findings.length === 0) return [];
725
- const ignoreRules = new Set((config.ignoreRules || []).map((rule) => normalizeIgnoreRule(rule)));
726
- const ignoreValues = normalizeIgnoreValueEntries(config.ignoreValues || []);
727
- return findings.filter((f) => {
728
- if (!f || typeof f !== 'object') return false;
729
- if (ignoreRules.has(normalizeIgnoreRule(f.antipattern))) return false;
730
- if (isIgnoredFindingValue(f, ignoreValues)) return false;
731
- return true;
732
- });
733
- }
734
-
735
- function isIgnoredFindingValue(finding, ignoreValues) {
736
- if (!Array.isArray(ignoreValues) || ignoreValues.length === 0) return false;
737
- const rule = normalizeIgnoreRule(finding.antipattern);
738
- if (!rule) return false;
739
- // File-scoped wildcards suppress rules with no extractable value, such as side-tab.
740
- const value = extractFindingIgnoreValue(finding);
741
- return ignoreValues.some((entry) => {
742
- if (entry.rule !== rule) return false;
743
- const wildcardValue = entry.value === '*';
744
- if (!wildcardValue && (!value || !ignoreValueMatches(rule, entry.value, value))) return false;
745
- if (!Array.isArray(entry.files) || entry.files.length === 0) return !wildcardValue;
746
- return findingMatchesScopedIgnoreFile(finding, entry.files);
747
- });
748
- }
749
-
750
- function findingMatchesScopedIgnoreFile(finding, globs) {
751
- const filePath = String(finding?.file || '').trim();
752
- if (!filePath) return false;
753
- if (matchesAnyGlob(filePath, globs)) return true;
754
-
755
- const normalized = filePath.split(path.sep).join('/');
756
- const parts = normalized.split('/').filter(Boolean);
757
- for (let i = 0; i < parts.length; i++) {
758
- const suffix = parts.slice(i).join('/');
759
- if (matchesAnyGlob(suffix, globs)) return true;
760
- }
761
- return false;
762
- }
763
-
764
- export function extractFindingIgnoreValue(finding) {
765
- if (!finding || typeof finding !== 'object') return '';
766
- const rule = normalizeIgnoreRule(finding.antipattern);
767
- const directValueRules = new Set([
768
- 'overused-font',
769
- 'bounce-easing',
770
- 'design-system-font',
771
- 'design-system-color',
772
- 'design-system-radius',
773
- ]);
774
- if (!directValueRules.has(rule)) return '';
775
- return normalizeIgnoreValue(extractFindingIgnoreValueRaw(finding, rule));
776
- }
777
-
778
- function extractFindingIgnoreValueRaw(finding, rule = normalizeIgnoreRule(finding?.antipattern)) {
779
- const direct = cleanIgnoreValueDisplay(finding.ignoreValue || finding.value || '');
780
- if (direct) return direct;
781
-
782
- const candidates = [finding.detail, finding.snippet].filter((v) => typeof v === 'string' && v);
783
- for (const text of candidates) {
784
- if (rule === 'bounce-easing') {
785
- const motion = extractMotionIgnoreValue(text);
786
- if (motion) return motion;
787
- continue;
788
- }
789
-
790
- const primary = text.match(/Primary font:\s*([^()\n;]+)/i);
791
- if (primary) return cleanIgnoreValueDisplay(primary[1]);
792
-
793
- const family = text.match(/font-family\s*:\s*["']?([^'",;\n]+)/i);
794
- if (family) return cleanIgnoreValueDisplay(family[1]);
795
-
796
- const google = text.match(/[?&]family=([^&:;\n]+)/i);
797
- if (google) {
798
- try {
799
- return cleanIgnoreValueDisplay(decodeURIComponent(google[1]));
800
- } catch {
801
- return cleanIgnoreValueDisplay(google[1]);
802
- }
803
- }
804
- }
805
-
806
- return '';
807
- }
808
-
809
- function extractMotionIgnoreValue(text) {
810
- const tailwind = text.match(/\banimate-bounce\b/i);
811
- if (tailwind) return cleanIgnoreValueDisplay(tailwind[0]);
812
-
813
- const bezier = text.match(/cubic-bezier\([^)]+\)/i);
814
- if (bezier) return cleanIgnoreValueDisplay(bezier[0]);
815
-
816
- const animation = text.match(/animation(?:-name)?\s*:\s*([^;\n]+)/i);
817
- if (animation) {
818
- const token = animation[1]
819
- .split(/[,\s]+/)
820
- .find((part) => /bounce|elastic|wobble|jiggle|spring/i.test(part));
821
- if (token) return cleanIgnoreValueDisplay(token);
822
- }
823
-
824
- return '';
825
- }
826
-
827
- function cleanIgnoreValueDisplay(value) {
828
- return String(value || '')
829
- .trim()
830
- .replace(/^["']|["']$/g, '')
831
- .replace(/\+/g, ' ')
832
- .replace(/\s+/g, ' ');
833
- }
834
-
835
- export function dedupeAgainstCache(findings, cache, sessionId, filePath) {
836
- if (!Array.isArray(findings) || findings.length === 0) return [];
837
- const fileEntry = ensureFile(cache, sessionId, filePath);
838
- const known = new Set(fileEntry.findings || []);
839
- const fresh = [];
840
- for (const f of findings) {
841
- const key = findingCacheKey(f);
842
- if (known.has(key)) continue;
843
- known.add(key);
844
- fresh.push(f);
845
- }
846
- return fresh;
847
- }
848
-
849
- export function rememberFindings(cache, sessionId, filePath, findings) {
850
- const fileEntry = ensureFile(cache, sessionId, filePath);
851
- const known = new Set(fileEntry.findings || []);
852
- for (const f of findings) known.add(findingCacheKey(f));
853
- fileEntry.findings = Array.from(known);
854
- ensureSession(cache, sessionId).updatedAt = Date.now();
855
- }
856
-
857
- function findingCacheKey(finding) {
858
- const line = finding?.line || 0;
859
- const value = extractFindingIgnoreValue(finding);
860
- if (line > 0 && value) return `${finding.antipattern}:${line}:${value}`;
861
- if (line > 0) return `${finding.antipattern}:${line}`;
862
- if (value) return `${finding.antipattern}:0:${value}`;
863
- const snippet = String(finding?.snippet || '').trim().slice(0, 80);
864
- return snippet ? `${finding.antipattern}:0:${snippet}` : `${finding.antipattern}:0`;
865
- }
866
-
867
- export function renderTemplate(findings, filePath, config, opts = {}) {
868
- if (!Array.isArray(findings) || findings.length === 0) return '';
869
- const limits = config?.limits || DEFAULT_CONFIG.limits;
870
- const cap = Math.max(1, limits.maxFindings || DEFAULT_CONFIG.limits.maxFindings);
871
- const maxChars = Math.max(500, limits.maxChars || DEFAULT_CONFIG.limits.maxChars);
872
-
873
- const cwd = opts.cwd || process.cwd();
874
- const display = relativize(filePath, cwd);
875
- const total = findings.length;
876
- const shown = findings.slice(0, cap);
877
- const remaining = total - shown.length;
878
-
879
- const header = `${ENVELOPE_PREFIX} Design hook findings requiring review in ${display} (${total} issue(s)):`;
880
- const lines = shown.map((f) => formatFindingLine(f));
881
- const more = remaining > 0
882
- ? `... and ${remaining} more (see ${MONODESIGN_COMMAND} audit).`
883
- : null;
884
- const footer = directiveFooter(display);
885
-
886
- const blocks = [header, ...lines];
887
- if (more) blocks.push(more);
888
- blocks.push('');
889
- blocks.push(footer);
890
- let text = blocks.join('\n');
891
-
892
- if (text.length > maxChars) {
893
- text = clampToBudget(header, lines, more, footer, maxChars);
894
- }
895
- return text;
896
- }
897
-
898
- function renderGroupedTemplate(groups, config, opts = {}) {
899
- const realGroups = groups.filter((group) => Array.isArray(group.findings) && group.findings.length > 0);
900
- if (realGroups.length === 0) return '';
901
- if (realGroups.length === 1) {
902
- const [group] = realGroups;
903
- return renderTemplate(group.findings, group.filePath, config, opts);
904
- }
905
-
906
- const limits = config?.limits || DEFAULT_CONFIG.limits;
907
- const cap = Math.max(1, limits.maxFindings || DEFAULT_CONFIG.limits.maxFindings);
908
- const maxChars = Math.max(500, limits.maxChars || DEFAULT_CONFIG.limits.maxChars);
909
- const cwd = opts.cwd || process.cwd();
910
- const total = realGroups.reduce((sum, group) => sum + group.findings.length, 0);
911
- const header = `${ENVELOPE_PREFIX} Design hook findings requiring review across ${realGroups.length} files (${total} issue(s)):`;
912
- const lines = [];
913
- let shownCount = 0;
914
-
915
- for (const group of realGroups) {
916
- const display = relativize(group.filePath, cwd);
917
- lines.push(`${display} (${group.findings.length} issue(s)):`);
918
- const remainingCap = Math.max(0, cap - shownCount);
919
- const shown = group.findings.slice(0, remainingCap);
920
- for (const finding of shown) {
921
- lines.push(formatFindingLine(finding));
922
- }
923
- shownCount += shown.length;
924
- const hidden = group.findings.length - shown.length;
925
- if (hidden > 0) {
926
- lines.push(`- ... ${hidden} more in ${display} (see ${MONODESIGN_COMMAND} audit).`);
927
- }
928
- }
929
-
930
- const footer = directiveFooter('the affected files', { grouped: true });
931
- let text = [header, ...lines, '', footer].join('\n');
932
- if (text.length > maxChars) {
933
- text = clampGroupedToBudget(header, lines, footer, maxChars);
934
- }
935
- return text;
936
- }
937
-
938
- function clampGroupedToBudget(header, lines, footer, maxChars) {
939
- const assemble = (linesArr, omitted) => [
940
- header,
941
- ...linesArr,
942
- ...(omitted ? [`... and more (see ${MONODESIGN_COMMAND} audit).`] : []),
943
- '',
944
- footer,
945
- ].join('\n');
946
-
947
- let working = lines.slice();
948
- let omitted = false;
949
- let assembled = assemble(working, omitted);
950
- while (assembled.length > maxChars && working.length > 1) {
951
- working.pop();
952
- omitted = true;
953
- assembled = assemble(working, omitted);
954
- }
955
- if (assembled.length > maxChars) {
956
- assembled = `${assembled.slice(0, maxChars - 1)}…`;
957
- }
958
- return assembled;
959
- }
960
-
961
- function clampToBudget(header, lines, more, footer, maxChars) {
962
- const assemble = (linesArr, moreText) => {
963
- const blocks = [header, ...linesArr];
964
- if (moreText) blocks.push(moreText);
965
- blocks.push('');
966
- blocks.push(footer);
967
- return blocks.join('\n');
968
- };
969
-
970
- let working = lines.slice();
971
- let moreText = more;
972
- let assembled = assemble(working, moreText);
973
- while (assembled.length > maxChars && working.length > 1) {
974
- working.pop();
975
- moreText = `... and more (see ${MONODESIGN_COMMAND} audit).`;
976
- assembled = assemble(working, moreText);
977
- }
978
- if (assembled.length > maxChars) {
979
- assembled = `${assembled.slice(0, maxChars - 1)}…`;
980
- }
981
- return assembled;
982
- }
983
-
984
- function formatFindingLine(f) {
985
- const prefix = f.line && f.line > 0 ? `- L${f.line}` : '-';
986
- const desc = (f.description || '').trim();
987
- const name = (f.name || '').trim();
988
- // Description from the registry already ends in punctuation; join with a
989
- // single space. `name` may have a trailing period already, keep it clean.
990
- const nameSegment = name ? `${name.replace(/\.+\s*$/, '')}.` : '';
991
- const ignoreCommand = formatFindingIgnoreCommand(f);
992
- const ignoreSegment = ignoreCommand
993
- ? ` If the user explicitly confirms this value is intentional: \`${ignoreCommand}\`.`
994
- : '';
995
- return `${prefix} [${f.antipattern}] ${nameSegment} ${desc}${ignoreSegment}`.replace(/\s+/g, ' ').trim();
996
- }
997
-
998
- function formatFindingIgnoreCommand(finding) {
999
- if (!finding || typeof finding !== 'object') return '';
1000
- const rule = normalizeIgnoreRule(finding.antipattern);
1001
- if (!rule) return '';
1002
- const normalizedValue = extractFindingIgnoreValue(finding);
1003
- if (!normalizedValue) return '';
1004
- const value = extractFindingIgnoreValueRaw(finding);
1005
- const valueArg = quoteCommandArg(value);
1006
- const reason = quoteCommandArg(`User confirmed ${value} is intentional`);
1007
- return `${MONODESIGN_COMMAND} hooks ignore-value ${rule} ${valueArg} --shared --reason ${reason}`;
1008
- }
1009
-
1010
- function quoteCommandArg(value) {
1011
- const text = String(value || '').trim();
1012
- if (/^[A-Za-z0-9._:-]+$/.test(text)) return text;
1013
- return `"${text.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
1014
- }
1015
-
1016
- function relativize(filePath, cwd) {
1017
- try {
1018
- const rel = path.relative(cwd, filePath).split(path.sep).join('/');
1019
- if (!rel || rel.startsWith('..')) return filePath;
1020
- return rel.split(path.sep).join('/');
1021
- } catch {
1022
- return filePath;
1023
- }
1024
- }
1025
-
1026
- // Codex `apply_patch` exposes the raw patch in `tool_input.command`, not
1027
- // `tool_input.file_path`. Claude Code may send both; parse the patch body
1028
- // so we can scan the file(s) the tool actually touched.
1029
- // https://developers.openai.com/codex/hooks#posttooluse
1030
- const APPLY_PATCH_FILE_RE = /^\*\*\* (?:Update|Add) File: (.+)$/gm;
1031
-
1032
- export function parseApplyPatchPaths(command, projectCwd) {
1033
- if (!command || typeof command !== 'string') return [];
1034
- const out = [];
1035
- for (const m of command.matchAll(APPLY_PATCH_FILE_RE)) {
1036
- let p = (m[1] || '').trim();
1037
- if (!p) continue;
1038
- if (!path.isAbsolute(p)) p = path.resolve(projectCwd, p);
1039
- out.push(p);
1040
- }
1041
- return out;
1042
- }
1043
-
1044
- export function resolveTargetFiles(event, projectCwd) {
1045
- const ti = event?.tool_input;
1046
- const out = [];
1047
- const add = (filePath) => {
1048
- if (typeof filePath !== 'string' || !filePath) return;
1049
- if (!out.includes(filePath)) out.push(filePath);
1050
- };
1051
-
1052
- if (event?.tool_name === 'apply_patch' && ti && typeof ti.command === 'string') {
1053
- for (const filePath of parseApplyPatchPaths(ti.command, projectCwd)) add(filePath);
1054
- }
1055
- if (ti && typeof ti.file_path === 'string' && ti.file_path) {
1056
- add(ti.file_path);
1057
- }
1058
- // Cursor Write / StrReplace use `path`, not `file_path`.
1059
- if (ti && typeof ti.path === 'string' && ti.path) {
1060
- add(ti.path);
1061
- }
1062
- if (typeof event?.file_path === 'string' && event.file_path) {
1063
- add(event.file_path);
1064
- }
1065
- return out;
1066
- }
1067
-
1068
- export function resolveHarness(env = {}, event = null) {
1069
- const explicit = env?.MONODESIGN_HOOK_HARNESS;
1070
- if (explicit === 'cursor') return 'cursor';
1071
- if (explicit === 'github') return 'github';
1072
- if (explicit === 'claude' || explicit === 'codex') return 'claude';
1073
- // GitHub Copilot's postToolUse event uses camelCase `toolName`/`toolArgs` and
1074
- // has no `tool_name`/`tool_input`. That shape is the discriminator.
1075
- if (event && typeof event === 'object'
1076
- && (typeof event.toolName === 'string' || event.toolArgs !== undefined)
1077
- && event.tool_name === undefined && event.tool_input === undefined) {
1078
- return 'github';
1079
- }
1080
- if (typeof event?.conversation_id === 'string' && event.conversation_id) return 'cursor';
1081
- return 'claude';
1082
- }
1083
-
1084
- // GitHub Copilot's postToolUse payload is
1085
- // { sessionId, timestamp, cwd, toolName, toolArgs, toolResult }
1086
- // mapped onto the internal `{ tool_name, tool_input, cwd, session_id }` shape.
1087
- // `toolArgs` shape depends on the tool: the `edit`/`create`/`view` tools send a
1088
- // JSON *string* (double-encoded) carrying the file under `path`, e.g.
1089
- // "{\"path\":\"/abs/app.tsx\",\"old_str\":\"...\",\"new_str\":\"...\"}",
1090
- // while `apply_patch` sends a raw OpenAI-format patch string (handled below in
1091
- // normalizeGitHubEvent). The detector reads the file from disk after the tool
1092
- // ran, so only the path (not the proposed content) is needed here.
1093
- export function parseGitHubToolArgs(toolArgs) {
1094
- if (toolArgs && typeof toolArgs === 'object' && !Array.isArray(toolArgs)) return toolArgs;
1095
- if (typeof toolArgs === 'string' && toolArgs.trim()) {
1096
- try {
1097
- const parsed = JSON.parse(toolArgs);
1098
- return parsed && typeof parsed === 'object' && !Array.isArray(parsed) ? parsed : {};
1099
- } catch {
1100
- return {};
1101
- }
1102
- }
1103
- return {};
1104
- }
1105
-
1106
- // Copilot's `apply_patch` tool (used by interactive sessions and the cloud
1107
- // agent) sends a raw OpenAI-format patch string in toolArgs, not JSON:
1108
- // *** Begin Patch
1109
- // *** Add File: /abs/app.css
1110
- // +body { ... }
1111
- // *** End Patch
1112
- // The `view`/`edit`/`create` tools (seen in `copilot -p` runs) instead send a
1113
- // JSON string with the path under `path`. Both must map onto the internal shape.
1114
- const APPLY_PATCH_MARKER = /\*\*\* (?:Begin Patch|Add File:|Update File:|Delete File:)/;
1115
-
1116
- function looksLikeApplyPatch(rawArgs) {
1117
- if (typeof rawArgs !== 'string' || !APPLY_PATCH_MARKER.test(rawArgs)) return false;
1118
- // Guard against an edit/create payload whose edited *content* happens to
1119
- // contain patch markers: that payload is a JSON object string, whereas a real
1120
- // apply_patch payload is a raw patch string that does not parse as JSON. Only
1121
- // treat non-JSON-object strings as apply_patch so edit events still get their
1122
- // `path` extracted.
1123
- try {
1124
- const parsed = JSON.parse(rawArgs);
1125
- if (parsed && typeof parsed === 'object') return false;
1126
- } catch { /* not JSON → genuine raw patch */ }
1127
- return true;
1128
- }
1129
-
1130
- function applyPatchText(rawArgs) {
1131
- if (typeof rawArgs === 'string') {
1132
- if (APPLY_PATCH_MARKER.test(rawArgs)) return rawArgs;
1133
- // Defensive: a future Copilot build might JSON-wrap the patch.
1134
- const parsed = parseGitHubToolArgs(rawArgs);
1135
- return parsed.patch || parsed.input || parsed.command || '';
1136
- }
1137
- if (rawArgs && typeof rawArgs === 'object' && !Array.isArray(rawArgs)) {
1138
- return rawArgs.patch || rawArgs.input || rawArgs.command || '';
1139
- }
1140
- return '';
1141
- }
1142
-
1143
- function normalizeGitHubEvent(event, projectCwd) {
1144
- const cwd = event.cwd || envProjectDir(projectCwd) || projectCwd;
1145
- const sessionId = event.sessionId || event.session_id || 'unknown';
1146
- const toolName = event.toolName || event.tool_name || null;
1147
- const toolInput = event.tool_input && typeof event.tool_input === 'object' ? { ...event.tool_input } : {};
1148
- const rawArgs = event.toolArgs;
1149
-
1150
- let normalizedToolName = toolName;
1151
- if (toolName === 'apply_patch' || looksLikeApplyPatch(rawArgs)) {
1152
- // resolveTargetFiles() reads the touched paths from tool_input.command when
1153
- // tool_name is 'apply_patch', so normalize the name even if a future build
1154
- // sends the patch under a different tool label.
1155
- const patch = applyPatchText(rawArgs);
1156
- if (patch) {
1157
- toolInput.command = patch;
1158
- normalizedToolName = 'apply_patch';
1159
- }
1160
- } else {
1161
- const args = parseGitHubToolArgs(rawArgs);
1162
- const filePath = args.path || args.file_path || args.filePath || args.target_file;
1163
- if (typeof filePath === 'string' && filePath) toolInput.file_path = filePath;
1164
- }
1165
-
1166
- return {
1167
- ...event,
1168
- cwd,
1169
- session_id: sessionId,
1170
- tool_name: normalizedToolName,
1171
- tool_input: toolInput,
1172
- };
1173
- }
1174
-
1175
- export function normalizeHookEvent(event, projectCwd, harness = 'claude') {
1176
- if (!event || typeof event !== 'object') return event;
1177
- if (harness === 'github') return normalizeGitHubEvent(event, projectCwd);
1178
- if (harness !== 'cursor') return event;
1179
-
1180
- const cwd = event.cwd
1181
- || (Array.isArray(event.workspace_roots) && event.workspace_roots[0])
1182
- || envProjectDir(projectCwd)
1183
- || projectCwd;
1184
- const sessionId = event.session_id || event.conversation_id || 'unknown';
1185
-
1186
- const ti = event.tool_input && typeof event.tool_input === 'object' ? event.tool_input : {};
1187
- const filePath = ti.file_path || ti.path || event.file_path;
1188
- if (filePath) {
1189
- return {
1190
- ...event,
1191
- cwd,
1192
- session_id: sessionId,
1193
- tool_input: { ...ti, file_path: filePath },
1194
- };
1195
- }
1196
-
1197
- return { ...event, cwd, session_id: sessionId };
1198
- }
1199
-
1200
- function envProjectDir(fallback) {
1201
- if (typeof process.env.CURSOR_PROJECT_DIR === 'string' && process.env.CURSOR_PROJECT_DIR) {
1202
- return process.env.CURSOR_PROJECT_DIR;
1203
- }
1204
- return fallback;
1205
- }
1206
-
1207
- // UI components often keep slop in a sibling/co-located stylesheet while the
1208
- // JSX edit is what triggered PostToolUse. Scan those styles too so an App.jsx
1209
- // patch doesn't report "clean" while styles.css still has Inter/bounce/etc.
1210
- const UI_CODE_EXTS = new Set(['.jsx', '.tsx', '.vue', '.svelte', '.astro']);
1211
- const STYLE_EXTS = new Set(['.css', '.scss', '.sass', '.less']);
1212
- const CO_SCAN_STYLE_NAMES = [
1213
- 'styles.css', 'styles.scss', 'styles.sass', 'styles.less',
1214
- 'index.css', 'index.scss', 'index.sass', 'index.less',
1215
- 'global.css', 'global.scss', 'global.sass', 'global.less',
1216
- 'globals.css', 'globals.scss', 'globals.sass', 'globals.less',
1217
- ];
1218
- const MAX_SCAN_TARGETS = 6;
1219
-
1220
- const STATIC_STYLE_IMPORT_RE = /import\s+(?:[\w*{}\s,$]+\s+from\s+)?['"]([^'"]+\.(?:css|scss|sass|less))['"]/gi;
1221
-
1222
- function hasPathTraversal(filePath) {
1223
- return typeof filePath === 'string' && filePath.includes('..');
1224
- }
1225
-
1226
- function isInsideProject(filePath, projectCwd) {
1227
- if (!filePath || !projectCwd || hasPathTraversal(filePath)) return false;
1228
- try {
1229
- const rel = path.relative(projectCwd, filePath).split(path.sep).join('/');
1230
- return rel === '' || (!rel.startsWith('..') && !path.isAbsolute(rel));
1231
- } catch {
1232
- return false;
1233
- }
1234
- }
1235
-
1236
- export function parseStaticStyleImports(content, fromFile, projectCwd) {
1237
- if (!content || typeof content !== 'string') return [];
1238
- const dir = path.dirname(fromFile);
1239
- const out = [];
1240
- for (const m of content.matchAll(STATIC_STYLE_IMPORT_RE)) {
1241
- let p = (m[1] || '').trim();
1242
- if (!p) continue;
1243
- if (p.startsWith('.')) p = path.resolve(dir, p);
1244
- else if (!path.isAbsolute(p)) p = path.resolve(projectCwd, p);
1245
- if (!isInsideProject(p, projectCwd)) continue;
1246
- out.push(p);
1247
- }
1248
- return out;
1249
- }
1250
-
1251
- export function coLocatedStylesheets(filePath) {
1252
- const dir = path.dirname(filePath);
1253
- const base = path.basename(filePath, path.extname(filePath));
1254
- const candidates = new Set([
1255
- path.join(dir, `${base}.css`),
1256
- path.join(dir, `${base}.module.css`),
1257
- path.join(dir, `${base}.scss`),
1258
- path.join(dir, `${base}.module.scss`),
1259
- path.join(dir, `${base}.sass`),
1260
- path.join(dir, `${base}.module.sass`),
1261
- path.join(dir, `${base}.less`),
1262
- path.join(dir, `${base}.module.less`),
1263
- ]);
1264
- for (const name of CO_SCAN_STYLE_NAMES) {
1265
- candidates.add(path.join(dir, name));
1266
- }
1267
- return [...candidates].filter((p) => fs.existsSync(p));
1268
- }
1269
-
1270
- export function normalizeScanTargets(primaryTargets, projectCwd) {
1271
- if (!Array.isArray(primaryTargets) || primaryTargets.length === 0) return [];
1272
- const ordered = [];
1273
- const seen = new Set();
1274
- const baseCwd = projectCwd || process.cwd();
1275
- const normalizeTarget = (p) => {
1276
- // Preserve literal `..` segments so downstream sensitive-path checks
1277
- // still fire. path.resolve would collapse `/foo/../etc/passwd`.
1278
- if (hasPathTraversal(p)) return p;
1279
- return path.isAbsolute(p) ? p : path.resolve(baseCwd, p);
1280
- };
1281
- const add = (p) => {
1282
- if (ordered.length >= MAX_SCAN_TARGETS) return;
1283
- const abs = normalizeTarget(p);
1284
- if (seen.has(abs)) return;
1285
- seen.add(abs);
1286
- ordered.push(abs);
1287
- return abs;
1288
- };
1289
-
1290
- for (const p of primaryTargets) add(p);
1291
- return ordered;
1292
- }
1293
-
1294
- export function expandScanTargets(primaryTargets, projectCwd) {
1295
- const ordered = normalizeScanTargets(primaryTargets, projectCwd);
1296
- if (ordered.length === 0) return [];
1297
- const seen = new Set(ordered);
1298
- const baseCwd = projectCwd || process.cwd();
1299
- const add = (p) => {
1300
- if (ordered.length >= MAX_SCAN_TARGETS) return;
1301
- const abs = hasPathTraversal(p) ? p : (path.isAbsolute(p) ? p : path.resolve(baseCwd, p));
1302
- if (seen.has(abs)) return;
1303
- seen.add(abs);
1304
- ordered.push(abs);
1305
- return abs;
1306
- };
1307
-
1308
- const normalizedPrimaries = [];
1309
- for (const p of ordered) normalizedPrimaries.push(p);
1310
-
1311
- for (const p of normalizedPrimaries) {
1312
- if (ordered.length >= MAX_SCAN_TARGETS) break;
1313
- if (!isInsideProject(p, baseCwd)) continue;
1314
- const ext = path.extname(p).toLowerCase();
1315
- if (STYLE_EXTS.has(ext) || !UI_CODE_EXTS.has(ext)) continue;
1316
-
1317
- let content = '';
1318
- try { content = fs.readFileSync(p, 'utf-8'); } catch { /* unreadable primary */ }
1319
-
1320
- for (const imp of parseStaticStyleImports(content, p, projectCwd)) {
1321
- add(imp);
1322
- if (ordered.length >= MAX_SCAN_TARGETS) break;
1323
- }
1324
- for (const col of coLocatedStylesheets(p)) {
1325
- add(col);
1326
- if (ordered.length >= MAX_SCAN_TARGETS) break;
1327
- }
1328
- }
1329
-
1330
- return ordered;
1331
- }
1332
-
1333
- export function writeAuditLog(env, entry, cwd = process.cwd()) {
1334
- // The event's project root (entry.cwd) when present, else the passed cwd. Both
1335
- // config reads and relative log paths resolve against this, since the hook
1336
- // process cwd can differ from the project being edited.
1337
- const baseCwd = entry && typeof entry.cwd === 'string' && entry.cwd ? entry.cwd : cwd;
1338
- // Env wins; otherwise fall back to the unified config's hook.auditLog path.
1339
- let target = env?.MONODESIGN_HOOK_LOG;
1340
- if (!target || typeof target !== 'string') {
1341
- try { target = readConfig(baseCwd).auditLog; } catch { target = null; }
1342
- }
1343
- if (!target || typeof target !== 'string') return false;
1344
- try {
1345
- let expanded;
1346
- if (target.startsWith('~/')) {
1347
- expanded = path.join(process.env.HOME || process.env.USERPROFILE || '.', target.slice(2));
1348
- } else if (path.isAbsolute(target)) {
1349
- expanded = target;
1350
- } else {
1351
- expanded = path.resolve(baseCwd, target);
1352
- }
1353
- fs.mkdirSync(path.dirname(expanded), { recursive: true });
1354
- const line = JSON.stringify({ ts: new Date().toISOString(), ...entry }) + '\n';
1355
- fs.appendFileSync(expanded, line);
1356
- return true;
1357
- } catch {
1358
- return false;
1359
- }
1360
- }
1361
-
1362
- // Packaged fallback: resolve the engine from an installed @monoes/monodesign.
1363
- function packagedDetectorPath() {
1364
- try {
1365
- return createRequire(import.meta.url).resolve('@monoes/monodesign/engine');
1366
- } catch {
1367
- return null;
1368
- }
1369
- }
1370
-
1371
- const DETECTOR_CANDIDATES = [
1372
- path.join(__dirname, 'detector', 'detect-antipatterns.mjs'),
1373
- path.join(__dirname, '..', '..', 'cli', 'engine', 'detect-antipatterns.mjs'),
1374
- path.join(__dirname, '..', '..', '..', 'cli', 'engine', 'detect-antipatterns.mjs'),
1375
- packagedDetectorPath(),
1376
- ].filter(Boolean);
1377
-
1378
- let detectorCache = null;
1379
- export async function loadDetector(candidates = DETECTOR_CANDIDATES) {
1380
- if (detectorCache) return detectorCache;
1381
- const found = candidates.find((c) => fs.existsSync(c));
1382
- if (!found) return null;
1383
- const mod = await import(pathToFileURL(found));
1384
- detectorCache = {
1385
- detectText: mod.detectText,
1386
- detectHtml: mod.detectHtml,
1387
- loadDesignSystemForCwd: mod.loadDesignSystemForCwd,
1388
- };
1389
- return detectorCache;
1390
- }
1391
-
1392
- // For tests: allow injecting a detector implementation.
1393
- export function setDetectorForTesting(impl) {
1394
- detectorCache = impl;
1395
- }
1396
-
1397
- // ────────────────────────────────────────────────────────────────────────
1398
- // Nudge/steer messages for the no-silent-fires policy.
1399
- //
1400
- // The hook is designed to be a conversational presence: every fire that
1401
- // actually scans a file emits a developer-role message into the model's
1402
- // next turn. Three states map to three templates:
1403
- //
1404
- // 1. **Fresh findings** → `renderTemplate` (existing, imperative).
1405
- // 2. **Pending findings** → `renderPendingAck` (re-nudge for issues the
1406
- // model was already told about in this
1407
- // session but hasn't fixed yet).
1408
- // 3. **Truly clean** → `renderCleanAck` (short positive nudge that
1409
- // keeps the design discipline in context).
1410
- //
1411
- // All three are short (≤ ~40 tokens each) so the cumulative cost stays
1412
- // bounded across a long active editing session. Users who explicitly want
1413
- // silence-on-clean can set `MONODESIGN_HOOK_QUIET=1` — runHook checks that
1414
- // env before emitting #2 or #3.
1415
- //
1416
- // Why not stay silent on dedup-clean? Earlier versions did. The model
1417
- // quickly forgets the prior reminder once tool output scrolls past it, so
1418
- // re-nudging on the same file with a short "still pending" line keeps the
1419
- // pressure on. The wording deliberately points back to "earlier this
1420
- // session" so the model knows it's a re-mind, not a new finding.
1421
- // ────────────────────────────────────────────────────────────────────────
1422
-
1423
- const STEER_LINE = 'That does not mean the design is good: keep following the project design system and the monodesign skill guidance.';
1424
-
1425
- export function renderCleanAck(filePath, opts = {}) {
1426
- const cwd = opts.cwd || process.cwd();
1427
- const display = relativize(filePath, cwd);
1428
- return `${ENVELOPE_PREFIX} Design hook scanned ${display}. No deterministic design-quality issues found. ${STEER_LINE}`;
1429
- }
1430
-
1431
- export function renderPendingAck(filePath, knownFindings, opts = {}) {
1432
- const cwd = opts.cwd || process.cwd();
1433
- const display = relativize(filePath, cwd);
1434
- const count = knownFindings.length;
1435
- // `knownFindings` here are the cache strings like "side-tab:3".
1436
- const sample = knownFindings.slice(0, 3).join(', ');
1437
- const more = count > 3 ? `, +${count - 3} more` : '';
1438
- return `${ENVELOPE_PREFIX} Design hook scanned ${display}. Still has ${count} finding(s) flagged earlier this session (${sample}${more}). Handle them before finalizing — the previous reminder still applies.`;
1439
- }
1440
-
1441
- export function shouldEmitAckForFile(filePath, config = null) {
1442
- if (ACK_EXTS.has(path.extname(String(filePath || '')).toLowerCase())) return true;
1443
- // Configured html-engine extensions are declared UI markup, so they get the
1444
- // clean/pending acks; text-engine ones stay quiet like plain .ts/.js.
1445
- const configured = matchConfiguredExtension(filePath, config?.extensions);
1446
- return Boolean(configured && configured.engine === 'html');
1447
- }
1448
-
1449
- export function designSystemOptions(config, detector, projectCwd) {
1450
- if (config?.designSystem?.enabled === false) return {};
1451
- if (!detector || typeof detector.loadDesignSystemForCwd !== 'function') return {};
1452
- try {
1453
- const designSystem = detector.loadDesignSystemForCwd(projectCwd);
1454
- return designSystem ? { designSystem } : {};
1455
- } catch {
1456
- return {};
1457
- }
1458
- }
1459
-
1460
- export function appendDesignSystemNote(text, scanOptions) {
1461
- if (!text || !scanOptions?.designSystem?.mdNewerThanJson) return text;
1462
- return `${text}\n\n${ENVELOPE_PREFIX} DESIGN.md is newer than .monodesign/design.json. Run ${MONODESIGN_COMMAND} document to refresh the design-system sidecar.`;
1463
- }
1464
-
1465
- // The directive footer is the part of the hook output that steers model
1466
- // behavior. Three intentional moves:
1467
- // 1. **Imperative, not advisory.** "Handle these..." beats "Consider
1468
- // revising..." which the model treats as a soft suggestion it can
1469
- // override when the user asked for any kind of throwaway / demo UI.
1470
- // 2. **Explicit judgment clause.** Without it, the model will try to
1471
- // "fix" intentional motion, bad fixtures, anti-pattern examples in
1472
- // docs, or test cases. Naming the judgment inline beats hoping the
1473
- // model infers it from context.
1474
- // 3. **Acknowledgement instruction.** Hook output is injected as
1475
- // developer-role context, not a chat turn, so the user never sees the
1476
- // raw envelope. Asking the model to surface the resolution in its
1477
- // reply is the cheapest way to make the feedback loop visible.
1478
- function directiveFooter(display, opts = {}) {
1479
- const ignoreFileCommand = `${MONODESIGN_COMMAND} hooks ignore-file ${quoteCommandArg(display)}`;
1480
- const fileIgnoreGuidance = opts.grouped
1481
- ? `run \`${MONODESIGN_COMMAND} hooks ignore-file <path>\` for the specific file`
1482
- : `run \`${ignoreFileCommand}\``;
1483
- return [
1484
- 'Handle these before finalizing: fix findings that are real design problems, or explicitly classify contextually intentional findings as false positives. Acknowledge what you changed or why you are leaving a finding unchanged.',
1485
- '',
1486
- 'Use context judgment before editing. A finding is not automatically a defect; literal or domain-appropriate motion, intentional demos or fixtures, documentation of bad design, and user-confirmed choices can be valid as-is.',
1487
- '',
1488
- `Do not change intentional design just to satisfy the hook, and do not silence a real finding with an inline ignore comment to skip fixing it. Suppress a finding only after the user explicitly confirms it is intentional. Prefer a config ignore (one reviewable place, the commands below); reach for an inline \`monodesign-disable <rule>\` comment only when the waiver must travel with a file that leaves the repo, such as an exported or standalone document. Prefer the narrowest persisted exception: run the exact \`${MONODESIGN_COMMAND} hooks ignore-value ... --shared\` command shown next to a value-specific finding. For \`overused-font\`, use \`ignore-value\` for a specific font and use \`${MONODESIGN_COMMAND} hooks ignore-rule overused-font --all-values\` only when the user asks to ignore overused fonts generally. For file-specific findings without an ignore-value command, ${fileIgnoreGuidance}; use \`${MONODESIGN_COMMAND} hooks ignore-rule <id>\` only when the user asks to suppress the whole non-value-specific rule. Run ${MONODESIGN_COMMAND} audit for the full pass.`,
1489
- ].join('\n');
1490
- }
1491
-
1492
- /**
1493
- * Run the hook with explicit dependencies. Returns a result object:
1494
- * { exitCode, stdout, audit, reason? }
1495
- *
1496
- * Never throws. All errors are converted to `exitCode: 0` + audit entry.
1497
- */
1498
- export async function runHook({ stdinJson, env = {}, cwd = process.cwd(), now = Date.now, detector } = {}) {
1499
- const audit = { ts: new Date(now()).toISOString(), event: 'PostToolUse' };
1500
- const result = (extra) => ({ exitCode: 0, stdout: '', audit: { ...audit, ...extra } });
1501
-
1502
- try {
1503
- // Re-entrancy guard.
1504
- if (depthIsSet(env.MONODESIGN_HOOK_DEPTH) || depthIsSet(env.CLAUDE_HOOK_DEPTH)) {
1505
- return result({ reentrant: true, durationMs: 0 });
1506
- }
1507
-
1508
- if (truthy(env.MONODESIGN_HOOK_DISABLED)) {
1509
- return result({ skipped: 'env-disabled', durationMs: 0 });
1510
- }
1511
-
1512
- const started = Date.now();
1513
-
1514
- let event;
1515
- try {
1516
- event = typeof stdinJson === 'string' ? JSON.parse(stdinJson) : stdinJson;
1517
- } catch {
1518
- return result({ skipped: 'stdin-malformed', durationMs: Date.now() - started });
1519
- }
1520
- if (!event || typeof event !== 'object') {
1521
- return result({ skipped: 'stdin-empty', durationMs: Date.now() - started });
1522
- }
1523
-
1524
- const harness = resolveHarness(env, event);
1525
- event = normalizeHookEvent(event, cwd, harness);
1526
- audit.harness = harness;
1527
-
1528
- const sessionCwd = event.cwd || cwd;
1529
- const primaryFiles = normalizeScanTargets(resolveTargetFiles(event, sessionCwd), sessionCwd);
1530
- const projectCwd = resolveCacheCwd(primaryFiles[0], sessionCwd);
1531
- audit.cwd = projectCwd;
1532
- const primaryFileSet = new Set(primaryFiles);
1533
- const targetFiles = expandScanTargets(primaryFiles, projectCwd);
1534
- audit.session = event.session_id || null;
1535
- if (event.tool_name) audit.tool = event.tool_name;
1536
-
1537
- if (targetFiles.length === 0) {
1538
- return result({ skipped: 'no-file-path', durationMs: Date.now() - started });
1539
- }
1540
-
1541
- const config = readConfig(projectCwd);
1542
- if (config.enabled === false) {
1543
- return result({ skipped: 'config-disabled', durationMs: Date.now() - started });
1544
- }
1545
-
1546
- const platform = resolveProjectPlatform(projectCwd);
1547
- if (isNativePlatform(platform)) {
1548
- return result({ skipped: 'native-platform', platform, durationMs: Date.now() - started });
1549
- }
1550
-
1551
- const cache = readCache(projectCwd);
1552
- const sessionId = event.session_id || 'unknown';
1553
- const det = detector || await loadDetector();
1554
- if (!det || typeof det.detectText !== 'function') {
1555
- // Cache is not mutated yet at this point; nothing to persist.
1556
- return result({ skipped: 'detector-missing', durationMs: Date.now() - started });
1557
- }
1558
- const scanOptions = designSystemOptions(config, det, projectCwd);
1559
-
1560
- let pendingWinner = null;
1561
- let cleanWinner = null;
1562
- const freshGroups = [];
1563
- let suppressionWinner = null;
1564
- let detectorThrewAny = false;
1565
- let lastSkip = 'no-scannable-file';
1566
- let suppressedHit = false;
1567
- let cacheDirty = false;
1568
-
1569
- for (const filePath of targetFiles) {
1570
- audit.file = filePath;
1571
-
1572
- if (hasPathTraversal(filePath) || SENSITIVE_PATH.test(filePath)) {
1573
- lastSkip = 'sensitive';
1574
- continue;
1575
- }
1576
- if (GENERATED_PATH.test(filePath)) {
1577
- lastSkip = 'generated';
1578
- continue;
1579
- }
1580
-
1581
- const ext = path.extname(filePath).toLowerCase();
1582
- const configuredExt = matchConfiguredExtension(filePath, config.extensions);
1583
- audit.ext = configuredExt ? configuredExt.ext : ext;
1584
- if (!ALLOWED_EXTS.has(ext) && !configuredExt) {
1585
- lastSkip = 'extension';
1586
- continue;
1587
- }
1588
-
1589
- const relForMatch = relativize(filePath, projectCwd);
1590
- if (matchesAnyGlob(relForMatch, config.ignoreFiles) || matchesAnyGlob(filePath, config.ignoreFiles)) {
1591
- lastSkip = 'config-ignore-file';
1592
- continue;
1593
- }
1594
- if (!fs.existsSync(filePath)) {
1595
- lastSkip = 'file-missing';
1596
- continue;
1597
- }
1598
-
1599
- if (primaryFileSet.has(filePath)) {
1600
- const editCount = bumpEditCount(cache, sessionId, filePath);
1601
- cacheDirty = true;
1602
- audit.editCount = editCount;
1603
-
1604
- if (editCount > EDIT_COUNT_THRESHOLD) {
1605
- const wasJustCrossed = editCount === EDIT_COUNT_THRESHOLD + 1;
1606
- if (wasJustCrossed && !suppressionWinner) {
1607
- suppressionWinner = { filePath };
1608
- }
1609
- lastSkip = 'suppressed';
1610
- suppressedHit = true;
1611
- continue;
1612
- }
1613
- }
1614
-
1615
- const content = fs.readFileSync(filePath, 'utf-8');
1616
- let findings;
1617
- let detectorThrew = false;
1618
- const useHtmlEngine = configuredExt
1619
- ? configuredExt.engine === 'html'
1620
- : (ext === '.html' || ext === '.htm');
1621
- if (useHtmlEngine && typeof det.detectHtml === 'function') {
1622
- try { findings = await det.detectHtml(filePath, scanOptions); } catch { findings = []; detectorThrew = true; }
1623
- } else {
1624
- try { findings = await det.detectText(content, filePath, scanOptions); } catch { findings = []; detectorThrew = true; }
1625
- }
1626
-
1627
- const filtered = filterFindings(findings || [], content, ext, config);
1628
- const fresh = dedupeAgainstCache(filtered, cache, sessionId, filePath);
1629
- audit.findings = (findings || []).length;
1630
- audit.freshFindings = fresh.length;
1631
-
1632
- if (fresh.length > 0) {
1633
- rememberFindings(cache, sessionId, filePath, fresh);
1634
- cacheDirty = true;
1635
- freshGroups.push({ filePath, findings: fresh });
1636
- continue;
1637
- }
1638
-
1639
- if (detectorThrew) {
1640
- detectorThrewAny = true;
1641
- continue;
1642
- }
1643
-
1644
- if (filtered.length > 0 && !pendingWinner) {
1645
- const known = (ensureFile(cache, sessionId, filePath).findings || []).slice();
1646
- pendingWinner = { filePath, known };
1647
- } else if (filtered.length === 0 && !cleanWinner) {
1648
- cleanWinner = { filePath };
1649
- }
1650
- }
1651
-
1652
- // Persist only when the write is earned: fresh findings justify creating
1653
- // `.monodesign/` (dedup and suppression need it), and an already-present
1654
- // `.monodesign/` dir marks a project that opted in. A non-UI edit, or a
1655
- // clean UI edit in a project with no Monodesign footprint, must be a
1656
- // no-op on disk (issues #344, #305).
1657
- if (freshGroups.length > 0
1658
- || (cacheDirty && fs.existsSync(path.join(projectCwd, '.monodesign')))) {
1659
- persistCache(projectCwd, cache);
1660
- }
1661
-
1662
- if (freshGroups.length > 0) {
1663
- const firstGroup = freshGroups[0];
1664
- const text = appendDesignSystemNote(renderGroupedTemplate(freshGroups, config, { cwd: projectCwd }), scanOptions);
1665
- const allFindings = freshGroups.flatMap((group) => group.findings);
1666
- return {
1667
- exitCode: 0,
1668
- stdout: payload(text, 'PostToolUse', harness),
1669
- emission: {
1670
- kind: 'fresh',
1671
- file: firstGroup.filePath,
1672
- findings: firstGroup.findings,
1673
- groups: freshGroups,
1674
- },
1675
- audit: {
1676
- ...audit,
1677
- file: firstGroup.filePath,
1678
- emitted: true,
1679
- freshFiles: freshGroups.length,
1680
- freshFindings: allFindings.length,
1681
- chars: text.length,
1682
- durationMs: Date.now() - started,
1683
- },
1684
- };
1685
- }
1686
-
1687
- if (detectorThrewAny && !pendingWinner && !cleanWinner) {
1688
- return result({ emitted: false, error: 'detector-threw', durationMs: Date.now() - started });
1689
- }
1690
-
1691
- if (truthy(env.MONODESIGN_HOOK_QUIET) || config.quiet === true) {
1692
- return result({ emitted: false, quiet: true, durationMs: Date.now() - started });
1693
- }
1694
-
1695
- if (pendingWinner && shouldEmitAckForFile(pendingWinner.filePath, config)) {
1696
- const text = appendDesignSystemNote(renderPendingAck(pendingWinner.filePath, pendingWinner.known, { cwd: projectCwd }), scanOptions);
1697
- return {
1698
- exitCode: 0,
1699
- stdout: payload(text, 'PostToolUse', harness),
1700
- emission: { kind: 'pending', file: pendingWinner.filePath, known: pendingWinner.known },
1701
- audit: {
1702
- ...audit,
1703
- file: pendingWinner.filePath,
1704
- emitted: true,
1705
- kind: 'pending',
1706
- pending: pendingWinner.known.length,
1707
- chars: text.length,
1708
- durationMs: Date.now() - started,
1709
- },
1710
- };
1711
- }
1712
-
1713
- if (suppressionWinner) {
1714
- const text = suppressionNotice(relativize(suppressionWinner.filePath, projectCwd));
1715
- return {
1716
- exitCode: 0,
1717
- stdout: payload(text, 'PostToolUse', harness),
1718
- emission: { kind: 'suppression', file: suppressionWinner.filePath },
1719
- audit: {
1720
- ...audit,
1721
- file: suppressionWinner.filePath,
1722
- suppressed: true,
1723
- emitted: true,
1724
- durationMs: Date.now() - started,
1725
- },
1726
- };
1727
- }
1728
-
1729
- if (cleanWinner && shouldEmitAckForFile(cleanWinner.filePath, config)) {
1730
- const text = appendDesignSystemNote(renderCleanAck(cleanWinner.filePath, { cwd: projectCwd }), scanOptions);
1731
- return {
1732
- exitCode: 0,
1733
- stdout: payload(text, 'PostToolUse', harness),
1734
- emission: { kind: 'clean', file: cleanWinner.filePath },
1735
- audit: {
1736
- ...audit,
1737
- file: cleanWinner.filePath,
1738
- emitted: true,
1739
- kind: 'clean',
1740
- chars: text.length,
1741
- durationMs: Date.now() - started,
1742
- },
1743
- };
1744
- }
1745
-
1746
- if (pendingWinner || cleanWinner) {
1747
- return result({ emitted: false, skipped: 'non-ui-ack', durationMs: Date.now() - started });
1748
- }
1749
-
1750
- if (suppressedHit) {
1751
- return result({ suppressed: true, emitted: false, durationMs: Date.now() - started });
1752
- }
1753
-
1754
- return result({ skipped: lastSkip, durationMs: Date.now() - started });
1755
- } catch (err) {
1756
- return {
1757
- exitCode: 0,
1758
- stdout: '',
1759
- audit: { ...audit, error: String(err && err.message ? err.message : err) },
1760
- };
1761
- }
1762
- }
1763
-
1764
- export function payload(text, eventName = 'PostToolUse', harness = 'claude') {
1765
- if (harness === 'cursor') {
1766
- return JSON.stringify({ additional_context: text });
1767
- }
1768
- // GitHub Copilot's postToolUse hook injects context via a top-level
1769
- // `additionalContext` string (alongside an optional `modifiedResult`).
1770
- if (harness === 'github') {
1771
- return JSON.stringify({ additionalContext: text });
1772
- }
1773
- return JSON.stringify({
1774
- hookSpecificOutput: { hookEventName: eventName, additionalContext: text },
1775
- });
1776
- }