monomind 2.7.12 → 2.7.14

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 (1161) hide show
  1. package/LICENSE +0 -0
  2. package/README.md +12 -6
  3. package/bin/cli.js +55 -4
  4. package/package.json +21 -122
  5. package/bin/npx-safe-launch.js +0 -9
  6. package/packages/@monomind/cli/.claude/agents/architecture/system-design/arch-system-design.md +0 -54
  7. package/packages/@monomind/cli/.claude/agents/consensus/crdt-synchronizer.md +0 -977
  8. package/packages/@monomind/cli/.claude/agents/consensus/quorum-manager.md +0 -106
  9. package/packages/@monomind/cli/.claude/agents/consensus/security-manager.md +0 -602
  10. package/packages/@monomind/cli/.claude/agents/core/coder.md +0 -271
  11. package/packages/@monomind/cli/.claude/agents/core/coordinator.md +0 -133
  12. package/packages/@monomind/cli/.claude/agents/core/planner.md +0 -179
  13. package/packages/@monomind/cli/.claude/agents/core/researcher.md +0 -197
  14. package/packages/@monomind/cli/.claude/agents/core/reviewer.md +0 -336
  15. package/packages/@monomind/cli/.claude/agents/core/tester.md +0 -326
  16. package/packages/@monomind/cli/.claude/agents/design/design-monodesign.md +0 -121
  17. package/packages/@monomind/cli/.claude/agents/engineering/engineering-ai-data-remediation-engineer.md +0 -212
  18. package/packages/@monomind/cli/.claude/agents/engineering/engineering-ai-engineer.md +0 -165
  19. package/packages/@monomind/cli/.claude/agents/engineering/engineering-autonomous-optimization-architect.md +0 -108
  20. package/packages/@monomind/cli/.claude/agents/engineering/engineering-backend-architect.md +0 -254
  21. package/packages/@monomind/cli/.claude/agents/engineering/engineering-code-reviewer.md +0 -95
  22. package/packages/@monomind/cli/.claude/agents/engineering/engineering-data-engineer.md +0 -307
  23. package/packages/@monomind/cli/.claude/agents/engineering/engineering-database-optimizer.md +0 -200
  24. package/packages/@monomind/cli/.claude/agents/engineering/engineering-devops-automator.md +0 -430
  25. package/packages/@monomind/cli/.claude/agents/engineering/engineering-embedded-firmware-engineer.md +0 -174
  26. package/packages/@monomind/cli/.claude/agents/engineering/engineering-feishu-integration-developer.md +0 -607
  27. package/packages/@monomind/cli/.claude/agents/engineering/engineering-frontend-developer.md +0 -249
  28. package/packages/@monomind/cli/.claude/agents/engineering/engineering-git-workflow-master.md +0 -108
  29. package/packages/@monomind/cli/.claude/agents/engineering/engineering-incident-response-commander.md +0 -482
  30. package/packages/@monomind/cli/.claude/agents/engineering/engineering-mobile-app-builder.md +0 -499
  31. package/packages/@monomind/cli/.claude/agents/engineering/engineering-rapid-prototyper.md +0 -463
  32. package/packages/@monomind/cli/.claude/agents/engineering/engineering-security-engineer.md +0 -303
  33. package/packages/@monomind/cli/.claude/agents/engineering/engineering-senior-developer.md +0 -195
  34. package/packages/@monomind/cli/.claude/agents/engineering/engineering-software-architect.md +0 -100
  35. package/packages/@monomind/cli/.claude/agents/engineering/engineering-solidity-smart-contract-engineer.md +0 -528
  36. package/packages/@monomind/cli/.claude/agents/engineering/engineering-sre.md +0 -114
  37. package/packages/@monomind/cli/.claude/agents/engineering/engineering-technical-writer.md +0 -412
  38. package/packages/@monomind/cli/.claude/agents/engineering/engineering-threat-detection-engineer.md +0 -540
  39. package/packages/@monomind/cli/.claude/agents/engineering/engineering-wechat-mini-program-developer.md +0 -351
  40. package/packages/@monomind/cli/.claude/agents/github/code-review-swarm.md +0 -557
  41. package/packages/@monomind/cli/.claude/agents/github/github-modes.md +0 -154
  42. package/packages/@monomind/cli/.claude/agents/github/issue-tracker.md +0 -297
  43. package/packages/@monomind/cli/.claude/agents/github/multi-repo-swarm.md +0 -525
  44. package/packages/@monomind/cli/.claude/agents/github/pr-manager.md +0 -161
  45. package/packages/@monomind/cli/.claude/agents/github/project-board-sync.md +0 -478
  46. package/packages/@monomind/cli/.claude/agents/github/release-manager.md +0 -296
  47. package/packages/@monomind/cli/.claude/agents/github/repo-architect.md +0 -351
  48. package/packages/@monomind/cli/.claude/agents/github/swarm-issue.md +0 -548
  49. package/packages/@monomind/cli/.claude/agents/github/swarm-pr.md +0 -427
  50. package/packages/@monomind/cli/.claude/agents/github/sync-coordinator.md +0 -355
  51. package/packages/@monomind/cli/.claude/agents/github/workflow-automation.md +0 -640
  52. package/packages/@monomind/cli/.claude/agents/goal/goal-planner.md +0 -167
  53. package/packages/@monomind/cli/.claude/agents/hive-mind/collective-intelligence-coordinator.md +0 -93
  54. package/packages/@monomind/cli/.claude/agents/hive-mind/scout-explorer.md +0 -241
  55. package/packages/@monomind/cli/.claude/agents/hive-mind/swarm-memory-manager.md +0 -192
  56. package/packages/@monomind/cli/.claude/agents/hive-mind/worker-specialist.md +0 -216
  57. package/packages/@monomind/cli/.claude/agents/marketing/marketing-competitive-content.md +0 -155
  58. package/packages/@monomind/cli/.claude/agents/marketing/marketing-cro-specialist.md +0 -147
  59. package/packages/@monomind/cli/.claude/agents/marketing/marketing-email-specialist.md +0 -90
  60. package/packages/@monomind/cli/.claude/agents/marketing/marketing-launch-strategist.md +0 -129
  61. package/packages/@monomind/cli/.claude/agents/marketing/marketing-pricing-strategist.md +0 -127
  62. package/packages/@monomind/cli/.claude/agents/optimization/benchmark-suite.md +0 -665
  63. package/packages/@monomind/cli/.claude/agents/optimization/load-balancer.md +0 -431
  64. package/packages/@monomind/cli/.claude/agents/optimization/performance-monitor.md +0 -672
  65. package/packages/@monomind/cli/.claude/agents/optimization/resource-allocator.md +0 -674
  66. package/packages/@monomind/cli/.claude/agents/optimization/topology-optimizer.md +0 -808
  67. package/packages/@monomind/cli/.claude/agents/schemas/architecture-output.json +0 -43
  68. package/packages/@monomind/cli/.claude/agents/schemas/code-review-output.json +0 -28
  69. package/packages/@monomind/cli/.claude/agents/schemas/generic-task-input.json +0 -12
  70. package/packages/@monomind/cli/.claude/agents/schemas/implementation-output.json +0 -18
  71. package/packages/@monomind/cli/.claude/agents/schemas/research-output.json +0 -31
  72. package/packages/@monomind/cli/.claude/agents/schemas/security-audit-output.json +0 -29
  73. package/packages/@monomind/cli/.claude/agents/schemas/test-report-output.json +0 -29
  74. package/packages/@monomind/cli/.claude/agents/specialists/integration-architect.md +0 -94
  75. package/packages/@monomind/cli/.claude/agents/specialized/agentic-identity-trust.md +0 -388
  76. package/packages/@monomind/cli/.claude/agents/specialized/agents-orchestrator.md +0 -368
  77. package/packages/@monomind/cli/.claude/agents/specialized/automation-governance-architect.md +0 -217
  78. package/packages/@monomind/cli/.claude/agents/specialized/blockchain-security-auditor.md +0 -497
  79. package/packages/@monomind/cli/.claude/agents/specialized/compliance-auditor.md +0 -159
  80. package/packages/@monomind/cli/.claude/agents/specialized/identity-graph-operator.md +0 -261
  81. package/packages/@monomind/cli/.claude/agents/specialized/lsp-index-engineer.md +0 -315
  82. package/packages/@monomind/cli/.claude/agents/specialized/mobile/spec-mobile-react-native.md +0 -89
  83. package/packages/@monomind/cli/.claude/agents/specialized/specialized-cultural-intelligence-strategist.md +0 -89
  84. package/packages/@monomind/cli/.claude/agents/specialized/specialized-developer-advocate.md +0 -318
  85. package/packages/@monomind/cli/.claude/agents/specialized/specialized-document-generator.md +0 -56
  86. package/packages/@monomind/cli/.claude/agents/specialized/specialized-mcp-builder.md +0 -64
  87. package/packages/@monomind/cli/.claude/agents/specialized/specialized-model-qa.md +0 -489
  88. package/packages/@monomind/cli/.claude/agents/specialized/specialized-workflow-architect.md +0 -595
  89. package/packages/@monomind/cli/.claude/agents/specialized/zk-steward.md +0 -212
  90. package/packages/@monomind/cli/.claude/agents/swarm/mesh-coordinator.md +0 -97
  91. package/packages/@monomind/cli/.claude/agents/templates/automation-smart-agent.md +0 -185
  92. package/packages/@monomind/cli/.claude/agents/templates/coordinator-swarm-init.md +0 -83
  93. package/packages/@monomind/cli/.claude/agents/testing/production-validator.md +0 -375
  94. package/packages/@monomind/cli/.claude/agents/testing/tdd-london-swarm.md +0 -241
  95. package/packages/@monomind/cli/.claude/agents/testing/testing-accessibility-auditor.md +0 -322
  96. package/packages/@monomind/cli/.claude/agents/testing/testing-api-tester.md +0 -307
  97. package/packages/@monomind/cli/.claude/agents/testing/testing-evidence-collector.md +0 -213
  98. package/packages/@monomind/cli/.claude/agents/testing/testing-performance-benchmarker.md +0 -269
  99. package/packages/@monomind/cli/.claude/agents/testing/testing-test-results-analyzer.md +0 -306
  100. package/packages/@monomind/cli/.claude/agents/testing/testing-tool-evaluator.md +0 -395
  101. package/packages/@monomind/cli/.claude/agents/testing/testing-workflow-optimizer.md +0 -451
  102. package/packages/@monomind/cli/.claude/commands/agents/README.md +0 -14
  103. package/packages/@monomind/cli/.claude/commands/agents/agent-capabilities.md +0 -25
  104. package/packages/@monomind/cli/.claude/commands/agents/agent-coordination.md +0 -32
  105. package/packages/@monomind/cli/.claude/commands/agents/agent-spawning.md +0 -32
  106. package/packages/@monomind/cli/.claude/commands/agents/agent-types.md +0 -30
  107. package/packages/@monomind/cli/.claude/commands/analysis/README.md +0 -18
  108. package/packages/@monomind/cli/.claude/commands/analysis/bottleneck-detect.md +0 -69
  109. package/packages/@monomind/cli/.claude/commands/analysis/performance-bottlenecks.md +0 -59
  110. package/packages/@monomind/cli/.claude/commands/analysis/performance-report.md +0 -52
  111. package/packages/@monomind/cli/.claude/commands/analysis/token-usage.md +0 -47
  112. package/packages/@monomind/cli/.claude/commands/automation/README.md +0 -19
  113. package/packages/@monomind/cli/.claude/commands/automation/auto-agent.md +0 -86
  114. package/packages/@monomind/cli/.claude/commands/automation/self-healing.md +0 -108
  115. package/packages/@monomind/cli/.claude/commands/automation/session-memory.md +0 -89
  116. package/packages/@monomind/cli/.claude/commands/automation/smart-agents.md +0 -81
  117. package/packages/@monomind/cli/.claude/commands/automation/smart-spawn.md +0 -66
  118. package/packages/@monomind/cli/.claude/commands/automation/workflow-select.md +0 -60
  119. package/packages/@monomind/cli/.claude/commands/coordination/README.md +0 -13
  120. package/packages/@monomind/cli/.claude/commands/coordination/agent-spawn.md +0 -69
  121. package/packages/@monomind/cli/.claude/commands/coordination/swarm-init.md +0 -82
  122. package/packages/@monomind/cli/.claude/commands/coordination/task-orchestrate.md +0 -79
  123. package/packages/@monomind/cli/.claude/commands/github/README.md +0 -24
  124. package/packages/@monomind/cli/.claude/commands/github/github-modes.md +0 -151
  125. package/packages/@monomind/cli/.claude/commands/github/issue-tracker.md +0 -291
  126. package/packages/@monomind/cli/.claude/commands/github/pr-manager.md +0 -171
  127. package/packages/@monomind/cli/.claude/commands/github/release-manager.md +0 -343
  128. package/packages/@monomind/cli/.claude/commands/github/repo-architect.md +0 -372
  129. package/packages/@monomind/cli/.claude/commands/github/sync-coordinator.md +0 -297
  130. package/packages/@monomind/cli/.claude/commands/hive-mind/README.md +0 -42
  131. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-consensus.md +0 -72
  132. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-init.md +0 -68
  133. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-memory.md +0 -73
  134. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-spawn.md +0 -82
  135. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-status.md +0 -56
  136. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-stop.md +0 -55
  137. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind.md +0 -87
  138. package/packages/@monomind/cli/.claude/commands/hooks/README.md +0 -66
  139. package/packages/@monomind/cli/.claude/commands/hooks/overview.md +0 -112
  140. package/packages/@monomind/cli/.claude/commands/hooks/post-edit.md +0 -78
  141. package/packages/@monomind/cli/.claude/commands/hooks/post-task.md +0 -62
  142. package/packages/@monomind/cli/.claude/commands/hooks/pre-edit.md +0 -81
  143. package/packages/@monomind/cli/.claude/commands/hooks/pre-task.md +0 -73
  144. package/packages/@monomind/cli/.claude/commands/hooks/session-end.md +0 -82
  145. package/packages/@monomind/cli/.claude/commands/hooks/setup.md +0 -132
  146. package/packages/@monomind/cli/.claude/commands/mastermind/_repeat.md +0 -492
  147. package/packages/@monomind/cli/.claude/commands/mastermind/_taskfile.md +0 -232
  148. package/packages/@monomind/cli/.claude/commands/mastermind/adr.md +0 -9
  149. package/packages/@monomind/cli/.claude/commands/mastermind/approvev1.md +0 -94
  150. package/packages/@monomind/cli/.claude/commands/mastermind/architect.md +0 -52
  151. package/packages/@monomind/cli/.claude/commands/mastermind/autodev.md +0 -28
  152. package/packages/@monomind/cli/.claude/commands/mastermind/brain.md +0 -99
  153. package/packages/@monomind/cli/.claude/commands/mastermind/budget.md +0 -5
  154. package/packages/@monomind/cli/.claude/commands/mastermind/build.md +0 -23
  155. package/packages/@monomind/cli/.claude/commands/mastermind/code-review.md +0 -314
  156. package/packages/@monomind/cli/.claude/commands/mastermind/content.md +0 -23
  157. package/packages/@monomind/cli/.claude/commands/mastermind/createorg.md +0 -143
  158. package/packages/@monomind/cli/.claude/commands/mastermind/createtask.md +0 -372
  159. package/packages/@monomind/cli/.claude/commands/mastermind/debug.md +0 -19
  160. package/packages/@monomind/cli/.claude/commands/mastermind/design.md +0 -17
  161. package/packages/@monomind/cli/.claude/commands/mastermind/do.md +0 -525
  162. package/packages/@monomind/cli/.claude/commands/mastermind/execute.md +0 -17
  163. package/packages/@monomind/cli/.claude/commands/mastermind/finance.md +0 -23
  164. package/packages/@monomind/cli/.claude/commands/mastermind/finish.md +0 -17
  165. package/packages/@monomind/cli/.claude/commands/mastermind/graph-status.md +0 -5
  166. package/packages/@monomind/cli/.claude/commands/mastermind/help.md +0 -133
  167. package/packages/@monomind/cli/.claude/commands/mastermind/idea.md +0 -23
  168. package/packages/@monomind/cli/.claude/commands/mastermind/ideate.md +0 -258
  169. package/packages/@monomind/cli/.claude/commands/mastermind/improve.md +0 -342
  170. package/packages/@monomind/cli/.claude/commands/mastermind/loops.md +0 -5
  171. package/packages/@monomind/cli/.claude/commands/mastermind/marketing.md +0 -23
  172. package/packages/@monomind/cli/.claude/commands/mastermind/master.md +0 -1140
  173. package/packages/@monomind/cli/.claude/commands/mastermind/memory.md +0 -227
  174. package/packages/@monomind/cli/.claude/commands/mastermind/okf-export.md +0 -14
  175. package/packages/@monomind/cli/.claude/commands/mastermind/okf-import.md +0 -15
  176. package/packages/@monomind/cli/.claude/commands/mastermind/ops.md +0 -23
  177. package/packages/@monomind/cli/.claude/commands/mastermind/orgs.md +0 -18
  178. package/packages/@monomind/cli/.claude/commands/mastermind/orgstatus.md +0 -56
  179. package/packages/@monomind/cli/.claude/commands/mastermind/plan.md +0 -23
  180. package/packages/@monomind/cli/.claude/commands/mastermind/receive-review.md +0 -17
  181. package/packages/@monomind/cli/.claude/commands/mastermind/references/antigravity-tools.md +0 -60
  182. package/packages/@monomind/cli/.claude/commands/mastermind/references/claude-code-tools.md +0 -50
  183. package/packages/@monomind/cli/.claude/commands/mastermind/references/codex-tools.md +0 -64
  184. package/packages/@monomind/cli/.claude/commands/mastermind/references/copilot-tools.md +0 -49
  185. package/packages/@monomind/cli/.claude/commands/mastermind/references/gemini-tools.md +0 -63
  186. package/packages/@monomind/cli/.claude/commands/mastermind/references/pi-tools.md +0 -28
  187. package/packages/@monomind/cli/.claude/commands/mastermind/release.md +0 -23
  188. package/packages/@monomind/cli/.claude/commands/mastermind/repeat.md +0 -254
  189. package/packages/@monomind/cli/.claude/commands/mastermind/research.md +0 -23
  190. package/packages/@monomind/cli/.claude/commands/mastermind/review.md +0 -34
  191. package/packages/@monomind/cli/.claude/commands/mastermind/runorg.md +0 -71
  192. package/packages/@monomind/cli/.claude/commands/mastermind/runorgv1.md +0 -159
  193. package/packages/@monomind/cli/.claude/commands/mastermind/sales.md +0 -23
  194. package/packages/@monomind/cli/.claude/commands/mastermind/skill-builder.md +0 -17
  195. package/packages/@monomind/cli/.claude/commands/mastermind/specialagents.md +0 -122
  196. package/packages/@monomind/cli/.claude/commands/mastermind/stoporg.md +0 -78
  197. package/packages/@monomind/cli/.claude/commands/mastermind/swarm.md +0 -158
  198. package/packages/@monomind/cli/.claude/commands/mastermind/taskdev.md +0 -23
  199. package/packages/@monomind/cli/.claude/commands/mastermind/tdd.md +0 -19
  200. package/packages/@monomind/cli/.claude/commands/mastermind/techport.md +0 -27
  201. package/packages/@monomind/cli/.claude/commands/mastermind/topology.md +0 -121
  202. package/packages/@monomind/cli/.claude/commands/mastermind/understand.md +0 -136
  203. package/packages/@monomind/cli/.claude/commands/mastermind/verify.md +0 -19
  204. package/packages/@monomind/cli/.claude/commands/mastermind/worktree.md +0 -17
  205. package/packages/@monomind/cli/.claude/commands/mastermind.md +0 -140
  206. package/packages/@monomind/cli/.claude/commands/memory/README.md +0 -79
  207. package/packages/@monomind/cli/.claude/commands/memory/memory-search.md +0 -77
  208. package/packages/@monomind/cli/.claude/commands/monitoring/README.md +0 -69
  209. package/packages/@monomind/cli/.claude/commands/monitoring/agent-metrics.md +0 -65
  210. package/packages/@monomind/cli/.claude/commands/monitoring/agents.md +0 -71
  211. package/packages/@monomind/cli/.claude/commands/monitoring/status.md +0 -108
  212. package/packages/@monomind/cli/.claude/commands/monobrowse.md +0 -21
  213. package/packages/@monomind/cli/.claude/commands/monoes/README.md +0 -30
  214. package/packages/@monomind/cli/.claude/commands/monoes/install.md +0 -163
  215. package/packages/@monomind/cli/.claude/commands/monoes/monoagent.md +0 -148
  216. package/packages/@monomind/cli/.claude/commands/monoes/monoclip.md +0 -64
  217. package/packages/@monomind/cli/.claude/commands/monoes/monotask.md +0 -137
  218. package/packages/@monomind/cli/.claude/commands/monograph/README.md +0 -102
  219. package/packages/@monomind/cli/.claude/commands/monograph/monograph-build.md +0 -79
  220. package/packages/@monomind/cli/.claude/commands/monograph/monograph-search.md +0 -96
  221. package/packages/@monomind/cli/.claude/commands/monograph/monograph-stats.md +0 -53
  222. package/packages/@monomind/cli/.claude/commands/monograph/monograph-watch.md +0 -63
  223. package/packages/@monomind/cli/.claude/commands/monograph/monograph-wiki.md +0 -91
  224. package/packages/@monomind/cli/.claude/commands/optimization/auto-topology.md +0 -85
  225. package/packages/@monomind/cli/.claude/commands/optimization/performance-optimize.md +0 -79
  226. package/packages/@monomind/cli/.claude/commands/pair/README.md +0 -79
  227. package/packages/@monomind/cli/.claude/commands/pair/examples.md +0 -156
  228. package/packages/@monomind/cli/.claude/commands/pair/modes.md +0 -122
  229. package/packages/@monomind/cli/.claude/commands/pair/session.md +0 -124
  230. package/packages/@monomind/cli/.claude/commands/stream-chain/pipeline.md +0 -116
  231. package/packages/@monomind/cli/.claude/commands/stream-chain/run.md +0 -156
  232. package/packages/@monomind/cli/.claude/commands/swarm/README.md +0 -40
  233. package/packages/@monomind/cli/.claude/commands/swarm/analysis.md +0 -73
  234. package/packages/@monomind/cli/.claude/commands/swarm/development.md +0 -72
  235. package/packages/@monomind/cli/.claude/commands/swarm/examples.md +0 -103
  236. package/packages/@monomind/cli/.claude/commands/swarm/maintenance.md +0 -75
  237. package/packages/@monomind/cli/.claude/commands/swarm/optimization.md +0 -84
  238. package/packages/@monomind/cli/.claude/commands/swarm/research.md +0 -76
  239. package/packages/@monomind/cli/.claude/commands/swarm/swarm.md +0 -79
  240. package/packages/@monomind/cli/.claude/commands/swarm/testing.md +0 -80
  241. package/packages/@monomind/cli/.claude/commands/tokens.md +0 -18
  242. package/packages/@monomind/cli/.claude/commands/truth/start.md +0 -121
  243. package/packages/@monomind/cli/.claude/commands/ts.md +0 -14
  244. package/packages/@monomind/cli/.claude/commands/workflows/README.md +0 -64
  245. package/packages/@monomind/cli/.claude/commands/workflows/development.md +0 -86
  246. package/packages/@monomind/cli/.claude/commands/workflows/research.md +0 -89
  247. package/packages/@monomind/cli/.claude/commands/workflows/workflow-create.md +0 -83
  248. package/packages/@monomind/cli/.claude/commands/workflows/workflow-execute.md +0 -101
  249. package/packages/@monomind/cli/.claude/commands/workflows/workflow-export.md +0 -88
  250. package/packages/@monomind/cli/.claude/helpers/build-skill-registry.cjs +0 -323
  251. package/packages/@monomind/cli/.claude/helpers/control-start.cjs +0 -327
  252. package/packages/@monomind/cli/.claude/helpers/control-stop.cjs +0 -95
  253. package/packages/@monomind/cli/.claude/helpers/event-logger.cjs +0 -266
  254. package/packages/@monomind/cli/.claude/helpers/graphify-freshen.cjs +0 -148
  255. package/packages/@monomind/cli/.claude/helpers/handlers/adr-draft-handler.cjs +0 -78
  256. package/packages/@monomind/cli/.claude/helpers/handlers/agent-start-handler.cjs +0 -132
  257. package/packages/@monomind/cli/.claude/helpers/handlers/budget-status-handler.cjs +0 -14
  258. package/packages/@monomind/cli/.claude/helpers/handlers/capture-handler.cjs +0 -736
  259. package/packages/@monomind/cli/.claude/helpers/handlers/compact-handler.cjs +0 -35
  260. package/packages/@monomind/cli/.claude/helpers/handlers/edit-handler.cjs +0 -178
  261. package/packages/@monomind/cli/.claude/helpers/handlers/gates-handler.cjs +0 -494
  262. package/packages/@monomind/cli/.claude/helpers/handlers/graph-status-handler.cjs +0 -45
  263. package/packages/@monomind/cli/.claude/helpers/handlers/loops-status-handler.cjs +0 -48
  264. package/packages/@monomind/cli/.claude/helpers/handlers/route-handler.cjs +0 -770
  265. package/packages/@monomind/cli/.claude/helpers/handlers/session-handler.cjs +0 -286
  266. package/packages/@monomind/cli/.claude/helpers/handlers/session-restore-handler.cjs +0 -573
  267. package/packages/@monomind/cli/.claude/helpers/handlers/stats-handler.cjs +0 -14
  268. package/packages/@monomind/cli/.claude/helpers/handlers/task-handler.cjs +0 -241
  269. package/packages/@monomind/cli/.claude/helpers/hook-handler.cjs +0 -951
  270. package/packages/@monomind/cli/.claude/helpers/intelligence.cjs +0 -510
  271. package/packages/@monomind/cli/.claude/helpers/learning-service.mjs +0 -61
  272. package/packages/@monomind/cli/.claude/helpers/loop-tracker.cjs +0 -119
  273. package/packages/@monomind/cli/.claude/helpers/mastermind-activate.cjs +0 -35
  274. package/packages/@monomind/cli/.claude/helpers/memory-palace.cjs +0 -461
  275. package/packages/@monomind/cli/.claude/helpers/memory.cjs +0 -193
  276. package/packages/@monomind/cli/.claude/helpers/metrics-db.mjs +0 -87
  277. package/packages/@monomind/cli/.claude/helpers/monolean-activate.cjs +0 -30
  278. package/packages/@monomind/cli/.claude/helpers/monolean-config.cjs +0 -76
  279. package/packages/@monomind/cli/.claude/helpers/monolean-instructions.cjs +0 -109
  280. package/packages/@monomind/cli/.claude/helpers/monolean-propagate.cjs +0 -13
  281. package/packages/@monomind/cli/.claude/helpers/monolean-tracker.cjs +0 -18
  282. package/packages/@monomind/cli/.claude/helpers/router.cjs +0 -571
  283. package/packages/@monomind/cli/.claude/helpers/session.cjs +0 -145
  284. package/packages/@monomind/cli/.claude/helpers/skill-registry.json +0 -4948
  285. package/packages/@monomind/cli/.claude/helpers/statusline.cjs +0 -1368
  286. package/packages/@monomind/cli/.claude/helpers/toggle-statusline.cjs +0 -73
  287. package/packages/@monomind/cli/.claude/helpers/token-tracker.cjs +0 -1034
  288. package/packages/@monomind/cli/.claude/helpers/utils/agent-registrations.cjs +0 -41
  289. package/packages/@monomind/cli/.claude/helpers/utils/fs-helpers.cjs +0 -183
  290. package/packages/@monomind/cli/.claude/helpers/utils/micro-agents.cjs +0 -358
  291. package/packages/@monomind/cli/.claude/helpers/utils/monograph.cjs +0 -707
  292. package/packages/@monomind/cli/.claude/helpers/utils/system-pressure.cjs +0 -46
  293. package/packages/@monomind/cli/.claude/helpers/utils/telemetry.cjs +0 -162
  294. package/packages/@monomind/cli/.claude/settings.json +0 -448
  295. package/packages/@monomind/cli/.claude/skills/agent-browser-testing/SKILL.md +0 -964
  296. package/packages/@monomind/cli/.claude/skills/agentic-jujutsu/SKILL.md +0 -645
  297. package/packages/@monomind/cli/.claude/skills/github-issue-triage/SKILL.md +0 -354
  298. package/packages/@monomind/cli/.claude/skills/github-repo-recap/SKILL.md +0 -207
  299. package/packages/@monomind/cli/.claude/skills/github-toolkit/SKILL.md +0 -60
  300. package/packages/@monomind/cli/.claude/skills/hive-mind-advanced/SKILL.md +0 -694
  301. package/packages/@monomind/cli/.claude/skills/hooks-automation/SKILL.md +0 -1192
  302. package/packages/@monomind/cli/.claude/skills/mastermind-access/SKILL.md +0 -236
  303. package/packages/@monomind/cli/.claude/skills/mastermind-activity/SKILL.md +0 -191
  304. package/packages/@monomind/cli/.claude/skills/mastermind-adapter-manager/SKILL.md +0 -259
  305. package/packages/@monomind/cli/.claude/skills/mastermind-adapters/SKILL.md +0 -204
  306. package/packages/@monomind/cli/.claude/skills/mastermind-agent-detail/SKILL.md +0 -242
  307. package/packages/@monomind/cli/.claude/skills/mastermind-agent-select/SKILL.md +0 -132
  308. package/packages/@monomind/cli/.claude/skills/mastermind-agents/SKILL.md +0 -182
  309. package/packages/@monomind/cli/.claude/skills/mastermind-approval-detail/SKILL.md +0 -259
  310. package/packages/@monomind/cli/.claude/skills/mastermind-approvev1/SKILL.md +0 -191
  311. package/packages/@monomind/cli/.claude/skills/mastermind-architect/SKILL.md +0 -862
  312. package/packages/@monomind/cli/.claude/skills/mastermind-autodev/SKILL.md +0 -360
  313. package/packages/@monomind/cli/.claude/skills/mastermind-backup/SKILL.md +0 -197
  314. package/packages/@monomind/cli/.claude/skills/mastermind-bootstrap/SKILL.md +0 -190
  315. package/packages/@monomind/cli/.claude/skills/mastermind-budgets/SKILL.md +0 -237
  316. package/packages/@monomind/cli/.claude/skills/mastermind-build/SKILL.md +0 -169
  317. package/packages/@monomind/cli/.claude/skills/mastermind-companies/SKILL.md +0 -256
  318. package/packages/@monomind/cli/.claude/skills/mastermind-content/SKILL.md +0 -197
  319. package/packages/@monomind/cli/.claude/skills/mastermind-costs/SKILL.md +0 -151
  320. package/packages/@monomind/cli/.claude/skills/mastermind-createorg/SKILL.md +0 -247
  321. package/packages/@monomind/cli/.claude/skills/mastermind-debug/SKILL.md +0 -277
  322. package/packages/@monomind/cli/.claude/skills/mastermind-delegation/SKILL.md +0 -83
  323. package/packages/@monomind/cli/.claude/skills/mastermind-design/SKILL.md +0 -190
  324. package/packages/@monomind/cli/.claude/skills/mastermind-diagnose/SKILL.md +0 -249
  325. package/packages/@monomind/cli/.claude/skills/mastermind-env/SKILL.md +0 -203
  326. package/packages/@monomind/cli/.claude/skills/mastermind-environments/SKILL.md +0 -250
  327. package/packages/@monomind/cli/.claude/skills/mastermind-execute/SKILL.md +0 -104
  328. package/packages/@monomind/cli/.claude/skills/mastermind-export/SKILL.md +0 -333
  329. package/packages/@monomind/cli/.claude/skills/mastermind-finance/SKILL.md +0 -166
  330. package/packages/@monomind/cli/.claude/skills/mastermind-finish/SKILL.md +0 -251
  331. package/packages/@monomind/cli/.claude/skills/mastermind-goal-detail/SKILL.md +0 -255
  332. package/packages/@monomind/cli/.claude/skills/mastermind-goals/SKILL.md +0 -149
  333. package/packages/@monomind/cli/.claude/skills/mastermind-heartbeatv1/SKILL.md +0 -167
  334. package/packages/@monomind/cli/.claude/skills/mastermind-idea/SKILL.md +0 -1142
  335. package/packages/@monomind/cli/.claude/skills/mastermind-import/SKILL.md +0 -281
  336. package/packages/@monomind/cli/.claude/skills/mastermind-inbox/SKILL.md +0 -226
  337. package/packages/@monomind/cli/.claude/skills/mastermind-instance/SKILL.md +0 -235
  338. package/packages/@monomind/cli/.claude/skills/mastermind-instance-settings/SKILL.md +0 -315
  339. package/packages/@monomind/cli/.claude/skills/mastermind-intake/SKILL.md +0 -83
  340. package/packages/@monomind/cli/.claude/skills/mastermind-invite-landing/SKILL.md +0 -227
  341. package/packages/@monomind/cli/.claude/skills/mastermind-invites/SKILL.md +0 -254
  342. package/packages/@monomind/cli/.claude/skills/mastermind-issue-detail/SKILL.md +0 -291
  343. package/packages/@monomind/cli/.claude/skills/mastermind-issues/SKILL.md +0 -235
  344. package/packages/@monomind/cli/.claude/skills/mastermind-join-queue/SKILL.md +0 -170
  345. package/packages/@monomind/cli/.claude/skills/mastermind-liveness/SKILL.md +0 -392
  346. package/packages/@monomind/cli/.claude/skills/mastermind-marketing/SKILL.md +0 -228
  347. package/packages/@monomind/cli/.claude/skills/mastermind-marketing/references/copywriting-frameworks.md +0 -181
  348. package/packages/@monomind/cli/.claude/skills/mastermind-marketing/references/persuasion-psychology.md +0 -158
  349. package/packages/@monomind/cli/.claude/skills/mastermind-memory/SKILL.md +0 -321
  350. package/packages/@monomind/cli/.claude/skills/mastermind-monitor/SKILL.md +0 -1284
  351. package/packages/@monomind/cli/.claude/skills/mastermind-monotask/SKILL.md +0 -350
  352. package/packages/@monomind/cli/.claude/skills/mastermind-my-issues/SKILL.md +0 -146
  353. package/packages/@monomind/cli/.claude/skills/mastermind-new-agent/SKILL.md +0 -241
  354. package/packages/@monomind/cli/.claude/skills/mastermind-ops/SKILL.md +0 -168
  355. package/packages/@monomind/cli/.claude/skills/mastermind-org-chart/SKILL.md +0 -209
  356. package/packages/@monomind/cli/.claude/skills/mastermind-org-settings/SKILL.md +0 -274
  357. package/packages/@monomind/cli/.claude/skills/mastermind-orgs/SKILL.md +0 -120
  358. package/packages/@monomind/cli/.claude/skills/mastermind-orgstatus/SKILL.md +0 -254
  359. package/packages/@monomind/cli/.claude/skills/mastermind-plan/SKILL.md +0 -217
  360. package/packages/@monomind/cli/.claude/skills/mastermind-plan-to-tasks/SKILL.md +0 -136
  361. package/packages/@monomind/cli/.claude/skills/mastermind-plugin-manager/SKILL.md +0 -241
  362. package/packages/@monomind/cli/.claude/skills/mastermind-plugin-settings/SKILL.md +0 -273
  363. package/packages/@monomind/cli/.claude/skills/mastermind-plugins/SKILL.md +0 -190
  364. package/packages/@monomind/cli/.claude/skills/mastermind-profile/SKILL.md +0 -187
  365. package/packages/@monomind/cli/.claude/skills/mastermind-project-detail/SKILL.md +0 -249
  366. package/packages/@monomind/cli/.claude/skills/mastermind-project-workspace/SKILL.md +0 -244
  367. package/packages/@monomind/cli/.claude/skills/mastermind-projects/SKILL.md +0 -167
  368. package/packages/@monomind/cli/.claude/skills/mastermind-protocol/SKILL.md +0 -404
  369. package/packages/@monomind/cli/.claude/skills/mastermind-receive-review/SKILL.md +0 -213
  370. package/packages/@monomind/cli/.claude/skills/mastermind-release/SKILL.md +0 -168
  371. package/packages/@monomind/cli/.claude/skills/mastermind-repeat/SKILL.md +0 -171
  372. package/packages/@monomind/cli/.claude/skills/mastermind-research/SKILL.md +0 -168
  373. package/packages/@monomind/cli/.claude/skills/mastermind-review/SKILL.md +0 -233
  374. package/packages/@monomind/cli/.claude/skills/mastermind-routine-detail/SKILL.md +0 -253
  375. package/packages/@monomind/cli/.claude/skills/mastermind-routines/SKILL.md +0 -203
  376. package/packages/@monomind/cli/.claude/skills/mastermind-runorg/SKILL.md +0 -43
  377. package/packages/@monomind/cli/.claude/skills/mastermind-runorgv1/SKILL.md +0 -731
  378. package/packages/@monomind/cli/.claude/skills/mastermind-sales/SKILL.md +0 -170
  379. package/packages/@monomind/cli/.claude/skills/mastermind-search/SKILL.md +0 -186
  380. package/packages/@monomind/cli/.claude/skills/mastermind-secrets/SKILL.md +0 -199
  381. package/packages/@monomind/cli/.claude/skills/mastermind-skill-builder/SKILL.md +0 -447
  382. package/packages/@monomind/cli/.claude/skills/mastermind-skills/SKILL.md +0 -156
  383. package/packages/@monomind/cli/.claude/skills/mastermind-stoporg/SKILL.md +0 -147
  384. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/SKILL.md +0 -377
  385. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/code-quality-reviewer-prompt.md +0 -60
  386. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/final-reviewer-prompt.md +0 -144
  387. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/implementer-prompt.md +0 -114
  388. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/spec-reviewer-prompt.md +0 -80
  389. package/packages/@monomind/cli/.claude/skills/mastermind-tasks/SKILL.md +0 -152
  390. package/packages/@monomind/cli/.claude/skills/mastermind-tdd/SKILL.md +0 -424
  391. package/packages/@monomind/cli/.claude/skills/mastermind-techport/SKILL.md +0 -777
  392. package/packages/@monomind/cli/.claude/skills/mastermind-threads/SKILL.md +0 -259
  393. package/packages/@monomind/cli/.claude/skills/mastermind-tree-control/SKILL.md +0 -250
  394. package/packages/@monomind/cli/.claude/skills/mastermind-verify/SKILL.md +0 -196
  395. package/packages/@monomind/cli/.claude/skills/mastermind-wiki/SKILL.md +0 -314
  396. package/packages/@monomind/cli/.claude/skills/mastermind-workspace-detail/SKILL.md +0 -317
  397. package/packages/@monomind/cli/.claude/skills/mastermind-workspaces/SKILL.md +0 -261
  398. package/packages/@monomind/cli/.claude/skills/mastermind-worktree/SKILL.md +0 -215
  399. package/packages/@monomind/cli/.claude/skills/memory-toolkit/SKILL.md +0 -75
  400. package/packages/@monomind/cli/.claude/skills/monodesign/SKILL.md +0 -257
  401. package/packages/@monomind/cli/.claude/skills/monodesign/adapt.md +0 -53
  402. package/packages/@monomind/cli/.claude/skills/monodesign/agents/monodesign-asset-producer.md +0 -100
  403. package/packages/@monomind/cli/.claude/skills/monodesign/agents/monodesign-manual-edit-applier.md +0 -103
  404. package/packages/@monomind/cli/.claude/skills/monodesign/animate.md +0 -65
  405. package/packages/@monomind/cli/.claude/skills/monodesign/audit.md +0 -89
  406. package/packages/@monomind/cli/.claude/skills/monodesign/bolder.md +0 -50
  407. package/packages/@monomind/cli/.claude/skills/monodesign/clarify.md +0 -64
  408. package/packages/@monomind/cli/.claude/skills/monodesign/colorize.md +0 -68
  409. package/packages/@monomind/cli/.claude/skills/monodesign/craft.md +0 -51
  410. package/packages/@monomind/cli/.claude/skills/monodesign/critique.md +0 -66
  411. package/packages/@monomind/cli/.claude/skills/monodesign/delight.md +0 -47
  412. package/packages/@monomind/cli/.claude/skills/monodesign/distill.md +0 -56
  413. package/packages/@monomind/cli/.claude/skills/monodesign/document.md +0 -83
  414. package/packages/@monomind/cli/.claude/skills/monodesign/extract.md +0 -74
  415. package/packages/@monomind/cli/.claude/skills/monodesign/harden.md +0 -65
  416. package/packages/@monomind/cli/.claude/skills/monodesign/init.md +0 -30
  417. package/packages/@monomind/cli/.claude/skills/monodesign/layout.md +0 -36
  418. package/packages/@monomind/cli/.claude/skills/monodesign/live.md +0 -34
  419. package/packages/@monomind/cli/.claude/skills/monodesign/onboard.md +0 -50
  420. package/packages/@monomind/cli/.claude/skills/monodesign/optimize.md +0 -64
  421. package/packages/@monomind/cli/.claude/skills/monodesign/overdrive.md +0 -56
  422. package/packages/@monomind/cli/.claude/skills/monodesign/polish.md +0 -68
  423. package/packages/@monomind/cli/.claude/skills/monodesign/quieter.md +0 -57
  424. package/packages/@monomind/cli/.claude/skills/monodesign/reference/adapt.md +0 -312
  425. package/packages/@monomind/cli/.claude/skills/monodesign/reference/adapt.native.md +0 -58
  426. package/packages/@monomind/cli/.claude/skills/monodesign/reference/android.md +0 -40
  427. package/packages/@monomind/cli/.claude/skills/monodesign/reference/animate.md +0 -203
  428. package/packages/@monomind/cli/.claude/skills/monodesign/reference/antipatterns-catalog.md +0 -410
  429. package/packages/@monomind/cli/.claude/skills/monodesign/reference/audit.md +0 -135
  430. package/packages/@monomind/cli/.claude/skills/monodesign/reference/audit.native.md +0 -139
  431. package/packages/@monomind/cli/.claude/skills/monodesign/reference/bolder.md +0 -120
  432. package/packages/@monomind/cli/.claude/skills/monodesign/reference/brand-workflow.md +0 -180
  433. package/packages/@monomind/cli/.claude/skills/monodesign/reference/brand.md +0 -108
  434. package/packages/@monomind/cli/.claude/skills/monodesign/reference/clarify.md +0 -288
  435. package/packages/@monomind/cli/.claude/skills/monodesign/reference/codex.md +0 -105
  436. package/packages/@monomind/cli/.claude/skills/monodesign/reference/cognitive-load.md +0 -106
  437. package/packages/@monomind/cli/.claude/skills/monodesign/reference/color-and-contrast.md +0 -105
  438. package/packages/@monomind/cli/.claude/skills/monodesign/reference/colorize.md +0 -257
  439. package/packages/@monomind/cli/.claude/skills/monodesign/reference/component-specs.md +0 -260
  440. package/packages/@monomind/cli/.claude/skills/monodesign/reference/component-states.md +0 -274
  441. package/packages/@monomind/cli/.claude/skills/monodesign/reference/component-system.md +0 -358
  442. package/packages/@monomind/cli/.claude/skills/monodesign/reference/copy-formulas.md +0 -160
  443. package/packages/@monomind/cli/.claude/skills/monodesign/reference/craft.md +0 -123
  444. package/packages/@monomind/cli/.claude/skills/monodesign/reference/critique.md +0 -780
  445. package/packages/@monomind/cli/.claude/skills/monodesign/reference/delight.md +0 -302
  446. package/packages/@monomind/cli/.claude/skills/monodesign/reference/design-principles.md +0 -246
  447. package/packages/@monomind/cli/.claude/skills/monodesign/reference/distill.md +0 -111
  448. package/packages/@monomind/cli/.claude/skills/monodesign/reference/document.md +0 -429
  449. package/packages/@monomind/cli/.claude/skills/monodesign/reference/extract.md +0 -69
  450. package/packages/@monomind/cli/.claude/skills/monodesign/reference/harden.md +0 -347
  451. package/packages/@monomind/cli/.claude/skills/monodesign/reference/heuristics-scoring.md +0 -234
  452. package/packages/@monomind/cli/.claude/skills/monodesign/reference/hooks.md +0 -92
  453. package/packages/@monomind/cli/.claude/skills/monodesign/reference/image-prompts.md +0 -130
  454. package/packages/@monomind/cli/.claude/skills/monodesign/reference/init.md +0 -221
  455. package/packages/@monomind/cli/.claude/skills/monodesign/reference/interaction-design.md +0 -189
  456. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ios.md +0 -45
  457. package/packages/@monomind/cli/.claude/skills/monodesign/reference/layout.md +0 -185
  458. package/packages/@monomind/cli/.claude/skills/monodesign/reference/live.md +0 -710
  459. package/packages/@monomind/cli/.claude/skills/monodesign/reference/motion-design.md +0 -109
  460. package/packages/@monomind/cli/.claude/skills/monodesign/reference/onboard.md +0 -234
  461. package/packages/@monomind/cli/.claude/skills/monodesign/reference/optimize.md +0 -258
  462. package/packages/@monomind/cli/.claude/skills/monodesign/reference/overdrive.md +0 -130
  463. package/packages/@monomind/cli/.claude/skills/monodesign/reference/personas.md +0 -179
  464. package/packages/@monomind/cli/.claude/skills/monodesign/reference/polish.md +0 -241
  465. package/packages/@monomind/cli/.claude/skills/monodesign/reference/pre-delivery-checklist.md +0 -108
  466. package/packages/@monomind/cli/.claude/skills/monodesign/reference/product.md +0 -60
  467. package/packages/@monomind/cli/.claude/skills/monodesign/reference/quieter.md +0 -99
  468. package/packages/@monomind/cli/.claude/skills/monodesign/reference/responsive-design.md +0 -114
  469. package/packages/@monomind/cli/.claude/skills/monodesign/reference/shape.md +0 -165
  470. package/packages/@monomind/cli/.claude/skills/monodesign/reference/spatial-design.md +0 -100
  471. package/packages/@monomind/cli/.claude/skills/monodesign/reference/teach.md +0 -10
  472. package/packages/@monomind/cli/.claude/skills/monodesign/reference/token-architecture.md +0 -222
  473. package/packages/@monomind/cli/.claude/skills/monodesign/reference/typeset.md +0 -301
  474. package/packages/@monomind/cli/.claude/skills/monodesign/reference/typography.md +0 -159
  475. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ux-research.md +0 -143
  476. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ux-rules.md +0 -211
  477. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ux-writing.md +0 -107
  478. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/command-metadata.json +0 -94
  479. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/context-signals.mjs +0 -260
  480. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/context.mjs +0 -1065
  481. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/critique-storage.mjs +0 -416
  482. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detect-csp.mjs +0 -198
  483. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detect.mjs +0 -33
  484. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/browser/injected/index.mjs +0 -1962
  485. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/cli/main.mjs +0 -321
  486. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/design-system.mjs +0 -814
  487. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/detect-antipatterns-browser.js +0 -5608
  488. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/detect-antipatterns.mjs +0 -50
  489. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/browser/detect-url.mjs +0 -259
  490. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/browser/drivers.mjs +0 -258
  491. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/regex/detect-text.mjs +0 -636
  492. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/static-html/css-cascade.mjs +0 -1015
  493. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/static-html/detect-html.mjs +0 -253
  494. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/visual/screenshot-contrast.mjs +0 -198
  495. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/findings.mjs +0 -12
  496. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/fix/css-regions.mjs +0 -181
  497. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/fix/fixers.mjs +0 -373
  498. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/fix/index.mjs +0 -426
  499. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/node/file-system.mjs +0 -198
  500. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/profile/profiler.mjs +0 -166
  501. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/registry/antipatterns.mjs +0 -563
  502. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/rules/checks.mjs +0 -3002
  503. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/color.mjs +0 -124
  504. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/constants.mjs +0 -101
  505. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/fonts.mjs +0 -30
  506. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/inline-ignores.mjs +0 -148
  507. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/page.mjs +0 -7
  508. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-admin.mjs +0 -661
  509. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-before-edit.mjs +0 -516
  510. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-lib.mjs +0 -1776
  511. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook.mjs +0 -61
  512. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/design-parser.mjs +0 -842
  513. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/is-generated.mjs +0 -69
  514. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/monodesign-config.mjs +0 -640
  515. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/monodesign-paths.mjs +0 -129
  516. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/provider.mjs +0 -4
  517. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/target-args.mjs +0 -42
  518. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/browser-script-parts.mjs +0 -50
  519. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/completion.mjs +0 -19
  520. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/event-validation.mjs +0 -137
  521. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/insert-ui.mjs +0 -458
  522. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-apply.mjs +0 -939
  523. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-edit-routes.mjs +0 -357
  524. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-edits-buffer.mjs +0 -152
  525. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/session-store.mjs +0 -293
  526. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/svelte-component.mjs +0 -826
  527. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/sveltekit-adapter.mjs +0 -274
  528. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/ui-core.mjs +0 -180
  529. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/vocabulary.mjs +0 -36
  530. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-accept.mjs +0 -812
  531. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser-dom.js +0 -146
  532. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser-session.js +0 -123
  533. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser.js +0 -11240
  534. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-commit-manual-edits.mjs +0 -1241
  535. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-complete.mjs +0 -75
  536. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-copy-edit-agent.mjs +0 -683
  537. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-discard-manual-edits.mjs +0 -51
  538. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-inject.mjs +0 -583
  539. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-insert.mjs +0 -272
  540. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-manual-edit-evidence.mjs +0 -363
  541. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-poll.mjs +0 -384
  542. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-resume.mjs +0 -94
  543. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-server.mjs +0 -1174
  544. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-status.mjs +0 -61
  545. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-target.mjs +0 -30
  546. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-wrap.mjs +0 -894
  547. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live.mjs +0 -297
  548. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/modern-screenshot.umd.js +0 -14
  549. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/palette.mjs +0 -633
  550. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/pin.mjs +0 -221
  551. package/packages/@monomind/cli/.claude/skills/monodesign/shape.md +0 -71
  552. package/packages/@monomind/cli/.claude/skills/monodesign/teach.md +0 -18
  553. package/packages/@monomind/cli/.claude/skills/monodesign/typeset.md +0 -59
  554. package/packages/@monomind/cli/.claude/skills/monolean/SKILL.md +0 -118
  555. package/packages/@monomind/cli/.claude/skills/monolean-audit/SKILL.md +0 -41
  556. package/packages/@monomind/cli/.claude/skills/monolean-debt/SKILL.md +0 -46
  557. package/packages/@monomind/cli/.claude/skills/monolean-help/SKILL.md +0 -60
  558. package/packages/@monomind/cli/.claude/skills/monolean-review/SKILL.md +0 -57
  559. package/packages/@monomind/cli/.claude/skills/monomind/browse-agentcore.md +0 -115
  560. package/packages/@monomind/cli/.claude/skills/monomind/browse-electron.md +0 -188
  561. package/packages/@monomind/cli/.claude/skills/monomind/browse-qa.md +0 -228
  562. package/packages/@monomind/cli/.claude/skills/monomind/browse-references/authentication.md +0 -161
  563. package/packages/@monomind/cli/.claude/skills/monomind/browse-references/trust-boundaries.md +0 -40
  564. package/packages/@monomind/cli/.claude/skills/monomind/browse-references/video-recording.md +0 -83
  565. package/packages/@monomind/cli/.claude/skills/monomind/browse-slack.md +0 -188
  566. package/packages/@monomind/cli/.claude/skills/monomind/browse-vercel.md +0 -239
  567. package/packages/@monomind/cli/.claude/skills/monomind/browse.md +0 -724
  568. package/packages/@monomind/cli/.claude/skills/monomotion/SKILL.md +0 -145
  569. package/packages/@monomind/cli/.claude/skills/monomotion/rules/api-control.md +0 -139
  570. package/packages/@monomind/cli/.claude/skills/monomotion/rules/effects.md +0 -109
  571. package/packages/@monomind/cli/.claude/skills/monomotion/rules/integration.md +0 -140
  572. package/packages/@monomind/cli/.claude/skills/monomotion/rules/scroll.md +0 -131
  573. package/packages/@monomind/cli/.claude/skills/monomotion/rules/sequencing.md +0 -105
  574. package/packages/@monomind/cli/.claude/skills/monomotion/rules/svg.md +0 -101
  575. package/packages/@monomind/cli/.claude/skills/monomotion/rules/text.md +0 -119
  576. package/packages/@monomind/cli/.claude/skills/pair-programming/SKILL.md +0 -1202
  577. package/packages/@monomind/cli/.claude/skills/performance-analysis/SKILL.md +0 -560
  578. package/packages/@monomind/cli/.claude/skills/skill-builder/SKILL.md +0 -910
  579. package/packages/@monomind/cli/.claude/skills/specialagent/SKILL.md +0 -206
  580. package/packages/@monomind/cli/.claude/skills/stop-slop/SKILL.md +0 -67
  581. package/packages/@monomind/cli/.claude/skills/stop-slop/references/examples.md +0 -61
  582. package/packages/@monomind/cli/.claude/skills/stop-slop/references/phrases.md +0 -130
  583. package/packages/@monomind/cli/.claude/skills/stop-slop/references/structures.md +0 -136
  584. package/packages/@monomind/cli/.claude/skills/swarm-advanced/SKILL.md +0 -936
  585. package/packages/@monomind/cli/.claude/skills/swarm-orchestration/SKILL.md +0 -179
  586. package/packages/@monomind/cli/.claude/skills/verification-quality/SKILL.md +0 -674
  587. package/packages/@monomind/cli/README.md +0 -414
  588. package/packages/@monomind/cli/bin/cli.js +0 -379
  589. package/packages/@monomind/cli/bin/mcp-server.js +0 -208
  590. package/packages/@monomind/cli/bin/preinstall.cjs +0 -2
  591. package/packages/@monomind/cli/dist/src/agents/registry-builder.d.ts +0 -64
  592. package/packages/@monomind/cli/dist/src/agents/registry-builder.js +0 -228
  593. package/packages/@monomind/cli/dist/src/autopilot-state.d.ts +0 -77
  594. package/packages/@monomind/cli/dist/src/autopilot-state.js +0 -336
  595. package/packages/@monomind/cli/dist/src/browser/action-builder/analyzer.d.ts +0 -11
  596. package/packages/@monomind/cli/dist/src/browser/action-builder/analyzer.js +0 -64
  597. package/packages/@monomind/cli/dist/src/browser/action-builder/types.d.ts +0 -47
  598. package/packages/@monomind/cli/dist/src/browser/action-builder/types.js +0 -2
  599. package/packages/@monomind/cli/dist/src/browser/adapters/gemini.d.ts +0 -3
  600. package/packages/@monomind/cli/dist/src/browser/adapters/gemini.js +0 -16
  601. package/packages/@monomind/cli/dist/src/browser/adapters/index.d.ts +0 -19
  602. package/packages/@monomind/cli/dist/src/browser/adapters/index.js +0 -23
  603. package/packages/@monomind/cli/dist/src/browser/adapters/instagram.d.ts +0 -3
  604. package/packages/@monomind/cli/dist/src/browser/adapters/instagram.js +0 -17
  605. package/packages/@monomind/cli/dist/src/browser/adapters/linkedin.d.ts +0 -3
  606. package/packages/@monomind/cli/dist/src/browser/adapters/linkedin.js +0 -19
  607. package/packages/@monomind/cli/dist/src/browser/adapters/x.d.ts +0 -3
  608. package/packages/@monomind/cli/dist/src/browser/adapters/x.js +0 -19
  609. package/packages/@monomind/cli/dist/src/browser/dashboard/server.d.ts +0 -9
  610. package/packages/@monomind/cli/dist/src/browser/dashboard/server.js +0 -215
  611. package/packages/@monomind/cli/dist/src/browser/dashboard/ui.html +0 -261
  612. package/packages/@monomind/cli/dist/src/browser/workflow/engine.d.ts +0 -15
  613. package/packages/@monomind/cli/dist/src/browser/workflow/engine.js +0 -127
  614. package/packages/@monomind/cli/dist/src/browser/workflow/expression.d.ts +0 -4
  615. package/packages/@monomind/cli/dist/src/browser/workflow/expression.js +0 -64
  616. package/packages/@monomind/cli/dist/src/browser/workflow/store.d.ts +0 -24
  617. package/packages/@monomind/cli/dist/src/browser/workflow/store.js +0 -145
  618. package/packages/@monomind/cli/dist/src/browser/workflow/types.d.ts +0 -48
  619. package/packages/@monomind/cli/dist/src/browser/workflow/types.js +0 -2
  620. package/packages/@monomind/cli/dist/src/capabilities/cap-code.d.ts +0 -3
  621. package/packages/@monomind/cli/dist/src/capabilities/cap-code.js +0 -20
  622. package/packages/@monomind/cli/dist/src/capabilities/cap-data.d.ts +0 -3
  623. package/packages/@monomind/cli/dist/src/capabilities/cap-data.js +0 -165
  624. package/packages/@monomind/cli/dist/src/capabilities/cap-documents.d.ts +0 -5
  625. package/packages/@monomind/cli/dist/src/capabilities/cap-documents.js +0 -139
  626. package/packages/@monomind/cli/dist/src/capabilities/cap-graph.d.ts +0 -3
  627. package/packages/@monomind/cli/dist/src/capabilities/cap-graph.js +0 -84
  628. package/packages/@monomind/cli/dist/src/capabilities/cap-media.d.ts +0 -3
  629. package/packages/@monomind/cli/dist/src/capabilities/cap-media.js +0 -147
  630. package/packages/@monomind/cli/dist/src/capabilities/cap-timeline.d.ts +0 -3
  631. package/packages/@monomind/cli/dist/src/capabilities/cap-timeline.js +0 -90
  632. package/packages/@monomind/cli/dist/src/capabilities/index.d.ts +0 -10
  633. package/packages/@monomind/cli/dist/src/capabilities/index.js +0 -18
  634. package/packages/@monomind/cli/dist/src/capabilities/manager.d.ts +0 -13
  635. package/packages/@monomind/cli/dist/src/capabilities/manager.js +0 -79
  636. package/packages/@monomind/cli/dist/src/capabilities/scanner.d.ts +0 -10
  637. package/packages/@monomind/cli/dist/src/capabilities/scanner.js +0 -125
  638. package/packages/@monomind/cli/dist/src/capabilities/types.d.ts +0 -64
  639. package/packages/@monomind/cli/dist/src/capabilities/types.js +0 -2
  640. package/packages/@monomind/cli/dist/src/commands/agent-lifecycle.d.ts +0 -17
  641. package/packages/@monomind/cli/dist/src/commands/agent-lifecycle.js +0 -346
  642. package/packages/@monomind/cli/dist/src/commands/agent-ops.d.ts +0 -8
  643. package/packages/@monomind/cli/dist/src/commands/agent-ops.js +0 -277
  644. package/packages/@monomind/cli/dist/src/commands/agent.d.ts +0 -8
  645. package/packages/@monomind/cli/dist/src/commands/agent.js +0 -40
  646. package/packages/@monomind/cli/dist/src/commands/analyze-ast.d.ts +0 -26
  647. package/packages/@monomind/cli/dist/src/commands/analyze-ast.js +0 -284
  648. package/packages/@monomind/cli/dist/src/commands/analyze-diff.d.ts +0 -8
  649. package/packages/@monomind/cli/dist/src/commands/analyze-diff.js +0 -395
  650. package/packages/@monomind/cli/dist/src/commands/analyze-imports.d.ts +0 -11
  651. package/packages/@monomind/cli/dist/src/commands/analyze-imports.js +0 -287
  652. package/packages/@monomind/cli/dist/src/commands/analyze-symbols.d.ts +0 -14
  653. package/packages/@monomind/cli/dist/src/commands/analyze-symbols.js +0 -302
  654. package/packages/@monomind/cli/dist/src/commands/analyze.d.ts +0 -53
  655. package/packages/@monomind/cli/dist/src/commands/analyze.js +0 -217
  656. package/packages/@monomind/cli/dist/src/commands/autopilot.d.ts +0 -15
  657. package/packages/@monomind/cli/dist/src/commands/autopilot.js +0 -370
  658. package/packages/@monomind/cli/dist/src/commands/browse-action.d.ts +0 -4
  659. package/packages/@monomind/cli/dist/src/commands/browse-action.js +0 -244
  660. package/packages/@monomind/cli/dist/src/commands/browse-platform.d.ts +0 -4
  661. package/packages/@monomind/cli/dist/src/commands/browse-platform.js +0 -117
  662. package/packages/@monomind/cli/dist/src/commands/browse-workflow.d.ts +0 -4
  663. package/packages/@monomind/cli/dist/src/commands/browse-workflow.js +0 -183
  664. package/packages/@monomind/cli/dist/src/commands/browse.d.ts +0 -12
  665. package/packages/@monomind/cli/dist/src/commands/browse.js +0 -17
  666. package/packages/@monomind/cli/dist/src/commands/cleanup.d.ts +0 -45
  667. package/packages/@monomind/cli/dist/src/commands/cleanup.js +0 -581
  668. package/packages/@monomind/cli/dist/src/commands/completions.d.ts +0 -10
  669. package/packages/@monomind/cli/dist/src/commands/completions.js +0 -261
  670. package/packages/@monomind/cli/dist/src/commands/config.d.ts +0 -8
  671. package/packages/@monomind/cli/dist/src/commands/config.js +0 -462
  672. package/packages/@monomind/cli/dist/src/commands/crash-reporting.d.ts +0 -8
  673. package/packages/@monomind/cli/dist/src/commands/crash-reporting.js +0 -50
  674. package/packages/@monomind/cli/dist/src/commands/design-detect.d.ts +0 -27
  675. package/packages/@monomind/cli/dist/src/commands/design-detect.js +0 -220
  676. package/packages/@monomind/cli/dist/src/commands/design-palette.d.ts +0 -21
  677. package/packages/@monomind/cli/dist/src/commands/design-palette.js +0 -538
  678. package/packages/@monomind/cli/dist/src/commands/doc.d.ts +0 -7
  679. package/packages/@monomind/cli/dist/src/commands/doc.js +0 -268
  680. package/packages/@monomind/cli/dist/src/commands/doctor-env-checks.d.ts +0 -26
  681. package/packages/@monomind/cli/dist/src/commands/doctor-env-checks.js +0 -194
  682. package/packages/@monomind/cli/dist/src/commands/doctor-monoes-checks.d.ts +0 -12
  683. package/packages/@monomind/cli/dist/src/commands/doctor-monoes-checks.js +0 -160
  684. package/packages/@monomind/cli/dist/src/commands/doctor-project-checks.d.ts +0 -46
  685. package/packages/@monomind/cli/dist/src/commands/doctor-project-checks.js +0 -764
  686. package/packages/@monomind/cli/dist/src/commands/doctor.d.ts +0 -10
  687. package/packages/@monomind/cli/dist/src/commands/doctor.js +0 -232
  688. package/packages/@monomind/cli/dist/src/commands/guidance.d.ts +0 -12
  689. package/packages/@monomind/cli/dist/src/commands/guidance.js +0 -163
  690. package/packages/@monomind/cli/dist/src/commands/hooks-core-commands.d.ts +0 -10
  691. package/packages/@monomind/cli/dist/src/commands/hooks-core-commands.js +0 -377
  692. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-commands.d.ts +0 -11
  693. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-commands.js +0 -417
  694. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-gaps.d.ts +0 -6
  695. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-gaps.js +0 -219
  696. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-routing.d.ts +0 -7
  697. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-routing.js +0 -399
  698. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-utils.d.ts +0 -42
  699. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-utils.js +0 -220
  700. package/packages/@monomind/cli/dist/src/commands/hooks-extended-commands.d.ts +0 -11
  701. package/packages/@monomind/cli/dist/src/commands/hooks-extended-commands.js +0 -243
  702. package/packages/@monomind/cli/dist/src/commands/hooks-formatting.d.ts +0 -9
  703. package/packages/@monomind/cli/dist/src/commands/hooks-formatting.js +0 -25
  704. package/packages/@monomind/cli/dist/src/commands/hooks-routing-commands.d.ts +0 -15
  705. package/packages/@monomind/cli/dist/src/commands/hooks-routing-commands.js +0 -725
  706. package/packages/@monomind/cli/dist/src/commands/hooks-workers.d.ts +0 -9
  707. package/packages/@monomind/cli/dist/src/commands/hooks-workers.js +0 -547
  708. package/packages/@monomind/cli/dist/src/commands/hooks.d.ts +0 -16
  709. package/packages/@monomind/cli/dist/src/commands/hooks.js +0 -497
  710. package/packages/@monomind/cli/dist/src/commands/index.d.ts +0 -65
  711. package/packages/@monomind/cli/dist/src/commands/index.js +0 -236
  712. package/packages/@monomind/cli/dist/src/commands/init-subcommands.d.ts +0 -8
  713. package/packages/@monomind/cli/dist/src/commands/init-subcommands.js +0 -156
  714. package/packages/@monomind/cli/dist/src/commands/init-upgrade.d.ts +0 -6
  715. package/packages/@monomind/cli/dist/src/commands/init-upgrade.js +0 -203
  716. package/packages/@monomind/cli/dist/src/commands/init-wizard.d.ts +0 -6
  717. package/packages/@monomind/cli/dist/src/commands/init-wizard.js +0 -244
  718. package/packages/@monomind/cli/dist/src/commands/init.d.ts +0 -8
  719. package/packages/@monomind/cli/dist/src/commands/init.js +0 -411
  720. package/packages/@monomind/cli/dist/src/commands/mcp.d.ts +0 -11
  721. package/packages/@monomind/cli/dist/src/commands/mcp.js +0 -747
  722. package/packages/@monomind/cli/dist/src/commands/memory-admin.d.ts +0 -9
  723. package/packages/@monomind/cli/dist/src/commands/memory-admin.js +0 -345
  724. package/packages/@monomind/cli/dist/src/commands/memory-crud.d.ts +0 -9
  725. package/packages/@monomind/cli/dist/src/commands/memory-crud.js +0 -389
  726. package/packages/@monomind/cli/dist/src/commands/memory-list.d.ts +0 -10
  727. package/packages/@monomind/cli/dist/src/commands/memory-list.js +0 -321
  728. package/packages/@monomind/cli/dist/src/commands/memory-transfer.d.ts +0 -8
  729. package/packages/@monomind/cli/dist/src/commands/memory-transfer.js +0 -199
  730. package/packages/@monomind/cli/dist/src/commands/memory.d.ts +0 -14
  731. package/packages/@monomind/cli/dist/src/commands/memory.js +0 -282
  732. package/packages/@monomind/cli/dist/src/commands/monograph.d.ts +0 -8
  733. package/packages/@monomind/cli/dist/src/commands/monograph.js +0 -548
  734. package/packages/@monomind/cli/dist/src/commands/neural-core.d.ts +0 -10
  735. package/packages/@monomind/cli/dist/src/commands/neural-core.js +0 -413
  736. package/packages/@monomind/cli/dist/src/commands/neural-optimize.d.ts +0 -7
  737. package/packages/@monomind/cli/dist/src/commands/neural-optimize.js +0 -330
  738. package/packages/@monomind/cli/dist/src/commands/neural-registry.d.ts +0 -7
  739. package/packages/@monomind/cli/dist/src/commands/neural-registry.js +0 -290
  740. package/packages/@monomind/cli/dist/src/commands/org-observe.d.ts +0 -18
  741. package/packages/@monomind/cli/dist/src/commands/org-observe.js +0 -353
  742. package/packages/@monomind/cli/dist/src/commands/org.d.ts +0 -25
  743. package/packages/@monomind/cli/dist/src/commands/org.js +0 -860
  744. package/packages/@monomind/cli/dist/src/commands/performance.d.ts +0 -10
  745. package/packages/@monomind/cli/dist/src/commands/performance.js +0 -656
  746. package/packages/@monomind/cli/dist/src/commands/platforms.d.ts +0 -11
  747. package/packages/@monomind/cli/dist/src/commands/platforms.js +0 -600
  748. package/packages/@monomind/cli/dist/src/commands/providers.d.ts +0 -10
  749. package/packages/@monomind/cli/dist/src/commands/providers.js +0 -351
  750. package/packages/@monomind/cli/dist/src/commands/report-crash.d.ts +0 -10
  751. package/packages/@monomind/cli/dist/src/commands/report-crash.js +0 -66
  752. package/packages/@monomind/cli/dist/src/commands/route.d.ts +0 -16
  753. package/packages/@monomind/cli/dist/src/commands/route.js +0 -944
  754. package/packages/@monomind/cli/dist/src/commands/search-universal.d.ts +0 -19
  755. package/packages/@monomind/cli/dist/src/commands/search-universal.js +0 -151
  756. package/packages/@monomind/cli/dist/src/commands/security-cve.d.ts +0 -6
  757. package/packages/@monomind/cli/dist/src/commands/security-cve.js +0 -308
  758. package/packages/@monomind/cli/dist/src/commands/security-misc.d.ts +0 -8
  759. package/packages/@monomind/cli/dist/src/commands/security-misc.js +0 -336
  760. package/packages/@monomind/cli/dist/src/commands/security-scan.d.ts +0 -47
  761. package/packages/@monomind/cli/dist/src/commands/security-scan.js +0 -447
  762. package/packages/@monomind/cli/dist/src/commands/security.d.ts +0 -10
  763. package/packages/@monomind/cli/dist/src/commands/security.js +0 -41
  764. package/packages/@monomind/cli/dist/src/commands/session.d.ts +0 -8
  765. package/packages/@monomind/cli/dist/src/commands/session.js +0 -660
  766. package/packages/@monomind/cli/dist/src/commands/start.d.ts +0 -8
  767. package/packages/@monomind/cli/dist/src/commands/start.js +0 -490
  768. package/packages/@monomind/cli/dist/src/commands/status.d.ts +0 -8
  769. package/packages/@monomind/cli/dist/src/commands/status.js +0 -642
  770. package/packages/@monomind/cli/dist/src/commands/swarm.d.ts +0 -8
  771. package/packages/@monomind/cli/dist/src/commands/swarm.js +0 -906
  772. package/packages/@monomind/cli/dist/src/commands/task.d.ts +0 -8
  773. package/packages/@monomind/cli/dist/src/commands/task.js +0 -639
  774. package/packages/@monomind/cli/dist/src/commands/tokens.d.ts +0 -8
  775. package/packages/@monomind/cli/dist/src/commands/tokens.js +0 -206
  776. package/packages/@monomind/cli/dist/src/commands/update.d.ts +0 -8
  777. package/packages/@monomind/cli/dist/src/commands/update.js +0 -288
  778. package/packages/@monomind/cli/dist/src/consensus/audit-writer.d.ts +0 -77
  779. package/packages/@monomind/cli/dist/src/consensus/audit-writer.js +0 -196
  780. package/packages/@monomind/cli/dist/src/consensus/tally.d.ts +0 -19
  781. package/packages/@monomind/cli/dist/src/consensus/tally.js +0 -34
  782. package/packages/@monomind/cli/dist/src/index.d.ts +0 -81
  783. package/packages/@monomind/cli/dist/src/index.js +0 -574
  784. package/packages/@monomind/cli/dist/src/init/claudemd-generator.d.ts +0 -25
  785. package/packages/@monomind/cli/dist/src/init/claudemd-generator.js +0 -624
  786. package/packages/@monomind/cli/dist/src/init/executor.d.ts +0 -47
  787. package/packages/@monomind/cli/dist/src/init/executor.js +0 -2387
  788. package/packages/@monomind/cli/dist/src/init/helpers-generator.d.ts +0 -73
  789. package/packages/@monomind/cli/dist/src/init/helpers-generator.js +0 -1335
  790. package/packages/@monomind/cli/dist/src/init/index.d.ts +0 -13
  791. package/packages/@monomind/cli/dist/src/init/index.js +0 -15
  792. package/packages/@monomind/cli/dist/src/init/mcp-generator.d.ts +0 -26
  793. package/packages/@monomind/cli/dist/src/init/mcp-generator.js +0 -107
  794. package/packages/@monomind/cli/dist/src/init/settings-generator.d.ts +0 -14
  795. package/packages/@monomind/cli/dist/src/init/settings-generator.js +0 -487
  796. package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.d.ts +0 -38
  797. package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.js +0 -602
  798. package/packages/@monomind/cli/dist/src/init/statusline-generator.d.ts +0 -25
  799. package/packages/@monomind/cli/dist/src/init/statusline-generator.js +0 -1358
  800. package/packages/@monomind/cli/dist/src/init/types.d.ts +0 -308
  801. package/packages/@monomind/cli/dist/src/init/types.js +0 -247
  802. package/packages/@monomind/cli/dist/src/knowledge/document-pipeline.d.ts +0 -75
  803. package/packages/@monomind/cli/dist/src/knowledge/document-pipeline.js +0 -556
  804. package/packages/@monomind/cli/dist/src/mcp-client.d.ts +0 -64
  805. package/packages/@monomind/cli/dist/src/mcp-client.js +0 -338
  806. package/packages/@monomind/cli/dist/src/mcp-server.d.ts +0 -170
  807. package/packages/@monomind/cli/dist/src/mcp-server.js +0 -964
  808. package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.d.ts +0 -30
  809. package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.js +0 -603
  810. package/packages/@monomind/cli/dist/src/mcp-tools/analyze-tools.d.ts +0 -38
  811. package/packages/@monomind/cli/dist/src/mcp-tools/analyze-tools.js +0 -389
  812. package/packages/@monomind/cli/dist/src/mcp-tools/auto-install.d.ts +0 -75
  813. package/packages/@monomind/cli/dist/src/mcp-tools/auto-install.js +0 -125
  814. package/packages/@monomind/cli/dist/src/mcp-tools/autopilot-tools.d.ts +0 -12
  815. package/packages/@monomind/cli/dist/src/mcp-tools/autopilot-tools.js +0 -237
  816. package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.d.ts +0 -11
  817. package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.js +0 -1111
  818. package/packages/@monomind/cli/dist/src/mcp-tools/claims-tools.d.ts +0 -12
  819. package/packages/@monomind/cli/dist/src/mcp-tools/claims-tools.js +0 -827
  820. package/packages/@monomind/cli/dist/src/mcp-tools/config-tools.d.ts +0 -8
  821. package/packages/@monomind/cli/dist/src/mcp-tools/config-tools.js +0 -447
  822. package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.d.ts +0 -11
  823. package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.js +0 -866
  824. package/packages/@monomind/cli/dist/src/mcp-tools/github-tools.d.ts +0 -9
  825. package/packages/@monomind/cli/dist/src/mcp-tools/github-tools.js +0 -582
  826. package/packages/@monomind/cli/dist/src/mcp-tools/graphify-tools.d.ts +0 -10
  827. package/packages/@monomind/cli/dist/src/mcp-tools/graphify-tools.js +0 -58
  828. package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.d.ts +0 -15
  829. package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.js +0 -634
  830. package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.d.ts +0 -17
  831. package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.js +0 -1237
  832. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-embedding.d.ts +0 -161
  833. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-embedding.js +0 -516
  834. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-intelligence.d.ts +0 -22
  835. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-intelligence.js +0 -888
  836. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-routing.d.ts +0 -26
  837. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-routing.js +0 -1582
  838. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.d.ts +0 -9
  839. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.js +0 -51
  840. package/packages/@monomind/cli/dist/src/mcp-tools/index.d.ts +0 -31
  841. package/packages/@monomind/cli/dist/src/mcp-tools/index.js +0 -31
  842. package/packages/@monomind/cli/dist/src/mcp-tools/knowledge-tools.d.ts +0 -6
  843. package/packages/@monomind/cli/dist/src/mcp-tools/knowledge-tools.js +0 -156
  844. package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.d.ts +0 -35
  845. package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +0 -776
  846. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-compat.d.ts +0 -26
  847. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-compat.js +0 -136
  848. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.d.ts +0 -27
  849. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +0 -2443
  850. package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.d.ts +0 -15
  851. package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.js +0 -506
  852. package/packages/@monomind/cli/dist/src/mcp-tools/performance-tools.d.ts +0 -16
  853. package/packages/@monomind/cli/dist/src/mcp-tools/performance-tools.js +0 -680
  854. package/packages/@monomind/cli/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.d.ts +0 -261
  855. package/packages/@monomind/cli/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.js +0 -423
  856. package/packages/@monomind/cli/dist/src/mcp-tools/quality/security-compliance/detect-secrets.d.ts +0 -137
  857. package/packages/@monomind/cli/dist/src/mcp-tools/quality/security-compliance/detect-secrets.js +0 -383
  858. package/packages/@monomind/cli/dist/src/mcp-tools/quality-tools.d.ts +0 -14
  859. package/packages/@monomind/cli/dist/src/mcp-tools/quality-tools.js +0 -58
  860. package/packages/@monomind/cli/dist/src/mcp-tools/request-tracker.d.ts +0 -17
  861. package/packages/@monomind/cli/dist/src/mcp-tools/request-tracker.js +0 -44
  862. package/packages/@monomind/cli/dist/src/mcp-tools/security-tools.d.ts +0 -18
  863. package/packages/@monomind/cli/dist/src/mcp-tools/security-tools.js +0 -576
  864. package/packages/@monomind/cli/dist/src/mcp-tools/session-tools.d.ts +0 -8
  865. package/packages/@monomind/cli/dist/src/mcp-tools/session-tools.js +0 -431
  866. package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.d.ts +0 -9
  867. package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.js +0 -411
  868. package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.d.ts +0 -13
  869. package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.js +0 -561
  870. package/packages/@monomind/cli/dist/src/mcp-tools/task-tools.d.ts +0 -28
  871. package/packages/@monomind/cli/dist/src/mcp-tools/task-tools.js +0 -514
  872. package/packages/@monomind/cli/dist/src/mcp-tools/terminal-tools.d.ts +0 -10
  873. package/packages/@monomind/cli/dist/src/mcp-tools/terminal-tools.js +0 -397
  874. package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.d.ts +0 -27
  875. package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.js +0 -76
  876. package/packages/@monomind/cli/dist/src/mcp-tools/types.d.ts +0 -58
  877. package/packages/@monomind/cli/dist/src/mcp-tools/types.js +0 -98
  878. package/packages/@monomind/cli/dist/src/memory/embedding-operations.d.ts +0 -58
  879. package/packages/@monomind/cli/dist/src/memory/embedding-operations.js +0 -262
  880. package/packages/@monomind/cli/dist/src/memory/ewc-consolidation.d.ts +0 -319
  881. package/packages/@monomind/cli/dist/src/memory/ewc-consolidation.js +0 -698
  882. package/packages/@monomind/cli/dist/src/memory/hnsw-operations.d.ts +0 -142
  883. package/packages/@monomind/cli/dist/src/memory/hnsw-operations.js +0 -465
  884. package/packages/@monomind/cli/dist/src/memory/intelligence.d.ts +0 -368
  885. package/packages/@monomind/cli/dist/src/memory/intelligence.js +0 -1456
  886. package/packages/@monomind/cli/dist/src/memory/memory-bridge.d.ts +0 -333
  887. package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +0 -1104
  888. package/packages/@monomind/cli/dist/src/memory/memory-crud.d.ts +0 -67
  889. package/packages/@monomind/cli/dist/src/memory/memory-crud.js +0 -454
  890. package/packages/@monomind/cli/dist/src/memory/memory-initializer.d.ts +0 -101
  891. package/packages/@monomind/cli/dist/src/memory/memory-initializer.js +0 -431
  892. package/packages/@monomind/cli/dist/src/memory/memory-kg.d.ts +0 -186
  893. package/packages/@monomind/cli/dist/src/memory/memory-kg.js +0 -450
  894. package/packages/@monomind/cli/dist/src/memory/memory-migrations.d.ts +0 -30
  895. package/packages/@monomind/cli/dist/src/memory/memory-migrations.js +0 -136
  896. package/packages/@monomind/cli/dist/src/memory/memory-read.d.ts +0 -87
  897. package/packages/@monomind/cli/dist/src/memory/memory-read.js +0 -333
  898. package/packages/@monomind/cli/dist/src/memory/memory-schema.d.ts +0 -13
  899. package/packages/@monomind/cli/dist/src/memory/memory-schema.js +0 -167
  900. package/packages/@monomind/cli/dist/src/memory/query-router.d.ts +0 -44
  901. package/packages/@monomind/cli/dist/src/memory/query-router.js +0 -113
  902. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.d.ts +0 -237
  903. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.js +0 -647
  904. package/packages/@monomind/cli/dist/src/monovector/command-outcomes.d.ts +0 -37
  905. package/packages/@monomind/cli/dist/src/monovector/command-outcomes.js +0 -126
  906. package/packages/@monomind/cli/dist/src/monovector/coverage-router.d.ts +0 -103
  907. package/packages/@monomind/cli/dist/src/monovector/coverage-router.js +0 -341
  908. package/packages/@monomind/cli/dist/src/monovector/coverage-tools.d.ts +0 -14
  909. package/packages/@monomind/cli/dist/src/monovector/coverage-tools.js +0 -115
  910. package/packages/@monomind/cli/dist/src/monovector/diff-classifier.d.ts +0 -174
  911. package/packages/@monomind/cli/dist/src/monovector/diff-classifier.js +0 -738
  912. package/packages/@monomind/cli/dist/src/monovector/index.d.ts +0 -54
  913. package/packages/@monomind/cli/dist/src/monovector/index.js +0 -55
  914. package/packages/@monomind/cli/dist/src/monovector/init-state.d.ts +0 -35
  915. package/packages/@monomind/cli/dist/src/monovector/init-state.js +0 -36
  916. package/packages/@monomind/cli/dist/src/monovector/route-outcomes.d.ts +0 -56
  917. package/packages/@monomind/cli/dist/src/monovector/route-outcomes.js +0 -189
  918. package/packages/@monomind/cli/dist/src/observability/replay-reader.d.ts +0 -40
  919. package/packages/@monomind/cli/dist/src/observability/replay-reader.js +0 -138
  920. package/packages/@monomind/cli/dist/src/orgrt/broker.d.ts +0 -26
  921. package/packages/@monomind/cli/dist/src/orgrt/broker.js +0 -73
  922. package/packages/@monomind/cli/dist/src/orgrt/bus.d.ts +0 -27
  923. package/packages/@monomind/cli/dist/src/orgrt/bus.js +0 -71
  924. package/packages/@monomind/cli/dist/src/orgrt/daemon.d.ts +0 -175
  925. package/packages/@monomind/cli/dist/src/orgrt/daemon.js +0 -965
  926. package/packages/@monomind/cli/dist/src/orgrt/forwarder.d.ts +0 -16
  927. package/packages/@monomind/cli/dist/src/orgrt/forwarder.js +0 -171
  928. package/packages/@monomind/cli/dist/src/orgrt/inbox.d.ts +0 -11
  929. package/packages/@monomind/cli/dist/src/orgrt/inbox.js +0 -91
  930. package/packages/@monomind/cli/dist/src/orgrt/mailbox.d.ts +0 -49
  931. package/packages/@monomind/cli/dist/src/orgrt/mailbox.js +0 -75
  932. package/packages/@monomind/cli/dist/src/orgrt/migrate.d.ts +0 -26
  933. package/packages/@monomind/cli/dist/src/orgrt/migrate.js +0 -118
  934. package/packages/@monomind/cli/dist/src/orgrt/policy.d.ts +0 -28
  935. package/packages/@monomind/cli/dist/src/orgrt/policy.js +0 -146
  936. package/packages/@monomind/cli/dist/src/orgrt/provider.d.ts +0 -9
  937. package/packages/@monomind/cli/dist/src/orgrt/provider.js +0 -55
  938. package/packages/@monomind/cli/dist/src/orgrt/reporting.d.ts +0 -40
  939. package/packages/@monomind/cli/dist/src/orgrt/reporting.js +0 -134
  940. package/packages/@monomind/cli/dist/src/orgrt/scheduler.d.ts +0 -13
  941. package/packages/@monomind/cli/dist/src/orgrt/scheduler.js +0 -48
  942. package/packages/@monomind/cli/dist/src/orgrt/server.d.ts +0 -9
  943. package/packages/@monomind/cli/dist/src/orgrt/server.js +0 -88
  944. package/packages/@monomind/cli/dist/src/orgrt/session.d.ts +0 -62
  945. package/packages/@monomind/cli/dist/src/orgrt/session.js +0 -157
  946. package/packages/@monomind/cli/dist/src/orgrt/templates.d.ts +0 -17
  947. package/packages/@monomind/cli/dist/src/orgrt/templates.js +0 -62
  948. package/packages/@monomind/cli/dist/src/orgrt/test-loop.d.ts +0 -12
  949. package/packages/@monomind/cli/dist/src/orgrt/test-loop.js +0 -108
  950. package/packages/@monomind/cli/dist/src/orgrt/types.d.ts +0 -910
  951. package/packages/@monomind/cli/dist/src/orgrt/types.js +0 -57
  952. package/packages/@monomind/cli/dist/src/output.d.ts +0 -133
  953. package/packages/@monomind/cli/dist/src/output.js +0 -529
  954. package/packages/@monomind/cli/dist/src/parser.d.ts +0 -93
  955. package/packages/@monomind/cli/dist/src/parser.js +0 -651
  956. package/packages/@monomind/cli/dist/src/pricing/model-pricing.d.ts +0 -41
  957. package/packages/@monomind/cli/dist/src/pricing/model-pricing.js +0 -61
  958. package/packages/@monomind/cli/dist/src/production/circuit-breaker.d.ts +0 -121
  959. package/packages/@monomind/cli/dist/src/production/circuit-breaker.js +0 -262
  960. package/packages/@monomind/cli/dist/src/production/error-handler.d.ts +0 -119
  961. package/packages/@monomind/cli/dist/src/production/error-handler.js +0 -324
  962. package/packages/@monomind/cli/dist/src/production/index.d.ts +0 -6
  963. package/packages/@monomind/cli/dist/src/production/index.js +0 -6
  964. package/packages/@monomind/cli/dist/src/production/monitoring.d.ts +0 -181
  965. package/packages/@monomind/cli/dist/src/production/monitoring.js +0 -375
  966. package/packages/@monomind/cli/dist/src/production/rate-limiter.d.ts +0 -125
  967. package/packages/@monomind/cli/dist/src/production/rate-limiter.js +0 -218
  968. package/packages/@monomind/cli/dist/src/production/retry.d.ts +0 -48
  969. package/packages/@monomind/cli/dist/src/production/retry.js +0 -189
  970. package/packages/@monomind/cli/dist/src/prompt.d.ts +0 -44
  971. package/packages/@monomind/cli/dist/src/prompt.js +0 -501
  972. package/packages/@monomind/cli/dist/src/routing/embed-worker.d.ts +0 -2
  973. package/packages/@monomind/cli/dist/src/routing/embed-worker.js +0 -79
  974. package/packages/@monomind/cli/dist/src/routing/embedder.d.ts +0 -31
  975. package/packages/@monomind/cli/dist/src/routing/embedder.js +0 -0
  976. package/packages/@monomind/cli/dist/src/routing/llm-caller.d.ts +0 -24
  977. package/packages/@monomind/cli/dist/src/routing/llm-caller.js +0 -134
  978. package/packages/@monomind/cli/dist/src/routing/route-layer-factory.d.ts +0 -24
  979. package/packages/@monomind/cli/dist/src/routing/route-layer-factory.js +0 -239
  980. package/packages/@monomind/cli/dist/src/services/config-file-manager.d.ts +0 -80
  981. package/packages/@monomind/cli/dist/src/services/config-file-manager.js +0 -401
  982. package/packages/@monomind/cli/dist/src/services/crash-reporter.d.ts +0 -42
  983. package/packages/@monomind/cli/dist/src/services/crash-reporter.js +0 -374
  984. package/packages/@monomind/cli/dist/src/suggest.d.ts +0 -53
  985. package/packages/@monomind/cli/dist/src/suggest.js +0 -197
  986. package/packages/@monomind/cli/dist/src/sync/checker.d.ts +0 -12
  987. package/packages/@monomind/cli/dist/src/sync/checker.js +0 -26
  988. package/packages/@monomind/cli/dist/src/transfer/anonymization/index.d.ts +0 -22
  989. package/packages/@monomind/cli/dist/src/transfer/anonymization/index.js +0 -192
  990. package/packages/@monomind/cli/dist/src/transfer/types.d.ts +0 -245
  991. package/packages/@monomind/cli/dist/src/transfer/types.js +0 -6
  992. package/packages/@monomind/cli/dist/src/types.d.ts +0 -190
  993. package/packages/@monomind/cli/dist/src/types.js +0 -20
  994. package/packages/@monomind/cli/dist/src/ui/collector.mjs +0 -879
  995. package/packages/@monomind/cli/dist/src/ui/dashboard.html +0 -13949
  996. package/packages/@monomind/cli/dist/src/ui/data/agent-avatars.html +0 -763
  997. package/packages/@monomind/cli/dist/src/ui/data/agent-avatars.json +0 -966
  998. package/packages/@monomind/cli/dist/src/ui/data/avatars/account-strategist.svg +0 -58
  999. package/packages/@monomind/cli/dist/src/ui/data/avatars/accounts-payable.svg +0 -54
  1000. package/packages/@monomind/cli/dist/src/ui/data/avatars/adaptive-coordinator.svg +0 -55
  1001. package/packages/@monomind/cli/dist/src/ui/data/avatars/adaptive-coordinator2.svg +0 -54
  1002. package/packages/@monomind/cli/dist/src/ui/data/avatars/ai-citation.svg +0 -57
  1003. package/packages/@monomind/cli/dist/src/ui/data/avatars/ai-engineer.svg +0 -61
  1004. package/packages/@monomind/cli/dist/src/ui/data/avatars/analytics-reporter.svg +0 -53
  1005. package/packages/@monomind/cli/dist/src/ui/data/avatars/api-tester.svg +0 -53
  1006. package/packages/@monomind/cli/dist/src/ui/data/avatars/architecture.svg +0 -54
  1007. package/packages/@monomind/cli/dist/src/ui/data/avatars/automation-governance.svg +0 -55
  1008. package/packages/@monomind/cli/dist/src/ui/data/avatars/backend-dev.svg +0 -53
  1009. package/packages/@monomind/cli/dist/src/ui/data/avatars/benchmarker.svg +0 -54
  1010. package/packages/@monomind/cli/dist/src/ui/data/avatars/blockchain-auditor.svg +0 -53
  1011. package/packages/@monomind/cli/dist/src/ui/data/avatars/byzantine-coord.svg +0 -57
  1012. package/packages/@monomind/cli/dist/src/ui/data/avatars/case-analyst.svg +0 -57
  1013. package/packages/@monomind/cli/dist/src/ui/data/avatars/cicd-engineer.svg +0 -55
  1014. package/packages/@monomind/cli/dist/src/ui/data/avatars/cloud-architect.svg +0 -54
  1015. package/packages/@monomind/cli/dist/src/ui/data/avatars/code-review-swarm.svg +0 -57
  1016. package/packages/@monomind/cli/dist/src/ui/data/avatars/coder-v119.svg +0 -57
  1017. package/packages/@monomind/cli/dist/src/ui/data/avatars/coder.svg +0 -58
  1018. package/packages/@monomind/cli/dist/src/ui/data/avatars/collective-coord.svg +0 -54
  1019. package/packages/@monomind/cli/dist/src/ui/data/avatars/compliance-auditor.svg +0 -58
  1020. package/packages/@monomind/cli/dist/src/ui/data/avatars/consensus-coordinator.svg +0 -54
  1021. package/packages/@monomind/cli/dist/src/ui/data/avatars/content-creator.svg +0 -54
  1022. package/packages/@monomind/cli/dist/src/ui/data/avatars/crdt-synchronizer.svg +0 -53
  1023. package/packages/@monomind/cli/dist/src/ui/data/avatars/cro-specialist.svg +0 -58
  1024. package/packages/@monomind/cli/dist/src/ui/data/avatars/data-consolidator.svg +0 -54
  1025. package/packages/@monomind/cli/dist/src/ui/data/avatars/data-engineer.svg +0 -53
  1026. package/packages/@monomind/cli/dist/src/ui/data/avatars/database-optimizer.svg +0 -61
  1027. package/packages/@monomind/cli/dist/src/ui/data/avatars/deal-strategist.svg +0 -54
  1028. package/packages/@monomind/cli/dist/src/ui/data/avatars/defender.svg +0 -53
  1029. package/packages/@monomind/cli/dist/src/ui/data/avatars/devops-automator.svg +0 -56
  1030. package/packages/@monomind/cli/dist/src/ui/data/avatars/discovery-coach.svg +0 -54
  1031. package/packages/@monomind/cli/dist/src/ui/data/avatars/email-marketing.svg +0 -57
  1032. package/packages/@monomind/cli/dist/src/ui/data/avatars/embedded-firmware.svg +0 -61
  1033. package/packages/@monomind/cli/dist/src/ui/data/avatars/evidence-collector.svg +0 -57
  1034. package/packages/@monomind/cli/dist/src/ui/data/avatars/experiment-tracker.svg +0 -53
  1035. package/packages/@monomind/cli/dist/src/ui/data/avatars/feedback-synthesizer.svg +0 -54
  1036. package/packages/@monomind/cli/dist/src/ui/data/avatars/finance-tracker.svg +0 -54
  1037. package/packages/@monomind/cli/dist/src/ui/data/avatars/frontend-developer.svg +0 -54
  1038. package/packages/@monomind/cli/dist/src/ui/data/avatars/game-audio-engineer.svg +0 -59
  1039. package/packages/@monomind/cli/dist/src/ui/data/avatars/game-designer.svg +0 -54
  1040. package/packages/@monomind/cli/dist/src/ui/data/avatars/gossip-coordinator.svg +0 -54
  1041. package/packages/@monomind/cli/dist/src/ui/data/avatars/hierarchical-coord.svg +0 -54
  1042. package/packages/@monomind/cli/dist/src/ui/data/avatars/incident-commander.svg +0 -57
  1043. package/packages/@monomind/cli/dist/src/ui/data/avatars/infrastructure.svg +0 -54
  1044. package/packages/@monomind/cli/dist/src/ui/data/avatars/input-validator.svg +0 -53
  1045. package/packages/@monomind/cli/dist/src/ui/data/avatars/ios-developer.svg +0 -54
  1046. package/packages/@monomind/cli/dist/src/ui/data/avatars/issue-tracker.svg +0 -53
  1047. package/packages/@monomind/cli/dist/src/ui/data/avatars/judge.svg +0 -55
  1048. package/packages/@monomind/cli/dist/src/ui/data/avatars/launch-strategist.svg +0 -54
  1049. package/packages/@monomind/cli/dist/src/ui/data/avatars/legal-compliance.svg +0 -53
  1050. package/packages/@monomind/cli/dist/src/ui/data/avatars/level-designer.svg +0 -53
  1051. package/packages/@monomind/cli/dist/src/ui/data/avatars/load-balancer.svg +0 -57
  1052. package/packages/@monomind/cli/dist/src/ui/data/avatars/mcp-builder.svg +0 -53
  1053. package/packages/@monomind/cli/dist/src/ui/data/avatars/memory-coordinator.svg +0 -55
  1054. package/packages/@monomind/cli/dist/src/ui/data/avatars/mesh-coordinator.svg +0 -55
  1055. package/packages/@monomind/cli/dist/src/ui/data/avatars/ml-developer.svg +0 -58
  1056. package/packages/@monomind/cli/dist/src/ui/data/avatars/mobile-app-builder.svg +0 -53
  1057. package/packages/@monomind/cli/dist/src/ui/data/avatars/mobile-dev.svg +0 -54
  1058. package/packages/@monomind/cli/dist/src/ui/data/avatars/model-qa.svg +0 -58
  1059. package/packages/@monomind/cli/dist/src/ui/data/avatars/narrative-designer.svg +0 -58
  1060. package/packages/@monomind/cli/dist/src/ui/data/avatars/outbound-strategist.svg +0 -55
  1061. package/packages/@monomind/cli/dist/src/ui/data/avatars/path-validator.svg +0 -54
  1062. package/packages/@monomind/cli/dist/src/ui/data/avatars/payment-agent.svg +0 -53
  1063. package/packages/@monomind/cli/dist/src/ui/data/avatars/perf-analyzer.svg +0 -58
  1064. package/packages/@monomind/cli/dist/src/ui/data/avatars/pipeline-analyst.svg +0 -54
  1065. package/packages/@monomind/cli/dist/src/ui/data/avatars/planner.svg +0 -55
  1066. package/packages/@monomind/cli/dist/src/ui/data/avatars/pr-manager.svg +0 -54
  1067. package/packages/@monomind/cli/dist/src/ui/data/avatars/pricing-strategist.svg +0 -54
  1068. package/packages/@monomind/cli/dist/src/ui/data/avatars/product-manager.svg +0 -54
  1069. package/packages/@monomind/cli/dist/src/ui/data/avatars/production-validator.svg +0 -54
  1070. package/packages/@monomind/cli/dist/src/ui/data/avatars/project-shepherd.svg +0 -54
  1071. package/packages/@monomind/cli/dist/src/ui/data/avatars/proposal-strategist.svg +0 -54
  1072. package/packages/@monomind/cli/dist/src/ui/data/avatars/prosecutor.svg +0 -57
  1073. package/packages/@monomind/cli/dist/src/ui/data/avatars/pseudocode.svg +0 -53
  1074. package/packages/@monomind/cli/dist/src/ui/data/avatars/queen-coordinator.svg +0 -55
  1075. package/packages/@monomind/cli/dist/src/ui/data/avatars/quorum-manager.svg +0 -53
  1076. package/packages/@monomind/cli/dist/src/ui/data/avatars/raft-manager.svg +0 -53
  1077. package/packages/@monomind/cli/dist/src/ui/data/avatars/reality-checker.svg +0 -58
  1078. package/packages/@monomind/cli/dist/src/ui/data/avatars/recruitment.svg +0 -58
  1079. package/packages/@monomind/cli/dist/src/ui/data/avatars/refinement.svg +0 -53
  1080. package/packages/@monomind/cli/dist/src/ui/data/avatars/release-manager.svg +0 -54
  1081. package/packages/@monomind/cli/dist/src/ui/data/avatars/repo-architect.svg +0 -54
  1082. package/packages/@monomind/cli/dist/src/ui/data/avatars/researcher.svg +0 -58
  1083. package/packages/@monomind/cli/dist/src/ui/data/avatars/resource-allocator.svg +0 -53
  1084. package/packages/@monomind/cli/dist/src/ui/data/avatars/reviewer.svg +0 -53
  1085. package/packages/@monomind/cli/dist/src/ui/data/avatars/safe-executor.svg +0 -53
  1086. package/packages/@monomind/cli/dist/src/ui/data/avatars/sales-coach.svg +0 -53
  1087. package/packages/@monomind/cli/dist/src/ui/data/avatars/sales-engineer.svg +0 -58
  1088. package/packages/@monomind/cli/dist/src/ui/data/avatars/scout-explorer.svg +0 -58
  1089. package/packages/@monomind/cli/dist/src/ui/data/avatars/security-architect.svg +0 -54
  1090. package/packages/@monomind/cli/dist/src/ui/data/avatars/security-auditor.svg +0 -55
  1091. package/packages/@monomind/cli/dist/src/ui/data/avatars/senior-developer.svg +0 -58
  1092. package/packages/@monomind/cli/dist/src/ui/data/avatars/senior-pm.svg +0 -58
  1093. package/packages/@monomind/cli/dist/src/ui/data/avatars/seo-specialist.svg +0 -57
  1094. package/packages/@monomind/cli/dist/src/ui/data/avatars/social-media.svg +0 -54
  1095. package/packages/@monomind/cli/dist/src/ui/data/avatars/solidity-engineer.svg +0 -58
  1096. package/packages/@monomind/cli/dist/src/ui/data/avatars/sparc-coder.svg +0 -58
  1097. package/packages/@monomind/cli/dist/src/ui/data/avatars/sparc-coord.svg +0 -56
  1098. package/packages/@monomind/cli/dist/src/ui/data/avatars/specification.svg +0 -57
  1099. package/packages/@monomind/cli/dist/src/ui/data/avatars/sprint-prioritizer.svg +0 -53
  1100. package/packages/@monomind/cli/dist/src/ui/data/avatars/sre.svg +0 -54
  1101. package/packages/@monomind/cli/dist/src/ui/data/avatars/studio-operations.svg +0 -53
  1102. package/packages/@monomind/cli/dist/src/ui/data/avatars/studio-producer.svg +0 -55
  1103. package/packages/@monomind/cli/dist/src/ui/data/avatars/support-responder.svg +0 -56
  1104. package/packages/@monomind/cli/dist/src/ui/data/avatars/system-architect.svg +0 -54
  1105. package/packages/@monomind/cli/dist/src/ui/data/avatars/task-orchestrator.svg +0 -56
  1106. package/packages/@monomind/cli/dist/src/ui/data/avatars/technical-artist.svg +0 -53
  1107. package/packages/@monomind/cli/dist/src/ui/data/avatars/technical-writer.svg +0 -59
  1108. package/packages/@monomind/cli/dist/src/ui/data/avatars/tester.svg +0 -53
  1109. package/packages/@monomind/cli/dist/src/ui/data/avatars/threat-detection.svg +0 -61
  1110. package/packages/@monomind/cli/dist/src/ui/data/avatars/trend-researcher.svg +0 -54
  1111. package/packages/@monomind/cli/dist/src/ui/data/avatars/trial-director.svg +0 -55
  1112. package/packages/@monomind/cli/dist/src/ui/data/avatars/unity-architect.svg +0 -54
  1113. package/packages/@monomind/cli/dist/src/ui/data/avatars/visionos-engineer.svg +0 -57
  1114. package/packages/@monomind/cli/dist/src/ui/data/avatars/worker-specialist.svg +0 -55
  1115. package/packages/@monomind/cli/dist/src/ui/data/avatars/workflow-architect.svg +0 -57
  1116. package/packages/@monomind/cli/dist/src/ui/data/avatars/workflow-automation.svg +0 -54
  1117. package/packages/@monomind/cli/dist/src/ui/data/avatars/zk-steward.svg +0 -54
  1118. package/packages/@monomind/cli/dist/src/ui/data/known-projects.json +0 -1
  1119. package/packages/@monomind/cli/dist/src/ui/data/mastermind-sessions.json +0 -1
  1120. package/packages/@monomind/cli/dist/src/ui/data/sessions/_index.json +0 -1
  1121. package/packages/@monomind/cli/dist/src/ui/mastermind-diagram-fallback.html +0 -1069
  1122. package/packages/@monomind/cli/dist/src/ui/orgs-files.js +0 -192
  1123. package/packages/@monomind/cli/dist/src/ui/orgs.html +0 -2513
  1124. package/packages/@monomind/cli/dist/src/ui/server.mjs +0 -7256
  1125. package/packages/@monomind/cli/dist/src/ui/sse-manager.mjs +0 -119
  1126. package/packages/@monomind/cli/dist/src/update/checker.d.ts +0 -34
  1127. package/packages/@monomind/cli/dist/src/update/checker.js +0 -278
  1128. package/packages/@monomind/cli/dist/src/update/executor.d.ts +0 -32
  1129. package/packages/@monomind/cli/dist/src/update/executor.js +0 -235
  1130. package/packages/@monomind/cli/dist/src/update/index.d.ts +0 -43
  1131. package/packages/@monomind/cli/dist/src/update/index.js +0 -108
  1132. package/packages/@monomind/cli/dist/src/update/rate-limiter.d.ts +0 -37
  1133. package/packages/@monomind/cli/dist/src/update/rate-limiter.js +0 -190
  1134. package/packages/@monomind/cli/dist/src/update/validator.d.ts +0 -17
  1135. package/packages/@monomind/cli/dist/src/update/validator.js +0 -166
  1136. package/packages/@monomind/cli/dist/src/utils/cosine-similarity.d.ts +0 -22
  1137. package/packages/@monomind/cli/dist/src/utils/cosine-similarity.js +0 -38
  1138. package/packages/@monomind/cli/dist/src/utils/input-guards.d.ts +0 -66
  1139. package/packages/@monomind/cli/dist/src/utils/input-guards.js +0 -263
  1140. package/packages/@monomind/cli/dist/src/utils/json-file.d.ts +0 -33
  1141. package/packages/@monomind/cli/dist/src/utils/json-file.js +0 -57
  1142. package/packages/@monomind/cli/dist/src/utils/parse-jsonl.d.ts +0 -6
  1143. package/packages/@monomind/cli/dist/src/utils/parse-jsonl.js +0 -22
  1144. package/packages/@monomind/cli/dist/src/utils/resource-governor.d.ts +0 -32
  1145. package/packages/@monomind/cli/dist/src/utils/resource-governor.js +0 -115
  1146. package/packages/@monomind/cli/package.json +0 -127
  1147. package/packages/@monomind/cli/scripts/deploy-ipfs-node.sh +0 -153
  1148. package/packages/@monomind/cli/scripts/publish.sh +0 -61
  1149. package/packages/@monomind/cli/scripts/sync-claude-assets.sh +0 -19
  1150. package/packages/@monomind/cli/scripts/understand-analyze.mjs +0 -1078
  1151. package/scripts/build-fs.mjs +0 -75
  1152. package/scripts/build-monovector.sh +0 -10
  1153. package/scripts/generate-agent-avatars.mjs +0 -492
  1154. package/scripts/generate-channel-profile-assets.sh +0 -67
  1155. package/scripts/growth-content-calendar.mjs +0 -260
  1156. package/scripts/growth-profile-kit.mjs +0 -156
  1157. package/scripts/install.sh +0 -392
  1158. package/scripts/publish-monovector.sh +0 -20
  1159. package/scripts/ua-enrich.mjs +0 -229
  1160. package/scripts/ua-import.mjs +0 -288
  1161. 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
- }