monomind 2.7.9 → 2.7.11

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 (1153) hide show
  1. package/LICENSE +0 -0
  2. package/README.md +0 -0
  3. package/bin/npx-safe-launch.js +0 -0
  4. package/package.json +2 -2
  5. package/packages/@monomind/cli/.claude/agents/architecture/system-design/arch-system-design.md +0 -0
  6. package/packages/@monomind/cli/.claude/agents/consensus/crdt-synchronizer.md +0 -0
  7. package/packages/@monomind/cli/.claude/agents/consensus/quorum-manager.md +0 -0
  8. package/packages/@monomind/cli/.claude/agents/consensus/security-manager.md +0 -0
  9. package/packages/@monomind/cli/.claude/agents/core/coder.md +0 -0
  10. package/packages/@monomind/cli/.claude/agents/core/coordinator.md +0 -0
  11. package/packages/@monomind/cli/.claude/agents/core/planner.md +0 -0
  12. package/packages/@monomind/cli/.claude/agents/core/researcher.md +0 -0
  13. package/packages/@monomind/cli/.claude/agents/core/reviewer.md +0 -0
  14. package/packages/@monomind/cli/.claude/agents/core/tester.md +0 -0
  15. package/packages/@monomind/cli/.claude/agents/design/design-monodesign.md +0 -0
  16. package/packages/@monomind/cli/.claude/agents/engineering/engineering-ai-data-remediation-engineer.md +0 -0
  17. package/packages/@monomind/cli/.claude/agents/engineering/engineering-ai-engineer.md +0 -0
  18. package/packages/@monomind/cli/.claude/agents/engineering/engineering-autonomous-optimization-architect.md +0 -0
  19. package/packages/@monomind/cli/.claude/agents/engineering/engineering-backend-architect.md +0 -0
  20. package/packages/@monomind/cli/.claude/agents/engineering/engineering-code-reviewer.md +0 -0
  21. package/packages/@monomind/cli/.claude/agents/engineering/engineering-data-engineer.md +0 -0
  22. package/packages/@monomind/cli/.claude/agents/engineering/engineering-database-optimizer.md +0 -0
  23. package/packages/@monomind/cli/.claude/agents/engineering/engineering-devops-automator.md +0 -0
  24. package/packages/@monomind/cli/.claude/agents/engineering/engineering-embedded-firmware-engineer.md +0 -0
  25. package/packages/@monomind/cli/.claude/agents/engineering/engineering-feishu-integration-developer.md +0 -0
  26. package/packages/@monomind/cli/.claude/agents/engineering/engineering-frontend-developer.md +0 -0
  27. package/packages/@monomind/cli/.claude/agents/engineering/engineering-git-workflow-master.md +0 -0
  28. package/packages/@monomind/cli/.claude/agents/engineering/engineering-incident-response-commander.md +0 -0
  29. package/packages/@monomind/cli/.claude/agents/engineering/engineering-mobile-app-builder.md +0 -0
  30. package/packages/@monomind/cli/.claude/agents/engineering/engineering-rapid-prototyper.md +0 -0
  31. package/packages/@monomind/cli/.claude/agents/engineering/engineering-security-engineer.md +0 -0
  32. package/packages/@monomind/cli/.claude/agents/engineering/engineering-senior-developer.md +0 -0
  33. package/packages/@monomind/cli/.claude/agents/engineering/engineering-software-architect.md +0 -0
  34. package/packages/@monomind/cli/.claude/agents/engineering/engineering-solidity-smart-contract-engineer.md +0 -0
  35. package/packages/@monomind/cli/.claude/agents/engineering/engineering-sre.md +0 -0
  36. package/packages/@monomind/cli/.claude/agents/engineering/engineering-technical-writer.md +0 -0
  37. package/packages/@monomind/cli/.claude/agents/engineering/engineering-threat-detection-engineer.md +0 -0
  38. package/packages/@monomind/cli/.claude/agents/engineering/engineering-wechat-mini-program-developer.md +0 -0
  39. package/packages/@monomind/cli/.claude/agents/github/code-review-swarm.md +0 -0
  40. package/packages/@monomind/cli/.claude/agents/github/github-modes.md +0 -0
  41. package/packages/@monomind/cli/.claude/agents/github/issue-tracker.md +0 -0
  42. package/packages/@monomind/cli/.claude/agents/github/multi-repo-swarm.md +0 -0
  43. package/packages/@monomind/cli/.claude/agents/github/pr-manager.md +0 -0
  44. package/packages/@monomind/cli/.claude/agents/github/project-board-sync.md +0 -0
  45. package/packages/@monomind/cli/.claude/agents/github/release-manager.md +0 -0
  46. package/packages/@monomind/cli/.claude/agents/github/repo-architect.md +0 -0
  47. package/packages/@monomind/cli/.claude/agents/github/swarm-issue.md +0 -0
  48. package/packages/@monomind/cli/.claude/agents/github/swarm-pr.md +0 -0
  49. package/packages/@monomind/cli/.claude/agents/github/sync-coordinator.md +0 -0
  50. package/packages/@monomind/cli/.claude/agents/github/workflow-automation.md +0 -0
  51. package/packages/@monomind/cli/.claude/agents/goal/goal-planner.md +0 -0
  52. package/packages/@monomind/cli/.claude/agents/hive-mind/collective-intelligence-coordinator.md +0 -0
  53. package/packages/@monomind/cli/.claude/agents/hive-mind/scout-explorer.md +0 -0
  54. package/packages/@monomind/cli/.claude/agents/hive-mind/swarm-memory-manager.md +0 -0
  55. package/packages/@monomind/cli/.claude/agents/hive-mind/worker-specialist.md +0 -0
  56. package/packages/@monomind/cli/.claude/agents/marketing/marketing-competitive-content.md +0 -0
  57. package/packages/@monomind/cli/.claude/agents/marketing/marketing-cro-specialist.md +0 -0
  58. package/packages/@monomind/cli/.claude/agents/marketing/marketing-email-specialist.md +0 -0
  59. package/packages/@monomind/cli/.claude/agents/marketing/marketing-launch-strategist.md +0 -0
  60. package/packages/@monomind/cli/.claude/agents/marketing/marketing-pricing-strategist.md +0 -0
  61. package/packages/@monomind/cli/.claude/agents/optimization/benchmark-suite.md +0 -0
  62. package/packages/@monomind/cli/.claude/agents/optimization/load-balancer.md +0 -0
  63. package/packages/@monomind/cli/.claude/agents/optimization/performance-monitor.md +0 -0
  64. package/packages/@monomind/cli/.claude/agents/optimization/resource-allocator.md +0 -0
  65. package/packages/@monomind/cli/.claude/agents/optimization/topology-optimizer.md +0 -0
  66. package/packages/@monomind/cli/.claude/agents/schemas/architecture-output.json +0 -0
  67. package/packages/@monomind/cli/.claude/agents/schemas/code-review-output.json +0 -0
  68. package/packages/@monomind/cli/.claude/agents/schemas/generic-task-input.json +0 -0
  69. package/packages/@monomind/cli/.claude/agents/schemas/implementation-output.json +0 -0
  70. package/packages/@monomind/cli/.claude/agents/schemas/research-output.json +0 -0
  71. package/packages/@monomind/cli/.claude/agents/schemas/security-audit-output.json +0 -0
  72. package/packages/@monomind/cli/.claude/agents/schemas/test-report-output.json +0 -0
  73. package/packages/@monomind/cli/.claude/agents/specialists/integration-architect.md +0 -0
  74. package/packages/@monomind/cli/.claude/agents/specialized/agentic-identity-trust.md +0 -0
  75. package/packages/@monomind/cli/.claude/agents/specialized/agents-orchestrator.md +0 -0
  76. package/packages/@monomind/cli/.claude/agents/specialized/automation-governance-architect.md +0 -0
  77. package/packages/@monomind/cli/.claude/agents/specialized/blockchain-security-auditor.md +0 -0
  78. package/packages/@monomind/cli/.claude/agents/specialized/compliance-auditor.md +0 -0
  79. package/packages/@monomind/cli/.claude/agents/specialized/identity-graph-operator.md +0 -0
  80. package/packages/@monomind/cli/.claude/agents/specialized/lsp-index-engineer.md +0 -0
  81. package/packages/@monomind/cli/.claude/agents/specialized/mobile/spec-mobile-react-native.md +0 -0
  82. package/packages/@monomind/cli/.claude/agents/specialized/specialized-cultural-intelligence-strategist.md +0 -0
  83. package/packages/@monomind/cli/.claude/agents/specialized/specialized-developer-advocate.md +0 -0
  84. package/packages/@monomind/cli/.claude/agents/specialized/specialized-document-generator.md +0 -0
  85. package/packages/@monomind/cli/.claude/agents/specialized/specialized-mcp-builder.md +0 -0
  86. package/packages/@monomind/cli/.claude/agents/specialized/specialized-model-qa.md +0 -0
  87. package/packages/@monomind/cli/.claude/agents/specialized/specialized-workflow-architect.md +0 -0
  88. package/packages/@monomind/cli/.claude/agents/specialized/zk-steward.md +0 -0
  89. package/packages/@monomind/cli/.claude/agents/swarm/mesh-coordinator.md +0 -0
  90. package/packages/@monomind/cli/.claude/agents/templates/automation-smart-agent.md +0 -0
  91. package/packages/@monomind/cli/.claude/agents/templates/coordinator-swarm-init.md +0 -0
  92. package/packages/@monomind/cli/.claude/agents/testing/production-validator.md +0 -0
  93. package/packages/@monomind/cli/.claude/agents/testing/tdd-london-swarm.md +0 -0
  94. package/packages/@monomind/cli/.claude/agents/testing/testing-accessibility-auditor.md +0 -0
  95. package/packages/@monomind/cli/.claude/agents/testing/testing-api-tester.md +0 -0
  96. package/packages/@monomind/cli/.claude/agents/testing/testing-evidence-collector.md +0 -0
  97. package/packages/@monomind/cli/.claude/agents/testing/testing-performance-benchmarker.md +0 -0
  98. package/packages/@monomind/cli/.claude/agents/testing/testing-test-results-analyzer.md +0 -0
  99. package/packages/@monomind/cli/.claude/agents/testing/testing-tool-evaluator.md +0 -0
  100. package/packages/@monomind/cli/.claude/agents/testing/testing-workflow-optimizer.md +0 -0
  101. package/packages/@monomind/cli/.claude/commands/agents/README.md +0 -0
  102. package/packages/@monomind/cli/.claude/commands/agents/agent-capabilities.md +0 -0
  103. package/packages/@monomind/cli/.claude/commands/agents/agent-coordination.md +0 -0
  104. package/packages/@monomind/cli/.claude/commands/agents/agent-spawning.md +0 -0
  105. package/packages/@monomind/cli/.claude/commands/agents/agent-types.md +0 -0
  106. package/packages/@monomind/cli/.claude/commands/analysis/README.md +0 -0
  107. package/packages/@monomind/cli/.claude/commands/analysis/bottleneck-detect.md +0 -0
  108. package/packages/@monomind/cli/.claude/commands/analysis/performance-bottlenecks.md +0 -0
  109. package/packages/@monomind/cli/.claude/commands/analysis/performance-report.md +0 -0
  110. package/packages/@monomind/cli/.claude/commands/analysis/token-usage.md +0 -0
  111. package/packages/@monomind/cli/.claude/commands/automation/README.md +0 -0
  112. package/packages/@monomind/cli/.claude/commands/automation/auto-agent.md +0 -0
  113. package/packages/@monomind/cli/.claude/commands/automation/self-healing.md +0 -0
  114. package/packages/@monomind/cli/.claude/commands/automation/session-memory.md +0 -0
  115. package/packages/@monomind/cli/.claude/commands/automation/smart-agents.md +0 -0
  116. package/packages/@monomind/cli/.claude/commands/automation/smart-spawn.md +0 -0
  117. package/packages/@monomind/cli/.claude/commands/automation/workflow-select.md +0 -0
  118. package/packages/@monomind/cli/.claude/commands/coordination/README.md +0 -0
  119. package/packages/@monomind/cli/.claude/commands/coordination/agent-spawn.md +0 -0
  120. package/packages/@monomind/cli/.claude/commands/coordination/swarm-init.md +0 -0
  121. package/packages/@monomind/cli/.claude/commands/coordination/task-orchestrate.md +0 -0
  122. package/packages/@monomind/cli/.claude/commands/github/README.md +0 -0
  123. package/packages/@monomind/cli/.claude/commands/github/github-modes.md +0 -0
  124. package/packages/@monomind/cli/.claude/commands/github/issue-tracker.md +0 -0
  125. package/packages/@monomind/cli/.claude/commands/github/pr-manager.md +0 -0
  126. package/packages/@monomind/cli/.claude/commands/github/release-manager.md +0 -0
  127. package/packages/@monomind/cli/.claude/commands/github/repo-architect.md +0 -0
  128. package/packages/@monomind/cli/.claude/commands/github/sync-coordinator.md +0 -0
  129. package/packages/@monomind/cli/.claude/commands/hive-mind/README.md +0 -0
  130. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-consensus.md +0 -0
  131. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-init.md +0 -0
  132. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-memory.md +0 -0
  133. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-spawn.md +0 -0
  134. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-status.md +0 -0
  135. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-stop.md +0 -0
  136. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind.md +0 -0
  137. package/packages/@monomind/cli/.claude/commands/hooks/README.md +0 -0
  138. package/packages/@monomind/cli/.claude/commands/hooks/overview.md +0 -0
  139. package/packages/@monomind/cli/.claude/commands/hooks/post-edit.md +0 -0
  140. package/packages/@monomind/cli/.claude/commands/hooks/post-task.md +0 -0
  141. package/packages/@monomind/cli/.claude/commands/hooks/pre-edit.md +0 -0
  142. package/packages/@monomind/cli/.claude/commands/hooks/pre-task.md +0 -0
  143. package/packages/@monomind/cli/.claude/commands/hooks/session-end.md +0 -0
  144. package/packages/@monomind/cli/.claude/commands/hooks/setup.md +0 -0
  145. package/packages/@monomind/cli/.claude/commands/mastermind/_repeat.md +0 -0
  146. package/packages/@monomind/cli/.claude/commands/mastermind/_taskfile.md +0 -0
  147. package/packages/@monomind/cli/.claude/commands/mastermind/adr.md +0 -0
  148. package/packages/@monomind/cli/.claude/commands/mastermind/approvev1.md +0 -0
  149. package/packages/@monomind/cli/.claude/commands/mastermind/architect.md +0 -0
  150. package/packages/@monomind/cli/.claude/commands/mastermind/autodev.md +0 -0
  151. package/packages/@monomind/cli/.claude/commands/mastermind/brain.md +0 -0
  152. package/packages/@monomind/cli/.claude/commands/mastermind/budget.md +0 -0
  153. package/packages/@monomind/cli/.claude/commands/mastermind/build.md +0 -0
  154. package/packages/@monomind/cli/.claude/commands/mastermind/code-review.md +0 -0
  155. package/packages/@monomind/cli/.claude/commands/mastermind/content.md +0 -0
  156. package/packages/@monomind/cli/.claude/commands/mastermind/createorg.md +0 -0
  157. package/packages/@monomind/cli/.claude/commands/mastermind/createtask.md +0 -0
  158. package/packages/@monomind/cli/.claude/commands/mastermind/debug.md +0 -0
  159. package/packages/@monomind/cli/.claude/commands/mastermind/design.md +0 -0
  160. package/packages/@monomind/cli/.claude/commands/mastermind/do.md +0 -0
  161. package/packages/@monomind/cli/.claude/commands/mastermind/execute.md +0 -0
  162. package/packages/@monomind/cli/.claude/commands/mastermind/finance.md +0 -0
  163. package/packages/@monomind/cli/.claude/commands/mastermind/finish.md +0 -0
  164. package/packages/@monomind/cli/.claude/commands/mastermind/graph-status.md +0 -0
  165. package/packages/@monomind/cli/.claude/commands/mastermind/help.md +0 -0
  166. package/packages/@monomind/cli/.claude/commands/mastermind/idea.md +0 -0
  167. package/packages/@monomind/cli/.claude/commands/mastermind/ideate.md +0 -0
  168. package/packages/@monomind/cli/.claude/commands/mastermind/improve.md +0 -0
  169. package/packages/@monomind/cli/.claude/commands/mastermind/loops.md +0 -0
  170. package/packages/@monomind/cli/.claude/commands/mastermind/marketing.md +0 -0
  171. package/packages/@monomind/cli/.claude/commands/mastermind/master.md +0 -0
  172. package/packages/@monomind/cli/.claude/commands/mastermind/memory.md +0 -0
  173. package/packages/@monomind/cli/.claude/commands/mastermind/okf-export.md +0 -0
  174. package/packages/@monomind/cli/.claude/commands/mastermind/okf-import.md +0 -0
  175. package/packages/@monomind/cli/.claude/commands/mastermind/ops.md +0 -0
  176. package/packages/@monomind/cli/.claude/commands/mastermind/orgs.md +0 -0
  177. package/packages/@monomind/cli/.claude/commands/mastermind/orgstatus.md +0 -0
  178. package/packages/@monomind/cli/.claude/commands/mastermind/plan.md +0 -0
  179. package/packages/@monomind/cli/.claude/commands/mastermind/receive-review.md +0 -0
  180. package/packages/@monomind/cli/.claude/commands/mastermind/references/antigravity-tools.md +0 -0
  181. package/packages/@monomind/cli/.claude/commands/mastermind/references/claude-code-tools.md +0 -0
  182. package/packages/@monomind/cli/.claude/commands/mastermind/references/codex-tools.md +0 -0
  183. package/packages/@monomind/cli/.claude/commands/mastermind/references/copilot-tools.md +0 -0
  184. package/packages/@monomind/cli/.claude/commands/mastermind/references/gemini-tools.md +0 -0
  185. package/packages/@monomind/cli/.claude/commands/mastermind/references/pi-tools.md +0 -0
  186. package/packages/@monomind/cli/.claude/commands/mastermind/release.md +0 -0
  187. package/packages/@monomind/cli/.claude/commands/mastermind/repeat.md +0 -0
  188. package/packages/@monomind/cli/.claude/commands/mastermind/research.md +0 -0
  189. package/packages/@monomind/cli/.claude/commands/mastermind/review.md +0 -0
  190. package/packages/@monomind/cli/.claude/commands/mastermind/runorg.md +0 -0
  191. package/packages/@monomind/cli/.claude/commands/mastermind/runorgv1.md +0 -0
  192. package/packages/@monomind/cli/.claude/commands/mastermind/sales.md +0 -0
  193. package/packages/@monomind/cli/.claude/commands/mastermind/skill-builder.md +0 -0
  194. package/packages/@monomind/cli/.claude/commands/mastermind/specialagents.md +0 -0
  195. package/packages/@monomind/cli/.claude/commands/mastermind/stoporg.md +0 -0
  196. package/packages/@monomind/cli/.claude/commands/mastermind/swarm.md +0 -0
  197. package/packages/@monomind/cli/.claude/commands/mastermind/taskdev.md +0 -0
  198. package/packages/@monomind/cli/.claude/commands/mastermind/tdd.md +0 -0
  199. package/packages/@monomind/cli/.claude/commands/mastermind/techport.md +0 -0
  200. package/packages/@monomind/cli/.claude/commands/mastermind/topology.md +0 -0
  201. package/packages/@monomind/cli/.claude/commands/mastermind/understand.md +0 -0
  202. package/packages/@monomind/cli/.claude/commands/mastermind/verify.md +0 -0
  203. package/packages/@monomind/cli/.claude/commands/mastermind/worktree.md +0 -0
  204. package/packages/@monomind/cli/.claude/commands/mastermind.md +0 -0
  205. package/packages/@monomind/cli/.claude/commands/memory/README.md +0 -0
  206. package/packages/@monomind/cli/.claude/commands/memory/memory-search.md +0 -0
  207. package/packages/@monomind/cli/.claude/commands/monitoring/README.md +0 -0
  208. package/packages/@monomind/cli/.claude/commands/monitoring/agent-metrics.md +0 -0
  209. package/packages/@monomind/cli/.claude/commands/monitoring/agents.md +0 -0
  210. package/packages/@monomind/cli/.claude/commands/monitoring/status.md +0 -0
  211. package/packages/@monomind/cli/.claude/commands/monobrowse.md +0 -0
  212. package/packages/@monomind/cli/.claude/commands/monoes/README.md +0 -0
  213. package/packages/@monomind/cli/.claude/commands/monoes/install.md +0 -0
  214. package/packages/@monomind/cli/.claude/commands/monoes/monoagent.md +0 -0
  215. package/packages/@monomind/cli/.claude/commands/monoes/monoclip.md +0 -0
  216. package/packages/@monomind/cli/.claude/commands/monoes/monotask.md +0 -0
  217. package/packages/@monomind/cli/.claude/commands/monograph/README.md +0 -0
  218. package/packages/@monomind/cli/.claude/commands/monograph/monograph-build.md +0 -0
  219. package/packages/@monomind/cli/.claude/commands/monograph/monograph-search.md +0 -0
  220. package/packages/@monomind/cli/.claude/commands/monograph/monograph-stats.md +0 -0
  221. package/packages/@monomind/cli/.claude/commands/monograph/monograph-watch.md +0 -0
  222. package/packages/@monomind/cli/.claude/commands/monograph/monograph-wiki.md +0 -0
  223. package/packages/@monomind/cli/.claude/commands/optimization/auto-topology.md +0 -0
  224. package/packages/@monomind/cli/.claude/commands/optimization/performance-optimize.md +0 -0
  225. package/packages/@monomind/cli/.claude/commands/pair/README.md +0 -0
  226. package/packages/@monomind/cli/.claude/commands/pair/examples.md +0 -0
  227. package/packages/@monomind/cli/.claude/commands/pair/modes.md +0 -0
  228. package/packages/@monomind/cli/.claude/commands/pair/session.md +0 -0
  229. package/packages/@monomind/cli/.claude/commands/stream-chain/pipeline.md +0 -0
  230. package/packages/@monomind/cli/.claude/commands/stream-chain/run.md +0 -0
  231. package/packages/@monomind/cli/.claude/commands/swarm/README.md +0 -0
  232. package/packages/@monomind/cli/.claude/commands/swarm/analysis.md +0 -0
  233. package/packages/@monomind/cli/.claude/commands/swarm/development.md +0 -0
  234. package/packages/@monomind/cli/.claude/commands/swarm/examples.md +0 -0
  235. package/packages/@monomind/cli/.claude/commands/swarm/maintenance.md +0 -0
  236. package/packages/@monomind/cli/.claude/commands/swarm/optimization.md +0 -0
  237. package/packages/@monomind/cli/.claude/commands/swarm/research.md +0 -0
  238. package/packages/@monomind/cli/.claude/commands/swarm/swarm.md +0 -0
  239. package/packages/@monomind/cli/.claude/commands/swarm/testing.md +0 -0
  240. package/packages/@monomind/cli/.claude/commands/tokens.md +0 -0
  241. package/packages/@monomind/cli/.claude/commands/truth/start.md +0 -0
  242. package/packages/@monomind/cli/.claude/commands/ts.md +0 -0
  243. package/packages/@monomind/cli/.claude/commands/workflows/README.md +0 -0
  244. package/packages/@monomind/cli/.claude/commands/workflows/development.md +0 -0
  245. package/packages/@monomind/cli/.claude/commands/workflows/research.md +0 -0
  246. package/packages/@monomind/cli/.claude/commands/workflows/workflow-create.md +0 -0
  247. package/packages/@monomind/cli/.claude/commands/workflows/workflow-execute.md +0 -0
  248. package/packages/@monomind/cli/.claude/commands/workflows/workflow-export.md +0 -0
  249. package/packages/@monomind/cli/.claude/helpers/build-skill-registry.cjs +0 -0
  250. package/packages/@monomind/cli/.claude/helpers/control-start.cjs +0 -0
  251. package/packages/@monomind/cli/.claude/helpers/control-stop.cjs +0 -0
  252. package/packages/@monomind/cli/.claude/helpers/event-logger.cjs +0 -0
  253. package/packages/@monomind/cli/.claude/helpers/graphify-freshen.cjs +0 -0
  254. package/packages/@monomind/cli/.claude/helpers/handlers/adr-draft-handler.cjs +0 -0
  255. package/packages/@monomind/cli/.claude/helpers/handlers/agent-start-handler.cjs +0 -0
  256. package/packages/@monomind/cli/.claude/helpers/handlers/budget-status-handler.cjs +0 -0
  257. package/packages/@monomind/cli/.claude/helpers/handlers/capture-handler.cjs +0 -0
  258. package/packages/@monomind/cli/.claude/helpers/handlers/compact-handler.cjs +0 -0
  259. package/packages/@monomind/cli/.claude/helpers/handlers/edit-handler.cjs +0 -0
  260. package/packages/@monomind/cli/.claude/helpers/handlers/gates-handler.cjs +0 -0
  261. package/packages/@monomind/cli/.claude/helpers/handlers/graph-status-handler.cjs +0 -0
  262. package/packages/@monomind/cli/.claude/helpers/handlers/loops-status-handler.cjs +0 -0
  263. package/packages/@monomind/cli/.claude/helpers/handlers/route-handler.cjs +0 -0
  264. package/packages/@monomind/cli/.claude/helpers/handlers/session-handler.cjs +0 -0
  265. package/packages/@monomind/cli/.claude/helpers/handlers/session-restore-handler.cjs +0 -0
  266. package/packages/@monomind/cli/.claude/helpers/handlers/stats-handler.cjs +0 -0
  267. package/packages/@monomind/cli/.claude/helpers/handlers/task-handler.cjs +0 -0
  268. package/packages/@monomind/cli/.claude/helpers/intelligence.cjs +0 -0
  269. package/packages/@monomind/cli/.claude/helpers/learning-service.mjs +0 -0
  270. package/packages/@monomind/cli/.claude/helpers/loop-tracker.cjs +0 -0
  271. package/packages/@monomind/cli/.claude/helpers/mastermind-activate.cjs +0 -0
  272. package/packages/@monomind/cli/.claude/helpers/memory-palace.cjs +0 -0
  273. package/packages/@monomind/cli/.claude/helpers/memory.cjs +0 -0
  274. package/packages/@monomind/cli/.claude/helpers/metrics-db.mjs +0 -0
  275. package/packages/@monomind/cli/.claude/helpers/monolean-activate.cjs +0 -0
  276. package/packages/@monomind/cli/.claude/helpers/monolean-config.cjs +0 -0
  277. package/packages/@monomind/cli/.claude/helpers/monolean-instructions.cjs +0 -0
  278. package/packages/@monomind/cli/.claude/helpers/monolean-propagate.cjs +0 -0
  279. package/packages/@monomind/cli/.claude/helpers/monolean-tracker.cjs +0 -0
  280. package/packages/@monomind/cli/.claude/helpers/router.cjs +0 -0
  281. package/packages/@monomind/cli/.claude/helpers/session.cjs +0 -0
  282. package/packages/@monomind/cli/.claude/helpers/skill-registry.json +0 -0
  283. package/packages/@monomind/cli/.claude/helpers/statusline.cjs +0 -0
  284. package/packages/@monomind/cli/.claude/helpers/toggle-statusline.cjs +0 -0
  285. package/packages/@monomind/cli/.claude/helpers/token-tracker.cjs +95 -5
  286. package/packages/@monomind/cli/.claude/helpers/utils/agent-registrations.cjs +0 -0
  287. package/packages/@monomind/cli/.claude/helpers/utils/fs-helpers.cjs +0 -0
  288. package/packages/@monomind/cli/.claude/helpers/utils/micro-agents.cjs +0 -0
  289. package/packages/@monomind/cli/.claude/helpers/utils/monograph.cjs +0 -0
  290. package/packages/@monomind/cli/.claude/helpers/utils/system-pressure.cjs +0 -0
  291. package/packages/@monomind/cli/.claude/helpers/utils/telemetry.cjs +0 -0
  292. package/packages/@monomind/cli/.claude/settings.json +0 -0
  293. package/packages/@monomind/cli/.claude/skills/agent-browser-testing/SKILL.md +0 -0
  294. package/packages/@monomind/cli/.claude/skills/agentic-jujutsu/SKILL.md +0 -0
  295. package/packages/@monomind/cli/.claude/skills/github-issue-triage/SKILL.md +0 -0
  296. package/packages/@monomind/cli/.claude/skills/github-repo-recap/SKILL.md +0 -0
  297. package/packages/@monomind/cli/.claude/skills/hive-mind-advanced/SKILL.md +0 -0
  298. package/packages/@monomind/cli/.claude/skills/hooks-automation/SKILL.md +0 -0
  299. package/packages/@monomind/cli/.claude/skills/mastermind-access/SKILL.md +0 -0
  300. package/packages/@monomind/cli/.claude/skills/mastermind-activity/SKILL.md +0 -0
  301. package/packages/@monomind/cli/.claude/skills/mastermind-adapter-manager/SKILL.md +0 -0
  302. package/packages/@monomind/cli/.claude/skills/mastermind-adapters/SKILL.md +0 -0
  303. package/packages/@monomind/cli/.claude/skills/mastermind-agent-detail/SKILL.md +0 -0
  304. package/packages/@monomind/cli/.claude/skills/mastermind-agent-select/SKILL.md +0 -0
  305. package/packages/@monomind/cli/.claude/skills/mastermind-agents/SKILL.md +0 -0
  306. package/packages/@monomind/cli/.claude/skills/mastermind-approval-detail/SKILL.md +0 -0
  307. package/packages/@monomind/cli/.claude/skills/mastermind-approvev1/SKILL.md +0 -0
  308. package/packages/@monomind/cli/.claude/skills/mastermind-architect/SKILL.md +0 -0
  309. package/packages/@monomind/cli/.claude/skills/mastermind-autodev/SKILL.md +0 -0
  310. package/packages/@monomind/cli/.claude/skills/mastermind-backup/SKILL.md +0 -0
  311. package/packages/@monomind/cli/.claude/skills/mastermind-bootstrap/SKILL.md +0 -0
  312. package/packages/@monomind/cli/.claude/skills/mastermind-budgets/SKILL.md +0 -0
  313. package/packages/@monomind/cli/.claude/skills/mastermind-build/SKILL.md +0 -0
  314. package/packages/@monomind/cli/.claude/skills/mastermind-companies/SKILL.md +0 -0
  315. package/packages/@monomind/cli/.claude/skills/mastermind-content/SKILL.md +0 -0
  316. package/packages/@monomind/cli/.claude/skills/mastermind-costs/SKILL.md +0 -0
  317. package/packages/@monomind/cli/.claude/skills/mastermind-createorg/SKILL.md +0 -0
  318. package/packages/@monomind/cli/.claude/skills/mastermind-debug/SKILL.md +0 -0
  319. package/packages/@monomind/cli/.claude/skills/mastermind-delegation/SKILL.md +0 -0
  320. package/packages/@monomind/cli/.claude/skills/mastermind-design/SKILL.md +0 -0
  321. package/packages/@monomind/cli/.claude/skills/mastermind-diagnose/SKILL.md +0 -0
  322. package/packages/@monomind/cli/.claude/skills/mastermind-env/SKILL.md +0 -0
  323. package/packages/@monomind/cli/.claude/skills/mastermind-environments/SKILL.md +0 -0
  324. package/packages/@monomind/cli/.claude/skills/mastermind-execute/SKILL.md +0 -0
  325. package/packages/@monomind/cli/.claude/skills/mastermind-export/SKILL.md +0 -0
  326. package/packages/@monomind/cli/.claude/skills/mastermind-finance/SKILL.md +0 -0
  327. package/packages/@monomind/cli/.claude/skills/mastermind-finish/SKILL.md +0 -0
  328. package/packages/@monomind/cli/.claude/skills/mastermind-goal-detail/SKILL.md +0 -0
  329. package/packages/@monomind/cli/.claude/skills/mastermind-goals/SKILL.md +0 -0
  330. package/packages/@monomind/cli/.claude/skills/mastermind-heartbeatv1/SKILL.md +0 -0
  331. package/packages/@monomind/cli/.claude/skills/mastermind-idea/SKILL.md +0 -0
  332. package/packages/@monomind/cli/.claude/skills/mastermind-import/SKILL.md +0 -0
  333. package/packages/@monomind/cli/.claude/skills/mastermind-inbox/SKILL.md +0 -0
  334. package/packages/@monomind/cli/.claude/skills/mastermind-instance/SKILL.md +0 -0
  335. package/packages/@monomind/cli/.claude/skills/mastermind-instance-settings/SKILL.md +0 -0
  336. package/packages/@monomind/cli/.claude/skills/mastermind-intake/SKILL.md +0 -0
  337. package/packages/@monomind/cli/.claude/skills/mastermind-invite-landing/SKILL.md +0 -0
  338. package/packages/@monomind/cli/.claude/skills/mastermind-invites/SKILL.md +0 -0
  339. package/packages/@monomind/cli/.claude/skills/mastermind-issue-detail/SKILL.md +0 -0
  340. package/packages/@monomind/cli/.claude/skills/mastermind-issues/SKILL.md +0 -0
  341. package/packages/@monomind/cli/.claude/skills/mastermind-join-queue/SKILL.md +0 -0
  342. package/packages/@monomind/cli/.claude/skills/mastermind-liveness/SKILL.md +0 -0
  343. package/packages/@monomind/cli/.claude/skills/mastermind-marketing/SKILL.md +0 -0
  344. package/packages/@monomind/cli/.claude/skills/mastermind-marketing/references/copywriting-frameworks.md +0 -0
  345. package/packages/@monomind/cli/.claude/skills/mastermind-marketing/references/persuasion-psychology.md +0 -0
  346. package/packages/@monomind/cli/.claude/skills/mastermind-memory/SKILL.md +0 -0
  347. package/packages/@monomind/cli/.claude/skills/mastermind-monitor/SKILL.md +0 -0
  348. package/packages/@monomind/cli/.claude/skills/mastermind-monotask/SKILL.md +0 -0
  349. package/packages/@monomind/cli/.claude/skills/mastermind-my-issues/SKILL.md +0 -0
  350. package/packages/@monomind/cli/.claude/skills/mastermind-new-agent/SKILL.md +0 -0
  351. package/packages/@monomind/cli/.claude/skills/mastermind-ops/SKILL.md +0 -0
  352. package/packages/@monomind/cli/.claude/skills/mastermind-org-chart/SKILL.md +0 -0
  353. package/packages/@monomind/cli/.claude/skills/mastermind-org-settings/SKILL.md +0 -0
  354. package/packages/@monomind/cli/.claude/skills/mastermind-orgs/SKILL.md +0 -0
  355. package/packages/@monomind/cli/.claude/skills/mastermind-orgstatus/SKILL.md +0 -0
  356. package/packages/@monomind/cli/.claude/skills/mastermind-plan/SKILL.md +0 -0
  357. package/packages/@monomind/cli/.claude/skills/mastermind-plan-to-tasks/SKILL.md +0 -0
  358. package/packages/@monomind/cli/.claude/skills/mastermind-plugin-manager/SKILL.md +0 -0
  359. package/packages/@monomind/cli/.claude/skills/mastermind-plugin-settings/SKILL.md +0 -0
  360. package/packages/@monomind/cli/.claude/skills/mastermind-plugins/SKILL.md +0 -0
  361. package/packages/@monomind/cli/.claude/skills/mastermind-profile/SKILL.md +0 -0
  362. package/packages/@monomind/cli/.claude/skills/mastermind-project-detail/SKILL.md +0 -0
  363. package/packages/@monomind/cli/.claude/skills/mastermind-project-workspace/SKILL.md +0 -0
  364. package/packages/@monomind/cli/.claude/skills/mastermind-projects/SKILL.md +0 -0
  365. package/packages/@monomind/cli/.claude/skills/mastermind-protocol/SKILL.md +0 -0
  366. package/packages/@monomind/cli/.claude/skills/mastermind-receive-review/SKILL.md +0 -0
  367. package/packages/@monomind/cli/.claude/skills/mastermind-release/SKILL.md +0 -0
  368. package/packages/@monomind/cli/.claude/skills/mastermind-repeat/SKILL.md +0 -0
  369. package/packages/@monomind/cli/.claude/skills/mastermind-research/SKILL.md +0 -0
  370. package/packages/@monomind/cli/.claude/skills/mastermind-review/SKILL.md +0 -0
  371. package/packages/@monomind/cli/.claude/skills/mastermind-routine-detail/SKILL.md +0 -0
  372. package/packages/@monomind/cli/.claude/skills/mastermind-routines/SKILL.md +0 -0
  373. package/packages/@monomind/cli/.claude/skills/mastermind-runorg/SKILL.md +0 -0
  374. package/packages/@monomind/cli/.claude/skills/mastermind-runorgv1/SKILL.md +0 -0
  375. package/packages/@monomind/cli/.claude/skills/mastermind-sales/SKILL.md +0 -0
  376. package/packages/@monomind/cli/.claude/skills/mastermind-search/SKILL.md +0 -0
  377. package/packages/@monomind/cli/.claude/skills/mastermind-secrets/SKILL.md +0 -0
  378. package/packages/@monomind/cli/.claude/skills/mastermind-skill-builder/SKILL.md +0 -0
  379. package/packages/@monomind/cli/.claude/skills/mastermind-skills/SKILL.md +0 -0
  380. package/packages/@monomind/cli/.claude/skills/mastermind-stoporg/SKILL.md +0 -0
  381. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/SKILL.md +0 -0
  382. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/code-quality-reviewer-prompt.md +0 -0
  383. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/final-reviewer-prompt.md +0 -0
  384. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/implementer-prompt.md +0 -0
  385. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/spec-reviewer-prompt.md +0 -0
  386. package/packages/@monomind/cli/.claude/skills/mastermind-tasks/SKILL.md +0 -0
  387. package/packages/@monomind/cli/.claude/skills/mastermind-tdd/SKILL.md +0 -0
  388. package/packages/@monomind/cli/.claude/skills/mastermind-techport/SKILL.md +0 -0
  389. package/packages/@monomind/cli/.claude/skills/mastermind-threads/SKILL.md +0 -0
  390. package/packages/@monomind/cli/.claude/skills/mastermind-tree-control/SKILL.md +0 -0
  391. package/packages/@monomind/cli/.claude/skills/mastermind-verify/SKILL.md +0 -0
  392. package/packages/@monomind/cli/.claude/skills/mastermind-wiki/SKILL.md +0 -0
  393. package/packages/@monomind/cli/.claude/skills/mastermind-workspace-detail/SKILL.md +0 -0
  394. package/packages/@monomind/cli/.claude/skills/mastermind-workspaces/SKILL.md +0 -0
  395. package/packages/@monomind/cli/.claude/skills/mastermind-worktree/SKILL.md +0 -0
  396. package/packages/@monomind/cli/.claude/skills/monolean/SKILL.md +0 -0
  397. package/packages/@monomind/cli/.claude/skills/monolean-audit/SKILL.md +0 -0
  398. package/packages/@monomind/cli/.claude/skills/monolean-debt/SKILL.md +0 -0
  399. package/packages/@monomind/cli/.claude/skills/monolean-help/SKILL.md +0 -0
  400. package/packages/@monomind/cli/.claude/skills/monolean-review/SKILL.md +0 -0
  401. package/packages/@monomind/cli/.claude/skills/monomind/browse-agentcore.md +0 -0
  402. package/packages/@monomind/cli/.claude/skills/monomind/browse-electron.md +0 -0
  403. package/packages/@monomind/cli/.claude/skills/monomind/browse-qa.md +0 -0
  404. package/packages/@monomind/cli/.claude/skills/monomind/browse-references/authentication.md +0 -0
  405. package/packages/@monomind/cli/.claude/skills/monomind/browse-references/trust-boundaries.md +0 -0
  406. package/packages/@monomind/cli/.claude/skills/monomind/browse-references/video-recording.md +0 -0
  407. package/packages/@monomind/cli/.claude/skills/monomind/browse-slack.md +0 -0
  408. package/packages/@monomind/cli/.claude/skills/monomind/browse-vercel.md +0 -0
  409. package/packages/@monomind/cli/.claude/skills/monomind/browse.md +0 -0
  410. package/packages/@monomind/cli/.claude/skills/monomotion/SKILL.md +0 -0
  411. package/packages/@monomind/cli/.claude/skills/monomotion/rules/api-control.md +0 -0
  412. package/packages/@monomind/cli/.claude/skills/monomotion/rules/effects.md +0 -0
  413. package/packages/@monomind/cli/.claude/skills/monomotion/rules/integration.md +0 -0
  414. package/packages/@monomind/cli/.claude/skills/monomotion/rules/scroll.md +0 -0
  415. package/packages/@monomind/cli/.claude/skills/monomotion/rules/sequencing.md +0 -0
  416. package/packages/@monomind/cli/.claude/skills/monomotion/rules/svg.md +0 -0
  417. package/packages/@monomind/cli/.claude/skills/monomotion/rules/text.md +0 -0
  418. package/packages/@monomind/cli/.claude/skills/pair-programming/SKILL.md +0 -0
  419. package/packages/@monomind/cli/.claude/skills/performance-analysis/SKILL.md +0 -0
  420. package/packages/@monomind/cli/.claude/skills/skill-builder/SKILL.md +0 -0
  421. package/packages/@monomind/cli/.claude/skills/specialagent/SKILL.md +0 -0
  422. package/packages/@monomind/cli/.claude/skills/stop-slop/SKILL.md +0 -0
  423. package/packages/@monomind/cli/.claude/skills/stop-slop/references/examples.md +0 -0
  424. package/packages/@monomind/cli/.claude/skills/stop-slop/references/phrases.md +0 -0
  425. package/packages/@monomind/cli/.claude/skills/stop-slop/references/structures.md +0 -0
  426. package/packages/@monomind/cli/.claude/skills/swarm-advanced/SKILL.md +0 -0
  427. package/packages/@monomind/cli/.claude/skills/swarm-orchestration/SKILL.md +0 -0
  428. package/packages/@monomind/cli/.claude/skills/verification-quality/SKILL.md +0 -0
  429. package/packages/@monomind/cli/README.md +0 -0
  430. package/packages/@monomind/cli/bin/cli.js +59 -0
  431. package/packages/@monomind/cli/bin/preinstall.cjs +0 -0
  432. package/packages/@monomind/cli/dist/src/agents/registry-builder.d.ts +0 -0
  433. package/packages/@monomind/cli/dist/src/agents/registry-builder.js +0 -0
  434. package/packages/@monomind/cli/dist/src/autopilot-state.d.ts +0 -0
  435. package/packages/@monomind/cli/dist/src/autopilot-state.js +0 -0
  436. package/packages/@monomind/cli/dist/src/browser/action-builder/analyzer.d.ts +0 -0
  437. package/packages/@monomind/cli/dist/src/browser/action-builder/analyzer.js +0 -0
  438. package/packages/@monomind/cli/dist/src/browser/action-builder/types.d.ts +0 -0
  439. package/packages/@monomind/cli/dist/src/browser/action-builder/types.js +0 -0
  440. package/packages/@monomind/cli/dist/src/browser/adapters/gemini.d.ts +0 -0
  441. package/packages/@monomind/cli/dist/src/browser/adapters/gemini.js +0 -0
  442. package/packages/@monomind/cli/dist/src/browser/adapters/index.d.ts +0 -0
  443. package/packages/@monomind/cli/dist/src/browser/adapters/index.js +0 -0
  444. package/packages/@monomind/cli/dist/src/browser/adapters/instagram.d.ts +0 -0
  445. package/packages/@monomind/cli/dist/src/browser/adapters/instagram.js +0 -0
  446. package/packages/@monomind/cli/dist/src/browser/adapters/linkedin.d.ts +0 -0
  447. package/packages/@monomind/cli/dist/src/browser/adapters/linkedin.js +0 -0
  448. package/packages/@monomind/cli/dist/src/browser/adapters/x.d.ts +0 -0
  449. package/packages/@monomind/cli/dist/src/browser/adapters/x.js +0 -0
  450. package/packages/@monomind/cli/dist/src/browser/dashboard/server.d.ts +0 -0
  451. package/packages/@monomind/cli/dist/src/browser/dashboard/server.js +0 -0
  452. package/packages/@monomind/cli/dist/src/browser/dashboard/ui.html +0 -0
  453. package/packages/@monomind/cli/dist/src/browser/workflow/engine.d.ts +0 -0
  454. package/packages/@monomind/cli/dist/src/browser/workflow/engine.js +0 -0
  455. package/packages/@monomind/cli/dist/src/browser/workflow/expression.d.ts +0 -0
  456. package/packages/@monomind/cli/dist/src/browser/workflow/expression.js +0 -0
  457. package/packages/@monomind/cli/dist/src/browser/workflow/store.d.ts +0 -0
  458. package/packages/@monomind/cli/dist/src/browser/workflow/store.js +0 -0
  459. package/packages/@monomind/cli/dist/src/browser/workflow/types.d.ts +0 -0
  460. package/packages/@monomind/cli/dist/src/browser/workflow/types.js +0 -0
  461. package/packages/@monomind/cli/dist/src/capabilities/cap-code.d.ts +0 -0
  462. package/packages/@monomind/cli/dist/src/capabilities/cap-code.js +0 -0
  463. package/packages/@monomind/cli/dist/src/capabilities/cap-data.d.ts +0 -0
  464. package/packages/@monomind/cli/dist/src/capabilities/cap-data.js +0 -0
  465. package/packages/@monomind/cli/dist/src/capabilities/cap-documents.d.ts +0 -0
  466. package/packages/@monomind/cli/dist/src/capabilities/cap-documents.js +0 -0
  467. package/packages/@monomind/cli/dist/src/capabilities/cap-graph.d.ts +0 -0
  468. package/packages/@monomind/cli/dist/src/capabilities/cap-graph.js +0 -0
  469. package/packages/@monomind/cli/dist/src/capabilities/cap-media.d.ts +0 -0
  470. package/packages/@monomind/cli/dist/src/capabilities/cap-media.js +0 -0
  471. package/packages/@monomind/cli/dist/src/capabilities/cap-timeline.d.ts +0 -0
  472. package/packages/@monomind/cli/dist/src/capabilities/cap-timeline.js +0 -0
  473. package/packages/@monomind/cli/dist/src/capabilities/index.d.ts +0 -0
  474. package/packages/@monomind/cli/dist/src/capabilities/index.js +0 -0
  475. package/packages/@monomind/cli/dist/src/capabilities/manager.d.ts +0 -0
  476. package/packages/@monomind/cli/dist/src/capabilities/manager.js +0 -0
  477. package/packages/@monomind/cli/dist/src/capabilities/scanner.d.ts +0 -0
  478. package/packages/@monomind/cli/dist/src/capabilities/scanner.js +0 -0
  479. package/packages/@monomind/cli/dist/src/capabilities/types.d.ts +0 -0
  480. package/packages/@monomind/cli/dist/src/capabilities/types.js +0 -0
  481. package/packages/@monomind/cli/dist/src/commands/agent-lifecycle.d.ts +0 -0
  482. package/packages/@monomind/cli/dist/src/commands/agent-lifecycle.js +0 -0
  483. package/packages/@monomind/cli/dist/src/commands/agent-ops.d.ts +0 -0
  484. package/packages/@monomind/cli/dist/src/commands/agent-ops.js +0 -0
  485. package/packages/@monomind/cli/dist/src/commands/agent.d.ts +0 -0
  486. package/packages/@monomind/cli/dist/src/commands/agent.js +0 -0
  487. package/packages/@monomind/cli/dist/src/commands/analyze-ast.d.ts +0 -0
  488. package/packages/@monomind/cli/dist/src/commands/analyze-ast.js +0 -0
  489. package/packages/@monomind/cli/dist/src/commands/analyze-diff.d.ts +0 -0
  490. package/packages/@monomind/cli/dist/src/commands/analyze-diff.js +0 -0
  491. package/packages/@monomind/cli/dist/src/commands/analyze-imports.d.ts +0 -0
  492. package/packages/@monomind/cli/dist/src/commands/analyze-imports.js +0 -0
  493. package/packages/@monomind/cli/dist/src/commands/analyze-symbols.d.ts +0 -0
  494. package/packages/@monomind/cli/dist/src/commands/analyze-symbols.js +0 -0
  495. package/packages/@monomind/cli/dist/src/commands/analyze.d.ts +0 -0
  496. package/packages/@monomind/cli/dist/src/commands/analyze.js +0 -0
  497. package/packages/@monomind/cli/dist/src/commands/autopilot.d.ts +0 -0
  498. package/packages/@monomind/cli/dist/src/commands/autopilot.js +0 -0
  499. package/packages/@monomind/cli/dist/src/commands/browse-action.d.ts +0 -0
  500. package/packages/@monomind/cli/dist/src/commands/browse-action.js +0 -0
  501. package/packages/@monomind/cli/dist/src/commands/browse-platform.d.ts +0 -0
  502. package/packages/@monomind/cli/dist/src/commands/browse-platform.js +0 -0
  503. package/packages/@monomind/cli/dist/src/commands/browse-workflow.d.ts +0 -0
  504. package/packages/@monomind/cli/dist/src/commands/browse-workflow.js +0 -0
  505. package/packages/@monomind/cli/dist/src/commands/browse.d.ts +0 -0
  506. package/packages/@monomind/cli/dist/src/commands/browse.js +0 -0
  507. package/packages/@monomind/cli/dist/src/commands/cleanup.d.ts +0 -0
  508. package/packages/@monomind/cli/dist/src/commands/cleanup.js +0 -0
  509. package/packages/@monomind/cli/dist/src/commands/completions.d.ts +0 -0
  510. package/packages/@monomind/cli/dist/src/commands/completions.js +0 -0
  511. package/packages/@monomind/cli/dist/src/commands/config.d.ts +0 -0
  512. package/packages/@monomind/cli/dist/src/commands/config.js +0 -0
  513. package/packages/@monomind/cli/dist/src/commands/crash-reporting.d.ts +0 -0
  514. package/packages/@monomind/cli/dist/src/commands/crash-reporting.js +0 -0
  515. package/packages/@monomind/cli/dist/src/commands/design-detect.d.ts +0 -0
  516. package/packages/@monomind/cli/dist/src/commands/design-detect.js +0 -0
  517. package/packages/@monomind/cli/dist/src/commands/design-palette.d.ts +0 -0
  518. package/packages/@monomind/cli/dist/src/commands/design-palette.js +0 -0
  519. package/packages/@monomind/cli/dist/src/commands/doc.d.ts +0 -0
  520. package/packages/@monomind/cli/dist/src/commands/doc.js +0 -0
  521. package/packages/@monomind/cli/dist/src/commands/doctor-env-checks.d.ts +0 -0
  522. package/packages/@monomind/cli/dist/src/commands/doctor-env-checks.js +0 -0
  523. package/packages/@monomind/cli/dist/src/commands/doctor-monoes-checks.d.ts +0 -0
  524. package/packages/@monomind/cli/dist/src/commands/doctor-monoes-checks.js +0 -0
  525. package/packages/@monomind/cli/dist/src/commands/doctor-project-checks.d.ts +0 -0
  526. package/packages/@monomind/cli/dist/src/commands/doctor-project-checks.js +0 -0
  527. package/packages/@monomind/cli/dist/src/commands/doctor.d.ts +0 -0
  528. package/packages/@monomind/cli/dist/src/commands/doctor.js +0 -0
  529. package/packages/@monomind/cli/dist/src/commands/guidance.d.ts +0 -0
  530. package/packages/@monomind/cli/dist/src/commands/guidance.js +0 -0
  531. package/packages/@monomind/cli/dist/src/commands/hooks-core-commands.d.ts +0 -0
  532. package/packages/@monomind/cli/dist/src/commands/hooks-core-commands.js +0 -0
  533. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-commands.d.ts +0 -0
  534. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-commands.js +0 -0
  535. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-gaps.d.ts +0 -0
  536. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-gaps.js +0 -0
  537. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-routing.d.ts +0 -0
  538. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-routing.js +0 -0
  539. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-utils.d.ts +0 -0
  540. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-utils.js +0 -0
  541. package/packages/@monomind/cli/dist/src/commands/hooks-extended-commands.d.ts +0 -0
  542. package/packages/@monomind/cli/dist/src/commands/hooks-extended-commands.js +0 -0
  543. package/packages/@monomind/cli/dist/src/commands/hooks-formatting.d.ts +0 -0
  544. package/packages/@monomind/cli/dist/src/commands/hooks-formatting.js +0 -0
  545. package/packages/@monomind/cli/dist/src/commands/hooks-routing-commands.d.ts +0 -0
  546. package/packages/@monomind/cli/dist/src/commands/hooks-routing-commands.js +0 -0
  547. package/packages/@monomind/cli/dist/src/commands/hooks-workers.d.ts +0 -0
  548. package/packages/@monomind/cli/dist/src/commands/hooks-workers.js +0 -0
  549. package/packages/@monomind/cli/dist/src/commands/hooks.d.ts +0 -0
  550. package/packages/@monomind/cli/dist/src/commands/hooks.js +0 -0
  551. package/packages/@monomind/cli/dist/src/commands/index.d.ts +0 -0
  552. package/packages/@monomind/cli/dist/src/commands/index.js +0 -0
  553. package/packages/@monomind/cli/dist/src/commands/init-subcommands.d.ts +0 -0
  554. package/packages/@monomind/cli/dist/src/commands/init-subcommands.js +0 -0
  555. package/packages/@monomind/cli/dist/src/commands/init-upgrade.d.ts +0 -0
  556. package/packages/@monomind/cli/dist/src/commands/init-upgrade.js +0 -0
  557. package/packages/@monomind/cli/dist/src/commands/init-wizard.d.ts +0 -0
  558. package/packages/@monomind/cli/dist/src/commands/init-wizard.js +0 -0
  559. package/packages/@monomind/cli/dist/src/commands/init.d.ts +0 -0
  560. package/packages/@monomind/cli/dist/src/commands/init.js +0 -0
  561. package/packages/@monomind/cli/dist/src/commands/mcp.d.ts +0 -0
  562. package/packages/@monomind/cli/dist/src/commands/mcp.js +0 -0
  563. package/packages/@monomind/cli/dist/src/commands/memory-admin.d.ts +0 -0
  564. package/packages/@monomind/cli/dist/src/commands/memory-admin.js +0 -0
  565. package/packages/@monomind/cli/dist/src/commands/memory-crud.d.ts +0 -0
  566. package/packages/@monomind/cli/dist/src/commands/memory-crud.js +0 -0
  567. package/packages/@monomind/cli/dist/src/commands/memory-list.d.ts +0 -0
  568. package/packages/@monomind/cli/dist/src/commands/memory-list.js +0 -0
  569. package/packages/@monomind/cli/dist/src/commands/memory-transfer.d.ts +0 -0
  570. package/packages/@monomind/cli/dist/src/commands/memory-transfer.js +0 -0
  571. package/packages/@monomind/cli/dist/src/commands/memory.d.ts +0 -0
  572. package/packages/@monomind/cli/dist/src/commands/memory.js +0 -0
  573. package/packages/@monomind/cli/dist/src/commands/monograph.d.ts +0 -0
  574. package/packages/@monomind/cli/dist/src/commands/monograph.js +0 -0
  575. package/packages/@monomind/cli/dist/src/commands/neural-core.d.ts +0 -0
  576. package/packages/@monomind/cli/dist/src/commands/neural-core.js +0 -0
  577. package/packages/@monomind/cli/dist/src/commands/neural-optimize.d.ts +0 -0
  578. package/packages/@monomind/cli/dist/src/commands/neural-optimize.js +0 -0
  579. package/packages/@monomind/cli/dist/src/commands/neural-registry.d.ts +0 -0
  580. package/packages/@monomind/cli/dist/src/commands/neural-registry.js +0 -0
  581. package/packages/@monomind/cli/dist/src/commands/org-observe.d.ts +0 -0
  582. package/packages/@monomind/cli/dist/src/commands/org-observe.js +0 -0
  583. package/packages/@monomind/cli/dist/src/commands/org.d.ts +0 -0
  584. package/packages/@monomind/cli/dist/src/commands/org.js +43 -0
  585. package/packages/@monomind/cli/dist/src/commands/performance.d.ts +0 -0
  586. package/packages/@monomind/cli/dist/src/commands/performance.js +0 -0
  587. package/packages/@monomind/cli/dist/src/commands/platforms.d.ts +0 -0
  588. package/packages/@monomind/cli/dist/src/commands/platforms.js +0 -0
  589. package/packages/@monomind/cli/dist/src/commands/providers.d.ts +0 -0
  590. package/packages/@monomind/cli/dist/src/commands/providers.js +0 -0
  591. package/packages/@monomind/cli/dist/src/commands/report-crash.d.ts +0 -0
  592. package/packages/@monomind/cli/dist/src/commands/report-crash.js +0 -0
  593. package/packages/@monomind/cli/dist/src/commands/route.d.ts +0 -0
  594. package/packages/@monomind/cli/dist/src/commands/route.js +0 -0
  595. package/packages/@monomind/cli/dist/src/commands/search-universal.d.ts +0 -0
  596. package/packages/@monomind/cli/dist/src/commands/search-universal.js +0 -0
  597. package/packages/@monomind/cli/dist/src/commands/security-cve.d.ts +0 -0
  598. package/packages/@monomind/cli/dist/src/commands/security-cve.js +0 -0
  599. package/packages/@monomind/cli/dist/src/commands/security-misc.d.ts +0 -0
  600. package/packages/@monomind/cli/dist/src/commands/security-misc.js +0 -0
  601. package/packages/@monomind/cli/dist/src/commands/security-scan.d.ts +0 -0
  602. package/packages/@monomind/cli/dist/src/commands/security-scan.js +0 -0
  603. package/packages/@monomind/cli/dist/src/commands/security.d.ts +0 -0
  604. package/packages/@monomind/cli/dist/src/commands/security.js +0 -0
  605. package/packages/@monomind/cli/dist/src/commands/session.d.ts +0 -0
  606. package/packages/@monomind/cli/dist/src/commands/session.js +0 -0
  607. package/packages/@monomind/cli/dist/src/commands/start.d.ts +0 -0
  608. package/packages/@monomind/cli/dist/src/commands/start.js +0 -0
  609. package/packages/@monomind/cli/dist/src/commands/status.d.ts +0 -0
  610. package/packages/@monomind/cli/dist/src/commands/status.js +47 -6
  611. package/packages/@monomind/cli/dist/src/commands/swarm.d.ts +0 -0
  612. package/packages/@monomind/cli/dist/src/commands/swarm.js +0 -0
  613. package/packages/@monomind/cli/dist/src/commands/task.d.ts +0 -0
  614. package/packages/@monomind/cli/dist/src/commands/task.js +0 -0
  615. package/packages/@monomind/cli/dist/src/commands/tokens.d.ts +0 -0
  616. package/packages/@monomind/cli/dist/src/commands/tokens.js +0 -0
  617. package/packages/@monomind/cli/dist/src/commands/update.d.ts +0 -0
  618. package/packages/@monomind/cli/dist/src/commands/update.js +0 -0
  619. package/packages/@monomind/cli/dist/src/consensus/audit-writer.d.ts +0 -0
  620. package/packages/@monomind/cli/dist/src/consensus/audit-writer.js +0 -0
  621. package/packages/@monomind/cli/dist/src/consensus/tally.d.ts +0 -0
  622. package/packages/@monomind/cli/dist/src/consensus/tally.js +0 -0
  623. package/packages/@monomind/cli/dist/src/index.d.ts +0 -0
  624. package/packages/@monomind/cli/dist/src/index.js +0 -0
  625. package/packages/@monomind/cli/dist/src/init/claudemd-generator.d.ts +0 -0
  626. package/packages/@monomind/cli/dist/src/init/claudemd-generator.js +0 -0
  627. package/packages/@monomind/cli/dist/src/init/executor.d.ts +0 -0
  628. package/packages/@monomind/cli/dist/src/init/executor.js +0 -0
  629. package/packages/@monomind/cli/dist/src/init/helpers-generator.d.ts +0 -0
  630. package/packages/@monomind/cli/dist/src/init/helpers-generator.js +0 -0
  631. package/packages/@monomind/cli/dist/src/init/index.d.ts +0 -0
  632. package/packages/@monomind/cli/dist/src/init/index.js +0 -0
  633. package/packages/@monomind/cli/dist/src/init/mcp-generator.d.ts +0 -0
  634. package/packages/@monomind/cli/dist/src/init/mcp-generator.js +0 -0
  635. package/packages/@monomind/cli/dist/src/init/settings-generator.d.ts +0 -0
  636. package/packages/@monomind/cli/dist/src/init/settings-generator.js +0 -0
  637. package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.d.ts +0 -0
  638. package/packages/@monomind/cli/dist/src/init/shared-instructions-generator.js +0 -0
  639. package/packages/@monomind/cli/dist/src/init/statusline-generator.d.ts +0 -0
  640. package/packages/@monomind/cli/dist/src/init/statusline-generator.js +0 -0
  641. package/packages/@monomind/cli/dist/src/init/types.d.ts +0 -0
  642. package/packages/@monomind/cli/dist/src/init/types.js +0 -0
  643. package/packages/@monomind/cli/dist/src/knowledge/document-pipeline.d.ts +0 -0
  644. package/packages/@monomind/cli/dist/src/knowledge/document-pipeline.js +0 -0
  645. package/packages/@monomind/cli/dist/src/mcp-client.d.ts +0 -0
  646. package/packages/@monomind/cli/dist/src/mcp-client.js +0 -0
  647. package/packages/@monomind/cli/dist/src/mcp-server.d.ts +0 -0
  648. package/packages/@monomind/cli/dist/src/mcp-server.js +0 -0
  649. package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.d.ts +0 -0
  650. package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.js +0 -0
  651. package/packages/@monomind/cli/dist/src/mcp-tools/analyze-tools.d.ts +0 -0
  652. package/packages/@monomind/cli/dist/src/mcp-tools/analyze-tools.js +0 -0
  653. package/packages/@monomind/cli/dist/src/mcp-tools/auto-install.d.ts +0 -0
  654. package/packages/@monomind/cli/dist/src/mcp-tools/auto-install.js +0 -0
  655. package/packages/@monomind/cli/dist/src/mcp-tools/autopilot-tools.d.ts +0 -0
  656. package/packages/@monomind/cli/dist/src/mcp-tools/autopilot-tools.js +0 -0
  657. package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.d.ts +0 -0
  658. package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.js +0 -0
  659. package/packages/@monomind/cli/dist/src/mcp-tools/claims-tools.d.ts +0 -0
  660. package/packages/@monomind/cli/dist/src/mcp-tools/claims-tools.js +0 -0
  661. package/packages/@monomind/cli/dist/src/mcp-tools/config-tools.d.ts +0 -0
  662. package/packages/@monomind/cli/dist/src/mcp-tools/config-tools.js +0 -0
  663. package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.d.ts +0 -0
  664. package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.js +0 -0
  665. package/packages/@monomind/cli/dist/src/mcp-tools/github-tools.d.ts +0 -0
  666. package/packages/@monomind/cli/dist/src/mcp-tools/github-tools.js +0 -0
  667. package/packages/@monomind/cli/dist/src/mcp-tools/graphify-tools.d.ts +0 -0
  668. package/packages/@monomind/cli/dist/src/mcp-tools/graphify-tools.js +0 -0
  669. package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.d.ts +0 -0
  670. package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.js +0 -0
  671. package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.d.ts +0 -0
  672. package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.js +0 -0
  673. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-embedding.d.ts +0 -0
  674. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-embedding.js +0 -0
  675. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-intelligence.d.ts +0 -0
  676. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-intelligence.js +0 -0
  677. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-routing.d.ts +0 -0
  678. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-routing.js +0 -0
  679. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.d.ts +0 -0
  680. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.js +0 -0
  681. package/packages/@monomind/cli/dist/src/mcp-tools/index.d.ts +0 -0
  682. package/packages/@monomind/cli/dist/src/mcp-tools/index.js +0 -0
  683. package/packages/@monomind/cli/dist/src/mcp-tools/knowledge-tools.d.ts +0 -0
  684. package/packages/@monomind/cli/dist/src/mcp-tools/knowledge-tools.js +0 -0
  685. package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.d.ts +0 -0
  686. package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +0 -0
  687. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-compat.d.ts +0 -0
  688. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-compat.js +0 -0
  689. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.d.ts +0 -0
  690. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +0 -0
  691. package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.d.ts +0 -0
  692. package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.js +0 -0
  693. package/packages/@monomind/cli/dist/src/mcp-tools/performance-tools.d.ts +0 -0
  694. package/packages/@monomind/cli/dist/src/mcp-tools/performance-tools.js +0 -0
  695. package/packages/@monomind/cli/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.d.ts +0 -0
  696. package/packages/@monomind/cli/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.js +0 -0
  697. package/packages/@monomind/cli/dist/src/mcp-tools/quality/security-compliance/detect-secrets.d.ts +0 -0
  698. package/packages/@monomind/cli/dist/src/mcp-tools/quality/security-compliance/detect-secrets.js +0 -0
  699. package/packages/@monomind/cli/dist/src/mcp-tools/quality-tools.d.ts +0 -0
  700. package/packages/@monomind/cli/dist/src/mcp-tools/quality-tools.js +0 -0
  701. package/packages/@monomind/cli/dist/src/mcp-tools/request-tracker.d.ts +0 -0
  702. package/packages/@monomind/cli/dist/src/mcp-tools/request-tracker.js +0 -0
  703. package/packages/@monomind/cli/dist/src/mcp-tools/security-tools.d.ts +0 -0
  704. package/packages/@monomind/cli/dist/src/mcp-tools/security-tools.js +0 -0
  705. package/packages/@monomind/cli/dist/src/mcp-tools/session-tools.d.ts +0 -0
  706. package/packages/@monomind/cli/dist/src/mcp-tools/session-tools.js +0 -0
  707. package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.d.ts +0 -0
  708. package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.js +0 -0
  709. package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.d.ts +0 -0
  710. package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.js +0 -0
  711. package/packages/@monomind/cli/dist/src/mcp-tools/task-tools.d.ts +0 -0
  712. package/packages/@monomind/cli/dist/src/mcp-tools/task-tools.js +8 -3
  713. package/packages/@monomind/cli/dist/src/mcp-tools/terminal-tools.d.ts +0 -0
  714. package/packages/@monomind/cli/dist/src/mcp-tools/terminal-tools.js +0 -0
  715. package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.d.ts +0 -0
  716. package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.js +0 -0
  717. package/packages/@monomind/cli/dist/src/mcp-tools/types.d.ts +0 -0
  718. package/packages/@monomind/cli/dist/src/mcp-tools/types.js +0 -0
  719. package/packages/@monomind/cli/dist/src/memory/embedding-operations.d.ts +0 -0
  720. package/packages/@monomind/cli/dist/src/memory/embedding-operations.js +0 -0
  721. package/packages/@monomind/cli/dist/src/memory/ewc-consolidation.d.ts +0 -0
  722. package/packages/@monomind/cli/dist/src/memory/ewc-consolidation.js +0 -0
  723. package/packages/@monomind/cli/dist/src/memory/hnsw-operations.d.ts +0 -0
  724. package/packages/@monomind/cli/dist/src/memory/hnsw-operations.js +0 -0
  725. package/packages/@monomind/cli/dist/src/memory/intelligence.d.ts +0 -0
  726. package/packages/@monomind/cli/dist/src/memory/intelligence.js +0 -0
  727. package/packages/@monomind/cli/dist/src/memory/memory-bridge.d.ts +0 -0
  728. package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +0 -0
  729. package/packages/@monomind/cli/dist/src/memory/memory-crud.d.ts +0 -0
  730. package/packages/@monomind/cli/dist/src/memory/memory-crud.js +16 -1
  731. package/packages/@monomind/cli/dist/src/memory/memory-initializer.d.ts +0 -0
  732. package/packages/@monomind/cli/dist/src/memory/memory-initializer.js +0 -0
  733. package/packages/@monomind/cli/dist/src/memory/memory-kg.d.ts +0 -0
  734. package/packages/@monomind/cli/dist/src/memory/memory-kg.js +0 -0
  735. package/packages/@monomind/cli/dist/src/memory/memory-migrations.d.ts +0 -0
  736. package/packages/@monomind/cli/dist/src/memory/memory-migrations.js +0 -0
  737. package/packages/@monomind/cli/dist/src/memory/memory-read.d.ts +0 -0
  738. package/packages/@monomind/cli/dist/src/memory/memory-read.js +0 -0
  739. package/packages/@monomind/cli/dist/src/memory/memory-schema.d.ts +0 -0
  740. package/packages/@monomind/cli/dist/src/memory/memory-schema.js +0 -0
  741. package/packages/@monomind/cli/dist/src/memory/query-router.d.ts +0 -0
  742. package/packages/@monomind/cli/dist/src/memory/query-router.js +0 -0
  743. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.d.ts +0 -0
  744. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.js +0 -0
  745. package/packages/@monomind/cli/dist/src/monovector/command-outcomes.d.ts +0 -0
  746. package/packages/@monomind/cli/dist/src/monovector/command-outcomes.js +0 -0
  747. package/packages/@monomind/cli/dist/src/monovector/coverage-router.d.ts +0 -0
  748. package/packages/@monomind/cli/dist/src/monovector/coverage-router.js +0 -0
  749. package/packages/@monomind/cli/dist/src/monovector/coverage-tools.d.ts +0 -0
  750. package/packages/@monomind/cli/dist/src/monovector/coverage-tools.js +0 -0
  751. package/packages/@monomind/cli/dist/src/monovector/diff-classifier.d.ts +0 -0
  752. package/packages/@monomind/cli/dist/src/monovector/diff-classifier.js +0 -0
  753. package/packages/@monomind/cli/dist/src/monovector/index.d.ts +0 -0
  754. package/packages/@monomind/cli/dist/src/monovector/index.js +0 -0
  755. package/packages/@monomind/cli/dist/src/monovector/init-state.d.ts +0 -0
  756. package/packages/@monomind/cli/dist/src/monovector/init-state.js +0 -0
  757. package/packages/@monomind/cli/dist/src/monovector/route-outcomes.d.ts +0 -0
  758. package/packages/@monomind/cli/dist/src/monovector/route-outcomes.js +0 -0
  759. package/packages/@monomind/cli/dist/src/observability/replay-reader.d.ts +0 -0
  760. package/packages/@monomind/cli/dist/src/observability/replay-reader.js +0 -0
  761. package/packages/@monomind/cli/dist/src/orgrt/broker.d.ts +0 -0
  762. package/packages/@monomind/cli/dist/src/orgrt/broker.js +0 -0
  763. package/packages/@monomind/cli/dist/src/orgrt/bus.d.ts +0 -0
  764. package/packages/@monomind/cli/dist/src/orgrt/bus.js +0 -0
  765. package/packages/@monomind/cli/dist/src/orgrt/daemon.d.ts +0 -0
  766. package/packages/@monomind/cli/dist/src/orgrt/daemon.js +0 -0
  767. package/packages/@monomind/cli/dist/src/orgrt/forwarder.d.ts +0 -0
  768. package/packages/@monomind/cli/dist/src/orgrt/forwarder.js +0 -0
  769. package/packages/@monomind/cli/dist/src/orgrt/inbox.d.ts +0 -0
  770. package/packages/@monomind/cli/dist/src/orgrt/inbox.js +0 -0
  771. package/packages/@monomind/cli/dist/src/orgrt/mailbox.d.ts +0 -0
  772. package/packages/@monomind/cli/dist/src/orgrt/mailbox.js +0 -0
  773. package/packages/@monomind/cli/dist/src/orgrt/migrate.d.ts +0 -0
  774. package/packages/@monomind/cli/dist/src/orgrt/migrate.js +0 -0
  775. package/packages/@monomind/cli/dist/src/orgrt/policy.d.ts +0 -0
  776. package/packages/@monomind/cli/dist/src/orgrt/policy.js +0 -0
  777. package/packages/@monomind/cli/dist/src/orgrt/provider.d.ts +0 -0
  778. package/packages/@monomind/cli/dist/src/orgrt/provider.js +0 -0
  779. package/packages/@monomind/cli/dist/src/orgrt/reporting.d.ts +0 -0
  780. package/packages/@monomind/cli/dist/src/orgrt/reporting.js +0 -0
  781. package/packages/@monomind/cli/dist/src/orgrt/scheduler.d.ts +0 -0
  782. package/packages/@monomind/cli/dist/src/orgrt/scheduler.js +0 -0
  783. package/packages/@monomind/cli/dist/src/orgrt/server.d.ts +0 -0
  784. package/packages/@monomind/cli/dist/src/orgrt/server.js +0 -0
  785. package/packages/@monomind/cli/dist/src/orgrt/session.d.ts +0 -0
  786. package/packages/@monomind/cli/dist/src/orgrt/session.js +0 -0
  787. package/packages/@monomind/cli/dist/src/orgrt/templates.d.ts +0 -0
  788. package/packages/@monomind/cli/dist/src/orgrt/templates.js +0 -0
  789. package/packages/@monomind/cli/dist/src/orgrt/test-loop.d.ts +0 -0
  790. package/packages/@monomind/cli/dist/src/orgrt/test-loop.js +0 -0
  791. package/packages/@monomind/cli/dist/src/orgrt/types.d.ts +0 -0
  792. package/packages/@monomind/cli/dist/src/orgrt/types.js +0 -0
  793. package/packages/@monomind/cli/dist/src/output.d.ts +0 -0
  794. package/packages/@monomind/cli/dist/src/output.js +0 -0
  795. package/packages/@monomind/cli/dist/src/parser.d.ts +0 -0
  796. package/packages/@monomind/cli/dist/src/parser.js +0 -0
  797. package/packages/@monomind/cli/dist/src/pricing/model-pricing.d.ts +0 -0
  798. package/packages/@monomind/cli/dist/src/pricing/model-pricing.js +0 -0
  799. package/packages/@monomind/cli/dist/src/production/circuit-breaker.d.ts +0 -0
  800. package/packages/@monomind/cli/dist/src/production/circuit-breaker.js +0 -0
  801. package/packages/@monomind/cli/dist/src/production/error-handler.d.ts +0 -0
  802. package/packages/@monomind/cli/dist/src/production/error-handler.js +0 -0
  803. package/packages/@monomind/cli/dist/src/production/index.d.ts +0 -0
  804. package/packages/@monomind/cli/dist/src/production/index.js +0 -0
  805. package/packages/@monomind/cli/dist/src/production/monitoring.d.ts +0 -0
  806. package/packages/@monomind/cli/dist/src/production/monitoring.js +0 -0
  807. package/packages/@monomind/cli/dist/src/production/rate-limiter.d.ts +0 -0
  808. package/packages/@monomind/cli/dist/src/production/rate-limiter.js +0 -0
  809. package/packages/@monomind/cli/dist/src/production/retry.d.ts +0 -0
  810. package/packages/@monomind/cli/dist/src/production/retry.js +0 -0
  811. package/packages/@monomind/cli/dist/src/prompt.d.ts +0 -0
  812. package/packages/@monomind/cli/dist/src/prompt.js +0 -0
  813. package/packages/@monomind/cli/dist/src/routing/embed-worker.d.ts +0 -0
  814. package/packages/@monomind/cli/dist/src/routing/embed-worker.js +0 -0
  815. package/packages/@monomind/cli/dist/src/routing/embedder.d.ts +0 -0
  816. package/packages/@monomind/cli/dist/src/routing/embedder.js +0 -0
  817. package/packages/@monomind/cli/dist/src/routing/llm-caller.d.ts +0 -0
  818. package/packages/@monomind/cli/dist/src/routing/llm-caller.js +0 -0
  819. package/packages/@monomind/cli/dist/src/routing/route-layer-factory.d.ts +0 -0
  820. package/packages/@monomind/cli/dist/src/routing/route-layer-factory.js +0 -0
  821. package/packages/@monomind/cli/dist/src/services/config-file-manager.d.ts +0 -0
  822. package/packages/@monomind/cli/dist/src/services/config-file-manager.js +0 -0
  823. package/packages/@monomind/cli/dist/src/services/crash-reporter.d.ts +0 -0
  824. package/packages/@monomind/cli/dist/src/services/crash-reporter.js +0 -0
  825. package/packages/@monomind/cli/dist/src/suggest.d.ts +0 -0
  826. package/packages/@monomind/cli/dist/src/suggest.js +0 -0
  827. package/packages/@monomind/cli/dist/src/sync/checker.d.ts +0 -0
  828. package/packages/@monomind/cli/dist/src/sync/checker.js +0 -0
  829. package/packages/@monomind/cli/dist/src/transfer/anonymization/index.d.ts +0 -0
  830. package/packages/@monomind/cli/dist/src/transfer/anonymization/index.js +0 -0
  831. package/packages/@monomind/cli/dist/src/transfer/types.d.ts +0 -0
  832. package/packages/@monomind/cli/dist/src/transfer/types.js +0 -0
  833. package/packages/@monomind/cli/dist/src/types.d.ts +0 -0
  834. package/packages/@monomind/cli/dist/src/types.js +0 -0
  835. package/packages/@monomind/cli/dist/src/ui/collector.mjs +0 -0
  836. package/packages/@monomind/cli/dist/src/ui/dashboard.html +0 -0
  837. package/packages/@monomind/cli/dist/src/ui/data/agent-avatars.html +0 -0
  838. package/packages/@monomind/cli/dist/src/ui/data/agent-avatars.json +0 -0
  839. package/packages/@monomind/cli/dist/src/ui/data/avatars/account-strategist.svg +0 -0
  840. package/packages/@monomind/cli/dist/src/ui/data/avatars/accounts-payable.svg +0 -0
  841. package/packages/@monomind/cli/dist/src/ui/data/avatars/adaptive-coordinator.svg +0 -0
  842. package/packages/@monomind/cli/dist/src/ui/data/avatars/adaptive-coordinator2.svg +0 -0
  843. package/packages/@monomind/cli/dist/src/ui/data/avatars/ai-citation.svg +0 -0
  844. package/packages/@monomind/cli/dist/src/ui/data/avatars/ai-engineer.svg +0 -0
  845. package/packages/@monomind/cli/dist/src/ui/data/avatars/analytics-reporter.svg +0 -0
  846. package/packages/@monomind/cli/dist/src/ui/data/avatars/api-tester.svg +0 -0
  847. package/packages/@monomind/cli/dist/src/ui/data/avatars/architecture.svg +0 -0
  848. package/packages/@monomind/cli/dist/src/ui/data/avatars/automation-governance.svg +0 -0
  849. package/packages/@monomind/cli/dist/src/ui/data/avatars/backend-dev.svg +0 -0
  850. package/packages/@monomind/cli/dist/src/ui/data/avatars/benchmarker.svg +0 -0
  851. package/packages/@monomind/cli/dist/src/ui/data/avatars/blockchain-auditor.svg +0 -0
  852. package/packages/@monomind/cli/dist/src/ui/data/avatars/byzantine-coord.svg +0 -0
  853. package/packages/@monomind/cli/dist/src/ui/data/avatars/case-analyst.svg +0 -0
  854. package/packages/@monomind/cli/dist/src/ui/data/avatars/cicd-engineer.svg +0 -0
  855. package/packages/@monomind/cli/dist/src/ui/data/avatars/cloud-architect.svg +0 -0
  856. package/packages/@monomind/cli/dist/src/ui/data/avatars/code-review-swarm.svg +0 -0
  857. package/packages/@monomind/cli/dist/src/ui/data/avatars/coder-v119.svg +0 -0
  858. package/packages/@monomind/cli/dist/src/ui/data/avatars/coder.svg +0 -0
  859. package/packages/@monomind/cli/dist/src/ui/data/avatars/collective-coord.svg +0 -0
  860. package/packages/@monomind/cli/dist/src/ui/data/avatars/compliance-auditor.svg +0 -0
  861. package/packages/@monomind/cli/dist/src/ui/data/avatars/consensus-coordinator.svg +0 -0
  862. package/packages/@monomind/cli/dist/src/ui/data/avatars/content-creator.svg +0 -0
  863. package/packages/@monomind/cli/dist/src/ui/data/avatars/crdt-synchronizer.svg +0 -0
  864. package/packages/@monomind/cli/dist/src/ui/data/avatars/cro-specialist.svg +0 -0
  865. package/packages/@monomind/cli/dist/src/ui/data/avatars/data-consolidator.svg +0 -0
  866. package/packages/@monomind/cli/dist/src/ui/data/avatars/data-engineer.svg +0 -0
  867. package/packages/@monomind/cli/dist/src/ui/data/avatars/database-optimizer.svg +0 -0
  868. package/packages/@monomind/cli/dist/src/ui/data/avatars/deal-strategist.svg +0 -0
  869. package/packages/@monomind/cli/dist/src/ui/data/avatars/defender.svg +0 -0
  870. package/packages/@monomind/cli/dist/src/ui/data/avatars/devops-automator.svg +0 -0
  871. package/packages/@monomind/cli/dist/src/ui/data/avatars/discovery-coach.svg +0 -0
  872. package/packages/@monomind/cli/dist/src/ui/data/avatars/email-marketing.svg +0 -0
  873. package/packages/@monomind/cli/dist/src/ui/data/avatars/embedded-firmware.svg +0 -0
  874. package/packages/@monomind/cli/dist/src/ui/data/avatars/evidence-collector.svg +0 -0
  875. package/packages/@monomind/cli/dist/src/ui/data/avatars/experiment-tracker.svg +0 -0
  876. package/packages/@monomind/cli/dist/src/ui/data/avatars/feedback-synthesizer.svg +0 -0
  877. package/packages/@monomind/cli/dist/src/ui/data/avatars/finance-tracker.svg +0 -0
  878. package/packages/@monomind/cli/dist/src/ui/data/avatars/frontend-developer.svg +0 -0
  879. package/packages/@monomind/cli/dist/src/ui/data/avatars/game-audio-engineer.svg +0 -0
  880. package/packages/@monomind/cli/dist/src/ui/data/avatars/game-designer.svg +0 -0
  881. package/packages/@monomind/cli/dist/src/ui/data/avatars/gossip-coordinator.svg +0 -0
  882. package/packages/@monomind/cli/dist/src/ui/data/avatars/hierarchical-coord.svg +0 -0
  883. package/packages/@monomind/cli/dist/src/ui/data/avatars/incident-commander.svg +0 -0
  884. package/packages/@monomind/cli/dist/src/ui/data/avatars/infrastructure.svg +0 -0
  885. package/packages/@monomind/cli/dist/src/ui/data/avatars/input-validator.svg +0 -0
  886. package/packages/@monomind/cli/dist/src/ui/data/avatars/ios-developer.svg +0 -0
  887. package/packages/@monomind/cli/dist/src/ui/data/avatars/issue-tracker.svg +0 -0
  888. package/packages/@monomind/cli/dist/src/ui/data/avatars/judge.svg +0 -0
  889. package/packages/@monomind/cli/dist/src/ui/data/avatars/launch-strategist.svg +0 -0
  890. package/packages/@monomind/cli/dist/src/ui/data/avatars/legal-compliance.svg +0 -0
  891. package/packages/@monomind/cli/dist/src/ui/data/avatars/level-designer.svg +0 -0
  892. package/packages/@monomind/cli/dist/src/ui/data/avatars/load-balancer.svg +0 -0
  893. package/packages/@monomind/cli/dist/src/ui/data/avatars/mcp-builder.svg +0 -0
  894. package/packages/@monomind/cli/dist/src/ui/data/avatars/memory-coordinator.svg +0 -0
  895. package/packages/@monomind/cli/dist/src/ui/data/avatars/mesh-coordinator.svg +0 -0
  896. package/packages/@monomind/cli/dist/src/ui/data/avatars/ml-developer.svg +0 -0
  897. package/packages/@monomind/cli/dist/src/ui/data/avatars/mobile-app-builder.svg +0 -0
  898. package/packages/@monomind/cli/dist/src/ui/data/avatars/mobile-dev.svg +0 -0
  899. package/packages/@monomind/cli/dist/src/ui/data/avatars/model-qa.svg +0 -0
  900. package/packages/@monomind/cli/dist/src/ui/data/avatars/narrative-designer.svg +0 -0
  901. package/packages/@monomind/cli/dist/src/ui/data/avatars/outbound-strategist.svg +0 -0
  902. package/packages/@monomind/cli/dist/src/ui/data/avatars/path-validator.svg +0 -0
  903. package/packages/@monomind/cli/dist/src/ui/data/avatars/payment-agent.svg +0 -0
  904. package/packages/@monomind/cli/dist/src/ui/data/avatars/perf-analyzer.svg +0 -0
  905. package/packages/@monomind/cli/dist/src/ui/data/avatars/pipeline-analyst.svg +0 -0
  906. package/packages/@monomind/cli/dist/src/ui/data/avatars/planner.svg +0 -0
  907. package/packages/@monomind/cli/dist/src/ui/data/avatars/pr-manager.svg +0 -0
  908. package/packages/@monomind/cli/dist/src/ui/data/avatars/pricing-strategist.svg +0 -0
  909. package/packages/@monomind/cli/dist/src/ui/data/avatars/product-manager.svg +0 -0
  910. package/packages/@monomind/cli/dist/src/ui/data/avatars/production-validator.svg +0 -0
  911. package/packages/@monomind/cli/dist/src/ui/data/avatars/project-shepherd.svg +0 -0
  912. package/packages/@monomind/cli/dist/src/ui/data/avatars/proposal-strategist.svg +0 -0
  913. package/packages/@monomind/cli/dist/src/ui/data/avatars/prosecutor.svg +0 -0
  914. package/packages/@monomind/cli/dist/src/ui/data/avatars/pseudocode.svg +0 -0
  915. package/packages/@monomind/cli/dist/src/ui/data/avatars/queen-coordinator.svg +0 -0
  916. package/packages/@monomind/cli/dist/src/ui/data/avatars/quorum-manager.svg +0 -0
  917. package/packages/@monomind/cli/dist/src/ui/data/avatars/raft-manager.svg +0 -0
  918. package/packages/@monomind/cli/dist/src/ui/data/avatars/reality-checker.svg +0 -0
  919. package/packages/@monomind/cli/dist/src/ui/data/avatars/recruitment.svg +0 -0
  920. package/packages/@monomind/cli/dist/src/ui/data/avatars/refinement.svg +0 -0
  921. package/packages/@monomind/cli/dist/src/ui/data/avatars/release-manager.svg +0 -0
  922. package/packages/@monomind/cli/dist/src/ui/data/avatars/repo-architect.svg +0 -0
  923. package/packages/@monomind/cli/dist/src/ui/data/avatars/researcher.svg +0 -0
  924. package/packages/@monomind/cli/dist/src/ui/data/avatars/resource-allocator.svg +0 -0
  925. package/packages/@monomind/cli/dist/src/ui/data/avatars/reviewer.svg +0 -0
  926. package/packages/@monomind/cli/dist/src/ui/data/avatars/safe-executor.svg +0 -0
  927. package/packages/@monomind/cli/dist/src/ui/data/avatars/sales-coach.svg +0 -0
  928. package/packages/@monomind/cli/dist/src/ui/data/avatars/sales-engineer.svg +0 -0
  929. package/packages/@monomind/cli/dist/src/ui/data/avatars/scout-explorer.svg +0 -0
  930. package/packages/@monomind/cli/dist/src/ui/data/avatars/security-architect.svg +0 -0
  931. package/packages/@monomind/cli/dist/src/ui/data/avatars/security-auditor.svg +0 -0
  932. package/packages/@monomind/cli/dist/src/ui/data/avatars/senior-developer.svg +0 -0
  933. package/packages/@monomind/cli/dist/src/ui/data/avatars/senior-pm.svg +0 -0
  934. package/packages/@monomind/cli/dist/src/ui/data/avatars/seo-specialist.svg +0 -0
  935. package/packages/@monomind/cli/dist/src/ui/data/avatars/social-media.svg +0 -0
  936. package/packages/@monomind/cli/dist/src/ui/data/avatars/solidity-engineer.svg +0 -0
  937. package/packages/@monomind/cli/dist/src/ui/data/avatars/sparc-coder.svg +0 -0
  938. package/packages/@monomind/cli/dist/src/ui/data/avatars/sparc-coord.svg +0 -0
  939. package/packages/@monomind/cli/dist/src/ui/data/avatars/specification.svg +0 -0
  940. package/packages/@monomind/cli/dist/src/ui/data/avatars/sprint-prioritizer.svg +0 -0
  941. package/packages/@monomind/cli/dist/src/ui/data/avatars/sre.svg +0 -0
  942. package/packages/@monomind/cli/dist/src/ui/data/avatars/studio-operations.svg +0 -0
  943. package/packages/@monomind/cli/dist/src/ui/data/avatars/studio-producer.svg +0 -0
  944. package/packages/@monomind/cli/dist/src/ui/data/avatars/support-responder.svg +0 -0
  945. package/packages/@monomind/cli/dist/src/ui/data/avatars/system-architect.svg +0 -0
  946. package/packages/@monomind/cli/dist/src/ui/data/avatars/task-orchestrator.svg +0 -0
  947. package/packages/@monomind/cli/dist/src/ui/data/avatars/technical-artist.svg +0 -0
  948. package/packages/@monomind/cli/dist/src/ui/data/avatars/technical-writer.svg +0 -0
  949. package/packages/@monomind/cli/dist/src/ui/data/avatars/tester.svg +0 -0
  950. package/packages/@monomind/cli/dist/src/ui/data/avatars/threat-detection.svg +0 -0
  951. package/packages/@monomind/cli/dist/src/ui/data/avatars/trend-researcher.svg +0 -0
  952. package/packages/@monomind/cli/dist/src/ui/data/avatars/trial-director.svg +0 -0
  953. package/packages/@monomind/cli/dist/src/ui/data/avatars/unity-architect.svg +0 -0
  954. package/packages/@monomind/cli/dist/src/ui/data/avatars/visionos-engineer.svg +0 -0
  955. package/packages/@monomind/cli/dist/src/ui/data/avatars/worker-specialist.svg +0 -0
  956. package/packages/@monomind/cli/dist/src/ui/data/avatars/workflow-architect.svg +0 -0
  957. package/packages/@monomind/cli/dist/src/ui/data/avatars/workflow-automation.svg +0 -0
  958. package/packages/@monomind/cli/dist/src/ui/data/avatars/zk-steward.svg +0 -0
  959. package/packages/@monomind/cli/dist/src/ui/mastermind-diagram-fallback.html +0 -0
  960. package/packages/@monomind/cli/dist/src/ui/orgs-files.js +0 -0
  961. package/packages/@monomind/cli/dist/src/ui/orgs.html +0 -0
  962. package/packages/@monomind/cli/dist/src/ui/server.mjs +0 -0
  963. package/packages/@monomind/cli/dist/src/ui/sse-manager.mjs +0 -0
  964. package/packages/@monomind/cli/dist/src/update/checker.d.ts +0 -0
  965. package/packages/@monomind/cli/dist/src/update/checker.js +0 -0
  966. package/packages/@monomind/cli/dist/src/update/executor.d.ts +0 -0
  967. package/packages/@monomind/cli/dist/src/update/executor.js +0 -0
  968. package/packages/@monomind/cli/dist/src/update/index.d.ts +0 -0
  969. package/packages/@monomind/cli/dist/src/update/index.js +0 -0
  970. package/packages/@monomind/cli/dist/src/update/rate-limiter.d.ts +0 -0
  971. package/packages/@monomind/cli/dist/src/update/rate-limiter.js +0 -0
  972. package/packages/@monomind/cli/dist/src/update/validator.d.ts +0 -0
  973. package/packages/@monomind/cli/dist/src/update/validator.js +0 -0
  974. package/packages/@monomind/cli/dist/src/utils/cosine-similarity.d.ts +0 -0
  975. package/packages/@monomind/cli/dist/src/utils/cosine-similarity.js +0 -0
  976. package/packages/@monomind/cli/dist/src/utils/input-guards.d.ts +0 -0
  977. package/packages/@monomind/cli/dist/src/utils/input-guards.js +0 -0
  978. package/packages/@monomind/cli/dist/src/utils/json-file.d.ts +0 -0
  979. package/packages/@monomind/cli/dist/src/utils/json-file.js +0 -0
  980. package/packages/@monomind/cli/dist/src/utils/parse-jsonl.d.ts +0 -0
  981. package/packages/@monomind/cli/dist/src/utils/parse-jsonl.js +0 -0
  982. package/packages/@monomind/cli/dist/src/utils/resource-governor.d.ts +0 -0
  983. package/packages/@monomind/cli/dist/src/utils/resource-governor.js +0 -0
  984. package/packages/@monomind/cli/package.json +5 -5
  985. package/packages/@monomind/cli/scripts/deploy-ipfs-node.sh +0 -0
  986. package/packages/@monomind/cli/scripts/understand-analyze.mjs +0 -0
  987. package/scripts/build-fs.mjs +75 -0
  988. package/scripts/generate-agent-avatars.mjs +0 -0
  989. package/scripts/generate-channel-profile-assets.sh +0 -0
  990. package/scripts/growth-content-calendar.mjs +0 -0
  991. package/scripts/growth-profile-kit.mjs +0 -0
  992. package/scripts/ua-enrich.mjs +0 -0
  993. package/scripts/ua-import.mjs +0 -0
  994. package/scripts/verify-appliance.sh +0 -0
  995. package/packages/@monomind/cli/.claude/skills/github-toolkit/SKILL.md +0 -60
  996. package/packages/@monomind/cli/.claude/skills/memory-toolkit/SKILL.md +0 -75
  997. package/packages/@monomind/cli/.claude/skills/monodesign/SKILL.md +0 -257
  998. package/packages/@monomind/cli/.claude/skills/monodesign/adapt.md +0 -53
  999. package/packages/@monomind/cli/.claude/skills/monodesign/agents/monodesign-asset-producer.md +0 -100
  1000. package/packages/@monomind/cli/.claude/skills/monodesign/agents/monodesign-manual-edit-applier.md +0 -103
  1001. package/packages/@monomind/cli/.claude/skills/monodesign/animate.md +0 -65
  1002. package/packages/@monomind/cli/.claude/skills/monodesign/audit.md +0 -89
  1003. package/packages/@monomind/cli/.claude/skills/monodesign/bolder.md +0 -50
  1004. package/packages/@monomind/cli/.claude/skills/monodesign/clarify.md +0 -64
  1005. package/packages/@monomind/cli/.claude/skills/monodesign/colorize.md +0 -68
  1006. package/packages/@monomind/cli/.claude/skills/monodesign/craft.md +0 -51
  1007. package/packages/@monomind/cli/.claude/skills/monodesign/critique.md +0 -66
  1008. package/packages/@monomind/cli/.claude/skills/monodesign/delight.md +0 -47
  1009. package/packages/@monomind/cli/.claude/skills/monodesign/distill.md +0 -56
  1010. package/packages/@monomind/cli/.claude/skills/monodesign/document.md +0 -83
  1011. package/packages/@monomind/cli/.claude/skills/monodesign/extract.md +0 -74
  1012. package/packages/@monomind/cli/.claude/skills/monodesign/harden.md +0 -65
  1013. package/packages/@monomind/cli/.claude/skills/monodesign/init.md +0 -30
  1014. package/packages/@monomind/cli/.claude/skills/monodesign/layout.md +0 -36
  1015. package/packages/@monomind/cli/.claude/skills/monodesign/live.md +0 -34
  1016. package/packages/@monomind/cli/.claude/skills/monodesign/onboard.md +0 -50
  1017. package/packages/@monomind/cli/.claude/skills/monodesign/optimize.md +0 -64
  1018. package/packages/@monomind/cli/.claude/skills/monodesign/overdrive.md +0 -56
  1019. package/packages/@monomind/cli/.claude/skills/monodesign/polish.md +0 -68
  1020. package/packages/@monomind/cli/.claude/skills/monodesign/quieter.md +0 -57
  1021. package/packages/@monomind/cli/.claude/skills/monodesign/reference/adapt.md +0 -312
  1022. package/packages/@monomind/cli/.claude/skills/monodesign/reference/adapt.native.md +0 -58
  1023. package/packages/@monomind/cli/.claude/skills/monodesign/reference/android.md +0 -40
  1024. package/packages/@monomind/cli/.claude/skills/monodesign/reference/animate.md +0 -203
  1025. package/packages/@monomind/cli/.claude/skills/monodesign/reference/antipatterns-catalog.md +0 -410
  1026. package/packages/@monomind/cli/.claude/skills/monodesign/reference/audit.md +0 -135
  1027. package/packages/@monomind/cli/.claude/skills/monodesign/reference/audit.native.md +0 -139
  1028. package/packages/@monomind/cli/.claude/skills/monodesign/reference/bolder.md +0 -120
  1029. package/packages/@monomind/cli/.claude/skills/monodesign/reference/brand-workflow.md +0 -180
  1030. package/packages/@monomind/cli/.claude/skills/monodesign/reference/brand.md +0 -108
  1031. package/packages/@monomind/cli/.claude/skills/monodesign/reference/clarify.md +0 -288
  1032. package/packages/@monomind/cli/.claude/skills/monodesign/reference/codex.md +0 -105
  1033. package/packages/@monomind/cli/.claude/skills/monodesign/reference/cognitive-load.md +0 -106
  1034. package/packages/@monomind/cli/.claude/skills/monodesign/reference/color-and-contrast.md +0 -105
  1035. package/packages/@monomind/cli/.claude/skills/monodesign/reference/colorize.md +0 -257
  1036. package/packages/@monomind/cli/.claude/skills/monodesign/reference/component-specs.md +0 -260
  1037. package/packages/@monomind/cli/.claude/skills/monodesign/reference/component-states.md +0 -274
  1038. package/packages/@monomind/cli/.claude/skills/monodesign/reference/component-system.md +0 -358
  1039. package/packages/@monomind/cli/.claude/skills/monodesign/reference/copy-formulas.md +0 -160
  1040. package/packages/@monomind/cli/.claude/skills/monodesign/reference/craft.md +0 -123
  1041. package/packages/@monomind/cli/.claude/skills/monodesign/reference/critique.md +0 -780
  1042. package/packages/@monomind/cli/.claude/skills/monodesign/reference/delight.md +0 -302
  1043. package/packages/@monomind/cli/.claude/skills/monodesign/reference/design-principles.md +0 -246
  1044. package/packages/@monomind/cli/.claude/skills/monodesign/reference/distill.md +0 -111
  1045. package/packages/@monomind/cli/.claude/skills/monodesign/reference/document.md +0 -429
  1046. package/packages/@monomind/cli/.claude/skills/monodesign/reference/extract.md +0 -69
  1047. package/packages/@monomind/cli/.claude/skills/monodesign/reference/harden.md +0 -347
  1048. package/packages/@monomind/cli/.claude/skills/monodesign/reference/heuristics-scoring.md +0 -234
  1049. package/packages/@monomind/cli/.claude/skills/monodesign/reference/hooks.md +0 -92
  1050. package/packages/@monomind/cli/.claude/skills/monodesign/reference/image-prompts.md +0 -130
  1051. package/packages/@monomind/cli/.claude/skills/monodesign/reference/init.md +0 -221
  1052. package/packages/@monomind/cli/.claude/skills/monodesign/reference/interaction-design.md +0 -189
  1053. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ios.md +0 -45
  1054. package/packages/@monomind/cli/.claude/skills/monodesign/reference/layout.md +0 -185
  1055. package/packages/@monomind/cli/.claude/skills/monodesign/reference/live.md +0 -710
  1056. package/packages/@monomind/cli/.claude/skills/monodesign/reference/motion-design.md +0 -109
  1057. package/packages/@monomind/cli/.claude/skills/monodesign/reference/onboard.md +0 -234
  1058. package/packages/@monomind/cli/.claude/skills/monodesign/reference/optimize.md +0 -258
  1059. package/packages/@monomind/cli/.claude/skills/monodesign/reference/overdrive.md +0 -130
  1060. package/packages/@monomind/cli/.claude/skills/monodesign/reference/personas.md +0 -179
  1061. package/packages/@monomind/cli/.claude/skills/monodesign/reference/polish.md +0 -241
  1062. package/packages/@monomind/cli/.claude/skills/monodesign/reference/pre-delivery-checklist.md +0 -108
  1063. package/packages/@monomind/cli/.claude/skills/monodesign/reference/product.md +0 -60
  1064. package/packages/@monomind/cli/.claude/skills/monodesign/reference/quieter.md +0 -99
  1065. package/packages/@monomind/cli/.claude/skills/monodesign/reference/responsive-design.md +0 -114
  1066. package/packages/@monomind/cli/.claude/skills/monodesign/reference/shape.md +0 -165
  1067. package/packages/@monomind/cli/.claude/skills/monodesign/reference/spatial-design.md +0 -100
  1068. package/packages/@monomind/cli/.claude/skills/monodesign/reference/teach.md +0 -10
  1069. package/packages/@monomind/cli/.claude/skills/monodesign/reference/token-architecture.md +0 -222
  1070. package/packages/@monomind/cli/.claude/skills/monodesign/reference/typeset.md +0 -301
  1071. package/packages/@monomind/cli/.claude/skills/monodesign/reference/typography.md +0 -159
  1072. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ux-research.md +0 -143
  1073. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ux-rules.md +0 -211
  1074. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ux-writing.md +0 -107
  1075. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/command-metadata.json +0 -94
  1076. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/context-signals.mjs +0 -260
  1077. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/context.mjs +0 -1061
  1078. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/critique-storage.mjs +0 -416
  1079. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detect-csp.mjs +0 -198
  1080. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detect.mjs +0 -33
  1081. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/browser/injected/index.mjs +0 -1962
  1082. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/cli/main.mjs +0 -321
  1083. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/design-system.mjs +0 -814
  1084. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/detect-antipatterns-browser.js +0 -5608
  1085. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/detect-antipatterns.mjs +0 -50
  1086. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/browser/detect-url.mjs +0 -259
  1087. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/browser/drivers.mjs +0 -258
  1088. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/regex/detect-text.mjs +0 -636
  1089. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/static-html/css-cascade.mjs +0 -1015
  1090. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/static-html/detect-html.mjs +0 -253
  1091. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/visual/screenshot-contrast.mjs +0 -198
  1092. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/findings.mjs +0 -12
  1093. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/fix/css-regions.mjs +0 -181
  1094. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/fix/fixers.mjs +0 -373
  1095. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/fix/index.mjs +0 -426
  1096. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/node/file-system.mjs +0 -198
  1097. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/profile/profiler.mjs +0 -166
  1098. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/registry/antipatterns.mjs +0 -563
  1099. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/rules/checks.mjs +0 -3002
  1100. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/color.mjs +0 -124
  1101. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/constants.mjs +0 -101
  1102. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/fonts.mjs +0 -30
  1103. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/inline-ignores.mjs +0 -148
  1104. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/page.mjs +0 -7
  1105. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-admin.mjs +0 -661
  1106. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-before-edit.mjs +0 -516
  1107. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-lib.mjs +0 -1776
  1108. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook.mjs +0 -61
  1109. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/design-parser.mjs +0 -842
  1110. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/is-generated.mjs +0 -69
  1111. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/monodesign-config.mjs +0 -640
  1112. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/monodesign-paths.mjs +0 -129
  1113. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/provider.mjs +0 -4
  1114. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/target-args.mjs +0 -42
  1115. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/browser-script-parts.mjs +0 -50
  1116. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/completion.mjs +0 -19
  1117. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/event-validation.mjs +0 -137
  1118. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/insert-ui.mjs +0 -458
  1119. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-apply.mjs +0 -939
  1120. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-edit-routes.mjs +0 -357
  1121. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-edits-buffer.mjs +0 -152
  1122. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/session-store.mjs +0 -293
  1123. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/svelte-component.mjs +0 -826
  1124. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/sveltekit-adapter.mjs +0 -274
  1125. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/ui-core.mjs +0 -180
  1126. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/vocabulary.mjs +0 -36
  1127. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-accept.mjs +0 -812
  1128. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser-dom.js +0 -146
  1129. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser-session.js +0 -123
  1130. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser.js +0 -11240
  1131. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-commit-manual-edits.mjs +0 -1241
  1132. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-complete.mjs +0 -75
  1133. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-copy-edit-agent.mjs +0 -683
  1134. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-discard-manual-edits.mjs +0 -51
  1135. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-inject.mjs +0 -583
  1136. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-insert.mjs +0 -272
  1137. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-manual-edit-evidence.mjs +0 -363
  1138. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-poll.mjs +0 -384
  1139. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-resume.mjs +0 -94
  1140. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-server.mjs +0 -1174
  1141. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-status.mjs +0 -61
  1142. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-target.mjs +0 -30
  1143. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-wrap.mjs +0 -894
  1144. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live.mjs +0 -297
  1145. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/modern-screenshot.umd.js +0 -14
  1146. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/palette.mjs +0 -633
  1147. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/pin.mjs +0 -221
  1148. package/packages/@monomind/cli/.claude/skills/monodesign/shape.md +0 -71
  1149. package/packages/@monomind/cli/.claude/skills/monodesign/teach.md +0 -18
  1150. package/packages/@monomind/cli/.claude/skills/monodesign/typeset.md +0 -59
  1151. package/packages/@monomind/cli/dist/src/ui/data/known-projects.json +0 -1
  1152. package/packages/@monomind/cli/dist/src/ui/data/mastermind-sessions.json +0 -1
  1153. package/packages/@monomind/cli/dist/src/ui/data/sessions/_index.json +0 -1
