monomind 1.14.6 → 1.15.0

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 (314) hide show
  1. package/.claude/agents/reengineer-squad/boss.md +113 -0
  2. package/.claude/agents/reengineer-squad/critic-architect.md +132 -0
  3. package/.claude/agents/reengineer-squad/git-manager.md +145 -0
  4. package/.claude/agents/reengineer-squad/idea-generator.md +95 -0
  5. package/.claude/agents/reengineer-squad/implementer.md +112 -0
  6. package/.claude/agents/reengineer-squad/integration-planner.md +112 -0
  7. package/.claude/agents/reengineer-squad/source-analyst.md +103 -0
  8. package/.claude/agents/reengineer-squad/target-analyst.md +118 -0
  9. package/.claude/agents/reengineer-squad/tester.md +105 -0
  10. package/.claude/commands/mastermind/master.md +35 -14
  11. package/.claude/helpers/handlers/capture-handler.cjs +155 -18
  12. package/.claude/helpers/monolean-activate.cjs +20 -0
  13. package/.claude/helpers/monolean-config.cjs +76 -0
  14. package/.claude/helpers/monolean-instructions.cjs +109 -0
  15. package/.claude/helpers/monolean-propagate.cjs +9 -0
  16. package/.claude/helpers/monolean-tracker.cjs +18 -0
  17. package/.claude/helpers/skill-registry.json +2 -2
  18. package/.claude/settings.json +34 -2
  19. package/.claude/skills/agent-browser-testing/SKILL.md +301 -18
  20. package/.claude/skills/mastermind/runorg.md +69 -23
  21. package/.claude/skills/monodesign/SKILL.md +32 -1
  22. package/.claude/skills/monodesign/adapt.md +53 -0
  23. package/.claude/skills/monodesign/agents/monodesign-asset-producer.md +100 -0
  24. package/.claude/skills/monodesign/animate.md +65 -0
  25. package/.claude/skills/monodesign/audit.md +89 -0
  26. package/.claude/skills/monodesign/bolder.md +50 -0
  27. package/.claude/skills/monodesign/clarify.md +64 -0
  28. package/.claude/skills/monodesign/colorize.md +68 -0
  29. package/.claude/skills/monodesign/craft.md +51 -0
  30. package/.claude/skills/monodesign/critique.md +66 -0
  31. package/.claude/skills/monodesign/delight.md +47 -0
  32. package/.claude/skills/monodesign/distill.md +56 -0
  33. package/.claude/skills/monodesign/document.md +80 -0
  34. package/.claude/skills/monodesign/extract.md +74 -0
  35. package/.claude/skills/monodesign/harden.md +65 -0
  36. package/.claude/skills/monodesign/live.md +59 -0
  37. package/.claude/skills/monodesign/onboard.md +50 -0
  38. package/.claude/skills/monodesign/optimize.md +64 -0
  39. package/.claude/skills/monodesign/overdrive.md +56 -0
  40. package/.claude/skills/monodesign/polish.md +68 -0
  41. package/.claude/skills/monodesign/quieter.md +57 -0
  42. package/.claude/skills/monodesign/reference/antipatterns-catalog.md +248 -76
  43. package/.claude/skills/monodesign/reference/codex.md +107 -0
  44. package/.claude/skills/monodesign/reference/craft.md +3 -0
  45. package/.claude/skills/monodesign/reference/hooks.md +99 -0
  46. package/.claude/skills/monodesign/reference/image-prompts.md +12 -0
  47. package/.claude/skills/monodesign/shape.md +71 -0
  48. package/.claude/skills/monodesign/teach.md +69 -0
  49. package/.claude/skills/monodesign/typeset.md +59 -0
  50. package/.claude/skills/monolean/SKILL.md +118 -0
  51. package/.claude/skills/monolean-audit/SKILL.md +41 -0
  52. package/.claude/skills/monolean-debt/SKILL.md +46 -0
  53. package/.claude/skills/monolean-help/SKILL.md +60 -0
  54. package/.claude/skills/monolean-review/SKILL.md +57 -0
  55. package/package.json +8 -2
  56. package/packages/@monomind/cli/bin/cli.js +3 -1
  57. package/packages/@monomind/cli/dist/dashboard/server.js +137 -0
  58. package/packages/@monomind/cli/dist/src/__tests__/browse-adapters.test.d.ts +2 -0
  59. package/packages/@monomind/cli/dist/src/__tests__/browse-adapters.test.js +51 -0
  60. package/packages/@monomind/cli/dist/src/__tests__/browse-analyzer.test.d.ts +2 -0
  61. package/packages/@monomind/cli/dist/src/__tests__/browse-analyzer.test.js +68 -0
  62. package/packages/@monomind/cli/dist/src/__tests__/browse-builtin-handlers.test.d.ts +2 -0
  63. package/packages/@monomind/cli/dist/src/__tests__/browse-builtin-handlers.test.js +139 -0
  64. package/packages/@monomind/cli/dist/src/__tests__/browse-cdp.test.d.ts +2 -0
  65. package/packages/@monomind/cli/dist/src/__tests__/browse-cdp.test.js +169 -0
  66. package/packages/@monomind/cli/dist/src/__tests__/browse-dashboard.test.d.ts +2 -0
  67. package/packages/@monomind/cli/dist/src/__tests__/browse-dashboard.test.js +179 -0
  68. package/packages/@monomind/cli/dist/src/__tests__/browse-engine.test.d.ts +2 -0
  69. package/packages/@monomind/cli/dist/src/__tests__/browse-engine.test.js +122 -0
  70. package/packages/@monomind/cli/dist/src/__tests__/browse-expression.test.d.ts +2 -0
  71. package/packages/@monomind/cli/dist/src/__tests__/browse-expression.test.js +54 -0
  72. package/packages/@monomind/cli/dist/src/__tests__/browse-store.test.d.ts +2 -0
  73. package/packages/@monomind/cli/dist/src/__tests__/browse-store.test.js +99 -0
  74. package/packages/@monomind/cli/dist/src/__tests__/browse-workflow-types.test.d.ts +2 -0
  75. package/packages/@monomind/cli/dist/src/__tests__/browse-workflow-types.test.js +33 -0
  76. package/packages/@monomind/cli/dist/src/browser/action-builder/analyzer.d.ts +11 -0
  77. package/packages/@monomind/cli/dist/src/browser/action-builder/analyzer.js +71 -0
  78. package/packages/@monomind/cli/dist/src/browser/action-builder/types.d.ts +47 -0
  79. package/packages/@monomind/cli/dist/src/browser/action-builder/types.js +2 -0
  80. package/packages/@monomind/cli/dist/src/browser/adapters/gemini.d.ts +3 -0
  81. package/packages/@monomind/cli/dist/src/browser/adapters/gemini.js +16 -0
  82. package/packages/@monomind/cli/dist/src/browser/adapters/google.d.ts +3 -0
  83. package/packages/@monomind/cli/dist/src/browser/adapters/google.js +17 -0
  84. package/packages/@monomind/cli/dist/src/browser/adapters/index.d.ts +19 -0
  85. package/packages/@monomind/cli/dist/src/browser/adapters/index.js +23 -0
  86. package/packages/@monomind/cli/dist/src/browser/adapters/instagram.d.ts +3 -0
  87. package/packages/@monomind/cli/dist/src/browser/adapters/instagram.js +17 -0
  88. package/packages/@monomind/cli/dist/src/browser/adapters/linkedin.d.ts +3 -0
  89. package/packages/@monomind/cli/dist/src/browser/adapters/linkedin.js +19 -0
  90. package/packages/@monomind/cli/dist/src/browser/adapters/microsoft.d.ts +3 -0
  91. package/packages/@monomind/cli/dist/src/browser/adapters/microsoft.js +16 -0
  92. package/packages/@monomind/cli/dist/src/browser/adapters/x.d.ts +3 -0
  93. package/packages/@monomind/cli/dist/src/browser/adapters/x.js +19 -0
  94. package/packages/@monomind/cli/dist/src/browser/dashboard/api-types.d.ts +50 -0
  95. package/packages/@monomind/cli/dist/src/browser/dashboard/api-types.js +14 -0
  96. package/packages/@monomind/cli/dist/src/browser/dashboard/server.d.ts +9 -0
  97. package/packages/@monomind/cli/dist/src/browser/dashboard/server.js +62 -0
  98. package/packages/@monomind/cli/dist/src/browser/dashboard/ui.html +1811 -0
  99. package/packages/@monomind/cli/dist/src/browser/workflow/builtin-handlers.d.ts +3 -0
  100. package/packages/@monomind/cli/dist/src/browser/workflow/builtin-handlers.js +343 -0
  101. package/packages/@monomind/cli/dist/src/browser/workflow/engine.d.ts +15 -0
  102. package/packages/@monomind/cli/dist/src/browser/workflow/engine.js +127 -0
  103. package/packages/@monomind/cli/dist/src/browser/workflow/expression.d.ts +4 -0
  104. package/packages/@monomind/cli/dist/src/browser/workflow/expression.js +64 -0
  105. package/packages/@monomind/cli/dist/src/browser/workflow/store.d.ts +24 -0
  106. package/packages/@monomind/cli/dist/src/browser/workflow/store.js +145 -0
  107. package/packages/@monomind/cli/dist/src/browser/workflow/types.d.ts +48 -0
  108. package/packages/@monomind/cli/dist/src/browser/workflow/types.js +2 -0
  109. package/packages/@monomind/cli/dist/src/commands/browse-action.d.ts +4 -0
  110. package/packages/@monomind/cli/dist/src/commands/browse-action.js +151 -0
  111. package/packages/@monomind/cli/dist/src/commands/browse-platform.d.ts +4 -0
  112. package/packages/@monomind/cli/dist/src/commands/browse-platform.js +117 -0
  113. package/packages/@monomind/cli/dist/src/commands/browse-workflow.d.ts +4 -0
  114. package/packages/@monomind/cli/dist/src/commands/browse-workflow.js +153 -0
  115. package/packages/@monomind/cli/dist/src/commands/browse.d.ts +10 -6
  116. package/packages/@monomind/cli/dist/src/commands/browse.js +11 -2154
  117. package/packages/@monomind/cli/dist/src/commands/design-detect.d.ts +21 -0
  118. package/packages/@monomind/cli/dist/src/commands/design-detect.js +127 -0
  119. package/packages/@monomind/cli/dist/src/commands/design-palette.d.ts +22 -0
  120. package/packages/@monomind/cli/dist/src/commands/design-palette.js +539 -0
  121. package/packages/@monomind/cli/dist/src/commands/hooks-core-commands.d.ts +10 -0
  122. package/packages/@monomind/cli/dist/src/commands/hooks-core-commands.js +377 -0
  123. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-commands.d.ts +12 -0
  124. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-commands.js +1217 -0
  125. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-utils.d.ts +42 -0
  126. package/packages/@monomind/cli/dist/src/commands/hooks-coverage-utils.js +220 -0
  127. package/packages/@monomind/cli/dist/src/commands/hooks-extended-commands.d.ts +14 -0
  128. package/packages/@monomind/cli/dist/src/commands/hooks-extended-commands.js +579 -0
  129. package/packages/@monomind/cli/dist/src/commands/hooks-formatting.d.ts +13 -0
  130. package/packages/@monomind/cli/dist/src/commands/hooks-formatting.js +42 -0
  131. package/packages/@monomind/cli/dist/src/commands/hooks-routing-commands.d.ts +15 -0
  132. package/packages/@monomind/cli/dist/src/commands/hooks-routing-commands.js +723 -0
  133. package/packages/@monomind/cli/dist/src/commands/hooks-workers.d.ts +9 -0
  134. package/packages/@monomind/cli/dist/src/commands/hooks-workers.js +782 -0
  135. package/packages/@monomind/cli/dist/src/commands/hooks.d.ts +8 -0
  136. package/packages/@monomind/cli/dist/src/commands/hooks.js +179 -4103
  137. package/packages/@monomind/cli/dist/src/commands/index.d.ts +1 -0
  138. package/packages/@monomind/cli/dist/src/commands/index.js +6 -0
  139. package/packages/@monomind/cli/dist/src/commands/org.js +14 -15
  140. package/packages/@monomind/cli/dist/src/commands/tokens.js +77 -1
  141. package/packages/@monomind/cli/dist/src/graph/enrich.mjs +362 -0
  142. package/packages/@monomind/cli/dist/src/init/executor.js +18 -8
  143. package/packages/@monomind/cli/dist/src/init/settings-generator.js +39 -5
  144. package/packages/@monomind/cli/dist/src/init/statusline-generator.js +25 -5
  145. package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.d.ts +3 -5
  146. package/packages/@monomind/cli/dist/src/mcp-tools/browser-tools.js +619 -326
  147. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-embedding.d.ts +161 -0
  148. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-embedding.js +506 -0
  149. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-intelligence.d.ts +26 -0
  150. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-intelligence.js +1328 -0
  151. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-routing.d.ts +27 -0
  152. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-routing.js +1591 -0
  153. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.d.ts +3 -38
  154. package/packages/@monomind/cli/dist/src/mcp-tools/hooks-tools.js +5 -3393
  155. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +24 -14
  156. package/packages/@monomind/cli/dist/src/mcp-tools/workflow-tools.js +54 -1
  157. package/packages/@monomind/cli/dist/src/memory/embedding-operations.d.ts +58 -0
  158. package/packages/@monomind/cli/dist/src/memory/embedding-operations.js +299 -0
  159. package/packages/@monomind/cli/dist/src/memory/ewc-consolidation.js +37 -3
  160. package/packages/@monomind/cli/dist/src/memory/hnsw-operations.d.ts +130 -0
  161. package/packages/@monomind/cli/dist/src/memory/hnsw-operations.js +400 -0
  162. package/packages/@monomind/cli/dist/src/memory/intelligence.js +42 -23
  163. package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +52 -8
  164. package/packages/@monomind/cli/dist/src/memory/memory-crud.d.ts +67 -0
  165. package/packages/@monomind/cli/dist/src/memory/memory-crud.js +415 -0
  166. package/packages/@monomind/cli/dist/src/memory/memory-initializer.d.ts +9 -322
  167. package/packages/@monomind/cli/dist/src/memory/memory-initializer.js +17 -1794
  168. package/packages/@monomind/cli/dist/src/memory/memory-migrations.d.ts +30 -0
  169. package/packages/@monomind/cli/dist/src/memory/memory-migrations.js +134 -0
  170. package/packages/@monomind/cli/dist/src/memory/memory-read.d.ts +78 -0
  171. package/packages/@monomind/cli/dist/src/memory/memory-read.js +331 -0
  172. package/packages/@monomind/cli/dist/src/memory/memory-schema.d.ts +13 -0
  173. package/packages/@monomind/cli/dist/src/memory/memory-schema.js +167 -0
  174. package/packages/@monomind/cli/dist/src/memory/sona-optimizer.js +37 -4
  175. package/packages/@monomind/cli/dist/src/monovector/route-outcomes.js +16 -6
  176. package/packages/@monomind/cli/dist/src/pricing/model-pricing.d.ts +41 -0
  177. package/packages/@monomind/cli/dist/src/pricing/model-pricing.js +61 -0
  178. package/packages/@monomind/cli/dist/src/ui/.monomind/capture/active-run.json +1 -0
  179. package/packages/@monomind/cli/dist/src/ui/collector.mjs +799 -0
  180. package/packages/@monomind/cli/dist/src/ui/dashboard.html +13986 -0
  181. package/packages/@monomind/cli/dist/src/ui/data/agent-avatars.html +763 -0
  182. package/packages/@monomind/cli/dist/src/ui/data/agent-avatars.json +966 -0
  183. package/packages/@monomind/cli/dist/src/ui/data/avatars/account-strategist.svg +58 -0
  184. package/packages/@monomind/cli/dist/src/ui/data/avatars/accounts-payable.svg +54 -0
  185. package/packages/@monomind/cli/dist/src/ui/data/avatars/adaptive-coordinator.svg +55 -0
  186. package/packages/@monomind/cli/dist/src/ui/data/avatars/adaptive-coordinator2.svg +54 -0
  187. package/packages/@monomind/cli/dist/src/ui/data/avatars/ai-citation.svg +57 -0
  188. package/packages/@monomind/cli/dist/src/ui/data/avatars/ai-engineer.svg +61 -0
  189. package/packages/@monomind/cli/dist/src/ui/data/avatars/analytics-reporter.svg +53 -0
  190. package/packages/@monomind/cli/dist/src/ui/data/avatars/api-tester.svg +53 -0
  191. package/packages/@monomind/cli/dist/src/ui/data/avatars/architecture.svg +54 -0
  192. package/packages/@monomind/cli/dist/src/ui/data/avatars/automation-governance.svg +55 -0
  193. package/packages/@monomind/cli/dist/src/ui/data/avatars/backend-dev.svg +53 -0
  194. package/packages/@monomind/cli/dist/src/ui/data/avatars/benchmarker.svg +54 -0
  195. package/packages/@monomind/cli/dist/src/ui/data/avatars/blockchain-auditor.svg +53 -0
  196. package/packages/@monomind/cli/dist/src/ui/data/avatars/byzantine-coord.svg +57 -0
  197. package/packages/@monomind/cli/dist/src/ui/data/avatars/case-analyst.svg +57 -0
  198. package/packages/@monomind/cli/dist/src/ui/data/avatars/cicd-engineer.svg +55 -0
  199. package/packages/@monomind/cli/dist/src/ui/data/avatars/cloud-architect.svg +54 -0
  200. package/packages/@monomind/cli/dist/src/ui/data/avatars/code-review-swarm.svg +57 -0
  201. package/packages/@monomind/cli/dist/src/ui/data/avatars/coder-v119.svg +57 -0
  202. package/packages/@monomind/cli/dist/src/ui/data/avatars/coder.svg +58 -0
  203. package/packages/@monomind/cli/dist/src/ui/data/avatars/collective-coord.svg +54 -0
  204. package/packages/@monomind/cli/dist/src/ui/data/avatars/compliance-auditor.svg +58 -0
  205. package/packages/@monomind/cli/dist/src/ui/data/avatars/consensus-coordinator.svg +54 -0
  206. package/packages/@monomind/cli/dist/src/ui/data/avatars/content-creator.svg +54 -0
  207. package/packages/@monomind/cli/dist/src/ui/data/avatars/crdt-synchronizer.svg +53 -0
  208. package/packages/@monomind/cli/dist/src/ui/data/avatars/cro-specialist.svg +58 -0
  209. package/packages/@monomind/cli/dist/src/ui/data/avatars/data-consolidator.svg +54 -0
  210. package/packages/@monomind/cli/dist/src/ui/data/avatars/data-engineer.svg +53 -0
  211. package/packages/@monomind/cli/dist/src/ui/data/avatars/database-optimizer.svg +61 -0
  212. package/packages/@monomind/cli/dist/src/ui/data/avatars/deal-strategist.svg +54 -0
  213. package/packages/@monomind/cli/dist/src/ui/data/avatars/defender.svg +53 -0
  214. package/packages/@monomind/cli/dist/src/ui/data/avatars/devops-automator.svg +56 -0
  215. package/packages/@monomind/cli/dist/src/ui/data/avatars/discovery-coach.svg +54 -0
  216. package/packages/@monomind/cli/dist/src/ui/data/avatars/email-marketing.svg +57 -0
  217. package/packages/@monomind/cli/dist/src/ui/data/avatars/embedded-firmware.svg +61 -0
  218. package/packages/@monomind/cli/dist/src/ui/data/avatars/evidence-collector.svg +57 -0
  219. package/packages/@monomind/cli/dist/src/ui/data/avatars/experiment-tracker.svg +53 -0
  220. package/packages/@monomind/cli/dist/src/ui/data/avatars/feedback-synthesizer.svg +54 -0
  221. package/packages/@monomind/cli/dist/src/ui/data/avatars/finance-tracker.svg +54 -0
  222. package/packages/@monomind/cli/dist/src/ui/data/avatars/frontend-developer.svg +54 -0
  223. package/packages/@monomind/cli/dist/src/ui/data/avatars/game-audio-engineer.svg +59 -0
  224. package/packages/@monomind/cli/dist/src/ui/data/avatars/game-designer.svg +54 -0
  225. package/packages/@monomind/cli/dist/src/ui/data/avatars/gossip-coordinator.svg +54 -0
  226. package/packages/@monomind/cli/dist/src/ui/data/avatars/hierarchical-coord.svg +54 -0
  227. package/packages/@monomind/cli/dist/src/ui/data/avatars/incident-commander.svg +57 -0
  228. package/packages/@monomind/cli/dist/src/ui/data/avatars/infrastructure.svg +54 -0
  229. package/packages/@monomind/cli/dist/src/ui/data/avatars/input-validator.svg +53 -0
  230. package/packages/@monomind/cli/dist/src/ui/data/avatars/ios-developer.svg +54 -0
  231. package/packages/@monomind/cli/dist/src/ui/data/avatars/issue-tracker.svg +53 -0
  232. package/packages/@monomind/cli/dist/src/ui/data/avatars/judge.svg +55 -0
  233. package/packages/@monomind/cli/dist/src/ui/data/avatars/launch-strategist.svg +54 -0
  234. package/packages/@monomind/cli/dist/src/ui/data/avatars/legal-compliance.svg +53 -0
  235. package/packages/@monomind/cli/dist/src/ui/data/avatars/level-designer.svg +53 -0
  236. package/packages/@monomind/cli/dist/src/ui/data/avatars/load-balancer.svg +57 -0
  237. package/packages/@monomind/cli/dist/src/ui/data/avatars/mcp-builder.svg +53 -0
  238. package/packages/@monomind/cli/dist/src/ui/data/avatars/memory-coordinator.svg +55 -0
  239. package/packages/@monomind/cli/dist/src/ui/data/avatars/mesh-coordinator.svg +55 -0
  240. package/packages/@monomind/cli/dist/src/ui/data/avatars/ml-developer.svg +58 -0
  241. package/packages/@monomind/cli/dist/src/ui/data/avatars/mobile-app-builder.svg +53 -0
  242. package/packages/@monomind/cli/dist/src/ui/data/avatars/mobile-dev.svg +54 -0
  243. package/packages/@monomind/cli/dist/src/ui/data/avatars/model-qa.svg +58 -0
  244. package/packages/@monomind/cli/dist/src/ui/data/avatars/narrative-designer.svg +58 -0
  245. package/packages/@monomind/cli/dist/src/ui/data/avatars/outbound-strategist.svg +55 -0
  246. package/packages/@monomind/cli/dist/src/ui/data/avatars/path-validator.svg +54 -0
  247. package/packages/@monomind/cli/dist/src/ui/data/avatars/payment-agent.svg +53 -0
  248. package/packages/@monomind/cli/dist/src/ui/data/avatars/perf-analyzer.svg +58 -0
  249. package/packages/@monomind/cli/dist/src/ui/data/avatars/pipeline-analyst.svg +54 -0
  250. package/packages/@monomind/cli/dist/src/ui/data/avatars/planner.svg +55 -0
  251. package/packages/@monomind/cli/dist/src/ui/data/avatars/pr-manager.svg +54 -0
  252. package/packages/@monomind/cli/dist/src/ui/data/avatars/pricing-strategist.svg +54 -0
  253. package/packages/@monomind/cli/dist/src/ui/data/avatars/product-manager.svg +54 -0
  254. package/packages/@monomind/cli/dist/src/ui/data/avatars/production-validator.svg +54 -0
  255. package/packages/@monomind/cli/dist/src/ui/data/avatars/project-shepherd.svg +54 -0
  256. package/packages/@monomind/cli/dist/src/ui/data/avatars/proposal-strategist.svg +54 -0
  257. package/packages/@monomind/cli/dist/src/ui/data/avatars/prosecutor.svg +57 -0
  258. package/packages/@monomind/cli/dist/src/ui/data/avatars/pseudocode.svg +53 -0
  259. package/packages/@monomind/cli/dist/src/ui/data/avatars/queen-coordinator.svg +55 -0
  260. package/packages/@monomind/cli/dist/src/ui/data/avatars/quorum-manager.svg +53 -0
  261. package/packages/@monomind/cli/dist/src/ui/data/avatars/raft-manager.svg +53 -0
  262. package/packages/@monomind/cli/dist/src/ui/data/avatars/reality-checker.svg +58 -0
  263. package/packages/@monomind/cli/dist/src/ui/data/avatars/recruitment.svg +58 -0
  264. package/packages/@monomind/cli/dist/src/ui/data/avatars/refinement.svg +53 -0
  265. package/packages/@monomind/cli/dist/src/ui/data/avatars/release-manager.svg +54 -0
  266. package/packages/@monomind/cli/dist/src/ui/data/avatars/repo-architect.svg +54 -0
  267. package/packages/@monomind/cli/dist/src/ui/data/avatars/researcher.svg +58 -0
  268. package/packages/@monomind/cli/dist/src/ui/data/avatars/resource-allocator.svg +53 -0
  269. package/packages/@monomind/cli/dist/src/ui/data/avatars/reviewer.svg +53 -0
  270. package/packages/@monomind/cli/dist/src/ui/data/avatars/safe-executor.svg +53 -0
  271. package/packages/@monomind/cli/dist/src/ui/data/avatars/sales-coach.svg +53 -0
  272. package/packages/@monomind/cli/dist/src/ui/data/avatars/sales-engineer.svg +58 -0
  273. package/packages/@monomind/cli/dist/src/ui/data/avatars/scout-explorer.svg +58 -0
  274. package/packages/@monomind/cli/dist/src/ui/data/avatars/security-architect.svg +54 -0
  275. package/packages/@monomind/cli/dist/src/ui/data/avatars/security-auditor.svg +55 -0
  276. package/packages/@monomind/cli/dist/src/ui/data/avatars/senior-developer.svg +58 -0
  277. package/packages/@monomind/cli/dist/src/ui/data/avatars/senior-pm.svg +58 -0
  278. package/packages/@monomind/cli/dist/src/ui/data/avatars/seo-specialist.svg +57 -0
  279. package/packages/@monomind/cli/dist/src/ui/data/avatars/social-media.svg +54 -0
  280. package/packages/@monomind/cli/dist/src/ui/data/avatars/solidity-engineer.svg +58 -0
  281. package/packages/@monomind/cli/dist/src/ui/data/avatars/sparc-coder.svg +58 -0
  282. package/packages/@monomind/cli/dist/src/ui/data/avatars/sparc-coord.svg +56 -0
  283. package/packages/@monomind/cli/dist/src/ui/data/avatars/specification.svg +57 -0
  284. package/packages/@monomind/cli/dist/src/ui/data/avatars/sprint-prioritizer.svg +53 -0
  285. package/packages/@monomind/cli/dist/src/ui/data/avatars/sre.svg +54 -0
  286. package/packages/@monomind/cli/dist/src/ui/data/avatars/studio-operations.svg +53 -0
  287. package/packages/@monomind/cli/dist/src/ui/data/avatars/studio-producer.svg +55 -0
  288. package/packages/@monomind/cli/dist/src/ui/data/avatars/support-responder.svg +56 -0
  289. package/packages/@monomind/cli/dist/src/ui/data/avatars/system-architect.svg +54 -0
  290. package/packages/@monomind/cli/dist/src/ui/data/avatars/task-orchestrator.svg +56 -0
  291. package/packages/@monomind/cli/dist/src/ui/data/avatars/technical-artist.svg +53 -0
  292. package/packages/@monomind/cli/dist/src/ui/data/avatars/technical-writer.svg +59 -0
  293. package/packages/@monomind/cli/dist/src/ui/data/avatars/tester.svg +53 -0
  294. package/packages/@monomind/cli/dist/src/ui/data/avatars/threat-detection.svg +61 -0
  295. package/packages/@monomind/cli/dist/src/ui/data/avatars/trend-researcher.svg +54 -0
  296. package/packages/@monomind/cli/dist/src/ui/data/avatars/trial-director.svg +55 -0
  297. package/packages/@monomind/cli/dist/src/ui/data/avatars/unity-architect.svg +54 -0
  298. package/packages/@monomind/cli/dist/src/ui/data/avatars/visionos-engineer.svg +57 -0
  299. package/packages/@monomind/cli/dist/src/ui/data/avatars/worker-specialist.svg +55 -0
  300. package/packages/@monomind/cli/dist/src/ui/data/avatars/workflow-architect.svg +57 -0
  301. package/packages/@monomind/cli/dist/src/ui/data/avatars/workflow-automation.svg +54 -0
  302. package/packages/@monomind/cli/dist/src/ui/data/avatars/zk-steward.svg +54 -0
  303. package/packages/@monomind/cli/dist/src/ui/data/known-projects.json +1 -0
  304. package/packages/@monomind/cli/dist/src/ui/data/mastermind-sessions.json +1 -0
  305. package/packages/@monomind/cli/dist/src/ui/data/sessions/_index.json +1 -0
  306. package/packages/@monomind/cli/dist/src/ui/orgs.html +2215 -0
  307. package/packages/@monomind/cli/dist/src/ui/server.mjs +6175 -0
  308. package/packages/@monomind/cli/dist/src/ui/sse-manager.mjs +119 -0
  309. package/packages/@monomind/cli/dist/src/update/checker.js +1 -1
  310. package/packages/@monomind/cli/dist/workflow/builtin-handlers.js +321 -0
  311. package/packages/@monomind/cli/dist/workflow/engine.js +253 -0
  312. package/packages/@monomind/cli/dist/workflow/expression.js +98 -0
  313. package/packages/@monomind/cli/dist/workflow/types.js +2 -0
  314. package/packages/@monomind/cli/package.json +8 -5
