monomind 2.7.3 → 2.7.5

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 (637) 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 +11 -1
  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/queen-coordinator.md +0 -0
  54. package/packages/@monomind/cli/.claude/agents/hive-mind/scout-explorer.md +0 -0
  55. package/packages/@monomind/cli/.claude/agents/hive-mind/swarm-memory-manager.md +0 -0
  56. package/packages/@monomind/cli/.claude/agents/hive-mind/worker-specialist.md +0 -0
  57. package/packages/@monomind/cli/.claude/agents/marketing/marketing-competitive-content.md +0 -0
  58. package/packages/@monomind/cli/.claude/agents/marketing/marketing-cro-specialist.md +0 -0
  59. package/packages/@monomind/cli/.claude/agents/marketing/marketing-email-specialist.md +0 -0
  60. package/packages/@monomind/cli/.claude/agents/marketing/marketing-launch-strategist.md +0 -0
  61. package/packages/@monomind/cli/.claude/agents/marketing/marketing-pricing-strategist.md +0 -0
  62. package/packages/@monomind/cli/.claude/agents/optimization/benchmark-suite.md +0 -0
  63. package/packages/@monomind/cli/.claude/agents/optimization/load-balancer.md +0 -0
  64. package/packages/@monomind/cli/.claude/agents/optimization/performance-monitor.md +0 -0
  65. package/packages/@monomind/cli/.claude/agents/optimization/resource-allocator.md +0 -0
  66. package/packages/@monomind/cli/.claude/agents/optimization/topology-optimizer.md +0 -0
  67. package/packages/@monomind/cli/.claude/agents/schemas/architecture-output.json +0 -0
  68. package/packages/@monomind/cli/.claude/agents/schemas/code-review-output.json +0 -0
  69. package/packages/@monomind/cli/.claude/agents/schemas/generic-task-input.json +0 -0
  70. package/packages/@monomind/cli/.claude/agents/schemas/implementation-output.json +0 -0
  71. package/packages/@monomind/cli/.claude/agents/schemas/research-output.json +0 -0
  72. package/packages/@monomind/cli/.claude/agents/schemas/security-audit-output.json +0 -0
  73. package/packages/@monomind/cli/.claude/agents/schemas/test-report-output.json +0 -0
  74. package/packages/@monomind/cli/.claude/agents/specialists/integration-architect.md +0 -0
  75. package/packages/@monomind/cli/.claude/agents/specialized/agentic-identity-trust.md +0 -0
  76. package/packages/@monomind/cli/.claude/agents/specialized/agents-orchestrator.md +0 -0
  77. package/packages/@monomind/cli/.claude/agents/specialized/automation-governance-architect.md +0 -0
  78. package/packages/@monomind/cli/.claude/agents/specialized/blockchain-security-auditor.md +0 -0
  79. package/packages/@monomind/cli/.claude/agents/specialized/compliance-auditor.md +0 -0
  80. package/packages/@monomind/cli/.claude/agents/specialized/identity-graph-operator.md +0 -0
  81. package/packages/@monomind/cli/.claude/agents/specialized/lsp-index-engineer.md +0 -0
  82. package/packages/@monomind/cli/.claude/agents/specialized/mobile/spec-mobile-react-native.md +0 -0
  83. package/packages/@monomind/cli/.claude/agents/specialized/specialized-cultural-intelligence-strategist.md +0 -0
  84. package/packages/@monomind/cli/.claude/agents/specialized/specialized-developer-advocate.md +0 -0
  85. package/packages/@monomind/cli/.claude/agents/specialized/specialized-document-generator.md +0 -0
  86. package/packages/@monomind/cli/.claude/agents/specialized/specialized-mcp-builder.md +0 -0
  87. package/packages/@monomind/cli/.claude/agents/specialized/specialized-model-qa.md +0 -0
  88. package/packages/@monomind/cli/.claude/agents/specialized/specialized-workflow-architect.md +0 -0
  89. package/packages/@monomind/cli/.claude/agents/specialized/zk-steward.md +0 -0
  90. package/packages/@monomind/cli/.claude/agents/swarm/mesh-coordinator.md +0 -0
  91. package/packages/@monomind/cli/.claude/agents/templates/automation-smart-agent.md +0 -0
  92. package/packages/@monomind/cli/.claude/agents/templates/coordinator-swarm-init.md +0 -0
  93. package/packages/@monomind/cli/.claude/agents/testing/production-validator.md +0 -0
  94. package/packages/@monomind/cli/.claude/agents/testing/tdd-london-swarm.md +0 -0
  95. package/packages/@monomind/cli/.claude/agents/testing/testing-accessibility-auditor.md +0 -0
  96. package/packages/@monomind/cli/.claude/agents/testing/testing-api-tester.md +0 -0
  97. package/packages/@monomind/cli/.claude/agents/testing/testing-evidence-collector.md +0 -0
  98. package/packages/@monomind/cli/.claude/agents/testing/testing-performance-benchmarker.md +0 -0
  99. package/packages/@monomind/cli/.claude/agents/testing/testing-test-results-analyzer.md +0 -0
  100. package/packages/@monomind/cli/.claude/agents/testing/testing-tool-evaluator.md +0 -0
  101. package/packages/@monomind/cli/.claude/agents/testing/testing-workflow-optimizer.md +0 -0
  102. package/packages/@monomind/cli/.claude/commands/agents/README.md +0 -0
  103. package/packages/@monomind/cli/.claude/commands/agents/agent-capabilities.md +0 -0
  104. package/packages/@monomind/cli/.claude/commands/agents/agent-coordination.md +0 -0
  105. package/packages/@monomind/cli/.claude/commands/agents/agent-spawning.md +0 -0
  106. package/packages/@monomind/cli/.claude/commands/agents/agent-types.md +0 -0
  107. package/packages/@monomind/cli/.claude/commands/analysis/README.md +0 -0
  108. package/packages/@monomind/cli/.claude/commands/analysis/bottleneck-detect.md +0 -0
  109. package/packages/@monomind/cli/.claude/commands/analysis/performance-bottlenecks.md +0 -0
  110. package/packages/@monomind/cli/.claude/commands/analysis/performance-report.md +0 -0
  111. package/packages/@monomind/cli/.claude/commands/analysis/token-usage.md +0 -0
  112. package/packages/@monomind/cli/.claude/commands/automation/README.md +0 -0
  113. package/packages/@monomind/cli/.claude/commands/automation/auto-agent.md +0 -0
  114. package/packages/@monomind/cli/.claude/commands/automation/self-healing.md +0 -0
  115. package/packages/@monomind/cli/.claude/commands/automation/session-memory.md +0 -0
  116. package/packages/@monomind/cli/.claude/commands/automation/smart-agents.md +0 -0
  117. package/packages/@monomind/cli/.claude/commands/automation/smart-spawn.md +0 -0
  118. package/packages/@monomind/cli/.claude/commands/automation/workflow-select.md +0 -0
  119. package/packages/@monomind/cli/.claude/commands/coordination/README.md +0 -0
  120. package/packages/@monomind/cli/.claude/commands/coordination/agent-spawn.md +0 -0
  121. package/packages/@monomind/cli/.claude/commands/coordination/swarm-init.md +0 -0
  122. package/packages/@monomind/cli/.claude/commands/coordination/task-orchestrate.md +0 -0
  123. package/packages/@monomind/cli/.claude/commands/github/README.md +0 -0
  124. package/packages/@monomind/cli/.claude/commands/github/github-modes.md +0 -0
  125. package/packages/@monomind/cli/.claude/commands/github/issue-tracker.md +0 -0
  126. package/packages/@monomind/cli/.claude/commands/github/pr-manager.md +0 -0
  127. package/packages/@monomind/cli/.claude/commands/github/release-manager.md +0 -0
  128. package/packages/@monomind/cli/.claude/commands/github/repo-architect.md +0 -0
  129. package/packages/@monomind/cli/.claude/commands/github/sync-coordinator.md +0 -0
  130. package/packages/@monomind/cli/.claude/commands/hive-mind/README.md +0 -0
  131. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-consensus.md +0 -0
  132. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-init.md +0 -0
  133. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-memory.md +0 -0
  134. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-spawn.md +0 -0
  135. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-status.md +0 -0
  136. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind-stop.md +0 -0
  137. package/packages/@monomind/cli/.claude/commands/hive-mind/hive-mind.md +0 -0
  138. package/packages/@monomind/cli/.claude/commands/hooks/README.md +0 -0
  139. package/packages/@monomind/cli/.claude/commands/hooks/overview.md +0 -0
  140. package/packages/@monomind/cli/.claude/commands/hooks/post-edit.md +0 -0
  141. package/packages/@monomind/cli/.claude/commands/hooks/post-task.md +0 -0
  142. package/packages/@monomind/cli/.claude/commands/hooks/pre-edit.md +0 -0
  143. package/packages/@monomind/cli/.claude/commands/hooks/pre-task.md +0 -0
  144. package/packages/@monomind/cli/.claude/commands/hooks/session-end.md +0 -0
  145. package/packages/@monomind/cli/.claude/commands/hooks/setup.md +0 -0
  146. package/packages/@monomind/cli/.claude/commands/mastermind/_repeat.md +0 -0
  147. package/packages/@monomind/cli/.claude/commands/mastermind/_taskfile.md +0 -0
  148. package/packages/@monomind/cli/.claude/commands/mastermind/adr.md +0 -0
  149. package/packages/@monomind/cli/.claude/commands/mastermind/approvev1.md +0 -0
  150. package/packages/@monomind/cli/.claude/commands/mastermind/architect.md +0 -0
  151. package/packages/@monomind/cli/.claude/commands/mastermind/autodev.md +0 -0
  152. package/packages/@monomind/cli/.claude/commands/mastermind/brain.md +0 -0
  153. package/packages/@monomind/cli/.claude/commands/mastermind/budget.md +0 -0
  154. package/packages/@monomind/cli/.claude/commands/mastermind/build.md +0 -0
  155. package/packages/@monomind/cli/.claude/commands/mastermind/code-review.md +0 -0
  156. package/packages/@monomind/cli/.claude/commands/mastermind/content.md +0 -0
  157. package/packages/@monomind/cli/.claude/commands/mastermind/createorg.md +0 -0
  158. package/packages/@monomind/cli/.claude/commands/mastermind/createtask.md +0 -0
  159. package/packages/@monomind/cli/.claude/commands/mastermind/debug.md +0 -0
  160. package/packages/@monomind/cli/.claude/commands/mastermind/design.md +0 -0
  161. package/packages/@monomind/cli/.claude/commands/mastermind/do.md +0 -0
  162. package/packages/@monomind/cli/.claude/commands/mastermind/execute.md +0 -0
  163. package/packages/@monomind/cli/.claude/commands/mastermind/finance.md +0 -0
  164. package/packages/@monomind/cli/.claude/commands/mastermind/finish.md +0 -0
  165. package/packages/@monomind/cli/.claude/commands/mastermind/graph-status.md +0 -0
  166. package/packages/@monomind/cli/.claude/commands/mastermind/help.md +0 -0
  167. package/packages/@monomind/cli/.claude/commands/mastermind/idea.md +0 -0
  168. package/packages/@monomind/cli/.claude/commands/mastermind/ideate.md +0 -0
  169. package/packages/@monomind/cli/.claude/commands/mastermind/improve.md +0 -0
  170. package/packages/@monomind/cli/.claude/commands/mastermind/loops.md +0 -0
  171. package/packages/@monomind/cli/.claude/commands/mastermind/marketing.md +0 -0
  172. package/packages/@monomind/cli/.claude/commands/mastermind/master.md +0 -0
  173. package/packages/@monomind/cli/.claude/commands/mastermind/memory.md +0 -0
  174. package/packages/@monomind/cli/.claude/commands/mastermind/okf-export.md +0 -0
  175. package/packages/@monomind/cli/.claude/commands/mastermind/okf-import.md +0 -0
  176. package/packages/@monomind/cli/.claude/commands/mastermind/ops.md +0 -0
  177. package/packages/@monomind/cli/.claude/commands/mastermind/orgs.md +0 -0
  178. package/packages/@monomind/cli/.claude/commands/mastermind/orgstatus.md +0 -0
  179. package/packages/@monomind/cli/.claude/commands/mastermind/plan.md +0 -0
  180. package/packages/@monomind/cli/.claude/commands/mastermind/receive-review.md +0 -0
  181. package/packages/@monomind/cli/.claude/commands/mastermind/references/antigravity-tools.md +0 -0
  182. package/packages/@monomind/cli/.claude/commands/mastermind/references/claude-code-tools.md +0 -0
  183. package/packages/@monomind/cli/.claude/commands/mastermind/references/codex-tools.md +0 -0
  184. package/packages/@monomind/cli/.claude/commands/mastermind/references/copilot-tools.md +0 -0
  185. package/packages/@monomind/cli/.claude/commands/mastermind/references/gemini-tools.md +0 -0
  186. package/packages/@monomind/cli/.claude/commands/mastermind/references/pi-tools.md +0 -0
  187. package/packages/@monomind/cli/.claude/commands/mastermind/release.md +0 -0
  188. package/packages/@monomind/cli/.claude/commands/mastermind/repeat.md +0 -0
  189. package/packages/@monomind/cli/.claude/commands/mastermind/research.md +0 -0
  190. package/packages/@monomind/cli/.claude/commands/mastermind/review.md +0 -0
  191. package/packages/@monomind/cli/.claude/commands/mastermind/runorg.md +0 -0
  192. package/packages/@monomind/cli/.claude/commands/mastermind/runorgv1.md +0 -0
  193. package/packages/@monomind/cli/.claude/commands/mastermind/sales.md +0 -0
  194. package/packages/@monomind/cli/.claude/commands/mastermind/skill-builder.md +0 -0
  195. package/packages/@monomind/cli/.claude/commands/mastermind/specialagents.md +0 -0
  196. package/packages/@monomind/cli/.claude/commands/mastermind/stoporg.md +0 -0
  197. package/packages/@monomind/cli/.claude/commands/mastermind/swarm.md +0 -0
  198. package/packages/@monomind/cli/.claude/commands/mastermind/taskdev.md +0 -0
  199. package/packages/@monomind/cli/.claude/commands/mastermind/tdd.md +0 -0
  200. package/packages/@monomind/cli/.claude/commands/mastermind/techport.md +0 -0
  201. package/packages/@monomind/cli/.claude/commands/mastermind/topology.md +0 -0
  202. package/packages/@monomind/cli/.claude/commands/mastermind/understand.md +0 -0
  203. package/packages/@monomind/cli/.claude/commands/mastermind/verify.md +0 -0
  204. package/packages/@monomind/cli/.claude/commands/mastermind/worktree.md +0 -0
  205. package/packages/@monomind/cli/.claude/commands/mastermind.md +0 -0
  206. package/packages/@monomind/cli/.claude/commands/memory/README.md +0 -0
  207. package/packages/@monomind/cli/.claude/commands/memory/memory-search.md +0 -0
  208. package/packages/@monomind/cli/.claude/commands/monitoring/README.md +0 -0
  209. package/packages/@monomind/cli/.claude/commands/monitoring/agent-metrics.md +0 -0
  210. package/packages/@monomind/cli/.claude/commands/monitoring/agents.md +0 -0
  211. package/packages/@monomind/cli/.claude/commands/monitoring/status.md +0 -0
  212. package/packages/@monomind/cli/.claude/commands/monobrowse.md +0 -0
  213. package/packages/@monomind/cli/.claude/commands/monoes/README.md +0 -0
  214. package/packages/@monomind/cli/.claude/commands/monoes/install.md +0 -0
  215. package/packages/@monomind/cli/.claude/commands/monoes/monoagent.md +0 -0
  216. package/packages/@monomind/cli/.claude/commands/monoes/monoclip.md +0 -0
  217. package/packages/@monomind/cli/.claude/commands/monoes/monotask.md +0 -0
  218. package/packages/@monomind/cli/.claude/commands/monograph/README.md +0 -0
  219. package/packages/@monomind/cli/.claude/commands/monograph/monograph-build.md +0 -0
  220. package/packages/@monomind/cli/.claude/commands/monograph/monograph-search.md +0 -0
  221. package/packages/@monomind/cli/.claude/commands/monograph/monograph-stats.md +0 -0
  222. package/packages/@monomind/cli/.claude/commands/monograph/monograph-watch.md +0 -0
  223. package/packages/@monomind/cli/.claude/commands/monograph/monograph-wiki.md +0 -0
  224. package/packages/@monomind/cli/.claude/commands/optimization/auto-topology.md +0 -0
  225. package/packages/@monomind/cli/.claude/commands/optimization/performance-optimize.md +0 -0
  226. package/packages/@monomind/cli/.claude/commands/pair/README.md +0 -0
  227. package/packages/@monomind/cli/.claude/commands/pair/examples.md +0 -0
  228. package/packages/@monomind/cli/.claude/commands/pair/modes.md +0 -0
  229. package/packages/@monomind/cli/.claude/commands/pair/session.md +0 -0
  230. package/packages/@monomind/cli/.claude/commands/stream-chain/pipeline.md +0 -0
  231. package/packages/@monomind/cli/.claude/commands/stream-chain/run.md +0 -0
  232. package/packages/@monomind/cli/.claude/commands/swarm/README.md +0 -0
  233. package/packages/@monomind/cli/.claude/commands/swarm/analysis.md +0 -0
  234. package/packages/@monomind/cli/.claude/commands/swarm/development.md +0 -0
  235. package/packages/@monomind/cli/.claude/commands/swarm/examples.md +0 -0
  236. package/packages/@monomind/cli/.claude/commands/swarm/maintenance.md +0 -0
  237. package/packages/@monomind/cli/.claude/commands/swarm/optimization.md +0 -0
  238. package/packages/@monomind/cli/.claude/commands/swarm/research.md +0 -0
  239. package/packages/@monomind/cli/.claude/commands/swarm/swarm.md +0 -0
  240. package/packages/@monomind/cli/.claude/commands/swarm/testing.md +0 -0
  241. package/packages/@monomind/cli/.claude/commands/tokens.md +0 -0
  242. package/packages/@monomind/cli/.claude/commands/truth/start.md +0 -0
  243. package/packages/@monomind/cli/.claude/commands/ts.md +0 -0
  244. package/packages/@monomind/cli/.claude/commands/workflows/README.md +0 -0
  245. package/packages/@monomind/cli/.claude/commands/workflows/development.md +0 -0
  246. package/packages/@monomind/cli/.claude/commands/workflows/research.md +0 -0
  247. package/packages/@monomind/cli/.claude/commands/workflows/workflow-create.md +0 -0
  248. package/packages/@monomind/cli/.claude/commands/workflows/workflow-execute.md +0 -0
  249. package/packages/@monomind/cli/.claude/commands/workflows/workflow-export.md +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/extras-registry.json +0 -0
  254. package/packages/@monomind/cli/.claude/helpers/graphify-freshen.cjs +0 -0
  255. package/packages/@monomind/cli/.claude/helpers/handlers/adr-draft-handler.cjs +0 -0
  256. package/packages/@monomind/cli/.claude/helpers/handlers/agent-start-handler.cjs +0 -0
  257. package/packages/@monomind/cli/.claude/helpers/handlers/budget-status-handler.cjs +0 -0
  258. package/packages/@monomind/cli/.claude/helpers/handlers/capture-handler.cjs +0 -0
  259. package/packages/@monomind/cli/.claude/helpers/handlers/compact-handler.cjs +0 -0
  260. package/packages/@monomind/cli/.claude/helpers/handlers/edit-handler.cjs +0 -0
  261. package/packages/@monomind/cli/.claude/helpers/handlers/gates-handler.cjs +0 -0
  262. package/packages/@monomind/cli/.claude/helpers/handlers/graph-status-handler.cjs +0 -0
  263. package/packages/@monomind/cli/.claude/helpers/handlers/loops-status-handler.cjs +0 -0
  264. package/packages/@monomind/cli/.claude/helpers/handlers/route-handler.cjs +0 -0
  265. package/packages/@monomind/cli/.claude/helpers/handlers/session-handler.cjs +0 -0
  266. package/packages/@monomind/cli/.claude/helpers/handlers/session-restore-handler.cjs +0 -0
  267. package/packages/@monomind/cli/.claude/helpers/handlers/stats-handler.cjs +0 -0
  268. package/packages/@monomind/cli/.claude/helpers/handlers/task-handler.cjs +0 -0
  269. package/packages/@monomind/cli/.claude/helpers/intelligence.cjs +0 -0
  270. package/packages/@monomind/cli/.claude/helpers/learning-service.mjs +0 -0
  271. package/packages/@monomind/cli/.claude/helpers/loop-tracker.cjs +0 -0
  272. package/packages/@monomind/cli/.claude/helpers/mastermind-activate.cjs +0 -0
  273. package/packages/@monomind/cli/.claude/helpers/memory-palace.cjs +0 -0
  274. package/packages/@monomind/cli/.claude/helpers/memory.cjs +0 -0
  275. package/packages/@monomind/cli/.claude/helpers/metrics-db.mjs +0 -0
  276. package/packages/@monomind/cli/.claude/helpers/monolean-activate.cjs +0 -0
  277. package/packages/@monomind/cli/.claude/helpers/monolean-config.cjs +0 -0
  278. package/packages/@monomind/cli/.claude/helpers/monolean-instructions.cjs +0 -0
  279. package/packages/@monomind/cli/.claude/helpers/monolean-propagate.cjs +0 -0
  280. package/packages/@monomind/cli/.claude/helpers/monolean-tracker.cjs +0 -0
  281. package/packages/@monomind/cli/.claude/helpers/router.cjs +0 -0
  282. package/packages/@monomind/cli/.claude/helpers/session.cjs +0 -0
  283. package/packages/@monomind/cli/.claude/helpers/skill-registry.json +0 -0
  284. package/packages/@monomind/cli/.claude/helpers/statusline.cjs +0 -0
  285. package/packages/@monomind/cli/.claude/helpers/toggle-statusline.cjs +0 -0
  286. package/packages/@monomind/cli/.claude/helpers/token-tracker.cjs +0 -0
  287. package/packages/@monomind/cli/.claude/helpers/utils/agent-registrations.cjs +0 -0
  288. package/packages/@monomind/cli/.claude/helpers/utils/fs-helpers.cjs +0 -0
  289. package/packages/@monomind/cli/.claude/helpers/utils/micro-agents.cjs +0 -0
  290. package/packages/@monomind/cli/.claude/helpers/utils/monograph.cjs +0 -0
  291. package/packages/@monomind/cli/.claude/helpers/utils/system-pressure.cjs +0 -0
  292. package/packages/@monomind/cli/.claude/helpers/utils/telemetry.cjs +0 -0
  293. package/packages/@monomind/cli/.claude/settings.json +0 -0
  294. package/packages/@monomind/cli/.claude/skills/agent-browser-testing/SKILL.md +0 -0
  295. package/packages/@monomind/cli/.claude/skills/agentic-jujutsu/SKILL.md +0 -0
  296. package/packages/@monomind/cli/.claude/skills/github-issue-triage/SKILL.md +0 -0
  297. package/packages/@monomind/cli/.claude/skills/github-repo-recap/SKILL.md +0 -0
  298. package/packages/@monomind/cli/.claude/skills/hive-mind-advanced/SKILL.md +0 -0
  299. package/packages/@monomind/cli/.claude/skills/hooks-automation/SKILL.md +0 -0
  300. package/packages/@monomind/cli/.claude/skills/mastermind-access/SKILL.md +0 -0
  301. package/packages/@monomind/cli/.claude/skills/mastermind-activity/SKILL.md +0 -0
  302. package/packages/@monomind/cli/.claude/skills/mastermind-adapter-manager/SKILL.md +0 -0
  303. package/packages/@monomind/cli/.claude/skills/mastermind-adapters/SKILL.md +0 -0
  304. package/packages/@monomind/cli/.claude/skills/mastermind-agent-detail/SKILL.md +0 -0
  305. package/packages/@monomind/cli/.claude/skills/mastermind-agent-select/SKILL.md +0 -0
  306. package/packages/@monomind/cli/.claude/skills/mastermind-agents/SKILL.md +0 -0
  307. package/packages/@monomind/cli/.claude/skills/mastermind-approval-detail/SKILL.md +0 -0
  308. package/packages/@monomind/cli/.claude/skills/mastermind-approvev1/SKILL.md +0 -0
  309. package/packages/@monomind/cli/.claude/skills/mastermind-architect/SKILL.md +0 -0
  310. package/packages/@monomind/cli/.claude/skills/mastermind-autodev/SKILL.md +0 -0
  311. package/packages/@monomind/cli/.claude/skills/mastermind-backup/SKILL.md +0 -0
  312. package/packages/@monomind/cli/.claude/skills/mastermind-bootstrap/SKILL.md +0 -0
  313. package/packages/@monomind/cli/.claude/skills/mastermind-budgets/SKILL.md +0 -0
  314. package/packages/@monomind/cli/.claude/skills/mastermind-build/SKILL.md +0 -0
  315. package/packages/@monomind/cli/.claude/skills/mastermind-companies/SKILL.md +0 -0
  316. package/packages/@monomind/cli/.claude/skills/mastermind-content/SKILL.md +0 -0
  317. package/packages/@monomind/cli/.claude/skills/mastermind-costs/SKILL.md +0 -0
  318. package/packages/@monomind/cli/.claude/skills/mastermind-createorg/SKILL.md +0 -0
  319. package/packages/@monomind/cli/.claude/skills/mastermind-debug/SKILL.md +0 -0
  320. package/packages/@monomind/cli/.claude/skills/mastermind-delegation/SKILL.md +0 -0
  321. package/packages/@monomind/cli/.claude/skills/mastermind-design/SKILL.md +0 -0
  322. package/packages/@monomind/cli/.claude/skills/mastermind-diagnose/SKILL.md +0 -0
  323. package/packages/@monomind/cli/.claude/skills/mastermind-env/SKILL.md +0 -0
  324. package/packages/@monomind/cli/.claude/skills/mastermind-environments/SKILL.md +0 -0
  325. package/packages/@monomind/cli/.claude/skills/mastermind-execute/SKILL.md +0 -0
  326. package/packages/@monomind/cli/.claude/skills/mastermind-export/SKILL.md +0 -0
  327. package/packages/@monomind/cli/.claude/skills/mastermind-finance/SKILL.md +0 -0
  328. package/packages/@monomind/cli/.claude/skills/mastermind-finish/SKILL.md +0 -0
  329. package/packages/@monomind/cli/.claude/skills/mastermind-goal-detail/SKILL.md +0 -0
  330. package/packages/@monomind/cli/.claude/skills/mastermind-goals/SKILL.md +0 -0
  331. package/packages/@monomind/cli/.claude/skills/mastermind-heartbeatv1/SKILL.md +0 -0
  332. package/packages/@monomind/cli/.claude/skills/mastermind-idea/SKILL.md +0 -0
  333. package/packages/@monomind/cli/.claude/skills/mastermind-import/SKILL.md +0 -0
  334. package/packages/@monomind/cli/.claude/skills/mastermind-inbox/SKILL.md +0 -0
  335. package/packages/@monomind/cli/.claude/skills/mastermind-instance/SKILL.md +0 -0
  336. package/packages/@monomind/cli/.claude/skills/mastermind-instance-settings/SKILL.md +0 -0
  337. package/packages/@monomind/cli/.claude/skills/mastermind-intake/SKILL.md +0 -0
  338. package/packages/@monomind/cli/.claude/skills/mastermind-invite-landing/SKILL.md +0 -0
  339. package/packages/@monomind/cli/.claude/skills/mastermind-invites/SKILL.md +0 -0
  340. package/packages/@monomind/cli/.claude/skills/mastermind-issue-detail/SKILL.md +0 -0
  341. package/packages/@monomind/cli/.claude/skills/mastermind-issues/SKILL.md +0 -0
  342. package/packages/@monomind/cli/.claude/skills/mastermind-join-queue/SKILL.md +0 -0
  343. package/packages/@monomind/cli/.claude/skills/mastermind-liveness/SKILL.md +0 -0
  344. package/packages/@monomind/cli/.claude/skills/mastermind-marketing/SKILL.md +0 -0
  345. package/packages/@monomind/cli/.claude/skills/mastermind-marketing/references/copywriting-frameworks.md +0 -0
  346. package/packages/@monomind/cli/.claude/skills/mastermind-marketing/references/persuasion-psychology.md +0 -0
  347. package/packages/@monomind/cli/.claude/skills/mastermind-memory/SKILL.md +0 -0
  348. package/packages/@monomind/cli/.claude/skills/mastermind-monitor/SKILL.md +0 -0
  349. package/packages/@monomind/cli/.claude/skills/mastermind-monotask/SKILL.md +0 -0
  350. package/packages/@monomind/cli/.claude/skills/mastermind-my-issues/SKILL.md +0 -0
  351. package/packages/@monomind/cli/.claude/skills/mastermind-new-agent/SKILL.md +0 -0
  352. package/packages/@monomind/cli/.claude/skills/mastermind-ops/SKILL.md +0 -0
  353. package/packages/@monomind/cli/.claude/skills/mastermind-org-chart/SKILL.md +0 -0
  354. package/packages/@monomind/cli/.claude/skills/mastermind-org-settings/SKILL.md +0 -0
  355. package/packages/@monomind/cli/.claude/skills/mastermind-orgs/SKILL.md +0 -0
  356. package/packages/@monomind/cli/.claude/skills/mastermind-orgstatus/SKILL.md +0 -0
  357. package/packages/@monomind/cli/.claude/skills/mastermind-plan/SKILL.md +0 -0
  358. package/packages/@monomind/cli/.claude/skills/mastermind-plan-to-tasks/SKILL.md +0 -0
  359. package/packages/@monomind/cli/.claude/skills/mastermind-plugin-manager/SKILL.md +0 -0
  360. package/packages/@monomind/cli/.claude/skills/mastermind-plugin-settings/SKILL.md +0 -0
  361. package/packages/@monomind/cli/.claude/skills/mastermind-plugins/SKILL.md +0 -0
  362. package/packages/@monomind/cli/.claude/skills/mastermind-profile/SKILL.md +0 -0
  363. package/packages/@monomind/cli/.claude/skills/mastermind-project-detail/SKILL.md +0 -0
  364. package/packages/@monomind/cli/.claude/skills/mastermind-project-workspace/SKILL.md +0 -0
  365. package/packages/@monomind/cli/.claude/skills/mastermind-projects/SKILL.md +0 -0
  366. package/packages/@monomind/cli/.claude/skills/mastermind-protocol/SKILL.md +0 -0
  367. package/packages/@monomind/cli/.claude/skills/mastermind-receive-review/SKILL.md +0 -0
  368. package/packages/@monomind/cli/.claude/skills/mastermind-release/SKILL.md +0 -0
  369. package/packages/@monomind/cli/.claude/skills/mastermind-repeat/SKILL.md +0 -0
  370. package/packages/@monomind/cli/.claude/skills/mastermind-research/SKILL.md +0 -0
  371. package/packages/@monomind/cli/.claude/skills/mastermind-review/SKILL.md +0 -0
  372. package/packages/@monomind/cli/.claude/skills/mastermind-routine-detail/SKILL.md +0 -0
  373. package/packages/@monomind/cli/.claude/skills/mastermind-routines/SKILL.md +0 -0
  374. package/packages/@monomind/cli/.claude/skills/mastermind-runorg/SKILL.md +0 -0
  375. package/packages/@monomind/cli/.claude/skills/mastermind-runorgv1/SKILL.md +0 -0
  376. package/packages/@monomind/cli/.claude/skills/mastermind-sales/SKILL.md +0 -0
  377. package/packages/@monomind/cli/.claude/skills/mastermind-search/SKILL.md +0 -0
  378. package/packages/@monomind/cli/.claude/skills/mastermind-secrets/SKILL.md +0 -0
  379. package/packages/@monomind/cli/.claude/skills/mastermind-skill-builder/SKILL.md +0 -0
  380. package/packages/@monomind/cli/.claude/skills/mastermind-skills/SKILL.md +0 -0
  381. package/packages/@monomind/cli/.claude/skills/mastermind-stoporg/SKILL.md +0 -0
  382. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/SKILL.md +0 -0
  383. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/code-quality-reviewer-prompt.md +0 -0
  384. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/final-reviewer-prompt.md +0 -0
  385. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/implementer-prompt.md +0 -0
  386. package/packages/@monomind/cli/.claude/skills/mastermind-taskdev/spec-reviewer-prompt.md +0 -0
  387. package/packages/@monomind/cli/.claude/skills/mastermind-tasks/SKILL.md +0 -0
  388. package/packages/@monomind/cli/.claude/skills/mastermind-tdd/SKILL.md +0 -0
  389. package/packages/@monomind/cli/.claude/skills/mastermind-techport/SKILL.md +0 -0
  390. package/packages/@monomind/cli/.claude/skills/mastermind-threads/SKILL.md +0 -0
  391. package/packages/@monomind/cli/.claude/skills/mastermind-tree-control/SKILL.md +0 -0
  392. package/packages/@monomind/cli/.claude/skills/mastermind-verify/SKILL.md +0 -0
  393. package/packages/@monomind/cli/.claude/skills/mastermind-wiki/SKILL.md +0 -0
  394. package/packages/@monomind/cli/.claude/skills/mastermind-workspace-detail/SKILL.md +0 -0
  395. package/packages/@monomind/cli/.claude/skills/mastermind-workspaces/SKILL.md +0 -0
  396. package/packages/@monomind/cli/.claude/skills/mastermind-worktree/SKILL.md +0 -0
  397. package/packages/@monomind/cli/.claude/skills/monolean/SKILL.md +0 -0
  398. package/packages/@monomind/cli/.claude/skills/monolean-audit/SKILL.md +0 -0
  399. package/packages/@monomind/cli/.claude/skills/monolean-debt/SKILL.md +0 -0
  400. package/packages/@monomind/cli/.claude/skills/monolean-help/SKILL.md +0 -0
  401. package/packages/@monomind/cli/.claude/skills/monolean-review/SKILL.md +0 -0
  402. package/packages/@monomind/cli/.claude/skills/monomind/browse-agentcore.md +0 -0
  403. package/packages/@monomind/cli/.claude/skills/monomind/browse-electron.md +0 -0
  404. package/packages/@monomind/cli/.claude/skills/monomind/browse-qa.md +0 -0
  405. package/packages/@monomind/cli/.claude/skills/monomind/browse-references/authentication.md +0 -0
  406. package/packages/@monomind/cli/.claude/skills/monomind/browse-references/trust-boundaries.md +0 -0
  407. package/packages/@monomind/cli/.claude/skills/monomind/browse-references/video-recording.md +0 -0
  408. package/packages/@monomind/cli/.claude/skills/monomind/browse-slack.md +0 -0
  409. package/packages/@monomind/cli/.claude/skills/monomind/browse-vercel.md +0 -0
  410. package/packages/@monomind/cli/.claude/skills/monomind/browse.md +0 -0
  411. package/packages/@monomind/cli/.claude/skills/monomotion/SKILL.md +0 -0
  412. package/packages/@monomind/cli/.claude/skills/monomotion/rules/api-control.md +0 -0
  413. package/packages/@monomind/cli/.claude/skills/monomotion/rules/effects.md +0 -0
  414. package/packages/@monomind/cli/.claude/skills/monomotion/rules/integration.md +0 -0
  415. package/packages/@monomind/cli/.claude/skills/monomotion/rules/scroll.md +0 -0
  416. package/packages/@monomind/cli/.claude/skills/monomotion/rules/sequencing.md +0 -0
  417. package/packages/@monomind/cli/.claude/skills/monomotion/rules/svg.md +0 -0
  418. package/packages/@monomind/cli/.claude/skills/monomotion/rules/text.md +0 -0
  419. package/packages/@monomind/cli/.claude/skills/pair-programming/SKILL.md +0 -0
  420. package/packages/@monomind/cli/.claude/skills/performance-analysis/SKILL.md +0 -0
  421. package/packages/@monomind/cli/.claude/skills/skill-builder/SKILL.md +0 -0
  422. package/packages/@monomind/cli/.claude/skills/specialagent/SKILL.md +0 -0
  423. package/packages/@monomind/cli/.claude/skills/stop-slop/SKILL.md +0 -0
  424. package/packages/@monomind/cli/.claude/skills/stop-slop/references/examples.md +0 -0
  425. package/packages/@monomind/cli/.claude/skills/stop-slop/references/phrases.md +0 -0
  426. package/packages/@monomind/cli/.claude/skills/stop-slop/references/structures.md +0 -0
  427. package/packages/@monomind/cli/.claude/skills/swarm-advanced/SKILL.md +0 -0
  428. package/packages/@monomind/cli/.claude/skills/swarm-orchestration/SKILL.md +0 -0
  429. package/packages/@monomind/cli/.claude/skills/verification-quality/SKILL.md +0 -0
  430. package/packages/@monomind/cli/README.md +0 -0
  431. package/packages/@monomind/cli/bin/cli.js +17 -1
  432. package/packages/@monomind/cli/bin/preinstall.cjs +0 -0
  433. package/packages/@monomind/cli/dist/src/commands/doctor-project-checks.d.ts +3 -0
  434. package/packages/@monomind/cli/dist/src/commands/doctor-project-checks.js +81 -8
  435. package/packages/@monomind/cli/dist/src/commands/doctor.js +16 -2
  436. package/packages/@monomind/cli/dist/src/commands/memory-crud.js +15 -5
  437. package/packages/@monomind/cli/dist/src/commands/security-misc.js +7 -2
  438. package/packages/@monomind/cli/dist/src/init/helpers-generator.js +5 -0
  439. package/packages/@monomind/cli/dist/src/mcp-client.js +0 -2
  440. package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.js +1 -1
  441. package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.d.ts +2 -0
  442. package/packages/@monomind/cli/dist/src/mcp-tools/embeddings-tools.js +11 -1
  443. package/packages/@monomind/cli/dist/src/mcp-tools/guidance-tools.js +17 -17
  444. package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.d.ts +2 -0
  445. package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.js +14 -2
  446. package/packages/@monomind/cli/dist/src/mcp-tools/index.d.ts +0 -1
  447. package/packages/@monomind/cli/dist/src/mcp-tools/index.js +0 -1
  448. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +1 -2
  449. package/packages/@monomind/cli/dist/src/mcp-tools/neural-tools.js +1 -1
  450. package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.js +2 -2
  451. package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.d.ts +2 -0
  452. package/packages/@monomind/cli/dist/src/mcp-tools/transfer-tools.js +11 -1
  453. package/packages/@monomind/cli/dist/src/ui/dashboard.html +48 -133
  454. package/packages/@monomind/cli/dist/src/utils/cosine-similarity.d.ts +2 -2
  455. package/packages/@monomind/cli/dist/src/utils/cosine-similarity.js +2 -2
  456. package/packages/@monomind/cli/package.json +1 -1
  457. package/packages/@monomind/cli/scripts/deploy-ipfs-node.sh +0 -0
  458. package/packages/@monomind/cli/scripts/understand-analyze.mjs +0 -0
  459. package/scripts/generate-agent-avatars.mjs +0 -0
  460. package/scripts/growth-content-calendar.mjs +7 -30
  461. package/scripts/ua-enrich.mjs +0 -0
  462. package/scripts/ua-import.mjs +0 -0
  463. package/scripts/verify-appliance.sh +0 -0
  464. package/packages/@monomind/cli/.claude/skills/github-toolkit/SKILL.md +0 -60
  465. package/packages/@monomind/cli/.claude/skills/memory-toolkit/SKILL.md +0 -75
  466. package/packages/@monomind/cli/.claude/skills/monodesign/SKILL.md +0 -257
  467. package/packages/@monomind/cli/.claude/skills/monodesign/adapt.md +0 -53
  468. package/packages/@monomind/cli/.claude/skills/monodesign/agents/monodesign-asset-producer.md +0 -100
  469. package/packages/@monomind/cli/.claude/skills/monodesign/agents/monodesign-manual-edit-applier.md +0 -103
  470. package/packages/@monomind/cli/.claude/skills/monodesign/animate.md +0 -65
  471. package/packages/@monomind/cli/.claude/skills/monodesign/audit.md +0 -89
  472. package/packages/@monomind/cli/.claude/skills/monodesign/bolder.md +0 -50
  473. package/packages/@monomind/cli/.claude/skills/monodesign/clarify.md +0 -64
  474. package/packages/@monomind/cli/.claude/skills/monodesign/colorize.md +0 -68
  475. package/packages/@monomind/cli/.claude/skills/monodesign/craft.md +0 -51
  476. package/packages/@monomind/cli/.claude/skills/monodesign/critique.md +0 -66
  477. package/packages/@monomind/cli/.claude/skills/monodesign/delight.md +0 -47
  478. package/packages/@monomind/cli/.claude/skills/monodesign/distill.md +0 -56
  479. package/packages/@monomind/cli/.claude/skills/monodesign/document.md +0 -83
  480. package/packages/@monomind/cli/.claude/skills/monodesign/extract.md +0 -74
  481. package/packages/@monomind/cli/.claude/skills/monodesign/harden.md +0 -65
  482. package/packages/@monomind/cli/.claude/skills/monodesign/init.md +0 -30
  483. package/packages/@monomind/cli/.claude/skills/monodesign/layout.md +0 -36
  484. package/packages/@monomind/cli/.claude/skills/monodesign/live.md +0 -34
  485. package/packages/@monomind/cli/.claude/skills/monodesign/onboard.md +0 -50
  486. package/packages/@monomind/cli/.claude/skills/monodesign/optimize.md +0 -64
  487. package/packages/@monomind/cli/.claude/skills/monodesign/overdrive.md +0 -56
  488. package/packages/@monomind/cli/.claude/skills/monodesign/polish.md +0 -68
  489. package/packages/@monomind/cli/.claude/skills/monodesign/quieter.md +0 -57
  490. package/packages/@monomind/cli/.claude/skills/monodesign/reference/adapt.md +0 -312
  491. package/packages/@monomind/cli/.claude/skills/monodesign/reference/adapt.native.md +0 -58
  492. package/packages/@monomind/cli/.claude/skills/monodesign/reference/android.md +0 -40
  493. package/packages/@monomind/cli/.claude/skills/monodesign/reference/animate.md +0 -203
  494. package/packages/@monomind/cli/.claude/skills/monodesign/reference/antipatterns-catalog.md +0 -410
  495. package/packages/@monomind/cli/.claude/skills/monodesign/reference/audit.md +0 -135
  496. package/packages/@monomind/cli/.claude/skills/monodesign/reference/audit.native.md +0 -139
  497. package/packages/@monomind/cli/.claude/skills/monodesign/reference/bolder.md +0 -120
  498. package/packages/@monomind/cli/.claude/skills/monodesign/reference/brand-workflow.md +0 -180
  499. package/packages/@monomind/cli/.claude/skills/monodesign/reference/brand.md +0 -108
  500. package/packages/@monomind/cli/.claude/skills/monodesign/reference/clarify.md +0 -288
  501. package/packages/@monomind/cli/.claude/skills/monodesign/reference/codex.md +0 -105
  502. package/packages/@monomind/cli/.claude/skills/monodesign/reference/cognitive-load.md +0 -106
  503. package/packages/@monomind/cli/.claude/skills/monodesign/reference/color-and-contrast.md +0 -105
  504. package/packages/@monomind/cli/.claude/skills/monodesign/reference/colorize.md +0 -257
  505. package/packages/@monomind/cli/.claude/skills/monodesign/reference/component-specs.md +0 -260
  506. package/packages/@monomind/cli/.claude/skills/monodesign/reference/component-states.md +0 -274
  507. package/packages/@monomind/cli/.claude/skills/monodesign/reference/component-system.md +0 -358
  508. package/packages/@monomind/cli/.claude/skills/monodesign/reference/copy-formulas.md +0 -160
  509. package/packages/@monomind/cli/.claude/skills/monodesign/reference/craft.md +0 -123
  510. package/packages/@monomind/cli/.claude/skills/monodesign/reference/critique.md +0 -780
  511. package/packages/@monomind/cli/.claude/skills/monodesign/reference/delight.md +0 -302
  512. package/packages/@monomind/cli/.claude/skills/monodesign/reference/design-principles.md +0 -246
  513. package/packages/@monomind/cli/.claude/skills/monodesign/reference/distill.md +0 -111
  514. package/packages/@monomind/cli/.claude/skills/monodesign/reference/document.md +0 -429
  515. package/packages/@monomind/cli/.claude/skills/monodesign/reference/extract.md +0 -69
  516. package/packages/@monomind/cli/.claude/skills/monodesign/reference/harden.md +0 -347
  517. package/packages/@monomind/cli/.claude/skills/monodesign/reference/heuristics-scoring.md +0 -234
  518. package/packages/@monomind/cli/.claude/skills/monodesign/reference/hooks.md +0 -92
  519. package/packages/@monomind/cli/.claude/skills/monodesign/reference/image-prompts.md +0 -130
  520. package/packages/@monomind/cli/.claude/skills/monodesign/reference/init.md +0 -221
  521. package/packages/@monomind/cli/.claude/skills/monodesign/reference/interaction-design.md +0 -189
  522. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ios.md +0 -45
  523. package/packages/@monomind/cli/.claude/skills/monodesign/reference/layout.md +0 -185
  524. package/packages/@monomind/cli/.claude/skills/monodesign/reference/live.md +0 -710
  525. package/packages/@monomind/cli/.claude/skills/monodesign/reference/motion-design.md +0 -109
  526. package/packages/@monomind/cli/.claude/skills/monodesign/reference/onboard.md +0 -234
  527. package/packages/@monomind/cli/.claude/skills/monodesign/reference/optimize.md +0 -258
  528. package/packages/@monomind/cli/.claude/skills/monodesign/reference/overdrive.md +0 -130
  529. package/packages/@monomind/cli/.claude/skills/monodesign/reference/personas.md +0 -179
  530. package/packages/@monomind/cli/.claude/skills/monodesign/reference/polish.md +0 -241
  531. package/packages/@monomind/cli/.claude/skills/monodesign/reference/pre-delivery-checklist.md +0 -108
  532. package/packages/@monomind/cli/.claude/skills/monodesign/reference/product.md +0 -60
  533. package/packages/@monomind/cli/.claude/skills/monodesign/reference/quieter.md +0 -99
  534. package/packages/@monomind/cli/.claude/skills/monodesign/reference/responsive-design.md +0 -114
  535. package/packages/@monomind/cli/.claude/skills/monodesign/reference/shape.md +0 -165
  536. package/packages/@monomind/cli/.claude/skills/monodesign/reference/spatial-design.md +0 -100
  537. package/packages/@monomind/cli/.claude/skills/monodesign/reference/teach.md +0 -10
  538. package/packages/@monomind/cli/.claude/skills/monodesign/reference/token-architecture.md +0 -222
  539. package/packages/@monomind/cli/.claude/skills/monodesign/reference/typeset.md +0 -301
  540. package/packages/@monomind/cli/.claude/skills/monodesign/reference/typography.md +0 -159
  541. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ux-research.md +0 -143
  542. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ux-rules.md +0 -211
  543. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ux-writing.md +0 -107
  544. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/command-metadata.json +0 -94
  545. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/context-signals.mjs +0 -260
  546. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/context.mjs +0 -1061
  547. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/critique-storage.mjs +0 -416
  548. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detect-csp.mjs +0 -198
  549. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detect.mjs +0 -33
  550. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/browser/injected/index.mjs +0 -1962
  551. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/cli/main.mjs +0 -321
  552. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/design-system.mjs +0 -814
  553. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/detect-antipatterns-browser.js +0 -5601
  554. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/detect-antipatterns.mjs +0 -50
  555. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/browser/detect-url.mjs +0 -259
  556. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/browser/drivers.mjs +0 -258
  557. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/regex/detect-text.mjs +0 -636
  558. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/static-html/css-cascade.mjs +0 -1015
  559. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/static-html/detect-html.mjs +0 -253
  560. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/visual/screenshot-contrast.mjs +0 -198
  561. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/findings.mjs +0 -12
  562. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/fix/css-regions.mjs +0 -181
  563. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/fix/fixers.mjs +0 -373
  564. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/fix/index.mjs +0 -426
  565. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/node/file-system.mjs +0 -198
  566. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/profile/profiler.mjs +0 -166
  567. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/registry/antipatterns.mjs +0 -563
  568. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/rules/checks.mjs +0 -2995
  569. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/color.mjs +0 -124
  570. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/constants.mjs +0 -101
  571. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/fonts.mjs +0 -30
  572. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/inline-ignores.mjs +0 -148
  573. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/page.mjs +0 -7
  574. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-admin.mjs +0 -661
  575. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-before-edit.mjs +0 -516
  576. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-lib.mjs +0 -1776
  577. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook.mjs +0 -61
  578. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/design-parser.mjs +0 -842
  579. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/is-generated.mjs +0 -69
  580. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/monodesign-config.mjs +0 -640
  581. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/monodesign-paths.mjs +0 -129
  582. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/provider.mjs +0 -4
  583. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/target-args.mjs +0 -42
  584. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/browser-script-parts.mjs +0 -50
  585. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/completion.mjs +0 -19
  586. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/event-validation.mjs +0 -137
  587. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/insert-ui.mjs +0 -458
  588. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-apply.mjs +0 -939
  589. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-edit-routes.mjs +0 -357
  590. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-edits-buffer.mjs +0 -152
  591. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/session-store.mjs +0 -293
  592. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/svelte-component.mjs +0 -826
  593. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/sveltekit-adapter.mjs +0 -274
  594. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/ui-core.mjs +0 -180
  595. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/vocabulary.mjs +0 -36
  596. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-accept.mjs +0 -812
  597. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser-dom.js +0 -146
  598. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser-session.js +0 -123
  599. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser.js +0 -11240
  600. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-commit-manual-edits.mjs +0 -1241
  601. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-complete.mjs +0 -75
  602. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-copy-edit-agent.mjs +0 -683
  603. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-discard-manual-edits.mjs +0 -51
  604. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-inject.mjs +0 -583
  605. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-insert.mjs +0 -272
  606. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-manual-edit-evidence.mjs +0 -363
  607. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-poll.mjs +0 -384
  608. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-resume.mjs +0 -94
  609. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-server.mjs +0 -1137
  610. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-status.mjs +0 -61
  611. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-target.mjs +0 -30
  612. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-wrap.mjs +0 -894
  613. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live.mjs +0 -297
  614. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/modern-screenshot.umd.js +0 -14
  615. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/palette.mjs +0 -633
  616. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/pin.mjs +0 -221
  617. package/packages/@monomind/cli/.claude/skills/monodesign/shape.md +0 -71
  618. package/packages/@monomind/cli/.claude/skills/monodesign/teach.md +0 -18
  619. package/packages/@monomind/cli/.claude/skills/monodesign/typeset.md +0 -59
  620. package/packages/@monomind/cli/dist/src/mcp-tools/coherence/causal-infer.d.ts +0 -15
  621. package/packages/@monomind/cli/dist/src/mcp-tools/coherence/causal-infer.js +0 -333
  622. package/packages/@monomind/cli/dist/src/mcp-tools/coherence/coherence-check.d.ts +0 -15
  623. package/packages/@monomind/cli/dist/src/mcp-tools/coherence/coherence-check.js +0 -188
  624. package/packages/@monomind/cli/dist/src/mcp-tools/coherence/consensus-verify.d.ts +0 -14
  625. package/packages/@monomind/cli/dist/src/mcp-tools/coherence/consensus-verify.js +0 -305
  626. package/packages/@monomind/cli/dist/src/mcp-tools/coherence/memory-gate.d.ts +0 -16
  627. package/packages/@monomind/cli/dist/src/mcp-tools/coherence/memory-gate.js +0 -279
  628. package/packages/@monomind/cli/dist/src/mcp-tools/coherence/quantum-topology.d.ts +0 -15
  629. package/packages/@monomind/cli/dist/src/mcp-tools/coherence/quantum-topology.js +0 -400
  630. package/packages/@monomind/cli/dist/src/mcp-tools/coherence/spectral-analyze.d.ts +0 -14
  631. package/packages/@monomind/cli/dist/src/mcp-tools/coherence/spectral-analyze.js +0 -312
  632. package/packages/@monomind/cli/dist/src/mcp-tools/coherence/types.d.ts +0 -430
  633. package/packages/@monomind/cli/dist/src/mcp-tools/coherence/types.js +0 -144
  634. package/packages/@monomind/cli/dist/src/mcp-tools/coherence-tools.d.ts +0 -9
  635. package/packages/@monomind/cli/dist/src/mcp-tools/coherence-tools.js +0 -25
  636. package/packages/@monomind/cli/dist/src/mcp-tools/daa-tools.d.ts +0 -13
  637. package/packages/@monomind/cli/dist/src/mcp-tools/daa-tools.js +0 -553