@@ -1,1962 +0,0 @@
1
- const IS_BROWSER = typeof window !== 'undefined';
2
-
3
- // ─── Section 7: Browser UI (IS_BROWSER only) ────────────────────────────────
4
-
5
- if (IS_BROWSER) {
6
- // Detect extension mode via the script tag's data attribute or the document element fallback.
7
- // currentScript is reliable for synchronously-executing scripts (which our IIFE is).
8
- const _myScript = document.currentScript;
9
- const EXTENSION_MODE = (_myScript && _myScript.dataset.monodesignExtension === 'true')
10
- || document.documentElement.dataset.monodesignExtension === 'true';
11
-
12
- // Kinpaku gold — pinned to the site's brand token (see
13
- // site/styles/kinpaku-tokens.css --ks-kinpaku). Keep this in sync with
14
- // the picker's C.brand in skill/scripts/live-browser.js and the kit's
15
- // picker section in site/styles/kinpaku-kit.css.
16
- //
17
- // One color across both light and dark host pages. The outline is a
18
- // 2px gesture pointing at an element + a labeled tag — it's a marker,
19
- // not body text, so it doesn't need WCAG AA against the page. The
20
- // label text inside the gold tag is dark (LABEL_INK) which has ~16:1
21
- // against the leaf gold, so reading the rule name is solid in both
22
- // modes. Hover deepens the gold (preserves chroma — never drops it,
23
- // dropping chroma washes the gold into a sand/olive tone).
24
- const BRAND_COLOR = 'oklch(84% 0.19 80.46)';
25
- const BRAND_COLOR_HOVER = 'oklch(74% 0.18 80)';
26
- const LABEL_INK = 'oklch(4% 0.004 95)';
27
- const LABEL_BG = BRAND_COLOR;
28
- const OUTLINE_COLOR = BRAND_COLOR;
29
-
30
- // Inject hover styles via CSS (more reliable than JS event listeners)
31
- const styleEl = document.createElement('style');
32
- styleEl.textContent = `
33
- @keyframes monodesign-reveal {
34
- from { opacity: 0; }
35
- to { opacity: 1; }
36
- }
37
- .monodesign-overlay:not(.monodesign-banner) {
38
- pointer-events: none;
39
- outline: 2px solid ${OUTLINE_COLOR};
40
- border-radius: 4px;
41
- transition: outline-color 0.15s ease;
42
- animation: monodesign-reveal 0.4s cubic-bezier(0.16, 1, 0.3, 1) both;
43
- animation-play-state: paused;
44
- border-top-left-radius: 0;
45
- }
46
- .monodesign-overlay.monodesign-visible {
47
- animation-play-state: running;
48
- }
49
- .monodesign-overlay.monodesign-hover {
50
- outline-color: ${BRAND_COLOR_HOVER};
51
- z-index: 100001 !important;
52
- }
53
- .monodesign-overlay.monodesign-hover .monodesign-label {
54
- background: ${BRAND_COLOR_HOVER};
55
- }
56
- .monodesign-overlay.monodesign-spotlight {
57
- z-index: 100002 !important;
58
- }
59
- .monodesign-overlay.monodesign-spotlight-dimmed {
60
- opacity: 0.15 !important;
61
- animation: none !important;
62
- filter: blur(3px);
63
- }
64
- .monodesign-spotlight-backdrop {
65
- position: fixed;
66
- top: 0; left: 0; right: 0; bottom: 0;
67
- backdrop-filter: blur(3px) brightness(0.6);
68
- -webkit-backdrop-filter: blur(3px) brightness(0.6);
69
- pointer-events: none;
70
- z-index: 99998;
71
- opacity: 0;
72
- outline: none !important;
73
- animation: none !important;
74
- }
75
- .monodesign-spotlight-backdrop.monodesign-visible {
76
- opacity: 1;
77
- }
78
- .monodesign-hidden .monodesign-overlay${EXTENSION_MODE ? '' : ':not(.monodesign-banner)'} {
79
- display: none !important;
80
- }
81
- `;
82
- (document.head || document.documentElement).appendChild(styleEl);
83
-
84
- // Spotlight backdrop element (created lazily on first use)
85
- let spotlightBackdrop = null;
86
- let spotlightTarget = null;
87
-
88
- function getSpotlightBackdrop() {
89
- if (!spotlightBackdrop) {
90
- spotlightBackdrop = document.createElement('div');
91
- spotlightBackdrop.className = 'monodesign-spotlight-backdrop';
92
- document.body.appendChild(spotlightBackdrop);
93
- }
94
- return spotlightBackdrop;
95
- }
96
-
97
- function updateSpotlightClipPath() {
98
- if (!spotlightBackdrop || !spotlightTarget) return;
99
- const r = spotlightTarget.getBoundingClientRect();
100
- // Match the overlay's outer edge: element rect + 4px (2px overlay offset + 2px outline width)
101
- const inset = 4;
102
- const radius = 6; // outline border-radius (4) + outline width (2)
103
- const x1 = r.left - inset;
104
- const y1 = r.top - inset;
105
- const x2 = r.right + inset;
106
- const y2 = r.bottom + inset;
107
- const vw = window.innerWidth;
108
- const vh = window.innerHeight;
109
- // Outer rect + rounded inner rect (evenodd creates a hole)
110
- const path = `M0 0H${vw}V${vh}H0Z M${x1 + radius} ${y1}H${x2 - radius}A${radius} ${radius} 0 0 1 ${x2} ${y1 + radius}V${y2 - radius}A${radius} ${radius} 0 0 1 ${x2 - radius} ${y2}H${x1 + radius}A${radius} ${radius} 0 0 1 ${x1} ${y2 - radius}V${y1 + radius}A${radius} ${radius} 0 0 1 ${x1 + radius} ${y1}Z`;
111
- spotlightBackdrop.style.clipPath = `path(evenodd, "${path}")`;
112
- }
113
-
114
- function showSpotlight(target) {
115
- if (!target || !target.getBoundingClientRect) return;
116
- // Respect the spotlightBlur setting: if disabled, don't show the backdrop
117
- if (window.__MONODESIGN_CONFIG__?.spotlightBlur === false) {
118
- spotlightTarget = target;
119
- return;
120
- }
121
- spotlightTarget = target;
122
- const bd = getSpotlightBackdrop();
123
- updateSpotlightClipPath();
124
- bd.classList.add('monodesign-visible');
125
- }
126
-
127
- function hideSpotlight() {
128
- spotlightTarget = null;
129
- if (spotlightBackdrop) spotlightBackdrop.classList.remove('monodesign-visible');
130
- }
131
-
132
- function isInViewport(el) {
133
- const r = el.getBoundingClientRect();
134
- return r.top >= 0 && r.left >= 0 && r.bottom <= window.innerHeight && r.right <= window.innerWidth;
135
- }
136
-
137
- // Reposition spotlight on scroll/resize
138
- window.addEventListener('scroll', () => {
139
- if (spotlightTarget) updateSpotlightClipPath();
140
- }, { passive: true });
141
- window.addEventListener('resize', () => {
142
- if (spotlightTarget) updateSpotlightClipPath();
143
- });
144
-
145
- const overlays = [];
146
- const TYPE_LABELS = {};
147
- const RULE_CATEGORY = {};
148
- for (const ap of ANTIPATTERNS) {
149
- TYPE_LABELS[ap.id] = ap.name.toLowerCase();
150
- RULE_CATEGORY[ap.id] = ap.category || 'quality';
151
- }
152
-
153
- function isInFixedContext(el) {
154
- let p = el;
155
- while (p && p !== document.body) {
156
- if (getComputedStyle(p).position === 'fixed') return true;
157
- p = p.parentElement;
158
- }
159
- return false;
160
- }
161
-
162
- function positionOverlay(overlay) {
163
- const el = overlay._targetEl;
164
- if (!el) return;
165
- const rect = el.getBoundingClientRect();
166
- if (overlay._isFixed) {
167
- // Viewport-relative coords for fixed targets
168
- overlay.style.top = `${rect.top - 2}px`;
169
- overlay.style.left = `${rect.left - 2}px`;
170
- } else {
171
- // Document-relative coords for normal targets
172
- overlay.style.top = `${rect.top + scrollY - 2}px`;
173
- overlay.style.left = `${rect.left + scrollX - 2}px`;
174
- }
175
- overlay.style.width = `${rect.width + 4}px`;
176
- overlay.style.height = `${rect.height + 4}px`;
177
- }
178
-
179
- function repositionOverlays() {
180
- for (const o of overlays) {
181
- if (!o._targetEl || o.classList.contains('monodesign-banner')) continue;
182
- // Skip overlays whose target is currently hidden (display: none on the overlay)
183
- if (o.style.display === 'none') continue;
184
- positionOverlay(o);
185
- }
186
- }
187
-
188
- let resizeRAF;
189
- const onResize = () => {
190
- cancelAnimationFrame(resizeRAF);
191
- resizeRAF = requestAnimationFrame(repositionOverlays);
192
- };
193
- window.addEventListener('resize', onResize);
194
- // Reposition on scroll too -- catches sticky/parallax shifts
195
- window.addEventListener('scroll', onResize, { passive: true });
196
- // Reposition when body resizes (lazy-loaded images, dynamic content, fonts loading)
197
- if (typeof ResizeObserver !== 'undefined') {
198
- const bodyResizeObserver = new ResizeObserver(onResize);
199
- bodyResizeObserver.observe(document.body);
200
- }
201
-
202
- // Track target element visibility via IntersectionObserver.
203
- // Uses a huge rootMargin so all *rendered* elements count as intersecting,
204
- // while display:none / closed <details> / hidden modals etc. do not.
205
- // This is event-driven -- no polling needed.
206
- let overlayIndex = 0;
207
- const visibilityObserver = new IntersectionObserver((entries) => {
208
- for (const entry of entries) {
209
- const overlay = entry.target._monodesignOverlay;
210
- if (!overlay) continue;
211
- if (entry.isIntersecting) {
212
- overlay.style.display = '';
213
- positionOverlay(overlay);
214
- if (!overlay._revealed) {
215
- overlay._revealed = true;
216
- if (firstScanDone) {
217
- // Subsequent reveals (re-scans, scroll-into-view): instant, no animation
218
- overlay.style.animation = 'none';
219
- } else {
220
- // Initial scan: staggered cascade reveal
221
- overlay.style.animationDelay = `${Math.min((overlay._staggerIndex || 0) * 60, 600)}ms`;
222
- }
223
- requestAnimationFrame(() => {
224
- overlay.classList.add('monodesign-visible');
225
- if (overlay._checkLabel) overlay._checkLabel();
226
- });
227
- }
228
- } else {
229
- overlay.style.display = 'none';
230
- }
231
- }
232
- }, { rootMargin: '99999px' });
233
-
234
- function detachOverlay(overlay) {
235
- if (!overlay) return;
236
- if (typeof overlay._cleanup === 'function') {
237
- try { overlay._cleanup(); } catch { /* best effort overlay teardown */ }
238
- }
239
- if (overlay._targetEl && overlay._targetEl._monodesignOverlay === overlay) {
240
- visibilityObserver.unobserve(overlay._targetEl);
241
- delete overlay._targetEl._monodesignOverlay;
242
- }
243
- const idx = overlays.indexOf(overlay);
244
- if (idx >= 0) overlays.splice(idx, 1);
245
- overlay.remove();
246
- }
247
-
248
- // Reposition overlays after CSS transitions end (e.g. reveal animations).
249
- // Listens at document level so it catches transitions on ancestor elements
250
- // (the transform may be on a parent, not the flagged element itself).
251
- document.addEventListener('transitionend', (e) => {
252
- if (e.propertyName !== 'transform') return;
253
- for (const o of overlays) {
254
- if (!o._targetEl || o.classList.contains('monodesign-banner') || o.style.display === 'none') continue;
255
- if (e.target === o._targetEl || e.target.contains(o._targetEl)) {
256
- positionOverlay(o);
257
- }
258
- }
259
- });
260
-
261
- const highlight = function(el, findings) {
262
- if (el._monodesignOverlay) detachOverlay(el._monodesignOverlay);
263
- const hasSlop = findings.some(f => RULE_CATEGORY[f.type || f.id] === 'slop');
264
-
265
- const fixed = isInFixedContext(el);
266
- const rect = el.getBoundingClientRect();
267
- const outline = document.createElement('div');
268
- outline.className = 'monodesign-overlay';
269
- outline._targetEl = el;
270
- outline._isFixed = fixed;
271
- Object.assign(outline.style, {
272
- position: fixed ? 'fixed' : 'absolute',
273
- top: fixed ? `${rect.top - 2}px` : `${rect.top + scrollY - 2}px`,
274
- left: fixed ? `${rect.left - 2}px` : `${rect.left + scrollX - 2}px`,
275
- width: `${rect.width + 4}px`, height: `${rect.height + 4}px`,
276
- zIndex: '99999', boxSizing: 'border-box',
277
- });
278
-
279
- // Build per-finding label entries: ✦ prefix for slop
280
- const entries = findings.map(f => {
281
- const name = TYPE_LABELS[f.type || f.id] || f.type || f.id;
282
- const prefix = RULE_CATEGORY[f.type || f.id] === 'slop' ? '\u2726 ' : '';
283
- return { name: prefix + name, detail: f.detail || f.snippet };
284
- });
285
- const allText = entries.map(e => e.name).join(', ');
286
-
287
- const label = document.createElement('div');
288
- label.className = 'monodesign-label';
289
- Object.assign(label.style, {
290
- position: 'absolute', bottom: '100%', left: '-2px',
291
- display: 'flex', alignItems: 'center',
292
- whiteSpace: 'nowrap',
293
- fontSize: '11px', fontWeight: '600', letterSpacing: '0.02em',
294
- color: LABEL_INK, lineHeight: '14px',
295
- background: LABEL_BG,
296
- fontFamily: 'system-ui, sans-serif',
297
- borderRadius: '4px 4px 0 0',
298
- });
299
-
300
- const textSpan = document.createElement('span');
301
- textSpan.style.padding = '3px 8px';
302
- textSpan.textContent = allText;
303
- label.appendChild(textSpan);
304
-
305
- // State for cycling mode
306
- let cycleMode = false;
307
- let cycleIndex = 0;
308
- let isHovered = false;
309
- let prevBtn, nextBtn;
310
-
311
- function updateCycleText() {
312
- const e = entries[cycleIndex];
313
- textSpan.textContent = isHovered ? e.detail : e.name;
314
- }
315
-
316
- function enableCycleMode() {
317
- if (cycleMode || entries.length < 2) return;
318
- cycleMode = true;
319
-
320
- const btnStyle = {
321
- background: 'none', border: 'none', color: 'rgba(255,255,255,0.7)',
322
- fontSize: '11px', cursor: 'pointer', padding: '3px 4px',
323
- fontFamily: 'system-ui, sans-serif', lineHeight: '14px',
324
- pointerEvents: 'auto',
325
- };
326
-
327
- const navGroup = document.createElement('span');
328
- Object.assign(navGroup.style, {
329
- display: 'inline-flex', alignItems: 'center', flexShrink: '0',
330
- });
331
-
332
- prevBtn = document.createElement('button');
333
- prevBtn.textContent = '\u2039';
334
- Object.assign(prevBtn.style, btnStyle);
335
- prevBtn.style.paddingLeft = '6px';
336
- prevBtn.addEventListener('click', (e) => {
337
- e.stopPropagation();
338
- cycleIndex = (cycleIndex - 1 + entries.length) % entries.length;
339
- updateCycleText();
340
- });
341
-
342
- nextBtn = document.createElement('button');
343
- nextBtn.textContent = '\u203A';
344
- Object.assign(nextBtn.style, btnStyle);
345
- nextBtn.style.paddingRight = '2px';
346
- nextBtn.addEventListener('click', (e) => {
347
- e.stopPropagation();
348
- cycleIndex = (cycleIndex + 1) % entries.length;
349
- updateCycleText();
350
- });
351
-
352
- navGroup.appendChild(prevBtn);
353
- navGroup.appendChild(nextBtn);
354
- label.insertBefore(navGroup, textSpan);
355
- textSpan.style.padding = '3px 8px 3px 4px';
356
- updateCycleText();
357
- }
358
-
359
- outline.appendChild(label);
360
-
361
- // Start hidden; the IntersectionObserver will show it once the target is rendered
362
- outline.style.display = 'none';
363
- outline._staggerIndex = overlayIndex++;
364
- el._monodesignOverlay = outline;
365
- visibilityObserver.observe(el);
366
-
367
- // After first paint, check label width vs outline
368
- outline._checkLabel = () => {
369
- if (entries.length > 1 && label.offsetWidth > outline.offsetWidth) {
370
- enableCycleMode();
371
- }
372
- };
373
-
374
- // Hover: show detail text, darken
375
- const onMouseEnter = () => {
376
- isHovered = true;
377
- outline.classList.add('monodesign-hover');
378
- outline.style.outlineColor = BRAND_COLOR_HOVER;
379
- label.style.background = BRAND_COLOR_HOVER;
380
- if (cycleMode) {
381
- updateCycleText();
382
- } else {
383
- textSpan.textContent = entries.map(e => e.detail).join(' | ');
384
- }
385
- };
386
- const onMouseLeave = () => {
387
- isHovered = false;
388
- outline.classList.remove('monodesign-hover');
389
- outline.style.outlineColor = '';
390
- label.style.background = LABEL_BG;
391
- if (cycleMode) {
392
- updateCycleText();
393
- } else {
394
- textSpan.textContent = allText;
395
- }
396
- };
397
- el.addEventListener('mouseenter', onMouseEnter);
398
- el.addEventListener('mouseleave', onMouseLeave);
399
- outline._cleanup = () => {
400
- el.removeEventListener('mouseenter', onMouseEnter);
401
- el.removeEventListener('mouseleave', onMouseLeave);
402
- };
403
-
404
- document.body.appendChild(outline);
405
- overlays.push(outline);
406
- };
407
-
408
- const showPageBanner = function(findings) {
409
- if (!findings.length) return;
410
- const banner = document.createElement('div');
411
- banner.className = 'monodesign-overlay monodesign-banner';
412
- Object.assign(banner.style, {
413
- position: 'fixed', top: '0', left: '0', right: '0', zIndex: '100000',
414
- background: LABEL_BG, color: LABEL_INK,
415
- fontFamily: 'system-ui, sans-serif', fontSize: '13px',
416
- display: 'flex', alignItems: 'center', pointerEvents: 'auto',
417
- height: '36px', overflow: 'hidden', maxWidth: '100vw',
418
- transform: 'translateY(-100%)',
419
- transition: 'transform 0.4s cubic-bezier(0.16, 1, 0.3, 1)',
420
- });
421
- requestAnimationFrame(() => requestAnimationFrame(() => {
422
- banner.style.transform = 'translateY(0)';
423
- }));
424
-
425
- // Scrollable findings area
426
- const scrollArea = document.createElement('div');
427
- Object.assign(scrollArea.style, {
428
- flex: '1', minWidth: '0', overflowX: 'auto', overflowY: 'hidden',
429
- display: 'flex', gap: '8px', alignItems: 'center',
430
- padding: '0 12px', scrollSnapType: 'x mandatory',
431
- scrollbarWidth: 'none',
432
- });
433
- for (const f of findings) {
434
- const prefix = RULE_CATEGORY[f.type] === 'slop' ? '\u2726 ' : '';
435
- const tag = document.createElement('span');
436
- tag.textContent = `${prefix}${TYPE_LABELS[f.type] || f.type}: ${f.detail}`;
437
- Object.assign(tag.style, {
438
- background: 'rgba(255,255,255,0.15)', padding: '2px 8px',
439
- borderRadius: '3px', fontSize: '12px', fontFamily: 'ui-monospace, monospace',
440
- whiteSpace: 'nowrap', flexShrink: '0', scrollSnapAlign: 'start',
441
- });
442
- scrollArea.appendChild(tag);
443
- }
444
- banner.appendChild(scrollArea);
445
-
446
- // Controls area (only in standalone mode, not extension)
447
- if (!EXTENSION_MODE) {
448
- const controls = document.createElement('div');
449
- Object.assign(controls.style, {
450
- display: 'flex', alignItems: 'center', gap: '2px',
451
- padding: '0 8px', flexShrink: '0',
452
- });
453
-
454
- // Toggle visibility button
455
- const toggle = document.createElement('button');
456
- toggle.textContent = '\u25C9'; // circle with dot (visible state)
457
- toggle.title = 'Toggle overlay visibility';
458
- Object.assign(toggle.style, {
459
- background: 'none', border: 'none',
460
- color: 'white', fontSize: '16px', cursor: 'pointer', padding: '0 4px',
461
- opacity: '0.85', transition: 'opacity 0.15s',
462
- });
463
- let overlaysVisible = true;
464
- toggle.addEventListener('click', () => {
465
- overlaysVisible = !overlaysVisible;
466
- document.body.classList.toggle('monodesign-hidden', !overlaysVisible);
467
- toggle.textContent = overlaysVisible ? '\u25C9' : '\u25CB'; // filled vs empty circle
468
- toggle.style.opacity = overlaysVisible ? '0.85' : '0.5';
469
- });
470
- controls.appendChild(toggle);
471
-
472
- // Close button
473
- const close = document.createElement('button');
474
- close.textContent = '\u00d7';
475
- close.title = 'Dismiss banner';
476
- Object.assign(close.style, {
477
- background: 'none', border: 'none',
478
- color: 'white', fontSize: '18px', cursor: 'pointer', padding: '0 4px',
479
- });
480
- close.addEventListener('click', () => banner.remove());
481
- controls.appendChild(close);
482
-
483
- banner.appendChild(controls);
484
- }
485
- document.body.appendChild(banner);
486
- overlays.push(banner);
487
- };
488
-
489
- // Heuristic for skipping CSS-in-JS hashed class names like "css-1a2b3c" or "_2x4hG_".
490
- // These change between builds and produce brittle, ugly selectors.
491
- function isLikelyHashedClass(c) {
492
- if (!c) return true;
493
- if (/^(css|sc|emotion|jsx|module)-[\w-]{4,}$/i.test(c)) return true;
494
- if (/^_[\w-]{5,}$/.test(c)) return true;
495
- if (/^[a-z0-9]{6,}$/i.test(c) && /\d/.test(c)) return true;
496
- return false;
497
- }
498
-
499
- function buildSelectorSegment(el) {
500
- const tag = el.tagName.toLowerCase();
501
- let sel = tag;
502
-
503
- if (el.classList && el.classList.length > 0) {
504
- const classes = [...el.classList]
505
- .filter(c => !c.startsWith('monodesign-') && !isLikelyHashedClass(c))
506
- .slice(0, 2);
507
- if (classes.length > 0) {
508
- sel += '.' + classes.map(c => CSS.escape(c)).join('.');
509
- }
510
- }
511
-
512
- // Disambiguate among siblings only if the parent has multiple matches
513
- const parent = el.parentElement;
514
- if (parent) {
515
- try {
516
- const matching = parent.querySelectorAll(':scope > ' + sel);
517
- if (matching.length > 1) {
518
- const sameType = [...parent.children].filter(c => c.tagName === el.tagName);
519
- const idx = sameType.indexOf(el) + 1;
520
- sel += `:nth-of-type(${idx})`;
521
- }
522
- } catch {
523
- const idx = [...parent.children].indexOf(el) + 1;
524
- sel = `${tag}:nth-child(${idx})`;
525
- }
526
- }
527
- return sel;
528
- }
529
-
530
- function generateSelector(el) {
531
- if (el === document.body) return 'body';
532
- if (el === document.documentElement) return 'html';
533
- if (el.id) return '#' + CSS.escape(el.id);
534
-
535
- const parts = [];
536
- let current = el;
537
- let depth = 0;
538
- const MAX_DEPTH = 10;
539
-
540
- while (current && current !== document.body && current !== document.documentElement && depth < MAX_DEPTH) {
541
- parts.unshift(buildSelectorSegment(current));
542
-
543
- // Anchor on an ancestor's ID and stop walking up
544
- if (current.id) {
545
- parts[0] = '#' + CSS.escape(current.id);
546
- break;
547
- }
548
-
549
- // Stop as soon as the partial selector uniquely identifies the target
550
- const trySelector = parts.join(' > ');
551
- try {
552
- const matches = document.querySelectorAll(trySelector);
553
- if (matches.length === 1 && matches[0] === el) {
554
- return trySelector;
555
- }
556
- } catch { /* invalid selector — keep walking */ }
557
-
558
- current = current.parentElement;
559
- depth++;
560
- }
561
-
562
- return parts.join(' > ');
563
- }
564
-
565
- function getDirectText(el) {
566
- return [...el.childNodes]
567
- .filter(n => n.nodeType === 3)
568
- .map(n => n.textContent || '')
569
- .join('');
570
- }
571
-
572
- function getDirectTextRect(el) {
573
- const rects = [];
574
- for (const node of el.childNodes) {
575
- if (node.nodeType !== 3 || !(node.textContent || '').trim()) continue;
576
- const range = document.createRange();
577
- range.selectNodeContents(node);
578
- for (const rect of range.getClientRects()) {
579
- if (rect.width >= 1 && rect.height >= 1) rects.push(rect);
580
- }
581
- range.detach?.();
582
- }
583
- if (rects.length === 0) return null;
584
- const left = Math.min(...rects.map(r => r.left));
585
- const top = Math.min(...rects.map(r => r.top));
586
- const right = Math.max(...rects.map(r => r.right));
587
- const bottom = Math.max(...rects.map(r => r.bottom));
588
- return {
589
- left,
590
- top,
591
- right,
592
- bottom,
593
- width: right - left,
594
- height: bottom - top,
595
- x: left,
596
- y: top,
597
- };
598
- }
599
-
600
- function collectVisualContrastReasons(el, style) {
601
- const reasons = new Set();
602
- const bgClip = style.webkitBackgroundClip || style.backgroundClip || '';
603
- const ownBgImage = style.backgroundImage || '';
604
- if (bgClip === 'text' && ownBgImage && ownBgImage !== 'none') {
605
- reasons.add('background-clip text');
606
- }
607
- if (style.textShadow && style.textShadow !== 'none') reasons.add('text shadow');
608
-
609
- let current = el;
610
- while (current && current.nodeType === 1) {
611
- const tag = current.tagName?.toLowerCase();
612
- const currentStyle = getComputedStyle(current);
613
- const bgImage = currentStyle.backgroundImage || '';
614
- const isDocumentSurface = tag === 'body' || tag === 'html';
615
-
616
- if (!isDocumentSurface && bgImage && bgImage !== 'none') {
617
- if (/url\s*\(/i.test(bgImage)) reasons.add('image background');
618
- if (/gradient/i.test(bgImage)) reasons.add('gradient background');
619
- }
620
- if (parseFloat(currentStyle.opacity) < 0.99) reasons.add('opacity stack');
621
- if (currentStyle.mixBlendMode && currentStyle.mixBlendMode !== 'normal') reasons.add('blend mode');
622
- if (currentStyle.filter && currentStyle.filter !== 'none') reasons.add('filter');
623
- if (currentStyle.backdropFilter && currentStyle.backdropFilter !== 'none') reasons.add('backdrop filter');
624
-
625
- const solidBg = parseRgb(currentStyle.backgroundColor);
626
- if (solidBg && solidBg.a >= 0.95 && (!bgImage || bgImage === 'none')) break;
627
- current = current.parentElement;
628
- }
629
-
630
- const sampleRect = getDirectTextRect(el) || el.getBoundingClientRect();
631
- if (sampleRect && document.elementsFromPoint) {
632
- const points = [
633
- [sampleRect.left + sampleRect.width / 2, sampleRect.top + sampleRect.height / 2],
634
- [sampleRect.left + Math.min(sampleRect.width - 1, Math.max(1, sampleRect.width * 0.25)), sampleRect.top + sampleRect.height / 2],
635
- [sampleRect.left + Math.min(sampleRect.width - 1, Math.max(1, sampleRect.width * 0.75)), sampleRect.top + sampleRect.height / 2],
636
- ];
637
- for (const [x, y] of points) {
638
- if (x < 0 || y < 0 || x > window.innerWidth || y > window.innerHeight) continue;
639
- const stack = document.elementsFromPoint(x, y);
640
- const selfIndex = stack.findIndex(node => node === el || el.contains(node) || node.contains?.(el));
641
- if (selfIndex < 0) continue;
642
- for (const node of stack.slice(selfIndex + 1)) {
643
- const nodeTag = node.tagName?.toLowerCase();
644
- if (nodeTag === 'img' || nodeTag === 'picture' || nodeTag === 'video' || nodeTag === 'canvas' || nodeTag === 'svg') {
645
- reasons.add(`${nodeTag} underlay`);
646
- break;
647
- }
648
- }
649
- }
650
- }
651
-
652
- return [...reasons];
653
- }
654
-
655
- function collectVisualContrastCandidates(options = {}) {
656
- const maxCandidates = Number.isFinite(options.maxCandidates) ? options.maxCandidates : 12;
657
- const candidates = [];
658
- for (const el of document.querySelectorAll('*')) {
659
- if (candidates.length >= maxCandidates) break;
660
- if (el.closest('.monodesign-overlay, .monodesign-label, .monodesign-banner, .monodesign-tooltip')) continue;
661
- if (el.closest('[id^="monodesign-live-"]')) continue;
662
- if (el === document.body || el === document.documentElement) continue;
663
- if (!isRenderedForBrowserRule(el)) continue;
664
-
665
- const tag = el.tagName.toLowerCase();
666
- const style = getComputedStyle(el);
667
- if (style.display === 'none' || style.visibility === 'hidden') continue;
668
- const directText = getDirectText(el);
669
- const hasDirectText = directText.trim().length > 0;
670
- if (!hasDirectText || isEmojiOnlyText(directText)) continue;
671
-
672
- const bgColor = readOwnBackgroundColor(el, style);
673
- const isStyledButton = (tag === 'a' || tag === 'button')
674
- && bgColor && bgColor.a > 0.5;
675
- if (SAFE_TAGS.has(tag) && !isStyledButton) continue;
676
-
677
- const rect = getDirectTextRect(el) || el.getBoundingClientRect();
678
- if (!rect || rect.width < 4 || rect.height < 4) continue;
679
-
680
- const reasons = collectVisualContrastReasons(el, style);
681
- if (reasons.length === 0) continue;
682
-
683
- const textColor = parseRgb(style.color);
684
- const fontSize = parseFloat(style.fontSize) || 16;
685
- const fontWeight = parseInt(style.fontWeight) || 400;
686
- const isLargeText = fontSize >= WCAG_LARGE_TEXT_PX || (fontSize >= WCAG_LARGE_BOLD_TEXT_PX && fontWeight >= 700);
687
- const threshold = isLargeText ? 3.0 : 4.5;
688
- const clip = {
689
- x: Math.max(0, Math.floor(rect.left + window.scrollX - 2)),
690
- y: Math.max(0, Math.floor(rect.top + window.scrollY - 2)),
691
- width: Math.max(1, Math.ceil(rect.width + 4)),
692
- height: Math.max(1, Math.ceil(rect.height + 4)),
693
- };
694
-
695
- candidates.push({
696
- selector: generateSelector(el),
697
- tagName: tag,
698
- text: directText.trim().replace(/\s+/g, ' ').slice(0, 80),
699
- threshold,
700
- reasons,
701
- clip,
702
- textColor,
703
- preferRenderedForeground: !textColor || textColor.a < 0.99 || reasons.some(reason =>
704
- reason === 'opacity stack' ||
705
- reason === 'blend mode' ||
706
- reason === 'filter' ||
707
- reason === 'backdrop filter' ||
708
- reason === 'background-clip text'
709
- ),
710
- backgroundClipText: reasons.includes('background-clip text'),
711
- });
712
- }
713
- return candidates;
714
- }
715
-
716
- const visualContrastImageCache = new Map();
717
- const visualContrastRasterCache = new WeakMap();
718
-
719
- function clampByte(value) {
720
- return Math.max(0, Math.min(255, Math.round(value)));
721
- }
722
-
723
- function blendRgba(fg, bg) {
724
- if (!fg) return bg || null;
725
- if (!bg || fg.a == null || fg.a >= 0.999) {
726
- return { r: clampByte(fg.r), g: clampByte(fg.g), b: clampByte(fg.b), a: fg.a == null ? 1 : fg.a };
727
- }
728
- const alpha = Math.max(0, Math.min(1, fg.a));
729
- return {
730
- r: clampByte(fg.r * alpha + bg.r * (1 - alpha)),
731
- g: clampByte(fg.g * alpha + bg.g * (1 - alpha)),
732
- b: clampByte(fg.b * alpha + bg.b * (1 - alpha)),
733
- a: 1,
734
- };
735
- }
736
-
737
- function pickWorstContrastColor(textColor, colors) {
738
- const usable = (colors || []).filter(Boolean);
739
- if (!usable.length) return null;
740
- let worst = usable[0];
741
- let worstRatio = contrastRatio(textColor, worst);
742
- for (const color of usable.slice(1)) {
743
- const ratio = contrastRatio(textColor, color);
744
- if (ratio < worstRatio) {
745
- worst = color;
746
- worstRatio = ratio;
747
- }
748
- }
749
- return worst;
750
- }
751
-
752
- function firstCssUrl(value) {
753
- const match = String(value || '').match(/url\((?:"([^"]+)"|'([^']+)'|([^)]*))\)/i);
754
- if (!match) return '';
755
- return (match[1] || match[2] || match[3] || '').trim();
756
- }
757
-
758
- function getLayerValue(value, index = 0) {
759
- return String(value || '').split(',')[index]?.trim() || '';
760
- }
761
-
762
- function parsePositionToken(token, container, painted) {
763
- if (!token || token === 'center') return (container - painted) / 2;
764
- if (token === 'left' || token === 'top') return 0;
765
- if (token === 'right' || token === 'bottom') return container - painted;
766
- if (/%$/.test(token)) {
767
- const pct = parseFloat(token) / 100;
768
- return (container - painted) * pct;
769
- }
770
- if (/px$/.test(token)) return parseFloat(token) || 0;
771
- return (container - painted) / 2;
772
- }
773
-
774
- function parsePositionPair(positionValue) {
775
- const tokens = String(positionValue || '50% 50%').trim().split(/\s+/).filter(Boolean);
776
- const first = tokens[0] || '50%';
777
- if (tokens.length < 2) {
778
- if (first === 'top' || first === 'bottom') return ['50%', first];
779
- return [first, '50%'];
780
- }
781
- return [first, tokens[1] || '50%'];
782
- }
783
-
784
- function resolvePaintedImageRect(containerRect, image, sizeValue, positionValue) {
785
- const intrinsicWidth = image.naturalWidth || image.videoWidth || image.width || 1;
786
- const intrinsicHeight = image.naturalHeight || image.videoHeight || image.height || 1;
787
- let paintedWidth = intrinsicWidth;
788
- let paintedHeight = intrinsicHeight;
789
- const size = String(sizeValue || 'auto').trim();
790
-
791
- if (size === 'cover' || size === 'contain') {
792
- const scale = size === 'cover'
793
- ? Math.max(containerRect.width / intrinsicWidth, containerRect.height / intrinsicHeight)
794
- : Math.min(containerRect.width / intrinsicWidth, containerRect.height / intrinsicHeight);
795
- paintedWidth = intrinsicWidth * scale;
796
- paintedHeight = intrinsicHeight * scale;
797
- } else if (size && size !== 'auto') {
798
- const parts = size.split(/\s+/);
799
- const widthToken = parts[0];
800
- const heightToken = parts[1] || 'auto';
801
- if (/%$/.test(widthToken)) paintedWidth = containerRect.width * (parseFloat(widthToken) / 100);
802
- else if (/px$/.test(widthToken)) paintedWidth = parseFloat(widthToken) || paintedWidth;
803
- if (heightToken === 'auto') paintedHeight = paintedWidth * (intrinsicHeight / intrinsicWidth);
804
- else if (/%$/.test(heightToken)) paintedHeight = containerRect.height * (parseFloat(heightToken) / 100);
805
- else if (/px$/.test(heightToken)) paintedHeight = parseFloat(heightToken) || paintedHeight;
806
- }
807
-
808
- const [xToken, yToken] = parsePositionPair(positionValue);
809
- const positionX = parsePositionToken(xToken, containerRect.width, paintedWidth);
810
- const positionY = parsePositionToken(yToken, containerRect.height, paintedHeight);
811
- return {
812
- left: containerRect.left + positionX,
813
- top: containerRect.top + positionY,
814
- width: paintedWidth,
815
- height: paintedHeight,
816
- intrinsicWidth,
817
- intrinsicHeight,
818
- };
819
- }
820
-
821
- function parseObjectPosition(positionValue) {
822
- return parsePositionPair(positionValue);
823
- }
824
-
825
- function resolveObjectImageRect(containerRect, image, style) {
826
- const intrinsicWidth = image.naturalWidth || image.videoWidth || image.width || 1;
827
- const intrinsicHeight = image.naturalHeight || image.videoHeight || image.height || 1;
828
- const fit = style.objectFit || 'fill';
829
- let paintedWidth = containerRect.width;
830
- let paintedHeight = containerRect.height;
831
- if (fit === 'contain' || fit === 'cover') {
832
- const scale = fit === 'cover'
833
- ? Math.max(containerRect.width / intrinsicWidth, containerRect.height / intrinsicHeight)
834
- : Math.min(containerRect.width / intrinsicWidth, containerRect.height / intrinsicHeight);
835
- paintedWidth = intrinsicWidth * scale;
836
- paintedHeight = intrinsicHeight * scale;
837
- } else if (fit === 'none') {
838
- paintedWidth = intrinsicWidth;
839
- paintedHeight = intrinsicHeight;
840
- } else if (fit === 'scale-down') {
841
- const containScale = Math.min(containerRect.width / intrinsicWidth, containerRect.height / intrinsicHeight, 1);
842
- paintedWidth = intrinsicWidth * containScale;
843
- paintedHeight = intrinsicHeight * containScale;
844
- }
845
- const [xToken, yToken] = parseObjectPosition(style.objectPosition);
846
- return {
847
- left: containerRect.left + parsePositionToken(xToken, containerRect.width, paintedWidth),
848
- top: containerRect.top + parsePositionToken(yToken, containerRect.height, paintedHeight),
849
- width: paintedWidth,
850
- height: paintedHeight,
851
- intrinsicWidth,
852
- intrinsicHeight,
853
- };
854
- }
855
-
856
- function pointToImageSource(point, paintedRect) {
857
- if (
858
- point.x < paintedRect.left ||
859
- point.y < paintedRect.top ||
860
- point.x > paintedRect.left + paintedRect.width ||
861
- point.y > paintedRect.top + paintedRect.height
862
- ) {
863
- return null;
864
- }
865
- return {
866
- x: Math.max(0, Math.min(paintedRect.intrinsicWidth - 1, ((point.x - paintedRect.left) / paintedRect.width) * paintedRect.intrinsicWidth)),
867
- y: Math.max(0, Math.min(paintedRect.intrinsicHeight - 1, ((point.y - paintedRect.top) / paintedRect.height) * paintedRect.intrinsicHeight)),
868
- };
869
- }
870
-
871
- async function loadVisualContrastImage(src) {
872
- if (!src) return null;
873
- if (visualContrastImageCache.has(src)) return visualContrastImageCache.get(src);
874
- const promise = new Promise(resolve => {
875
- const img = new Image();
876
- let settled = false;
877
- const finish = value => {
878
- if (settled) return;
879
- settled = true;
880
- clearTimeout(timer);
881
- resolve(value);
882
- };
883
- const timer = setTimeout(() => finish(null), 800);
884
- try {
885
- const absolute = new URL(src, location.href);
886
- if (absolute.origin !== location.origin && absolute.protocol !== 'data:' && absolute.protocol !== 'blob:') {
887
- img.crossOrigin = 'anonymous';
888
- }
889
- } catch {
890
- // Let the browser resolve unusual URLs itself.
891
- }
892
- img.onload = () => finish(img);
893
- img.onerror = () => finish(null);
894
- img.src = src;
895
- });
896
- visualContrastImageCache.set(src, promise);
897
- return promise;
898
- }
899
-
900
- function sampleDrawablePixel(drawable, sourcePoint) {
901
- if (visualContrastRasterCache.has(drawable)) {
902
- const cached = visualContrastRasterCache.get(drawable);
903
- if (!cached || !cached.ctx) return { status: 'unresolved', reason: cached?.reason || 'image sample failed' };
904
- try {
905
- const x = Math.max(0, Math.min(cached.width - 1, Math.floor(sourcePoint.x * cached.scaleX)));
906
- const y = Math.max(0, Math.min(cached.height - 1, Math.floor(sourcePoint.y * cached.scaleY)));
907
- const data = cached.ctx.getImageData(x, y, 1, 1).data;
908
- return {
909
- status: 'sampled',
910
- color: { r: data[0], g: data[1], b: data[2], a: data[3] / 255 },
911
- };
912
- } catch (err) {
913
- return {
914
- status: 'unresolved',
915
- reason: /taint|cross-origin|Security/i.test(err?.message || '') ? 'tainted image' : 'image sample failed',
916
- };
917
- }
918
- }
919
-
920
- const canvas = document.createElement('canvas');
921
- const intrinsicWidth = drawable.naturalWidth || drawable.videoWidth || drawable.width || 1;
922
- const intrinsicHeight = drawable.naturalHeight || drawable.videoHeight || drawable.height || 1;
923
- const maxRasterSide = 640;
924
- const scale = Math.min(1, maxRasterSide / Math.max(intrinsicWidth, intrinsicHeight));
925
- canvas.width = Math.max(1, Math.round(intrinsicWidth * scale));
926
- canvas.height = Math.max(1, Math.round(intrinsicHeight * scale));
927
- const ctx = canvas.getContext('2d', { willReadFrequently: true });
928
- if (!ctx) return { status: 'unresolved', reason: 'canvas unavailable' };
929
- try {
930
- ctx.drawImage(drawable, 0, 0, canvas.width, canvas.height);
931
- const cached = {
932
- ctx,
933
- width: canvas.width,
934
- height: canvas.height,
935
- scaleX: canvas.width / intrinsicWidth,
936
- scaleY: canvas.height / intrinsicHeight,
937
- };
938
- visualContrastRasterCache.set(drawable, cached);
939
- const x = Math.max(0, Math.min(cached.width - 1, Math.floor(sourcePoint.x * cached.scaleX)));
940
- const y = Math.max(0, Math.min(cached.height - 1, Math.floor(sourcePoint.y * cached.scaleY)));
941
- const data = ctx.getImageData(x, y, 1, 1).data;
942
- return {
943
- status: 'sampled',
944
- color: { r: data[0], g: data[1], b: data[2], a: data[3] / 255 },
945
- };
946
- } catch (err) {
947
- const reason = /taint|cross-origin|Security/i.test(err?.message || '') ? 'tainted image' : 'image sample failed';
948
- visualContrastRasterCache.set(drawable, { ctx: null, reason });
949
- return {
950
- status: 'unresolved',
951
- reason,
952
- };
953
- }
954
- }
955
-
956
- async function sampleCssBackground(el, style, point, textColor) {
957
- const rect = el.getBoundingClientRect();
958
- const bgImage = style.backgroundImage || '';
959
- if (bgImage && bgImage !== 'none') {
960
- if (/gradient/i.test(bgImage)) {
961
- const color = pickWorstContrastColor(textColor, parseGradientColors(bgImage));
962
- if (color) return { status: 'sampled', color, method: 'analytic-gradient' };
963
- }
964
- if (/url\s*\(/i.test(bgImage)) {
965
- const img = await loadVisualContrastImage(firstCssUrl(bgImage));
966
- if (!img) return { status: 'unresolved', reason: 'image unavailable' };
967
- const paintedRect = resolvePaintedImageRect(
968
- rect,
969
- img,
970
- getLayerValue(style.backgroundSize) || 'auto',
971
- getLayerValue(style.backgroundPosition) || '50% 50%',
972
- );
973
- const sourcePoint = pointToImageSource(point, paintedRect);
974
- if (!sourcePoint) return { status: 'unresolved', reason: 'point outside background image' };
975
- const sample = sampleDrawablePixel(img, sourcePoint);
976
- if (sample.status === 'sampled') return { ...sample, method: 'canvas-background-image' };
977
- return sample;
978
- }
979
- }
980
- const bg = parseRgb(style.backgroundColor);
981
- if (bg && bg.a > 0.05) return { status: 'sampled', color: bg, method: 'solid-background' };
982
- return { status: 'unresolved', reason: 'no readable background' };
983
- }
984
-
985
- async function sampleImageElement(img, point) {
986
- const rect = img.getBoundingClientRect();
987
- const style = getComputedStyle(img);
988
- const paintedRect = resolveObjectImageRect(rect, img, style);
989
- const sourcePoint = pointToImageSource(point, paintedRect);
990
- if (!sourcePoint) return { status: 'unresolved', reason: 'point outside image' };
991
- const sample = sampleDrawablePixel(img, sourcePoint);
992
- if (sample.status === 'sampled') return { ...sample, method: 'canvas-img-underlay' };
993
-
994
- if (img.currentSrc || img.src) {
995
- const loaded = await loadVisualContrastImage(img.currentSrc || img.src);
996
- if (loaded) {
997
- const loadedRect = { ...paintedRect, intrinsicWidth: loaded.naturalWidth || loaded.width || paintedRect.intrinsicWidth, intrinsicHeight: loaded.naturalHeight || loaded.height || paintedRect.intrinsicHeight };
998
- const loadedPoint = pointToImageSource(point, loadedRect);
999
- if (loadedPoint) {
1000
- const loadedSample = sampleDrawablePixel(loaded, loadedPoint);
1001
- if (loadedSample.status === 'sampled') return { ...loadedSample, method: 'canvas-img-underlay' };
1002
- }
1003
- }
1004
- }
1005
- return sample;
1006
- }
1007
-
1008
- function textSamplePoints(rect) {
1009
- const insetX = Math.min(12, Math.max(1, rect.width * 0.12));
1010
- const insetY = Math.min(8, Math.max(1, rect.height * 0.22));
1011
- const xs = rect.width < 28
1012
- ? [rect.left + rect.width / 2]
1013
- : [rect.left + insetX, rect.left + rect.width / 2, rect.right - insetX];
1014
- const ys = rect.height < 22
1015
- ? [rect.top + rect.height / 2]
1016
- : [rect.top + insetY, rect.top + rect.height / 2, rect.bottom - insetY];
1017
- const points = [];
1018
- for (const y of ys) {
1019
- for (const x of xs) {
1020
- if (x >= 0 && y >= 0 && x <= window.innerWidth && y <= window.innerHeight) points.push({ x, y });
1021
- }
1022
- }
1023
- return points;
1024
- }
1025
-
1026
- async function sampleVisualBackgroundAtPoint(el, point, textColor, depth = 0) {
1027
- if (depth > 8) {
1028
- return { status: 'unresolved', reason: 'background stack too deep' };
1029
- }
1030
- const stack = typeof document.elementsFromPoint === 'function'
1031
- ? document.elementsFromPoint(point.x, point.y)
1032
- : [];
1033
- const selfIndex = stack.findIndex(node => node === el || el.contains(node));
1034
- const nodes = selfIndex >= 0 ? stack.slice(selfIndex) : [el, ...stack];
1035
- const unresolved = [];
1036
-
1037
- for (const node of nodes) {
1038
- if (!node || node.nodeType !== 1) continue;
1039
- if (node.closest?.('.monodesign-overlay, .monodesign-label, .monodesign-banner, .monodesign-tooltip')) continue;
1040
- const tag = node.tagName?.toLowerCase();
1041
- if (tag === 'img') {
1042
- const sample = await sampleImageElement(node, point);
1043
- if (sample.status === 'sampled') return sample;
1044
- unresolved.push(sample.reason);
1045
- continue;
1046
- }
1047
- if (tag === 'canvas' || tag === 'video') {
1048
- const rect = node.getBoundingClientRect();
1049
- const sourcePoint = pointToImageSource(point, {
1050
- left: rect.left,
1051
- top: rect.top,
1052
- width: rect.width,
1053
- height: rect.height,
1054
- intrinsicWidth: node.width || node.videoWidth || rect.width,
1055
- intrinsicHeight: node.height || node.videoHeight || rect.height,
1056
- });
1057
- if (sourcePoint) {
1058
- const sample = sampleDrawablePixel(node, sourcePoint);
1059
- if (sample.status === 'sampled') return { ...sample, method: `canvas-${tag}-underlay` };
1060
- unresolved.push(sample.reason);
1061
- }
1062
- continue;
1063
- }
1064
- const style = getComputedStyle(node);
1065
- const sample = await sampleCssBackground(node, style, point, textColor);
1066
- if (sample.status === 'sampled') {
1067
- if (!sample.color || sample.color.a == null || sample.color.a >= 0.95) return sample;
1068
- const under = await sampleVisualBackgroundAtPoint(node.parentElement || document.body, point, textColor, depth + 1);
1069
- if (under.status === 'sampled') {
1070
- return {
1071
- status: 'sampled',
1072
- color: blendRgba(sample.color, under.color),
1073
- method: `${sample.method}+alpha`,
1074
- };
1075
- }
1076
- return sample;
1077
- }
1078
- unresolved.push(sample.reason);
1079
- }
1080
-
1081
- return {
1082
- status: 'unresolved',
1083
- reason: [...new Set(unresolved.filter(Boolean))].slice(0, 3).join(', ') || 'no readable visual background',
1084
- };
1085
- }
1086
-
1087
- async function analyzeVisualContrastCandidate(candidate) {
1088
- let el;
1089
- try {
1090
- el = document.querySelector(candidate.selector);
1091
- } catch {
1092
- return { ...candidate, status: 'unresolved', confidence: 'none', reason: 'stale selector' };
1093
- }
1094
- if (!el) return { ...candidate, status: 'unresolved', confidence: 'none', reason: 'missing element' };
1095
- if (!isRenderedForBrowserRule(el)) return { ...candidate, status: 'unresolved', confidence: 'none', reason: 'hidden element' };
1096
-
1097
- const blockingReason = (candidate.reasons || []).find(reason =>
1098
- reason === 'background-clip text' ||
1099
- reason === 'blend mode' ||
1100
- reason === 'filter' ||
1101
- reason === 'backdrop filter' ||
1102
- reason === 'opacity stack' ||
1103
- reason === 'text shadow'
1104
- );
1105
- if (blockingReason) {
1106
- return { ...candidate, status: 'unresolved', confidence: 'none', reason: `${blockingReason} needs screenshot pixels` };
1107
- }
1108
-
1109
- const style = getComputedStyle(el);
1110
- const textColor = parseRgb(style.color) || candidate.textColor;
1111
- if (!textColor) return { ...candidate, status: 'unresolved', confidence: 'none', reason: 'unreadable text color' };
1112
-
1113
- const rect = getDirectTextRect(el) || el.getBoundingClientRect();
1114
- if (!rect || rect.width < 4 || rect.height < 4) {
1115
- return { ...candidate, status: 'unresolved', confidence: 'none', reason: 'missing text rect' };
1116
- }
1117
-
1118
- const points = textSamplePoints(rect);
1119
- if (points.length === 0) {
1120
- return { ...candidate, status: 'unresolved', confidence: 'none', reason: 'text outside viewport' };
1121
- }
1122
-
1123
- const ratios = [];
1124
- const methods = new Set();
1125
- const unresolved = [];
1126
- for (const point of points) {
1127
- const sample = await sampleVisualBackgroundAtPoint(el, point, textColor);
1128
- if (sample.status !== 'sampled' || !sample.color) {
1129
- unresolved.push(sample.reason);
1130
- continue;
1131
- }
1132
- const fg = blendRgba(textColor, sample.color);
1133
- ratios.push(contrastRatio(fg, sample.color));
1134
- if (sample.method) methods.add(sample.method);
1135
- }
1136
-
1137
- if (ratios.length < Math.min(3, points.length)) {
1138
- return {
1139
- ...candidate,
1140
- status: 'unresolved',
1141
- confidence: 'none',
1142
- samples: ratios.length,
1143
- reason: [...new Set(unresolved.filter(Boolean))].slice(0, 3).join(', ') || 'not enough readable samples',
1144
- };
1145
- }
1146
-
1147
- ratios.sort((a, b) => a - b);
1148
- const pick = pct => ratios[Math.min(ratios.length - 1, Math.max(0, Math.floor((pct / 100) * ratios.length)))];
1149
- const measuredRatio = pick(10);
1150
- const medianRatio = pick(50);
1151
- const status = measuredRatio < candidate.threshold ? 'fail' : 'pass';
1152
- const method = [...methods].sort().join(', ') || 'browser-visual';
1153
- const textLabel = candidate.text ? ` "${candidate.text}"` : '';
1154
- const detail = `browser contrast ${measuredRatio.toFixed(1)}:1 median ${medianRatio.toFixed(1)}:1 (need ${candidate.threshold}:1) via ${method}${textLabel}`;
1155
- return {
1156
- ...candidate,
1157
- status,
1158
- confidence: method.includes('canvas-') ? 'high' : 'medium',
1159
- method,
1160
- ratio: measuredRatio,
1161
- medianRatio,
1162
- samples: ratios.length,
1163
- finding: status === 'fail' ? { id: 'low-contrast', snippet: detail } : null,
1164
- };
1165
- }
1166
-
1167
- function waitForVisualPaint() {
1168
- return new Promise(resolve => {
1169
- requestAnimationFrame(() => requestAnimationFrame(resolve));
1170
- });
1171
- }
1172
-
1173
- async function analyzeVisualContrast(options = {}) {
1174
- const candidates = collectVisualContrastCandidates(options);
1175
- const results = [];
1176
- const shouldScrollOffscreen = options.scrollOffscreen === true;
1177
- const restoreScroll = { x: window.scrollX, y: window.scrollY };
1178
- for (const candidate of candidates) {
1179
- if (shouldScrollOffscreen && (window.scrollX !== restoreScroll.x || window.scrollY !== restoreScroll.y)) {
1180
- window.scrollTo(restoreScroll.x, restoreScroll.y);
1181
- await waitForVisualPaint();
1182
- }
1183
- let result = await analyzeVisualContrastCandidate(candidate);
1184
- if (shouldScrollOffscreen && result.status === 'unresolved' && result.reason === 'text outside viewport') {
1185
- let el = null;
1186
- try {
1187
- el = document.querySelector(candidate.selector);
1188
- } catch {
1189
- el = null;
1190
- }
1191
- if (el && typeof el.scrollIntoView === 'function') {
1192
- el.scrollIntoView({ block: 'center', inline: 'nearest', behavior: 'instant' });
1193
- await waitForVisualPaint();
1194
- result = await analyzeVisualContrastCandidate(candidate);
1195
- }
1196
- }
1197
- results.push(result);
1198
- }
1199
- if (shouldScrollOffscreen && (window.scrollX !== restoreScroll.x || window.scrollY !== restoreScroll.y)) {
1200
- window.scrollTo(restoreScroll.x, restoreScroll.y);
1201
- }
1202
- return results;
1203
- }
1204
-
1205
- function isElementHidden(el) {
1206
- if (!el || el === document.body || el === document.documentElement) return false;
1207
- if (typeof el.checkVisibility === 'function') return !el.checkVisibility({ checkOpacity: false, checkVisibilityCSS: true });
1208
- // Fallback: zero size or no offsetParent (covers display:none and detached subtrees)
1209
- return el.offsetWidth === 0 && el.offsetHeight === 0;
1210
- }
1211
-
1212
- function serializeFindings(allFindings) {
1213
- return allFindings.map(({ el, findings }) => ({
1214
- selector: generateSelector(el),
1215
- tagName: el.tagName?.toLowerCase() || 'unknown',
1216
- rect: (el !== document.body && el !== document.documentElement && el.getBoundingClientRect)
1217
- ? el.getBoundingClientRect().toJSON() : null,
1218
- isPageLevel: el === document.body || el === document.documentElement,
1219
- isHidden: isElementHidden(el),
1220
- findings: findings.map(f => {
1221
- const ap = ANTIPATTERNS.find(a => a.id === (f.type || f.id));
1222
- return {
1223
- type: f.type || f.id,
1224
- category: ap ? ap.category : 'quality',
1225
- severity: ap?.severity || 'warning',
1226
- detail: f.detail || f.snippet,
1227
- ignoreValue: f.ignoreValue || f.value || '',
1228
- name: ap ? ap.name : (f.type || f.id),
1229
- description: ap ? ap.description : '',
1230
- };
1231
- }),
1232
- }));
1233
- }
1234
-
1235
- const printSummary = function(allFindings) {
1236
- if (allFindings.length === 0) {
1237
- console.log('%c[monodesign] No anti-patterns found.', 'color: #22c55e; font-weight: bold');
1238
- return;
1239
- }
1240
- console.group(
1241
- `%c[monodesign] ${allFindings.length} anti-pattern${allFindings.length === 1 ? '' : 's'} found`,
1242
- 'color: oklch(84% 0.19 80.46); font-weight: bold'
1243
- );
1244
- for (const { el, findings } of allFindings) {
1245
- for (const f of findings) {
1246
- console.log(`%c${f.type || f.id}%c ${f.detail || f.snippet}`,
1247
- 'color: oklch(84% 0.19 80.46); font-weight: bold', 'color: inherit', el);
1248
- }
1249
- }
1250
- console.groupEnd();
1251
- };
1252
-
1253
- function addBrowserFindings(groupMap, el, findings) {
1254
- if (!findings || findings.length === 0) return;
1255
- const existing = groupMap.get(el);
1256
- if (existing) existing.push(...findings);
1257
- else groupMap.set(el, [...findings]);
1258
- }
1259
-
1260
- function browserFindingsFromMap(groupMap) {
1261
- return [...groupMap.entries()].map(([el, findings]) => ({ el, findings }));
1262
- }
1263
-
1264
- const DESIGN_COLOR_TOLERANCE = 6;
1265
- const DESIGN_RADIUS_TOLERANCE_PX = 0.5;
1266
- const DESIGN_SKIP_TAGS = new Set(['head', 'title', 'meta', 'link', 'style', 'script', 'noscript', 'template', 'source']);
1267
-
1268
- function normalizeBrowserFontName(value) {
1269
- return String(value || '')
1270
- .trim()
1271
- .replace(/^["']|["']$/g, '')
1272
- .replace(/\+/g, ' ')
1273
- .replace(/\s+/g, ' ')
1274
- .toLowerCase();
1275
- }
1276
-
1277
- function browserPrimaryFont(stack) {
1278
- if (!stack || /var\(/i.test(stack)) return '';
1279
- return String(stack || '')
1280
- .split(',')
1281
- .map(normalizeBrowserFontName)
1282
- .find(font => font && !GENERIC_FONTS.has(font)) || '';
1283
- }
1284
-
1285
- function browserDesignSystemConfig() {
1286
- const raw = window.__MONODESIGN_CONFIG__?.designSystem;
1287
- if (!raw?.present) return null;
1288
- const allowedFonts = new Set((raw.allowedFonts || []).map(normalizeBrowserFontName).filter(Boolean));
1289
- const allowedColors = (raw.allowedColors || [])
1290
- .filter(color => color && Number.isFinite(color.r) && Number.isFinite(color.g) && Number.isFinite(color.b))
1291
- .map(color => ({ r: color.r, g: color.g, b: color.b }));
1292
- const allowedRadii = (raw.allowedRadii || [])
1293
- .map(Number)
1294
- .filter(px => Number.isFinite(px));
1295
- return {
1296
- present: true,
1297
- hasFonts: raw.hasFonts === true && allowedFonts.size > 0,
1298
- allowedFonts,
1299
- hasColors: raw.hasColors === true && allowedColors.length > 0,
1300
- allowedColors,
1301
- hasRadii: raw.hasRadii === true && allowedRadii.length > 0,
1302
- allowedRadii,
1303
- hasPillRadius: raw.hasPillRadius === true,
1304
- };
1305
- }
1306
-
1307
- function browserColorsClose(a, b) {
1308
- if (!a || !b) return false;
1309
- return Math.max(
1310
- Math.abs(a.r - b.r),
1311
- Math.abs(a.g - b.g),
1312
- Math.abs(a.b - b.b),
1313
- ) <= DESIGN_COLOR_TOLERANCE;
1314
- }
1315
-
1316
- function isBrowserDesignColorAllowed(raw, designSystem) {
1317
- if (!designSystem?.hasColors) return true;
1318
- const text = String(raw || '').trim().toLowerCase();
1319
- if (!text || text === 'transparent' || text === 'currentcolor' || text === 'inherit' || text === 'initial') return true;
1320
- if (text.includes('var(')) return true;
1321
- const parsed = parseAnyColor(text);
1322
- if (!parsed) return true;
1323
- if ((parsed.a ?? 1) <= 0.05) return true;
1324
- return designSystem.allowedColors.some(color => browserColorsClose(parsed, color));
1325
- }
1326
-
1327
- function isBrowserTransparentCss(value) {
1328
- const text = String(value || '').trim().toLowerCase();
1329
- if (!text || text === 'transparent') return true;
1330
- const parsed = parseAnyColor(text);
1331
- return parsed ? (parsed.a ?? 1) <= 0.05 : false;
1332
- }
1333
-
1334
- function isBrowserDesignRadiusAllowed(raw, designSystem) {
1335
- if (!designSystem?.hasRadii) return true;
1336
- const text = String(raw || '').trim().toLowerCase();
1337
- if (!text || text === '0' || text === 'none' || text === 'initial' || text === 'inherit') return true;
1338
- if (text.includes('var(') || text.includes('%')) return true;
1339
- const px = resolveLengthPx(text, 16);
1340
- if (px == null || !Number.isFinite(px) || px <= DESIGN_RADIUS_TOLERANCE_PX) return true;
1341
- if (designSystem.hasPillRadius && px >= 99) return true;
1342
- return designSystem.allowedRadii.some(allowed => Math.abs(allowed - px) <= DESIGN_RADIUS_TOLERANCE_PX);
1343
- }
1344
-
1345
- function browserRadiusTokens(value) {
1346
- return String(value || '')
1347
- .replace(/\s*\/\s*/g, ' ')
1348
- .split(/\s+/)
1349
- .map(token => token.trim())
1350
- .filter(Boolean);
1351
- }
1352
-
1353
- function browserHasDirectText(el) {
1354
- return [...(el.childNodes || [])].some(node => node.nodeType === 3 && node.textContent.trim().length > 0);
1355
- }
1356
-
1357
- function browserSampleText(el) {
1358
- const text = String(el.textContent || '').replace(/\s+/g, ' ').trim();
1359
- return text ? ` "${text.slice(0, 40)}"` : '';
1360
- }
1361
-
1362
- function shouldSkipDesignElement(el) {
1363
- const tag = el.tagName?.toLowerCase?.() || '';
1364
- return DESIGN_SKIP_TAGS.has(tag) || isElementHidden(el);
1365
- }
1366
-
1367
- function checkElementDesignSystemDOM(el, designSystem, seen) {
1368
- if (!designSystem?.present || shouldSkipDesignElement(el)) return [];
1369
- const findings = [];
1370
- const tag = el.tagName?.toLowerCase?.() || 'unknown';
1371
- const style = getComputedStyle(el);
1372
-
1373
- if (designSystem.hasFonts && browserHasDirectText(el)) {
1374
- const font = browserPrimaryFont(style.fontFamily || '');
1375
- if (font && !designSystem.allowedFonts.has(font) && !seen.fonts.has(font)) {
1376
- seen.fonts.add(font);
1377
- findings.push({
1378
- type: 'design-system-font',
1379
- detail: `${tag}${browserSampleText(el)} uses ${font}; not declared in DESIGN.md typography`,
1380
- ignoreValue: font,
1381
- });
1382
- }
1383
- }
1384
-
1385
- if (designSystem.hasColors) {
1386
- const colorChecks = [];
1387
- if (browserHasDirectText(el)) colorChecks.push(['text color', style.color]);
1388
- if (!isBrowserTransparentCss(style.backgroundColor)) colorChecks.push(['background', style.backgroundColor]);
1389
- for (const side of ['Top', 'Right', 'Bottom', 'Left']) {
1390
- if ((parseFloat(style[`border${side}Width`]) || 0) > 0) {
1391
- colorChecks.push([`border-${side.toLowerCase()}`, style[`border${side}Color`]]);
1392
- }
1393
- }
1394
- if ((parseFloat(style.outlineWidth) || 0) > 0) colorChecks.push(['outline', style.outlineColor]);
1395
-
1396
- for (const [kind, raw] of colorChecks) {
1397
- const label = String(raw || '').trim().replace(/\s+/g, ' ');
1398
- if (isBrowserDesignColorAllowed(label, designSystem)) continue;
1399
- const key = `${kind}:${label}`;
1400
- if (seen.colors.has(key)) continue;
1401
- seen.colors.add(key);
1402
- findings.push({
1403
- type: 'design-system-color',
1404
- detail: `${kind} ${label} on ${tag}${browserSampleText(el)} is outside DESIGN.md colors`,
1405
- ignoreValue: label,
1406
- });
1407
- }
1408
- }
1409
-
1410
- if (designSystem.hasRadii) {
1411
- for (const token of browserRadiusTokens(style.borderRadius || '')) {
1412
- if (isBrowserDesignRadiusAllowed(token, designSystem)) continue;
1413
- if (seen.radii.has(token)) continue;
1414
- seen.radii.add(token);
1415
- findings.push({
1416
- type: 'design-system-radius',
1417
- detail: `border-radius ${token} on ${tag}${browserSampleText(el)} is outside the DESIGN.md rounded scale`,
1418
- ignoreValue: token,
1419
- });
1420
- }
1421
- }
1422
-
1423
- return findings;
1424
- }
1425
-
1426
- function decodeBrowserGoogleFamily(value) {
1427
- const family = String(value || '').split(':')[0].replace(/\+/g, ' ');
1428
- try {
1429
- return decodeURIComponent(family);
1430
- } catch {
1431
- return family;
1432
- }
1433
- }
1434
-
1435
- function checkBrowserDesignSystemSources(designSystem, seen) {
1436
- if (!designSystem?.hasFonts) return [];
1437
- const findings = [];
1438
- for (const link of document.querySelectorAll('link[href*="fonts.googleapis.com/css"]')) {
1439
- const href = link.getAttribute('href') || '';
1440
- for (const match of href.matchAll(/[?&]family=([^&]+)/g)) {
1441
- const display = decodeBrowserGoogleFamily(match[1]);
1442
- const font = normalizeBrowserFontName(display);
1443
- if (!font || designSystem.allowedFonts.has(font) || seen.fonts.has(font)) continue;
1444
- seen.fonts.add(font);
1445
- findings.push({
1446
- type: 'design-system-font',
1447
- detail: `Google Fonts: ${display} is not declared in DESIGN.md typography`,
1448
- ignoreValue: display,
1449
- });
1450
- }
1451
- }
1452
- return findings;
1453
- }
1454
-
1455
- function collectBrowserFindings() {
1456
- const groupMap = new Map();
1457
- const _disabled = EXTENSION_MODE ? (window.__MONODESIGN_CONFIG__?.disabledRules || []) : [];
1458
- const _ruleOk = (id) => !_disabled.length || !_disabled.includes(id);
1459
- const designSystem = browserDesignSystemConfig();
1460
- const designSeen = { fonts: new Set(), colors: new Set(), radii: new Set() };
1461
- // Note: provider-gated rules (--gpt / --gemini) are NOT filtered here. In a
1462
- // real browser env (detector page, live overlay, extension) running every
1463
- // check is free, so we always surface them; the gating is purely a CLI
1464
- // output concern, applied in the Node engines' detect* return paths.
1465
-
1466
- for (const el of document.querySelectorAll('*')) {
1467
- // Skip monodesign's own elements and any descendants (overlays, labels, banner, nav buttons)
1468
- if (el.closest('.monodesign-overlay, .monodesign-label, .monodesign-banner, .monodesign-tooltip')) continue;
1469
- // Skip browser extension elements (Claude, etc.)
1470
- const elId = el.id || '';
1471
- if (elId.startsWith('claude-') || elId.startsWith('cic-')) continue;
1472
- // Skip the monodesign live-mode overlay (highlight, tooltip, bar, picker, toast).
1473
- // These are inspector chrome, not part of the user's design.
1474
- if (el.closest('[id^="monodesign-live-"]')) continue;
1475
- // Skip html/body -- page-level findings go in the banner, not a full-page overlay
1476
- if (el === document.body || el === document.documentElement) continue;
1477
-
1478
- const findings = [
1479
- ...checkElementBordersDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
1480
- ...checkElementColorsDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
1481
- ...checkElementMotionDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
1482
- ...checkElementGlowDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
1483
- ...checkElementAIPaletteDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
1484
- ...checkElementIconTileDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
1485
- ...checkElementItalicSerifDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
1486
- ...checkElementQualityDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
1487
- ...checkElementOversizedH1DOM(el).map(f => ({ type: f.id, detail: f.snippet })),
1488
- ...checkElementClippedOverflowDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
1489
- ...checkElementGptBorderShadowDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
1490
- ...checkElementTextOverflowDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
1491
- ...checkElementImageDimensionsDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
1492
- ...checkElementSmallTouchTargetDOM(el).map(f => ({ type: f.id, detail: f.snippet })),
1493
- ...checkElementDesignSystemDOM(el, designSystem, designSeen),
1494
- ].filter(f => _ruleOk(f.type));
1495
-
1496
- addBrowserFindings(groupMap, el, findings);
1497
-
1498
- // Hero eyebrow: the offending element is the eyebrow above the heading,
1499
- // not the heading itself — highlight the previous sibling instead.
1500
- const eyebrowFindings = checkElementHeroEyebrowDOM(el)
1501
- .map(f => ({ type: f.id, detail: f.snippet }))
1502
- .filter(f => _ruleOk(f.type));
1503
- if (eyebrowFindings.length > 0 && el.previousElementSibling) {
1504
- addBrowserFindings(groupMap, el.previousElementSibling, eyebrowFindings);
1505
- }
1506
- }
1507
-
1508
- const pageLevelFindings = [];
1509
-
1510
- const designSourceFindings = checkBrowserDesignSystemSources(designSystem, designSeen)
1511
- .filter(f => _ruleOk(f.type));
1512
- if (designSourceFindings.length > 0) {
1513
- pageLevelFindings.push(...designSourceFindings);
1514
- addBrowserFindings(groupMap, document.body, designSourceFindings);
1515
- }
1516
-
1517
- const typoFindings = checkTypography().filter(f => _ruleOk(f.type));
1518
- if (typoFindings.length > 0) {
1519
- pageLevelFindings.push(...typoFindings);
1520
- addBrowserFindings(groupMap, document.body, typoFindings);
1521
- }
1522
-
1523
- const sectionKickerFindings = checkRepeatedSectionKickersDOM()
1524
- .map(f => ({ type: f.id, detail: f.snippet }))
1525
- .filter(f => _ruleOk(f.type));
1526
- if (sectionKickerFindings.length > 0) {
1527
- pageLevelFindings.push(...sectionKickerFindings);
1528
- addBrowserFindings(groupMap, document.body, sectionKickerFindings);
1529
- }
1530
-
1531
- const layoutFindings = checkLayout().filter(f => _ruleOk(f.type));
1532
- for (const f of layoutFindings) {
1533
- const el = f.el || document.body;
1534
- addBrowserFindings(groupMap, el, [{ type: f.type, detail: f.detail || f.snippet }]);
1535
- }
1536
-
1537
- // Page-level quality checks (headings, etc.)
1538
- const qualityFindings = checkPageQualityDOM().filter(f => _ruleOk(f.type));
1539
- if (qualityFindings.length > 0) {
1540
- pageLevelFindings.push(...qualityFindings);
1541
- addBrowserFindings(groupMap, document.body, qualityFindings);
1542
- }
1543
-
1544
- const creamFindings = checkCreamPalette(document)
1545
- .map(f => ({ type: f.id, detail: f.snippet }))
1546
- .filter(f => _ruleOk(f.type));
1547
- if (creamFindings.length > 0) {
1548
- pageLevelFindings.push(...creamFindings);
1549
- addBrowserFindings(groupMap, document.body, creamFindings);
1550
- }
1551
-
1552
- // Stylesheet-level accessibility rules (focus-visible, hover-only,
1553
- // dark-scheme). Serialize every same-origin stylesheet to CSS text and
1554
- // run the shared analyzers — cross-origin sheets throw on cssRules access
1555
- // and are skipped.
1556
- let stylesheetCssText = '';
1557
- for (const sheet of Array.from(document.styleSheets || [])) {
1558
- let rules;
1559
- try { rules = sheet.cssRules; } catch { continue; }
1560
- if (!rules) continue;
1561
- for (const rule of Array.from(rules)) {
1562
- try { stylesheetCssText += rule.cssText + '\n'; } catch { /* ignore */ }
1563
- }
1564
- }
1565
- const stylesheetFindings = [
1566
- ...checkFocusVisible(stylesheetCssText),
1567
- ...checkHoverOnlyAffordance(stylesheetCssText),
1568
- ...checkDarkSchemeContrast(stylesheetCssText),
1569
- ].map(f => ({ type: f.id, detail: f.snippet })).filter(f => _ruleOk(f.type));
1570
- if (stylesheetFindings.length > 0) {
1571
- pageLevelFindings.push(...stylesheetFindings);
1572
- addBrowserFindings(groupMap, document.body, stylesheetFindings);
1573
- }
1574
-
1575
- // Regex-on-HTML checks (shared with Node)
1576
- // Clone the document and strip monodesign-live overlay nodes before the
1577
- // regex scan, so the inspector's own inline styles (transitions on top/
1578
- // left/width/height, etc.) don't register as page anti-patterns.
1579
- const docClone = document.documentElement.cloneNode(true);
1580
- for (const node of docClone.querySelectorAll('[id^="monodesign-live-"]')) {
1581
- node.remove();
1582
- }
1583
- const htmlPatternFindings = checkHtmlPatterns(docClone.outerHTML);
1584
- if (htmlPatternFindings.length > 0) {
1585
- const mapped = htmlPatternFindings.map(f => ({ type: f.id, detail: f.snippet })).filter(f => _ruleOk(f.type));
1586
- pageLevelFindings.push(...mapped);
1587
- addBrowserFindings(groupMap, document.body, mapped);
1588
- }
1589
-
1590
- return {
1591
- groupMap,
1592
- allFindings: browserFindingsFromMap(groupMap),
1593
- pageLevelFindings,
1594
- };
1595
- }
1596
-
1597
- function shouldRunVisualContrast(options = {}) {
1598
- return options.visualContrast === true || window.__MONODESIGN_CONFIG__?.visualContrast === true;
1599
- }
1600
-
1601
- function visualContrastOptions(options = {}) {
1602
- const config = window.__MONODESIGN_CONFIG__ || {};
1603
- const scrollOffscreen = typeof options.scrollOffscreen === 'boolean'
1604
- ? options.scrollOffscreen
1605
- : typeof options.visualContrastScrollOffscreen === 'boolean'
1606
- ? options.visualContrastScrollOffscreen
1607
- : typeof config.visualContrastScrollOffscreen === 'boolean'
1608
- ? config.visualContrastScrollOffscreen
1609
- : false;
1610
- return {
1611
- ...options,
1612
- maxCandidates: Number.isFinite(options.visualContrastMaxCandidates)
1613
- ? options.visualContrastMaxCandidates
1614
- : Number.isFinite(options.maxCandidates)
1615
- ? options.maxCandidates
1616
- : Number.isFinite(config.visualContrastMaxCandidates)
1617
- ? config.visualContrastMaxCandidates
1618
- : undefined,
1619
- scrollOffscreen,
1620
- };
1621
- }
1622
-
1623
- let lastVisualContrastAnalyses = [];
1624
- let lazyVisualContrastObserver = null;
1625
- let lazyVisualContrastPending = new WeakMap();
1626
- const lazyVisualContrastResolving = new WeakSet();
1627
- let scanGeneration = 0;
1628
-
1629
- function rememberVisualContrastAnalysis(result) {
1630
- if (!result?.selector) {
1631
- lastVisualContrastAnalyses.push(result);
1632
- return;
1633
- }
1634
- const idx = lastVisualContrastAnalyses.findIndex(item => item.selector === result.selector);
1635
- if (idx >= 0) lastVisualContrastAnalyses[idx] = result;
1636
- else lastVisualContrastAnalyses.push(result);
1637
- }
1638
-
1639
- function disconnectLazyVisualContrastObserver() {
1640
- if (lazyVisualContrastObserver) {
1641
- lazyVisualContrastObserver.disconnect();
1642
- lazyVisualContrastObserver = null;
1643
- }
1644
- lazyVisualContrastPending = new WeakMap();
1645
- }
1646
-
1647
- function addVisualContrastResult(groupMap, result, options = {}) {
1648
- if (result.status !== 'fail' || !result.finding || !result.selector) return false;
1649
- let el = null;
1650
- try {
1651
- el = document.querySelector(result.selector);
1652
- } catch {
1653
- el = null;
1654
- }
1655
- if (!el) return false;
1656
- const findingType = result.finding.type || result.finding.id || 'low-contrast';
1657
- const existing = groupMap.get(el) || [];
1658
- if (existing.some(f => (f.type || f.id) === findingType)) return false;
1659
- addBrowserFindings(groupMap, el, [{
1660
- type: findingType,
1661
- detail: result.finding.detail || result.finding.snippet,
1662
- }]);
1663
- if (options.decorate && el !== document.body && el !== document.documentElement) {
1664
- highlight(el, groupMap.get(el) || []);
1665
- }
1666
- return true;
1667
- }
1668
-
1669
- function scanResultMeta(options = {}) {
1670
- const scanId = options.scanId;
1671
- if (typeof scanId !== 'string' && typeof scanId !== 'number') return {};
1672
- return { scanId: String(scanId) };
1673
- }
1674
-
1675
- function postSerializedFindings(groupMap, options = {}) {
1676
- if (!EXTENSION_MODE) return;
1677
- const allFindings = browserFindingsFromMap(groupMap);
1678
- window.postMessage({
1679
- source: 'monodesign-results',
1680
- findings: serializeFindings(allFindings),
1681
- count: allFindings.length,
1682
- ...scanResultMeta(options),
1683
- }, '*');
1684
- }
1685
-
1686
- function postExtensionError(err) {
1687
- if (!EXTENSION_MODE) return;
1688
- window.postMessage({
1689
- source: 'monodesign-error',
1690
- message: err?.message || String(err),
1691
- }, '*');
1692
- }
1693
-
1694
- function reportVisualContrastError(err, detail = {}) {
1695
- window.dispatchEvent(new CustomEvent('monodesign-visual-contrast-error', {
1696
- detail: {
1697
- ...detail,
1698
- message: err?.message || String(err),
1699
- },
1700
- }));
1701
- if (EXTENSION_MODE) {
1702
- postExtensionError(err);
1703
- } else {
1704
- console.warn('[monodesign] visual contrast scan failed', err);
1705
- }
1706
- }
1707
-
1708
- function scheduleLazyVisualContrast(groupMap, analyses, options = {}, runtime = {}) {
1709
- disconnectLazyVisualContrastObserver();
1710
- if (options.visualContrastLazy === false || options.scrollOffscreen !== false) return;
1711
- if (typeof IntersectionObserver === 'undefined') return;
1712
- const unresolved = (analyses || []).filter(result =>
1713
- result?.status === 'unresolved' &&
1714
- result.reason === 'text outside viewport' &&
1715
- result.selector
1716
- );
1717
- if (unresolved.length === 0) return;
1718
- const generation = runtime.generation || scanGeneration;
1719
-
1720
- lazyVisualContrastObserver = new IntersectionObserver((entries) => {
1721
- for (const entry of entries) {
1722
- if (!entry.isIntersecting) continue;
1723
- const el = entry.target;
1724
- const candidate = lazyVisualContrastPending.get(el);
1725
- if (!candidate || lazyVisualContrastResolving.has(el)) continue;
1726
- lazyVisualContrastObserver?.unobserve(el);
1727
- lazyVisualContrastPending.delete(el);
1728
- lazyVisualContrastResolving.add(el);
1729
- waitForVisualPaint()
1730
- .then(() => analyzeVisualContrastCandidate(candidate))
1731
- .then(result => {
1732
- if (generation !== scanGeneration) return;
1733
- rememberVisualContrastAnalysis(result);
1734
- const added = addVisualContrastResult(groupMap, result, { decorate: true });
1735
- if (added) {
1736
- postSerializedFindings(groupMap, options);
1737
- window.dispatchEvent(new CustomEvent('monodesign-visual-contrast-resolved', {
1738
- detail: {
1739
- selector: result.selector,
1740
- status: result.status,
1741
- finding: result.finding || null,
1742
- },
1743
- }));
1744
- }
1745
- })
1746
- .catch(err => {
1747
- reportVisualContrastError(err, { selector: candidate.selector });
1748
- })
1749
- .finally(() => {
1750
- lazyVisualContrastResolving.delete(el);
1751
- });
1752
- }
1753
- }, { threshold: 0.5 });
1754
-
1755
- for (const candidate of unresolved) {
1756
- let el = null;
1757
- try {
1758
- el = document.querySelector(candidate.selector);
1759
- } catch {
1760
- el = null;
1761
- }
1762
- if (!el) continue;
1763
- lazyVisualContrastPending.set(el, candidate);
1764
- lazyVisualContrastObserver.observe(el);
1765
- }
1766
- }
1767
-
1768
- async function addVisualContrastFindings(groupMap, options = {}, runtime = {}) {
1769
- if (!shouldRunVisualContrast(options)) {
1770
- lastVisualContrastAnalyses = [];
1771
- disconnectLazyVisualContrastObserver();
1772
- return [];
1773
- }
1774
- const resolvedOptions = visualContrastOptions(options);
1775
- const analyses = await analyzeVisualContrast(resolvedOptions);
1776
- if (runtime.generation && runtime.generation !== scanGeneration) return analyses;
1777
- lastVisualContrastAnalyses = analyses;
1778
- for (const result of analyses) {
1779
- addVisualContrastResult(groupMap, result, { decorate: runtime.decorate });
1780
- }
1781
- if (runtime.decorate || runtime.scheduleLazy) scheduleLazyVisualContrast(groupMap, analyses, resolvedOptions, runtime);
1782
- return analyses;
1783
- }
1784
-
1785
- async function collectBrowserFindingsAsync(options = {}, runtime = {}) {
1786
- const collected = collectBrowserFindings();
1787
- await addVisualContrastFindings(collected.groupMap, options, runtime);
1788
- return {
1789
- ...collected,
1790
- allFindings: browserFindingsFromMap(collected.groupMap),
1791
- visualContrastAnalyses: lastVisualContrastAnalyses,
1792
- };
1793
- }
1794
-
1795
- function clearOverlays() {
1796
- scanGeneration += 1;
1797
- disconnectLazyVisualContrastObserver();
1798
- for (const o of [...overlays]) detachOverlay(o);
1799
- overlays.length = 0;
1800
- visibilityObserver.disconnect();
1801
- overlayIndex = 0;
1802
- }
1803
-
1804
- function renderBrowserFindings(collected, options = {}) {
1805
- const { allFindings, pageLevelFindings } = collected;
1806
-
1807
- for (const { el, findings } of allFindings) {
1808
- if (el === document.body || el === document.documentElement) continue;
1809
- highlight(el, findings);
1810
- }
1811
-
1812
- if (pageLevelFindings.length > 0) {
1813
- showPageBanner(pageLevelFindings);
1814
- }
1815
-
1816
- if (!EXTENSION_MODE) printSummary(allFindings);
1817
-
1818
- // In extension mode, post serialized results for the DevTools panel
1819
- if (EXTENSION_MODE) {
1820
- window.postMessage({
1821
- source: 'monodesign-results',
1822
- findings: serializeFindings(allFindings),
1823
- count: allFindings.length,
1824
- ...scanResultMeta(options),
1825
- }, '*');
1826
- }
1827
-
1828
- // After this scan completes, all subsequent reveals are instant (no stagger, no animation)
1829
- setTimeout(() => { firstScanDone = true; }, 1000);
1830
-
1831
- return allFindings;
1832
- }
1833
-
1834
- let firstScanDone = false;
1835
- const scan = function(options = {}) {
1836
- clearOverlays();
1837
- const generation = scanGeneration;
1838
- const collected = collectBrowserFindings();
1839
- const allFindings = renderBrowserFindings(collected, options);
1840
- if (shouldRunVisualContrast(options)) {
1841
- addVisualContrastFindings(collected.groupMap, options, { decorate: true, generation })
1842
- .then(() => {
1843
- if (generation === scanGeneration) postSerializedFindings(collected.groupMap, options);
1844
- })
1845
- .catch(err => {
1846
- reportVisualContrastError(err);
1847
- });
1848
- }
1849
- return allFindings;
1850
- };
1851
-
1852
- const scanAsync = async function(options = {}) {
1853
- clearOverlays();
1854
- const generation = scanGeneration;
1855
- if (shouldRunVisualContrast(options)) {
1856
- const collected = await collectBrowserFindingsAsync(options, { generation, scheduleLazy: true });
1857
- if (generation !== scanGeneration) return [];
1858
- return renderBrowserFindings(collected, options);
1859
- }
1860
- lastVisualContrastAnalyses = [];
1861
- return renderBrowserFindings(collectBrowserFindings(), options);
1862
- };
1863
-
1864
- const detect = function(options = {}) {
1865
- lastVisualContrastAnalyses = [];
1866
- const { allFindings } = collectBrowserFindings();
1867
- return options.serialize === false ? allFindings : serializeFindings(allFindings);
1868
- };
1869
-
1870
- const detectAsync = async function(options = {}) {
1871
- if (shouldRunVisualContrast(options)) {
1872
- const { allFindings } = await collectBrowserFindingsAsync(options);
1873
- return options.serialize === false ? allFindings : serializeFindings(allFindings);
1874
- }
1875
- lastVisualContrastAnalyses = [];
1876
- const { allFindings } = collectBrowserFindings();
1877
- return options.serialize === false ? allFindings : serializeFindings(allFindings);
1878
- };
1879
-
1880
- if (EXTENSION_MODE) {
1881
- // Extension mode: listen for commands, don't auto-scan
1882
- window.addEventListener('message', (e) => {
1883
- if (e.source !== window || !e.data || e.data.source !== 'monodesign-command') return;
1884
- if (e.data.action === 'scan') {
1885
- if (e.data.config) window.__MONODESIGN_CONFIG__ = e.data.config;
1886
- try {
1887
- scan(e.data.config || {});
1888
- } catch (err) {
1889
- postExtensionError(err);
1890
- }
1891
- }
1892
- if (e.data.action === 'toggle-overlays') {
1893
- const visible = !document.body.classList.contains('monodesign-hidden');
1894
- document.body.classList.toggle('monodesign-hidden', visible);
1895
- window.postMessage({ source: 'monodesign-overlays-toggled', visible: !visible }, '*');
1896
- }
1897
- if (e.data.action === 'remove') {
1898
- clearOverlays();
1899
- styleEl.remove();
1900
- if (spotlightBackdrop) { spotlightBackdrop.remove(); spotlightBackdrop = null; }
1901
- document.body.classList.remove('monodesign-hidden');
1902
- }
1903
- if (e.data.action === 'highlight') {
1904
- try {
1905
- const target = e.data.selector ? document.querySelector(e.data.selector) : null;
1906
- if (target) {
1907
- // Scroll first so positionOverlay reads the post-scroll rect
1908
- if (!isInViewport(target) && target.scrollIntoView) {
1909
- target.scrollIntoView({ behavior: 'instant', block: 'center' });
1910
- }
1911
- for (const o of overlays) {
1912
- if (o.classList.contains('monodesign-banner')) continue;
1913
- const isMatch = o._targetEl === target;
1914
- o.classList.toggle('monodesign-spotlight', isMatch);
1915
- o.classList.toggle('monodesign-spotlight-dimmed', !isMatch);
1916
- if (isMatch) {
1917
- // Force the matching overlay visible immediately, don't wait for IntersectionObserver
1918
- o.style.display = '';
1919
- o.style.animation = 'none';
1920
- o.classList.add('monodesign-visible');
1921
- o._revealed = true;
1922
- positionOverlay(o);
1923
- }
1924
- }
1925
- showSpotlight(target);
1926
- }
1927
- } catch { /* invalid selector */ }
1928
- }
1929
- if (e.data.action === 'unhighlight') {
1930
- hideSpotlight();
1931
- for (const o of overlays) {
1932
- o.classList.remove('monodesign-spotlight');
1933
- o.classList.remove('monodesign-spotlight-dimmed');
1934
- }
1935
- }
1936
- });
1937
- window.postMessage({ source: 'monodesign-ready' }, '*');
1938
- } else {
1939
- if (window.__MONODESIGN_CONFIG__?.autoScan !== false) {
1940
- const runAutoScan = () => {
1941
- try {
1942
- scan();
1943
- } catch (err) {
1944
- console.warn('[monodesign] scan failed', err);
1945
- }
1946
- };
1947
- if (document.readyState === 'loading') {
1948
- document.addEventListener('DOMContentLoaded', () => setTimeout(runAutoScan, 100));
1949
- } else {
1950
- setTimeout(runAutoScan, 100);
1951
- }
1952
- }
1953
- }
1954
-
1955
- window.monodesignDetect = detect;
1956
- window.monodesignDetectAsync = detectAsync;
1957
- window.monodesignScan = scan;
1958
- window.monodesignScanAsync = scanAsync;
1959
- window.monodesignCollectVisualContrastCandidates = collectVisualContrastCandidates;
1960
- window.monodesignAnalyzeVisualContrast = analyzeVisualContrast;
1961
- window.monodesignGetLastVisualContrastAnalyses = () => lastVisualContrastAnalyses.slice();
1962
- }