@@ -0,0 +1,145 @@
1
+ import { readFile, mkdir, writeFile } from 'fs/promises';
2
+ import { join } from 'path';
3
+ import { homedir } from 'os';
4
+ export class WorkflowStoreError extends Error {
5
+ cause;
6
+ constructor(message, cause) {
7
+ super(message);
8
+ this.cause = cause;
9
+ this.name = 'WorkflowStoreError';
10
+ }
11
+ }
12
+ // ── JSON file operations ──────────────────────────────────────────────────────
13
+ export async function readWorkflow(filePath) {
14
+ let raw;
15
+ try {
16
+ raw = await readFile(filePath, 'utf8');
17
+ }
18
+ catch (err) {
19
+ const code = err.code;
20
+ throw new WorkflowStoreError(code === 'ENOENT' ? `Workflow file not found: ${filePath}` : `Cannot read workflow file: ${filePath}`, err);
21
+ }
22
+ try {
23
+ const wf = JSON.parse(raw);
24
+ if (!wf.id || !Array.isArray(wf.nodes) || !Array.isArray(wf.connections)) {
25
+ throw new Error('Missing required fields: id, nodes, connections');
26
+ }
27
+ return wf;
28
+ }
29
+ catch (err) {
30
+ throw new WorkflowStoreError(`Invalid workflow JSON in ${filePath}: ${err.message}`, err);
31
+ }
32
+ }
33
+ // ── SQLite run history (sql.js) ───────────────────────────────────────────────
34
+ const DB_PATH = join(homedir(), '.monomind', 'browse.db');
35
+ async function getDb() {
36
+ const { default: initSqlJs } = await import('sql.js');
37
+ const SQL = await initSqlJs();
38
+ await mkdir(join(homedir(), '.monomind'), { recursive: true });
39
+ let fileBuffer;
40
+ try {
41
+ fileBuffer = await readFile(DB_PATH);
42
+ }
43
+ catch {
44
+ // First run — no DB yet
45
+ }
46
+ const db = fileBuffer ? new SQL.Database(fileBuffer) : new SQL.Database();
47
+ db.run(`CREATE TABLE IF NOT EXISTS browse_runs (
48
+ id TEXT PRIMARY KEY,
49
+ workflow_id TEXT NOT NULL,
50
+ workflow_name TEXT NOT NULL,
51
+ status TEXT NOT NULL,
52
+ started_at INTEGER NOT NULL,
53
+ completed_at INTEGER,
54
+ items_processed INTEGER DEFAULT 0,
55
+ items_total INTEGER DEFAULT 0,
56
+ error TEXT
57
+ )`);
58
+ db.run(`CREATE TABLE IF NOT EXISTS browse_sessions (
59
+ id TEXT PRIMARY KEY,
60
+ platform TEXT NOT NULL,
61
+ username TEXT NOT NULL,
62
+ cookies TEXT NOT NULL,
63
+ user_agent TEXT,
64
+ created_at INTEGER NOT NULL,
65
+ last_used_at INTEGER NOT NULL
66
+ )`);
67
+ return { db, flush: async () => {
68
+ const data = db.export();
69
+ await writeFile(DB_PATH, Buffer.from(data));
70
+ } };
71
+ }
72
+ export async function writeRunRecord(record) {
73
+ const { db, flush } = await getDb();
74
+ db.run(`INSERT OR REPLACE INTO browse_runs
75
+ (id, workflow_id, workflow_name, status, started_at, completed_at, items_processed, items_total, error)
76
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, [record.id, record.workflowId, record.workflowName, record.status,
77
+ record.startedAt, record.completedAt ?? null, record.itemsProcessed,
78
+ record.itemsTotal, record.error ?? null]);
79
+ await flush();
80
+ }
81
+ export async function listRuns(workflowId) {
82
+ const { db } = await getDb();
83
+ const query = workflowId
84
+ ? db.prepare(`SELECT * FROM browse_runs WHERE workflow_id = ? ORDER BY started_at DESC LIMIT 50`)
85
+ : db.prepare(`SELECT * FROM browse_runs ORDER BY started_at DESC LIMIT 50`);
86
+ const rows = [];
87
+ if (workflowId)
88
+ query.bind([workflowId]);
89
+ while (query.step()) {
90
+ const r = query.getAsObject();
91
+ rows.push({
92
+ id: r['id'],
93
+ workflowId: r['workflow_id'],
94
+ workflowName: r['workflow_name'],
95
+ status: r['status'],
96
+ startedAt: r['started_at'],
97
+ completedAt: r['completed_at'],
98
+ itemsProcessed: r['items_processed'],
99
+ itemsTotal: r['items_total'],
100
+ error: r['error'],
101
+ });
102
+ }
103
+ query.free();
104
+ return rows;
105
+ }
106
+ export async function saveSession(session) {
107
+ const now = Date.now();
108
+ const { db, flush } = await getDb();
109
+ db.run(`INSERT OR REPLACE INTO browse_sessions
110
+ (id, platform, username, cookies, user_agent, created_at, last_used_at)
111
+ VALUES (?, ?, ?, ?, ?, ?, ?)`, [session.id, session.platform, session.username, session.cookies,
112
+ session.userAgent ?? null, now, now]);
113
+ await flush();
114
+ }
115
+ export async function listSessions() {
116
+ const { db } = await getDb();
117
+ const query = db.prepare(`SELECT id, platform, username, last_used_at FROM browse_sessions ORDER BY last_used_at DESC`);
118
+ const rows = [];
119
+ while (query.step()) {
120
+ const r = query.getAsObject();
121
+ rows.push({ id: r['id'], platform: r['platform'],
122
+ username: r['username'], lastUsedAt: r['last_used_at'] });
123
+ }
124
+ query.free();
125
+ return rows;
126
+ }
127
+ export async function deleteSession(id) {
128
+ const { db, flush } = await getDb();
129
+ db.run(`DELETE FROM browse_sessions WHERE id = ?`, [id]);
130
+ await flush();
131
+ }
132
+ export async function getSessionCookies(platform, username) {
133
+ const { db } = await getDb();
134
+ const stmt = db.prepare(`SELECT cookies FROM browse_sessions WHERE platform = ? AND username = ? LIMIT 1`);
135
+ stmt.bind([platform, username]);
136
+ if (stmt.step()) {
137
+ const r = stmt.getAsObject();
138
+ stmt.free();
139
+ db.run(`UPDATE browse_sessions SET last_used_at = ? WHERE platform = ? AND username = ?`, [Date.now(), platform, username]);
140
+ return r['cookies'];
141
+ }
142
+ stmt.free();
143
+ return null;
144
+ }
145
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1,48 @@
1
+ export interface WorkflowDef {
2
+ id: string;
3
+ name: string;
4
+ nodes: NodeDef[];
5
+ connections: ConnectionDef[];
6
+ }
7
+ export interface NodeDef {
8
+ id: string;
9
+ type: string;
10
+ name?: string;
11
+ config: Record<string, unknown>;
12
+ onError?: 'skip' | 'stop';
13
+ }
14
+ export interface ConnectionDef {
15
+ from: string;
16
+ to: string;
17
+ handle?: string;
18
+ }
19
+ export interface Item {
20
+ data: Record<string, unknown>;
21
+ binary?: string;
22
+ }
23
+ export type RunStatus = 'running' | 'completed' | 'failed' | 'stopped';
24
+ export interface RunRecord {
25
+ id: string;
26
+ workflowId: string;
27
+ workflowName: string;
28
+ status: RunStatus;
29
+ startedAt: number;
30
+ completedAt?: number;
31
+ itemsProcessed: number;
32
+ itemsTotal: number;
33
+ error?: string;
34
+ }
35
+ export interface StepEvent {
36
+ runId: string;
37
+ workflowId: string;
38
+ workflowName: string;
39
+ nodeId: string;
40
+ nodeName: string;
41
+ eventType: 'run_started' | 'step_started' | 'step_completed' | 'step_failed' | 'run_completed' | 'run_stopped';
42
+ itemIndex?: number;
43
+ itemTotal?: number;
44
+ durationMs?: number;
45
+ error?: string;
46
+ timestamp: number;
47
+ }
48
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,4 @@
1
+ import type { Command } from '../types.js';
2
+ export declare const browseActionCommand: Command;
3
+ export default browseActionCommand;
4
+ //# sourceMappingURL=browse-action.d.ts.map
@@ -0,0 +1,151 @@
1
+ import { readdir, readFile } from 'fs/promises';
2
+ import { join } from 'path';
3
+ import { output } from '../output.js';
4
+ const buildSubcommand = {
5
+ name: 'build',
6
+ description: 'AI-powered: open a URL, analyze DOM, generate an action JSON file',
7
+ options: [
8
+ { name: 'url', short: 'u', type: 'string', description: 'URL to analyze', required: true },
9
+ { name: 'task', short: 't', type: 'string', description: 'What you want the action to do', required: true },
10
+ { name: 'port', type: 'number', description: 'CDP port', default: 9222 },
11
+ { name: 'output', short: 'o', type: 'string', description: 'Output directory', default: '.monomind/actions' },
12
+ ],
13
+ action: async (ctx) => {
14
+ const url = ctx.flags.url;
15
+ const task = ctx.flags.task;
16
+ const port = ctx.flags.port ?? 9222;
17
+ const outDir = join(ctx.cwd, ctx.flags.output ?? '.monomind/actions');
18
+ if (!url || !task) {
19
+ output.printError('--url and --task are required');
20
+ return { success: false, exitCode: 1 };
21
+ }
22
+ if (!process.env.ANTHROPIC_API_KEY) {
23
+ output.printError('ANTHROPIC_API_KEY is not set. Required for action build.');
24
+ return { success: false, exitCode: 1 };
25
+ }
26
+ const spinner = output.createSpinner({ text: `Opening ${url}...`, spinner: 'dots' });
27
+ spinner.start();
28
+ try {
29
+ const browser = await import('@monoes/monobrowse');
30
+ const cdpPort = await browser.launchBrowser({ port, headless: false });
31
+ const { client, sessionId } = await browser.connectToTarget(cdpPort);
32
+ spinner.stop('Navigated. Analyzing DOM...');
33
+ const { analyzeAndBuild } = await import('../browser/action-builder/analyzer.js');
34
+ const action = await analyzeAndBuild({ url, task, client, sessionId, outputDir: outDir });
35
+ spinner.succeed(`Action generated: ${action.id}`);
36
+ output.writeln();
37
+ output.printBox([
38
+ `ID: ${action.id}`,
39
+ `Platform: ${action.platform}`,
40
+ `Steps: ${action.steps.length}`,
41
+ `Params: ${action.params.join(', ')}`,
42
+ `Saved to: ${outDir}/${action.id.replace(/[^a-z0-9_-]/gi, '_')}.json`,
43
+ ].join('\n'), 'Action Built');
44
+ client.close();
45
+ return { success: true, data: action };
46
+ }
47
+ catch (err) {
48
+ spinner.fail('Action build failed');
49
+ output.printError(err.message);
50
+ return { success: false, exitCode: 1 };
51
+ }
52
+ },
53
+ };
54
+ const listSubcommand = {
55
+ name: 'list',
56
+ aliases: ['ls'],
57
+ description: 'List available actions (built-in + custom)',
58
+ action: async (ctx) => {
59
+ const customDir = join(ctx.cwd, '.monomind', 'actions');
60
+ let customFiles = [];
61
+ try {
62
+ customFiles = (await readdir(customDir)).filter(f => f.endsWith('.json'));
63
+ }
64
+ catch { }
65
+ const builtinActions = [
66
+ { id: 'linkedin:comment_post', platform: 'linkedin', name: 'Comment on Post', source: 'built-in' },
67
+ { id: 'linkedin:like_post', platform: 'linkedin', name: 'Like Post', source: 'built-in' },
68
+ { id: 'linkedin:send_connection', platform: 'linkedin', name: 'Send Connection Request', source: 'built-in' },
69
+ { id: 'linkedin:publish_post', platform: 'linkedin', name: 'Publish Post', source: 'built-in' },
70
+ { id: 'instagram:like_post', platform: 'instagram', name: 'Like Post', source: 'built-in' },
71
+ { id: 'instagram:comment_post', platform: 'instagram', name: 'Comment on Post', source: 'built-in' },
72
+ { id: 'instagram:follow_user', platform: 'instagram', name: 'Follow User', source: 'built-in' },
73
+ { id: 'x:like_post', platform: 'x', name: 'Like Post', source: 'built-in' },
74
+ { id: 'x:reply_post', platform: 'x', name: 'Reply to Post', source: 'built-in' },
75
+ { id: 'x:follow_user', platform: 'x', name: 'Follow User', source: 'built-in' },
76
+ { id: 'gemini:submit_prompt', platform: 'gemini', name: 'Submit Prompt', source: 'built-in' },
77
+ ];
78
+ const customActions = await Promise.all(customFiles.map(async (f) => {
79
+ try {
80
+ const raw = await readFile(join(customDir, f), 'utf8');
81
+ const def = JSON.parse(raw);
82
+ return { id: def.id, platform: def.platform ?? 'custom', name: def.name, source: 'custom' };
83
+ }
84
+ catch {
85
+ return null;
86
+ }
87
+ }));
88
+ const all = [...builtinActions, ...customActions.filter(Boolean)];
89
+ output.printTable({
90
+ columns: [
91
+ { key: 'id', header: 'Action ID', width: 30 },
92
+ { key: 'platform', header: 'Platform', width: 12 },
93
+ { key: 'name', header: 'Name', width: 25 },
94
+ { key: 'source', header: 'Source', width: 10 },
95
+ ],
96
+ data: all,
97
+ });
98
+ return { success: true };
99
+ },
100
+ };
101
+ const showSubcommand = {
102
+ name: 'show',
103
+ description: 'Print an action definition JSON',
104
+ action: async (ctx) => {
105
+ const actionId = ctx.args[0];
106
+ if (!actionId) {
107
+ output.printError('Action ID required');
108
+ return { success: false, exitCode: 1 };
109
+ }
110
+ const customDir = join(ctx.cwd, '.monomind', 'actions');
111
+ const filename = actionId.replace(/[^a-z0-9_-]/gi, '_') + '.json';
112
+ try {
113
+ const raw = await readFile(join(customDir, filename), 'utf8');
114
+ output.printJson(JSON.parse(raw));
115
+ return { success: true };
116
+ }
117
+ catch {
118
+ output.printError(`Action not found: ${actionId}. Check "monomind browse action list".`);
119
+ return { success: false, exitCode: 1 };
120
+ }
121
+ },
122
+ };
123
+ const runSubcommand = {
124
+ name: 'run',
125
+ description: 'Run a single action directly',
126
+ options: [
127
+ { name: 'account', short: 'a', type: 'string', description: 'Platform account username' },
128
+ { name: 'params', short: 'p', type: 'array', description: 'Params as key=value pairs' },
129
+ { name: 'port', type: 'number', description: 'CDP port', default: 9222 },
130
+ ],
131
+ action: async (ctx) => {
132
+ output.printInfo('Direct action run is coming soon. Use workflow run to execute actions.');
133
+ return { success: true };
134
+ },
135
+ };
136
+ export const browseActionCommand = {
137
+ name: 'action',
138
+ description: 'Manage and run browser actions',
139
+ subcommands: [buildSubcommand, runSubcommand, listSubcommand, showSubcommand],
140
+ action: async () => {
141
+ output.writeln(output.bold('browse action — usage:'));
142
+ output.printList([
143
+ 'monomind browse action build --url <url> --task "description"',
144
+ 'monomind browse action list',
145
+ 'monomind browse action show <action-id>',
146
+ ]);
147
+ return { success: true };
148
+ },
149
+ };
150
+ export default browseActionCommand;
151
+ //# sourceMappingURL=browse-action.js.map
@@ -0,0 +1,4 @@
1
+ import type { Command } from '../types.js';
2
+ export declare const browsePlatformCommand: Command;
3
+ export default browsePlatformCommand;
4
+ //# sourceMappingURL=browse-platform.d.ts.map
@@ -0,0 +1,117 @@
1
+ import { output } from '../output.js';
2
+ const SUPPORTED_PLATFORMS = ['linkedin', 'instagram', 'x', 'gemini'];
3
+ const connectSubcommand = {
4
+ name: 'connect',
5
+ description: 'Open browser, log in to a platform, save session',
6
+ options: [
7
+ { name: 'port', type: 'number', description: 'CDP port', default: 9222 },
8
+ ],
9
+ action: async (ctx) => {
10
+ const platform = ctx.args[0];
11
+ if (!platform || !SUPPORTED_PLATFORMS.includes(platform)) {
12
+ output.printError(`Platform required: ${SUPPORTED_PLATFORMS.join(', ')}`);
13
+ return { success: false, exitCode: 1 };
14
+ }
15
+ const { getAdapter } = await import('../browser/adapters/index.js');
16
+ const { saveSession } = await import('../browser/workflow/store.js');
17
+ const browser = await import('@monoes/monobrowse');
18
+ const adapter = getAdapter(platform);
19
+ const port = ctx.flags.port ?? 9222;
20
+ output.printInfo(`Opening browser → navigating to ${adapter.loginURL()}`);
21
+ output.printInfo('Please log in. Detection is automatic — checking every 2s...');
22
+ const cdpPort = await browser.launchBrowser({ port, headless: false });
23
+ const { client, sessionId } = await browser.connectToTarget(cdpPort);
24
+ const cdpClient = client;
25
+ await cdpClient.send('Page.navigate', { url: adapter.loginURL() }, sessionId);
26
+ const page = {
27
+ client: cdpClient, sessionId,
28
+ async evaluate(fn) {
29
+ const result = await cdpClient.send('Runtime.evaluate', { expression: fn, returnByValue: true }, sessionId);
30
+ return result.result.value;
31
+ },
32
+ async url() {
33
+ const result = await cdpClient.send('Runtime.evaluate', { expression: 'window.location.href', returnByValue: true }, sessionId);
34
+ return result.result.value;
35
+ },
36
+ };
37
+ // Poll for login
38
+ let loggedIn = false;
39
+ for (let i = 0; i < 30; i++) {
40
+ await new Promise(r => setTimeout(r, 2000));
41
+ loggedIn = await adapter.isLoggedIn(page).catch(() => false);
42
+ if (loggedIn)
43
+ break;
44
+ process.stdout.write('.');
45
+ }
46
+ process.stdout.write('\n');
47
+ if (!loggedIn) {
48
+ output.printError('Login not detected after 60s. Please try again.');
49
+ client.close();
50
+ return { success: false, exitCode: 1 };
51
+ }
52
+ const username = await adapter.extractUsername(page).catch(() => 'unknown');
53
+ const cookieResult = await cdpClient.send('Network.getAllCookies', {}, sessionId);
54
+ const cookies = JSON.stringify(cookieResult.cookies);
55
+ const sessionId_ = `${platform}:${username}`;
56
+ await saveSession({ id: sessionId_, platform, username, cookies });
57
+ output.printSuccess(`Connected ${platform} as ${username} (session saved)`);
58
+ cdpClient.close();
59
+ return { success: true };
60
+ },
61
+ };
62
+ const listSubcommand = {
63
+ name: 'list',
64
+ aliases: ['ls'],
65
+ description: 'List connected platform accounts',
66
+ action: async () => {
67
+ const { listSessions } = await import('../browser/workflow/store.js');
68
+ const sessions = await listSessions();
69
+ if (sessions.length === 0) {
70
+ output.printInfo('No connected accounts. Use: monomind browse platform connect <platform>');
71
+ return { success: true };
72
+ }
73
+ output.printTable({
74
+ columns: [
75
+ { key: 'platform', header: 'Platform', width: 12 },
76
+ { key: 'username', header: 'Username', width: 25 },
77
+ { key: 'lastUsedAt', header: 'Last Used', width: 20,
78
+ format: (v) => new Date(v).toLocaleString() },
79
+ { key: 'id', header: 'Session ID', width: 30 },
80
+ ],
81
+ data: sessions,
82
+ });
83
+ return { success: true };
84
+ },
85
+ };
86
+ const disconnectSubcommand = {
87
+ name: 'disconnect',
88
+ description: 'Remove a saved platform session',
89
+ action: async (ctx) => {
90
+ const sessionId = ctx.args[0];
91
+ if (!sessionId) {
92
+ output.printError('Session ID required. Use "monomind browse platform list" to see IDs.');
93
+ return { success: false, exitCode: 1 };
94
+ }
95
+ const { deleteSession } = await import('../browser/workflow/store.js');
96
+ await deleteSession(sessionId);
97
+ output.printSuccess(`Session removed: ${sessionId}`);
98
+ return { success: true };
99
+ },
100
+ };
101
+ export const browsePlatformCommand = {
102
+ name: 'platform',
103
+ description: 'Manage platform connections (linkedin, instagram, x, gemini)',
104
+ subcommands: [connectSubcommand, listSubcommand, disconnectSubcommand],
105
+ action: async () => {
106
+ output.writeln(output.bold('browse platform — usage:'));
107
+ output.printList([
108
+ 'monomind browse platform connect <platform>',
109
+ 'monomind browse platform list',
110
+ 'monomind browse platform disconnect <session-id>',
111
+ ]);
112
+ output.writeln(`\nPlatforms: ${SUPPORTED_PLATFORMS.join(', ')}`);
113
+ return { success: true };
114
+ },
115
+ };
116
+ export default browsePlatformCommand;
117
+ //# sourceMappingURL=browse-platform.js.map
@@ -0,0 +1,4 @@
1
+ import type { Command } from '../types.js';
2
+ export declare const browseWorkflowCommand: Command;
3
+ export default browseWorkflowCommand;
4
+ //# sourceMappingURL=browse-workflow.d.ts.map
@@ -0,0 +1,153 @@
1
+ import { writeFile, mkdir } from 'fs/promises';
2
+ import { join, resolve, isAbsolute } from 'path';
3
+ import { output } from '../output.js';
4
+ import { input } from '../prompt.js';
5
+ const createSubcommand = {
6
+ name: 'create',
7
+ description: 'Scaffold a new workflow JSON file',
8
+ options: [
9
+ { name: 'output', short: 'o', type: 'string', description: 'Output directory', default: '.monomind/workflows' },
10
+ ],
11
+ action: async (ctx) => {
12
+ const name = ctx.args[0] ?? (ctx.interactive ? await input({ message: 'Workflow name:' }) : undefined);
13
+ if (!name || !/^[a-zA-Z0-9_-]{1,64}$/.test(name)) {
14
+ output.printError('Workflow name required (alphanumeric, dash, underscore, max 64 chars)');
15
+ return { success: false, exitCode: 1 };
16
+ }
17
+ const outDir = join(ctx.cwd, ctx.flags.output ?? '.monomind/workflows');
18
+ await mkdir(outDir, { recursive: true });
19
+ const filePath = join(outDir, `${name}.json`);
20
+ const template = {
21
+ id: name, name: name.replace(/-/g, ' ').replace(/\b\w/g, c => c.toUpperCase()),
22
+ nodes: [
23
+ { id: 'trigger', type: 'trigger.manual', config: {} },
24
+ { id: 'action1', type: 'action.linkedin.comment_post',
25
+ config: { post_url: '{{$json.url}}', text: '{{$json.comment}}', account: '{{$env.LINKEDIN_USER}}' } },
26
+ ],
27
+ connections: [{ from: 'trigger', to: 'action1' }],
28
+ };
29
+ await writeFile(filePath, JSON.stringify(template, null, 2));
30
+ output.printSuccess(`Created ${filePath}`);
31
+ output.printInfo('Edit the file, then run: monomind browse workflow run ' + filePath);
32
+ return { success: true };
33
+ },
34
+ };
35
+ const runSubcommand = {
36
+ name: 'run',
37
+ description: 'Execute a workflow JSON file',
38
+ options: [
39
+ { name: 'no-dashboard', type: 'boolean', description: 'Skip opening web dashboard', default: false },
40
+ { name: 'port', type: 'number', description: 'Dashboard port', default: 4242 },
41
+ { name: 'items', short: 'i', type: 'string', description: 'JSON file of input items array' },
42
+ ],
43
+ action: async (ctx) => {
44
+ const rawPath = ctx.args[0];
45
+ if (!rawPath) {
46
+ output.printError('Workflow file required: monomind browse workflow run <file.json>');
47
+ return { success: false, exitCode: 1 };
48
+ }
49
+ const filePath = isAbsolute(rawPath) ? rawPath : resolve(ctx.cwd, rawPath);
50
+ const { readWorkflow } = await import('../browser/workflow/store.js');
51
+ const { runWorkflow } = await import('../browser/workflow/engine.js');
52
+ const { getDashboardServer } = await import('../browser/dashboard/server.js');
53
+ const wf = await readWorkflow(filePath).catch(e => { output.printError(e.message); return null; });
54
+ if (!wf)
55
+ return { success: false, exitCode: 1 };
56
+ const port = ctx.flags.port ?? 4242;
57
+ const dashboard = getDashboardServer(port);
58
+ if (!ctx.flags['no-dashboard']) {
59
+ output.printInfo(`Dashboard: http://localhost:${dashboard.port}`);
60
+ const { exec } = await import('child_process');
61
+ exec(`open http://localhost:${dashboard.port}`).unref();
62
+ }
63
+ output.writeln(output.bold(`Running: ${wf.name}`));
64
+ const spinner = output.createSpinner({ text: 'Executing...', spinner: 'dots' });
65
+ spinner.start();
66
+ const record = await runWorkflow(wf, {
67
+ onEvent: (ev) => dashboard.broadcast(ev),
68
+ });
69
+ if (record.status === 'completed') {
70
+ spinner.succeed(`Done — ${record.itemsProcessed} items in ${((record.completedAt - record.startedAt) / 1000).toFixed(1)}s`);
71
+ }
72
+ else {
73
+ spinner.fail(`${record.status}${record.error ? ': ' + record.error : ''}`);
74
+ }
75
+ return { success: record.status === 'completed' };
76
+ },
77
+ };
78
+ const listSubcommand = {
79
+ name: 'list',
80
+ aliases: ['ls'],
81
+ description: 'List recent workflow runs',
82
+ action: async (ctx) => {
83
+ const { listRuns } = await import('../browser/workflow/store.js');
84
+ const runs = await listRuns();
85
+ if (runs.length === 0) {
86
+ output.printInfo('No runs found');
87
+ return { success: true };
88
+ }
89
+ output.printTable({
90
+ columns: [
91
+ { key: 'id', header: 'Run ID', width: 12 },
92
+ { key: 'workflowName', header: 'Workflow', width: 20 },
93
+ { key: 'status', header: 'Status', width: 10 },
94
+ { key: 'itemsProcessed', header: 'Items', width: 8, align: 'right' },
95
+ { key: 'startedAt', header: 'Started', width: 20,
96
+ format: (v) => new Date(v).toLocaleString() },
97
+ ],
98
+ data: runs,
99
+ });
100
+ return { success: true };
101
+ },
102
+ };
103
+ const statusSubcommand = {
104
+ name: 'status',
105
+ description: 'Show status of a specific run',
106
+ action: async (ctx) => {
107
+ const runId = ctx.args[0];
108
+ if (!runId) {
109
+ output.printError('Run ID required');
110
+ return { success: false, exitCode: 1 };
111
+ }
112
+ const { listRuns } = await import('../browser/workflow/store.js');
113
+ const runs = await listRuns();
114
+ const run = runs.find(r => r.id.startsWith(runId));
115
+ if (!run) {
116
+ output.printError(`Run not found: ${runId}`);
117
+ return { success: false, exitCode: 1 };
118
+ }
119
+ output.printBox([
120
+ `ID: ${run.id}`, `Workflow: ${run.workflowName}`, `Status: ${run.status}`,
121
+ `Items: ${run.itemsProcessed}/${run.itemsTotal}`,
122
+ `Started: ${new Date(run.startedAt).toLocaleString()}`,
123
+ run.completedAt ? `Completed: ${new Date(run.completedAt).toLocaleString()}` : '',
124
+ run.error ? `Error: ${run.error}` : '',
125
+ ].filter(Boolean).join('\n'), 'Run Status');
126
+ return { success: true };
127
+ },
128
+ };
129
+ const stopSubcommand = {
130
+ name: 'stop',
131
+ description: 'Stop a running workflow (sends abort signal)',
132
+ action: async (ctx) => {
133
+ output.printInfo('Stop is handled via the dashboard Stop button or Ctrl-C in the running terminal.');
134
+ return { success: true };
135
+ },
136
+ };
137
+ export const browseWorkflowCommand = {
138
+ name: 'workflow',
139
+ description: 'Browser workflow automation (create, run, list, status)',
140
+ subcommands: [createSubcommand, runSubcommand, listSubcommand, statusSubcommand, stopSubcommand],
141
+ action: async () => {
142
+ output.writeln(output.bold('browse workflow — usage:'));
143
+ output.printList([
144
+ 'monomind browse workflow create <name>',
145
+ 'monomind browse workflow run <file.json>',
146
+ 'monomind browse workflow list',
147
+ 'monomind browse workflow status <run-id>',
148
+ ]);
149
+ return { success: true };
150
+ },
151
+ };
152
+ export default browseWorkflowCommand;
153
+ //# sourceMappingURL=browse-workflow.js.map
@@ -1,8 +1,12 @@
1
- /**
2
- * Browse Command — Native browser automation via Chrome DevTools Protocol
3
- * Provides ref-based element model and token-efficient accessibility snapshots
4
- */
5
- import type { Command } from '../types.js';
6
- declare const browseCommand: Command;
1
+ declare const browseCommand: {
2
+ subcommands: import("../types.js").Command[];
3
+ name: string;
4
+ description: string;
5
+ aliases?: string[];
6
+ options?: import("@monoes/monobrowse/cli/types").CommandOption[];
7
+ examples?: import("@monoes/monobrowse/cli/types").CommandExample[];
8
+ action?: import("@monoes/monobrowse/cli/types").CommandAction;
9
+ hidden?: boolean;
10
+ };
7
11
  export default browseCommand;
8
12
  //# sourceMappingURL=browse.d.ts.map