@@ -1,1137 +0,0 @@
1
- #!/usr/bin/env node
2
- /**
3
- * Live variant mode server (self-contained, zero dependencies).
4
- *
5
- * Serves the browser script (/live.js), the detection overlay (/detect.js),
6
- * uses Server-Sent Events (SSE) for server→browser push, and HTTP POST for
7
- * browser→server events. Agent communicates via HTTP long-poll (/poll).
8
- *
9
- * Usage:
10
- * node <scripts_path>/live-server.mjs # start
11
- * node <scripts_path>/live-server.mjs stop # stop + remove injected live.js tag
12
- * node <scripts_path>/live-server.mjs stop --keep-inject # stop only
13
- * node <scripts_path>/live-server.mjs --help
14
- */
15
-
16
- import http from 'node:http';
17
- import { randomUUID } from 'node:crypto';
18
- import { spawn, execFileSync } from 'node:child_process';
19
- import fs from 'node:fs';
20
- import path from 'node:path';
21
- import net from 'node:net';
22
- import { fileURLToPath } from 'node:url';
23
- import { parseDesignMd } from './lib/design-parser.mjs';
24
- import { loadContext } from './context.mjs';
25
- import {
26
- assembleLiveBrowserScript,
27
- assertLiveBrowserScriptParts,
28
- readLiveBrowserScriptParts,
29
- resolveLiveBrowserScriptParts,
30
- } from './live/browser-script-parts.mjs';
31
- import { createLiveSessionStore } from './live/session-store.mjs';
32
- import { validateEvent } from './live/event-validation.mjs';
33
- import { createManualEditRoutes } from './live/manual-edit-routes.mjs';
34
- import { LIVE_COMMANDS } from './live/vocabulary.mjs';
35
- import {
36
- getDesignSidecarPath,
37
- getLiveDir,
38
- getLiveAnnotationsDir,
39
- MONODESIGN_COMMAND_PREFIX,
40
- readLiveServerInfo,
41
- removeLiveServerInfo,
42
- resolveDesignSidecarPath,
43
- writeLiveServerInfo,
44
- } from './lib/monodesign-paths.mjs';
45
- import { countByPage as countPendingByPage } from './live/manual-edits-buffer.mjs';
46
- import {
47
- createManualApplyController,
48
- summarizeManualApplyFailures,
49
- } from './live/manual-apply.mjs';
50
- import {
51
- applyDeferredSvelteComponentAccepts,
52
- removeAllSvelteComponentSessions,
53
- } from './live/svelte-component.mjs';
54
-
55
- const __dirname = path.dirname(fileURLToPath(import.meta.url));
56
- // PRODUCT.md / DESIGN.md live wherever context.mjs resolves. The generated
57
- // DESIGN sidecar is project-local at .monodesign/design.json, with legacy
58
- // DESIGN.json fallback for existing projects.
59
- const PROJECT_CONTEXT = loadContext(process.cwd());
60
- const CONTEXT_DIR = PROJECT_CONTEXT.contextDir;
61
- const DESIGN_MD_PATH = PROJECT_CONTEXT.designPath
62
- ? path.resolve(process.cwd(), PROJECT_CONTEXT.designPath)
63
- : null;
64
- const DEFAULT_POLL_TIMEOUT = 600_000; // 10 min — agent re-polls on timeout anyway
65
- const SSE_HEARTBEAT_INTERVAL = 30_000; // keepalive ping every 30s
66
-
67
- // ---------------------------------------------------------------------------
68
- // Port detection
69
- // ---------------------------------------------------------------------------
70
-
71
- async function findOpenPort(start = 8400) {
72
- return new Promise((resolve) => {
73
- const srv = net.createServer();
74
- srv.listen(start, '127.0.0.1', () => {
75
- const port = srv.address().port;
76
- srv.close(() => resolve(port));
77
- });
78
- srv.on('error', () => resolve(findOpenPort(start + 1)));
79
- });
80
- }
81
-
82
- // ---------------------------------------------------------------------------
83
- // Session state
84
- // ---------------------------------------------------------------------------
85
-
86
- const state = {
87
- token: null,
88
- port: null,
89
- sseClients: new Set(), // SSE response objects (server→browser push)
90
- pendingEvents: [], // browser events waiting for agent ack ({ event, leaseUntil })
91
- pendingPolls: [], // agent poll callbacks waiting for browser events
92
- nextEventSeq: 1,
93
- lastAgentPollingBroadcast: null,
94
- exitTimer: null,
95
- sessionDir: null, // per-session tmp dir for annotation screenshots
96
- sessionStore: null,
97
- leaseTimer: null,
98
- manualEditActivity: null,
99
- nextManualEditSeq: 1,
100
- // Deferreds for in-flight chat-routed Apply events. Keyed by event id; each
101
- // entry is resolved when the chat agent POSTs an ack carrying the batch
102
- // result, or rejected when the hard timeout fires.
103
- pendingApplyDeferreds: new Map(),
104
- // Updated whenever a /poll long-poll request arrives or is resolved with an
105
- // event. Used to detect "a chat agent is likely attached" without requiring
106
- // a poll to be parked at the exact moment we dispatch.
107
- lastPollAt: 0,
108
- timedOutApplyIds: new Map(),
109
- };
110
-
111
- const CHAT_POLL_FRESHNESS_MS = 60_000;
112
- const POLL_LEASE_EXPIRY_TIMER_GRACE_MS = 2;
113
- const DEBUG_MANUAL_EDIT_EVENTS = /^(1|true|yes)$/i.test(process.env.MONODESIGN_LIVE_DEBUG_EVENTS || '');
114
-
115
- const manualApply = createManualApplyController({
116
- pendingEvents: state.pendingEvents,
117
- pendingApplyDeferreds: state.pendingApplyDeferreds,
118
- timedOutApplyIds: state.timedOutApplyIds,
119
- enqueueEvent,
120
- acknowledgePendingEvent,
121
- flushPendingPolls,
122
- recordManualEditActivity,
123
- cwd: () => process.cwd(),
124
- });
125
-
126
- const manualEditRoutes = createManualEditRoutes({
127
- getToken: () => state.token,
128
- manualApply,
129
- recordManualEditActivity,
130
- getManualEditStatus,
131
- chatAgentLikelyActive,
132
- cwd: () => process.cwd(),
133
- env: () => process.env,
134
- });
135
-
136
- function chatAgentLikelyActive() {
137
- if (state.pendingPolls.length > 0) return true;
138
- if (!state.lastPollAt) return false;
139
- return Date.now() - state.lastPollAt < CHAT_POLL_FRESHNESS_MS;
140
- }
141
-
142
- // Cap per-annotation upload size. A full 1920×1080 PNG is typically <1 MB;
143
- // cap at 10 MB to guard against runaway writes from a misbehaving client.
144
- const MAX_ANNOTATION_BYTES = 10 * 1024 * 1024;
145
-
146
- function enqueueEvent(event) {
147
- if (!event || (event.id && state.pendingEvents.some((entry) => entry.event?.id === event.id && entry.event?.type === event.type))) return;
148
- state.pendingEvents.push({ event, leaseUntil: 0, seq: state.nextEventSeq++ });
149
- flushPendingPolls();
150
- }
151
-
152
- function restorePendingEventsFromStore() {
153
- if (!state.sessionStore) return;
154
- for (const snapshot of state.sessionStore.listActiveSessions()) {
155
- if (snapshot.pendingEvent) enqueueEvent(snapshot.pendingEvent);
156
- }
157
- }
158
-
159
- function findAvailablePendingEvent(now = Date.now()) {
160
- for (const entry of state.pendingEvents) {
161
- if (entry.leaseUntil && entry.leaseUntil > now) continue;
162
- return entry;
163
- }
164
- return null;
165
- }
166
-
167
- function leaseEvent(entry, leaseMs) {
168
- if (!entry.event?.id) {
169
- const idx = state.pendingEvents.indexOf(entry);
170
- if (idx !== -1) state.pendingEvents.splice(idx, 1);
171
- return entry.event;
172
- }
173
- entry.leaseUntil = Date.now() + leaseMs;
174
- scheduleLeaseFlush();
175
- broadcastAgentPollingIfChanged();
176
- return entry.event;
177
- }
178
-
179
- function acknowledgePendingEvent(id) {
180
- if (!id) return false;
181
- const idx = state.pendingEvents.findIndex((entry) => entry.event?.id === id);
182
- if (idx === -1) return false;
183
- const acknowledged = state.pendingEvents[idx].event;
184
- state.pendingEvents.splice(idx, 1);
185
- scheduleLeaseFlush();
186
- broadcastAgentPollingIfChanged();
187
- return acknowledged;
188
- }
189
-
190
- function findPendingEventById(id) {
191
- if (!id) return null;
192
- const entry = state.pendingEvents.find((item) => item.event?.id === id);
193
- return entry?.event || null;
194
- }
195
-
196
- function summarizePendingEventForStatus(entry) {
197
- const event = entry.event || {};
198
- const summary = {
199
- id: event.id,
200
- type: event.type,
201
- leased: !!(entry.leaseUntil && entry.leaseUntil > Date.now()),
202
- leaseUntil: entry.leaseUntil || null,
203
- };
204
- if (event.type === 'manual_edit_apply') {
205
- summary.pageUrl = event.pageUrl || null;
206
- summary.chunk = event.chunk || null;
207
- summary.repair = event.repair || null;
208
- summary.evidencePath = event.evidencePath || null;
209
- summary.agentAction = event.agentAction || manualApply.buildAgentAction(event);
210
- summary.manualApplySummary = manualApply.summarizeEvent(event, manualApply.getDeferred(event.id)?.batch || event.batch);
211
- }
212
- return summary;
213
- }
214
-
215
- function summarizeActiveSessionForClient(snapshot = {}) {
216
- return {
217
- id: snapshot.id,
218
- phase: snapshot.phase,
219
- pageUrl: snapshot.pageUrl ?? null,
220
- sourceFile: snapshot.sourceFile ?? null,
221
- previewFile: snapshot.previewFile ?? null,
222
- previewMode: snapshot.previewMode ?? null,
223
- expectedVariants: snapshot.expectedVariants ?? 0,
224
- arrivedVariants: snapshot.arrivedVariants ?? 0,
225
- visibleVariant: snapshot.visibleVariant ?? null,
226
- checkpointRevision: snapshot.checkpointRevision ?? 0,
227
- paramValues: snapshot.paramValues || {},
228
- };
229
- }
230
-
231
- function activeSessionSummaries() {
232
- if (!state.sessionStore) return [];
233
- return state.sessionStore.listActiveSessions().map((snapshot) => summarizeActiveSessionForClient(snapshot));
234
- }
235
-
236
- function cancelQueuedAnonymousExitEvents() {
237
- let removed = 0;
238
- for (let i = state.pendingEvents.length - 1; i >= 0; i -= 1) {
239
- const event = state.pendingEvents[i]?.event;
240
- if (event?.type !== 'exit' || event.id) continue;
241
- state.pendingEvents.splice(i, 1);
242
- removed += 1;
243
- }
244
- if (removed > 0) {
245
- scheduleLeaseFlush();
246
- broadcastAgentPollingIfChanged();
247
- }
248
- return removed;
249
- }
250
-
251
- function scheduleLeaseFlush() {
252
- if (state.leaseTimer) {
253
- clearTimeout(state.leaseTimer);
254
- state.leaseTimer = null;
255
- }
256
- const now = Date.now();
257
- const nextLeaseUntil = state.pendingEvents
258
- .map((entry) => entry.leaseUntil || 0)
259
- .filter((leaseUntil) => leaseUntil > now)
260
- .sort((a, b) => a - b)[0];
261
- if (!nextLeaseUntil) return;
262
- state.leaseTimer = setTimeout(() => {
263
- state.leaseTimer = null;
264
- flushPendingPolls();
265
- broadcastAgentPollingIfChanged();
266
- }, Math.max(0, nextLeaseUntil - now + POLL_LEASE_EXPIRY_TIMER_GRACE_MS));
267
- }
268
-
269
- function flushPendingPolls() {
270
- let changed = false;
271
- while (state.pendingPolls.length > 0) {
272
- const entry = findAvailablePendingEvent();
273
- if (!entry) {
274
- scheduleLeaseFlush();
275
- broadcastAgentPollingIfChanged();
276
- return;
277
- }
278
- const poll = state.pendingPolls.shift();
279
- poll.resolve(leaseEvent(entry, poll.leaseMs));
280
- changed = true;
281
- }
282
- scheduleLeaseFlush();
283
- if (changed) broadcastAgentPollingIfChanged();
284
- }
285
-
286
- function agentPollingConnected() {
287
- const now = Date.now();
288
- return state.pendingPolls.length > 0
289
- || state.pendingEvents.some((entry) => entry.leaseUntil && entry.leaseUntil > now);
290
- }
291
-
292
- function broadcastAgentPollingIfChanged() {
293
- const connected = agentPollingConnected();
294
- if (state.lastAgentPollingBroadcast === connected) return;
295
- state.lastAgentPollingBroadcast = connected;
296
- broadcast({ type: 'agent_polling', connected });
297
- }
298
-
299
- /** Push a message to all connected SSE clients. */
300
- function broadcast(msg) {
301
- const data = 'data: ' + JSON.stringify(msg) + '\n\n';
302
- for (const res of state.sseClients) {
303
- try { res.write(data); } catch { /* client gone */ }
304
- }
305
- }
306
-
307
- function recordManualEditActivity(type, details = {}) {
308
- const entry = {
309
- seq: state.nextManualEditSeq++,
310
- type,
311
- ts: new Date().toISOString(),
312
- ...details,
313
- };
314
- state.manualEditActivity = entry;
315
- if (DEBUG_MANUAL_EDIT_EVENTS) {
316
- try {
317
- const filePath = path.join(getLiveDir(process.cwd()), 'manual-edit-events.jsonl');
318
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
319
- fs.appendFileSync(filePath, JSON.stringify(entry) + '\n');
320
- } catch {
321
- /* diagnostics are best-effort; never block live mode on observability */
322
- }
323
- }
324
- broadcast(entry);
325
- return entry;
326
- }
327
-
328
- function getManualEditStatus() {
329
- try {
330
- const { totalCount, perPage } = countPendingByPage(process.cwd());
331
- return { totalCount, perPage, lastActivity: state.manualEditActivity };
332
- } catch (err) {
333
- return {
334
- totalCount: null,
335
- perPage: {},
336
- lastActivity: state.manualEditActivity,
337
- error: err.message,
338
- };
339
- }
340
- }
341
-
342
- // ---------------------------------------------------------------------------
343
- // Load scripts
344
- // ---------------------------------------------------------------------------
345
-
346
- function loadBrowserScripts() {
347
- // Detection script: prefer the skill-bundled detector, then fall back to
348
- // source/npm package locations for local development and older installs.
349
- // This one IS cached — detect.js rarely changes during a session.
350
- const detectPaths = [
351
- path.join(__dirname, 'detector', 'detect-antipatterns-browser.js'),
352
- path.join(__dirname, '..', '..', 'cli', 'engine', 'detect-antipatterns-browser.js'),
353
- path.join(__dirname, '..', '..', '..', '..', 'cli', 'engine', 'detect-antipatterns-browser.js'),
354
- path.join(process.cwd(), 'node_modules', 'monodesign', 'cli', 'engine', 'detect-antipatterns-browser.js'),
355
- ];
356
- let detectScript = '';
357
- for (const p of detectPaths) {
358
- try { detectScript = fs.readFileSync(p, 'utf-8'); break; } catch { /* try next */ }
359
- }
360
-
361
- // Browser script parts: DO NOT cache. Return paths so the /live.js handler
362
- // can re-read every part on each request. Editing browser code during
363
- // iteration should land on the next tab reload, not require a server restart.
364
- const liveScriptParts = resolveLiveBrowserScriptParts(__dirname);
365
- try {
366
- assertLiveBrowserScriptParts(liveScriptParts);
367
- } catch (err) {
368
- process.stderr.write('Error: ' + err.message + '\n');
369
- process.exit(1);
370
- }
371
-
372
- return { detectScript, liveScriptParts };
373
- }
374
-
375
- function hasProjectContext() {
376
- // PRODUCT.md carries brand voice / anti-references — that's what determines
377
- // whether variants are brand-aware. DESIGN.md (visual tokens) is a separate
378
- // concern, surfaced by the design panel's own empty state.
379
- return !!PROJECT_CONTEXT.hasProduct;
380
- }
381
-
382
- function statOrNull(filePath) {
383
- try { return fs.statSync(filePath); } catch { return null; }
384
- }
385
-
386
- // HTTP request handler
387
- // ---------------------------------------------------------------------------
388
-
389
- function createRequestHandler({ detectScript, liveScriptParts }) {
390
- return (req, res) => {
391
- const url = new URL(req.url, `http://localhost:${state.port}`);
392
- res.setHeader('Access-Control-Allow-Origin', '*');
393
- res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
394
- res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
395
- if (req.method === 'OPTIONS') { res.writeHead(204); res.end(); return; }
396
-
397
- const p = url.pathname;
398
-
399
- // --- Scripts ---
400
- if (p === '/live.js') {
401
- // Re-read from disk each request so edits to live-browser.js land on
402
- // the next tab reload. No-store headers prevent browser caching across
403
- // sessions — during iteration, a cached old script silently breaks
404
- // every subsequent session.
405
- let parts;
406
- try {
407
- parts = readLiveBrowserScriptParts(liveScriptParts);
408
- } catch (err) {
409
- res.writeHead(500, { 'Content-Type': 'text/plain' });
410
- res.end('Error reading live browser scripts: ' + err.message);
411
- return;
412
- }
413
- const body = assembleLiveBrowserScript({
414
- token: state.token,
415
- port: state.port,
416
- vocabulary: LIVE_COMMANDS,
417
- commandPrefix: MONODESIGN_COMMAND_PREFIX,
418
- parts,
419
- });
420
- res.writeHead(200, {
421
- 'Content-Type': 'application/javascript',
422
- 'Cache-Control': 'no-store, no-cache, must-revalidate, max-age=0',
423
- 'Pragma': 'no-cache',
424
- });
425
- res.end(body);
426
- return;
427
- }
428
- if (p === '/detect.js' || p === '/') {
429
- if (!detectScript) { res.writeHead(404); res.end('Not available'); return; }
430
- res.writeHead(200, { 'Content-Type': 'application/javascript' });
431
- res.end(detectScript);
432
- return;
433
- }
434
-
435
- // --- Vendored modern-screenshot (UMD build) ---
436
- // Lazy-loaded by live.js when the user clicks Go; exposes
437
- // window.modernScreenshot.domToBlob(...) for capture.
438
- if (p === '/modern-screenshot.js') {
439
- const vendorPath = path.join(__dirname, 'modern-screenshot.umd.js');
440
- try {
441
- res.writeHead(200, {
442
- 'Content-Type': 'application/javascript',
443
- 'Cache-Control': 'public, max-age=31536000, immutable',
444
- });
445
- res.end(fs.readFileSync(vendorPath));
446
- } catch {
447
- res.writeHead(404); res.end('Vendor script not found');
448
- }
449
- return;
450
- }
451
-
452
- // --- Annotation upload (browser → server, raw PNG body) ---
453
- // Client generates the eventId, POSTs the PNG, then POSTs the generate
454
- // event with screenshotPath already set. Keeps bytes out of the SSE/poll
455
- // bridge and preserves the "one shot from the user's POV" UX.
456
- if (p === '/annotation' && req.method === 'POST') {
457
- const token = url.searchParams.get('token');
458
- if (token !== state.token) { res.writeHead(401); res.end('Unauthorized'); return; }
459
- const eventId = url.searchParams.get('eventId');
460
- if (!eventId || !/^[A-Za-z0-9_-]{1,64}$/.test(eventId)) {
461
- res.writeHead(400, { 'Content-Type': 'application/json' });
462
- res.end(JSON.stringify({ error: 'Invalid eventId' }));
463
- return;
464
- }
465
- if ((req.headers['content-type'] || '').toLowerCase() !== 'image/png') {
466
- res.writeHead(415, { 'Content-Type': 'application/json' });
467
- res.end(JSON.stringify({ error: 'Content-Type must be image/png' }));
468
- return;
469
- }
470
- if (!state.sessionDir) {
471
- res.writeHead(500, { 'Content-Type': 'application/json' });
472
- res.end(JSON.stringify({ error: 'Session dir unavailable' }));
473
- return;
474
- }
475
- const chunks = [];
476
- let total = 0;
477
- let aborted = false;
478
- req.on('data', (c) => {
479
- if (aborted) return;
480
- total += c.length;
481
- if (total > MAX_ANNOTATION_BYTES) {
482
- aborted = true;
483
- res.writeHead(413, { 'Content-Type': 'application/json' });
484
- res.end(JSON.stringify({ error: 'Payload too large' }));
485
- req.destroy();
486
- return;
487
- }
488
- chunks.push(c);
489
- });
490
- req.on('end', () => {
491
- if (aborted) return;
492
- const absPath = path.join(state.sessionDir, eventId + '.png');
493
- try {
494
- fs.writeFileSync(absPath, Buffer.concat(chunks));
495
- } catch (err) {
496
- res.writeHead(500, { 'Content-Type': 'application/json' });
497
- res.end(JSON.stringify({ error: 'Write failed: ' + err.message }));
498
- return;
499
- }
500
- res.writeHead(200, { 'Content-Type': 'application/json' });
501
- res.end(JSON.stringify({ ok: true, path: absPath }));
502
- });
503
- req.on('error', () => {
504
- if (!aborted) {
505
- res.writeHead(500, { 'Content-Type': 'application/json' });
506
- res.end(JSON.stringify({ error: 'Upload failed' }));
507
- }
508
- });
509
- return;
510
- }
511
-
512
- // --- Health ---
513
- if (p === '/status') {
514
- const token = url.searchParams.get('token');
515
- if (token !== state.token) { res.writeHead(401, { 'Content-Type': 'application/json' }); res.end(JSON.stringify({ error: 'Unauthorized' })); return; }
516
- const sessions = activeSessionSummaries();
517
- res.writeHead(200, { 'Content-Type': 'application/json' });
518
- res.end(JSON.stringify({
519
- status: 'ok',
520
- port: state.port,
521
- connectedClients: state.sseClients.size,
522
- pendingEvents: state.pendingEvents.map((entry) => summarizePendingEventForStatus(entry)),
523
- agentPolling: agentPollingConnected(),
524
- activeSessions: sessions,
525
- manualEdits: getManualEditStatus(),
526
- }));
527
- return;
528
- }
529
-
530
- if (p === '/health') {
531
- res.writeHead(200, { 'Content-Type': 'application/json' });
532
- res.end(JSON.stringify({
533
- status: 'ok', port: state.port, mode: 'variant',
534
- hasProjectContext: hasProjectContext(),
535
- connectedClients: state.sseClients.size,
536
- }));
537
- return;
538
- }
539
-
540
- // --- Design system (unified v2 response) + raw ---
541
- // /design-system.json returns both parsed DESIGN.md and .monodesign/design.json
542
- // sidecar when present. Panel merges them:
543
- // { present, parsed, sidecar, hasMd, hasSidecar,
544
- // mdNewerThanJson, parseError?, sidecarError? }
545
- // - parsed: output of parseDesignMd (frontmatter
546
- // + six canonical sections) when DESIGN.md exists.
547
- // - sidecar: .monodesign/design.json contents when present.
548
- // Expected shape: schemaVersion 2, carrying
549
- // extensions + components + narrative.
550
- // /design-system/raw returns DESIGN.md markdown verbatim
551
- if (p === '/design-system.json' || p === '/design-system/raw') {
552
- const token = url.searchParams.get('token');
553
- if (token !== state.token) { res.writeHead(401); res.end('Unauthorized'); return; }
554
-
555
- const mdPath = DESIGN_MD_PATH;
556
- const jsonPath = resolveDesignSidecarPath(process.cwd(), PROJECT_CONTEXT.designContextDir || CONTEXT_DIR) || getDesignSidecarPath(process.cwd());
557
- const mdStat = statOrNull(mdPath);
558
- const jsonStat = statOrNull(jsonPath);
559
-
560
- if (p === '/design-system/raw') {
561
- if (!mdStat) { res.writeHead(404); res.end('Not found'); return; }
562
- res.writeHead(200, { 'Content-Type': 'text/markdown; charset=utf-8' });
563
- res.end(fs.readFileSync(mdPath, 'utf-8'));
564
- return;
565
- }
566
-
567
- if (!mdStat && !jsonStat) {
568
- res.writeHead(404, { 'Content-Type': 'application/json' });
569
- res.end(JSON.stringify({ present: false }));
570
- return;
571
- }
572
-
573
- const response = {
574
- present: true,
575
- hasMd: !!mdStat,
576
- hasSidecar: !!jsonStat,
577
- mdNewerThanJson: !!(mdStat && jsonStat && mdStat.mtimeMs > jsonStat.mtimeMs + 1000),
578
- };
579
-
580
- if (mdStat) {
581
- try {
582
- response.parsed = parseDesignMd(fs.readFileSync(mdPath, 'utf-8'));
583
- } catch (err) {
584
- response.parseError = err.message;
585
- }
586
- }
587
-
588
- if (jsonStat) {
589
- try {
590
- response.sidecar = JSON.parse(fs.readFileSync(jsonPath, 'utf-8'));
591
- } catch (err) {
592
- response.sidecarError = 'Failed to parse .monodesign/design.json: ' + err.message;
593
- }
594
- }
595
-
596
- res.writeHead(200, { 'Content-Type': 'application/json' });
597
- res.end(JSON.stringify(response));
598
- return;
599
- }
600
-
601
- // --- Source file (no-HMR fallback) ---
602
- if (p === '/source') {
603
- const token = url.searchParams.get('token');
604
- if (token !== state.token) { res.writeHead(401); res.end('Unauthorized'); return; }
605
- const filePath = url.searchParams.get('path');
606
- if (!filePath || filePath.includes('..')) { res.writeHead(400); res.end('Bad path'); return; }
607
- const absPath = path.resolve(process.cwd(), filePath);
608
- if (!absPath.startsWith(process.cwd())) { res.writeHead(403); res.end('Forbidden'); return; }
609
- let content;
610
- try { content = fs.readFileSync(absPath, 'utf-8'); }
611
- catch { res.writeHead(404); res.end('File not found'); return; }
612
- res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
613
- res.end(content);
614
- return;
615
- }
616
-
617
- // --- SSE: server→browser push (replaces WebSocket) ---
618
- if (p === '/events' && req.method === 'GET') {
619
- const token = url.searchParams.get('token');
620
- if (token !== state.token) { res.writeHead(401); res.end('Unauthorized'); return; }
621
- clearTimeout(state.exitTimer);
622
- state.exitTimer = null;
623
- cancelQueuedAnonymousExitEvents();
624
- res.writeHead(200, {
625
- 'Content-Type': 'text/event-stream',
626
- 'Cache-Control': 'no-cache',
627
- 'Connection': 'keep-alive',
628
- });
629
- res.write('data: ' + JSON.stringify({
630
- type: 'connected',
631
- hasProjectContext: hasProjectContext(),
632
- agentPolling: agentPollingConnected(),
633
- activeSessions: activeSessionSummaries(),
634
- }) + '\n\n');
635
-
636
- state.sseClients.add(res);
637
-
638
- // Keepalive: SSE comment every 30s prevents silent connection drops.
639
- const heartbeat = setInterval(() => {
640
- try { res.write(': keepalive\n\n'); } catch { clearInterval(heartbeat); }
641
- }, SSE_HEARTBEAT_INTERVAL);
642
-
643
- req.on('close', () => {
644
- clearInterval(heartbeat);
645
- state.sseClients.delete(res);
646
- if (state.sseClients.size === 0) {
647
- clearTimeout(state.exitTimer);
648
- state.exitTimer = setTimeout(() => {
649
- if (state.sseClients.size === 0) enqueueEvent({ type: 'exit' });
650
- }, 8000);
651
- }
652
- });
653
- return;
654
- }
655
-
656
- if (manualEditRoutes(req, res, url)) return;
657
-
658
- // --- Browser→server events (replaces WebSocket messages) ---
659
- if (p === '/events' && req.method === 'POST') {
660
- let body = '';
661
- req.on('data', (c) => { body += c; });
662
- req.on('end', () => {
663
- let msg;
664
- try { msg = JSON.parse(body); } catch {
665
- res.writeHead(400, { 'Content-Type': 'application/json' });
666
- res.end(JSON.stringify({ error: 'Invalid JSON' }));
667
- return;
668
- }
669
- if (msg.token !== state.token) {
670
- res.writeHead(401, { 'Content-Type': 'application/json' });
671
- res.end(JSON.stringify({ error: 'Unauthorized' }));
672
- return;
673
- }
674
- // Defense in depth: manual copy edits must use the staged stash/apply
675
- // endpoints. The direct Save event path is disabled in the browser.
676
- if (msg.type === 'manual_edits') {
677
- res.writeHead(400, { 'Content-Type': 'application/json' });
678
- res.end(JSON.stringify({ error: 'manual_edits must POST to /manual-edit-stash, not /events' }));
679
- return;
680
- }
681
- if (msg.type === 'manual_edit_apply') {
682
- res.writeHead(400, { 'Content-Type': 'application/json' });
683
- res.end(JSON.stringify({ error: 'manual_edit_apply is disabled; use /manual-edit-stash then /manual-edit-commit' }));
684
- return;
685
- }
686
- const error = validateEvent(msg);
687
- if (error) {
688
- res.writeHead(400, { 'Content-Type': 'application/json' });
689
- res.end(JSON.stringify({ error }));
690
- return;
691
- }
692
- if (state.sessionStore && msg.id) {
693
- try {
694
- state.sessionStore.appendEvent(msg);
695
- } catch (err) {
696
- res.writeHead(500, { 'Content-Type': 'application/json' });
697
- res.end(JSON.stringify({ error: 'session_store_append_failed', message: err.message }));
698
- return;
699
- }
700
- }
701
- if (msg.type === 'exit') {
702
- cleanupSvelteComponentSessionsBeforeExit();
703
- }
704
- if (msg.type !== 'checkpoint') {
705
- enqueueEvent(msg);
706
- }
707
- res.writeHead(200, { 'Content-Type': 'application/json' });
708
- res.end(JSON.stringify({ ok: true }));
709
- });
710
- return;
711
- }
712
-
713
- // --- Stop ---
714
- if (p === '/stop') {
715
- const token = url.searchParams.get('token');
716
- if (token !== state.token) { res.writeHead(401); res.end('Unauthorized'); return; }
717
- res.writeHead(200, { 'Content-Type': 'text/plain' });
718
- res.end('stopping');
719
- shutdown();
720
- return;
721
- }
722
-
723
- // --- Agent poll ---
724
- if (p === '/poll' && req.method === 'GET') {
725
- handlePollGet(req, res, url);
726
- return;
727
- }
728
- if (p === '/poll' && req.method === 'POST') {
729
- handlePollPost(req, res);
730
- return;
731
- }
732
-
733
- res.writeHead(404); res.end('Not found');
734
- };
735
- }
736
-
737
- // ---------------------------------------------------------------------------
738
- // Agent poll endpoints (unchanged from WS version)
739
- // ---------------------------------------------------------------------------
740
-
741
- function handlePollGet(req, res, url) {
742
- const token = url.searchParams.get('token');
743
- if (token !== state.token) {
744
- res.writeHead(401, { 'Content-Type': 'application/json' });
745
- res.end(JSON.stringify({ error: 'Unauthorized' }));
746
- return;
747
- }
748
- state.lastPollAt = Date.now();
749
- const timeout = parseInt(url.searchParams.get('timeout') || DEFAULT_POLL_TIMEOUT, 10);
750
- const leaseMs = parseInt(url.searchParams.get('leaseMs') || '30000', 10);
751
- const available = findAvailablePendingEvent();
752
- if (available) {
753
- res.writeHead(200, { 'Content-Type': 'application/json' });
754
- res.end(JSON.stringify(leaseEvent(available, leaseMs)));
755
- return;
756
- }
757
- const poll = { resolve, leaseMs };
758
- const timer = setTimeout(() => {
759
- const idx = state.pendingPolls.indexOf(poll);
760
- if (idx !== -1) state.pendingPolls.splice(idx, 1);
761
- broadcastAgentPollingIfChanged();
762
- res.writeHead(200, { 'Content-Type': 'application/json' });
763
- res.end(JSON.stringify({ type: 'timeout' }));
764
- }, timeout);
765
- function resolve(event) {
766
- clearTimeout(timer);
767
- state.lastPollAt = Date.now();
768
- res.writeHead(200, { 'Content-Type': 'application/json' });
769
- res.end(JSON.stringify(event));
770
- }
771
- state.pendingPolls.push(poll);
772
- broadcastAgentPollingIfChanged();
773
- scheduleLeaseFlush();
774
- req.on('close', () => {
775
- clearTimeout(timer);
776
- const idx = state.pendingPolls.indexOf(poll);
777
- if (idx !== -1) state.pendingPolls.splice(idx, 1);
778
- broadcastAgentPollingIfChanged();
779
- });
780
- }
781
-
782
- function sessionFileMetadataFromPollReply(file) {
783
- if (!file || typeof file !== 'string') return { file };
784
- const normalized = file.split(path.sep).join('/');
785
- const base = { file: normalized };
786
- if (!normalized.endsWith('/manifest.json') && normalized !== 'manifest.json') return base;
787
- if (!normalized.includes('node_modules/.monodesign-live/') && !normalized.includes('src/lib/monodesign/')) return base;
788
-
789
- let full;
790
- try {
791
- full = path.resolve(process.cwd(), normalized);
792
- const rel = path.relative(process.cwd(), full);
793
- if (!rel || rel.startsWith('..') || path.isAbsolute(rel)) return base;
794
- } catch {
795
- return base;
796
- }
797
-
798
- try {
799
- const manifest = JSON.parse(fs.readFileSync(full, 'utf-8'));
800
- if (manifest?.previewMode !== 'svelte-component' || !manifest.sourceFile) return base;
801
- return {
802
- file: String(manifest.sourceFile).split(path.sep).join('/'),
803
- sourceFile: String(manifest.sourceFile).split(path.sep).join('/'),
804
- previewFile: normalized,
805
- previewMode: 'svelte-component',
806
- };
807
- } catch {
808
- return base;
809
- }
810
- }
811
-
812
- function handlePollPost(req, res) {
813
- let body = '';
814
- req.on('data', (c) => { body += c; });
815
- req.on('end', () => {
816
- let msg;
817
- try { msg = JSON.parse(body); } catch {
818
- res.writeHead(400, { 'Content-Type': 'application/json' });
819
- res.end(JSON.stringify({ error: 'Invalid JSON' }));
820
- return;
821
- }
822
- if (msg.token !== state.token) {
823
- res.writeHead(401, { 'Content-Type': 'application/json' });
824
- res.end(JSON.stringify({ error: 'Unauthorized' }));
825
- return;
826
- }
827
- const pendingApplyDeferred = manualApply.getDeferred(msg.id);
828
- if (pendingApplyDeferred) {
829
- const validation = manualApply.validateResultMessage(msg, pendingApplyDeferred);
830
- if (!validation.ok) {
831
- recordManualEditActivity('manual_edit_apply_reply_invalid', {
832
- id: msg.id,
833
- pageUrl: pendingApplyDeferred.pageUrl,
834
- chunk: pendingApplyDeferred.event?.chunk || null,
835
- repair: pendingApplyDeferred.event?.repair || null,
836
- reason: validation.body?.reason || validation.body?.error || 'invalid_manual_apply_result',
837
- status: msg.data?.status || null,
838
- });
839
- res.writeHead(400, { 'Content-Type': 'application/json' });
840
- res.end(JSON.stringify(validation.body));
841
- return;
842
- }
843
- recordManualEditActivity('manual_edit_apply_reply_received', {
844
- id: msg.id,
845
- pageUrl: pendingApplyDeferred.pageUrl,
846
- chunk: pendingApplyDeferred.event?.chunk || null,
847
- repair: pendingApplyDeferred.event?.repair || null,
848
- status: validation.result.status,
849
- appliedCount: validation.result.appliedEntryIds.length,
850
- failed: summarizeManualApplyFailures(validation.result.failed),
851
- fileCount: validation.result.files.length,
852
- noteCount: validation.result.notes.length,
853
- });
854
- manualApply.resolveDeferred(msg.id, validation.result);
855
- acknowledgePendingEvent(msg.id);
856
- flushPendingPolls();
857
- res.writeHead(200, { 'Content-Type': 'application/json' });
858
- res.end(JSON.stringify({ ok: true }));
859
- return;
860
- }
861
- if (manualApply.hasTimedOutId(msg.id)) {
862
- const rollback = manualApply.rollbackTimedOutReply(msg);
863
- recordManualEditActivity('manual_edit_apply_stale_reply_rejected', {
864
- id: msg.id,
865
- rolledBackFileCount: rollback.rolledBackFiles?.length || 0,
866
- rollbackFailureCount: rollback.rollbackFailures?.length || 0,
867
- });
868
- res.writeHead(409, { 'Content-Type': 'application/json' });
869
- res.end(JSON.stringify({ error: 'stale_manual_edit_apply_reply', ...rollback }));
870
- return;
871
- }
872
- const pendingEventBeforeAck = findPendingEventById(msg.id);
873
- if (pendingEventBeforeAck?.type === 'steer' && msg.type === 'steer_done'
874
- && !msg.file && !(typeof msg.message === 'string' && msg.message.trim())) {
875
- res.writeHead(400, { 'Content-Type': 'application/json' });
876
- res.end(JSON.stringify({
877
- error: 'steer_done_requires_file_or_message',
878
- hint: 'Reply with --file after writing source, or include a message explaining an intentional no-op.',
879
- }));
880
- return;
881
- }
882
- const acknowledgedEvent = acknowledgePendingEvent(msg.id);
883
- let skipJournalReply = false;
884
- let existingSession = null;
885
- if (!acknowledgedEvent && state.sessionStore && msg.id) {
886
- try {
887
- existingSession = state.sessionStore.getSnapshot(msg.id, { includeCompleted: true });
888
- if (!existingSession?.updatedAt) existingSession = null;
889
- skipJournalReply = existingSession?.phase === 'completed' || existingSession?.phase === 'discarded';
890
- } catch { /* fall through and record the reply normally */ }
891
- }
892
- if (!acknowledgedEvent && !existingSession) {
893
- recordManualEditActivity('manual_edit_poll_reply_unknown', {
894
- id: msg.id || null,
895
- type: msg.type || null,
896
- });
897
- res.writeHead(msg.id ? 404 : 400, { 'Content-Type': 'application/json' });
898
- res.end(JSON.stringify({
899
- error: msg.id ? 'unknown_poll_reply_id' : 'missing_poll_reply_id',
900
- id: msg.id,
901
- }));
902
- return;
903
- }
904
- const replyFileMeta = sessionFileMetadataFromPollReply(msg.file);
905
- if (state.sessionStore && msg.id && !skipJournalReply) {
906
- try {
907
- const eventType = msg.type === 'steer_done'
908
- ? 'steer_done'
909
- : msg.type === 'discard' || msg.type === 'discarded'
910
- ? 'discarded'
911
- : msg.type === 'complete'
912
- ? 'complete'
913
- : msg.type === 'error'
914
- ? 'agent_error'
915
- : 'agent_done';
916
- state.sessionStore.appendEvent({
917
- type: eventType,
918
- id: msg.id,
919
- file: replyFileMeta.file,
920
- sourceFile: replyFileMeta.sourceFile,
921
- previewFile: replyFileMeta.previewFile,
922
- previewMode: replyFileMeta.previewMode,
923
- message: msg.message,
924
- sourceEventType: acknowledgedEvent?.type,
925
- carbonize: msg.data?.carbonize === true,
926
- });
927
- } catch { /* keep reply path best-effort; browser still needs SSE */ }
928
- }
929
- flushPendingPolls();
930
- // Forward the reply to the browser via SSE
931
- broadcast({
932
- type: msg.type || 'done',
933
- id: msg.id,
934
- message: msg.message,
935
- file: msg.file,
936
- sourceFile: replyFileMeta.sourceFile,
937
- previewFile: replyFileMeta.previewFile,
938
- previewMode: replyFileMeta.previewMode,
939
- data: msg.data,
940
- });
941
- res.writeHead(200, { 'Content-Type': 'application/json' });
942
- res.end(JSON.stringify({ ok: true }));
943
- });
944
- }
945
-
946
- // ---------------------------------------------------------------------------
947
- // Lifecycle
948
- // ---------------------------------------------------------------------------
949
-
950
- let httpServer = null;
951
-
952
- function shutdown() {
953
- cleanupSvelteComponentSessionsBeforeExit();
954
- removeLiveServerInfo(process.cwd());
955
- if (state.leaseTimer) clearTimeout(state.leaseTimer);
956
- state.leaseTimer = null;
957
- if (state.sessionDir) {
958
- try { fs.rmSync(state.sessionDir, { recursive: true, force: true }); } catch {}
959
- }
960
- for (const res of state.sseClients) { try { res.end(); } catch {} }
961
- state.sseClients.clear();
962
- for (const poll of state.pendingPolls) poll.resolve({ type: 'exit' });
963
- state.pendingPolls.length = 0;
964
- if (httpServer) httpServer.close();
965
- process.exit(0);
966
- }
967
-
968
- function cleanupSvelteComponentSessionsBeforeExit() {
969
- try {
970
- removeAllSvelteComponentSessions(process.cwd());
971
- } catch (err) {
972
- console.warn('[monodesign] Svelte component session cleanup failed:', err.message);
973
- }
974
- }
975
-
976
- function applyLegacyDeferredAcceptsOnStartup() {
977
- try {
978
- const result = applyDeferredSvelteComponentAccepts(process.cwd());
979
- if (result.applied > 0 || result.failed > 0) {
980
- console.log('[monodesign] applied legacy deferred Svelte component accepts:', JSON.stringify(result));
981
- }
982
- } catch (err) {
983
- console.warn('[monodesign] legacy deferred Svelte component accept apply failed:', err.message);
984
- }
985
- }
986
-
987
- // ---------------------------------------------------------------------------
988
- // Main
989
- // ---------------------------------------------------------------------------
990
-
991
- const args = process.argv.slice(2);
992
-
993
- if (args.includes('--help') || args.includes('-h')) {
994
- console.log(`Usage: node live-server.mjs [options]
995
-
996
- Start the live variant mode server (zero dependencies).
997
-
998
- Commands:
999
- (default) Start the server (foreground)
1000
- stop Stop the server and remove the injected live.js script tag
1001
- stop --keep-inject Stop the server only (leave the script tag in the HTML entry)
1002
-
1003
- Options:
1004
- --background Start detached, print connection JSON to stdout, then exit
1005
- --port=PORT Use a specific port (default: auto-detect starting at 8400)
1006
- --keep-inject Only with stop: skip live-inject.mjs --remove
1007
- --help Show this help
1008
-
1009
- Endpoints:
1010
- /live.js Browser script (element picker + variant cycling)
1011
- /detect.js Detection overlay (backwards compatible)
1012
- /modern-screenshot.js Vendored modern-screenshot UMD build (lazy-loaded by live.js)
1013
- /annotation POST raw image/png to stage a variant screenshot
1014
- /events SSE stream (server→browser) + POST (browser→server)
1015
- /poll Long-poll for agent CLI
1016
- /manual-edit-stash Stage browser copy edits
1017
- /manual-edit-commit Apply staged browser copy edits
1018
- /manual-edit-discard Discard staged browser copy edits
1019
- /source Raw source file reader (no-HMR fallback)
1020
- /status Durable recovery status (token-protected)
1021
- /health Health check`);
1022
- process.exit(0);
1023
- }
1024
-
1025
- if (args.includes('stop')) {
1026
- const keepInject = args.includes('--keep-inject');
1027
- try {
1028
- const { info } = readLiveServerInfo(process.cwd()) || {};
1029
- const res = await fetch(`http://localhost:${info.port}/stop?token=${info.token}`);
1030
- if (res.ok) console.log(`Stopped live server on port ${info.port}.`);
1031
- } catch {
1032
- console.log('No running live server found.');
1033
- }
1034
- if (!keepInject) {
1035
- const injectPath = path.join(__dirname, 'live-inject.mjs');
1036
- try {
1037
- const out = execFileSync(process.execPath, [injectPath, '--remove'], {
1038
- encoding: 'utf-8',
1039
- cwd: process.cwd(),
1040
- });
1041
- const line = out.trim().split('\n').filter(Boolean).pop();
1042
- if (line) {
1043
- try {
1044
- const j = JSON.parse(line);
1045
- if (j.removed === true) {
1046
- console.log(`Removed live script tag from ${j.file}.`);
1047
- }
1048
- } catch {
1049
- /* ignore non-JSON lines */
1050
- }
1051
- }
1052
- } catch (err) {
1053
- const detail = err.stderr?.toString?.().trim?.()
1054
- || err.stdout?.toString?.().trim?.()
1055
- || err.message
1056
- || String(err);
1057
- console.warn(`Note: could not remove live script tag (${detail.split('\n')[0]})`);
1058
- }
1059
- }
1060
- process.exit(0);
1061
- }
1062
-
1063
- // --background: spawn a detached child server, wait for it to be ready,
1064
- // print the connection JSON, then exit. This keeps the startup command
1065
- // simple (no shell backgrounding or chained commands).
1066
- if (args.includes('--background')) {
1067
- const childArgs = args.filter(a => a !== '--background');
1068
- const child = spawn(process.execPath, [fileURLToPath(import.meta.url), ...childArgs], {
1069
- detached: true,
1070
- stdio: 'ignore',
1071
- cwd: process.cwd(),
1072
- });
1073
- child.unref();
1074
-
1075
- // Poll for the PID file (the child writes it once the HTTP server is listening).
1076
- const deadline = Date.now() + 10_000;
1077
- while (Date.now() < deadline) {
1078
- try {
1079
- const { info } = readLiveServerInfo(process.cwd()) || {};
1080
- if (info.pid !== process.pid) {
1081
- // Output JSON so the agent can read port + token from stdout.
1082
- console.log(JSON.stringify(info));
1083
- process.exit(0);
1084
- }
1085
- } catch { /* not ready yet */ }
1086
- await new Promise(r => setTimeout(r, 200));
1087
- }
1088
- console.error('Timed out waiting for live server to start.');
1089
- process.exit(1);
1090
- }
1091
-
1092
- // Check for existing session
1093
- const existingRecord = readLiveServerInfo(process.cwd());
1094
- if (existingRecord?.info) {
1095
- const existing = existingRecord.info;
1096
- try {
1097
- process.kill(existing.pid, 0);
1098
- console.error(`Live server already running on port ${existing.port} (pid ${existing.pid}).`);
1099
- console.error('Stop it first with: node ' + path.basename(fileURLToPath(import.meta.url)) + ' stop');
1100
- process.exit(1);
1101
- } catch {
1102
- try { fs.unlinkSync(existingRecord.path); } catch {}
1103
- }
1104
- }
1105
-
1106
- state.token = randomUUID();
1107
- state.sessionStore = createLiveSessionStore({ cwd: process.cwd() });
1108
- manualApply.rollbackTransaction({
1109
- reason: 'manual_edit_server_start_recovered_abandoned_transaction',
1110
- });
1111
- applyLegacyDeferredAcceptsOnStartup();
1112
- restorePendingEventsFromStore();
1113
- manualApply.pruneStaleEvidence();
1114
- const portArg = args.find(a => a.startsWith('--port='));
1115
- state.port = portArg ? parseInt(portArg.split('=')[1], 10) : await findOpenPort();
1116
- // Annotation screenshots live in the project root so the agent's Read tool
1117
- // doesn't trip a per-file permission prompt. Sessioned by token so concurrent
1118
- // projects (or quick restarts) don't collide.
1119
- const annotRoot = getLiveAnnotationsDir(process.cwd());
1120
- fs.mkdirSync(annotRoot, { recursive: true });
1121
- state.sessionDir = fs.mkdtempSync(path.join(annotRoot, 'session-'));
1122
-
1123
- const { detectScript, liveScriptParts } = loadBrowserScripts();
1124
- httpServer = http.createServer(createRequestHandler({ detectScript, liveScriptParts }));
1125
-
1126
- httpServer.listen(state.port, '127.0.0.1', () => {
1127
- writeLiveServerInfo(process.cwd(), { pid: process.pid, port: state.port, token: state.token });
1128
- const url = `http://localhost:${state.port}`;
1129
- console.log(`\nMonodesign live server running on ${url}`);
1130
- console.log(`Token: ${state.token}\n`);
1131
- console.log(`Script: ${url}/live.js`);
1132
- console.log('Inject: managed by live-inject.mjs; Astro source tags use is:inline automatically.');
1133
- console.log(`Stop: node ${path.basename(fileURLToPath(import.meta.url))} stop`);
1134
- });
1135
-
1136
- process.on('SIGINT', shutdown);
1137
- process.on('SIGTERM', shutdown);